Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Jun 2005 11:19:28 +0200
From:      "Norbert Koch" <NKoch@demig.de>
To:        "Maksim Yevmenkin" <maksim.yevmenkin@savvis.net>
Cc:        "Freebsd-Hackers@Freebsd. Org" <freebsd-hackers@freebsd.org>
Subject:   RE: using vkbd device
Message-ID:  <000001c56ff8$ffda5b40$4801a8c0@ws-ew-3.W2KDEMIG>
In-Reply-To: <42A0891F.8080800@savvis.net>

Next in thread | Previous in thread | Raw E-Mail | Index | Archive | Help
This is a multi-part message in MIME format.

------=_NextPart_000_0001_01C57009.C3632B40
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

> you also might want to look at experimental keyboard mux drivers. it is 
> based on vkbd(4) and uses the idea of one super-keyboard that consumes 
> scancodes from other keyboards. there are still a few issues i need to 
> fix, but, in general, it works.
> 
> http://www.geocities.com/m_evmenkin/kbdmux-2.tar.gz
> 
> thanks,
> max
> 

Hello Max,

I back-ported kbdmux to FreeBSD 4.11 (and stopped work on vkbd).
It seems to work, although I still have some stability issues
with dynamically attaching/detaching a usb keyboard.
For your reference I have enclosed a patch file.
Sorry for some diffs due to slightly different coding
and debugging style.

Thank you for any comments,

Norbert
------=_NextPart_000_0001_01C57009.C3632B40
Content-Type: application/octet-stream;
	name="kbdmux.c.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="kbdmux.c.patch"

