Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 May 2010 23:01:10 +0300
From:      Maxim Ignatenko <gelraen.ua@gmail.com>
To:        Julian Elischer <julian@elischer.org>, Alexander Motin <mav@freebsd.org>
Cc:        freebsd-net@freebsd.org
Subject:   Re: ng_patch node
Message-ID:  <AANLkTilcaZYw26Rs-jbCpNZXjREdG0_UpRzNs2v0DxC7@mail.gmail.com>
In-Reply-To: <4B4BBE59.9010908@elischer.org>
References:  <ac42db051001111440p7b460641g855e4264d9433f58@mail.gmail.com>  <4B4BBE59.9010908@elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--0016e6d77f74e05a000486cfb045
Content-Type: text/plain; charset=UTF-8

Extended and improved version of ng_patch node:
1) added new operations ('*', '/', unary '-', '<<', '>>')
2) single node now able to apply arbitrary number of changes
3) m_pullup replaced with m_copydata/m_copyback
4) ntoh/hton used to apply changes correctly
5) checksum handling
6) added some stats

--0016e6d77f74e05a000486cfb045
Content-Type: application/octet-stream; name="ng_patch.diff"
Content-Disposition: attachment; filename="ng_patch.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g9bepv970

SW5kZXg6IHNoYXJlL21hbi9tYW40L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNoYXJlL21hbi9t
YW40L01ha2VmaWxlCShyZXZpc2lvbiAyMDYzNDUpCisrKyBzaGFyZS9tYW4vbWFuNC9NYWtlZmls
ZQkod29ya2luZyBjb3B5KQpAQCAtMjY3LDYgKzI2Nyw3IEBACiAJbmdfbmF0LjQgXAogCW5nX25l
dGZsb3cuNCBcCiAJbmdfb25lMm1hbnkuNCBcCisJbmdfcGF0Y2guNCBcCiAJbmdfcHBwLjQgXAog
CW5nX3BwcG9lLjQgXAogCW5nX3BwdHBncmUuNCBcCkluZGV4OiBzaGFyZS9tYW4vbWFuNC9uZ19w
YXRjaC40Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHNoYXJlL21hbi9tYW40L25nX3BhdGNoLjQJKHJldmlzaW9u
IDApCisrKyBzaGFyZS9tYW4vbWFuNC9uZ19wYXRjaC40CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzNSBAQAorLlwiIENvcHlyaWdodCAoYykgMjAxMCBNYXhpbSBJZ25hdGVua28gPGdlbHJhZW4u
dWFAZ21haWwuY29tPgorLlwiIENvcHlyaWdodCAoYykgMjAxMCBWYWRpbSBHb25jaGFyb3YgPHZh
ZGltbnVjbGlnaHRAdHB1LnJ1PgorLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisuXCIKKy5cIiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisuXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisuXCIgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKy5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorLlwiIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisuXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMKKy5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKy5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisuXCIgU1VDSCBE
QU1BR0UuCisuXCIKKy5cIiAkRnJlZUJTRCQKKy5cIgorLkRkIEphbnVhcnkgNiwgMjAxMAorLkR0
IE5HX1BBVENIIDQKKy5PcworLlNoIE5BTUUKKy5ObSBuZ19wYXRjaAorLk5kICJ0cml2aWFsIG1i
dWYgZGF0YSBtb2RpZnlpbmcgbmV0Z3JhcGggbm9kZSB0eXBlIgorLlNoIFNZTk9QU0lTCisuSW4g
bmV0Z3JhcGgvbmdfcGF0Y2guaAorLlNoIERFU0NSSVBUSU9OCitUaGUKKy5ObSBwYXRjaAorbm9k
ZSBwZXJmb3JtcyBkYXRhIG1vZGlmaWNhdGlvbiBvZiBwYWNrZXRzIHBhc3NpbmcgdGhyb3VnaCBp
dC4KK01vZGlmaWNhdGlvbnMgYXJlIHJlc3RyaWN0ZWQgdG8gYSBzdWJzZXQgb2YgQyBsYW5ndWFn
ZSBvcGVyYXRpb25zCitvbiB1bnNpZ25lZCBpbnRlZ2VycyBvZiA4LCAxNiwgMzIgb3IgNjQgYml0
IHNpemUuCitUaGVzZSBhcmU6IHNldCB0byBuZXcgdmFsdWUgKD0pLCBhZGRpdGlvbiAoKz0pLCBz
dWJ0cmFjdGlvbiAoLT0pLAorbXVsdGlwbGljYXRpb24gKCo9KSwgZGl2aXNpb24gKC89KSwgbmVn
YXRpb24gKD0gLSksCitiaXR3aXNlIEFORCAoJj0pLCBiaXR3aXNlIE9SICh8PSksIGJpdHdpc2Ug
ZVhjbHVzaXZlIE9SIChePSksCitzaGlmdCBsZWZ0ICg8PD0pLCBzaGlmdCByaWdodCAoPj49KS4K
K0EgbmVnYXRpb24gb3BlcmF0aW9uIGlzIHRoZSBvbmUgZXhjZXB0aW9uOiBpbnRlZ2VyIGlzIHRy
ZWF0ZWQgYXMgc2lnbmVkCithbmQgc2Vjb25kIG9wZXJhbmQgKHRoZQorLlZhIHZhbHVlICkKK2lz
IG5vdCB1c2VkLgorVGhlcmUgbWF5IGJlIHNldmVyYWwgbW9kaWZpY2F0aW9uIG9wZXJhdGlvbnMs
IHRoZXkgYXJlIGFsbCBhcHBsaWVkCit0byBhIHBhY2tldCBzZXF1ZW50aWFsbHkgaW4gb3JkZXIg
dGhleSB3ZXJlIHNwZWNpZmllZCBieSB1c2VyLgorRGF0YSBwYXlsb2FkIG9mIHBhY2tldCBpcyB2
aWV3ZWQgYXMgYXJyYXkgb2YgYnl0ZXMsIHdpdGggemVybyBvZmZzZXQKK2NvcnJlc3BvbmRpbmcg
dG8gdGhlIHZlcnkgZmlyc3QgYnl0ZSBvZiBwYWNrZXQgaGVhZGVycywgYW5kCisuVmEgbGVuZ3Ro
CitieXRlcyBiZWdpbm5pbmcgZnJvbQorLlZhIG9mZnNldAorYXJlIHRha2VuIGFzIGEgc2luZ2xl
IGludGVnZXIgaW4gbmV0d29yayBieXRlIG9yZGVyLgorLlNoIEhPT0tTCitUaGlzIG5vZGUgdHlw
ZSBoYXMgdHdvIGhvb2tzOgorLkJsIC10YWcgLXdpZHRoIGluZGVudAorLkl0IFZhIGluCitQYWNr
ZXRzIHJlY2VpdmVkIG9uIHRoaXMgaG9vayBhcmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIHJ1bGVz
IHNwZWNpZmllZAoraW4gY29uZmlnIGFuZCB0aGVuIGZvcndhcmRlZCB0bworLkFyIG91dAoraG9v
aywgaWYgaXQgZXhpc3RzIGFuZCBjb25uZWN0ZWQuCitPdGhlcndpc2UgdGhleSBhcmUgcmVmbGVj
dGVkIGJhY2sgdG8gdGhlCisuQXIgaW4KK2hvb2suCisuSXQgVmEgb3V0CitQYWNrZXRzIHJlY2Vp
dmVkIG9uIHRoaXMgaG9vayBhcmUgZm9yd2FyZGVkIHRvCisuQXIgaW4KK2hvb2sgd2l0aG91dCBh
bnkgY2hhbmdlcy4KKy5FbAorLlNoIENPTlRST0wgTUVTU0FHRVMKK1RoaXMgbm9kZSB0eXBlIHN1
cHBvcnRzIHRoZSBnZW5lcmljIGNvbnRyb2wgbWVzc2FnZXMsIHBsdXMgdGhlIGZvbGxvd2luZzoK
Ky5CbCAtdGFnIC13aWR0aCBpbmRlbnQKKy5JdCBEdiBOR01fUEFUQ0hfU0VUQ09ORklHIFBxIExp
IHNldGNvbmZpZworVGhpcyBjb21tYW5kIHNldHMgdGhlIHNlcXVlbmNlIG9mIG1vZGlmeSBvcGVy
YXRpb25zCit0aGF0IHdpbGwgYmUgYXBwbGllZCB0byBpbmNvbWluZyBkYXRhIG9uIGEgaG9vay4K
K1RoZSBmb2xsb3dpbmcKKy5WdCAic3RydWN0IG5nX3BhdGNoX2NvbmZpZyIKK211c3QgYmUgc3Vw
cGxpZWQgYXMgYW4gYXJndW1lbnQ6CisuQmQgLWxpdGVyYWwgLW9mZnNldCA0bgorc3RydWN0IG5n
X3BhdGNoX29wIHsKKwl1aW50NjRfdAl2YWx1ZTsKKwl1aW50MzJfdAlvZmZzZXQ7CisJdWludDE2
X3QJbGVuZ3RoOyAvKiAxLDIsNCBvciA4IGJ5dGVzICovCisJdWludDE2X3QJbW9kZTsKK307Cisv
KiBQYXRjaGluZyBtb2RlcyAqLworI2RlZmluZSBOR19QQVRDSF9NT0RFX1NFVAkxCisjZGVmaW5l
IE5HX1BBVENIX01PREVfQURECTIKKyNkZWZpbmUgTkdfUEFUQ0hfTU9ERV9TVUIJMworI2RlZmlu
ZSBOR19QQVRDSF9NT0RFX01VTAk0CisjZGVmaW5lIE5HX1BBVENIX01PREVfRElWCTUKKyNkZWZp
bmUgTkdfUEFUQ0hfTU9ERV9ORUcJNgorI2RlZmluZSBOR19QQVRDSF9NT0RFX0FORAk3CisjZGVm
aW5lIE5HX1BBVENIX01PREVfT1IJOAorI2RlZmluZSBOR19QQVRDSF9NT0RFX1hPUgk5CisjZGVm
aW5lIE5HX1BBVENIX01PREVfU0hMCTEwCisjZGVmaW5lIE5HX1BBVENIX01PREVfU0hSCTExCisK
K3N0cnVjdCBuZ19wYXRjaF9jb25maWcgeworCXVpbnQzMl90CWNvdW50OworCXVpbnQzMl90CWNz
dW1fZmxhZ3M7CisJc3RydWN0IG5nX3BhdGNoX29wIG9wc1tdOworfTsKKy5FZAorLlBwCitUaGUK
Ky5WYSBjc3VtX2ZsYWdzCitjYW4gYmUgc2V0IHRvIGFueSBjb21iaW5hdGlvbiBvZiBDU1VNX0lQ
LCBDU1VNX1RDUCwgQ1NVTV9TQ1RQIGFuZCBDU1VNX1VEUAorKG90aGVyIHZhbHVlcyBhcmUgaWdu
b3JlZCkgZm9yIGluc3RydWN0aW5nIHRoZSBJUCBzdGFjayB0byByZWNhbGN1bGF0ZSB0aGUKK2Nv
cnJlc3BvbmRpbmcgY2hlY2tzdW0gYmVmb3JlIHRyYW5zbWl0dGluZyBwYWNrZXQgb24gb3V0cHV0
IGludGVyZmFjZS4KK1RoZQorLk5tCitub2RlIGRvZXMgbm90IGRvIGFueSBjaGVja3N1bSBjb3Jy
ZWN0aW9uIGJ5IGl0c2VsZi4KKy5JdCBEdiBOR01fUEFUQ0hfR0VUQ09ORklHIFBxIExpIGdldGNv
bmZpZworVGhpcyBjb250cm9sIG1lc3NhZ2Ugb2J0YWlucyBjdXJyZW50IHNldCBvZiBtb2RpZnkg
b3BlcmF0aW9ucywKK3JldHVybmVkIGFzCisuVnQgInN0cnVjdCBuZ19wYXRjaF9jb25maWciIC4K
Ky5JdCBEdiBOR01fUEFUQ0hfR0VUX1NUQVRTIFBxIExpIGdldHN0YXRzCitSZXR1cm5zIG5vZGUg
c3RhdGlzdGljcyBhcyBhCisuVnQgInN0cnVjdCBuZ19wYXRjaF9zdGF0cyIgLgorLkl0IER2IE5H
TV9QQVRDSF9DTFJfU1RBVFMgUHEgTGkgY2xyc3RhdHMKK0NsZWFyIG5vZGUgc3RhdGlzdGljcy4K
Ky5JdCBEdiBOR01fUEFUQ0hfR0VUQ0xSX1NUQVRTIFBxIExpIGdldGNscnN0YXRzCitUaGlzIGNv
bW1hbmQgaXMgaWRlbnRpY2FsIHRvCisuRHYgTkdNX1BBVENIX0dFVF9TVEFUUyAsCitleGNlcHQg
dGhhdCB0aGUgc3RhdGlzdGljcyBhcmUgYWxzbyBhdG9taWNhbGx5IGNsZWFyZWQuCisuRWwKKy5T
aCBTSFVURE9XTgorVGhpcyBub2RlIHNodXRzIGRvd24gdXBvbiByZWNlaXB0IG9mIGEKKy5EdiBO
R01fU0hVVERPV04KK2NvbnRyb2wgbWVzc2FnZSwgb3Igd2hlbiBhbGwgaG9va3MgaGF2ZSBiZWVu
IGRpc2Nvbm5lY3RlZC4KKy5TaCBFWEFNUExFUworVGhlCisuTm0KK25vZGUgYWxsb3dzIHRvIG1v
ZGlmeSBUVEwgYW5kIFRPUy9EU0NQIGZpZWxkcyBpbiBJUCBwYWNrZXRzLgorU3VwcG9zZSB5b3Ug
aGF2ZSB0d28gYWRqYWNlbnQgc2ltcGxleCBsaW5rcyB0byByZW1vdGUgbmV0d29yaworKGUuZy5c
JiBzYXRlbGxpdGUpLCBzbyB0aGF0IHRoZSBwYWNrZXRzIGV4cGlyaW5nIGluIGJldHdlZW4KK3dp
bGwgZ2VuZXJhdGUgdW53YW50ZWQgSUNNUC1yZXBsaWVzIHdoaWNoIGhhdmUgdG8gZ28gZm9ydGgs
IG5vdCBiYWNrLgorVGh1cyB5b3UgbmVlZCB0byByYWlzZSBUVEwgb2YgZXZlcnkgcGFja2V0IGVu
dGVyaW5nIGxpbmsgbGluayBieSAyCit0byBlbnN1cmUgdGhlIFRUTCB3aWxsIG5vdCByZWFjaCB6
ZXJvIHRoZXJlLgorU28geW91IHNldHVwCisuWHIgaXBmdyA4CitydWxlIHdpdGgKKy5DbSBuZXRn
cmFwaAorYWN0aW9uIHRvIGluamVjdCBwYWNrZXRzIGdvaW5nIHRvIG90aGVyIGVuZCBvZiBzaW1w
bGV4IGxpbmsgYnkgdGhlCitmb2xsb3dpbmcKKy5YciBuZ2N0bCA4CitzY3JpcHQ6CisuQmQgLWxp
dGVyYWwgLW9mZnNldCA0bgorL3Vzci9zYmluL25nY3RsIC1mLSA8PC1TRVEKKwlta3BlZXIgaXBm
dzogcGF0Y2ggMjAwIGluCisJbmFtZSBpcGZ3OjIwMCB0dGxfYWRkCisJbXNnIHR0bF9hZGQ6IHNl
dGNvbmZpZyB7IGNvdW50PTEgY3N1bV9mbGFncz0xIG9wcz1bCVxlCisJCXsgbW9kZT0yIHZhbHVl
PTMgbGVuZ3RoPTEgb2Zmc2V0PTggfSBdIH0KK1NFUQorL3NiaW4vaXBmdyBhZGQgMTUwIG5ldGdy
YXBoIDIwMCBpcCBmcm9tIGFueSB0byBzaW1wbGV4LnJlbW90ZS5uZXQKKy5FZAorLlBwCitIZXJl
CisuRHEgTGkgdHRsX2FkZAorbm9kZSBvZiB0eXBlCisuTm0KK2NvbmZpZ3VyZWQgdG8gYWRkICht
b2RlIAorLkR2IE5HX1BBVENIX01PREVfQUREICkKK2EKKy5WYSB2YWx1ZQorb2YgMyB0byBhIG9u
ZS1ieXRlIFRUTCBmaWVsZCwgd2hpY2ggaXMgOXRoIGJ5dGUgb2YgSVAgcGFja2V0IGhlYWRlci4K
Ky5QcAorQW5vdGhlciBleGFtcGxlIHdvdWxkIGJlIHR3byBjb25zZWN1dGl2ZSBtb2RpZmljYXRp
b25zIG9mIHBhY2tldCBUT1MKK2ZpZWxkOiBzYXksIHlvdSBuZWVkIHRvIGNsZWFyIHRoZQorLkR2
IElQVE9TX1RIUk9VR0hQVVQKK2JpdCBhbmQgc2V0IHRoZQorLkR2IElQVE9TX01JTkNPU1QKK2Jp
dC4KK1NvIHlvdSBkbzoKKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0IDRuCisvdXNyL3NiaW4vbmdjdGwg
LWYtIDw8LVNFUQorCW1rcGVlciBpcGZ3OiBwYXRjaCAzMDAgaW4KKwluYW1lIGlwZnc6MzAwIHRv
c19jaGcKKwltc2cgdG9zX2NoZzogc2V0Y29uZmlnIHsgY291bnQ9MiBjc3VtX2ZsYWdzPTEgb3Bz
PVsJXGUKKwkJeyBtb2RlPTcgdmFsdWU9MHhmNyBsZW5ndGg9MSBvZmZzZXQ9MSB9CQlcZQorCQl7
IG1vZGU9OCB2YWx1ZT0weDAyIGxlbmd0aD0xIG9mZnNldD0xIH0gXSB9CitTRVEKKy9zYmluL2lw
ZncgYWRkIDE2MCBuZXRncmFwaCA2MDAgaXAgZnJvbSBhbnkgdG8gYW55IG5vdCBkc3QtcG9ydCA4
MAorLkVkCisuUHAKK1RoaXMgZmlyc3QgZG9lcworLkR2IE5HX1BBVENIX01PREVfQU5ECitjbGVh
cmluZyB0aGUgZm91cnRoIGJpdCBhbmQgdGhlbgorLkR2IE5HX1BBVENIX01PREVfT1IKK3NldHRp
bmcgdGhlIHRoaXJkIGJpdC4KKy5QcAorSW4gYm90aCBleGFtcGxlcyB0aGUKKy5WYSBjc3VtX2Zs
YWdzCitmaWVsZCBpbmRpY2F0ZXMgdGhhdCBJUCBjaGVja3N1bSAoYnV0IG5vdCBUQ1Agb3IgVURQ
IGNoZWNrc3VtKSBzaG91bGQgYmUKK3JlY2FsY3VsYXRlZCBiZWZvcmUgdHJhbnNtaXQuCisuUHAK
K05vdGU6IG9uZSBzaG91bGQgZW5zdXJlIHRoYXQgcGFja2V0cyBhcmUgcmV0dXJuZWQgdG8gaXBm
dyBhZnRlciBwcm9jZXNzaW5nCitpbnNpZGUKKy5YciBuZXRncmFwaCA0ICwKK2J5IHNldHRpbmcg
YXBwcm9wcmlhdGUKKy5YciBzeXNjdGwgOAordmFyaWFibGU6CisuQmQgLWxpdGVyYWwgLW9mZnNl
dCA0bgorc3lzY3RsIG5ldC5pbmV0LmlwLmZ3Lm9uZV9wYXNzPTAKKy5FZAorLlNoIFNFRSBBTFNP
CisuWHIgbmV0Z3JhcGggNCAsCisuWHIgbmdfaXBmdyA0ICwKKy5YciBuZ2N0bCA4CisuU2ggSElT
VE9SWQorVGhlCisuTm0KK25vZGUgdHlwZSB3YXMgaW1wbGVtZW50ZWQgaW4KKy5GeCA4LjEgLgor
LlNoIEFVVEhPUlMKKy5BbiAiTWF4aW0gSWduYXRlbmtvIiBBcSBnZWxyYWVuLnVhQGdtYWlsLmNv
bSAuCitUaGlzIG1hbnVhbCBwYWdlIHdhcyB3cml0dGVuIGJ5CisuQW4gIlZhZGltIEdvbmNoYXJv
diIgQXEgdmFkaW1udWNsaWdodEB0cHUucnUgLgorLlNoIEJVR1MKK05vZGUgYmxpbmRseSB0cmll
cyB0byBhcHBseSBldmVyeSBwYXRjaGluZyBvcGVyYXRpb24gdG8gZWFjaCBwYWNrZXQKKyhleGNl
cHQgdGhvc2Ugd2hpY2ggb2Zmc2V0IGlmIGdyZWF0ZXIgdGhhbiBsZW5ndGggb2YgdGhlIHBhY2tl
dCksCitzbyBiZSBzdXJlIHRoYXQgeW91IHN1cHBseSBvbmx5IHRoZSByaWdodCBwYWNrZXRzIHRv
IGl0IChlLmcuIGNoYW5naW5nCitieXRlcyBpbiB0aGUgQVJQIHBhY2tldHMgbWVhbnQgdG8gYmUg
aW4gSVAgaGVhZGVyIGNvdWxkIGNvcnJ1cHQKK3RoZW0gYW5kIG1ha2UgeW91ciBtYWNoaW5lIHVu
cmVhY2hhYmxlIGZyb20gdGhlIG5ldHdvcmspLgorLlBwCisuRW0gISEhIFdBUk5JTkcgISEhCisu
UHAKK091dHB1dCBwYXRoIG9mIHRoZSBJUCBzdGFjayBhc3N1bWVzIGNvcnJlY3QgZmllbGRzIGFu
ZCBsZW5ndGhzIGluIHRoZQorcGFja2V0cyAtIGNoYW5naW5nIHRoZW0gYnkgbWlzdGFrZSB0byBp
bmNvcnJlY3QgdmFsdWVzIGNhbiBjYXVzZQordW5wcmVkaWN0YWJsZSByZXN1bHRzIGluY2x1ZGlu
ZyBrZXJuZWwgcGFuaWNzLgpJbmRleDogc3lzL25ldGdyYXBoL25nX3BhdGNoLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc3lzL25ldGdyYXBoL25nX3BhdGNoLmMJKHJldmlzaW9uIDApCisrKyBzeXMvbmV0Z3Jh
cGgvbmdfcGF0Y2guYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBuZ19w
YXRjaC5jCisgKi8KKworLyotCisgKiAgIENvcHlyaWdodCAoQykgMjAxMCBieSBNYXhpbSBJZ25h
dGVua28KKyAqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0ICAgICoKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyAgICoKKyAqICAgIGFyZSBtZXQ6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0ICAgICoKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gICAgICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
ICoKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiAgICoKKyAqICAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgICAgICAgICoKKyAqICAgICAgIGRp
c3RyaWJ1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAgICoKKyAqICAg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgICAgICoKKyAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SICoKKyAqICAgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgICoK
KyAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsICoKKyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAgICAgICoKKyAqICAgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsICoKKyAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZICoKKyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgICoKKyAqICAgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFICoKKyAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICoKKyAqCisgKiBBdXRob3I6IE1heGltIEln
bmF0ZW5rbyA8Z2VscmFlbi51YUBnbWFpbC5jb20+CisgKgorICogJEZyZWVCU0QkCisgKi8KKwor
I2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRl
IDxzeXMvbWJ1Zi5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvY3R5
cGUuaD4KKyNpbmNsdWRlIDxzeXMvZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CS8q
IGJlNjR0b2goKSwgaHRvYmU2NCgpICovCisjaW5jbHVkZSA8bmV0Z3JhcGgvbmdfbWVzc2FnZS5o
PgorI2luY2x1ZGUgPG5ldGdyYXBoL25nX3BhcnNlLmg+CisjaW5jbHVkZSA8bmV0Z3JhcGgvbmdf
cGF0Y2guaD4KKyNpbmNsdWRlIDxuZXRncmFwaC9uZXRncmFwaC5oPgorCitzdGF0aWMgbmdfY29u
c3RydWN0b3JfdAluZ19wYXRjaF9jb25zdHJ1Y3RvcjsKK3N0YXRpYyBuZ19yY3Ztc2dfdAluZ19w
YXRjaF9yY3Ztc2c7CitzdGF0aWMgbmdfc2h1dGRvd25fdAluZ19wYXRjaF9zaHV0ZG93bjsKK3N0
YXRpYyBuZ19uZXdob29rX3QJbmdfcGF0Y2hfbmV3aG9vazsKK3N0YXRpYyBuZ19yY3ZkYXRhX3QJ
bmdfcGF0Y2hfcmN2ZGF0YTsKK3N0YXRpYyBuZ19kaXNjb25uZWN0X3QJbmdfcGF0Y2hfZGlzY29u
bmVjdDsKKworI2RlZmluZSBPRkZTRVRPRihzLCBlKSAoKGNoYXIgKikmKChzICopMCktPmUgLSAo
Y2hhciAqKSgocyAqKTApKQorCitzdGF0aWMgaW50CituZ19wYXRjaF9jb25maWdfZ2V0bGVuKGNv
bnN0IHN0cnVjdCBuZ19wYXJzZV90eXBlICp0eXBlLAorCQljb25zdCB1X2NoYXIgKnN0YXJ0LCBj
b25zdCB1X2NoYXIgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgbmdfcGF0Y2hfY29uZmlnICpwOwor
CXAgPSAoY29uc3Qgc3RydWN0IG5nX3BhdGNoX2NvbmZpZyAqKShidWYgLSBPRkZTRVRPRihzdHJ1
Y3QgbmdfcGF0Y2hfY29uZmlnLCBvcHMpKTsKKwlyZXR1cm4gKHAtPmNvdW50KTsKK30KKworc3Rh
dGljIGNvbnN0IHN0cnVjdCBuZ19wYXJzZV9zdHJ1Y3RfZmllbGQgbmdfcGF0Y2hfb3BfdHlwZV9m
aWVsZHNbXQorCT0gTkdfUEFUQ0hfT1BfVFlQRV9JTkZPOworc3RhdGljIGNvbnN0IHN0cnVjdCBu
Z19wYXJzZV90eXBlIG5nX3BhdGNoX29wX3R5cGUgPSB7CisJJm5nX3BhcnNlX3N0cnVjdF90eXBl
LAorCSZuZ19wYXRjaF9vcF90eXBlX2ZpZWxkcworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBu
Z19wYXJzZV9hcnJheV9pbmZvIG5nX3BhdGNoX2NvbmZhcnJfaW5mbyA9IHsKKwkmbmdfcGF0Y2hf
b3BfdHlwZSwKKwkmbmdfcGF0Y2hfY29uZmlnX2dldGxlbgorfTsKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgbmdfcGFyc2VfdHlwZSBuZ19wYXRjaF9jb25mYXJyX3R5cGUgPSB7CisJJm5nX3BhcnNlX2Fy
cmF5X3R5cGUsCisJJm5nX3BhdGNoX2NvbmZhcnJfaW5mbworfTsKKworc3RhdGljIGNvbnN0IHN0
cnVjdCBuZ19wYXJzZV9zdHJ1Y3RfZmllbGQgbmdfcGF0Y2hfY29uZmlnX3R5cGVfZmllbGRzW10K
Kwk9IE5HX1BBVENIX0NPTkZJR19UWVBFX0lORk87CitzdGF0aWMgY29uc3Qgc3RydWN0IG5nX3Bh
cnNlX3R5cGUgbmdfcGF0Y2hfY29uZmlnX3R5cGUgPSB7CisJJm5nX3BhcnNlX3N0cnVjdF90eXBl
LAorCSZuZ19wYXRjaF9jb25maWdfdHlwZV9maWVsZHMKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgbmdfcGFyc2Vfc3RydWN0X2ZpZWxkIG5nX3BhdGNoX3N0YXRzX2ZpZWxkc1tdCisJPSBOR19Q
QVRDSF9TVEFUU19UWVBFX0lORk87CitzdGF0aWMgY29uc3Qgc3RydWN0IG5nX3BhcnNlX3R5cGUg
bmdfcGF0Y2hfc3RhdHNfdHlwZSA9IHsKKwkmbmdfcGFyc2Vfc3RydWN0X3R5cGUsCisJJm5nX3Bh
dGNoX3N0YXRzX2ZpZWxkcworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZ19jbWRsaXN0IG5n
X3BhdGNoX2NtZGxpc3RbXSA9IHsKKwl7CisJCU5HTV9QQVRDSF9DT09LSUUsCisJCU5HTV9QQVRD
SF9HRVRDT05GSUcsCisJCSJnZXRjb25maWciLAorCQlOVUxMLAorCQkmbmdfcGF0Y2hfY29uZmln
X3R5cGUKKwl9LAorCXsKKwkJTkdNX1BBVENIX0NPT0tJRSwKKwkJTkdNX1BBVENIX1NFVENPTkZJ
RywKKwkJInNldGNvbmZpZyIsCisJCSZuZ19wYXRjaF9jb25maWdfdHlwZSwKKwkJTlVMTAorCX0s
CisJeworCQlOR01fUEFUQ0hfQ09PS0lFLAorCQlOR01fUEFUQ0hfR0VUX1NUQVRTLAorCQkiZ2V0
c3RhdHMiLAorCQlOVUxMLAorCQkmbmdfcGF0Y2hfc3RhdHNfdHlwZQorCX0sCisJeworCQlOR01f
UEFUQ0hfQ09PS0lFLAorCQlOR01fUEFUQ0hfQ0xSX1NUQVRTLAorCQkiY2xyc3RhdHMiLAorCQlO
VUxMLAorCQlOVUxMCisJfSwKKwl7CisJCU5HTV9QQVRDSF9DT09LSUUsCisJCU5HTV9QQVRDSF9H
RVRDTFJfU1RBVFMsCisJCSJnZXRjbHJzdGF0cyIsCisJCU5VTEwsCisJCSZuZ19wYXRjaF9zdGF0
c190eXBlCisJfSwKKwl7IDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBuZ190eXBlIHR5cGVzdHJ1
Y3QgPSB7CisJLnZlcnNpb24gPQlOR19BQklfVkVSU0lPTiwKKwkubmFtZSA9CQlOR19QQVRDSF9O
T0RFX1RZUEUsCisJLmNvbnN0cnVjdG9yID0JbmdfcGF0Y2hfY29uc3RydWN0b3IsCisJLnJjdm1z
ZyA9CW5nX3BhdGNoX3Jjdm1zZywKKwkuc2h1dGRvd24gPQluZ19wYXRjaF9zaHV0ZG93biwKKwku
bmV3aG9vayA9CW5nX3BhdGNoX25ld2hvb2ssCisJLnJjdmRhdGEgPQluZ19wYXRjaF9yY3ZkYXRh
LAorCS5kaXNjb25uZWN0ID0JbmdfcGF0Y2hfZGlzY29ubmVjdCwKKwkuY21kbGlzdCA9CW5nX3Bh
dGNoX2NtZGxpc3QsCit9OworTkVUR1JBUEhfSU5JVChwYXRjaCwgJnR5cGVzdHJ1Y3QpOworCit1
bmlvbiBwYXRjaF92YWwgeworCXVpbnQ4X3QJCXYxOworCXVpbnQxNl90CXYyOworCXVpbnQzMl90
CXY0OworCXVpbnQ2NF90CXY4OworfTsKKworc3RydWN0IG5nX3BhdGNoX3ByaXYgeworCWhvb2tf
cAkJaW47CisJaG9va19wCQlvdXQ7CisJc3RydWN0IG5nX3BhdGNoX2NvbmZpZyAqY29uZmlnOwor
CXVuaW9uIHBhdGNoX3ZhbCAqdmFsOworCXN0cnVjdCBuZ19wYXRjaF9zdGF0cyBzdGF0czsKK307
Cit0eXBlZGVmIHN0cnVjdCBuZ19wYXRjaF9wcml2ICpwcml2X3A7CisKKyNkZWZpbmUgTkdfUEFU
Q0hfQ09ORl9TSVpFKGNvdW50KQkoc2l6ZW9mKHN0cnVjdCBuZ19wYXRjaF9jb25maWcpICsgXAor
CQkoY291bnQpICogc2l6ZW9mKHN0cnVjdCBuZ19wYXRjaF9vcCkpCisKK3N0YXRpYyB2b2lkIGRv
X3BhdGNoKHByaXZfcCBjb25mLCBzdHJ1Y3QgbWJ1ZiAqbSk7CisKK3N0YXRpYyBpbnQKK25nX3Bh
dGNoX2NvbnN0cnVjdG9yKG5vZGVfcCBub2RlKQoreworCXByaXZfcCBwcml2ZGF0YTsKKworCXBy
aXZkYXRhID0gbWFsbG9jKHNpemVvZigqcHJpdmRhdGEpLCBNX05FVEdSQVBILAorCQlNX1dBSVQg
fCBNX1pFUk8pOworLyoJaWYgKHByaXZkYXRhID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsK
KyovCisJTkdfTk9ERV9TRVRfUFJJVkFURShub2RlLCBwcml2ZGF0YSk7CisJcHJpdmRhdGEtPmlu
ID0gTlVMTDsKKwlwcml2ZGF0YS0+b3V0ID0gTlVMTDsKKwlwcml2ZGF0YS0+Y29uZmlnID0gTlVM
TDsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CituZ19wYXRjaF9uZXdob29rKG5vZGVf
cCBub2RlLCBob29rX3AgaG9vaywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBwcml2X3Ag
cHJpdnAgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7CisKKwlpZiAoc3RybmNtcChuYW1lLCBOR19Q
QVRDSF9IT09LX0lOLAorCSAgICBzdHJsZW4oTkdfUEFUQ0hfSE9PS19JTikpID09IDApIHsKKwkJ
cHJpdnAtPmluID0gaG9vazsKKwl9IGVsc2UgaWYgKHN0cm5jbXAobmFtZSwgTkdfUEFUQ0hfSE9P
S19PVVQsCisJICAgIHN0cmxlbihOR19QQVRDSF9IT09LX09VVCkpID09IDApIHsKKwkJcHJpdnAt
Pm91dCA9IGhvb2s7CisJfSBlbHNlCisJCXJldHVybiAoRUlOVkFMKTsKKwlyZXR1cm4oMCk7Cit9
CisKK3N0YXRpYyBpbnQKK25nX3BhdGNoX3Jjdm1zZyhub2RlX3Agbm9kZSwgaXRlbV9wIGl0ZW0s
IGhvb2tfcCBsYXN0aG9vaykKK3sKKwljb25zdCBwcml2X3AgcHJpdnAgPSBOR19OT0RFX1BSSVZB
VEUobm9kZSk7CisJc3RydWN0IG5nX21lc2cgKnJlc3AgPSBOVUxMOworCWludCBlcnJvciA9IDA7
CisJc3RydWN0IG5nX21lc2cgKm1zZzsKKwlzdHJ1Y3QgbmdfcGF0Y2hfY29uZmlnICpjb25mOwor
CWludCBpLCBjbGVhciA9IDA7CisKKwlOR0lfR0VUX01TRyhpdGVtLCBtc2cpOworCXN3aXRjaCAo
bXNnLT5oZWFkZXIudHlwZWNvb2tpZSkgeworCWNhc2UgTkdNX1BBVENIX0NPT0tJRToKKwkJc3dp
dGNoIChtc2ctPmhlYWRlci5jbWQpIHsKKwkJY2FzZSBOR01fUEFUQ0hfR0VUQ09ORklHOgorCQkJ
aWYgKHByaXZwLT5jb25maWcgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJCU5HX01LUkVTUE9OU0Uo
cmVzcCwgbXNnLCBOR19QQVRDSF9DT05GX1NJWkUocHJpdnAtPmNvbmZpZy0+Y291bnQpLCBNX1dB
SVQpOworLyoJCQlpZiAoIXJlc3ApIHsKKwkJCQllcnJvciA9IEVOT01FTTsKKwkJCQlicmVhazsK
KwkJCX0KKyovCisJCQliY29weShwcml2cC0+Y29uZmlnLCByZXNwLT5kYXRhLCBOR19QQVRDSF9D
T05GX1NJWkUocHJpdnAtPmNvbmZpZy0+Y291bnQpKTsKKwkJCWJyZWFrOworCQljYXNlIE5HTV9Q
QVRDSF9TRVRDT05GSUc6CisJCQl7CisJCQl1bmlvbiBwYXRjaF92YWwgKm5ld3ZhbDsKKwkJCXN0
cnVjdCBuZ19wYXRjaF9jb25maWcgKm5ld2NvbmY7CisJCQlpZiAobXNnLT5oZWFkZXIuYXJnbGVu
IDwgc2l6ZW9mKHN0cnVjdCBuZ19wYXRjaF9jb25maWcpKSB7CisJCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWNvbmYgPSAoc3RydWN0IG5nX3BhdGNoX2NvbmZpZyAq
KW1zZy0+ZGF0YTsKKwkJCWlmIChtc2ctPmhlYWRlci5hcmdsZW4gPCBOR19QQVRDSF9DT05GX1NJ
WkUoY29uZi0+Y291bnQpKSB7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9
CisKKwkJCWZvcihpID0gMDsgaSA8IGNvbmYtPmNvdW50OyBpKyspIHsKKwkJCQlzd2l0Y2goY29u
Zi0+b3BzW2ldLmxlbmd0aCkgeworCQkJCWNhc2UgMToKKwkJCQljYXNlIDI6CisJCQkJY2FzZSA0
OgorCQkJCWNhc2UgODoKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZXJyb3IgPSBF
SU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoZXJyb3IgIT0gMCkKKwkJCQkJYnJl
YWs7CisJCQl9CisKKwkJCWNvbmYtPmNzdW1fZmxhZ3MgJj0gQ1NVTV9JUCB8IENTVU1fVENQIHwg
Q1NVTV9VRFAgfCBDU1VNX1NDVFA7CisKKwkJCWlmIChlcnJvciA9PSAwKSB7CisJCQkJbmV3Y29u
ZiA9IG1hbGxvYyhOR19QQVRDSF9DT05GX1NJWkUoY29uZi0+Y291bnQpLCBNX05FVEdSQVBILCBN
X1dBSVQpOworLyoJCQkJaWYgKG5ld2NvbmYgPT0gTlVMTCkgeworCQkJCQllcnJvciA9IEVOT01F
TTsKKwkJCQkJYnJlYWs7CisJCQkJfQorKi8KKwkJCQluZXd2YWwgPSBtYWxsb2MoY29uZi0+Y291
bnQgKiBzaXplb2YodW5pb24gcGF0Y2hfdmFsKSwKKwkJCQkgICAgTV9ORVRHUkFQSCwgTV9XQUlU
KTsKKy8qCQkJCWlmIChuZXd2YWwgPT0gTlVMTCkgeworCQkJCQllcnJvciA9IEVOT01FTTsKKwkJ
CQkJZnJlZShuZXdjb25mLCBNX05FVEdSQVBIKTsKKwkJCQkJYnJlYWs7CisJCQkJfSovCisJCQkJ
Zm9yKGkgPSAwOyBpIDwgY29uZi0+Y291bnQ7IGkrKykgeworCQkJCQlzd2l0Y2ggKGNvbmYtPm9w
c1tpXS5sZW5ndGgpIHsKKwkJCQkJY2FzZSAxOgorCQkJCQkJbmV3dmFsW2ldLnYxID0gY29uZi0+
b3BzW2ldLnZhbHVlOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMjoKKwkJCQkJCW5ld3ZhbFtp
XS52MiA9IGNvbmYtPm9wc1tpXS52YWx1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDQ6CisJ
CQkJCQluZXd2YWxbaV0udjQgPSBjb25mLT5vcHNbaV0udmFsdWU7CisJCQkJCQlicmVhazsKKwkJ
CQkJY2FzZSA4OgorCQkJCQkJbmV3dmFsW2ldLnY4ID0gY29uZi0+b3BzW2ldLnZhbHVlOworCQkJ
CQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJYmNvcHkoY29uZiwgbmV3Y29uZiwgTkdfUEFU
Q0hfQ09ORl9TSVpFKGNvbmYtPmNvdW50KSk7CisJCQkJaWYgKHByaXZwLT52YWwgIT0gTlVMTCkK
KwkJCQkJZnJlZShwcml2cC0+dmFsLCBNX05FVEdSQVBIKTsKKwkJCQlwcml2cC0+dmFsID0gbmV3
dmFsOworCQkJCWlmIChwcml2cC0+Y29uZmlnICE9IE5VTEwpCisJCQkJCWZyZWUocHJpdnAtPmNv
bmZpZywgTV9ORVRHUkFQSCk7CisJCQkJcHJpdnAtPmNvbmZpZyA9IG5ld2NvbmY7CisJCQl9CisJ
CQlicmVhazsKKwkJCX0KKwkJY2FzZSBOR01fUEFUQ0hfR0VUQ0xSX1NUQVRTOgorCQkJY2xlYXIg
PSAxOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSBOR01fUEFUQ0hfR0VUX1NUQVRTOgor
CQkJTkdfTUtSRVNQT05TRShyZXNwLCBtc2csIHNpemVvZihzdHJ1Y3QgbmdfcGF0Y2hfc3RhdHMp
LCBNX1dBSVQpOworLyoKKwkJCWlmIChyZXNwID09IE5VTEwpCisJCQkJcmV0dXJuIChFTk9NRU0p
OworKi8KKwkJCWJjb3B5KCYocHJpdnAtPnN0YXRzKSwgcmVzcC0+ZGF0YSwgc2l6ZW9mKHN0cnVj
dCBuZ19wYXRjaF9zdGF0cykpOworCQkJaWYgKGNsZWFyID09IDApCisJCQkJYnJlYWs7CisJCQkv
KiBlbHNlIEZBTExUSFJPVUdIICovCisJCWNhc2UgTkdNX1BBVENIX0NMUl9TVEFUUzoKKwkJCWJ6
ZXJvKCYocHJpdnAtPnN0YXRzKSwgc2l6ZW9mKHN0cnVjdCBuZ19wYXRjaF9zdGF0cykpOworCQkJ
YnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlO
R19SRVNQT05EX01TRyhlcnJvciwgbm9kZSwgaXRlbSwgcmVzcCk7CisJTkdfRlJFRV9NU0cobXNn
KTsKKwlyZXR1cm4oZXJyb3IpOworfQorCitzdGF0aWMgdm9pZAorZG9fcGF0Y2gocHJpdl9wIHBy
aXZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwl1aW50NjRfdCBidWY7CisJaW50IGksIHBhdGNoZWQg
PSAwOworCXN0cnVjdCBuZ19wYXRjaF9jb25maWcgKmNvbmYgPSBwcml2cC0+Y29uZmlnOworCisJ
Zm9yKGkgPSAwOyBpIDwgY29uZi0+Y291bnQ7IGkrKykgeworCQlpZiAoY29uZi0+b3BzW2ldLm9m
ZnNldCArIGNvbmYtPm9wc1tpXS5sZW5ndGggPiBtLT5tX3BrdGhkci5sZW4pCisJCQljb250aW51
ZTsKKworCQkvKiBmb3IgIj0iIG9wZXJhdGlvbiB3ZSBkb24ndCBuZWVkIHRvIGNvcHkgZGF0YSBm
cm9tIG1idWYgKi8KKwkJaWYgKGNvbmYtPm9wc1tpXS5tb2RlICE9IE5HX1BBVENIX01PREVfU0VU
KSB7CisJCQltX2NvcHlkYXRhKG0sIGNvbmYtPm9wc1tpXS5vZmZzZXQsCisJCQkgICAgY29uZi0+
b3BzW2ldLmxlbmd0aCwgKGNhZGRyX3QpICZidWYpOworCQl9CisJCQorCQlzd2l0Y2ggKGNvbmYt
Pm9wc1tpXS5sZW5ndGgpIHsKKwkJY2FzZSAxOgorCQkJc3dpdGNoIChjb25mLT5vcHNbaV0ubW9k
ZSkgeworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NFVDoKKwkJCQkqKCh1aW50OF90ICopJmJ1Zikg
PSBwcml2cC0+dmFsW2ldLnYxOworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0FE
RDoKKwkJCQkqKCh1aW50OF90ICopJmJ1ZikgKz0gcHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVh
azsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9TVUI6CisJCQkJKigodWludDhfdCAqKSZidWYpIC09
IHByaXZwLT52YWxbaV0udjE7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfTVVM
OgorCQkJCSooKHVpbnQ4X3QgKikmYnVmKSAqPSBwcml2cC0+dmFsW2ldLnYxOworCQkJCWJyZWFr
OworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0RJVjoKKwkJCQkqKCh1aW50OF90ICopJmJ1ZikgLz0g
cHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9ORUc6
CisJCQkJKigoaW50OF90ICopJmJ1ZikgPSAtICooKGludDhfdCAqKSZidWYpOworCQkJCWJyZWFr
OworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0FORDoKKwkJCQkqKCh1aW50OF90ICopJmJ1ZikgJj0g
cHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9PUjoK
KwkJCQkqKCh1aW50OF90ICopJmJ1ZikgfD0gcHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVhazsK
KwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9YT1I6CisJCQkJKigodWludDhfdCAqKSZidWYpIF49IHBy
aXZwLT52YWxbaV0udjE7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfU0hMOgor
CQkJCSooKHVpbnQ4X3QgKikmYnVmKSA8PD0gcHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVhazsK
KwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9TSFI6CisJCQkJKigodWludDhfdCAqKSZidWYpID4+PSBw
cml2cC0+dmFsW2ldLnYxOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjoK
KwkJCSooKGludDE2X3QgKikmYnVmKSA9ICBudG9ocygqKChpbnQxNl90ICopJmJ1ZikpOworCQkJ
c3dpdGNoIChjb25mLT5vcHNbaV0ubW9kZSkgeworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NFVDoK
KwkJCQkqKCh1aW50MTZfdCAqKSZidWYpID0gcHJpdnAtPnZhbFtpXS52MjsKKwkJCQlicmVhazsK
KwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9BREQ6CisJCQkJKigodWludDE2X3QgKikmYnVmKSArPSBw
cml2cC0+dmFsW2ldLnYyOworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NVQjoK
KwkJCQkqKCh1aW50MTZfdCAqKSZidWYpIC09IHByaXZwLT52YWxbaV0udjI7CisJCQkJYnJlYWs7
CisJCQljYXNlIE5HX1BBVENIX01PREVfTVVMOgorCQkJCSooKHVpbnQxNl90ICopJmJ1ZikgKj0g
cHJpdnAtPnZhbFtpXS52MjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9ESVY6
CisJCQkJKigodWludDE2X3QgKikmYnVmKSAvPSBwcml2cC0+dmFsW2ldLnYyOworCQkJCWJyZWFr
OworCQkJY2FzZSBOR19QQVRDSF9NT0RFX05FRzoKKwkJCQkqKChpbnQxNl90ICopJmJ1ZikgPSAt
ICooKGludDE2X3QgKikmYnVmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9B
TkQ6CisJCQkJKigodWludDE2X3QgKikmYnVmKSAmPSBwcml2cC0+dmFsW2ldLnYyOworCQkJCWJy
ZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX09SOgorCQkJCSooKHVpbnQxNl90ICopJmJ1Zikg
fD0gcHJpdnAtPnZhbFtpXS52MjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9Y
T1I6CisJCQkJKigodWludDE2X3QgKikmYnVmKSBePSBwcml2cC0+dmFsW2ldLnYyOworCQkJCWJy
ZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NITDoKKwkJCQkqKCh1aW50MTZfdCAqKSZidWYp
IDw8PSBwcml2cC0+dmFsW2ldLnYyOworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RF
X1NIUjoKKwkJCQkqKCh1aW50MTZfdCAqKSZidWYpID4+PSBwcml2cC0+dmFsW2ldLnYyOworCQkJ
CWJyZWFrOworCQkJfQorCQkJKigoaW50MTZfdCAqKSZidWYpID0gIGh0b25zKCooKGludDE2X3Qg
KikmYnVmKSk7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJKigoaW50MzJfdCAqKSZidWYpID0g
IG50b2hsKCooKGludDMyX3QgKikmYnVmKSk7CisJCQlzd2l0Y2ggKGNvbmYtPm9wc1tpXS5tb2Rl
KSB7CisJCQljYXNlIE5HX1BBVENIX01PREVfU0VUOgorCQkJCSooKHVpbnQzMl90ICopJmJ1Zikg
PSBwcml2cC0+dmFsW2ldLnY0OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0FE
RDoKKwkJCQkqKCh1aW50MzJfdCAqKSZidWYpICs9IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJl
YWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfU1VCOgorCQkJCSooKHVpbnQzMl90ICopJmJ1Zikg
LT0gcHJpdnAtPnZhbFtpXS52NDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9N
VUw6CisJCQkJKigodWludDMyX3QgKikmYnVmKSAqPSBwcml2cC0+dmFsW2ldLnY0OworCQkJCWJy
ZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0RJVjoKKwkJCQkqKCh1aW50MzJfdCAqKSZidWYp
IC89IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVf
TkVHOgorCQkJCSooKGludDMyX3QgKikmYnVmKSA9IC0gKigoaW50MzJfdCAqKSZidWYpOworCQkJ
CWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0FORDoKKwkJCQkqKCh1aW50MzJfdCAqKSZi
dWYpICY9IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01P
REVfT1I6CisJCQkJKigodWludDMyX3QgKikmYnVmKSB8PSBwcml2cC0+dmFsW2ldLnY0OworCQkJ
CWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1hPUjoKKwkJCQkqKCh1aW50MzJfdCAqKSZi
dWYpIF49IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01P
REVfU0hMOgorCQkJCSooKHVpbnQzMl90ICopJmJ1ZikgPDw9IHByaXZwLT52YWxbaV0udjQ7CisJ
CQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfU0hSOgorCQkJCSooKHVpbnQzMl90ICop
JmJ1ZikgPj49IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQkqKChpbnQz
Ml90ICopJmJ1ZikgPSAgaHRvbmwoKigoaW50MzJfdCAqKSZidWYpKTsKKwkJCWJyZWFrOworCQlj
YXNlIDg6CisJCQkqKChpbnQ2NF90ICopJmJ1ZikgPSAgYmU2NHRvaCgqKChpbnQ2NF90ICopJmJ1
ZikpOworCQkJc3dpdGNoIChjb25mLT5vcHNbaV0ubW9kZSkgeworCQkJY2FzZSBOR19QQVRDSF9N
T0RFX1NFVDoKKwkJCQkqKCh1aW50NjRfdCAqKSZidWYpID0gcHJpdnAtPnZhbFtpXS52ODsKKwkJ
CQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9BREQ6CisJCQkJKigodWludDY0X3QgKikm
YnVmKSArPSBwcml2cC0+dmFsW2ldLnY4OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9N
T0RFX1NVQjoKKwkJCQkqKCh1aW50NjRfdCAqKSZidWYpIC09IHByaXZwLT52YWxbaV0udjg7CisJ
CQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfTVVMOgorCQkJCSooKHVpbnQ2NF90ICop
JmJ1ZikgKj0gcHJpdnAtPnZhbFtpXS52ODsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hf
TU9ERV9ESVY6CisJCQkJKigodWludDY0X3QgKikmYnVmKSAvPSBwcml2cC0+dmFsW2ldLnY4Owor
CQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX05FRzoKKwkJCQkqKChpbnQ2NF90ICop
JmJ1ZikgPSAtICooKGludDY0X3QgKikmYnVmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFU
Q0hfTU9ERV9BTkQ6CisJCQkJKigodWludDY0X3QgKikmYnVmKSAmPSBwcml2cC0+dmFsW2ldLnY4
OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX09SOgorCQkJCSooKHVpbnQ2NF90
ICopJmJ1ZikgfD0gcHJpdnAtPnZhbFtpXS52ODsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFU
Q0hfTU9ERV9YT1I6CisJCQkJKigodWludDY0X3QgKikmYnVmKSBePSBwcml2cC0+dmFsW2ldLnY4
OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NITDoKKwkJCQkqKCh1aW50NjRf
dCAqKSZidWYpIDw8PSBwcml2cC0+dmFsW2ldLnY4OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19Q
QVRDSF9NT0RFX1NIUjoKKwkJCQkqKCh1aW50NjRfdCAqKSZidWYpID4+PSBwcml2cC0+dmFsW2ld
LnY4OworCQkJCWJyZWFrOworCQkJfQorCQkJKigoaW50NjRfdCAqKSZidWYpID0gIGh0b2JlNjQo
KigoaW50NjRfdCAqKSZidWYpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbV9jb3B5YmFjayhtLCBj
b25mLT5vcHNbaV0ub2Zmc2V0LCBjb25mLT5vcHNbaV0ubGVuZ3RoLAorCQkgICAgKGNfY2FkZHJf
dCkgJmJ1Zik7CisJCXBhdGNoZWQgPSAxOworCX0KKwlpZiAocGF0Y2hlZCA+IDApCisJCXByaXZw
LT5zdGF0cy5wYXRjaGVkKys7Cit9CisKK3N0YXRpYyBpbnQKK25nX3BhdGNoX3JjdmRhdGEoaG9v
a19wIGhvb2ssIGl0ZW1fcCBpdGVtKQoreworCWNvbnN0IHByaXZfcCBwcml2ID0gTkdfTk9ERV9Q
UklWQVRFKE5HX0hPT0tfTk9ERShob29rKSk7CisJaW50IGVycm9yOworCXN0cnVjdCBtYnVmICpt
OworCWhvb2tfcCB0YXJnZXQ7CisJcHJpdi0+c3RhdHMucmVjZWl2ZWQrKzsKKworCU5HSV9HRVRf
TShpdGVtLCBtKTsKKwlpZiAocHJpdi0+Y29uZmlnICE9IE5VTEwgJiYgaG9vayA9PSBwcml2LT5p
biAmJgorCSAgICAobS0+bV9mbGFncyAmIE1fUEtUSERSKSAhPSAwKSB7CisJCW0gPSBtX3Vuc2hh
cmUobSxNX05PV0FJVCk7CisJCWlmIChtID09IE5VTEwpIHsKKwkJCXByaXYtPnN0YXRzLmRyb3Bw
ZWQrKzsKKwkJCU5HX0ZSRUVfSVRFTShpdGVtKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQor
CQlkb19wYXRjaChwcml2LCBtKTsKKwkJbS0+bV9mbGFncyB8PSBwcml2LT5jb25maWctPmNzdW1f
ZmxhZ3M7CisJfQorCisJdGFyZ2V0ID0gTlVMTDsKKwlpZiAoaG9vayA9PSBwcml2LT5pbikgewor
CQlpZiAocHJpdi0+b3V0ICE9IE5VTEwpCisJCQl0YXJnZXQgPSBwcml2LT5vdXQ7CisJCWVsc2UK
KwkJCXRhcmdldCA9IHByaXYtPmluOyAvKiByZXR1cm4gZnJhbWVzIG9uICdpbicgaG9vayBpZiAn
b3V0JyBub3QgY29ubmVjdGVkKi8KKwl9CisJaWYgKGhvb2sgPT0gcHJpdi0+b3V0ICYmIHByaXYt
PmluICE9IE5VTEwpCisJCXRhcmdldCA9IHByaXYtPmluOworCisJaWYgKHRhcmdldCA9PSBOVUxM
KSB7CisJCXByaXYtPnN0YXRzLmRyb3BwZWQrKzsKKwkJTkdfRlJFRV9JVEVNKGl0ZW0pOworCQlO
R19GUkVFX00obSk7CisJCXJldHVybiAoMCk7CisJfQorCisJTkdfRldEX05FV19EQVRBKGVycm9y
LCBpdGVtLCB0YXJnZXQsIG0pOworCisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQK
K25nX3BhdGNoX3NodXRkb3duKG5vZGVfcCBub2RlKQoreworCWNvbnN0IHByaXZfcCBwcml2ZGF0
YSA9IE5HX05PREVfUFJJVkFURShub2RlKTsKKworCWlmIChwcml2ZGF0YS0+dmFsICE9IE5VTEwp
CisJCWZyZWUocHJpdmRhdGEtPnZhbCwgTV9ORVRHUkFQSCk7CisJaWYgKHByaXZkYXRhLT5jb25m
aWcgIT0gTlVMTCkKKwkJZnJlZShwcml2ZGF0YS0+Y29uZmlnLCBNX05FVEdSQVBIKTsKKwlOR19O
T0RFX1NFVF9QUklWQVRFKG5vZGUsIE5VTEwpOworCU5HX05PREVfVU5SRUYobm9kZSk7CisJZnJl
ZShwcml2ZGF0YSwgTV9ORVRHUkFQSCk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAor
bmdfcGF0Y2hfZGlzY29ubmVjdChob29rX3AgaG9vaykKK3sKKwlwcml2X3AgcHJpdiA9IE5HX05P
REVfUFJJVkFURShOR19IT09LX05PREUoaG9vaykpOworCisJaWYgKGhvb2sgPT0gcHJpdi0+aW4p
IHsKKwkJcHJpdi0+aW4gPSBOVUxMOworCX0KKwlpZiAoaG9vayA9PSBwcml2LT5vdXQpIHsKKwkJ
cHJpdi0+b3V0ID0gTlVMTDsKKwl9CisJaWYgKChOR19OT0RFX05VTUhPT0tTKE5HX0hPT0tfTk9E
RShob29rKSkgPT0gMCkKKwkmJiAoTkdfTk9ERV9JU19WQUxJRChOR19IT09LX05PREUoaG9vaykp
KSkgLyogYWxyZWFkeSBzaHV0dGluZyBkb3duPyAqLworCQluZ19ybW5vZGVfc2VsZihOR19IT09L
X05PREUoaG9vaykpOworCXJldHVybiAoMCk7Cit9CkluZGV4OiBzeXMvbmV0Z3JhcGgvbmdfcGF0
Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0Z3JhcGgvbmdfcGF0Y2guaAkocmV2aXNpb24gMCkK
KysrIHN5cy9uZXRncmFwaC9uZ19wYXRjaC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNCBA
QAorLyoKKyAqIG5nX3BhdGNoLmgKKyAqLworCisvKi0KKyAqICAgQ29weXJpZ2h0IChDKSAyMDEw
IGJ5IE1heGltIElnbmF0ZW5rbworICogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKgorICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQgICAgKgorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zICAgKgorICogICAgYXJl
IG1ldDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgKgorICogICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgICAgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQgKgorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluICAgKgorICogICAgICAgdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSAgICAgICAg
KgorICogICAgICAgZGlzdHJpYnV0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTICAgKgorICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCAgICAgKgorICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgKgorICogICBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCAgKgorICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgKgorICogICBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UICAgICAgKgor
ICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgKgorICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgKgorICogICBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
ICAgKgorICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgKgorICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgKgorICoKKyAqIEF1
dGhvcjogTWF4aW0gSWduYXRlbmtvIDxnZWxyYWVuLnVhQGdtYWlsLmNvbT4KKyAqCisgKiAkRnJl
ZUJTRCQKKyAqLworCisjaWZuZGVmIF9ORVRHUkFQSF9OR19QQVRDSF9IXworI2RlZmluZSBfTkVU
R1JBUEhfTkdfUEFUQ0hfSF8KKworLyogTm9kZSB0eXBlIG5hbWUuICovCisjZGVmaW5lIE5HX1BB
VENIX05PREVfVFlQRQkicGF0Y2giCisKKy8qIE5vZGUgdHlwZSBjb29raWUuICovCisjZGVmaW5l
IE5HTV9QQVRDSF9DT09LSUUJMTI2MjQ0NTUwOQorCisvKiBIb29rIG5hbWVzICovCisjZGVmaW5l
IE5HX1BBVENIX0hPT0tfSU4JImluIgorI2RlZmluZSBOR19QQVRDSF9IT09LX09VVAkib3V0Igor
CisvKiBOZXRncmFwaCBjb21tYW5kcyB1bmRlcnN0b29kIGJ5IHRoaXMgbm9kZSB0eXBlICovCitl
bnVtIHsKKwlOR01fUEFUQ0hfU0VUQ09ORklHID0gMSwKKwlOR01fUEFUQ0hfR0VUQ09ORklHLAor
CU5HTV9QQVRDSF9HRVRfU1RBVFMsCisJTkdNX1BBVENIX0NMUl9TVEFUUywKKwlOR01fUEFUQ0hf
R0VUQ0xSX1NUQVRTCit9OworCisvKiBQYXRjaGluZyBtb2RlcyAqLworZW51bSB7CisJTkdfUEFU
Q0hfTU9ERV9TRVQgPSAxLAorCU5HX1BBVENIX01PREVfQUREID0gMiwKKwlOR19QQVRDSF9NT0RF
X1NVQiA9IDMsCisJTkdfUEFUQ0hfTU9ERV9NVUwgPSA0LAorCU5HX1BBVENIX01PREVfRElWID0g
NSwKKwlOR19QQVRDSF9NT0RFX05FRyA9IDYsCisJTkdfUEFUQ0hfTU9ERV9BTkQgPSA3LAorCU5H
X1BBVENIX01PREVfT1IgPSA4LAorCU5HX1BBVENIX01PREVfWE9SID0gOSwKKwlOR19QQVRDSF9N
T0RFX1NITCA9IDEwLAorCU5HX1BBVENIX01PREVfU0hSID0gMTEKK307CisKK3N0cnVjdCBuZ19w
YXRjaF9vcCB7CisJdWludDY0X3QJdmFsdWU7CisJdWludDMyX3QJb2Zmc2V0OworCXVpbnQxNl90
CWxlbmd0aDsJLyogMSwyLDQgb3IgOCAoYnl0ZXMpICovCisJdWludDE2X3QJbW9kZTsKK307CisK
KyNkZWZpbmUgTkdfUEFUQ0hfT1BfVFlQRV9JTkZPCXsJXAorCQl7ICJ2YWx1ZSIsCSZuZ19wYXJz
ZV91aW50NjRfdHlwZQl9LAlcCisJCXsgIm9mZnNldCIsCSZuZ19wYXJzZV91aW50MzJfdHlwZQl9
LAlcCisJCXsgImxlbmd0aCIsCSZuZ19wYXJzZV91aW50MTZfdHlwZQl9LAlcCisJCXsgIm1vZGUi
LAkmbmdfcGFyc2VfdWludDE2X3R5cGUJfSwJXAorCQl7IE5VTEwgfSBcCit9CisKK3N0cnVjdCBu
Z19wYXRjaF9jb25maWcgeworCXVpbnQzMl90CWNvdW50OworCXVpbnQzMl90CWNzdW1fZmxhZ3M7
CisJc3RydWN0IG5nX3BhdGNoX29wCW9wc1tdOworfTsKKworI2RlZmluZSBOR19QQVRDSF9DT05G
SUdfVFlQRV9JTkZPCXsJXAorCQl7ICJjb3VudCIsCSZuZ19wYXJzZV91aW50MzJfdHlwZQl9LAlc
CisJCXsgImNzdW1fZmxhZ3MiLAkmbmdfcGFyc2VfdWludDMyX3R5cGUJfSwJXAorCQl7ICJvcHMi
LAkmbmdfcGF0Y2hfY29uZmFycl90eXBlCX0sCVwKKwkJeyBOVUxMIH0gXAorfQorCitzdHJ1Y3Qg
bmdfcGF0Y2hfc3RhdHMgeworCXVpbnQ2NF90CXJlY2VpdmVkOworCXVpbnQ2NF90CXBhdGNoZWQ7
CisJdWludDY0X3QJZHJvcHBlZDsKK307CisKKyNkZWZpbmUgTkdfUEFUQ0hfU1RBVFNfVFlQRV9J
TkZPIHsJXAorCQl7ICJyZWNlaXZlZCIsCSZuZ19wYXJzZV91aW50NjRfdHlwZQl9LAlcCisJCXsg
InBhdGNoZWQiLAkmbmdfcGFyc2VfdWludDY0X3R5cGUJfSwJXAorCQl7ICJkcm9wcGVkIiwJJm5n
X3BhcnNlX3VpbnQ2NF90eXBlCX0sCVwKKwkJeyBOVUxMIH0gXAorfQorCisjZW5kaWYgLyogX05F
VEdSQVBIX05HX1BBVENIX0hfICovCkluZGV4OiBzeXMvbW9kdWxlcy9uZXRncmFwaC9wYXRjaC9N
YWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbW9kdWxlcy9uZXRncmFwaC9wYXRjaC9NYWtlZmls
ZQkocmV2aXNpb24gMCkKKysrIHN5cy9tb2R1bGVzL25ldGdyYXBoL3BhdGNoL01ha2VmaWxlCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKyMgJEZyZWVCU0QkCisKK0tNT0Q9CW5nX3BhdGNo
CitTUkNTPSAJbmdfcGF0Y2guYworCisuaW5jbHVkZSA8YnNkLmttb2QubWs+Cg==
--0016e6d77f74e05a000486cfb045--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTilcaZYw26Rs-jbCpNZXjREdG0_UpRzNs2v0DxC7>