Subject: Removing iTE IT87xxF code from the lm(4) driver (new it(4) driver)
To: None <tech-kern@netbsd.org>
From: Juan RP <juan@xtrarom.org>
List: tech-kern
Date: 05/07/2006 21:43:10
This is a multi-part message in MIME format.

--Multipart=_Sun__7_May_2006_21_43_10_+0200_s3d3A71pJhWv1R6z
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit


Hi,

I've adapted the it(4) driver from OpenBSD to work on NetBSD/envsys.
There is one improvement as well, for example this driver does not
need to specify the port address on the kernel config anymore.

The IT87xxF driver can be located at the 0x280, 0x290, 0xc00 and 0xd00
port addresses, so I've added code to check in these addresses.

It seems to work pretty fine on my system.

Please comment about it if you think there is some mistake or something wrong.

Thanks (patch attached).




--Multipart=_Sun__7_May_2006_21_43_10_+0200_s3d3A71pJhWv1R6z
Content-Type: application/octet-stream;
 name="it87xx.diff"
Content-Disposition: attachment;
 filename="it87xx.diff"
Content-Transfer-Encoding: base64

SW5kZXg6IGlzYS9maWxlcy5pc2EKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5
cy9kZXYvaXNhL2ZpbGVzLmlzYSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDMKZGlmZiAtdSAt
cCAtYiAtdSAtcjEuMTQzIGZpbGVzLmlzYQotLS0gaXNhL2ZpbGVzLmlzYQkxMSBBcHIgMjAwNiAx
NzoxNDo0NCAtMDAwMAkxLjE0MworKysgaXNhL2ZpbGVzLmlzYQk3IE1heSAyMDA2IDE5OjM1OjEx
IC0wMDAwCkBAIC00NjQsNiArNDY0LDExIEBAIGZpbGUJZGV2L2lzYS9hdHRpbWVyX2lzYS5jCQlh
dHRpbWVyX2lzYQogYXR0YWNoCWxtIGF0IGlzYSB3aXRoIGxtX2lzYQogZmlsZQlkZXYvaXNhL2xt
X2lzYS5jCQlsbV9pc2EKIAorIyBJVDg3eHhGIGhhcmR3YXJlIG1vbml0b3IKK2RldmljZQlpdDog
c3lzbW9uX2VudnN5cworYXR0YWNoCWl0IGF0IGlzYSB3aXRoIGl0X2lzYQorZmlsZQlkZXYvaXNh
L2l0LmMJCQlpdF9pc2EKKwogIyBJU0ROIGRldmljZXMKIGF0dGFjaAlpc2ljIGF0IGlzYSB3aXRo
IGlzaWNfaXNhCiBmaWxlCWRldi9pc2EvaXNpY19pc2EuYwkJaXNpY19pc2EKSW5kZXg6IGlzYS9p
dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGlzYS9pdC5jCmRpZmYgLU4gaXNhL2l0LmMKLS0tIC9k
ZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBpc2EvaXQuYwk3IE1heSAyMDA2
IDE5OjM1OjExIC0wMDAwCkBAIC0wLDAgKzEsNDA5IEBACisvKgkkTmV0QlNEJAkqLworLyoJJE9w
ZW5CU0Q6IGl0LmMsdiAxLjE5IDIwMDYvMDQvMTAgMDA6NTc6NTQgZGVyYWFkdCBFeHAgJAkqLwor
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEp1YW4gUm9tZXJvIFBhcmRpbmVzIDx4dHJhZW1l
QG5ldGJzZC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSnVsaWVuIEJvcmRldCA8emVqYW1l
c0BncmV5aGF0cy5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFO
WSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICog
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvKgorICogRHJpdmVyIGZvciB0aGUgSVQ4N3h4RiBoYXJkd2FyZSBtb25pdG9yLgor
ICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fS0VSTkVMX1JDU0lEKDAsICIkTmV0QlNE
JCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+Cisj
aW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8
c3lzL2RldmljZS5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvZXJy
bm8uaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9lbnZzeXMuaD4KKyNp
bmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKworI2luY2x1
ZGUgPGRldi9pc2EvaXNhcmVnLmg+CisjaW5jbHVkZSA8ZGV2L2lzYS9pc2F2YXIuaD4KKworI2lu
Y2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisKKyNpbmNs
dWRlIDxkZXYvc3lzbW9uL3N5c21vbnZhci5oPgorCisjaW5jbHVkZSA8ZGV2L2lzYS9pdHZhci5o
PgorCisjaWYgZGVmaW5lZChJVERFQlVHKQorI2RlZmluZSBEUFJJTlRGKHgpCQlkbyB7IHByaW50
ZiB4OyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgRFBSSU5URih4KQorI2VuZGlmCisKKy8q
IGF1dG9jb25mKDkpIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCAgaXRfaXNhX21hdGNoKHN0cnVj
dCBkZXZpY2UgKiwgc3RydWN0IGNmZGF0YSAqLCB2b2lkICopOworc3RhdGljIHZvaWQgaXRfaXNh
X2F0dGFjaChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKTsKKworc3Rh
dGljIGludCBpdF9jaGVjayhidXNfc3BhY2VfdGFnX3QsIGludCk7CitzdGF0aWMgdWludDhfdCBp
dF9yZWFkcmVnKHN0cnVjdCBpdF9zb2Z0YyAqLCBpbnQpOworc3RhdGljIHZvaWQgaXRfd3JpdGVy
ZWcoc3RydWN0IGl0X3NvZnRjICosIGludCwgaW50KTsKKworc3RhdGljIHZvaWQgaXRfc2V0dXBf
dm9sdChzdHJ1Y3QgaXRfc29mdGMgKiwgaW50LCBpbnQpOworc3RhdGljIHZvaWQgaXRfc2V0dXBf
dGVtcChzdHJ1Y3QgaXRfc29mdGMgKiwgaW50LCBpbnQpOworc3RhdGljIHZvaWQgaXRfc2V0dXBf
ZmFuKHN0cnVjdCBpdF9zb2Z0YyAqLCBpbnQsIGludCk7CisKK3N0YXRpYyB2b2lkIGl0X3JlZnJl
c2hfdGVtcChzdHJ1Y3QgaXRfc29mdGMgKiwgZW52c3lzX3RyZV9kYXRhX3QgKik7CitzdGF0aWMg
dm9pZCBpdF9yZWZyZXNoX3ZvbHRzKHN0cnVjdCBpdF9zb2Z0YyAqLCBlbnZzeXNfdHJlX2RhdGFf
dCAqLAorICAgIGVudnN5c19iYXNpY19pbmZvX3QgKik7CitzdGF0aWMgdm9pZCBpdF9yZWZyZXNo
X2ZhbnMoc3RydWN0IGl0X3NvZnRjICosIGVudnN5c190cmVfZGF0YV90ICopOworCitzdGF0aWMg
aW50IGl0X2d0cmVkYXRhKHN0cnVjdCBzeXNtb25fZW52c3lzICosIHN0cnVjdCBlbnZzeXNfdHJl
X2RhdGEgKik7CisKK0NGQVRUQUNIX0RFQ0woaXRfaXNhLCBzaXplb2Yoc3RydWN0IGl0X3NvZnRj
KSwKKyAgICBpdF9pc2FfbWF0Y2gsIGl0X2lzYV9hdHRhY2gsIE5VTEwsIE5VTEwpOworCitzdGF0
aWMgaW50CitpdF9jaGVjayhidXNfc3BhY2VfdGFnX3QgaW90LCBpbnQgYmFzZSkKK3sKKwlidXNf
c3BhY2VfaGFuZGxlX3QgaW9oOworCWludCBydiA9IDA7CisJdWludDhfdCBjcjsKKworCWlmIChi
dXNfc3BhY2VfbWFwKGlvdCwgYmFzZSwgOCwgMCwgJmlvaCkpCisJCXJldHVybiAwOworCisgICAg
ICAgIGJ1c19zcGFjZV93cml0ZV8xKGlvdCwgaW9oLCBJVENfQUREUiwgSVREX1NCVVNBRERSKTsK
KwljciA9IGJ1c19zcGFjZV9yZWFkXzEoaW90LCBpb2gsIElUQ19EQVRBKTsKKworCWlmIChjciA9
PSBJVERfU0JVU0FERFJfREVGQVVMVCkKKwkJcnYgPSAxOworCisJYnVzX3NwYWNlX3dyaXRlXzEo
aW90LCBpb2gsIElUQ19BRERSLCBJVERfU0JVU0FERFIyKTsKKwljciA9IGJ1c19zcGFjZV9yZWFk
XzEoaW90LCBpb2gsIElUQ19EQVRBKTsKKworCWlmIChjciA9PSBJVERfU0JVU0FERFIyX0RFRkFV
TFQpCisJCXJ2ID0gMTsKKworCWJ1c19zcGFjZV91bm1hcChpb3QsIGlvaCwgOCk7CisJcmV0dXJu
IHJ2OworfQorCitzdGF0aWMgaW50CitpdF9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqcGFyZW50
LCBzdHJ1Y3QgY2ZkYXRhICptYXRjaCwgdm9pZCAqYXV4KQoreworCXN0cnVjdCBpc2FfYXR0YWNo
X2FyZ3MgKmlhID0gYXV4OworCWludCBpb2Jhc2U7CisKKwlpZiAoSVNBX0RJUkVDVF9DT05GSUco
aWEpKQorCQlyZXR1cm4gMDsKKworCWlmIChpYS0+aWFfbmlvID4gMCAmJiBpYS0+aWFfaW9bMF0u
aXJfYWRkciAhPSBJU0FfVU5LTk9XTl9QT1JUKSB7CisJCWlmIChpdF9jaGVjayhpYS0+aWFfaW90
LCBpYS0+aWFfaW9bMF0uaXJfYWRkcikpIHsKKwkJCWlvYmFzZSA9IGlhLT5pYV9pb1swXS5pcl9h
ZGRyOworCQkJZ290byBmb3VuZDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElU
ODd4eEYgYW5kIGNvbXBhdGlibGVzIFN1cGVyIEkvTyBjYW4gYmUgbG9jYXRlZCBhdCAweDI4MCwg
MHgyOTAsCisJICogMHhjMDAgb3IgMHhkMDAuCisJICovCisJaWYgKGl0X2NoZWNrKGlhLT5pYV9p
b3QsIDB4MjgwKSkgeworCQlpb2Jhc2UgPSAweDI4MDsKKwkJZ290byBmb3VuZDsKKwl9IGVsc2Ug
aWYgKGl0X2NoZWNrKGlhLT5pYV9pb3QsIDB4MjkwKSkgeworCQlpb2Jhc2UgPSAweDI5MDsKKwkJ
Z290byBmb3VuZDsKKwl9IGVsc2UgaWYgKGl0X2NoZWNrKGlhLT5pYV9pb3QsIDB4YzAwKSkgewor
CQlpb2Jhc2UgPSAweGMwMDsKKwkJZ290byBmb3VuZDsKKwl9IGVsc2UgaWYgKGl0X2NoZWNrKGlh
LT5pYV9pb3QsIDB4ZDAwKSkgeworCQlpb2Jhc2UgPSAweGQwMDsKKwkJZ290byBmb3VuZDsKKwl9
CisKKwlyZXR1cm4gMDsKKworZm91bmQ6CisJaWEtPmlhX25pbyA9IDE7CisJaWEtPmlhX2lvWzBd
LmlyX2FkZHIgPSBpb2Jhc2U7CisJaWEtPmlhX2lvWzBdLmlyX3NpemUgPSA4OworCWlhLT5pYV9u
aW9tZW0gPSAwOworCWlhLT5pYV9uaXJxID0gMDsKKwlpYS0+aWFfbmRycSA9IDA7CisKKwlyZXR1
cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2l0X2lzYV9hdHRhY2goc3RydWN0IGRldmljZSAqcGFy
ZW50LCBzdHJ1Y3QgZGV2aWNlICpzZWxmLCB2b2lkICphdXgpCit7CisJc3RydWN0IGl0X3NvZnRj
ICpzYyA9ICh2b2lkICopc2VsZjsKKwlzdHJ1Y3QgaXNhX2F0dGFjaF9hcmdzICppYSA9IGF1eDsK
KwlidXNfc3BhY2VfdGFnX3QgaW90OworCWJ1c19zcGFjZV9oYW5kbGVfdCBpb2g7CisJaW50IGlv
YmFzZSwgaTsKKwl1aW50OF90IGlkciwgY3I7CisKKwlpb3QgPSBpYS0+aWFfaW90ID0gc2MtPnNj
X2lvdDsKKwlpb2ggPSBzYy0+c2NfaW9oOworCWlvYmFzZSA9IGlhLT5pYV9pb1swXS5pcl9hZGRy
OworCisJaWYgKGJ1c19zcGFjZV9tYXAoaW90LCBpb2Jhc2UsIDgsIDAsICZzYy0+c2NfaW9oKSkg
eworCQlwcmludGYoIjogY2FuJ3QgbWFwIGkvbyBzcGFjZVxuIik7CisJCXJldHVybjsKKwl9CisK
KwkvKiBJbmRpY2F0ZSB3ZSBoYXZlIG5ldmVyIHJlYWQgdGhlIHJlZ2lzdGVycyAqLworCXRpbWVy
Y2xlYXIoJnNjLT5sYXN0cmVhZCk7CisKKwlpZHIgPSBpdF9yZWFkcmVnKHNjLCBJVERfQ09SRUlE
KTsKKwlpZiAoaWRyID09IElUX0lEXzg3MTIpCisJCXByaW50ZigiOiBJVDg3MTJGIEhhcmR3YXJl
IG1vbml0b3JcbiIpOworCWVsc2UgeworCQlpZHIgPSBpdF9yZWFkcmVnKHNjLCBJVERfQ0hJUElE
KTsKKwkJaWYgKGlkciA9PSBJVF9JRF84NzA1KQorCQkJcHJpbnRmKCI6IElUODcwNUYgSGFyZHdh
cmUgbW9uaXRvclxuIik7CisJCWVsc2UKKwkJCXByaW50ZigiaXRlIHZlbmRvciBpZCB1bmtub3du
OiAweCV4XG4iLCBpZHIpOworCX0KKworCWl0X3NldHVwX2ZhbihzYywgMCwgMyk7CisJaXRfc2V0
dXBfdm9sdChzYywgMywgOSk7CisJaXRfc2V0dXBfdGVtcChzYywgMTIsIDMpOworCisJLyogQWN0
aXZhdGUgbW9uaXRvcmluZyAqLworCWNyID0gaXRfcmVhZHJlZyhzYywgSVREX0NPTkZJRyk7CisJ
Y3IgfD0gMHgwMSB8IDB4MDg7CisJaXRfd3JpdGVyZWcoc2MsIElURF9DT05GSUcsIGNyKTsKKwor
CS8qIEluaXRpYWxpemUgc2Vuc29ycyAqLworCWZvciAoaSA9IDA7IGkgPCBJVF9OVU1fU0VOU09S
UzsgKytpKSB7CisJCXNjLT5zY19kYXRhW2ldLnNlbnNvciA9IHNjLT5zY19pbmZvW2ldLnNlbnNv
ciA9IGk7CisJCXNjLT5zY19kYXRhW2ldLnZhbGlkZmxhZ3MgPSAoRU5WU1lTX0ZWQUxJRHxFTlZT
WVNfRkNVUlZBTElEKTsKKwkJc2MtPnNjX2luZm9baV0udmFsaWRmbGFncyA9IEVOVlNZU19GVkFM
SUQ7CisJCXNjLT5zY19kYXRhW2ldLndhcm5mbGFncyA9IEVOVlNZU19XQVJOX09LOworCX0KKwor
CS8qCisJICogSG9vayBpbnRvIHRoZSBzeXN0ZW0gbW9uaXRvci4KKwkgKi8KKwlzYy0+c2Nfc3lz
bW9uLnNtZV9yYW5nZXMgPSBpdF9yYW5nZXM7CisJc2MtPnNjX3N5c21vbi5zbWVfc2Vuc29yX2lu
Zm8gPSBzYy0+c2NfaW5mbzsKKwlzYy0+c2Nfc3lzbW9uLnNtZV9zZW5zb3JfZGF0YSA9IHNjLT5z
Y19kYXRhOworCXNjLT5zY19zeXNtb24uc21lX2Nvb2tpZSA9IHNjOworCXNjLT5zY19zeXNtb24u
c21lX2d0cmVkYXRhID0gaXRfZ3RyZWRhdGE7CisJc2MtPnNjX3N5c21vbi5zbWVfbnNlbnNvcnMg
PSBJVF9OVU1fU0VOU09SUzsKKwlzYy0+c2Nfc3lzbW9uLnNtZV9lbnZzeXNfdmVyc2lvbiA9IDEw
MDA7CisJc2MtPnNjX3N5c21vbi5zbWVfZmxhZ3MgPSAwOworCQorCWlmIChzeXNtb25fZW52c3lz
X3JlZ2lzdGVyKCZzYy0+c2Nfc3lzbW9uKSkKKwkJcHJpbnRmKCIlczogdW5hYmxlIHRvIHJlZ2lz
dGVyIHdpdGggc3lzbW9uXG4iLAorCQkgICAgc2MtPnNjX2Rldi5kdl94bmFtZSk7CisKK30KKwor
c3RhdGljIGludAoraXRfZ3RyZWRhdGEoc3RydWN0IHN5c21vbl9lbnZzeXMgKnNtZSwgc3RydWN0
IGVudnN5c190cmVfZGF0YSAqdHJlZCkKK3sKKwlzdHJ1Y3QgaXRfc29mdGMgKnNjID0gc21lLT5z
bWVfY29va2llOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGltZXZhbCBvbmVwb2ludGZpdmUgPSB7
IDEsIDUwMDAwMCB9OworCXN0cnVjdCB0aW1ldmFsIHR2OworCWludCBpLCBzOworCisJLyogcmVh
ZCBuZXcgdmFsdWVzIGF0IG1vc3Qgb25jZSBldmVyeSAxLjUgc2Vjb25kcyAqLworCXRpbWVyYWRk
KCZzYy0+bGFzdHJlYWQsICZvbmVwb2ludGZpdmUsICZ0dik7CisJcyA9IHNwbGNsb2NrKCk7CisJ
aSA9IHRpbWVyY21wKCZtb25vX3RpbWUsICZ0diwgPik7CisJaWYgKGkpIHsKKwkJc2MtPmxhc3Ry
ZWFkLnR2X3NlYyAgPSBtb25vX3RpbWUudHZfc2VjOworCQlzYy0+bGFzdHJlYWQudHZfdXNlYyA9
IG1vbm9fdGltZS50dl91c2VjOworCX0KKwlzcGx4KHMpOworCisJaWYgKGkpIHsKKwkJLyogUmVm
cmVzaCBvdXIgc3RvcmVkIGRhdGEgZm9yIGV2ZXJ5IHNlbnNvciAqLworCQlpdF9yZWZyZXNoX3Rl
bXAoc2MsICZzYy0+c2NfZGF0YVsxMl0pOworCQlpdF9yZWZyZXNoX3ZvbHRzKHNjLCAmc2MtPnNj
X2RhdGFbM10sICZzYy0+c2NfaW5mb1szXSk7CisJCWl0X3JlZnJlc2hfZmFucyhzYywgJnNjLT5z
Y19kYXRhWzBdKTsKKwl9CisKKwkqdHJlZCA9IHNjLT5zY19kYXRhW3RyZWQtPnNlbnNvcl07CisK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQ4X3QKK2l0X3JlYWRyZWcoc3RydWN0IGl0X3Nv
ZnRjICpzYywgaW50IHJlZykKK3sKKwlidXNfc3BhY2Vfd3JpdGVfMShzYy0+c2NfaW90LCBzYy0+
c2NfaW9oLCBJVENfQUREUiwgcmVnKTsKKwlyZXR1cm4gKGJ1c19zcGFjZV9yZWFkXzEoc2MtPnNj
X2lvdCwgc2MtPnNjX2lvaCwgSVRDX0RBVEEpKTsKK30KKworc3RhdGljIHZvaWQKK2l0X3dyaXRl
cmVnKHN0cnVjdCBpdF9zb2Z0YyAqc2MsIGludCByZWcsIGludCB2YWwpCit7CisJYnVzX3NwYWNl
X3dyaXRlXzEoc2MtPnNjX2lvdCwgc2MtPnNjX2lvaCwgSVRDX0FERFIsIHJlZyk7CisJYnVzX3Nw
YWNlX3dyaXRlXzEoc2MtPnNjX2lvdCwgc2MtPnNjX2lvaCwgSVRDX0RBVEEsIHZhbCk7Cit9CisK
K3N0YXRpYyB2b2lkCitpdF9zZXR1cF92b2x0KHN0cnVjdCBpdF9zb2Z0YyAqc2MsIGludCBzdGFy
dCwgaW50IG4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CisJCXNj
LT5zY19kYXRhW3N0YXJ0ICsgaV0udW5pdHMgPQorCQkgICAgc2MtPnNjX2luZm9bc3RhcnQgKyBp
XS51bml0cyA9IEVOVlNZU19TVk9MVFNfREM7CisJfQorCisJc2MtPnNjX2luZm9bc3RhcnQgKyAw
XS5yZmFjdCA9IDEwMDAwOworCXNucHJpbnRmKHNjLT5zY19pbmZvW3N0YXJ0ICsgMF0uZGVzYywg
c2l6ZW9mKHNjLT5zY19pbmZvWzBdLmRlc2MpLAorCSAgICAiVkNPUkVfQSIpOworCXNjLT5zY19p
bmZvW3N0YXJ0ICsgMV0ucmZhY3QgPSAxMDAwMDsKKwlzbnByaW50ZihzYy0+c2NfaW5mb1tzdGFy
dCArIDFdLmRlc2MsIHNpemVvZihzYy0+c2NfaW5mb1sxXS5kZXNjKSwKKwkgICAgIlZDT1JFX0Ii
KTsKKwlzYy0+c2NfaW5mb1tzdGFydCArIDJdLnJmYWN0ID0gMTAwMDA7CisJc25wcmludGYoc2Mt
PnNjX2luZm9bc3RhcnQgKyAyXS5kZXNjLCBzaXplb2Yoc2MtPnNjX2luZm9bMl0uZGVzYyksCisJ
ICAgICIrMy4zViIpOworCXNjLT5zY19pbmZvW3N0YXJ0ICsgM10ucmZhY3QgPSAoaW50KSgoIDE2
LjggLyAxMCkgKiAxMDAwMCk7CisJc25wcmludGYoc2MtPnNjX2luZm9bc3RhcnQgKyAzXS5kZXNj
LCBzaXplb2Yoc2MtPnNjX2luZm9bM10uZGVzYyksCisJICAgICIrNVYiKTsKKwlzYy0+c2NfaW5m
b1tzdGFydCArIDRdLnJmYWN0ID0gKGludCkoKCA0MCAvIDEwKSAqIDEwMDAwKTsKKwlzbnByaW50
ZihzYy0+c2NfaW5mb1tzdGFydCArIDRdLmRlc2MsIHNpemVvZihzYy0+c2NfaW5mb1s0XS5kZXNj
KSwKKwkgICAgIisxMlYiKTsKKwlzYy0+c2NfaW5mb1tzdGFydCArIDVdLnJmYWN0ID0gKGludCko
KCAzMS4wIC8gMTApICogMTAwMDApOworCXNucHJpbnRmKHNjLT5zY19pbmZvW3N0YXJ0ICsgNV0u
ZGVzYywgc2l6ZW9mKHNjLT5zY19pbmZvWzVdLmRlc2MpLAorCSAgICAiVW51c2VkIik7CisJc2Mt
PnNjX2luZm9bc3RhcnQgKyA2XS5yZmFjdCA9IChpbnQpKCggMTAzLjAgLyAyMCkgKiAxMDAwMCk7
CisJc25wcmludGYoc2MtPnNjX2luZm9bc3RhcnQgKyA2XS5kZXNjLCBzaXplb2Yoc2MtPnNjX2lu
Zm9bNl0uZGVzYyksCisJICAgICItMTJWIik7CisJc2MtPnNjX2luZm9bc3RhcnQgKyA3XS5yZmFj
dCA9IChpbnQpKCggMTYuOCAvIDEwKSAqIDEwMDAwKTsKKwlzbnByaW50ZihzYy0+c2NfaW5mb1tz
dGFydCArIDddLmRlc2MsIHNpemVvZihzYy0+c2NfaW5mb1s3XS5kZXNjKSwKKwkgICAgIis1VlNC
Iik7CisJc2MtPnNjX2luZm9bc3RhcnQgKyA4XS5yZmFjdCA9IDEwMDAwOworCXNucHJpbnRmKHNj
LT5zY19pbmZvW3N0YXJ0ICsgOF0uZGVzYywgc2l6ZW9mKHNjLT5zY19pbmZvWzhdLmRlc2MpLAor
CSAgICAiVkJBVCIpOworfQorCitzdGF0aWMgdm9pZAoraXRfc2V0dXBfdGVtcChzdHJ1Y3QgaXRf
c29mdGMgKnNjLCBpbnQgc3RhcnQsIGludCBuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsg
aSA8IG47ICsraSkgeworCQlzYy0+c2NfZGF0YVtzdGFydCArIGldLnVuaXRzID0KKwkJICAgIHNj
LT5zY19pbmZvW3N0YXJ0ICsgaV0udW5pdHMgPSBFTlZTWVNfU1RFTVA7CisJCXNucHJpbnRmKHNj
LT5zY19pbmZvW3N0YXJ0ICsgaV0uZGVzYywKKwkJICAgIHNpemVvZihzYy0+c2NfaW5mb1tzdGFy
dCArIGldLmRlc2MpLAorCQkgICAgIlRlbXAgJWQiLCBpICsgMSk7CisJfQorfQorCitzdGF0aWMg
dm9pZAoraXRfc2V0dXBfZmFuKHN0cnVjdCBpdF9zb2Z0YyAqc2MsIGludCBzdGFydCwgaW50IG4p
Cit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CisJCXNjLT5zY19kYXRh
W3N0YXJ0ICsgaV0udW5pdHMgPQorCQkgICAgc2MtPnNjX2luZm9bc3RhcnQgKyBpXS51bml0cyA9
IEVOVlNZU19TRkFOUlBNOworCQlzbnByaW50ZihzYy0+c2NfaW5mb1tzdGFydCArIGldLmRlc2Ms
CisJCSAgICBzaXplb2Yoc2MtPnNjX2luZm9bc3RhcnQgKyBpXS5kZXNjKSwKKwkJICAgICJGYW4g
JWQiLCBpICsgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXRfcmVmcmVzaF90ZW1wKHN0cnVj
dCBpdF9zb2Z0YyAqc2MsIGVudnN5c190cmVfZGF0YV90ICp0cmVkKQoreworCWludCBpLCBzZGF0
YTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc2RhdGEgPSBpdF9yZWFkcmVnKHNj
LCBJVERfU0VOU09SVEVNUEJBU0UgKyBpKTsKKworCQkvKiBDb252ZXJ0IHRlbXBlcmF0dXJlIHRv
IEZhaHJlbmhlaXQgZGVncmVzICovCisJCXRyZWRbaV0uY3VyLmRhdGFfdXMgPSBzZGF0YSAqIDEw
MDAwMDAgKyAyNzMxNTAwMDA7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXRfcmVmcmVzaF92b2x0
cyhzdHJ1Y3QgaXRfc29mdGMgKnNjLCBlbnZzeXNfdHJlX2RhdGFfdCAqdHJlZCwKKyAgICBlbnZz
eXNfYmFzaWNfaW5mb190ICppbmZvKQoreworCWludCBpLCBzZGF0YTsKKworCWZvciAoaSA9IDA7
IGkgPCA5OyBpKyspIHsKKwkJc2RhdGEgPSBpdF9yZWFkcmVnKHNjLCBJVERfU0VOU09SVk9MVEJB
U0UgKyBpKTsKKwkJRFBSSU5URigoInNkYXRhW3ZvbHQlZF0gMHgleFxuIiwgaSwgc2RhdGEpKTsK
KworCQkvKiB2b2x0YWdlIHJldHVybmVkIGFzIChtViA+PiA0KSAqLworCQl0cmVkW2ldLmN1ci5k
YXRhX3VzID0gKHNkYXRhIDw8IDQpOworCisJCS8qIHJmYWN0IGlzIChmYWN0b3IgKiAxMF40KSAq
LworCQl0cmVkW2ldLmN1ci5kYXRhX3VzICo9IGluZm9baV0ucmZhY3Q7CisKKwkJLyogdGhlc2Ug
dHdvIHZhbHVlcyBhcmUgbmVnYXRpdmUgYW5kIGZvcm11bGEgaXMgZGlmZmVyZW50ICovCisJCWlm
IChpID09IDUpCisJCQl0cmVkW2ldLmN1ci5kYXRhX3VzIC09CisJCQkgICAgKGludCkgKDIxLjAg
LyAxMCAqIElUX1ZSRUYgKiAxMDAwMCk7CisJCWlmIChpID09IDYpCisJCQl0cmVkW2ldLmN1ci5k
YXRhX3VzIC09CisJCQkgICAgKGludCkgKDgzLjAgLyAyMCAqIElUX1ZSRUYgKiAxMDAwMCk7CisK
KwkJLyogZGl2aXNpb24gYnkgMTAgZ2V0cyB1cyBiYWNrIHRvIHVWREMgKi8KKwkJdHJlZFtpXS5j
dXIuZGF0YV91cyAvPSAxMDsKKworCX0KK30KKworc3RhdGljIHZvaWQKK2l0X3JlZnJlc2hfZmFu
cyhzdHJ1Y3QgaXRfc29mdGMgKnNjLCBlbnZzeXNfdHJlX2RhdGFfdCAqdHJlZCkKK3sKKwlpbnQg
aSwgc2RhdGEsIGRpdmlzb3IsIG9kaXZpc29yLCBuZGl2aXNvcjsKKworCW9kaXZpc29yID0gbmRp
dmlzb3IgPSBkaXZpc29yID0gaXRfcmVhZHJlZyhzYywgSVREX0ZBTik7CisJZm9yIChpID0gMDsg
aSA8IDM7IGkrKywgZGl2aXNvciA+Pj0gMykgeworCQlpZiAoKHNkYXRhID0gaXRfcmVhZHJlZyhz
YywgSVREX1NFTlNPUkZBTkJBU0UgKyBpKSkgPT0gMHhmZikgeworCQkJaWYgKGkgPT0gMikKKwkJ
CQluZGl2aXNvciBePSAweDQwOworCQkJZWxzZSB7CisJCQkJbmRpdmlzb3IgJj0gfig3IDw8IChp
ICogMykpOworCQkJCW5kaXZpc29yIHw9ICgoZGl2aXNvciArIDEpICYgNykgPDwgKGkgKiAzKTsK
KwkJCX0KKwkJfSBlbHNlIGlmIChzZGF0YSA9PSAwKSB7CisJCQl0cmVkW2ldLmN1ci5kYXRhX3Vz
ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpID09IDIpCisJCQkJZGl2aXNvciA9IGRpdmlzb3Ig
JiAxID8gMyA6IDE7CisJCQl0cmVkW2ldLmN1ci5kYXRhX3VzID0KKwkJCSAgICAxMzUwMDAwIC8g
KHNkYXRhIDw8IChkaXZpc29yICYgNykpOworCQl9CisJfQorCWlmIChuZGl2aXNvciAhPSBvZGl2
aXNvcikKKwkJaXRfd3JpdGVyZWcoc2MsIElURF9GQU4sIG5kaXZpc29yKTsKK30KSW5kZXg6IGlz
YS9pdHZhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGlzYS9pdHZhci5oCmRpZmYgLU4gaXNhL2l0
dmFyLmgKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBpc2EvaXR2
YXIuaAk3IE1heSAyMDA2IDE5OjM1OjExIC0wMDAwCkBAIC0wLDAgKzEsMTEyIEBACisvKgkkTmV0
QlNEJAkqLworLyoJJE9wZW5CU0Q6IGl0dmFyLmgsdiAxLjIgMjAwMy8xMS8wNSAyMDo1NzoxMCBn
cmFuZ2UgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBKdWFuIFJvbWVybyBQ
YXJkaW5lcyA8eHRyYWVtZUBuZXRic2Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDAzIEp1bGll
biBCb3JkZXQgPHplamFtZXNAZ3JleWhhdHMub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfREVWX0lTQV9JVFZBUl9ICisjZGVmaW5l
IF9ERVZfSVNBX0lUVkFSX0gKKworI2RlZmluZSBJVF9OVU1fU0VOU09SUwkxNQorCisvKiBJZGVu
dGlmaWNhdGlvbiBjaGlwIHJlZ2lzdGVycyAqLworI2RlZmluZSBJVERfQ0hJUElECTB4NTgKKyNk
ZWZpbmUgSVRfSURfODcwNQkweDkwCisjZGVmaW5lIElURF9DT1JFSUQJMHg1YgorI2RlZmluZSBJ
VF9JRF84NzEyCTB4MTIKKworLyogQ29udHJvbCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBJVENf
QUREUgkweDA1CisjZGVmaW5lIElUQ19EQVRBCTB4MDYKKworLyogRGF0YSByZWdpc3RlcnMgKi8K
KworI2RlZmluZSBJVERfQ09ORklHCTB4MDAKKyNkZWZpbmUgSVREX0lTUjEJMHgwMQorI2RlZmlu
ZSBJVERfSVNSMgkweDAyCisjZGVmaW5lIElURF9JU1IzCTB4MDMKKyNkZWZpbmUgSVREX1NNSTEJ
MHgwNAorI2RlZmluZSBJVERfU01JMgkweDA1CisjZGVmaW5lIElURF9TTUkzCTB4MDYKKyNkZWZp
bmUgSVREX0lNUjEJMHgwNworI2RlZmluZSBJVERfSU1SMgkweDA4CisjZGVmaW5lIElURF9JTVIz
CTB4MDkKKyNkZWZpbmUgSVREX1ZJRAkJMHgwYQorI2RlZmluZSBJVERfRkFOCQkweDBiCisKKyNk
ZWZpbmUgSVREX0ZBTk1JTkJBU0UJMHgxMAorI2RlZmluZSBJVERfRkFORU5BQkxFCTB4MTMKKwor
I2RlZmluZSBJVERfU0VOU09SRkFOQkFTRQkweDBkCS8qIEZhbiBmcm9tIDB4MGQgdG8gMHgwZiAq
LworI2RlZmluZSBJVERfU0VOU09SVk9MVEJBU0UJMHgyMAkvKiBGYW4gZnJvbSAweDIwIHRvIDB4
MjggKi8KKyNkZWZpbmUgSVREX1NFTlNPUlRFTVBCQVNFCTB4MjkJLyogRmFuIGZyb20gMHgyOSB0
byAweDJiICovCisKKyNkZWZpbmUgSVREX1ZPTFRNQVhCQVNFCTB4MzAKKyNkZWZpbmUgSVREX1ZP
TFRNSU5CQVNFCTB4MzEKKworI2RlZmluZSBJVERfVEVNUE1BWEJBU0UgMHg0MAorI2RlZmluZSBJ
VERfVEVNUE1JTkJBU0UgMHg0MQorCisjZGVmaW5lIElURF9TQlVTQUREUgkweDQ4CisjZGVmaW5l
IElURF9TQlVTQUREUl9ERUZBVUxUCTB4MmQKKyNkZWZpbmUgSVREX1NCVVNBRERSMgkweDUyCisj
ZGVmaW5lIElURF9TQlVTQUREUjJfREVGQVVMVAkweDdkCisjZGVmaW5lIElURF9WT0xURU5BQkxF
CTB4NTAKKyNkZWZpbmUgSVREX1RFTVBFTkFCTEUJMHg1MQorCisjZGVmaW5lIElUX1ZSRUYJCSg0
MDk2KSAvKiBWcmVmID0gNC4wOTYgViAqLworCisvKgorICogc2MtPnNlbnNvcnMgc3ViLWludGVy
dmFscyBmb3IgZWFjaCB1bml0IHR5cGUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZW52c3lz
X3JhbmdlIGl0X3Jhbmdlc1tdID0geworCXsgNywgNywgICAgRU5WU1lTX1NURU1QICAgfSwKKwl7
IDgsIDEwLCAgIEVOVlNZU19TRkFOUlBNIH0sCisJeyAxLCAwLCAgICBFTlZTWVNfU1ZPTFRTX0FD
IH0sICAvKiBOb25lICovCisJeyAwLCA2LCAgICBFTlZTWVNfU1ZPTFRTX0RDIH0sCisJeyAxLCAw
LCAgICBFTlZTWVNfU09ITVMgfSwgICAgICAvKiBOb25lICovCisJeyAxLCAwLCAgICBFTlZTWVNf
U1dBVFRTIH0sICAgICAvKiBOb25lICovCisJeyAxLCAwLCAgICBFTlZTWVNfU0FNUFMgfSAgICAg
ICAvKiBOb25lICovCit9OworCitzdHJ1Y3QgaXRfc29mdGMgeworCXN0cnVjdCBkZXZpY2Ugc2Nf
ZGV2OworCisJYnVzX3NwYWNlX3RhZ190IHNjX2lvdDsKKwlidXNfc3BhY2VfaGFuZGxlX3Qgc2Nf
aW9oOworCisJc3RydWN0IHRpbWV2YWwgbGFzdHJlYWQ7CS8qIG9ubHkgYWxsb3cgcmVhZHMgZXZl
cnkgMS41IHNlY3MgKi8KKworCXN0cnVjdCBzeXNtb25fZW52c3lzIHNjX3N5c21vbjsKKwllbnZz
eXNfdHJlX2RhdGFfdCBzY19kYXRhW0lUX05VTV9TRU5TT1JTXTsKKwllbnZzeXNfYmFzaWNfaW5m
b190IHNjX2luZm9bSVRfTlVNX1NFTlNPUlNdOworCisJdWludDhfdCAoKml0X3JlYWRyZWcpKHN0
cnVjdCBpdF9zb2Z0YyAqLCBpbnQpOworCXZvaWQgKCppdF93cml0ZXJlZykoc3RydWN0IGl0X3Nv
ZnRjICosIGludCwgaW50KTsKK307CisKKyNlbmRpZiAvKiBfREVWX0lTQV9JVFZBUl9IXyAqLwpJ
bmRleDogaWMvbnNsbTd4LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9k
ZXYvaWMvbnNsbTd4LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQKZGlmZiAtdSAtcCAtYiAt
dSAtcjEuMjQgbnNsbTd4LmMKLS0tIGljL25zbG03eC5jCTExIERlYyAyMDA1IDEyOjIxOjI4IC0w
MDAwCTEuMjQKKysrIGljL25zbG03eC5jCTcgTWF5IDIwMDYgMTk6MzU6MTIgLTAwMDAKQEAgLTg4
LDcgKzg4LDYgQEAgc3RhdGljIHZvaWQgd2Jfc2V0dXBfdm9sdChzdHJ1Y3QgbG1fc29mdAogCiBp
bnQgbG1fbWF0Y2goc3RydWN0IGxtX3NvZnRjICopOwogaW50IHdiX21hdGNoKHN0cnVjdCBsbV9z
b2Z0YyAqKTsKLWludCBpdGVjX21hdGNoKHN0cnVjdCBsbV9zb2Z0YyAqKTsKIGludCBkZWZfbWF0
Y2goc3RydWN0IGxtX3NvZnRjICopOwogdm9pZCBsbV9jb21tb25fbWF0Y2goc3RydWN0IGxtX3Nv
ZnRjICopOwogc3RhdGljIGludCBsbV9nZW5lcmljX2JhbmtzZWwoc3RydWN0IGxtX3NvZnRjICos
IGludCk7CkBAIC0xMDksMTIgKzEwOCw2IEBAIHZvaWQgd2I3ODFfcmVmcmVzaF9zZW5zb3JfZGF0
YShzdHJ1Y3QgbG0KIHZvaWQgd2I3ODJfcmVmcmVzaF9zZW5zb3JfZGF0YShzdHJ1Y3QgbG1fc29m
dGMgKik7CiB2b2lkIHdiNjk3X3JlZnJlc2hfc2Vuc29yX2RhdGEoc3RydWN0IGxtX3NvZnRjICop
OwogCi1zdGF0aWMgdm9pZCBpdGVjX3N2b2x0KHN0cnVjdCBsbV9zb2Z0YyAqLCBzdHJ1Y3QgZW52
c3lzX3RyZV9kYXRhICosCi0gICAgc3RydWN0IGVudnN5c19iYXNpY19pbmZvICopOwotc3RhdGlj
IHZvaWQgaXRlY19zdGVtcChzdHJ1Y3QgbG1fc29mdGMgKiwgc3RydWN0IGVudnN5c190cmVfZGF0
YSAqKTsKLXN0YXRpYyB2b2lkIGl0ZWNfZmFucnBtKHN0cnVjdCBsbV9zb2Z0YyAqLCBzdHJ1Y3Qg
ZW52c3lzX3RyZV9kYXRhICopOwotdm9pZCBpdGVjX3JlZnJlc2hfc2Vuc29yX2RhdGEoc3RydWN0
IGxtX3NvZnRjICopOwotCiBpbnQgbG1fZ3RyZWRhdGEoc3RydWN0IHN5c21vbl9lbnZzeXMgKiwg
c3RydWN0IGVudnN5c190cmVfZGF0YSAqKTsKIAogaW50IGdlbmVyaWNfc3RyZWluZm9fZmFuKHN0
cnVjdCBsbV9zb2Z0YyAqLCBzdHJ1Y3QgZW52c3lzX2Jhc2ljX2luZm8gKiwKQEAgLTEyMiwxNCAr
MTE1LDEyIEBAIGludCBnZW5lcmljX3N0cmVpbmZvX2ZhbihzdHJ1Y3QgbG1fc29mdGMKIGludCBs
bV9zdHJlaW5mbyhzdHJ1Y3Qgc3lzbW9uX2VudnN5cyAqLCBzdHJ1Y3QgZW52c3lzX2Jhc2ljX2lu
Zm8gKik7CiBpbnQgd2I3ODFfc3RyZWluZm8oc3RydWN0IHN5c21vbl9lbnZzeXMgKiwgc3RydWN0
IGVudnN5c19iYXNpY19pbmZvICopOwogaW50IHdiNzgyX3N0cmVpbmZvKHN0cnVjdCBzeXNtb25f
ZW52c3lzICosIHN0cnVjdCBlbnZzeXNfYmFzaWNfaW5mbyAqKTsKLWludCBpdGVjX3N0cmVpbmZv
KHN0cnVjdCBzeXNtb25fZW52c3lzICosIHN0cnVjdCBlbnZzeXNfYmFzaWNfaW5mbyAqKTsKIAog
c3RydWN0IGxtX2NoaXAgewogCWludCAoKmNoaXBfbWF0Y2gpKHN0cnVjdCBsbV9zb2Z0YyAqKTsK
IH07CiAKIHN0cnVjdCBsbV9jaGlwIGxtX2NoaXBzW10gPSB7Ci0JeyBpdGVjX21hdGNoIH0sCiAJ
eyB3Yl9tYXRjaCB9LAogCXsgbG1fbWF0Y2ggfSwKIAl7IGRlZl9tYXRjaCB9IC8qIE11c3QgYmUg
bGFzdCAqLwpAQCAtMTU4LDIyICsxNDksNiBAQCBsbV9wcm9iZShpb3QsIGlvaCkKIAl1X2ludDhf
dCBjcjsKIAlpbnQgcnY7CiAKLQkvKgotCSAqIENoZWNrIGZvciBpdDg3MDVmLCBiZWZvcmUgd2Ug
ZG8gdGhlIGNoaXAgcmVzZXQuCi0JICogSW4gY2FzZSBvZiBhbiBpdDg3MDVmIHRoaXMgbWlnaHQg
cmVzZXQgYWxsIHRoZSBmYW4gY29udHJvbAotCSAqIHBhcmFtZXRlcnMgdG8gZGVmYXVsdHMgd2hp
Y2ggd291bGQgdm9pZCBhbGwgc2V0dGluZ3MgZG9uZSBieQotCSAqIHRoZSBCT09UUk9NL0JJT1Mu
Ci0JICovCi0JYnVzX3NwYWNlX3dyaXRlXzEoaW90LCBpb2gsIExNQ19BRERSLCBJVEVDX1JFUzQ4
KTsKLQljciA9IGJ1c19zcGFjZV9yZWFkXzEoaW90LCBpb2gsIExNQ19EQVRBKTsKLQotCWlmIChj
ciA9PSBJVEVDX1JFUzQ4X0RFRkFVTFQpIHsKLQkJYnVzX3NwYWNlX3dyaXRlXzEoaW90LCBpb2gs
IExNQ19BRERSLCBJVEVDX1JFUzUyKTsKLQkJY3IgPSBidXNfc3BhY2VfcmVhZF8xKGlvdCwgaW9o
LCBMTUNfREFUQSk7Ci0JCWlmIChjciA9PSBJVEVDX1JFUzUyX0RFRkFVTFQpCi0JCQlyZXR1cm4g
MTsKLQl9Ci0KIAkvKiBDaGVjayBmb3Igc29tZSBwb3dlci1vbiBkZWZhdWx0cyAqLwogCWJ1c19z
cGFjZV93cml0ZV8xKGlvdCwgaW9oLCBMTUNfQUREUiwgTE1EX0NPTkZJRyk7CiAKQEAgLTQyNiw1
OCArNDAxLDYgQEAgd2Jfc2V0dXBfdm9sdChzYykKIAlzYy0+aW5mb1s4XS5yZmFjdCA9IDEwMDAw
OwogfQogCi1pbnQKLWl0ZWNfbWF0Y2goc2MpCi0Jc3RydWN0IGxtX3NvZnRjICpzYzsKLXsKLQlp
bnQgdmVuZG9yLCBjb3JlaWQ7Ci0KLQkvKiBkbyB0aGUgc2FtZSB0aGluZyBhcyBpbiAgbG1fcHJv
YmUoKSAqLwotCWlmICgoKnNjLT5sbV9yZWFkcmVnKShzYywgSVRFQ19SRVM0OCkgIT0gSVRFQ19S
RVM0OF9ERUZBVUxUKQotCQlyZXR1cm4gMDsKLQotCWlmICgoKnNjLT5sbV9yZWFkcmVnKShzYywg
SVRFQ19SRVM1MikgIT0gSVRFQ19SRVM1Ml9ERUZBVUxUKQotCQlyZXR1cm4gMDsKLQotCS8qIFdl
IGNoZWNrIGZvciB0aGUgY29yZSBJRCByZWdpc3RlciAoMHg1QiksIHdoaWNoIGlzIGF2YWlsYWJs
ZQotCSAqIG9ubHkgaW4gdGhlIDg3MTJGLCBpZiB0aGF0IGZhaWxzLCB3ZSBjaGVjayB0aGUgdmVu
ZG9yIElECi0JICogcmVnaXN0ZXIsIGF2YWlsYWJsZSBvbiA4NzA1RiBhbmQgODcxMkYgKi8KLQot
CWNvcmVpZCA9ICgqc2MtPmxtX3JlYWRyZWcpKHNjLCBJVEVDX0NPUkVJRCk7Ci0KLQlpZiAoY29y
ZWlkID09IElURUNfQ09SRUlEX0lURSkKLQkJcHJpbnRmKCI6IElURTg3MTJGXG4iKTsKLQllbHNl
IHsKLQkJdmVuZG9yID0gKCpzYy0+bG1fcmVhZHJlZykoc2MsIElURUNfVkVORElEKTsKLQkJaWYg
KHZlbmRvciA9PSBJVEVDX1ZFTkRJRF9JVEUpCi0JCQlwcmludGYoIjogSVRFODcwNUZcbiIpOwot
CQllbHNlCi0JCQlwcmludGYoIjogdW5rbm93biBJVEU4NyUwMnggY29tcGF0aWJsZVxuIiwgdmVu
ZG9yKTsKLQl9Ci0KLQkvKgotCSAqIFhYWCB0aGlzIGlzIGEgbGl0bGUgYml0IGxhbWUuLi4KLQkg
KiBBbGwgVklOIGlucHV0cyB3b3JrIGV4YWN0bHkgdGhlIHNhbWUgd2F5LCBpdCBkZXBlbmRzIG9m
IHRoZQotCSAqIGV4dGVybmFsIHdpcmluZyB3aGF0IHZvbHRhZ2VzIHRoZXkgbW9uaXRvciBhbmQg
d2hpY2ggY29ycmVjdGlvbgotCSAqIGZhY3RvcnMgYXJlIG5lZWRlZC4gV2UgYXNzdW1lIGEgcHJl
dHR5IHN0YW5kYXJkIHNldHVwIGhlcmUKLQkgKi8KLQl3Yl9zZXR1cF92b2x0KHNjKTsKLQlzdHJs
Y3B5KHNjLT5pbmZvWzBdLmRlc2MsICJDUFUiLCBzaXplb2Yoc2MtPmluZm9bMF0uZGVzYykpOwot
CXN0cmxjcHkoc2MtPmluZm9bMV0uZGVzYywgIkFHUCIsIHNpemVvZihzYy0+aW5mb1sxXS5kZXNj
KSk7Ci0Jc3RybGNweShzYy0+aW5mb1s2XS5kZXNjLCAiKzIuNVYiLCBzaXplb2Yoc2MtPmluZm9b
Nl0uZGVzYykpOwotCXNjLT5pbmZvWzVdLnJmYWN0ID0gNTExMDA7Ci0Jc2MtPmluZm9bN10ucmZh
Y3QgPSAxNjc3ODsKLQotCXNldHVwX3RlbXAoc2MsIDksIDMpOwotCXNldHVwX2ZhbihzYywgMTIs
IDMpOwotCXNjLT5udW1zZW5zb3JzID0gSVRFQ19OVU1fU0VOU09SUzsKLQlzYy0+cmVmcmVzaF9z
ZW5zb3JfZGF0YSA9IGl0ZWNfcmVmcmVzaF9zZW5zb3JfZGF0YTsKLQlzYy0+c2Nfc3lzbW9uLnNt
ZV9zdHJlaW5mbyA9IGl0ZWNfc3RyZWluZm87Ci0KLQlyZXR1cm4gMTsKLX0KLQotCiBzdGF0aWMg
dm9pZAogc2V0dXBfdGVtcChzYywgc3RhcnQsIG4pCiAJc3RydWN0IGxtX3NvZnRjICpzYzsKQEAg
LTczOCw2MiArNjYxLDYgQEAgd2I3ODJfc3RyZWluZm8oc21lLCBiaW5mbykKIAlyZXR1cm4gMDsK
IH0KIAotaW50Ci1pdGVjX3N0cmVpbmZvKHNtZSwgYmluZm8pCi0JIHN0cnVjdCBzeXNtb25fZW52
c3lzICpzbWU7Ci0JIHN0cnVjdCBlbnZzeXNfYmFzaWNfaW5mbyAqYmluZm87Ci17Ci0JIHN0cnVj
dCBsbV9zb2Z0YyAqc2MgPSBzbWUtPnNtZV9jb29raWU7Ci0JIGludCBkaXZpc29yOwotCSB1X2lu
dDhfdCBzZGF0YTsKLQkgaW50IGk7Ci0KLQkgaWYgKHNjLT5pbmZvW2JpbmZvLT5zZW5zb3JdLnVu
aXRzID09IEVOVlNZU19TVk9MVFNfREMpCi0JCSAgc2MtPmluZm9bYmluZm8tPnNlbnNvcl0ucmZh
Y3QgPSBiaW5mby0+cmZhY3Q7Ci0JIGVsc2UgewotCQlpZiAoc2MtPmluZm9bYmluZm8tPnNlbnNv
cl0udW5pdHMgPT0gRU5WU1lTX1NGQU5SUE0pIHsKLQkJCWlmIChiaW5mby0+cnBtcyA9PSAwKSB7
Ci0JCQkJYmluZm8tPnZhbGlkZmxhZ3MgPSAwOwotCQkJCXJldHVybiAwOwotCQkJfQotCi0JCQkv
KiB3cml0ZSBiYWNrIHRoZSBub21pbmFsIEZBTiBzcGVlZCAgKi8KLQkJCXNjLT5pbmZvW2JpbmZv
LT5zZW5zb3JdLnJwbXMgPSBiaW5mby0+cnBtczsKLQotCQkJLyogMTUzIGlzIHRoZSBub21pbmFs
IEZBTiBzcGVlZCB2YWx1ZSAqLwotCQkJZGl2aXNvciA9IDEzNTAwMDAgLyAoYmluZm8tPnJwbXMg
KiAxNTMpOwotCi0JCQkvKiAuLi5idXQgd2UgbmVlZCBsZyhkaXZpc29yKSAqLwotCQkJZm9yIChp
ID0gMDsgaSA8IDc7IGkrKykgewotCQkJCWlmIChkaXZpc29yIDw9ICgxIDw8IGkpKQotCQkJCSAJ
YnJlYWs7Ci0JCQl9Ci0JCQlkaXZpc29yID0gaTsKLQotCQkJc2RhdGEgPSAoKnNjLT5sbV9yZWFk
cmVnKShzYywgSVRFQ19GQU5ESVYpOwotCQkJLyoKLQkJCSAqIEZBTjEgZGl2IGlzIGluIGJpdHMg
PDA6Mj4sIEZBTjIgaXMgaW4gPDM6NT4KLQkJCSAqIEZBTjMgaXMgaW4gPDY+LCBpZiBzZXQgZGl2
aXNvciBpcyA4LCBlbHNlIDIKLQkJCSAqLwotCQkJaWYgKCBiaW5mby0+c2Vuc29yID09IDEwICkg
eyAgLyogRkFOMSAqLwotCQkJCSBzZGF0YSA9IChzZGF0YSAmIDB4ZjgpIHwgZGl2aXNvcjsKLQkJ
CX0gZWxzZSBpZiAoIGJpbmZvLT5zZW5zb3IgPT0gMTEgKSB7IC8qIEZBTjIgKi8KLQkJCQkgc2Rh
dGEgPSAoc2RhdGEgJiAweGM3KSB8IGRpdmlzb3IgPDwgMzsKLQkJCX0gZWxzZSB7IC8qIEZBTjMg
Ki8KLQkJCQlpZiAoZGl2aXNvcj4yKQotCQkJCQlzZGF0YSA9IHNkYXRhICYgMHhiZjsKLQkJCQll
bHNlCi0JCQkJCXNkYXRhID0gc2RhdGEgfCAweDQwOwotCQkJfQotCQkJKCpzYy0+bG1fd3JpdGVy
ZWcpKHNjLCBJVEVDX0ZBTkRJViwgc2RhdGEpOwotCQl9Ci0JCXN0cmxjcHkoc2MtPmluZm9bYmlu
Zm8tPnNlbnNvcl0uZGVzYywgYmluZm8tPmRlc2MsCi0JCSAgICBzaXplb2Yoc2MtPmluZm9bYmlu
Zm8tPnNlbnNvcl0uZGVzYykpOwotCQliaW5mby0+dmFsaWRmbGFncyA9IEVOVlNZU19GVkFMSUQ7
Ci0JIH0KLQkgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkCiBnZW5lcmljX3N0ZW1wKHNjLCBz
ZW5zb3IpCiAJc3RydWN0IGxtX3NvZnRjICpzYzsKQEAgLTEwMjYsOTIgKzg5MywzIEBAIHdiNjk3
X3JlZnJlc2hfc2Vuc29yX2RhdGEoc2MpCiAJd2Jfc3RlbXAoc2MsICZzYy0+c2Vuc29yc1s5XSwg
Mik7CiAJd2JfZmFucnBtKHNjLCAmc2MtPnNlbnNvcnNbMTFdKTsKIH0KLQotc3RhdGljIHZvaWQK
LWl0ZWNfc3ZvbHQoc2MsIHNlbnNvcnMsIGluZm9zKQotCXN0cnVjdCBsbV9zb2Z0YyAqc2M7Ci0J
c3RydWN0IGVudnN5c190cmVfZGF0YSAqc2Vuc29yczsKLQlzdHJ1Y3QgZW52c3lzX2Jhc2ljX2lu
Zm8gKmluZm9zOwotewotCWludCBpLCBzZGF0YTsKLQotCWZvciAoaSA9IDA7IGkgPCA5OyBpKysp
IHsKLQkJc2RhdGEgPSAoKnNjLT5sbV9yZWFkcmVnKShzYywgSVRFQ19WSU4wICsgaSk7Ci0JCURQ
UklOVEYoKCJzZGF0YVt2b2x0JWRdIDB4JXhcbiIsIGksIHNkYXRhKSk7Ci0JCS8qIHZvbHRhZ2Ug
cmV0dXJuZWQgYXMgKG1WID4+IDQpLCB3ZSBjb252ZXJ0IHRvIHVWREMgKi8KLQkJc2Vuc29yc1tp
XS5jdXIuZGF0YV9zID0gKCBzZGF0YSA8PCA0ICk7Ci0JCS8qIHJmYWN0IGlzIChmYWN0b3IgKiAx
MF40KSAqLwotCi0JCXNlbnNvcnNbaV0uY3VyLmRhdGFfcyAqPSBpbmZvc1tpXS5yZmFjdDsKLQkJ
LyoKLQkJICogWFhYIFdlIGFzc3VtZSBpbnB1dCA1IGlzIHdpcmVkIHRoZSB3YXkgaVRFIHN1Z2dl
c3RzIHRvCi0JCSAqIG1vbml0b3IgYSBuZWdhdGl2ZSB2b2x0YWdlLiBJJ2QgcHJlZmVyIHVzaW5n
IG5lZ2F0aXZlIHJmYWN0cwotCQkgKiBmb3IgZGV0ZWN0aW5nIHRob3NlIGNhc2VzIGJ1dCBzaW5j
ZSByZmFjdCBpcyBhbiB1X2ludCB0aGlzCi0JCSAqIGlzbid0IHBvc3NpYmxlLgotCQkgKi8KLQkJ
aWYgKGkgPT0gNSkKLQkJCXNlbnNvcnNbaV0uY3VyLmRhdGFfcyAtPQotCQkJICAgIChpbmZvc1tp
XS5yZmFjdCAtIDEwMDAwKSAqIElURUNfVlJFRjsKLQkJLyogZGl2aXNpb24gYnkgMTAgZ2V0cyB1
cyBiYWNrIHRvIHVWREMgKi8KLQkJc2Vuc29yc1tpXS5jdXIuZGF0YV9zIC89IDEwOwotCX0KLX0K
LQotc3RhdGljIHZvaWQKLWl0ZWNfc3RlbXAoc2MsIHNlbnNvcnMpCi0Jc3RydWN0IGxtX3NvZnRj
ICpzYzsKLQlzdHJ1Y3QgIGVudnN5c190cmVfZGF0YSAqc2Vuc29yczsKLXsKLQlpbnQgaSwgc2Rh
dGE7Ci0KLQkvKiB0ZW1wZXJhdHVyZXMuIEdpdmVuIGluIGRDLCB3ZSBjb252ZXJ0IHRvIHVLICov
Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlzZGF0YSA9ICgqc2MtPmxtX3JlYWRyZWcp
KHNjLCBJVEVDX1RFTVAxICsgaSk7Ci0JCURQUklOVEYoKCJzZGF0YVt0ZW1wJWRdIDB4JXhcbiIs
aSwgc2RhdGEpKTsKLQkJc2Vuc29yc1tpXS5jdXIuZGF0YV91cyA9IHNkYXRhICogMTAwMDAwMCAr
IDI3MzE1MDAwMDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1pdGVjX2ZhbnJwbShzYywgc2Vuc29y
cykKLQlzdHJ1Y3QgbG1fc29mdGMgKnNjOwotCXN0cnVjdCBlbnZzeXNfdHJlX2RhdGEgKnNlbnNv
cnM7Ci17Ci0JaW50IGksIGZhbmRpdiwgZGl2aXNvciwgc2RhdGE7Ci0JKCpzYy0+bG1fYmFua3Nl
bCkoc2MsIDApOwotCWZhbmRpdiA9ICgoKnNjLT5sbV9yZWFkcmVnKShzYywgSVRFQ19GQU5ESVYp
KTsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJc2RhdGEgPSAoKnNjLT5sbV9yZWFk
cmVnKShzYywgSVRFQ19GQU4xICsgaSk7Ci0JCURQUklOVEYoKCJzZGF0YVtmYW4lZF0gMHgleFxu
IiwgaSwgc2RhdGEpKTsKLQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgMDoKLQkJCWRpdmlzb3IgPSBm
YW5kaXYgJiAweDc7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJZGl2aXNvciA9IChmYW5kaXYg
Pj4gMykgJiAweDc7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQlkZWZhdWx0OgkvKiBYWFggKi8K
LQkJCWRpdmlzb3IgPSAoZmFuZGl2ICYgMHg0MCkgPyAzIDogMTsKLQkJCWJyZWFrOwotCQl9Ci0J
CURQUklOVEYoKCJzZGF0YVslZF0gMHgleCBkaXYgMHgleFxuIiwgaSwgc2RhdGEsIGRpdmlzb3Ip
KTsKLQkJaWYgKHNkYXRhID09IDB4ZmYgfHwgc2RhdGEgPT0gMHgwMCkgewotCQkJc2Vuc29yc1tp
XS5jdXIuZGF0YV91cyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzZW5zb3JzW2ldLmN1ci5kYXRhX3Vz
ID0gMTM1MDAwMCAvCi0JCQkgICAgKHNkYXRhIDw8IGRpdmlzb3IpOwotCQl9Ci0JfQotCi19Ci0K
LXZvaWQKLWl0ZWNfcmVmcmVzaF9zZW5zb3JfZGF0YShzYykKLQlzdHJ1Y3QgbG1fc29mdGMgKnNj
OwotewotCWl0ZWNfc3ZvbHQoc2MsICZzYy0+c2Vuc29yc1swXSwgJnNjLT5pbmZvWzBdKTsKLQlp
dGVjX3N0ZW1wKHNjLCAmc2MtPnNlbnNvcnNbOV0pOwotCWl0ZWNfZmFucnBtKHNjLCAmc2MtPnNl
bnNvcnNbMTJdKTsKLX0KSW5kZXg6IGljL25zbG03eHZhci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnNyb290L3NyYy9zeXMvZGV2L2ljL25zbG03eHZhci5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE3CmRpZmYgLXUgLXAgLWIgLXUgLXIxLjE3IG5zbG03eHZhci5oCi0tLSBpYy9uc2xtN3h2
YXIuaAkxMSBEZWMgMjAwNSAxMjoyMToyOCAtMDAwMAkxLjE3CisrKyBpYy9uc2xtN3h2YXIuaAk3
IE1heSAyMDA2IDE5OjM1OjEyIC0wMDAwCkBAIC0xMTcsNDIgKzExNyw2IEBACiAjZGVmaW5lIFdC
ODM2OTdfTlVNX1NFTlNPUlMJMTQKICNkZWZpbmUgV0JfTlVNX1NFTlNPUlMJMTUKIAotLyoKLSAq
IHJlZ2lzdGVycyBmb3IgdGhlIGVudmlyb25tZW50IGNvbnRyb2xsZXIgYnVpbHQgaW50bwotICog
dGhlIElUODcwNUYgc3VwZXItaS9vIGNoaXAKLSAqLwotI2RlZmluZSBJVEVDX0ZBTkRJVgkweDBi
CS8qIGZhbiBkaXZpc29yICovCi0jZGVmaW5lIElURUNfRkFOMQkweDBkCS8qIGZhbjEgdGFjaG9t
ZXRlciAqLwotI2RlZmluZSBJVEVDX0ZBTjIJMHgwZQkvKiBmYW4yIHRhY2hvbWV0ZXIgKi8KLSNk
ZWZpbmUgSVRFQ19GQU4zCTB4MGYJLyogZmFuMyB0YWNob21ldGVyICovCi0jZGVmaW5lIElURUNf
VklOMAkweDIwCS8qIFZJTjAgdm9sdGFnZSAqLwotI2RlZmluZSBJVEVDX1ZJTjEJMHgyMQkvKiBW
SU4xIHZvbHRhZ2UgKi8KLSNkZWZpbmUgSVRFQ19WSU4yCTB4MjIJLyogVklOMiB2b2x0YWdlICov
Ci0jZGVmaW5lIElURUNfVklOMwkweDIzCS8qIFZJTjMgdm9sdGFnZSAqLwotI2RlZmluZSBJVEVD
X1ZJTjQJMHgyNAkvKiBWSU40IHZvbHRhZ2UgKi8KLSNkZWZpbmUgSVRFQ19WSU41CTB4MjUJLyog
VklONSB2b2x0YWdlICovCi0jZGVmaW5lIElURUNfVklONgkweDI2CS8qIFZJTjYgdm9sdGFnZSAq
LwotI2RlZmluZSBJVEVDX1ZJTjcJMHgyNwkvKiBWSU43IHZvbHRhZ2UgKi8KLSNkZWZpbmUgSVRF
Q19WQkFUCTB4MjgJLyogVkJBVCB2b2x0YWdlICovCi0jZGVmaW5lIElURUNfVEVNUDEJMHgyOQkv
KiBUTVBJTjEgdGVtcGVyYXR1cmUgKi8KLSNkZWZpbmUgSVRFQ19URU1QMgkweDMwCS8qIFRNUElO
MSB0ZW1wZXJhdHVyZSAqLwotI2RlZmluZSBJVEVDX1RFTVAzCTB4MzEJLyogVE1QSU4xIHRlbXBl
cmF0dXJlICovCi0jZGVmaW5lIElURUNfUkVTNDgJMHg0OAkvKiByZXNlcnZlZCwgdXNlZCBmb3Ig
cHJvYmluZyB0aGUgY2hpcCAqLwotI2RlZmluZSBJVEVDX1JFUzUyCTB4NTIJLyogcmVzZXJ2ZWQs
IHVzZWQgZm9yIHByb2JpbmcgdGhlIGNoaXAgKi8KLSNkZWZpbmUJSVRFQ19WRU5ESUQJMHg1OAkv
KiB2ZW5kb3IgSUQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgSVRFQ19DT1JFSUQJMHg1YgkvKiBjb3Jl
IElEIHJlZ2lzdGVyLCBvbmx5IDg3MTJGICovCi0KLS8qCi0gKiBtaXNjIHZhbHVlcwotICovCi0j
ZGVmaW5lIElURUNfVkVORElEX0lURQkJMHg5MAkvKiBpVEUgdmVuZG9yIElEICovCi0jZGVmaW5l
IElURUNfQ09SRUlEX0lURQkJMHgxMgkvKiBpVEUgY29yZSBJRCAqLwotI2RlZmluZSBJVEVDX1JF
UzQ4X0RFRkFVTFQJMHgyZAotI2RlZmluZSBJVEVDX1JFUzUyX0RFRkFVTFQJMHg3ZgotI2RlZmlu
ZSBJVEVDX05VTV9TRU5TT1JTCTE1Ci0jZGVmaW5lIElURUNfVlJFRgkJNDA5NgkvKiBWUkVGIGlu
IG1WICovCi0KLQogc3RydWN0IGxtX3NvZnRjIHsKIAlzdHJ1Y3QJZGV2aWNlIHNjX2RldjsKIAo=

--Multipart=_Sun__7_May_2006_21_43_10_+0200_s3d3A71pJhWv1R6z--