LS0tIGtiZG11eC9rYmRtdXguYwlTYXQgTWF5IDIxIDAxOjUxOjQ3IDIwMDUKKysrIGtiZG11eC5j
CU1vbiBKdW4gMTMgMTE6MDg6MTggMjAwNQpAQCAtMjcsNyArMjcsNyBAQAogICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgogICogU1VDSCBEQU1BR0UuCiAgKgotICogJElkJAorICogJElkOiBrYmRtdXguYyx2IDEu
NCAyMDA1LzA2LzEzIDA5OjA2OjMwIG5rIEV4cCAkCiAgKiAkRnJlZUJTRCQKICAqLwogCkBAIC0z
NiwyNSArMzYsMTA4IEBACiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL2Nv
bmYuaD4KICNpbmNsdWRlIDxzeXMvY29uc2lvLmg+CisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
NjAwMDAwCiAjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy92bm9k
ZS5oPgorI2VuZGlmCiAjaW5jbHVkZSA8c3lzL2tiaW8uaD4KICNpbmNsdWRlIDxzeXMva2VybmVs
Lmg+CisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCiAjaW5jbHVkZSA8c3lzL2xpbWl0
cy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxtYWNoaW5lL2xpbWl0cy5oPgorI2VuZGlmCiAjaW5jbHVk
ZSA8c3lzL2xvY2suaD4KICNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiAjaW5jbHVkZSA8c3lzL21v
ZHVsZS5oPgorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAxNAogI2luY2x1ZGUgPHN5cy9t
dXRleC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3BvbGwuaD4KICNpbmNsdWRlIDxzeXMvcHJv
Yy5oPgogI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUw
MDAxNAogI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9zZWxl
Y3QuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgogI2luY2x1ZGUgPHN5cy90YXNr
cXVldWUuaD4KICNpbmNsdWRlIDxzeXMvdHR5Lmg+CiAjaW5jbHVkZSA8c3lzL3Vpby5oPgogI2lu
Y2x1ZGUgPGRldi9rYmQva2JkcmVnLmg+CiAjaW5jbHVkZSA8ZGV2L2tiZC9rYmR0YWJsZXMuaD4K
LSNpbmNsdWRlIDxkZXYva2JkbXV4L2tiZG11eF92YXIuaD4KKyNpbmNsdWRlICJrYmRtdXhfdmFy
LmgiCisKKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcgICAgICAgICAgIDEKKyNlbmRpZgor
I2lmbmRlZiBWRVJCT1NFCisjZGVmaW5lIFZFUkJPU0UgICAgICAgICAxCisjZW5kaWYKKyNpZm5k
ZWYgREVCVUdfVVNFU1lTTE9HCisjZGVmaW5lIERFQlVHX1VTRVNZU0xPRyAwCisjZW5kaWYKKyNk
ZWZpbmUgREVCVUdfVEFHICAgICAgIHZrYmQKKworI2RlZmluZSBERUJVR19RVUVVRSAgICAgREVC
VUcKKworI2luY2x1ZGUgPGRldl9kZWJ1Zy9kZXZfZGVidWcuaD4KKworCisvKgorICogZGVjbGFy
ZSB1aW50IHN5c2N0bCBkZWJ1Zy52a2JkX2RlYnVnCisgKiB3aXRoIGluaXRpYWwgdmFsdWUgb2Yg
OQorICovCisKK2RlYnVnX3Zhcl9kZWNsKDkpOworZGVidWdfc3lzY3RsKCk7CisKKworLyoKKyAq
IE9TIHNwZWNpZmljCisgKi8KKworI2RlZmluZSBQUFJJTyAgICAgICAgICAgICAgICAgICAoUFpF
Uk8rMSkKKworI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAxNAorCisjZGVmaW5lIFRBU0tR
VUVVRSAgICAgICAgICAgICAgIHRhc2txdWV1ZV9zd2lfZ2lhbnQKKworI2RlZmluZSBLQkRNVVhf
TE9DS19ERUNMX0dMT0JBTCBzdHJ1Y3QgbXR4X2xvY2sga3NfbG9jaworI2RlZmluZSBLQkRNVVhf
TE9DTF9ERUNMX0xPQ0FMCS8qIG9ubHkgZm9yIEZyZWVCU0QgNC5YICovCisjZGVmaW5lIEtCRE1V
WF9MT0NLX0lOSVQocykgICAgIG10eF9pbml0ICgmIChzKS0+a3NfbG9jaywgTlVMTCwgTlVMTCwg
TVRYX0RFRikKKyNkZWZpbmUgS0JETVVYX0xPQ0tfREVTVFJPWShzKSAgbXR4X2Rlc3Ryb3kgKCYg
KHMpLT5rc19sb2NrKQorI2RlZmluZSBLQkRNVVhfTE9DSyhzKSAgICAgICAgICBtdHhfbG9jayAo
JiAocyktPmtzX2xvY2spCisjZGVmaW5lIEtCRE1VWF9VTkxPQ0socykgICAgICAgIG10eF91bmxv
Y2sgKCYgKHMpLT5rc19sb2NrKQorI2RlZmluZSBLQkRNVVhfTE9DS19BU1NFUlQocywgdyltdHhf
YXNzZXJ0ICgmIChzKS0+a3NfbG9jaywgdykKKyNkZWZpbmUgS0JETVVYX1NMRUVQKHMsIGYsIGQs
IHQsIGUpICBcCisgIGUgPSBtc2xlZXAgKCYgKHMpLT5mLCAmIChzKS0+a3NfbG9jaywgUENBVENI
fFBQUklPLCBkLCB0KQorCisjZWxzZQorCisjZGVmaW5lIFRBU0tRVUVVRSAgICAgICAgICAgICAg
IHRhc2txdWV1ZV9zd2kKKworI2RlZmluZSBLQkRNVVhfTE9DS19ERUNMX0dMT0JBTAkvKiBvbmx5
IGZvciBGcmVlQlNEIDUuWCBhbmQgdXAgKi8KKyNkZWZpbmUgS0JETVVYX0xPQ0tfREVDTF9MT0NB
TCAgaW50cm1hc2tfdCBpcGwKKyNkZWZpbmUgS0JETVVYX0xPQ0tfSU5JVChzKQkvKiBvbmx5IGZv
ciBGcmVlQlNEIDUuWCBhbmQgdXAgKi8KKyNkZWZpbmUgS0JETVVYX0xPQ0tfREVTVFJPWShzKQkv
KiBvbmx5IGZvciBGcmVlQlNEIDUuWCBhbmQgdXAgKi8KKyNkZWZpbmUgS0JETVVYX0xPQ0socykg
ICAgICAgICAgaXBsID0gc3BsaGlnaCAoKQorI2RlZmluZSBLQkRNVVhfVU5MT0NLKHMpICAgICAg
ICBzcGx4IChpcGwpCisjZGVmaW5lIEtCRE1VWF9MT0NLX0FTU0VSVChzLCB3KQkvKiBvbmx5IGJ5
IEZyZWVCU0QgNS5YIGFuZCB1cAorCQkJCQkgKiBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgS0JETVVY
X1NMRUVQKHMsIGYsIGQsIHQpICAgICAgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBLQkRNVVhfVU5MT0NLIChzKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB0c2xlZXAgKCYgKHMpLT5mLCBQQ0FUQ0h8UFBSSU8sIGQs
IHQpOyAgICAgIFwKKyAgICBLQkRNVVhfTE9DSyAocyk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgd2hpbGUgKDApCisKKyNlbmRpZgorCiAKICNkZWZpbmUgS0VZQk9BUkRfTkFNRQkia2JkbXV4
IgogCkBAIC02NywxNSArMTUwLDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwogCi0jZGVmaW5lIEtCRE1VWF9MT0NLX0RFQ0wJc3RydWN0IG10eCBrc19s
b2NrCi0jZGVmaW5lIEtCRE1VWF9MT0NLX0lOSVQocykJbXR4X2luaXQoJihzKS0+a3NfbG9jaywg
TlVMTCwgTlVMTCwgTVRYX0RFRikKLSNkZWZpbmUgS0JETVVYX0xPQ0tfREVTVFJPWShzKQltdHhf
ZGVzdHJveSgmKHMpLT5rc19sb2NrKQotI2RlZmluZSBLQkRNVVhfTE9DSyhzKQkJbXR4X2xvY2so
JihzKS0+a3NfbG9jaykKLSNkZWZpbmUgS0JETVVYX1VOTE9DSyhzKQltdHhfdW5sb2NrKCYocykt
PmtzX2xvY2spCi0jZGVmaW5lIEtCRE1VWF9MT0NLX0FTU0VSVChzLCB3KQltdHhfYXNzZXJ0KCYo
cyktPmtzX2xvY2ssIHcpCi0jZGVmaW5lIEtCRE1VWF9TTEVFUChzLCBmLCBkLCB0KSBcCi0JbXNs
ZWVwKCYocyktPmYsICYocyktPmtzX2xvY2ssIFBDQVRDSCB8IChQWkVSTyArIDEpLCBkLCB0KQot
CiAjZGVmaW5lCUtCRE1VWF9JTlRSKGtiZCwgYXJnKSBcCiAJKCprYmRzd1soa2JkKS0+a2JfaW5k
ZXhdLT5pbnRyKSgoa2JkKSwgKGFyZykpCiAKQEAgLTkxLDkgKzE2NSwxMCBAQAogI2RlZmluZQlL
QkRNVVhfRU5BQkxFKGtiZCkgXAogCSgqa2Jkc3dbKGtiZCktPmtiX2luZGV4XS0+ZW5hYmxlKSgo
a2JkKSkKIAotLyoga2JkbXV4IGtleWJvYXJkICovCi1zdHJ1Y3Qga2JkbXV4X2tiZAoteworLyoK
KyAqIGtiZG11eCBrZXlib2FyZCAKKyAqLworc3RydWN0IGtiZG11eF9rYmQgewogCWtleWJvYXJk
X3QJCSprYmQ7CS8qIGtleWJvYXJkICovCiAJaW50CQkJIGlkeDsJLyoga2V5Ym9hcmQgaW5kZXgg
Ki8KIAlTTElTVF9FTlRSWShrYmRtdXhfa2JkKQkgbmV4dDsJLyogbGluayB0byBuZXh0ICovCkBA
IC0xMDEsOSArMTc2LDEwIEBACiAKIHR5cGVkZWYgc3RydWN0IGtiZG11eF9rYmQJa2JkbXV4X2ti
ZF90OwogCi0vKiBrYmRtdXggc3RhdGUgKi8KLXN0cnVjdCBrYmRtdXhfc3RhdGUKLXsKKy8qCisg
KiBrYmRtdXggc3RhdGUgCisgKi8KK3N0cnVjdCBrYmRtdXhfc3RhdGUgewogCXN0cnVjdCBjbGlz
dAkJIGtzX2lucTsJLyogaW5wdXQgY2hhcnMgcXVldWUgKi8KIAlzdHJ1Y3QgdGFzawkJIGtzX3Rh
c2s7CS8qIGludGVycnVwdCB0YXNrICovCiAKQEAgLTEyMCw3ICsxOTYsNyBAQAogCiAJU0xJU1Rf
SEVBRCgsIGtiZG11eF9rYmQpIGtzX2tiZHM7CS8qIGtleWJvYXJkcyAqLwogCi0JS0JETVVYX0xP
Q0tfREVDTDsKKwkgICAgICAgICAgICAgICAgS0JETVVYX0xPQ0tfREVDTF9HTE9CQUw7CiB9Owog
CiB0eXBlZGVmIHN0cnVjdCBrYmRtdXhfc3RhdGUJa2JkbXV4X3N0YXRlX3Q7CkBAIC0xMzQsMTIg
KzIxMCwxNSBAQAogc3RhdGljIHZvaWQJCQlrYmRtdXhfa2JkX2ludHIodm9pZCAqLCBpbnQpOwog
c3RhdGljIGtiZF9jYWxsYmFja19mdW5jX3QJa2JkbXV4X2tiZF9ldmVudDsKIAotLyogSW50ZXJy
dXB0IGhhbmRsZXIgdGFzayAqLworLyoKKyAqIEludGVycnVwdCBoYW5kbGVyIHRhc2sgCisgKi8K
IHZvaWQKIGtiZG11eF9rYmRfaW50cih2b2lkICp4a2JkLCBpbnQgcGVuZGluZykKIHsKIAlrZXli
b2FyZF90CSprYmQgPSAoa2V5Ym9hcmRfdCAqKSB4a2JkOwogCWtiZG11eF9zdGF0ZV90CSpzdGF0
ZSA9IChrYmRtdXhfc3RhdGVfdCAqKSBrYmQtPmtiX2RhdGE7CisJS0JETVVYX0xPQ0tfREVDTF9M
T0NBTDsKIAogCUtCRE1VWF9JTlRSKGtiZCwgTlVMTCk7CiAKQEAgLTE1MSwxOSArMjMwLDI1IEBA
CiAJS0JETVVYX1VOTE9DSyhzdGF0ZSk7CiB9CiAKLS8qIFByb2Nlc3MgZXZlbnQgZnJvbSBvbmUg
b2Ygb3VyIGtleWJvYXJkcyAqLworLyoKKyAqIFByb2Nlc3MgZXZlbnQgZnJvbSBvbmUgb2Ygb3Vy
IGtleWJvYXJkcyAKKyAqLwogc3RhdGljIGludAoga2JkbXV4X2tiZF9ldmVudChrZXlib2FyZF90
ICprYmQsIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCWtiZG11eF9zdGF0ZV90CSpzdGF0ZSA9
IChrYmRtdXhfc3RhdGVfdCAqKSBhcmc7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBLQkRJ
T19LRVlJTlBVVDogeworCWNhc2UgS0JESU9fS0VZSU5QVVQ6CisJCXsKIAkJaW50CWM7CisJCQlL
QkRNVVhfTE9DS19ERUNMX0xPQ0FMOwogCiAJCUtCRE1VWF9MT0NLKHN0YXRlKTsKIAotCQkvKiBy
ZWFkIGFsbCBjaGFycyBmcm9tIHRoZSBrZXlib2FyZCAqLworCQkJLyoKKwkJCSAqIHJlYWQgYWxs
IGNoYXJzIGZyb20gdGhlIGtleWJvYXJkIAorCQkJICovCiAJCXdoaWxlIChLQkRNVVhfQ0hFQ0tf
Q0hBUihrYmQpKSB7CiAJCQljID0gS0JETVVYX1JFQURfQ0hBUihrYmQsIDApOwogCQkJaWYgKGMg
PT0gTk9LRVkpCkBAIC0xNzEsMzEgKzI1NiwzOSBAQAogCQkJaWYgKGMgPT0gRVJSS0VZKQogCQkJ
CWNvbnRpbnVlOyAvKiBYWFggcmluZyBiZWxsICovCiAJCQlpZiAoIUtCRF9JU19CVVNZKGtiZCkp
Ci0JCQkJY29udGludWU7IC8qIG5vdCBvcGVuIC0gZGlzY2FyZCB0aGUgaW5wdXQgKi8KKwkJCQkJ
Y29udGludWU7CS8qIG5vdCBvcGVuIC0gZGlzY2FyZAorCQkJCQkJCSAqIHRoZSBpbnB1dCAqLwog
CiAJCQlwdXRjKGMsICZzdGF0ZS0+a3NfaW5xKTsKIAkJfQogCi0JCS8qIHF1ZXVlIGludGVycnVw
dCB0YXNrIGlmIG5lZWRlZCAqLwotCQlpZiAoc3RhdGUtPmtzX2lucS5jX2NjID4gMCAmJiAhKHN0
YXRlLT5rc19mbGFncyAmIFRBU0spICYmCi0JCSAgICB0YXNrcXVldWVfZW5xdWV1ZSh0YXNrcXVl
dWVfc3dpX2dpYW50LCAmc3RhdGUtPmtzX3Rhc2spID09IDApCisJCQkvKgorCQkJICogcXVldWUg
aW50ZXJydXB0IHRhc2sgaWYgbmVlZGVkIAorCQkJICovCisJCQlpZiAoc3RhdGUtPmtzX2lucS5j
X2NjID4gMCAmJiAhKHN0YXRlLT5rc19mbGFncyAmIFRBU0spCisJCQkgICAgJiYgdGFza3F1ZXVl
X2VucXVldWUoVEFTS1FVRVVFLAorCQkJCQkJICZzdGF0ZS0+a3NfdGFzaykgPT0gMCkKIAkJCXN0
YXRlLT5rc19mbGFncyB8PSBUQVNLOwogCiAJCUtCRE1VWF9VTkxPQ0soc3RhdGUpOwotCQl9IGJy
ZWFrOworCQl9CisJCWJyZWFrOwogCi0JY2FzZSBLQkRJT19VTkxPQURJTkc6IHsKKwljYXNlIEtC
RElPX1VOTE9BRElORzoKKwkJewogCQlrYmRtdXhfa2JkX3QJKms7CisJCQlLQkRNVVhfTE9DS19E
RUNMX0xPQ0FMOwogCiAJCUtCRE1VWF9MT0NLKHN0YXRlKTsKIAotCQlTTElTVF9GT1JFQUNIKGss
ICZzdGF0ZS0+a3Nfa2JkcywgbmV4dCkKLQkJCWlmIChrLT5rYmQgPT0ga2JkKQorCQkJU0xJU1Rf
Rk9SRUFDSChrLCAmc3RhdGUtPmtzX2tiZHMsCisJCQkJICAgICAgbmV4dCkgaWYgKGstPmtiZCA9
PSBrYmQpCiAJCQkJYnJlYWs7CiAKIAkJaWYgKGsgIT0gTlVMTCkgewogCQkJa2JkX3JlbGVhc2Uo
ay0+a2JkLCAmay0+a2JkKTsKLQkJCVNMSVNUX1JFTU9WRSgmc3RhdGUtPmtzX2tiZHMsIGssIGti
ZG11eF9rYmQsIG5leHQpOworCQkJCVNMSVNUX1JFTU9WRSgmc3RhdGUtPmtzX2tiZHMsIGssIGti
ZG11eF9rYmQsCisJCQkJCSAgICAgbmV4dCk7CiAKIAkJCWstPmtiZCA9IE5VTEw7CiAJCQlrLT5p
ZHggPSAtMTsKQEAgLTIwNCwxMSArMjk3LDE0IEBACiAJCX0KIAogCQlLQkRNVVhfVU5MT0NLKHN0
YXRlKTsKLQkJfSBicmVhazsKKwkJfQorCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAo
RUlOVkFMKTsKLQkJLyogTk9UIFJFQUNIRUQgKi8KKwkJLyoKKwkJICogTk9UIFJFQUNIRUQgCisJ
CSAqLwogCX0KIAogCXJldHVybiAoMCk7CkBAIC0yNDAsNiArMzM2LDggQEAKIHN0YXRpYyBrYmRf
c2V0X3N0YXRlX3QJa2JkbXV4X3NldF9zdGF0ZTsKIHN0YXRpYyBrYmRfcG9sbF9tb2RlX3QJa2Jk
bXV4X3BvbGw7CiAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKKwogc3RhdGljIGtl
eWJvYXJkX3N3aXRjaF90IGtiZG11eHN3ID0gewogCS5wcm9iZSA9CWtiZG11eF9wcm9iZSwKIAku
aW5pdCA9CQlrYmRtdXhfaW5pdCwKQEAgLTI2MiwyMSArMzYwLDUzIEBACiAJLmRpYWcgPQkJZ2Vu
a2JkX2RpYWcsCiB9OwogCi0vKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmb3VuZCBrZXlib2FyZHMg
Ki8KKyNlbHNlCisKK3N0YXRpYyBrZXlib2FyZF9zd2l0Y2hfdCBrYmRtdXhzdyA9IHsKKwlrYmRt
dXhfcHJvYmUsCisJa2JkbXV4X2luaXQsCisJa2JkbXV4X3Rlcm0sCisJa2JkbXV4X2ludHIsCisJ
a2JkbXV4X3Rlc3RfaWYsCisJa2JkbXV4X2VuYWJsZSwKKwlrYmRtdXhfZGlzYWJsZSwKKwlrYmRt
dXhfcmVhZCwKKwlrYmRtdXhfY2hlY2ssCisJa2JkbXV4X3JlYWRfY2hhciwKKwlrYmRtdXhfY2hl
Y2tfY2hhciwKKwlrYmRtdXhfaW9jdGwsCisJa2JkbXV4X2xvY2ssCisJa2JkbXV4X2NsZWFyX3N0
YXRlLAorCWtiZG11eF9nZXRfc3RhdGUsCisJa2JkbXV4X3NldF9zdGF0ZSwKKwlnZW5rYmRfZ2V0
X2ZrZXlzdHIsCisJa2JkbXV4X3BvbGwsCisJZ2Vua2JkX2RpYWcKK307CisKKyNlbmRpZgorCisv
KgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZm91bmQga2V5Ym9hcmRzIAorICovCiBzdGF0aWMg
aW50CiBrYmRtdXhfY29uZmlndXJlKGludCBmbGFncykKIHsKIAlyZXR1cm4gKDEpOwogfQogCi0v
KiBEZXRlY3QgYSBrZXlib2FyZCAqLworLyoKKyAqIERldGVjdCBhIGtleWJvYXJkIAorICovCiBz
dGF0aWMgaW50CiBrYmRtdXhfcHJvYmUoaW50IHVuaXQsIHZvaWQgKmFyZywgaW50IGZsYWdzKQog
ewogCXJldHVybiAoMCk7CiB9CiAKLS8qIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBrZXlib2Fy
ZCAoc3RvbGVuIGZyb20gYXRrYmQuYykgKi8KKy8qCisgKiBSZXNldCBhbmQgaW5pdGlhbGl6ZSB0
aGUga2V5Ym9hcmQgKHN0b2xlbiBmcm9tIGF0a2JkLmMpIAorICovCiBzdGF0aWMgaW50CiBrYmRt
dXhfaW5pdChpbnQgdW5pdCwga2V5Ym9hcmRfdCAqKmtiZHAsIHZvaWQgKmFyZywgaW50IGZsYWdz
KQogewpAQCAtMjg2LDkgKzQxNiwxMSBAQAogICAgICAgICBhY2NlbnRtYXBfdAkqYWNjbWFwID0g
TlVMTDsKICAgICAgICAgZmtleXRhYl90CSpma2V5bWFwID0gTlVMTDsKIAlpbnQJCSBlcnJvciwg
bmVlZGZyZWUsIGZrZXltYXBfc2l6ZTsKKwlLQkRNVVhfTE9DS19ERUNMX0xPQ0FMOwogCiAJaWYg
KCprYmRwID09IE5VTEwpIHsKLQkJKmtiZHAgPSBrYmQgPSBtYWxsb2Moc2l6ZW9mKCprYmQpLCBN
X0tCRE1VWCwgTV9OT1dBSVQgfCBNX1pFUk8pOworCQkqa2JkcCA9IGtiZCA9CisJCSAgICBtYWxs
b2Moc2l6ZW9mKCprYmQpLCBNX0tCRE1VWCwgTV9OT1dBSVQgfCBNX1pFUk8pOwogCQlzdGF0ZSA9
IG1hbGxvYyhzaXplb2YoKnN0YXRlKSwgTV9LQkRNVVgsIE1fTk9XQUlUIHwgTV9aRVJPKTsKIAkJ
a2V5bWFwID0gbWFsbG9jKHNpemVvZihrZXlfbWFwKSwgTV9LQkRNVVgsIE1fTk9XQUlUKTsKIAkJ
YWNjbWFwID0gbWFsbG9jKHNpemVvZihhY2NlbnRfbWFwKSwgTV9LQkRNVVgsIE1fTk9XQUlUKTsK
QEAgLTMwMyw3ICs0MzUsOCBAQAogCQl9CiAKIAkJS0JETVVYX0xPQ0tfSU5JVChzdGF0ZSk7Ci0J
CWNsaXN0X2FsbG9jX2NibG9ja3MoJnN0YXRlLT5rc19pbnEsIEtCRE1VWF9RX1NJWkUsIEtCRE1V
WF9RX1NJWkUgLyAyKTsgLyogWFhYICovCisJCWNsaXN0X2FsbG9jX2NibG9ja3MoJnN0YXRlLT5r
c19pbnEsIEtCRE1VWF9RX1NJWkUsIEtCRE1VWF9RX1NJWkUgLyAyKTsJLyogWFhYIAorCQkJCQkJ
CQkJCQkgKi8KIAkJVEFTS19JTklUKCZzdGF0ZS0+a3NfdGFzaywgMCwga2JkbXV4X2tiZF9pbnRy
LCAodm9pZCAqKSBrYmQpOwogCQlTTElTVF9JTklUKCZzdGF0ZS0+a3Nfa2Jkcyk7CiAJfSBlbHNl
IGlmIChLQkRfSVNfSU5JVElBTElaRUQoKmtiZHApICYmIEtCRF9JU19DT05GSUdVUkVEKCprYmRw
KSkgewpAQCAtMzE5LDEyICs0NTIsMTUgQEAKIAl9CiAKIAlpZiAoIUtCRF9JU19QUk9CRUQoa2Jk
KSkgewotCQkvKiBYWFggYXNzdW1lIDEwMS8xMDIga2V5cyBrZXlib2FyZCAqLworCQkvKgorCQkg
KiBYWFggYXNzdW1lIDEwMS8xMDIga2V5cyBrZXlib2FyZCAKKwkJICovCiAJCWtiZF9pbml0X3N0
cnVjdChrYmQsIEtFWUJPQVJEX05BTUUsIEtCXzEwMSwgdW5pdCwgZmxhZ3MsIDAsIDApOwogCQli
Y29weSgma2V5X21hcCwga2V5bWFwLCBzaXplb2Yoa2V5X21hcCkpOwogCQliY29weSgmYWNjZW50
X21hcCwgYWNjbWFwLCBzaXplb2YoYWNjZW50X21hcCkpOwogCQliY29weShma2V5X3RhYiwgZmtl
eW1hcCwKLQkJCWltaW4oZmtleW1hcF9zaXplKnNpemVvZihma2V5bWFwWzBdKSwgc2l6ZW9mKGZr
ZXlfdGFiKSkpOworCQkgICAgICBpbWluKGZrZXltYXBfc2l6ZSAqIHNpemVvZihma2V5bWFwWzBd
KSwKKwkJCSAgIHNpemVvZihma2V5X3RhYikpKTsKIAkJa2JkX3NldF9tYXBzKGtiZCwga2V5bWFw
LCBhY2NtYXAsIGZrZXltYXAsIGZrZXltYXBfc2l6ZSk7CiAJCWtiZC0+a2JfZGF0YSA9ICh2b2lk
ICopc3RhdGU7CiAJCkBAIC0zNDAsMTIgKzQ3NiwxMSBAQAogCWlmICghS0JEX0lTX0lOSVRJQUxJ
WkVEKGtiZCkgJiYgIShmbGFncyAmIEtCX0NPTkZfUFJPQkVfT05MWSkpIHsKIAkJa2JkLT5rYl9j
b25maWcgPSBmbGFncyAmIH5LQl9DT05GX1BST0JFX09OTFk7CiAKLS8qIFhYWAotCQlrYmRtdXhf
aW9jdGwoa2JkLCBLRFNFVExFRCwgKGNhZGRyX3QpJnN0YXRlLT5rc19zdGF0ZSk7Ci0JCWRlbGF5
WzBdID0ga2JkLT5rYl9kZWxheTE7Ci0JCWRlbGF5WzFdID0ga2JkLT5rYl9kZWxheTI7Ci0JCWti
ZG11eF9pb2N0bChrYmQsIEtEU0VUUkVQRUFULCAoY2FkZHJfdClkZWxheSk7Ci1YWFggKi8KKwkJ
LyoKKwkJICogWFhYIGtiZG11eF9pb2N0bChrYmQsIEtEU0VUTEVELCAoY2FkZHJfdCkmc3RhdGUt
PmtzX3N0YXRlKTsKKwkJICogZGVsYXlbMF0gPSBrYmQtPmtiX2RlbGF5MTsgZGVsYXlbMV0gPSBr
YmQtPmtiX2RlbGF5MjsKKwkJICoga2JkbXV4X2lvY3RsKGtiZCwgS0RTRVRSRVBFQVQsIChjYWRk
cl90KWRlbGF5KTsgWFhYIAorCQkgKi8KIAogCQlLQkRfSU5JVF9ET05FKGtiZCk7CiAJfQpAQCAt
MzgxLDIwICs1MTYsMjcgQEAKIAlyZXR1cm4gKGVycm9yKTsKIH0KIAotLyogRmluaXNoIHVzaW5n
IHRoaXMga2V5Ym9hcmQgKi8KKy8qCisgKiBGaW5pc2ggdXNpbmcgdGhpcyBrZXlib2FyZCAKKyAq
Lwogc3RhdGljIGludAoga2JkbXV4X3Rlcm0oa2V5Ym9hcmRfdCAqa2JkKQogewogCWtiZG11eF9z
dGF0ZV90CSpzdGF0ZSA9IChrYmRtdXhfc3RhdGVfdCAqKSBrYmQtPmtiX2RhdGE7CiAJa2JkbXV4
X2tiZF90CSprOworCUtCRE1VWF9MT0NLX0RFQ0xfTE9DQUw7CiAKIAlLQkRNVVhfTE9DSyhzdGF0
ZSk7CiAKLQkvKiB3YWl0IGZvciBpbnRlcnJ1cHQgdGFzayAqLworCS8qCisJICogd2FpdCBmb3Ig
aW50ZXJydXB0IHRhc2sgCisJICovCiAJd2hpbGUgKHN0YXRlLT5rc19mbGFncyAmIFRBU0spCiAJ
CUtCRE1VWF9TTEVFUChzdGF0ZSwga3NfdGFzaywgImtiZG11eGMiLCAwKTsKIAotCS8qIHJlbGVh
c2UgYWxsIGtleWJvYXJkcyBmcm9tIHRoZSBtdXggKi8KKwkvKgorCSAqIHJlbGVhc2UgYWxsIGtl
eWJvYXJkcyBmcm9tIHRoZSBtdXggCisJICovCiAJd2hpbGUgKChrID0gU0xJU1RfRklSU1QoJnN0
YXRlLT5rc19rYmRzKSkgIT0gTlVMTCkgewogCQlrYmRfcmVsZWFzZShrLT5rYmQsICZrLT5rYmQp
OwogCQlTTElTVF9SRU1PVkVfSEVBRCgmc3RhdGUtPmtzX2tiZHMsIG5leHQpOwpAQCAtNDA1LDcg
KzU0Nyw5IEBACiAJCWZyZWUoaywgTV9LQkRNVVgpOwogCX0KIAotCS8qIGZsdXNoIGlucHV0IHF1
ZXVlICovCisJLyoKKwkgKiBmbHVzaCBpbnB1dCBxdWV1ZSAKKwkgKi8KIAluZGZsdXNoKCZzdGF0
ZS0+a3NfaW5xLCBzdGF0ZS0+a3NfaW5xLmNfY2MpOwogCWNsaXN0X2ZyZWVfY2Jsb2Nrcygmc3Rh
dGUtPmtzX2lucSk7CiAKQEAgLTQyMSwyNyArNTY1LDM2IEBACiAJcmV0dXJuICgwKTsKIH0KIAot
LyogS2V5Ym9hcmQgaW50ZXJydXB0IHJvdXRpbmUgKi8KKy8qCisgKiBLZXlib2FyZCBpbnRlcnJ1
cHQgcm91dGluZSAKKyAqLwogc3RhdGljIGludAoga2JkbXV4X2ludHIoa2V5Ym9hcmRfdCAqa2Jk
LCB2b2lkICphcmcpCiB7CiAJaW50CWM7CiAKIAlpZiAoS0JEX0lTX0FDVElWRShrYmQpICYmIEtC
RF9JU19CVVNZKGtiZCkpIHsKLQkJLyogbGV0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBwcm9j
ZXNzIHRoZSBpbnB1dCAqLworCQkvKgorCQkgKiBsZXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRv
IHByb2Nlc3MgdGhlIGlucHV0IAorCQkgKi8KIAkJKCprYmQtPmtiX2NhbGxiYWNrLmtjX2Z1bmMp
KGtiZCwgS0JESU9fS0VZSU5QVVQsCiAJCQkJCSAgICBrYmQtPmtiX2NhbGxiYWNrLmtjX2FyZyk7
CiAJfSBlbHNlIHsKLQkJLyogcmVhZCBhbmQgZGlzY2FyZCB0aGUgaW5wdXQ7IG5vIG9uZSBpcyB3
YWl0aW5nIGZvciBpbnB1dCAqLworCQkvKgorCQkgKiByZWFkIGFuZCBkaXNjYXJkIHRoZSBpbnB1
dDsgbm8gb25lIGlzIHdhaXRpbmcgZm9yIGlucHV0IAorCQkgKi8KIAkJZG8gewogCQkJYyA9IGti
ZG11eF9yZWFkX2NoYXIoa2JkLCBGQUxTRSk7Ci0JCX0gd2hpbGUgKGMgIT0gTk9LRVkpOworCQl9
CisJCXdoaWxlIChjICE9IE5PS0VZKTsKIAl9CiAKIAlyZXR1cm4gKDApOwogfQogCi0vKiBUZXN0
IHRoZSBpbnRlcmZhY2UgdG8gdGhlIGRldmljZSAqLworLyoKKyAqIFRlc3QgdGhlIGludGVyZmFj
ZSB0byB0aGUgZGV2aWNlIAorICovCiBzdGF0aWMgaW50CiBrYmRtdXhfdGVzdF9pZihrZXlib2Fy
ZF90ICprYmQpCiB7CkBAIC00NjAsNyArNjEzLDkgQEAKIAlyZXR1cm4gKDApOwogfQogCi0vKiBE
aXNhbGxvdyB0aGUgYWNjZXNzIHRvIHRoZSBkZXZpY2UgKi8KKy8qCisgKiBEaXNhbGxvdyB0aGUg
YWNjZXNzIHRvIHRoZSBkZXZpY2UgCisgKi8KIHN0YXRpYyBpbnQKIGtiZG11eF9kaXNhYmxlKGtl
eWJvYXJkX3QgKmtiZCkKIHsKQEAgLTQ2OCwxMiArNjIzLDE1IEBACiAJcmV0dXJuICgwKTsKIH0K
IAotLyogUmVhZCBvbmUgYnl0ZSBmcm9tIHRoZSBrZXlib2FyZCBpZiBpdCdzIGFsbG93ZWQgKi8K
Ky8qCisgKiBSZWFkIG9uZSBieXRlIGZyb20gdGhlIGtleWJvYXJkIGlmIGl0J3MgYWxsb3dlZCAK
KyAqLwogc3RhdGljIGludAoga2JkbXV4X3JlYWQoa2V5Ym9hcmRfdCAqa2JkLCBpbnQgd2FpdCkK
IHsKIAlrYmRtdXhfc3RhdGVfdAkqc3RhdGUgPSAoa2JkbXV4X3N0YXRlX3QgKikga2JkLT5rYl9k
YXRhOwogCWludAkJIGM7CisJS0JETVVYX0xPQ0tfREVDTF9MT0NBTDsKIAogCUtCRE1VWF9MT0NL
KHN0YXRlKTsKIAljID0gZ2V0Yygmc3RhdGUtPmtzX2lucSk7CkBAIC00ODUsMTIgKzY0MywxNSBA
QAogCXJldHVybiAoS0JEX0lTX0FDVElWRShrYmQpPyBjIDogLTEpOwogfQogCi0vKiBDaGVjayBp
ZiBkYXRhIGlzIHdhaXRpbmcgKi8KKy8qCisgKiBDaGVjayBpZiBkYXRhIGlzIHdhaXRpbmcgCisg
Ki8KIHN0YXRpYyBpbnQKIGtiZG11eF9jaGVjayhrZXlib2FyZF90ICprYmQpCiB7CiAJa2JkbXV4
X3N0YXRlX3QJKnN0YXRlID0gTlVMTDsKIAlpbnQJCSByZWFkeTsKKwlLQkRNVVhfTE9DS19ERUNM
X0xPQ0FMOwogCiAJaWYgKCFLQkRfSVNfQUNUSVZFKGtiZCkpCiAJCXJldHVybiAoRkFMU0UpOwpA
QCAtNTA0LDE5ICs2NjUsMjQgQEAKIAlyZXR1cm4gKHJlYWR5KTsKIH0KIAotLyogUmVhZCBjaGFy
IGZyb20gdGhlIGtleWJvYXJkIChzdG9sZW4gZnJvbSBhdGtiZC5jKSAqLworLyoKKyAqIFJlYWQg
Y2hhciBmcm9tIHRoZSBrZXlib2FyZCAoc3RvbGVuIGZyb20gYXRrYmQuYykgCisgKi8KIHN0YXRp
YyB1X2ludAoga2JkbXV4X3JlYWRfY2hhcihrZXlib2FyZF90ICprYmQsIGludCB3YWl0KQogewog
CWtiZG11eF9zdGF0ZV90CSpzdGF0ZSA9IChrYmRtdXhfc3RhdGVfdCAqKSBrYmQtPmtiX2RhdGE7
CiAJdV9pbnQJCSBhY3Rpb247CiAJaW50CQkgc2NhbmNvZGUsIGtleWNvZGU7CisJS0JETVVYX0xP
Q0tfREVDTF9MT0NBTDsKIAogCUtCRE1VWF9MT0NLKHN0YXRlKTsKIAogbmV4dF9jb2RlOgogCi0J
LyogZG8gd2UgaGF2ZSBhIGNvbXBvc2VkIGNoYXIgdG8gcmV0dXJuPyAqLworCS8qCisJICogZG8g
d2UgaGF2ZSBhIGNvbXBvc2VkIGNoYXIgdG8gcmV0dXJuPyAKKwkgKi8KIAlpZiAoIShzdGF0ZS0+
a3NfZmxhZ3MgJiBDT01QT1NFKSAmJiAoc3RhdGUtPmtzX2NvbXBvc2VkX2NoYXIgPiAwKSkgewog
CQlhY3Rpb24gPSBzdGF0ZS0+a3NfY29tcG9zZWRfY2hhcjsKIAkJc3RhdGUtPmtzX2NvbXBvc2Vk
X2NoYXIgPSAwOwpAQCAtNTMxLDIzICs2OTcsMzEgQEAKIAkJcmV0dXJuIChhY3Rpb24pOwogCX0K
IAotCS8qIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgaW4gdGhlIGtleWJvYXJkIHF1ZXVlICov
CisJLyoKKwkgKiBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIGluIHRoZSBrZXlib2FyZCBxdWV1
ZSAKKwkgKi8KIAlzY2FuY29kZSA9IGdldGMoJnN0YXRlLT5rc19pbnEpOwogCWlmIChzY2FuY29k
ZSA9PSAtMSkgewogCQlLQkRNVVhfVU5MT0NLKHN0YXRlKTsKIAkJcmV0dXJuIChOT0tFWSk7CiAJ
fQotCS8qIFhYWCBGSVhNRTogY2hlY2sgZm9yIC0xIGlmIHdhaXQgPT0gMSEgKi8KKwkvKgorCSAq
IFhYWCBGSVhNRTogY2hlY2sgZm9yIC0xIGlmIHdhaXQgPT0gMSEgCisJICovCiAKIAlrYmQtPmti
X2NvdW50ICsrOwogCi0JLyogcmV0dXJuIHRoZSBieXRlIGFzIGlzIGZvciB0aGUgS19SQVcgbW9k
ZSAqLworCS8qCisJICogcmV0dXJuIHRoZSBieXRlIGFzIGlzIGZvciB0aGUgS19SQVcgbW9kZSAK
KwkgKi8KIAlpZiAoc3RhdGUtPmtzX21vZGUgPT0gS19SQVcpIHsKIAkJS0JETVVYX1VOTE9DSyhz
dGF0ZSk7CiAJCXJldHVybiAoc2NhbmNvZGUpOwogCX0KIAotCS8qIHRyYW5zbGF0ZSB0aGUgc2Nh
biBjb2RlIGludG8gYSBrZXljb2RlICovCisJLyoKKwkgKiB0cmFuc2xhdGUgdGhlIHNjYW4gY29k
ZSBpbnRvIGEga2V5Y29kZSAKKwkgKi8KIAlrZXljb2RlID0gc2NhbmNvZGUgJiAweDdGOwogCXN3
aXRjaCAoc3RhdGUtPmtzX3ByZWZpeCkgewogCWNhc2UgMHgwMDoJLyogbm9ybWFsIHNjYW5jb2Rl
ICovCkBAIC02MjIsNyArNzk2LDkgQEAKIAkJY2FzZSAweDUzOgkvKiBncmV5IGRlbGV0ZSBrZXkg
Ki8KIAkJCWtleWNvZGUgPSAweDY3OwogCQkJYnJlYWs7Ci0JCS8qIHRoZSBmb2xsb3dpbmcgMyBh
cmUgb25seSB1c2VkIG9uIHRoZSBNUyAiTmF0dXJhbCIga2V5Ym9hcmQgKi8KKwkJCS8qCisJCQkg
KiB0aGUgZm9sbG93aW5nIDMgYXJlIG9ubHkgdXNlZCBvbiB0aGUgTVMgIk5hdHVyYWwiIGtleWJv
YXJkIAorCQkJICovCiAJCWNhc2UgMHg1YjoJLyogbGVmdCBXaW5kb3cga2V5ICovCiAJCQlrZXlj
b2RlID0gMHg2OTsKIAkJCWJyZWFrOwpAQCAtNjU2LDcgKzgzMiw5IEBACiAJCWlmIChrZXljb2Rl
ID09IDB4MUQpCiAJCQlzdGF0ZS0+a3NfcHJlZml4ID0gMHgxRDsKIAkJZ290byBuZXh0X2NvZGU7
Ci0JCS8qIE5PVCBSRUFDSEVEICovCisJCS8qCisJCSAqIE5PVCBSRUFDSEVEIAorCQkgKi8KIAlj
YXNlIDB4MUQ6CS8qIHBhdXNlIC8gYnJlYWsgKi8KIAkJc3RhdGUtPmtzX3ByZWZpeCA9IDA7CiAJ
CWlmIChrZXljb2RlICE9IDB4NDUpCkBAIC02NjUsNyArODQzLDkgQEAKIAkJYnJlYWs7CiAJfQog
Ci0JLyogWFhYIGFzc3VtZSAxMDEvMTAyIGtleXMgQVQga2V5Ym9hcmQgKi8KKwkvKgorCSAqIFhY
WCBhc3N1bWUgMTAxLzEwMiBrZXlzIEFUIGtleWJvYXJkIAorCSAqLwogCXN3aXRjaCAoa2V5Y29k
ZSkgewogCWNhc2UgMHg1YzoJLyogcHJpbnQgc2NyZWVuICovCiAJCWlmIChzdGF0ZS0+a3NfZmxh
Z3MgJiBBTFRTKQpAQCAtNjc3LDE3ICs4NTcsMjUgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogcmV0
dXJuIHRoZSBrZXkgY29kZSBpbiB0aGUgS19DT0RFIG1vZGUgKi8KKwkvKgorCSAqIHJldHVybiB0
aGUga2V5IGNvZGUgaW4gdGhlIEtfQ09ERSBtb2RlIAorCSAqLwogCWlmIChzdGF0ZS0+a3NfbW9k
ZSA9PSBLX0NPREUpIHsKIAkJS0JETVVYX1VOTE9DSyhzdGF0ZSk7CiAJCXJldHVybiAoa2V5Y29k
ZSB8IChzY2FuY29kZSAmIDB4ODApKTsKIAl9CiAKLQkvKiBjb21wb3NlIGEgY2hhcmFjdGVyIGNv
ZGUgKi8KKwkvKgorCSAqIGNvbXBvc2UgYSBjaGFyYWN0ZXIgY29kZSAKKwkgKi8KIAlpZiAoc3Rh
dGUtPmtzX2ZsYWdzICYgQ09NUE9TRSkgewogCQlzd2l0Y2ggKGtleWNvZGUgfCAoc2NhbmNvZGUg
JiAweDgwKSkgewotCQkvKiBrZXkgcHJlc3NlZCwgcHJvY2VzcyBpdCAqLwotCQljYXNlIDB4NDc6
IGNhc2UgMHg0ODogY2FzZSAweDQ5OgkvKiBrZXlwYWQgNyw4LDkgKi8KKwkJCS8qCisJCQkgKiBr
ZXkgcHJlc3NlZCwgcHJvY2VzcyBpdCAKKwkJCSAqLworCQljYXNlIDB4NDc6CisJCWNhc2UgMHg0
ODoKKwkJY2FzZSAweDQ5OgkvKiBrZXlwYWQgNyw4LDkgKi8KIAkJCXN0YXRlLT5rc19jb21wb3Nl
ZF9jaGFyICo9IDEwOwogCQkJc3RhdGUtPmtzX2NvbXBvc2VkX2NoYXIgKz0ga2V5Y29kZSAtIDB4
NDA7CiAJCQlpZiAoc3RhdGUtPmtzX2NvbXBvc2VkX2NoYXIgPiBVQ0hBUl9NQVgpIHsKQEAgLTY5
NSw3ICs4ODMsOSBAQAogCQkJCXJldHVybiAoRVJSS0VZKTsKIAkJCX0KIAkJCWdvdG8gbmV4dF9j
b2RlOwotCQljYXNlIDB4NEI6IGNhc2UgMHg0QzogY2FzZSAweDREOgkvKiBrZXlwYWQgNCw1LDYg
Ki8KKwkJY2FzZSAweDRCOgorCQljYXNlIDB4NEM6CisJCWNhc2UgMHg0RDoJLyoga2V5cGFkIDQs
NSw2ICovCiAJCQlzdGF0ZS0+a3NfY29tcG9zZWRfY2hhciAqPSAxMDsKIAkJCXN0YXRlLT5rc19j
b21wb3NlZF9jaGFyICs9IGtleWNvZGUgLSAweDQ3OwogCQkJaWYgKHN0YXRlLT5rc19jb21wb3Nl
ZF9jaGFyID4gVUNIQVJfTUFYKSB7CkBAIC03MDMsNyArODkzLDkgQEAKIAkJCQlyZXR1cm4gKEVS
UktFWSk7CiAJCQl9CiAJCQlnb3RvIG5leHRfY29kZTsKLQkJY2FzZSAweDRGOiBjYXNlIDB4NTA6
IGNhc2UgMHg1MToJLyoga2V5cGFkIDEsMiwzICovCisJCWNhc2UgMHg0RjoKKwkJY2FzZSAweDUw
OgorCQljYXNlIDB4NTE6CS8qIGtleXBhZCAxLDIsMyAqLwogCQkJc3RhdGUtPmtzX2NvbXBvc2Vk
X2NoYXIgKj0gMTA7CiAJCQlzdGF0ZS0+a3NfY29tcG9zZWRfY2hhciArPSBrZXljb2RlIC0gMHg0
RTsKIAkJCWlmIChzdGF0ZS0+a3NfY29tcG9zZWRfY2hhciA+IFVDSEFSX01BWCkgewpAQCAtNzE5
LDEwICs5MTEsMTggQEAKIAkJCX0KIAkJCWdvdG8gbmV4dF9jb2RlOwogCi0JCS8qIGtleSByZWxl
YXNlZCwgbm8gaW50ZXJlc3QgaGVyZSAqLwotCQljYXNlIDB4Qzc6IGNhc2UgMHhDODogY2FzZSAw
eEM5OgkvKiBrZXlwYWQgNyw4LDkgKi8KLQkJY2FzZSAweENCOiBjYXNlIDB4Q0M6IGNhc2UgMHhD
RDoJLyoga2V5cGFkIDQsNSw2ICovCi0JCWNhc2UgMHhDRjogY2FzZSAweEQwOiBjYXNlIDB4RDE6
CS8qIGtleXBhZCAxLDIsMyAqLworCQkJLyoKKwkJCSAqIGtleSByZWxlYXNlZCwgbm8gaW50ZXJl
c3QgaGVyZSAKKwkJCSAqLworCQljYXNlIDB4Qzc6CisJCWNhc2UgMHhDODoKKwkJY2FzZSAweEM5
OgkvKiBrZXlwYWQgNyw4LDkgKi8KKwkJY2FzZSAweENCOgorCQljYXNlIDB4Q0M6CisJCWNhc2Ug
MHhDRDoJLyoga2V5cGFkIDQsNSw2ICovCisJCWNhc2UgMHhDRjoKKwkJY2FzZSAweEQwOgorCQlj
YXNlIDB4RDE6CS8qIGtleXBhZCAxLDIsMyAqLwogCQljYXNlIDB4RDI6CQkJCS8qIGtleXBhZCAw
ICovCiAJCQlnb3RvIG5leHRfY29kZTsKIApAQCAtNzQwLDcgKzk0MCw5IEBACiAJCX0KIAl9CiAK
LQkvKiBrZXljb2RlIHRvIGtleSBhY3Rpb24gKi8KKwkvKgorCSAqIGtleWNvZGUgdG8ga2V5IGFj
dGlvbiAKKwkgKi8KIAlhY3Rpb24gPSBnZW5rYmRfa2V5YWN0aW9uKGtiZCwga2V5Y29kZSwgc2Nh
bmNvZGUgJiAweDgwLAogCQkJJnN0YXRlLT5rc19zdGF0ZSwgJnN0YXRlLT5rc19hY2NlbnRzKTsK
IAlpZiAoYWN0aW9uID09IE5PS0VZKQpAQCAtNzUxLDEyICs5NTMsMTUgQEAKIAlyZXR1cm4gKGFj
dGlvbik7CiB9CiAKLS8qIENoZWNrIGlmIGNoYXIgaXMgd2FpdGluZyAqLworLyoKKyAqIENoZWNr
IGlmIGNoYXIgaXMgd2FpdGluZyAKKyAqLwogc3RhdGljIGludAoga2JkbXV4X2NoZWNrX2NoYXIo
a2V5Ym9hcmRfdCAqa2JkKQogewogCWtiZG11eF9zdGF0ZV90CSpzdGF0ZSA9IChrYmRtdXhfc3Rh
dGVfdCAqKSBrYmQtPmtiX2RhdGE7CiAJaW50CQkgcmVhZHk7CisJS0JETVVYX0xPQ0tfREVDTF9M
T0NBTDsKIAogCWlmICghS0JEX0lTX0FDVElWRShrYmQpKQogCQlyZXR1cm4gKEZBTFNFKTsKQEAg
LTc3MywxMyArOTc4LDE2IEBACiAJcmV0dXJuIChyZWFkeSk7CiB9CiAKLS8qIEtleWJvYXJkIGlv
Y3RsJ3MgKi8KKy8qCisgKiBLZXlib2FyZCBpb2N0bCdzIAorICovCiBzdGF0aWMgaW50CiBrYmRt
dXhfaW9jdGwoa2V5Ym9hcmRfdCAqa2JkLCB1X2xvbmcgY21kLCBjYWRkcl90IGFyZykKIHsKIAlr
YmRtdXhfc3RhdGVfdAkqc3RhdGUgPSAoa2JkbXV4X3N0YXRlX3QgKikga2JkLT5rYl9kYXRhOwog
CWtiZG11eF9rYmRfdAkqayA9IE5VTEw7CiAJaW50CQkgZXJyb3IgPSAwLCBtb2RlOworCUtCRE1V
WF9MT0NLX0RFQ0xfTE9DQUw7CiAKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIChFTlhJ
Tyk7CkBAIC03ODgsOCArOTk2LDggQEAKIAljYXNlIEtCRE1VWF9BRERLQkQ6IC8qIGFkZCBrZXli
b2FyZCB0byB0aGUgbXV4ICovCiAJCUtCRE1VWF9MT0NLKHN0YXRlKTsKIAotCQlTTElTVF9GT1JF
QUNIKGssICZzdGF0ZS0+a3Nfa2JkcywgbmV4dCkKLQkJCWlmIChrLT5pZHggPT0gKigoaW50ICop
IGFyZykpCisJCVNMSVNUX0ZPUkVBQ0goaywgJnN0YXRlLT5rc19rYmRzLAorCQkJICAgICAgbmV4
dCkgaWYgKGstPmlkeCA9PSAqKChpbnQgKilhcmcpKQogCQkJCWJyZWFrOwogCiAJCWlmIChrICE9
IE5VTEwpIHsKQEAgLTg0NywxNCArMTA1NSwxNSBAQAogCWNhc2UgS0JETVVYX1JFTEtCRDogLyog
cmVsZWFzZSBrZXlib2FyZCBmcm9tIHRoZSBtdXggKi8KIAkJS0JETVVYX0xPQ0soc3RhdGUpOwog
Ci0JCVNMSVNUX0ZPUkVBQ0goaywgJnN0YXRlLT5rc19rYmRzLCBuZXh0KQotCQkJaWYgKGstPmlk
eCA9PSAqKChpbnQgKikgYXJnKSkKKwkJU0xJU1RfRk9SRUFDSChrLCAmc3RhdGUtPmtzX2tiZHMs
CisJCQkgICAgICBuZXh0KSBpZiAoay0+aWR4ID09ICooKGludCAqKWFyZykpCiAJCQkJYnJlYWs7
CiAKIAkJaWYgKGsgIT0gTlVMTCkgewogCQkJZXJyb3IgPSBrYmRfcmVsZWFzZShrLT5rYmQsICZr
LT5rYmQpOwogCQkJaWYgKGVycm9yID09IDApIHsKLQkJCQlTTElTVF9SRU1PVkUoJnN0YXRlLT5r
c19rYmRzLCBrLCBrYmRtdXhfa2JkLCBuZXh0KTsKKwkJCQlTTElTVF9SRU1PVkUoJnN0YXRlLT5r
c19rYmRzLCBrLCBrYmRtdXhfa2JkLAorCQkJCQkgICAgIG5leHQpOwogCiAJCQkJay0+a2JkID0g
TlVMTDsKIAkJCQlrLT5pZHggPSAtMTsKQEAgLTg3OSwxMSArMTA4OCwxNSBAQAogCQlzd2l0Y2gg
KCooKGludCAqKSBhcmcpKSB7CiAJCWNhc2UgS19YTEFURToKIAkJCWlmIChzdGF0ZS0+a3NfbW9k
ZSAhPSBLX1hMQVRFKSB7Ci0JCQkJLyogbWFrZSBsb2NrIGtleSBzdGF0ZSBhbmQgTEVEIHN0YXRl
IG1hdGNoICovCisJCQkJLyoKKwkJCQkgKiBtYWtlIGxvY2sga2V5IHN0YXRlIGFuZCBMRUQgc3Rh
dGUgbWF0Y2ggCisJCQkJICovCiAJCQkJc3RhdGUtPmtzX3N0YXRlICY9IH5MT0NLX01BU0s7CiAJ
CQkJc3RhdGUtPmtzX3N0YXRlIHw9IEtCRF9MRURfVkFMKGtiZCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBGQUxMVEhST1VHSCAqLworCQkJ
LyoKKwkJCSAqIEZBTExUSFJPVUdIIAorCQkJICovCiAKIAkJY2FzZSBLX1JBVzoKIAkJY2FzZSBL
X0NPREU6CkBAIC05MTAsNyArMTEyMyw5IEBACiAJY2FzZSBLRFNFVExFRDogLyogc2V0IGtleWJv
YXJkIExFRCAqLwogCQlLQkRNVVhfTE9DSyhzdGF0ZSk7CiAKLQkJLyogTk9URTogbG9jayBrZXkg
c3RhdGUgaW4ga3Nfc3RhdGUgd29uJ3QgYmUgY2hhbmdlZCAqLworCQkvKgorCQkgKiBOT1RFOiBs
b2NrIGtleSBzdGF0ZSBpbiBrc19zdGF0ZSB3b24ndCBiZSBjaGFuZ2VkIAorCQkgKi8KIAkJaWYg
KCooKGludCAqKSBhcmcpICYgfkxPQ0tfTUFTSykgewogCQkJS0JETVVYX1VOTE9DSyhzdGF0ZSk7
CiAKQEAgLTk0Myw3ICsxMTU4LDkgQEAKIAkJS0JETVVYX1VOTE9DSyhzdGF0ZSk7CiAKIAkJcmV0
dXJuIChrYmRtdXhfaW9jdGwoa2JkLCBLRFNFVExFRCwgYXJnKSk7Ci0JCS8qIE5PVCBSRUFDSEVE
ICovCisJCS8qCisJCSAqIE5PVCBSRUFDSEVEIAorCQkgKi8KIAogCWNhc2UgS0RTRVRSRVBFQVQ6
IC8qIHNldCBrZXlib2FyZCByZXBlYXQgcmF0ZSAobmV3IGludGVyZmFjZSkgKi8KIAkJYnJlYWs7
CkBAIC05NTcsNyArMTE3NCw5IEBACiAJCUtCRE1VWF9MT0NLKHN0YXRlKTsKICAgICAgICAgICAg
ICAgICBzdGF0ZS0+a3NfYWNjZW50cyA9IDA7CiAJCUtCRE1VWF9VTkxPQ0soc3RhdGUpOwotICAg
ICAgICAgICAgICAgIC8qIEZBTExUSFJPVUdIICovCisJCS8qCisJCSAqIEZBTExUSFJPVUdIIAor
CQkgKi8KIAogCWRlZmF1bHQ6CiAJCWVycm9yID0gZ2Vua2JkX2NvbW1vbmlvY3RsKGtiZCwgY21k
LCBhcmcpOwpAQCAtOTY3LDE0ICsxMTg2LDE4IEBACiAJcmV0dXJuIChlcnJvcik7CiB9CiAKLS8q
IExvY2sgdGhlIGFjY2VzcyB0byB0aGUga2V5Ym9hcmQgKi8KKy8qCisgKiBMb2NrIHRoZSBhY2Nl
c3MgdG8gdGhlIGtleWJvYXJkIAorICovCiBzdGF0aWMgaW50CiBrYmRtdXhfbG9jayhrZXlib2Fy
ZF90ICprYmQsIGludCBsb2NrKQogewogCXJldHVybiAoMSk7IC8qIFhYWCAqLwogfQogCi0vKiBD
bGVhciB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGtleWJvYXJkICovCisvKgorICogQ2xlYXIg
dGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBrZXlib2FyZCAKKyAqLwogc3RhdGljIHZvaWQKIGti
ZG11eF9jbGVhcl9zdGF0ZV9sb2NrZWQoa2JkbXV4X3N0YXRlX3QgKnN0YXRlKQogewpAQCAtOTg0
LDcgKzEyMDcsOSBAQAogCXN0YXRlLT5rc19zdGF0ZSAmPSBMT0NLX01BU0s7CS8qIHByZXNlcnZl
IGxvY2tpbmcga2V5IHN0YXRlICovCiAJc3RhdGUtPmtzX2FjY2VudHMgPSAwOwogCXN0YXRlLT5r
c19jb21wb3NlZF9jaGFyID0gMDsKLS8qCXN0YXRlLT5rc19wcmVmaXggPSAwOwkJWFhYICovCisJ
LyoKKwkgKiBzdGF0ZS0+a3NfcHJlZml4ID0gMDsgWFhYIAorCSAqLwogCiAJbmRmbHVzaCgmc3Rh
dGUtPmtzX2lucSwgc3RhdGUtPmtzX2lucS5jX2NjKTsKIH0KQEAgLTk5MywxMyArMTIxOCwxNiBA
QAoga2JkbXV4X2NsZWFyX3N0YXRlKGtleWJvYXJkX3QgKmtiZCkKIHsKIAlrYmRtdXhfc3RhdGVf
dAkqc3RhdGUgPSAoa2JkbXV4X3N0YXRlX3QgKikga2JkLT5rYl9kYXRhOworCUtCRE1VWF9MT0NL
X0RFQ0xfTE9DQUw7CiAKIAlLQkRNVVhfTE9DSyhzdGF0ZSk7CiAJa2JkbXV4X2NsZWFyX3N0YXRl
X2xvY2tlZChzdGF0ZSk7CiAJS0JETVVYX1VOTE9DSyhzdGF0ZSk7CiB9CiAKLS8qIFNhdmUgdGhl
IGludGVybmFsIHN0YXRlICovCisvKgorICogU2F2ZSB0aGUgaW50ZXJuYWwgc3RhdGUgCisgKi8K
IHN0YXRpYyBpbnQKIGtiZG11eF9nZXRfc3RhdGUoa2V5Ym9hcmRfdCAqa2JkLCB2b2lkICpidWYs
IHNpemVfdCBsZW4pCiB7CkBAIC0xMDA4LDI4ICsxMjM2LDM1IEBACiAJaWYgKGxlbiA8IHNpemVv
ZihrYmRtdXhfc3RhdGVfdCkpCiAJCXJldHVybiAoLTEpOwogCi0JYmNvcHkoa2JkLT5rYl9kYXRh
LCBidWYsIHNpemVvZihrYmRtdXhfc3RhdGVfdCkpOyAvKiBYWFggbG9ja2luZz8gKi8KKwliY29w
eShrYmQtPmtiX2RhdGEsIGJ1Ziwgc2l6ZW9mKGtiZG11eF9zdGF0ZV90KSk7CS8qIFhYWAorCQkJ
CQkJCQkgKiBsb2NraW5nPyAqLwogCiAJcmV0dXJuICgwKTsKIH0KIAotLyogU2V0IHRoZSBpbnRl
cm5hbCBzdGF0ZSAqLworLyoKKyAqIFNldCB0aGUgaW50ZXJuYWwgc3RhdGUgCisgKi8KIHN0YXRp
YyBpbnQKIGtiZG11eF9zZXRfc3RhdGUoa2V5Ym9hcmRfdCAqa2JkLCB2b2lkICpidWYsIHNpemVf
dCBsZW4pCiB7CiAJaWYgKGxlbiA8IHNpemVvZihrYmRtdXhfc3RhdGVfdCkpCiAJCXJldHVybiAo
RU5PTUVNKTsKIAotCWJjb3B5KGJ1Ziwga2JkLT5rYl9kYXRhLCBzaXplb2Yoa2JkbXV4X3N0YXRl
X3QpKTsgLyogWFhYIGxvY2tpbmc/ICovCisJYmNvcHkoYnVmLCBrYmQtPmtiX2RhdGEsIHNpemVv
ZihrYmRtdXhfc3RhdGVfdCkpOwkvKiBYWFgKKwkJCQkJCQkJICogbG9ja2luZz8gKi8KIAogCXJl
dHVybiAoMCk7CiB9CiAKLS8qIFNldCBwb2xsaW5nICovCisvKgorICogU2V0IHBvbGxpbmcgCisg
Ki8KIHN0YXRpYyBpbnQKIGtiZG11eF9wb2xsKGtleWJvYXJkX3QgKmtiZCwgaW50IG9uKQogewog
CWtiZG11eF9zdGF0ZV90CSpzdGF0ZSA9IE5VTEw7CisJS0JETVVYX0xPQ0tfREVDTF9MT0NBTDsK
IAogCXN0YXRlID0gKGtiZG11eF9zdGF0ZV90ICopIGtiZC0+a2JfZGF0YTsKIApAQCAtMTEwMiwx
MiArMTMzNywxNCBAQAogCQlicmVhazsKIAogCWNhc2UgTU9EX1VOTE9BRDoKLQkJaWYgKChzdyA9
IGtiZF9nZXRfc3dpdGNoKEtFWUJPQVJEX05BTUUpKSA9PSBOVUxMKQotCQkJcGFuaWMoImtiZF9n
ZXRfc3dpdGNoKCIgS0VZQk9BUkRfTkFNRSAiKSA9PSBOVUxMIik7CisJCXN3ID0ga2JkX2dldF9z
d2l0Y2goS0VZQk9BUkRfTkFNRSk7CisJCUFTU0VSVChzdyAhPSBOVUxMLAorCQkgICAgICAgImti
ZF9nZXRfc3dpdGNoKCIgS0VZQk9BUkRfTkFNRSAiKSA9PSBOVUxMIik7CiAKIAkJa2JkID0ga2Jk
X2dldF9rZXlib2FyZChrYmRfZmluZF9rZXlib2FyZChLRVlCT0FSRF9OQU1FLCAwKSk7Ci0JCWlm
IChrYmQgPT0gTlVMTCkKLQkJCSBwYW5pYygia2JkX2dldF9rZXlib2FyZChrYmRfZmluZF9rZXli
b2FyZCgiIEtFWUJPQVJEX05BTUUgIiwgMCkpID09IE5VTEwiKTsKKwkJQVNTRVJUKGtiZCAhPSBO
VUxMLAorCQkgICAgICAgImtiZF9nZXRfa2V5Ym9hcmQoa2JkX2ZpbmRfa2V5Ym9hcmQoIiBLRVlC
T0FSRF9OQU1FCisJCSAgICAgICAiLCAwKSkgPT0gTlVMTCIpOwogCiAJCSgqc3ctPmRpc2FibGUp
KGtiZCk7CiAJCWtiZF9kZXRhY2goa2JkKTsKQEAgLTExMjUsNCArMTM2MiwzIEBACiB9CiAKIERF
Vl9NT0RVTEUoa2JkbXV4LCBrYmRtdXhfbW9kZXZlbnQsIE5VTEwpOwotCg==

