[patch] zoned-2.3.28-G4, zone-allocator, highmem, bootmem fixes

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Sat, 13 Nov 1999 20:22:03 +0100 (CET)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--650352740-790050170-942520923=:4346
Content-Type: TEXT/PLAIN; charset=US-ASCII

Changes:

- implemented 'zone chains' zonelist_t and gfp_mask indexed zonelists[]
speedups (Linus' idea) to handle fallback zones. This should enable
advanced NUMA-style allocations as well. [fallback to different CPUs is
possible via changing build_zonelists().]

- <=16MB RAM boxes should boot just fine now.

- added page->zone for easier deallocation and generic cleanliness. This
also helps NUMA.

- cleaned up the page-allocator namespace, there are only two 'core'
page-allocation functions left: __alloc_pages() and __free_pages_ok().

- modules should compile again.

- we are now inlining the 'put_page_testzero()' part of __free_page_ok.
This is subtle as page->count for reserved pages is now 'rotating' -
this is fine though and lets us to put the rare PageReserved() branch
into __free_page_ok().

- cleaned up pgtable.h, split into lowlevel and highlevel parts, this
fixes dependencies in mm.h & misc.c.

- serial.c didnt clear freshly allocated bootmem - as a result now all
bootmem allocations are explicitly cleared, it's not performance
critical anyway.

- fixed code,data,initmem reporting.

- fixed boot task's swapper_pg_dir clearing

comments, reports welcome.

-- mingo

--650352740-790050170-942520923=:4346
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="zoned-2.3.28-G4"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9911132022030.4346@chiara.csoma.elte.hu>
Content-Description:
Content-Disposition: attachment; filename="zoned-2.3.28-G4"

LS0tIGxpbnV4L2ZzL2V4ZWMuYy5vcmlnCVNhdCBOb3YgMTMgMDU6NDY6MTIg
MTk5OQ0KKysrIGxpbnV4L2ZzL2V4ZWMuYwlTYXQgTm92IDEzIDA1OjQ2OjE3
IDE5OTkNCkBAIC0zNSw3ICszNSw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2hp
Z2htZW0uaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCi0jaW5j
bHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2Mu
aD4NCiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+DQogDQogI2lmZGVm
IENPTkZJR19LTU9EDQotLS0gbGludXgvZnMvYmluZm10X2VsZi5jLm9yaWcJ
U2F0IE5vdiAxMyAwNTo0OTo0MyAxOTk5DQorKysgbGludXgvZnMvYmluZm10
X2VsZi5jCVNhdCBOb3YgMTMgMDU6NDk6NDkgMTk5OQ0KQEAgLTMxLDcgKzMx
LDcgQEANCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KIA0KICNpbmNsdWRl
IDxhc20vdWFjY2Vzcy5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0K
KyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KIA0KICNpbmNsdWRlIDxsaW51
eC9jb25maWcuaD4NCiANCi0tLSBsaW51eC9pbml0L21haW4uYy5vcmlnCVNh
dCBOb3YgMTMgMDE6NTY6NDAgMTk5OQ0KKysrIGxpbnV4L2luaXQvbWFpbi5j
CVNhdCBOb3YgMTMgMDI6MTE6MjEgMTk5OQ0KQEAgLTQ3OSw3ICs0NzksNiBA
QA0KIAkJDQogCQlzaXplID0gcHJvZl9sZW4gKiBzaXplb2YodW5zaWduZWQg
aW50KSArIFBBR0VfU0laRS0xOw0KIAkJcHJvZl9idWZmZXIgPSAodW5zaWdu
ZWQgaW50ICopIGFsbG9jX2Jvb3RtZW0oc2l6ZSk7DQotCQltZW1zZXQocHJv
Zl9idWZmZXIsIDAsIHNpemUpOw0KIAl9DQogDQogCWttZW1fY2FjaGVfaW5p
dCgpOw0KLS0tIGxpbnV4L2tlcm5lbC9mb3JrLmMub3JpZwlTYXQgTm92IDEz
IDA1OjEwOjM0IDE5OTkNCisrKyBsaW51eC9rZXJuZWwvZm9yay5jCVNhdCBO
b3YgMTMgMDU6MTA6MzYgMTk5OQ0KQEAgLTE5LDYgKzE5LDcgQEANCiAjaW5j
bHVkZSA8bGludXgvdm1hbGxvYy5oPg0KIA0KICNpbmNsdWRlIDxhc20vcGd0
YWJsZS5oPg0KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KICNpbmNsdWRl
IDxhc20vdWFjY2Vzcy5oPg0KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQu
aD4NCiANCi0tLSBsaW51eC9rZXJuZWwva3N5bXMuYy5vcmlnCVNhdCBOb3Yg
MTMgMTE6MDU6MjcgMTk5OQ0KKysrIGxpbnV4L2tlcm5lbC9rc3ltcy5jCVNh
dCBOb3YgMTMgMTE6MDU6MjggMTk5OQ0KQEAgLTkyLDkgKzkyLDggQEANCiBF
WFBPUlRfU1lNQk9MKGV4aXRfc2lnaGFuZCk7DQogDQogLyogaW50ZXJuYWwg
a2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50ICovDQotRVhQT1JUX1NZTUJPTChf
X2dldF9mcmVlX3BhZ2VzKTsNCi1FWFBPUlRfU1lNQk9MKGZyZWVfcGFnZXMp
Ow0KLUVYUE9SVF9TWU1CT0woX19mcmVlX3BhZ2UpOw0KK0VYUE9SVF9TWU1C
T0woX19hbGxvY2F0ZV9wYWdlcyk7DQorRVhQT1JUX1NZTUJPTChfX2ZyZWVf
cGFnZXNfb2spOw0KIEVYUE9SVF9TWU1CT0woa21lbV9maW5kX2dlbmVyYWxf
Y2FjaGVwKTsNCiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfY3JlYXRlKTsN
CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZGVzdHJveSk7DQotLS0gbGlu
dXgvbW0vYm9vdG1lbS5jLm9yaWcJU2F0IE5vdiAxMyAwMTo1Njo0NiAxOTk5
DQorKysgbGludXgvbW0vYm9vdG1lbS5jCVNhdCBOb3YgMTMgMDk6MjQ6MzMg
MTk5OQ0KQEAgLTE5Niw3ICsxOTYsNyBAQA0KIAlmb3IgKGkgPSBzdGFydDsg
aSA8IHN0YXJ0K2FyZWFzaXplOyBpKyspDQogCQlpZiAodGVzdF9hbmRfc2V0
X2JpdChpLCBib290bWVtX21hcCkpDQogCQkJQlVHKCk7DQotDQorCW1lbXNl
dChyZXQsIDAsIHNpemUpOw0KIAlyZXR1cm4gcmV0Ow0KIH0NCiANCi0tLSBs
aW51eC9tbS9wYWdlX2FsbG9jLmMub3JpZwlTYXQgTm92IDEzIDAxOjU2OjQ2
IDE5OTkNCisrKyBsaW51eC9tbS9wYWdlX2FsbG9jLmMJU2F0IE5vdiAxMyAx
MDo1MzowNCAxOTk5DQpAQCAtMjYsNTcgKzI2LDE1IEBADQogaW50IG5yX2xy
dV9wYWdlczsNCiBMSVNUX0hFQUQobHJ1X2NhY2hlKTsNCiANCi0vKg0KLSAq
IEZyZWUgYXJlYSBtYW5hZ2VtZW50DQotICoNCi0gKiBUaGUgZnJlZV9hcmVh
X2xpc3QgYXJyYXlzIHBvaW50IHRvIHRoZSBxdWV1ZSBoZWFkcyBvZiB0aGUg
ZnJlZSBhcmVhcw0KLSAqIG9mIGRpZmZlcmVudCBzaXplcw0KLSAqLw0KLQ0K
LSNpZiBDT05GSUdfQVAxMDAwDQotLyogdGhlIEFQKyBuZWVkcyB0byBhbGxv
Y2F0ZSA4TUIgY29udGlndW91cywgYWxpZ25lZCBjaHVua3Mgb2YgcmFtDQot
ICAgZm9yIHRoZSByaW5nIGJ1ZmZlcnMgKi8NCi0jZGVmaW5lIE1BWF9PUkRF
UiAxMg0KLSNlbHNlDQotI2RlZmluZSBNQVhfT1JERVIgMTANCi0jZW5kaWYN
Ci0NCi10eXBlZGVmIHN0cnVjdCBmcmVlX2FyZWFfc3RydWN0IHsNCi0Jc3Ry
dWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7DQotCXVuc2lnbmVkIGludCAqIG1h
cDsNCi19IGZyZWVfYXJlYV90Ow0KLQ0KLSNkZWZpbmUgWk9ORV9ETUEJCTAN
Ci0jZGVmaW5lIFpPTkVfTk9STUFMCQkxDQotDQotI2lmZGVmIENPTkZJR19I
SUdITUVNDQotIyBkZWZpbmUgWk9ORV9ISUdITUVNCQkyDQotIyBkZWZpbmUg
TlJfWk9ORVMJCTMNCi0jZWxzZQ0KLSMgZGVmaW5lIE5SX1pPTkVTCQkyDQot
I2VuZGlmDQotDQotdHlwZWRlZiBzdHJ1Y3Qgem9uZV9zdHJ1Y3Qgew0KLQlz
cGlubG9ja190IGxvY2s7DQotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0Ow0KLQl1
bnNpZ25lZCBsb25nIHNpemU7DQotCWZyZWVfYXJlYV90IGZyZWVfYXJlYVtN
QVhfT1JERVJdOw0KLQ0KLQl1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7DQot
CXVuc2lnbmVkIGxvbmcgcGFnZXNfbG93LCBwYWdlc19oaWdoOw0KLQlpbnQg
bG93X29uX21lbW9yeTsNCi0JY2hhciAqIG5hbWU7DQotfSB6b25lX3Q7DQot
DQotc3RhdGljIHpvbmVfdCB6b25lc1tOUl9aT05FU10gPQ0KK3N0YXRpYyB6
b25lX3Qgem9uZXMgW01BWF9OUl9aT05FU10gPQ0KIAl7DQogCQl7IG5hbWU6
ICJETUEiIH0sDQogCQl7IG5hbWU6ICJOb3JtYWwiIH0sDQotI2lmZGVmIENP
TkZJR19ISUdITUVNDQogCQl7IG5hbWU6ICJIaWdoTWVtIiB9DQotI2VuZGlm
DQogCX07DQogDQorem9uZWxpc3RfdCB6b25lbGlzdHMgW05SX0dGUElOREVY
XTsNCisNCiAvKg0KICAqIEZyZWVfcGFnZSgpIGFkZHMgdGhlIHBhZ2UgdG8g
dGhlIGZyZWUgbGlzdHMuIFRoaXMgaXMgb3B0aW1pemVkIGZvcg0KICAqIGZh
c3Qgbm9ybWFsIGNhc2VzIChubyBlcnJvciBqdW1wcyB0YWtlbiBub3JtYWxs
eSkuDQpAQCAtMTA4LDI4ICs2NiwxMyBAQA0KICAqIEhpbnQ6IC1tYXNrID0g
MSt+bWFzaw0KICAqLw0KIA0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Bh
Z2VzX29rIChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBtYXBf
bnIsIHVuc2lnbmVkIGxvbmcgb3JkZXIpDQorc3RhdGljIGlubGluZSB2b2lk
IGFkZHF1ZXVlICh6b25lX3QgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLA0K
KwkJCQl1bnNpZ25lZCBsb25nIG1hcF9uciwgdW5zaWduZWQgbG9uZyBvcmRl
cikNCiB7DQotCXN0cnVjdCBmcmVlX2FyZWFfc3RydWN0ICphcmVhOw0KIAl1
bnNpZ25lZCBsb25nIGluZGV4LCBwYWdlX2lkeCwgbWFzaywgb2Zmc2V0Ow0K
KwlzdHJ1Y3QgZnJlZV9hcmVhX3N0cnVjdCAqYXJlYTsNCiAJdW5zaWduZWQg
bG9uZyBmbGFnczsNCiAJc3RydWN0IHBhZ2UgKmJ1ZGR5Ow0KLQl6b25lX3Qg
KnpvbmU7DQotCWludCBpOw0KLQ0KLQkvKg0KLQkgKiBXaGljaCB6b25lIGlz
IHRoaXMgcGFnZSBiZWxvbmdpbmcgdG8uDQotCSAqDQotCSAqIChOUl9aT05F
UyBpcyBsb3csIGFuZCB3ZSBkbyBub3Qgd2FudCAoeWV0KSB0byBpbnRyb2R1
Y2UNCi0JICogcHV0IHBhZ2UtPnpvbmUsIGl0IGluY3JlYXNlcyB0aGUgc2l6
ZSBvZiBtZW1fbWFwW10NCi0JICogdW5uZWNlc3NlcmlseS4gVGhpcyBzbWFs
bCBsb29wIGlzIGJhc2ljYWxseSBlcXVpdmFsZW50DQotCSAqIHRvIHRoZSBw
cmV2aW91cyAjaWZkZWYganVuZ2xlLCBzcGVlZC13aXNlLikNCi0JICovDQot
CWkgPSBOUl9aT05FUy0xOw0KLQl6b25lID0gem9uZXMgKyBpOw0KLQlmb3Ig
KCA7IGkgPj0gMDsgaS0tLCB6b25lLS0pDQotCQlpZiAobWFwX25yID49IHpv
bmUtPm9mZnNldCkNCi0JCQlicmVhazsNCiANCiAJbWFzayA9ICh+MFVMKSA8
PCBvcmRlcjsNCiAJb2Zmc2V0ID0gem9uZS0+b2Zmc2V0Ow0KQEAgLTE3OCwz
NiArMTIxLDM3IEBADQogCWNoYW5nZV9iaXQoKGluZGV4KSA+PiAoMSsob3Jk
ZXIpKSwgKGFyZWEpLT5tYXApDQogI2RlZmluZSBBRERSRVNTKHgpIChQQUdF
X09GRlNFVCArICgoeCkgPDwgUEFHRV9TSElGVCkpDQogDQotaW50IF9fZnJl
ZV9wYWdlIChzdHJ1Y3QgcGFnZSAqcGFnZSkNCit2b2lkIF9fZnJlZV9wYWdl
c19vayAoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb3JkZXIp
DQogew0KLQlpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSAmJiBwdXRfcGFnZV90
ZXN0emVybyhwYWdlKSkgew0KLQkJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkp
DQotCQkJUEFHRV9CVUcocGFnZSk7DQotCQlpZiAoUGFnZUxvY2tlZChwYWdl
KSkNCi0JCQlQQUdFX0JVRyhwYWdlKTsNCisJdW5zaWduZWQgbG9uZyBtYXBf
bnI7DQorCXpvbmVfdCAqem9uZTsNCiANCi0JCWZyZWVfcGFnZXNfb2socGFn
ZSwgcGFnZS1tZW1fbWFwLCAwKTsNCi0JCXJldHVybiAxOw0KLQl9DQotCXJl
dHVybiAwOw0KLX0NCisJLyoNCisJICogU3VidGxlLg0KKwkgKi8NCisJaWYg
KFBhZ2VSZXNlcnZlZChwYWdlKSkNCisJCXJldHVybjsNCiANCi1pbnQgZnJl
ZV9wYWdlcyAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG9y
ZGVyKQ0KLXsNCi0JdW5zaWduZWQgbG9uZyBtYXBfbnIgPSBNQVBfTlIoYWRk
cik7DQorCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKQ0KKwkJUEFHRV9CVUco
cGFnZSk7DQorCWlmIChQYWdlTG9ja2VkKHBhZ2UpKQ0KKwkJUEFHRV9CVUco
cGFnZSk7DQogDQotCWlmIChtYXBfbnIgPCBtYXhfbWFwbnIpIHsNCi0JCW1l
bV9tYXBfdCAqIG1hcCA9IG1lbV9tYXAgKyBtYXBfbnI7DQotCQlpZiAoIVBh
Z2VSZXNlcnZlZChtYXApICYmIHB1dF9wYWdlX3Rlc3R6ZXJvKG1hcCkpIHsN
Ci0JCQlpZiAoUGFnZVN3YXBDYWNoZShtYXApKQ0KLQkJCQlQQUdFX0JVRyht
YXApOw0KLQkJCWlmIChQYWdlTG9ja2VkKG1hcCkpDQotCQkJCVBBR0VfQlVH
KG1hcCk7DQotCQkJZnJlZV9wYWdlc19vayhtYXAsIG1hcF9uciwgb3JkZXIp
Ow0KLQkJCXJldHVybiAxOw0KLQkJfQ0KLQl9DQotCXJldHVybiAwOw0KKwkv
Kg0KKwkgKiBXaGljaCB6b25lIGRvZXMgdGhpcyBwYWdlIGJlbG9uZyB0by4N
CisJICoNCisJICogKE1BWF9OUl9aT05FUyBpcyBsb3csIGFuZCB3ZSBkbyBu
b3Qgd2FudCAoeWV0KSB0byBpbnRyb2R1Y2UNCisJICogcHV0IHBhZ2UtPnpv
bmUsIGl0IGluY3JlYXNlcyB0aGUgc2l6ZSBvZiBtZW1fbWFwW10NCisJICog
dW5uZWNlc3NlcmlseS4gVGhpcyBzbWFsbCBsb29wIGlzIGJhc2ljYWxseSBl
cXVpdmFsZW50DQorCSAqIHRvIHRoZSBwcmV2aW91cyAjaWZkZWYganVuZ2xl
LCBzcGVlZC13aXNlLikNCisJICovDQorCW1hcF9uciA9IHBhZ2UtbWVtX21h
cDsNCisJaWYgKG1hcF9uciA+PSBtYXhfbWFwbnIpDQorCQlCVUcoKTsNCisN
CisJem9uZSA9IHBhZ2UtPnpvbmU7DQorDQorCWFkZHF1ZXVlKHpvbmUsIHBh
Z2UsIG1hcF9uciwgb3JkZXIpOw0KIH0NCiANCiBzdGF0aWMgaW5saW5lIHVu
c2lnbmVkIGxvbmcgRVhQQU5EICh6b25lX3QgKnpvbmUsIHN0cnVjdCBwYWdl
ICptYXAsIHVuc2lnbmVkIGxvbmcgaW5kZXgsDQpAQCAtMjY4LDYgKzIxMiw5
IEBADQogCXJldHVybiBOVUxMOw0KIH0NCiANCisjZGVmaW5lIFpPTkVfQkFM
QU5DRUQoem9uZSkgXA0KKwkoKCh6b25lKS0+ZnJlZV9wYWdlcyA+ICh6b25l
KS0+cGFnZXNfbG93KSAmJiAoISh6b25lKS0+bG93X29uX21lbW9yeSkpDQor
DQogc3RhdGljIGlubGluZSBpbnQgYmFsYW5jZV9tZW1vcnkgKHpvbmVfdCAq
em9uZSwgaW50IGdmcF9tYXNrKQ0KIHsNCiAJaW50IGZyZWVkOw0KQEAgLTI4
Niw2ICsyMzMsMTQgQEANCiAJfQ0KIAl6b25lLT5sb3dfb25fbWVtb3J5ID0g
MTsNCiANCisJLyoNCisJICogSW4gdGhlIGF0b21pYyBhbGxvY2F0aW9uIGNh
c2Ugd2Ugb25seSAna2ljaycgdGhlDQorCSAqIHN0YXRlIG1hY2hpbmUsIGJ1
dCBkbyBub3QgdHJ5IHRvIGZyZWUgcGFnZXMNCisJICogb3Vyc2VsdmVzLg0K
KwkgKi8NCisJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkNCisJCXJl
dHVybiAxOw0KKw0KIAljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExPQzsN
CiAJZnJlZWQgPSB0cnlfdG9fZnJlZV9wYWdlcyhnZnBfbWFzayk7DQogCWN1
cnJlbnQtPmZsYWdzICY9IH5QRl9NRU1BTExPQzsNCkBAIC0yOTUsMTAgKzI1
MCwxNCBAQA0KIAlyZXR1cm4gMTsNCiB9DQogDQotc3RhdGljIGlubGluZSBz
dHJ1Y3QgcGFnZSAqIF9fZ2V0X3BhZ2VzICh6b25lX3QgKnpvbmUsIHVuc2ln
bmVkIGludCBnZnBfbWFzaywNCi0JCQl1bnNpZ25lZCBsb25nIG9yZGVyKQ0K
Ky8qDQorICogVGhpcyBpcyB0aGUgJ2hlYXJ0JyBvZiB0aGUgem9uZWQgYnVk
ZHkgYWxsb2NhdG9yOg0KKyAqLw0KK3N0cnVjdCBwYWdlICogX19hbGxvY19w
YWdlcyAoem9uZWxpc3RfdCAqem9uZWxpc3QsIHVuc2lnbmVkIGxvbmcgb3Jk
ZXIpDQogew0KKwl6b25lX3QgKip6b25lOw0KIAlzdHJ1Y3QgcGFnZSAqcGFn
ZTsNCisJaW50IGdmcF9tYXNrOw0KIA0KIAlpZiAob3JkZXIgPj0gTUFYX09S
REVSKQ0KIAkJZ290byBub3BhZ2U7DQpAQCAtMzA2LDI4ICsyNjUsMzEgQEAN
CiAJLyoNCiAJICogSWYgYW55b25lIGNhbGxzIGdmcCBmcm9tIGludGVycnVw
dHMgbm9uYXRvbWljYWxseSB0aGVuIGl0DQogCSAqIHdpbGwgc29vbmVyIG9y
IGxhdGVyIHRyaXBwZWQgdXAgYnkgYSBzY2hlZHVsZSgpLg0KLQkgKi8NCi0N
Ci0JLyoNCi0JICogSWYgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBjYWxsLCB3ZSdk
IGJldHRlcg0KLQkgKiBkbyBvdXIgYmVzdCB0byBqdXN0IGFsbG9jYXRlIHRo
aW5ncyB3aXRob3V0DQotCSAqIGZ1cnRoZXIgdGhvdWdodC4NCi0JICovDQot
CWlmICghKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpKQ0KLQkJaWYg
KCFiYWxhbmNlX21lbW9yeSh6b25lLCBnZnBfbWFzaykpDQotCQkJZ290byBu
b3BhZ2U7DQotCS8qDQorCSAqDQogCSAqIFdlIGFyZSBmYWxsaW5nIGJhY2sg
dG8gbG93ZXItbGV2ZWwgem9uZXMgaWYgYWxsb2NhdGlvbg0KLQkgKiBpbiBh
IGhpZ2hlciB6b25lIGZhaWxzLiBUaGlzIGFzc3VtZXMgYSBoaWVyYXJjaGlj
YWwNCi0JICogZGVwZW5kZW5jeSBiZXR3ZWVuIHpvbmVzLCB3aGljaCBpcyB0
cnVlIGN1cnJlbnRseS4gSWYNCi0JICogeW91IG5lZWQgc29tZXRoaW5nIGVs
c2UgdGhlbiBtb3ZlIHRoaXMgbG9vcCBvdXRzaWRlDQotCSAqIHRoaXMgZnVu
Y3Rpb24sIGludG8gdGhlIHpvbmUtc3BlY2lmaWMgYWxsb2NhdG9yLg0KKwkg
KiBpbiBhIGhpZ2hlciB6b25lIGZhaWxzLg0KIAkgKi8NCisJem9uZSA9IHpv
bmVsaXN0LT56b25lczsNCisJZ2ZwX21hc2sgPSB6b25lbGlzdC0+Z2ZwX21h
c2s7DQogCWRvIHsNCi0JCXBhZ2UgPSBybXF1ZXVlKHpvbmUsIG9yZGVyKTsN
CisJCWlmICghKCp6b25lKS0+c2l6ZSkNCisJCQlCVUcoKTsNCisJCS8qDQor
CQkgKiBJZiB0aGlzIGlzIGEgcmVjdXJzaXZlIGNhbGwsIHdlJ2QgYmV0dGVy
DQorCQkgKiBkbyBvdXIgYmVzdCB0byBqdXN0IGFsbG9jYXRlIHRoaW5ncyB3
aXRob3V0DQorCQkgKiBmdXJ0aGVyIHRob3VnaHQuDQorCQkgKi8NCisJCWlm
ICghKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpKQ0KKwkJCS8qDQor
CQkJICogZmFzdHBhdGgNCisJCQkgKi8NCisJCQlpZiAoIVpPTkVfQkFMQU5D
RUQoKnpvbmUpKQ0KKwkJCQlnb3RvIGJhbGFuY2U7DQorcmVhZHk6DQorCQlw
YWdlID0gcm1xdWV1ZSgqem9uZSwgb3JkZXIpOw0KIAkJaWYgKHBhZ2UpDQog
CQkJcmV0dXJuIHBhZ2U7DQotCX0gd2hpbGUgKHpvbmUtLSAhPSB6b25lcykg
Ow0KKwl9IHdoaWxlICgqKCsrem9uZSkpIDsNCiANCiAJLyoNCiAJICogSWYg
d2UgY2FuIHNjaGVkdWxlLCBkbyBzbywgYW5kIG1ha2Ugc3VyZSB0byB5aWVs
ZC4NCkBAIC0zNDEsMzcgKzMwMywxNCBAQA0KIA0KIG5vcGFnZToNCiAJcmV0
dXJuIE5VTEw7DQotfQ0KLQ0KLXN0YXRpYyBpbmxpbmUgem9uZV90ICogZ2Zw
X21hc2tfdG9fem9uZSAoaW50IGdmcF9tYXNrKQ0KLXsNCi0Jem9uZV90ICp6
b25lOw0KLQ0KLSNpZiBDT05GSUdfSElHSE1FTQ0KLQlpZiAoZ2ZwX21hc2sg
JiBfX0dGUF9ISUdITUVNKQ0KLQkJem9uZSA9IHpvbmVzICsgWk9ORV9ISUdI
TUVNOw0KLQllbHNlDQotI2VuZGlmDQotCQlpZiAoZ2ZwX21hc2sgJiBfX0dG
UF9ETUEpDQotCQkJem9uZSA9IHpvbmVzICsgWk9ORV9ETUE7DQotCQllbHNl
DQotCQkJem9uZSA9IHpvbmVzICsgWk9ORV9OT1JNQUw7DQotCXJldHVybiB6
b25lOw0KLX0NCi0NCi11bnNpZ25lZCBsb25nIF9fZ2V0X2ZyZWVfcGFnZXMg
KGludCBnZnBfbWFzaywgdW5zaWduZWQgbG9uZyBvcmRlcikNCi17DQotCXN0
cnVjdCBwYWdlICpwYWdlOw0KIA0KLQlwYWdlID0gX19nZXRfcGFnZXMoZ2Zw
X21hc2tfdG9fem9uZShnZnBfbWFzayksIGdmcF9tYXNrLCBvcmRlcik7DQot
CWlmICghcGFnZSkNCi0JCXJldHVybiAwOw0KLQlyZXR1cm4gcGFnZV9hZGRy
ZXNzKHBhZ2UpOw0KLX0NCi0NCi1zdHJ1Y3QgcGFnZSAqIGFsbG9jX3BhZ2Vz
IChpbnQgZ2ZwX21hc2ssIHVuc2lnbmVkIGxvbmcgb3JkZXIpDQotew0KLQly
ZXR1cm4gX19nZXRfcGFnZXMoZ2ZwX21hc2tfdG9fem9uZShnZnBfbWFzayks
IGdmcF9tYXNrLCBvcmRlcik7DQorLyoNCisgKiBUaGUgbWFpbiBjaHVuayBv
ZiB0aGUgYmFsYW5jaW5nIGNvZGUgaXMgaW4gdGhpcyBvZmZsaW5lIGJyYW5j
aDoNCisgKi8NCitiYWxhbmNlOg0KKwlpZiAoIWJhbGFuY2VfbWVtb3J5KCp6
b25lLCBnZnBfbWFzaykpDQorCQlnb3RvIG5vcGFnZTsNCisJZ290byByZWFk
eTsNCiB9DQogDQogLyoNCkBAIC0zODMsNyArMzIyLDcgQEANCiAJem9uZV90
ICp6b25lOw0KIA0KIAlzdW0gPSAwOw0KLQlmb3IgKHpvbmUgPSB6b25lczsg
em9uZSA8IHpvbmVzK05SX1pPTkVTOyB6b25lKyspDQorCWZvciAoem9uZSA9
IHpvbmVzOyB6b25lIDwgem9uZXMgKyBNQVhfTlJfWk9ORVM7IHpvbmUrKykN
CiAJCXN1bSArPSB6b25lLT5mcmVlX3BhZ2VzOw0KIAlyZXR1cm4gc3VtOw0K
IH0NCkBAIC00MjksNyArMzY4LDcgQEANCiAJCWZyZWVwYWdlcy5sb3csDQog
CQlmcmVlcGFnZXMuaGlnaCk7DQogDQotCWZvciAodHlwZSA9IDA7IHR5cGUg
PCBOUl9aT05FUzsgdHlwZSsrKSB7DQorCWZvciAodHlwZSA9IDA7IHR5cGUg
PCBNQVhfTlJfWk9ORVM7IHR5cGUrKykgew0KIAkJem9uZV90ICp6b25lID0g
em9uZXMgKyB0eXBlOw0KICAJCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOw0K
IA0KQEAgLTQ1NSw2ICszOTQsNTUgQEANCiAjZW5kaWYJDQogfQ0KIA0KKy8q
DQorICogQnVpbGRzIGFsbG9jYXRpb24gZmFsbGJhY2sgem9uZSBsaXN0cy4g
V2UgYXJlIGJhc2ljYWxseSByZWFkeQ0KKyAqIHRvIGRvIE5VTUEtYWxsb2Nh
dGlvbnMsIG9ubHkgdGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgbW9kaWZpZWQN
CisgKiBhbmQgdGhlIHpvbmVsaXN0cyBhcnJheSBiZSBtYWRlIHBlci1DUFUu
DQorICovDQorc3RhdGljIGlubGluZSB2b2lkIGJ1aWxkX3pvbmVsaXN0cyAo
dm9pZCkNCit7DQorCWludCBpLCBqLCBrOw0KKw0KKwlmb3IgKGkgPSAwOyBp
IDwgTlJfR0ZQSU5ERVg7IGkrKykgew0KKwkJem9uZWxpc3RfdCAqem9uZWxp
c3Q7DQorCQl6b25lX3QgKnpvbmU7DQorDQorCQl6b25lbGlzdCA9IHpvbmVs
aXN0cyArIGk7DQorCQltZW1zZXQoem9uZWxpc3QsIDAsIHNpemVvZigqem9u
ZWxpc3QpKTsNCisNCisJCXpvbmVsaXN0LT5nZnBfbWFzayA9IGk7DQorCQlq
ID0gMDsNCisJCWsgPSBaT05FX05PUk1BTDsNCisJCWlmIChpICYgX19HRlBf
SElHSE1FTSkNCisJCQlrID0gWk9ORV9ISUdITUVNOw0KKwkJaWYgKGkgJiBf
X0dGUF9ETUEpDQorCQkJayA9IFpPTkVfRE1BOw0KKw0KKwkJc3dpdGNoIChr
KSB7DQorCQkJZGVmYXVsdDoNCisJCQkJQlVHKCk7DQorCQkJLyoNCisJCQkg
KiBmYWxsdGhyb3VnaDoNCisJCQkgKi8NCisJCQljYXNlIFpPTkVfSElHSE1F
TToNCisJCQkJem9uZSA9IHpvbmVzICsgWk9ORV9ISUdITUVNOw0KKwkJCQlp
ZiAoem9uZS0+c2l6ZSkgew0KKyNpZm5kZWYgQ09ORklHX0hJR0hNRU0NCisJ
CQkJCUJVRygpOw0KKyNlbmRpZg0KKwkJCQkJem9uZWxpc3QtPnpvbmVzW2or
K10gPSB6b25lOw0KKwkJCQl9DQorCQkJY2FzZSBaT05FX05PUk1BTDoNCisJ
CQkJem9uZSA9IHpvbmVzICsgWk9ORV9OT1JNQUw7DQorCQkJCWlmICh6b25l
LT5zaXplKQ0KKwkJCQkJem9uZWxpc3QtPnpvbmVzW2orK10gPSB6b25lOw0K
KwkJCWNhc2UgWk9ORV9ETUE6DQorCQkJCXpvbmVsaXN0LT56b25lc1tqKytd
ID0gem9uZXMgKyBaT05FX0RNQTsNCisJCX0NCisJCXpvbmVsaXN0LT56b25l
c1tqKytdID0gTlVMTDsNCisJfSANCit9DQorDQogI2RlZmluZSBMT05HX0FM
SUdOKHgpICgoKHgpKyhzaXplb2YobG9uZykpLTEpJn4oKHNpemVvZihsb25n
KSktMSkpDQogDQogLyoNCkBAIC00NzEsNyArNDU5LDcgQEANCiAJdW5zaWdu
ZWQgaW50IHRvdGFscGFnZXMsIG9mZnNldDsNCiANCiAJdG90YWxwYWdlcyA9
IDA7DQotCWZvciAoaSA9IDA7IGkgPCBOUl9aT05FUzsgaSsrKQ0KKwlmb3Ig
KGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspDQogCQl0b3RhbHBhZ2Vz
ICs9IHpvbmVzX3NpemVbaV07DQogCXByaW50aygidG90YWxwYWdlczogJTA4
eFxuIiwgdG90YWxwYWdlcyk7DQogDQpAQCAtNDk4LDcgKzQ4Niw2IEBADQog
CSAqLw0KIAltYXBfc2l6ZSA9IHRvdGFscGFnZXMqc2l6ZW9mKHN0cnVjdCBw
YWdlKTsNCiAJbWVtX21hcCA9IChzdHJ1Y3QgcGFnZSAqKSBhbGxvY19ib290
bWVtKG1hcF9zaXplKTsNCi0JbWVtc2V0KG1lbV9tYXAsIDAsIG1hcF9zaXpl
KTsNCiANCiAJLyoNCiAJICogSW5pdGlhbGx5IGFsbCBwYWdlcyBhcmUgcmVz
ZXJ2ZWQgLSBmcmVlIG9uZXMgYXJlIGZyZWVkDQpAQCAtNTE0LDE4ICs1MDEs
MjcgQEANCiAJfQ0KIA0KIAlvZmZzZXQgPSAwOwkNCi0JZm9yIChqID0gMDsg
aiA8IE5SX1pPTkVTOyBqKyspIHsNCisJZm9yIChqID0gMDsgaiA8IE1BWF9O
Ul9aT05FUzsgaisrKSB7DQogCQl6b25lX3QgKnpvbmUgPSB6b25lcyArIGo7
DQogCQl1bnNpZ25lZCBsb25nIG1hc2sgPSAtMTsNCiAJCXVuc2lnbmVkIGxv
bmcgc2l6ZTsNCiANCiAJCXNpemUgPSB6b25lc19zaXplW2pdOw0KKwkJcHJp
bnRrKCJ6b25lKCVsZCk6ICVsZCBwYWdlcy5cbiIsIGosIHNpemUpOw0KIAkJ
em9uZS0+c2l6ZSA9IHNpemU7DQorCQlpZiAoIXNpemUpDQorCQkJY29udGlu
dWU7DQorDQogCQl6b25lLT5vZmZzZXQgPSBvZmZzZXQ7DQogCQl6b25lLT5w
YWdlc19sb3cgPSBmcmVlcGFnZXMubG93Ow0KIAkJem9uZS0+cGFnZXNfaGln
aCA9IGZyZWVwYWdlcy5oaWdoOw0KIAkJem9uZS0+bG93X29uX21lbW9yeSA9
IDA7DQogDQorCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7DQorCQkJ
c3RydWN0IHBhZ2UgKnBhZ2UgPSBtZW1fbWFwICsgb2Zmc2V0ICsgaTsNCisJ
CQlwYWdlLT56b25lID0gem9uZTsNCisJCX0NCisNCiAJCW9mZnNldCArPSBz
aXplOw0KIAkJZm9yIChpID0gMDsgaSA8IE1BWF9PUkRFUjsgaSsrKSB7DQog
CQkJdW5zaWduZWQgbG9uZyBiaXRtYXBfc2l6ZTsNCkBAIC01NDEsNCArNTM3
LDUgQEANCiAJCQltZW1zZXQoKHZvaWQgKikgbWFwLCAwLCBiaXRtYXBfc2l6
ZSk7DQogCQl9DQogCX0NCisJYnVpbGRfem9uZWxpc3RzKCk7DQogfQ0KLS0t
IGxpbnV4L21tL21wcm90ZWN0LmMub3JpZwlTYXQgTm92IDEzIDA1OjM5OjEx
IDE5OTkNCisrKyBsaW51eC9tbS9tcHJvdGVjdC5jCVNhdCBOb3YgMTMgMDU6
NDQ6MzMgMTk5OQ0KQEAgLTksNyArOSw3IEBADQogI2luY2x1ZGUgPGxpbnV4
L21tYW4uaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCi0jaW5j
bHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2Mu
aD4NCiANCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX3B0ZV9yYW5nZShw
bWRfdCAqIHBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLA0KIAl1bnNpZ25l
ZCBsb25nIHNpemUsIHBncHJvdF90IG5ld3Byb3QpDQotLS0gbGludXgvbW0v
bW1hcC5jLm9yaWcJU2F0IE5vdiAxMyAwNTo0Mzo1NSAxOTk5DQorKysgbGlu
dXgvbW0vbW1hcC5jCVNhdCBOb3YgMTMgMDU6NDM6NTkgMTk5OQ0KQEAgLTE0
LDcgKzE0LDcgQEANCiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPg0KIA0KICNp
bmNsdWRlIDxhc20vdWFjY2Vzcy5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJs
ZS5oPg0KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KIA0KIC8qIGRlc2Ny
aXB0aW9uIG9mIGVmZmVjdHMgb2YgbWFwcGluZyB0eXBlIGFuZCBwcm90IGlu
IGN1cnJlbnQgaW1wbGVtZW50YXRpb24uDQogICogdGhpcyBpcyBkdWUgdG8g
dGhlIGxpbWl0ZWQgeDg2IHBhZ2UgcHJvdGVjdGlvbiBoYXJkd2FyZS4gIFRo
ZSBleHBlY3RlZA0KLS0tIGxpbnV4L21tL21lbW9yeS5jLm9yaWcJU2F0IE5v
diAxMyAwNTowMjoyNyAxOTk5DQorKysgbGludXgvbW0vbWVtb3J5LmMJU2F0
IE5vdiAxMyAwNTo0NDoyOSAxOTk5DQpAQCAtMzksMTQgKzM5LDE0IEBADQog
I2luY2x1ZGUgPGxpbnV4L21tLmg+DQogI2luY2x1ZGUgPGxpbnV4L21tYW4u
aD4NCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPg0KLSNpbmNsdWRlIDxsaW51
eC9wYWdlbWFwLmg+DQogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+DQog
I2luY2x1ZGUgPGxpbnV4L3N3YXBjdGwuaD4NCiAjaW5jbHVkZSA8bGludXgv
aW9idWYuaD4NCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCisjaW5jbHVk
ZSA8YXNtL3BnYWxsb2MuaD4NCiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5o
Pg0KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+DQogDQotI2luY2x1ZGUg
PGFzbS91YWNjZXNzLmg+DQotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+DQog
DQogdW5zaWduZWQgbG9uZyBtYXhfbWFwbnIgPSAwOw0KIHVuc2lnbmVkIGxv
bmcgbnVtX3BoeXNwYWdlcyA9IDA7DQotLS0gbGludXgvbW0vZmlsZW1hcC5j
Lm9yaWcJU2F0IE5vdiAxMyAwNTo0Mjo0MCAxOTk5DQorKysgbGludXgvbW0v
ZmlsZW1hcC5jCVNhdCBOb3YgMTMgMDU6NDI6NDYgMTk5OQ0KQEAgLTIzLDcg
KzIzLDcgQEANCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KICNpbmNsdWRl
IDxsaW51eC9tbS5oPg0KIA0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0K
KyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KICNpbmNsdWRlIDxhc20vdWFj
Y2Vzcy5oPg0KIA0KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+DQotLS0g
bGludXgvbW0vbXJlbWFwLmMub3JpZwlTYXQgTm92IDEzIDA1OjA4OjEwIDE5
OTkNCisrKyBsaW51eC9tbS9tcmVtYXAuYwlTYXQgTm92IDEzIDA1OjQ0OjM1
IDE5OTkNCkBAIC0xMSw3ICsxMSw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3N3
YXAuaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCi0jaW5jbHVk
ZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4N
CiANCiBleHRlcm4gaW50IHZtX2Vub3VnaF9tZW1vcnkobG9uZyBwYWdlcyk7
DQogDQotLS0gbGludXgvbW0vdm1hbGxvYy5jLm9yaWcJU2F0IE5vdiAxMyAw
NTowNzo0MiAxOTk5DQorKysgbGludXgvbW0vdm1hbGxvYy5jCVNhdCBOb3Yg
MTMgMDU6MDc6NDkgMTk5OQ0KQEAgLTksNiArOSw3IEBADQogI2luY2x1ZGUg
PGxpbnV4L3ZtYWxsb2MuaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3Mu
aD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4NCiANCiBzdHJ1Y3Qgdm1f
c3RydWN0ICogdm1saXN0ID0gTlVMTDsNCiANCi0tLSBsaW51eC9tbS9zbGFi
LmMub3JpZwlTYXQgTm92IDEzIDA4OjA5OjQ4IDE5OTkNCisrKyBsaW51eC9t
bS9zbGFiLmMJU2F0IE5vdiAxMyAwODoxMDo0NiAxOTk5DQpAQCAtMTA0Mywy
MCArMTA0MywxMiBAQA0KIGludA0KIGttZW1fY2FjaGVfc2hyaW5rKGttZW1f
Y2FjaGVfdCAqY2FjaGVwKQ0KIHsNCi0JaWYgKCFjYWNoZXApIHsNCi0JCXBy
aW50ayhLRVJOX0VSUiAia21lbV9zaHJpbms6IE5VTEwgcHRyXG4iKTsNCi0J
CXJldHVybiAyOw0KLQl9DQotCWlmIChpbl9pbnRlcnJ1cHQoKSkgew0KLQkJ
cHJpbnRrKEtFUk5fRVJSICJrbWVtX3NocmluazogQ2FsbGVkIGR1cmluZyBp
bnQgLSAlc1xuIiwgY2FjaGVwLT5jX25hbWUpOw0KLQkJcmV0dXJuIDI7DQot
CX0NCi0NCi0JaWYgKCFpc19jaGFpbmVkX2ttZW1fY2FjaGUoY2FjaGVwKSkg
ew0KLQkJcHJpbnRrKEtFUk5fRVJSICJrbWVtX3NocmluazogSW52YWxpZCBj
YWNoZSBhZGRyICVwXG4iLA0KLQkJICAgICAgIGNhY2hlcCk7DQotCQlyZXR1
cm4gMjsNCi0JfQ0KKwlpZiAoIWNhY2hlcCkNCisJCUJVRygpOw0KKwlpZiAo
aW5faW50ZXJydXB0KCkpDQorCQlCVUcoKTsNCisJaWYgKCFpc19jaGFpbmVk
X2ttZW1fY2FjaGUoY2FjaGVwKSkNCisJCUJVRygpOw0KIA0KIAlyZXR1cm4g
X19rbWVtX2NhY2hlX3NocmluayhjYWNoZXApOw0KIH0NCi0tLSBsaW51eC9p
bmNsdWRlL2xpbnV4L21tLmgub3JpZwlTYXQgTm92IDEzIDAyOjM4OjM5IDE5
OTkNCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L21tLmgJU2F0IE5vdiAxMyAx
MDozNjoyMSAxOTk5DQpAQCAtMTYsNiArMTYsNyBAQA0KIGV4dGVybiBpbnQg
cGFnZV9jbHVzdGVyOw0KIA0KICNpbmNsdWRlIDxhc20vcGFnZS5oPg0KKyNp
bmNsdWRlIDxhc20vcGd0YWJsZS5oPg0KICNpbmNsdWRlIDxhc20vYXRvbWlj
Lmg+DQogDQogLyoNCkBAIC0xMTgsNiArMTE5LDggQEANCiAJdW5zaWduZWQg
bG9uZyB2YWw7DQogfSBzd3BfZW50cnlfdDsNCiANCitzdHJ1Y3Qgem9uZV9z
dHJ1Y3Q7DQorDQogLyoNCiAgKiBUcnkgdG8ga2VlcCB0aGUgbW9zdCBjb21t
b25seSBhY2Nlc3NlZCBmaWVsZHMgaW4gc2luZ2xlIGNhY2hlIGxpbmVzDQog
ICogaGVyZSAoMTYgYnl0ZXMgb3IgZ3JlYXRlcikuICBUaGlzIG9yZGVyaW5n
IHNob3VsZCBiZSBwYXJ0aWN1bGFybHkNCkBAIC0xMjcsNyArMTMwLDYgQEAN
CiAgKiBpcyB1c2VkIGZvciBsaW5lYXIgc2VhcmNoZXMgKGVnLiBjbG9jayBh
bGdvcml0aG0gc2NhbnMpLiANCiAgKi8NCiB0eXBlZGVmIHN0cnVjdCBwYWdl
IHsNCi0JLyogdGhlc2UgbXVzdCBiZSBmaXJzdCAoZnJlZSBhcmVhIGhhbmRs
aW5nKSAqLw0KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQogCXN0cnVjdCBh
ZGRyZXNzX3NwYWNlICptYXBwaW5nOw0KIAl1bnNpZ25lZCBsb25nIGluZGV4
Ow0KQEAgLTEzOSw2ICsxNDEsNyBAQA0KIAlzdHJ1Y3QgcGFnZSAqKnBwcmV2
X2hhc2g7DQogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJ1ZmZlcnM7DQogCXVu
c2lnbmVkIGxvbmcgdmlydHVhbDsgLyogbm9uemVybyBpZiBrbWFwcGVkICov
DQorCXN0cnVjdCB6b25lX3N0cnVjdCAqem9uZTsNCiB9IG1lbV9tYXBfdDsN
CiANCiAjZGVmaW5lIGdldF9wYWdlKHApCQlhdG9taWNfaW5jKCYocCktPmNv
dW50KQ0KQEAgLTI4MywxOSArMjg2LDEwOSBAQA0KIGV4dGVybiBtZW1fbWFw
X3QgKiBtZW1fbWFwOw0KIA0KIC8qDQotICogVGhpcyBpcyB0aW1pbmctY3Jp
dGljYWwgLSBtb3N0IG9mIHRoZSB0aW1lIGluIGdldHRpbmcgYSBuZXcgcGFn
ZQ0KLSAqIGdvZXMgdG8gY2xlYXJpbmcgdGhlIHBhZ2UuIElmIHlvdSB3YW50
IGEgcGFnZSB3aXRob3V0IHRoZSBjbGVhcmluZw0KLSAqIG92ZXJoZWFkLCBq
dXN0IHVzZSBfX2dldF9mcmVlX3BhZ2UoKSBkaXJlY3RseS4uDQotICoNCi0g
KiBXZSBoYXZlIHR3byBhbGxvY2F0aW9uIG5hbWVzcGFjZXMgLSB0aGUgKmdl
dCpwYWdlKigpIHZhcmlhbnRzDQotICogcmV0dXJuIHZpcnR1YWwga2VybmVs
IGFkZHJlc3NlcyB0byB0aGUgYWxsb2NhdGVkIHBhZ2UocyksIHRoZQ0KLSAq
IGFsbG9jX3BhZ2UqKCkgdmFyaWFudHMgcmV0dXJuICdzdHJ1Y3QgcGFnZSAq
Jy4NCi0gKi8NCi0jZGVmaW5lIF9fZ2V0X2ZyZWVfcGFnZShnZnBfbWFzaykg
X19nZXRfZnJlZV9wYWdlcygoZ2ZwX21hc2spLDApDQotI2RlZmluZSBfX2dl
dF9kbWFfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKSBfX2dldF9mcmVlX3BhZ2Vz
KChnZnBfbWFzaykgfCBHRlBfRE1BLChvcmRlcikpDQotZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgRkFTVENBTEwoX19nZXRfZnJlZV9wYWdlcyhpbnQgZ2ZwX21h
c2ssIHVuc2lnbmVkIGxvbmcgb3JkZXIpKTsNCi1leHRlcm4gc3RydWN0IHBh
Z2UgKiBGQVNUQ0FMTChhbGxvY19wYWdlcyhpbnQgZ2ZwX21hc2ssIHVuc2ln
bmVkIGxvbmcgb3JkZXIpKTsNCi0jZGVmaW5lIGFsbG9jX3BhZ2UoZ2ZwX21h
c2spIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKQ0KKyAqIEZyZWUgbWVtb3J5
IG1hbmFnZW1lbnQgLSB6b25lZCBidWRkeSBhbGxvY2F0b3IuDQorICovDQor
DQorI2lmIENPTkZJR19BUDEwMDANCisvKiB0aGUgQVArIG5lZWRzIHRvIGFs
bG9jYXRlIDhNQiBjb250aWd1b3VzLCBhbGlnbmVkIGNodW5rcyBvZiByYW0N
CisgICBmb3IgdGhlIHJpbmcgYnVmZmVycyAqLw0KKyNkZWZpbmUgTUFYX09S
REVSIDEyDQorI2Vsc2UNCisjZGVmaW5lIE1BWF9PUkRFUiAxMA0KKyNlbmRp
Zg0KKw0KK3R5cGVkZWYgc3RydWN0IGZyZWVfYXJlYV9zdHJ1Y3Qgew0KKwlz
dHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsNCisJdW5zaWduZWQgaW50ICog
bWFwOw0KK30gZnJlZV9hcmVhX3Q7DQorDQordHlwZWRlZiBzdHJ1Y3Qgem9u
ZV9zdHJ1Y3Qgew0KKwkvKg0KKwkgKiBDb21tb25seSBhY2Nlc3NlZCBmaWVs
ZHM6DQorCSAqLw0KKwlzcGlubG9ja190IGxvY2s7DQorCXVuc2lnbmVkIGxv
bmcgb2Zmc2V0Ow0KKwl1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7DQorCWlu
dCBsb3dfb25fbWVtb3J5Ow0KKwl1bnNpZ25lZCBsb25nIHBhZ2VzX2xvdywg
cGFnZXNfaGlnaDsNCisNCisJLyoNCisJICogZnJlZSBhcmVhcyBvZiBkaWZm
ZXJlbnQgc2l6ZXMNCisJICovDQorCWZyZWVfYXJlYV90IGZyZWVfYXJlYVtN
QVhfT1JERVJdOw0KKw0KKwkvKg0KKwkgKiByYXJlbHkgdXNlZCBmaWVsZHM6
DQorCSAqLw0KKwljaGFyICogbmFtZTsNCisJdW5zaWduZWQgbG9uZyBzaXpl
Ow0KK30gem9uZV90Ow0KKw0KKyNkZWZpbmUgWk9ORV9ETUEJCTANCisjZGVm
aW5lIFpPTkVfTk9STUFMCQkxDQorI2RlZmluZSBaT05FX0hJR0hNRU0JCTIN
CisNCisvKg0KKyAqIE5VTUEgYXJjaGl0ZWN0dXJlcyB3aWxsIGhhdmUgbW9y
ZToNCisgKi8NCisjZGVmaW5lIE1BWF9OUl9aT05FUwkJMw0KKw0KKy8qDQor
ICogT25lIGFsbG9jYXRpb24gcmVxdWVzdCBvcGVyYXRlcyBvbiBhIHpvbmVs
aXN0LiBBIHpvbmVsaXN0DQorICogaXMgYSBsaXN0IG9mIHpvbmVzLCB0aGUg
Zmlyc3Qgb25lIGlzIHRoZSAnZ29hbCcgb2YgdGhlDQorICogYWxsb2NhdGlv
biwgdGhlIG90aGVyIHpvbmVzIGFyZSBmYWxsYmFjayB6b25lcywgaW4gZGVj
cmVhc2luZw0KKyAqIHByaW9yaXR5LiBPbiBOVU1BIHdlIHdhbnQgdG8gZmFs
bCBiYWNrIG9uIG90aGVyIENQVSdzIHpvbmVzDQorICogYXMgd2VsbC4NCisg
Kg0KKyAqIFJpZ2h0IG5vdyBhIHpvbmVsaXN0IHRha2VzIHVwIGxlc3MgdGhh
biBhIGNhY2hlbGluZS4gV2UgbmV2ZXINCisgKiBtb2RpZnkgaXQgYXBhcnQg
ZnJvbSBib290LXVwLCBhbmQgb25seSBhIGZldyBpbmRpY2VzIGFyZSB1c2Vk
LA0KKyAqIHNvIGRlc3BpdGUgdGhlIHpvbmVsaXN0IHRhYmxlIGJlaW5nIHJl
bGF0aXZlbHkgYmlnLCB0aGUgY2FjaGUNCisgKiBmb290cHJpbnQgb2YgdGhp
cyBjb25zdHJ1Y3QgaXMgdmVyeSBzbWFsbC4NCisgKi8NCit0eXBlZGVmIHN0
cnVjdCB6b25lbGlzdF9zdHJ1Y3Qgew0KKwl6b25lX3QgKiB6b25lcyBbTUFY
X05SX1pPTkVTKzFdOyAvLyBOVUxMIGRlbGltaXRlZA0KKwlpbnQgZ2ZwX21h
c2s7DQorfSB6b25lbGlzdF90Ow0KKw0KKyNkZWZpbmUgTlJfR0ZQSU5ERVgJ
CTB4MTAwDQorDQorZXh0ZXJuIHpvbmVsaXN0X3Qgem9uZWxpc3RzIFtOUl9H
RlBJTkRFWF07DQorDQorLyoNCisgKiBUaGVyZSBpcyBvbmx5IG9uZSBwYWdl
LWFsbG9jYXRvciBmdW5jdGlvbiwgYW5kIHR3byBtYWluIG5hbWVzcGFjZXMg
dG8NCisgKiBpdC4gVGhlIGFsbG9jX3BhZ2UqKCkgdmFyaWFudHMgcmV0dXJu
ICdzdHJ1Y3QgcGFnZSAqJyBhbmQgYXMgc3VjaA0KKyAqIGNhbiBhbGxvY2F0
ZSBoaWdobWVtIHBhZ2VzLCB0aGUgKmdldCpwYWdlKigpIHZhcmlhbnRzIHJl
dHVybg0KKyAqIHZpcnR1YWwga2VybmVsIGFkZHJlc3NlcyB0byB0aGUgYWxs
b2NhdGVkIHBhZ2UocykuDQorICovDQorZXh0ZXJuIHN0cnVjdCBwYWdlICog
RkFTVENBTEwoX19hbGxvY19wYWdlcyh6b25lbGlzdF90ICp6b25lbGlzdCwg
dW5zaWduZWQgbG9uZyBvcmRlcikpOw0KKw0KK2V4dGVybiBpbmxpbmUgc3Ry
dWN0IHBhZ2UgKiBhbGxvY19wYWdlcyhpbnQgZ2ZwX21hc2ssIHVuc2lnbmVk
IGxvbmcgb3JkZXIpDQorew0KKwlzdHJ1Y3QgcGFnZSAqX19yZXQ7DQorCWlm
ICh6b25lbGlzdHNbZ2ZwX21hc2tdLmdmcF9tYXNrICE9IChnZnBfbWFzaykp
DQorCQlCVUcoKTsNCisJX19yZXQgPSBfX2FsbG9jX3BhZ2VzKHpvbmVsaXN0
cysoZ2ZwX21hc2spLCBvcmRlcik7DQorCXJldHVybiBfX3JldDsNCit9DQor
DQorI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBcDQorCQlhbGxvY19w
YWdlcyhnZnBfbWFzaywgMCkNCisNCitleHRlcm4gaW5saW5lIHVuc2lnbmVk
IGxvbmcgX19nZXRfZnJlZV9wYWdlcyAoaW50IGdmcF9tYXNrLCB1bnNpZ25l
ZCBsb25nIG9yZGVyKQ0KK3sNCisJc3RydWN0IHBhZ2UgKiBwYWdlOw0KKw0K
KwlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTsNCisJaWYg
KCFwYWdlKQ0KKwkJcmV0dXJuIDA7DQorCXJldHVybiBwYWdlX2FkZHJlc3Mo
cGFnZSk7DQorfQ0KKw0KKyNkZWZpbmUgX19nZXRfZnJlZV9wYWdlKGdmcF9t
YXNrKSBcDQorCQlfX2dldF9mcmVlX3BhZ2VzKChnZnBfbWFzayksMCkNCisN
CisjZGVmaW5lIF9fZ2V0X2RtYV9wYWdlcyhnZnBfbWFzaywgb3JkZXIpIFwN
CisJCV9fZ2V0X2ZyZWVfcGFnZXMoKGdmcF9tYXNrKSB8IEdGUF9ETUEsKG9y
ZGVyKSkNCiANCiBleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3pl
cm9lZF9wYWdlKGludCBnZnBfbWFzaykNCiB7DQpAQCAtMzEyLDExICs0MDUs
MjkgQEANCiAgKi8NCiAjZGVmaW5lIGdldF9mcmVlX3BhZ2UgZ2V0X3plcm9l
ZF9wYWdlDQogDQotLyogbWVtb3J5LmMgJiBzd2FwLmMqLw0KKy8qDQorICog
VGhlcmUgaXMgb25seSBvbmUgJ2NvcmUnIHBhZ2UtZnJlZWluZyBmdW5jdGlv
bi4NCisgKi8NCitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX2ZyZWVfcGFnZXNf
b2soc3RydWN0IHBhZ2UgKiBwYWdlLCB1bnNpZ25lZCBsb25nIG9yZGVyKSk7
DQorDQorZXh0ZXJuIGlubGluZSB2b2lkIF9fZnJlZV9wYWdlcyhzdHJ1Y3Qg
cGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvcmRlcikNCit7DQorCWlmICgh
cHV0X3BhZ2VfdGVzdHplcm8ocGFnZSkpDQorCQlyZXR1cm47DQorCV9fZnJl
ZV9wYWdlc19vayhwYWdlLCBvcmRlcik7DQorfQ0KKw0KKyNkZWZpbmUgX19m
cmVlX3BhZ2UocGFnZSkgX19mcmVlX3BhZ2VzKHBhZ2UsIDApDQorDQorZXh0
ZXJuIGlubGluZSB2b2lkIGZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBhZGRy
LCB1bnNpZ25lZCBsb25nIG9yZGVyKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBt
YXBfbnIgPSBNQVBfTlIoYWRkcik7DQorDQorCWlmIChtYXBfbnIgPCBtYXhf
bWFwbnIpDQorCQlfX2ZyZWVfcGFnZXMobWVtX21hcCArIG1hcF9uciwgb3Jk
ZXIpOw0KK30NCiANCiAjZGVmaW5lIGZyZWVfcGFnZShhZGRyKSBmcmVlX3Bh
Z2VzKChhZGRyKSwwKQ0KLWV4dGVybiBpbnQgRkFTVENBTEwoZnJlZV9wYWdl
cyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgb3JkZXIpKTsN
Ci1leHRlcm4gaW50IEZBU1RDQUxMKF9fZnJlZV9wYWdlKHN0cnVjdCBwYWdl
ICopKTsNCiANCiBleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXModm9pZCk7
DQogZXh0ZXJuIHN0cnVjdCBwYWdlICogcHV0X2RpcnR5X3BhZ2Uoc3RydWN0
IHRhc2tfc3RydWN0ICogdHNrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwNCkBAIC0z
OTgsNyArNTA5LDcgQEANCiAjZGVmaW5lIEdGUF9ETUEJCV9fR0ZQX0RNQQ0K
IA0KIC8qIEZsYWcgLSBpbmRpY2F0ZXMgdGhhdCB0aGUgYnVmZmVyIGNhbiBi
ZSB0YWtlbiBmcm9tIGhpZ2ggbWVtb3J5IHdoaWNoIGlzIG5vdA0KLSAgIGRp
cmVjdGx5IGFkZHJlc3NhYmxlIGJ5IHRoZSBrZXJuZWwgKi8NCisgICBwZXJt
YW5lbnRseSBtYXBwZWQgYnkgdGhlIGtlcm5lbCAqLw0KIA0KICNkZWZpbmUg
R0ZQX0hJR0hNRU0JX19HRlBfSElHSE1FTQ0KIA0KQEAgLTQ0Niw3ICs1NTcs
NiBAQA0KICNkZWZpbmUgdm1saXN0X2FjY2Vzc191bmxvY2sobW0pCXNwaW5f
dW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKQ0KICNkZWZpbmUgdm1saXN0
X21vZGlmeV9sb2NrKG1tKQkJdm1saXN0X2FjY2Vzc19sb2NrKG1tKQ0KICNk
ZWZpbmUgdm1saXN0X21vZGlmeV91bmxvY2sobW0pCXZtbGlzdF9hY2Nlc3Nf
dW5sb2NrKG1tKQ0KLQ0KIA0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovDQog
DQotLS0gbGludXgvaW5jbHVkZS9saW51eC9oaWdobWVtLmgub3JpZwlTYXQg
Tm92IDEzIDA1OjM5OjM5IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4
L2hpZ2htZW0uaAlTYXQgTm92IDEzIDEwOjM2OjIzIDE5OTkNCkBAIC0zLDcg
KzMsNyBAQA0KIA0KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4NCiAjaW5j
bHVkZSA8bGludXgvcGFnZW1hcC5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJs
ZS5oPg0KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KIA0KICNpZmRlZiBD
T05GSUdfSElHSE1FTQ0KIA0KLS0tIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYv
cGd0YWJsZS0zbGV2ZWwuaC5vcmlnCVNhdCBOb3YgMTMgMDE6NTY6NDEgMTk5
OQ0KKysrIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwu
aAlTYXQgTm92IDEzIDA1OjA1OjAxIDE5OTkNCkBAIC0yNywxMSArMjcsMTEg
QEANCiAjZGVmaW5lIFBUUlNfUEVSX1BURQk1MTINCiANCiAjZGVmaW5lIHB0
ZV9FUlJPUihlKSBcDQotCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTAxNkx4
LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQ0KKwlwcmlu
dGsoIiVzOiVkOiBiYWQgcHRlICVwKCUwMTZMeCkuXG4iLCBfX0ZJTEVfXywg
X19MSU5FX18sICYoZSksIHB0ZV92YWwoZSkpDQogI2RlZmluZSBwbWRfRVJS
T1IoZSkgXA0KLQlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwMTZMeC5cbiIs
IF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkNCisJcHJpbnRrKCIl
czolZDogYmFkIHBtZCAlcCglMDE2THgpLlxuIiwgX19GSUxFX18sIF9fTElO
RV9fLCAmKGUpLCBwbWRfdmFsKGUpKQ0KICNkZWZpbmUgcGdkX0VSUk9SKGUp
IFwNCi0JcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDE2THguXG4iLCBfX0ZJ
TEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpDQorCXByaW50aygiJXM6JWQ6
IGJhZCBwZ2QgJXAoJTAxNkx4KS5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywg
JihlKSwgcGdkX3ZhbChlKSkNCiANCiAvKg0KICAqIFN1YnRsZSwgaW4gUEFF
IG1vZGUgd2UgY2Fubm90IGhhdmUgemVyb2VzIGluIHRoZSB0b3AgbGV2ZWwN
CkBAIC02Myw2MiArNjMsNSBAQA0KIC8qIEZpbmQgYW4gZW50cnkgaW4gdGhl
IHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8NCiAjZGVmaW5lIHBtZF9v
ZmZzZXQoZGlyLCBhZGRyZXNzKSAoKHBtZF90ICopIHBnZF9wYWdlKCooZGly
KSkgKyBcDQogCQkJX19wbWRfb2Zmc2V0KGFkZHJlc3MpKQ0KLQ0KLWV4dGVy
biBfX2lubGluZV9fIHBtZF90ICpnZXRfcG1kX3Nsb3codm9pZCkNCi17DQot
CXBtZF90ICpyZXQgPSAocG1kX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tF
Uk5FTCk7DQotDQotCWlmIChyZXQpDQotCQltZW1zZXQocmV0LCAwLCBQQUdF
X1NJWkUpOw0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi1leHRlcm4gX19pbmxp
bmVfXyBwbWRfdCAqZ2V0X3BtZF9mYXN0KHZvaWQpDQotew0KLQl1bnNpZ25l
ZCBsb25nICpyZXQ7DQotDQotCWlmICgocmV0ID0gcG1kX3F1aWNrbGlzdCkg
IT0gTlVMTCkgew0KLQkJcG1kX3F1aWNrbGlzdCA9ICh1bnNpZ25lZCBsb25n
ICopKCpyZXQpOw0KLQkJcmV0WzBdID0gMDsNCi0JCXBndGFibGVfY2FjaGVf
c2l6ZS0tOw0KLQl9IGVsc2UNCi0JCXJldCA9ICh1bnNpZ25lZCBsb25nICop
Z2V0X3BtZF9zbG93KCk7DQotCXJldHVybiAocG1kX3QgKilyZXQ7DQotfQ0K
LQ0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgZnJlZV9wbWRfZmFzdChwbWRf
dCAqcG1kKQ0KLXsNCi0JKih1bnNpZ25lZCBsb25nICopcG1kID0gKHVuc2ln
bmVkIGxvbmcpIHBtZF9xdWlja2xpc3Q7DQotCXBtZF9xdWlja2xpc3QgPSAo
dW5zaWduZWQgbG9uZyAqKSBwbWQ7DQotCXBndGFibGVfY2FjaGVfc2l6ZSsr
Ow0KLX0NCi0NCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcG1kX3Ns
b3cocG1kX3QgKnBtZCkNCi17DQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9u
ZylwbWQpOw0KLX0NCi0NCi1leHRlcm4gaW5saW5lIHBtZF90ICogcG1kX2Fs
bG9jKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykNCi17DQot
CWlmICghcGdkKQ0KLQkJQlVHKCk7DQotCWFkZHJlc3MgPSAoYWRkcmVzcyA+
PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpOw0KLQlpZiAocGdk
X25vbmUoKnBnZCkpIHsNCi0JCXBtZF90ICpwYWdlID0gZ2V0X3BtZF9mYXN0
KCk7DQotDQotCQlpZiAoIXBhZ2UpDQotCQkJcGFnZSA9IGdldF9wbWRfc2xv
dygpOw0KLQkJaWYgKHBhZ2UpIHsNCi0JCQlpZiAocGdkX25vbmUoKnBnZCkp
IHsNCi0JCQkJcGdkX3ZhbCgqcGdkKSA9IDEgKyBfX3BhKHBhZ2UpOw0KLQkJ
CQlfX2ZsdXNoX3RsYigpOw0KLQkJCQlyZXR1cm4gcGFnZSArIGFkZHJlc3M7
DQotCQkJfSBlbHNlDQotCQkJCWZyZWVfcG1kX2Zhc3QocGFnZSk7DQotCQl9
IGVsc2UNCi0JCQlyZXR1cm4gTlVMTDsNCi0JfQ0KLQlyZXR1cm4gKHBtZF90
ICopcGdkX3BhZ2UoKnBnZCkgKyBhZGRyZXNzOw0KLX0NCiANCiAjZW5kaWYg
LyogX0kzODZfUEdUQUJMRV8zTEVWRUxfSCAqLw0KLS0tIGxpbnV4L2luY2x1
ZGUvYXNtLWkzODYvcGd0YWJsZS5oLm9yaWcJU2F0IE5vdiAxMyAwNDo0Mjoz
MiAxOTk5DQorKysgbGludXgvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgJ
U2F0IE5vdiAxMyAxMDozNjoyMSAxOTk5DQpAQCAtMTksMjcgKzE5LDYgQEAN
CiANCiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbMTAyNF07DQogDQot
LyogQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSBpbnRlbC4gKi8N
Ci0jZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgw
KQ0KLSNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxl
ICgwKQ0KLSNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2UobW0sIHN0YXJ0LCBl
bmQpCWRvIHsgfSB3aGlsZSAoMCkNCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Bh
Z2Uodm1hLCB2bWFkZHIpCQlkbyB7IH0gd2hpbGUgKDApDQotI2RlZmluZSBm
bHVzaF9wYWdlX3RvX3JhbShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkNCi0j
ZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9
IHdoaWxlICgwKQ0KLQ0KLS8qDQotICogVExCIGZsdXNoaW5nOg0KLSAqDQot
ICogIC0gZmx1c2hfdGxiKCkgZmx1c2hlcyB0aGUgY3VycmVudCBtbSBzdHJ1
Y3QgVExCcw0KLSAqICAtIGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBw
cm9jZXNzZXMgVExCcw0KLSAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hl
cyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgVExCJ3MNCi0gKiAgLSBmbHVz
aF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQ0KLSAq
ICAtIGZsdXNoX3RsYl9yYW5nZShtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBh
IHJhbmdlIG9mIHBhZ2VzDQotICoNCi0gKiAuLmJ1dCB0aGUgaTM4NiBoYXMg
c29tZXdoYXQgbGltaXRlZCB0bGIgZmx1c2hpbmcgY2FwYWJpbGl0aWVzLA0K
LSAqIGFuZCBwYWdlLWdyYW51bGFyIGZsdXNoZXMgYXJlIGF2YWlsYWJsZSBv
bmx5IG9uIGk0ODYgYW5kIHVwLg0KLSAqLw0KLQ0KICNkZWZpbmUgX19mbHVz
aF90bGIoKSBcDQogZG8geyB1bnNpZ25lZCBsb25nIHRtcHJlZzsgX19hc21f
XyBfX3ZvbGF0aWxlX18oIm1vdmwgJSVjcjMsJTBcblx0bW92bCAlMCwlJWNy
MyI6Ij1yIiAodG1wcmVnKSA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApDQog
DQpAQCAtNDksNjUgKzI4LDkgQEANCiAjZGVmaW5lIF9fZmx1c2hfdGxiX29u
ZShhZGRyKSBcDQogX19hc21fXyBfX3ZvbGF0aWxlX18oImludmxwZyAlMCI6
IDoibSIgKCooY2hhciAqKSBhZGRyKSkNCiAjZW5kaWYNCi0gDQotI2lmbmRl
ZiBfX1NNUF9fDQotDQotI2RlZmluZSBmbHVzaF90bGIoKSBfX2ZsdXNoX3Rs
YigpDQotI2RlZmluZSBmbHVzaF90bGJfYWxsKCkgX19mbHVzaF90bGIoKQ0K
LSNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQ0KLQ0K
LXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0
cnVjdCAqbW0pDQotew0KLQlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21t
KQ0KLQkJX19mbHVzaF90bGIoKTsNCi19DQotDQotc3RhdGljIGlubGluZSB2
b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h
LA0KLQl1bnNpZ25lZCBsb25nIGFkZHIpDQotew0KLQlpZiAodm1hLT52bV9t
bSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pDQotCQlfX2ZsdXNoX3RsYl9vbmUo
YWRkcik7DQotfQ0KLQ0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJf
cmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sDQotCXVuc2lnbmVkIGxvbmcg
c3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQ0KLXsNCi0JaWYgKG1tID09IGN1
cnJlbnQtPmFjdGl2ZV9tbSkNCi0JCV9fZmx1c2hfdGxiKCk7DQotfQ0KLQ0K
LSNlbHNlDQotDQotLyoNCi0gKiBXZSBhcmVuJ3QgdmVyeSBjbGV2ZXIgYWJv
dXQgdGhpcyB5ZXQgLSAgU01QIGNvdWxkIGNlcnRhaW5seQ0KLSAqIGF2b2lk
IHNvbWUgZ2xvYmFsIGZsdXNoZXMuLg0KLSAqLw0KLQ0KLSNpbmNsdWRlIDxh
c20vc21wLmg+DQotDQotI2RlZmluZSBsb2NhbF9mbHVzaF90bGIoKSBcDQot
CV9fZmx1c2hfdGxiKCkNCi0NCi1leHRlcm4gdm9pZCBmbHVzaF90bGJfYWxs
KHZvaWQpOw0KLWV4dGVybiB2b2lkIGZsdXNoX3RsYl9jdXJyZW50X3Rhc2so
dm9pZCk7DQotZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9z
dHJ1Y3QgKik7DQotZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0
IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOw0KLQ0KLSNkZWZp
bmUgZmx1c2hfdGxiKCkJZmx1c2hfdGxiX2N1cnJlbnRfdGFzaygpDQogDQot
c3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3QgbW1f
c3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxv
bmcgZW5kKQ0KLXsNCi0JZmx1c2hfdGxiX21tKG1tKTsNCi19DQotDQotI2Vu
ZGlmDQogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8NCiANCi0jZGVmaW5l
IHBnZF9xdWlja2xpc3QgKGN1cnJlbnRfY3B1X2RhdGEucGdkX3F1aWNrKQ0K
LSNkZWZpbmUgcG1kX3F1aWNrbGlzdCAoY3VycmVudF9jcHVfZGF0YS5wbWRf
cXVpY2spDQotI2RlZmluZSBwdGVfcXVpY2tsaXN0IChjdXJyZW50X2NwdV9k
YXRhLnB0ZV9xdWljaykNCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfc2l6ZSAo
Y3VycmVudF9jcHVfZGF0YS5wZ3RhYmxlX2NhY2hlX3N6KQ0KLQ0KIC8qDQog
ICogVGhlIExpbnV4IHg4NiBwYWdpbmcgYXJjaGl0ZWN0dXJlIGlzICdjb21w
aWxlLXRpbWUgZHVhbC1tb2RlJywgaXQNCiAgKiBpbXBsZW1lbnRzIGJvdGgg
dGhlIHRyYWRpdGlvbmFsIDItbGV2ZWwgeDg2IHBhZ2UgdGFibGVzIGFuZCB0
aGUNCkBAIC0yNzcsMTQgKzIwMCwxNCBAQA0KICAqIGFuZCBhIHBhZ2UgZW50
cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIg
dG8uDQogICovDQogDQotZXh0ZXJuIGlubGluZSBwdGVfdCBta19wdGUoc3Ry
dWN0IHBhZ2UgKnBhZ2UsIHBncHJvdF90IHBncHJvdCkNCi17DQotCXB0ZV90
IF9fcHRlOw0KLQ0KLQlwdGVfdmFsKF9fcHRlKSA9IChwYWdlLW1lbV9tYXAp
Kih1bnNpZ25lZCBsb25nIGxvbmcpUEFHRV9TSVpFICsNCi0JCQkJcGdwcm90
X3ZhbChwZ3Byb3QpOw0KLQlyZXR1cm4gX19wdGU7DQotfQ0KKyNkZWZpbmUg
bWtfcHRlKHBhZ2UscGdwcm90KSBcDQorKHsJCQkJCQkJCQlcDQorCXB0ZV90
IF9fcHRlOwkJCQkJCQlcDQorCQkJCQkJCQkJXA0KKwlwdGVfdmFsKF9fcHRl
KSA9ICgocGFnZSktbWVtX21hcCkqKHVuc2lnbmVkIGxvbmcgbG9uZylQQUdF
X1NJWkUgKyBcDQorCQkJCXBncHJvdF92YWwocGdwcm90KTsJCQlcDQorCV9f
cHRlOwkJCQkJCQkJXA0KK30pDQogDQogLyogVGhpcyB0YWtlcyBhIHBoeXNp
Y2FsIHBhZ2UgYWRkcmVzcyB0aGF0IGlzIHVzZWQgYnkgdGhlIHJlbWFwcGlu
ZyBmdW5jdGlvbnMgKi8NCiAjZGVmaW5lIG1rX3B0ZV9waHlzKHBoeXNwYWdl
LCBwZ3Byb3QpIFwNCkBAIC0zMTcsMTgyICsyNDAsMTAgQEANCiAJCQlfX3B0
ZV9vZmZzZXQoYWRkcmVzcykpDQogDQogLyoNCi0gKiBBbGxvY2F0ZSBhbmQg
ZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBh
cmUNCi0gKiB1c2VkIHRvIGFsbG9jYXRlIGEga2VybmVsIHBhZ2UgdGFibGUg
LSB0aGlzIHR1cm5zIG9uIEFTTiBiaXRzDQotICogaWYgYW55Lg0KLSAqLw0K
LQ0KLWV4dGVybiBfX2lubGluZV9fIHBnZF90ICpnZXRfcGdkX3Nsb3codm9p
ZCkNCi17DQotCXBnZF90ICpyZXQgPSAocGdkX3QgKilfX2dldF9mcmVlX3Bh
Z2UoR0ZQX0tFUk5FTCk7DQotDQotCWlmIChyZXQpIHsNCi0jaWYgMA0KLQkJ
LyoNCi0JCSAqIE9uIFBBRSBhbGxvY2F0aW5nIGEgd2hvbGUgcGFnZSBpcyBv
dmVya2lsbCAtIHdlIHdpbGwNCi0JCSAqIGVpdGhlciBlbWJlZGQgdGhpcyBp
biBtbV9zdHJ1Y3QsIG9yIGRvIGEgU0xBQiBjYWNoZS4NCi0JCSAqLw0KLQkJ
bWVtY3B5KHJldCwgc3dhcHBlcl9wZ19kaXIsIFBUUlNfUEVSX1BHRCAqIHNp
emVvZihwZ2RfdCkpOw0KLSNlbmRpZg0KLSNpZiBDT05GSUdfWDg2X1BBRQ0K
LQkJaW50IGk7DQotCQlmb3IgKGkgPSAwOyBpIDwgVVNFUl9QVFJTX1BFUl9Q
R0Q7IGkrKykNCi0JCQlfX3BnZF9jbGVhcihyZXQgKyBpKTsNCi0jZWxzZQ0K
LQkJbWVtc2V0KHJldCwgMCwgVVNFUl9QVFJTX1BFUl9QR0QgKiBzaXplb2Yo
cGdkX3QpKTsNCi0jZW5kaWYNCi0JCW1lbWNweShyZXQgKyBVU0VSX1BUUlNf
UEVSX1BHRCwgc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BUUlNfUEVSX1BHRCwg
KFBUUlNfUEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihw
Z2RfdCkpOw0KLQl9DQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLWV4dGVybiBf
X2lubGluZV9fIHBnZF90ICpnZXRfcGdkX2Zhc3Qodm9pZCkNCi17DQotCXVu
c2lnbmVkIGxvbmcgKnJldDsNCi0NCi0JaWYgKChyZXQgPSBwZ2RfcXVpY2ts
aXN0KSAhPSBOVUxMKSB7DQotCQlwZ2RfcXVpY2tsaXN0ID0gKHVuc2lnbmVk
IGxvbmcgKikoKnJldCk7DQotCQlyZXRbMF0gPSAwOw0KLQkJcGd0YWJsZV9j
YWNoZV9zaXplLS07DQotCX0gZWxzZQ0KLQkJcmV0ID0gKHVuc2lnbmVkIGxv
bmcgKilnZXRfcGdkX3Nsb3coKTsNCi0JcmV0dXJuIChwZ2RfdCAqKXJldDsN
Ci19DQotDQotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BnZF9mYXN0
KHBnZF90ICpwZ2QpDQotew0KLQkqKHVuc2lnbmVkIGxvbmcgKilwZ2QgPSAo
dW5zaWduZWQgbG9uZykgcGdkX3F1aWNrbGlzdDsNCi0JcGdkX3F1aWNrbGlz
dCA9ICh1bnNpZ25lZCBsb25nICopIHBnZDsNCi0JcGd0YWJsZV9jYWNoZV9z
aXplKys7DQotfQ0KLQ0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgZnJlZV9w
Z2Rfc2xvdyhwZ2RfdCAqcGdkKQ0KLXsNCi0JZnJlZV9wYWdlKCh1bnNpZ25l
ZCBsb25nKXBnZCk7DQotfQ0KLQ0KLWV4dGVybiBwdGVfdCAqZ2V0X3B0ZV9z
bG93KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzc19wcmVhZGp1
c3RlZCk7DQotZXh0ZXJuIHB0ZV90ICpnZXRfcHRlX2tlcm5lbF9zbG93KHBt
ZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzc19wcmVhZGp1c3RlZCk7
DQotDQotZXh0ZXJuIF9faW5saW5lX18gcHRlX3QgKmdldF9wdGVfZmFzdCh2
b2lkKQ0KLXsNCi0JdW5zaWduZWQgbG9uZyAqcmV0Ow0KLQ0KLQlpZigocmV0
ID0gKHVuc2lnbmVkIGxvbmcgKilwdGVfcXVpY2tsaXN0KSAhPSBOVUxMKSB7
DQotCQlwdGVfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikoKnJldCk7
DQotCQlyZXRbMF0gPSByZXRbMV07DQotCQlwZ3RhYmxlX2NhY2hlX3NpemUt
LTsNCi0JfQ0KLQlyZXR1cm4gKHB0ZV90ICopcmV0Ow0KLX0NCi0NCi1leHRl
cm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcHRlX2Zhc3QocHRlX3QgKnB0ZSkN
Ci17DQotCSoodW5zaWduZWQgbG9uZyAqKXB0ZSA9ICh1bnNpZ25lZCBsb25n
KSBwdGVfcXVpY2tsaXN0Ow0KLQlwdGVfcXVpY2tsaXN0ID0gKHVuc2lnbmVk
IGxvbmcgKikgcHRlOw0KLQlwZ3RhYmxlX2NhY2hlX3NpemUrKzsNCi19DQot
DQotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3B0ZV9zbG93KHB0ZV90
ICpwdGUpDQotew0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHRlKTsN
Ci19DQotDQotI2RlZmluZSBwdGVfZnJlZV9rZXJuZWwocHRlKSAgICBmcmVl
X3B0ZV9zbG93KHB0ZSkNCi0jZGVmaW5lIHB0ZV9mcmVlKHB0ZSkJICAgZnJl
ZV9wdGVfc2xvdyhwdGUpDQotI2RlZmluZSBwZ2RfZnJlZShwZ2QpCSAgIGZy
ZWVfcGdkX3Nsb3cocGdkKQ0KLSNkZWZpbmUgcGdkX2FsbG9jKCkJICAgICBn
ZXRfcGdkX2Zhc3QoKQ0KLQ0KLWV4dGVybiBpbmxpbmUgcHRlX3QgKiBwdGVf
YWxsb2Nfa2VybmVsKHBtZF90ICogcG1kLCB1bnNpZ25lZCBsb25nIGFkZHJl
c3MpDQotew0KLQlpZiAoIXBtZCkNCi0JCUJVRygpOw0KLQlhZGRyZXNzID0g
KGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSk7
DQotCWlmIChwbWRfbm9uZSgqcG1kKSkgew0KLQkJcHRlX3QgKiBwYWdlID0g
KHB0ZV90ICopIGdldF9wdGVfZmFzdCgpOw0KLQkJDQotCQlpZiAoIXBhZ2Up
DQotCQkJcmV0dXJuIGdldF9wdGVfa2VybmVsX3Nsb3cocG1kLCBhZGRyZXNz
KTsNCi0JCXBtZF92YWwoKnBtZCkgPSBfS0VSTlBHX1RBQkxFICsgX19wYShw
YWdlKTsNCi0JCXJldHVybiBwYWdlICsgYWRkcmVzczsNCi0JfQ0KLQlpZiAo
cG1kX2JhZCgqcG1kKSkgew0KLQkJX19oYW5kbGVfYmFkX3BtZF9rZXJuZWwo
cG1kKTsNCi0JCXJldHVybiBOVUxMOw0KLQl9DQotCXJldHVybiAocHRlX3Qg
KikgcG1kX3BhZ2UoKnBtZCkgKyBhZGRyZXNzOw0KLX0NCi0NCi1leHRlcm4g
aW5saW5lIHB0ZV90ICogcHRlX2FsbG9jKHBtZF90ICogcG1kLCB1bnNpZ25l
ZCBsb25nIGFkZHJlc3MpDQotew0KLQlhZGRyZXNzID0gKGFkZHJlc3MgPj4g
UEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSk7DQotDQotCWlmIChw
bWRfbm9uZSgqcG1kKSkNCi0JCWdvdG8gZ2V0bmV3Ow0KLQlpZiAocG1kX2Jh
ZCgqcG1kKSkNCi0JCWdvdG8gZml4Ow0KLQlyZXR1cm4gKHB0ZV90ICopcG1k
X3BhZ2UoKnBtZCkgKyBhZGRyZXNzOw0KLWdldG5ldzoNCi17DQotCXVuc2ln
bmVkIGxvbmcgcGFnZSA9ICh1bnNpZ25lZCBsb25nKSBnZXRfcHRlX2Zhc3Qo
KTsNCi0JDQotCWlmICghcGFnZSkNCi0JCXJldHVybiBnZXRfcHRlX3Nsb3co
cG1kLCBhZGRyZXNzKTsNCi0JcG1kX3ZhbCgqcG1kKSA9IF9QQUdFX1RBQkxF
ICsgX19wYShwYWdlKTsNCi0JcmV0dXJuIChwdGVfdCAqKXBhZ2UgKyBhZGRy
ZXNzOw0KLX0NCi1maXg6DQotCV9faGFuZGxlX2JhZF9wbWQocG1kKTsNCi0J
cmV0dXJuIE5VTEw7DQotfQ0KLQ0KLS8qDQotICogYWxsb2NhdGluZyBhbmQg
ZnJlZWluZyBhIHBtZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwbWQgaXMN
Ci0gKiBpbnNpZGUgdGhlIHBnZCwgc28gaGFzIG5vIGV4dHJhIG1lbW9yeSBh
c3NvY2lhdGVkIHdpdGggaXQuDQotICogKEluIHRoZSBQQUUgY2FzZSB3ZSBm
cmVlIHRoZSBwYWdlLikNCi0gKi8NCi0jZGVmaW5lIHBtZF9mcmVlKHBtZCkJ
ICAgZnJlZV9wbWRfc2xvdyhwbWQpDQotDQotI2RlZmluZSBwbWRfZnJlZV9r
ZXJuZWwJCXBtZF9mcmVlDQotI2RlZmluZSBwbWRfYWxsb2Nfa2VybmVsCXBt
ZF9hbGxvYw0KLQ0KLWV4dGVybiBpbnQgZG9fY2hlY2tfcGd0X2NhY2hlKGlu
dCwgaW50KTsNCi0NCi1leHRlcm4gaW5saW5lIHZvaWQgc2V0X3BnZGlyKHVu
c2lnbmVkIGxvbmcgYWRkcmVzcywgcGdkX3QgZW50cnkpDQotew0KLQlzdHJ1
Y3QgdGFza19zdHJ1Y3QgKiBwOw0KLQlwZ2RfdCAqcGdkOw0KLSNpZmRlZiBf
X1NNUF9fDQotCWludCBpOw0KLSNlbmRpZgkNCi0NCi0JcmVhZF9sb2NrKCZ0
YXNrbGlzdF9sb2NrKTsNCi0JZm9yX2VhY2hfdGFzayhwKSB7DQotCQlpZiAo
IXAtPm1tKQ0KLQkJCWNvbnRpbnVlOw0KLQkJKnBnZF9vZmZzZXQocC0+bW0s
YWRkcmVzcykgPSBlbnRyeTsNCi0JfQ0KLQlyZWFkX3VubG9jaygmdGFza2xp
c3RfbG9jayk7DQotI2lmbmRlZiBfX1NNUF9fDQotCWZvciAocGdkID0gKHBn
ZF90ICopcGdkX3F1aWNrbGlzdDsgcGdkOyBwZ2QgPSAocGdkX3QgKikqKHVu
c2lnbmVkIGxvbmcgKilwZ2QpDQotCQlwZ2RbYWRkcmVzcyA+PiBQR0RJUl9T
SElGVF0gPSBlbnRyeTsNCi0jZWxzZQ0KLQkvKiBUbyBwZ2RfYWxsb2MvcGdk
X2ZyZWUsIG9uZSBob2xkcyBtYXN0ZXIga2VybmVsIGxvY2sgYW5kIHNvIGRv
ZXMgb3VyIGNhbGxlZSwgc28gd2UgY2FuDQotCSAgIG1vZGlmeSBwZ2QgY2Fj
aGVzIG9mIG90aGVyIENQVXMgYXMgd2VsbC4gLWpqICovDQotCWZvciAoaSA9
IDA7IGkgPCBOUl9DUFVTOyBpKyspDQotCQlmb3IgKHBnZCA9IChwZ2RfdCAq
KWNwdV9kYXRhW2ldLnBnZF9xdWljazsgcGdkOyBwZ2QgPSAocGdkX3QgKikq
KHVuc2lnbmVkIGxvbmcgKilwZ2QpDQotCQkJcGdkW2FkZHJlc3MgPj4gUEdE
SVJfU0hJRlRdID0gZW50cnk7DQotI2VuZGlmDQotfQ0KLQ0KLS8qDQogICog
VGhlIGkzODYgZG9lc24ndCBoYXZlIGFueSBleHRlcm5hbCBNTVUgaW5mbzog
dGhlIGtlcm5lbCBwYWdlDQogICogdGFibGVzIGNvbnRhaW4gYWxsIHRoZSBu
ZWNlc3NhcnkgaW5mb3JtYXRpb24uDQogICovDQotZXh0ZXJuIGlubGluZSB2
b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICog
dm1hLA0KLQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkNCi17
DQotfQ0KKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsYWRkcmVzcyxw
dGUpIGRvIHsgfSB3aGlsZSAoMCkNCiANCiAvKiBFbmNvZGUgYW5kIGRlLWNv
ZGUgYSBzd2FwIGVudHJ5ICovDQogI2RlZmluZSBTV1BfVFlQRSh4KQkJCSgo
KHgpLnZhbCA+PiAxKSAmIDB4M2YpDQotLS0gbGludXgvaW5jbHVkZS9hc20t
aTM4Ni9wZ2FsbG9jLmgub3JpZwlTYXQgTm92IDEzIDA1OjAwOjIwIDE5OTkN
CisrKyBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MuaAlTYXQgTm92
IDEzIDEwOjM2OjIxIDE5OTkNCkBAIC0wLDAgKzEsMjU1IEBADQorI2lmbmRl
ZiBfSTM4Nl9QR0FMTE9DX0gNCisjZGVmaW5lIF9JMzg2X1BHQUxMT0NfSA0K
Kw0KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4NCisjaW5jbHVkZSA8YXNt
L3Byb2Nlc3Nvci5oPg0KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+DQorI2lu
Y2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4NCisNCisjZGVmaW5lIHBnZF9xdWlj
a2xpc3QgKGN1cnJlbnRfY3B1X2RhdGEucGdkX3F1aWNrKQ0KKyNkZWZpbmUg
cG1kX3F1aWNrbGlzdCAoY3VycmVudF9jcHVfZGF0YS5wbWRfcXVpY2spDQor
I2RlZmluZSBwdGVfcXVpY2tsaXN0IChjdXJyZW50X2NwdV9kYXRhLnB0ZV9x
dWljaykNCisjZGVmaW5lIHBndGFibGVfY2FjaGVfc2l6ZSAoY3VycmVudF9j
cHVfZGF0YS5wZ3RhYmxlX2NhY2hlX3N6KQ0KKw0KKyNpZiBDT05GSUdfWDg2
X1BBRQ0KKyMgaW5jbHVkZSA8YXNtL3BnYWxsb2MtM2xldmVsLmg+DQorI2Vs
c2UNCisjIGluY2x1ZGUgPGFzbS9wZ2FsbG9jLTJsZXZlbC5oPg0KKyNlbmRp
Zg0KKw0KKy8qDQorICogQWxsb2NhdGUgYW5kIGZyZWUgcGFnZSB0YWJsZXMu
IFRoZSB4eHhfa2VybmVsKCkgdmVyc2lvbnMgYXJlDQorICogdXNlZCB0byBh
bGxvY2F0ZSBhIGtlcm5lbCBwYWdlIHRhYmxlIC0gdGhpcyB0dXJucyBvbiBB
U04gYml0cw0KKyAqIGlmIGFueS4NCisgKi8NCisNCitleHRlcm4gX19pbmxp
bmVfXyBwZ2RfdCAqZ2V0X3BnZF9zbG93KHZvaWQpDQorew0KKwlwZ2RfdCAq
cmV0ID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOw0K
Kw0KKwlpZiAocmV0KSB7DQorI2lmIENPTkZJR19YODZfUEFFDQorCQlpbnQg
aTsNCisJCWZvciAoaSA9IDA7IGkgPCBVU0VSX1BUUlNfUEVSX1BHRDsgaSsr
KQ0KKwkJCV9fcGdkX2NsZWFyKHJldCArIGkpOw0KKyNlbHNlDQorCQltZW1z
ZXQocmV0LCAwLCBVU0VSX1BUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkp
Ow0KKyNlbmRpZg0KKwkJbWVtY3B5KHJldCArIFVTRVJfUFRSU19QRVJfUEdE
LCBzd2FwcGVyX3BnX2RpciArIFVTRVJfUFRSU19QRVJfUEdELCAoUFRSU19Q
RVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7
DQorCX0NCisJcmV0dXJuIHJldDsNCit9DQorDQorZXh0ZXJuIF9faW5saW5l
X18gcGdkX3QgKmdldF9wZ2RfZmFzdCh2b2lkKQ0KK3sNCisJdW5zaWduZWQg
bG9uZyAqcmV0Ow0KKw0KKwlpZiAoKHJldCA9IHBnZF9xdWlja2xpc3QpICE9
IE5VTEwpIHsNCisJCXBnZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAq
KSgqcmV0KTsNCisJCXJldFswXSA9IDA7DQorCQlwZ3RhYmxlX2NhY2hlX3Np
emUtLTsNCisJfSBlbHNlDQorCQlyZXQgPSAodW5zaWduZWQgbG9uZyAqKWdl
dF9wZ2Rfc2xvdygpOw0KKwlyZXR1cm4gKHBnZF90ICopcmV0Ow0KK30NCisN
CitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcGdkX2Zhc3QocGdkX3Qg
KnBnZCkNCit7DQorCSoodW5zaWduZWQgbG9uZyAqKXBnZCA9ICh1bnNpZ25l
ZCBsb25nKSBwZ2RfcXVpY2tsaXN0Ow0KKwlwZ2RfcXVpY2tsaXN0ID0gKHVu
c2lnbmVkIGxvbmcgKikgcGdkOw0KKwlwZ3RhYmxlX2NhY2hlX3NpemUrKzsN
Cit9DQorDQorZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BnZF9zbG93
KHBnZF90ICpwZ2QpDQorew0KKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcp
cGdkKTsNCit9DQorDQorZXh0ZXJuIHB0ZV90ICpnZXRfcHRlX3Nsb3cocG1k
X3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzX3ByZWFkanVzdGVkKTsN
CitleHRlcm4gcHRlX3QgKmdldF9wdGVfa2VybmVsX3Nsb3cocG1kX3QgKnBt
ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzX3ByZWFkanVzdGVkKTsNCisNCitl
eHRlcm4gX19pbmxpbmVfXyBwdGVfdCAqZ2V0X3B0ZV9mYXN0KHZvaWQpDQor
ew0KKwl1bnNpZ25lZCBsb25nICpyZXQ7DQorDQorCWlmKChyZXQgPSAodW5z
aWduZWQgbG9uZyAqKXB0ZV9xdWlja2xpc3QpICE9IE5VTEwpIHsNCisJCXB0
ZV9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsNCisJCXJl
dFswXSA9IHJldFsxXTsNCisJCXBndGFibGVfY2FjaGVfc2l6ZS0tOw0KKwl9
DQorCXJldHVybiAocHRlX3QgKilyZXQ7DQorfQ0KKw0KK2V4dGVybiBfX2lu
bGluZV9fIHZvaWQgZnJlZV9wdGVfZmFzdChwdGVfdCAqcHRlKQ0KK3sNCisJ
Kih1bnNpZ25lZCBsb25nICopcHRlID0gKHVuc2lnbmVkIGxvbmcpIHB0ZV9x
dWlja2xpc3Q7DQorCXB0ZV9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAq
KSBwdGU7DQorCXBndGFibGVfY2FjaGVfc2l6ZSsrOw0KK30NCisNCitleHRl
cm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcHRlX3Nsb3cocHRlX3QgKnB0ZSkN
Cit7DQorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdGUpOw0KK30NCisN
CisjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChwdGUpICAgIGZyZWVfcHRlX3Ns
b3cocHRlKQ0KKyNkZWZpbmUgcHRlX2ZyZWUocHRlKQkgICBmcmVlX3B0ZV9z
bG93KHB0ZSkNCisjZGVmaW5lIHBnZF9mcmVlKHBnZCkJICAgZnJlZV9wZ2Rf
c2xvdyhwZ2QpDQorI2RlZmluZSBwZ2RfYWxsb2MoKQkgICAgIGdldF9wZ2Rf
ZmFzdCgpDQorDQorZXh0ZXJuIGlubGluZSBwdGVfdCAqIHB0ZV9hbGxvY19r
ZXJuZWwocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykNCit7
DQorCWlmICghcG1kKQ0KKwkJQlVHKCk7DQorCWFkZHJlc3MgPSAoYWRkcmVz
cyA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKTsNCisJaWYg
KHBtZF9ub25lKCpwbWQpKSB7DQorCQlwdGVfdCAqIHBhZ2UgPSAocHRlX3Qg
KikgZ2V0X3B0ZV9mYXN0KCk7DQorCQkNCisJCWlmICghcGFnZSkNCisJCQly
ZXR1cm4gZ2V0X3B0ZV9rZXJuZWxfc2xvdyhwbWQsIGFkZHJlc3MpOw0KKwkJ
cG1kX3ZhbCgqcG1kKSA9IF9LRVJOUEdfVEFCTEUgKyBfX3BhKHBhZ2UpOw0K
KwkJcmV0dXJuIHBhZ2UgKyBhZGRyZXNzOw0KKwl9DQorCWlmIChwbWRfYmFk
KCpwbWQpKSB7DQorCQlfX2hhbmRsZV9iYWRfcG1kX2tlcm5lbChwbWQpOw0K
KwkJcmV0dXJuIE5VTEw7DQorCX0NCisJcmV0dXJuIChwdGVfdCAqKSBwbWRf
cGFnZSgqcG1kKSArIGFkZHJlc3M7DQorfQ0KKw0KK2V4dGVybiBpbmxpbmUg
cHRlX3QgKiBwdGVfYWxsb2MocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcg
YWRkcmVzcykNCit7DQorCWFkZHJlc3MgPSAoYWRkcmVzcyA+PiBQQUdFX1NI
SUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKTsNCisNCisJaWYgKHBtZF9ub25l
KCpwbWQpKQ0KKwkJZ290byBnZXRuZXc7DQorCWlmIChwbWRfYmFkKCpwbWQp
KQ0KKwkJZ290byBmaXg7DQorCXJldHVybiAocHRlX3QgKilwbWRfcGFnZSgq
cG1kKSArIGFkZHJlc3M7DQorZ2V0bmV3Og0KK3sNCisJdW5zaWduZWQgbG9u
ZyBwYWdlID0gKHVuc2lnbmVkIGxvbmcpIGdldF9wdGVfZmFzdCgpOw0KKwkN
CisJaWYgKCFwYWdlKQ0KKwkJcmV0dXJuIGdldF9wdGVfc2xvdyhwbWQsIGFk
ZHJlc3MpOw0KKwlwbWRfdmFsKCpwbWQpID0gX1BBR0VfVEFCTEUgKyBfX3Bh
KHBhZ2UpOw0KKwlyZXR1cm4gKHB0ZV90ICopcGFnZSArIGFkZHJlc3M7DQor
fQ0KK2ZpeDoNCisJX19oYW5kbGVfYmFkX3BtZChwbWQpOw0KKwlyZXR1cm4g
TlVMTDsNCit9DQorDQorLyoNCisgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5n
IGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpcw0KKyAqIGlu
c2lkZSB0aGUgcGdkLCBzbyBoYXMgbm8gZXh0cmEgbWVtb3J5IGFzc29jaWF0
ZWQgd2l0aCBpdC4NCisgKiAoSW4gdGhlIFBBRSBjYXNlIHdlIGZyZWUgdGhl
IHBhZ2UuKQ0KKyAqLw0KKyNkZWZpbmUgcG1kX2ZyZWUocG1kKQkgICBmcmVl
X3BtZF9zbG93KHBtZCkNCisNCisjZGVmaW5lIHBtZF9mcmVlX2tlcm5lbAkJ
cG1kX2ZyZWUNCisjZGVmaW5lIHBtZF9hbGxvY19rZXJuZWwJcG1kX2FsbG9j
DQorDQorZXh0ZXJuIGludCBkb19jaGVja19wZ3RfY2FjaGUoaW50LCBpbnQp
Ow0KKw0KK2V4dGVybiBpbmxpbmUgdm9pZCBzZXRfcGdkaXIodW5zaWduZWQg
bG9uZyBhZGRyZXNzLCBwZ2RfdCBlbnRyeSkNCit7DQorCXN0cnVjdCB0YXNr
X3N0cnVjdCAqIHA7DQorCXBnZF90ICpwZ2Q7DQorI2lmZGVmIF9fU01QX18N
CisJaW50IGk7DQorI2VuZGlmCQ0KKw0KKwlyZWFkX2xvY2soJnRhc2tsaXN0
X2xvY2spOw0KKwlmb3JfZWFjaF90YXNrKHApIHsNCisJCWlmICghcC0+bW0p
DQorCQkJY29udGludWU7DQorCQkqcGdkX29mZnNldChwLT5tbSxhZGRyZXNz
KSA9IGVudHJ5Ow0KKwl9DQorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2Nr
KTsNCisjaWZuZGVmIF9fU01QX18NCisJZm9yIChwZ2QgPSAocGdkX3QgKilw
Z2RfcXVpY2tsaXN0OyBwZ2Q7IHBnZCA9IChwZ2RfdCAqKSoodW5zaWduZWQg
bG9uZyAqKXBnZCkNCisJCXBnZFthZGRyZXNzID4+IFBHRElSX1NISUZUXSA9
IGVudHJ5Ow0KKyNlbHNlDQorCS8qIFRvIHBnZF9hbGxvYy9wZ2RfZnJlZSwg
b25lIGhvbGRzIG1hc3RlciBrZXJuZWwgbG9jayBhbmQgc28gZG9lcyBvdXIg
Y2FsbGVlLCBzbyB3ZSBjYW4NCisJICAgbW9kaWZ5IHBnZCBjYWNoZXMgb2Yg
b3RoZXIgQ1BVcyBhcyB3ZWxsLiAtamogKi8NCisJZm9yIChpID0gMDsgaSA8
IE5SX0NQVVM7IGkrKykNCisJCWZvciAocGdkID0gKHBnZF90ICopY3B1X2Rh
dGFbaV0ucGdkX3F1aWNrOyBwZ2Q7IHBnZCA9IChwZ2RfdCAqKSoodW5zaWdu
ZWQgbG9uZyAqKXBnZCkNCisJCQlwZ2RbYWRkcmVzcyA+PiBQR0RJUl9TSElG
VF0gPSBlbnRyeTsNCisjZW5kaWYNCit9DQorDQorLyogQ2FjaGVzIGFyZW4n
dCBicmFpbi1kZWFkIG9uIHRoZSBpbnRlbC4gKi8NCisjZGVmaW5lIGZsdXNo
X2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQ0KKyNkZWZpbmUgZmx1
c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQ0KKyNkZWZpbmUg
Zmx1c2hfY2FjaGVfcmFuZ2UobW0sIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGls
ZSAoMCkNCisjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIp
CQlkbyB7IH0gd2hpbGUgKDApDQorI2RlZmluZSBmbHVzaF9wYWdlX3RvX3Jh
bShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkNCisjZGVmaW5lIGZsdXNoX2lj
YWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQ0KKw0K
Ky8qDQorICogVExCIGZsdXNoaW5nOg0KKyAqDQorICogIC0gZmx1c2hfdGxi
KCkgZmx1c2hlcyB0aGUgY3VycmVudCBtbSBzdHJ1Y3QgVExCcw0KKyAqICAt
IGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBwcm9jZXNzZXMgVExCcw0K
KyAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVk
IG1tIGNvbnRleHQgVExCJ3MNCisgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEs
IHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQ0KKyAqICAtIGZsdXNoX3RsYl9y
YW5nZShtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2Vz
DQorICoNCisgKiAuLmJ1dCB0aGUgaTM4NiBoYXMgc29tZXdoYXQgbGltaXRl
ZCB0bGIgZmx1c2hpbmcgY2FwYWJpbGl0aWVzLA0KKyAqIGFuZCBwYWdlLWdy
YW51bGFyIGZsdXNoZXMgYXJlIGF2YWlsYWJsZSBvbmx5IG9uIGk0ODYgYW5k
IHVwLg0KKyAqLw0KKw0KKyNpZm5kZWYgX19TTVBfXw0KKw0KKyNkZWZpbmUg
Zmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQ0KKyNkZWZpbmUgZmx1c2hfdGxi
X2FsbCgpIF9fZmx1c2hfdGxiKCkNCisjZGVmaW5lIGxvY2FsX2ZsdXNoX3Rs
YigpIF9fZmx1c2hfdGxiKCkNCisNCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1
c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQ0KK3sNCisJaWYgKG1t
ID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkNCisJCV9fZmx1c2hfdGxiKCk7DQor
fQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1
Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwNCisJdW5zaWduZWQgbG9uZyBhZGRy
KQ0KK3sNCisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21t
KQ0KKwkJX19mbHVzaF90bGJfb25lKGFkZHIpOw0KK30NCisNCitzdGF0aWMg
aW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3Qg
Km1tLA0KKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVu
ZCkNCit7DQorCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pDQorCQlf
X2ZsdXNoX3RsYigpOw0KK30NCisNCisjZWxzZQ0KKw0KKy8qDQorICogV2Ug
YXJlbid0IHZlcnkgY2xldmVyIGFib3V0IHRoaXMgeWV0IC0gIFNNUCBjb3Vs
ZCBjZXJ0YWlubHkNCisgKiBhdm9pZCBzb21lIGdsb2JhbCBmbHVzaGVzLi4N
CisgKi8NCisNCisjaW5jbHVkZSA8YXNtL3NtcC5oPg0KKw0KKyNkZWZpbmUg
bG9jYWxfZmx1c2hfdGxiKCkgXA0KKwlfX2ZsdXNoX3RsYigpDQorDQorZXh0
ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsNCitleHRlcm4gdm9pZCBm
bHVzaF90bGJfY3VycmVudF90YXNrKHZvaWQpOw0KK2V4dGVybiB2b2lkIGZs
dXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICopOw0KK2V4dGVybiB2b2lk
IGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNp
Z25lZCBsb25nKTsNCisNCisjZGVmaW5lIGZsdXNoX3RsYigpCWZsdXNoX3Rs
Yl9jdXJyZW50X3Rhc2soKQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVz
aF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBs
b25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkNCit7DQorCWZsdXNoX3Rs
Yl9tbShtbSk7DQorfQ0KKw0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfSTM4
Nl9QR0FMTE9DX0ggKi8NCi0tLSBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3Bn
YWxsb2MtM2xldmVsLmgub3JpZwlTYXQgTm92IDEzIDA1OjAzOjQ3IDE5OTkN
CisrKyBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MtM2xldmVsLmgJ
U2F0IE5vdiAxMyAwNTowNDo0MyAxOTk5DQpAQCAtMCwwICsxLDY4IEBADQor
I2lmbmRlZiBfSTM4Nl9QR0FMTE9DXzNMRVZFTF9IDQorI2RlZmluZSBfSTM4
Nl9QR0FMTE9DXzNMRVZFTF9IDQorDQorLyoNCisgKiBJbnRlbCBQaHlzaWNh
bCBBZGRyZXNzIEV4dGVuc2lvbiAoUEFFKSBNb2RlIC0gdGhyZWUtbGV2ZWwg
cGFnZQ0KKyAqIHRhYmxlcyBvbiBQUHJvKyBDUFVzLiBQYWdlLXRhYmxlIGFs
bG9jYXRpb24gcm91dGluZXMuDQorICoNCisgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+DQorICovDQorDQor
ZXh0ZXJuIF9faW5saW5lX18gcG1kX3QgKmdldF9wbWRfc2xvdyh2b2lkKQ0K
K3sNCisJcG1kX3QgKnJldCA9IChwbWRfdCAqKV9fZ2V0X2ZyZWVfcGFnZShH
RlBfS0VSTkVMKTsNCisNCisJaWYgKHJldCkNCisJCW1lbXNldChyZXQsIDAs
IFBBR0VfU0laRSk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK2V4dGVybiBf
X2lubGluZV9fIHBtZF90ICpnZXRfcG1kX2Zhc3Qodm9pZCkNCit7DQorCXVu
c2lnbmVkIGxvbmcgKnJldDsNCisNCisJaWYgKChyZXQgPSBwbWRfcXVpY2ts
aXN0KSAhPSBOVUxMKSB7DQorCQlwbWRfcXVpY2tsaXN0ID0gKHVuc2lnbmVk
IGxvbmcgKikoKnJldCk7DQorCQlyZXRbMF0gPSAwOw0KKwkJcGd0YWJsZV9j
YWNoZV9zaXplLS07DQorCX0gZWxzZQ0KKwkJcmV0ID0gKHVuc2lnbmVkIGxv
bmcgKilnZXRfcG1kX3Nsb3coKTsNCisJcmV0dXJuIChwbWRfdCAqKXJldDsN
Cit9DQorDQorZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BtZF9mYXN0
KHBtZF90ICpwbWQpDQorew0KKwkqKHVuc2lnbmVkIGxvbmcgKilwbWQgPSAo
dW5zaWduZWQgbG9uZykgcG1kX3F1aWNrbGlzdDsNCisJcG1kX3F1aWNrbGlz
dCA9ICh1bnNpZ25lZCBsb25nICopIHBtZDsNCisJcGd0YWJsZV9jYWNoZV9z
aXplKys7DQorfQ0KKw0KK2V4dGVybiBfX2lubGluZV9fIHZvaWQgZnJlZV9w
bWRfc2xvdyhwbWRfdCAqcG1kKQ0KK3sNCisJZnJlZV9wYWdlKCh1bnNpZ25l
ZCBsb25nKXBtZCk7DQorfQ0KKw0KK2V4dGVybiBpbmxpbmUgcG1kX3QgKiBw
bWRfYWxsb2MocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQ0K
K3sNCisJaWYgKCFwZ2QpDQorCQlCVUcoKTsNCisJYWRkcmVzcyA9IChhZGRy
ZXNzID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSk7DQorCWlm
IChwZ2Rfbm9uZSgqcGdkKSkgew0KKwkJcG1kX3QgKnBhZ2UgPSBnZXRfcG1k
X2Zhc3QoKTsNCisNCisJCWlmICghcGFnZSkNCisJCQlwYWdlID0gZ2V0X3Bt
ZF9zbG93KCk7DQorCQlpZiAocGFnZSkgew0KKwkJCWlmIChwZ2Rfbm9uZSgq
cGdkKSkgew0KKwkJCQlwZ2RfdmFsKCpwZ2QpID0gMSArIF9fcGEocGFnZSk7
DQorCQkJCV9fZmx1c2hfdGxiKCk7DQorCQkJCXJldHVybiBwYWdlICsgYWRk
cmVzczsNCisJCQl9IGVsc2UNCisJCQkJZnJlZV9wbWRfZmFzdChwYWdlKTsN
CisJCX0gZWxzZQ0KKwkJCXJldHVybiBOVUxMOw0KKwl9DQorCXJldHVybiAo
cG1kX3QgKilwZ2RfcGFnZSgqcGdkKSArIGFkZHJlc3M7DQorfQ0KKw0KKyNl
bmRpZiAvKiBfSTM4Nl9QR0FMTE9DXzNMRVZFTF9IICovDQotLS0gbGludXgv
aW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oLm9yaWcJU2F0IE5v
diAxMyAwNTowNToxNyAxOTk5DQorKysgbGludXgvaW5jbHVkZS9hc20taTM4
Ni9wZ3RhYmxlLTJsZXZlbC5oCVNhdCBOb3YgMTMgMDU6MDY6MzYgMTk5OQ0K
QEAgLTQyLDE5ICs0Miw0IEBADQogCXJldHVybiAocG1kX3QgKikgZGlyOw0K
IH0NCiANCi1leHRlcm4gX19pbmxpbmVfXyBwbWRfdCAqZ2V0X3BtZF9mYXN0
KHZvaWQpDQotew0KLQlyZXR1cm4gKHBtZF90ICopMDsNCi19DQotDQotZXh0
ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BtZF9mYXN0KHBtZF90ICpwbWQp
IHsgfQ0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgZnJlZV9wbWRfc2xvdyhw
bWRfdCAqcG1kKSB7IH0NCi0NCi1leHRlcm4gaW5saW5lIHBtZF90ICogcG1k
X2FsbG9jKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykNCi17
DQotCWlmICghcGdkKQ0KLQkJQlVHKCk7DQotCXJldHVybiAocG1kX3QgKikg
cGdkOw0KLX0NCi0NCiAjZW5kaWYgLyogX0kzODZfUEdUQUJMRV8yTEVWRUxf
SCAqLw0KLS0tIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy0ybGV2
ZWwuaC5vcmlnCVNhdCBOb3YgMTMgMDU6MDU6MjggMTk5OQ0KKysrIGxpbnV4
L2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy0ybGV2ZWwuaAlTYXQgTm92IDEz
IDA1OjA2OjA3IDE5OTkNCkBAIC0wLDAgKzEsMjMgQEANCisjaWZuZGVmIF9J
Mzg2X1BHQUxMT0NfMkxFVkVMX0gNCisjZGVmaW5lIF9JMzg2X1BHQUxMT0Nf
MkxFVkVMX0gNCisNCisvKg0KKyAqIHRyYWRpdGlvbmFsIGkzODYgdHdvLWxl
dmVsIHBhZ2luZywgcGFnZSB0YWJsZSBhbGxvY2F0aW9uIHJvdXRpbmVzOg0K
KyAqLw0KKw0KK2V4dGVybiBfX2lubGluZV9fIHBtZF90ICpnZXRfcG1kX2Zh
c3Qodm9pZCkNCit7DQorCXJldHVybiAocG1kX3QgKikwOw0KK30NCisNCitl
eHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKnBt
ZCkgeyB9DQorZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BtZF9zbG93
KHBtZF90ICpwbWQpIHsgfQ0KKw0KK2V4dGVybiBpbmxpbmUgcG1kX3QgKiBw
bWRfYWxsb2MocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQ0K
K3sNCisJaWYgKCFwZ2QpDQorCQlCVUcoKTsNCisJcmV0dXJuIChwbWRfdCAq
KSBwZ2Q7DQorfQ0KKw0KKyNlbmRpZiAvKiBfSTM4Nl9QR0FMTE9DXzJMRVZF
TF9IICovDQotLS0gbGludXgvaW5jbHVkZS9hc20taTM4Ni9pby5oLm9yaWcJ
U2F0IE5vdiAxMyAwNToyMTozOSAxOTk5DQorKysgbGludXgvaW5jbHVkZS9h
c20taTM4Ni9pby5oCVNhdCBOb3YgMTMgMTA6MzY6MjEgMTk5OQ0KQEAgLTEw
Myw3ICsxMDMsNiBAQA0KIA0KICNpZmRlZiBfX0tFUk5FTF9fDQogDQotI2lu
Y2x1ZGUgPGFzbS9wYWdlLmg+DQogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2Mu
aD4NCiANCiAvKg0KLS0tIGxpbnV4L2RyaXZlcnMvY2hhci9tZW0uYy5vcmln
CVNhdCBOb3YgMTMgMDU6NDU6NDIgMTk5OQ0KKysrIGxpbnV4L2RyaXZlcnMv
Y2hhci9tZW0uYwlTYXQgTm92IDEzIDA1OjQ1OjQ4IDE5OTkNCkBAIC0yMSw3
ICsyMSw3IEBADQogDQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQogI2lu
Y2x1ZGUgPGFzbS9pby5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0K
KyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KIA0KICNpZmRlZiBDT05GSUdf
U09VTkQNCiB2b2lkIHNvdW5kY29yZV9pbml0KHZvaWQpOw0KLS0tIGxpbnV4
L2FyY2gvaTM4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jLm9yaWcJU2F0IE5v
diAxMyAwNToxMzo0MiAxOTk5DQorKysgbGludXgvYXJjaC9pMzg2L2Jvb3Qv
Y29tcHJlc3NlZC9taXNjLmMJU2F0IE5vdiAxMyAxMToxMzoyNCAxOTk5DQpA
QCAtOSwxMCArOSw4IEBADQogICogSGlnaCBsb2FkZWQgc3R1ZmYgYnkgSGFu
cyBMZXJtZW4gJiBXZXJuZXIgQWxtZXNiZXJnZXIsIEZlYi4gMTk5Ng0KICAq
Lw0KIA0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPg0KLSNpbmNsdWRlIDxhc20v
c2VnbWVudC5oPg0KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+DQogI2lu
Y2x1ZGUgPGFzbS9pby5oPg0KLQ0KIC8qDQogICogZ3ppcCBkZWNsYXJhdGlv
bnMNCiAgKi8NCi0tLSBsaW51eC9hcmNoL2kzODYvYm9vdC9NYWtlZmlsZS5v
cmlnCVNhdCBOb3YgMTMgMDE6NTY6NDYgMTk5OQ0KKysrIGxpbnV4L2FyY2gv
aTM4Ni9ib290L01ha2VmaWxlCVNhdCBOb3YgMTMgMDg6MzU6MjEgMTk5OQ0K
QEAgLTUxLDggKzUxLDExIEBADQogYm9vdHNlY3QuczogYm9vdHNlY3QuUyBN
YWtlZmlsZSAkKEJPT1RfSU5DTCkNCiAJJChDUFApIC10cmFkaXRpb25hbCAk
KFNWR0FfTU9ERSkgJChSQU1ESVNLKSAkPCAtbyAkQA0KIA0KLWJib290c2Vj
dDogYmJvb3RzZWN0Lm8gYnNldHVwLm8NCi0JJChMRCkgLVR0ZXh0IDB4MCAt
UiBic2V0dXAubyAtcyAtb2Zvcm1hdCBiaW5hcnkgJDwgLW8gJEANCitiYm9v
dHNlY3Q6IGJib290c2VjdC5vIGJib290c2VjdF9rbHVkZ2Uubw0KKwkkKExE
KSAtVHRleHQgMHgwIC1SIGJib290c2VjdF9rbHVkZ2UubyAtcyAtb2Zvcm1h
dCBiaW5hcnkgJDwgLW8gJEANCisNCitiYm9vdHNlY3Rfa2x1ZGdlLm86CWJi
b290c2VjdC5vIGJzZXR1cC5vDQorCSQoTEQpIC1yICReIC1vICRADQogDQog
YmJvb3RzZWN0Lm86IGJib290c2VjdC5zDQogCSQoQVMpIC1vICRAICQ8DQpA
QCAtODQsNCArODcsNSBAQA0KIAlybSAtZiB0b29scy9idWlsZA0KIAlybSAt
ZiBzZXR1cCBib290c2VjdCB6SW1hZ2UgY29tcHJlc3NlZC92bWxpbnV4Lm91
dA0KIAlybSAtZiBic2V0dXAgYmJvb3RzZWN0IGJ6SW1hZ2UgY29tcHJlc3Nl
ZC9idm1saW51eC5vdXQNCisJcm0gLWYgYmJvb3RzZWN0X2tsdWRnZS5vDQog
CUAkKE1BS0UpIC1DIGNvbXByZXNzZWQgY2xlYW4NCi0tLSBsaW51eC9hcmNo
L2kzODYvbW0vaW5pdC5jLm9yaWcJU2F0IE5vdiAxMyAwMTo1Njo0NSAxOTk5
DQorKysgbGludXgvYXJjaC9pMzg2L21tL2luaXQuYwlTYXQgTm92IDEzIDEx
OjAxOjI2IDE5OTkNCkBAIC0zMCw2ICszMCw3IEBADQogI2luY2x1ZGUgPGFz
bS9zeXN0ZW0uaD4NCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCiAjaW5j
bHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2Mu
aD4NCiAjaW5jbHVkZSA8YXNtL2RtYS5oPg0KICNpbmNsdWRlIDxhc20vZml4
bWFwLmg+DQogI2luY2x1ZGUgPGFzbS9lODIwLmg+DQpAQCAtMjg1LDcgKzI4
Niw2IEBADQogI2lmIENPTkZJR19YODZfUEFFDQogCQlpZiAocGdkX25vbmUo
KnBnZCkpIHsNCiAJCQlwbWQgPSAocG1kX3QgKikgYWxsb2NfYm9vdG1lbV9s
b3dfcGFnZXMoUEFHRV9TSVpFKTsNCi0JCQltZW1zZXQoKHZvaWQqKXBtZCwg
MCwgUEFHRV9TSVpFKTsNCiAJCQlwZ2RfdmFsKCpwZ2QpID0gX19wYShwbWQp
ICsgMHgxOw0KIAkJCWlmIChwbWQgIT0gcG1kX29mZnNldChwZ2QsIHN0YXJ0
KSkNCiAJCQkJQlVHKCk7DQpAQCAtMjk3LDcgKzI5Nyw2IEBADQogCQlmb3Ig
KDsgKGogPCBQVFJTX1BFUl9QTUQpICYmIHN0YXJ0OyBwbWQrKywgaisrKSB7
DQogCQkJaWYgKHBtZF9ub25lKCpwbWQpKSB7DQogCQkJCXB0ZSA9IChwdGVf
dCAqKSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOw0KLQkJ
CQltZW1zZXQoKHZvaWQqKXB0ZSwgMCwgUEFHRV9TSVpFKTsNCiAJCQkJcG1k
X3ZhbCgqcG1kKSA9IF9LRVJOUEdfVEFCTEUgKyBfX3BhKHB0ZSk7DQogCQkJ
CWlmIChwdGUgIT0gcHRlX29mZnNldChwbWQsIDApKQ0KIAkJCQkJQlVHKCk7
DQpAQCAtMzI3LDcgKzMyNiw2IEBADQogCQl2YWRkciA9IGkqUEdESVJfU0la
RTsNCiAjaWYgQ09ORklHX1g4Nl9QQUUNCiAJCXBtZCA9IChwbWRfdCAqKSBh
bGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOw0KLQkJbWVtc2V0
KCh2b2lkKilwbWQsIDAsIFBBR0VfU0laRSk7DQogCQlwZ2RfdmFsKCpwZ2Qp
ID0gX19wYShwbWQpICsgMHgxOw0KICNlbHNlDQogCQlwbWQgPSAocG1kX3Qg
KilwZ2Q7DQpAQCAtMzUyLDcgKzM1MCw2IEBADQogCQkJfQ0KIA0KIAkJCXB0
ZSA9IChwdGVfdCAqKSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJ
WkUpOw0KLQkJCW1lbXNldCgodm9pZCopcHRlLCAwLCBQQUdFX1NJWkUpOw0K
IAkJCXBtZF92YWwoKnBtZCkgPSBfS0VSTlBHX1RBQkxFICsgX19wYShwdGUp
Ow0KIA0KIAkJCWlmIChwdGUgIT0gcHRlX29mZnNldChwbWQsIDApKQ0KQEAg
LTQxMiw3ICs0MDksMTEgQEANCiAJICogdGhhdCBjYXNlKS4NCiAJICovDQog
CWZvciAoaSA9IDA7IGkgPCBVU0VSX1BUUlNfUEVSX1BHRDsgaSsrKQ0KKyNp
ZiBDT05GSUdfWDg2X1BBRQ0KKwkJcGdkX2NsZWFyKHN3YXBwZXJfcGdfZGly
K2kpOw0KKyNlbHNlDQogCQlwZ2RfdmFsKHN3YXBwZXJfcGdfZGlyW2ldKSA9
IDA7DQorI2VuZGlmDQogCWZsdXNoX3RsYl9hbGwoKTsNCiB9DQogDQpAQCAt
NDQ4LDEzICs0NDksMjEgQEANCiAJa21hcF9pbml0KCk7DQogI2VuZGlmDQog
CXsNCi0JCXVuc2lnbmVkIGludCB6b25lc19zaXplWzNdOw0KKwkJdW5zaWdu
ZWQgaW50IHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHswLCAwLCAwfTsN
CisJCXVuc2lnbmVkIGludCBtYXhfZG1hOw0KIA0KLQkJem9uZXNfc2l6ZVsw
XSA9IHZpcnRfdG9fcGh5cygoY2hhciAqKU1BWF9ETUFfQUREUkVTUykNCi0J
CQkJCSA+PiBQQUdFX1NISUZUOw0KLQkJem9uZXNfc2l6ZVsxXSA9IG1heF9s
b3dfcGZuIC0gem9uZXNfc2l6ZVswXTsNCi0JCXpvbmVzX3NpemVbMl0gPSBo
aWdoZW5kX3BmbiAtIHpvbmVzX3NpemVbMF0gLSB6b25lc19zaXplWzFdOw0K
KwkJbWF4X2RtYSA9IHZpcnRfdG9fcGh5cygoY2hhciAqKU1BWF9ETUFfQURE
UkVTUykgPj4gUEFHRV9TSElGVDsNCiANCisJCWlmIChtYXhfbG93X3BmbiA8
IG1heF9kbWEpDQorCQkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBtYXhfbG93
X3BmbjsNCisJCWVsc2Ugew0KKwkJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0g
bWF4X2RtYTsNCisJCQl6b25lc19zaXplW1pPTkVfTk9STUFMXSA9IG1heF9s
b3dfcGZuIC0gem9uZXNfc2l6ZVswXTsNCisjaWZkZWYgQ09ORklHX0hJR0hN
RU0NCisJCQl6b25lc19zaXplW1pPTkVfSElHSE1FTV0gPQ0KKwkJCQloaWdo
ZW5kX3BmbiAtIHpvbmVzX3NpemVbMF0gLSB6b25lc19zaXplWzFdOw0KKyNl
bmRpZg0KKwkJfQ0KIAkJZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7DQog
CX0NCiAJcmV0dXJuOw0KQEAgLTUyOCwxNSArNTM3LDEzIEBADQogDQogdm9p
ZCBfX2luaXQgbWVtX2luaXQodm9pZCkNCiB7DQotCWludCBjb2RlcGFnZXMg
PSAwOw0KLQlpbnQgcmVzZXJ2ZWRwYWdlcyA9IDA7DQotCWludCBkYXRhcGFn
ZXMgPSAwOw0KLQlpbnQgaW5pdHBhZ2VzID0gMDsNCi0jaWZkZWYgQ09ORklH
X0hJR0hNRU0NCisJaW50IGNvZGVzaXplLCByZXNlcnZlZHBhZ2VzLCBkYXRh
c2l6ZSwgaW5pdHNpemU7DQogCWludCB0bXA7DQogDQogCWlmICghbWVtX21h
cCkNCiAJCUJVRygpOw0KKw0KKyNpZmRlZiBDT05GSUdfSElHSE1FTQ0KIAlo
aWdobWVtX3N0YXJ0X3BhZ2UgPSBtZW1fbWFwICsgaGlnaHN0YXJ0X3BmbjsN
CiAJLyogY2FjaGUgdGhlIGhpZ2htZW1fbWFwbnIgKi8NCiAJaGlnaG1lbV9t
YXBuciA9IGhpZ2hzdGFydF9wZm47DQpAQCAtNTUyLDYgKzU1OSwxMyBAQA0K
IAkvKiB0aGlzIHdpbGwgcHV0IGFsbCBsb3cgbWVtb3J5IG9udG8gdGhlIGZy
ZWVsaXN0cyAqLw0KIAl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FsbF9ib290
bWVtKCk7DQogDQorCXJlc2VydmVkcGFnZXMgPSAwOw0KKwlmb3IgKHRtcCA9
IDA7IHRtcCA8IG1heF9sb3dfcGZuOyB0bXArKykNCisJCS8qDQorCQkgKiBP
bmx5IGNvdW50IHJlc2VydmVkIFJBTSBwYWdlcw0KKwkJICovDQorCQlpZiAo
cGFnZV9pc19yYW0odG1wKSAmJiBQYWdlUmVzZXJ2ZWQobWVtX21hcCt0bXAp
KQ0KKwkJCXJlc2VydmVkcGFnZXMrKzsNCiAjaWZkZWYgQ09ORklHX0hJR0hN
RU0NCiAJZm9yICh0bXAgPSBoaWdoc3RhcnRfcGZuOyB0bXAgPCBoaWdoZW5k
X3BmbjsgdG1wKyspIHsNCiAJCXN0cnVjdCBwYWdlICpwYWdlID0gbWVtX21h
cCArIHRtcDsNCkBAIC01NjgsMTkgKzU4MiwyMyBAQA0KIAl9DQogCXRvdGFs
cmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsNCiAjZW5kaWYNCisJY29k
ZXNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfZXRleHQgLSAodW5zaWduZWQg
bG9uZykgJl90ZXh0Ow0KKwlkYXRhc2l6ZSA9ICAodW5zaWduZWQgbG9uZykg
Jl9lZGF0YSAtICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0Ow0KKwlpbml0c2l6
ZSA9ICAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQgLSAodW5zaWduZWQg
bG9uZykgJl9faW5pdF9iZWdpbjsNCisNCiAJcHJpbnRrKCJNZW1vcnk6ICVs
dWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIHJlc2Vy
dmVkLCAlZGsgZGF0YSwgJWRrIGluaXQsICVsZGsgaGlnaG1lbSlcbiIsDQog
CQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NI
SUZULTEwKSwNCiAJCW1heF9tYXBuciA8PCAoUEFHRV9TSElGVC0xMCksDQot
CQljb2RlcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLA0KKwkJY29kZXNpemUg
Pj4gMTAsDQogCQlyZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwN
Ci0JCWRhdGFwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksDQotCQlpbml0cGFn
ZXMgPDwgKFBBR0VfU0hJRlQtMTApLA0KKwkJZGF0YXNpemUgPj4gMTAsDQor
CQlpbml0c2l6ZSA+PiAxMCwNCiAJCSh1bnNpZ25lZCBsb25nKSAodG90YWxo
aWdoX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSkNCiAJICAgICAgICk7DQog
DQogI2lmIENPTkZJR19YODZfUEFFDQogCWlmICghY3B1X2hhc19wYWUpDQot
CQlwYW5pYygiY2Fubm90IGV4ZWN1dGUgYSBQQUUtZW5hYmxlZCBrZXJuZWwg
b24gYSBQQUUtaW5jYXBhYmxlIENQVSEiKTsNCisJCXBhbmljKCJjYW5ub3Qg
ZXhlY3V0ZSBhIFBBRS1lbmFibGVkIGtlcm5lbCBvbiBhIFBBRS1sZXNzIENQ
VSEiKTsNCiAjZW5kaWYNCiAJaWYgKGJvb3RfY3B1X2RhdGEud3Bfd29ya3Nf
b2sgPCAwKQ0KIAkJdGVzdF93cF9iaXQoKTsNCi0tLSBsaW51eC9hcmNoL2kz
ODYvbW0vaW9yZW1hcC5jLm9yaWcJU2F0IE5vdiAxMyAwNToxMToxMCAxOTk5
DQorKysgbGludXgvYXJjaC9pMzg2L21tL2lvcmVtYXAuYwlTYXQgTm92IDEz
IDA1OjExOjE2IDE5OTkNCkBAIC0xMCw2ICsxMCw3IEBADQogDQogI2luY2x1
ZGUgPGxpbnV4L3ZtYWxsb2MuaD4NCiAjaW5jbHVkZSA8YXNtL2lvLmg+DQor
I2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+DQogDQogc3RhdGljIGlubGluZSB2
b2lkIHJlbWFwX2FyZWFfcHRlKHB0ZV90ICogcHRlLCB1bnNpZ25lZCBsb25n
IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwNCiAJdW5zaWduZWQgbG9u
ZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpDQotLS0gbGludXgv
YXJjaC9pMzg2L21tL2ZhdWx0LmMub3JpZwlTYXQgTm92IDEzIDA1OjUwOjEw
IDE5OTkNCisrKyBsaW51eC9hcmNoL2kzODYvbW0vZmF1bHQuYwlTYXQgTm92
IDEzIDA1OjUwOjE0IDE5OTkNCkBAIC0xOSw3ICsxOSw3IEBADQogDQogI2lu
Y2x1ZGUgPGFzbS9zeXN0ZW0uaD4NCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3Mu
aD4NCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNt
L3BnYWxsb2MuaD4NCiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4NCiANCiBl
eHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLHN0cnVjdCBwdF9yZWdzICos
bG9uZyk7DQotLS0gbGludXgvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMu
b3JpZwlTYXQgTm92IDEzIDAxOjU2OjQxIDE5OTkNCisrKyBsaW51eC9hcmNo
L2kzODYva2VybmVsL3NtcGJvb3QuYwlTYXQgTm92IDEzIDA1OjQ4OjQxIDE5
OTkNCkBAIC00NCw2ICs0NCw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2RlbGF5
Lmg+DQogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+DQogI2luY2x1
ZGUgPGFzbS9tdHJyLmg+DQorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+DQog
DQogLyogU2V0IGlmIHdlIGZpbmQgYSBCIHN0ZXBwaW5nIENQVQkJCSovDQog
c3RhdGljIGludCBzbXBfYl9zdGVwcGluZyA9IDA7DQpAQCAtNjQ5LDEwICs2
NTAsMTEgQEANCiANCiB2b2lkIF9faW5pdCBzbXBfc3RvcmVfY3B1X2luZm8o
aW50IGlkKQ0KIHsNCi0Jc3RydWN0IGNwdWluZm9feDg2ICpjPSZjcHVfZGF0
YVtpZF07DQorCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhICsg
aWQ7DQogDQogCSpjID0gYm9vdF9jcHVfZGF0YTsNCiAJYy0+cHRlX3F1aWNr
ID0gMDsNCisJYy0+cG1kX3F1aWNrID0gMDsNCiAJYy0+cGdkX3F1aWNrID0g
MDsNCiAJYy0+cGd0YWJsZV9jYWNoZV9zeiA9IDA7DQogCWlkZW50aWZ5X2Nw
dShjKTsNCkBAIC03MTksNyArNzIxLDcgQEANCiAJICogRW5hYmxlIEFQSUMN
CiAJICovDQogIAl2YWx1ZSB8PSAoMTw8OCk7DQotI2lmIDANCisjaWYgMQ0K
IAkvKiBFbmFibGUgZm9jdXMgcHJvY2Vzc29yIChiaXQ9PTApICovDQogIAl2
YWx1ZSAmPSB+KDE8PDkpOw0KICNlbHNlDQpAQCAtODIxLDggKzgyMyw3IEBA
DQogCQkgKiBjb3VsZCB1c2UgdGhlIHJlYWwgemVyby1wYWdlLCBidXQgaXQn
cyBzYWZlcg0KIAkJICogdGhpcyB3YXkgaWYgc29tZSBidWdneSBjb2RlIHdy
aXRlcyB0byB0aGlzIHBhZ2UgLi4uDQogCQkgKi8NCi0JCWFwaWNfcGh5cyA9
ICh1bnNpZ25lZCBsb25nKWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpF
KTsNCi0JCW1lbXNldCgodm9pZCAqKWFwaWNfcGh5cywgMCwgUEFHRV9TSVpF
KTsNCisJCWFwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKSBhbGxvY19ib290
bWVtX3BhZ2VzKFBBR0VfU0laRSk7DQogCQlhcGljX3BoeXMgPSBfX3BhKGFw
aWNfcGh5cyk7DQogCX0NCiAJc2V0X2ZpeG1hcChGSVhfQVBJQ19CQVNFLCBh
cGljX3BoeXMpOw0KQEAgLTgzNyw4ICs4MzgsNyBAQA0KIAkJCWlmIChzbXBf
Zm91bmRfY29uZmlnKSB7DQogCQkJCWlvYXBpY19waHlzID0gbXBfaW9hcGlj
c1tpXS5tcGNfYXBpY2FkZHI7DQogCQkJfSBlbHNlIHsNCi0JCQkJaW9hcGlj
X3BoeXMgPSAodW5zaWduZWQgbG9uZylhbGxvY19ib290bWVtX3BhZ2VzKFBB
R0VfU0laRSk7DQotCQkJCW1lbXNldCgodm9pZCAqKWlvYXBpY19waHlzLCAw
LCBQQUdFX1NJWkUpOw0KKwkJCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBs
b25nKSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7DQogCQkJCWlv
YXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7DQogCQkJfQ0KIAkJCXNl
dF9maXhtYXAoaWR4LGlvYXBpY19waHlzKTsNCi0tLSBsaW51eC9hcmNoL2kz
ODYva2VybmVsL3ZtODYuYy5vcmlnCVNhdCBOb3YgMTMgMDU6NDc6NDIgMTk5
OQ0KKysrIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvdm04Ni5jCVNhdCBOb3Yg
MTMgMDU6NDc6NDcgMTk5OQ0KQEAgLTE0LDcgKzE0LDcgQEANCiAjaW5jbHVk
ZSA8bGludXgvc21wX2xvY2suaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nl
c3MuaD4NCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8
YXNtL3BnYWxsb2MuaD4NCiAjaW5jbHVkZSA8YXNtL2lvLmg+DQogDQogLyoN
Ci0tLSBsaW51eC9hcmNoL2kzODYva2VybmVsL3NtcC5jLm9yaWcJU2F0IE5v
diAxMyAwNTo0ODoxMCAxOTk5DQorKysgbGludXgvYXJjaC9pMzg2L2tlcm5l
bC9zbXAuYwlTYXQgTm92IDEzIDA1OjQ4OjEyIDE5OTkNCkBAIC0xOCw2ICsx
OCw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQogI2luY2x1ZGUg
PGxpbnV4L21jMTQ2ODE4cnRjLmg+DQogI2luY2x1ZGUgPGFzbS9tdHJyLmg+
DQorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+DQogDQogLyoNCiAgKglTb21l
IG5vdGVzIG9uIHByb2Nlc3NvciBidWdzOg0KLS0tIGxpbnV4L2FyY2gvaTM4
Ni9rZXJuZWwvaXJxLmMub3JpZwlTYXQgTm92IDEzIDA1OjQ3OjIwIDE5OTkN
CisrKyBsaW51eC9hcmNoL2kzODYva2VybmVsL2lycS5jCVNhdCBOb3YgMTMg
MDU6NDc6MjIgMTk5OQ0KQEAgLTM3LDcgKzM3LDcgQEANCiAjaW5jbHVkZSA8
YXNtL3N5c3RlbS5oPg0KICNpbmNsdWRlIDxhc20vaW8uaD4NCiAjaW5jbHVk
ZSA8YXNtL2JpdG9wcy5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0K
KyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KICNpbmNsdWRlIDxhc20vZGVs
YXkuaD4NCiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4NCiAjaW5jbHVkZSA8YXNt
L2lycS5oPg0KLS0tIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYy5v
cmlnCVNhdCBOb3YgMTMgMTA6NDg6MDggMTk5OQ0KKysrIGxpbnV4L2FyY2gv
aTM4Ni9rZXJuZWwvc2V0dXAuYwlTYXQgTm92IDEzIDEwOjQ4OjE4IDE5OTkN
CkBAIC02MzQsNyArNjM0LDYgQEANCiAJaGlnaHN0YXJ0X3BmbiA9IGhpZ2hl
bmRfcGZuID0gbWF4X3BmbjsNCiAJaWYgKG1heF9wZm4gPiBNQVhNRU1fUEZO
KSB7DQogCQloaWdoc3RhcnRfcGZuID0gTUFYTUVNX1BGTjsNCi0JCWhpZ2hl
bmRfcGZuID0gbWF4X3BmbjsNCiAJCXByaW50ayhLRVJOX05PVElDRSAiJWxk
TUIgSElHSE1FTSBhdmFpbGFibGUuXG4iLA0KIAkJCXBhZ2VzX3RvX21iKGhp
Z2hlbmRfcGZuIC0gaGlnaHN0YXJ0X3BmbikpOw0KIAl9DQo=
--650352740-790050170-942520923=:4346--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/