Extended f_count patch (SMP-safe handling of struct file)

Alexander Viro (viro@math.psu.edu)
Tue, 22 Jun 1999 14:53:50 -0400 (EDT)


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.

---559023410-1963006865-930077630=:15722
Content-Type: TEXT/PLAIN; charset=US-ASCII

News:
* the only function in fs/file-table.c that still needs the big lock
is fput(). And only for two calls. The rest is SMP-safe.
* inuse_filp is no more. Instead of the one huge list we are keeping
per-superblock lists + per-tty lists + anonymous list (pipes and sockets).
That should speed up tty layer - it used to run through the whole list,
procfs stuff (on proc_unregister() - it did the same) and quota (we don't
have to traverse the whole list anymore).
* New type: struct file_list (fs.h). Header for the file list.
struct file contains the pointer to file_list (f_list). super_block and
tty_struct contain struct file_list (s_files and tty_files resp.).
* New function: file_move(struct file*, struct file_list*); moves
the file to list. SMP-safe. If device driver wants to keep a list of files
- fine, just move them (in ->open()) to a private list. BTW, AF_UNIX
garbage collector will win big way from such change, but I didn't do it
yet (per-PF lists).

I'll post cleaner version this evening. Patch is against 2.3.8-pre2.

---559023410-1963006865-930077630=:15722
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=f_count-patch-9
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.9906221453500.15722@weyl.math.psu.edu>
Content-Description:
Content-Disposition: attachment; filename=f_count-patch-9