------=_NextPart_000_0001_01C57009.C3632B40
Content-Type: application/octet-stream;
	name="dev_debug.h"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="dev_debug.h"

LyoKICogJEhlYWRlcjogL3Vzci9sb2NhbC9jdnMvZGV2X2RlYnVnL2Rldl9kZWJ1Zy5oLHYgMS42
IDIwMDUvMDUvMzEgMTQ6Mjk6MjIgbmsgRXhwICQKICoKICogICAgQ09QWVJJR0hUKGMpIDIwMDMs
MjAwNCwyMDA1IGJ5IGRlbWlnIFByb3plc3NhdXRvbWF0aXNpZXJ1bmcgR21iSCAKICogICAgICB8
XCAgL3wgIEhhYXJkdHN0cmFzc2UgNDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAqICAgICAgfF9cLyB8ICBELTU3MDc2IFNpZWdlbiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogKiAgICAgIHwgL1wgfCAgR2VybWFueSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICogICAgICB8LyAgXHwgIGh0dHA6Ly93d3cuZGVtaWcuZGUg
IGluZm9AZGVtaWcuZGUgICAgICAgICAgICAgICAgCiAqLwoKCiNpZm5kZWYgREVWX0RFQlVHX0gK
I2RlZmluZSBERVZfREVCVUdfSAoKCiNpZm5kZWYgREVCVUcKI2Vycm9yICAiREVCVUcgbm90IGRl
ZmluZWQiCiNlbmRpZgojaWZuZGVmIFZFUkJPU0UKI2Vycm9yICAiVkVSQk9TRSBub3QgZGVmaW5l
ZCIKI2VuZGlmCiNpZm5kZWYgREVCVUdfVVNFU1lTTE9HCiNlcnJvciAgIkRFQlVHX1VTRVNZU0xP
RyBub3QgZGVmaW5lZCIKI2VuZGlmCiNpZm5kZWYgREVCVUdfVEFHCiNlcnJvciAgIkRFQlVHX1RB
RyBub3QgZGVmaW5lZCIKI2VuZGlmCgoKI2RlZmluZSBDQVQoeCx5KSAgICAgICAgeCMjeQojZGVm
aW5lIFhDQVQoeCx5KSAgICAgICBDQVQgKHgseSkKI2RlZmluZSBTVFIoeCkgICN4CiNkZWZpbmUg
WFNUUih4KSBTVFIgKHgpCgoKI2lmIERFQlVHCiNkZWZpbmUgSU5MSU5FCiNlbHNlCiNkZWZpbmUg
SU5MSU5FICBfX2lubGluZQojZW5kaWYKCgojaWYgREVCVUdfVVNFU1lTTE9HCgojaW5jbHVkZSA8
c3lzL3N5c2xvZy5oPgojZGVmaW5lIExPRyh0eHQsIGFyZ3MuLi4pICAgICAgIGxvZyAoTE9HX0RF
QlVHLCB0eHQsICMjIGFyZ3MpCgojZWxzZQoKI2RlZmluZSBMT0codHh0LCBhcmdzLi4uKSAgICAg
ICBwcmludGYgKHR4dCwgIyMgYXJncykKCiNlbmRpZgoKCiNpZiBkZWZpbmVkIChOREVCVUcpCiNk
ZWZpbmUgREVCVUdQUklOVEYwKGV4cHIsIGZ1bmMsIHR4dCwgYXJncy4uLikgICAgICAgICAgXAog
IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICBpZiAoZXhwcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgZnVuYyAoWFNUUiAoREVCVUdfVEFHKSAiOiAiIHR4dCwgIyMgYXJncyk7ICAgICAg
ICBcCiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICB3aGlsZSAoRkFMU0UpCiNlbHNlCiNkZWZpbmUgREVCVUdQUklOVEYwKGV4cHIsIGZ1
bmMsIHR4dCwgYXJncy4uLikgICAgICAgICAgXAogIGRvICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBpZiAoZXhwcikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgZnVuYyAoWFNUUiAoX19GSUxF
X18pIiwgIiBYU1RSIChfX0xJTkVfXykgIjogIiAgICBcCiAgICAgICAgICAgIHR4dCwgIyMgYXJn
cyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgd2hpbGUgKEZBTFNFKQojZW5k
aWYKCgojaWYgZGVmaW5lZCAoTkRFQlVHKQojZGVmaW5lIEFTU0VSVChleHByLCB0eHQsIGFyZ3Mu
Li4pCiNlbHNlCiNkZWZpbmUgQVNTRVJUKGV4cHIsIHR4dCwgYXJncy4uLikgXAogIERFQlVHUFJJ
TlRGMCAoISAoZXhwciksIHBhbmljLCB0eHQsICMjIGFyZ3MpCiNlbmRpZgoKCiNpZiBWRVJCT1NF
CiNkZWZpbmUgdnByaW50Zih0eHQsIGFyZ3MuLi4pIFwKICBERUJVR1BSSU5URjAgKFRSVUUsIHBy
aW50ZiwgdHh0LCAjIyBhcmdzKQojZWxzZQojZGVmaW5lIHZwcmludGYodHh0LCBhcmdzLi4uKQoj
ZW5kaWYKCgojZGVmaW5lIERFQlVHUFJJTlRGKGx2bCwgY21wLCB0eHQsIGFyZ3MuLi4pICAgICAg
IFwKICBERUJVR1BSSU5URjAgKGNtcCA+PSBsdmwsIExPRywgdHh0LCAjIyBhcmdzKQoKCiNkZWZp
bmUgREVCVUdfVkFSX1NDT1BFICAgICAgICAgc3RhdGljCiNkZWZpbmUgREVCVUdfVkFSX1RZUEUg
ICAgICAgICAgaW50CiNkZWZpbmUgREVCVUdfVkFSX1NZU0NUTCAgICAgICAgU1lTQ1RMX1VJTlQK
I2RlZmluZSBERUJVR19WQVJfTkFNRSh0YWcpICAgICBYQ0FUICh0YWcsIF9kZWJ1ZykKCgojaWYg
REVCVUcKCiNpZiBkZWZpbmVkIChOREVCVUcpCiNkZWZpbmUgREVCVUdfVkFSX0RFQ0wodGFnLCBs
dmwpICAgICAgICAgICAgICAgIFwKREVCVUdfVkFSX1NDT1BFIERFQlVHX1ZBUl9UWVBFIERFQlVH
X1ZBUl9OQU1FICh0YWcpID0gMAojZWxzZQojZGVmaW5lIERFQlVHX1ZBUl9ERUNMKHRhZywgbHZs
KSAgICAgICAgICAgICAgICBcCkRFQlVHX1ZBUl9TQ09QRSBERUJVR19WQVJfVFlQRSBERUJVR19W
QVJfTkFNRSAodGFnKSA9IGx2bAojZW5kaWYKCiNkZWZpbmUgRFBSSU5URih0YWcsIGx2bCwgdHh0
LCBhcmdzLi4uKSAgICAgICAgIFwKICBERUJVR1BSSU5URiAobHZsLCBERUJVR19WQVJfTkFNRSAo
dGFnKSwgdHh0LCAjIyBhcmdzKQoKI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KCiNkZWZpbmUgREVC
VUdfU1lTQ1RMKHRhZykgICAgICAgICAgICAgICAgICAgICAgIFwKREVCVUdfVkFSX1NZU0NUTCAo
X2RlYnVnLCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICBPSURfQVVU
TywgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgIFhDQVQgKHRhZywgX2Rl
YnVnKSwgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgQ1RMRkxBR19SVywgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICAgICAgICAgICAmIERFQlVHX1ZBUl9OQU1FICh0YWcpLCAgICAg
ICBcCiAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgICAgICAgICAgWENBVCAoWFNUUiAodGFnKSwgIiBkZWJ1ZyIpKQoKCiNlbHNlCgojZGVm
aW5lIERFQlVHX1ZBUl9ERUNMKHRhZywgbHZsKQojZGVmaW5lIERFQlVHX1NZU0NUTCh0YWcpCiNk
ZWZpbmUgRFBSSU5URih0YWcsIGx2bCwgdHh0LCBhcmdzLi4uKQoKI2VuZGlmCgoKI2RlZmluZSBk
ZWJ1Z192YXJfZGVjbChsdmwpICAgICBERUJVR19WQVJfREVDTCAoREVCVUdfVEFHLCBsdmwpCiNk
ZWZpbmUgZGVidWdfc3lzY3RsKCkgICAgICAgICAgREVCVUdfU1lTQ1RMIChERUJVR19UQUcpCiNk
ZWZpbmUgZHByaW50ZihsdmwsIHR4dCwgYXJncy4uLikgICAgICAgICAgICAgIFwKICBEUFJJTlRG
IChERUJVR19UQUcsIGx2bCwgdHh0LCAjIyBhcmdzKQoKCiNlbmRpZgo=

------=_NextPart_000_0001_01C57009.C3632B40--




Want to link to this message? Use this URL: <http://docs.FreeBSD.org/cgi/mid.cgi?000001c56ff8$ffda5b40$4801a8c0>