[PATCH] via82cxxx_audio

©[@ÄØÿ¿8þÿ¿Szabolcs Szakacsits (rui.sousa@conexant.com)
Thu, 18 Jan 2001 21:23:50 +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.

--8323328-1136156973-979849430=:5753
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi,

A patch for the via82cxxx_audio sound driver against 2.4.1-pre8.
It includes:

1. Support for variable fragment size and variable fragment number
2. Fixes for the SPEED, STEREO, CHANNELS, FMT ioctls when in read & write
mode
2.1 Mmaped sound is now fully functional.

The patch is fairly tested (xmms, quake3, oss-test) but it might
still have some bugs. Also there is almost no documentation update...
sorry.

The remaining issue with the driver (that I can see) are the
click/pops that happen when playback is started/stopped. I guess some
of the channel setting/resetting is just a bit too harsh.

Rui Sousa

--8323328-1136156973-979849430=:5753
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="via-2.4.1-pre8.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.30.0101182123500.5753@localhost.localdomain>
Content-Description: via patch
Content-Disposition: attachment; filename="via-2.4.1-pre8.patch"

LS0tIGxpbnV4LTIuNC4xLXByZTgvZHJpdmVycy9zb3VuZC92aWE4MmN4eHhf
YXVkaW8uYwlTYXQgRGVjIDMwIDA1OjI1OjQ3IDIwMDANCisrKyBsaW51eC0y
LjQuMS1wcmU4Lm5ldy9kcml2ZXJzL3NvdW5kL3ZpYTgyY3h4eF9hdWRpby5j
CVRodSBKYW4gMTggMjE6MjI6MTcgMjAwMQ0KQEAgLTc2LDggKzc2LDE2IEBA
DQogI2RlZmluZSBWSUFfQ09VTlRFUl9MSU1JVAkxMDAwMDANCiANCiAvKiBz
aXplIG9mIERNQSBidWZmZXJzICovDQotI2RlZmluZSBWSUFfRE1BX0JVRkZF
UlMJCTE2DQotI2RlZmluZSBWSUFfRE1BX0JVRl9TSVpFCVBBR0VfU0laRQ0K
KyNkZWZpbmUgVklBX01BWF9CVUZGRVJfRE1BX1BBR0VTCTMyDQorDQorLyog
YnVmZmVyaW5nIGRlZmF1bHQgdmFsdWVzIGluIG1zICovDQorI2RlZmluZSBW
SUFfREVGQVVMVF9GUkFHX1RJTUUJCTIwDQorI2RlZmluZSBWSUFfREVGQVVM
VF9CVUZGRVJfVElNRQkJNTAwDQorDQorI2RlZmluZSBWSUFfTUFYX0ZSQUdf
U0laRQkJUEFHRV9TSVpFDQorI2RlZmluZSBWSUFfTUlOX0ZSQUdfU0laRQkJ
NjQNCisNCisjZGVmaW5lIFZJQV9NSU5fRlJBR19OVU1CRVIJCTIJDQogDQog
I2lmbmRlZiBBQzk3X1BDTV9MUl9BRENfUkFURQ0KICMgIGRlZmluZSBBQzk3
X1BDTV9MUl9BRENfUkFURSBBQzk3X1BDTV9MUl9EQUNfUkFURQ0KQEAgLTEw
Miw3ICsxMTAsNiBAQA0KICNkZWZpbmUgVklBX0JBU0UwX1BDTV9PVVRfQ0hB
Tl9TVEFUVVMgMHgwMA0KICNkZWZpbmUgVklBX0JBU0UwX1BDTV9PVVRfQ0hB
Tl9DVFJMCTB4MDENCiAjZGVmaW5lIFZJQV9CQVNFMF9QQ01fT1VUX0NIQU5f
VFlQRQkweDAyDQotI2RlZmluZSBWSUFfQkFTRTBfUENNX09VVF9CTE9DS19D
T1VOVAkweDBDDQogDQogI2RlZmluZSBWSUFfQkFTRTBfUENNX0lOX0NIQU4J
CTB4MTAgLyogaW5wdXQgUENNIGZyb20gdXNlciAqLw0KICNkZWZpbmUgVklB
X0JBU0UwX1BDTV9JTl9DSEFOX1NUQVRVUwkweDEwDQpAQCAtMTE0LDYgKzEy
MSw3IEBADQogI2RlZmluZSBWSUFfUENNX0NPTlRST0wJCQkweDAxDQogI2Rl
ZmluZSBWSUFfUENNX1RZUEUJCQkweDAyDQogI2RlZmluZSBWSUFfUENNX1RB
QkxFX0FERFIJCTB4MDQNCisjZGVmaW5lIFZJQV9QQ01fQkxPQ0tfQ09VTlQJ
CTB4MEMNCiANCiAvKiBYWFggdW51c2VkIERNQSBjaGFubmVsIGZvciBGTSBQ
Q00gZGF0YSAqLw0KICNkZWZpbmUgVklBX0JBU0UwX0ZNX09VVF9DSEFOCQkw
eDIwDQpAQCAtMjIzLDE0ICsyMzEsMTQgQEANCiB9Ow0KIA0KIA0KLXN0cnVj
dCB2aWFfc2dkX2RhdGEgew0KK3N0cnVjdCB2aWFfYnVmZmVyX3BndGJsIHsN
CiAJZG1hX2FkZHJfdCBoYW5kbGU7DQogCXZvaWQgKmNwdWFkZHI7DQogfTsN
CiANCiANCiBzdHJ1Y3QgdmlhX2NoYW5uZWwgew0KLQlhdG9taWNfdCBuX2J1
ZnM7DQorCWF0b21pY190IG5fZnJhZ3M7DQogCWF0b21pY190IGh3X3B0cjsN
CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsNCiANCkBAIC0yNDYsMTEgKzI1
NCwxNCBAQA0KIAl1OCBwY21fZm10OwkJLyogVklBX1BDTV9GTVRfeHh4ICov
DQogDQogCXVuc2lnbmVkIHJhdGU7CQkvKiBzYW1wbGUgcmF0ZSAqLw0KKwl1
bnNpZ25lZCBpbnQgZnJhZ19zaXplOw0KKwl1bnNpZ25lZCBpbnQgZnJhZ19u
dW1iZXI7DQogDQogCXZvbGF0aWxlIHN0cnVjdCB2aWFfc2dkX3RhYmxlICpz
Z3RhYmxlOw0KIAlkbWFfYWRkcl90IHNndF9oYW5kbGU7DQogDQotCXN0cnVj
dCB2aWFfc2dkX2RhdGEgc2didWYgW1ZJQV9ETUFfQlVGRkVSU107DQorCXVu
c2lnbmVkIGludCBwYWdlX251bWJlcjsNCisJc3RydWN0IHZpYV9idWZmZXJf
cGd0YmwgcGd0YmxbVklBX01BWF9CVUZGRVJfRE1BX1BBR0VTXTsNCiANCiAJ
bG9uZyBpb2Jhc2U7DQogDQpAQCAtMzAxLDE3ICszMTIsMTYgQEANCiBzdGF0
aWMgaW50IHZpYV9kc3BfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0
cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBs
b25nIGFyZyk7DQogc3RhdGljIGludCB2aWFfZHNwX29wZW4gKHN0cnVjdCBp
bm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsNCiBzdGF0aWMgaW50
IHZpYV9kc3BfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qg
ZmlsZSAqZmlsZSk7DQotI2lmZGVmIFZJQV9TVVBQT1JUX01NQVANCiBzdGF0
aWMgaW50IHZpYV9kc3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0
IHZtX2FyZWFfc3RydWN0ICp2bWEpOw0KLSNlbmRpZg0KIA0KIHN0YXRpYyB1
MTYgdmlhX2FjOTdfcmVhZF9yZWcgKHN0cnVjdCBhYzk3X2NvZGVjICpjb2Rl
YywgdTggcmVnKTsNCiBzdGF0aWMgdm9pZCB2aWFfYWM5N193cml0ZV9yZWcg
KHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgdTggcmVnLCB1MTYgdmFsdWUp
Ow0KIHN0YXRpYyB1OCB2aWFfYWM5N193YWl0X2lkbGUgKHN0cnVjdCB2aWFf
aW5mbyAqY2FyZCk7DQogDQogc3RhdGljIHZvaWQgdmlhX2NoYW5fZnJlZSAo
c3RydWN0IHZpYV9pbmZvICpjYXJkLCBzdHJ1Y3QgdmlhX2NoYW5uZWwgKmNo
YW4pOw0KLXN0YXRpYyB2b2lkIHZpYV9jaGFuX2NsZWFyIChzdHJ1Y3Qgdmlh
X2NoYW5uZWwgKmNoYW4pOw0KK3N0YXRpYyB2b2lkIHZpYV9jaGFuX2NsZWFy
IChzdHJ1Y3QgdmlhX2luZm8gKmNhcmQsIHN0cnVjdCB2aWFfY2hhbm5lbCAq
Y2hhbik7DQogc3RhdGljIHZvaWQgdmlhX2NoYW5fcGNtX2ZtdCAoc3RydWN0
IHZpYV9jaGFubmVsICpjaGFuLCBpbnQgcmVzZXQpOw0KK3N0YXRpYyB2b2lk
IHZpYV9jaGFuX2J1ZmZlcl9mcmVlIChzdHJ1Y3QgdmlhX2luZm8gKmNhcmQs
IHN0cnVjdCB2aWFfY2hhbm5lbCAqY2hhbik7DQogDQogI2lmZGVmIFZJQV9Q
Uk9DX0ZTDQogc3RhdGljIGludCB2aWFfaW5pdF9wcm9jICh2b2lkKTsNCkBA
IC01NjksMjUgKzU3OSw1MyBAQA0KIAljaGFuLT5wY21fZm10ID0gVklBX1BD
TV9GTVRfTUFTSzsNCiAJY2hhbi0+aXNfZW5hYmxlZCA9IDE7DQogDQotCWlm
IChjaGFuLT5pc19yZWNvcmQpDQotCQlhdG9taWNfc2V0ICgmY2hhbi0+bl9i
dWZzLCAwKTsNCi0JZWxzZQ0KLQkJYXRvbWljX3NldCAoJmNoYW4tPm5fYnVm
cywgVklBX0RNQV9CVUZGRVJTKTsNCisJY2hhbi0+ZnJhZ19udW1iZXIgPSAw
Ow0KKyAgICAgICAgY2hhbi0+ZnJhZ19zaXplID0gMDsNCisJYXRvbWljX3Nl
dCgmY2hhbi0+bl9mcmFncywgMCk7DQogCWF0b21pY19zZXQgKCZjaGFuLT5o
d19wdHIsIDApOw0KIH0NCiANCisvKioNCisgKiAgICAgIHZpYV9jaGFuX2lu
aXQgLSBJbml0aWFsaXplIFBDTSBjaGFubmVsDQorICogICAgICBAY2FyZDog
UHJpdmF0ZSBhdWRpbyBjaGlwIGluZm8NCisgKiAgICAgIEBjaGFuOiBDaGFu
bmVsIHRvIGJlIGluaXRpYWxpemVkDQorICoNCisgKiAgICAgIFBlcmZvcm1z
IHNvbWUgb2YgdGhlIHByZXBhcmF0aW9ucyBuZWNlc3NhcnkgdG8gYmVnaW4N
CisgKiAgICAgIHVzaW5nIGEgUENNIGNoYW5uZWwuDQorICoNCisgKiAgICAg
IEN1cnJlbnRseSB0aGUgcHJlcGFyYXRpb25zIGNvbnNpc3QgaW4gDQorICog
ICAgICBzZXR0aW5nIHRoZQ0KKyAqICAgICAgUENNIGNoYW5uZWwgdG8gYSBr
bm93biBzdGF0ZS4NCisgKi8NCisNCisNCitzdGF0aWMgdm9pZCB2aWFfY2hh
bl9pbml0IChzdHJ1Y3QgdmlhX2luZm8gKmNhcmQsIHN0cnVjdCB2aWFfY2hh
bm5lbCAqY2hhbikNCit7DQorDQorICAgICAgICBEUFJJTlRLICgiRU5URVJc
biIpOw0KKw0KKwkvKiBiemVybyBjaGFubmVsIHN0cnVjdHVyZSwgYW5kIGlu
aXQgbWVtYmVycyB0byBkZWZhdWx0cyAqLw0KKyAgICAgICAgdmlhX2NoYW5f
aW5pdF9kZWZhdWx0cyAoY2FyZCwgY2hhbik7DQorDQorICAgICAgICAvKiBz
dG9wIGFueSBleGlzdGluZyBjaGFubmVsIG91dHB1dCAqLw0KKyAgICAgICAg
dmlhX2NoYW5fY2xlYXIgKGNhcmQsIGNoYW4pOw0KKyAgICAgICAgdmlhX2No
YW5fc3RhdHVzX2NsZWFyIChjaGFuLT5pb2Jhc2UpOw0KKyAgICAgICAgdmlh
X2NoYW5fcGNtX2ZtdCAoY2hhbiwgMSk7DQorDQorCURQUklOVEsgKCJFWElU
XG4iKTsNCit9DQogDQogLyoqDQotICoJdmlhX2NoYW5faW5pdCAtIEluaXRp
YWxpemUgUENNIGNoYW5uZWwNCisgKgl2aWFfY2hhbl9idWZmZXJfaW5pdCAt
IEluaXRpYWxpemUgUENNIGNoYW5uZWwgYnVmZmVyDQogICoJQGNhcmQ6IFBy
aXZhdGUgYXVkaW8gY2hpcCBpbmZvDQogICoJQGNoYW46IENoYW5uZWwgdG8g
YmUgaW5pdGlhbGl6ZWQNCiAgKg0KLSAqCVBlcmZvcm1zIGFsbCB0aGUgcHJl
cGFyYXRpb25zIG5lY2Vzc2FyeSB0byBiZWdpbg0KKyAqCVBlcmZvcm1zIHNv
bWUgb2YgdGhlIHByZXBhcmF0aW9ucyBuZWNlc3NhcnkgdG8gYmVnaW4NCiAg
Kgl1c2luZyBhIFBDTSBjaGFubmVsLg0KICAqDQogICoJQ3VycmVudGx5IHRo
ZSBwcmVwYXJhdGlvbnMgaW5jbHVkZSBhbGxvY2F0aW5nIHRoZQ0KLSAqCXNj
YXR0ZXItZ2F0aGVyIERNQSB0YWJsZSBhbmQgYnVmZmVycywgc2V0dGluZyB0
aGUNCi0gKglQQ00gY2hhbm5lbCB0byBhIGtub3duIHN0YXRlLCBhbmQgcGFz
c2luZyB0aGUNCisgKglzY2F0dGVyLWdhdGhlciBETUEgdGFibGUgYW5kIGJ1
ZmZlcnMsDQorICoJYW5kIHBhc3NpbmcgdGhlDQogICoJYWRkcmVzcyBvZiB0
aGUgRE1BIHRhYmxlIHRvIHRoZSBoYXJkd2FyZS4NCiAgKg0KICAqCU5vdGUg
dGhhdCBzcGVjaWFsIGNhcmUgaXMgdGFrZW4gd2hlbiBwYXNzaW5nIHRoZQ0K
QEAgLTU5NiwxOCArNjM0LDIxIEBADQogICoJYWx3YXlzICJ0YWtlIiB0aGUg
YWRkcmVzcy4NCiAgKi8NCiANCi1zdGF0aWMgaW50IHZpYV9jaGFuX2luaXQg
KHN0cnVjdCB2aWFfaW5mbyAqY2FyZCwgc3RydWN0IHZpYV9jaGFubmVsICpj
aGFuKQ0KK3N0YXRpYyBpbnQgdmlhX2NoYW5fYnVmZmVyX2luaXQgKHN0cnVj
dCB2aWFfaW5mbyAqY2FyZCwgc3RydWN0IHZpYV9jaGFubmVsICpjaGFuKQ0K
IHsNCisJaW50IHBhZ2UsIG9mZnNldDsNCiAJaW50IGk7DQogDQogCURQUklO
VEsgKCJFTlRFUlxuIik7DQogDQotCS8qIGJ6ZXJvIGNoYW5uZWwgc3RydWN0
dXJlLCBhbmQgaW5pdCBtZW1iZXJzIHRvIGRlZmF1bHRzICovDQotCXZpYV9j
aGFuX2luaXRfZGVmYXVsdHMgKGNhcmQsIGNoYW4pOw0KKwlpZiAoY2hhbi0+
c2d0YWJsZSAhPSBOVUxMKSB7DQorCQlEUFJJTlRLICgiRVhJVFxuIik7DQor
CQlyZXR1cm4gMDsNCisJfQ0KIA0KIAkvKiBhbGxvYyBETUEtYWJsZSBtZW1v
cnkgZm9yIHNjYXR0ZXItZ2F0aGVyIHRhYmxlICovDQogCWNoYW4tPnNndGFi
bGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudCAoY2FyZC0+cGRldiwNCi0JCShz
aXplb2YgKHN0cnVjdCB2aWFfc2dkX3RhYmxlKSAqIFZJQV9ETUFfQlVGRkVS
UyksDQorCQkoc2l6ZW9mIChzdHJ1Y3QgdmlhX3NnZF90YWJsZSkgKiBjaGFu
LT5mcmFnX251bWJlciksDQogCQkmY2hhbi0+c2d0X2hhbmRsZSk7DQogCWlm
ICghY2hhbi0+c2d0YWJsZSkgew0KIAkJcHJpbnRrIChLRVJOX0VSUiBQRlgg
IkRNQSB0YWJsZSBhbGxvYyBmYWlsLCBhYm9ydGluZ1xuIik7DQpAQCAtNjE2
LDQ1ICs2NTcsNTQgQEANCiAJfQ0KIA0KIAltZW1zZXQgKCh2b2lkKiljaGFu
LT5zZ3RhYmxlLCAwLA0KLQkJKHNpemVvZiAoc3RydWN0IHZpYV9zZ2RfdGFi
bGUpICogVklBX0RNQV9CVUZGRVJTKSk7DQorCQkoc2l6ZW9mIChzdHJ1Y3Qg
dmlhX3NnZF90YWJsZSkgKiBjaGFuLT5mcmFnX251bWJlcikpOw0KIA0KIAkv
KiBhbGxvYyBETUEtYWJsZSBtZW1vcnkgZm9yIHNjYXR0ZXItZ2F0aGVyIGJ1
ZmZlcnMgKi8NCi0JZm9yIChpID0gMDsgaSA8IFZJQV9ETUFfQlVGRkVSUzsg
aSsrKSB7DQotCQljaGFuLT5zZ2J1ZltpXS5jcHVhZGRyID0NCi0JCQlwY2lf
YWxsb2NfY29uc2lzdGVudCAoY2FyZC0+cGRldiwgVklBX0RNQV9CVUZfU0la
RSwNCi0JCQkJCSAgICAgICZjaGFuLT5zZ2J1ZltpXS5oYW5kbGUpOw0KIA0K
LQkJaWYgKCFjaGFuLT5zZ2J1ZltpXS5jcHVhZGRyKQ0KLQkJCWdvdG8gZXJy
X291dF9ub21lbTsNCisJY2hhbi0+cGFnZV9udW1iZXIgPSAoY2hhbi0+ZnJh
Z19udW1iZXIgKiBjaGFuLT5mcmFnX3NpemUpIC8gUEFHRV9TSVpFICsgDQor
CQkJICAgICgoKGNoYW4tPmZyYWdfbnVtYmVyICogY2hhbi0+ZnJhZ19zaXpl
KSAlIFBBR0VfU0laRSkgPyAxIDogMCk7DQorDQorCWZvciAoaSA9IDA7IGkg
PCBjaGFuLT5wYWdlX251bWJlcjsgaSsrKSB7DQorCQljaGFuLT5wZ3RibFtp
XS5jcHVhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQgKGNhcmQtPnBkZXYs
IFBBR0VfU0laRSwNCisJCQkJCSAgICAgICZjaGFuLT5wZ3RibFtpXS5oYW5k
bGUpOw0KIA0KLQkJaWYgKGkgPCAoVklBX0RNQV9CVUZGRVJTIC0gMSkpDQot
CQkJY2hhbi0+c2d0YWJsZVtpXS5jb3VudCA9IGNwdV90b19sZTMyIChWSUFf
RE1BX0JVRl9TSVpFIHwgVklBX0ZMQUcpOw0KLQkJZWxzZQ0KLQkJCWNoYW4t
PnNndGFibGVbaV0uY291bnQgPSBjcHVfdG9fbGUzMiAoVklBX0RNQV9CVUZf
U0laRSB8IFZJQV9FT0wpOw0KLQkJY2hhbi0+c2d0YWJsZVtpXS5hZGRyID0g
Y3B1X3RvX2xlMzIgKGNoYW4tPnNnYnVmW2ldLmhhbmRsZSk7DQorCQlpZiAo
IWNoYW4tPnBndGJsW2ldLmNwdWFkZHIpIHsNCisJCQljaGFuLT5wYWdlX251
bWJlciA9IGk7DQorCQkJZ290byBlcnJfb3V0X25vbWVtOw0KKwkJfQ0KIA0K
ICNpZm5kZWYgVklBX05ERUJVRw0KLQkJbWVtc2V0IChjaGFuLT5zZ2J1Zltp
XS5jcHVhZGRyLCAweEJDLCBWSUFfRE1BX0JVRl9TSVpFKTsNCisgICAgICAg
ICAgICAgICAgbWVtc2V0IChjaGFuLT5wZ3RibFtpXS5jcHVhZGRyLCAweEJD
LCBjaGFuLT5mcmFnX3NpemUpOw0KICNlbmRpZg0KIA0KICNpZiAxDQotCQlE
UFJJTlRLICgiZG1hYnVmICMlZCAoaD0lbHgsIDMyKGgpPSVseCwgdjJwPSVs
eCwgYT0lcClcbiIsDQotCQkJIGksIChsb25nKWNoYW4tPnNnYnVmW2ldLmhh
bmRsZSwNCi0JCQkgKGxvbmcpY2hhbi0+c2d0YWJsZVtpXS5hZGRyLA0KLQkJ
CSB2aXJ0X3RvX3BoeXMoY2hhbi0+c2didWZbaV0uY3B1YWRkciksDQotCQkJ
IGNoYW4tPnNnYnVmW2ldLmNwdWFkZHIpOw0KKyAgICAgICAgICAgICAgICBE
UFJJTlRLICgiZG1hYnVmX3BnICMlZCAoaD0lbHgsIHYycD0lbHgsIGE9JXAp
XG4iLA0KKwkJCWksIChsb25nKWNoYW4tPnBndGJsW2ldLmhhbmRsZSwNCisJ
CQl2aXJ0X3RvX3BoeXMoY2hhbi0+cGd0YmxbaV0uY3B1YWRkciksDQorCQkJ
Y2hhbi0+cGd0YmxbaV0uY3B1YWRkcik7DQogI2VuZGlmDQotDQotCQlhc3Nl
cnQgKChWSUFfRE1BX0JVRl9TSVpFICUgUEFHRV9TSVpFKSA9PSAwKTsNCiAJ
fQ0KIA0KLQkvKiBzdG9wIGFueSBleGlzdGluZyBjaGFubmVsIG91dHB1dCAq
Lw0KLQl2aWFfY2hhbl9jbGVhciAoY2hhbik7DQotCXZpYV9jaGFuX3N0YXR1
c19jbGVhciAoY2hhbi0+aW9iYXNlKTsNCi0JdmlhX2NoYW5fcGNtX2ZtdCAo
Y2hhbiwgMSk7DQorCWZvciAoaSA9IDA7IGkgPCBjaGFuLT5mcmFnX251bWJl
cjsgaSsrKSB7DQorDQorCQlwYWdlID0gaSAvIChQQUdFX1NJWkUgLyBjaGFu
LT5mcmFnX3NpemUpOw0KKwkJb2Zmc2V0ID0gKGkgJSAoUEFHRV9TSVpFIC8g
Y2hhbi0+ZnJhZ19zaXplKSkgKiBjaGFuLT5mcmFnX3NpemU7DQorDQorCQlj
aGFuLT5zZ3RhYmxlW2ldLmNvdW50ID0gY3B1X3RvX2xlMzIgKGNoYW4tPmZy
YWdfc2l6ZSB8IFZJQV9GTEFHKTsNCisJCWNoYW4tPnNndGFibGVbaV0uYWRk
ciA9IGNwdV90b19sZTMyIChjaGFuLT5wZ3RibFtwYWdlXS5oYW5kbGUgKyBv
ZmZzZXQpOw0KKw0KKyNpZiAxDQorCQlEUFJJTlRLICgiZG1hYnVmICMlZCAo
MzIoaCk9JWx4KVxuIiwNCisJCQkgaSwNCisJCQkgKGxvbmcpY2hhbi0+c2d0
YWJsZVtpXS5hZGRyKTsNCisjZW5kaWYNCisJfQkNCisNCisJLyogb3Zlcndy
aXRlIHRoZSBsYXN0IGJ1ZmZlciBpbmZvcm1hdGlvbiAqLw0KKwljaGFuLT5z
Z3RhYmxlW2NoYW4tPmZyYWdfbnVtYmVyIC0gMV0uY291bnQgPSBjcHVfdG9f
bGUzMiAoY2hhbi0+ZnJhZ19zaXplIHwgVklBX0VPTCk7DQogDQogCS8qIHNl
dCBsb2NhdGlvbiBvZiBETUEtYWJsZSBzY2F0dGVyLWdhdGhlciBpbmZvIHRh
YmxlICovDQotCURQUklOVEsoIm91dGwgKDB4JVgsIDB4JTA0bFgpXG4iLA0K
KwlEUFJJTlRLICgib3V0bCAoMHglWCwgMHglMDRsWClcbiIsDQogCQljcHVf
dG9fbGUzMiAoY2hhbi0+c2d0X2hhbmRsZSksDQogCQljaGFuLT5pb2Jhc2Ug
KyBWSUFfUENNX1RBQkxFX0FERFIpOw0KIA0KQEAgLTY2NCw3ICs3MTQsNyBA
QA0KIAl1ZGVsYXkgKDIwKTsNCiAJdmlhX2FjOTdfd2FpdF9pZGxlIChjYXJk
KTsNCiANCi0JRFBSSU5USygiaW5sICgweCVsWCkgPSAleFxuIiwNCisJRFBS
SU5USyAoImlubCAoMHglbFgpID0gJXhcbiIsDQogCQljaGFuLT5pb2Jhc2Ug
KyBWSUFfUENNX1RBQkxFX0FERFIsDQogCQlpbmwoY2hhbi0+aW9iYXNlICsg
VklBX1BDTV9UQUJMRV9BRERSKSk7DQogDQpAQCAtNjczLDcgKzcyMyw3IEBA
DQogDQogZXJyX291dF9ub21lbToNCiAJcHJpbnRrIChLRVJOX0VSUiBQRlgg
IkRNQSBidWZmZXIgYWxsb2MgZmFpbCwgYWJvcnRpbmdcbiIpOw0KLQl2aWFf
Y2hhbl9mcmVlIChjYXJkLCBjaGFuKTsNCisJdmlhX2NoYW5fYnVmZmVyX2Zy
ZWUgKGNhcmQsIGNoYW4pOw0KIAlEUFJJTlRLICgiRVhJVFxuIik7DQogCXJl
dHVybiAtRU5PTUVNOw0KIH0NCkBAIC02OTUsOCArNzQ1LDYgQEANCiANCiBz
dGF0aWMgdm9pZCB2aWFfY2hhbl9mcmVlIChzdHJ1Y3QgdmlhX2luZm8gKmNh
cmQsIHN0cnVjdCB2aWFfY2hhbm5lbCAqY2hhbikNCiB7DQotCWludCBpOw0K
LQ0KIAlEUFJJTlRLICgiRU5URVJcbiIpOw0KIA0KIAlzeW5jaHJvbml6ZV9p
cnEoKTsNCkBAIC03MTAsMjMgKzc1OCwzMyBAQA0KIA0KIAlzcGluX3VubG9j
a19pcnEgKCZjYXJkLT5sb2NrKTsNCiANCisJRFBSSU5USyAoIkVYSVRcbiIp
Ow0KK30NCisNCitzdGF0aWMgdm9pZCB2aWFfY2hhbl9idWZmZXJfZnJlZSAo
c3RydWN0IHZpYV9pbmZvICpjYXJkLCBzdHJ1Y3QgdmlhX2NoYW5uZWwgKmNo
YW4pDQorew0KKwlpbnQgaTsNCisNCisgICAgICAgIERQUklOVEsgKCJFTlRF
UlxuIik7DQorDQogCS8qIHplcm8gbG9jYXRpb24gb2YgRE1BLWFibGUgc2Nh
dHRlci1nYXRoZXIgaW5mbyB0YWJsZSAqLw0KIAl2aWFfYWM5N193YWl0X2lk
bGUoY2FyZCk7DQogCW91dGwgKDAsIGNoYW4tPmlvYmFzZSArIFZJQV9QQ01f
VEFCTEVfQUREUik7DQogDQotCWZvciAoaSA9IDA7IGkgPCBWSUFfRE1BX0JV
RkZFUlM7IGkrKykNCi0JCWlmIChjaGFuLT5zZ2J1ZltpXS5jcHVhZGRyKSB7
DQotCQkJYXNzZXJ0ICgoVklBX0RNQV9CVUZfU0laRSAlIFBBR0VfU0laRSkg
PT0gMCk7DQotCQkJcGNpX2ZyZWVfY29uc2lzdGVudCAoY2FyZC0+cGRldiwg
VklBX0RNQV9CVUZfU0laRSwNCi0JCQkJCSAgICAgY2hhbi0+c2didWZbaV0u
Y3B1YWRkciwNCi0JCQkJCSAgICAgY2hhbi0+c2didWZbaV0uaGFuZGxlKTsN
Ci0JCQljaGFuLT5zZ2J1ZltpXS5jcHVhZGRyID0gTlVMTDsNCi0JCQljaGFu
LT5zZ2J1ZltpXS5oYW5kbGUgPSAwOw0KKwlmb3IgKGkgPSAwOyBpIDwgY2hh
bi0+cGFnZV9udW1iZXI7IGkrKykNCisJCWlmIChjaGFuLT5wZ3RibFtpXS5j
cHVhZGRyKSB7DQorCQkJcGNpX2ZyZWVfY29uc2lzdGVudCAoY2FyZC0+cGRl
diwgUEFHRV9TSVpFLA0KKwkJCQkJICAgICBjaGFuLT5wZ3RibFtpXS5jcHVh
ZGRyLA0KKwkJCQkJICAgICBjaGFuLT5wZ3RibFtpXS5oYW5kbGUpOw0KKwkJ
CWNoYW4tPnBndGJsW2ldLmNwdWFkZHIgPSBOVUxMOw0KKwkJCWNoYW4tPnBn
dGJsW2ldLmhhbmRsZSA9IDA7DQogCQl9DQogDQorCWNoYW4tPnBhZ2VfbnVt
YmVyID0gMDsNCisNCiAJaWYgKGNoYW4tPnNndGFibGUpIHsNCiAJCXBjaV9m
cmVlX2NvbnNpc3RlbnQgKGNhcmQtPnBkZXYsDQotCQkJKHNpemVvZiAoc3Ry
dWN0IHZpYV9zZ2RfdGFibGUpICogVklBX0RNQV9CVUZGRVJTKSwNCisJCQko
c2l6ZW9mIChzdHJ1Y3QgdmlhX3NnZF90YWJsZSkgKiBjaGFuLT5mcmFnX251
bWJlciksDQogCQkJKHZvaWQqKWNoYW4tPnNndGFibGUsIGNoYW4tPnNndF9o
YW5kbGUpOw0KIAkJY2hhbi0+c2d0YWJsZSA9IE5VTEw7DQogCX0NCkBAIC03
NzEsMTEgKzgyOSwxMSBAQA0KIAlpZiAoIWNoYW4tPmlzX3JlY29yZCkNCiAJ
CWNoYW4tPnBjbV9mbXQgfD0gVklBX0NIQU5fVFlQRV9JTlRfU0VMRUNUOw0K
IA0KLQlvdXRiIChjaGFuLT5wY21fZm10LCBjaGFuLT5pb2Jhc2UgKyAyKTsN
CisJb3V0YiAoY2hhbi0+cGNtX2ZtdCwgY2hhbi0+aW9iYXNlICsgVklBX1BD
TV9UWVBFKTsNCiANCiAJRFBSSU5USyAoIkVYSVQsIHBjbV9mbXQgPSAweCUw
MlgsIHJlZyA9IDB4JTAyWFxuIiwNCiAJCSBjaGFuLT5wY21fZm10LA0KLQkJ
IGluYiAoY2hhbi0+aW9iYXNlICsgMikpOw0KKwkJIGluYiAoY2hhbi0+aW9i
YXNlICsgVklBX1BDTV9UWVBFKSk7DQogfQ0KIA0KIA0KQEAgLTc4NywxMCAr
ODQ1LDExIEBADQogICoJYWxsIHNvZnR3YXJlIHBvaW50ZXJzIHdoaWNoIHRy
YWNrIERNQSBvcGVyYXRpb24uDQogICovDQogDQotc3RhdGljIHZvaWQgdmlh
X2NoYW5fY2xlYXIgKHN0cnVjdCB2aWFfY2hhbm5lbCAqY2hhbikNCitzdGF0
aWMgdm9pZCB2aWFfY2hhbl9jbGVhciAoc3RydWN0IHZpYV9pbmZvICpjYXJk
LCBzdHJ1Y3QgdmlhX2NoYW5uZWwgKmNoYW4pDQogew0KIAlEUFJJTlRLICgi
RU5URVJcbiIpOw0KIAl2aWFfY2hhbl9zdG9wIChjaGFuLT5pb2Jhc2UpOw0K
Kwl2aWFfY2hhbl9idWZmZXJfZnJlZShjYXJkLCBjaGFuKTsNCiAJY2hhbi0+
aXNfYWN0aXZlID0gMDsNCiAJY2hhbi0+aXNfbWFwcGVkID0gMDsNCiAJY2hh
bi0+aXNfZW5hYmxlZCA9IDE7DQpAQCAtNzk4LDEwICs4NTcsNiBAQA0KIAlj
aGFuLT5zd19wdHIgPSAwOw0KIAljaGFuLT5uX2lycXMgPSAwOw0KIAlhdG9t
aWNfc2V0ICgmY2hhbi0+aHdfcHRyLCAwKTsNCi0JaWYgKGNoYW4tPmlzX3Jl
Y29yZCkNCi0JCWF0b21pY19zZXQgKCZjaGFuLT5uX2J1ZnMsIDApOw0KLQll
bHNlDQotCQlhdG9taWNfc2V0ICgmY2hhbi0+bl9idWZzLCBWSUFfRE1BX0JV
RkZFUlMpOw0KIAlEUFJJTlRLICgiRVhJVFxuIik7DQogfQ0KIA0KQEAgLTgy
Niw3ICs4ODEsNyBAQA0KIHsNCiAJRFBSSU5USyAoIkVOVEVSLCByZXF1ZXN0
ZWQgcmF0ZSA9ICVkXG4iLCB2YWwpOw0KIA0KLQl2aWFfY2hhbl9jbGVhciAo
Y2hhbik7DQorCXZpYV9jaGFuX2NsZWFyIChjYXJkLCBjaGFuKTsNCiANCiAJ
dmFsID0gdmlhX3NldF9yYXRlICgmY2FyZC0+YWM5NywgY2hhbiwgdmFsKTsN
CiANCkBAIC04NTgsNyArOTEzLDcgQEANCiAJIAkgdmFsID09IEFGTVRfUzE2
X0xFID8gIkFGTVRfUzE2X0xFIiA6DQogCQkgInVua25vd24iKTsNCiANCi0J
dmlhX2NoYW5fY2xlYXIgKGNoYW4pOw0KKwl2aWFfY2hhbl9jbGVhciAoY2Fy
ZCwgY2hhbik7DQogDQogCWFzc2VydCAodmFsICE9IEFGTVRfUVVFUlkpOyAv
KiB0aGlzIGNhc2UgaXMgaGFuZGxlZCBlbHNld2hlcmUgKi8NCiANCkBAIC05
MDcsNyArOTYyLDcgQEANCiB7DQogCURQUklOVEsgKCJFTlRFUiwgY2hhbm5l
bHMgPSAlZFxuIiwgdmFsKTsNCiANCi0JdmlhX2NoYW5fY2xlYXIgKGNoYW4p
Ow0KKwl2aWFfY2hhbl9jbGVhciAoY2FyZCwgY2hhbik7DQogDQogCXN3aXRj
aCAodmFsKSB7DQogDQpAQCAtOTM0LDYgKzk4OSw3OCBAQA0KIAlyZXR1cm4g
dmFsOw0KIH0NCiANCitzdGF0aWMgaW50IHZpYV9jaGFuX3NldF9idWZmZXJp
bmcgKHN0cnVjdCB2aWFfaW5mbyAqY2FyZCwNCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCB2aWFfY2hhbm5lbCAqY2hhbiwgaW50
IHZhbCkNCit7DQorCWludCBzaGlmdDsNCisNCisgICAgICAgIERQUklOVEsg
KCJFTlRFUlxuIik7DQorDQorCS8qIGluIGJvdGggY2FzZXMgdGhlIGJ1ZmZl
ciBjYW5ub3QgYmUgY2hhbmdlZCAqLw0KKwlpZiAoY2hhbi0+aXNfYWN0aXZl
IHx8IGNoYW4tPmlzX21hcHBlZCkgeyANCisJCURQUklOVEsgKCJFWElUXG4i
KTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCS8qIGNhbGxlZCBv
dXRzaWRlIFNFVEZSQUdNRU5UICovDQorCS8qIHNldCBkZWZhdWx0cyBvciBk
byBub3RoaW5nICovDQorCWlmICh2YWwgPCAwKSB7DQorDQorCQlpZiAoY2hh
bi0+ZnJhZ19zaXplICYmIGNoYW4tPmZyYWdfbnVtYmVyKQ0KKwkJCWdvdG8g
b3V0Ow0KKw0KKwkJRFBSSU5USyAoIlxuIik7DQorDQorCQljaGFuLT5mcmFn
X3NpemUgPSAoVklBX0RFRkFVTFRfRlJBR19USU1FICogY2hhbi0+cmF0ZSAq
DQorCQkJCSAgICgoY2hhbi0+cGNtX2ZtdCAmIFZJQV9QQ01fRk1UX1NURVJF
TykgPyAyIDogMSkgKg0KKwkJCQkgICAoKGNoYW4tPnBjbV9mbXQgJiBWSUFf
UENNX0ZNVF8xNkJJVCkgPyAyIDogMSkpIC8gMTAwMCAtIDE7DQorDQorCQlz
aGlmdCA9IDA7DQorCQl3aGlsZSAoY2hhbi0+ZnJhZ19zaXplKSB7DQorCQkJ
Y2hhbi0+ZnJhZ19zaXplID4+PSAxOw0KKwkJCXNoaWZ0Kys7DQorCQl9DQor
CQljaGFuLT5mcmFnX3NpemUgPSAxIDw8IHNoaWZ0Ow0KKw0KKwkJY2hhbi0+
ZnJhZ19udW1iZXIgPSAoVklBX0RFRkFVTFRfQlVGRkVSX1RJTUUgLyBWSUFf
REVGQVVMVF9GUkFHX1RJTUUpOw0KKw0KKwkJRFBSSU5USyAoInNldHRpbmcg
ZGVmYXVsdCB2YWx1ZXMgJWQgJWRcbiIsIGNoYW4tPmZyYWdfc2l6ZSwgY2hh
bi0+ZnJhZ19udW1iZXIpOw0KKwl9IGVsc2Ugew0KKwkJY2hhbi0+ZnJhZ19z
aXplID0gMSA8PCAodmFsICYgMHhGRkZGKTsNCisJCWNoYW4tPmZyYWdfbnVt
YmVyID0gKHZhbCA+PiAxNikgJiAweEZGRkY7DQorDQorCQlEUFJJTlRLICgi
dXNpbmcgdXNlciB2YWx1ZXMgJWQgJWRcbiIsIGNoYW4tPmZyYWdfc2l6ZSwg
Y2hhbi0+ZnJhZ19udW1iZXIpOw0KKwl9DQorDQorCS8qIHF1YWtlMyB3YW50
cyBmcmFnX251bWJlciB0byBiZSBhIHBvd2VyIG9mIHR3byAqLw0KKwlzaGlm
dCA9IDA7DQorCXdoaWxlIChjaGFuLT5mcmFnX251bWJlcikgew0KKwkJY2hh
bi0+ZnJhZ19udW1iZXIgPj49IDE7DQorCQlzaGlmdCsrOw0KKwl9DQorCWNo
YW4tPmZyYWdfbnVtYmVyID0gMSA8PCBzaGlmdDsNCisNCisJaWYgKGNoYW4t
PmZyYWdfc2l6ZSA+IFZJQV9NQVhfRlJBR19TSVpFKQ0KKwkJY2hhbi0+ZnJh
Z19zaXplID0gVklBX01BWF9GUkFHX1NJWkU7DQorCWVsc2UgaWYgKGNoYW4t
PmZyYWdfc2l6ZSA8IFZJQV9NSU5fRlJBR19TSVpFKQ0KKwkJY2hhbi0+ZnJh
Z19zaXplID0gVklBX01JTl9GUkFHX1NJWkU7DQorDQorCWlmIChjaGFuLT5m
cmFnX251bWJlciA8IFZJQV9NSU5fRlJBR19OVU1CRVIpDQorICAgICAgICAg
ICAgICAgIGNoYW4tPmZyYWdfbnVtYmVyID0gVklBX01JTl9GUkFHX05VTUJF
UjsNCisNCisJaWYgKChjaGFuLT5mcmFnX251bWJlciAqIGNoYW4tPmZyYWdf
c2l6ZSkgLyBQQUdFX1NJWkUgPiBWSUFfTUFYX0JVRkZFUl9ETUFfUEFHRVMp
DQorCQljaGFuLT5mcmFnX251bWJlciA9IChWSUFfTUFYX0JVRkZFUl9ETUFf
UEFHRVMgKiBQQUdFX1NJWkUpIC8gY2hhbi0+ZnJhZ19zaXplOw0KKw0KK291
dDoNCisJaWYgKGNoYW4tPmlzX3JlY29yZCkNCisJCWF0b21pY19zZXQgKCZj
aGFuLT5uX2ZyYWdzLCAwKTsNCisJZWxzZQ0KKwkJYXRvbWljX3NldCAoJmNo
YW4tPm5fZnJhZ3MsIGNoYW4tPmZyYWdfbnVtYmVyKTsNCisNCisJRFBSSU5U
SyAoIkVYSVRcbiIpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQogDQogI2lmZGVm
IFZJQV9DSEFOX0RVTVBfQlVGUw0KIC8qKg0KQEAgLTk0OCw3ICsxMDc1LDcg
QEANCiB7DQogCWludCBpOw0KIA0KLQlmb3IgKGkgPSAwOyBpIDwgVklBX0RN
QV9CVUZGRVJTOyBpKyspIHsNCisJZm9yIChpID0gMDsgaSA8IGNoYW4tPmZy
YWdfbnVtYmVyOyBpKyspIHsNCiAJCURQUklOVEsgKCIjJTAyZDogYWRkcj0l
eCwgY291bnQ9JXUsIGZsYWc9JWQsIGVvbD0lZFxuIiwNCiAJCQkgaSwgY2hh
bi0+c2d0YWJsZVtpXS5hZGRyLA0KIAkJCSBjaGFuLT5zZ3RhYmxlW2ldLmNv
dW50ICYgMHgwMEZGRkZGRiwNCkBAIC05NzUsMTUgKzExMDIsMTUgQEANCiAN
CiAJYXNzZXJ0IChjaGFuLT5zbG9wX2xlbiA+IDApOw0KIA0KLQlpZiAoY2hh
bi0+c3dfcHRyID09IChWSUFfRE1BX0JVRkZFUlMgLSAxKSkNCisJaWYgKGNo
YW4tPnN3X3B0ciA9PSAoY2hhbi0+ZnJhZ19udW1iZXIgLSAxKSkNCiAJCWNo
YW4tPnN3X3B0ciA9IDA7DQogCWVsc2UNCiAJCWNoYW4tPnN3X3B0cisrOw0K
IA0KIAljaGFuLT5zbG9wX2xlbiA9IDA7DQogDQotCWFzc2VydCAoYXRvbWlj
X3JlYWQgKCZjaGFuLT5uX2J1ZnMpID4gMCk7DQotCWF0b21pY19kZWMgKCZj
aGFuLT5uX2J1ZnMpOw0KKwlhc3NlcnQgKGF0b21pY19yZWFkICgmY2hhbi0+
bl9mcmFncykgPiAwKTsNCisJYXRvbWljX2RlYyAoJmNoYW4tPm5fZnJhZ3Mp
Ow0KIA0KIAlEUFJJTlRLICgiRVhJVFxuIik7DQogfQ0KQEAgLTEwMDMsNyAr
MTEzMCw3IEBADQogCWlmICghY2hhbi0+aXNfYWN0aXZlICYmIGNoYW4tPmlz
X2VuYWJsZWQpIHsNCiAJCWNoYW4tPmlzX2FjdGl2ZSA9IDE7DQogCQlzZ19i
ZWdpbiAoY2hhbik7DQotCQlEUFJJTlRLKCJzdGFydGluZyBjaGFubmVsICVz
XG4iLCBjaGFuLT5uYW1lKTsNCisJCURQUklOVEsgKCJzdGFydGluZyBjaGFu
bmVsICVzXG4iLCBjaGFuLT5uYW1lKTsNCiAJfQ0KIH0NCiANCkBAIC0xMjEz
LDcgKzEzNDAsNyBAQA0KIHsNCiAJRFBSSU5USyAoIkVOVEVSXG4iKTsNCiAN
Ci0JRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nIC1FU1BJUEVcbiIpOw0KKwlE
UFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nIC1FU1BJUEVcbiIpOw0KIAlyZXR1
cm4gLUVTUElQRTsNCiB9DQogDQpAQCAtMTI0NSw3ICsxMzcyLDcgQEANCiAJ
CXBjaV9yZWFkX2NvbmZpZ19ieXRlIChjYXJkLT5wZGV2LCAweDQzLCAmcjQz
KTsNCiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlIChjYXJkLT5wZGV2LCAweDQ0
LCAmcjQ0KTsNCiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlIChjYXJkLT5wZGV2
LCAweDQ4LCAmcjQ4KTsNCi0JCURQUklOVEsoIlBDSSBjb25maWc6ICUwMlgg
JTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLA0KKwkJRFBSSU5USyAoIlBD
SSBjb25maWc6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLA0K
IAkJCXI0MCxyNDEscjQyLHI0MyxyNDQscjQ4KTsNCiANCiAJCXNwaW5fbG9j
a19pcnEgKCZjYXJkLT5sb2NrKTsNCkBAIC0xMzM0LDcgKzE0NjEsNyBAQA0K
IAljYXJkLT5hYzk3LmRldl9taXhlciA9IHJlZ2lzdGVyX3NvdW5kX21peGVy
ICgmdmlhX21peGVyX2ZvcHMsIC0xKTsNCiAJaWYgKGNhcmQtPmFjOTcuZGV2
X21peGVyIDwgMCkgew0KIAkJcHJpbnRrIChLRVJOX0VSUiBQRlggInVuYWJs
ZSB0byByZWdpc3RlciBBQzk3IG1peGVyLCBhYm9ydGluZ1xuIik7DQotCQlE
UFJJTlRLKCJFWElULCByZXR1cm5pbmcgLUVJT1xuIik7DQorCQlEUFJJTlRL
ICgiRVhJVCwgcmV0dXJuaW5nIC1FSU9cbiIpOw0KIAkJcmV0dXJuIC1FSU87
DQogCX0NCiANCkBAIC0xMzU5LDIxICsxNDg2LDIxIEBADQogDQogZXJyX291
dDoNCiAJdW5yZWdpc3Rlcl9zb3VuZF9taXhlciAoY2FyZC0+YWM5Ny5kZXZf
bWl4ZXIpOw0KLQlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgJWRcbiIsIHJj
KTsNCisJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgcmMpOw0K
IAlyZXR1cm4gcmM7DQogfQ0KIA0KIA0KIHN0YXRpYyB2b2lkIHZpYV9hYzk3
X2NsZWFudXAgKHN0cnVjdCB2aWFfaW5mbyAqY2FyZCkNCiB7DQotCURQUklO
VEsoIkVOVEVSXG4iKTsNCisJRFBSSU5USyAoIkVOVEVSXG4iKTsNCiANCiAJ
YXNzZXJ0IChjYXJkICE9IE5VTEwpOw0KIAlhc3NlcnQgKGNhcmQtPmFjOTcu
ZGV2X21peGVyID49IDApOw0KIA0KIAl1bnJlZ2lzdGVyX3NvdW5kX21peGVy
IChjYXJkLT5hYzk3LmRldl9taXhlcik7DQogDQotCURQUklOVEsoIkVYSVRc
biIpOw0KKwlEUFJJTlRLICgiRVhJVFxuIik7DQogfQ0KIA0KIA0KQEAgLTE0
MTQsMjQgKzE1NDEsMjQgQEANCiANCiAJLyogc2FuaXR5IGNoZWNrOiBtYWtl
IHN1cmUgb3VyIGgvdyBwdHIgZG9lc24ndCBoYXZlIGEgd2VpcmQgdmFsdWUg
Ki8NCiAJYXNzZXJ0IChuID49IDApOw0KLQlhc3NlcnQgKG4gPCBWSUFfRE1B
X0JVRkZFUlMpOw0KKwlhc3NlcnQgKG4gPCBjaGFuLT5mcmFnX251bWJlcik7
DQogDQogCS8qIHJlc2V0IFNHRCBkYXRhIHN0cnVjdHVyZSBpbiBtZW1vcnkg
dG8gcmVmbGVjdCBhIGZ1bGwgYnVmZmVyLA0KIAkgKiBhbmQgYWR2YW5jZSB0
aGUgaC93IHB0ciwgd3JhcHBpbmcgYXJvdW5kIHRvIHplcm8gaWYgbmVlZGVk
DQogCSAqLw0KLQlpZiAobiA9PSAoVklBX0RNQV9CVUZGRVJTIC0gMSkpIHsN
Ci0JCWNoYW4tPnNndGFibGVbbl0uY291bnQgPSAoVklBX0RNQV9CVUZfU0la
RSB8IFZJQV9FT0wpOw0KKwlpZiAobiA9PSAoY2hhbi0+ZnJhZ19udW1iZXIg
LSAxKSkgew0KKwkJY2hhbi0+c2d0YWJsZVtuXS5jb3VudCA9IChjaGFuLT5m
cmFnX3NpemUgfCBWSUFfRU9MKTsNCiAJCWF0b21pY19zZXQgKCZjaGFuLT5o
d19wdHIsIDApOw0KIAl9IGVsc2Ugew0KLQkJY2hhbi0+c2d0YWJsZVtuXS5j
b3VudCA9IChWSUFfRE1BX0JVRl9TSVpFIHwgVklBX0ZMQUcpOw0KKwkJY2hh
bi0+c2d0YWJsZVtuXS5jb3VudCA9IChjaGFuLT5mcmFnX3NpemUgfCBWSUFf
RkxBRyk7DQogCQlhdG9taWNfaW5jICgmY2hhbi0+aHdfcHRyKTsNCiAJfQ0K
IA0KIAkvKiBhY2NvdW50aW5nIGNyYXAgZm9yIFNORENUTF9EU1BfR0VUeFBU
UiAqLw0KIAljaGFuLT5uX2lycXMrKzsNCi0JY2hhbi0+Ynl0ZXMgKz0gVklB
X0RNQV9CVUZfU0laRTsNCisJY2hhbi0+Ynl0ZXMgKz0gY2hhbi0+ZnJhZ19z
aXplOw0KIAlpZiAoY2hhbi0+Ynl0ZXMgPCAwKSAvKiBoYW5kbGUgb3ZlcmZs
b3cgb2YgMzEtYml0IHZhbHVlICovDQotCQljaGFuLT5ieXRlcyA9IFZJQV9E
TUFfQlVGX1NJWkU7DQorCQljaGFuLT5ieXRlcyA9IGNoYW4tPmZyYWdfc2l6
ZTsNCiANCiAJLyogd2FrZSB1cCBhbnlvbmUgbGlzdGVuaW5nIHRvIHNlZSB3
aGVuIGludGVycnVwdHMgb2NjdXIgKi8NCiAJaWYgKHdhaXRxdWV1ZV9hY3Rp
dmUgKCZjaGFuLT53YWl0KSkNCkBAIC0xNDQ1LDI1ICsxNTcyLDI1IEBADQog
CWlmIChjaGFuLT5pc19tYXBwZWQpDQogCQlyZXR1cm47DQogDQotCS8qIElm
IHdlIGFyZSByZWNvcmRpbmcsIHRoZW4gbl9idWZzIHJlcHJlc2VudHMgdGhl
IG51bWJlcg0KLQkgKiBvZiBidWZmZXJzIHdhaXRpbmcgdG8gYmUgaGFuZGxl
ZCBieSB1c2Vyc3BhY2UuDQotCSAqIElmIHdlIGFyZSBwbGF5YmFjaywgdGhl
biBuX2J1ZnMgcmVwcmVzZW50cyB0aGUgbnVtYmVyDQotCSAqIG9mIGJ1ZmZl
cnMgcmVtYWluaW5nIHRvIGJlIGZpbGxlZCBieSB1c2Vyc3BhY2UuDQotCSAq
IFdlIGluY3JlbWVudCBoZXJlLiAgSWYgd2UgcmVhY2ggbWF4IGJ1ZmZlcnMg
KFZJQV9ETUFfQlVGRkVSUyksDQorCS8qIElmIHdlIGFyZSByZWNvcmRpbmcs
IHRoZW4gbl9mcmFncyByZXByZXNlbnRzIHRoZSBudW1iZXINCisJICogb2Yg
ZnJhZ21lbnRzIHdhaXRpbmcgdG8gYmUgaGFuZGxlZCBieSB1c2Vyc3BhY2Uu
DQorCSAqIElmIHdlIGFyZSBwbGF5YmFjaywgdGhlbiBuX2ZyYWdzIHJlcHJl
c2VudHMgdGhlIG51bWJlcg0KKwkgKiBvZiBmcmFnbWVudHMgcmVtYWluaW5n
IHRvIGJlIGZpbGxlZCBieSB1c2Vyc3BhY2UuDQorCSAqIFdlIGluY3JlbWVu
dCBoZXJlLiAgSWYgd2UgcmVhY2ggbWF4IG51bWJlciBvZiBmcmFnbWVudHMs
DQogCSAqIHRoaXMgaW5kaWNhdGVzIGFuIHVuZGVycnVuL292ZXJydW4uICBG
b3IgdGhpcyBjYXNlIHVuZGVyIE9TUywNCiAJICogd2Ugc3RvcCB0aGUgcmVj
b3JkL3BsYXliYWNrIHByb2Nlc3MuDQogCSAqLw0KLQlpZiAoYXRvbWljX3Jl
YWQgKCZjaGFuLT5uX2J1ZnMpIDwgVklBX0RNQV9CVUZGRVJTKQ0KLQkJYXRv
bWljX2luYyAoJmNoYW4tPm5fYnVmcyk7DQotCWFzc2VydCAoYXRvbWljX3Jl
YWQgKCZjaGFuLT5uX2J1ZnMpIDw9IFZJQV9ETUFfQlVGRkVSUyk7DQorCWlm
IChhdG9taWNfcmVhZCAoJmNoYW4tPm5fZnJhZ3MpIDwgY2hhbi0+ZnJhZ19u
dW1iZXIpDQorCQlhdG9taWNfaW5jICgmY2hhbi0+bl9mcmFncyk7DQorCWFz
c2VydCAoYXRvbWljX3JlYWQgKCZjaGFuLT5uX2ZyYWdzKSA8PSBjaGFuLT5m
cmFnX251bWJlcik7DQogDQotCWlmIChhdG9taWNfcmVhZCAoJmNoYW4tPm5f
YnVmcykgPT0gVklBX0RNQV9CVUZGRVJTKSB7DQorCWlmIChhdG9taWNfcmVh
ZCAoJmNoYW4tPm5fZnJhZ3MpID09IGNoYW4tPmZyYWdfbnVtYmVyKSB7DQog
CQljaGFuLT5pc19hY3RpdmUgPSAwOw0KIAkJdmlhX2NoYW5fc3RvcCAoY2hh
bi0+aW9iYXNlKTsNCiAJfQ0KIA0KLQlEUFJJTlRLICgiJXMgaW50ciwgY2hh
bm5lbCBuX2J1ZnMgPT0gJWRcbiIsIGNoYW4tPm5hbWUsDQotCQkgYXRvbWlj
X3JlYWQgKCZjaGFuLT5uX2J1ZnMpKTsNCisJRFBSSU5USyAoIiVzIGludHIs
IGNoYW5uZWwgbl9mcmFncyA9PSAlZFxuIiwgY2hhbi0+bmFtZSwNCisJCSBh
dG9taWNfcmVhZCAoJmNoYW4tPm5fZnJhZ3MpKTsNCiB9DQogDQogDQpAQCAt
MTYxOCw5ICsxNzQ1LDcgQEANCiAJcG9sbDoJCXZpYV9kc3BfcG9sbCwNCiAJ
bGxzZWVrOiAJdmlhX2xsc2VlaywNCiAJaW9jdGw6CQl2aWFfZHNwX2lvY3Rs
LA0KLSNpZmRlZiBWSUFfU1VQUE9SVF9NTUFQDQogCW1tYXA6CQl2aWFfZHNw
X21tYXAsDQotI2VuZGlmDQogfTsNCiANCiANCkBAIC0xNjY4LDcgKzE3OTMs
NiBAQA0KIH0NCiANCiANCi0jaWZkZWYgVklBX1NVUFBPUlRfTU1BUA0KIHN0
YXRpYyBzdHJ1Y3QgcGFnZSAqIHZpYV9tbV9ub3BhZ2UgKHN0cnVjdCB2bV9h
cmVhX3N0cnVjdCAqIHZtYSwNCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRk
cmVzcywgaW50IHdyaXRlX2FjY2VzcykNCiB7DQpAQCAtMTY4NSw4ICsxODA5
LDYgQEANCiAJCSBhZGRyZXNzLA0KIAkJIHdyaXRlX2FjY2Vzcyk7DQogDQot
CWFzc2VydCAoVklBX0RNQV9CVUZfU0laRSA9PSBQQUdFX1NJWkUpOw0KLQ0K
ICAgICAgICAgaWYgKGFkZHJlc3MgPiB2bWEtPnZtX2VuZCkgew0KIAkJRFBS
SU5USyAoIkVYSVQsIHJldHVybmluZyBOT1BBR0VfU0lHQlVTXG4iKTsNCiAJ
CXJldHVybiBOT1BBR0VfU0lHQlVTOyAvKiBEaXNhbGxvdyBtcmVtYXAgKi8N
CkBAIC0xNzAyLDcgKzE4MjQsNyBAQA0KIA0KICNpZm5kZWYgVklBX05ERUJV
Rw0KIAl7DQotCXVuc2lnbmVkIGxvbmcgbWF4X2J1ZnMgPSBWSUFfRE1BX0JV
RkZFUlM7DQorCXVuc2lnbmVkIGxvbmcgbWF4X2J1ZnMgPSBjaGFuLT5mcmFn
X251bWJlcjsNCiAJaWYgKHJkICYmIHdyKSBtYXhfYnVmcyAqPSAyOw0KIAkv
KiB2aWFfZHNwX21tYXAoKSBzaG91bGQgZW5zdXJlIHRoaXMgKi8NCiAJYXNz
ZXJ0IChwZ29mZiA8IG1heF9idWZzKTsNCkBAIC0xNzExLDE3ICsxODMzLDE3
IEBADQogDQogCS8qIGlmIGZ1bGwtZHVwbGV4IChyZWFkK3dyaXRlKSBhbmQg
d2UgaGF2ZSB0d28gc2V0cyBvZiBidWZzLA0KIAkgKiB0aGVuIHRoZSBwbGF5
YmFjayBidWZmZXJzIGNvbWUgZmlyc3QsIHNleiBzb3VuZGNhcmQuYyAqLw0K
LQlpZiAocGdvZmYgPj0gVklBX0RNQV9CVUZGRVJTKSB7DQotCQlwZ29mZiAt
PSBWSUFfRE1BX0JVRkZFUlM7DQorCWlmIChwZ29mZiA+PSBjaGFuLT5wYWdl
X251bWJlcikgew0KKwkJcGdvZmYgLT0gY2hhbi0+cGFnZV9udW1iZXI7DQog
CQljaGFuID0gJmNhcmQtPmNoX2luOw0KIAl9IGVsc2UgaWYgKCF3cikNCiAJ
CWNoYW4gPSAmY2FyZC0+Y2hfaW47DQogDQotCWFzc2VydCAoKCgodW5zaWdu
ZWQgbG9uZyljaGFuLT5zZ2J1ZltwZ29mZl0uY3B1YWRkcikgJSBQQUdFX1NJ
WkUpID09IDApOw0KKwlhc3NlcnQgKCgoKHVuc2lnbmVkIGxvbmcpY2hhbi0+
cGd0YmxbcGdvZmZdLmNwdWFkZHIpICUgUEFHRV9TSVpFKSA9PSAwKTsNCiAN
Ci0JZG1hcGFnZSA9IHZpcnRfdG9fcGFnZSAoY2hhbi0+c2didWZbcGdvZmZd
LmNwdWFkZHIpOw0KKwlkbWFwYWdlID0gdmlydF90b19wYWdlIChjaGFuLT5w
Z3RibFtwZ29mZl0uY3B1YWRkcik7DQogCURQUklOVEsgKCJFWElULCByZXR1
cm5pbmcgcGFnZSAlcCBmb3IgY3B1YWRkciAlbFhoXG4iLA0KLQkJIGRtYXBh
Z2UsICh1bnNpZ25lZCBsb25nKSBjaGFuLT5zZ2J1ZltwZ29mZl0uY3B1YWRk
cik7DQorCQkgZG1hcGFnZSwgKHVuc2lnbmVkIGxvbmcpIGNoYW4tPnBndGJs
W3Bnb2ZmXS5jcHVhZGRyKTsNCiAJZ2V0X3BhZ2UgKGRtYXBhZ2UpOw0KIAly
ZXR1cm4gZG1hcGFnZTsNCiB9DQpAQCAtMTc2MSwxNiArMTg4MywxOCBAQA0K
IAkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwNCiAJCSB2bWEtPnZt
X3Bnb2ZmKTsNCiANCi0JYXNzZXJ0IChWSUFfRE1BX0JVRl9TSVpFID09IFBB
R0VfU0laRSk7DQotDQogCW1heF9zaXplID0gMDsNCi0JaWYgKGZpbGUtPmZf
bW9kZSAmIEZNT0RFX1JFQUQpIHsNCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBW
TV9SRUFEKSB7DQogCQlyZCA9IDE7DQotCQltYXhfc2l6ZSArPSAoVklBX0RN
QV9CVUZGRVJTICogVklBX0RNQV9CVUZfU0laRSk7DQorCQl2aWFfY2hhbl9z
ZXRfYnVmZmVyaW5nKGNhcmQsICZjYXJkLT5jaF9pbiwgLTEpOw0KKwkJdmlh
X2NoYW5fYnVmZmVyX2luaXQgKGNhcmQsICZjYXJkLT5jaF9pbik7DQorCQlt
YXhfc2l6ZSArPSBjYXJkLT5jaF9pbi5wYWdlX251bWJlciA8PCBQQUdFX1NI
SUZUOw0KIAl9DQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkg
ew0KKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7DQogCQl3ciA9
IDE7DQotCQltYXhfc2l6ZSArPSAoVklBX0RNQV9CVUZGRVJTICogVklBX0RN
QV9CVUZfU0laRSk7DQorCQl2aWFfY2hhbl9zZXRfYnVmZmVyaW5nKGNhcmQs
ICZjYXJkLT5jaF9vdXQsIC0xKTsNCisJCXZpYV9jaGFuX2J1ZmZlcl9pbml0
IChjYXJkLCAmY2FyZC0+Y2hfb3V0KTsNCisJCW1heF9zaXplICs9IGNhcmQt
PmNoX291dC5wYWdlX251bWJlciA8PCBQQUdFX1NISUZUOw0KIAl9DQogDQog
CXN0YXJ0ID0gdm1hLT52bV9zdGFydDsNCkBAIC0xODAyLDEwICsxOTI2LDkg
QEANCiAJcmMgPSAwOw0KIA0KIG91dDoNCi0JRFBSSU5USygiRVhJVCwgcmV0
dXJuaW5nICVkXG4iLCByYyk7DQorCURQUklOVEsgKCJFWElULCByZXR1cm5p
bmcgJWRcbiIsIHJjKTsNCiAJcmV0dXJuIHJjOw0KIH0NCi0jZW5kaWYgLyog
VklBX1NVUFBPUlRfTU1BUCAqLw0KIA0KIA0KIHN0YXRpYyBzc2l6ZV90IHZp
YV9kc3BfZG9fcmVhZCAoc3RydWN0IHZpYV9pbmZvICpjYXJkLA0KQEAgLTE4
MzEsMTMgKzE5NTQsMTMgQEANCiAJICovDQogCW4gPSBjaGFuLT5zd19wdHI7
DQogDQotCS8qIG5fYnVmcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgYnVm
ZmVycyB3YWl0aW5nDQorCS8qIG5fZnJhZ3MgcmVwcmVzZW50cyB0aGUgbnVt
YmVyIG9mIGZyYWdtZW50cyB3YWl0aW5nDQogCSAqIHRvIGJlIGNvcGllZCB0
byB1c2VybGFuZC4gIHNsZWVwIHVudGlsIGF0IGxlYXN0DQogCSAqIG9uZSBi
dWZmZXIgaGFzIGJlZW4gcmVhZCBmcm9tIHRoZSBhdWRpbyBoYXJkd2FyZS4N
CiAJICovDQotCXRtcCA9IGF0b21pY19yZWFkICgmY2hhbi0+bl9idWZzKTsN
CisJdG1wID0gYXRvbWljX3JlYWQgKCZjaGFuLT5uX2ZyYWdzKTsNCiAJYXNz
ZXJ0ICh0bXAgPj0gMCk7DQotCWFzc2VydCAodG1wIDw9IFZJQV9ETUFfQlVG
RkVSUyk7DQorCWFzc2VydCAodG1wIDw9IGNoYW4tPmZyYWdfbnVtYmVyKTsN
CiAJd2hpbGUgKHRtcCA9PSAwKSB7DQogCQlpZiAobm9uYmxvY2sgfHwgIWNo
YW4tPmlzX2FjdGl2ZSkNCiAJCQlyZXR1cm4gLUVBR0FJTjsNCkBAIC0xODQ4
LDE4ICsxOTcxLDE4IEBADQogCQlpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJl
bnQpKQ0KIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7DQogDQotCQl0bXAgPSBh
dG9taWNfcmVhZCAoJmNoYW4tPm5fYnVmcyk7DQorCQl0bXAgPSBhdG9taWNf
cmVhZCAoJmNoYW4tPm5fZnJhZ3MpOw0KIAl9DQogDQogCS8qIE5vdyB0aGF0
IHdlIGhhdmUgYSBidWZmZXIgd2UgY2FuIHJlYWQgZnJvbSwgc2VuZA0KIAkg
KiBhcyBtdWNoIGFzIHNhbXBsZSBkYXRhIHBvc3NpYmxlIHRvIHVzZXJzcGFj
ZS4NCiAJICovDQotCXdoaWxlICgoY291bnQgPiAwKSAmJiAoY2hhbi0+c2xv
cF9sZW4gPCBWSUFfRE1BX0JVRl9TSVpFKSkgew0KLQkJc2l6ZV90IHNsb3Bf
bGVmdCA9IFZJQV9ETUFfQlVGX1NJWkUgLSBjaGFuLT5zbG9wX2xlbjsNCisJ
d2hpbGUgKChjb3VudCA+IDApICYmIChjaGFuLT5zbG9wX2xlbiA8IGNoYW4t
PmZyYWdfc2l6ZSkpIHsNCisJCXNpemVfdCBzbG9wX2xlZnQgPSBjaGFuLT5m
cmFnX3NpemUgLSBjaGFuLT5zbG9wX2xlbjsNCiANCiAJCXNpemUgPSAoY291
bnQgPCBzbG9wX2xlZnQpID8gY291bnQgOiBzbG9wX2xlZnQ7DQogCQlpZiAo
Y29weV90b191c2VyICh1c2VyYnVmLA0KLQkJCQkgIGNoYW4tPnNnYnVmW25d
LmNwdWFkZHIgKyBjaGFuLT5zbG9wX2xlbiwNCisJCQkJICBjaGFuLT5wZ3Ri
bFtuIC8gKFBBR0VfU0laRSAvIGNoYW4tPmZyYWdfc2l6ZSldLmNwdWFkZHIg
KyBuICUgKFBBR0VfU0laRSAvIGNoYW4tPmZyYWdfc2l6ZSkgKyBjaGFuLT5z
bG9wX2xlbiwNCiAJCQkJICBzaXplKSkNCiAJCQlyZXR1cm4gLUVGQVVMVDsN
CiANCkBAIC0xODcxLDcgKzE5OTQsNyBAQA0KIAkvKiBJZiB3ZSBkaWRuJ3Qg
Y29weSB0aGUgYnVmZmVyIGNvbXBsZXRlbHkgdG8gdXNlcnNwYWNlLA0KIAkg
KiBzdG9wIG5vdy4NCiAJICovDQotCWlmIChjaGFuLT5zbG9wX2xlbiA8IFZJ
QV9ETUFfQlVGX1NJWkUpDQorCWlmIChjaGFuLT5zbG9wX2xlbiA8IGNoYW4t
PmZyYWdfc2l6ZSkNCiAJCWdvdG8gb3V0Ow0KIA0KIAkvKg0KQEAgLTE4ODIs
MjAgKzIwMDUsMjAgQEANCiAJLyogYWR2YW5jZSBjaGFubmVsIHNvZnR3YXJl
IHBvaW50ZXIgdG8gcG9pbnQgdG8NCiAJICogdGhlIG5leHQgYnVmZmVyIGZy
b20gd2hpY2ggd2Ugd2lsbCBjb3B5DQogCSAqLw0KLQlpZiAoY2hhbi0+c3df
cHRyID09IChWSUFfRE1BX0JVRkZFUlMgLSAxKSkNCisJaWYgKGNoYW4tPnN3
X3B0ciA9PSAoY2hhbi0+ZnJhZ19udW1iZXIgLSAxKSkNCiAJCWNoYW4tPnN3
X3B0ciA9IDA7DQogCWVsc2UNCiAJCWNoYW4tPnN3X3B0cisrOw0KIA0KIAkv
KiBtYXJrIG9uZSBsZXNzIGJ1ZmZlciB3YWl0aW5nIHRvIGJlIHByb2Nlc3Nl
ZCAqLw0KLQlhc3NlcnQgKGF0b21pY19yZWFkICgmY2hhbi0+bl9idWZzKSA+
IDApOw0KLQlhdG9taWNfZGVjICgmY2hhbi0+bl9idWZzKTsNCisJYXNzZXJ0
IChhdG9taWNfcmVhZCAoJmNoYW4tPm5fZnJhZ3MpID4gMCk7DQorCWF0b21p
Y19kZWMgKCZjaGFuLT5uX2ZyYWdzKTsNCiANCiAJLyogd2UgYXJlIGF0IGEg
YmxvY2sgYm91bmRhcnksIHRoZXJlIGlzIG5vIGZyYWdtZW50IGRhdGEgKi8N
CiAJY2hhbi0+c2xvcF9sZW4gPSAwOw0KIA0KLQlEUFJJTlRLKCJGbHVzaGVk
IGJsb2NrICV1LCBzd19wdHIgbm93ICV1LCBuX2J1ZnMgbm93ICVkXG4iLA0K
LQkJbiwgY2hhbi0+c3dfcHRyLCBhdG9taWNfcmVhZCAoJmNoYW4tPm5fYnVm
cykpOw0KKwlEUFJJTlRLICgiRmx1c2hlZCBibG9jayAldSwgc3dfcHRyIG5v
dyAldSwgbl9mcmFncyBub3cgJWRcbiIsDQorCQluLCBjaGFuLT5zd19wdHIs
IGF0b21pY19yZWFkICgmY2hhbi0+bl9mcmFncykpOw0KIA0KIAlEUFJJTlRL
ICgicmVncz09JTAyWCAlMDJYICUwMlggJTA4WCAlMDhYICUwOFggJTA4WFxu
IiwNCiAJCSBpbmIgKGNhcmQtPmJhc2VhZGRyICsgMHgwMCksDQpAQCAtMTk0
MSwxMiArMjA2NCwxOCBAQA0KIAkJZ290byBvdXRfdXA7DQogCX0NCiANCisJ
dmlhX2NoYW5fc2V0X2J1ZmZlcmluZyhjYXJkLCAmY2FyZC0+Y2hfaW4sIC0x
KTsNCisgICAgICAgIHJjID0gdmlhX2NoYW5fYnVmZmVyX2luaXQgKGNhcmQs
ICZjYXJkLT5jaF9pbik7DQorDQorCWlmIChyYykNCisJCWdvdG8gb3V0X3Vw
Ow0KKw0KIAlyYyA9IHZpYV9kc3BfZG9fcmVhZCAoY2FyZCwgYnVmZmVyLCBj
b3VudCwgbm9uYmxvY2spOw0KIA0KIG91dF91cDoNCiAJdXAgKCZjYXJkLT5z
eXNjYWxsX3NlbSk7DQogb3V0Og0KLQlEUFJJTlRLKCJFWElULCByZXR1cm5p
bmcgJWxkXG4iLChsb25nKSByYyk7DQorCURQUklOVEsgKCJFWElULCByZXR1
cm5pbmcgJWxkXG4iLChsb25nKSByYyk7DQogCXJldHVybiByYzsNCiB9DQog
DQpAQCAtMTk2Niw0MCArMjA5NSw0MCBAQA0KIAlpZiAoY3VycmVudC0+bmVl
ZF9yZXNjaGVkKQ0KIAkJc2NoZWR1bGUgKCk7DQogDQotCS8qIGdyYWIgY3Vy
cmVudCBjaGFubmVsIHNvZnR3YXJlIHBvaW50ZXIuICBJbiB0aGUgY2FzZSBv
Zg0KLQkgKiBwbGF5YmFjaywgdGhpcyBpcyBwb2ludGluZyB0byB0aGUgbmV4
dCBidWZmZXIgdGhhdA0KKwkvKiBncmFiIGN1cnJlbnQgY2hhbm5lbCBmcmFn
bWVudCBwb2ludGVyLiAgSW4gdGhlIGNhc2Ugb2YNCisJICogcGxheWJhY2ss
IHRoaXMgaXMgcG9pbnRpbmcgdG8gdGhlIG5leHQgZnJhZ21lbnQgdGhhdA0K
IAkgKiBzaG91bGQgcmVjZWl2ZSBkYXRhIGZyb20gdXNlcmxhbmQuDQogCSAq
Lw0KIAluID0gY2hhbi0+c3dfcHRyOw0KIA0KLQkvKiBuX2J1ZnMgcmVwcmVz
ZW50cyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgcmVtYWluaW5nDQorCS8qIG5f
ZnJhZ3MgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyByZW1h
aW5pbmcNCiAJICogdG8gYmUgZmlsbGVkIGJ5IHVzZXJzcGFjZS4gIFNsZWVw
IHVudGlsDQotCSAqIGF0IGxlYXN0IG9uZSBidWZmZXIgaXMgYXZhaWxhYmxl
IGZvciBvdXIgdXNlLg0KKwkgKiBhdCBsZWFzdCBvbmUgZnJhZ21lbnQgaXMg
YXZhaWxhYmxlIGZvciBvdXIgdXNlLg0KIAkgKi8NCi0JdG1wID0gYXRvbWlj
X3JlYWQgKCZjaGFuLT5uX2J1ZnMpOw0KKwl0bXAgPSBhdG9taWNfcmVhZCAo
JmNoYW4tPm5fZnJhZ3MpOw0KIAlhc3NlcnQgKHRtcCA+PSAwKTsNCi0JYXNz
ZXJ0ICh0bXAgPD0gVklBX0RNQV9CVUZGRVJTKTsNCisJYXNzZXJ0ICh0bXAg
PD0gY2hhbi0+ZnJhZ19udW1iZXIpOw0KIAl3aGlsZSAodG1wID09IDApIHsN
CiAJCWlmIChub25ibG9jayB8fCAhY2hhbi0+aXNfZW5hYmxlZCkNCiAJCQly
ZXR1cm4gLUVBR0FJTjsNCiANCi0JCURQUklOVEsgKCJTbGVlcGluZyBvbiBi
bG9jayAlZCwgdG1wPT0lZCwgaXI9PSVkXG4iLCBuLCB0bXAsIGNoYW4tPmlz
X3JlY29yZCk7DQorCQlEUFJJTlRLICgiU2xlZXBpbmcgb24gcGFnZSAlZCwg
dG1wPT0lZCwgaXI9PSVkXG4iLCBuLCB0bXAsIGNoYW4tPmlzX3JlY29yZCk7
DQogCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uICgmY2hhbi0+d2FpdCk7DQog
DQogCQlpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKQ0KIAkJCXJldHVy
biAtRVJFU1RBUlRTWVM7DQogDQotCQl0bXAgPSBhdG9taWNfcmVhZCAoJmNo
YW4tPm5fYnVmcyk7DQorCQl0bXAgPSBhdG9taWNfcmVhZCAoJmNoYW4tPm5f
ZnJhZ3MpOw0KIAl9DQogDQotCS8qIE5vdyB0aGF0IHdlIGhhdmUgYSBidWZm
ZXIgd2UgY2FuIHdyaXRlIHRvLCBmaWxsIGl0IHVwDQorCS8qIE5vdyB0aGF0
IHdlIGhhdmUgYXQgbGVhc3Qgb25lIGZyYWdtZW50IHdlIGNhbiB3cml0ZSB0
bywgZmlsbCB0aGUgYnVmZmVyDQogCSAqIGFzIG11Y2ggYXMgcG9zc2libGUg
d2l0aCBkYXRhIGZyb20gdXNlcnNwYWNlLg0KIAkgKi8NCi0Jd2hpbGUgKChj
b3VudCA+IDApICYmIChjaGFuLT5zbG9wX2xlbiA8IFZJQV9ETUFfQlVGX1NJ
WkUpKSB7DQotCQlzaXplX3Qgc2xvcF9sZWZ0ID0gVklBX0RNQV9CVUZfU0la
RSAtIGNoYW4tPnNsb3BfbGVuOw0KKwl3aGlsZSAoKGNvdW50ID4gMCkgJiYg
KGNoYW4tPnNsb3BfbGVuIDwgY2hhbi0+ZnJhZ19zaXplKSkgew0KKwkJc2l6
ZV90IHNsb3BfbGVmdCA9IGNoYW4tPmZyYWdfc2l6ZSAtIGNoYW4tPnNsb3Bf
bGVuOw0KIA0KIAkJc2l6ZSA9IChjb3VudCA8IHNsb3BfbGVmdCkgPyBjb3Vu
dCA6IHNsb3BfbGVmdDsNCi0JCWlmIChjb3B5X2Zyb21fdXNlciAoY2hhbi0+
c2didWZbbl0uY3B1YWRkciArIGNoYW4tPnNsb3BfbGVuLA0KKwkJaWYgKGNv
cHlfZnJvbV91c2VyIChjaGFuLT5wZ3RibFtuIC8gKFBBR0VfU0laRSAvIGNo
YW4tPmZyYWdfc2l6ZSldLmNwdWFkZHIgKyAobiAlIChQQUdFX1NJWkUgLyBj
aGFuLT5mcmFnX3NpemUpKSAqIGNoYW4tPmZyYWdfc2l6ZSArIGNoYW4tPnNs
b3BfbGVuLA0KIAkJCQkgICAgdXNlcmJ1Ziwgc2l6ZSkpDQogCQkJcmV0dXJu
IC1FRkFVTFQ7DQogDQpAQCAtMjAwOSwzNiArMjEzOCwzNiBAQA0KIAl9DQog
DQogCS8qIElmIHdlIGRpZG4ndCBmaWxsIHVwIHRoZSBidWZmZXIgd2l0aCBk
YXRhLCBzdG9wIG5vdy4NCi0JICogUHV0IGEgJ3N0b3AnIG1hcmtlciBpbiB0
aGUgRE1BIHRhYmxlIHRvbywgdG8gdGVsbCB0aGUNCi0JICogYXVkaW8gaGFy
ZHdhcmUgdG8gc3RvcCBpZiBpdCBnZXRzIGhlcmUuDQotCSAqLw0KLQlpZiAo
Y2hhbi0+c2xvcF9sZW4gPCBWSUFfRE1BX0JVRl9TSVpFKSB7DQorICAgICAg
ICAgKiBQdXQgYSAnc3RvcCcgbWFya2VyIGluIHRoZSBETUEgdGFibGUgdG9v
LCB0byB0ZWxsIHRoZQ0KKyAgICAgICAgICogYXVkaW8gaGFyZHdhcmUgdG8g
c3RvcCBpZiBpdCBnZXRzIGhlcmUuDQorICAgICAgICAgKi8NCisJaWYgKGNo
YW4tPnNsb3BfbGVuIDwgY2hhbi0+ZnJhZ19zaXplKSB7DQogCQlzZ3RhYmxl
W25dLmNvdW50ID0gY3B1X3RvX2xlMzIgKGNoYW4tPnNsb3BfbGVuIHwgVklB
X0VPTCB8IFZJQV9TVE9QKTsNCiAJCWdvdG8gb3V0Ow0KIAl9DQogDQogCS8q
DQotCSAqIElmIHdlIGdldCB0byB0aGlzIHBvaW50LCB3ZSBoYXZlIGZpbGxl
ZCBhIGJ1ZmZlciB3aXRoDQotCSAqIGF1ZGlvIGRhdGEsIGZsdXNoIHRoZSBi
dWZmZXIgdG8gYXVkaW8gaGFyZHdhcmUuDQotCSAqLw0KKyAgICAgICAgICog
SWYgd2UgZ2V0IHRvIHRoaXMgcG9pbnQsIHdlIGhhdmUgZmlsbGVkIGEgYnVm
ZmVyIHdpdGgNCisgICAgICAgICAqIGF1ZGlvIGRhdGEsIGZsdXNoIHRoZSBi
dWZmZXIgdG8gYXVkaW8gaGFyZHdhcmUuDQorICAgICAgICAgKi8NCiANCiAJ
LyogUmVjb3JkIHRoZSB0cnVlIHNpemUgZm9yIHRoZSBhdWRpbyBoYXJkd2Fy
ZSB0byBub3RpY2UgKi8NCi0JaWYgKG4gPT0gKFZJQV9ETUFfQlVGRkVSUyAt
IDEpKQ0KLQkJc2d0YWJsZVtuXS5jb3VudCA9IGNwdV90b19sZTMyIChWSUFf
RE1BX0JVRl9TSVpFIHwgVklBX0VPTCk7DQotCWVsc2UNCi0JCXNndGFibGVb
bl0uY291bnQgPSBjcHVfdG9fbGUzMiAoVklBX0RNQV9CVUZfU0laRSB8IFZJ
QV9GTEFHKTsNCisgICAgICAgIGlmIChuID09IChjaGFuLT5mcmFnX251bWJl
ciAtIDEpKQ0KKyAgICAgICAgICAgICAgICBzZ3RhYmxlW25dLmNvdW50ID0g
Y3B1X3RvX2xlMzIgKGNoYW4tPmZyYWdfc2l6ZSB8IFZJQV9FT0wpOw0KKyAg
ICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICBzZ3RhYmxlW25dLmNvdW50
ID0gY3B1X3RvX2xlMzIgKGNoYW4tPmZyYWdfc2l6ZSB8IFZJQV9GTEFHKTsN
CiANCiAJLyogYWR2YW5jZSBjaGFubmVsIHNvZnR3YXJlIHBvaW50ZXIgdG8g
cG9pbnQgdG8NCiAJICogdGhlIG5leHQgYnVmZmVyIHdlIHdpbGwgZmlsbCB3
aXRoIGRhdGENCiAJICovDQotCWlmIChjaGFuLT5zd19wdHIgPT0gKFZJQV9E
TUFfQlVGRkVSUyAtIDEpKQ0KKwlpZiAoY2hhbi0+c3dfcHRyID09IChjaGFu
LT5mcmFnX251bWJlciAtIDEpKQ0KIAkJY2hhbi0+c3dfcHRyID0gMDsNCiAJ
ZWxzZQ0KIAkJY2hhbi0+c3dfcHRyKys7DQogDQogCS8qIG1hcmsgb25lIGxl
c3MgYnVmZmVyIGFzIGJlaW5nIGF2YWlsYWJsZSBmb3IgdXNlcnNwYWNlIGNv
bnN1bXB0aW9uICovDQotCWFzc2VydCAoYXRvbWljX3JlYWQgKCZjaGFuLT5u
X2J1ZnMpID4gMCk7DQotCWF0b21pY19kZWMgKCZjaGFuLT5uX2J1ZnMpOw0K
Kwlhc3NlcnQgKGF0b21pY19yZWFkICgmY2hhbi0+bl9mcmFncykgPiAwKTsN
CisJYXRvbWljX2RlYyAoJmNoYW4tPm5fZnJhZ3MpOw0KIA0KIAkvKiB3ZSBh
cmUgYXQgYSBibG9jayBib3VuZGFyeSwgdGhlcmUgaXMgbm8gZnJhZ21lbnQg
ZGF0YSAqLw0KIAljaGFuLT5zbG9wX2xlbiA9IDA7DQpAQCAtMjA0Niw4ICsy
MTc1LDggQEANCiAJLyogaWYgU0dEIGhhcyBub3QgeWV0IGJlZW4gc3RhcnRl
ZCwgc3RhcnQgaXQgKi8NCiAJdmlhX2NoYW5fbWF5YmVfc3RhcnQgKGNoYW4p
Ow0KIA0KLQlEUFJJTlRLKCJGbHVzaGVkIGJsb2NrICV1LCBzd19wdHIgbm93
ICV1LCBuX2J1ZnMgbm93ICVkXG4iLA0KLQkJbiwgY2hhbi0+c3dfcHRyLCBh
dG9taWNfcmVhZCAoJmNoYW4tPm5fYnVmcykpOw0KKwlEUFJJTlRLICgiRmx1
c2hlZCBibG9jayAldSwgc3dfcHRyIG5vdyAldSwgbl9mcmFncyBub3cgJWRc
biIsDQorCQluLCBjaGFuLT5zd19wdHIsIGF0b21pY19yZWFkICgmY2hhbi0+
bl9mcmFncykpOw0KIA0KIAlEUFJJTlRLICgicmVncz09JTAyWCAlMDJYICUw
MlggJTA4WCAlMDhYICUwOFggJTA4WFxuIiwNCiAJCSBpbmIgKGNhcmQtPmJh
c2VhZGRyICsgMHgwMCksDQpAQCAtMjA5MywxMiArMjIyMiwxOCBAQA0KIAkJ
Z290byBvdXRfdXA7DQogCX0NCiANCisJdmlhX2NoYW5fc2V0X2J1ZmZlcmlu
ZyhjYXJkLCAmY2FyZC0+Y2hfb3V0LCAtMSk7DQorCXJjID0gdmlhX2NoYW5f
YnVmZmVyX2luaXQgKGNhcmQsICZjYXJkLT5jaF9vdXQpOw0KKw0KKwlpZiAo
cmMpDQorCQlnb3RvIG91dF91cDsNCisNCiAJcmMgPSB2aWFfZHNwX2RvX3dy
aXRlIChjYXJkLCBidWZmZXIsIGNvdW50LCBub25ibG9jayk7DQogDQogb3V0
X3VwOg0KIAl1cCAoJmNhcmQtPnN5c2NhbGxfc2VtKTsNCiBvdXQ6DQotCURQ
UklOVEsoIkVYSVQsIHJldHVybmluZyAlbGRcbiIsKGxvbmcpIHJjKTsNCisJ
RFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlbGRcbiIsKGxvbmcpIHJjKTsN
CiAJcmV0dXJuIHJjOw0KIH0NCiANCkBAIC0yMTE3LDIzICsyMjUyLDI3IEBA
DQogCXJkID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpOw0KIAl3ciA9
IChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSk7DQogDQotCWlmICh3ciAm
JiAoYXRvbWljX3JlYWQgKCZjYXJkLT5jaF9vdXQubl9idWZzKSA9PSAwKSkg
ew0KKwlpZiAod3IgJiYgKGF0b21pY19yZWFkICgmY2FyZC0+Y2hfb3V0Lm5f
ZnJhZ3MpID09IDApKSB7DQogCQlhc3NlcnQgKGNhcmQtPmNoX291dC5pc19h
Y3RpdmUpOw0KICAgICAgICAgICAgICAgICBwb2xsX3dhaXQoZmlsZSwgJmNh
cmQtPmNoX291dC53YWl0LCB3YWl0KTsNCiAJfQ0KICAgICAgICAgaWYgKHJk
KSB7DQogCQkvKiBYWFggaXMgaXQgb2ssIHNwZWMtd2lzZSwgdG8gc3RhcnQg
RE1BIGhlcmU/ICovDQorCQlpZiAoIWNhcmQtPmNoX2luLmlzX2FjdGl2ZSkg
ew0KKwkJCXZpYV9jaGFuX3NldF9idWZmZXJpbmcoY2FyZCwgJmNhcmQtPmNo
X2luLCAtMSk7DQorCQkJdmlhX2NoYW5fYnVmZmVyX2luaXQoY2FyZCwgJmNh
cmQtPmNoX2luKTsNCisJCX0NCiAJCXZpYV9jaGFuX21heWJlX3N0YXJ0ICgm
Y2FyZC0+Y2hfaW4pOw0KLQkJaWYgKGF0b21pY19yZWFkICgmY2FyZC0+Y2hf
aW4ubl9idWZzKSA9PSAwKQ0KKwkJaWYgKGF0b21pY19yZWFkICgmY2FyZC0+
Y2hfaW4ubl9mcmFncykgPT0gMCkNCiAJICAgICAgICAgICAgICAgIHBvbGxf
d2FpdChmaWxlLCAmY2FyZC0+Y2hfaW4ud2FpdCwgd2FpdCk7DQogCX0NCiAN
Ci0JaWYgKHdyICYmIChhdG9taWNfcmVhZCAoJmNhcmQtPmNoX291dC5uX2J1
ZnMpID4gMCkpDQorCWlmICh3ciAmJiAoKGF0b21pY19yZWFkICgmY2FyZC0+
Y2hfb3V0Lm5fZnJhZ3MpID4gMCkgfHwgIWNhcmQtPmNoX291dC5pc19hY3Rp
dmUpKQ0KIAkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsNCi0JaWYg
KHJkICYmIChhdG9taWNfcmVhZCAoJmNhcmQtPmNoX2luLm5fYnVmcykgPiAw
KSkNCisJaWYgKHJkICYmIChhdG9taWNfcmVhZCAoJmNhcmQtPmNoX2luLm5f
ZnJhZ3MpID4gMCkpDQogCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07
DQogDQotCURQUklOVEsoIkVYSVQsIHJldHVybmluZyAldVxuIiwgbWFzayk7
DQorCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcgJXVcbiIsIG1hc2spOw0K
IAlyZXR1cm4gbWFzazsNCiB9DQogDQpAQCAtMjE1OCwxMiArMjI5NywxMiBA
QA0KIAlpZiAoY2hhbi0+c2xvcF9sZW4gPiAwKQ0KIAkJdmlhX2NoYW5fZmx1
c2hfZnJhZyAoY2hhbik7DQogDQotCWlmIChhdG9taWNfcmVhZCAoJmNoYW4t
Pm5fYnVmcykgPT0gVklBX0RNQV9CVUZGRVJTKQ0KKwlpZiAoYXRvbWljX3Jl
YWQgKCZjaGFuLT5uX2ZyYWdzKSA9PSBjaGFuLT5mcmFnX251bWJlcikNCiAJ
CWdvdG8gb3V0Ow0KIA0KIAl2aWFfY2hhbl9tYXliZV9zdGFydCAoY2hhbik7
DQogDQotCXdoaWxlIChhdG9taWNfcmVhZCAoJmNoYW4tPm5fYnVmcykgPCBW
SUFfRE1BX0JVRkZFUlMpIHsNCisJd2hpbGUgKGF0b21pY19yZWFkICgmY2hh
bi0+bl9mcmFncykgPCBjaGFuLT5mcmFnX251bWJlcikgew0KIAkJaWYgKG5v
bmJsb2NrKSB7DQogCQkJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAtRUFH
QUlOXG4iKTsNCiAJCQlyZXR1cm4gLUVBR0FJTjsNCkBAIC0yMTc4LDcgKzIz
MTcsNyBAQA0KIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUgKGNhcmQtPnBkZXYs
IDB4NDMsICZyNDMpOw0KIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUgKGNhcmQt
PnBkZXYsIDB4NDQsICZyNDQpOw0KIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUg
KGNhcmQtPnBkZXYsIDB4NDgsICZyNDgpOw0KLQkJRFBSSU5USygiUENJIGNv
bmZpZzogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsDQorCQlE
UFJJTlRLICgiUENJIGNvbmZpZzogJTAyWCAlMDJYICUwMlggJTAyWCAlMDJY
ICUwMlhcbiIsDQogCQkJcjQwLHI0MSxyNDIscjQzLHI0NCxyNDgpOw0KIA0K
IAkJRFBSSU5USyAoInJlZ3M9PSUwMlggJTAyWCAlMDJYICUwOFggJTA4WCAl
MDhYICUwOFhcbiIsDQpAQCAtMjE5NSw3ICsyMzM0LDcgQEANCiAJCQlwcmlu
dGsgKEtFUk5fRVJSICJzbGVlcGluZyBidXQgbm90IGFjdGl2ZVxuIik7DQog
I2VuZGlmDQogDQotCQlEUFJJTlRLICgic2xlZXBpbmcsIG5idWZzPSVkXG4i
LCBhdG9taWNfcmVhZCAoJmNoYW4tPm5fYnVmcykpOw0KKwkJRFBSSU5USyAo
InNsZWVwaW5nLCBuYnVmcz0lZFxuIiwgYXRvbWljX3JlYWQgKCZjaGFuLT5u
X2ZyYWdzKSk7DQogCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uICgmY2hhbi0+
d2FpdCk7DQogDQogCQlpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSB7
DQpAQCAtMjIxMyw3ICsyMzUyLDcgQEANCiAJCXBjaV9yZWFkX2NvbmZpZ19i
eXRlIChjYXJkLT5wZGV2LCAweDQzLCAmcjQzKTsNCiAJCXBjaV9yZWFkX2Nv
bmZpZ19ieXRlIChjYXJkLT5wZGV2LCAweDQ0LCAmcjQ0KTsNCiAJCXBjaV9y
ZWFkX2NvbmZpZ19ieXRlIChjYXJkLT5wZGV2LCAweDQ4LCAmcjQ4KTsNCi0J
CURQUklOVEsoIlBDSSBjb25maWc6ICUwMlggJTAyWCAlMDJYICUwMlggJTAy
WCAlMDJYXG4iLA0KKwkJRFBSSU5USyAoIlBDSSBjb25maWc6ICUwMlggJTAy
WCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLA0KIAkJCXI0MCxyNDEscjQyLHI0
MyxyNDQscjQ4KTsNCiANCiAJCURQUklOVEsgKCJyZWdzPT0lMDJYICUwMlgg
JTAyWCAlMDhYICUwOFggJTA4WCAlMDhYXG4iLA0KQEAgLTIyMjUsNyArMjM2
NCw3IEBADQogCQkJIGlubCAoY2FyZC0+YmFzZWFkZHIgKyAweDgwKSwNCiAJ
CQkgaW5sIChjYXJkLT5iYXNlYWRkciArIDB4ODQpKTsNCiANCi0JCURQUklO
VEsgKCJmaW5hbCBuYnVmcz0lZFxuIiwgYXRvbWljX3JlYWQgKCZjaGFuLT5u
X2J1ZnMpKTsNCisJCURQUklOVEsgKCJmaW5hbCBuYnVmcz0lZFxuIiwgYXRv
bWljX3JlYWQgKCZjaGFuLT5uX2ZyYWdzKSk7DQogCX0NCiAjZW5kaWYNCiAN
CkBAIC0yMjUyLDIxICsyMzkxLDIzIEBADQogew0KIAlhdWRpb19idWZfaW5m
byBpbmZvOw0KIA0KLQlpbmZvLmZyYWdzdG90YWwgPSBWSUFfRE1BX0JVRkZF
UlM7DQotCWluZm8uZnJhZ3NpemUgPSBWSUFfRE1BX0JVRl9TSVpFOw0KKwl2
aWFfY2hhbl9zZXRfYnVmZmVyaW5nKGNhcmQsIGNoYW4sIC0xKTsNCisNCisJ
aW5mby5mcmFnc3RvdGFsID0gY2hhbi0+ZnJhZ19udW1iZXI7DQorCWluZm8u
ZnJhZ3NpemUgPSBjaGFuLT5mcmFnX3NpemU7DQogDQogCS8qIG51bWJlciBv
ZiBmdWxsIGZyYWdtZW50cyB3ZSBjYW4gcmVhZC93cml0ZSB3aXRob3V0IGJs
b2NraW5nICovDQotCWluZm8uZnJhZ21lbnRzID0gYXRvbWljX3JlYWQgKCZj
aGFuLT5uX2J1ZnMpOw0KKwlpbmZvLmZyYWdtZW50cyA9IGF0b21pY19yZWFk
ICgmY2hhbi0+bl9mcmFncyk7DQogDQotCWlmICgoY2hhbi0+c2xvcF9sZW4g
PiAwKSAmJiAoaW5mby5mcmFnbWVudHMgPiAwKSkNCisJaWYgKChjaGFuLT5z
bG9wX2xlbiAlIGNoYW4tPmZyYWdfc2l6ZSA+IDApICYmIChpbmZvLmZyYWdt
ZW50cyA+IDApKQ0KIAkJaW5mby5mcmFnbWVudHMtLTsNCiANCiAJLyogbnVt
YmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHJlYWQgb3Igd3JpdHRlbiBpbW1l
ZGlhdGVseQ0KIAkgKiB3aXRob3V0IGJsb2NraW5nLg0KIAkgKi8NCi0JaW5m
by5ieXRlcyA9IChpbmZvLmZyYWdtZW50cyAqIFZJQV9ETUFfQlVGX1NJWkUp
Ow0KLQlpZiAoY2hhbi0+c2xvcF9sZW4gPiAwKQ0KLQkJaW5mby5ieXRlcyAr
PSBWSUFfRE1BX0JVRl9TSVpFIC0gY2hhbi0+c2xvcF9sZW47DQorCWluZm8u
Ynl0ZXMgPSAoaW5mby5mcmFnbWVudHMgKiBjaGFuLT5mcmFnX3NpemUpOw0K
KwlpZiAoY2hhbi0+c2xvcF9sZW4gJSBjaGFuLT5mcmFnX3NpemUgPiAwKQ0K
KwkJaW5mby5ieXRlcyArPSBjaGFuLT5mcmFnX3NpemUgLSAoY2hhbi0+c2xv
cF9sZW4gJSBjaGFuLT5mcmFnX3NpemUpOw0KIA0KIAlEUFJJTlRLICgiRVhJ
VCwgcmV0dXJuaW5nIGZyYWdzdG90YWw9JWQsIGZyYWdzaXplPSVkLCBmcmFn
bWVudHM9JWQsIGJ5dGVzPSVkXG4iLA0KIAkJaW5mby5mcmFnc3RvdGFsLA0K
QEAgLTIzMDUsOCArMjQ0Niw4IEBADQogDQogCWlmIChjaGFuLT5pc19hY3Rp
dmUpIHsNCiAJCXVuc2lnbmVkIGxvbmcgZXh0cmE7DQotCQlpbmZvLnB0ciA9
IGF0b21pY19yZWFkICgmY2hhbi0+aHdfcHRyKSAqIFZJQV9ETUFfQlVGX1NJ
WkU7DQotCQlleHRyYSA9IFZJQV9ETUFfQlVGX1NJWkUgLSBpbmwgKGNoYW4t
PmlvYmFzZSArIFZJQV9CQVNFMF9QQ01fT1VUX0JMT0NLX0NPVU5UKTsNCisJ
CWluZm8ucHRyID0gYXRvbWljX3JlYWQgKCZjaGFuLT5od19wdHIpICogY2hh
bi0+ZnJhZ19zaXplOw0KKwkJZXh0cmEgPSBjaGFuLT5mcmFnX3NpemUgLSBp
bmwgKGNoYW4tPmlvYmFzZSArIFZJQV9QQ01fQkxPQ0tfQ09VTlQpOw0KIAkJ
aW5mby5wdHIgKz0gZXh0cmE7DQogCQlpbmZvLmJ5dGVzICs9IGV4dHJhOw0K
IAl9IGVsc2Ugew0KQEAgLTIzODYsMTMgKzI1MjcsMTMgQEANCiANCiAJLyog
T1NTIEFQSSB2ZXJzaW9uLiAgWFhYIHVudmVyaWZpZWQgKi8NCiAJY2FzZSBP
U1NfR0VUVkVSU0lPTjoNCi0JCURQUklOVEsoImlvY3RsIE9TU19HRVRWRVJT
SU9OLCBFWElULCByZXR1cm5pbmcgU09VTkRfVkVSU0lPTlxuIik7DQorCQlE
UFJJTlRLICgiaW9jdGwgT1NTX0dFVFZFUlNJT04sIEVYSVQsIHJldHVybmlu
ZyBTT1VORF9WRVJTSU9OXG4iKTsNCiAJCXJjID0gcHV0X3VzZXIgKFNPVU5E
X1ZFUlNJT04sIChpbnQgKilhcmcpOw0KIAkJYnJlYWs7DQogDQogCS8qIGxp
c3Qgb2Ygc3VwcG9ydGVkIFBDTSBkYXRhIGZvcm1hdHMgKi8NCiAJY2FzZSBT
TkRDVExfRFNQX0dFVEZNVFM6DQotCQlEUFJJTlRLKCJEU1BfR0VURk1UUywg
RVhJVCwgcmV0dXJuaW5nIEFGTVQgVTh8UzE2X0xFXG4iKTsNCisJCURQUklO
VEsgKCJEU1BfR0VURk1UUywgRVhJVCwgcmV0dXJuaW5nIEFGTVQgVTh8UzE2
X0xFXG4iKTsNCiAgICAgICAgICAgICAgICAgcmMgPSBwdXRfdXNlciAoQUZN
VF9VOCB8IEFGTVRfUzE2X0xFLCAoaW50ICopYXJnKTsNCiAJCWJyZWFrOw0K
IA0KQEAgLTI0MDIsMjAgKzI1NDMsMTkgQEANCiAJCQlyYyA9IC1FRkFVTFQ7
DQogCQkJYnJlYWs7DQogCQl9DQotCQlEUFJJTlRLKCJEU1BfU0VURk1ULCB2
YWw9PSVkXG4iLCB2YWwpOw0KKwkJRFBSSU5USyAoIkRTUF9TRVRGTVQsIHZh
bD09JWRcbiIsIHZhbCk7DQogCQlpZiAodmFsICE9IEFGTVRfUVVFUlkpIHsN
CiAJCQlyYyA9IDA7DQogDQotCQkJaWYgKHJjID09IDAgJiYgcmQpDQorCQkJ
aWYgKHJkKQ0KIAkJCQlyYyA9IHZpYV9jaGFuX3NldF9mbXQgKGNhcmQsICZj
YXJkLT5jaF9pbiwgdmFsKTsNCi0JCQlpZiAocmMgPT0gMCAmJiB3cikNCisN
CisJCQlpZiAocmMgPj0gMCAmJiB3cikNCiAJCQkJcmMgPSB2aWFfY2hhbl9z
ZXRfZm10IChjYXJkLCAmY2FyZC0+Y2hfb3V0LCB2YWwpOw0KIA0KLQkJCWlm
IChyYyA8PSAwKSB7DQotCQkJCWlmIChyYyA9PSAwKQ0KLQkJCQkJcmMgPSAt
RUlOVkFMOw0KKwkJCWlmIChyYyA8IDApDQogCQkJCWJyZWFrOw0KLQkJCX0N
CisNCiAJCQl2YWwgPSByYzsNCiAJCX0gZWxzZSB7DQogCQkJaWYgKChyZCAm
JiAoY2FyZC0+Y2hfaW4ucGNtX2ZtdCAmIFZJQV9QQ01fRk1UXzE2QklUKSkg
fHwNCkBAIC0yNDI0LDcgKzI1NjQsNyBAQA0KIAkJCWVsc2UNCiAJCQkJdmFs
ID0gQUZNVF9VODsNCiAJCX0NCi0JCURQUklOVEsoIlNFVEZNVCBFWElULCBy
ZXR1cm5pbmcgJWRcbiIsIHZhbCk7DQorCQlEUFJJTlRLICgiU0VURk1UIEVY
SVQsIHJldHVybmluZyAlZFxuIiwgdmFsKTsNCiAgICAgICAgICAgICAgICAg
cmMgPSBwdXRfdXNlciAodmFsLCAoaW50ICopYXJnKTsNCiAJCWJyZWFrOw0K
IA0KQEAgLTI0MzQsMTggKzI1NzQsMTkgQEANCiAJCQlyYyA9IC1FRkFVTFQ7
DQogCQkJYnJlYWs7DQogCQl9DQotCQlEUFJJTlRLKCJEU1BfQ0hBTk5FTFMs
IHZhbD09JWRcbiIsIHZhbCk7DQorCQlEUFJJTlRLICgiRFNQX0NIQU5ORUxT
LCB2YWw9PSVkXG4iLCB2YWwpOw0KIAkJaWYgKHZhbCAhPSAwKSB7DQogCQkJ
cmMgPSAwOw0KLQkJCWlmIChyYyA9PSAwICYmIHJkKQ0KKw0KKwkJCWlmIChy
ZCkNCiAJCQkJcmMgPSB2aWFfY2hhbl9zZXRfc3RlcmVvIChjYXJkLCAmY2Fy
ZC0+Y2hfaW4sIHZhbCk7DQotCQkJaWYgKHJjID09IDAgJiYgd3IpDQorDQor
CQkJaWYgKHJjID49IDAgJiYgd3IpDQogCQkJCXJjID0gdmlhX2NoYW5fc2V0
X3N0ZXJlbyAoY2FyZCwgJmNhcmQtPmNoX291dCwgdmFsKTsNCi0JCQlpZiAo
cmMgPD0gMCkgew0KLQkJCQlpZiAocmMgPT0gMCkNCi0JCQkJCXJjID0gLUVJ
TlZBTDsNCisNCisJCQlpZiAocmMgPCAwKQ0KIAkJCQlicmVhazsNCi0JCQl9
DQorDQogCQkJdmFsID0gcmM7DQogCQl9IGVsc2Ugew0KIAkJCWlmICgocmQg
JiYgKGNhcmQtPmNoX2luLnBjbV9mbXQgJiBWSUFfUENNX0ZNVF9TVEVSRU8p
KSB8fA0KQEAgLTI0NTQsNyArMjU5NSw3IEBADQogCQkJZWxzZQ0KIAkJCQl2
YWwgPSAxOw0KIAkJfQ0KLQkJRFBSSU5USygiQ0hBTk5FTFMgRVhJVCwgcmV0
dXJuaW5nICVkXG4iLCB2YWwpOw0KKwkJRFBSSU5USyAoIkNIQU5ORUxTIEVY
SVQsIHJldHVybmluZyAlZFxuIiwgdmFsKTsNCiAgICAgICAgICAgICAgICAg
cmMgPSBwdXRfdXNlciAodmFsLCAoaW50ICopYXJnKTsNCiAJCWJyZWFrOw0K
IA0KQEAgLTI0NjQsMjEgKzI2MDUsMjEgQEANCiAJCQlyYyA9IC1FRkFVTFQ7
DQogCQkJYnJlYWs7DQogCQl9DQotCQlEUFJJTlRLKCJEU1BfU1RFUkVPLCB2
YWw9PSVkXG4iLCB2YWwpOw0KKwkJRFBSSU5USyAoIkRTUF9TVEVSRU8sIHZh
bD09JWRcbiIsIHZhbCk7DQogCQlyYyA9IDA7DQogDQotCQlpZiAocmMgPT0g
MCAmJiByZCkNCisJCWlmIChyZCkNCiAJCQlyYyA9IHZpYV9jaGFuX3NldF9z
dGVyZW8gKGNhcmQsICZjYXJkLT5jaF9pbiwgdmFsID8gMiA6IDEpOw0KLQkJ
aWYgKHJjID09IDAgJiYgd3IpDQorCQlpZiAocmMgPj0gMCAmJiB3cikNCiAJ
CQlyYyA9IHZpYV9jaGFuX3NldF9zdGVyZW8gKGNhcmQsICZjYXJkLT5jaF9v
dXQsIHZhbCA/IDIgOiAxKTsNCiANCi0JCWlmIChyYyA8PSAwKSB7DQotCQkJ
aWYgKHJjID09IDApDQotCQkJCXJjID0gLUVJTlZBTDsNCisJCWlmIChyYyA8
IDApDQogCQkJYnJlYWs7DQotCQl9DQotCQlEUFJJTlRLKCJTVEVSRU8gRVhJ
VCwgcmV0dXJuaW5nICVkXG4iLCB2YWwpOw0KLSAgICAgICAgICAgICAgICBy
YyA9IDA7DQorDQorCQl2YWwgPSByYyAtIDE7DQorDQorCQlEUFJJTlRLICgi
U1RFUkVPIEVYSVQsIHJldHVybmluZyAlZFxuIiwgdmFsKTsNCisJCXJjID0g
cHV0X3VzZXIodmFsLCAoaW50ICopIGFyZyk7DQogCQlicmVhazsNCiANCiAJ
LyogcXVlcnkgb3Igc2V0IHNhbXBsaW5nIHJhdGUgKi8NCkBAIC0yNDg3LDcg
KzI2MjgsNyBAQA0KIAkJCXJjID0gLUVGQVVMVDsNCiAJCQlicmVhazsNCiAJ
CX0NCi0JCURQUklOVEsoIkRTUF9TUEVFRCwgdmFsPT0lZFxuIiwgdmFsKTsN
CisJCURQUklOVEsgKCJEU1BfU1BFRUQsIHZhbD09JWRcbiIsIHZhbCk7DQog
CQlpZiAodmFsIDwgMCkgew0KIAkJCXJjID0gLUVJTlZBTDsNCiAJCQlicmVh
azsNCkBAIC0yNDk1LDE2ICsyNjM2LDE0IEBADQogCQlpZiAodmFsID4gMCkg
ew0KIAkJCXJjID0gMDsNCiANCi0JCQlpZiAocmMgPT0gMCAmJiByZCkNCisJ
CQlpZiAocmQpDQogCQkJCXJjID0gdmlhX2NoYW5fc2V0X3NwZWVkIChjYXJk
LCAmY2FyZC0+Y2hfaW4sIHZhbCk7DQotCQkJaWYgKHJjID09IDAgJiYgd3Ip
DQorCQkJaWYgKHJjID49IDAgJiYgd3IpDQogCQkJCXJjID0gdmlhX2NoYW5f
c2V0X3NwZWVkIChjYXJkLCAmY2FyZC0+Y2hfb3V0LCB2YWwpOw0KIA0KLQkJ
CWlmIChyYyA8PSAwKSB7DQotCQkJCWlmIChyYyA9PSAwKQ0KLQkJCQkJcmMg
PSAtRUlOVkFMOw0KKwkJCWlmIChyYyA8IDApDQogCQkJCWJyZWFrOw0KLQkJ
CX0NCisNCiAJCQl2YWwgPSByYzsNCiAJCX0gZWxzZSB7DQogCQkJaWYgKHJk
KQ0KQEAgLTI1MTQsNyArMjY1Myw3IEBADQogCQkJZWxzZQ0KIAkJCQl2YWwg
PSAwOw0KIAkJfQ0KLQkJRFBSSU5USygiU1BFRUQgRVhJVCwgcmV0dXJuaW5n
ICVkXG4iLCB2YWwpOw0KKwkJRFBSSU5USyAoIlNQRUVEIEVYSVQsIHJldHVy
bmluZyAlZFxuIiwgdmFsKTsNCiAgICAgICAgICAgICAgICAgcmMgPSBwdXRf
dXNlciAodmFsLCAoaW50ICopYXJnKTsNCiAJCWJyZWFrOw0KIA0KQEAgLTI1
MjIsNyArMjY2MSw3IEBADQogCWNhc2UgU05EQ1RMX0RTUF9TWU5DOg0KIAkJ
RFBSSU5USyAoIkRTUF9TWU5DXG4iKTsNCiAJCWlmICh3cikgew0KLQkJCURQ
UklOVEsoIlNZTkMgRVhJVCAoYWZ0ZXIgY2FsbGluZyB2aWFfZHNwX2RyYWlu
X3BsYXliYWNrKVxuIik7DQorCQkJRFBSSU5USyAoIlNZTkMgRVhJVCAoYWZ0
ZXIgY2FsbGluZyB2aWFfZHNwX2RyYWluX3BsYXliYWNrKVxuIik7DQogCQkJ
cmMgPSB2aWFfZHNwX2RyYWluX3BsYXliYWNrIChjYXJkLCAmY2FyZC0+Y2hf
b3V0LCBub25ibG9jayk7DQogCQl9DQogCQlicmVhazsNCkBAIC0yNTMxLDEy
ICsyNjcwLDE5IEBADQogICAgICAgICBjYXNlIFNORENUTF9EU1BfUkVTRVQ6
DQogCQlEUFJJTlRLICgiRFNQX1JFU0VUXG4iKTsNCiAJCWlmIChyZCkgew0K
LQkJCXZpYV9jaGFuX2NsZWFyICgmY2FyZC0+Y2hfaW4pOw0KKwkJCXZpYV9j
aGFuX2NsZWFyIChjYXJkLCAmY2FyZC0+Y2hfaW4pOw0KIAkJCXZpYV9jaGFu
X3BjbV9mbXQgKCZjYXJkLT5jaF9pbiwgMSk7DQorCQkJY2FyZC0+Y2hfaW4u
ZnJhZ19udW1iZXIgPSAwOw0KKwkJCWNhcmQtPmNoX2luLmZyYWdfc2l6ZSA9
IDA7DQorCQkJYXRvbWljX3NldCgmY2FyZC0+Y2hfaW4ubl9mcmFncywgMCk7
DQogCQl9DQorDQogCQlpZiAod3IpIHsNCi0JCQl2aWFfY2hhbl9jbGVhciAo
JmNhcmQtPmNoX291dCk7DQorCQkJdmlhX2NoYW5fY2xlYXIgKGNhcmQsICZj
YXJkLT5jaF9vdXQpOw0KIAkJCXZpYV9jaGFuX3BjbV9mbXQgKCZjYXJkLT5j
aF9vdXQsIDEpOw0KKwkJCWNhcmQtPmNoX291dC5mcmFnX251bWJlciA9IDA7
DQorCQkJY2FyZC0+Y2hfb3V0LmZyYWdfc2l6ZSA9IDA7DQorCQkJYXRvbWlj
X3NldCgmY2FyZC0+Y2hfb3V0Lm5fZnJhZ3MsIDApOw0KIAkJfQ0KIA0KIAkJ
cmMgPSAwOw0KQEAgLTI1NDQsNDAgKzI2OTAsNDcgQEANCiANCiAJLyogb2J0
YWluIGJpdG1hc2sgb2YgZGV2aWNlIGNhcGFiaWxpdGllcywgc3VjaCBhcyBt
bWFwLCBmdWxsIGR1cGxleCwgZXRjLiAqLw0KIAljYXNlIFNORENUTF9EU1Bf
R0VUQ0FQUzoNCi0JCURQUklOVEsoIkRTUF9HRVRDQVBTXG4iKTsNCisJCURQ
UklOVEsgKCJEU1BfR0VUQ0FQU1xuIik7DQogCQlyYyA9IHB1dF91c2VyKFZJ
QV9EU1BfQ0FQLCAoaW50ICopYXJnKTsNCiAJCWJyZWFrOw0KIA0KLQkvKiBv
YnRhaW4gYml0bWFzayBvZiBkZXZpY2UgY2FwYWJpbGl0aWVzLCBzdWNoIGFz
IG1tYXAsIGZ1bGwgZHVwbGV4LCBldGMuICovDQorCS8qIG9idGFpbiBidWZm
ZXIgZnJhZ21lbnQgc2l6ZSAqLw0KIAljYXNlIFNORENUTF9EU1BfR0VUQkxL
U0laRToNCi0JCURQUklOVEsoIkRTUF9HRVRCTEtTSVpFXG4iKTsNCi0JCXJj
ID0gcHV0X3VzZXIoVklBX0RNQV9CVUZfU0laRSwgKGludCAqKWFyZyk7DQor
CQlEUFJJTlRLICgiRFNQX0dFVEJMS1NJWkVcbiIpOw0KKw0KKwkJaWYgKHJk
KSB7DQorCQkJdmlhX2NoYW5fc2V0X2J1ZmZlcmluZyhjYXJkLCAmY2FyZC0+
Y2hfaW4sIC0xKTsNCisJCQlyYyA9IHB1dF91c2VyKGNhcmQtPmNoX2luLmZy
YWdfc2l6ZSwgKGludCAqKWFyZyk7DQorCQl9IGVsc2UgaWYgKHdyKSB7DQor
CQkJdmlhX2NoYW5fc2V0X2J1ZmZlcmluZyhjYXJkLCAmY2FyZC0+Y2hfb3V0
LCAtMSk7DQorCQkJcmMgPSBwdXRfdXNlcihjYXJkLT5jaF9vdXQuZnJhZ19z
aXplLCAoaW50ICopYXJnKTsNCisJCX0NCiAJCWJyZWFrOw0KIA0KIAkvKiBv
YnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgaW5wdXQgYnVmZmVyaW5nICovDQog
CWNhc2UgU05EQ1RMX0RTUF9HRVRJU1BBQ0U6DQotCQlEUFJJTlRLKCJEU1Bf
R0VUSVNQQUNFXG4iKTsNCisJCURQUklOVEsgKCJEU1BfR0VUSVNQQUNFXG4i
KTsNCiAJCWlmIChyZCkNCiAJCQlyYyA9IHZpYV9kc3BfaW9jdGxfc3BhY2Ug
KGNhcmQsICZjYXJkLT5jaF9pbiwgKHZvaWQqKSBhcmcpOw0KIAkJYnJlYWs7
DQogDQogCS8qIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBvdXRwdXQgYnVm
ZmVyaW5nICovDQogCWNhc2UgU05EQ1RMX0RTUF9HRVRPU1BBQ0U6DQotCQlE
UFJJTlRLKCJEU1BfR0VUT1NQQUNFXG4iKTsNCisJCURQUklOVEsgKCJEU1Bf
R0VUT1NQQUNFXG4iKTsNCiAJCWlmICh3cikNCiAJCQlyYyA9IHZpYV9kc3Bf
aW9jdGxfc3BhY2UgKGNhcmQsICZjYXJkLT5jaF9vdXQsICh2b2lkKikgYXJn
KTsNCiAJCWJyZWFrOw0KIA0KIAkvKiBvYnRhaW4gaW5mb3JtYXRpb24gYWJv
dXQgaW5wdXQgaGFyZHdhcmUgcG9pbnRlciAqLw0KIAljYXNlIFNORENUTF9E
U1BfR0VUSVBUUjoNCi0JCURQUklOVEsoIkRTUF9HRVRJUFRSXG4iKTsNCisJ
CURQUklOVEsgKCJEU1BfR0VUSVBUUlxuIik7DQogCQlpZiAocmQpDQogCQkJ
cmMgPSB2aWFfZHNwX2lvY3RsX3B0ciAoY2FyZCwgJmNhcmQtPmNoX2luLCAo
dm9pZCopIGFyZyk7DQogCQlicmVhazsNCiANCiAJLyogb2J0YWluIGluZm9y
bWF0aW9uIGFib3V0IG91dHB1dCBoYXJkd2FyZSBwb2ludGVyICovDQogCWNh
c2UgU05EQ1RMX0RTUF9HRVRPUFRSOg0KLQkJRFBSSU5USygiRFNQX0dFVE9Q
VFJcbiIpOw0KKwkJRFBSSU5USyAoIkRTUF9HRVRPUFRSXG4iKTsNCiAJCWlm
ICh3cikNCiAJCQlyYyA9IHZpYV9kc3BfaW9jdGxfcHRyIChjYXJkLCAmY2Fy
ZC0+Y2hfb3V0LCAodm9pZCopIGFyZyk7DQogCQlicmVhazsNCkBAIC0yNTg1
LDI1ICsyNzM4LDI5IEBADQogCS8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMg
cmVtYWluaW5nIHRvIGJlIHBsYXllZCBieSBETUEgZW5naW5lICovDQogCWNh
c2UgU05EQ1RMX0RTUF9HRVRPREVMQVk6DQogCQl7DQotCQlEUFJJTlRLKCJE
U1BfR0VUT0RFTEFZXG4iKTsNCisJCURQUklOVEsgKCJEU1BfR0VUT0RFTEFZ
XG4iKTsNCiANCiAJCWNoYW4gPSAmY2FyZC0+Y2hfb3V0Ow0KIA0KIAkJaWYg
KCF3cikNCiAJCQlicmVhazsNCiANCi0JCXZhbCA9IFZJQV9ETUFfQlVGRkVS
UyAtIGF0b21pY19yZWFkICgmY2hhbi0+bl9idWZzKTsNCisJCWlmIChjaGFu
LT5pc19hY3RpdmUpIHsNCiANCi0JCWlmICh2YWwgPiAwKSB7DQotCQkJdmFs
ICo9IFZJQV9ETUFfQlVGX1NJWkU7DQotCQkJdmFsIC09IFZJQV9ETUFfQlVG
X1NJWkUgLQ0KLQkJCSAgICAgICBpbmwgKGNoYW4tPmlvYmFzZSArIFZJQV9C
QVNFMF9QQ01fT1VUX0JMT0NLX0NPVU5UKTsNCi0JCX0NCi0JCXZhbCArPSBj
aGFuLT5zbG9wX2xlbjsNCisJCQl2YWwgPSBjaGFuLT5mcmFnX251bWJlciAt
IGF0b21pY19yZWFkICgmY2hhbi0+bl9mcmFncyk7DQogDQotCQlhc3NlcnQg
KHZhbCA8PSAoVklBX0RNQV9CVUZfU0laRSAqIFZJQV9ETUFfQlVGRkVSUykp
Ow0KKwkJCWlmICh2YWwgPiAwKSB7DQorCQkJCXZhbCAqPSBjaGFuLT5mcmFn
X3NpemU7DQorCQkJCXZhbCAtPSBjaGFuLT5mcmFnX3NpemUgLQ0KKwkJCQkg
ICAgICAgaW5sIChjaGFuLT5pb2Jhc2UgKyBWSUFfUENNX0JMT0NLX0NPVU5U
KTsNCisJCQl9DQorCQkJdmFsICs9IGNoYW4tPnNsb3BfbGVuICUgY2hhbi0+
ZnJhZ19zaXplOw0KKwkJfSBlbHNlDQorCQkJdmFsID0gMDsNCiANCi0JCURQ
UklOVEsoIkdFVE9ERUxBWSBFWElULCB2YWwgPSAlZCBieXRlc1xuIiwgdmFs
KTsNCisJCWFzc2VydCAodmFsIDw9IChjaGFuLT5mcmFnX3NpemUgKiBjaGFu
LT5mcmFnX251bWJlcikpOw0KKw0KKwkJRFBSSU5USyAoIkdFVE9ERUxBWSBF
WElULCB2YWwgPSAlZCBieXRlc1xuIiwgdmFsKTsNCiAgICAgICAgICAgICAg
ICAgcmMgPSBwdXRfdXNlciAodmFsLCAoaW50ICopYXJnKTsNCiAJCWJyZWFr
Ow0KIAkJfQ0KQEAgLTI2MTcsNyArMjc3NCw3IEBADQogCQkJcmMgPSAtRUZB
VUxUOw0KIAkJCWJyZWFrOw0KIAkJfQ0KLQkJRFBSSU5USygiRFNQX1NFVFRS
SUdHRVIsIHJkPSVkLCB3cj0lZCwgYWN0PSVkLyVkLCBlbj0lZC8lZFxuIiwN
CisJCURQUklOVEsgKCJEU1BfU0VUVFJJR0dFUiwgcmQ9JWQsIHdyPSVkLCBh
Y3Q9JWQvJWQsIGVuPSVkLyVkXG4iLA0KIAkJCXJkLCB3ciwgY2FyZC0+Y2hf
aW4uaXNfYWN0aXZlLCBjYXJkLT5jaF9vdXQuaXNfYWN0aXZlLA0KIAkJCWNh
cmQtPmNoX2luLmlzX2VuYWJsZWQsIGNhcmQtPmNoX291dC5pc19lbmFibGVk
KTsNCiANCkBAIC0yNjI1LDYgKzI3ODIsNyBAQA0KIA0KIAkJaWYgKHJkKQ0K
IAkJCXJjID0gdmlhX2RzcF9pb2N0bF90cmlnZ2VyICgmY2FyZC0+Y2hfaW4s
IHZhbCk7DQorDQogCQlpZiAoIXJjICYmIHdyKQ0KIAkJCXJjID0gdmlhX2Rz
cF9pb2N0bF90cmlnZ2VyICgmY2FyZC0+Y2hfb3V0LCB2YWwpOw0KIA0KQEAg
LTI2MzQsNyArMjc5Miw3IEBADQogCSAqIHdpdGggT19SRFdSLCB0aGlzIGlz
IG1haW5seSBhIG5vLW9wIHRoYXQgYWx3YXlzIHJldHVybnMgc3VjY2Vzcy4N
CiAJICovDQogCWNhc2UgU05EQ1RMX0RTUF9TRVREVVBMRVg6DQotCQlEUFJJ
TlRLKCJEU1BfU0VURFVQTEVYXG4iKTsNCisJCURQUklOVEsgKCJEU1BfU0VU
RFVQTEVYXG4iKTsNCiAJCWlmICghcmQgfHwgIXdyKQ0KIAkJCWJyZWFrOw0K
IAkJcmMgPSAwOw0KQEAgLTI2NDYsNyArMjgwNCwxMyBAQA0KIAkJCXJjID0g
LUVGQVVMVDsNCiAJCQlicmVhazsNCiAJCX0NCi0JCURQUklOVEsoIkRTUF9T
RVRGUkFHTUVOVCwgdmFsPT0lZFxuIiwgdmFsKTsNCisJCURQUklOVEsgKCJE
U1BfU0VURlJBR01FTlQsIHZhbD09JWRcbiIsIHZhbCk7DQorDQorCQlpZiAo
cmQpDQorCQkJcmMgPSB2aWFfY2hhbl9zZXRfYnVmZmVyaW5nKGNhcmQsICZj
YXJkLT5jaF9pbiwgdmFsKTsNCisNCisJCWlmICh3cikNCisJCQlyYyA9IHZp
YV9jaGFuX3NldF9idWZmZXJpbmcoY2FyZCwgJmNhcmQtPmNoX291dCwgdmFs
KTsJDQogDQogCQlEUFJJTlRLICgiU05EQ1RMX0RTUF9TRVRGUkFHTUVOVCAo
ZnJhZ3NoaWZ0PT0weCUwNFggKCVkKSwgbWF4ZnJhZ3M9PTB4JTA0WCAoJWQp
KVxuIiwNCiAJCQkgdmFsICYgMHhGRkZGLA0KQEAgLTI2NTQsMTMgKzI4MTgs
MTIgQEANCiAJCQkgKHZhbCA+PiAxNikgJiAweEZGRkYsDQogCQkJICh2YWwg
Pj4gMTYpICYgMHhGRkZGKTsNCiANCi0JCS8qIGp1c3QgdG8gc2h1dCB1cCBz
b21lIHByb2dyYW1zICovDQogCQlyYyA9IDA7DQogCQlicmVhazsNCiANCiAJ
LyogaW5mb3JtIGRldmljZSBvZiBhbiB1cGNvbWluZyBwYXVzZSBpbiBpbnB1
dCAob3Igb3V0cHV0KS4gKi8NCiAJY2FzZSBTTkRDVExfRFNQX1BPU1Q6DQot
CQlEUFJJTlRLKCJEU1BfUE9TVFxuIik7DQorCQlEUFJJTlRLICgiRFNQX1BP
U1RcbiIpOw0KIAkJaWYgKHdyKSB7DQogCQkJaWYgKGNhcmQtPmNoX291dC5z
bG9wX2xlbiA+IDApDQogCQkJCXZpYV9jaGFuX2ZsdXNoX2ZyYWcgKCZjYXJk
LT5jaF9vdXQpOw0KQEAgLTI2NzgsMTUgKzI4NDEsMTQgQEANCiAJfQ0KIA0K
IAl1cCAoJmNhcmQtPnN5c2NhbGxfc2VtKTsNCi0JRFBSSU5USygiRVhJVCwg
cmV0dXJuaW5nICVkXG4iLCByYyk7DQorCURQUklOVEsgKCJFWElULCByZXR1
cm5pbmcgJWRcbiIsIHJjKTsNCiAJcmV0dXJuIHJjOw0KIH0NCiANCiANCiBz
dGF0aWMgaW50IHZpYV9kc3Bfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwg
c3RydWN0IGZpbGUgKmZpbGUpDQogew0KLQlpbnQgcmMsIG1pbm9yID0gTUlO
T1IoaW5vZGUtPmlfcmRldik7DQotCWludCBnb3RfcmVhZF9jaGFuID0gMDsN
CisJaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7DQogCXN0cnVj
dCB2aWFfaW5mbyAqY2FyZDsNCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7DQog
CXN0cnVjdCB2aWFfY2hhbm5lbCAqY2hhbjsNCkBAIC0yNzMzLDE3ICsyODk1
LDEzIEBADQogCX0NCiANCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2FyZDsN
Ci0JRFBSSU5USygiZmlsZS0+Zl9tb2RlID09IDB4JXhcbiIsIGZpbGUtPmZf
bW9kZSk7DQorCURQUklOVEsgKCJmaWxlLT5mX21vZGUgPT0gMHgleFxuIiwg
ZmlsZS0+Zl9tb2RlKTsNCiANCiAJLyogaGFuZGxlIGlucHV0IGZyb20gYW5h
bG9nIHNvdXJjZSAqLw0KIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVB
RCkgew0KIAkJY2hhbiA9ICZjYXJkLT5jaF9pbjsNCiANCi0JCXJjID0gdmlh
X2NoYW5faW5pdCAoY2FyZCwgY2hhbik7DQotCQlpZiAocmMpDQotCQkJZ290
byBlcnJfb3V0Ow0KLQ0KLQkJZ290X3JlYWRfY2hhbiA9IDE7DQorCQl2aWFf
Y2hhbl9pbml0IChjYXJkLCBjaGFuKTsNCiANCiAJCS8qIHdoeSBpcyB0aGlz
IGZvcmNlZCB0byAxNi1iaXQgc3RlcmVvIGluIGFsbCBkcml2ZXJzPyAqLw0K
IAkJY2hhbi0+cGNtX2ZtdCA9IFZJQV9QQ01fRk1UXzE2QklUIHwgVklBX1BD
TV9GTVRfU1RFUkVPOw0KQEAgLTI3NTYsMzAgKzI5MTQsMjggQEANCiAJaWYg
KGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7DQogCQljaGFuID0gJmNh
cmQtPmNoX291dDsNCiANCi0JCXJjID0gdmlhX2NoYW5faW5pdCAoY2FyZCwg
Y2hhbik7DQotCQlpZiAocmMpDQotCQkJZ290byBlcnJfb3V0X3JlYWRfY2hh
bjsNCisJCXZpYV9jaGFuX2luaXQgKGNhcmQsIGNoYW4pOw0KIA0KLQkJaWYg
KChtaW5vciAmIDB4ZikgPT0gU05EX0RFVl9EU1AxNikgew0KLQkJCWNoYW4t
PnBjbV9mbXQgfD0gVklBX1BDTV9GTVRfMTZCSVQ7DQotCQkJdmlhX3NldF9y
YXRlICgmY2FyZC0+YWM5NywgY2hhbiwgNDQxMDApOw0KKwkJaWYgKGZpbGUt
PmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsNCisJCQkvKiBpZiBpbiBkdXBsZXgg
bW9kZSBtYWtlIHRoZSByZWNvcmRpbmcgYW5kIHBsYXliYWNrIGNoYW5uZWxz
DQorCQkJICAgaGF2ZSB0aGUgc2FtZSBzZXR0aW5ncyAqLw0KKwkJCWNoYW4t
PnBjbV9mbXQgPSBWSUFfUENNX0ZNVF8xNkJJVCB8IFZJQV9QQ01fRk1UX1NU
RVJFTzsNCisJCQl2aWFfY2hhbl9wY21fZm10IChjaGFuLCAwKTsNCisgICAg
ICAgICAgICAgICAgICAgICAgICB2aWFfc2V0X3JhdGUgKCZjYXJkLT5hYzk3
LCBjaGFuLCA0NDEwMCk7DQogCQl9IGVsc2Ugew0KLQkJCXZpYV9zZXRfcmF0
ZSAoJmNhcmQtPmFjOTcsIGNoYW4sIDgwMDApOw0KKwkJCSBpZiAoKG1pbm9y
ICYgMHhmKSA9PSBTTkRfREVWX0RTUDE2KSB7DQorCQkJCWNoYW4tPnBjbV9m
bXQgPSBWSUFfUENNX0ZNVF8xNkJJVDsNCisJCQkJdmlhX2NoYW5fcGNtX2Zt
dCAoY2hhbiwgMCk7DQorCQkJCXZpYV9zZXRfcmF0ZSAoJmNhcmQtPmFjOTcs
IGNoYW4sIDQ0MTAwKTsNCisJCQl9IGVsc2Ugew0KKwkJCQl2aWFfY2hhbl9w
Y21fZm10IChjaGFuLCAwKTsNCisJCQkJdmlhX3NldF9yYXRlICgmY2FyZC0+
YWM5NywgY2hhbiwgODAwMCk7DQorCQkJfQ0KIAkJfQ0KLQ0KLQkJdmlhX2No
YW5fcGNtX2ZtdCAoY2hhbiwgMCk7DQogCX0NCiANCiAJRFBSSU5USyAoIkVY
SVQsIHJldHVybmluZyAwXG4iKTsNCiAJcmV0dXJuIDA7DQotDQotZXJyX291
dF9yZWFkX2NoYW46DQotCWlmIChnb3RfcmVhZF9jaGFuKQ0KLQkJdmlhX2No
YW5fZnJlZSAoY2FyZCwgJmNhcmQtPmNoX2luKTsNCi1lcnJfb3V0Og0KLQl1
cCAoJmNhcmQtPm9wZW5fc2VtKTsNCi0JRFBSSU5USygiRVJST1IgRVhJVCwg
cmV0dXJuaW5nICVkXG4iLCByYyk7DQotCXJldHVybiByYzsNCiB9DQogDQog
DQpAQCAtMjgwNywxNSArMjk2MywxOCBAQA0KIAkJCXByaW50ayAoS0VSTl9E
RUJVRyAidmlhX2F1ZGlvOiBpZ25vcmluZyBkcmFpbiBwbGF5YmFjayBlcnJv
ciAlZFxuIiwgcmMpOw0KIA0KIAkJdmlhX2NoYW5fZnJlZSAoY2FyZCwgJmNh
cmQtPmNoX291dCk7DQorCQl2aWFfY2hhbl9idWZmZXJfZnJlZShjYXJkLCAm
Y2FyZC0+Y2hfb3V0KTsNCiAJfQ0KIA0KLQlpZiAoZmlsZS0+Zl9tb2RlICYg
Rk1PREVfUkVBRCkNCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQp
IHsNCiAJCXZpYV9jaGFuX2ZyZWUgKGNhcmQsICZjYXJkLT5jaF9pbik7DQor
CQl2aWFfY2hhbl9idWZmZXJfZnJlZSAoY2FyZCwgJmNhcmQtPmNoX2luKTsN
CisJfQ0KIA0KIAl1cCAoJmNhcmQtPnN5c2NhbGxfc2VtKTsNCiAJdXAgKCZj
YXJkLT5vcGVuX3NlbSk7DQogDQotCURQUklOVEsoIkVYSVQsIHJldHVybmlu
ZyAwXG4iKTsNCisJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAwXG4iKTsN
CiAJcmV0dXJuIDA7DQogfQ0KIA0KQEAgLTI5MzQsOSArMzA5Myw5IEBADQog
CQl0bXAgJj0gMHhGMDsNCiAJCXRtcCB8PSBwZGV2LT5pcnE7DQogCQlwY2lf
d3JpdGVfY29uZmlnX2J5dGUgKHBkZXYsIDB4M0MsIHRtcCk7DQotCQlEUFJJ
TlRLKCJuZXcgMHgzYz09MHglMDJ4XG4iLCB0bXApOw0KKwkJRFBSSU5USyAo
Im5ldyAweDNjPT0weCUwMnhcbiIsIHRtcCk7DQogCX0gZWxzZSB7DQotCQlE
UFJJTlRLKCJJUlEgcmVnIDB4M2M9PTB4JTAyeCwgaXJxPT0lZFxuIiwNCisJ
CURQUklOVEsgKCJJUlEgcmVnIDB4M2M9PTB4JTAyeCwgaXJxPT0lZFxuIiwN
CiAJCQl0bXAsIHRtcCAmIDB4MEYpOw0KIAl9DQogDQpAQCAtMzAzNiwxMiAr
MzE5NSwxMiBAQA0KIA0KIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3Zp
YTgyY3h4eF9hdWRpbyh2b2lkKQ0KIHsNCi0JRFBSSU5USygiRU5URVJcbiIp
Ow0KKwlEUFJJTlRLICgiRU5URVJcbiIpOw0KIA0KIAlwY2lfdW5yZWdpc3Rl
cl9kcml2ZXIgKCZ2aWFfZHJpdmVyKTsNCiAJdmlhX2NsZWFudXBfcHJvYyAo
KTsNCiANCi0JRFBSSU5USygiRVhJVFxuIik7DQorCURQUklOVEsgKCJFWElU
XG4iKTsNCiB9DQogDQogDQpAQCAtMzEzMyw3ICszMjkyLDcgQEANCiANCiAJ
CSk7DQogDQotCURQUklOVEsoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgbGVu
KTsNCisJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgbGVuKTsN
CiAJcmV0dXJuIGxlbjsNCiANCiAjdW5kZWYgWU4NCg==
--8323328-1136156973-979849430=:5753--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/