ZGlmZiAtdXJOIGxpbnV4LTIuMy44LXByZTIvYXJjaC9hbHBoYS9rZXJuZWwv
b3NmX3N5cy5jIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL2FscGhhL2tlcm5l
bC9vc2Zfc3lzLmMNCi0tLSBsaW51eC0yLjMuOC1wcmUyL2FyY2gvYWxwaGEv
a2VybmVsL29zZl9zeXMuYwlNb24gSnVuIDIxIDEyOjM1OjQ5IDE5OTkNCisr
KyBsaW51eC1iaXJkLmZfY291bnQvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5
cy5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzAgMTk5OQ0KQEAgLTI1NSw2ICsyNTUs
NyBAQA0KIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IE5VTEw7DQogCXVuc2lnbmVk
IGxvbmcgcmV0ID0gLUVCQURGOw0KIA0KKwlkb3duKCZjdXJyZW50LT5tbS0+
bW1hcF9zZW0pOw0KIAlsb2NrX2tlcm5lbCgpOw0KICNpZiAwDQogCWlmIChm
bGFncyAmIChfTUFQX0hBU1NFTUFQSE9SRSB8IF9NQVBfSU5IRVJJVCB8IF9N
QVBfVU5BTElHTkVEKSkNCkBAIC0yNzIsNiArMjczLDcgQEANCiAJCWZwdXQo
ZmlsZSk7DQogb3V0Og0KIAl1bmxvY2tfa2VybmVsKCk7DQorCXVwKCZjdXJy
ZW50LT5tbS0+bW1hcF9zZW0pOw0KIAlyZXR1cm4gcmV0Ow0KIH0NCiANCmRp
ZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2FyY2gvYXJtL2tlcm5lbC9zeXNf
YXJtLmMgbGludXgtYmlyZC5mX2NvdW50L2FyY2gvYXJtL2tlcm5lbC9zeXNf
YXJtLmMNCi0tLSBsaW51eC0yLjMuOC1wcmUyL2FyY2gvYXJtL2tlcm5lbC9z
eXNfYXJtLmMJTW9uIEp1biAyMSAxNDowOToxNSAxOTk5DQorKysgbGludXgt
YmlyZC5mX2NvdW50L2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMJVHVlIEp1
biAyMiAxNDoyNDozMSAxOTk5DQpAQCAtNzIsNiArNzIsNyBAQA0KIAlzdHJ1
Y3QgZmlsZSAqIGZpbGUgPSBOVUxMOw0KIAlzdHJ1Y3QgbW1hcF9hcmdfc3Ry
dWN0IGE7DQogDQorCWRvd24oJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQog
CWxvY2tfa2VybmVsKCk7DQogCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJn
LCBzaXplb2YoYSkpKQ0KIAkJZ290byBvdXQ7DQpAQCAtODcsNiArODgsNyBA
QA0KIAkJZnB1dChmaWxlKTsNCiBvdXQ6DQogCXVubG9ja19rZXJuZWwoKTsN
CisJdXAoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQogCXJldHVybiBlcnJv
cjsNCiB9DQogDQpkaWZmIC11ck4gbGludXgtMi4zLjgtcHJlMi9hcmNoL21p
cHMva2VybmVsL2lyaXhlbGYuYyBsaW51eC1iaXJkLmZfY291bnQvYXJjaC9t
aXBzL2tlcm5lbC9pcml4ZWxmLmMNCi0tLSBsaW51eC0yLjMuOC1wcmUyL2Fy
Y2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jCU1vbiBKdW4gMjEgMTM6MzI6MjAg
MTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL21pcHMva2VybmVs
L2lyaXhlbGYuYwlUdWUgSnVuIDIyIDE0OjI0OjMxIDE5OTkNCkBAIC04NTAs
MTMgKzg1MCwxMiBAQA0KIA0KIAlsZW4gPSAwOw0KIAlmaWxlID0gY3VycmVu
dC0+ZmlsZXMtPmZkW2ZkXTsNCisJaWYgKCFmaWxlIHx8ICFmaWxlLT5mX29w
KQ0KKwkJcmV0dXJuIC1FQUNDRVM7DQogCWRlbnRyeSA9IGZpbGUtPmZfZGVu
dHJ5Ow0KIAlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsNCiAJZWxmX2JzcyA9
IDA7DQogCQ0KLQlpZiAoIWZpbGUgfHwgIWZpbGUtPmZfb3ApDQotCQlyZXR1
cm4gLUVBQ0NFUzsNCi0NCiAJLyogU2VlayB0byB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBmaWxlLiAqLw0KIAlpZiAoZmlsZS0+Zl9vcC0+bGxzZWVrKSB7DQog
CQlpZiAoKGVycm9yID0gZmlsZS0+Zl9vcC0+bGxzZWVrKGZpbGUsIDAsIDAp
KSAhPSAwKQ0KZGlmZiAtdXJOIGxpbnV4LTIuMy44LXByZTIvYXJjaC9taXBz
L2tlcm5lbC9zeXNjYWxsLmMgbGludXgtYmlyZC5mX2NvdW50L2FyY2gvbWlw
cy9rZXJuZWwvc3lzY2FsbC5jDQotLS0gbGludXgtMi4zLjgtcHJlMi9hcmNo
L21pcHMva2VybmVsL3N5c2NhbGwuYwlNb24gSnVuIDIxIDEyOjM1OjU3IDE5
OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvYXJjaC9taXBzL2tlcm5lbC9z
eXNjYWxsLmMJVHVlIEp1biAyMiAxNDoyNDozMSAxOTk5DQpAQCAtNjEsNiAr
NjEsNyBAQA0KIAlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBOVUxMOw0KIAl1bnNp
Z25lZCBsb25nIGVycm9yID0gLUVGQVVMVDsNCiANCisJZG93bigmY3VycmVu
dC0+bW0tPm1tYXBfc2VtKTsNCiAJbG9ja19rZXJuZWwoKTsNCiAJaWYgKCEo
ZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgew0KIAkJZXJyb3IgPSAtRUJBREY7
DQpAQCAtNzQsNiArNzUsNyBAQA0KICAgICAgICAgICAgICAgICBmcHV0KGZp
bGUpOw0KIG91dDoNCiAJdW5sb2NrX2tlcm5lbCgpOw0KKwl1cCgmY3VycmVu
dC0+bW0tPm1tYXBfc2VtKTsNCiAJcmV0dXJuIGVycm9yOw0KIH0NCiANCmRp
ZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2FyY2gvbWlwcy9rZXJuZWwvc3lz
aXJpeC5jIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL21pcHMva2VybmVsL3N5
c2lyaXguYw0KLS0tIGxpbnV4LTIuMy44LXByZTIvYXJjaC9taXBzL2tlcm5l
bC9zeXNpcml4LmMJTW9uIEp1biAyMSAxMzozMjoyMSAxOTk5DQorKysgbGlu
dXgtYmlyZC5mX2NvdW50L2FyY2gvbWlwcy9rZXJuZWwvc3lzaXJpeC5jCVR1
ZSBKdW4gMjIgMTQ6MjQ6MzEgMTk5OQ0KQEAgLTExMDMsNiArMTEwMyw3IEBA
DQogCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsNCiAJdW5zaWduZWQgbG9u
ZyByZXR2YWw7DQogDQorCWRvd24oJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7
DQogCWxvY2tfa2VybmVsKCk7DQogCWlmKCEoZmxhZ3MgJiBNQVBfQU5PTllN
T1VTKSkgew0KIAkJaWYoIShmaWxlID0gZmdldChmZCkpKSB7DQpAQCAtMTEz
MCw2ICsxMTMxLDcgQEANCiANCiBvdXQ6DQogCXVubG9ja19rZXJuZWwoKTsN
CisJdXAoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQogCXJldHVybiByZXR2
YWw7DQogfQ0KIA0KZGlmZiAtdXJOIGxpbnV4LTIuMy44LXByZTIvYXJjaC9w
cGMva2VybmVsL3N5c2NhbGxzLmMgbGludXgtYmlyZC5mX2NvdW50L2FyY2gv
cHBjL2tlcm5lbC9zeXNjYWxscy5jDQotLS0gbGludXgtMi4zLjgtcHJlMi9h
cmNoL3BwYy9rZXJuZWwvc3lzY2FsbHMuYwlNb24gSnVuIDIxIDEzOjMyOjMx
IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvYXJjaC9wcGMva2VybmVs
L3N5c2NhbGxzLmMJVHVlIEp1biAyMiAxNDoyNDozMSAxOTk5DQpAQCAtMjAx
LDEyICsyMDEsMTYgQEANCiANCiAJbG9ja19rZXJuZWwoKTsNCiAJaWYgKCEo
ZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgew0KLQkJaWYgKGZkID49IE5SX09Q
RU4gfHwgIShmaWxlID0gY3VycmVudC0+ZmlsZXMtPmZkW2ZkXSkpDQorCQlp
ZiAoIShmaWxlID0gZmdldChmZCkpKQ0KIAkJCWdvdG8gb3V0Ow0KIAl9DQog
CQ0KIAlmbGFncyAmPSB+KE1BUF9FWEVDVVRBQkxFIHwgTUFQX0RFTllXUklU
RSk7DQorCWRvd24oJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQogCXJldCA9
IGRvX21tYXAoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgb2Zmc2V0
KTsNCisJdXAoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQorCWlmIChmaWxl
KQ0KKwkJZnB1dChmaWxlKTsNCiBvdXQ6DQogCXVubG9ja19rZXJuZWwoKTsN
CiAJcmV0dXJuIHJldDsNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2Fy
Y2gvc3BhcmMva2VybmVsL3N1bm9zX2lvY3RsLmMgbGludXgtYmlyZC5mX2Nv
dW50L2FyY2gvc3BhcmMva2VybmVsL3N1bm9zX2lvY3RsLmMNCi0tLSBsaW51
eC0yLjMuOC1wcmUyL2FyY2gvc3BhcmMva2VybmVsL3N1bm9zX2lvY3RsLmMJ
TW9uIEp1biAyMSAxMjozNjowMiAxOTk5DQorKysgbGludXgtYmlyZC5mX2Nv
dW50L2FyY2gvc3BhcmMva2VybmVsL3N1bm9zX2lvY3RsLmMJVHVlIEp1biAy
MiAxNDoyNDozMSAxOTk5DQpAQCAtNDAsNyArNDAsNyBAQA0KIAlpbnQgcmV0
ID0gLUVCQURGOw0KIA0KIAlsb2NrX2tlcm5lbCgpOw0KLQlpZiAoZmQgPj0g
U1VOT1NfTlJfT1BFTiB8fCAhKGZpbHAgPSBjdXJyZW50LT5maWxlcy0+ZmQg
W2ZkXSkpDQorCWlmIChmZCA+PSBTVU5PU19OUl9PUEVOIHx8ICEoZmlscCA9
IGZjaGVjayhmZCkpKQ0KIAkJZ290byBvdXQ7DQogDQogCS8qIEZpcnN0IGhh
bmRsZSBhbiBlYXN5IGNvbXBhdC4gY2FzZSBmb3IgdHR5IGxkaXNjLiAqLw0K
ZGlmZiAtdXJOIGxpbnV4LTIuMy44LXByZTIvYXJjaC9zcGFyYy9tbS9zcm1t
dS5jIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL3NwYXJjL21tL3NybW11LmMN
Ci0tLSBsaW51eC0yLjMuOC1wcmUyL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwlN
b24gSnVuIDIxIDEyOjM2OjAyIDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291
bnQvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzEg
MTk5OQ0KQEAgLTIwNzYsNiArMjA3Niw3IEBADQogCQkJZ290byBkb25lOw0K
IAkJaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsNCiAJCW9mZnNl
dCA9IChhZGRyZXNzICYgUEFHRV9NQVNLKSAtIHZtYS0+dm1fc3RhcnQ7DQor
CQlzcGluX2xvY2soJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiAJCXZtYXJp
bmcgPSBpbm9kZS0+aV9tbWFwOyANCiAJCWRvIHsNCiAJCQkvKiBEbyBub3Qg
bWlzdGFrZSBvdXJzZWx2ZXMgYXMgYW5vdGhlciBtYXBwaW5nLiAqLw0KQEAg
LTIxMDksNiArMjExMCw3IEBADQogCQkJCX0NCiAJCQl9DQogCQl9IHdoaWxl
ICgodm1hcmluZyA9IHZtYXJpbmctPnZtX25leHRfc2hhcmUpICE9IE5VTEwp
Ow0KKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiAN
CiAJCWlmKGFsaWFzX2ZvdW5kICYmICgocHRlX3ZhbChwdGUpICYgU1JNTVVf
Q0FDSEUpICE9IDApKSB7DQogCQkJcGdkcCA9IHNybW11X3BnZF9vZmZzZXQo
dm1hLT52bV9tbSwgYWRkcmVzcyk7DQpkaWZmIC11ck4gbGludXgtMi4zLjgt
cHJlMi9hcmNoL3NwYXJjL21tL3N1bjRjLmMgbGludXgtYmlyZC5mX2NvdW50
L2FyY2gvc3BhcmMvbW0vc3VuNGMuYw0KLS0tIGxpbnV4LTIuMy44LXByZTIv
YXJjaC9zcGFyYy9tbS9zdW40Yy5jCU1vbiBKdW4gMjEgMTI6MzY6MDIgMTk5
OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL3NwYXJjL21tL3N1bjRj
LmMJVHVlIEp1biAyMiAxNDoyNDozMSAxOTk5DQpAQCAtMjY4Miw4ICsyNjgy
LDEwIEBADQogCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsNCiAJaWYoaW5v
ZGUpIHsNCiAJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKGFkZHJlc3MgJiBQ
QUdFX01BU0spIC0gdm1hLT52bV9zdGFydDsNCi0JCXN0cnVjdCB2bV9hcmVh
X3N0cnVjdCAqdm1hcmluZyA9IGlub2RlLT5pX21tYXA7IA0KKwkJc3RydWN0
IHZtX2FyZWFfc3RydWN0ICp2bWFyaW5nOw0KIAkJaW50IGFsaWFzX2ZvdW5k
ID0gMDsNCisJCXNwaW5fbG9jaygmaW5vZGUtPmlfc2hhcmVkX2xvY2spOw0K
KwkJdm1hcmluZyA9IGlub2RlLT5pX21tYXA7IA0KIAkJZG8gew0KIAkJCXVu
c2lnbmVkIGxvbmcgdmFkZHIgPSB2bWFyaW5nLT52bV9zdGFydCArIG9mZnNl
dDsNCiAJCQl1bnNpZ25lZCBsb25nIHN0YXJ0Ow0KQEAgLTI3MTIsNiArMjcx
NCw3IEBADQogCQkJCX0NCiAJCQl9DQogCQl9IHdoaWxlICgodm1hcmluZyA9
IHZtYXJpbmctPnZtX25leHRfc2hhcmUpICE9IE5VTEwpOw0KKwkJc3Bpbl91
bmxvY2soJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiANCiAJCWlmKGFsaWFz
X2ZvdW5kICYmICEocHRlX3ZhbChwdGUpICYgX1NVTjRDX1BBR0VfTk9DQUNI
RSkpIHsNCiAJCQlwZ2RwID0gc3VuNGNfcGdkX29mZnNldCh2bWEtPnZtX21t
LCBhZGRyZXNzKTsNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2FyY2gv
c3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYyBsaW51eC1iaXJkLmZfY291
bnQvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jDQotLS0gbGlu
dXgtMi4zLjgtcHJlMi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMy
LmMJTW9uIEp1biAyMSAxMzo0MjowMCAxOTk5DQorKysgbGludXgtYmlyZC5m
X2NvdW50L2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwlUdWUg
SnVuIDIyIDE0OjI0OjMxIDE5OTkNCkBAIC0yMzM1LDggKzIzMzUsOCBAQA0K
IAkJCWJyZWFrOw0KIAkJfQ0KIAkJLyogQnVtcCB0aGUgdXNhZ2UgY291bnQg
YW5kIGluc3RhbGwgdGhlIGZpbGUuICovDQotCQlmcFtpXS0+Zl9jb3VudCsr
Ow0KLQkJY3VycmVudC0+ZmlsZXMtPmZkW25ld19mZF0gPSBmcFtpXTsNCisJ
CWF0b21pY19pbmMoJmZwW2ldLT5mX2NvdW50KTsNCisJCWZkX2luc3RhbGwo
bmV3X2ZkLCBmcFtpXSk7DQogCX0NCiANCiAJaWYgKGkgPiAwKSB7DQpkaWZm
IC11ck4gbGludXgtMi4zLjgtcHJlMi9hcmNoL3NwYXJjNjQva2VybmVsL3N5
c19zdW5vczMyLmMgbGludXgtYmlyZC5mX2NvdW50L2FyY2gvc3BhcmM2NC9r
ZXJuZWwvc3lzX3N1bm9zMzIuYw0KLS0tIGxpbnV4LTIuMy44LXByZTIvYXJj
aC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jCU1vbiBKdW4gMjEgMTQ6
MDk6NTcgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL3NwYXJj
NjQva2VybmVsL3N5c19zdW5vczMyLmMJVHVlIEp1biAyMiAxNDoyNDozMSAx
OTk5DQpAQCAtNzEyLDcgKzcxMiw3IEBADQogCXN0cnVjdCBpbm9kZSAgKmlu
b2RlOw0KIAlzdHJ1Y3QgZmlsZSAgICpmaWxlOw0KIA0KLQlmaWxlID0gY3Vy
cmVudC0+ZmlsZXMtPmZkIFtmZF07DQorCWZpbGUgPSBmY2hlY2soZmQpOw0K
IAlpZighZmlsZSkNCiAJCXJldHVybiAwOw0KIA0KZGlmZiAtdXJOIGxpbnV4
LTIuMy44LXByZTIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jIGxpbnV4
LWJpcmQuZl9jb3VudC9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMNCi0t
LSBsaW51eC0yLjMuOC1wcmUyL2FyY2gvc3BhcmM2NC9zb2xhcmlzL21pc2Mu
YwlNb24gSnVuIDIxIDEyOjM2OjA1IDE5OTkNCisrKyBsaW51eC1iaXJkLmZf
Y291bnQvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jCVR1ZSBKdW4gMjIg
MTQ6MjQ6MzEgMTk5OQ0KQEAgLTgzLDYgKzgzLDcgQEANCiAJCX0NCiAJfQ0K
IA0KKwlkb3duKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KIAlyZXR2YWwg
PSAtRU5PTUVNOw0KIAlpZighKGZsYWdzICYgTUFQX0ZJWEVEKSAmJiAhYWRk
cikgew0KIAkJdW5zaWduZWQgbG9uZyBhdHRlbXB0ID0gZ2V0X3VubWFwcGVk
X2FyZWEoYWRkciwgbGVuKTsNCkBAIC0xMDIsNiArMTAzLDcgQEANCiAJaWYo
IXJldF90eXBlKQ0KIAkJcmV0dmFsID0gKChyZXR2YWwgPCAweGYwMDAwMDAw
KSA/IDAgOiByZXR2YWwpOw0KIG91dF9wdXRmOg0KKwl1cCgmY3VycmVudC0+
bW0tPm1tYXBfc2VtKTsNCiAJaWYgKGZpbGUpDQogCQlmcHV0KGZpbGUpOw0K
IG91dDoNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2RyaXZlcnMvYmxv
Y2svbG9vcC5jIGxpbnV4LWJpcmQuZl9jb3VudC9kcml2ZXJzL2Jsb2NrL2xv
b3AuYw0KLS0tIGxpbnV4LTIuMy44LXByZTIvZHJpdmVycy9ibG9jay9sb29w
LmMJTW9uIEp1biAyMSAxMzoxOTo1MyAxOTk5DQorKysgbGludXgtYmlyZC5m
X2NvdW50L2RyaXZlcnMvYmxvY2svbG9vcC5jCVR1ZSBKdW4gMjIgMTQ6MjQ6
MzEgMTk5OQ0KQEAgLTM5MSw2ICszOTEsNyBAQA0KIAkJCWxvLT5sb19iYWNr
aW5nX2ZpbGUtPmZfZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7DQogCQkJbG8t
PmxvX2JhY2tpbmdfZmlsZS0+Zl9vcCA9IGZpbGUtPmZfb3A7DQogCQkJbG8t
PmxvX2JhY2tpbmdfZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmlsZS0+cHJpdmF0
ZV9kYXRhOw0KKwkJCWZpbGVfbW92ZShsby0+bG9fYmFja2luZ19maWxlLCBm
aWxlLT5mX2xpc3QpOw0KIA0KIAkJCWVycm9yID0gZ2V0X3dyaXRlX2FjY2Vz
cyhpbm9kZSk7DQogCQkJaWYgKGVycm9yKSB7DQpkaWZmIC11ck4gbGludXgt
Mi4zLjgtcHJlMi9kcml2ZXJzL2NoYXIvc3lzcnEuYyBsaW51eC1iaXJkLmZf
Y291bnQvZHJpdmVycy9jaGFyL3N5c3JxLmMNCi0tLSBsaW51eC0yLjMuOC1w
cmUyL2RyaXZlcnMvY2hhci9zeXNycS5jCU1vbiBKdW4gMjEgMTI6MzY6MTIg
MTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9kcml2ZXJzL2NoYXIvc3lz
cnEuYwlUdWUgSnVuIDIyIDE0OjI0OjMxIDE5OTkNCkBAIC0xNTAsMTUgKzE1
MCw2IEBADQogDQogLyogQXV4IHJvdXRpbmVzIGZvciB0aGUgc3luY2VyICov
DQogDQotc3RhdGljIHZvaWQgYWxsX2ZpbGVzX3JlYWRfb25seSh2b2lkKQkg
ICAgLyogS2lsbCB3cml0ZSBwZXJtaXNzaW9ucyBvZiBhbGwgZmlsZXMgKi8N
Ci17DQotCXN0cnVjdCBmaWxlICpmaWxlOw0KLQ0KLQlmb3IgKGZpbGUgPSBp
bnVzZV9maWxwczsgZmlsZTsgZmlsZSA9IGZpbGUtPmZfbmV4dCkNCi0JCWlm
IChmaWxlLT5mX2RlbnRyeSAmJiBmaWxlLT5mX2NvdW50ICYmIFNfSVNSRUco
ZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpDQotCQkJZmlsZS0+
Zl9tb2RlICY9IH4yOw0KLX0NCi0NCiBzdGF0aWMgaW50IGlzX2xvY2FsX2Rp
c2soa2Rldl90IGRldikJICAgIC8qIEd1ZXNzIGlmIHRoZSBkZXZpY2UgaXMg
YSBsb2NhbCBoYXJkIGRyaXZlICovDQogew0KIAl1bnNpZ25lZCBpbnQgbWFq
b3IgPSBNQUpPUihkZXYpOw0KQEAgLTE5Miw2ICsxODMsNyBAQA0KIAkJc3Ry
dWN0IHN1cGVyX2Jsb2NrICpzYiA9IGdldF9zdXBlcihkZXYpOw0KIAkJc3Ry
dWN0IHZmc21vdW50ICp2ZnNtbnQ7DQogCQlpbnQgcmV0LCBmbGFnczsNCisJ
CXN0cnVjdCBmaWxlICpmaWxlOw0KIA0KIAkJaWYgKCFzYikgew0KIAkJCXBy
aW50aygiU3VwZXJibG9jayBub3QgZm91bmRcbiIpOw0KQEAgLTIwMSw2ICsx
OTMsMTMgQEANCiAJCQlwcmludGsoIlIvT1xuIik7DQogCQkJcmV0dXJuOw0K
IAkJfQ0KKw0KKwkJc3Bpbl9sb2NrKCZzYi0+c19maWxlcy5mbF9sb2NrKTsN
CisJCWZvciAoZmlsZSA9IHNiLT5zX2ZpbGVzLmZsX2xpc3Q7IGZpbGU7IGZp
bGUgPSBmaWxlLT5mX25leHQpDQorCQkJaWYgKGZpbGUtPmZfZGVudHJ5ICYm
IGF0b21pY19yZWFkKCZmaWxlLT5mX2NvdW50KQ0KKwkJCQkmJiBTX0lTUkVH
KGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQ0KKwkJCQlmaWxl
LT5mX21vZGUgJj0gfjI7DQorCQlzcGluX3VubG9jaygmc2ItPnNfZmlsZXMu
ZmxfbG9jayk7DQogCQlEUVVPVF9PRkYoZGV2KTsNCiAJCWZzeW5jX2Rldihk
ZXYpOw0KIAkJZmxhZ3MgPSBNU19SRE9OTFk7DQpAQCAtMjM5LDkgKzIzOCw2
IEBADQogCWxvY2tfa2VybmVsKCk7DQogCXJlbW91bnRfZmxhZyA9IChlbWVy
Z2VuY3lfc3luY19zY2hlZHVsZWQgPT0gRU1FUkdfUkVNT1VOVCk7DQogCWVt
ZXJnZW5jeV9zeW5jX3NjaGVkdWxlZCA9IDA7DQotDQotCWlmIChyZW1vdW50
X2ZsYWcpDQotCQlhbGxfZmlsZXNfcmVhZF9vbmx5KCk7DQogDQogCWZvciAo
bW50ID0gdmZzbW50bGlzdDsgbW50OyBtbnQgPSBtbnQtPm1udF9uZXh0KQ0K
IAkJaWYgKGlzX2xvY2FsX2Rpc2sobW50LT5tbnRfZGV2KSkNCmRpZmYgLXVy
TiBsaW51eC0yLjMuOC1wcmUyL2RyaXZlcnMvY2hhci90cHFpYzAyLmMgbGlu
dXgtYmlyZC5mX2NvdW50L2RyaXZlcnMvY2hhci90cHFpYzAyLmMNCi0tLSBs
aW51eC0yLjMuOC1wcmUyL2RyaXZlcnMvY2hhci90cHFpYzAyLmMJTW9uIEp1
biAyMSAxMjo0OTo1NSAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2Ry
aXZlcnMvY2hhci90cHFpYzAyLmMJVHVlIEp1biAyMiAxNDoyNDozMSAxOTk5
DQpAQCAtMjIxNiw3ICsyMjE2LDcgQEANCiAgICAgfQ0KICAgICANCiAJLyog
T25seSBvbmUgYXQgYSB0aW1lIGZyb20gaGVyZSBvbi4uLiAqLw0KLSAgICBp
ZiAoZmlscC0+Zl9jb3VudD4xKSAJLyogZmlscC0+Zl9jb3VudD09MSBmb3Ig
dGhlIGZpcnN0IG9wZW4oKSAqLw0KKyAgICBpZiAoYXRvbWljX3JlYWQoJmZp
bHAtPmZfY291bnQpPjEpIAkvKiBmaWxwLT5mX2NvdW50PT0xIGZvciB0aGUg
Zmlyc3Qgb3BlbigpICovDQogICAgIHsNCiAJcmV0dXJuIC1FQlVTWTsNCiAg
ICAgfQ0KZGlmZiAtdXJOIGxpbnV4LTIuMy44LXByZTIvZHJpdmVycy9jaGFy
L3R0eV9pby5jIGxpbnV4LWJpcmQuZl9jb3VudC9kcml2ZXJzL2NoYXIvdHR5
X2lvLmMNCi0tLSBsaW51eC0yLjMuOC1wcmUyL2RyaXZlcnMvY2hhci90dHlf
aW8uYwlNb24gSnVuIDIxIDEzOjU2OjI2IDE5OTkNCisrKyBsaW51eC1iaXJk
LmZfY291bnQvZHJpdmVycy9jaGFyL3R0eV9pby5jCVR1ZSBKdW4gMjIgMTQ6
MjQ6MzEgMTk5OQ0KQEAgLTE3NiwxMCArMTc2LDEyIEBADQogCXN0cnVjdCBm
aWxlICpmOw0KIAlpbnQgY291bnQgPSAwOw0KIAkNCi0JZm9yKGYgPSBpbnVz
ZV9maWxwczsgZjsgZiA9IGYtPmZfbmV4dCkgew0KKwlzcGluX2xvY2soJnR0
eS0+dHR5X2ZpbGVzLmZsX2xvY2spOw0KKwlmb3IoZiA9IHR0eS0+dHR5X2Zp
bGVzLmZsX2xpc3Q7IGY7IGYgPSBmLT5mX25leHQpIHsNCiAJCWlmKGYtPnBy
aXZhdGVfZGF0YSA9PSB0dHkpDQogCQkJY291bnQrKzsNCiAJfQ0KKwlzcGlu
X3VubG9jaygmdHR5LT50dHlfZmlsZXMuZmxfbG9jayk7DQogCWlmICh0dHkt
PmRyaXZlci50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkgJiYNCiAJICAg
IHR0eS0+ZHJpdmVyLnN1YnR5cGUgPT0gUFRZX1RZUEVfU0xBVkUgJiYNCiAJ
ICAgIHR0eS0+bGluayAmJiB0dHktPmxpbmstPmNvdW50KQ0KQEAgLTM5NSwx
MyArMzk3LDEwIEBADQogCWxvY2tfa2VybmVsKCk7DQogCQ0KIAljaGVja190
dHlfY291bnQodHR5LCAiZG9fdHR5X2hhbmd1cCIpOw0KLQlmb3IgKGZpbHAg
PSBpbnVzZV9maWxwczsgZmlscDsgZmlscCA9IGZpbHAtPmZfbmV4dCkgew0K
LQkJaWYgKGZpbHAtPnByaXZhdGVfZGF0YSAhPSB0dHkpDQotCQkJY29udGlu
dWU7DQorCXNwaW5fbG9jaygmdHR5LT50dHlfZmlsZXMuZmxfbG9jayk7DQor
CWZvciAoZmlscCA9IHR0eS0+dHR5X2ZpbGVzLmZsX2xpc3Q7IGZpbHA7IGZp
bHAgPSBmaWxwLT5mX25leHQpIHsNCiAJCWlmICghZmlscC0+Zl9kZW50cnkp
DQogCQkJY29udGludWU7DQotCQlpZiAoIWZpbHAtPmZfZGVudHJ5LT5kX2lu
b2RlKQ0KLQkJCWNvbnRpbnVlOw0KIAkJaWYgKGZpbHAtPmZfZGVudHJ5LT5k
X2lub2RlLT5pX3JkZXYgPT0gQ09OU09MRV9ERVYgfHwNCiAJCSAgICBmaWxw
LT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2ID09IFNZU0NPTlNfREVWKSB7
DQogCQkJY29uc19maWxwID0gZmlscDsNCkBAIC00MTAsOSArNDA5LDEwIEBA
DQogCQlpZiAoZmlscC0+Zl9vcCAhPSAmdHR5X2ZvcHMpDQogCQkJY29udGlu
dWU7DQogCQljbG9zZWNvdW50Kys7DQotCQl0dHlfZmFzeW5jKC0xLCBmaWxw
LCAwKTsNCisJCXR0eV9mYXN5bmMoLTEsIGZpbHAsIDApOwkvKiBjYW4ndCBi
bG9jayAqLw0KIAkJZmlscC0+Zl9vcCA9ICZodW5nX3VwX3R0eV9mb3BzOw0K
IAl9DQorCXNwaW5fdW5sb2NrKCZ0dHktPnR0eV9maWxlcy5mbF9sb2NrKTsN
CiAJDQogCS8qIEZJWE1FISBXaGF0IGFyZSB0aGUgbG9ja2luZyBpc3N1ZXMg
aGVyZT8gVGhpcyBtYXkgbWUgb3ZlcmRvaW5nIHRoaW5ncy4uICovDQogCXsN
CkBAIC0xMzAzLDYgKzEzMDMsNyBAQA0KIGluaXRfZGV2X2RvbmU6DQogI2Vu
ZGlmDQogCWZpbHAtPnByaXZhdGVfZGF0YSA9IHR0eTsNCisJZmlsZV9tb3Zl
KGZpbGUsICZ0dHktPnR0eV9maWxlcyk7DQogCWNoZWNrX3R0eV9jb3VudCh0
dHksICJ0dHlfb3BlbiIpOw0KIAlpZiAodHR5LT5kcml2ZXIudHlwZSA9PSBU
VFlfRFJJVkVSX1RZUEVfUFRZICYmDQogCSAgICB0dHktPmRyaXZlci5zdWJ0
eXBlID09IFBUWV9UWVBFX01BU1RFUikNCkBAIC0xOTMzLDYgKzE5MzQsOCBA
QA0KIAl0dHktPnRxX2hhbmd1cC5yb3V0aW5lID0gZG9fdHR5X2hhbmd1cDsN
CiAJdHR5LT50cV9oYW5ndXAuZGF0YSA9IHR0eTsNCiAJc2VtYV9pbml0KCZ0
dHktPmF0b21pY19yZWFkLCAxKTsNCisJaW5pdF9zcGluX2xvY2soJnR0eS0+
dHR5X2ZpbGVzLmZsX2xvY2spOw0KKwl0dHktPnR0eV9maWxlcy5mbF9saXN0
ID0gTlVMTDsNCiB9DQogDQogLyoNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC1w
cmUyL2RyaXZlcnMvc2NzaS9zdC5jIGxpbnV4LWJpcmQuZl9jb3VudC9kcml2
ZXJzL3Njc2kvc3QuYw0KLS0tIGxpbnV4LTIuMy44LXByZTIvZHJpdmVycy9z
Y3NpL3N0LmMJTW9uIEp1biAyMSAxMzoxMjowMSAxOTk5DQorKysgbGludXgt
YmlyZC5mX2NvdW50L2RyaXZlcnMvc2NzaS9zdC5jCVR1ZSBKdW4gMjIgMTQ6
MjQ6MzEgMTk5OQ0KQEAgLTg5MCw3ICs4OTAsNyBAQA0KICAgICBrZGV2X3Qg
ZGV2dCA9IGlub2RlLT5pX3JkZXY7DQogICAgIGludCBkZXY7DQogDQotICAg
IGlmIChmaWxwLT5mX2NvdW50ID4gMSkNCisgICAgaWYgKGF0b21pY19yZWFk
KCZmaWxwLT5mX2NvdW50KSA+IDEpDQogCXJldHVybiAwOw0KIA0KICAgICBk
ZXYgPSBUQVBFX05SKGRldnQpOw0KZGlmZiAtdXJOIGxpbnV4LTIuMy44LXBy
ZTIvZHJpdmVycy9zZ2kvY2hhci91c2VtYS5jIGxpbnV4LWJpcmQuZl9jb3Vu
dC9kcml2ZXJzL3NnaS9jaGFyL3VzZW1hLmMNCi0tLSBsaW51eC0yLjMuOC1w
cmUyL2RyaXZlcnMvc2dpL2NoYXIvdXNlbWEuYwlNb24gSnVuIDIxIDEzOjA3
OjQxIDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvZHJpdmVycy9zZ2kv
Y2hhci91c2VtYS5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzEgMTk5OQ0KQEAgLTUw
LDggKzUwLDggQEANCiAJaWYgKG5ld2ZkIDwgMCkNCiAJCXJldHVybiBuZXdm
ZDsNCiAJDQotCWN1cnJlbnQtPmZpbGVzLT5mZCBbbmV3ZmRdID0gdXNlbWEt
PmZpbHA7DQotCXVzZW1hLT5maWxwLT5mX2NvdW50Kys7DQorCWF0b21pY19p
bmMoJnVzZW1hLT5maWxwLT5mX2NvdW50KTsNCisJZmRfaW5zdGFsbChuZXdm
ZCwgdXNlbWEtPmZpbHApOw0KIAkvKiBJcyB0aGF0IGl0PyAqLw0KIAlwcmlu
dGsoIlVJT0NBVFRBQ0hTRU1BOiBuZXcgdXNlbWEgZmQgaXMgJWQiLCBuZXdm
ZCk7DQogCXJldHVybiBuZXdmZDsNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC1w
cmUyL2ZzL2RxdW90LmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL2RxdW90LmMN
Ci0tLSBsaW51eC0yLjMuOC1wcmUyL2ZzL2RxdW90LmMJTW9uIEp1biAyMSAx
Mjo1NTozMCAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2ZzL2RxdW90
LmMJVHVlIEp1biAyMiAxNDoyNDozMSAxOTk5DQpAQCAtNTgzLDIwICs1ODMs
MjIgQEANCiAJaWYgKCFzYiB8fCAhc2ItPmRxX29wKQ0KIAkJcmV0dXJuOwkv
KiBub3RoaW5nIHRvIGRvICovDQogDQotCWZvciAoZmlscCA9IGludXNlX2Zp
bHBzOyBmaWxwOyBmaWxwID0gZmlscC0+Zl9uZXh0KSB7DQorCXNwaW5fbG9j
aygmc2ItPnNfZmlsZXMuZmxfbG9jayk7DQorCWZvciAoZmlscCA9IHNiLT5z
X2ZpbGVzLmZsX2xpc3Q7IGZpbHA7IGZpbHAgPSBmaWxwLT5mX25leHQpIHsN
CiAJCWlmICghZmlscC0+Zl9kZW50cnkpDQogCQkJY29udGludWU7DQotCQlp
ZiAoZmlscC0+Zl9kZW50cnktPmRfc2IgIT0gc2IpDQotCQkJY29udGludWU7
DQogCQlpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOw0KIAkJaWYg
KCFpbm9kZSkNCiAJCQljb250aW51ZTsNCiAJCS8qIE4uQi4gcmFjZSBwcm9i
bGVtIC0tIGZpbHAgY291bGQgYmVjb21lIHVudXNlZCAqLw0KIAkJaWYgKGZp
bHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7DQorCQkJc3Bpbl91bmxvY2so
JnNiLT5zX2ZpbGVzLmZsX2xvY2spOw0KIAkJCXNiLT5kcV9vcC0+aW5pdGlh
bGl6ZShpbm9kZSwgdHlwZSk7DQogCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19R
VU9UQTsNCisJCQlzcGluX2xvY2soJnNiLT5zX2ZpbGVzLmZsX2xvY2spOw0K
IAkJfQ0KIAl9DQorCXNwaW5fdW5sb2NrKCZzYi0+c19maWxlcy5mbF9sb2Nr
KTsNCiB9DQogDQogc3RhdGljIHZvaWQgcmVzZXRfZHF1b3RfcHRycyhrZGV2
X3QgZGV2LCBzaG9ydCB0eXBlKQ0KQEAgLTYxNCwxMSArNjE2LDEwIEBADQog
CS8qIGZyZWUgYW55IHF1b3RhIGZvciB1bnVzZWQgZGVudHJpZXMgKi8NCiAJ
c2hyaW5rX2RjYWNoZV9zYihzYik7DQogDQotCWZvciAoZmlscCA9IGludXNl
X2ZpbHBzOyBmaWxwOyBmaWxwID0gZmlscC0+Zl9uZXh0KSB7DQorCXNwaW5f
bG9jaygmc2ItPnNfZmlsZXMuZmxfbG9jayk7DQorCWZvciAoZmlscCA9IHNi
LT5zX2ZpbGVzLmZsX2xpc3Q7IGZpbHA7IGZpbHAgPSBmaWxwLT5mX25leHQp
IHsNCiAJCWlmICghZmlscC0+Zl9kZW50cnkpDQogCQkJY29udGludWU7DQot
CQlpZiAoZmlscC0+Zl9kZW50cnktPmRfc2IgIT0gc2IpDQotCQkJY29udGlu
dWU7DQogCQlpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOw0KIAkJ
aWYgKCFpbm9kZSkNCiAJCQljb250aW51ZTsNCkBAIC02MzcsMTIgKzYzOCwx
NCBAQA0KIAkJCWlub2RlLT5pX2ZsYWdzICY9IH5TX1FVT1RBOw0KIAkJcHV0
X2l0Og0KIAkJCWlmIChkcXVvdCAhPSBOT0RRVU9UKSB7DQorCQkJCXNwaW5f
dW5sb2NrKCZzYi0+c19maWxlcy5mbF9sb2NrKTsNCiAJCQkJZHFwdXQoZHF1
b3QpOw0KIAkJCQkvKiB3ZSBtYXkgaGF2ZSBibG9ja2VkIC4uLiAqLw0KIAkJ
CQlnb3RvIHJlc3RhcnQ7DQogCQkJfQ0KIAkJfQ0KIAl9DQorCXNwaW5fdW5s
b2NrKCZzYi0+c19maWxlcy5mbF9sb2NrKTsNCiB9DQogDQogc3RhdGljIGlu
bGluZSB2b2lkIGRxdW90X2luY3JfaW5vZGVzKHN0cnVjdCBkcXVvdCAqZHF1
b3QsIHVuc2lnbmVkIGxvbmcgbnVtYmVyKQ0KZGlmZiAtdXJOIGxpbnV4LTIu
My44LXByZTIvZnMvZXhlYy5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9leGVj
LmMNCi0tLSBsaW51eC0yLjMuOC1wcmUyL2ZzL2V4ZWMuYwlNb24gSnVuIDIx
IDEzOjMwOjE1IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvZnMvZXhl
Yy5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzEgMTk5OQ0KQEAgLTEyMyw4ICsxMjMs
MTIgQEANCiB7DQogCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZGVudHJ5LT5k
X2lub2RlOw0KIAlzdHJ1Y3QgZmlsZSAqIGY7DQorCXN0cnVjdCBmaWxlX2xp
c3QgKiBsID0gTlVMTDsNCiAJaW50IGZkLCBlcnJvcjsNCiANCisJaWYgKGlu
b2RlLT5pX3NiKQ0KKwkJbCA9ICZpbm9kZS0+aV9zYi0+c19maWxlczsNCisN
CiAJZXJyb3IgPSAtRUlOVkFMOw0KIAlpZiAoIWlub2RlLT5pX29wIHx8ICFp
bm9kZS0+aV9vcC0+ZGVmYXVsdF9maWxlX29wcykNCiAJCWdvdG8gb3V0Ow0K
QEAgLTE0NSw2ICsxNDksNyBAQA0KIAkJCWlmIChlcnJvcikNCiAJCQkJZ290
byBvdXRfZmlscDsNCiAJCX0NCisJCWZpbGVfbW92ZShmLCBsKTsNCiAJCWZk
X2luc3RhbGwoZmQsIGYpOw0KIAkJZGdldChkZW50cnkpOw0KIAl9DQpAQCAt
NTYzLDcgKzU2OCw4IEBADQogCWlmICgocmV0dmFsID0gcGVybWlzc2lvbihp
bm9kZSwgTUFZX0VYRUMpKSAhPSAwKQ0KIAkJcmV0dXJuIHJldHZhbDsNCiAJ
LyogYmV0dGVyIG5vdCBleGVjdXRlIGZpbGVzIHdoaWNoIGFyZSBiZWluZyB3
cml0dGVuIHRvICovDQotCWlmIChpbm9kZS0+aV93cml0ZWNvdW50ID4gMCkN
CisJLyogV0FSTklORy4gUmVhZCBjb21tZW50cyBpbiBmcy9uYW1laS5jOjpn
ZXRfd3JpdGVfYWNjZXNzKCkgKi8NCisJaWYgKGF0b21pY19yZWFkKCZpbm9k
ZS0+aV93cml0ZWNvdW50KSA+IDApDQogCQlyZXR1cm4gLUVUWFRCU1k7DQog
DQogCWJwcm0tPmVfdWlkID0gY3VycmVudC0+ZXVpZDsNCmRpZmYgLXVyTiBs
aW51eC0yLjMuOC1wcmUyL2ZzL2ZpbGVfdGFibGUuYyBsaW51eC1iaXJkLmZf
Y291bnQvZnMvZmlsZV90YWJsZS5jDQotLS0gbGludXgtMi4zLjgtcHJlMi9m
cy9maWxlX3RhYmxlLmMJTW9uIEp1biAyMSAxMzozMDoxNSAxOTk5DQorKysg
bGludXgtYmlyZC5mX2NvdW50L2ZzL2ZpbGVfdGFibGUuYwlUdWUgSnVuIDIy
IDE0OjI0OjMxIDE5OTkNCkBAIC0yMCwyNSArMjAsMjEgQEANCiANCiAvKiBG
cmVlIGxpc3QgbWFuYWdlbWVudCwgaWYgeW91IGFyZSBoZXJlIHlvdSBtdXN0
IGhhdmUgZl9jb3VudCA9PSAwICovDQogc3RhdGljIHN0cnVjdCBmaWxlICog
ZnJlZV9maWxwcyA9IE5VTEw7DQotDQotc3RhdGljIHZvaWQgaW5zZXJ0X2Zp
bGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSkNCi17DQotCWlmKChmaWxlLT5m
X25leHQgPSBmcmVlX2ZpbHBzKSAhPSBOVUxMKQ0KLQkJZnJlZV9maWxwcy0+
Zl9wcHJldiA9ICZmaWxlLT5mX25leHQ7DQotCWZyZWVfZmlscHMgPSBmaWxl
Ow0KLQlmaWxlLT5mX3BwcmV2ID0gJmZyZWVfZmlscHM7DQotCW5yX2ZyZWVf
ZmlsZXMrKzsNCi19DQotDQotLyogVGhlIGxpc3Qgb2YgaW4tdXNlIGZpbHAn
cyBtdXN0IGJlIGV4cG9ydGVkICh1Z2guLi4pICovDQotc3RydWN0IGZpbGUg
KmludXNlX2ZpbHBzID0gTlVMTDsNCi0NCi1zdGF0aWMgaW5saW5lIHZvaWQg
cHV0X2ludXNlKHN0cnVjdCBmaWxlICpmaWxlKQ0KLXsNCi0JaWYoKGZpbGUt
PmZfbmV4dCA9IGludXNlX2ZpbHBzKSAhPSBOVUxMKQ0KLQkJaW51c2VfZmls
cHMtPmZfcHByZXYgPSAmZmlsZS0+Zl9uZXh0Ow0KLQlpbnVzZV9maWxwcyA9
IGZpbGU7DQotCWZpbGUtPmZfcHByZXYgPSAmaW51c2VfZmlscHM7DQorLyog
SGVyZSB0aGUgbmV3IGZpbGVzIGdvICovDQorc3RhdGljIHN0cnVjdCBmaWxl
X2xpc3QgYW5vbl9saXN0ID0geyBOVUxMLCBTUElOX0xPQ0tfVU5MT0NLRUQg
fTsNCisvKiBBbmQgaGVyZSB0aGUgZnJlZSBvbmVzIHNpdCAqLw0KK3N0YXRp
YyBzdHJ1Y3QgZmlsZV9saXN0IGZyZWVfbGlzdCA9IHsgTlVMTCwgU1BJTl9M
T0NLX1VOTE9DS0VEIH07DQorDQorc3RhdGljIHN0cnVjdCBmaWxlICppbnNl
cnRfZmlsZV9saXN0KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9s
aXN0ICpsaXN0LA0KKwkJCQkJaW50ICpjb3VudCkNCit7DQorCXNwaW5fbG9j
aygmbGlzdC5mbF9sb2NrKTsNCisJaWYgKCAoZmlsZS0+Zl9uZXh0ID0gbGlz
dC5mbF9saXN0KSAhPSBOVUxMKQ0KKwkJbGlzdC5mbF9saXN0LT5mX3BwcmV2
ID0gJmZpbGUtPmZfbmV4dDsNCisJbGlzdC5mbF9saXN0ID0gZmlsZTsNCisJ
ZmlsZS0+Zl9wcHJldiA9ICZsaXN0LmZsX2xpc3Q7DQorCWlmIChjb3VudCkg
KmNvdW50Kys7DQorCXNwaW5fdW5sb2NrKCZsaXN0LmZsX2xvY2spOw0KIH0N
CiANCiAvKiBJdCBkb2VzIG5vdCBtYXR0ZXIgd2hpY2ggbGlzdCBpdCBpcyBv
bi4gKi8NCkBAIC02NywyNCArNjMsMjggQEANCiAvKiBGaW5kIGFuIHVudXNl
ZCBmaWxlIHN0cnVjdHVyZSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4N
CiAgKiBSZXR1cm5zIE5VTEwsIGlmIHRoZXJlIGFyZSBubyBtb3JlIGZyZWUg
ZmlsZSBzdHJ1Y3R1cmVzIG9yDQogICogd2UgcnVuIG91dCBvZiBtZW1vcnku
DQorICoNCisgKiBTTVAtc2FmZS4NCiAgKi8NCiBzdHJ1Y3QgZmlsZSAqIGdl
dF9lbXB0eV9maWxwKHZvaWQpDQogew0KIAlzdGF0aWMgaW50IG9sZF9tYXgg
PSAwOw0KIAlzdHJ1Y3QgZmlsZSAqIGY7DQogDQorCXNwaW5fbG9jaygmZnJl
ZV9saXN0LmZsX2xvY2spOw0KIAlpZiAobnJfZnJlZV9maWxlcyA+IE5SX1JF
U0VSVkVEX0ZJTEVTKSB7DQogCXVzZWRfb25lOg0KLQkJZiA9IGZyZWVfZmls
cHM7DQorCQlmID0gZnJlZV9saXN0LmZsX2xpc3Q7DQogCQlyZW1vdmVfZmls
cChmKTsNCiAJCW5yX2ZyZWVfZmlsZXMtLTsNCiAJbmV3X29uZToNCisJCXNw
aW5fdW5sb2NrKCZmcmVlX2xpc3QuZmxfbG9jayk7DQogCQltZW1zZXQoZiwg
MCwgc2l6ZW9mKCpmKSk7DQotCQlmLT5mX2NvdW50ID0gMTsNCisJCWF0b21p
Y19zZXQoJmYtPmZfY291bnQsMSk7DQogCQlmLT5mX3ZlcnNpb24gPSArK2V2
ZW50Ow0KIAkJZi0+Zl91aWQgPSBjdXJyZW50LT5mc3VpZDsNCiAJCWYtPmZf
Z2lkID0gY3VycmVudC0+ZnNnaWQ7DQotCQlwdXRfaW51c2UoZik7DQorCQlp
bnNlcnRfZmlsZV9saXN0KGZpbGUsIGFub25fbGlzdCwgTlVMTCk7DQogCQly
ZXR1cm4gZjsNCiAJfQ0KIAkvKg0KQEAgLTk2LDcgKzk2LDkgQEANCiAJICog
QWxsb2NhdGUgYSBuZXcgb25lIGlmIHdlJ3JlIGJlbG93IHRoZSBsaW1pdC4N
CiAJICovDQogCWlmIChucl9maWxlcyA8IG1heF9maWxlcykgew0KKwkJc3Bp
bl91bmxvY2soJmZyZWVfbGlzdC5mbF9sb2NrKTsNCiAJCWYgPSBrbWVtX2Nh
Y2hlX2FsbG9jKGZpbHBfY2FjaGUsIFNMQUJfS0VSTkVMKTsNCisJCXNwaW5f
bG9jaygmZnJlZV9saXN0LmZsX2xvY2spOw0KIAkJaWYgKGYpIHsNCiAJCQlu
cl9maWxlcysrOw0KIAkJCWdvdG8gbmV3X29uZTsNCkBAIC0xMDgsNiArMTEw
LDcgQEANCiAJCXByaW50aygiVkZTOiBmaWxlLW1heCBsaW1pdCAlZCByZWFj
aGVkXG4iLCBtYXhfZmlsZXMpOw0KIAkJb2xkX21heCA9IG1heF9maWxlczsN
CiAJfQ0KKwlzcGluX3VubG9jaygmZnJlZV9saXN0LmZsX2xvY2spOw0KIAly
ZXR1cm4gTlVMTDsNCiB9DQogDQpAQCAtMTIwLDcgKzEyMyw3IEBADQogew0K
IAltZW1zZXQoZmlscCwgMCwgc2l6ZW9mKCpmaWxwKSk7DQogCWZpbHAtPmZf
bW9kZSAgID0gbW9kZTsNCi0JZmlscC0+Zl9jb3VudCAgPSAxOw0KKwlhdG9t
aWNfc2V0KCZmaWxwLT5mX2NvdW50LCAxKTsNCiAJZmlscC0+Zl9kZW50cnkg
PSBkZW50cnk7DQogCWZpbHAtPmZfdWlkICAgID0gY3VycmVudC0+ZnN1aWQ7
DQogCWZpbHAtPmZfZ2lkICAgID0gY3VycmVudC0+ZnNnaWQ7DQpAQCAtMTMz
LDIyICsxMzYsNjcgQEANCiANCiB2b2lkIGZwdXQoc3RydWN0IGZpbGUgKmZp
bGUpDQogew0KLQlpbnQgY291bnQgPSBmaWxlLT5mX2NvdW50LTE7DQorCWlm
IChhdG9taWNfZGVjX2FuZF90ZXN0KCZmaWxlLT5mX2NvdW50KSkgew0KKwkJ
YXRvbWljX2luYygmZmlsZS0+Zl9jb3VudCk7DQorCQ0KKwkJbG9ja3NfcmVt
b3ZlX2Zsb2NrKGZpbGUpOwkvKiBTdGlsbCBuZWVkIHRoZSAqLw0KKwkJX19m
cHV0KGZpbGUpOwkJCS8qIGJpZyBsb2NrIGhlcmUuICovDQogDQotCWlmICgh
Y291bnQpIHsNCi0JCWxvY2tzX3JlbW92ZV9mbG9jayhmaWxlKTsNCi0JCV9f
ZnB1dChmaWxlKTsNCi0JCWZpbGUtPmZfY291bnQgPSAwOw0KKwkJYXRvbWlj
X3NldCgmZmlsZS0+Zl9jb3VudCwgMCk7DQorCQlzcGluX2xvY2soJmxpc3Qu
ZmxfbG9jayk7DQogCQlyZW1vdmVfZmlscChmaWxlKTsNCi0JCWluc2VydF9m
aWxlX2ZyZWUoZmlsZSk7DQotCX0gZWxzZQ0KLQkJZmlsZS0+Zl9jb3VudCA9
IGNvdW50Ow0KKwkJc3Bpbl91bmxvY2soJmxpc3QuZmxfbG9jayk7DQorCQlp
bnNlcnRfZmlsZV9saXN0KGZpbGUsIGZyZWVfbGlzdCwgJm5yX2ZyZWVfZmls
ZXMpOw0KKwl9DQogfQ0KIA0KKy8qIEhlcmUuIHB1dF9maWxwKCkgaXMgU01Q
LXNhZmUgbm93LiAqLw0KKw0KIHZvaWQgcHV0X2ZpbHAoc3RydWN0IGZpbGUg
KmZpbGUpDQogew0KLQlpZigtLWZpbGUtPmZfY291bnQgPT0gMCkgew0KKwlp
ZihhdG9taWNfZGVjX2FuZF90ZXN0KCZmaWxlLT5mX2NvdW50KSkgew0KKwkJ
c3RydWN0IGxpc2VfbGlzdCAqbGlzdCA9IGZpbGUtPmZfbGlzdDsNCisJCXNw
aW5fbG9jaygmbGlzdC5mbF9sb2NrKTsNCiAJCXJlbW92ZV9maWxwKGZpbGUp
Ow0KLQkJaW5zZXJ0X2ZpbGVfZnJlZShmaWxlKTsNCisJCXNwaW5fdW5sb2Nr
KCZsaXN0LmZsX2xvY2spOw0KKwkJaW5zZXJ0X2ZpbGVfbGlzdChmaWxlLCBm
cmVlX2xpc3QsICZucl9mcmVlX2ZpbGVzKTsNCisJfQ0KK30NCisNCit2b2lk
IGZpbGVfbW92ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbGlz
dCAqbGlzdCkNCit7DQorCXN0cmN1dCBmaWxlX2xpc3QgKm9sZF9saXN0ID0g
ZmlsZS0+Zl9saXN0Ow0KKwlpZiAoIWxpc3QgfHwgbGlzdCA9PSBvbGRfbGlz
dCkNCisJCXJldHVybjsNCisJc3Bpbl9sb2NrKCZvbGRfbGlzdC5mbF9sb2Nr
KTsNCisJcmVtb3ZlX2ZpbHAoZmlsZSk7DQorCXNwaW5fdW5sb2NrKCZvbGRf
bGlzdC5mbF9sb2NrKTsNCisJaW5zZXJ0X2ZpbGVfbGlzdChmaWxlLCBsaXN0
LCBOVUxMKTsNCit9DQorDQoraW50IGZzX21heV9yZW1vdW50X3JvKHN0cnVj
dCBzdXBlcl9ibG9jayAqc2IpDQorew0KKwlzdHJ1Y3QgZmlsZSAqZmlsZTsN
CisNCisJLyogQ2hlY2sgdGhhdCBubyBmaWxlcyBhcmUgY3VycmVudGx5IG9w
ZW5lZCBmb3Igd3JpdGluZy4gKi8NCisJc3Bpbl9sb2NrKCZzYi0+c19maWxl
cy5mbF9sb2NrKTsNCisJZm9yIChmaWxlID0gc2ItPnNfZmlsZXMuZmxfbGlz
dDsgZmlsZTsgZmlsZSA9IGZpbGUtPmZfbmV4dCkgew0KKwkJc3RydWN0IGlu
b2RlICppbm9kZTsNCisJCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5v
ZGU7DQorCQlpZiAoIWlub2RlKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJLyog
RmlsZSB3aXRoIHBlbmRpbmcgZGVsZXRlPyAqLw0KKwkJaWYgKGlub2RlLT5p
X25saW5rID09IDApDQorCQkJZ290byB0b29fYmFkOw0KKw0KKwkJLyogV3Jp
dGFibGUgZmlsZT8gKi8NCisJCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUp
ICYmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpDQorCQkJcmV0dXJu
IDA7DQogCX0NCisJc3Bpbl91bmxvY2soJnNiLT5zX2ZpbGVzLmZsX2xvY2sp
Ow0KKwlyZXR1cm4gMTsgLyogVGlzJyBjb29sIGJyby4gKi8NCit0b29fYmFk
Og0KKwlzcGluX3VubG9jaygmc2ItPnNfZmlsZXMuZmxfbG9jayk7DQorCXJl
dHVybiAwOw0KIH0NCmRpZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2ZzL2hw
ZnMvbW1hcC5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9ocGZzL21tYXAuYw0K
LS0tIGxpbnV4LTIuMy44LXByZTIvZnMvaHBmcy9tbWFwLmMJTW9uIEp1biAy
MSAxMzowMzo0OSAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2ZzL2hw
ZnMvbW1hcC5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzEgMTk5OQ0KQEAgLTExOSw5
ICsxMTksOSBAQA0KIAkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7DQogCX0q
Lw0KIA0KLQl2bWEtPnZtX2ZpbGUgPSBmaWxlOw0KIAkvKmlub2RlLT5pX2Nv
dW50Kys7Ki8NCi0JZmlsZS0+Zl9jb3VudCsrOw0KKwlhdG9taWNfaW5jKCZm
aWxlLT5mX2NvdW50KTsNCisJdm1hLT52bV9maWxlID0gZmlsZTsNCiAJdm1h
LT52bV9vcHMgPSAmaHBmc19maWxlX21tYXA7DQogCS8qcHJpbnRrKCJlbmQg
bW1hcFxuIik7Ki8NCiAJcmV0dXJuIDA7DQpkaWZmIC11ck4gbGludXgtMi4z
LjgtcHJlMi9mcy9pbm9kZS5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9pbm9k
ZS5jDQotLS0gbGludXgtMi4zLjgtcHJlMi9mcy9pbm9kZS5jCU1vbiBKdW4g
MjEgMTQ6MTI6MDkgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9p
bm9kZS5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzEgMTk5OQ0KQEAgLTEzMCw2ICsx
MzAsNyBAQA0KIAlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfaGFzaCk7DQog
CUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOw0KIAlzZW1hX2lu
aXQoJmlub2RlLT5pX3NlbSwgMSk7DQorCXNwaW5fbG9ja19pbml0KCZpbm9k
ZS0+aV9zaGFyZWRfbG9jayk7DQogfQ0KIA0KIHN0YXRpYyBpbmxpbmUgdm9p
ZCB3cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KQEAgLTUyMSw3
ICs1MjIsNyBAQA0KIAlpbm9kZS0+aV9zb2NrID0gMDsNCiAJaW5vZGUtPmlf
b3AgPSBOVUxMOw0KIAlpbm9kZS0+aV9ubGluayA9IDE7DQotCWlub2RlLT5p
X3dyaXRlY291bnQgPSAwOw0KKwlhdG9taWNfc2V0KCZpbm9kZS0+aV93cml0
ZWNvdW50LCAwKTsNCiAJaW5vZGUtPmlfc2l6ZSA9IDA7DQogCWlub2RlLT5p
X2dlbmVyYXRpb24gPSAwOw0KIAltZW1zZXQoJmlub2RlLT5pX2RxdW90LCAw
LCBzaXplb2YoaW5vZGUtPmlfZHF1b3QpKTsNCkBAIC04MDYsMzEgKzgwNyw2
IEBADQogCWlmIChtYXggPiBNQVhfSU5PREUpDQogCQltYXggPSBNQVhfSU5P
REU7DQogCW1heF9pbm9kZXMgPSBtYXg7DQotfQ0KLQ0KLS8qIFRoaXMgYmVs
b25ncyBpbiBmaWxlX3RhYmxlLmMsIG5vdCBoZXJlLi4uICovDQotaW50IGZz
X21heV9yZW1vdW50X3JvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpDQotew0K
LQlzdHJ1Y3QgZmlsZSAqZmlsZTsNCi0NCi0JLyogQ2hlY2sgdGhhdCBubyBm
aWxlcyBhcmUgY3VycmVudGx5IG9wZW5lZCBmb3Igd3JpdGluZy4gKi8NCi0J
Zm9yIChmaWxlID0gaW51c2VfZmlscHM7IGZpbGU7IGZpbGUgPSBmaWxlLT5m
X25leHQpIHsNCi0JCXN0cnVjdCBpbm9kZSAqaW5vZGU7DQotCQlpZiAoIWZp
bGUtPmZfZGVudHJ5KQ0KLQkJCWNvbnRpbnVlOw0KLQkJaW5vZGUgPSBmaWxl
LT5mX2RlbnRyeS0+ZF9pbm9kZTsNCi0JCWlmICghaW5vZGUgfHwgaW5vZGUt
Pmlfc2IgIT0gc2IpDQotCQkJY29udGludWU7DQotDQotCQkvKiBGaWxlIHdp
dGggcGVuZGluZyBkZWxldGU/ICovDQotCQlpZiAoaW5vZGUtPmlfbmxpbmsg
PT0gMCkNCi0JCQlyZXR1cm4gMDsNCi0NCi0JCS8qIFdyaXRhYmxlIGZpbGU/
ICovDQotCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiAoZmlsZS0+
Zl9tb2RlICYgRk1PREVfV1JJVEUpKQ0KLQkJCXJldHVybiAwOw0KLQl9DQot
CXJldHVybiAxOyAvKiBUaXMnIGNvb2wgYnJvLiAqLw0KIH0NCiANCiB2b2lk
IHVwZGF0ZV9hdGltZSAoc3RydWN0IGlub2RlICppbm9kZSkNCmRpZmYgLXVy
TiBsaW51eC0yLjMuOC1wcmUyL2ZzL2xvY2tzLmMgbGludXgtYmlyZC5mX2Nv
dW50L2ZzL2xvY2tzLmMNCi0tLSBsaW51eC0yLjMuOC1wcmUyL2ZzL2xvY2tz
LmMJVHVlIEp1biAyMiAwOTowNjowOSAxOTk5DQorKysgbGludXgtYmlyZC5m
X2NvdW50L2ZzL2xvY2tzLmMJVHVlIEp1biAyMiAxNDoyNDozMSAxOTk5DQpA
QCAtNDAwLDE2ICs0MDAsMjMgQEANCiANCiAJLyogRG9uJ3QgYWxsb3cgbWFu
ZGF0b3J5IGxvY2tzIG9uIGZpbGVzIHRoYXQgbWF5IGJlIG1lbW9yeSBtYXBw
ZWQNCiAJICogYW5kIHNoYXJlZC4NCisJICoNCisJICogU2luY2UgZG9fbW1h
cCgpIGlzIHByb3RlY3RlZCBieSBiaWcgbG9jayB3ZSBhcmUgc2FmZSBoZXJl
LCBidXQgYXMNCisJICogc29vbiBhcyBpdCB3aWxsIGdvIHdlIHdpbGwgaGF2
ZSBhIGJ1bmNoIG9mIGludGVyZXN0aW5nIHN0dWZmIHRvDQorCSAqIGNhcmUg
b2YuDQogCSAqLw0KIAlpZiAoSVNfTUFORExPQ0soaW5vZGUpICYmDQogCSAg
ICAoaW5vZGUtPmlfbW9kZSAmIChTX0lTR0lEIHwgU19JWEdSUCkpID09IFNf
SVNHSUQgJiYNCiAJICAgIGlub2RlLT5pX21tYXApIHsNCi0JCXN0cnVjdCB2
bV9hcmVhX3N0cnVjdCAqdm1hID0gaW5vZGUtPmlfbW1hcDsNCisJCXN0cnVj
dCB2bV9hcmVhX3N0cnVjdCAqdm1hOw0KIAkJZXJyb3IgPSAtRUFHQUlOOw0K
KwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9zaGFyZWRfbG9jayk7DQorCQl2bWEg
PSBpbm9kZS0+aV9tbWFwOw0KIAkJZG8gew0KIAkJCWlmICh2bWEtPnZtX2Zs
YWdzICYgVk1fTUFZU0hBUkUpDQotCQkJCWdvdG8gb3V0X3B1dGY7DQorCQkJ
CWdvdG8gb3V0X3B1dGZfdW5sb2NrOw0KIAkJfSB3aGlsZSAoKHZtYSA9IHZt
YS0+dm1fbmV4dF9zaGFyZSkgIT0gTlVMTCk7DQorCQlzcGluX3VubG9jaygm
aW5vZGUtPmlfc2hhcmVkX2xvY2spOw0KIAl9DQogDQogCWVycm9yID0gLUVJ
TlZBTDsNCkBAIC00NjEsNiArNDY4LDkgQEANCiAJZnB1dChmaWxwKTsNCiBv
dXQ6DQogCXJldHVybiBlcnJvcjsNCitvdXRfcHV0Zl91bmxvY2s6DQorCXNw
aW5fdW5sb2NrKCZpbm9kZS0+aV9zaGFyZWRfbG9jayk7DQorCWdvdG8gb3V0
X3B1dGY7DQogfQ0KIA0KIC8qDQpkaWZmIC11ck4gbGludXgtMi4zLjgtcHJl
Mi9mcy9uYW1laS5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9uYW1laS5jDQot
LS0gbGludXgtMi4zLjgtcHJlMi9mcy9uYW1laS5jCU1vbiBKdW4gMjEgMTM6
MDc6NTkgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9uYW1laS5j
CVR1ZSBKdW4gMjIgMTQ6MjQ6MzEgMTk5OQ0KQEAgLTE3MSwxOCArMTcxLDIy
IEBADQogICogMDogbm8gd3JpdGVycywgbm8gVk1fREVOWVdSSVRFIG1hcHBp
bmdzDQogICogPCAwOiAoLWlfd3JpdGVjb3VudCkgdm1fYXJlYV9zdHJ1Y3Rz
IHdpdGggVk1fREVOWVdSSVRFIHNldCBleGlzdA0KICAqID4gMDogKGlfd3Jp
dGVjb3VudCkgdXNlcnMgYXJlIHdyaXRpbmcgdG8gdGhlIGZpbGUuDQorICoN
CisgKiBXQVJOSU5HOiBhcyBzb29uIGFzIHdlIHdpbGwgbW92ZSBnZXRfd3Jp
dGVfYWNjZXNzKCksIGRvX21tYXAoKSBvcg0KKyAqIHByZXBhcmVfYmluZm10
KCkgb3V0IG9mIHRoZSBiaWcgbG9jayB3ZSB3aWxsIG5lZWQgYSBzcGlubG9j
ayBwcm90ZWN0aW5nDQorICogdGhlIGNoZWNrcyBpbiBhbGwgMy4gRm9yIHRo
ZSB0aW1lIGJlaW5nIGl0IGlzIG5vdCBuZWVkZWQuDQogICovDQogaW50IGdl
dF93cml0ZV9hY2Nlc3Moc3RydWN0IGlub2RlICogaW5vZGUpDQogew0KLQlp
ZiAoaW5vZGUtPmlfd3JpdGVjb3VudCA8IDApDQorCWlmIChhdG9taWNfcmVh
ZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPCAwKQ0KIAkJcmV0dXJuIC1FVFhU
QlNZOw0KLQlpbm9kZS0+aV93cml0ZWNvdW50Kys7DQorCWF0b21pY19pbmMo
Jmlub2RlLT5pX3dyaXRlY291bnQpOw0KIAlyZXR1cm4gMDsNCiB9DQogDQog
dm9pZCBwdXRfd3JpdGVfYWNjZXNzKHN0cnVjdCBpbm9kZSAqIGlub2RlKQ0K
IHsNCi0JaW5vZGUtPmlfd3JpdGVjb3VudC0tOw0KKwlhdG9taWNfZGVjKCZp
bm9kZS0+aV93cml0ZWNvdW50KTsNCiB9DQogDQogLyoNCmRpZmYgLXVyTiBs
aW51eC0yLjMuOC1wcmUyL2ZzL25mcy93cml0ZS5jIGxpbnV4LWJpcmQuZl9j
b3VudC9mcy9uZnMvd3JpdGUuYw0KLS0tIGxpbnV4LTIuMy44LXByZTIvZnMv
bmZzL3dyaXRlLmMJTW9uIEp1biAyMSAxNDozMToyNSAxOTk5DQorKysgbGlu
dXgtYmlyZC5mX2NvdW50L2ZzL25mcy93cml0ZS5jCVR1ZSBKdW4gMjIgMTQ6
MjQ6MzEgMTk5OQ0KQEAgLTMwNSw2ICszMDUsNyBAQA0KIAkJZ290byBvdXRf
cmVxOw0KIA0KIAkvKiBQdXQgdGhlIHRhc2sgb24gaW5vZGUncyB3cml0ZWJh
Y2sgcmVxdWVzdCBsaXN0LiAqLw0KKwlhdG9taWNfaW5jKCZmaWxlLT5mX2Nv
dW50KTsNCiAJd3JlcS0+d2JfZmlsZSA9IGZpbGU7DQogCXdyZXEtPndiX3Bp
ZCAgICA9IGN1cnJlbnQtPnBpZDsNCiAJd3JlcS0+d2JfcGFnZSAgID0gcGFn
ZTsNCkBAIC00NjcsNyArNDY4LDYgQEANCiAJICogVGhlIElPIGNvbXBsZXRp
b24gd2lsbCB0aGVuIGZyZWUgdGhlIHBhZ2UgYW5kIHRoZSBkZW50cnkuDQog
CSAqLw0KIAlnZXRfcGFnZShwYWdlKTsNCi0JZmlsZS0+Zl9jb3VudCsrOw0K
IA0KIAkvKiBTY2hlZHVsZSByZXF1ZXN0ICovDQogCXN5bmNocm9ub3VzID0g
c2NoZWR1bGVfd3JpdGVfcmVxdWVzdChyZXEsIHN5bmNocm9ub3VzKTsNCmRp
ZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2ZzL25mc2QvdmZzLmMgbGludXgt
YmlyZC5mX2NvdW50L2ZzL25mc2QvdmZzLmMNCi0tLSBsaW51eC0yLjMuOC1w
cmUyL2ZzL25mc2QvdmZzLmMJTW9uIEp1biAyMSAxMzowODoxMiAxOTk5DQor
KysgbGludXgtYmlyZC5mX2NvdW50L2ZzL25mc2QvdmZzLmMJVHVlIEp1biAy
MiAxNDoyNDozMSAxOTk5DQpAQCAtMzQyLDcgKzM0Miw3IEBADQogDQogCW1l
bXNldChmaWxwLCAwLCBzaXplb2YoKmZpbHApKTsNCiAJZmlscC0+Zl9vcCAg
ICA9IGlub2RlLT5pX29wLT5kZWZhdWx0X2ZpbGVfb3BzOw0KLQlmaWxwLT5m
X2NvdW50ID0gMTsNCisJYXRvbWljX3NldCgmZmlscC0+Zl9jb3VudCwgMSk7
DQogCWZpbHAtPmZfZmxhZ3MgPSB3ZmxhZz8gT19XUk9OTFkgOiBPX1JET05M
WTsNCiAJZmlscC0+Zl9tb2RlICA9IHdmbGFnPyBGTU9ERV9XUklURSA6IEZN
T0RFX1JFQUQ7DQogCWZpbHAtPmZfZGVudHJ5ID0gZGVudHJ5Ow0KQEAgLTM2
MCw3ICszNjAsNyBAQA0KIAkJCS8qIEkgbmVhcmx5IGFkZGVkIHB1dF9maWxw
KCkgY2FsbCBoZXJlLCBidXQgdGhpcyBmaWxwDQogCQkJICogaXMgcmVhbGx5
IG9uIGNhbGxlcnMgc3RhY2sgZnJhbWUuIC1EYXZlTQ0KIAkJCSAqLw0KLQkJ
CWZpbHAtPmZfY291bnQtLTsNCisJCQlhdG9taWNfZGVjKCZmaWxwLT5mX2Nv
dW50KTsNCiAJCX0NCiAJfQ0KIG91dF9uZnNlcnI6DQpAQCAtNTg1LDcgKzU4
NSw3IEBADQogCQkgKiBuaWNlIGFuZCBzaW1wbGUgc29sdXRpb24gKElNSE8p
LCBhbmQgaXQgc2VlbXMgdG8NCiAJCSAqIHdvcms6LSkNCiAJCSAqLw0KLQkJ
aWYgKEVYX1dHQVRIRVIoZXhwKSAmJiAoaW5vZGUtPmlfd3JpdGVjb3VudCA+
IDENCisJCWlmIChFWF9XR0FUSEVSKGV4cCkgJiYgKGF0b21pY19yZWFkKCZp
bm9kZS0+aV93cml0ZWNvdW50KSA+IDENCiAJCSB8fCAobGFzdF9pbm8gPT0g
aW5vZGUtPmlfaW5vICYmIGxhc3RfZGV2ID09IGlub2RlLT5pX2RldikpKSB7
DQogI2lmIDANCiAJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQo
Jmlub2RlLT5pX3dhaXQsIDEwICogSFogLyAxMDAwKTsNCmRpZmYgLXVyTiBs
aW51eC0yLjMuOC1wcmUyL2ZzL29wZW4uYyBsaW51eC1iaXJkLmZfY291bnQv
ZnMvb3Blbi5jDQotLS0gbGludXgtMi4zLjgtcHJlMi9mcy9vcGVuLmMJTW9u
IEp1biAyMSAxMzoxMjoyMyAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50
L2ZzL29wZW4uYwlUdWUgSnVuIDIyIDE0OjI0OjMxIDE5OTkNCkBAIC02NjMs
NiArNjYzLDggQEANCiAJZi0+Zl9vcCA9IE5VTEw7DQogCWlmIChpbm9kZS0+
aV9vcCkNCiAJCWYtPmZfb3AgPSBpbm9kZS0+aV9vcC0+ZGVmYXVsdF9maWxl
X29wczsNCisJaWYgKGlub2RlLT5pX3NiKQ0KKwkJZmlsZV9tb3ZlKGYsICZp
bm9kZS0+aV9zYi0+c19maWxlcyk7DQogCWlmIChmLT5mX29wICYmIGYtPmZf
b3AtPm9wZW4pIHsNCiAJCWVycm9yID0gZi0+Zl9vcC0+b3Blbihpbm9kZSxm
KTsNCiAJCWlmIChlcnJvcikNCkBAIC03OTAsNyArNzkyLDcgQEANCiAJaW50
IHJldHZhbDsNCiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9k
ZW50cnk7DQogDQotCWlmIChmaWxwLT5mX2NvdW50ID09IDApIHsNCisJaWYg
KGF0b21pY19yZWFkKCZmaWxwLT5mX2NvdW50KSA9PSAwKSB7DQogCQlwcmlu
dGsoIlZGUzogQ2xvc2U6IGZpbGUgY291bnQgaXMgMFxuIik7DQogCQlyZXR1
cm4gMDsNCiAJfQ0KZGlmZiAtdXJOIGxpbnV4LTIuMy44LXByZTIvZnMvcHJv
Yy9pbm9kZS5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9wcm9jL2lub2RlLmMN
Ci0tLSBsaW51eC0yLjMuOC1wcmUyL2ZzL3Byb2MvaW5vZGUuYwlNb24gSnVu
IDIxIDEzOjM5OjQ1IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvZnMv
cHJvYy9pbm9kZS5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzIgMTk5OQ0KQEAgLTg3
LDEzICs4NywyNiBAQA0KIAl9DQogfQ0KIA0KK3N0cnVjdCBzdXBlcl9ibG9j
ayAqcHJvY19zdXBlcl9ibG9ja3MgPSBOVUxMOw0KKw0KK3N0YXRpYyB2b2lk
IHByb2NfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpDQorew0K
KwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKipwID0gJnByb2Nfc3VwZXJfYmxvY2tz
Ow0KKwl3aGlsZSAoKnAgIT0gc2IpIHsNCisJCWlmICghKnApCS8qIHNob3Vs
ZCBuZXZlciBoYXBwZW4gKi8NCisJCQlyZXR1cm47DQorCQlwID0gKHN0cnVj
dCBzdXBlcl9ibG9jayAqKikmKCpwKS0+dS5nZW5lcmljX3NicDsNCisJfQ0K
KwkqcCA9IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikoKnApLT51LmdlbmVyaWMu
c2JwOw0KK30NCisNCiBzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMg
cHJvY19zb3BzID0geyANCiAJcHJvY19yZWFkX2lub2RlLA0KIAlwcm9jX3dy
aXRlX2lub2RlLA0KIAlwcm9jX3B1dF9pbm9kZSwNCiAJcHJvY19kZWxldGVf
aW5vZGUsCS8qIGRlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKikgKi8NCiAJ
TlVMTCwNCi0JTlVMTCwNCisJcHJvY19wdXRfc3VwZXIsDQogCU5VTEwsDQog
CXByb2Nfc3RhdGZzLA0KIAlOVUxMDQpAQCAtMzIzLDYgKzMzNiw4IEBADQog
CWlmICghcy0+c19yb290KQ0KIAkJZ290byBvdXRfbm9fcm9vdDsNCiAJcGFy
c2Vfb3B0aW9ucyhkYXRhLCAmcm9vdF9pbm9kZS0+aV91aWQsICZyb290X2lu
b2RlLT5pX2dpZCk7DQorCXNiLT5nZW5lcmljX3NicCA9ICh2b2lkKikgcHJv
Y19zdXBlcl9ibG9ja3M7DQorCXByb2Nfc3VwZXJfYmxvY2tzID0gc2I7DQog
CXVubG9ja19zdXBlcihzKTsNCiAJcmV0dXJuIHM7DQogDQpkaWZmIC11ck4g
bGludXgtMi4zLjgtcHJlMi9mcy9wcm9jL3Jvb3QuYyBsaW51eC1iaXJkLmZf
Y291bnQvZnMvcHJvYy9yb290LmMNCi0tLSBsaW51eC0yLjMuOC1wcmUyL2Zz
L3Byb2Mvcm9vdC5jCU1vbiBKdW4gMjEgMTQ6MzE6MzAgMTk5OQ0KKysrIGxp
bnV4LWJpcmQuZl9jb3VudC9mcy9wcm9jL3Jvb3QuYwlUdWUgSnVuIDIyIDE0
OjI0OjMyIDE5OTkNCkBAIC0zNjYsMjMgKzM2NiwzNCBAQA0KIHN0YXRpYyB2
b2lkIHByb2Nfa2lsbF9pbm9kZXMoaW50IGlubykNCiB7DQogCXN0cnVjdCBm
aWxlICpmaWxwOw0KKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOw0KIA0KLQkv
KiBpbnVzZV9maWxwcyBpcyBwcm90ZWN0ZWQgYnkgdGhlIHNpbmdsZSBrZXJu
ZWwgbG9jayAqLw0KLQlmb3IgKGZpbHAgPSBpbnVzZV9maWxwczsgZmlscDsg
ZmlscCA9IGZpbHAtPmZfbmV4dCkgew0KLQkJc3RydWN0IGRlbnRyeSAqIGRl
bnRyeTsNCi0JCXN0cnVjdCBpbm9kZSAqIGlub2RlOw0KKwkvKg0KKwkgKiBB
Y3R1YWxseSBpdCdzIGEgcGFydGlhbCByZXZva2UoKS4gV2UgaGF2ZSB0byBn
byB0aHJvdWdoIGFsbA0KKwkgKiBjb3BpZXMgb2YgcHJvY2ZzLiBwcm9jX3N1
cGVyX2Jsb2NrcyBpcyBwcm90ZWN0ZWQgYnkgdGhlIGJpZw0KKwkgKiBsb2Nr
IGZvciB0aGUgdGltZSBiZWluZy4NCisJICovDQorCWZvciAoc2IgPSBwcm9j
X3N1cGVyX2Jsb2NrczsNCisJICAgICBzYjsNCisJICAgICBzYiA9IChzdHJ1
Y3Qgc3VwZXJfYmxvY2sqKXNiLT51LmdlbmVyaWNfc2JwKSB7DQorCQlzcGlu
X2xvY2soJnNiLT5zX2ZpbGVzLmZsX2xvY2spOw0KKwkJZm9yIChmaWxwID0g
c2ItPnNfZmlsZXMuZmxfbGlzdDsgZmlscDsgZmlscCA9IGZpbHAtPmZfbmV4
dCkgew0KKwkJCXN0cnVjdCBkZW50cnkgKiBkZW50cnk7DQorCQkJc3RydWN0
IGlub2RlICogaW5vZGU7DQogDQotCQlkZW50cnkgPSBmaWxwLT5mX2RlbnRy
eTsNCi0JCWlmICghZGVudHJ5KQ0KLQkJCWNvbnRpbnVlOw0KLQkJaWYgKGRl
bnRyeS0+ZF9vcCAhPSAmcHJvY19kZW50cnlfb3BlcmF0aW9ucykNCi0JCQlj
b250aW51ZTsNCi0JCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOw0KLQkJaWYg
KCFpbm9kZSkNCi0JCQljb250aW51ZTsNCi0JCWlmIChpbm9kZS0+aV9pbm8g
IT0gaW5vKQ0KLQkJCWNvbnRpbnVlOw0KLQkJZmlscC0+Zl9vcCA9IE5VTEw7
DQorCQkJZGVudHJ5ID0gZmlscC0+Zl9kZW50cnk7DQorCQkJaWYgKCFkZW50
cnkpDQorCQkJCWNvbnRpbnVlOw0KKwkJCWlmIChkZW50cnktPmRfb3AgIT0g
JnByb2NfZGVudHJ5X29wZXJhdGlvbnMpDQorCQkJCWNvbnRpbnVlOw0KKwkJ
CWlub2RlID0gZGVudHJ5LT5kX2lub2RlOw0KKwkJCWlmICghaW5vZGUpDQor
CQkJCWNvbnRpbnVlOw0KKwkJCWlmIChpbm9kZS0+aV9pbm8gIT0gaW5vKQ0K
KwkJCQljb250aW51ZTsNCisJCQlmaWxwLT5mX29wID0gTlVMTDsNCisJCX0N
CisJCXNwaW5fdW5sb2NrKCZzYi0+c19maWxlcy5mbF9sb2NrKTsNCiAJfQ0K
IH0NCiANCmRpZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2ZzL3NlbGVjdC5j
IGxpbnV4LWJpcmQuZl9jb3VudC9mcy9zZWxlY3QuYw0KLS0tIGxpbnV4LTIu
My44LXByZTIvZnMvc2VsZWN0LmMJTW9uIEp1biAyMSAxMzoxMjoyNCAxOTk5
DQorKysgbGludXgtYmlyZC5mX2NvdW50L2ZzL3NlbGVjdC5jCVR1ZSBKdW4g
MjIgMTQ6MjQ6MzIgMTk5OQ0KQEAgLTY1LDggKzY1LDggQEANCiAJCQlzdHJ1
Y3QgcG9sbF90YWJsZV9lbnRyeSAqIGVudHJ5Ow0KIG9rX3RhYmxlOg0KIAkJ
IAllbnRyeSA9IHAtPmVudHJ5ICsgcC0+bnI7DQorCQkgCWF0b21pY19pbmMo
JmZpbHAtPmZfY291bnQpOw0KIAkJIAllbnRyeS0+ZmlscCA9IGZpbHA7DQot
CQkgCWZpbHAtPmZfY291bnQrKzsNCiAJCQllbnRyeS0+d2FpdF9hZGRyZXNz
ID0gd2FpdF9hZGRyZXNzOw0KIAkJCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZl
bnRyeS0+d2FpdCwgY3VycmVudCk7DQogCQkJYWRkX3dhaXRfcXVldWUod2Fp
dF9hZGRyZXNzLCZlbnRyeS0+d2FpdCk7DQpkaWZmIC11ck4gbGludXgtMi4z
LjgtcHJlMi9mcy9zdXBlci5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9zdXBl
ci5jDQotLS0gbGludXgtMi4zLjgtcHJlMi9mcy9zdXBlci5jCU1vbiBKdW4g
MjEgMTQ6MTI6MTAgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9z
dXBlci5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzIgMTk5OQ0KQEAgLTUzMSw2ICs1
MzEsOCBAQA0KIAkJSU5JVF9MSVNUX0hFQUQoJnMtPnNfZGlydHkpOw0KIAkJ
bGlzdF9hZGQgKCZzLT5zX2xpc3QsIHN1cGVyX2Jsb2Nrcy5wcmV2KTsNCiAJ
CWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPnNfd2FpdCk7DQorCQlzcGluX2xv
Y2tfaW5pdCgmcy0+ZmlsZXMtPmZsX2xvY2spOw0KKwkJcy0+ZmlsZXMtPmZs
X2xpc3QgPSBOVUxMOw0KIAl9DQogCXJldHVybiBzOw0KIH0NCmRpZmYgLXVy
TiBsaW51eC0yLjMuOC1wcmUyL2luY2x1ZGUvbGludXgvZmlsZS5oIGxpbnV4
LWJpcmQuZl9jb3VudC9pbmNsdWRlL2xpbnV4L2ZpbGUuaA0KLS0tIGxpbnV4
LTIuMy44LXByZTIvaW5jbHVkZS9saW51eC9maWxlLmgJTW9uIEp1biAyMSAx
Mzo0MDoyNSAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2luY2x1ZGUv
bGludXgvZmlsZS5oCVR1ZSBKdW4gMjIgMTQ6MjQ6MzIgMTk5OQ0KQEAgLTMy
LDEyICszMiwxMyBAQA0KIAlyZXR1cm4gZmlsZTsNCiB9DQogDQorLyogU3Rp
bGwgbmVlZHMgYSBwcm90ZWN0aW9uIGFnYWluc3QgbW9kaWZpY2F0aW9ucyBv
ZiBjdXJyZW50LT5maWxlcy0+ZmRbXSAqLw0KIGV4dGVybiBpbmxpbmUgc3Ry
dWN0IGZpbGUgKiBmZ2V0KHVuc2lnbmVkIGludCBmZCkNCiB7DQogCXN0cnVj
dCBmaWxlICogZmlsZSA9IGZjaGVjayhmZCk7DQogDQogCWlmIChmaWxlKQ0K
LQkJZmlsZS0+Zl9jb3VudCsrOw0KKwkJYXRvbWljX2luYygmZmlsZS0+Zl9j
b3VudCk7DQogCXJldHVybiBmaWxlOw0KIH0NCiANCmRpZmYgLXVyTiBsaW51
eC0yLjMuOC1wcmUyL2luY2x1ZGUvbGludXgvZnMuaCBsaW51eC1iaXJkLmZf
Y291bnQvaW5jbHVkZS9saW51eC9mcy5oDQotLS0gbGludXgtMi4zLjgtcHJl
Mi9pbmNsdWRlL2xpbnV4L2ZzLmgJTW9uIEp1biAyMSAxNDozNjo1NyAxOTk5
DQorKysgbGludXgtYmlyZC5mX2NvdW50L2luY2x1ZGUvbGludXgvZnMuaAlU
dWUgSnVuIDIyIDE0OjI0OjMyIDE5OTkNCkBAIC0yMzQsMTMgKzIzNCwzMCBA
QA0KIHR5cGVkZWYgdm9pZCAoYmhfZW5kX2lvX3QpKHN0cnVjdCBidWZmZXJf
aGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7DQogdm9pZCBpbml0X2J1ZmZlcihz
dHJ1Y3QgYnVmZmVyX2hlYWQgKiwga2Rldl90LCBpbnQsIGJoX2VuZF9pb190
ICosIHZvaWQgKik7DQogDQotI2RlZmluZSBfX2J1ZmZlcl9zdGF0ZShiaCwg
c3RhdGUpCSgoKGJoKS0+Yl9zdGF0ZSAmICgxVUwgPDwgQkhfIyNzdGF0ZSkp
ICE9IDApDQorc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX3VwdG9kYXRlKHN0
cnVjdCBidWZmZXJfaGVhZCAqIGJoKQ0KK3sNCisJcmV0dXJuIHRlc3RfYml0
KEJIX1VwdG9kYXRlLCAmYmgtPmJfc3RhdGUpOw0KK30JDQorDQorc3RhdGlj
IGlubGluZSBpbnQgYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAq
IGJoKQ0KK3sNCisJcmV0dXJuIHRlc3RfYml0KEJIX0RpcnR5LCAmYmgtPmJf
c3RhdGUpOw0KK30NCiANCi0jZGVmaW5lIGJ1ZmZlcl91cHRvZGF0ZShiaCkJ
X19idWZmZXJfc3RhdGUoYmgsVXB0b2RhdGUpDQotI2RlZmluZSBidWZmZXJf
ZGlydHkoYmgpCV9fYnVmZmVyX3N0YXRlKGJoLERpcnR5KQ0KLSNkZWZpbmUg
YnVmZmVyX2xvY2tlZChiaCkJX19idWZmZXJfc3RhdGUoYmgsTG9jaykNCi0j
ZGVmaW5lIGJ1ZmZlcl9yZXEoYmgpCQlfX2J1ZmZlcl9zdGF0ZShiaCxSZXEp
DQotI2RlZmluZSBidWZmZXJfcHJvdGVjdGVkKGJoKQlfX2J1ZmZlcl9zdGF0
ZShiaCxQcm90ZWN0ZWQpDQorc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX2xv
Y2tlZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkNCit7DQorCXJldHVybiB0
ZXN0X2JpdChCSF9Mb2NrLCAmYmgtPmJfc3RhdGUpOw0KK30NCisNCitzdGF0
aWMgaW5saW5lIGludCBidWZmZXJfcmVxKHN0cnVjdCBidWZmZXJfaGVhZCAq
IGJoKQ0KK3sNCisJcmV0dXJuIHRlc3RfYml0KEJIX1JlcSwgJmJoLT5iX3N0
YXRlKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX3Byb3Rl
Y3RlZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkNCit7DQorCXJldHVybiB0
ZXN0X2JpdChCSF9Qcm90ZWN0ZWQsICZiaC0+Yl9zdGF0ZSk7DQorfQ0KIA0K
ICNkZWZpbmUgYnVmZmVyX3BhZ2UoYmgpCQkobWVtX21hcCArIE1BUF9OUigo
YmgpLT5iX2RhdGEpKQ0KICNkZWZpbmUgdG91Y2hfYnVmZmVyKGJoKQlzZXRf
Yml0KFBHX3JlZmVyZW5jZWQsICZidWZmZXJfcGFnZShiaCktPmZsYWdzKQ0K
QEAgLTM0NSw2ICszNjIsNyBAQA0KIAlzdHJ1Y3QgZmlsZV9sb2NrCSppX2Zs
b2NrOw0KIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKmlfbW1hcDsNCiAJc3Ry
dWN0IHBhZ2UJCSppX3BhZ2VzOw0KKwlzcGlubG9ja190CQlpX3NoYXJlZF9s
b2NrOw0KIAlzdHJ1Y3QgZHF1b3QJCSppX2RxdW90W01BWFFVT1RBU107DQog
CXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKmlfcGlwZTsNCiANCkBAIC0zNTMs
NyArMzcxLDcgQEANCiAJdW5zaWduZWQgaW50CQlpX2ZsYWdzOw0KIAl1bnNp
Z25lZCBjaGFyCQlpX3NvY2s7DQogDQotCWludAkJCWlfd3JpdGVjb3VudDsN
CisJYXRvbWljX3QJCWlfd3JpdGVjb3VudDsNCiAJdW5zaWduZWQgaW50CQlp
X2F0dHJfZmxhZ3M7DQogCV9fdTMyCQkJaV9nZW5lcmF0aW9uOw0KIAl1bmlv
biB7DQpAQCAtNDA0LDcgKzQyMiw4IEBADQogCXN0cnVjdCBmaWxlX29wZXJh
dGlvbnMJKmZfb3A7DQogCW1vZGVfdAkJCWZfbW9kZTsNCiAJbG9mZl90CQkJ
Zl9wb3M7DQotCXVuc2lnbmVkIGludCAJCWZfY291bnQsIGZfZmxhZ3M7DQor
CWF0b21pY190IAkJZl9jb3VudDsNCisJdW5zaWduZWQgaW50CQlmX2ZsYWdz
Ow0KIAl1bnNpZ25lZCBsb25nIAkJZl9yZWFkYSwgZl9yYW1heCwgZl9yYWVu
ZCwgZl9yYWxlbiwgZl9yYXdpbjsNCiAJc3RydWN0IGZvd25fc3RydWN0CWZf
b3duZXI7DQogCXVuc2lnbmVkIGludAkJZl91aWQsIGZfZ2lkOw0KQEAgLTQx
NCw2ICs0MzMsNyBAQA0KIA0KIAkvKiBuZWVkZWQgZm9yIHR0eSBkcml2ZXIs
IGFuZCBtYXliZSBvdGhlcnMgKi8NCiAJdm9pZAkJCSpwcml2YXRlX2RhdGE7
DQorCXN0cnVjdCBmaWxlX2xpc3QJKmZfbGlzdDsJLyogcG9pbnRlciBiYWNr
IHRvIHRoZSBsaXN0ICovDQogfTsNCiANCiBleHRlcm4gaW50IGluaXRfcHJp
dmF0ZV9maWxlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50
KTsNCkBAIC00ODEsNiArNTAxLDExIEBADQogDQogZXh0ZXJuIGludCBmYXN5
bmNfaGVscGVyKGludCwgc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmFz
eW5jX3N0cnVjdCAqKik7DQogDQorc3RydWN0IGZpbGVfbGlzdCB7DQorCXN0
cnVjdCBmaWxlICoJZmxfbGlzdDsNCisJc3BpbmxvY2tfdAlmbF9sb2NrOyAN
Cit9Ow0KKw0KICNpbmNsdWRlIDxsaW51eC9taW5peF9mc19zYi5oPg0KICNp
bmNsdWRlIDxsaW51eC9leHQyX2ZzX3NiLmg+DQogI2luY2x1ZGUgPGxpbnV4
L2hwZnNfZnNfc2IuaD4NCkBAIC01MjIsNiArNTQ3LDcgQEANCiAJc2hvcnQg
aW50CQlzX2liYXNrZXRfY291bnQ7DQogCXNob3J0IGludAkJc19pYmFza2V0
X21heDsNCiAJc3RydWN0IGxpc3RfaGVhZAlzX2RpcnR5OwkvKiBkaXJ0eSBp
bm9kZXMgKi8NCisJc3RydWN0IGZpbGVfbGlzdAlzX2ZpbGVzOw0KIA0KIAl1
bmlvbiB7DQogCQlzdHJ1Y3QgbWluaXhfc2JfaW5mbwltaW5peF9zYjsNCkBA
IC03MzEsOCArNzU3LDYgQEANCiBleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0
aW9ucyB3cml0ZV9waXBlX2ZvcHM7DQogZXh0ZXJuIHN0cnVjdCBmaWxlX29w
ZXJhdGlvbnMgcmR3cl9waXBlX2ZvcHM7DQogDQotZXh0ZXJuIHN0cnVjdCBm
aWxlX3N5c3RlbV90eXBlICpnZXRfZnNfdHlwZShjb25zdCBjaGFyICopOw0K
LQ0KIGV4dGVybiBpbnQgZnNfbWF5X3JlbW91bnRfcm8oc3RydWN0IHN1cGVy
X2Jsb2NrICopOw0KIGV4dGVybiBpbnQgZnNfbWF5X21vdW50KGtkZXZfdCk7
DQogDQpAQCAtODQ2LDYgKzg3MCw3IEBADQogZXh0ZXJuIHZvaWQgaW5zZXJ0
X2lub2RlX2hhc2goc3RydWN0IGlub2RlICopOw0KIGV4dGVybiB2b2lkIHJl
bW92ZV9pbm9kZV9oYXNoKHN0cnVjdCBpbm9kZSAqKTsNCiBleHRlcm4gc3Ry
dWN0IGZpbGUgKiBnZXRfZW1wdHlfZmlscCh2b2lkKTsNCitleHRlcm4gdm9p
ZCBmaWxlX21vdmUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBmaWxlX2xpc3Qg
Kmxpc3QpOw0KIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBnZXRfaGFz
aF90YWJsZShrZGV2X3QsIGludCwgaW50KTsNCiBleHRlcm4gc3RydWN0IGJ1
ZmZlcl9oZWFkICogZ2V0YmxrKGtkZXZfdCwgaW50LCBpbnQpOw0KIGV4dGVy
biBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBmaW5kX2J1ZmZlcihrZGV2X3QsIGlu
dCwgaW50KTsNCmRpZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2luY2x1ZGUv
bGludXgvcHJvY19mcy5oIGxpbnV4LWJpcmQuZl9jb3VudC9pbmNsdWRlL2xp
bnV4L3Byb2NfZnMuaA0KLS0tIGxpbnV4LTIuMy44LXByZTIvaW5jbHVkZS9s
aW51eC9wcm9jX2ZzLmgJTW9uIEp1biAyMSAxNDoyNzoyOSAxOTk5DQorKysg
bGludXgtYmlyZC5mX2NvdW50L2luY2x1ZGUvbGludXgvcHJvY19mcy5oCVR1
ZSBKdW4gMjIgMTQ6MjQ6MzIgMTk5OQ0KQEAgLTM3NCw2ICszNzQsNyBAQA0K
ICAgICB9DQogfQ0KIA0KK2V4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBy
b2Nfc3VwZXJfYmxvY2tzOw0KIGV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJh
dGlvbnMgcHJvY19kZW50cnlfb3BlcmF0aW9uczsNCiBleHRlcm4gc3RydWN0
IHN1cGVyX2Jsb2NrICpwcm9jX3JlYWRfc3VwZXIoc3RydWN0IHN1cGVyX2Js
b2NrICosdm9pZCAqLGludCk7DQogZXh0ZXJuIGludCBpbml0X3Byb2NfZnMo
dm9pZCk7DQpkaWZmIC11ck4gbGludXgtMi4zLjgtcHJlMi9pbmNsdWRlL2xp
bnV4L3R0eS5oIGxpbnV4LWJpcmQuZl9jb3VudC9pbmNsdWRlL2xpbnV4L3R0
eS5oDQotLS0gbGludXgtMi4zLjgtcHJlMi9pbmNsdWRlL2xpbnV4L3R0eS5o
CU1vbiBKdW4gMjEgMTI6NDA6MjkgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9j
b3VudC9pbmNsdWRlL2xpbnV4L3R0eS5oCVR1ZSBKdW4gMjIgMTQ6MjQ6MzIg
MTk5OQ0KQEAgLTI3Nyw2ICsyNzcsNyBAQA0KIAlzdHJ1Y3QgdHFfc3RydWN0
IHRxX2hhbmd1cDsNCiAJdm9pZCAqZGlzY19kYXRhOw0KIAl2b2lkICpkcml2
ZXJfZGF0YTsNCisJc3RydWN0IGZpbGVfbGlzdCB0dHlfZmlsZXM7DQogDQog
I2RlZmluZSBOX1RUWV9CVUZfU0laRSA0MDk2DQogCQ0KZGlmZiAtdXJOIGxp
bnV4LTIuMy44LXByZTIvaXBjL3NobS5jIGxpbnV4LWJpcmQuZl9jb3VudC9p
cGMvc2htLmMNCi0tLSBsaW51eC0yLjMuOC1wcmUyL2lwYy9zaG0uYwlNb24g
SnVuIDIxIDEzOjUwOjA3IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQv
aXBjL3NobS5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzIgMTk5OQ0KQEAgLTU0Nyw2
ICs1NDcsNyBAQA0KIAl1bnNpZ25lZCBpbnQgaWQ7DQogCXN0cnVjdCBzaG1p
ZF9rZXJuZWwgKnNocDsNCiANCisJbG9ja19rZXJuZWwoKTsNCiAJaWQgPSBT
V1BfT0ZGU0VUKHNobWQtPnZtX3B0ZSkgJiBTSE1fSURfTUFTSzsNCiAJc2hw
ID0gc2htX3NlZ3NbaWRdOw0KIAlpZiAoc2hwID09IElQQ19VTlVTRUQpIHsN
CkBAIC01NTcsNiArNTU4LDcgQEANCiAJc2hwLT51LnNobV9uYXR0Y2grKzsN
CiAJc2hwLT51LnNobV9hdGltZSA9IENVUlJFTlRfVElNRTsNCiAJc2hwLT51
LnNobV9scGlkID0gY3VycmVudC0+cGlkOw0KKwl1bmxvY2tfa2VybmVsKCk7
DQogfQ0KIA0KIC8qDQpAQCAtNTcwLDYgKzU3Miw3IEBADQogCXN0cnVjdCBz
aG1pZF9rZXJuZWwgKnNocDsNCiAJaW50IGlkOw0KIA0KKwlsb2NrX2tlcm5l
bCgpOw0KIAkvKiByZW1vdmUgZnJvbSB0aGUgbGlzdCBvZiBhdHRhY2hlcyBv
ZiB0aGUgc2htIHNlZ21lbnQgKi8NCiAJaWQgPSBTV1BfT0ZGU0VUKHNobWQt
PnZtX3B0ZSkgJiBTSE1fSURfTUFTSzsNCiAJc2hwID0gc2htX3NlZ3NbaWRd
Ow0KQEAgLTU3OCw2ICs1ODEsNyBAQA0KIAlzaHAtPnUuc2htX2R0aW1lID0g
Q1VSUkVOVF9USU1FOw0KIAlpZiAoLS1zaHAtPnUuc2htX25hdHRjaCA8PSAw
ICYmIHNocC0+dS5zaG1fcGVybS5tb2RlICYgU0hNX0RFU1QpDQogCQlraWxs
c2VnIChpZCk7DQorCXVubG9ja19rZXJuZWwoKTsNCiB9DQogDQogLyoNCmRp
ZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL2tlcm5lbC9hY2N0LmMgbGludXgt
YmlyZC5mX2NvdW50L2tlcm5lbC9hY2N0LmMNCi0tLSBsaW51eC0yLjMuOC1w
cmUyL2tlcm5lbC9hY2N0LmMJTW9uIEp1biAyMSAxNDoxODoxMiAxOTk5DQor
KysgbGludXgtYmlyZC5mX2NvdW50L2tlcm5lbC9hY2N0LmMJVHVlIEp1biAy
MiAxNDoyNDozMiAxOTk5DQpAQCAtMjc2LDcgKzI3Niw3IEBADQogCSAqLw0K
IAlpZiAoIWZpbGUpDQogCQlyZXR1cm4gMDsNCi0JZmlsZS0+Zl9jb3VudCsr
Ow0KKwlhdG9taWNfaW5jKCZmaWxlLT5mX2NvdW50KTsNCiAJaWYgKCFjaGVj
a19mcmVlX3NwYWNlKGZpbGUpKSB7DQogCQlmcHV0KGZpbGUpOw0KIAkJcmV0
dXJuIDA7DQpkaWZmIC11ck4gbGludXgtMi4zLjgtcHJlMi9rZXJuZWwvZXhp
dC5jIGxpbnV4LWJpcmQuZl9jb3VudC9rZXJuZWwvZXhpdC5jDQotLS0gbGlu
dXgtMi4zLjgtcHJlMi9rZXJuZWwvZXhpdC5jCU1vbiBKdW4gMjEgMTI6NDA6
MzYgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9rZXJuZWwvZXhpdC5j
CVR1ZSBKdW4gMjIgMTQ6MjQ6MzIgMTk5OQ0KQEAgLTE2NiwxMSArMTY2LDkg
QEANCiAJCQlicmVhazsNCiAJCXdoaWxlIChzZXQpIHsNCiAJCQlpZiAoc2V0
ICYgMSkgew0KLQkJCQlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBmaWxlcy0+ZmRb
aV07DQotCQkJCWlmIChmaWxlKSB7DQotCQkJCQlmaWxlcy0+ZmRbaV0gPSBO
VUxMOw0KKwkJCQlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSB4Y2hnKCZmaWxlcy0+
ZmRbaV0sIE5VTEwpOw0KKwkJCQlpZiAoZmlsZSkNCiAJCQkJCWZpbHBfY2xv
c2UoZmlsZSwgZmlsZXMpOw0KLQkJCQl9DQogCQkJfQ0KIAkJCWkrKzsNCiAJ
CQlzZXQgPj49IDE7DQpkaWZmIC11ck4gbGludXgtMi4zLjgtcHJlMi9rZXJu
ZWwvZm9yay5jIGxpbnV4LWJpcmQuZl9jb3VudC9rZXJuZWwvZm9yay5jDQot
LS0gbGludXgtMi4zLjgtcHJlMi9rZXJuZWwvZm9yay5jCU1vbiBKdW4gMjEg
MTM6MTg6MDAgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9rZXJuZWwv
Zm9yay5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzIgMTk5OQ0KQEAgLTI0MywyMiAr
MjQzLDI4IEBADQogCQlpZiAoIXRtcCkNCiAJCQlnb3RvIGZhaWxfbm9tZW07
DQogCQkqdG1wID0gKm1wbnQ7DQorCQkvKg0KKwkJICogQWNjdXJhdGUgaGVy
ZS4gV2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgbm90aGluZyB3aWxsDQorCQkg
KiBhbHRlciBtcG50LT52bV9maWxlIGJlZm9yZSB3ZSBpbmNyZW1lbnQgZl9j
b3VudC4NCisJCSAqLw0KIAkJdG1wLT52bV9mbGFncyAmPSB+Vk1fTE9DS0VE
Ow0KIAkJdG1wLT52bV9tbSA9IG1tOw0KIAkJbW0tPm1hcF9jb3VudCsrOw0K
IAkJdG1wLT52bV9uZXh0ID0gTlVMTDsNCiAJCWZpbGUgPSB0bXAtPnZtX2Zp
bGU7DQogCQlpZiAoZmlsZSkgew0KLQkJCWZpbGUtPmZfY291bnQrKzsNCisJ
CQlhdG9taWNfaW5jKCZmaWxlLT5mX2NvdW50KTsNCiAJCQlpZiAodG1wLT52
bV9mbGFncyAmIFZNX0RFTllXUklURSkNCi0JCQkJZmlsZS0+Zl9kZW50cnkt
PmRfaW5vZGUtPmlfd3JpdGVjb3VudC0tOw0KKwkJCQlhdG9taWNfZGVjKCZm
aWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50KTsNCiAgICAg
ICANCisJCQlzcGluX2xvY2soJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5p
X3NoYXJlZF9sb2NrKTsNCiAJCQkvKiBpbnNlcnQgdG1wIGludG8gdGhlIHNo
YXJlIGxpc3QsIGp1c3QgYWZ0ZXIgbXBudCAqLw0KIAkJCWlmKCh0bXAtPnZt
X25leHRfc2hhcmUgPSBtcG50LT52bV9uZXh0X3NoYXJlKSAhPSBOVUxMKQ0K
IAkJCQltcG50LT52bV9uZXh0X3NoYXJlLT52bV9wcHJldl9zaGFyZSA9DQog
CQkJCQkmdG1wLT52bV9uZXh0X3NoYXJlOw0KIAkJCW1wbnQtPnZtX25leHRf
c2hhcmUgPSB0bXA7DQogCQkJdG1wLT52bV9wcHJldl9zaGFyZSA9ICZtcG50
LT52bV9uZXh0X3NoYXJlOw0KKwkJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2Rl
bnRyeS0+ZF9pbm9kZS0+aV9zaGFyZWRfbG9jayk7DQogCQl9DQogDQogCQkv
KiBDb3B5IHRoZSBwYWdlcywgYnV0IGRlZmVyIGNoZWNraW5nIGZvciBlcnJv
cnMgKi8NCkBAIC00ODMsOSArNDg5LDkgQEANCiAJb2xkX2ZkcyA9IG9sZGYt
PmZkOw0KIAlmb3IgKDsgaSAhPSAwOyBpLS0pIHsNCiAJCXN0cnVjdCBmaWxl
ICpmID0gKm9sZF9mZHMrKzsNCi0JCSpuZXdfZmRzID0gZjsNCiAJCWlmIChm
KQ0KLQkJCWYtPmZfY291bnQrKzsNCisJCQlhdG9taWNfaW5jKCZmLT5mX2Nv
dW50KTsNCisJCSpuZXdfZmRzID0gZjsNCiAJCW5ld19mZHMrKzsNCiAJfQ0K
IAkvKiBUaGlzIGlzIGxvbmcgd29yZCBhbGlnbmVkIHRodXMgY291bGQgdXNl
IGEgb3B0aW1pemVkIHZlcnNpb24gKi8gDQpkaWZmIC11ck4gbGludXgtMi4z
LjgtcHJlMi9tbS9maWxlbWFwLmMgbGludXgtYmlyZC5mX2NvdW50L21tL2Zp
bGVtYXAuYw0KLS0tIGxpbnV4LTIuMy44LXByZTIvbW0vZmlsZW1hcC5jCVR1
ZSBKdW4gMjIgMDk6MDY6MDkgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3Vu
dC9tbS9maWxlbWFwLmMJVHVlIEp1biAyMiAxNDoyNjowNCAxOTk5DQpAQCAt
MTQ3Myw3ICsxNDczLDcgQEANCiAJICogSWYgYSB0YXNrIHRlcm1pbmF0ZXMg
d2hpbGUgd2UncmUgc3dhcHBpbmcgdGhlIHBhZ2UsIHRoZSB2bWEgYW5kDQog
CSAqIGFuZCBmaWxlIGNvdWxkIGJlIHJlbGVhc2VkIC4uLiBpbmNyZW1lbnQg
dGhlIGNvdW50IHRvIGJlIHNhZmUuDQogCSAqLw0KLQlmaWxlLT5mX2NvdW50
Kys7DQorCWF0b21pY19pbmMoJmZpbGUtPmZfY291bnQpOw0KIAlyZXN1bHQg
PSBkb193cml0ZV9wYWdlKGlub2RlLCBmaWxlLCAoY29uc3QgY2hhciAqKSBw
YWdlLCBvZmZzZXQpOw0KIAlmcHV0KGZpbGUpOw0KIAlyZXR1cm4gcmVzdWx0
Ow0KZGlmZiAtdXJOIGxpbnV4LTIuMy44LXByZTIvbW0vbWVtb3J5LmMgbGlu
dXgtYmlyZC5mX2NvdW50L21tL21lbW9yeS5jDQotLS0gbGludXgtMi4zLjgt
cHJlMi9tbS9tZW1vcnkuYwlNb24gSnVuIDIxIDEzOjUwOjEwIDE5OTkNCisr
KyBsaW51eC1iaXJkLmZfY291bnQvbW0vbWVtb3J5LmMJVHVlIEp1biAyMiAx
NDoyNDozMiAxOTk5DQpAQCAtNzIzLDggKzcyMyw5IEBADQogCXN0cnVjdCB2
bV9hcmVhX3N0cnVjdCAqIG1wbnQ7DQogDQogCXRydW5jYXRlX2lub2RlX3Bh
Z2VzKGlub2RlLCBvZmZzZXQpOw0KKwlzcGluX2xvY2soJmlub2RlLT5pX3No
YXJlZF9sb2NrKTsNCiAJaWYgKCFpbm9kZS0+aV9tbWFwKQ0KLQkJcmV0dXJu
Ow0KKwkJZ290byBvdXRfdW5sb2NrOw0KIAltcG50ID0gaW5vZGUtPmlfbW1h
cDsNCiAJZG8gew0KIAkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBtcG50LT52
bV9tbTsNCkBAIC03NTUsNiArNzU2LDggQEANCiAJCXphcF9wYWdlX3Jhbmdl
KG1tLCBzdGFydCwgbGVuKTsNCiAJCWZsdXNoX3RsYl9yYW5nZShtbSwgc3Rh
cnQsIGVuZCk7DQogCX0gd2hpbGUgKChtcG50ID0gbXBudC0+dm1fbmV4dF9z
aGFyZSkgIT0gTlVMTCk7DQorb3V0X3VubG9jazoNCisJc3Bpbl91bmxvY2so
Jmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiB9DQogDQogDQpkaWZmIC11ck4g
bGludXgtMi4zLjgtcHJlMi9tbS9tbG9jay5jIGxpbnV4LWJpcmQuZl9jb3Vu
dC9tbS9tbG9jay5jDQotLS0gbGludXgtMi4zLjgtcHJlMi9tbS9tbG9jay5j
CU1vbiBKdW4gMjEgMTM6MDk6MDkgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9j
b3VudC9tbS9tbG9jay5jCVR1ZSBKdW4gMjIgMTQ6MjQ6MzIgMTk5OQ0KQEAg
LTMxLDcgKzMxLDcgQEANCiAJdm1hLT52bV9vZmZzZXQgKz0gdm1hLT52bV9z
dGFydCAtIG4tPnZtX3N0YXJ0Ow0KIAluLT52bV9mbGFncyA9IG5ld2ZsYWdz
Ow0KIAlpZiAobi0+dm1fZmlsZSkNCi0JCW4tPnZtX2ZpbGUtPmZfY291bnQr
KzsNCisJCWF0b21pY19pbmMoJm4tPnZtX2ZpbGUtPmZfY291bnQpOw0KIAlp
ZiAobi0+dm1fb3BzICYmIG4tPnZtX29wcy0+b3BlbikNCiAJCW4tPnZtX29w
cy0+b3BlbihuKTsNCiAJaW5zZXJ0X3ZtX3N0cnVjdChjdXJyZW50LT5tbSwg
bik7DQpAQCAtNTIsNyArNTIsNyBAQA0KIAluLT52bV9vZmZzZXQgKz0gbi0+
dm1fc3RhcnQgLSB2bWEtPnZtX3N0YXJ0Ow0KIAluLT52bV9mbGFncyA9IG5l
d2ZsYWdzOw0KIAlpZiAobi0+dm1fZmlsZSkNCi0JCW4tPnZtX2ZpbGUtPmZf
Y291bnQrKzsNCisJCWF0b21pY19pbmMoJm4tPnZtX2ZpbGUtPmZfY291bnQp
Ow0KIAlpZiAobi0+dm1fb3BzICYmIG4tPnZtX29wcy0+b3BlbikNCiAJCW4t
PnZtX29wcy0+b3BlbihuKTsNCiAJaW5zZXJ0X3ZtX3N0cnVjdChjdXJyZW50
LT5tbSwgbik7DQpAQCAtODIsNyArODIsNyBAQA0KIAlyaWdodC0+dm1fb2Zm
c2V0ICs9IHJpZ2h0LT52bV9zdGFydCAtIGxlZnQtPnZtX3N0YXJ0Ow0KIAl2
bWEtPnZtX2ZsYWdzID0gbmV3ZmxhZ3M7DQogCWlmICh2bWEtPnZtX2ZpbGUp
DQotCQl2bWEtPnZtX2ZpbGUtPmZfY291bnQgKz0gMjsNCisJCWF0b21pY19h
ZGQoMiwgJnZtYS0+dm1fZmlsZS0+Zl9jb3VudCk7DQogDQogCWlmICh2bWEt
PnZtX29wcyAmJiB2bWEtPnZtX29wcy0+b3Blbikgew0KIAkJdm1hLT52bV9v
cHMtPm9wZW4obGVmdCk7DQpAQCAtMTc5LDcgKzE3OSw2IEBADQogCWludCBl
cnJvciA9IC1FTk9NRU07DQogDQogCWRvd24oJmN1cnJlbnQtPm1tLT5tbWFw
X3NlbSk7DQotCWxvY2tfa2VybmVsKCk7DQogCWxlbiA9IChsZW4gKyAoc3Rh
cnQgJiB+UEFHRV9NQVNLKSArIH5QQUdFX01BU0spICYgUEFHRV9NQVNLOw0K
IAlzdGFydCAmPSBQQUdFX01BU0s7DQogDQpAQCAtMjAwLDcgKzE5OSw2IEBA
DQogDQogCWVycm9yID0gZG9fbWxvY2soc3RhcnQsIGxlbiwgMSk7DQogb3V0
Og0KLQl1bmxvY2tfa2VybmVsKCk7DQogCXVwKCZjdXJyZW50LT5tbS0+bW1h
cF9zZW0pOw0KIAlyZXR1cm4gZXJyb3I7DQogfQ0KQEAgLTIxMCwxMSArMjA4
LDkgQEANCiAJaW50IHJldDsNCiANCiAJZG93bigmY3VycmVudC0+bW0tPm1t
YXBfc2VtKTsNCi0JbG9ja19rZXJuZWwoKTsNCiAJbGVuID0gKGxlbiArIChz
dGFydCAmIH5QQUdFX01BU0spICsgflBBR0VfTUFTSykgJiBQQUdFX01BU0s7
DQogCXN0YXJ0ICY9IFBBR0VfTUFTSzsNCiAJcmV0ID0gZG9fbWxvY2soc3Rh
cnQsIGxlbiwgMCk7DQotCXVubG9ja19rZXJuZWwoKTsNCiAJdXAoJmN1cnJl
bnQtPm1tLT5tbWFwX3NlbSk7DQogCXJldHVybiByZXQ7DQogfQ0KQEAgLTI1
NCw3ICsyNTAsNiBAQA0KIAlpbnQgcmV0ID0gLUVJTlZBTDsNCiANCiAJZG93
bigmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsNCi0JbG9ja19rZXJuZWwoKTsN
CiAJaWYgKCFmbGFncyB8fCAoZmxhZ3MgJiB+KE1DTF9DVVJSRU5UIHwgTUNM
X0ZVVFVSRSkpKQ0KIAkJZ290byBvdXQ7DQogDQpAQCAtMjcyLDcgKzI2Nyw2
IEBADQogDQogCXJldCA9IGRvX21sb2NrYWxsKGZsYWdzKTsNCiBvdXQ6DQot
CXVubG9ja19rZXJuZWwoKTsNCiAJdXAoJmN1cnJlbnQtPm1tLT5tbWFwX3Nl
bSk7DQogCXJldHVybiByZXQ7DQogfQ0KQEAgLTI4Miw5ICsyNzYsNyBAQA0K
IAlpbnQgcmV0Ow0KIA0KIAlkb3duKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0p
Ow0KLQlsb2NrX2tlcm5lbCgpOw0KIAlyZXQgPSBkb19tbG9ja2FsbCgwKTsN
Ci0JdW5sb2NrX2tlcm5lbCgpOw0KIAl1cCgmY3VycmVudC0+bW0tPm1tYXBf
c2VtKTsNCiAJcmV0dXJuIHJldDsNCiB9DQpkaWZmIC11ck4gbGludXgtMi4z
LjgtcHJlMi9tbS9tbWFwLmMgbGludXgtYmlyZC5mX2NvdW50L21tL21tYXAu
Yw0KLS0tIGxpbnV4LTIuMy44LXByZTIvbW0vbW1hcC5jCU1vbiBKdW4gMjEg
MTM6NTA6MTAgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9tbWFw
LmMJVHVlIEp1biAyMiAxNDoyNDozMiAxOTk5DQpAQCAtNzcsMTAgKzc3LDEy
IEBADQogDQogCWlmIChmaWxlKSB7DQogCQlpZiAodm1hLT52bV9mbGFncyAm
IFZNX0RFTllXUklURSkNCi0JCQlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+
aV93cml0ZWNvdW50Kys7DQorCQkJYXRvbWljX2luYygmZmlsZS0+Zl9kZW50
cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCk7DQorCQlzcGluX2xvY2soJmZp
bGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiAJCWlm
KHZtYS0+dm1fbmV4dF9zaGFyZSkNCiAJCQl2bWEtPnZtX25leHRfc2hhcmUt
PnZtX3BwcmV2X3NoYXJlID0gdm1hLT52bV9wcHJldl9zaGFyZTsNCiAJCSp2
bWEtPnZtX3BwcmV2X3NoYXJlID0gdm1hLT52bV9uZXh0X3NoYXJlOw0KKwkJ
c3Bpbl91bmxvY2soJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NoYXJl
ZF9sb2NrKTsNCiAJfQ0KIH0NCiANCkBAIC0yOTQsNyArMjk2LDEyIEBADQog
CWlmIChmaWxlKSB7DQogCQlpbnQgY29ycmVjdF93Y291bnQgPSAwOw0KIAkJ
aWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9ERU5ZV1JJVEUpIHsNCi0JCQlpZiAo
ZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCA+IDApIHsN
CisJCQkvKg0KKwkJCSAqIFdBUk5JTkc6IHdoZW4gd2Ugd2lsbCB0YWtlIGl0
IG91dCBvZiB0aGUgYmlnIGxvY2sNCisJCQkgKiB3ZSB3aWxsIG5lZWQgYSBz
cGlubG9jayBoZXJlLiBTZWUgY29tbWVudHMgaW4NCisJCQkgKiBmcy9uYW1l
aS5jOjpnZXRfd3JpdGVfYWNjZXNzKCkNCisJCQkgKi8NCisJCQlpZiAoYXRv
bWljX3JlYWQoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3dyaXRlY291
bnQpID4gMCkgew0KIAkJCQllcnJvciA9IC1FVFhUQlNZOw0KIAkJCQlnb3Rv
IGZyZWVfdm1hOw0KIAkJCX0NCkBAIC0zMDMsMTcgKzMxMCwxNyBAQA0KIAkJ
CSAqIG1pZ2h0KS4gSW4gYW55IGNhc2UsIHRoaXMgdGFrZXMgY2FyZSBvZiBh
bnkNCiAJCQkgKiByYWNlIHRoYXQgdGhpcyBtaWdodCBjYXVzZS4NCiAJCQkg
Ki8NCi0JCQlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50
LS07DQorCQkJYXRvbWljX2RlYygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUt
Pmlfd3JpdGVjb3VudCk7DQogCQkJY29ycmVjdF93Y291bnQgPSAxOw0KIAkJ
fQ0KIAkJZXJyb3IgPSBmaWxlLT5mX29wLT5tbWFwKGZpbGUsIHZtYSk7DQog
CQkvKiBGaXggdXAgdGhlIGNvdW50IGlmIG5lY2Vzc2FyeSwgdGhlbiBjaGVj
ayBmb3IgYW4gZXJyb3IgKi8NCiAJCWlmIChjb3JyZWN0X3djb3VudCkNCi0J
CQlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50Kys7DQor
CQkJYXRvbWljX2luYygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3Jp
dGVjb3VudCk7DQogCQlpZiAoZXJyb3IpDQogCQkJZ290byB1bm1hcF9hbmRf
ZnJlZV92bWE7DQorCQlhdG9taWNfaW5jKCZmaWxlLT5mX2NvdW50KTsNCiAJ
CXZtYS0+dm1fZmlsZSA9IGZpbGU7DQotCQlmaWxlLT5mX2NvdW50Kys7DQog
CX0NCiANCiAJLyoNCkBAIC01NDcsNyArNTU0LDcgQEANCiAJCW1wbnQtPnZt
X2ZpbGUgPSBhcmVhLT52bV9maWxlOw0KIAkJbXBudC0+dm1fcHRlID0gYXJl
YS0+dm1fcHRlOw0KIAkJaWYgKG1wbnQtPnZtX2ZpbGUpDQotCQkJbXBudC0+
dm1fZmlsZS0+Zl9jb3VudCsrOw0KKwkJCWF0b21pY19pbmMoJm1wbnQtPnZt
X2ZpbGUtPmZfY291bnQpOw0KIAkJaWYgKG1wbnQtPnZtX29wcyAmJiBtcG50
LT52bV9vcHMtPm9wZW4pDQogCQkJbXBudC0+dm1fb3BzLT5vcGVuKG1wbnQp
Ow0KIAkJYXJlYS0+dm1fZW5kID0gYWRkcjsJLyogVHJ1bmNhdGUgYXJlYSAq
Lw0KQEAgLTg3NSwxMyArODgyLDE0IEBADQogCWlmIChmaWxlKSB7DQogCQlz
dHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2Rl
Ow0KIAkJaWYgKHZtcC0+dm1fZmxhZ3MgJiBWTV9ERU5ZV1JJVEUpDQotCQkJ
aW5vZGUtPmlfd3JpdGVjb3VudC0tOw0KLSAgICAgIA0KKwkJCWF0b21pY19k
ZWMoJmlub2RlLT5pX3dyaXRlY291bnQpOw0KKyAgICAgIAkJc3Bpbl9sb2Nr
KCZpbm9kZS0+aV9zaGFyZWRfbG9jayk7DQogCQkvKiBpbnNlcnQgdm1wIGlu
dG8gaW5vZGUncyBzaGFyZSBsaXN0ICovDQogCQlpZigodm1wLT52bV9uZXh0
X3NoYXJlID0gaW5vZGUtPmlfbW1hcCkgIT0gTlVMTCkNCiAJCQlpbm9kZS0+
aV9tbWFwLT52bV9wcHJldl9zaGFyZSA9ICZ2bXAtPnZtX25leHRfc2hhcmU7
DQogCQlpbm9kZS0+aV9tbWFwID0gdm1wOw0KIAkJdm1wLT52bV9wcHJldl9z
aGFyZSA9ICZpbm9kZS0+aV9tbWFwOw0KKyAgICAgIAkJc3Bpbl91bmxvY2so
Jmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiAJfQ0KIH0NCiANCkBAIC05NDgs
NyArOTU2LDcgQEANCiAJCW1tLT5tYXBfY291bnQtLTsNCiAJCXJlbW92ZV9z
aGFyZWRfdm1fc3RydWN0KG1wbnQpOw0KIAkJaWYgKG1wbnQtPnZtX2ZpbGUp
DQotCQkJZnB1dChtcG50LT52bV9maWxlKTsNCisJCQlmcHV0KG1wbnQtPnZt
X2ZpbGUpOwkvKiBUaGlzIG9uZSBpcyBzYWZlICovDQogCQlrbWVtX2NhY2hl
X2ZyZWUodm1fYXJlYV9jYWNoZXAsIG1wbnQpOw0KIAkJbXBudCA9IHByZXY7
DQogCX0NCmRpZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL21tL21wcm90ZWN0
LmMgbGludXgtYmlyZC5mX2NvdW50L21tL21wcm90ZWN0LmMNCi0tLSBsaW51
eC0yLjMuOC1wcmUyL21tL21wcm90ZWN0LmMJTW9uIEp1biAyMSAxMjozNzow
MyAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L21tL21wcm90ZWN0LmMJ
VHVlIEp1biAyMiAxNDoyNDozMiAxOTk5DQpAQCAtMTAzLDcgKzEwMyw3IEBA
DQogCW4tPnZtX2ZsYWdzID0gbmV3ZmxhZ3M7DQogCW4tPnZtX3BhZ2VfcHJv
dCA9IHByb3Q7DQogCWlmIChuLT52bV9maWxlKQ0KLQkJbi0+dm1fZmlsZS0+
Zl9jb3VudCsrOw0KKwkJYXRvbWljX2luYygmbi0+dm1fZmlsZS0+Zl9jb3Vu
dCk7DQogCWlmIChuLT52bV9vcHMgJiYgbi0+dm1fb3BzLT5vcGVuKQ0KIAkJ
bi0+dm1fb3BzLT5vcGVuKG4pOw0KIAlpbnNlcnRfdm1fc3RydWN0KGN1cnJl
bnQtPm1tLCBuKTsNCkBAIC0xMjYsNyArMTI2LDcgQEANCiAJbi0+dm1fZmxh
Z3MgPSBuZXdmbGFnczsNCiAJbi0+dm1fcGFnZV9wcm90ID0gcHJvdDsNCiAJ
aWYgKG4tPnZtX2ZpbGUpDQotCQluLT52bV9maWxlLT5mX2NvdW50Kys7DQor
CQlhdG9taWNfaW5jKCZuLT52bV9maWxlLT5mX2NvdW50KTsNCiAJaWYgKG4t
PnZtX29wcyAmJiBuLT52bV9vcHMtPm9wZW4pDQogCQluLT52bV9vcHMtPm9w
ZW4obik7DQogCWluc2VydF92bV9zdHJ1Y3QoY3VycmVudC0+bW0sIG4pOw0K
QEAgLTE1OCw3ICsxNTgsNyBAQA0KIAl2bWEtPnZtX2ZsYWdzID0gbmV3Zmxh
Z3M7DQogCXZtYS0+dm1fcGFnZV9wcm90ID0gcHJvdDsNCiAJaWYgKHZtYS0+
dm1fZmlsZSkNCi0JCXZtYS0+dm1fZmlsZS0+Zl9jb3VudCArPSAyOw0KKwkJ
YXRvbWljX2FkZCgyLCZ2bWEtPnZtX2ZpbGUtPmZfY291bnQpOw0KIAlpZiAo
dm1hLT52bV9vcHMgJiYgdm1hLT52bV9vcHMtPm9wZW4pIHsNCiAJCXZtYS0+
dm1fb3BzLT5vcGVuKGxlZnQpOw0KIAkJdm1hLT52bV9vcHMtPm9wZW4ocmln
aHQpOw0KQEAgLTIxMiw3ICsyMTIsNiBAQA0KIAkJcmV0dXJuIDA7DQogDQog
CWRvd24oJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQotCWxvY2tfa2VybmVs
KCk7DQogDQogCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBzdGFydCk7
DQogCWVycm9yID0gLUVGQVVMVDsNCkBAIC0yNDksNyArMjQ4LDYgQEANCiAJ
fQ0KIAltZXJnZV9zZWdtZW50cyhjdXJyZW50LT5tbSwgc3RhcnQsIGVuZCk7
DQogb3V0Og0KLQl1bmxvY2tfa2VybmVsKCk7DQogCXVwKCZjdXJyZW50LT5t
bS0+bW1hcF9zZW0pOw0KIAlyZXR1cm4gZXJyb3I7DQogfQ0KZGlmZiAtdXJO
IGxpbnV4LTIuMy44LXByZTIvbW0vbXJlbWFwLmMgbGludXgtYmlyZC5mX2Nv
dW50L21tL21yZW1hcC5jDQotLS0gbGludXgtMi4zLjgtcHJlMi9tbS9tcmVt
YXAuYwlNb24gSnVuIDIxIDEzOjM2OjA2IDE5OTkNCisrKyBsaW51eC1iaXJk
LmZfY291bnQvbW0vbXJlbWFwLmMJVHVlIEp1biAyMiAxNDoyNDozMiAxOTk5
DQpAQCAtMTM0LDE0ICsxMzQsMTIgQEANCiAJCQluZXdfdm1hLT52bV9zdGFy
dCA9IG5ld19hZGRyOw0KIAkJCW5ld192bWEtPnZtX2VuZCA9IG5ld19hZGRy
K25ld19sZW47DQogCQkJbmV3X3ZtYS0+dm1fb2Zmc2V0ID0gdm1hLT52bV9v
ZmZzZXQgKyAoYWRkciAtIHZtYS0+dm1fc3RhcnQpOw0KLQkJCWxvY2tfa2Vy
bmVsKCk7DQogCQkJaWYgKG5ld192bWEtPnZtX2ZpbGUpDQotCQkJCW5ld192
bWEtPnZtX2ZpbGUtPmZfY291bnQrKzsNCisJCQkJYXRvbWljX2luYygmbmV3
X3ZtYS0+dm1fZmlsZS0+Zl9jb3VudCk7DQogCQkJaWYgKG5ld192bWEtPnZt
X29wcyAmJiBuZXdfdm1hLT52bV9vcHMtPm9wZW4pDQogCQkJCW5ld192bWEt
PnZtX29wcy0+b3BlbihuZXdfdm1hKTsNCiAJCQlpbnNlcnRfdm1fc3RydWN0
KGN1cnJlbnQtPm1tLCBuZXdfdm1hKTsNCiAJCQltZXJnZV9zZWdtZW50cyhj
dXJyZW50LT5tbSwgbmV3X3ZtYS0+dm1fc3RhcnQsIG5ld192bWEtPnZtX2Vu
ZCk7DQotCQkJdW5sb2NrX2tlcm5lbCgpOw0KIAkJCWRvX211bm1hcChhZGRy
LCBvbGRfbGVuKTsNCiAJCQljdXJyZW50LT5tbS0+dG90YWxfdm0gKz0gbmV3
X2xlbiA+PiBQQUdFX1NISUZUOw0KIAkJCWlmIChuZXdfdm1hLT52bV9mbGFn
cyAmIFZNX0xPQ0tFRCkgew0KZGlmZiAtdXJOIGxpbnV4LTIuMy44LXByZTIv
bmV0L2NvcmUvc2NtLmMgbGludXgtYmlyZC5mX2NvdW50L25ldC9jb3JlL3Nj
bS5jDQotLS0gbGludXgtMi4zLjgtcHJlMi9uZXQvY29yZS9zY20uYwlNb24g
SnVuIDIxIDEyOjM3OjA1IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQv
bmV0L2NvcmUvc2NtLmMJVHVlIEp1biAyMiAxNDoyNDozMiAxOTk5DQpAQCAt
MjMyLDggKzIzMiw4IEBADQogCQkJYnJlYWs7DQogCQl9DQogCQkvKiBCdW1w
IHRoZSB1c2FnZSBjb3VudCBhbmQgaW5zdGFsbCB0aGUgZmlsZS4gKi8NCi0J
CWZwW2ldLT5mX2NvdW50Kys7DQotCQljdXJyZW50LT5maWxlcy0+ZmRbbmV3
X2ZkXSA9IGZwW2ldOw0KKwkJYXRvbWljX2luYygmZnBbaV0tPmZfY291bnQp
Ow0KKwkJZmRfaW5zdGFsbChuZXdfZmQsIGZwW2ldKTsNCiAJfQ0KIA0KIAlp
ZiAoaSA+IDApDQpAQCAtMjcxLDEwICsyNzEsOSBAQA0KIA0KIAluZXdfZnBs
ID0ga21hbGxvYyhzaXplb2YoKmZwbCksIEdGUF9LRVJORUwpOw0KIAlpZiAo
bmV3X2ZwbCkgew0KLQkJbWVtY3B5KG5ld19mcGwsIGZwbCwgc2l6ZW9mKCpm
cGwpKTsNCi0NCiAJCWZvciAoaT1mcGwtPmNvdW50LTE7IGk+PTA7IGktLSkN
Ci0JCQlmcGwtPmZwW2ldLT5mX2NvdW50Kys7DQorCQkJYXRvbWljX2luYygm
ZnBsLT5mcFtpXS0+Zl9jb3VudCk7DQorCQltZW1jcHkobmV3X2ZwbCwgZnBs
LCBzaXplb2YoKmZwbCkpOw0KIAl9DQogCXJldHVybiBuZXdfZnBsOw0KIH0N
CmRpZmYgLXVyTiBsaW51eC0yLjMuOC1wcmUyL25ldC9zb2NrZXQuYyBsaW51
eC1iaXJkLmZfY291bnQvbmV0L3NvY2tldC5jDQotLS0gbGludXgtMi4zLjgt
cHJlMi9uZXQvc29ja2V0LmMJTW9uIEp1biAyMSAxMzo0MDo0NiAxOTk5DQor
KysgbGludXgtYmlyZC5mX2NvdW50L25ldC9zb2NrZXQuYwlUdWUgSnVuIDIy
IDE0OjI0OjMyIDE5OTkNCkBAIC0yMTcsMTEgKzIxNywxMSBAQA0KIAkJICov
DQogCQlpbm9kZS0+aV9jb3VudCsrOw0KIA0KLQkJZmRfaW5zdGFsbChmZCwg
ZmlsZSk7DQogCQlmaWxlLT5mX29wID0gJnNvY2tldF9maWxlX29wczsNCiAJ
CWZpbGUtPmZfbW9kZSA9IDM7DQogCQlmaWxlLT5mX2ZsYWdzID0gT19SRFdS
Ow0KIAkJZmlsZS0+Zl9wb3MgPSAwOw0KKwkJZmRfaW5zdGFsbChmZCwgZmls
ZSk7DQogCX0NCiAJcmV0dXJuIGZkOw0KIH0NCmRpZmYgLXVyTiBsaW51eC0y
LjMuOC1wcmUyL25ldC9zdW5ycGMveHBydC5jIGxpbnV4LWJpcmQuZl9jb3Vu
dC9uZXQvc3VucnBjL3hwcnQuYw0KLS0tIGxpbnV4LTIuMy44LXByZTIvbmV0
L3N1bnJwYy94cHJ0LmMJTW9uIEp1biAyMSAxMzo0MTowNyAxOTk5DQorKysg
bGludXgtYmlyZC5mX2NvdW50L25ldC9zdW5ycGMveHBydC5jCVR1ZSBKdW4g
MjIgMTQ6MjQ6MzIgMTk5OQ0KQEAgLTE0NTUsOCArMTQ1NSw4IEBADQogDQog
CXByb3RvID0gKHNvY2stPnR5cGUgPT0gU09DS19ER1JBTSk/IElQUFJPVE9f
VURQIDogSVBQUk9UT19UQ1A7DQogCWlmICgoeHBydCA9IHhwcnRfc2V0dXAo
c29jaywgcHJvdG8sIGFwLCB0bykpICE9IE5VTEwpIHsNCisJCWF0b21pY19p
bmMoJmZpbGUtPmZfY291bnQpOw0KIAkJeHBydC0+ZmlsZSA9IGZpbGU7DQot
CQlmaWxlLT5mX2NvdW50Kys7DQogCX0NCiANCiAJcmV0dXJuIHhwcnQ7DQpk
aWZmIC11ck4gbGludXgtMi4zLjgtcHJlMi9uZXQvdW5peC9nYXJiYWdlLmMg
bGludXgtYmlyZC5mX2NvdW50L25ldC91bml4L2dhcmJhZ2UuYw0KLS0tIGxp
bnV4LTIuMy44LXByZTIvbmV0L3VuaXgvZ2FyYmFnZS5jCU1vbiBKdW4gMjEg
MTI6Mzc6MTAgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9uZXQvdW5p
eC9nYXJiYWdlLmMJVHVlIEp1biAyMiAxNDoyNDozMiAxOTk5DQpAQCAtMTk5
LDcgKzE5OSw4IEBADQogCQkgKglpbiBmbGlnaHQgd2UgYXJlIGluIHVzZS4N
CiAJCSAqLw0KIAkJaWYocy0+c29ja2V0ICYmIHMtPnNvY2tldC0+ZmlsZSAm
Jg0KLQkJICAgcy0+c29ja2V0LT5maWxlLT5mX2NvdW50ID4gcy0+cHJvdGlu
Zm8uYWZfdW5peC5pbmZsaWdodCkNCisJCSAgIGF0b21pY19yZWFkKCZzLT5z
b2NrZXQtPmZpbGUtPmZfY291bnQpID4NCisJCQkJICAgcy0+cHJvdGluZm8u
YWZfdW5peC5pbmZsaWdodCkNCiAJCQltYXliZV91bm1hcmtfYW5kX3B1c2go
cyk7DQogCX0NCiANCg==
---559023410-1963006865-930077630=:15722--

-
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/