No subject

Unknown Unknown
Thu Feb 11 02:00:00 PST 2010


What I can observe is:

1) mount /usr/src /usr/obj as tmpfs
2) untar src-sys.tgz (from release 2.4.1 image)
3) run 'make nativekernel'
4) build stopped somewhere with compile error
5) but the file seems correct to me.
6) re-run 'make nativekernel'
7) failed again with 'not found' error
8) now tmpfs on /usr/src and /usr/obj disappears
    they are told as / (root) mounted filesystems. very strange

I'm guessing some 'swapcache' related change might cause this issue.
Am I missing something
very important code change ?

Any suggestions are welcome, always.

thank you,
-Naoya

--0016e6d5667aa03412047f4fdf30
Content-Type: text/plain; charset=US-ASCII; name="0005-tmmpfs-update-02-10-10.patch"
Content-Disposition: attachment; 
	filename="0005-tmmpfs-update-02-10-10.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: file1

RnJvbSAzNDhlYzQxOThmZTQ2MjNkZTgwNzY0Njk3OGFjNmM4YjMxZTIzZjkxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBOYW95YSBTdWdpb2thIDxuYW95YS5zdWdpb2thQGdtYWlsLmNv
bT4KRGF0ZTogVGh1LCAxMSBGZWIgMjAxMCAwMDo1OToyOSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hd
ICB0bW1wZnMgIHVwZGF0ZSAwMi8xMC8xMAoKLS0tCiBzYmluL01ha2VmaWxlICAgICAgICAgICAg
ICAgICAgfCAgICAxICsKIHNiaW4vbW91bnQvbW91bnQuOCAgICAgICAgICAgICB8ICAgIDEgKwog
c2Jpbi9tb3VudF90bXBmcy9NYWtlZmlsZSAgICAgIHwgICAxMiArCiBzYmluL21vdW50X3RtcGZz
L21vdW50X3RtcGZzLjggfCAgMTQzICsrKysKIHNiaW4vbW91bnRfdG1wZnMvbW91bnRfdG1wZnMu
YyB8ICAyNjQgKysrKysrKwogc2Jpbi9tb3VudF90bXBmcy9tb3VudF90bXBmcy5oIHwgICAzOCAr
CiBzaGFyZS9tYW4vbWFuNS9NYWtlZmlsZSAgICAgICAgfCAgICAxICsKIHNoYXJlL21hbi9tYW41
L3RtcGZzLjUgICAgICAgICB8ICAxMjAgKysrCiBzeXMvY29uZi9maWxlcyAgICAgICAgICAgICAg
ICAgfCAgICA2ICsKIHN5cy9jb25mL29wdGlvbnMgICAgICAgICAgICAgICB8ICAgIDIgKwogc3lz
L2NvbmZpZy9HRU5FUklDICAgICAgICAgICAgIHwgICAgMSArCiBzeXMvY29uZmlnL0xJTlQgICAg
ICAgICAgICAgICAgfCAgICAxICsKIHN5cy9jb25maWcvVktFUk5FTCAgICAgICAgICAgICB8ICAg
IDEgKwogc3lzL2NvbmZpZy9YODZfNjRfR0VORVJJQyAgICAgIHwgICAgMSArCiBzeXMva2Vybi9N
YWtlLnRhZ3MuaW5jICAgICAgICAgfCAgICA0ICstCiBzeXMva2Vybi9NYWtlZmlsZSAgICAgICAg
ICAgICAgfCAgICAyICstCiBzeXMva2Vybi9NYWtlZmlsZS5taXNjICAgICAgICAgfCAgICAyICst
CiBzeXMva2Vybi92ZnNfbmxvb2t1cC5jICAgICAgICAgfCAgICAzICstCiBzeXMva2Vybi92ZnNf
dm9wb3BzLmMgICAgICAgICAgfCAgICAzICstCiBzeXMvc3lzL21vdW50LmggICAgICAgICAgICAg
ICAgfCAgICAxICsKIHN5cy9zeXMvdmZzY2FjaGUuaCAgICAgICAgICAgICB8ICAgIDIgKy0KIHN5
cy92ZnMvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHN5cy92ZnMvdG1wZnMvTWFr
ZWZpbGUgICAgICAgICB8ICAgIDggKwogc3lzL3Zmcy90bXBmcy90bXBmcy5oICAgICAgICAgIHwg
IDU5NyArKysrKysrKysrKysrKysKIHN5cy92ZnMvdG1wZnMvdG1wZnNfYXJncy5oICAgICB8ICAg
NTQgKysKIHN5cy92ZnMvdG1wZnMvdG1wZnNfZmlmb29wcy5jICB8ICAgOTkgKysrCiBzeXMvdmZz
L3RtcGZzL3RtcGZzX2ZpZm9vcHMuaCAgfCAgIDUzICsrCiBzeXMvdmZzL3RtcGZzL3RtcGZzX3N1
YnIuYyAgICAgfCAxNDE0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3lz
L3Zmcy90bXBmcy90bXBmc192ZnNvcHMuYyAgIHwgIDQ2MSArKysrKysrKysrKysKIHN5cy92ZnMv
dG1wZnMvdG1wZnNfdm5vcHMuYyAgICB8IDE1NjQgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKwogc3lzL3Zmcy90bXBmcy90bXBmc192bm9wcy5oICAgIHwgICA1OCArKwog
MzEgZmlsZXMgY2hhbmdlZCwgNDkxMSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHNoYXJlL21hbi9tYW41L3RtcGZzLjUKCmRpZmYgLS1naXQgYS9zYmlu
L01ha2VmaWxlIGIvc2Jpbi9NYWtlZmlsZQppbmRleCAxMmI0MmYzLi5iMzgwMDA2IDEwMDY0NAot
LS0gYS9zYmluL01ha2VmaWxlCisrKyBiL3NiaW4vTWFrZWZpbGUKQEAgLTU3LDYgKzU3LDcgQEAg
U1VCRElSPQlhZGprZXJudHogXAogCW1vdW50X251bGwgXAogCW1vdW50X3BvcnRhbCBcCiAJbW91
bnRfc3RkIFwKKwltb3VudF90bXBmcyBcCiAJbW91bnRfdWRmIFwKIAltb3VudF91bmlvbiBcCiAJ
bW91bnRkIFwKZGlmZiAtLWdpdCBhL3NiaW4vbW91bnQvbW91bnQuOCBiL3NiaW4vbW91bnQvbW91
bnQuOAppbmRleCBmNWY0YTJjLi5iMWExNDZiIDEwMDY0NAotLS0gYS9zYmluL21vdW50L21vdW50
LjgKKysrIGIvc2Jpbi9tb3VudC9tb3VudC44CkBAIC0zOTgsNiArMzk4LDcgQEAgaGF2ZSBwZXJt
aXNzaW9uIHRvIGxvYWQgdGhlIG1vZHVsZS4KIC5YciBtb3VudF9wcm9jZnMgOCAsCiAuWHIgbW91
bnRfc21iZnMgOCAsCiAuWHIgbW91bnRfc3RkIDggLAorLlhyIG1vdW50X3RtcGZzIDggLAogLlhy
IG1vdW50X3VkZiA4ICwKIC5YciBtb3VudF91bmlvbiA4ICwKIC5YciBzeXNjdGwgOCAsCmRpZmYg
LS1naXQgYS9zYmluL21vdW50X3RtcGZzL01ha2VmaWxlIGIvc2Jpbi9tb3VudF90bXBmcy9NYWtl
ZmlsZQppbmRleCBlNjlkZTI5Li44YzQzMGJjIDEwMDY0NAotLS0gYS9zYmluL21vdW50X3RtcGZz
L01ha2VmaWxlCisrKyBiL3NiaW4vbW91bnRfdG1wZnMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMiBA
QAorIworIyAkRHJhZ29uRmx5OiBzcmMvc2Jpbi9tb3VudF9oYW1tZXIvTWFrZWZpbGUsdiAxLjEg
MjAwNy8xMC8xMCAxOTozNToxOSBkaWxsb24gRXhwICQKKworUFJPRz0JbW91bnRfdG1wZnMKK1NS
Q1M9CW1vdW50X3RtcGZzLmMgZ2V0bW50b3B0cy5jCitNQU49CW1vdW50X3RtcGZzLjgKKworTU9V
TlQ9CSR7LkNVUkRJUn0vLi4vbW91bnQKK0NGTEFHUys9IC1JJHsuQ1VSRElSfS8uLi8uLi9zeXMg
LUkke01PVU5UfQorLlBBVEg6CSR7TU9VTlR9CisKKy5pbmNsdWRlIDxic2QucHJvZy5taz4KZGlm
ZiAtLWdpdCBhL3NiaW4vbW91bnRfdG1wZnMvbW91bnRfdG1wZnMuOCBiL3NiaW4vbW91bnRfdG1w
ZnMvbW91bnRfdG1wZnMuOAppbmRleCBlNjlkZTI5Li5jM2E5YWZjIDEwMDY0NAotLS0gYS9zYmlu
L21vdW50X3RtcGZzL21vdW50X3RtcGZzLjgKKysrIGIvc2Jpbi9tb3VudF90bXBmcy9tb3VudF90
bXBmcy44CkBAIC0wLDAgKzEsMTQzIEBACisuXCIJJE5ldEJTRDogbW91bnRfdG1wZnMuOCx2IDEu
MTQgMjAwOC8wNC8zMCAxMzoxMDo1MyBtYXJ0aW4gRXhwICQKKy5cIgorLlwiIENvcHlyaWdodCAo
YykgMjAwNSwgMjAwNiBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKy5cIiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLlwiCisuXCIgVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBj
b250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKy5cIiBieSBKdWxpbyBNLiBNZXJp
bm8gVmlkYWwsIGRldmVsb3BlZCBhcyBwYXJ0IG9mIEdvb2dsZSdzIFN1bW1lciBvZiBDb2RlCisu
XCIgMjAwNSBwcm9ncmFtLgorLlwiCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIg
YXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwi
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiCisuXCIgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJV
VE9SUworLlwiIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorLlwiIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisuXCIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9O
IE9SIENPTlRSSUJVVE9SUworLlwiIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy5cIiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorLlwi
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworLlwiIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisuXCIgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
Ky5cIiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorLlwiIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
LlwiCisuRGQgRmVicnVhcnkgMTMsIDIwMDgKKy5EdCBNT1VOVF9UTVBGUyA4CisuT3MKKy5TaCBO
QU1FCisuTm0gbW91bnRfdG1wZnMKKy5OZCBtb3VudCBhbiBlZmZpY2llbnQgbWVtb3J5IGZpbGUg
c3lzdGVtCisuU2ggU1lOT1BTSVMKKy5ObQorLk9wIEZsIGcgQXIgZ3JvdXAKKy5PcCBGbCBtIEFy
IG1vZGUKKy5PcCBGbCBuIEFyIG5vZGVzCisuT3AgRmwgbyBBciBvcHRpb25zCisuT3AgRmwgcyBB
ciBzaXplCisuT3AgRmwgdSBBciB1c2VyCisuQXIgdG1wZnMKKy5BciBtb3VudF9wb2ludAorLlNo
IERFU0NSSVBUSU9OCitUaGUKKy5ObQorY29tbWFuZCBhdHRhY2hlcyBhbiBpbnN0YW5jZSBvZiB0
aGUgZWZmaWNpZW50IG1lbW9yeSBmaWxlIHN5c3RlbSB0byB0aGUKK2dsb2JhbCBmaWxlIHN5c3Rl
bSBuYW1lc3BhY2UuCitUaGUKKy5BciB0bXBmcworcGFyYW1ldGVyIG9ubHkgZXhpc3RzIGZvciBj
b21wYXRpYmlsaXR5IHdpdGggdGhlIG90aGVyIG1vdW50IGNvbW1hbmRzIGFuZAoraXMgaWdub3Jl
ZC4KK1RoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5CisuQXIgbW91bnRfcG9pbnQKK2lzIGNvbnZl
cnRlZCB0byBhbiBhYnNvbHV0ZSBwYXRoIGJlZm9yZSB1c2UgYW5kIGl0cyBhdHRyaWJ1dGVzIChv
d25lciwKK2dyb3VwIGFuZCBtb2RlKSBhcmUgaW5oZXJpdGVkIHVubGVzcyBleHBsaWNpdGx5IG92
ZXJyaWRlbiBieSB0aGUgb3B0aW9ucworZGVzY3JpYmVkIGJlbG93LgorLlBwCitUaGUgZm9sbG93
aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDoKKy5CbCAtdGFnIC13aWR0aCBYb1hvcHRpb25zCisu
SXQgRmwgZyBBciBncm91cAorU3BlY2lmaWVzIHRoZSBncm91cCBuYW1lIG9yIEdJRCBvZiB0aGUg
cm9vdCBpbm9kZSBvZiB0aGUgZmlsZSBzeXN0ZW0uCitEZWZhdWx0cyB0byB0aGUgbW91bnQgcG9p
bnQncyBHSUQuCisuSXQgRmwgbSBBciBtb2RlCitTcGVjaWZpZXMgdGhlIG1vZGUgKGluIG9jdGFs
IG5vdGF0aW9uKSBvZiB0aGUgcm9vdCBpbm9kZSBvZiB0aGUgZmlsZSBzeXN0ZW0uCitEZWZhdWx0
cyB0byB0aGUgbW91bnQgcG9pbnQncyBtb2RlLgorLkl0IEZsIG4gQXIgbm9kZXMKK1NwZWNpZmll
cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgYXZhaWxhYmxlIHRvIHRoZSBmaWxlIHN5c3Rl
bS4KK0lmIG5vdCBzcGVjaWZpZWQsIHRoZSBmaWxlIHN5c3RlbSBjaG9vc2VzIGEgcmVhc29uYWJs
ZSBtYXhpbXVtIGdpdmVuIGl0cworc2l6ZSBhdCBtb3VudCB0aW1lLCB3aGljaCBjYW4gYmUgbGlt
aXRlZCB3aXRoCisuRmwgcyAuCisuSXQgRmwgbyBBciBvcHRpb25zCitPcHRpb25zIGFyZSBzcGVj
aWZpZWQgd2l0aCBhCisuRmwgbworZmxhZyBmb2xsb3dlZCBieSBhIGNvbW1hLXNlcGFyYXRlZCBz
dHJpbmcgb2Ygb3B0aW9ucy4KK1NlZSB0aGUKKy5YciBtb3VudCA4CittYW4gcGFnZSBmb3IgcG9z
c2libGUgb3B0aW9ucyBhbmQgdGhlaXIgbWVhbmluZ3MuCisuSXQgRmwgcyBBciBzaXplCitTcGVj
aWZpZXMgdGhlIHRvdGFsIGZpbGUgc3lzdGVtIHNpemUgaW4gYnl0ZXMuCitJZiB6ZXJvIGlzIGdp
dmVuICh0aGUgZGVmYXVsdCksIHRoZSBhdmFpbGFibGUgYW1vdW50IG9mIG1lbW9yeSAoaW5jbHVk
aW5nCittYWluIG1lbW9yeSBhbmQgc3dhcCBzcGFjZSkgd2lsbCBiZSB1c2VkLgorTm90ZSB0aGF0
IGZvdXIgbWVnYWJ5dGVzIGFyZSBhbHdheXMgcmVzZXJ2ZWQgZm9yIHRoZSBzeXN0ZW0gYW5kIGNh
bm5vdAorYmUgYXNzaWduZWQgdG8gdGhlIGZpbGUgc3lzdGVtLgorLkl0IEZsIHUgQXIgdXNlcgor
U3BlY2lmaWVzIHRoZSB1c2VyIG5hbWUgb3IgVUlEIG9mIHRoZSByb290IGlub2RlIG9mIHRoZSBm
aWxlIHN5c3RlbS4KK0RlZmF1bHRzIHRvIHRoZSBtb3VudCBwb2ludCdzIFVJRC4KKy5FbAorLlBw
CitFdmVyeSBvcHRpb24gdGhhdCBhY2NlcHRzIGEgbnVtZXJpY2FsIHZhbHVlIGFzIGl0cyBhcmd1
bWVudCBjYW4gdGFrZSBhCit0cmFpbGluZworLlNxIGIKK3RvIGluZGljYXRlIGJ5dGVzICh0aGUg
ZGVmYXVsdCksIGEgdHJhaWxpbmcKKy5TcSBrCit0byBpbmRpY2F0ZSBraWxvYnl0ZXMsIGEgdHJh
aWxpbmcKKy5TcSBNCit0byBpbmRpY2F0ZSBtZWdhYnl0ZXMgb3IgYSB0cmFpbGluZworLlNxIEcK
K3RvIGluZGljYXRlIGdpZ2FieXRlcy4KK05vdGUgdGhhdCBib3RoIGxvd2VyY2FzZSBhbmQgdXBw
ZXJjYXNlIGZvcm1zIG9mIHRoZXNlIGxldHRlcnMgYXJlIGFsbG93ZWQuCisuU2ggRVhBTVBMRVMK
K1RoZSBmb2xsb3dpbmcgY29tbWFuZCBtb3VudHMgYSB0bXBmcyBpbnN0YW5jZSBvdmVyIHRoZQor
LlBhIC90bXAKK2RpcmVjdG9yeSwgaW5oZXJpdGluZyBpdHMgb3duZXIsIGdyb3VwIGFuZCBtb2Rl
IHNldHRpbmdzOgorLlBwCisuSWMgIm1vdW50IC10IHRtcGZzIHRtcGZzIC90bXAiCisuUHAKK1Ro
ZSBmb2xsb3dpbmcgY29tbWFuZCBtb3VudHMgYSB0bXBmcyBpbnN0YW5jZSBvdmVyIHRoZQorLlBh
IC9tbnQKK2RpcmVjdG9yeSwgc2V0dGluZyBhIDIwIG1lZ2FieXRlcyBsaW1pdCBpbiBzcGFjZSwg
b3duZWQgYnkgdGhlCisuU3Egam9lCit1c2VyIGFuZCBiZWxvbmdpbmcgdG8gdGhlCisuU3EgdXNl
cnMKK2dyb3VwLCB3aXRoIGEgcmVzdHJpY3RlZCAwNzAwIG1vZGU6CisuUHAKKy5JYyAibW91bnQg
LXQgdG1wZnMgLW8gLXMyME0gLW8gLXVqb2UgLW8gLWd1c2VycyAtbyAtbTA3MDAgdG1wZnMgL21u
dCIKKy5QcAorU2VlCisuUGEgL3Vzci9zaGFyZS9leGFtcGxlcy9mc3RhYi9mc3RhYi5yYW1kaXNr
Citmb3Igc29tZSBleGFtcGxlcyBvbiBob3cgdG8gYWRkIHRtcGZzIGVudHJpZXMgdG8KKy5QYSAv
ZXRjL2ZzdGFiIC4KKy5TaCBTRUUgQUxTTworLlhyIGZzdGFiIDUgLAorLlhyIG1vdW50IDgKKy5T
aCBISVNUT1JZCitUaGUKKy5ObQordXRpbGl0eSBmaXJzdCBhcHBlYXJlZCBpbgorLk54IDQuMCAu
CisuU2ggQlVHUworRmlsZSBzeXN0ZW0gbWV0YS1kYXRhIGlzIG5vdCBwYWdlYWJsZS4KK0lmIHRo
ZXJlIGlzIG5vdCBlbm91Z2ggbWFpbiBtZW1vcnkgdG8gaG9sZCB0aGlzIGluZm9ybWF0aW9uLCB0
aGUgc3lzdGVtIG1heQorYmVjb21lIHVuc3RhYmxlIG9yIHZlcnkgdW5yZXNwb25zaXZlIGJlY2F1
c2UgaXQgd2lsbCBub3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorcmVxdWlyZWQgbWVtb3J5LgorQSBt
YWxpY2lvdXMgdXNlciBjb3VsZCB0cmlnZ2VyIHRoaXMgY29uZGl0aW9uIGlmIGhlIGNvdWxkIGNy
ZWF0ZSBsb3RzIG9mCitmaWxlcyBpbnNpZGUgYSBzaXplLXVuYm91bmRlZCB0bXBmcyBmaWxlIHN5
c3RlbS4KK0xpbWl0aW5nIHRoZSBudW1iZXIgb2Ygbm9kZXMgcGVyIGZpbGUgc3lzdGVtCisuUHEg
Rmwgbgord2lsbCBwcmV2ZW50IHRoaXM7IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHNldHRp
bmcgaXMgYWxzbyBvZnRlbiBhZGp1c3RlZAordG8gYW4gYWRlcXVhdGUgdmFsdWUgdG8gcmVzb2x2
ZSB0aGlzLgpkaWZmIC0tZ2l0IGEvc2Jpbi9tb3VudF90bXBmcy9tb3VudF90bXBmcy5jIGIvc2Jp
bi9tb3VudF90bXBmcy9tb3VudF90bXBmcy5jCmluZGV4IGU2OWRlMjkuLjY5ODdmOGEgMTAwNjQ0
Ci0tLSBhL3NiaW4vbW91bnRfdG1wZnMvbW91bnRfdG1wZnMuYworKysgYi9zYmluL21vdW50X3Rt
cGZzL21vdW50X3RtcGZzLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCSROZXRCU0Q6IG1vdW50X3Rt
cGZzLmMsdiAxLjI0IDIwMDgvMDgvMDUgMjA6NTc6NDUgcG9va2EgRXhwICQJKi8KKworLyoKKyAq
IENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBz
b2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEp1bGlv
IE0uIE1lcmlubyBWaWRhbCwgZGV2ZWxvcGVkIGFzIHBhcnQgb2YgR29vZ2xlJ3MgU3VtbWVyIG9m
IENvZGUKKyAqIDIwMDUgcHJvZ3JhbS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JT
CisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNlbmRpZiAvKiBub3QgbGludCAqLworCisj
aW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjaW5jbHVkZSA8
c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPHZmcy90bXBmcy90bXBmc19hcmdzLmg+CisKKyNpbmNs
dWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXNleGl0cy5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKyNpbmNsdWRl
ICJtbnRvcHRzLmgiCisjaW5jbHVkZSAibW91bnRfdG1wZnMuaCIKKworLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW50b3B0IG1vcHRzW10gPSB7CisJTU9QVF9TVERP
UFRTLAorCU1PUFRfTlVMTAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBnaWRf
dAlhX2dpZChjaGFyICopOworc3RhdGljIHVpZF90CWFfdWlkKGNoYXIgKik7CitzdGF0aWMgbW9k
ZV90CWFfbWFzayhjaGFyICopOworc3RhdGljIHZvaWQJdXNhZ2Uodm9pZCkgX19kZWFkMjsKKwor
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQKK21vdW50X3RtcGZzX3BhcnNlYXJncyhpbnQgYXJn
YywgY2hhciAqYXJndltdLAorCXN0cnVjdCB0bXBmc19hcmdzICphcmdzLCBpbnQgKm1udGZsYWdz
LAorCWNoYXIgKmNhbm9uX2RldiwgY2hhciAqY2Fub25fZGlyKQoreworCWludCBnaWRzZXQsIG1v
ZGVzZXQsIHVpZHNldDsgLyogT3VnaHQgdG8gYmUgJ2Jvb2wnLiAqLworCWludCBjaDsKKwlnaWRf
dCBnaWQ7CisJdWlkX3QgdWlkOworCW1vZGVfdCBtb2RlOworCWludDY0X3QgdG1wbnVtYmVyID0g
MDsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKwljaGFyICphOworCisJLyogU2V0IGRlZmF1bHQgdmFsdWVz
IGZvciBtb3VudCBwb2ludCBhcmd1bWVudHMuICovCisJbWVtc2V0KGFyZ3MsIDAsIHNpemVvZigq
YXJncykpOworCWFyZ3MtPnRhX3ZlcnNpb24gPSBUTVBGU19BUkdTX1ZFUlNJT047CisJYXJncy0+
dGFfc2l6ZV9tYXggPSAwOworCWFyZ3MtPnRhX25vZGVzX21heCA9IDA7CisJKm1udGZsYWdzID0g
MDsKKworCWdpZHNldCA9IDA7IGdpZCA9IDA7CisJdWlkc2V0ID0gMDsgdWlkID0gMDsKKwltb2Rl
c2V0ID0gMDsgbW9kZSA9IDA7CisKKwlvcHRpbmQgPSBvcHRyZXNldCA9IDE7CisJd2hpbGUgKChj
aCA9IGdldG9wdChhcmdjLCBhcmd2LCAiZzptOm46bzpzOnU6IikpICE9IC0xICkgeworCQlzd2l0
Y2ggKGNoKSB7CisJCWNhc2UgJ2cnOgorCQkJZ2lkID0gYV9naWQob3B0YXJnKTsKKwkJCWdpZHNl
dCA9IDE7CisJCQlicmVhazsKKworCQljYXNlICdtJzoKKwkJCW1vZGUgPSBhX21hc2sob3B0YXJn
KTsKKwkJCW1vZGVzZXQgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSAnbic6CisJCQlmb3IgKGEg
PSBvcHRhcmc7ICpvcHRhcmcgJiYgaXNkaWdpdCgqb3B0YXJnKTsgKytvcHRhcmcpOworCQkJaWYg
KCEqb3B0YXJnKQorCQkJCXRtcG51bWJlciA9IHN0cnRvaW1heChhLCBOVUxMLCAxMCk7CisJCQkJ
CisJCQlhcmdzLT50YV9ub2Rlc19tYXggPSB0bXBudW1iZXI7CisJCQlicmVhazsKKworCQljYXNl
ICdvJzoKKwkJCWdldG1udG9wdHMob3B0YXJnLCBtb3B0cywgbW50ZmxhZ3MsIDApOworCQkJYnJl
YWs7CisKKwkJY2FzZSAncyc6CisJCQlmb3IgKGEgPSBvcHRhcmc7ICpvcHRhcmcgJiYgaXNkaWdp
dCgqb3B0YXJnKTsgKytvcHRhcmcpOworCQkJaWYgKCEqb3B0YXJnKSAKKwkJCQl0bXBudW1iZXIg
PSBzdHJ0b2ltYXgoYSwgTlVMTCwgMTApOworCisJCQlhcmdzLT50YV9zaXplX21heCA9IHRtcG51
bWJlcjsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3UnOgorCQkJdWlkID0gYV91aWQob3B0YXJnKTsK
KwkJCXVpZHNldCA9IDE7CisJCQlicmVhazsKKworCQljYXNlICc/JzoKKwkJZGVmYXVsdDoKKwkJ
CXVzYWdlKCk7CisJCX0KKwl9CisJYXJnYyAtPSBvcHRpbmQ7CisJYXJndiArPSBvcHRpbmQ7CisK
KwlpZiAoYXJnYyAhPSAyKQorCQl1c2FnZSgpOworCisJc3RybGNweShjYW5vbl9kZXYsIGFyZ3Zb
MF0sIE1BWFBBVEhMRU4pOworCXN0cmxjcHkoY2Fub25fZGlyLCBhcmd2WzFdLCBNQVhQQVRITEVO
KTsKKworCWlmIChzdGF0KGNhbm9uX2RpciwgJnNiKSA9PSAtMSkKKwkJZXJyKEVYSVRfRkFJTFVS
RSwgImNhbm5vdCBzdGF0IGAlcyciLCBjYW5vbl9kaXIpOworCisJYXJncy0+dGFfcm9vdF91aWQg
PSB1aWRzZXQgPyB1aWQgOiBzYi5zdF91aWQ7CisJYXJncy0+dGFfcm9vdF9naWQgPSBnaWRzZXQg
PyBnaWQgOiBzYi5zdF9naWQ7CisJYXJncy0+dGFfcm9vdF9tb2RlID0gbW9kZXNldCA/IG1vZGUg
OiBzYi5zdF9tb2RlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGdpZF90Cith
X2dpZChjaGFyICpzKQoreworCXN0cnVjdCBncm91cCAqZ3I7CisJY2hhciAqZ25hbWU7CisJZ2lk
X3QgZ2lkOworCisJaWYgKChnciA9IGdldGdybmFtKHMpKSAhPSBOVUxMKQorCQlnaWQgPSBnci0+
Z3JfZ2lkOworCWVsc2UgeworCQlmb3IgKGduYW1lID0gczsgKnMgJiYgaXNkaWdpdCgqcyk7ICsr
cyk7CisJCWlmICghKnMpCisJCQlnaWQgPSBhdG9pKGduYW1lKTsKKwkJZWxzZQorCQkJZXJyeChF
WF9OT1VTRVIsICJ1bmtub3duIGdyb3VwIGlkOiAlcyIsIGduYW1lKTsKKwl9CisJcmV0dXJuIChn
aWQpOworfQorCitzdGF0aWMgdWlkX3QKK2FfdWlkKGNoYXIgKnMpCit7CisJc3RydWN0IHBhc3N3
ZCAqcHc7CisJY2hhciAqdW5hbWU7CisJdWlkX3QgdWlkOworCisJaWYgKChwdyA9IGdldHB3bmFt
KHMpKSAhPSBOVUxMKQorCQl1aWQgPSBwdy0+cHdfdWlkOworCWVsc2UgeworCQlmb3IgKHVuYW1l
ID0gczsgKnMgJiYgaXNkaWdpdCgqcyk7ICsrcyk7CisJCWlmICghKnMpCisJCQl1aWQgPSBhdG9p
KHVuYW1lKTsKKwkJZWxzZQorCQkJZXJyeChFWF9OT1VTRVIsICJ1bmtub3duIHVzZXIgaWQ6ICVz
IiwgdW5hbWUpOworCX0KKwlyZXR1cm4gKHVpZCk7Cit9CisKK3N0YXRpYyBtb2RlX3QKK2FfbWFz
ayhjaGFyICpzKQoreworCWludCBkb25lLCBydj0wOworCWNoYXIgKmVwOworCisJZG9uZSA9IDA7
CisJaWYgKCpzID49ICcwJyAmJiAqcyA8PSAnNycpIHsKKwkJZG9uZSA9IDE7CisJCXJ2ID0gc3Ry
dG9sKG9wdGFyZywgJmVwLCA4KTsKKwl9CisJaWYgKCFkb25lIHx8IHJ2IDwgMCB8fCAqZXApCisJ
CWVycngoRVhfVVNBR0UsICJpbnZhbGlkIGZpbGUgbW9kZTogJXMiLCBzKTsKKwlyZXR1cm4gKHJ2
KTsKK30KKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CisJKHZvaWQpZnByaW50ZihzdGRl
cnIsCisJICAgICJVc2FnZTogJXMgWy1nIGdyb3VwXSBbLW0gbW9kZV0gWy1uIG5vZGVzXSBbLW8g
b3B0aW9uc10gWy1zIHNpemVdXG4iCisJICAgICIgICAgICAgICAgIFstdSB1c2VyXSB0bXBmcyBt
b3VudHBvaW50XG4iLCBnZXRwcm9nbmFtZSgpKTsKKwlleGl0KDEpOworfQorCisvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gKi8KKworaW50Cittb3VudF90bXBmcyhpbnQgYXJnYywgY2hhciAqYXJndltdKQorewor
CXN0cnVjdCB0bXBmc19hcmdzIGFyZ3M7CisJY2hhciBjYW5vbl9kZXZbTUFYUEFUSExFTl0sIGNh
bm9uX2RpcltNQVhQQVRITEVOXTsKKwlpbnQgbW50ZmxhZ3M7CisJc3RydWN0IHZmc2NvbmYgdmZj
OworCWludCBlcnJvcjsKKworCW1vdW50X3RtcGZzX3BhcnNlYXJncyhhcmdjLCBhcmd2LCAmYXJn
cywgJm1udGZsYWdzLAorCSAgICBjYW5vbl9kZXYsIGNhbm9uX2Rpcik7CisKKworCWVycm9yID0g
Z2V0dmZzYnluYW1lKCJ0bXBmcyIsICZ2ZmMpOworCWlmIChlcnJvciAmJiB2ZnNpc2xvYWRhYmxl
KCJ0bXBmcyIpKSB7CisJCWlmKHZmc2xvYWQoInRtcGZzIikpCisJCQllcnIoRVhfT1NFUlIsICJ2
ZnNsb2FkKCVzKSIsICJ0bXBmcyIpOworCQllbmR2ZnNlbnQoKTsKKwkJZXJyb3IgPSBnZXR2ZnNi
eW5hbWUoInRtcGZzIiwgJnZmYyk7CisJfQorCWlmIChlcnJvcikKKwkJZXJyeChFWF9PU0VSUiwg
IiVzIGZpbGVzeXN0ZW0gbm90IGF2YWlsYWJsZSIsICJ0bXBmcyIpOworCisJaWYgKG1vdW50KHZm
Yy52ZmNfbmFtZSwgY2Fub25fZGlyLCBtbnRmbGFncywgMCkgPT0gLTEpCisJCWVycihFWElUX0ZB
SUxVUkUsICJ0bXBmcyBvbiAlcyIsIGNhbm9uX2Rpcik7CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNT
OworfQorCisjaWZuZGVmIE1PVU5UX05PTUFJTgoraW50CittYWluKGludCBhcmdjLCBjaGFyICph
cmd2W10pCit7CisKKwlzZXRwcm9nbmFtZShhcmd2WzBdKTsKKwlyZXR1cm4gbW91bnRfdG1wZnMo
YXJnYywgYXJndik7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvc2Jpbi9tb3VudF90bXBmcy9t
b3VudF90bXBmcy5oIGIvc2Jpbi9tb3VudF90bXBmcy9tb3VudF90bXBmcy5oCmluZGV4IGU2OWRl
MjkuLmI2YTE0MzkgMTAwNjQ0Ci0tLSBhL3NiaW4vbW91bnRfdG1wZnMvbW91bnRfdG1wZnMuaAor
KysgYi9zYmluL21vdW50X3RtcGZzL21vdW50X3RtcGZzLmgKQEAgLTAsMCArMSwzOCBAQAorLyoJ
JE5ldEJTRDogbW91bnRfdG1wZnMuaCx2IDEuMSAyMDA4LzA4LzA1IDIwOjU3OjQ1IHBvb2thIEV4
cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE5ldEJTRCBGb3VuZGF0aW9u
LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworICogT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIF9TQklOX01PVU5UX1RNUEZTX01PVU5UX1RNUEZTX0hfCisjZGVm
aW5lIF9TQklOX01PVU5UX1RNUEZTX01PVU5UX1RNUEZTX0hfCisKKyNpbmNsdWRlIDx2ZnMvdG1w
ZnMvdG1wZnNfYXJncy5oPgorCitpbnQJbW91bnRfdG1wZnMoaW50LCBjaGFyICoqKTsKK3ZvaWQJ
bW91bnRfdG1wZnNfcGFyc2VhcmdzKGludCwgY2hhciAqKiwgc3RydWN0IHRtcGZzX2FyZ3MgKiwg
aW50ICosCisJCQkgICAgICBjaGFyICosIGNoYXIgKik7CisKKyNlbmRpZiAvKiBfU0JJTl9NT1VO
VF9UTVBGU19NT1VOVF9UTVBGU19IXyAqLworCmRpZmYgLS1naXQgYS9zaGFyZS9tYW4vbWFuNS9N
YWtlZmlsZSBiL3NoYXJlL21hbi9tYW41L01ha2VmaWxlCmluZGV4IGVjZmY1ZjcuLjBlODU4ZjUg
MTAwNjQ0Ci0tLSBhL3NoYXJlL21hbi9tYW41L01ha2VmaWxlCisrKyBiL3NoYXJlL21hbi9tYW41
L01ha2VmaWxlCkBAIC01Myw2ICs1Myw3IEBAIE1BTj0JYWNjdC41IFwKIAlzaGVsbHMuNSBcCiAJ
c3RhYi41IFwKIAlzeXNjdGwuY29uZi41IFwKKwl0bXBmcy41IFwKIAl1dGYyLjUgXAogCXV0Zjgu
NSBcCiAJdXRtcC41IFwKZGlmZiAtLWdpdCBhL3NoYXJlL21hbi9tYW41L3RtcGZzLjUgYi9zaGFy
ZS9tYW4vbWFuNS90bXBmcy41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4
MTI2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9tYW4vbWFuNS90bXBmcy41CkBAIC0wLDAg
KzEsMTIwIEBACisuXCIKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDcgWGluIExJCisuXCIgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy5cIgorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFy
ZSBtZXQ6CisuXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisuXCIgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIiAzLiBUaGUgbmFtZSBvZiB0aGUg
YXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKy5c
IiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbgorLlwiCisuXCIgVEhJUyBET0NVTUVOVEFUSU9OIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorLlwiIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMKKy5cIiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorLlwiIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKy5cIiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQKKy5cIiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisuXCIgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisuXCIgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorLlwiIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorLlwiIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisuXCIKKy5cIiAkRnJlZUJT
RDogc3JjL3NoYXJlL21hbi9tYW41L3RtcGZzLjUsdiAxLjcgMjAxMC8wMS8yOSAxNToxMTo1MCBq
aCBFeHAgJAorLlwiCisuRGQgRmVicnVhcnkgMiwgMjAxMAorLkR0IFRNUEZTIDUKKy5PcworLlNo
IE5BTUUKKy5ObSB0bXBmcworLk5kICJlZmZpY2llbnQgbWVtb3J5IGZpbGUgc3lzdGVtIgorLlNo
IFNZTk9QU0lTCitUbyBjb21waWxlIHRoaXMgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwKK3BsYWNl
IHRoZSBmb2xsb3dpbmcgbGluZSBpbiB5b3VyCitrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlOgor
LkJkIC1yYWdnZWQgLW9mZnNldCBpbmRlbnQKKy5DZCAib3B0aW9ucyBUTVBGUyIKKy5FZAorLlBw
CitBbHRlcm5hdGl2ZWx5LCB0byBsb2FkIHRoZSBkcml2ZXIgYXMgYQorbW9kdWxlIGF0IGJvb3Qg
dGltZSwgcGxhY2UgdGhlIGZvbGxvd2luZyBsaW5lIGluCisuWHIgbG9hZGVyLmNvbmYgNSA6Cisu
QmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKK3RtcGZzX2xvYWQ9IllFUyIKKy5FZAorLlNoIERF
U0NSSVBUSU9OCitUaGUKKy5ObQorZHJpdmVyIHdpbGwgcGVybWl0IHRoZQorLkR4CitrZXJuZWwg
dG8gYWNjZXNzCisuVG4gdG1wZnMKK2ZpbGUgc3lzdGVtcy4KKy5TaCBPUFRJT05TCitUaGUgZm9s
bG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuCittb3VudGluZworLk5tCitmaWxlIHN5
c3RlbXM6CisuQmwgLXRhZyAtd2lkdGggaW5kZW50CisuSXQgQ20gZ2lkCityb290IGdyb3VwIGlk
LgorLkl0IENtIHVpZAorcm9vdCB1c2VyIGlkLgorLkl0IENtIG1vZGUKK3Blcm1pc3Npb25zIGlu
IG9jdGFsIGZvcm1hdC4KKy5JdCBDbSBpbm9kZXMKK21heGltdW0gbnVtYmVyIG9mIGlub2Rlcy4K
Ky5JdCBDbSBzaXplCittYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBmb3IgdGhlIGZpbGUgc3lzdGVt
LgorLkl0IENtIG1heGZpbGVzaXplCittYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpLgorLkVs
CisuU2ggRVhBTVBMRVMKK1RvIG1vdW50IGEKKy5ObQorbWVtb3J5IGZpbGUgc3lzdGVtOgorLlBw
CisuRGwgIm1vdW50IC10IHRtcGZzIHRtcGZzIC90bXAiCisuU2ggU0VFIEFMU08KKy5YciBubW91
bnQgMiAsCisuWHIgdW5tb3VudCAyICwKKy5YciBmc3RhYiA1ICwKKy5YciBtb3VudCA4CisuU2gg
SElTVE9SWQorVGhlCisuTm0KK2RyaXZlciBmaXJzdCBhcHBlYXJlZCBpbgorLkR4IDIuNS4xIC4K
Ky5TaCBBVVRIT1JTCisuQW4gLW5vc3BsaXQKK1RoZQorLk5tCitrZXJuZWwgaW1wbGVtZW50YXRp
b24gd2FzIHdyaXR0ZW4gYnkKKy5BbiBKdWxpbyBNLiBNZXJpbm8gVmlkYWwgQXEgam1tdkBOZXRC
U0Qub3JnCithcyBhIEdvb2dsZSBTb0MgcHJvamVjdC4KKy5QcAorLkFuIFJvaGl0IEphbGFuCith
bmQgb3RoZXJzIHBvcnRlZCBpdCBmcm9tCisuTngKK3RvCisuRnggLgorLlBwCisuQW4gTmFveWEg
U3VnaW9rYQorYW5kIG90aGVycyBwb3J0ZWQgaXQgZnJvbQorLk54Cit0bworLkR4IC4KKy5QcAor
VGhpcyBtYW51YWwgcGFnZSB3YXMgd3JpdHRlbiBieQorLkFuIFhpbiBMSSBBcSBkZWxwaGlqQEZy
ZWVCU0Qub3JnIC4KKy5TaCBCVUdTCitUaGUKKy5ObQora2VybmVsIGltcGxlbWVudGF0aW9uIGlz
IGN1cnJlbnRseSBjb25zaWRlcmVkIGFzCithbiBleHBlcmltZW50YWwgZmVhdHVyZS4KK1NvbWUg
ZmlsZSBzeXN0ZW0gbW91bnQKK3RpbWUgb3B0aW9ucyBhcmUgbm90IHdlbGwgc3VwcG9ydGVkLgpk
aWZmIC0tZ2l0IGEvc3lzL2NvbmYvZmlsZXMgYi9zeXMvY29uZi9maWxlcwppbmRleCA0MzA4NzNm
Li40MTc2NjAwIDEwMDY0NAotLS0gYS9zeXMvY29uZi9maWxlcworKysgYi9zeXMvY29uZi9maWxl
cwpAQCAtMTQyNiw2ICsxNDI2LDEyIEBAIHZmcy9oYW1tZXIvaGFtbWVyX3VuZG8uYwlvcHRpb25h
bCBoYW1tZXIKIHZmcy9oYW1tZXIvaGFtbWVyX3JlZG8uYwlvcHRpb25hbCBoYW1tZXIKIHZmcy9o
YW1tZXIvaGFtbWVyX3Zmc29wcy5jCW9wdGlvbmFsIGhhbW1lcgogdmZzL2hhbW1lci9oYW1tZXJf
dm5vcHMuYwlvcHRpb25hbCBoYW1tZXIKKyN0bXBmcyBzdGF0aWMgZmlsZXN5c3RlbSBmb3IgZGVi
dWdnaW5nIHNob3VsZCBiZSBtYXJrZWQgYXMgb3B0aW9uYWwgdG1wZnMKK3Zmcy90bXBmcy90bXBm
c19maWZvb3BzLmMJc3RhbmRhcmQKK3Zmcy90bXBmcy90bXBmc19zdWJyLmMJCXN0YW5kYXJkCit2
ZnMvdG1wZnMvdG1wZnNfdmZzb3BzLmMJc3RhbmRhcmQKK3Zmcy90bXBmcy90bXBmc192bm9wcy5j
CQlzdGFuZGFyZAorIwogdm0vZGVmYXVsdF9wYWdlci5jCQlzdGFuZGFyZAogdm0vZGV2aWNlX3Bh
Z2VyLmMJCXN0YW5kYXJkCiB2bS9waHlzX3BhZ2VyLmMJCQlzdGFuZGFyZApkaWZmIC0tZ2l0IGEv
c3lzL2NvbmYvb3B0aW9ucyBiL3N5cy9jb25mL29wdGlvbnMKaW5kZXggYTc4ZWU2NS4uMzhiNjM3
OSAxMDA2NDQKLS0tIGEvc3lzL2NvbmYvb3B0aW9ucworKysgYi9zeXMvY29uZi9vcHRpb25zCkBA
IC0xNTAsNiArMTUwLDcgQEAgUE9SVEFMCQlvcHRfZG9udHVzZS5oCiBQUk9DRlMJCW9wdF9kb250
dXNlLmgKIFVERgkJb3B0X2RvbnR1c2UuaAogTlRGUwkJb3B0X2RvbnR1c2UuaAorI1RNUEZTCQlv
cHRfZG9udHVzZS5oCiAKICMgVGhlc2Ugc3RhdGljIGZpbGVzeXN0ZW1zIGhhcyBvbmUgc2xpZ2h0
bHkgYm9ndXMgc3RhdGljIGRlcGVuZGVuY3kgaW4KICMgc3lzL3BsYXRmb3JtLy4uLi9pMzg2L2F1
dG9jb25mLmMuICBJZiBhbnkgb2YgdGhlc2UgZmlsZXN5c3RlbXMgYXJlCkBAIC0xNjEsNiArMTYy
LDcgQEAgRkZTCiBORlMKIE5XRlMKIFVTRVJGUworVE1QRlMKIEhBTU1FUgogCiAjIElmIHlvdSBh
cmUgZm9sbG93aW5nIHRoZSBjb25kaXRpb25zIGluIHRoZSBjb3B5cmlnaHQsCmRpZmYgLS1naXQg
YS9zeXMvY29uZmlnL0dFTkVSSUMgYi9zeXMvY29uZmlnL0dFTkVSSUMKaW5kZXggZDQ3NGI1OC4u
Mzg1ZGUyNSAxMDA2NDQKLS0tIGEvc3lzL2NvbmZpZy9HRU5FUklDCisrKyBiL3N5cy9jb25maWcv
R0VORVJJQwpAQCAtMjcsNiArMjcsNyBAQCBvcHRpb25zIAlGRlNfUk9PVAkJI0ZGUyB1c2FibGUg
YXMgcm9vdCBkZXZpY2UgW2tlZXAgdGhpcyFdCiBvcHRpb25zIAlTT0ZUVVBEQVRFUwkJI0VuYWJs
ZSBGRlMgc29mdCB1cGRhdGVzIHN1cHBvcnQKIG9wdGlvbnMgCVVGU19ESVJIQVNICQkjSW1wcm92
ZSBwZXJmb3JtYW5jZSBvbiBiaWcgZGlyZWN0b3JpZXMKIG9wdGlvbnMgCU1GUwkJCSNNZW1vcnkg
RmlsZXN5c3RlbQorb3B0aW9ucyAJVE1QRlMJCQkjVGVtcG9yYXJ5IEZpbGVzeXN0ZW0KIG9wdGlv
bnMgCU1EX1JPT1QJCQkjTUQgaXMgYSBwb3RlbnRpYWwgcm9vdCBkZXZpY2UKIG9wdGlvbnMgCU5G
UwkJCSNOZXR3b3JrIEZpbGVzeXN0ZW0KIG9wdGlvbnMgCU5GU19ST09UCQkjTkZTIHVzYWJsZSBh
cyByb290IGRldmljZSwgTkZTIHJlcXVpcmVkCmRpZmYgLS1naXQgYS9zeXMvY29uZmlnL0xJTlQg
Yi9zeXMvY29uZmlnL0xJTlQKaW5kZXggMDA2NTNkNC4uMzk3NmRlYyAxMDA2NDQKLS0tIGEvc3lz
L2NvbmZpZy9MSU5UCisrKyBiL3N5cy9jb25maWcvTElOVApAQCAtNzQ5LDYgKzc0OSw3IEBAIG9w
dGlvbnMgCVBST0NGUwkJCSNQcm9jZXNzIGZpbGVzeXN0ZW0KIG9wdGlvbnMgCVNNQkZTCQkJI1NN
Qi9DSUZTIGZpbGVzeXN0ZW0KIG9wdGlvbnMJCVVERgkJCSNVREYgZmlsZXN5c3RlbQogb3B0aW9u
cwkJSEFNTUVSCQkJI0hBTU1FUiBmaWxlc3lzdGVtCitvcHRpb25zIAlUTVBGUwkJCSNUZW1wb3Jh
cnkgZmlsZXN5c3RlbQogCiAjIFlZWS1EUiBUaWxsIHdlIHJld29yayB0aGUgVk9QIG1ldGhvZHMg
Zm9yIHRoaXMgZmlsZXN5c3RlbQogI29wdGlvbnMgCVVOSU9OCQkJI1VuaW9uIGZpbGVzeXN0ZW0K
ZGlmZiAtLWdpdCBhL3N5cy9jb25maWcvVktFUk5FTCBiL3N5cy9jb25maWcvVktFUk5FTAppbmRl
eCA0OWIwMjcxLi5hYzY3NDAwIDEwMDY0NAotLS0gYS9zeXMvY29uZmlnL1ZLRVJORUwKKysrIGIv
c3lzL2NvbmZpZy9WS0VSTkVMCkBAIC01MSw2ICs1MSw3IEBAIG9wdGlvbnMgCUZGU19ST09UCQkj
RkZTIHVzYWJsZSBhcyByb290IGRldmljZSBba2VlcCB0aGlzIV0KIG9wdGlvbnMgCVNPRlRVUERB
VEVTCQkjRW5hYmxlIEZGUyBzb2Z0IHVwZGF0ZXMgc3VwcG9ydAogb3B0aW9ucyAJVUZTX0RJUkhB
U0gJCSNJbXByb3ZlIHBlcmZvcm1hbmNlIG9uIGJpZyBkaXJlY3Rvcmllcwogb3B0aW9ucyAJTUZT
CQkJI01lbW9yeSBGaWxlc3lzdGVtCitvcHRpb25zIAlUTVBGUwkJCSNUZW1wb3JhcnkgRmlsZXN5
c3RlbQogb3B0aW9ucyAJTURfUk9PVAkJCSNNRCBpcyBhIHBvdGVudGlhbCByb290IGRldmljZQog
b3B0aW9ucyAJTkZTCQkJI05ldHdvcmsgRmlsZXN5c3RlbQogb3B0aW9ucyAJTkZTX1JPT1QJCSNO
RlMgdXNhYmxlIGFzIHJvb3QgZGV2aWNlLCBORlMgcmVxdWlyZWQKZGlmZiAtLWdpdCBhL3N5cy9j
b25maWcvWDg2XzY0X0dFTkVSSUMgYi9zeXMvY29uZmlnL1g4Nl82NF9HRU5FUklDCmluZGV4IGRj
YzQwZTEuLjhhYzJiMzIgMTAwNjQ0Ci0tLSBhL3N5cy9jb25maWcvWDg2XzY0X0dFTkVSSUMKKysr
IGIvc3lzL2NvbmZpZy9YODZfNjRfR0VORVJJQwpAQCAtMjIsNiArMjIsNyBAQCBvcHRpb25zIAlG
RlNfUk9PVAkJI0ZGUyB1c2FibGUgYXMgcm9vdCBkZXZpY2UgW2tlZXAgdGhpcyFdCiBvcHRpb25z
IAlTT0ZUVVBEQVRFUwkJI0VuYWJsZSBGRlMgc29mdCB1cGRhdGVzIHN1cHBvcnQKIG9wdGlvbnMg
CVVGU19ESVJIQVNICQkjSW1wcm92ZSBwZXJmb3JtYW5jZSBvbiBiaWcgZGlyZWN0b3JpZXMKIG9w
dGlvbnMgCU1GUwkJCSNNZW1vcnkgRmlsZXN5c3RlbQorb3B0aW9ucyAJVE1QRlMJCQkjVGVtcG9y
YXJ5IEZpbGVzeXN0ZW0KIG9wdGlvbnMgCU1EX1JPT1QJCQkjTUQgaXMgYSBwb3RlbnRpYWwgcm9v
dCBkZXZpY2UKIG9wdGlvbnMgCU5GUwkJCSNOZXR3b3JrIEZpbGVzeXN0ZW0KIG9wdGlvbnMgCU5G
U19ST09UCQkjTkZTIHVzYWJsZSBhcyByb290IGRldmljZSwgTkZTIHJlcXVpcmVkCmRpZmYgLS1n
aXQgYS9zeXMva2Vybi9NYWtlLnRhZ3MuaW5jIGIvc3lzL2tlcm4vTWFrZS50YWdzLmluYwppbmRl
eCA4MGZlZjgyLi4yMDNlOGJkIDEwMDY0NAotLS0gYS9zeXMva2Vybi9NYWtlLnRhZ3MuaW5jCisr
KyBiL3N5cy9rZXJuL01ha2UudGFncy5pbmMKQEAgLTUyLDYgKzUyLDcgQEAgQ09NTT0JJHtTWVN9
L2NvbmYvKi5bY2hdIFwKIAkke1NZU30vZW11bGF0aW9uL3Bvc2l4NC8qLltjaF0gXAogCSR7U1lT
fS92ZnMvbWZzLyouW2NoXSBcCiAJJHtTWVN9L3Zmcy91ZnMvKi5bY2hdIFwKKwkke1NZU30vdmZz
L3RtcGZzLyouW2NoXSBcCiAJJHtTWVN9L3ZtLyouW2NoXSBcCiAJJHtTWVN9L3N5cy8qLltjaF0K
IApAQCAtOTEsNCArOTIsNSBAQCBDT01NRElSMj0gJHtTWVN9L2Rldi9kaXNrL2FkdmFuc3lzIFwK
IAkke1NZU30vdmZzL3NwZWNmcyBcCiAJJHtTWVN9L3Zmcy91bmlvbiBcCiAJJHtTWVN9L3Zmcy91
ZnMgXAotCSR7U1lTfS92ZnMvbWZzCisJJHtTWVN9L3Zmcy9tZnMgXAorCSR7U1lTfS92ZnMvdG1w
ZnMKZGlmZiAtLWdpdCBhL3N5cy9rZXJuL01ha2VmaWxlIGIvc3lzL2tlcm4vTWFrZWZpbGUKaW5k
ZXggOGI1OWMyMS4uYTU1ZDhiZCAxMDA2NDQKLS0tIGEvc3lzL2tlcm4vTWFrZWZpbGUKKysrIGIv
c3lzL2tlcm4vTWFrZWZpbGUKQEAgLTI3LDcgKzI3LDcgQEAgREdFTj0JY29uZiBcCiAJdmZzIHZm
cy9kZWFkZnMgdmZzL2ZkZXNjIHZmcy9maWZvZnMgXAogCXZmcy9udWxsZnMgdmZzL3BvcnRhbCB2
ZnMvcHJvY2ZzIFwKIAl2ZnMvc3BlY2ZzIHZmcy91bmlvbiBcCi0JdmZzL3VmcyB2ZnMvbWZzIHZm
cy9uZnMgXAorCXZmcy91ZnMgdmZzL21mcyB2ZnMvbmZzIHZmcy90bXBmcyBcCiAJbmV0IG5ldGlu
ZXQgbmV0bnMgc3lzIFwKIAl2bQogCmRpZmYgLS1naXQgYS9zeXMva2Vybi9NYWtlZmlsZS5taXNj
IGIvc3lzL2tlcm4vTWFrZWZpbGUubWlzYwppbmRleCA5MjJlMWE2Li5kZjA1NjNhIDEwMDY0NAot
LS0gYS9zeXMva2Vybi9NYWtlZmlsZS5taXNjCisrKyBiL3N5cy9rZXJuL01ha2VmaWxlLm1pc2MK
QEAgLTQyLDcgKzQyLDcgQEAgREdFTj0JY29uZiBcCiAJdmZzIHZmcy9kZWFkZnMgdmZzL2ZkZXNj
IHZmcy9maWZvZnMgXAogCXZmcy9udWxsZnMgdmZzL3BvcnRhbCB2ZnMvcHJvY2ZzIFwKIAl2ZnMv
c3BlY2ZzIHZmcy91bmlvbiBcCi0JdmZzL3VmcyB2ZnMvbWZzIHZmcy9uZnMgXAorCXZmcy91ZnMg
dmZzL21mcyB2ZnMvbmZzIHZmcy90bXBmcyBcCiAJbmV0IG5ldGluZXQgbmV0bnMgc3lzIFwKIAl2
bQogCmRpZmYgLS1naXQgYS9zeXMva2Vybi92ZnNfbmxvb2t1cC5jIGIvc3lzL2tlcm4vdmZzX25s
b29rdXAuYwppbmRleCAzODViNWUxLi5hYmU0YmM3IDEwMDY0NAotLS0gYS9zeXMva2Vybi92ZnNf
bmxvb2t1cC5jCisrKyBiL3N5cy9rZXJuL3Zmc19ubG9va3VwLmMKQEAgLTU4MCw4ICs1ODAsNyBA
QCBubG9va3VwKHN0cnVjdCBubG9va3VwZGF0YSAqbmQpCiAJCTsKIAlpZiAoKnhwdHIgPT0gMCkg
ewogCSAgICBpZiAoZXJyb3IgPT0gRU5PRU5UICYmCi0JCShuZC0+bmxfZmxhZ3MgJiAoTkxDX0NS
RUFURSB8IE5MQ19SRU5BTUVfRFNUKSkKLQkgICAgKSB7CisJCShuZC0+bmxfZmxhZ3MgJiAoTkxD
X0NSRUFURSB8IE5MQ19SRU5BTUVfRFNUKSkpIHsKIAkJaWYgKG5kLT5ubF9mbGFncyAmIE5MQ19O
RlNfUkRPTkxZKSB7CiAJCQllcnJvciA9IEVST0ZTOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEv
c3lzL2tlcm4vdmZzX3ZvcG9wcy5jIGIvc3lzL2tlcm4vdmZzX3ZvcG9wcy5jCmluZGV4IDkxOGQ4
ZjMuLjE3ZmM3ZWIgMTAwNjQ0Ci0tLSBhL3N5cy9rZXJuL3Zmc192b3BvcHMuYworKysgYi9zeXMv
a2Vybi92ZnNfdm9wb3BzLmMKQEAgLTgxOSw3ICs4MTksOCBAQCB2b3Bfc3RyYXRlZ3koc3RydWN0
IHZvcF9vcHMgKm9wcywgc3RydWN0IHZub2RlICp2cCwgc3RydWN0IGJpbyAqYmlvKQogCWFwLmFf
YmlvID0gYmlvOwogCiAJaWYgKHZwLT52X21vdW50KSB7Ci0JCVZGU19NUExPQ0sxKHZwLT52X21v
dW50KTsKKworCQlWRlNfTVBMT0NLX0ZMQUcodnAtPnZfbW91bnQsIE1OVEtfU0dfTVBTQUZFKTsK
IAkJRE9fT1BTKG9wcywgZXJyb3IsICZhcCwgdm9wX3N0cmF0ZWd5KTsKIAkJVkZTX01QVU5MT0NL
KHZwLT52X21vdW50KTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvc3lzL3N5cy9tb3VudC5oIGIv
c3lzL3N5cy9tb3VudC5oCmluZGV4IDM5OWE2ZWEuLjdkMTRkYmUgMTAwNjQ0Ci0tLSBhL3N5cy9z
eXMvbW91bnQuaAorKysgYi9zeXMvc3lzL21vdW50LmgKQEAgLTI5MCw2ICsyOTAsNyBAQCBzdHJ1
Y3QgbW91bnQgewogI2RlZmluZSBNTlRLX1dSX01QU0FGRQkweDAwMDQwMDAwCS8qIHZvcF93cml0
ZSBpcyBNUFNBRkUgKi8KICNkZWZpbmUgTU5US19HQV9NUFNBRkUJMHgwMDA4MDAwMAkvKiB2b3Bf
Z2V0YXR0ciBpcyBNUFNBRkUgKi8KICNkZWZpbmUgTU5US19JTl9NUFNBRkUJMHgwMDEwMDAwMAkv
KiB2b3BfaW5hY3RpdmUgaXMgTVBTQUZFICovCisjZGVmaW5lIE1OVEtfU0dfTVBTQUZFCTB4MDAy
MDAwMDAJLyogdm9wX3N0cmF0ZWd5IGlzIE1QU0FGRSAqLwogI2RlZmluZSBNTlRLX05DQUxJQVNF
RAkweDAwODAwMDAwCS8qIG5hbWVjYWNoZWQgYWxpYXNlZCAqLwogI2RlZmluZSBNTlRLX1VOTU9V
TlQJMHgwMTAwMDAwMAkvKiB1bm1vdW50IGluIHByb2dyZXNzICovCiAjZGVmaW5lCU1OVEtfTVdB
SVQJMHgwMjAwMDAwMAkvKiB3YWl0aW5nIGZvciB1bm1vdW50IHRvIGZpbmlzaCAqLwpkaWZmIC0t
Z2l0IGEvc3lzL3N5cy92ZnNjYWNoZS5oIGIvc3lzL3N5cy92ZnNjYWNoZS5oCmluZGV4IGU1NTQw
OTguLmJjY2MyNmYgMTAwNjQ0Ci0tLSBhL3N5cy9zeXMvdmZzY2FjaGUuaAorKysgYi9zeXMvc3lz
L3Zmc2NhY2hlLmgKQEAgLTExNCw3ICsxMTQsNyBAQCBlbnVtIHZ0YWd0eXBlCXsKIAlWVF9QT1JU
QUwsIFZUX05VTEwsIFZUX1VOVVNFRDEwLCBWVF9LRVJORlMsIFZUX1BST0NGUywgVlRfQUZTLAog
CVZUX0lTT0ZTLCBWVF9VTklPTiwgVlRfTVNET1NGUywgVlRfVEZTLCBWVF9WRlMsIFZUX0NPREEs
IFZUX05URlMsCiAJVlRfSFBGUywgVlRfTldGUywgVlRfU01CRlMsIFZUX1VERiwgVlRfRVhUMkZT
LCBWVF9TWU5USCwKLQlWVF9VU0VSRlMsIFZUX0hBTU1FUiwgVlRfREVWRlMKKwlWVF9VU0VSRlMs
IFZUX0hBTU1FUiwgVlRfREVWRlMsIFZUX1RNUEZTCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3lz
L3Zmcy9NYWtlZmlsZSBiL3N5cy92ZnMvTWFrZWZpbGUKaW5kZXggNDc3MWRiZC4uN2NkMWUyNiAx
MDA2NDQKLS0tIGEvc3lzL3Zmcy9NYWtlZmlsZQorKysgYi9zeXMvdmZzL01ha2VmaWxlCkBAIC00
LDYgKzQsNiBAQAogCiBTVUJESVI9Zmlmb2ZzIG1zZG9zZnMgcG9ydGFsIGdudSBuZnMgcHJvY2Zz
IFwKIAlocGZzIG50ZnMgc21iZnMgaXNvZnMgZmRlc2MgbWZzIG53ZnMgdWRmIFwKLQludWxsZnMg
aGFtbWVyCisJbnVsbGZzIGhhbW1lciB0bXBmcwogCiAuaW5jbHVkZSA8YnNkLnN1YmRpci5taz4K
ZGlmZiAtLWdpdCBhL3N5cy92ZnMvdG1wZnMvTWFrZWZpbGUgYi9zeXMvdmZzL3RtcGZzL01ha2Vm
aWxlCmluZGV4IGU2OWRlMjkuLjY3MzJlMTggMTAwNjQ0Ci0tLSBhL3N5cy92ZnMvdG1wZnMvTWFr
ZWZpbGUKKysrIGIvc3lzL3Zmcy90bXBmcy9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKworS01P
RD0JdG1wZnMKK1NSQ1M9CXRtcGZzX3Zub3BzLmMgdG1wZnNfc3Vici5jIFwKKyAgICAgICAgdG1w
ZnNfZmlmb29wcy5jIHRtcGZzX3Zmc29wcy5jCitOT01BTj0KKworLmluY2x1ZGUgPGJzZC5rbW9k
Lm1rPgorCmRpZmYgLS1naXQgYS9zeXMvdmZzL3RtcGZzL3RtcGZzLmggYi9zeXMvdmZzL3RtcGZz
L3RtcGZzLmgKaW5kZXggZTY5ZGUyOS4uN2FhYzQzZCAxMDA2NDQKLS0tIGEvc3lzL3Zmcy90bXBm
cy90bXBmcy5oCisrKyBiL3N5cy92ZnMvdG1wZnMvdG1wZnMuaApAQCAtMCwwICsxLDU5NyBAQAor
LyoJJE5ldEJTRDogdG1wZnMuaCx2IDEuMjYgMjAwNy8wMi8yMiAwNjozNzowMCB0aG9ycGVqIEV4
cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFRoZSBOZXRCU0QgRm91
bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUg
aXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRh
dGlvbgorICogYnkgSnVsaW8gTS4gTWVyaW5vIFZpZGFsLCBkZXZlbG9wZWQgYXMgcGFydCBvZiBH
b29nbGUncyBTdW1tZXIgb2YgQ29kZQorICogMjAwNSBwcm9ncmFtLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMu
IEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Rk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICoKKyAqICRGcmVlQlNEOiBzcmMvc3lzL2ZzL3RtcGZzL3RtcGZzLmgsdiAxLjE4IDIwMDkv
MTAvMTEgMDc6MDM6NTYgZGVscGhpaiBFeHAgJAorICovCisKKyNpZm5kZWYgX1ZGU19UTVBGU19U
TVBGU19IXworI2RlZmluZSBfVkZTX1RNUEZTX1RNUEZTX0hfCisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICogS0VSTkVMLVNQRUNJRklDIERFRklOSVRJT05TCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNs
dWRlIDxzeXMvZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjaW5jbHVkZSA8c3lz
L3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3Zub2RlLmg+CisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4K
KyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9sb2NrZi5oPgorI2luY2x1ZGUg
PHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9vYmpjYWNoZS5oPgorCisvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+Cisj
aW5jbHVkZSA8c3lzL3ZtbWV0ZXIuaD4KKyNpbmNsdWRlIDx2bS9zd2FwX3BhZ2VyLmg+CisKK01B
TExPQ19ERUNMQVJFKE1fVE1QRlNNTlQpOworTUFMTE9DX0RFQ0xBUkUoTV9UTVBGU05BTUUpOwor
CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9m
IGEgdG1wZnMgZGlyZWN0b3J5IGVudHJ5LgorICovCitzdHJ1Y3QgdG1wZnNfZGlyZW50IHsKKwlU
QUlMUV9FTlRSWSh0bXBmc19kaXJlbnQpCXRkX2VudHJpZXM7CisKKwkvKiBMZW5ndGggb2YgdGhl
IG5hbWUgc3RvcmVkIGluIHRoaXMgZGlyZWN0b3J5IGVudHJ5LiAgVGhpcyBhdm9pZHMKKwkgKiB0
aGUgbmVlZCB0byByZWNhbGN1bGF0ZSBpdCBldmVyeSB0aW1lIHRoZSBuYW1lIGlzIHVzZWQuICov
CisJdWludDE2X3QJCQl0ZF9uYW1lbGVuOworCisJLyogVGhlIG5hbWUgb2YgdGhlIGVudHJ5LCBh
bGxvY2F0ZWQgZnJvbSBhIHN0cmluZyBwb29sLiAgVGhpcworCSogc3RyaW5nIGlzIG5vdCByZXF1
aXJlZCB0byBiZSB6ZXJvLXRlcm1pbmF0ZWQ7IHRoZXJlZm9yZSwgdGhlCisJKiB0ZF9uYW1lbGVu
IGZpZWxkIG11c3QgYWx3YXlzIGJlIHVzZWQgd2hlbiBhY2Nlc3NpbmcgaXRzIHZhbHVlLiAqLwor
CWNoYXIgKgkJCQl0ZF9uYW1lOworCisJLyogUG9pbnRlciB0byB0aGUgbm9kZSB0aGlzIGVudHJ5
IHJlZmVycyB0by4gKi8KKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqCQl0ZF9ub2RlOworfTsKKworLyog
QSBkaXJlY3RvcnkgaW4gdG1wZnMgaG9sZHMgYSBzb3J0ZWQgbGlzdCBvZiBkaXJlY3RvcnkgZW50
cmllcywgd2hpY2ggaW4KKyAqIHR1cm4gcG9pbnQgdG8gb3RoZXIgZmlsZXMgKHdoaWNoIGNhbiBi
ZSBkaXJlY3RvcmllcyB0aGVtc2VsdmVzKS4KKyAqCisgKiBJbiB0bXBmcywgdGhpcyBsaXN0IGlz
IG1hbmFnZWQgYnkgYSB0YWlsIHF1ZXVlLCB3aG9zZSBoZWFkIGlzIGRlZmluZWQgYnkKKyAqIHRo
ZSBzdHJ1Y3QgdG1wZnNfZGlyIHR5cGUuCisgKgorICogSXQgaXMgaW1wb3JhbnQgdG8gbm90aWNl
IHRoYXQgZGlyZWN0b3JpZXMgZG8gbm90IGhhdmUgZW50cmllcyBmb3IgLiBhbmQKKyAqIC4uIGFz
IG90aGVyIGZpbGUgc3lzdGVtcyBkby4gIFRoZXNlIGNhbiBiZSBnZW5lcmF0ZWQgd2hlbiByZXF1
ZXN0ZWQKKyAqIGJhc2VkIG9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBieSBvdGhlciBtZWFucywg
c3VjaCBhcyB0aGUgcG9pbnRlciB0bworICogdGhlIG5vZGUgaXRzZWxmIGluIHRoZSBmb3JtZXIg
Y2FzZSBvciB0aGUgcG9pbnRlciB0byB0aGUgcGFyZW50IGRpcmVjdG9yeQorICogaW4gdGhlIGxh
dHRlciBjYXNlLiAgVGhpcyBpcyBkb25lIHRvIHNpbXBsaWZ5IHRtcGZzJ3MgY29kZSBhbmQsIG1v
cmUKKyAqIGltcG9ydGFudGx5LCB0byByZW1vdmUgcmVkdW5kYW5jeS4gKi8KK1RBSUxRX0hFQUQo
dG1wZnNfZGlyLCB0bXBmc19kaXJlbnQpOworCisvKiBFYWNoIGVudHJ5IGluIGEgZGlyZWN0b3J5
IGhhcyBhIGNvb2tpZSB0aGF0IGlkZW50aWZpZXMgaXQuICBDb29raWVzCisgKiBzdXBlcnNlZGUg
b2Zmc2V0cyB3aXRoaW4gZGlyZWN0b3JpZXMgYmVjYXVzZSwgZ2l2ZW4gaG93IHRtcGZzIHN0b3Jl
cworICogZGlyZWN0b3JpZXMgaW4gbWVtb3J5LCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGFu
IG9mZnNldC4gIChFbXVsYXRpbmcKKyAqIGEgcmVhbCBvZmZzZXQgY291bGQgYmUgdmVyeSBkaWZm
aWN1bHQuKQorICogCisgKiBUaGUgJy4nLCAnLi4nIGFuZCB0aGUgZW5kIG9mIGRpcmVjdG9yeSBt
YXJrZXJzIGhhdmUgZml4ZWQgY29va2llcyB3aGljaAorICogY2Fubm90IGNvbGxpZGUgd2l0aCB0
aGUgY29va2llcyBnZW5lcmF0ZWQgYnkgb3RoZXIgZW50cmllcy4gIFRoZSBjb29raWVzCisgKiBm
b3IgdGhlIG90aGVyIGVudHJpZXMgYXJlIGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgbWVtb3J5IGFk
ZHJlc3Mgb24gd2hpY2gKKyAqIHN0b3JlcyB0aGVpciBpbmZvcm1hdGlvbiBpcyBzdG9yZWQuCisg
KgorICogSWRlYWxseSwgdXNpbmcgdGhlIGVudHJ5J3MgbWVtb3J5IHBvaW50ZXIgYXMgdGhlIGNv
b2tpZSB3b3VsZCBiZSBlbm91Z2gKKyAqIHRvIHJlcHJlc2VudCBpdCBhbmQgaXQgd291bGRuJ3Qg
Y2F1c2UgY29sbGlzaW9ucyBpbiBhbnkgc3lzdGVtLgorICogVW5mb3J0dW5hdGVseSwgdGhpcyBy
ZXN1bHRzIGluICJvZmZzZXRzIiB3aXRoIHZlcnkgbGFyZ2UgdmFsdWVzIHdoaWNoCisgKiBsYXRl
ciByYWlzZSBwcm9ibGVtcyBpbiB0aGUgTGludXggY29tcGF0aWJpbGl0eSBsYXllciAoYW5kIG1h
eWJlIGluIG90aGVyCisgKiBwbGFjZXMpIGFzIGRlc2NyaWJlZCBpbiBQUiBrZXJuLzMyMDM0LiAg
SGVuY2Ugd2UgbmVlZCB0byB3b3JrYXJvdW5kIHRoaXMKKyAqIHdpdGggYSByYXRoZXIgdWdseSBo
YWNrLgorICoKKyAqIExpbnV4IDMyLWJpdCBiaW5hcmllcywgdW5sZXNzIGJ1aWx0IHdpdGggX0ZJ
TEVfT0ZGU0VUX0JJVFM9NjQsIGhhdmUgb2ZmX3QKKyAqIHNldCB0byAnbG9uZycsIHdoaWNoIGlz
IGEgMzItYml0ICpzaWduZWQqIGxvbmcgaW50ZWdlci4gIFJlZ2FyZGxlc3Mgb2YKKyAqIHRoZSBt
YWNybyB2YWx1ZSwgR0xJQkMgKDIuMyBhdCBsZWFzdCkgYWx3YXlzIHVzZXMgdGhlIGdldGRlbnRz
NjQKKyAqIHN5c3RlbSBjYWxsICh3aGVuIGNhbGxpbmcgcmVhZGRpcikgd2hpY2ggaW50ZXJuYWxs
eSByZXR1cm5zIG9mZjY0X3QKKyAqIG9mZnNldHMuICBJbiBvcmRlciB0byBtYWtlIDMyLWJpdCBi
aW5hcmllcyB3b3JrLCAqR0xJQkMqIGNvbnZlcnRzIHRoZQorICogNjQtYml0IHZhbHVlcyByZXR1
cm5lZCBieSB0aGUga2VybmVsIHRvIDMyLWJpdCBvbmVzIGFuZCBhYm9ydHMgd2l0aAorICogRU9W
RVJGTE9XIGlmIHRoZSBjb252ZXJzaW9uIHJlc3VsdHMgaW4gdmFsdWVzIHRoYXQgd29uJ3QgZml0
IGluIDMyLWJpdAorICogaW50ZWdlcnMgKHdoaWNoIGl0IGFzc3VtZXMgaXMgYmVjYXVzZSB0aGUg
ZGlyZWN0b3J5IGlzIGV4dHJlbWVseSBsYXJnZSkuCisgKiBUaGlzIHdvdWxkbid0IGNhdXNlIHBy
b2JsZW1zIGlmIHdlIHdlcmUgZGVhbGluZyB3aXRoIHVuc2lnbmVkIGludGVnZXJzLAorICogYnV0
IGFzIHdlIGhhdmUgc2lnbmVkIGludGVnZXJzLCB0aGlzIGNoZWNrIGZhaWxzIGR1ZSB0byBzaWdu
IGV4cGFuc2lvbi4KKyAqCisgKiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhhdCB0aGUga2VybmVs
IHJldHVybnMgdGhlIDB4YzEyMzQ1NjcgY29va2llIHRvCisgKiB1c2Vyc3BhY2UgaW4gYSBvZmY2
NF90IGludGVnZXIuICBMYXRlciBvbiwgR0xJQkMgY2FzdHMgdGhpcyB2YWx1ZSB0bworICogb2Zm
X3QgKHJlbWVtYmVyLCBzaWduZWQpIHdpdGggY29kZSBzaW1pbGFyIHRvOgorICogICAgIHN5c3Rl
bSBjYWxsIHJldHVybnMgdGhlIG9mZnNldCBpbiBrZXJuZWxfdmFsdWU7CisgKiAgICAgb2ZmX3Qg
Y2FzdGVkX3ZhbHVlID0ga2VybmVsX3ZhbHVlOworICogICAgIGlmIChzaXplb2Yob2ZmX3QpICE9
IHNpemVvZihvZmY2NF90KSAmJgorICogICAgICAgICBrZXJuZWxfdmFsdWUgIT0gY2FzdGVkX3Zh
bHVlKQorICogICAgICAgICAgICAgZXJyb3IhCisgKiBJbiB0aGlzIGNhc2UsIGNhc3RlZF92YWx1
ZSBzdGlsbCBoYXMgMHhjMTIzNDU2NywgYnV0IHdoZW4gaXQgaXMgY29tcGFyZWQKKyAqIGZvciBl
cXVhbGl0eSBhZ2FpbnN0IGtlcm5lbF92YWx1ZSwgaXQgaXMgcHJvbW90ZWQgdG8gYSA2NC1iaXQg
aW50ZWdlciBhbmQKKyAqIGJlY29tZXMgMHhmZmZmZmZmZmMxMjM0NTY3LCB3aGljaCBpcyBkaWZm
ZXJlbnQgdGhhbiAweDAwMDAwMDAwYzEyMzQ1NjcuCisgKiBUaGVuLCBHTElCQyBhc3N1bWVzIHRo
aXMgaXMgYmVjYXVzZSB0aGUgZGlyZWN0b3J5IGlzIHZlcnkgbGFyZ2UuCisgKgorICogR2l2ZW4g
dGhhdCBhbGwgdGhlIGFib3ZlIGhhcHBlbnMgaW4gdXNlci1zcGFjZSwgd2UgaGF2ZSBubyBjb250
cm9sIG92ZXIKKyAqIGl0OyB0aGVyZWZvcmUgd2UgbXVzdCB3b3JrYXJvdW5kIHRoZSBpc3N1ZSBo
ZXJlLiAgV2UgZG8gdGhpcyBieQorICogdHJ1bmNhdGluZyB0aGUgcG9pbnRlciB2YWx1ZSB0byBh
IDMyLWJpdCBpbnRlZ2VyIGFuZCBob3BlIHRoYXQgdGhlcmUKKyAqIHdvbid0IGJlIGNvbGxpc2lv
bnMuICBJbiBmYWN0LCB0aGlzIHdpbGwgbm90IGNhdXNlIGFueSBwcm9ibGVtcyBpbgorICogMzIt
Yml0IHBsYXRmb3JtcyBidXQgc29tZSBtaWdodCBhcmlzZSBpbiA2NC1iaXQgbWFjaGluZXMgKEkn
bSBub3Qgc3VyZQorICogaWYgdGhleSBjYW4gaGFwcGVuIGF0IGFsbCBpbiBwcmFjdGljZSkuCisg
KgorICogWFhYIEEgbmljZXIgc29sdXRpb24gc2hhbGwgYmUgYXR0ZW1wdGVkLiAqLworI2lmZGVm
IF9LRVJORUwKKyNkZWZpbmUJVE1QRlNfRElSQ09PS0lFX0RPVAkwCisjZGVmaW5lCVRNUEZTX0RJ
UkNPT0tJRV9ET1RET1QJMQorI2RlZmluZQlUTVBGU19ESVJDT09LSUVfRU9GCTIKK3N0YXRpYyBf
X2lubGluZQorb2ZmX3QKK3RtcGZzX2RpcmNvb2tpZShzdHJ1Y3QgdG1wZnNfZGlyZW50ICpkZSkK
K3sKKwlvZmZfdCBjb29raWU7CisKKwljb29raWUgPSAoKG9mZl90KSh1aW50cHRyX3QpZGUgPj4g
MSkgJiAweDdGRkZGRkZGOworCUtLQVNTRVJUKGNvb2tpZSAhPSBUTVBGU19ESVJDT09LSUVfRE9U
KTsKKwlLS0FTU0VSVChjb29raWUgIT0gVE1QRlNfRElSQ09PS0lFX0RPVERPVCk7CisJS0tBU1NF
UlQoY29va2llICE9IFRNUEZTX0RJUkNPT0tJRV9FT0YpOworCisJcmV0dXJuIGNvb2tpZTsKK30K
KyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIEludGVybmFsIHJlcHJlc2Vu
dGF0aW9uIG9mIGEgdG1wZnMgZmlsZSBzeXN0ZW0gbm9kZS4KKyAqCisgKiBUaGlzIHN0cnVjdHVy
ZSBpcyBzcGxpdHRlZCBpbiB0d28gcGFydHM6IG9uZSBob2xkcyBhdHRyaWJ1dGVzIGNvbW1vbgor
ICogdG8gYWxsIGZpbGUgdHlwZXMgYW5kIHRoZSBvdGhlciBob2xkcyBkYXRhIHRoYXQgaXMgb25s
eSBhcHBsaWNhYmxlIHRvCisgKiBhIHBhcnRpY3VsYXIgdHlwZS4gIFRoZSBjb2RlIG11c3QgYmUg
Y2FyZWZ1bCB0byBvbmx5IGFjY2VzcyB0aG9zZQorICogYXR0cmlidXRlcyB0aGF0IGFyZSBhY3R1
YWxseSBhbGxvd2VkIGJ5IHRoZSBub2RlJ3MgdHlwZS4KKyAqCisgKgorICogQmVsb3cgaXMgdGhl
IGtleSBvZiBsb2NrcyB1c2VkIHRvIHByb3RlY3RlZCB0aGUgZmllbGRzIGluIHRoZSBmb2xsb3dp
bmcKKyAqIHN0cnVjdHVyZXMuCisgKgorICovCitzdHJ1Y3QgdG1wZnNfbm9kZSB7CisJLyogRG91
Ymx5LWxpbmtlZCBsaXN0IGVudHJ5IHdoaWNoIGxpbmtzIGFsbCBleGlzdGluZyBub2RlcyBmb3Ig
YQorCSAqIHNpbmdsZSBmaWxlIHN5c3RlbS4gIFRoaXMgaXMgcHJvdmlkZWQgdG8gZWFzZSB0aGUg
cmVtb3ZhbCBvZgorCSAqIGFsbCBub2RlcyBkdXJpbmcgdGhlIHVubW91bnQgb3BlcmF0aW9uLiAq
LworCUxJU1RfRU5UUlkodG1wZnNfbm9kZSkJdG5fZW50cmllczsKKworCS8qIFRoZSBub2RlJ3Mg
dHlwZS4gIEFueSBvZiAnVkJMSycsICdWQ0hSJywgJ1ZESVInLCAnVkZJRk8nLAorCSAqICdWTE5L
JywgJ1ZSRUcnIGFuZCAnVlNPQ0snIGlzIGFsbG93ZWQuICBUaGUgdXNhZ2Ugb2Ygdm5vZGUKKwkg
KiB0eXBlcyBpbnN0ZWFkIG9mIGEgY3VzdG9tIGVudW1lcmF0aW9uIGlzIHRvIG1ha2UgdGhpbmdz
IHNpbXBsZXIKKwkgKiBhbmQgZmFzdGVyLCBhcyB3ZSBkbyBub3QgbmVlZCB0byBjb252ZXJ0IGJl
dHdlZW4gdHdvIHR5cGVzLiAqLworCWVudW0gdnR5cGUJCXRuX3R5cGU7CisKKwkvKiBOb2RlIGlk
ZW50aWZpZXIuICovCisJaW5vX3QJCQl0bl9pZDsKKworCS8qIE5vZGUncyBpbnRlcm5hbCBzdGF0
dXMuICBUaGlzIGlzIHVzZWQgYnkgc2V2ZXJhbCBmaWxlIHN5c3RlbQorCSAqIG9wZXJhdGlvbnMg
dG8gZG8gbW9kaWZpY2F0aW9ucyB0byB0aGUgbm9kZSBpbiBhIGRlbGF5ZWQKKwkgKiBmYXNoaW9u
LiAqLworCWludAkJCXRuX3N0YXR1czsKKyNkZWZpbmUJVE1QRlNfTk9ERV9BQ0NFU1NFRAkoMSA8
PCAxKQorI2RlZmluZQlUTVBGU19OT0RFX01PRElGSUVECSgxIDw8IDIpCisjZGVmaW5lCVRNUEZT
X05PREVfQ0hBTkdFRAkoMSA8PCAzKQorCisJLyogVGhlIG5vZGUgc2l6ZS4gIEl0IGRvZXMgbm90
IG5lY2Vzc2FyaWx5IG1hdGNoIHRoZSByZWFsIGFtb3VudAorCSAqIG9mIG1lbW9yeSBjb25zdW1l
ZCBieSBpdC4gKi8KKwlvZmZfdAkJCXRuX3NpemU7CisKKwkvKiBHZW5lcmljIG5vZGUgYXR0cmli
dXRlcy4gKi8KKwl1aWRfdAkJCXRuX3VpZDsKKwlnaWRfdAkJCXRuX2dpZDsKKwltb2RlX3QJCQl0
bl9tb2RlOworCWludAkJCXRuX2ZsYWdzOworCW5saW5rX3QJCQl0bl9saW5rczsKKwlpbnQzMl90
CQkJdG5fYXRpbWU7CisJaW50MzJfdAkJCXRuX2F0aW1lbnNlYzsKKwlpbnQzMl90CQkJdG5fbXRp
bWU7CisJaW50MzJfdAkJCXRuX210aW1lbnNlYzsKKwlpbnQzMl90CQkJdG5fY3RpbWU7CisJaW50
MzJfdAkJCXRuX2N0aW1lbnNlYzsKKwl1bnNpZ25lZCBsb25nCQl0bl9nZW47CisJc3RydWN0IGxv
Y2tmCQl0bl9hZHZsb2NrOworCisJLyogQXMgdGhlcmUgaXMgYSBzaW5nbGUgdm5vZGUgZm9yIGVh
Y2ggYWN0aXZlIGZpbGUgd2l0aGluIHRoZQorCSAqIHN5c3RlbSwgY2FyZSBoYXMgdG8gYmUgdGFr
ZW4gdG8gYXZvaWQgYWxsb2NhdGluZyBtb3JlIHRoYW4gb25lCisJICogdm5vZGUgcGVyIGZpbGUu
ICBJbiBvcmRlciB0byBkbyB0aGlzLCBhIGJpZGlyZWN0aW9uYWwgYXNzb2NpYXRpb24KKwkgKiBp
cyBrZXB0IGJldHdlZW4gdm5vZGVzIGFuZCBub2Rlcy4KKwkgKgorCSAqIFdoZW5ldmVyIGEgdm5v
ZGUgaXMgYWxsb2NhdGVkLCBpdHMgdl9kYXRhIGZpZWxkIGlzIHVwZGF0ZWQgdG8KKwkgKiBwb2lu
dCB0byB0aGUgbm9kZSBpdCByZWZlcmVuY2VzLiAgQXQgdGhlIHNhbWUgdGltZSwgdGhlIG5vZGUn
cworCSAqIHRuX3Zub2RlIGZpZWxkIGlzIG1vZGlmaWVkIHRvIHBvaW50IHRvIHRoZSBuZXcgdm5v
ZGUgcmVwcmVzZW50aW5nCisJICogaXQuICBGdXJ0aGVyIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGEg
dm5vZGUgZm9yIHRoaXMgc2FtZSBub2RlIHdpbGwKKwkgKiByZXN1bHQgaW4gcmV0dXJuaW5nIGEg
bmV3IHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgc3RvcmVkIGluCisJICogdG5fdm5vZGUuCisJICoK
KwkgKiBNYXkgYmUgTlVMTCB3aGVuIHRoZSBub2RlIGlzIHVudXNlZCAodGhhdCBpcywgbm8gdm5v
ZGUgaGFzIGJlZW4KKwkgKiBhbGxvY2F0ZWQgZm9yIGl0IG9yIGl0IGhhcyBiZWVuIHJlY2xhaW1l
ZCkuICovCisJc3RydWN0IHZub2RlICoJCXRuX3Zub2RlOworCisJLyogaW50ZXJsb2NrIHRvIHBy
b3RlY3QgdG5fdnBzdGF0ZSAqLworCXN0cnVjdCBsb2NrCQl0bl9pbnRlcmxvY2s7CisKKwkvKiBJ
ZGVudGlmeSBpZiBjdXJyZW50IG5vZGUgaGFzIHZub2RlIGFzc2lvY2F0ZSB3aXRoCisJICogb3Ig
YWxsb2NhdGluZyB2bm9kZS4KKwkgKi8KKwlpbnQJCXRuX3Zwc3RhdGU7CisKKwkvKiBtaXNjIGRh
dGEgZmllbGQgZm9yIGRpZmZlcmVudCB0bl90eXBlIG5vZGUgKi8KKwl1bmlvbiB7CisJCS8qIFZh
bGlkIHdoZW4gdG5fdHlwZSA9PSBWQkxLIHx8IHRuX3R5cGUgPT0gVkNIUi4gKi8KKwkJZGV2X3QJ
CQl0bl9yZGV2OyAvKmludDMyX3QgPyovCisKKwkJLyogVmFsaWQgd2hlbiB0bl90eXBlID09IFZE
SVIuICovCisJCXN0cnVjdCB0bl9kaXJ7CisJCQkvKiBQb2ludGVyIHRvIHRoZSBwYXJlbnQgZGly
ZWN0b3J5LiAgVGhlIHJvb3QKKwkJCSAqIGRpcmVjdG9yeSBoYXMgYSBwb2ludGVyIHRvIGl0c2Vs
ZiBpbiB0aGlzIGZpZWxkOworCQkJICogdGhpcyBwcm9wZXJ0eSBpZGVudGlmaWVzIHRoZSByb290
IG5vZGUuICovCisJCQlzdHJ1Y3QgdG1wZnNfbm9kZSAqCXRuX3BhcmVudDsKKworCQkJLyogSGVh
ZCBvZiBhIHRhaWwtcXVldWUgdGhhdCBsaW5rcyB0aGUgY29udGVudHMgb2YKKwkJCSAqIHRoZSBk
aXJlY3RvcnkgdG9nZXRoZXIuICBTZWUgYWJvdmUgZm9yIGEKKwkJCSAqIGRlc2NyaXB0aW9uIG9m
IGl0cyBjb250ZW50cy4gKi8KKwkJCXN0cnVjdCB0bXBmc19kaXIJdG5fZGlyaGVhZDsKKworCQkJ
LyogTnVtYmVyIGFuZCBwb2ludGVyIG9mIHRoZSBmaXJzdCBkaXJlY3RvcnkgZW50cnkKKwkJCSAq
IHJldHVybmVkIGJ5IHRoZSByZWFkZGlyIG9wZXJhdGlvbiBpZiBpdCB3ZXJlCisJCQkgKiBjYWxs
ZWQgYWdhaW4gdG8gY29udGludWUgcmVhZGluZyBkYXRhIGZyb20gdGhlCisJCQkgKiBzYW1lIGRp
cmVjdG9yeSBhcyBiZWZvcmUuICBUaGlzIGlzIHVzZWQgdG8gc3BlZWQKKwkJCSAqIHVwIHJlYWRz
IG9mIGxvbmcgZGlyZWN0b3JpZXMsIGFzc3VtaW5nIHRoYXQgbm8KKwkJCSAqIG1vcmUgdGhhbiBv
bmUgcmVhZCBpcyBpbiBwcm9ncmVzcyBhdCBhIGdpdmVuIHRpbWUuCisJCQkgKiBPdGhlcndpc2Us
IHRoZXNlIHZhbHVlcyBhcmUgZGlzY2FyZGVkIGFuZCBhIGxpbmVhcgorCQkJICogc2NhbiBpcyBw
ZXJmb3JtZWQgZnJvbSB0aGUgYmVnaW5uaW5nIHVwIHRvIHRoZQorCQkJICogcG9pbnQgd2hlcmUg
cmVhZGRpciBzdGFydHMgcmV0dXJuaW5nIHZhbHVlcy4gKi8KKwkJCW9mZl90CQkJdG5fcmVhZGRp
cl9sYXN0bjsKKwkJCXN0cnVjdCB0bXBmc19kaXJlbnQgKgl0bl9yZWFkZGlyX2xhc3RwOworCQl9
dG5fZGlyOworCisJCS8qIFZhbGlkIHdoZW4gdG5fdHlwZSA9PSBWTE5LLiAqLworCQkvKiBUaGUg
bGluaydzIHRhcmdldCwgYWxsb2NhdGVkIGZyb20gYSBzdHJpbmcgcG9vbC4gKi8KKwkJY2hhciAq
CQkJdG5fbGluazsKKworCQkvKiBWYWxpZCB3aGVuIHRuX3R5cGUgPT0gVlJFRy4gKi8KKwkJc3Ry
dWN0IHRuX3JlZyB7CisJCQkvKiBUaGUgY29udGVudHMgb2YgcmVndWxhciBmaWxlcyBzdG9yZWQg
aW4gYSB0bXBmcworCQkJICogZmlsZSBzeXN0ZW0gYXJlIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xl
IGFub255bW91cworCQkJICogbWVtb3J5IG9iamVjdCAoYW9iaiwgZm9yIHNob3J0KS4gIFRoZSBh
b2JqIHByb3ZpZGVzCisJCQkgKiBkaXJlY3QgYWNjZXNzIHRvIGFueSBwb3NpdGlvbiB3aXRoaW4g
dGhlIGZpbGUsCisJCQkgKiBiZWNhdXNlIGl0cyBjb250ZW50cyBhcmUgYWx3YXlzIG1hcHBlZCBp
biBhCisJCQkgKiBjb250aWd1b3VzIHJlZ2lvbiBvZiB2aXJ0dWFsIG1lbW9yeS4gIEl0IGlzIGEg
dGFzaworCQkJICogb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoc2VlIHV2bSg5
KSkgdG8KKwkJCSAqIGlzc3VlIHRoZSByZXF1aXJlZCBwYWdlIGlucyBvciBwYWdlIG91dHMgd2hl
bmV2ZXIKKwkJCSAqIGEgcG9zaXRpb24gd2l0aGluIHRoZSBmaWxlIGlzIGFjY2Vzc2VkLiAqLwor
CQkJdm1fb2JqZWN0X3QJCXRuX2FvYmo7CisJCQlzaXplX3QJCQl0bl9hb2JqX3BhZ2VzOworCisJ
CX10bl9yZWc7CisKKwkJLyogVmFsaWQgd2hlbiB0bl90eXBlID0gVkZJRk8gKi8KKwkJc3RydWN0
IHRuX2ZpZm8geworCQkJaW50ICgqdG5fZm9fcmVhZCkgIChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVj
dCB1aW8gKnVpbywKKwkJCSAgICAgICAgc3RydWN0IHVjcmVkICpjcmVkLCBpbnQgZmxhZ3MpOwor
CQkJaW50ICgqdG5fZm9fd3JpdGUpIChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB1aW8gKnVpbywK
KwkJCSAgICAgICAgc3RydWN0IHVjcmVkICpjcmVkLCBpbnQgZmxhZ3MpOworCQl9dG5fZmlmbzsK
Kwl9dG5fc3BlYzsKK307CitMSVNUX0hFQUQodG1wZnNfbm9kZV9saXN0LCB0bXBmc19ub2RlKTsK
KworI2RlZmluZSB0bl9yZGV2IHRuX3NwZWMudG5fcmRldgorI2RlZmluZSB0bl9kaXIgdG5fc3Bl
Yy50bl9kaXIKKyNkZWZpbmUgdG5fbGluayB0bl9zcGVjLnRuX2xpbmsKKyNkZWZpbmUgdG5fcmVn
IHRuX3NwZWMudG5fcmVnCisjZGVmaW5lIHRuX2ZpZm8gdG5fc3BlYy50bl9maWZvCisKKyNkZWZp
bmUgVE1QRlNfTk9ERV9MT0NLKG5vZGUpIGxvY2ttZ3IoJihub2RlKS0+dG5faW50ZXJsb2NrLCBM
S19FWENMVVNJVkV8TEtfUkVUUlkpCisjZGVmaW5lIFRNUEZTX05PREVfVU5MT0NLKG5vZGUpIGxv
Y2ttZ3IoJihub2RlKS0+dG5faW50ZXJsb2NrLCBMS19SRUxFQVNFKQorI2RlZmluZSBUTVBGU19O
T0RFX01UWChub2RlKSAoJihub2RlKS0+dG5faW50ZXJsb2NrKQorCisjaWZkZWYgSU5WQVJJQU5U
UworI2RlZmluZSBUTVBGU19BU1NFUlRfTE9DS0VEKG5vZGUpIGRvIHsJCQkJCVwKKwkJS0tBU1NF
UlQobm9kZSAhPSBOVUxMKTsJCQkJCVwKKwkJS0tBU1NFUlQobm9kZS0+dG5fdm5vZGUgIT0gTlVM
TCk7CQkJXAorCQlpZiAoIXZuX2lzbG9ja2VkKG5vZGUtPnRuX3Zub2RlKSAmJgkJCVwKKwkJICAg
IChsb2Nrc3RhdHVzKFRNUEZTX05PREVfTVRYKG5vZGUpLCBjdXJ0aHJlYWQpID09IExLX0VYQ0xV
U0lWRSApKQkJXAorCQkJcGFuaWMoInRtcGZzOiBub2RlIGlzIG5vdCBsb2NrZWQ6ICVwIiwgbm9k
ZSk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBUTVBGU19BU1NFUlRfRUxPQ0tFRChub2RlKSBk
byB7CQkJCQlcCisJCUtLQVNTRVJUKChub2RlKSAhPSBOVUxMKTsJCQkJXAorCQlLS0FTU0VSVCgo
bm9kZSktPnRuX3Zub2RlICE9IE5VTEwpOwkJCVwKKwkJS0tBU1NFUlQobG9ja3N0YXR1cyhUTVBG
U19OT0RFX01UWChub2RlKSwgY3VydGhyZWFkKSA9PSBMS19FWENMVVNJVkUpOwkJXAorCX0gd2hp
bGUgKDApCisjZWxzZQorI2RlZmluZSBUTVBGU19BU1NFUlRfTE9DS0VEKG5vZGUpICh2b2lkKTAK
KyNkZWZpbmUgVE1QRlNfQVNTRVJUX0VMT0NLRUQobm9kZSkgKHZvaWQpMAorI2VuZGlmCisKKyNk
ZWZpbmUgVE1QRlNfVk5PREVfQUxMT0NBVElORwkxCisjZGVmaW5lIFRNUEZTX1ZOT0RFX1dBTlQJ
MgorI2RlZmluZSBUTVBGU19WTk9ERV9ET09NRUQJNAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8q
CisgKiBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIHRtcGZzIG1vdW50IHBvaW50LgorICov
CitzdHJ1Y3QgdG1wZnNfbW91bnQgeworCS8qIE1heGltdW0gbnVtYmVyIG9mIG1lbW9yeSBwYWdl
cyBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgZmlsZQorCSAqIHN5c3RlbSwgc2V0IGR1cmluZyBt
b3VudCB0aW1lLiAgVGhpcyB2YXJpYWJsZSBtdXN0IG5ldmVyIGJlCisJICogdXNlZCBkaXJlY3Rs
eSBhcyBpdCBtYXkgYmUgYmlnZ2VyIHRoYW4gdGhlIGN1cnJlbnQgYW1vdW50IG9mCisJICogZnJl
ZSBtZW1vcnk7IGluIHRoZSBleHRyZW1lIGNhc2UsIGl0IHdpbGwgaG9sZCB0aGUgU0laRV9NQVgK
KwkgKiB2YWx1ZS4gIEluc3RlYWQsIHVzZSB0aGUgVE1QRlNfUEFHRVNfTUFYIG1hY3JvLiAqLwor
CXNpemVfdAkJCXRtX3BhZ2VzX21heDsKKworCS8qIE51bWJlciBvZiBwYWdlcyBpbiB1c2UgYnkg
dGhlIGZpbGUgc3lzdGVtLiAgQ2Fubm90IGJlIGJpZ2dlcgorCSAqIHRoYW4gdGhlIHZhbHVlIHJl
dHVybmVkIGJ5IFRNUEZTX1BBR0VTX01BWCBpbiBhbnkgY2FzZS4gKi8KKwlzaXplX3QJCQl0bV9w
YWdlc191c2VkOworCisJLyogUG9pbnRlciB0byB0aGUgbm9kZSByZXByZXNlbnRpbmcgdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMKKwkgKiBmaWxlIHN5c3RlbS4gKi8KKwlzdHJ1Y3QgdG1wZnNf
bm9kZSAqCXRtX3Jvb3Q7CisKKwkvKiBNYXhpbXVtIG51bWJlciBvZiBwb3NzaWJsZSBub2RlcyBm
b3IgdGhpcyBmaWxlIHN5c3RlbTsgc2V0CisJICogZHVyaW5nIG1vdW50IHRpbWUuICBXZSBuZWVk
IGEgaGFyZCBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIKKwkgKiBvZiBub2RlcyB0byBhdm9p
ZCBhbGxvY2F0aW5nIHRvbyBtdWNoIG9mIHRoZW07IHRoZWlyIG9iamVjdHMKKwkgKiBjYW5ub3Qg
YmUgcmVsZWFzZWQgdW50aWwgdGhlIGZpbGUgc3lzdGVtIGlzIHVubW91bnRlZC4KKwkgKiBPdGhl
cndpc2UsIHdlIGNvdWxkIGVhc2lseSBydW4gb3V0IG9mIG1lbW9yeSBieSBjcmVhdGluZyBsb3Rz
CisJICogb2YgZW1wdHkgZmlsZXMgYW5kIHRoZW4gc2ltcGx5IHJlbW92aW5nIHRoZW0uICovCisJ
aW5vX3QJCQl0bV9ub2Rlc19tYXg7CisKKwkvKiBOdW1iZXIgb2Ygbm9kZXMgY3VycmVudGx5IHRo
YXQgYXJlIGluIHVzZS4gKi8KKwlpbm9fdAkJCXRtX25vZGVzX2ludXNlOworCisJLyogbWF4aW11
bSByZXByZXNlbnRhYmxlIGZpbGUgc2l6ZSAqLworCXVfaW50NjRfdAkJdG1fbWF4ZmlsZXNpemU7
CisKKwkvKiBOb2RlcyBhcmUgb3JnYW5pemVkIGluIHR3byBkaWZmZXJlbnQgbGlzdHMuICBUaGUg
dXNlZCBsaXN0CisJICogY29udGFpbnMgYWxsIG5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSB1c2Vk
IGJ5IHRoZSBmaWxlIHN5c3RlbTsKKwkgKiBpLmUuLCB0aGV5IHJlZmVyIHRvIGV4aXN0aW5nIGZp
bGVzLiAgVGhlIGF2YWlsYWJsZSBsaXN0IGNvbnRhaW5zCisJICogYWxsIG5vZGVzIHRoYXQgYXJl
IGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHVzZSBieSBuZXcgZmlsZXMuCisJICogTm9kZXMgbXVz
dCBiZSBrZXB0IGluIHRoaXMgbGlzdCAoaW5zdGVhZCBvZiBkZWxldGluZyB0aGVtKQorCSAqIGJl
Y2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZWlyIGdlbmVyYXRpb24gbnVtYmVyICh0
bl9nZW4KKwkgKiBmaWVsZCkuCisJICoKKwkgKiBOb3RlIHRoYXQgbm9kZXMgYXJlIGxhemlseSBh
bGxvY2F0ZWQ6IGlmIHRoZSBhdmFpbGFibGUgbGlzdCBpcworCSAqIGVtcHR5IGFuZCB3ZSBoYXZl
IGVub3VnaCBzcGFjZSB0byBjcmVhdGUgbW9yZSBub2RlcywgdGhleSB3aWxsIGJlCisJICogY3Jl
YXRlZCBhbmQgaW5zZXJ0ZWQgaW4gdGhlIHVzZWQgbGlzdC4gIE9uY2UgdGhlc2UgYXJlIHJlbGVh
c2VkLAorCSAqIHRoZXkgd2lsbCBnbyBpbnRvIHRoZSBhdmFpbGFibGUgbGlzdCwgcmVtYWluaW5n
IGFsaXZlIHVudGlsIHRoZQorCSAqIGZpbGUgc3lzdGVtIGlzIHVubW91bnRlZC4gKi8KKwlzdHJ1
Y3QgdG1wZnNfbm9kZV9saXN0CXRtX25vZGVzX3VzZWQ7CisKKwkvKiBBbGwgbm9kZSBsb2NrIHRv
IHByb3RlY3QgdGhlIG5vZGUgbGlzdCBhbmQgdG1wX3BhZ2VzX3VzZWQgKi8KKwlzdHJ1Y3QgbG9j
awkJIGFsbG5vZGVfbG9jazsKKworCS8qIFBvb2xzIHVzZWQgdG8gc3RvcmUgZmlsZSBzeXN0ZW0g
bWV0YSBkYXRhLiAgVGhlc2UgYXJlIG5vdCBzaGFyZWQKKwkgKiBhY3Jvc3Mgc2V2ZXJhbCBpbnN0
YW5jZXMgb2YgdG1wZnMgZm9yIHRoZSByZWFzb25zIGRlc2NyaWJlZCBpbgorCSAqIHRtcGZzX3Bv
b2wuYy4gKi8KKwlzdHJ1Y3Qgb2JqY2FjaGUJCSp0bV9kaXJlbnRfcG9vbDsKKwlzdHJ1Y3Qgb2Jq
Y2FjaGUJCSp0bV9ub2RlX3Bvb2w7Cit9OworI2RlZmluZSBUTVBGU19MT0NLKHRtKSBsb2NrbWdy
KCYodG0pLT5hbGxub2RlX2xvY2ssIExLX0VYQ0xVU0lWRXxMS19SRVRSWSkKKyNkZWZpbmUgVE1Q
RlNfVU5MT0NLKHRtKSBsb2NrbWdyKCYodG0pLT5hbGxub2RlX2xvY2ssIExLX1JFTEVBU0UpCisK
Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgbWFwcyBhIGZpbGUg
aWRlbnRpZmllciB0byBhIHRtcGZzIG5vZGUuICBVc2VkIGJ5IHRoZQorICogTkZTIGNvZGUuCisg
Ki8KK3N0cnVjdCB0bXBmc19maWQgeworCXVpbnQxNl90CQl0Zl9sZW47CisJdWludDE2X3QJCXRm
X3BhZDsKKwlpbm9fdAkJCXRmX2lkOworCXVuc2lnbmVkIGxvbmcJCXRmX2dlbjsKK307CisKKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgX0tFUk5FTAorLyoKKyAqIFByb3RvdHlwZXMgZm9y
IHRtcGZzX3N1YnIuYy4KKyAqLworCitpbnQJdG1wZnNfYWxsb2Nfbm9kZShzdHJ1Y3QgdG1wZnNf
bW91bnQgKiwgZW51bSB2dHlwZSwKKwkgICAgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBt
b2RlLCBzdHJ1Y3QgdG1wZnNfbm9kZSAqLAorCSAgICBjaGFyICosIGludCwgaW50LCBzdHJ1Y3Qg
dG1wZnNfbm9kZSAqKik7Cit2b2lkCXRtcGZzX2ZyZWVfbm9kZShzdHJ1Y3QgdG1wZnNfbW91bnQg
Kiwgc3RydWN0IHRtcGZzX25vZGUgKik7CitpbnQJdG1wZnNfYWxsb2NfZGlyZW50KHN0cnVjdCB0
bXBmc19tb3VudCAqLCBzdHJ1Y3QgdG1wZnNfbm9kZSAqLAorCSAgICBjb25zdCBjaGFyICosIHVp
bnQxNl90LCBzdHJ1Y3QgdG1wZnNfZGlyZW50ICoqKTsKK3ZvaWQJdG1wZnNfZnJlZV9kaXJlbnQo
c3RydWN0IHRtcGZzX21vdW50ICosIHN0cnVjdCB0bXBmc19kaXJlbnQgKiwKKwkgICAgYm9vbGVh
bl90KTsKK2ludAl0bXBmc19hbGxvY192cChzdHJ1Y3QgbW91bnQgKiwgc3RydWN0IHRtcGZzX25v
ZGUgKiwgaW50LAorCSAgICBzdHJ1Y3Qgdm5vZGUgKiopOwordm9pZAl0bXBmc19mcmVlX3ZwKHN0
cnVjdCB2bm9kZSAqKTsKK2ludAl0bXBmc19hbGxvY19maWxlKHN0cnVjdCB2bm9kZSAqLCBzdHJ1
Y3Qgdm5vZGUgKiosIHN0cnVjdCB2YXR0ciAqLAorCSAgICBzdHJ1Y3QgbmFtZWNhY2hlICosIHN0
cnVjdCB1Y3JlZCAqLCBjaGFyICopOwordm9pZAl0bXBmc19kaXJfYXR0YWNoKHN0cnVjdCB2bm9k
ZSAqLCBzdHJ1Y3QgdG1wZnNfZGlyZW50ICopOwordm9pZAl0bXBmc19kaXJfZGV0YWNoKHN0cnVj
dCB2bm9kZSAqLCBzdHJ1Y3QgdG1wZnNfZGlyZW50ICopOworc3RydWN0IHRtcGZzX2RpcmVudCAq
CXRtcGZzX2Rpcl9sb29rdXAoc3RydWN0IHRtcGZzX25vZGUgKm5vZGUsCisJCQkgICAgc3RydWN0
IHRtcGZzX25vZGUgKmYsCisJCQkgICAgc3RydWN0IG5hbWVjYWNoZSAqbmNwKTsKK2ludAl0bXBm
c19kaXJfZ2V0ZG90ZGVudChzdHJ1Y3QgdG1wZnNfbm9kZSAqLCBzdHJ1Y3QgdWlvICopOworaW50
CXRtcGZzX2Rpcl9nZXRkb3Rkb3RkZW50KHN0cnVjdCB0bXBmc19ub2RlICosIHN0cnVjdCB1aW8g
Kik7CitzdHJ1Y3QgdG1wZnNfZGlyZW50ICoJdG1wZnNfZGlyX2xvb2t1cGJ5Y29va2llKHN0cnVj
dCB0bXBmc19ub2RlICosIG9mZl90KTsKK2ludAl0bXBmc19kaXJfZ2V0ZGVudHMoc3RydWN0IHRt
cGZzX25vZGUgKiwgc3RydWN0IHVpbyAqLCBvZmZfdCAqKTsKK2ludAl0bXBmc19yZWdfcmVzaXpl
KHN0cnVjdCB2bm9kZSAqLCBvZmZfdCwgaW50KTsKK2ludAl0bXBmc19jaGZsYWdzKHN0cnVjdCB2
bm9kZSAqLCBpbnQsIHN0cnVjdCB1Y3JlZCAqKTsKK2ludAl0bXBmc19jaG1vZChzdHJ1Y3Qgdm5v
ZGUgKiwgbW9kZV90LCBzdHJ1Y3QgdWNyZWQgKik7CitpbnQJdG1wZnNfY2hvd24oc3RydWN0IHZu
b2RlICosIHVpZF90LCBnaWRfdCwgc3RydWN0IHVjcmVkICopOworaW50CXRtcGZzX2Noc2l6ZShz
dHJ1Y3Qgdm5vZGUgKiwgdV9xdWFkX3QsIHN0cnVjdCB1Y3JlZCAqKTsKK2ludAl0bXBmc19jaHRp
bWVzKHN0cnVjdCB2bm9kZSAqLCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICos
CisJICAgIGludCwgc3RydWN0IHVjcmVkICopOwordm9pZAl0bXBmc19pdGltZXMoc3RydWN0IHZu
b2RlICosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLAorCSAgICBjb25zdCBzdHJ1Y3QgdGltZXNw
ZWMgKik7CisKK3ZvaWQJdG1wZnNfdXBkYXRlKHN0cnVjdCB2bm9kZSAqKTsKK2ludAl0bXBmc190
cnVuY2F0ZShzdHJ1Y3Qgdm5vZGUgKiwgb2ZmX3QpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwor
LyoKKyAqIENvbnZlbmllbmNlIG1hY3JvcyB0byBzaW1wbGlmeSBzb21lIGxvZ2ljYWwgZXhwcmVz
c2lvbnMuCisgKi8KKyNkZWZpbmUgSU1QTElFUyhhLCBiKSAoIShhKSB8fCAoYikpCisjZGVmaW5l
IElGRihhLCBiKSAoSU1QTElFUyhhLCBiKSAmJiBJTVBMSUVTKGIsIGEpKQorCisvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gKi8KKworLyoKKyAqIENoZWNrcyB0aGF0IHRoZSBkaXJlY3RvcnkgZW50cnkgcG9pbnRl
ZCBieSAnZGUnIG1hdGNoZXMgdGhlIG5hbWUgJ25hbWUnCisgKiB3aXRoIGEgbGVuZ3RoIG9mICds
ZW4nLgorICovCisjZGVmaW5lIFRNUEZTX0RJUkVOVF9NQVRDSEVTKGRlLCBuYW1lLCBsZW4pIFwK
KyAgICAoZGUtPnRkX25hbWVsZW4gPT0gKHVpbnQxNl90KWxlbiAmJiBcCisgICAgYmNtcCgoZGUp
LT50ZF9uYW1lLCAobmFtZSksIChkZSktPnRkX25hbWVsZW4pID09IDApCisKKy8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworCisvKgorICogRW5zdXJlcyB0aGF0IHRoZSBub2RlIHBvaW50ZWQgYnkgJ25vZGUn
IGlzIGEgZGlyZWN0b3J5IGFuZCB0aGF0IGl0cworICogY29udGVudHMgYXJlIGNvbnNpc3RlbnQg
d2l0aCByZXNwZWN0IHRvIGRpcmVjdG9yaWVzLgorICovCisjZGVmaW5lIFRNUEZTX1ZBTElEQVRF
X0RJUihub2RlKSBcCisgICAgS0tBU1NFUlQoKG5vZGUpLT50bl90eXBlID09IFZESVIpOyBcCisg
ICAgS0tBU1NFUlQoKG5vZGUpLT50bl9zaXplICUgc2l6ZW9mKHN0cnVjdCB0bXBmc19kaXJlbnQp
ID09IDApOyBcCisgICAgS0tBU1NFUlQoKG5vZGUpLT50bl9kaXIudG5fcmVhZGRpcl9sYXN0cCA9
PSBOVUxMIHx8IFwKKwl0bXBmc19kaXJjb29raWUoKG5vZGUpLT50bl9kaXIudG5fcmVhZGRpcl9s
YXN0cCkgPT0gKG5vZGUpLT50bl9kaXIudG5fcmVhZGRpcl9sYXN0bik7CisKKy8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworCisvKgorICogTWVtb3J5IG1hbmFnZW1lbnQgc3R1ZmYuCisgKi8KKworLyogQW1v
dW50IG9mIG1lbW9yeSBwYWdlcyB0byByZXNlcnZlIGZvciB0aGUgc3lzdGVtIChlLmcuLCB0byBu
b3QgdXNlIGJ5CisgKiB0bXBmcykuCisgKiBYWFg6IFNob3VsZCB0aGlzIGJlIHR1bmFibGUgdGhy
b3VnaCBzeXNjdGwsIGZvciBpbnN0YW5jZT8gKi8KKyNkZWZpbmUgVE1QRlNfUEFHRVNfUkVTRVJW
RUQgKDQgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSkKKworLyoKKyAqIFJldHVybnMgaW5mb3Jt
YXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgbWVtb3J5IHBhZ2VzLAorICogaW5j
bHVkaW5nIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIG9uZXMuCisgKgorICogSWYgJ3RvdGFsJyBpcyBU
UlVFLCB0aGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkKKyAq
IHBhZ2VzIGNvbmZpZ3VyZWQgZm9yIHRoZSBzeXN0ZW0gKGVpdGhlciBpbiB1c2Ugb3IgZnJlZSku
CisgKiBJZiBpdCBpcyBGQUxTRSwgdGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZSBhbW91bnQgb2Yg
ZnJlZSBtZW1vcnkgcGFnZXMuCisgKgorICogUmVtZW1iZXIgdG8gcmVtb3ZlIFRNUEZTX1BBR0VT
X1JFU0VSVkVEIGZyb20gdGhlIHJldHVybmVkIHZhbHVlIHRvIGF2b2lkCisgKiBleGNlc3NpdmUg
bWVtb3J5IHVzYWdlLgorICoKKyAqLworc3RhdGljIF9faW5saW5lIHNpemVfdAordG1wZnNfbWVt
X2luZm8odm9pZCkKK3sKKwlzaXplX3Qgc2l6ZTsKKworCXNpemUgPSB2bV9zd2FwX3NpemUgKyB2
bXN0YXRzLnZfZnJlZV9jb3VudCArIHZtc3RhdHMudl9pbmFjdGl2ZV9jb3VudDsKKwlzaXplIC09
IHNpemUgPiB2bXN0YXRzLnZfd2lyZV9jb3VudCA/IHZtc3RhdHMudl93aXJlX2NvdW50IDogc2l6
ZTsKKwlyZXR1cm4gc2l6ZTsKK30KKworLyogUmV0dXJucyB0aGUgbWF4aW11bSBzaXplIGFsbG93
ZWQgZm9yIGEgdG1wZnMgZmlsZSBzeXN0ZW0uICBUaGlzIG1hY3JvCisgKiBtdXN0IGJlIHVzZWQg
aW5zdGVhZCBvZiBkaXJlY3RseSByZXRyaWV2aW5nIHRoZSB2YWx1ZSBmcm9tIHRtX3BhZ2VzX21h
eC4KKyAqIFRoZSByZWFzb24gaXMgdGhhdCB0aGUgc2l6ZSBvZiBhIHRtcGZzIGZpbGUgc3lzdGVt
IGlzIGR5bmFtaWM6IGl0IGxldHMKKyAqIHRoZSB1c2VyIHN0b3JlIGZpbGVzIGFzIGxvbmcgYXMg
dGhlcmUgaXMgZW5vdWdoIGZyZWUgbWVtb3J5IChpbmNsdWRpbmcKKyAqIHBoeXNpY2FsIG1lbW9y
eSBhbmQgc3dhcCBzcGFjZSkuICBUaGVyZWZvcmUsIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRvIGJl
CisgKiB1c2VkIGlzIGVpdGhlciB0aGUgbGltaXQgaW1wb3NlZCBieSB0aGUgdXNlciBkdXJpbmcg
bW91bnQgdGltZSBvciB0aGUKKyAqIGFtb3VudCBvZiBhdmFpbGFibGUgbWVtb3J5LCB3aGljaGV2
ZXIgaXMgbG93ZXIuICBUbyBhdm9pZCBjb25zdW1pbmcgYWxsCisgKiB0aGUgbWVtb3J5IGZvciBh
IGdpdmVuIG1vdW50IHBvaW50LCB0aGUgc3lzdGVtIHdpbGwgYWx3YXlzIHJlc2VydmUgYQorICog
bWluaW11bSBvZiBUTVBGU19QQUdFU19SRVNFUlZFRCBwYWdlcywgd2hpY2ggaXMgYWxzbyB0YWtl
biBpbnRvIGFjY291bnQKKyAqIGJ5IHRoaXMgbWFjcm8gKHNlZSBhYm92ZSkuICovCitzdGF0aWMg
X19pbmxpbmUgc2l6ZV90CitUTVBGU19QQUdFU19NQVgoc3RydWN0IHRtcGZzX21vdW50ICp0bXAp
Cit7CisJc2l6ZV90IGZyZWVwYWdlczsKKworCWZyZWVwYWdlcyA9IHRtcGZzX21lbV9pbmZvKCk7
CisJZnJlZXBhZ2VzIC09IGZyZWVwYWdlcyA8IFRNUEZTX1BBR0VTX1JFU0VSVkVEID8KKwkgICAg
ZnJlZXBhZ2VzIDogVE1QRlNfUEFHRVNfUkVTRVJWRUQ7CisKKwlyZXR1cm4gTUlOKHRtcC0+dG1f
cGFnZXNfbWF4LCBmcmVlcGFnZXMgKyB0bXAtPnRtX3BhZ2VzX3VzZWQpOworfQorCisvKiBSZXR1
cm5zIHRoZSBhdmFpbGFibGUgc3BhY2UgZm9yIHRoZSBnaXZlbiBmaWxlIHN5c3RlbS4gKi8KKyNk
ZWZpbmUgVE1QRlNfTUVUQV9QQUdFUyh0bXApIChob3dtYW55KCh0bXApLT50bV9ub2Rlc19pbnVz
ZSAqIChzaXplb2Yoc3RydWN0IHRtcGZzX25vZGUpIFwKKwkJCQkrIHNpemVvZihzdHJ1Y3QgdG1w
ZnNfZGlyZW50KSksIFBBR0VfU0laRSkpCisjZGVmaW5lIFRNUEZTX0ZJTEVfUEFHRVModG1wKSAo
KHRtcCktPnRtX3BhZ2VzX3VzZWQpCisKKyNkZWZpbmUgVE1QRlNfUEFHRVNfQVZBSUwodG1wKSAo
VE1QRlNfUEFHRVNfTUFYKHRtcCkgPiBcCisJCQlUTVBGU19NRVRBX1BBR0VTKHRtcCkrVE1QRlNf
RklMRV9QQUdFUyh0bXApPyBcCisJCQlUTVBGU19QQUdFU19NQVgodG1wKSAtIFRNUEZTX01FVEFf
UEFHRVModG1wKSBcCisJCQktIFRNUEZTX0ZJTEVfUEFHRVModG1wKTowKQorCisjZW5kaWYKKwor
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBNYWNyb3MvZnVuY3Rpb25zIHRvIGNvbnZlcnQg
ZnJvbSBnZW5lcmljIGRhdGEgc3RydWN0dXJlcyB0byB0bXBmcworICogc3BlY2lmaWMgb25lcy4K
KyAqLworCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgdG1wZnNfbW91bnQgKgorVkZTX1RPX1RNUEZT
KHN0cnVjdCBtb3VudCAqbXApCit7CisJc3RydWN0IHRtcGZzX21vdW50ICp0bXA7CisKKwlLS0FT
U0VSVCgobXApICE9IE5VTEwgJiYgKG1wKS0+bW50X2RhdGEgIT0gTlVMTCk7CisJdG1wID0gKHN0
cnVjdCB0bXBmc19tb3VudCAqKShtcCktPm1udF9kYXRhOworCXJldHVybiB0bXA7Cit9CisKK3N0
YXRpYyBpbmxpbmUKK3N0cnVjdCB0bXBmc19ub2RlICoKK1ZQX1RPX1RNUEZTX05PREUoc3RydWN0
IHZub2RlICp2cCkKK3sKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKworCUtLQVNTRVJUKCh2
cCkgIT0gTlVMTCAmJiAodnApLT52X2RhdGEgIT0gTlVMTCk7CisJbm9kZSA9IChzdHJ1Y3QgdG1w
ZnNfbm9kZSAqKXZwLT52X2RhdGE7CisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBpbmxpbmUK
K3N0cnVjdCB0bXBmc19ub2RlICoKK1ZQX1RPX1RNUEZTX0RJUihzdHJ1Y3Qgdm5vZGUgKnZwKQor
eworCXN0cnVjdCB0bXBmc19ub2RlICpub2RlOworCisJbm9kZSA9IFZQX1RPX1RNUEZTX05PREUo
dnApOworCVRNUEZTX1ZBTElEQVRFX0RJUihub2RlKTsKKwlyZXR1cm4gbm9kZTsKK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCisvKgorICogYnVmZmVyIGNhY2hlIHNpemUgCisgKi8KKyNkZWZpbmUg
QlNJWkUgKG9mZl90KTE2Mzg0ICAgICAgICAgIC8qIGJ1ZmZlciBjYWNoZSBzaXplKi8KKyNkZWZp
bmUgQk1BU0sgKG9mZl90KShCU0laRSAtIDEpCisKKyNlbmRpZiAvKiBfVkZTX1RNUEZTX1RNUEZT
X0hfICovCmRpZmYgLS1naXQgYS9zeXMvdmZzL3RtcGZzL3RtcGZzX2FyZ3MuaCBiL3N5cy92ZnMv
dG1wZnMvdG1wZnNfYXJncy5oCmluZGV4IGU2OWRlMjkuLjY2MDFlYmQgMTAwNjQ0Ci0tLSBhL3N5
cy92ZnMvdG1wZnMvdG1wZnNfYXJncy5oCisrKyBiL3N5cy92ZnMvdG1wZnMvdG1wZnNfYXJncy5o
CkBAIC0wLDAgKzEsNTQgQEAKKy8qCSROZXRCU0Q6IHRtcGZzX2FyZ3MuaCx2IDEuMyAyMDA4LzA3
LzI5IDA5OjEwOjA5IHBvb2thIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUs
IDIwMDYsIDIwMDcgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJp
YnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBKdWxpbyBNLiBNZXJpbm8gVmlk
YWwsIGRldmVsb3BlZCBhcyBwYXJ0IG9mIEdvb2dsZSdzIFN1bW1lciBvZiBDb2RlCisgKiAyMDA1
IHByb2dyYW0uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycn
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICog
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfVkZTX1RNUEZTX1RN
UEZTX0FSR1NfSF8KKyNkZWZpbmUgX1ZGU19UTVBGU19UTVBGU19BUkdTX0hfCisKKy8qCisgKiBU
aGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGNvbW11bmljYXRlIG1vdW50IHBhcmFtZXRlcnMgYmV0
d2VlbiB1c2VybGFuZAorICogYW5kIGtlcm5lbCBzcGFjZS4KKyAqLworI2RlZmluZSBUTVBGU19B
UkdTX1ZFUlNJT04JMQorc3RydWN0IHRtcGZzX2FyZ3MgeworCWludAkJCXRhX3ZlcnNpb247CisK
KwkvKiBTaXplIGNvdW50ZXJzLiAqLworCWlub190CQkJdGFfbm9kZXNfbWF4OworCW9mZl90CQkJ
dGFfc2l6ZV9tYXg7CisKKwkvKiBSb290IG5vZGUgYXR0cmlidXRlcy4gKi8KKwl1aWRfdAkJCXRh
X3Jvb3RfdWlkOworCWdpZF90CQkJdGFfcm9vdF9naWQ7CisJbW9kZV90CQkJdGFfcm9vdF9tb2Rl
IGEvc3lzL3Zmcy90bXBmcy90bXBmc19maWZvb3BzLmMgYi9zeXMvdmZzL3RtcGZzL3RtcGZzX2Zp
Zm9vcHMuYwppbmRleCBlNjlkZTI5Li4wYWJkYjI2IDEwMDY0NAotLS0gYS9zeXMvdmZzL3RtcGZz
L3RtcGZzX2ZpZm9vcHMuYworKysgYi9zeXMvdmZzL3RtcGZzL3RtcGZzX2ZpZm9vcHMuYwpAQCAt
MCwwICsxLDk5IEBACisvKgkkTmV0QlNEOiB0bXBmc19maWZvb3BzLmMsdiAxLjUgMjAwNS8xMi8x
MSAxMjoyNDoyOSBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAw
NSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBU
aGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEp1bGlvIE0uIE1lcmlubyBWaWRhbCwgZGV2ZWxv
cGVkIGFzIHBhcnQgb2YgR29vZ2xlJ3MgU3VtbWVyIG9mIENvZGUKKyAqIDIwMDUgcHJvZ3JhbS4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0Qg
Rk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
KyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogdG1wZnMgdm5vZGUgaW50ZXJmYWNlIGZv
ciBuYW1lZCBwaXBlcy4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaW5jbHVkZSA8
c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9maWxl
ZGVzYy5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3Zub2RlLmg+CisK
KyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorCisjaW5jbHVk
ZSA8dmZzL2ZpZm9mcy9maWZvLmg+CisjaW5jbHVkZSA8dmZzL3RtcGZzL3RtcGZzLmg+CisjaW5j
bHVkZSA8dmZzL3RtcGZzL3RtcGZzX2ZpZm9vcHMuaD4KKyNpbmNsdWRlIDx2ZnMvdG1wZnMvdG1w
ZnNfdm5vcHMuaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQKK3RtcGZzX2Zp
Zm9fa3FmaWx0ZXIoc3RydWN0IHZvcF9rcWZpbHRlcl9hcmdzICphcCkKK3sKKwlzdHJ1Y3Qgdm5v
ZGUgKnZwOworCXN0cnVjdCB0bXBmc19ub2RlICpub2RlOworCisJdnAgPSBhcC0+YV92cDsKKwlu
b2RlID0gVlBfVE9fVE1QRlNfTk9ERSh2cCk7CisKKwlzd2l0Y2ggKGFwLT5hX2tuLT5rbl9maWx0
ZXIpeworCWNhc2UgRVZGSUxUX1JFQUQ6CisJCW5vZGUtPnRuX3N0YXR1cyB8PSBUTVBGU19OT0RF
X0FDQ0VTU0VEOworCQlicmVhazsKKwljYXNlIEVWRklMVF9XUklURToKKwkJbm9kZS0+dG5fc3Rh
dHVzIHw9IFRNUEZTX05PREVfTU9ESUZJRUQ7CisJCWJyZWFrOworCX0KKworCXJldHVybiBmaWZv
X3Zub2RlX3ZvcHMudm9wX2txZmlsdGVyKGFwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisK
K3N0YXRpYyBpbnQKK3RtcGZzX2ZpZm9fY2xvc2Uoc3RydWN0IHZvcF9jbG9zZV9hcmdzICp2KQor
eworCXN0cnVjdCB0bXBmc19ub2RlICpub2RlOworCW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKHYt
PmFfdnApOworCW5vZGUtPnRuX3N0YXR1cyB8PSBUTVBGU19OT0RFX0FDQ0VTU0VEOworCisJdG1w
ZnNfdXBkYXRlKHYtPmFfdnApOworCXJldHVybiBmaWZvX3Zub2RlX3ZvcHMudm9wX2Nsb3NlKHYp
OworfQorCisvKgorICogdm5vZGUgb3BlcmF0aW9ucyB2ZWN0b3IgdXNlZCBmb3IgZmlmb3Mgc3Rv
cmVkIGluIGEgdG1wZnMgZmlsZSBzeXN0ZW0uCisgKi8KK3N0cnVjdCB2b3Bfb3BzIHRtcGZzX2Zp
Zm9fdm9wcyA9IHsKKwkudm9wX2RlZmF1bHQgPQkJCWZpZm9fdm5vcGVyYXRlLAorCS52b3BfY2xv
c2UgPQkJCXRtcGZzX2ZpZm9fY2xvc2UsCisJLnZvcF9yZWNsYWltID0JCQl0bXBmc19yZWNsYWlt
LAorCS52b3BfYWNjZXNzID0JCQl0bXBmc19hY2Nlc3MsCisJLnZvcF9nZXRhdHRyID0JCQl0bXBm
c19nZXRhdHRyLAorCS52b3Bfc2V0YXR0ciA9CQkJdG1wZnNfc2V0YXR0ciwKKwkudm9wX2txZmls
dGVyID0JCQl0bXBmc19maWZvX2txZmlsdGVyLAorfTsKZGlmZiAtLWdpdCBhL3N5cy92ZnMvdG1w
ZnMvdG1wZnNfZmlmb29wcy5oIGIvc3lzL3Zmcy90bXBmcy90bXBmc19maWZvb3BzLmgKaW5kZXgg
ZTY5ZGUyOS4uNzY3ZGQ3MiAxMDA2NDQKLS0tIGEvc3lzL3Zmcy90bXBmcy90bXBmc19maWZvb3Bz
LmgKKysrIGIvc3lzL3Zmcy90bXBmcy90bXBmc19maWZvb3BzLmgKQEAgLTAsMCArMSw1MyBAQAor
LyoJJE5ldEJTRDogdG1wZnNfZmlmb29wcy5oLHYgMS40IDIwMDUvMTIvMDMgMTc6MzQ6NDQgY2hy
aXN0b3MgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE5ldEJTRCBG
b3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29k
ZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3Vu
ZGF0aW9uCisgKiBieSBKdWxpbyBNLiBNZXJpbm8gVmlkYWwsIGRldmVsb3BlZCBhcyBwYXJ0IG9m
IEdvb2dsZSdzIFN1bW1lciBvZiBDb2RlCisgKiAyMDA1IHByb2dyYW0uCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElO
Qy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKgorICogJEZyZWVCU0Q6IHNyYy9zeXMvZnMvdG1wZnMvdG1wZnNfZmlmb29wcy5oLHYg
MS40IDIwMDgvMDkvMDMgMTg6NTM6NDggZGVscGhpaiBFeHAgJAorICovCisKKyNpZm5kZWYgX1ZG
U19UTVBGU19UTVBGU19GSUZPT1BTX0hfCisjZGVmaW5lIF9WRlNfVE1QRlNfVE1QRlNfRklGT09Q
U19IXworCisjaWYgIWRlZmluZWQoX0tFUk5FTCkKKyNlcnJvciBub3Qgc3VwcG9zZWQgdG8gYmUg
ZXhwb3NlZCB0byB1c2VybGFuZC4KKyNlbmRpZgorCisjaW5jbHVkZSA8dmZzL3RtcGZzL3RtcGZz
X3Zub3BzLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogRGVjbGFyYXRpb25zIGZv
ciB0bXBmc19maWZvb3BzLmMuCisgKi8KKworZXh0ZXJuIHN0cnVjdCB2b3BfdmVjdG9yIHRtcGZz
X2ZpZm9vcF9lbnRyaWVzOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNlbmRpZiAvKiBfVkZTX1RN
UEZTX1RNUEZTX0ZJRk9PUFNfSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy92ZnMvdG1wZnMvdG1wZnNf
c3Vici5jIGIvc3lzL3Zmcy90bXBmcy90bXBmc19zdWJyLmMKaW5kZXggZTY5ZGUyOS4uOTMzMjli
MSAxMDA2NDQKLS0tIGEvc3lzL3Zmcy90bXBmcy90bXBmc19zdWJyLmMKKysrIGIvc3lzL3Zmcy90
bXBmcy90bXBmc19zdWJyLmMKQEAgLTAsMCArMSwxNDE0IEBACisvKgkkTmV0QlNEOiB0bXBmc19z
dWJyLmMsdiAxLjM1IDIwMDcvMDcvMDkgMjE6MTA6NTAgYWQgRXhwICQJKi8KKworLyotCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDUgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUg
Y29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBKdWxpbyBNLiBNZXJp
bm8gVmlkYWwsIGRldmVsb3BlZCBhcyBwYXJ0IG9mIEdvb2dsZSdzIFN1bW1lciBvZiBDb2RlCisg
KiAyMDA1IHByb2dyYW0uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBB
UyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEVmZmljaWVu
dCBtZW1vcnkgZmlsZSBzeXN0ZW0gc3VwcG9ydGluZyBmdW5jdGlvbnMuCisgKi8KKyNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMv
cGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvbmFtZWkuaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5oPgor
I2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3NwaW5sb2NrMi5oPgorI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL3Zu
b2RlLmg+CisjaW5jbHVkZSA8c3lzL3ZtbWV0ZXIuaD4KKworI2luY2x1ZGUgPHN5cy9tcGxvY2sy
Lmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2lu
Y2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorI2luY2x1ZGUg
PHZtL3ZtX2V4dGVybi5oPgorCisjaW5jbHVkZSA8dmZzL3RtcGZzL3RtcGZzLmg+CisjaW5jbHVk
ZSA8dmZzL3RtcGZzL3RtcGZzX2ZpZm9vcHMuaD4KKyNpbmNsdWRlIDx2ZnMvdG1wZnMvdG1wZnNf
dm5vcHMuaD4KKworc3RhdGljIGlub190IHRfaW5vID0gMjsKK3N0YXRpYyBzdHJ1Y3Qgc3Bpbmxv
Y2sJaW5vX2xvY2s7CitzdGF0aWMgaW5vX3QgdG1wZnNfZmV0Y2hfaW5vKHZvaWQpOworCisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIEFsbG9jYXRlcyBhIG5ldyBub2RlIG9mIHR5cGUgJ3R5
cGUnIGluc2lkZSB0aGUgJ3RtcCcgbW91bnQgcG9pbnQsIHdpdGgKKyAqIGl0cyBvd25lciBzZXQg
dG8gJ3VpZCcsIGl0cyBncm91cCB0byAnZ2lkJyBhbmQgaXRzIG1vZGUgc2V0IHRvICdtb2RlJywK
KyAqIHVzaW5nIHRoZSBjcmVkZW50aWFscyBvZiB0aGUgcHJvY2VzcyAncCcuCisgKgorICogSWYg
dGhlIG5vZGUgdHlwZSBpcyBzZXQgdG8gJ1ZESVInLCB0aGVuIHRoZSBwYXJlbnQgcGFyYW1ldGVy
IG11c3QgcG9pbnQKKyAqIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBub2RlIGJlaW5n
IGNyZWF0ZWQuICBJdCBtYXkgb25seSBiZSBOVUxMCisgKiB3aGlsZSBhbGxvY2F0aW5nIHRoZSBy
b290IG5vZGUuCisgKgorICogSWYgdGhlIG5vZGUgdHlwZSBpcyBzZXQgdG8gJ1ZCTEsnIG9yICdW
Q0hSJywgdGhlbiB0aGUgcmRldiBwYXJhbWV0ZXIKKyAqIHNwZWNpZmllcyB0aGUgZGV2aWNlIHRo
ZSBub2RlIHJlcHJlc2VudHMuCisgKgorICogSWYgdGhlIG5vZGUgdHlwZSBpcyBzZXQgdG8gJ1ZM
TksnLCB0aGVuIHRoZSBwYXJhbWV0ZXIgdGFyZ2V0IHNwZWNpZmllcworICogdGhlIGZpbGUgbmFt
ZSBvZiB0aGUgdGFyZ2V0IGZpbGUgZm9yIHRoZSBzeW1ib2xpYyBsaW5rIHRoYXQgaXMgYmVpbmcK
KyAqIGNyZWF0ZWQuCisgKgorICogTm90ZSB0aGF0IG5ldyBub2RlcyBhcmUgcmV0cmlldmVkIGZy
b20gdGhlIGF2YWlsYWJsZSBsaXN0IGlmIGl0IGhhcworICogaXRlbXMgb3IsIGlmIGl0IGlzIGVt
cHR5LCBmcm9tIHRoZSBub2RlIHBvb2wgYXMgbG9uZyBhcyB0aGVyZSBpcyBlbm91Z2gKKyAqIHNw
YWNlIHRvIGNyZWF0ZSB0aGVtLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGFu
IGFwcHJvcHJpYXRlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50Cit0bXBmc19hbGxv
Y19ub2RlKHN0cnVjdCB0bXBmc19tb3VudCAqdG1wLCBlbnVtIHZ0eXBlIHR5cGUsCisgICAgdWlk
X3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgdG1wZnNfbm9kZSAqcGFyZW50
LAorICAgIGNoYXIgKnRhcmdldCwgaW50IHJtYWpvciwgaW50IHJtaW5vciwgc3RydWN0IHRtcGZz
X25vZGUgKipub2RlKQoreworCXN0cnVjdCB0bXBmc19ub2RlICpubm9kZTsKKwlzdHJ1Y3QgdGlt
ZXNwZWMgdHM7CisJdWRldl90IHJkZXY7CisKKwkvKiBJZiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhlICd0bXAnIGZpbGUgc3lzdGVtIGlzIG5vdCB5ZXQKKwkgKiBhbGxvY2F0ZWQsIHRoaXMgbXVz
dCBiZSB0aGUgcmVxdWVzdCB0byBkbyBpdC4gKi8KKwlLS0FTU0VSVChJTVBMSUVTKHRtcC0+dG1f
cm9vdCA9PSBOVUxMLCBwYXJlbnQgPT0gTlVMTCAmJiB0eXBlID09IFZESVIpKTsKKworCUtLQVNT
RVJUKElGRih0eXBlID09IFZMTkssIHRhcmdldCAhPSBOVUxMKSk7CisJS0tBU1NFUlQoSUZGKHR5
cGUgPT0gVkJMSyB8fCB0eXBlID09IFZDSFIsIHJtYWpvciAhPSBWTk9WQUwpKTsKKworCWlmICh0
bXAtPnRtX25vZGVzX2ludXNlID4gdG1wLT50bV9ub2Rlc19tYXgpCisJCXJldHVybiAoRU5PU1BD
KTsKKworCW5ub2RlID0gKHN0cnVjdCB0bXBmc19ub2RlICopb2JqY2FjaGVfZ2V0KHRtcC0+dG1f
bm9kZV9wb29sLCBNX1dBSVRPSyk7CisKKwkvKiBHZW5lcmljIGluaXRpYWxpemF0aW9uLiAqLwor
CW5ub2RlLT50bl90eXBlID0gdHlwZTsKKwl2ZnNfdGltZXN0YW1wKCZ0cyk7CisJbm5vZGUtPnRu
X2N0aW1lID0gbm5vZGUtPnRuX210aW1lID0gbm5vZGUtPnRuX2F0aW1lCisJCT0gdHMudHZfc2Vj
OworCW5ub2RlLT50bl9jdGltZW5zZWMgPSBubm9kZS0+dG5fbXRpbWVuc2VjID0gbm5vZGUtPnRu
X2F0aW1lbnNlYworCQk9IHRzLnR2X25zZWM7CisJbm5vZGUtPnRuX3VpZCA9IHVpZDsKKwlubm9k
ZS0+dG5fZ2lkID0gZ2lkOworCW5ub2RlLT50bl9tb2RlID0gbW9kZTsKKwlubm9kZS0+dG5faWQg
PSB0bXBmc19mZXRjaF9pbm8oKTsKKworCS8qIFR5cGUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24u
ICovCisJc3dpdGNoIChubm9kZS0+dG5fdHlwZSkgeworCWNhc2UgVkJMSzoKKwljYXNlIFZDSFI6
CisJCXJkZXYgPSBtYWtldWRldihybWFqb3IsIHJtaW5vcik7CisJCWlmIChyZGV2ID09IE5PVURF
VikgeworCQkJcmV0dXJuKEVJTlZBTCk7CisJCX0KKwkJbm5vZGUtPnRuX3JkZXYgPSByZGV2Owor
CQlicmVhazsKKworCWNhc2UgVkRJUjoKKwkJVEFJTFFfSU5JVCgmbm5vZGUtPnRuX2Rpci50bl9k
aXJoZWFkKTsKKwkJS0tBU1NFUlQocGFyZW50ICE9IG5ub2RlKTsKKwkJS0tBU1NFUlQoSU1QTElF
UyhwYXJlbnQgPT0gTlVMTCwgdG1wLT50bV9yb290ID09IE5VTEwpKTsKKwkJbm5vZGUtPnRuX2Rp
ci50bl9wYXJlbnQgPSAocGFyZW50ID09IE5VTEwpID8gbm5vZGUgOiBwYXJlbnQ7CisJCW5ub2Rl
LT50bl9kaXIudG5fcmVhZGRpcl9sYXN0biA9IDA7CisJCW5ub2RlLT50bl9kaXIudG5fcmVhZGRp
cl9sYXN0cCA9IE5VTEw7CisJCW5ub2RlLT50bl9saW5rcysrOworCQlubm9kZS0+dG5fc2l6ZSA9
IDA7CisJCVRNUEZTX05PREVfTE9DSyhubm9kZS0+dG5fZGlyLnRuX3BhcmVudCk7CisJCW5ub2Rl
LT50bl9kaXIudG5fcGFyZW50LT50bl9saW5rcysrOworCQlUTVBGU19OT0RFX1VOTE9DSyhubm9k
ZS0+dG5fZGlyLnRuX3BhcmVudCk7CisJCWJyZWFrOworCisJY2FzZSBWRklGTzoKKwkJLyogRkFM
TFRIUk9VR0ggKi8KKwljYXNlIFZTT0NLOgorCQlicmVhazsKKworCWNhc2UgVkxOSzoKKwkJS0tB
U1NFUlQoKHN0cmxlbih0YXJnZXQpICsxKSA8IE1BWFBBVEhMRU4pOworCQlubm9kZS0+dG5fc2l6
ZSA9IHN0cmxlbih0YXJnZXQpICsxOworCQlubm9kZS0+dG5fbGluayA9IGttYWxsb2Mobm5vZGUt
PnRuX3NpemUsIE1fVE1QRlNOQU1FLAorCQkgICAgTV9XQUlUT0spOworCQliY29weSh0YXJnZXQs
IG5ub2RlLT50bl9saW5rLCBubm9kZS0+dG5fc2l6ZSk7CisJCW5ub2RlLT50bl9saW5rW25ub2Rl
LT50bl9zaXplXSA9ICdcMCc7CisJCWJyZWFrOworCisJY2FzZSBWUkVHOgorCQlubm9kZS0+dG5f
cmVnLnRuX2FvYmogPQorCQkgICAgdm1fcGFnZXJfYWxsb2NhdGUoT0JKVF9TV0FQLCBOVUxMLCAw
LCBWTV9QUk9UX0RFRkFVTFQsIDApOworCQlubm9kZS0+dG5fcmVnLnRuX2FvYmpfcGFnZXMgPSAw
OworCQlubm9kZS0+dG5fc2l6ZSA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcGFuaWMo
InRtcGZzX2FsbG9jX25vZGU6IHR5cGUgJXAgJWQiLCBubm9kZSwgKGludClubm9kZS0+dG5fdHlw
ZSk7CisJfQorCisJVE1QRlNfTk9ERV9MT0NLKG5ub2RlKTsKKwlMSVNUX0lOU0VSVF9IRUFEKCZ0
bXAtPnRtX25vZGVzX3VzZWQsIG5ub2RlLCB0bl9lbnRyaWVzKTsKKwlUTVBGU19MT0NLKHRtcCk7
CisJdG1wLT50bV9ub2Rlc19pbnVzZSsrOworCVRNUEZTX1VOTE9DSyh0bXApOworCVRNUEZTX05P
REVfVU5MT0NLKG5ub2RlKTsKKworCSpub2RlID0gbm5vZGU7CisJcmV0dXJuIDA7Cit9CisKKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworCisvKgorICogRGVzdHJveXMgdGhlIG5vZGUgcG9pbnRlZCB0byBi
eSBub2RlIGZyb20gdGhlIGZpbGUgc3lzdGVtICd0bXAnLgorICogSWYgdGhlIG5vZGUgZG9lcyBu
b3QgYmVsb25nIHRvIHRoZSBnaXZlbiBtb3VudCBwb2ludCwgdGhlIHJlc3VsdHMgYXJlCisgKiB1
bnByZWRpY3RlZC4KKyAqCisgKiBJZiB0aGUgbm9kZSByZWZlcmVuY2VzIGEgZGlyZWN0b3J5OyBu
byBlbnRyaWVzIGFyZSBhbGxvd2VkIGJlY2F1c2UKKyAqIHRoZWlyIHJlbW92YWwgY291bGQgbmVl
ZCBhIHJlY3Vyc2l2ZSBhbGdvcml0aG0sIHNvbWV0aGluZyBmb3JiaWRkZW4gaW4KKyAqIGtlcm5l
bCBzcGFjZS4gIEZ1cnRoZXJtb3JlLCB0aGVyZSBpcyBub3QgbmVlZCB0byBwcm92aWRlIHN1Y2gK
KyAqIGZ1bmN0aW9uYWxpdHkgKHJlY3Vyc2l2ZSByZW1vdmFsKSBiZWNhdXNlIHRoZSBvbmx5IHBy
aW1pdGl2ZXMgb2ZmZXJlZAorICogdG8gdGhlIHVzZXIgYXJlIHRoZSByZW1vdmFsIG9mIGVtcHR5
IGRpcmVjdG9yaWVzIGFuZCB0aGUgZGVsZXRpb24gb2YKKyAqIGluZGl2aWR1YWwgZmlsZXMuCisg
KgorICogTm90ZSB0aGF0IG5vZGVzIGFyZSBub3QgcmVhbGx5IGRlbGV0ZWQ7IGluIGZhY3QsIHdo
ZW4gYSBub2RlIGhhcyBiZWVuCisgKiBhbGxvY2F0ZWQsIGl0IGNhbm5vdCBiZSBkZWxldGVkIGR1
cmluZyB0aGUgd2hvbGUgbGlmZSBvZiB0aGUgZmlsZQorICogc3lzdGVtLiAgSW5zdGVhZCwgdGhl
eSBhcmUgbW92ZWQgdG8gdGhlIGF2YWlsYWJsZSBsaXN0IGFuZCByZW1haW4gdGhlcmUKKyAqIHVu
dGlsIHJldXNlZC4KKyAqLwordm9pZAordG1wZnNfZnJlZV9ub2RlKHN0cnVjdCB0bXBmc19tb3Vu
dCAqdG1wLCBzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZSkKK3sKKwlzaXplX3QgcGFnZXMgPSAwOwor
CisJVE1QRlNfTk9ERV9MT0NLKG5vZGUpOworCisjaWZkZWYgSU5WQVJJQU5UUworCVRNUEZTX0FT
U0VSVF9FTE9DS0VEKG5vZGUpOworCUtLQVNTRVJUKG5vZGUtPnRuX3Zub2RlID09IE5VTEwpOwor
CUtLQVNTRVJUKChub2RlLT50bl92cHN0YXRlICYgVE1QRlNfVk5PREVfQUxMT0NBVElORykgPT0g
MCk7CisjZW5kaWYKKworCUxJU1RfUkVNT1ZFKG5vZGUsIHRuX2VudHJpZXMpOworCVRNUEZTX0xP
Q0sodG1wKTsKKwl0bXAtPnRtX25vZGVzX2ludXNlLS07CisJVE1QRlNfVU5MT0NLKHRtcCk7CisK
Kwlzd2l0Y2ggKG5vZGUtPnRuX3R5cGUpIHsKKwljYXNlIFZOT046CisJCS8qIERvIG5vdCBkbyBh
bnl0aGluZy4gIFZOT04gaXMgcHJvdmlkZWQgdG8gbGV0IHRoZQorCQkgKiBhbGxvY2F0aW9uIHJv
dXRpbmUgY2xlYW4gaXRzZWxmIGVhc2lseSBieSBhdm9pZGluZworCQkgKiBkdXBsaWNhdGluZyBj
b2RlIGluIGl0LiAqLworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgVkJMSzoKKwkJLyogRkFM
TFRIUk9VR0ggKi8KKwljYXNlIFZDSFI6CisJCS8qIEZBTExUSFJPVUdIICovCisJCWJyZWFrOwor
CWNhc2UgVkRJUjoKKwkJbm9kZS0+dG5fbGlua3MtLTsKKwkJbm9kZS0+dG5fc2l6ZSA9IDA7CisJ
CVRNUEZTX05PREVfTE9DSyhub2RlLT50bl9kaXIudG5fcGFyZW50KTsKKwkJbm9kZS0+dG5fZGly
LnRuX3BhcmVudC0+dG5fbGlua3MtLTsKKwkJVE1QRlNfTk9ERV9VTkxPQ0sobm9kZS0+dG5fZGly
LnRuX3BhcmVudCk7CisJCWJyZWFrOworCWNhc2UgVkZJRk86CisJCS8qIEZBTExUSFJPVUdIICov
CisJY2FzZSBWU09DSzoKKwkJYnJlYWs7CisKKwljYXNlIFZMTks6CisJCWtmcmVlKG5vZGUtPnRu
X2xpbmssIE1fVE1QRlNOQU1FKTsKKwkJYnJlYWs7CisKKwljYXNlIFZSRUc6CisJCWlmIChub2Rl
LT50bl9yZWcudG5fYW9iaiAhPSBOVUxMKQorCQkJdm1fcGFnZXJfZGVhbGxvY2F0ZShub2RlLT50
bl9yZWcudG5fYW9iaik7CisJCW5vZGUtPnRuX3JlZy50bl9hb2JqID0gTlVMTDsKKwkJcGFnZXMg
PSBub2RlLT50bl9yZWcudG5fYW9ial9wYWdlczsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlw
YW5pYygidG1wZnNfZnJlZV9ub2RlOiB0eXBlICVwICVkIiwgbm9kZSwgKGludClub2RlLT50bl90
eXBlKTsKKwl9CisKKwlvYmpjYWNoZV9wdXQodG1wLT50bV9ub2RlX3Bvb2wsIG5vZGUpOworCisJ
VE1QRlNfTE9DSyh0bXApOworCXRtcC0+dG1fcGFnZXNfdXNlZCAtPSBwYWdlczsKKwlUTVBGU19V
TkxPQ0sodG1wKTsKKwlUTVBGU19OT0RFX1VOTE9DSyhub2RlKTsKK30KKworLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCisKKy8qCisgKiBBbGxvY2F0ZXMgYSBuZXcgZGlyZWN0b3J5IGVudHJ5IGZvciB0aGUg
bm9kZSBub2RlIHdpdGggYSBuYW1lIG9mIG5hbWUuCisgKiBUaGUgbmV3IGRpcmVjdG9yeSBlbnRy
eSBpcyByZXR1cm5lZCBpbiAqZGUuCisgKgorICogVGhlIGxpbmsgY291bnQgb2Ygbm9kZSBpcyBp
bmNyZWFzZWQgYnkgb25lIHRvIHJlZmxlY3QgdGhlIG5ldyBvYmplY3QKKyAqIHJlZmVyZW5jaW5n
IGl0LgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGFuIGFwcHJvcHJpYXRlIGVy
cm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50Cit0bXBmc19hbGxvY19kaXJlbnQoc3RydWN0
IHRtcGZzX21vdW50ICp0bXAsIHN0cnVjdCB0bXBmc19ub2RlICpub2RlLAorICAgIGNvbnN0IGNo
YXIgKm5hbWUsIHVpbnQxNl90IGxlbiwgc3RydWN0IHRtcGZzX2RpcmVudCAqKmRlKQoreworCXN0
cnVjdCB0bXBmc19kaXJlbnQgKm5kZTsKKworCisJbmRlID0gKHN0cnVjdCB0bXBmc19kaXJlbnQg
KilvYmpjYWNoZV9nZXQodG1wLT50bV9kaXJlbnRfcG9vbCwgTV9XQUlUT0spOworCW5kZS0+dGRf
bmFtZSA9IGttYWxsb2MobGVuLCBNX1RNUEZTTkFNRSwgTV9XQUlUT0spOworCW5kZS0+dGRfbmFt
ZWxlbiA9IGxlbjsKKwliY29weShuYW1lLCBuZGUtPnRkX25hbWUsIGxlbik7CisJbmRlLT50ZF9u
YW1lW2xlbl0gPSAnXDAnOworCisJbmRlLT50ZF9ub2RlID0gbm9kZTsKKworCVRNUEZTX05PREVf
TE9DSyhub2RlKTsKKwlub2RlLT50bl9saW5rcysrOworCVRNUEZTX05PREVfVU5MT0NLKG5vZGUp
OworCisJKmRlID0gbmRlOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor
CisvKgorICogRnJlZXMgYSBkaXJlY3RvcnkgZW50cnkuICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVz
cG9uc2liaWxpdHkgdG8gZGVzdHJveQorICogdGhlIG5vZGUgcmVmZXJlbmNlZCBieSBpdCBpZiBu
ZWVkZWQuCisgKgorICogVGhlIGxpbmsgY291bnQgb2Ygbm9kZSBpcyBkZWNyZWFzZWQgYnkgb25l
IHRvIHJlZmxlY3QgdGhlIHJlbW92YWwgb2YgYW4KKyAqIG9iamVjdCB0aGF0IHJlZmVyZW5jZWQg
aXQuICBUaGlzIG9ubHkgaGFwcGVucyBpZiAnbm9kZV9leGlzdHMnIGlzIHRydWU7CisgKiBvdGhl
cndpc2UgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IGFjY2VzcyB0aGUgbm9kZSByZWZlcnJlZCB0byBi
eSB0aGUKKyAqIGRpcmVjdG9yeSBlbnRyeSwgYXMgaXQgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJl
bGVhc2VkIGZyb20gdGhlIG91dHNpZGUuCisgKi8KK3ZvaWQKK3RtcGZzX2ZyZWVfZGlyZW50KHN0
cnVjdCB0bXBmc19tb3VudCAqdG1wLCBzdHJ1Y3QgdG1wZnNfZGlyZW50ICpkZSwKKyAgICBib29s
ZWFuX3Qgbm9kZV9leGlzdHMpCit7CisJaWYgKG5vZGVfZXhpc3RzKSB7CisJCXN0cnVjdCB0bXBm
c19ub2RlICpub2RlOworCisJCW5vZGUgPSBkZS0+dGRfbm9kZTsKKworCQlUTVBGU19OT0RFX0xP
Q0sobm9kZSk7CisJCVRNUEZTX0FTU0VSVF9FTE9DS0VEKG5vZGUpOworCQlLS0FTU0VSVChub2Rl
LT50bl9saW5rcyA+IDApOworCQlub2RlLT50bl9saW5rcy0tOworCQlUTVBGU19OT0RFX1VOTE9D
Syhub2RlKTsKKwl9CisKKwlrZnJlZShkZS0+dGRfbmFtZSwgTV9UTVBGU05BTUUpOworCW9iamNh
Y2hlX3B1dCh0bXAtPnRtX2RpcmVudF9wb29sLCBkZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LworCisvKgorICogQWxsb2NhdGVzIGEgbmV3IHZub2RlIGZvciB0aGUgbm9kZSBub2RlIG9yIHJl
dHVybnMgYSBuZXcgcmVmZXJlbmNlIHRvCisgKiBhbiBleGlzdGluZyBvbmUgaWYgdGhlIG5vZGUg
aGFkIGFscmVhZHkgYSB2bm9kZSByZWZlcmVuY2luZyBpdC4gIFRoZQorICogcmVzdWx0aW5nIGxv
Y2tlZCB2bm9kZSBpcyByZXR1cm5lZCBpbiAqdnBwLgorICoKKyAqIFJldHVybnMgemVybyBvbiBz
dWNjZXNzIG9yIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50
Cit0bXBmc19hbGxvY192cChzdHJ1Y3QgbW91bnQgKm1wLCBzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9k
ZSwgaW50IGxrZmxhZywKKyAgICBzdHJ1Y3Qgdm5vZGUgKip2cHApCit7CisJaW50IGVycm9yID0g
MDsKKwlzdHJ1Y3Qgdm5vZGUgKnZwOworCitsb29wOgorCVRNUEZTX05PREVfTE9DSyhub2RlKTsK
KwlpZiAoKHZwID0gbm9kZS0+dG5fdm5vZGUpICE9IE5VTEwpIHsKKwkJS0tBU1NFUlQoKG5vZGUt
PnRuX3Zwc3RhdGUgJiBUTVBGU19WTk9ERV9ET09NRUQpID09IDApOworCQlUTVBGU19OT0RFX1VO
TE9DSyhub2RlKTsKKwkJKHZvaWQpIHZnZXQodnAsIGxrZmxhZyB8IExLX0VYQ0xVU0lWRSB8IExL
X1JFVFJZKTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIHZub2RlIGlzIHN0aWxsIHRoZXJl
IGFmdGVyCisJCSAqIGdldHRpbmcgdGhlIGludGVybG9jayB0byBhdm9pZCByYWNpbmcgYSBmcmVl
LgorCQkgKi8KKwkJaWYgKG5vZGUtPnRuX3Zub2RlID09IE5VTEwgfHwgbm9kZS0+dG5fdm5vZGUg
IT0gdnApIHsKKwkJCXZwdXQodnApOworCQkJZ290byBsb29wOworCQl9CisKKwkJZ290byBvdXQ7
CisJfQorCisJaWYgKChub2RlLT50bl92cHN0YXRlICYgVE1QRlNfVk5PREVfRE9PTUVEKSB8fAor
CSAgICAobm9kZS0+dG5fdHlwZSA9PSBWRElSICYmIG5vZGUtPnRuX2Rpci50bl9wYXJlbnQgPT0g
TlVMTCkpIHsKKwkJVE1QRlNfTk9ERV9VTkxPQ0sobm9kZSk7CisJCWVycm9yID0gRU5PRU5UOwor
CQl2cCA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogb3RoZXJ3aXNlIGxvY2sg
dGhlIHZwIGxpc3Qgd2hpbGUgd2UgY2FsbCBnZXRuZXd2bm9kZQorCSAqIHNpbmNlIHRoYXQgY2Fu
IGJsb2NrLgorCSAqLworCWlmIChub2RlLT50bl92cHN0YXRlICYgVE1QRlNfVk5PREVfQUxMT0NB
VElORykgeworCQlub2RlLT50bl92cHN0YXRlIHw9IFRNUEZTX1ZOT0RFX1dBTlQ7CisJCWVycm9y
ID0gdHNsZWVwKChjYWRkcl90KSAmbm9kZS0+dG5fdnBzdGF0ZSwKKwkJICAgIFBJTlRFUkxPQ0tF
RCB8IFBDQVRDSCwgInRtcGZzX2FsbG9jX3ZwIiwgMCk7CisJCVRNUEZTX05PREVfVU5MT0NLKG5v
ZGUpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJZ290byBsb29wOworCX0g
ZWxzZQorCQlub2RlLT50bl92cHN0YXRlIHw9IFRNUEZTX1ZOT0RFX0FMTE9DQVRJTkc7CisJCisJ
VE1QRlNfTk9ERV9VTkxPQ0sobm9kZSk7CisKKwkvKiBHZXQgYSBuZXcgdm5vZGUgYW5kIGFzc29j
aWF0ZSBpdCB3aXRoIG91ciBub2RlLiAqLworCWVycm9yID0gZ2V0bmV3dm5vZGUoVlRfVE1QRlMs
IG1wLCAmdnAsIFZMS1RJTUVPVVQsIExLX0NBTlJFQ1VSU0UpOworCWlmIChlcnJvciAhPSAwKQor
CQlnb3RvIHVubG9jazsKKwlLS0FTU0VSVCh2cCAhPSBOVUxMKTsKKworCXZwLT52X2RhdGEgPSBu
b2RlOworCXZwLT52X3R5cGUgPSBub2RlLT50bl90eXBlOworCisJLyogVHlwZS1zcGVjaWZpYyBp
bml0aWFsaXphdGlvbi4gKi8KKwlzd2l0Y2ggKG5vZGUtPnRuX3R5cGUpIHsKKwljYXNlIFZCTEs6
CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBWQ0hSOgorCQkvKiBGQUxMVEhST1VHSCAqLwor
CWNhc2UgVlNPQ0s6CisJCWJyZWFrOworCWNhc2UgVlJFRzoKKwkJdmluaXR2bWlvKHZwLCBub2Rl
LT50bl9zaXplKTsKKwkJYnJlYWs7CisJY2FzZSBWTE5LOgorCQlpZiAobm9kZS0+dG5fc2l6ZSA+
PSB2cC0+dl9tb3VudC0+bW50X21heHN5bWxpbmtsZW4pCisJCQl2aW5pdHZtaW8odnAsIG5vZGUt
PnRuX3NpemUpOworCQlicmVhazsKKwljYXNlIFZGSUZPOgorCQl2cC0+dl9vcHMgPSAmbXAtPm1u
dF92bl9maWZvX29wczsKKwkJYnJlYWs7CisJY2FzZSBWRElSOgorCQl2aW5pdHZtaW8odnAsIG5v
ZGUtPnRuX3NpemUpOworCQlLS0FTU0VSVChub2RlLT50bl9kaXIudG5fcGFyZW50ICE9IE5VTEwp
OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXBhbmljKCJ0bXBmc19hbGxvY192cDogdHlwZSAl
cCAlZCIsIG5vZGUsIChpbnQpbm9kZS0+dG5fdHlwZSk7CisJfQorCisJaW5zbW50cXVlKHZwLCBt
cCk7CisKK3VubG9jazoKKwlUTVBGU19OT0RFX0xPQ0sobm9kZSk7CisKKwlLS0FTU0VSVChub2Rl
LT50bl92cHN0YXRlICYgVE1QRlNfVk5PREVfQUxMT0NBVElORyk7CisJbm9kZS0+dG5fdnBzdGF0
ZSAmPSB+VE1QRlNfVk5PREVfQUxMT0NBVElORzsKKwlub2RlLT50bl92bm9kZSA9IHZwOworCisJ
aWYgKG5vZGUtPnRuX3Zwc3RhdGUgJiBUTVBGU19WTk9ERV9XQU5UKSB7CisJCW5vZGUtPnRuX3Zw
c3RhdGUgJj0gflRNUEZTX1ZOT0RFX1dBTlQ7CisJCVRNUEZTX05PREVfVU5MT0NLKG5vZGUpOwor
CQl3YWtldXAoKGNhZGRyX3QpICZub2RlLT50bl92cHN0YXRlKTsKKwl9IGVsc2UKKwkJVE1QRlNf
Tk9ERV9VTkxPQ0sobm9kZSk7CisKK291dDoKKwkqdnBwID0gdnA7CisKKwlLS0FTU0VSVChJRkYo
ZXJyb3IgPT0gMCwgKnZwcCAhPSBOVUxMICYmIHZuX2lzbG9ja2VkKCp2cHApKSk7CisjaWZkZWYg
SU5WQVJJQU5UUworCVRNUEZTX05PREVfTE9DSyhub2RlKTsKKwlLS0FTU0VSVCgqdnBwID09IG5v
ZGUtPnRuX3Zub2RlKTsKKwlUTVBGU19OT0RFX1VOTE9DSyhub2RlKTsKKyNlbmRpZgorCisJcmV0
dXJuIGVycm9yOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIERlc3Ryb3lzIHRo
ZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSB2bm9kZSB2cCBhbmQgdGhlIG5vZGUgaXQKKyAqIHJl
ZmVyZW5jZXMuCisgKi8KK3ZvaWQKK3RtcGZzX2ZyZWVfdnAoc3RydWN0IHZub2RlICp2cCkKK3sK
KwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKworCW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKHZw
KTsKKworCVRNUEZTX05PREVfTE9DSyhub2RlKTsKKwlLS0FTU0VSVChsb2NrY291bnQoVE1QRlNf
Tk9ERV9NVFgobm9kZSkpID4gMCk7CisJbm9kZS0+dG5fdm5vZGUgPSBOVUxMOworCVRNUEZTX05P
REVfVU5MT0NLKG5vZGUpOworCXZwLT52X2RhdGEgPSBOVUxMOworfQorCisvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KKworLyoKKyAqIEFsbG9jYXRlcyBhIG5ldyBmaWxlIG9mIHR5cGUgJ3R5cGUnIGFuZCBh
ZGRzIGl0IHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5CisgKiAnZHZwJzsgdGhpcyBhZGRpdGlvbiBp
cyBkb25lIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBnaXZlbiBpbiAnY25wJy4KKyAqIFRoZSBv
d25lcnNoaXAgb2YgdGhlIG5ldyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgYmFzZWQg
b24gdGhlCisgKiBjcmVkZW50aWFscyBvZiB0aGUgY2FsbGVyICh0aHJvdWdoICdjbnAnKSwgdGhl
IGdyb3VwIGlzIHNldCBiYXNlZCBvbgorICogdGhlIHBhcmVudCBkaXJlY3RvcnkgYW5kIHRoZSBt
b2RlIGlzIGRldGVybWluZWQgZnJvbSB0aGUgJ3ZhcCcgYXJndW1lbnQuCisgKiBJZiBzdWNjZXNz
ZnVsLCAqdnBwIGhvbGRzIGEgdm5vZGUgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZmlsZSBhbmQgemVy
bworICogaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgKnZwcCBpcyBOVUxMIGFuZCB0aGUgZnVuY3Rp
b24gcmV0dXJucyBhbgorICogYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4KKyAqLworaW50Cit0bXBm
c19hbGxvY19maWxlKHN0cnVjdCB2bm9kZSAqZHZwLCBzdHJ1Y3Qgdm5vZGUgKip2cHAsIHN0cnVj
dCB2YXR0ciAqdmFwLAorICAgIHN0cnVjdCBuYW1lY2FjaGUgKm5jcCwgc3RydWN0IHVjcmVkICpj
cmVkLCBjaGFyICp0YXJnZXQpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB0bXBmc19kaXJlbnQg
KmRlOworCXN0cnVjdCB0bXBmc19tb3VudCAqdG1wOworCXN0cnVjdCB0bXBmc19ub2RlICpkbm9k
ZTsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqcGFyZW50
OworCisJdG1wID0gVkZTX1RPX1RNUEZTKGR2cC0+dl9tb3VudCk7CisJZG5vZGUgPSBWUF9UT19U
TVBGU19ESVIoZHZwKTsKKwkqdnBwID0gTlVMTDsKKworCS8qIElmIHRoZSBlbnRyeSB3ZSBhcmUg
Y3JlYXRpbmcgaXMgYSBkaXJlY3RvcnksIHdlIGNhbm5vdCBvdmVyZmxvdworCSAqIHRoZSBudW1i
ZXIgb2YgbGlua3Mgb2YgaXRzIHBhcmVudCwgYmVjYXVzZSBpdCB3aWxsIGdldCBhIG5ldworCSAq
IGxpbmsuICovCisJaWYgKHZhcC0+dmFfdHlwZSA9PSBWRElSKSB7CisJCS8qIEVuc3VyZSB0aGF0
IHdlIGRvIG5vdCBvdmVyZmxvdyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGlua3MKKwkJICogaW1w
b3NlZCBieSB0aGUgc3lzdGVtLiAqLworCQlLS0FTU0VSVChkbm9kZS0+dG5fbGlua3MgPD0gTElO
S19NQVgpOworCQlpZiAoZG5vZGUtPnRuX2xpbmtzID09IExJTktfTUFYKSB7CisJCQlyZXR1cm4g
RU1MSU5LOworCQl9CisKKwkJcGFyZW50ID0gZG5vZGU7CisJCUtLQVNTRVJUKHBhcmVudCAhPSBO
VUxMKTsKKwl9IGVsc2UKKwkJcGFyZW50ID0gTlVMTDsKKworCS8qIEFsbG9jYXRlIGEgbm9kZSB0
aGF0IHJlcHJlc2VudHMgdGhlIG5ldyBmaWxlLiAqLworCWVycm9yID0gdG1wZnNfYWxsb2Nfbm9k
ZSh0bXAsIHZhcC0+dmFfdHlwZSwgY3JlZC0+Y3JfdWlkLAorCSAgICBkbm9kZS0+dG5fZ2lkLCB2
YXAtPnZhX21vZGUsIHBhcmVudCwgdGFyZ2V0LCB2YXAtPnZhX3JtYWpvciwgdmFwLT52YV9ybWlu
b3IsICZub2RlKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIGVycm9yOworCisJLyogQWxs
b2NhdGUgYSBkaXJlY3RvcnkgZW50cnkgdGhhdCBwb2ludHMgdG8gdGhlIG5ldyBmaWxlLiAqLwor
CWVycm9yID0gdG1wZnNfYWxsb2NfZGlyZW50KHRtcCwgbm9kZSwgbmNwLT5uY19uYW1lLCBuY3At
Pm5jX25sZW4sCisJICAgICZkZSk7CisJaWYgKGVycm9yICE9IDApIHsKKwkJdG1wZnNfZnJlZV9u
b2RlKHRtcCwgbm9kZSk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIHZu
b2RlIGZvciB0aGUgbmV3IGZpbGUuICovCisJZXJyb3IgPSB0bXBmc19hbGxvY192cChkdnAtPnZf
bW91bnQsIG5vZGUsIExLX0VYQ0xVU0lWRSwgdnBwKTsKKwlpZiAoZXJyb3IgIT0gMCkgeworCQl0
bXBmc19mcmVlX2RpcmVudCh0bXAsIGRlLCBUUlVFKTsKKwkJdG1wZnNfZnJlZV9ub2RlKHRtcCwg
bm9kZSk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKiBOb3cgdGhhdCBhbGwgcmVxdWlyZWQg
aXRlbXMgYXJlIGFsbG9jYXRlZCwgd2UgY2FuIHByb2NlZWQgdG8KKwkgKiBpbnNlcnQgdGhlIG5l
dyBub2RlIGludG8gdGhlIGRpcmVjdG9yeSwgYW4gb3BlcmF0aW9uIHRoYXQKKwkgKiBjYW5ub3Qg
ZmFpbC4gKi8KKwl0bXBmc19kaXJfYXR0YWNoKGR2cCwgZGUpOworCisJcmV0dXJuIGVycm9yOwor
fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIEF0dGFjaGVzIHRoZSBkaXJlY3Rvcnkg
ZW50cnkgZGUgdG8gdGhlIGRpcmVjdG9yeSByZXByZXNlbnRlZCBieSB2cC4KKyAqIE5vdGUgdGhh
dCB0aGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgbGluayBjb3VudCBvZiB0aGUgbm9kZSBwb2ludGVk
IGJ5CisgKiB0aGUgZGlyZWN0b3J5IGVudHJ5LCBhcyB0aGlzIGlzIGRvbmUgYnkgdG1wZnNfYWxs
b2NfZGlyZW50LgorICovCit2b2lkCit0bXBmc19kaXJfYXR0YWNoKHN0cnVjdCB2bm9kZSAqdnAs
IHN0cnVjdCB0bXBmc19kaXJlbnQgKmRlKQoreworCXN0cnVjdCB0bXBmc19ub2RlICpkbm9kZTsK
KworCWRub2RlID0gVlBfVE9fVE1QRlNfRElSKHZwKTsKKwkKKwljcml0X2VudGVyKCk7CisJVEFJ
TFFfSU5TRVJUX1RBSUwoJmRub2RlLT50bl9kaXIudG5fZGlyaGVhZCwgZGUsIHRkX2VudHJpZXMp
OworCWNyaXRfZXhpdCgpOworCisJVE1QRlNfTk9ERV9MT0NLKGRub2RlKTsKKwlUTVBGU19BU1NF
UlRfRUxPQ0tFRChkbm9kZSk7CisJZG5vZGUtPnRuX3NpemUgKz0gc2l6ZW9mKHN0cnVjdCB0bXBm
c19kaXJlbnQpOworCWRub2RlLT50bl9zdGF0dXMgfD0gVE1QRlNfTk9ERV9BQ0NFU1NFRCB8IFRN
UEZTX05PREVfQ0hBTkdFRCB8IFwKKwkgICAgVE1QRlNfTk9ERV9NT0RJRklFRDsKKwlUTVBGU19O
T0RFX1VOTE9DSyhkbm9kZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogRGV0
YWNoZXMgdGhlIGRpcmVjdG9yeSBlbnRyeSBkZSBmcm9tIHRoZSBkaXJlY3RvcnkgcmVwcmVzZW50
ZWQgYnkgdnAuCisgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlIGxpbmsgY291
bnQgb2YgdGhlIG5vZGUgcG9pbnRlZCBieQorICogdGhlIGRpcmVjdG9yeSBlbnRyeSwgYXMgdGhp
cyBpcyBkb25lIGJ5IHRtcGZzX2ZyZWVfZGlyZW50LgorICovCit2b2lkCit0bXBmc19kaXJfZGV0
YWNoKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB0bXBmc19kaXJlbnQgKmRlKQoreworCXN0cnVj
dCB0bXBmc19ub2RlICpkbm9kZTsKKworCWRub2RlID0gVlBfVE9fVE1QRlNfRElSKHZwKTsKKwor
CisJY3JpdF9lbnRlcigpOworCWlmIChkbm9kZS0+dG5fZGlyLnRuX3JlYWRkaXJfbGFzdHAgPT0g
ZGUpIHsKKwkJZG5vZGUtPnRuX2Rpci50bl9yZWFkZGlyX2xhc3RuID0gMDsKKwkJZG5vZGUtPnRu
X2Rpci50bl9yZWFkZGlyX2xhc3RwID0gTlVMTDsKKwl9CisKKwlUQUlMUV9SRU1PVkUoJmRub2Rl
LT50bl9kaXIudG5fZGlyaGVhZCwgZGUsIHRkX2VudHJpZXMpOworCWNyaXRfZXhpdCgpOworCisJ
VE1QRlNfTk9ERV9MT0NLKGRub2RlKTsKKwlUTVBGU19BU1NFUlRfRUxPQ0tFRChkbm9kZSk7CisJ
ZG5vZGUtPnRuX3NpemUgLT0gc2l6ZW9mKHN0cnVjdCB0bXBmc19kaXJlbnQpOworCWRub2RlLT50
bl9zdGF0dXMgfD0gVE1QRlNfTk9ERV9BQ0NFU1NFRCB8IFRNUEZTX05PREVfQ0hBTkdFRCB8IFwK
KwkgICAgVE1QRlNfTk9ERV9NT0RJRklFRDsKKwlUTVBGU19OT0RFX1VOTE9DSyhkbm9kZSk7Cit9
CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogTG9va3MgZm9yIGEgZGlyZWN0b3J5IGVu
dHJ5IGluIHRoZSBkaXJlY3RvcnkgcmVwcmVzZW50ZWQgYnkgbm9kZS4KKyAqICduY3AnIGRlc2Ny
aWJlcyB0aGUgbmFtZSBvZiB0aGUgZW50cnkgdG8gbG9vayBmb3IuICBOb3RlIHRoYXQgdGhlIC4K
KyAqIGFuZCAuLiBjb21wb25lbnRzIGFyZSBub3QgYWxsb3dlZCBhcyB0aGV5IGRvIG5vdCBwaHlz
aWNhbGx5IGV4aXN0CisgKiB3aXRoaW4gZGlyZWN0b3JpZXMuCisgKgorICogUmV0dXJucyBhIHBv
aW50ZXIgdG8gdGhlIGVudHJ5IHdoZW4gZm91bmQsIG90aGVyd2lzZSBOVUxMLgorICovCitzdHJ1
Y3QgdG1wZnNfZGlyZW50ICoKK3RtcGZzX2Rpcl9sb29rdXAoc3RydWN0IHRtcGZzX25vZGUgKm5v
ZGUsIHN0cnVjdCB0bXBmc19ub2RlICpmLAorICAgIHN0cnVjdCBuYW1lY2FjaGUgKm5jcCkKK3sK
Kwl2b2lkICpmb3VuZDsKKwlzdHJ1Y3QgdG1wZnNfZGlyZW50ICpkZTsKKwlpbnQgbGVuID0gbmNw
LT5uY19ubGVuOworCisJVE1QRlNfVkFMSURBVEVfRElSKG5vZGUpOworCisJZm91bmQgPSAwOwor
CVRBSUxRX0ZPUkVBQ0goZGUsICZub2RlLT50bl9kaXIudG5fZGlyaGVhZCwgdGRfZW50cmllcykg
eworCQlpZiAoZiAhPSBOVUxMICYmIGRlLT50ZF9ub2RlICE9IGYpCisJCSAgICBjb250aW51ZTsK
KwkJaWYgKGxlbiA9PSBkZS0+dGRfbmFtZWxlbikgeworCQkJaWYgKCFtZW1jbXAobmNwLT5uY19u
YW1lLCBkZS0+dGRfbmFtZSwgbGVuKSkgeworCQkJCWZvdW5kID0gbm9kZTsKKwkJCQlicmVhazsK
KwkJCX0KKwkJfQorCX0KKworCVRNUEZTX05PREVfTE9DSyhub2RlKTsKKwlub2RlLT50bl9zdGF0
dXMgfD0gVE1QRlNfTk9ERV9BQ0NFU1NFRDsKKwlUTVBGU19OT0RFX1VOTE9DSyhub2RlKTsKKwor
CXJldHVybiBmb3VuZCA/IGRlIDogTlVMTDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8q
CisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHRtcGZzX3JlYWRkaXIuICBDcmVhdGVzIGEgJy4nIGVu
dHJ5IGZvciB0aGUgZ2l2ZW4KKyAqIGRpcmVjdG9yeSBhbmQgcmV0dXJucyBpdCBpbiB0aGUgdWlv
IHNwYWNlLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgMAorICogb24gc3VjY2VzcywgLTEgaWYgdGhl
cmUgd2FzIG5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIHVpbyBzdHJ1Y3R1cmUgdG8KKyAqIGhvbGQg
dGhlIGRpcmVjdG9yeSBlbnRyeSBvciBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIGlmIGFub3Ro
ZXIKKyAqIGVycm9yIGhhcHBlbnMuCisgKi8KK2ludAordG1wZnNfZGlyX2dldGRvdGRlbnQoc3Ry
dWN0IHRtcGZzX25vZGUgKm5vZGUsIHN0cnVjdCB1aW8gKnVpbykKK3sKKwlpbnQgZXJyb3I7CisJ
c3RydWN0IGRpcmVudCBkZW50OworCWludCBkaXJzaXplOworCisJVE1QRlNfVkFMSURBVEVfRElS
KG5vZGUpOworCUtLQVNTRVJUKHVpby0+dWlvX29mZnNldCA9PSBUTVBGU19ESVJDT09LSUVfRE9U
KTsKKworCWRlbnQuZF9pbm8gPSBub2RlLT50bl9pZDsKKwlkZW50LmRfdHlwZSA9IERUX0RJUjsK
KwlkZW50LmRfbmFtbGVuID0gMTsKKwlkZW50LmRfbmFtZVswXSA9ICcuJzsKKwlkZW50LmRfbmFt
ZVsxXSA9ICdcMCc7CisJZGlyc2l6ZSA9IF9ESVJFTlRfRElSU0laKCZkZW50KTsKKworCWlmIChk
aXJzaXplID4gdWlvLT51aW9fcmVzaWQpCisJCWVycm9yID0gLTE7CisJZWxzZSB7CisJCWVycm9y
ID0gdWlvbW92ZSgoY2FkZHJfdCkmZGVudCwgZGlyc2l6ZSwgdWlvKTsKKwkJaWYgKGVycm9yID09
IDApCisJCQl1aW8tPnVpb19vZmZzZXQgPSBUTVBGU19ESVJDT09LSUVfRE9URE9UOworCX0KKwor
CW5vZGUtPnRuX3N0YXR1cyB8PSBUTVBGU19OT0RFX0FDQ0VTU0VEOworCisJcmV0dXJuIGVycm9y
OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3Ig
dG1wZnNfcmVhZGRpci4gIENyZWF0ZXMgYSAnLi4nIGVudHJ5IGZvciB0aGUgZ2l2ZW4KKyAqIGRp
cmVjdG9yeSBhbmQgcmV0dXJucyBpdCBpbiB0aGUgdWlvIHNwYWNlLiAgVGhlIGZ1bmN0aW9uIHJl
dHVybnMgMAorICogb24gc3VjY2VzcywgLTEgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggc3BhY2Ug
aW4gdGhlIHVpbyBzdHJ1Y3R1cmUgdG8KKyAqIGhvbGQgdGhlIGRpcmVjdG9yeSBlbnRyeSBvciBh
biBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIGlmIGFub3RoZXIKKyAqIGVycm9yIGhhcHBlbnMuCisg
Ki8KK2ludAordG1wZnNfZGlyX2dldGRvdGRvdGRlbnQoc3RydWN0IHRtcGZzX25vZGUgKm5vZGUs
IHN0cnVjdCB1aW8gKnVpbykKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IGRpcmVudCBkZW50Owor
CWludCBkaXJzaXplOworCisJVE1QRlNfVkFMSURBVEVfRElSKG5vZGUpOworCUtLQVNTRVJUKHVp
by0+dWlvX29mZnNldCA9PSBUTVBGU19ESVJDT09LSUVfRE9URE9UKTsKKworCS8qCisJICogUmV0
dXJuIEVOT0VOVCBpZiB0aGUgY3VycmVudCBub2RlIGlzIGFscmVhZHkgcmVtb3ZlZC4KKwkgKi8K
KwlpZiAobm9kZS0+dG5fZGlyLnRuX3BhcmVudCA9PSBOVUxMKSB7CisJCXJldHVybiAoRU5PRU5U
KTsKKwl9CisKKwlUTVBGU19OT0RFX0xPQ0sobm9kZS0+dG5fZGlyLnRuX3BhcmVudCk7CisJZGVu
dC5kX2lubyA9IG5vZGUtPnRuX2Rpci50bl9wYXJlbnQtPnRuX2lkOworCVRNUEZTX05PREVfVU5M
T0NLKG5vZGUtPnRuX2Rpci50bl9wYXJlbnQpOworCisJZGVudC5kX3R5cGUgPSBEVF9ESVI7CisJ
ZGVudC5kX25hbWxlbiA9IDI7CisJZGVudC5kX25hbWVbMF0gPSAnLic7CisJZGVudC5kX25hbWVb
MV0gPSAnLic7CisJZGVudC5kX25hbWVbMl0gPSAnXDAnOworCWRpcnNpemUgPSBfRElSRU5UX0RJ
UlNJWigmZGVudCk7CisKKwlpZiAoZGlyc2l6ZSA+IHVpby0+dWlvX3Jlc2lkKQorCQllcnJvciA9
IC0xOworCWVsc2UgeworCQllcnJvciA9IHVpb21vdmUoKGNhZGRyX3QpJmRlbnQsIGRpcnNpemUs
IHVpbyk7CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQlzdHJ1Y3QgdG1wZnNfZGlyZW50ICpkZTsK
KworCQkJZGUgPSBUQUlMUV9GSVJTVCgmbm9kZS0+dG5fZGlyLnRuX2RpcmhlYWQpOworCQkJaWYg
KGRlID09IE5VTEwpCisJCQkJdWlvLT51aW9fb2Zmc2V0ID0gVE1QRlNfRElSQ09PS0lFX0VPRjsK
KwkJCWVsc2UKKwkJCQl1aW8tPnVpb19vZmZzZXQgPSB0bXBmc19kaXJjb29raWUoZGUpOworCQl9
CisJfQorCisJbm9kZS0+dG5fc3RhdHVzIHw9IFRNUEZTX05PREVfQUNDRVNTRUQ7CisKKwlyZXR1
cm4gZXJyb3I7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogTG9va3VwIGEgZGly
ZWN0b3J5IGVudHJ5IGJ5IGl0cyBhc3NvY2lhdGVkIGNvb2tpZS4KKyAqLworc3RydWN0IHRtcGZz
X2RpcmVudCAqCit0bXBmc19kaXJfbG9va3VwYnljb29raWUoc3RydWN0IHRtcGZzX25vZGUgKm5v
ZGUsIG9mZl90IGNvb2tpZSkKK3sKKwlzdHJ1Y3QgdG1wZnNfZGlyZW50ICpkZTsKKworCWlmIChj
b29raWUgPT0gbm9kZS0+dG5fZGlyLnRuX3JlYWRkaXJfbGFzdG4gJiYKKwkgICAgbm9kZS0+dG5f
ZGlyLnRuX3JlYWRkaXJfbGFzdHAgIT0gTlVMTCkgeworCQlyZXR1cm4gbm9kZS0+dG5fZGlyLnRu
X3JlYWRkaXJfbGFzdHA7CisJfQorCisJVEFJTFFfRk9SRUFDSChkZSwgJm5vZGUtPnRuX2Rpci50
bl9kaXJoZWFkLCB0ZF9lbnRyaWVzKSB7CisJCWlmICh0bXBmc19kaXJjb29raWUoZGUpID09IGNv
b2tpZSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gZGU7Cit9CisKKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciB0bXBmc19yZWFkZGlyLiAg
UmV0dXJucyBhcyBtdWNoIGRpcmVjdG9yeSBlbnRyaWVzCisgKiBhcyBjYW4gZml0IGluIHRoZSB1
aW8gc3BhY2UuICBUaGUgcmVhZCBzdGFydHMgYXQgdWlvLT51aW9fb2Zmc2V0LgorICogVGhlIGZ1
bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBz
cGFjZQorICogaW4gdGhlIHVpbyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgZGlyZWN0b3J5IGVudHJ5
IG9yIGFuIGFwcHJvcHJpYXRlCisgKiBlcnJvciBjb2RlIGlmIGFub3RoZXIgZXJyb3IgaGFwcGVu
cy4KKyAqLworaW50Cit0bXBmc19kaXJfZ2V0ZGVudHMoc3RydWN0IHRtcGZzX25vZGUgKm5vZGUs
IHN0cnVjdCB1aW8gKnVpbywgb2ZmX3QgKmNudHApCit7CisJaW50IGVycm9yOworCW9mZl90IHN0
YXJ0Y29va2llOworCXN0cnVjdCB0bXBmc19kaXJlbnQgKmRlOworCisJVE1QRlNfVkFMSURBVEVf
RElSKG5vZGUpOworCisJLyogTG9jYXRlIHRoZSBmaXJzdCBkaXJlY3RvcnkgZW50cnkgd2UgaGF2
ZSB0byByZXR1cm4uICBXZSBoYXZlIGNhY2hlZAorCSAqIHRoZSBsYXN0IHJlYWRkaXIgaW4gdGhl
IG5vZGUsIHNvIHVzZSB0aG9zZSB2YWx1ZXMgaWYgYXBwcm9wcmlhdGUuCisJICogT3RoZXJ3aXNl
IGRvIGEgbGluZWFyIHNjYW4gdG8gZmluZCB0aGUgcmVxdWVzdGVkIGVudHJ5LiAqLworCXN0YXJ0
Y29va2llID0gdWlvLT51aW9fb2Zmc2V0OworCUtLQVNTRVJUKHN0YXJ0Y29va2llICE9IFRNUEZT
X0RJUkNPT0tJRV9ET1QpOworCUtLQVNTRVJUKHN0YXJ0Y29va2llICE9IFRNUEZTX0RJUkNPT0tJ
RV9ET1RET1QpOworCWlmIChzdGFydGNvb2tpZSA9PSBUTVBGU19ESVJDT09LSUVfRU9GKSB7CisJ
CXJldHVybiAwOworCX0gZWxzZSB7CisJCWRlID0gdG1wZnNfZGlyX2xvb2t1cGJ5Y29va2llKG5v
ZGUsIHN0YXJ0Y29va2llKTsKKwl9CisJaWYgKGRlID09IE5VTEwpIHsKKwkJcmV0dXJuIEVJTlZB
TDsKKwl9CisKKwkvKiBSZWFkIGFzIG11Y2ggZW50cmllcyBhcyBwb3NzaWJsZTsgaS5lLiwgdW50
aWwgd2UgcmVhY2ggdGhlIGVuZCBvZgorCSAqIHRoZSBkaXJlY3Rvcnkgb3Igd2UgZXhoYXVzdCB1
aW8gc3BhY2UuICovCisJZG8geworCQlzdHJ1Y3QgZGlyZW50IGQ7CisJCWludCByZWNsZW47CisK
KwkJLyogQ3JlYXRlIGEgZGlyZW50IHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQK
KwkJICogdG1wZnNfbm9kZSBhbmQgZmlsbCBpdC4gKi8KKwkJZC5kX2lubyA9IGRlLT50ZF9ub2Rl
LT50bl9pZDsKKwkJc3dpdGNoIChkZS0+dGRfbm9kZS0+dG5fdHlwZSkgeworCQljYXNlIFZCTEs6
CisJCQlkLmRfdHlwZSA9IERUX0JMSzsKKwkJCWJyZWFrOworCisJCWNhc2UgVkNIUjoKKwkJCWQu
ZF90eXBlID0gRFRfQ0hSOworCQkJYnJlYWs7CisKKwkJY2FzZSBWRElSOgorCQkJZC5kX3R5cGUg
PSBEVF9ESVI7CisJCQlicmVhazsKKworCQljYXNlIFZGSUZPOgorCQkJZC5kX3R5cGUgPSBEVF9G
SUZPOworCQkJYnJlYWs7CisKKwkJY2FzZSBWTE5LOgorCQkJZC5kX3R5cGUgPSBEVF9MTks7CisJ
CQlicmVhazsKKworCQljYXNlIFZSRUc6CisJCQlkLmRfdHlwZSA9IERUX1JFRzsKKwkJCWJyZWFr
OworCisJCWNhc2UgVlNPQ0s6CisJCQlkLmRfdHlwZSA9IERUX1NPQ0s7CisJCQlicmVhazsKKwor
CQlkZWZhdWx0OgorCQkJcGFuaWMoInRtcGZzX2Rpcl9nZXRkZW50czogdHlwZSAlcCAlZCIsCisJ
CQkgICAgZGUtPnRkX25vZGUsIChpbnQpZGUtPnRkX25vZGUtPnRuX3R5cGUpOworCQl9CisJCWQu
ZF9uYW1sZW4gPSBkZS0+dGRfbmFtZWxlbjsKKwkJS0tBU1NFUlQoZGUtPnRkX25hbWVsZW4gPCBz
aXplb2YoZC5kX25hbWUpKTsKKwkJYmNvcHkoZGUtPnRkX25hbWUsIGQuZF9uYW1lLCBkLmRfbmFt
bGVuKTsKKwkJZC5kX25hbWVbZC5kX25hbWxlbl0gPSAnXDAnOworCQlyZWNsZW4gPSBfRElSRU5U
X1JFQ0xFTihkLmRfbmFtbGVuKTsKKworCQkvKiBTdG9wIHJlYWRpbmcgaWYgdGhlIGRpcmVjdG9y
eSBlbnRyeSB3ZSBhcmUgdHJlYXRpbmcgaXMKKwkJICogYmlnZ2VyIHRoYW4gdGhlIGFtb3VudCBv
ZiBkYXRhIHRoYXQgY2FuIGJlIHJldHVybmVkLiAqLworCQlpZiAocmVjbGVuID4gdWlvLT51aW9f
cmVzaWQpIHsKKwkJCWVycm9yID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIENvcHkgdGhl
IG5ldyBkaXJlbnQgc3RydWN0dXJlIGludG8gdGhlIG91dHB1dCBidWZmZXIgYW5kCisJCSAqIGFk
dmFuY2UgcG9pbnRlcnMuICovCisJCWVycm9yID0gdWlvbW92ZSgoY2FkZHJfdCkmZCwgcmVjbGVu
LCB1aW8pOworCisJCSgqY250cCkrKzsKKwkJZGUgPSBUQUlMUV9ORVhUKGRlLCB0ZF9lbnRyaWVz
KTsKKwl9IHdoaWxlIChlcnJvciA9PSAwICYmIHVpby0+dWlvX3Jlc2lkID4gMCAmJiBkZSAhPSBO
VUxMKTsKKworCS8qIFVwZGF0ZSB0aGUgb2Zmc2V0IGFuZCBjYWNoZS4gKi8KKwlpZiAoZGUgPT0g
TlVMTCkgeworCQl1aW8tPnVpb19vZmZzZXQgPSBUTVBGU19ESVJDT09LSUVfRU9GOworCQlub2Rl
LT50bl9kaXIudG5fcmVhZGRpcl9sYXN0biA9IDA7CisJCW5vZGUtPnRuX2Rpci50bl9yZWFkZGly
X2xhc3RwID0gTlVMTDsKKwl9IGVsc2UgeworCQlub2RlLT50bl9kaXIudG5fcmVhZGRpcl9sYXN0
biA9IHVpby0+dWlvX29mZnNldCA9IHRtcGZzX2RpcmNvb2tpZShkZSk7CisJCW5vZGUtPnRuX2Rp
ci50bl9yZWFkZGlyX2xhc3RwID0gZGU7CisJfQorCW5vZGUtPnRuX3N0YXR1cyB8PSBUTVBGU19O
T0RFX0FDQ0VTU0VEOworCisJcmV0dXJuIGVycm9yOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
KworLyoKKyAqIFJlc2l6ZXMgdGhlIGFvYmogYXNzb2NpYXRlZCB0byB0aGUgcmVndWxhciBmaWxl
IHBvaW50ZWQgdG8gYnkgdnAgdG8KKyAqIHRoZSBzaXplIG5ld3NpemUuICAndnAnIG11c3QgcG9p
bnQgdG8gYSB2bm9kZSB0aGF0IHJlcHJlc2VudHMgYSByZWd1bGFyCisgKiBmaWxlLiAgJ25ld3Np
emUnIG11c3QgYmUgcG9zaXRpdmUuCisgKgorICogcGFzcyB0cml2aWFsIGFzIDEgd2hlbiBidWYg
Y29udGVudCB3aWxsIGJlIG92ZXJ3cml0dGVuLCBvdGhlcndpc2Ugc2V0IDAKKyAqIHRvIGJlIHpl
cm8gZmlsbGVkLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGFuIGFwcHJvcHJp
YXRlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50Cit0bXBmc19yZWdfcmVzaXplKHN0
cnVjdCB2bm9kZSAqdnAsIG9mZl90IG5ld3NpemUsIGludCB0cml2aWFsKQoreworCWludCBlcnJv
cjsKKwlzaXplX3QgbmV3cGFnZXMsIG9sZHBhZ2VzOworCXN0cnVjdCB0bXBmc19tb3VudCAqdG1w
OworCXN0cnVjdCB0bXBmc19ub2RlICpub2RlOworCW9mZl90IG9sZHNpemU7CisJaW50IGJpb3Np
emUgPSB2cC0+dl9tb3VudC0+bW50X3N0YXQuZl9pb3NpemU7CisKKyNpZmRlZiBJTlZBUklBTlRT
CisJS0tBU1NFUlQodnAtPnZfdHlwZSA9PSBWUkVHKTsKKwlLS0FTU0VSVChuZXdzaXplID49IDAp
OworI2VuZGlmCisKKwlub2RlID0gVlBfVE9fVE1QRlNfTk9ERSh2cCk7CisJdG1wID0gVkZTX1RP
X1RNUEZTKHZwLT52X21vdW50KTsKKworCS8qIENvbnZlcnQgdGhlIG9sZCBhbmQgbmV3IHNpemVz
IHRvIHRoZSBudW1iZXIgb2YgcGFnZXMgbmVlZGVkIHRvCisJICogc3RvcmUgdGhlbS4gIEl0IG1h
eSBoYXBwZW4gdGhhdCB3ZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZworCSAqIGJlY2F1c2Ug
dGhlIGxhc3QgYWxsb2NhdGVkIHBhZ2UgY2FuIGFjY29tbW9kYXRlIHRoZSBjaGFuZ2Ugb24KKwkg
KiBpdHMgb3duLiAqLworCW9sZHNpemUgPSBub2RlLT50bl9zaXplOworCW9sZHBhZ2VzID0gcm91
bmRfcGFnZShvbGRzaXplKSAvIFBBR0VfU0laRTsKKwlLS0FTU0VSVChvbGRwYWdlcyA9PSBub2Rl
LT50bl9yZWcudG5fYW9ial9wYWdlcyk7CisJbmV3cGFnZXMgPSByb3VuZF9wYWdlKG5ld3NpemUp
IC8gUEFHRV9TSVpFOworCisJaWYgKG5ld3BhZ2VzID4gb2xkcGFnZXMgJiYKKwkgICAgbmV3cGFn
ZXMgLSBvbGRwYWdlcyA+IFRNUEZTX1BBR0VTX0FWQUlMKHRtcCkpIHsKKwkJZXJyb3IgPSBFTk9T
UEM7CisJCWdvdG8gb3V0OworCX0KKworCVRNUEZTX0xPQ0sodG1wKTsKKwl0bXAtPnRtX3BhZ2Vz
X3VzZWQgKz0gKG5ld3BhZ2VzIC0gb2xkcGFnZXMpOworCVRNUEZTX1VOTE9DSyh0bXApOworCisJ
VE1QRlNfTk9ERV9MT0NLKG5vZGUpOworCW5vZGUtPnRuX3JlZy50bl9hb2JqX3BhZ2VzID0gbmV3
cGFnZXM7CisJbm9kZS0+dG5fc2l6ZSA9IG5ld3NpemU7CisJVE1QRlNfTk9ERV9VTkxPQ0sobm9k
ZSk7CisKKwlpZiAobmV3c2l6ZSA8IG9sZHNpemUpCisJCWVycm9yID0gbnZ0cnVuY2J1Zih2cCwg
bmV3c2l6ZSwgYmlvc2l6ZSwgLTEpOworCWVsc2UKKwkJZXJyb3IgPSBudmV4dGVuZGJ1Zih2cCwg
b2xkc2l6ZSwgbmV3c2l6ZSwgYmlvc2l6ZSwgYmlvc2l6ZSwKKwkJCQkgICAgLTEsIC0xLCB0cml2
aWFsKTsKKworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisK
Ky8qCisgKiBDaGFuZ2UgZmxhZ3Mgb2YgdGhlIGdpdmVuIHZub2RlLgorICogQ2FsbGVyIHNob3Vs
ZCBleGVjdXRlIHRtcGZzX3VwZGF0ZSBvbiB2cCBhZnRlciBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9u
LgorICogVGhlIHZub2RlIG11c3QgYmUgbG9ja2VkIG9uIGVudHJ5IGFuZCByZW1haW4gbG9ja2Vk
IG9uIGV4aXQuCisgKi8KK2ludAordG1wZnNfY2hmbGFncyhzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQg
ZmxhZ3MsIHN0cnVjdCB1Y3JlZCAqY3JlZCkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHRtcGZz
X25vZGUgKm5vZGU7CisJaW50IGZtb2RlLCBtb2RlOworCisJS0tBU1NFUlQodm5faXNsb2NrZWQo
dnApKTsKKworCW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKHZwKTsKKworCS8qIERpc2FsbG93IHRo
aXMgb3BlcmF0aW9uIGlmIHRoZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIHJlYWQtb25seS4gKi8K
KwlpZiAodnAtPnZfbW91bnQtPm1udF9mbGFnICYgTU5UX1JET05MWSkKKwkJcmV0dXJuIEVST0ZT
OworCisJZm1vZGUgPSBGRkxBR1Mobm9kZS0+dG5fZmxhZ3MpOworCW1vZGUgPSAwOworCWlmICgo
KGZtb2RlICYgKEZSRUFEIHwgRldSSVRFKSkgPT0gMCkgfHwgKGZtb2RlICYgT19DUkVBVCkpCisJ
CXJldHVybiBFSU5WQUw7CisJaWYgKGZtb2RlICYgKEZXUklURSB8IE9fVFJVTkMpKSB7CisJCWlm
ICh2cC0+dl90eXBlID09IFZESVIpIHsKKwkJCXJldHVybiBFSVNESVI7CisJCX0KKwkJZXJyb3Ig
PSB2bl93cml0ZWNoayh2cCwgTlVMTCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiAoZXJyb3Ip
OworCisJCW1vZGUgfD0gVldSSVRFOworCX0KKwlpZiAoZm1vZGUgJiBGUkVBRCkKKwkJbW9kZSB8
PSBWUkVBRDsKKwlpZiAobW9kZSkgeworCSAgICAgICAJZXJyb3IgPSBWT1BfQUNDRVNTKHZwLCBt
b2RlLCBjcmVkKTsKKwkgICAgICAgCWlmIChlcnJvcikKKwkJCXJldHVybiAoZXJyb3IpOworCX0K
KwkvKgorCSAqIFVucHJpdmlsZWdlZCBwcm9jZXNzZXMgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gdW5z
ZXQgc3lzdGVtCisJICogZmxhZ3MsIG9yIG1vZGlmeSBmbGFncyBpZiBhbnkgc3lzdGVtIGZsYWdz
IGFyZSBzZXQuCisJICovCisJVE1QRlNfTk9ERV9MT0NLKG5vZGUpOworCWlmICghcHJpdl9jaGVj
a19jcmVkKGNyZWQsIFBSSVZfVkZTX1NZU0ZMQUdTLCAwKSkgeworI2lmIDAKKwkJaWYgKG5vZGUt
PnRuX2ZsYWdzCisJCSAgJiAoU0ZfTk9VTkxJTksgfCBTRl9JTU1VVEFCTEUgfCBTRl9BUFBFTkQp
KSB7CisJCQllcnJvciA9IHNlY3VyZWxldmVsX2d0KGNyZWQsIDApOworCQkJaWYgKGVycm9yKQor
CQkJCXJldHVybiAoZXJyb3IpOworCQl9CisJCS8qIFNuYXBzaG90IGZsYWcgY2Fubm90IGJlIHNl
dCBvciBjbGVhcmVkICovCisJCWlmICgoKGZsYWdzICYgU0ZfU05BUFNIT1QpICE9IDAgJiYKKwkJ
ICAobm9kZS0+dG5fZmxhZ3MgJiBTRl9TTkFQU0hPVCkgPT0gMCkgfHwKKwkJICAoKGZsYWdzICYg
U0ZfU05BUFNIT1QpID09IDAgJiYKKwkJICAobm9kZS0+dG5fZmxhZ3MgJiBTRl9TTkFQU0hPVCkg
IT0gMCkpCisJCQlyZXR1cm4gKEVQRVJNKTsKKyNlbmRpZgorCQlub2RlLT50bl9mbGFncyA9IGZs
YWdzOworCX0gZWxzZSB7CisJCWlmIChub2RlLT50bl9mbGFncworCQkgICYgKFNGX05PVU5MSU5L
IHwgU0ZfSU1NVVRBQkxFIHwgU0ZfQVBQRU5EKSB8fAorCQkgIChmbGFncyAmIFVGX1NFVFRBQkxF
KSAhPSBmbGFncykKKwkJCXJldHVybiAoRVBFUk0pOworCQlub2RlLT50bl9mbGFncyAmPSBTRl9T
RVRUQUJMRTsKKwkJbm9kZS0+dG5fZmxhZ3MgfD0gKGZsYWdzICYgVUZfU0VUVEFCTEUpOworCX0K
Kwlub2RlLT50bl9zdGF0dXMgfD0gVE1QRlNfTk9ERV9DSEFOR0VEOworCVRNUEZTX05PREVfVU5M
T0NLKG5vZGUpOworCisJS0tBU1NFUlQodm5faXNsb2NrZWQodnApKTsKKworCXJldHVybiAwOwor
fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIENoYW5nZSBhY2Nlc3MgbW9kZSBvbiB0
aGUgZ2l2ZW4gdm5vZGUuCisgKiBDYWxsZXIgc2hvdWxkIGV4ZWN1dGUgdG1wZnNfdXBkYXRlIG9u
IHZwIGFmdGVyIGEgc3VjY2Vzc2Z1bCBleGVjdXRpb24uCisgKiBUaGUgdm5vZGUgbXVzdCBiZSBs
b2NrZWQgb24gZW50cnkgYW5kIHJlbWFpbiBsb2NrZWQgb24gZXhpdC4KKyAqLworaW50Cit0bXBm
c19jaG1vZChzdHJ1Y3Qgdm5vZGUgKnZwLCBtb2RlX3QgbW9kZSwgc3RydWN0IHVjcmVkICpjcmVk
KQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKwlpbnQgZm1vZGUs
IGFjY21vZGU7CisKKwlLS0FTU0VSVCh2bl9pc2xvY2tlZCh2cCkpOworCisJbm9kZSA9IFZQX1RP
X1RNUEZTX05PREUodnApOworCisJLyogRGlzYWxsb3cgdGhpcyBvcGVyYXRpb24gaWYgdGhlIGZp
bGUgc3lzdGVtIGlzIG1vdW50ZWQgcmVhZC1vbmx5LiAqLworCWlmICh2cC0+dl9tb3VudC0+bW50
X2ZsYWcgJiBNTlRfUkRPTkxZKQorCQlyZXR1cm4gRVJPRlM7CisKKwkvKiBJbW11dGFibGUgb3Ig
YXBwZW5kLW9ubHkgZmlsZXMgY2Fubm90IGJlIG1vZGlmaWVkLCBlaXRoZXIuICovCisJaWYgKG5v
ZGUtPnRuX2ZsYWdzICYgKElNTVVUQUJMRSB8IEFQUEVORCkpCisJCXJldHVybiBFUEVSTTsKKwor
CWZtb2RlID0gRkZMQUdTKG5vZGUtPnRuX2ZsYWdzKTsKKwlhY2Ntb2RlID0gMDsKKwlpZiAoKChm
bW9kZSAmIChGUkVBRCB8IEZXUklURSkpID09IDApIHx8IChmbW9kZSAmIE9fQ1JFQVQpKQorCQly
ZXR1cm4gRUlOVkFMOworCWlmIChmbW9kZSAmIChGV1JJVEUgfCBPX1RSVU5DKSkgeworCQlpZiAo
dnAtPnZfdHlwZSA9PSBWRElSKSB7CisJCQlyZXR1cm4gRUlTRElSOworCQl9CisJCWVycm9yID0g
dm5fd3JpdGVjaGsodnAsIE5VTEwpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gKGVycm9yKTsK
KworCQlhY2Ntb2RlIHw9IFZXUklURTsKKwl9CisJaWYgKGZtb2RlICYgRlJFQUQpCisJCWFjY21v
ZGUgfD0gVlJFQUQ7CisJaWYgKGFjY21vZGUpIHsKKwkgICAgICAgCWVycm9yID0gVk9QX0FDQ0VT
Uyh2cCwgYWNjbW9kZSwgY3JlZCk7CisJICAgICAgIAlpZiAoZXJyb3IpCisJCQlyZXR1cm4gKGVy
cm9yKTsKKwl9CisKKwkvKgorCSAqIFByaXZpbGVnZWQgcHJvY2Vzc2VzIG1heSBzZXQgdGhlIHN0
aWNreSBiaXQgb24gbm9uLWRpcmVjdG9yaWVzLAorCSAqIGFzIHdlbGwgYXMgc2V0IHRoZSBzZXRn
aWQgYml0IG9uIGEgZmlsZSB3aXRoIGEgZ3JvdXAgdGhhdCB0aGUKKwkgKiBwcm9jZXNzIGlzIG5v
dCBhIG1lbWJlciBvZi4KKwkgKi8KKwlpZiAodnAtPnZfdHlwZSAhPSBWRElSICYmIChtb2RlICYg
U19JU1RYVCkpIHsKKwkJaWYgKHByaXZfY2hlY2tfY3JlZChjcmVkLCBQUklWX1ZGU19TVElDS1lG
SUxFLCAwKSkKKwkJCXJldHVybiAoRUZUWVBFKTsKKwl9CisJaWYgKCFncm91cG1lbWJlcihub2Rl
LT50bl9naWQsIGNyZWQpICYmIChtb2RlICYgU19JU0dJRCkpIHsKKwkJZXJyb3IgPSBwcml2X2No
ZWNrX2NyZWQoY3JlZCwgUFJJVl9WRlNfU0VUR0lELCAwKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0
dXJuIChlcnJvcik7CisJfQorCisKKwlUTVBGU19OT0RFX0xPQ0sobm9kZSk7CisJbm9kZS0+dG5f
bW9kZSAmPSB+QUxMUEVSTVM7CisJbm9kZS0+dG5fbW9kZSB8PSBtb2RlICYgQUxMUEVSTVM7CisK
Kwlub2RlLT50bl9zdGF0dXMgfD0gVE1QRlNfTk9ERV9DSEFOR0VEOworCVRNUEZTX05PREVfVU5M
T0NLKG5vZGUpOworCisJS0tBU1NFUlQodm5faXNsb2NrZWQodnApKTsKKworCXJldHVybiAwOwor
fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIENoYW5nZSBvd25lcnNoaXAgb2YgdGhl
IGdpdmVuIHZub2RlLiAgQXQgbGVhc3Qgb25lIG9mIHVpZCBvciBnaWQgbXVzdAorICogYmUgZGlm
ZmVyZW50IHRoYW4gVk5PVkFMLiAgSWYgb25lIGlzIHNldCB0byB0aGF0IHZhbHVlLCB0aGUgYXR0
cmlidXRlCisgKiBpcyB1bmNoYW5nZWQuCisgKiBDYWxsZXIgc2hvdWxkIGV4ZWN1dGUgdG1wZnNf
dXBkYXRlIG9uIHZwIGFmdGVyIGEgc3VjY2Vzc2Z1bCBleGVjdXRpb24uCisgKiBUaGUgdm5vZGUg
bXVzdCBiZSBsb2NrZWQgb24gZW50cnkgYW5kIHJlbWFpbiBsb2NrZWQgb24gZXhpdC4KKyAqLwor
aW50Cit0bXBmc19jaG93bihzdHJ1Y3Qgdm5vZGUgKnZwLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwg
c3RydWN0IHVjcmVkICpjcmVkKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAq
bm9kZTsKKwl1aWRfdCBvdWlkOworCWdpZF90IG9naWQ7CisJaW50IGZtb2RlLCBtb2RlOworCisJ
S0tBU1NFUlQodm5faXNsb2NrZWQodnApKTsKKworCW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKHZw
KTsKKworCS8qIEFzc2lnbiBkZWZhdWx0IHZhbHVlcyBpZiB0aGV5IGFyZSB1bmtub3duLiAqLwor
CUtLQVNTRVJUKHVpZCAhPSBWTk9WQUwgfHwgZ2lkICE9IFZOT1ZBTCk7CisJaWYgKHVpZCA9PSBW
Tk9WQUwpCisJCXVpZCA9IG5vZGUtPnRuX3VpZDsKKwlpZiAoZ2lkID09IFZOT1ZBTCkKKwkJZ2lk
ID0gbm9kZS0+dG5fZ2lkOworCUtLQVNTRVJUKHVpZCAhPSBWTk9WQUwgJiYgZ2lkICE9IFZOT1ZB
TCk7CisKKwkvKiBEaXNhbGxvdyB0aGlzIG9wZXJhdGlvbiBpZiB0aGUgZmlsZSBzeXN0ZW0gaXMg
bW91bnRlZCByZWFkLW9ubHkuICovCisJaWYgKHZwLT52X21vdW50LT5tbnRfZmxhZyAmIE1OVF9S
RE9OTFkpCisJCXJldHVybiBFUk9GUzsKKworCS8qIEltbXV0YWJsZSBvciBhcHBlbmQtb25seSBm
aWxlcyBjYW5ub3QgYmUgbW9kaWZpZWQsIGVpdGhlci4gKi8KKwlpZiAobm9kZS0+dG5fZmxhZ3Mg
JiAoSU1NVVRBQkxFIHwgQVBQRU5EKSkKKwkJcmV0dXJuIEVQRVJNOworCisJZm1vZGUgPSBGRkxB
R1Mobm9kZS0+dG5fZmxhZ3MpOworCW1vZGUgPSAwOworCWlmICgoKGZtb2RlICYgKEZSRUFEIHwg
RldSSVRFKSkgPT0gMCkgfHwgKGZtb2RlICYgT19DUkVBVCkpCisJCXJldHVybiBFSU5WQUw7CisJ
aWYgKGZtb2RlICYgKEZXUklURSB8IE9fVFJVTkMpKSB7CisJCWlmICh2cC0+dl90eXBlID09IFZE
SVIpIHsKKwkJCXJldHVybiBFSVNESVI7CisJCX0KKwkJZXJyb3IgPSB2bl93cml0ZWNoayh2cCwg
TlVMTCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiAoZXJyb3IpOworCisJCW1vZGUgfD0gVldS
SVRFOworCX0KKwlpZiAoZm1vZGUgJiBGUkVBRCkKKwkJbW9kZSB8PSBWUkVBRDsKKwlpZiAobW9k
ZSkgeworCSAgICAgICAJZXJyb3IgPSBWT1BfQUNDRVNTKHZwLCBtb2RlLCBjcmVkKTsKKwkgICAg
ICAgCWlmIChlcnJvcikKKwkJCXJldHVybiAoZXJyb3IpOworCX0KKworCS8qCisJICogVG8gY2hh
bmdlIHRoZSBvd25lciBvZiBhIGZpbGUsIG9yIGNoYW5nZSB0aGUgZ3JvdXAgb2YgYSBmaWxlIHRv
IGEKKwkgKiBncm91cCBvZiB3aGljaCB3ZSBhcmUgbm90IGEgbWVtYmVyLCB0aGUgY2FsbGVyIG11
c3QgaGF2ZQorCSAqIHByaXZpbGVnZS4KKwkgKi8KKwlpZiAoKHVpZCAhPSBub2RlLT50bl91aWQg
fHwKKwkgICAgKGdpZCAhPSBub2RlLT50bl9naWQgJiYgIWdyb3VwbWVtYmVyKGdpZCwgY3JlZCkp
KSAmJgorCSAgICAoZXJyb3IgPSBwcml2X2NoZWNrX2NyZWQoY3JlZCwgUFJJVl9WRlNfQ0hPV04s
IDApKSkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlvZ2lkID0gbm9kZS0+dG5fZ2lkOworCW91aWQg
PSBub2RlLT50bl91aWQ7CisKKwlUTVBGU19OT0RFX0xPQ0sobm9kZSk7CisJbm9kZS0+dG5fdWlk
ID0gdWlkOworCW5vZGUtPnRuX2dpZCA9IGdpZDsKKworCW5vZGUtPnRuX3N0YXR1cyB8PSBUTVBG
U19OT0RFX0NIQU5HRUQ7CisKKwlpZiAoKG5vZGUtPnRuX21vZGUgJiAoU19JU1VJRCB8IFNfSVNH
SUQpKSAmJiAob3VpZCAhPSB1aWQgfHwgb2dpZCAhPSBnaWQpKSB7CisJCWlmIChwcml2X2NoZWNr
X2NyZWQoY3JlZCwgUFJJVl9WRlNfUkVUQUlOU1VHSUQsIDApKQorCQkJbm9kZS0+dG5fbW9kZSAm
PSB+KFNfSVNVSUQgfCBTX0lTR0lEKTsKKwl9CisJVE1QRlNfTk9ERV9VTkxPQ0sobm9kZSk7CisK
KwlLS0FTU0VSVCh2bl9pc2xvY2tlZCh2cCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLworCisvKgorICogQ2hhbmdlIHNpemUgb2YgdGhlIGdpdmVuIHZub2RlLgorICog
Q2FsbGVyIHNob3VsZCBleGVjdXRlIHRtcGZzX3VwZGF0ZSBvbiB2cCBhZnRlciBhIHN1Y2Nlc3Nm
dWwgZXhlY3V0aW9uLgorICogVGhlIHZub2RlIG11c3QgYmUgbG9ja2VkIG9uIGVudHJ5IGFuZCBy
ZW1haW4gbG9ja2VkIG9uIGV4aXQuCisgKi8KK2ludAordG1wZnNfY2hzaXplKHN0cnVjdCB2bm9k
ZSAqdnAsIHVfcXVhZF90IHNpemUsIHN0cnVjdCB1Y3JlZCAqY3JlZCkKK3sKKwlpbnQgZXJyb3I7
CisJc3RydWN0IHRtcGZzX25vZGUgKm5vZGU7CisKKwlLS0FTU0VSVCh2bl9pc2xvY2tlZCh2cCkp
OworCisJbm9kZSA9IFZQX1RPX1RNUEZTX05PREUodnApOworCisJLyogRGVjaWRlIHdoZXRoZXIg
dGhpcyBpcyBhIHZhbGlkIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGUgZmlsZSB0eXBlLiAqLworCWVy
cm9yID0gMDsKKwlzd2l0Y2ggKHZwLT52X3R5cGUpIHsKKwljYXNlIFZESVI6CisJCXJldHVybiBF
SVNESVI7CisKKwljYXNlIFZSRUc6CisJCWlmICh2cC0+dl9tb3VudC0+bW50X2ZsYWcgJiBNTlRf
UkRPTkxZKQorCQkJcmV0dXJuIEVST0ZTOworCQlicmVhazsKKworCWNhc2UgVkJMSzoKKwkJLyog
RkFMTFRIUk9VR0ggKi8KKwljYXNlIFZDSFI6CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBW
RklGTzoKKwkJLyogQWxsb3cgbW9kaWZpY2F0aW9ucyBvZiBzcGVjaWFsIGZpbGVzIGV2ZW4gaWYg
aW4gdGhlIGZpbGUKKwkJICogc3lzdGVtIGlzIG1vdW50ZWQgcmVhZC1vbmx5ICh3ZSBhcmUgbm90
IG1vZGlmeWluZyB0aGUKKwkJICogZmlsZXMgdGhlbXNlbHZlcywgYnV0IHRoZSBvYmplY3RzIHRo
ZXkgcmVwcmVzZW50KS4gKi8KKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQkvKiBBbnl0aGlu
ZyBlbHNlIGlzIHVuc3VwcG9ydGVkLiAqLworCQlyZXR1cm4gRU9QTk9UU1VQUDsKKwl9CisKKwkv
KiBJbW11dGFibGUgb3IgYXBwZW5kLW9ubHkgZmlsZXMgY2Fubm90IGJlIG1vZGlmaWVkLCBlaXRo
ZXIuICovCisJaWYgKG5vZGUtPnRuX2ZsYWdzICYgKElNTVVUQUJMRSB8IEFQUEVORCkpCisJCXJl
dHVybiBFUEVSTTsKKworCWVycm9yID0gdG1wZnNfdHJ1bmNhdGUodnAsIHNpemUpOworCS8qIHRt
cGZzX3RydW5jYXRlIHdpbGwgcmFpc2UgdGhlIE5PVEVfRVhURU5EIGFuZCBOT1RFX0FUVFJJQiBr
ZXZlbnRzCisJICogZm9yIHVzLCBhcyB3aWxsIHVwZGF0ZSB0bl9zdGF0dXM7IG5vIG5lZWQgdG8g
ZG8gdGhhdCBoZXJlLiAqLworCisJS0tBU1NFUlQodm5faXNsb2NrZWQodnApKTsKKworCXJldHVy
biBlcnJvcjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBDaGFuZ2UgYWNjZXNz
IGFuZCBtb2RpZmljYXRpb24gdGltZXMgb2YgdGhlIGdpdmVuIHZub2RlLgorICogQ2FsbGVyIHNo
b3VsZCBleGVjdXRlIHRtcGZzX3VwZGF0ZSBvbiB2cCBhZnRlciBhIHN1Y2Nlc3NmdWwgZXhlY3V0
aW9uLgorICogVGhlIHZub2RlIG11c3QgYmUgbG9ja2VkIG9uIGVudHJ5IGFuZCByZW1haW4gbG9j
a2VkIG9uIGV4aXQuCisgKi8KK2ludAordG1wZnNfY2h0aW1lcyhzdHJ1Y3Qgdm5vZGUgKnZwLCBz
dHJ1Y3QgdGltZXNwZWMgKmF0aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKm10aW1lLAorCWludCB2YWZs
YWdzLCBzdHJ1Y3QgdWNyZWQgKmNyZWQpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB0bXBmc19u
b2RlICpub2RlOworCWludCBmbW9kZSwgbW9kZTsKKworCUtLQVNTRVJUKHZuX2lzbG9ja2VkKHZw
KSk7CisKKwlub2RlID0gVlBfVE9fVE1QRlNfTk9ERSh2cCk7CisKKwkvKiBEaXNhbGxvdyB0aGlz
IG9wZXJhdGlvbiBpZiB0aGUgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCByZWFkLW9ubHkuICovCisJ
aWYgKHZwLT52X21vdW50LT5tbnRfZmxhZyAmIE1OVF9SRE9OTFkpCisJCXJldHVybiBFUk9GUzsK
KworCS8qIEltbXV0YWJsZSBvciBhcHBlbmQtb25seSBmaWxlcyBjYW5ub3QgYmUgbW9kaWZpZWQs
IGVpdGhlci4gKi8KKwlpZiAobm9kZS0+dG5fZmxhZ3MgJiAoSU1NVVRBQkxFIHwgQVBQRU5EKSkK
KwkJcmV0dXJuIEVQRVJNOworCisJLyogRGV0ZXJtaW5lIGlmIHRoZSB1c2VyIGhhdmUgcHJvcGVy
IHByaXZpbGVnZSB0byB1cGRhdGUgdGltZS4gKi8KKwlmbW9kZSA9IEZGTEFHUyhub2RlLT50bl9m
bGFncyk7CisJbW9kZSA9IDA7CisJaWYgKCgoZm1vZGUgJiAoRlJFQUQgfCBGV1JJVEUpKSA9PSAw
KSB8fCAoZm1vZGUgJiBPX0NSRUFUKSkKKwkJcmV0dXJuIEVJTlZBTDsKKwlpZiAoZm1vZGUgJiAo
RldSSVRFIHwgT19UUlVOQykpIHsKKwkJaWYgKHZwLT52X3R5cGUgPT0gVkRJUikgeworCQkJcmV0
dXJuIEVJU0RJUjsKKwkJfQorCQllcnJvciA9IHZuX3dyaXRlY2hrKHZwLCBOVUxMKTsKKwkJaWYg
KGVycm9yKQorCQkJcmV0dXJuIChlcnJvcik7CisKKwkJbW9kZSB8PSBWV1JJVEU7CisJfQorCWlm
IChmbW9kZSAmIEZSRUFEKQorCQltb2RlIHw9IFZSRUFEOworCisJaWYgKG1vZGUpIHsKKwkJaWYg
KHZhZmxhZ3MgJiBWQV9VVElNRVNfTlVMTCkgeworCQkJZXJyb3IgPSBWT1BfQUNDRVNTKHZwLCBt
b2RlLCBjcmVkKTsKKwkJCWlmIChlcnJvcikKKwkJCQllcnJvciA9IFZPUF9BQ0NFU1ModnAsIFZX
UklURSwgY3JlZCk7CisJCX0gZWxzZQorCQkJZXJyb3IgPSBWT1BfQUNDRVNTKHZwLCBtb2RlLCBj
cmVkKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIChlcnJvcik7CisJfQorCisJVE1QRlNfTk9E
RV9MT0NLKG5vZGUpOworCWlmIChhdGltZS0+dHZfc2VjICE9IFZOT1ZBTCAmJiBhdGltZS0+dHZf
bnNlYyAhPSBWTk9WQUwpCisJCW5vZGUtPnRuX3N0YXR1cyB8PSBUTVBGU19OT0RFX0FDQ0VTU0VE
OworCisJaWYgKG10aW1lLT50dl9zZWMgIT0gVk5PVkFMICYmIG10aW1lLT50dl9uc2VjICE9IFZO
T1ZBTCkKKwkJbm9kZS0+dG5fc3RhdHVzIHw9IFRNUEZTX05PREVfTU9ESUZJRUQ7CisKKwlUTVBG
U19OT0RFX1VOTE9DSyhub2RlKTsKKwkKKwl0bXBmc19pdGltZXModnAsIGF0aW1lLCBtdGltZSk7
CisKKwlLS0FTU0VSVCh2bl9pc2xvY2tlZCh2cCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLworLyogU3luYyB0aW1lc3RhbXBzICovCit2b2lkCit0bXBmc19pdGltZXMo
c3RydWN0IHZub2RlICp2cCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphY2MsCisgICAgY29uc3Qg
c3RydWN0IHRpbWVzcGVjICptb2QpCit7CisJc3RydWN0IHRtcGZzX25vZGUgKm5vZGU7CisJc3Ry
dWN0IHRpbWVzcGVjIG5vdzsKKworCW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKHZwKTsKKworCWlm
ICgobm9kZS0+dG5fc3RhdHVzICYgKFRNUEZTX05PREVfQUNDRVNTRUQgfCBUTVBGU19OT0RFX01P
RElGSUVEIHwKKwkgICAgVE1QRlNfTk9ERV9DSEFOR0VEKSkgPT0gMCkKKwkJcmV0dXJuOworCisJ
dmZzX3RpbWVzdGFtcCgmbm93KTsKKworCVRNUEZTX05PREVfTE9DSyhub2RlKTsKKwlpZiAobm9k
ZS0+dG5fc3RhdHVzICYgVE1QRlNfTk9ERV9BQ0NFU1NFRCkgeworCQlpZiAoYWNjID09IE5VTEwp
CisJCQkgYWNjID0gJm5vdzsKKwkJbm9kZS0+dG5fYXRpbWUgPSBhY2MtPnR2X3NlYzsKKwkJbm9k
ZS0+dG5fYXRpbWVuc2VjID0gYWNjLT50dl9uc2VjOworCX0KKwlpZiAobm9kZS0+dG5fc3RhdHVz
ICYgVE1QRlNfTk9ERV9NT0RJRklFRCkgeworCQlpZiAobW9kID09IE5VTEwpCisJCQltb2QgPSAm
bm93OworCQlub2RlLT50bl9tdGltZSA9IG1vZC0+dHZfc2VjOworCQlub2RlLT50bl9tdGltZW5z
ZWMgPSBtb2QtPnR2X25zZWM7CisJfQorCWlmIChub2RlLT50bl9zdGF0dXMgJiBUTVBGU19OT0RF
X0NIQU5HRUQpIHsKKwkJbm9kZS0+dG5fY3RpbWUgPSBub3cudHZfc2VjOworCQlub2RlLT50bl9j
dGltZW5zZWMgPSBub3cudHZfbnNlYzsKKwl9CisJbm9kZS0+dG5fc3RhdHVzICY9CisJICAgIH4o
VE1QRlNfTk9ERV9BQ0NFU1NFRCB8IFRNUEZTX05PREVfTU9ESUZJRUQgfCBUTVBGU19OT0RFX0NI
QU5HRUQpOworCVRNUEZTX05PREVfVU5MT0NLKG5vZGUpOworfQorCisvKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KKwordm9pZAordG1wZnNfdXBkYXRlKHN0cnVjdCB2bm9kZSAqdnApCit7CisKKwl0bXBmc19p
dGltZXModnAsIE5VTEwsIE5VTEwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW50Cit0
bXBmc190cnVuY2F0ZShzdHJ1Y3Qgdm5vZGUgKnZwLCBvZmZfdCBsZW5ndGgpCit7CisJaW50IGVy
cm9yOworCXN0cnVjdCB0bXBmc19ub2RlICpub2RlOworCisJbm9kZSA9IFZQX1RPX1RNUEZTX05P
REUodnApOworCisJaWYgKGxlbmd0aCA8IDApIHsKKwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8g
b3V0OworCX0KKworCWlmIChub2RlLT50bl9zaXplID09IGxlbmd0aCkgeworCQllcnJvciA9IDA7
CisJCWdvdG8gb3V0OworCX0KKworCWlmIChsZW5ndGggPiBWRlNfVE9fVE1QRlModnAtPnZfbW91
bnQpLT50bV9tYXhmaWxlc2l6ZSkKKwkJcmV0dXJuIChFRkJJRyk7CisKKworCWVycm9yID0gdG1w
ZnNfcmVnX3Jlc2l6ZSh2cCwgbGVuZ3RoLCAxKTsKKworCWlmIChlcnJvciA9PSAwKSB7CisJCVRN
UEZTX05PREVfTE9DSyhub2RlKTsKKwkJbm9kZS0+dG5fc3RhdHVzIHw9IFRNUEZTX05PREVfQ0hB
TkdFRCB8IFRNUEZTX05PREVfTU9ESUZJRUQ7CisJCVRNUEZTX05PREVfVU5MT0NLKG5vZGUpOwor
CX0KKworb3V0OgorCXRtcGZzX3VwZGF0ZSh2cCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5vX3QKK3RtcGZzX2ZldGNoX2lubyh2b2lkKQor
eworCWlub190CXJldDsKKworCXNwaW5fbG9ja193cigmaW5vX2xvY2spOworCXJldCA9IHRfaW5v
Kys7CisJc3Bpbl91bmxvY2tfd3IoJmlub19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYg
LS1naXQgYS9zeXMvdmZzL3RtcGZzL3RtcGZzX3Zmc29wcy5jIGIvc3lzL3Zmcy90bXBmcy90bXBm
c192ZnNvcHMuYwppbmRleCBlNjlkZTI5Li4zZGRlNWE5IDEwMDY0NAotLS0gYS9zeXMvdmZzL3Rt
cGZzL3RtcGZzX3Zmc29wcy5jCisrKyBiL3N5cy92ZnMvdG1wZnMvdG1wZnNfdmZzb3BzLmMKQEAg
LTAsMCArMSw0NjEgQEAKKy8qCSROZXRCU0Q6IHRtcGZzX3Zmc29wcy5jLHYgMS4xMCAyMDA1LzEy
LzExIDEyOjI0OjI5IGNocmlzdG9zIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAy
MDA1IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRv
IFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgSnVsaW8gTS4gTWVyaW5vIFZpZGFsLCBkZXZl
bG9wZWQgYXMgcGFydCBvZiBHb29nbGUncyBTdW1tZXIgb2YgQ29kZQorICogMjAwNSBwcm9ncmFt
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJT
RCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBFZmZpY2llbnQgbWVtb3J5IGZpbGUg
c3lzdGVtLgorICoKKyAqIHRtcGZzIGlzIGEgZmlsZSBzeXN0ZW0gdGhhdCB1c2VzIE5ldEJTRCdz
IHZpcnR1YWwgbWVtb3J5IHN1Yi1zeXN0ZW0KKyAqICh0aGUgd2VsbC1rbm93biBVVk0pIHRvIHN0
b3JlIGZpbGUgZGF0YSBhbmQgbWV0YWRhdGEgaW4gYW4gZWZmaWNpZW50CisgKiB3YXkuICBUaGlz
IG1lYW5zIHRoYXQgaXQgZG9lcyBub3QgZm9sbG93IHRoZSBzdHJ1Y3R1cmUgb2YgYW4gb24tZGlz
aworICogZmlsZSBzeXN0ZW0gYmVjYXVzZSBpdCBzaW1wbHkgZG9lcyBub3QgbmVlZCB0by4gIElu
c3RlYWQsIGl0IHVzZXMKKyAqIG1lbW9yeS1zcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIGFs
Z29yaXRobXMgdG8gYXV0b21hdGljYWxseQorICogYWxsb2NhdGUgYW5kIHJlbGVhc2UgcmVzb3Vy
Y2VzLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL2NvbmYuaD4K
KyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvbGltaXRzLmg+CisjaW5jbHVk
ZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMva2Vy
bmVsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNp
bmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL29iamNhY2hlLmg+CisKKyNpbmNs
dWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3Zt
X3BhcmFtLmg+CisKKyNpbmNsdWRlIDx2ZnMvdG1wZnMvdG1wZnMuaD4KKyNpbmNsdWRlIDx2ZnMv
dG1wZnMvdG1wZnNfdm5vcHMuaD4KKworLyoKKyAqIERlZmF1bHQgcGVybWlzc2lvbiBmb3Igcm9v
dCBub2RlCisgKi8KKyNkZWZpbmUgVE1QRlNfREVGQVVMVF9ST09UX01PREUJKFNfSVJXWFV8U19J
UkdSUHxTX0lYR1JQfFNfSVJPVEh8U19JWE9USCkKKworTUFMTE9DX0RFRklORShNX1RNUEZTTU5U
LCAidG1wZnMgbW91bnQiLCAidG1wZnMgbW91bnQgc3RydWN0dXJlcyIpOworTUFMTE9DX0RFRklO
RShNX1RNUEZTTkFNRSwgInRtcGZzIG5hbWUiLCAidG1wZnMgZmlsZSBuYW1lcyIpOworTUFMTE9D
X0RFRklORShNX1RNUEZTX0RJUkVOVCwgInRtcGZzIGRpcmVudCIsICJ0bXBmcyBkaXJlbnQgc3Ry
dWN0dXJlcyIpOworTUFMTE9DX0RFRklORShNX1RNUEZTX05PREUsICJ0bXBmcyBub2RlIiwgInRt
cGZzIG5vZGUgc3RydWN0dXJlcyIpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGlu
dAl0bXBmc19tb3VudChzdHJ1Y3QgbW91bnQgKiwgY2hhciAqLCBjYWRkcl90LCBzdHJ1Y3QgdWNy
ZWQgKik7CitzdGF0aWMgaW50CXRtcGZzX3VubW91bnQoc3RydWN0IG1vdW50ICosIGludCk7Citz
dGF0aWMgaW50CXRtcGZzX3Jvb3Qoc3RydWN0IG1vdW50ICosIHN0cnVjdCB2bm9kZSAqKik7Citz
dGF0aWMgaW50CXRtcGZzX2ZodG92cChzdHJ1Y3QgbW91bnQgKiwgc3RydWN0IHZub2RlICosIHN0
cnVjdCBmaWQgKiwgc3RydWN0IHZub2RlICoqKTsKK3N0YXRpYyBpbnQJdG1wZnNfc3RhdGZzKHN0
cnVjdCBtb3VudCAqLCBzdHJ1Y3Qgc3RhdGZzICosIHN0cnVjdCB1Y3JlZCAqY3JlZCk7CisKKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIFNXSV9NQVhNSUIJMworc3RhdGljIHVfaW50Citn
ZXRfc3dwZ3RvdGFsKHZvaWQpCit7CisJc3RydWN0IHN3ZGV2dCBzd2luZm87CisJY2hhciAqc25h
bWUgPSAidm0uc3dhcF9pbmZvIjsKKwlpbnQgc29pZFtTV0lfTUFYTUlCXSwgb2lkWzJdOworCXVf
aW50IHVuc3dkZXYsIHRvdGFsLCBkbW1heCwgbnN3YXBkZXY7CisJc2l6ZV90IG1pYmksIGxlbjsK
KworCXRvdGFsID0gMDsKKworCWxlbiA9IHNpemVvZihkbW1heCk7CisJaWYgKGtlcm5lbF9zeXNj
dGxieW5hbWUoInZtLmRtbWF4IiwgJmRtbWF4LCAmbGVuLAorCQkJCU5VTEwsIDAsIE5VTEwpICE9
IDApCisJCXJldHVybiB0b3RhbDsKKworCWxlbiA9IHNpemVvZihuc3dhcGRldik7CisJaWYgKGtl
cm5lbF9zeXNjdGxieW5hbWUoInZtLm5zd2FwZGV2IiwgJm5zd2FwZGV2LCAmbGVuLAorCQkJCU5V
TEwsIDAsIE5VTEwpICE9IDApCisJCXJldHVybiB0b3RhbDsKKworCW1pYmkgPSAoU1dJX01BWE1J
QiAtIDEpICogc2l6ZW9mKGludCk7CisJb2lkWzBdID0gMDsKKwlvaWRbMV0gPSAzOworCisJaWYg
KGtlcm5lbF9zeXNjdGwob2lkLCAyLAorCQkJc29pZCwgJm1pYmksICh2b2lkICopc25hbWUsIHN0
cmxlbihzbmFtZSksCisJCQlOVUxMKSAhPSAwKQorCQlyZXR1cm4gdG90YWw7CisKKwltaWJpID0g
KFNXSV9NQVhNSUIgLSAxKTsKKwlmb3IgKHVuc3dkZXYgPSAwOyB1bnN3ZGV2IDwgbnN3YXBkZXY7
ICsrdW5zd2RldikgeworCQlzb2lkW21pYmldID0gdW5zd2RldjsKKwkJbGVuID0gc2l6ZW9mKHN0
cnVjdCBzd2RldnQpOworCQlpZiAoa2VybmVsX3N5c2N0bChzb2lkLCBtaWJpICsgMSwgJnN3aW5m
bywgJmxlbiwgTlVMTCwgMCwKKwkJCQlOVUxMKSAhPSAwKQorCQkJcmV0dXJuIHRvdGFsOworCQlp
ZiAobGVuID09IHNpemVvZihzdHJ1Y3Qgc3dkZXZ0KSkKKwkJCXRvdGFsICs9IChzd2luZm8uc3df
bmJsa3MgLSBkbW1heCk7CisJfQorCisJcmV0dXJuIHRvdGFsOworfQorCisvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KK3N0YXRpYyBpbnQKK3RtcGZzX25vZGVfY3Rvcih2b2lkICpvYmosIHZvaWQgKnByaXZk
YXRhLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHRtcGZzX25vZGUgKm5vZGUgPSAoc3RydWN0IHRt
cGZzX25vZGUgKilvYmo7CisKKwlub2RlLT50bl9nZW4rKzsKKwlub2RlLT50bl9zaXplID0gMDsK
Kwlub2RlLT50bl9zdGF0dXMgPSAwOworCW5vZGUtPnRuX2ZsYWdzID0gMDsKKwlub2RlLT50bl9s
aW5rcyA9IDA7CisJbm9kZS0+dG5fdm5vZGUgPSBOVUxMOworCW5vZGUtPnRuX3Zwc3RhdGUgPSBU
TVBGU19WTk9ERV9XQU5UOworCisJcmV0dXJuICgxKTsKK30KKworc3RhdGljIHZvaWQKK3RtcGZz
X25vZGVfZHRvcih2b2lkICpvYmosIHZvaWQgKnByaXZkYXRhKQoreworCXN0cnVjdCB0bXBmc19u
b2RlICpub2RlID0gKHN0cnVjdCB0bXBmc19ub2RlICopb2JqOworCW5vZGUtPnRuX3R5cGUgPSBW
Tk9OOworCW5vZGUtPnRuX3Zwc3RhdGUgPSBUTVBGU19WTk9ERV9ET09NRUQ7Cit9CisKK3N0YXRp
YyB2b2lkKgordG1wZnNfbm9kZV9pbml0KHZvaWQgKmFyZ3MsIGludCBmbGFncykKK3sKKwlzdHJ1
Y3QgdG1wZnNfbm9kZSAqbm9kZSA9IChzdHJ1Y3QgdG1wZnNfbm9kZSAqKW9iamNhY2hlX21hbGxv
Y19hbGxvYyhhcmdzLCBmbGFncyk7CisJbm9kZS0+dG5faWQgPSAwOworCisJbG9ja2luaXQoJm5v
ZGUtPnRuX2ludGVybG9jaywgInRtcGZzIG5vZGUgaW50ZXJsb2NrIiwgMCwgTEtfQ0FOUkVDVVJT
RSk7CisJbm9kZS0+dG5fZ2VuID0ga2FyYzRyYW5kb20oKTsKKworCXJldHVybiBub2RlOworfQor
CitzdGF0aWMgdm9pZAordG1wZnNfbm9kZV9maW5pKHZvaWQgKm9iaiwgdm9pZCAqYXJncykKK3sK
KwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZSA9IChzdHJ1Y3QgdG1wZnNfbm9kZSAqKW9iajsKKwls
b2NrdW5pbml0KCZub2RlLT50bl9pbnRlcmxvY2spOworCW9iamNhY2hlX21hbGxvY19mcmVlKG9i
aiwgYXJncyk7Cit9CisKK3N0cnVjdCBvYmpjYWNoZV9tYWxsb2NfYXJncyB0bXBmc19kaXJlbnRf
cG9vbF9tYWxsb2NfYXJncyA9CisJeyBzaXplb2Yoc3RydWN0IHRtcGZzX2RpcmVudCksIE1fVE1Q
RlNfRElSRU5UIH07CitzdHJ1Y3Qgb2JqY2FjaGVfbWFsbG9jX2FyZ3MgdG1wZnNfbm9kZV9wb29s
X21hbGxvY19hcmdzID0KKwl7IHNpemVvZihzdHJ1Y3QgdG1wZnNfbm9kZSksIE1fVE1QRlNfTk9E
RSB9OworCitzdGF0aWMgaW50Cit0bXBmc19tb3VudChzdHJ1Y3QgbW91bnQgKm1wLCBjaGFyICpw
YXRoLCBjYWRkcl90IGRhdGEsIHN0cnVjdCB1Y3JlZCAqY3JlZCkKK3sKKwlzdHJ1Y3QgdG1wZnNf
bW91bnQgKnRtcDsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqcm9vdDsKKwlzaXplX3QgcGFnZXMsIG1l
bV9zaXplOworCWlub190IG5vZGVzOworCWludCBlcnJvcjsKKwkvKiBTaXplIGNvdW50ZXJzLiAq
LworCWlub190CW5vZGVzX21heCA9IDA7CisJc2l6ZV90CXNpemVfbWF4ID0gMDsKKwlzaXplX3Qg
c2l6ZTsKKworCS8qIFJvb3Qgbm9kZSBhdHRyaWJ1dGVzLiAqLworCXVpZF90CXJvb3RfdWlkID0g
Y3JlZC0+Y3JfdWlkOworCWdpZF90CXJvb3RfZ2lkID0gY3JlZC0+Y3JfZ2lkOworCW1vZGVfdAly
b290X21vZGUgPSAoVlJFQUQgfCBWV1JJVEUpOworCisJaWYgKG1wLT5tbnRfZmxhZyAmIE1OVF9V
UERBVEUpIHsKKwkJLyogWFhYOiBUaGVyZSBpcyBubyBzdXBwb3J0IHlldCB0byB1cGRhdGUgZmls
ZSBzeXN0ZW0KKwkJICogc2V0dGluZ3MuICBTaG91bGQgYmUgYWRkZWQuICovCisKKwkJcmV0dXJu
IEVPUE5PVFNVUFA7CisJfQorCisJa3ByaW50ZigiV0FSTklORzogVE1QRlMgaXMgY29uc2lkZXJl
ZCB0byBiZSBhIGhpZ2hseSBleHBlcmltZW50YWwgIgorCSAgICAiZmVhdHVyZSBpbiBEcmFnb25G
bHkuXG4iKTsKKworCS8qIERvIG5vdCBhbGxvdyBtb3VudHMgaWYgd2UgZG8gbm90IGhhdmUgZW5v
dWdoIG1lbW9yeSB0byBwcmVzZXJ2ZQorCSAqIHRoZSBtaW5pbXVtIHJlc2VydmVkIHBhZ2VzLiAq
LworCW1lbV9zaXplID0gdm1zdGF0cy52X2ZyZWVfY291bnQgKyB2bXN0YXRzLnZfaW5hY3RpdmVf
Y291bnQgKyBnZXRfc3dwZ3RvdGFsKCk7CisJbWVtX3NpemUgLT0gbWVtX3NpemUgPiB2bXN0YXRz
LnZfd2lyZV9jb3VudCA/IHZtc3RhdHMudl93aXJlX2NvdW50IDogbWVtX3NpemU7CisJaWYgKG1l
bV9zaXplIDwgVE1QRlNfUEFHRVNfUkVTRVJWRUQpCisJCXJldHVybiBFTk9TUEM7CisKKwkvKgor
CSAqIElmIG1vdW50IGJ5IG5vbi1yb290LCB0aGVuIHZlcmlmeSB0aGF0IHVzZXIgaGFzIG5lY2Vz
c2FyeQorCSAqIHBlcm1pc3Npb25zIG9uIHRoZSBkZXZpY2UuCisJICovCisJaWYgKGNyZWQtPmNy
X3VpZCAhPSAwKSB7CisJCXJvb3RfbW9kZSA9IFZSRUFEOworCQlpZiAoKG1wLT5tbnRfZmxhZyAm
IE1OVF9SRE9OTFkpID09IDApCisJCQlyb290X21vZGUgfD0gVldSSVRFOworCX0KKworCS8qIEdl
dCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVtb3J5IHBhZ2VzIHRoaXMgZmlsZSBzeXN0ZW0gaXMK
KwkgKiBhbGxvd2VkIHRvIHVzZSwgYmFzZWQgb24gdGhlIG1heGltdW0gc2l6ZSB0aGUgdXNlciBw
YXNzZWQgaW4KKwkgKiB0aGUgbW91bnQgc3RydWN0dXJlLiAgQSB2YWx1ZSBvZiB6ZXJvIGlzIHRy
ZWF0ZWQgYXMgaWYgdGhlCisJICogbWF4aW11bSBhdmFpbGFibGUgc3BhY2Ugd2FzIHJlcXVlc3Rl
ZC4gKi8KKwlpZiAoc2l6ZV9tYXggPCBQQUdFX1NJWkUgfHwgc2l6ZV9tYXggPj0gU0laRV9NQVgp
CisJCXBhZ2VzID0gU0laRV9NQVg7CisJZWxzZQorCQlwYWdlcyA9IGhvd21hbnkoc2l6ZV9tYXgs
IFBBR0VfU0laRSk7CisJS0tBU1NFUlQocGFnZXMgPiAwKTsKKworCWlmIChub2Rlc19tYXggPD0g
MykKKwkJbm9kZXMgPSAzICsgcGFnZXMgKiBQQUdFX1NJWkUgLyAxMDI0OworCWVsc2UKKwkJbm9k
ZXMgPSBub2Rlc19tYXg7CisJS0tBU1NFUlQobm9kZXMgPj0gMyk7CisKKwkvKiBBbGxvY2F0ZSB0
aGUgdG1wZnMgbW91bnQgc3RydWN0dXJlIGFuZCBmaWxsIGl0LiAqLworCXRtcCA9IChzdHJ1Y3Qg
dG1wZnNfbW91bnQgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdG1wZnNfbW91bnQpLAorCSAgICBN
X1RNUEZTTU5ULCBNX1dBSVRPSyB8IE1fWkVSTyk7CisKKwlsb2NraW5pdCgmKHRtcC0+YWxsbm9k
ZV9sb2NrKSwgInRtcGZzIGFsbG5vZGUgbG9jayIsIDAsIExLX0NBTlJFQ1VSU0UpOworCXRtcC0+
dG1fbm9kZXNfbWF4ID0gbm9kZXM7CisJdG1wLT50bV9ub2Rlc19pbnVzZSA9IDA7CisJdG1wLT50
bV9tYXhmaWxlc2l6ZSA9ICh1X2ludDY0X3QpKHZtc3RhdHMudl9wYWdlX2NvdW50ICsgZ2V0X3N3
cGd0b3RhbCgpKSAqIFBBR0VfU0laRTsKKwlMSVNUX0lOSVQoJnRtcC0+dG1fbm9kZXNfdXNlZCk7
CisKKwl0bXAtPnRtX3BhZ2VzX21heCA9IHBhZ2VzOworCXRtcC0+dG1fcGFnZXNfdXNlZCA9IDA7
CisJdG1wLT50bV9kaXJlbnRfcG9vbCA9ICBvYmpjYWNoZV9jcmVhdGUoICJ0bXBmcyBkaXJlbnQg
Y2FjaGUiLAorCSAgICAwLCAwLAorCSAgICBOVUxMLCBOVUxMLCBOVUxMLAorCSAgICBvYmpjYWNo
ZV9tYWxsb2NfYWxsb2MsIG9iamNhY2hlX21hbGxvY19mcmVlLAorCSAgICAmdG1wZnNfZGlyZW50
X3Bvb2xfbWFsbG9jX2FyZ3MpOworCXRtcC0+dG1fbm9kZV9wb29sID0gb2JqY2FjaGVfY3JlYXRl
KCAidG1wZnMgbm9kZSBjYWNoZSIsCisJICAgIDAsIDAsCisJICAgIHRtcGZzX25vZGVfY3Rvciwg
dG1wZnNfbm9kZV9kdG9yLCBOVUxMLAorCSAgICB0bXBmc19ub2RlX2luaXQsIHRtcGZzX25vZGVf
ZmluaSwKKwkgICAgJnRtcGZzX25vZGVfcG9vbF9tYWxsb2NfYXJncyk7CisKKwkvKiBBbGxvY2F0
ZSB0aGUgcm9vdCBub2RlLiAqLworCWVycm9yID0gdG1wZnNfYWxsb2Nfbm9kZSh0bXAsIFZESVIs
IHJvb3RfdWlkLAorCSAgICByb290X2dpZCwgcm9vdF9tb2RlICYgQUxMUEVSTVMsIE5VTEwsIE5V
TEwsCisJICAgIFZOT1ZBTCwgVk5PVkFMLCAmcm9vdCk7CisKKwlpZiAoZXJyb3IgIT0gMCB8fCBy
b290ID09IE5VTEwpIHsKKwkgICAgb2JqY2FjaGVfZGVzdHJveSh0bXAtPnRtX25vZGVfcG9vbCk7
CisJICAgIG9iamNhY2hlX2Rlc3Ryb3kodG1wLT50bV9kaXJlbnRfcG9vbCk7CisJICAgIGtmcmVl
KHRtcCwgTV9UTVBGU01OVCk7CisJICAgIHJldHVybiBlcnJvcjsKKwl9CisJS0FTU0VSVChyb290
LT50bl9pZCA+PSAwLCAoInRtcGZzIHJvb3Qgd2l0aCBpbnZhbGlkIGlubzogJWQiLCAoaW50KXJv
b3QtPnRuX2lkKSk7CisJdG1wLT50bV9yb290ID0gcm9vdDsKKworCW1wLT5tbnRfZmxhZyB8PSBN
TlRfTE9DQUw7CisJbXAtPm1udF9rZXJuX2ZsYWcgfD0gTU5US19SRF9NUFNBRkUgfCBNTlRLX1dS
X01QU0FGRSB8IE1OVEtfR0FfTVBTQUZFICB8CisJCQkgICAgIE1OVEtfSU5fTVBTQUZFIHwgTU5U
S19TR19NUFNBRkU7CisJbXAtPm1udF9kYXRhID0gKHFhZGRyX3QpdG1wOworCXZmc19nZXRuZXdm
c2lkKG1wKTsKKworCisJdmZzX2FkZF92bm9kZW9wcyhtcCwgJnRtcGZzX3Zub2RlX3ZvcHMsICZt
cC0+bW50X3ZuX25vcm1fb3BzKTsKKwl2ZnNfYWRkX3Zub2Rlb3BzKG1wLCAmdG1wZnNfZmlmb192
b3BzLCAmbXAtPm1udF92bl9maWZvX29wcyk7CisKKwljb3B5c3RyKCJ0bXBmcyIsIG1wLT5tbnRf
c3RhdC5mX21udGZyb21uYW1lLCBNTkFNRUxFTiAtIDEsICZzaXplKTsKKwliemVybyhtcC0+bW50
X3N0YXQuZl9tbnRmcm9tbmFtZSArc2l6ZSwgTU5BTUVMRU4gLSBzaXplKTsKKwliemVybyhtcC0+
bW50X3N0YXQuZl9tbnRvbm5hbWUsIHNpemVvZihtcC0+bW50X3N0YXQuZl9tbnRvbm5hbWUpKTsK
Kwljb3B5aW5zdHIocGF0aCwgbXAtPm1udF9zdGF0LmZfbW50b25uYW1lLAorCQkgIHNpemVvZiht
cC0+bW50X3N0YXQuZl9tbnRvbm5hbWUpIC0xLAorCQkgICZzaXplKTsKKworCXRtcGZzX3N0YXRm
cyhtcCwgJm1wLT5tbnRfc3RhdCwgY3JlZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCisKKy8qIEFSR1NVU0VEMiAqLworc3RhdGljIGludAordG1wZnNfdW5tb3VudChz
dHJ1Y3QgbW91bnQgKm1wLCBpbnQgbW50ZmxhZ3MpCit7CisJaW50IGVycm9yOworCWludCBmbGFn
cyA9IDA7CisJc3RydWN0IHRtcGZzX21vdW50ICp0bXA7CisJc3RydWN0IHRtcGZzX25vZGUgKm5v
ZGU7CisJc3RydWN0IHZub2RlICp2cDsKKworCS8qIEhhbmRsZSBmb3JjZWQgdW5tb3VudHMuICov
CisJaWYgKG1udGZsYWdzICYgTU5UX0ZPUkNFKQorCQlmbGFncyB8PSBGT1JDRUNMT1NFOworCisJ
LyogRmluYWxpemUgYWxsIHBlbmRpbmcgSS9PLiAqLworCWVycm9yID0gdmZsdXNoKG1wLCAwLCBm
bGFncyk7CisJaWYgKGVycm9yICE9IDApCisJCXJldHVybiBlcnJvcjsKKworCXRtcCA9IFZGU19U
T19UTVBGUyhtcCk7CisKKwkvKiBGcmVlIGFsbCBhc3NvY2lhdGVkIGRhdGEuICBUaGUgbG9vcCBp
dGVyYXRlcyBvdmVyIHRoZSBsaW5rZWQgbGlzdAorCSAqIHdlIGhhdmUgY29udGFpbmluZyBhbGwg
dXNlZCBub2Rlcy4gIEZvciBlYWNoIG9mIHRoZW0gdGhhdCBpcworCSAqIGEgZGlyZWN0b3J5LCB3
ZSBmcmVlIGFsbCBpdHMgZGlyZWN0b3J5IGVudHJpZXMuICBOb3RlIHRoYXQgYWZ0ZXIKKwkgKiBm
cmVlaW5nIGEgbm9kZSwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGdvIHRvIHRoZSBhdmFpbGFibGUg
bGlzdCwKKwkgKiBzbyB3ZSB3aWxsIGxhdGVyIGhhdmUgdG8gaXRlcmF0ZSBvdmVyIGl0IHRvIHJl
bGVhc2UgaXRzIGl0ZW1zLiAqLworCW5vZGUgPSBMSVNUX0ZJUlNUKCZ0bXAtPnRtX25vZGVzX3Vz
ZWQpOworCXdoaWxlIChub2RlICE9IE5VTEwpIHsKKwkJc3RydWN0IHRtcGZzX25vZGUgKm5leHQ7
CisKKwkJaWYgKG5vZGUtPnRuX3R5cGUgPT0gVkRJUikgeworCQkJc3RydWN0IHRtcGZzX2RpcmVu
dCAqZGU7CisKKwkJCWRlID0gVEFJTFFfRklSU1QoJm5vZGUtPnRuX2Rpci50bl9kaXJoZWFkKTsK
KwkJCXdoaWxlIChkZSAhPSBOVUxMKSB7CisJCQkJc3RydWN0IHRtcGZzX2RpcmVudCAqbmRlOwor
CisJCQkJbmRlID0gVEFJTFFfTkVYVChkZSwgdGRfZW50cmllcyk7CisJCQkJdG1wZnNfZnJlZV9k
aXJlbnQodG1wLCBkZSwgRkFMU0UpOworCQkJCWRlID0gbmRlOworCQkJCW5vZGUtPnRuX3NpemUg
LT0gc2l6ZW9mKHN0cnVjdCB0bXBmc19kaXJlbnQpOworCQkJfQorCQl9CisKKwkJbmV4dCA9IExJ
U1RfTkVYVChub2RlLCB0bl9lbnRyaWVzKTsKKwkJdnAgPSBub2RlLT50bl92bm9kZTsKKwkJaWYg
KHZwICE9IE5VTEwpIHsKKwkJCXRtcGZzX2ZyZWVfdnAodnApOworCQkJdnJlY3ljbGUodnApOwor
CQkJIG5vZGUtPnRuX3Zub2RlID0gTlVMTDsKKwkJfQorCQl0bXBmc19mcmVlX25vZGUodG1wLCBu
b2RlKTsKKwkJbm9kZSA9IG5leHQ7CisJfQorCisJb2JqY2FjaGVfZGVzdHJveSh0bXAtPnRtX2Rp
cmVudF9wb29sKTsKKwlvYmpjYWNoZV9kZXN0cm95KHRtcC0+dG1fbm9kZV9wb29sKTsKKworCWxv
Y2t1bmluaXQoJnRtcC0+YWxsbm9kZV9sb2NrKTsKKwlLS0FTU0VSVCh0bXAtPnRtX3BhZ2VzX3Vz
ZWQgPT0gMCk7CisJS0tBU1NFUlQodG1wLT50bV9ub2Rlc19pbnVzZSA9PSAwKTsKKworCS8qIFRo
cm93IGF3YXkgdGhlIHRtcGZzX21vdW50IHN0cnVjdHVyZS4gKi8KKwlrZnJlZShtcC0+bW50X2Rh
dGEsIE1fVE1QRlNNTlQpOworCW1wLT5tbnRfZGF0YSA9IE5VTEw7CisKKwltcC0+bW50X2ZsYWcg
Jj0gfk1OVF9MT0NBTDsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0
YXRpYyBpbnQKK3RtcGZzX3Jvb3Qoc3RydWN0IG1vdW50ICptcCwgc3RydWN0IHZub2RlICoqdnBw
KQoreworCWludCBlcnJvcjsKKwllcnJvciA9IHRtcGZzX2FsbG9jX3ZwKG1wLCBWRlNfVE9fVE1Q
RlMobXApLT50bV9yb290LCBMS19FWENMVVNJVkUsIHZwcCk7CisJKCp2cHApLT52X2ZsYWcgfD0g
VlJPT1Q7CisJKCp2cHApLT52X3R5cGUgPSBWRElSOworCisJcmV0dXJuIGVycm9yOworfQorCisv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludAordG1wZnNfZmh0b3ZwKHN0cnVjdCBtb3Vu
dCAqbXAsIHN0cnVjdCB2bm9kZSAqcm9vdHZwLCBzdHJ1Y3QgZmlkICpmaHAsIHN0cnVjdCB2bm9k
ZSAqKnZwcCkKK3sKKwlib29sZWFuX3QgZm91bmQ7CisJc3RydWN0IHRtcGZzX2ZpZCAqdGZocDsK
KwlzdHJ1Y3QgdG1wZnNfbW91bnQgKnRtcDsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKwor
CXRtcCA9IFZGU19UT19UTVBGUyhtcCk7CisKKwl0ZmhwID0gKHN0cnVjdCB0bXBmc19maWQgKilm
aHA7CisJaWYgKHRmaHAtPnRmX2xlbiAhPSBzaXplb2Yoc3RydWN0IHRtcGZzX2ZpZCkpCisJCXJl
dHVybiBFSU5WQUw7CisKKwlpZiAodGZocC0+dGZfaWQgPj0gdG1wLT50bV9ub2Rlc19tYXgpCisJ
CXJldHVybiBFSU5WQUw7CisKKwlmb3VuZCA9IEZBTFNFOworCisJVE1QRlNfTE9DSyh0bXApOwor
CUxJU1RfRk9SRUFDSChub2RlLCAmdG1wLT50bV9ub2Rlc191c2VkLCB0bl9lbnRyaWVzKSB7CisJ
CWlmIChub2RlLT50bl9pZCA9PSB0ZmhwLT50Zl9pZCAmJgorCQkgICAgbm9kZS0+dG5fZ2VuID09
IHRmaHAtPnRmX2dlbikgeworCQkJZm91bmQgPSBUUlVFOworCQkJYnJlYWs7CisJCX0KKwl9CisJ
VE1QRlNfVU5MT0NLKHRtcCk7CisKKwlpZiAoZm91bmQpCisJCXJldHVybiAodG1wZnNfYWxsb2Nf
dnAobXAsIG5vZGUsIExLX0VYQ0xVU0lWRSwgdnBwKSk7CisKKwlyZXR1cm4gKEVJTlZBTCk7Cit9
CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBBUkdTVVNFRDIgKi8KK3N0YXRpYyBpbnQKK3Rt
cGZzX3N0YXRmcyhzdHJ1Y3QgbW91bnQgKm1wLCBzdHJ1Y3Qgc3RhdGZzICpzYnAsIHN0cnVjdCB1
Y3JlZCAqY3JlZCkKK3sKKwlmc2ZpbGNudF90IGZyZWVub2RlczsKKwlzdHJ1Y3QgdG1wZnNfbW91
bnQgKnRtcDsKKworCXRtcCA9IFZGU19UT19UTVBGUyhtcCk7CisKKwlzYnAtPmZfaW9zaXplID0g
UEFHRV9TSVpFOworCXNicC0+Zl9ic2l6ZSA9IFBBR0VfU0laRTsKKworCXNicC0+Zl9ibG9ja3Mg
PSBUTVBGU19QQUdFU19NQVgodG1wKTsKKwlzYnAtPmZfYmF2YWlsID0gc2JwLT5mX2JmcmVlID0g
VE1QRlNfUEFHRVNfQVZBSUwodG1wKTsKKworCWZyZWVub2RlcyA9IE1JTih0bXAtPnRtX25vZGVz
X21heCAtIHRtcC0+dG1fbm9kZXNfaW51c2UsCisJICAgIFRNUEZTX1BBR0VTX0FWQUlMKHRtcCkg
KiBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHRtcGZzX25vZGUpKTsKKworCXNicC0+Zl9maWxl
cyA9IGZyZWVub2RlcyArIHRtcC0+dG1fbm9kZXNfaW51c2U7CisJc2JwLT5mX2ZmcmVlID0gZnJl
ZW5vZGVzOworCS8qIHNicC0+Zl9vd25lciA9IHRtcC0+dG5fdWlkOyAqLworCisJcmV0dXJuIDA7
Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogdG1wZnMgdmZzIG9wZXJhdGlvbnMu
bnQgPQkJCXRtcGZzX21vdW50LAorCS52ZnNfdW5tb3VudCA9CQkJdG1wZnNfdW5tb3VudCwKKwku
dmZzX3Jvb3QgPQkJCXRtcGZzX3Jvb3QsCisJLnZmc19zdGF0ZnMgPQkJCXRtcGZzX3N0YXRmcywK
KwkudmZzX2ZodG92cCA9CQkJdG1wZnNfZmh0b3ZwLAorCS52ZnNfc3luYyA9CQkJdmZzX3N0ZHN5
bmMKK307CisKK1ZGU19TRVQodG1wZnNfdmZzb3BzLCB0bXBmcywgMCk7CmRpZmYgLS1naXQgYS9z
eXMvdmZzL3RtcGZzL3RtcGZzX3Zub3BzLmMgYi9zeXMvdmZzL3RtcGZzL3RtcGZzX3Zub3BzLmMK
aW5kZXggZTY5ZGUyOS4uMjEwODhlYyAxMDA2NDQKLS0tIGEvc3lzL3Zmcy90bXBmcy90bXBmc192
bm9wcy5jCisrKyBiL3N5cy92ZnMvdG1wZnMvdG1wZnNfdm5vcHMuYwpAQCAtMCwwICsxLDE1NjQg
QEAKKy8qCSROZXRCU0Q6IHRtcGZzX3Zub3BzLmMsdiAxLjM5IDIwMDcvMDcvMjMgMTU6NDE6MDEg
am1tdiBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBUaGUgTmV0
QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNE
IEZvdW5kYXRpb24KKyAqIGJ5IEp1bGlvIE0uIE1lcmlubyBWaWRhbCwgZGV2ZWxvcGVkIGFzIHBh
cnQgb2YgR29vZ2xlJ3MgU3VtbWVyIG9mIENvZGUKKyAqIDIwMDUgcHJvZ3JhbS4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElP
TiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvKgorICogdG1wZnMgdm5vZGUgaW50ZXJmYWNlLgorICovCisjaW5j
bHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8
c3lzL2tlcm5fc3lzY2FsbC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5
cy9mY250bC5oPgorI2luY2x1ZGUgPHN5cy9sb2NrZi5oPgorI2luY2x1ZGUgPHN5cy9wcml2Lmg+
CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2V2YXIuaD4KKyNp
bmNsdWRlIDxzeXMvc2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvc2ZidWYuaD4KKyNpbmNsdWRlIDxz
eXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy91bmlzdGQu
aD4KKyNpbmNsdWRlIDxzeXMvdmZzb3BzLmg+CisjaW5jbHVkZSA8c3lzL3Zub2RlLmg+CisKKyNp
bmNsdWRlIDxzeXMvbXBsb2NrMi5oPgorCisjaW5jbHVkZSA8dm0vdm0uaD4KKyNpbmNsdWRlIDx2
bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+CisjaW5jbHVkZSA8dm0vdm1f
cGFnZXIuaD4KKworI2luY2x1ZGUgPHZmcy9maWZvZnMvZmlmby5oPgorI2luY2x1ZGUgPHZmcy90
bXBmcy90bXBmc192bm9wcy5oPgorI2luY2x1ZGUgPHZmcy90bXBmcy90bXBmcy5oPgorCitNQUxM
T0NfREVDTEFSRShNX1RNUEZTKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQK
K3RtcGZzX25yZXNvbHZlKHN0cnVjdCB2b3BfbnJlc29sdmVfYXJncyAqdikKK3sKKwlzdHJ1Y3Qg
dm5vZGUgKmR2cCA9IHYtPmFfZHZwOworCXN0cnVjdCB2bm9kZSAqdnAgPSBOVUxMOworCXN0cnVj
dCBuYW1lY2FjaGUgKm5jcCA9IHYtPmFfbmNoLT5uY3A7CisJc3RydWN0IHVjcmVkICpjcmVkID0g
di0+YV9jcmVkOworCisJaW50IGVycm9yOworCXN0cnVjdCB0bXBmc19kaXJlbnQgKmRlOworCXN0
cnVjdCB0bXBmc19ub2RlICpkbm9kZTsKKworCWRub2RlID0gVlBfVE9fVE1QRlNfRElSKGR2cCk7
CisKKwlpZiAoIXZuX2lzbG9ja2VkKGR2cCkpOworCQl2bl9sb2NrKGR2cCwgTEtfRVhDTFVTSVZF
IHwgTEtfUkVUUlkpOworCQorCS8qIENoZWNrIGFjY2Vzc2liaWxpdHkgb2YgcmVxdWVzdGVkIG5v
ZGUgYXMgYSBmaXJzdCBzdGVwLiAqLworCWVycm9yID0gVk9QX0FDQ0VTUyhkdnAsIFZFWEVDLCBj
cmVkKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZG5vZGUtPnRuX2Rp
ci50bl9wYXJlbnQgPT0gTlVMTCkgeworCQllcnJvciA9IEVOT0VOVDsKKwkJZ290byBvdXQ7CisJ
fQorCisJZGUgPSB0bXBmc19kaXJfbG9va3VwKGRub2RlLCBOVUxMLCBuY3ApOworCWlmIChkZSA9
PSBOVUxMKSB7CisJCS8qIFRoZSBlbnRyeSB3YXMgbm90IGZvdW5kIGluIHRoZSBkaXJlY3Rvcnku
CisJCSAqIFRoaXMgaXMgT0sgaWYgd2UgYXJlIGNyZWF0aW5nIG9yIHJlbmFtaW5nIGFuCisJCSAq
IGVudHJ5IGFuZCBhcmUgd29ya2luZyBvbiB0aGUgbGFzdCBjb21wb25lbnQgb2YKKwkJICogdGhl
IHBhdGggbmFtZS4gKi8KKwkJZXJyb3IgPSBWT1BfQUNDRVNTKGR2cCwgVldSSVRFLCBjcmVkKTsK
KwkJaWYgKGVycm9yICE9IDApCisJCQlnb3RvIG91dDsKKwkJZWxzZSB7CisJCQllcnJvciA9IEVO
T0VOVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHRtcGZzX25vZGUg
KnRub2RlOworCisJCS8qIFRoZSBlbnRyeSB3YXMgZm91bmQsIHNvIGdldCBpdHMgYXNzb2NpYXRl
ZAorCQkgKiB0bXBmc19ub2RlLiAqLworCQl0bm9kZSA9IGRlLT50ZF9ub2RlOworCisJCS8qIElm
IHdlIGFyZSBub3QgYXQgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgYW5kCisJCSAqIGZvdW5kIGEg
bm9uLWRpcmVjdG9yeSBvciBub24tbGluayBlbnRyeSAod2hpY2gKKwkJICogbWF5IGl0c2VsZiBi
ZSBwb2ludGluZyB0byBhIGRpcmVjdG9yeSksIHJhaXNlCisJCSAqIGFuIGVycm9yLiAqLworCQlp
ZiAodG5vZGUtPnRuX2xpbmtzID4gMSAmJiAKKyAJCSAgICB0bm9kZS0+dG5fdHlwZSAhPSBWRElS
ICYmIHRub2RlLT50bl90eXBlICE9IFZMTkspIHsKKwkJCWVycm9yID0gRU5PVERJUjsKKwkJCWdv
dG8gb3V0OworCQl9CisKKwkJZXJyb3IgPSBWT1BfQUNDRVNTKGR2cCwgVldSSVRFLCBjcmVkKTsK
KwkJaWYgKGVycm9yICE9IDApCisJCQlnb3RvIG91dDsKKworCQkvKiBBbGxvY2F0ZSBhIG5ldyB2
bm9kZSBvbiB0aGUgbWF0Y2hpbmcgZW50cnkuICovCisJCWVycm9yID0gdG1wZnNfYWxsb2NfdnAo
ZHZwLT52X21vdW50LCB0bm9kZSwKKwkJCQlMS19FWENMVVNJVkUgfCBMS19SRVRSWSwgJnZwKTsK
KwkJaWYgKGVycm9yICE9IDApCisJCQlnb3RvIG91dDsKKworCQlpZiAoKGRub2RlLT50bl9tb2Rl
ICYgU19JU1RYVCkgJiYKKwkJICAgIFZPUF9BQ0NFU1ModnAsIFZXUklURSwgY3JlZCkpIHsKKwkJ
CWVycm9yID0gRVBFUk07CisJCQl2cCA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwor
CUtLQVNTRVJUKHZwKTsKKworb3V0OgorCXZuX3VubG9jayhkdnApOworCS8qIFN0b3JlIHRoZSBy
ZXN1bHQgb2YgdGhpcyBsb29rdXAgaW4gdGhlIGNhY2hlLiAgQXZvaWQgdGhpcyBpZiB0aGUKKwkg
KiByZXF1ZXN0IHdhcyBmb3IgY3JlYXRpb24sIGFzIGl0IGRvZXMgbm90IGltcHJvdmUgdGltaW5n
cyBvbgorCSAqIGVtcHJpY2FsIHRlc3RzLiAqLworCWlmICh2cCkgeworCQl2bl91bmxvY2sodnAp
OworCQljYWNoZV9zZXR2cCh2LT5hX25jaCwgdnApOworCQl2cmVsZSh2cCk7CisJfQorCWlmIChl
cnJvciA9PSBFTk9FTlQpIHsKKwkJY2FjaGVfc2V0dnAodi0+YV9uY2gsIE5VTEwpOworCX0KKwly
ZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQKK3RtcGZzX25sb29rdXBkb3Rkb3Qoc3RydWN0
IHZvcF9ubG9va3VwZG90ZG90X2FyZ3MgKnYpCit7CisJc3RydWN0IHZub2RlICpkdnAgPSB2LT5h
X2R2cDsKKwlzdHJ1Y3Qgdm5vZGUgKip2cHAgPSB2LT5hX3ZwcDsKKwlzdHJ1Y3QgdG1wZnNfbm9k
ZSAqZG5vZGUgPSBWUF9UT19UTVBGU19OT0RFKGR2cCk7CisJc3RydWN0IHVjcmVkICpjcmVkID0g
di0+YV9jcmVkOworCWludCBlcnJvcjsKKworCSp2cHAgPSBOVUxMOworCS8qIENoZWNrIGFjY2Vz
c2liaWxpdHkgb2YgcmVxdWVzdGVkIG5vZGUgYXMgYSBmaXJzdCBzdGVwLiAqLworCWVycm9yID0g
Vk9QX0FDQ0VTUyhkdnAsIFZFWEVDLCBjcmVkKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJu
IGVycm9yOworCisJaWYgKGRub2RlLT50bl9kaXIudG5fcGFyZW50ICE9IE5VTEwpIHsKKwkJLyog
QWxsb2NhdGUgYSBuZXcgdm5vZGUgb24gdGhlIG1hdGNoaW5nIGVudHJ5LiAqLworCQllcnJvciA9
IHRtcGZzX2FsbG9jX3ZwKGR2cC0+dl9tb3VudCwgZG5vZGUtPnRuX2Rpci50bl9wYXJlbnQsCisJ
CSAgICBMS19FWENMVVNJVkUgfCBMS19SRVRSWSwgdnBwKTsKKworCQlpZiAoKnZwcCkgCisJCQl2
bl91bmxvY2soKnZwcCk7CisJfQorCisJcmV0dXJuICgqdnBwID09IE5VTEwpID8gRU5PRU5UIDog
MDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQKK3RtcGZzX25jcmVhdGUo
c3RydWN0IHZvcF9uY3JlYXRlX2FyZ3MgKnYpCit7CisJc3RydWN0IHZub2RlICpkdnAgPSB2LT5h
X2R2cDsKKwlzdHJ1Y3Qgdm5vZGUgKip2cHAgPSB2LT5hX3ZwcDsKKwlzdHJ1Y3QgbmFtZWNhY2hl
ICpuY3AgPSB2LT5hX25jaC0+bmNwOworCXN0cnVjdCB2YXR0ciAqdmFwID0gdi0+YV92YXA7CisJ
c3RydWN0IHVjcmVkICpjcmVkID0gdi0+YV9jcmVkOworCWludCBlcnJvcjsKKworCUtLQVNTRVJU
KHZhcC0+dmFfdHlwZSA9PSBWUkVHIHx8IHZhcC0+dmFfdHlwZSA9PSBWU09DSyk7CisKKwl2bl9s
b2NrKGR2cCwgTEtfRVhDTFVTSVZFIHwgTEtfUkVUUlkpOworCWVycm9yID0gdG1wZnNfYWxsb2Nf
ZmlsZShkdnAsIHZwcCwgdmFwLCBuY3AsIGNyZWQsIE5VTEwpOworCWlmIChlcnJvciA9PSAwKSB7
CisJCWNhY2hlX3NldHVucmVzb2x2ZWQodi0+YV9uY2gpOworCQljYWNoZV9zZXR2cCh2LT5hX25j
aCwgKnZwcCk7CisJfQorCXZuX3VubG9jayhkdnApOworCQorCXJldHVybiBlcnJvcjsKK30KKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50Cit0bXBmc19ubWtub2Qoc3RydWN0IHZvcF9u
bWtub2RfYXJncyAqdikKK3sKKwlzdHJ1Y3Qgdm5vZGUgKmR2cCA9IHYtPmFfZHZwOworCXN0cnVj
dCB2bm9kZSAqKnZwcCA9IHYtPmFfdnBwOworCXN0cnVjdCBuYW1lY2FjaGUgKm5jcCA9IHYtPmFf
bmNoLT5uY3A7CisJc3RydWN0IHZhdHRyICp2YXAgPSB2LT5hX3ZhcDsKKwlzdHJ1Y3QgdWNyZWQg
KmNyZWQgPSB2LT5hX2NyZWQ7CisJaW50IGVycm9yOworCisJaWYgKHZhcC0+dmFfdHlwZSAhPSBW
QkxLICYmIHZhcC0+dmFfdHlwZSAhPSBWQ0hSICYmCisJICAgIHZhcC0+dmFfdHlwZSAhPSBWRklG
TykKKwkJcmV0dXJuIEVJTlZBTDsKKworCXZuX2xvY2soZHZwLCBMS19FWENMVVNJVkUgfCBMS19S
RVRSWSk7CisJZXJyb3IgPSB0bXBmc19hbGxvY19maWxlKGR2cCwgdnBwLCB2YXAsIG5jcCwgY3Jl
ZCwgTlVMTCk7CisJaWYgKGVycm9yID09IDApIHsKKwkJY2FjaGVfc2V0dW5yZXNvbHZlZCh2LT5h
X25jaCk7CisJCWNhY2hlX3NldHZwKHYtPmFfbmNoLCAqdnBwKTsKKwl9CisJdm5fdW5sb2NrKGR2
cCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMg
aW50Cit0bXBmc19vcGVuKHN0cnVjdCB2b3Bfb3Blbl9hcmdzICp2KQoreworCXN0cnVjdCB2bm9k
ZSAqdnAgPSB2LT5hX3ZwOworCWludCBtb2RlID0gdi0+YV9tb2RlOworCisJaW50IGVycm9yOwor
CXN0cnVjdCB0bXBmc19ub2RlICpub2RlOworCisJS0tBU1NFUlQodm5faXNsb2NrZWQodnApKTsK
KworCW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKHZwKTsKKworCS8qIFRoZSBmaWxlIGlzIHN0aWxs
IGFjdGl2ZSBidXQgYWxsIGl0cyBuYW1lcyBoYXZlIGJlZW4gcmVtb3ZlZAorCSAqIChlLmcuIGJ5
IGEgInJtZGlyICQocHdkKSIpLiAgSXQgY2Fubm90IGJlIG9wZW5lZCBhbnkgbW9yZSBhcworCSAq
IGl0IGlzIGFib3V0IHRvIGRpZS4gKi8KKwlpZiAobm9kZS0+dG5fbGlua3MgPCAxKQorCQlyZXR1
cm4gKEVOT0VOVCk7CisKKwkvKiBJZiB0aGUgZmlsZSBpcyBtYXJrZWQgYXBwZW5kLW9ubHksIGRl
bnkgd3JpdGUgcmVxdWVzdHMuICovCisJaWYgKG5vZGUtPnRuX2ZsYWdzICYgQVBQRU5EICYmICht
b2RlICYgKEZXUklURSB8IE9fQVBQRU5EKSkgPT0gRldSSVRFKQorCQllcnJvciA9IEVQRVJNOwor
CWVsc2UgeworCQlyZXR1cm4gKHZvcF9zdGRvcGVuKHYpKTsKKwl9CisKKwlLS0FTU0VSVCh2bl9p
c2xvY2tlZCh2cCkpOworCXJldHVybiBlcnJvcjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisK
K3N0YXRpYyBpbnQKK3RtcGZzX2Nsb3NlKHN0cnVjdCB2b3BfY2xvc2VfYXJncyAqdikKK3sKKwlz
dHJ1Y3Qgdm5vZGUgKnZwID0gdi0+YV92cDsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKwor
CW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKHZwKTsKKworCWlmIChub2RlLT50bl9saW5rcyA+IDAp
IHsKKwkJLyogVXBkYXRlIG5vZGUgdGltZXMuICBObyBuZWVkIHRvIGRvIGl0IGlmIHRoZSBub2Rl
IGhhcworCQkgKiBiZWVuIGRlbGV0ZWQsIGJlY2F1c2UgaXQgd2lsbCB2YW5pc2ggYWZ0ZXIgd2Ug
cmV0dXJuLiAqLworCQl0bXBmc191cGRhdGUodnApOworCX0KKworCXJldHVybiB2b3Bfc3RkY2xv
c2Uodik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbnQKK3RtcGZzX2FjY2VzcyhzdHJ1
Y3Qgdm9wX2FjY2Vzc19hcmdzICp2KQoreworCXN0cnVjdCB2bm9kZSAqdnAgPSB2LT5hX3ZwOwor
CWludCBlcnJvcjsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKworCUtLQVNTRVJUKHZuX2lz
bG9ja2VkKHZwKSk7CisKKwlub2RlID0gVlBfVE9fVE1QRlNfTk9ERSh2cCk7CisKKwlzd2l0Y2gg
KHZwLT52X3R5cGUpIHsKKwljYXNlIFZESVI6CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBW
TE5LOgorCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgVlJFRzoKKwkJaWYgKFZXUklURSAmJiB2
cC0+dl9tb3VudC0+bW50X2ZsYWcgJiBNTlRfUkRPTkxZKSB7CisJCQllcnJvciA9IEVST0ZTOwor
CQkJZ290byBvdXQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFZCTEs6CisJCS8qIEZBTExUSFJP
VUdIICovCisJY2FzZSBWQ0hSOgorCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgVlNPQ0s6CisJ
CS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBWRklGTzoKKwkJYnJlYWs7CisKKwlkZWZhdWx0Ogor
CQllcnJvciA9IEVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKFZXUklURSAmJiBub2Rl
LT50bl9mbGFncyAmIElNTVVUQUJMRSkgeworCQllcnJvciA9IEVQRVJNOworCQlnb3RvIG91dDsK
Kwl9CisKKwllcnJvciA9IHZvcF9oZWxwZXJfYWNjZXNzKHYsIG5vZGUtPnRuX3VpZCwgbm9kZS0+
dG5fZ2lkLCBub2RlLT50bl9tb2RlLCAwKTsKKworb3V0OgorCisJcmV0dXJuIGVycm9yOworfQor
CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW50Cit0bXBmc19nZXRhdHRyKHN0cnVjdCB2b3BfZ2V0
YXR0cl9hcmdzICp2KQoreworCXN0cnVjdCB2bm9kZSAqdnAgPSB2LT5hX3ZwOworCXN0cnVjdCB2
YXR0ciAqdmFwID0gdi0+YV92YXA7CisKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKwlpbnQg
bmVlZHVubG9jayA9IDA7CisKKwlpZighdm5faXNsb2NrZWQodnApKSB7CisJCW5lZWR1bmxvY2sg
PSAxOworCQl2bl9sb2NrKHZwLCBMS19TSEFSRUQgfCBMS19SRVRSWSk7CisJfQorCisJbm9kZSA9
IFZQX1RPX1RNUEZTX05PREUodnApOworCisJdG1wZnNfdXBkYXRlKHZwKTsKKworCXZhcC0+dmFf
dHlwZSA9IHZwLT52X3R5cGU7CisJdmFwLT52YV9tb2RlID0gbm9kZS0+dG5fbW9kZTsKKwl2YXAt
PnZhX25saW5rID0gbm9kZS0+dG5fbGlua3M7CisJdmFwLT52YV91aWQgPSBub2RlLT50bl91aWQ7
CisJdmFwLT52YV9naWQgPSBub2RlLT50bl9naWQ7CisJdmFwLT52YV9mc2lkID0gdnAtPnZfbW91
bnQtPm1udF9zdGF0LmZfZnNpZC52YWxbMF07CisJdmFwLT52YV9maWxlaWQgPSBub2RlLT50bl9p
ZDsKKwl2YXAtPnZhX3NpemUgPSBub2RlLT50bl9zaXplOworCXZhcC0+dmFfYmxvY2tzaXplID0g
UEFHRV9TSVpFOworCXZhcC0+dmFfYXRpbWUudHZfc2VjID0gbm9kZS0+dG5fYXRpbWU7CisJdmFw
LT52YV9hdGltZS50dl9uc2VjID0gbm9kZS0+dG5fYXRpbWVuc2VjOworCXZhcC0+dmFfbXRpbWUu
dHZfc2VjID0gbm9kZS0+dG5fbXRpbWU7CisJdmFwLT52YV9tdGltZS50dl9uc2VjID0gbm9kZS0+
dG5fbXRpbWVuc2VjOworCXZhcC0+dmFfY3RpbWUudHZfc2VjID0gbm9kZS0+dG5fY3RpbWU7CisJ
dmFwLT52YV9jdGltZS50dl9uc2VjID0gbm9kZS0+dG5fY3RpbWVuc2VjOworCXZhcC0+dmFfZ2Vu
ID0gbm9kZS0+dG5fZ2VuOworCXZhcC0+dmFfZmxhZ3MgPSBub2RlLT50bl9mbGFnczsKKwlpZiAo
dnAtPnZfdHlwZSA9PSBWQkxLIHx8IHZwLT52X3R5cGUgPT0gVkNIUikKKwl7CisJCXZhcC0+dmFf
cm1ham9yID0gdW1ham9yKG5vZGUtPnRuX3JkZXYpOworCQl2YXAtPnZhX3JtaW5vciA9IHVtaW5v
cihub2RlLT50bl9yZGV2KTsKKwl9CisJdmFwLT52YV9ieXRlcyA9IHJvdW5kX3BhZ2Uobm9kZS0+
dG5fc2l6ZSk7CisJdmFwLT52YV9maWxlcmV2ID0gMDsKKworCWlmIChuZWVkdW5sb2NrKSAKKwkJ
dm5fdW5sb2NrKHZwKTsKKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwor
aW50Cit0bXBmc19zZXRhdHRyKHN0cnVjdCB2b3Bfc2V0YXR0cl9hcmdzICp2KQoreworCXN0cnVj
dCB2bm9kZSAqdnAgPSB2LT5hX3ZwOworCXN0cnVjdCB2YXR0ciAqdmFwID0gdi0+YV92YXA7CisJ
c3RydWN0IHVjcmVkICpjcmVkID0gdi0+YV9jcmVkOworCisJaW50IGVycm9yID0gMDsKKwlpbnQg
bmVlZHVubG9jayA9IDA7CisKKwlpZighdm5faXNsb2NrZWQodnApKSB7CisJCW5lZWR1bmxvY2sg
PSAxOworCQl2bl9sb2NrKHZwLCBMS19FWENMVVNJVkUgfCBMS19SRVRSWSk7CisJfQorCisJLyog
QWJvcnQgaWYgYW55IHVuc2V0dGFibGUgYXR0cmlidXRlIGlzIGdpdmVuLiAqLworCWlmICh2YXAt
PnZhX3R5cGUgIT0gVk5PTiB8fAorCSAgICB2YXAtPnZhX25saW5rICE9IFZOT1ZBTCB8fAorCSAg
ICB2YXAtPnZhX2ZzaWQgIT0gVk5PVkFMIHx8CisJICAgIHZhcC0+dmFfZmlsZWlkICE9IFZOT1ZB
TCB8fAorCSAgICB2YXAtPnZhX2Jsb2Nrc2l6ZSAhPSBWTk9WQUwgfHwKKwkgICAgdmFwLT52YV9n
ZW4gIT0gVk5PVkFMIHx8CisJICAgIHZhcC0+dmFfcm1ham9yICE9IFZOT1ZBTCB8fAorCSAgICB2
YXAtPnZhX2J5dGVzICE9IFZOT1ZBTCkKKwkJZXJyb3IgPSBFSU5WQUw7CisKKwlpZiAoZXJyb3Ig
PT0gMCAmJiAodmFwLT52YV9mbGFncyAhPSBWTk9WQUwpKQorCQllcnJvciA9IHRtcGZzX2NoZmxh
Z3ModnAsIHZhcC0+dmFfZmxhZ3MsIGNyZWQpOworCisJaWYgKGVycm9yID09IDAgJiYgKHZhcC0+
dmFfc2l6ZSAhPSBWTk9WQUwpKQorCQllcnJvciA9IHRtcGZzX2Noc2l6ZSh2cCwgdmFwLT52YV9z
aXplLCBjcmVkKTsKKworCWlmIChlcnJvciA9PSAwICYmICh2YXAtPnZhX3VpZCAhPSBWTk9WQUwg
fHwgdmFwLT52YV9naWQgIT0gVk5PVkFMKSkKKwkJZXJyb3IgPSB0bXBmc19jaG93bih2cCwgdmFw
LT52YV91aWQsIHZhcC0+dmFfZ2lkLCBjcmVkKTsKKworCWlmIChlcnJvciA9PSAwICYmICh2YXAt
PnZhX21vZGUgIT0gKG1vZGVfdClWTk9WQUwpKQorCQllcnJvciA9IHRtcGZzX2NobW9kKHZwLCB2
YXAtPnZhX21vZGUsIGNyZWQpOworCisJaWYgKGVycm9yID09IDAgJiYgKCh2YXAtPnZhX2F0aW1l
LnR2X3NlYyAhPSBWTk9WQUwgJiYKKwkgICAgdmFwLT52YV9hdGltZS50dl9uc2VjICE9IFZOT1ZB
TCkgfHwKKwkgICAgKHZhcC0+dmFfbXRpbWUudHZfc2VjICE9IFZOT1ZBTCAmJgorCSAgICB2YXAt
PnZhX210aW1lLnR2X25zZWMgIT0gVk5PVkFMKSApKQorCQllcnJvciA9IHRtcGZzX2NodGltZXMo
dnAsICZ2YXAtPnZhX2F0aW1lLCAmdmFwLT52YV9tdGltZSwKKwkJCXZhcC0+dmFfdmFmbGFncywg
Y3JlZCk7CisKKwkvKiBVcGRhdGUgdGhlIG5vZGUgdGltZXMuICBXZSBnaXZlIHByZWZlcmVuY2Ug
dG8gdGhlIGVycm9yIGNvZGVzCisJICogZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gcmF0aGVy
IHRoYW4gdGhlIG9uZXMgdGhhdCBtYXkgYXJpc2UKKwkgKiBmcm9tIHRtcGZzX3VwZGF0ZS4gKi8K
Kwl0bXBmc191cGRhdGUodnApOworCisJaWYgKG5lZWR1bmxvY2spIAorCQl2bl91bmxvY2sodnAp
OworCisJcmV0dXJuIGVycm9yOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGlu
dAordG1wZnNfZnN5bmMoc3RydWN0IHZvcF9mc3luY19hcmdzICp2KQoreworCXN0cnVjdCB2bm9k
ZSAqdnAgPSB2LT5hX3ZwOworCisJdG1wZnNfdXBkYXRlKHZwKTsKKworCisJcmV0dXJuIDA7Cit9
CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50Cit0bXBmc19yZWFkIChzdHJ1Y3Qg
dm9wX3JlYWRfYXJncyAqYXApCit7CisJc3RydWN0IGJ1ZiAqYnA7CisJc3RydWN0IHZub2RlICp2
cCA9IGFwLT5hX3ZwOworCXN0cnVjdCB1aW8gKnVpbyA9IGFwLT5hX3VpbzsKKwlzdHJ1Y3QgdG1w
ZnNfbm9kZSAqbm9kZTsKKwlpbnQgZXJyb3I7CisJb2ZmX3Qgb2Zmc2V0OworCW9mZl90IGJhc2Vf
b2Zmc2V0OworCXNpemVfdCBsZW47CisJaW50IGdvdF9tcGxvY2s7CisKKwllcnJvciA9IDA7CisJ
aWYgKHVpby0+dWlvX3Jlc2lkID09IDApIHsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCW5vZGUg
PSBWUF9UT19UTVBGU19OT0RFKHZwKTsKKworCWlmICh1aW8tPnVpb19vZmZzZXQgPCAwKQorCQly
ZXR1cm4gKEVJTlZBTCk7CisJaWYgKHZwLT52X3R5cGUgIT0gVlJFRykKKwkJcmV0dXJuIChFSU5W
QUwpOworCQorCXZuX2xvY2sodnAsIExLX1NIQVJFRCB8IExLX1JFVFJZKTsKKworI2lmZGVmIFNN
UAorCWlmKGN1cnRocmVhZC0+dGRfbXBjb3VudCkKKwkJZ290X21wbG9jayA9IC0xOworCWVsc2UK
KwkJZ290X21wbG9jayA9IDA7CisjZWxzZQorCQlnb3RfbXBsb2NrID0gLTE7CisjZW5kaWYKKwor
CXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDAgJiYgdWlvLT51aW9fb2Zmc2V0IDwgbm9kZS0+dG5f
c2l6ZSkgeworCQkvKgorCQkgKiBVc2UgYnVmZmVyIGNhY2hlIEkvTyAodmlhIHRtcGZzX3N0cmF0
ZWd5KQorCQkgKi8KKwkJb2Zmc2V0ID0gKG9mZl90KXVpby0+dWlvX29mZnNldCAmIEJNQVNLOwor
CQliYXNlX29mZnNldCA9IChvZmZfdCl1aW8tPnVpb19vZmZzZXQgLSBvZmZzZXQ7CisJCWJwID0g
Z2V0Y2FjaGVibGsodnAsIGJhc2Vfb2Zmc2V0KTsKKwkJaWYgKGJwID09IE5VTEwpCisJCXsKKwkJ
CWlmIChnb3RfbXBsb2NrID09IDApIHsKKwkJCQlnb3RfbXBsb2NrID0gMTsKKwkJCQlnZXRfbXBs
b2NrKCk7CisJCQl9CisKKwkJCWVycm9yID0gYnJlYWQodnAsIGJhc2Vfb2Zmc2V0LCBCU0laRSwg
JmJwKTsKKwkJCWlmIChlcnJvcikgeworCQkJCWJyZWxzZShicCk7CisJCQkJa3ByaW50ZigidG1w
ZnNfcmVhZCBicmVhZCBlcnJvciAlZFxuIiwgZXJyb3IpOworCQkJCWJyZWFrOworCQkJfQorCQl9
CisKKwkJaWYgKGdvdF9tcGxvY2sgPT0gMCkgeworCQkJZ290X21wbG9jayA9IDE7CisJCQlnZXRf
bXBsb2NrKCk7CisJCX0KKworCQkvKgorCQkgKiBGaWd1cmUgb3V0IGhvdyBtYW55IGJ5dGVzIHdl
IGNhbiBhY3R1YWxseSBjb3B5IHRoaXMgbG9vcC4KKwkJICovCisJCWxlbiA9IEJTSVpFIC0gb2Zm
c2V0OworCQlpZiAobGVuID4gdWlvLT51aW9fcmVzaWQpCisJCQlsZW4gPSB1aW8tPnVpb19yZXNp
ZDsKKwkJaWYgKGxlbiA+IG5vZGUtPnRuX3NpemUgLSB1aW8tPnVpb19vZmZzZXQpCisJCQlsZW4g
PSAoc2l6ZV90KShub2RlLT50bl9zaXplIC0gdWlvLT51aW9fb2Zmc2V0KTsKKworCQllcnJvciA9
IHVpb21vdmUoKGNoYXIgKilicC0+Yl9kYXRhICsgb2Zmc2V0LCBsZW4sIHVpbyk7CisJCWJxcmVs
c2UoYnApOworCQlpZiAoZXJyb3IpIHsKKwkJCWtwcmludGYoInRtcGZzX3JlYWQgdWlvbW92ZSBl
cnJvciAlZFxuIiwgZXJyb3IpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZ290X21wbG9j
ayA+IDApIAorCQlyZWxfbXBsb2NrKCk7CisKKwlUTVBGU19OT0RFX0xPQ0sobm9kZSk7CisJbm9k
ZS0+dG5fc3RhdHVzIHw9IFRNUEZTX05PREVfQUNDRVNTRUQ7CisJVE1QRlNfTk9ERV9VTkxPQ0so
bm9kZSk7CisKKwl2bl91bmxvY2sodnApOworCisJcmV0dXJuKGVycm9yKTsKK30KKworc3RhdGlj
IGludAordG1wZnNfd3JpdGUgKHN0cnVjdCB2b3Bfd3JpdGVfYXJncyAqYXApCit7CisJc3RydWN0
IGJ1ZiAqYnA7CisJc3RydWN0IHZub2RlICp2cCA9IGFwLT5hX3ZwOworCXN0cnVjdCB1aW8gKnVp
byA9IGFwLT5hX3VpbzsKKwlzdHJ1Y3QgdGhyZWFkICp0ZCA9IHVpby0+dWlvX3RkOworCXN0cnVj
dCB0bXBmc19ub2RlICpub2RlOworCWJvb2xlYW5fdCBleHRlbmRlZDsKKwlvZmZfdCBvbGRzaXpl
OworCWludCBlcnJvcjsKKwlvZmZfdCBvZmZzZXQ7CisJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJc2l6
ZV90IGxlbjsKKwlzdHJ1Y3QgcmxpbWl0IGxpbWl0OworCWludCBnb3RfbXBsb2NrOworCWludCB0
cml2aWFsID0gMDsKKworCWVycm9yID0gMDsKKwlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgewor
CQlyZXR1cm4gZXJyb3I7CisJfQorCisJbm9kZSA9IFZQX1RPX1RNUEZTX05PREUodnApOworCisJ
aWYgKHZwLT52X3R5cGUgIT0gVlJFRykKKwkJcmV0dXJuIChFSU5WQUwpOworCisJb2xkc2l6ZSA9
IG5vZGUtPnRuX3NpemU7CisJaWYgKGFwLT5hX2lvZmxhZyAmIElPX0FQUEVORCkKKwkJdWlvLT51
aW9fb2Zmc2V0ID0gbm9kZS0+dG5fc2l6ZTsKKworCS8qCisJICogQ2hlY2sgZm9yIGlsbGVnYWwg
d3JpdGUgb2Zmc2V0cy4gIAorCSAqLworCWlmICh1aW8tPnVpb19vZmZzZXQgKyB1aW8tPnVpb19y
ZXNpZCA+CisJICBWRlNfVE9fVE1QRlModnAtPnZfbW91bnQpLT50bV9tYXhmaWxlc2l6ZSkKKwkJ
cmV0dXJuIChFRkJJRyk7CisKKwlpZiAodnAtPnZfdHlwZSA9PSBWUkVHICYmIHRkICE9IE5VTEwp
IHsKKwkJZXJyb3IgPSBrZXJuX2dldHJsaW1pdChSTElNSVRfRlNJWkUsICZsaW1pdCk7CisJCWlm
IChlcnJvciAhPSAwKQorCQkJcmV0dXJuIGVycm9yOworCQlpZiAodWlvLT51aW9fb2Zmc2V0ICsg
dWlvLT51aW9fcmVzaWQgPiBsaW1pdC5ybGltX2N1cikgeworCQkJa3NpZ25hbCh0ZC0+dGRfcHJv
YywgU0lHWEZTWik7CisJCQlyZXR1cm4gKEVGQklHKTsKKwkJfQorCX0KKworCisJLyoKKwkgKiBF
eHRlbmQgdGhlIGZpbGUncyBzaXplIGlmIG5lY2Vzc2FyeQorCSAqLworCWV4dGVuZGVkID0gKHVp
by0+dWlvX29mZnNldCArIHVpby0+dWlvX3Jlc2lkKSA+IG5vZGUtPnRuX3NpemU7CisKKwl2bl9s
b2NrKHZwLCBMS19FWENMVVNJVkUgfCBMS19SRVRSWSk7CisjaWZkZWYgU01QCisJaWYoY3VydGhy
ZWFkLT50ZF9tcGNvdW50KQorCQlnb3RfbXBsb2NrID0gLTE7CisJZWxzZSB7CisJCWdvdF9tcGxv
Y2sgPSAxOworCQlnZXRfbXBsb2NrKCk7CisJfQorI2Vsc2UKKwkJZ290X21wbG9jayA9IC0xOwor
I2VuZGlmCisJY3JpdF9lbnRlcigpOworCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDApIHsKKwkJ
LyoKKwkJICogVXNlIGJ1ZmZlciBjYWNoZSBJL08gKHZpYSB0bXBmc19zdHJhdGVneSkKKwkJICov
CisJCW9mZnNldCA9IChvZmZfdCl1aW8tPnVpb19vZmZzZXQgJiBCTUFTSzsKKwkJYmFzZV9vZmZz
ZXQgPSAob2ZmX3QpdWlvLT51aW9fb2Zmc2V0IC0gb2Zmc2V0OworCQlsZW4gPSBCU0laRSAtIG9m
ZnNldDsKKwkJaWYgKGxlbiA+IHVpby0+dWlvX3Jlc2lkKQorCQkJbGVuID0gdWlvLT51aW9fcmVz
aWQ7CisKKwkJaWYgKCh1aW8tPnVpb19vZmZzZXQgKyBsZW4pID4gbm9kZS0+dG5fc2l6ZSkgewor
CQkJdHJpdmlhbCA9IHVpby0+dWlvX29mZnNldCA8PSBub2RlLT50bl9zaXplOworCQkJZXJyb3Ig
PSB0bXBmc19yZWdfcmVzaXplKHZwLCB1aW8tPnVpb19vZmZzZXQgKyBsZW4sICB0cml2aWFsKTsK
KwkJCWlmIChlcnJvcikgCisJCQkJYnJlYWs7CisJCX0KKworCQlicCA9IGdldGJsayh2cCwgYmFz
ZV9vZmZzZXQsIEJTSVpFLCBHRVRCTEtfQkhFQVZZLCAwKTsKKwkJdmZzX2Jpb19jbHJidWYoYnAp
OworCisJCWVycm9yID0gdWlvbW92ZSgoY2hhciAqKWJwLT5iX2RhdGEgKyBvZmZzZXQsIGxlbiwg
dWlvKTsKKwkJaWYgKGVycm9yKSB7CisJCQlrcHJpbnRmKCJ0bXBmc193cml0ZSB1aW9tb3ZlIGVy
cm9yICVkXG4iLCBlcnJvcik7CisJCQlicmVsc2UoYnApOworCQkJYnJlYWs7CisJCX0KKworCQlp
ZiAodWlvLT51aW9fb2Zmc2V0ID4gbm9kZS0+dG5fc2l6ZSkKKwkJCW5vZGUtPnRuX3NpemUgPSB1
aW8tPnVpb19vZmZzZXQ7CisJCQkKKwkJLyoKKwkJICogVGhlIGRhdGEgaGFzIGJlZW4gbG9hZGVk
IGludG8gdGhlIGJ1ZmZlciwgd3JpdGUgaXQgb3V0LiAodmlhIHRtcGZzX3N0cmF0ZWd5KQorCQkg
KgorCQkgKiBjYWxsIGJkd3JpdGUoKSBiZWNhdXNlIHdlIGRvbid0IGNhcmUgYWJvdXQgc3RvcmFn
ZSBpbyBmbGFnIChhcC0+YV9pb2ZsYWcpIGZvciBhIHN3YXAgSS9PCisJCSAqIG1heWJlIGJhd3Jp
dGUoKSBmb3IgSU9fRElSRUNULCBid3JpdGUoKSBmb3IgSU9fU1lOQyAKKwkJICoKKwkJICogWFhY
OiBuZWVkIHRvIGltcGxlbWVudCB0bXBmc19ibWFwKCkgZm9yIGEgZGlydHkgYml0IGhhbmRsaW5n
IG9mIGJkd3JpdGUoKQorCQkgKi8KKwkJYmR3cml0ZShicCk7CisJCWlmIChicC0+Yl9lcnJvcikg
eworCQkJa3ByaW50ZigidG1wZnNfd3JpdGUgYndyaXRlIGVycm9yICVkXG4iLCBlcnJvcik7CisJ
CQlicmVhazsKKwkJfQorCX0KKwljcml0X2V4aXQoKTsKKworCWlmIChnb3RfbXBsb2NrID4gMCkg
CisJCXJlbF9tcGxvY2soKTsKKworCWlmIChlcnJvcikgeworCQlpZiAoZXh0ZW5kZWQpIAorCQkJ
KHZvaWQpdG1wZnNfcmVnX3Jlc2l6ZSh2cCwgb2xkc2l6ZSwgdHJpdmlhbCk7IAorCQlyZXR1cm4g
ZXJyb3I7CisJfQorCisJVE1QRlNfTk9ERV9MT0NLKG5vZGUpOworCW5vZGUtPnRuX3N0YXR1cyB8
PSBUTVBGU19OT0RFX0FDQ0VTU0VEIHwgVE1QRlNfTk9ERV9NT0RJRklFRCB8CisJICAgIChleHRl
bmRlZD8gVE1QRlNfTk9ERV9DSEFOR0VEIDogMCk7CisKKwlpZiAobm9kZS0+dG5fbW9kZSAmIChT
X0lTVUlEIHwgU19JU0dJRCkpIHsKKwkJaWYgKHByaXZfY2hlY2tfY3JlZChhcC0+YV9jcmVkLCBQ
UklWX1ZGU19SRVRBSU5TVUdJRCwgMCkpCisJCQlub2RlLT50bl9tb2RlICY9IH4oU19JU1VJRCB8
IFNfSVNHSUQpOworCX0KKwlUTVBGU19OT0RFX1VOTE9DSyhub2RlKTsKKworCXZuX3VubG9jayh2
cCk7CisKKwlyZXR1cm4oZXJyb3IpOworfQorCitzdGF0aWMgaW50Cit0bXBmc19hZHZsb2NrIChz
dHJ1Y3Qgdm9wX2FkdmxvY2tfYXJncyAqYXApCit7CisJc3RydWN0IHRtcGZzX25vZGUgKm5vZGU7
CisJc3RydWN0IHZub2RlICp2cCA9IGFwLT5hX3ZwOworCisJbm9kZSA9IFZQX1RPX1RNUEZTX05P
REUodnApOworCisJcmV0dXJuIChsZl9hZHZsb2NrKGFwLCAmbm9kZS0+dG5fYWR2bG9jaywgbm9k
ZS0+dG5fc2l6ZSkpOworfQorCisKK3N0YXRpYyBpbnQKK3RtcGZzX3N0cmF0ZWd5KHN0cnVjdCB2
b3Bfc3RyYXRlZ3lfYXJncyAqYXApCit7CisJc3RydWN0IGJpbyAqYmlvID0gYXAtPmFfYmlvOwor
CXN0cnVjdCB2bm9kZSAqdnAgPSBhcC0+YV92cDsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsK
Kwl2bV9vYmplY3RfdCB1b2JqOworCisJaWYgKHZwLT52X3R5cGUgIT0gVlJFRykKKwkJcmV0dXJu
IEVJTlZBTDsKKworCW5vZGUgPSBWUF9UT19UTVBGU19OT0RFKHZwKTsKKworCXVvYmogPSBub2Rl
LT50bl9yZWcudG5fYW9iajsKKwkvKgorCSAqIGNhbGwgc3dhcF9wYWdlcl9zdHJhdGVneSB0byBz
dG9yZSB2bSBvYmplY3QgaW50byBzd2FwIGRldmljZQorCSAqLworCXN3YXBfcGFnZXJfc3RyYXRl
Z3kodW9iaiwgYmlvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit0bXBmc19ibWFw
KHN0cnVjdCB2b3BfYm1hcF9hcmdzICphcCkKK3sKKwlpZiAoYXAtPmFfZG9mZnNldHAgIT0gTlVM
TCkKKwkJKmFwLT5hX2RvZmZzZXRwID0gYXAtPmFfbG9mZnNldDsKKwlpZiAoYXAtPmFfcnVucCAh
PSBOVUxMKQorCQkqYXAtPmFfcnVucCA9IDA7CisJaWYgKGFwLT5hX3J1bmIgIT0gTlVMTCkKKwkJ
KmFwLT5hX3J1bmIgPSAwOworCisJcmV0dXJuIDA7Cit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwor
c3RhdGljIGludAordG1wZnNfbnJlbW92ZShzdHJ1Y3Qgdm9wX25yZW1vdmVfYXJncyAqdikKK3sK
KwlzdHJ1Y3Qgdm5vZGUgKmR2cCA9IHYtPmFfZHZwOworCXN0cnVjdCBuYW1lY2FjaGUgKm5jcCA9
IHYtPmFfbmNoLT5uY3A7CisJc3RydWN0IHZub2RlICp2cCA9IG5jcC0+bmNfdnA7CisJaW50IGVy
cm9yOworCXN0cnVjdCB0bXBmc19kaXJlbnQgKmRlOworCXN0cnVjdCB0bXBmc19tb3VudCAqdG1w
OworCXN0cnVjdCB0bXBmc19ub2RlICpkbm9kZTsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsK
KworCXZuX2xvY2soZHZwLCBMS19FWENMVVNJVkUgfCBMS19SRVRSWSk7CisJdm5fbG9jayh2cCwg
TEtfRVhDTFVTSVZFIHwgTEtfUkVUUlkpOworCisJaWYgKHZwLT52X3R5cGUgPT0gVkRJUikgewor
CQllcnJvciA9IEVJU0RJUjsKKwkJZ290byBvdXQ7CisJfQorCisJZG5vZGUgPSBWUF9UT19UTVBG
U19ESVIoZHZwKTsKKwlub2RlID0gVlBfVE9fVE1QRlNfTk9ERSh2cCk7CisJdG1wID0gVkZTX1RP
X1RNUEZTKHZwLT52X21vdW50KTsKKwlkZSA9IHRtcGZzX2Rpcl9sb29rdXAoZG5vZGUsIG5vZGUs
IG5jcCk7CisJaWYgKGRlID09IE5VTEwpIHsKKwkJZXJyb3IgPSBFTk9FTlQ7CisJCWdvdG8gb3V0
OworCX0KKworCS8qIEZpbGVzIG1hcmtlZCBhcyBpbW11dGFibGUgb3IgYXBwZW5kLW9ubHkgY2Fu
bm90IGJlIGRlbGV0ZWQuICovCisJaWYgKChub2RlLT50bl9mbGFncyAmIChJTU1VVEFCTEUgfCBB
UFBFTkQgfCBOT1VOTElOSykpIHx8CisJICAgIChkbm9kZS0+dG5fZmxhZ3MgJiBBUFBFTkQpKSB7
CisJCWVycm9yID0gRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCS8qIFJlbW92ZSB0aGUgZW50
cnkgZnJvbSB0aGUgZGlyZWN0b3J5OyBhcyBpdCBpcyBhIGZpbGUsIHdlIGRvIG5vdAorCSAqIGhh
dmUgdG8gY2hhbmdlIHRoZSBudW1iZXIgb2YgaGFyZCBsaW5rcyBvZiB0aGUgZGlyZWN0b3J5LiAq
LworCXRtcGZzX2Rpcl9kZXRhY2goZHZwLCBkZSk7CisKKwkvKiBGcmVlIHRoZSBkaXJlY3Rvcnkg
ZW50cnkgd2UganVzdCBkZWxldGVkLiAgTm90ZSB0aGF0IHRoZSBub2RlCisJICogcmVmZXJyZWQg
YnkgaXQgd2lsbCBub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGUgdm5vZGUgaXMgcmVhbGx5CisJICog
cmVjbGFpbWVkLiAqLworCXRtcGZzX2ZyZWVfZGlyZW50KHRtcCwgZGUsIFRSVUUpOworCisJaWYg
KG5vZGUtPnRuX2xpbmtzID4gMCkgeworCSAgICAgICAgVE1QRlNfTk9ERV9MT0NLKG5vZGUpOwor
CQlub2RlLT50bl9zdGF0dXMgfD0gVE1QRlNfTk9ERV9BQ0NFU1NFRCB8IFRNUEZTX05PREVfQ0hB
TkdFRCB8IFwKKwkgICAgICAgICAgICAgICAgVE1QRlNfTk9ERV9NT0RJRklFRDsKKwkgICAgICAg
IFRNUEZTX05PREVfVU5MT0NLKG5vZGUpOworCX0KKworCWNhY2hlX3NldHVucmVzb2x2ZWQodi0+
YV9uY2gpOworCWNhY2hlX3NldHZwKHYtPmFfbmNoLCBOVUxMKTsKKwljYWNoZV9pbnZhbF92cCh2
cCwgQ0lOVl9ERVNUUk9ZKTsKKwllcnJvciA9IDA7CisKKworb3V0OgorCXZuX3VubG9jayh2cCk7
CisJdm5fdW5sb2NrKGR2cCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLworCitzdGF0aWMgaW50Cit0bXBmc19ubGluayhzdHJ1Y3Qgdm9wX25saW5rX2FyZ3MgKnYp
Cit7CisJc3RydWN0IHZub2RlICpkdnAgPSB2LT5hX2R2cDsKKwlzdHJ1Y3Qgdm5vZGUgKnZwID0g
di0+YV92cDsKKwlzdHJ1Y3QgbmFtZWNhY2hlICpuY3AgPSB2LT5hX25jaC0+bmNwOworCisJaW50
IGVycm9yOworCXN0cnVjdCB0bXBmc19kaXJlbnQgKmRlOworCXN0cnVjdCB0bXBmc19ub2RlICpu
b2RlOworCisJdm5fbG9jayhkdnAsIExLX0VYQ0xVU0lWRSB8IExLX1JFVFJZKTsKKwl2bl9sb2Nr
KHZwLCBMS19FWENMVVNJVkUgfCBMS19SRVRSWSk7CisKKworCUtLQVNTRVJUKGR2cCAhPSB2cCk7
IC8qIFhYWCBXaGVuIGNhbiB0aGlzIGJlIGZhbHNlPyAqLworCisJbm9kZSA9IFZQX1RPX1RNUEZT
X05PREUodnApOworCisJLyogWFhYOiBXaHkgYXJlbid0IHRoZSBmb2xsb3dpbmcgdHdvIHRlc3Rz
IGRvbmUgYnkgdGhlIGNhbGxlcj8gKi8KKworCS8qIEhhcmQgbGlua3Mgb2YgZGlyZWN0b3JpZXMg
YXJlIGZvcmJpZGRlbi4gKi8KKwlpZiAodnAtPnZfdHlwZSA9PSBWRElSKSB7CisJCWVycm9yID0g
RVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCS8qIENhbm5vdCBjcmVhdGUgY3Jvc3MtZGV2aWNl
IGxpbmtzLiAqLworCWlmIChkdnAtPnZfbW91bnQgIT0gdnAtPnZfbW91bnQpIHsKKwkJZXJyb3Ig
PSBFWERFVjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRW5zdXJlIHRoYXQgd2UgZG8gbm90IG92
ZXJmbG93IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5rcyBpbXBvc2VkCisJICogYnkgdGhlIHN5
c3RlbS4gKi8KKwlLS0FTU0VSVChub2RlLT50bl9saW5rcyA8PSBMSU5LX01BWCk7CisJaWYgKG5v
ZGUtPnRuX2xpbmtzID09IExJTktfTUFYKSB7CisJCWVycm9yID0gRU1MSU5LOworCQlnb3RvIG91
dDsKKwl9CisKKwkvKiBXZSBjYW5ub3QgY3JlYXRlIGxpbmtzIG9mIGZpbGVzIG1hcmtlZCBpbW11
dGFibGUgb3IgYXBwZW5kLW9ubHkuICovCisJaWYgKG5vZGUtPnRuX2ZsYWdzICYgKElNTVVUQUJM
RSB8IEFQUEVORCkpIHsKKwkJZXJyb3IgPSBFUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyog
QWxsb2NhdGUgYSBuZXcgZGlyZWN0b3J5IGVudHJ5IHRvIHJlcHJlc2VudCB0aGUgbm9kZS4gKi8K
KwllcnJvciA9IHRtcGZzX2FsbG9jX2RpcmVudChWRlNfVE9fVE1QRlModnAtPnZfbW91bnQpLCBu
b2RlLAorCSAgICBuY3AtPm5jX25hbWUsIG5jcC0+bmNfbmxlbiwgJmRlKTsKKwlpZiAoZXJyb3Ig
IT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKiBJbnNlcnQgdGhlIG5ldyBkaXJlY3RvcnkgZW50cnkg
aW50byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5LiAqLworCXRtcGZzX2Rpcl9hdHRhY2goZHZw
LCBkZSk7CisKKwkvKiB2cCBsaW5rIGNvdW50IGhhcyBjaGFuZ2VkLCBzbyB1cGRhdGUgbm9kZSB0
aW1lcy4gKi8KKworCVRNUEZTX05PREVfTE9DSyhub2RlKTsKKwlub2RlLT50bl9zdGF0dXMgfD0g
VE1QRlNfTk9ERV9DSEFOR0VEOworCVRNUEZTX05PREVfVU5MT0NLKG5vZGUpOworCXRtcGZzX3Vw
ZGF0ZSh2cCk7CisKKwljYWNoZV9zZXR1bnJlc29sdmVkKHYtPmFfbmNoKTsKKwljYWNoZV9zZXR2
cCh2LT5hX25jaCwgdnApOworCWVycm9yID0gMDsKKworb3V0OgorCXZuX3VubG9jayh2cCk7CisJ
dm5fdW5sb2NrKGR2cCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LworCitzdGF0aWMgaW50Cit0bXBmc19ucmVuYW1lKHN0cnVjdCB2b3BfbnJlbmFtZV9hcmdzICp2
KQoreworCXN0cnVjdCB2bm9kZSAqZmR2cCA9IHYtPmFfZmR2cDsKKwlzdHJ1Y3QgbmFtZWNhY2hl
ICpmbmNwID0gdi0+YV9mbmNoLT5uY3A7CisJc3RydWN0IHZub2RlICpmdnAgPSBmbmNwLT5uY192
cDsKKwlzdHJ1Y3Qgdm5vZGUgKnRkdnAgPSB2LT5hX3RkdnA7CisJc3RydWN0IG5hbWVjYWNoZSAq
dG5jcCA9IHYtPmFfdG5jaC0+bmNwOworCXN0cnVjdCB2bm9kZSAqdHZwID0gdG5jcC0+bmNfdnA7
CisKKwljaGFyICpuZXduYW1lOworCWludCBlcnJvcjsKKwlzdHJ1Y3QgdG1wZnNfZGlyZW50ICpk
ZTsKKwlzdHJ1Y3QgdG1wZnNfbW91bnQgKnRtcDsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqZmRub2Rl
OworCXN0cnVjdCB0bXBmc19ub2RlICpmbm9kZTsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqdG5vZGU7
CisJc3RydWN0IHRtcGZzX25vZGUgKnRkbm9kZTsKKworCXZuX2xvY2sodGR2cCwgTEtfRVhDTFVT
SVZFIHwgTEtfUkVUUlkpOworCWlmKHR2cCAhPSBOVUxMICYmIHRkdnAgIT0gdHZwKQorCQl2bl9s
b2NrKHR2cCwgTEtfRVhDTFVTSVZFIHwgTEtfUkVUUlkpOworCisgIAl0bm9kZSA9ICh0dnAgPT0g
TlVMTCkgPyBOVUxMIDogVlBfVE9fVE1QRlNfTk9ERSh0dnApOworCisJLyogRGlzYWxsb3cgY3Jv
c3MtZGV2aWNlIHJlbmFtZXMuCisJICogWFhYIFdoeSBpc24ndCB0aGlzIGRvbmUgYnkgdGhlIGNh
bGxlcj8gKi8KKwlpZiAoZnZwLT52X21vdW50ICE9IHRkdnAtPnZfbW91bnQgfHwKKwkgICAgKHR2
cCAhPSBOVUxMICYmIGZ2cC0+dl9tb3VudCAhPSB0dnAtPnZfbW91bnQpKSB7CisJCWVycm9yID0g
RVhERVY7CisJCWdvdG8gb3V0OworCX0KKworCXRtcCA9IFZGU19UT19UTVBGUyh0ZHZwLT52X21v
dW50KTsKKwl0ZG5vZGUgPSBWUF9UT19UTVBGU19ESVIodGR2cCk7CisKKwkvKiBJZiBzb3VyY2Ug
YW5kIHRhcmdldCBhcmUgdGhlIHNhbWUgZmlsZSwgdGhlcmUgaXMgbm90aGluZyB0byBkby4gKi8K
KwlpZiAoZnZwID09IHR2cCkgeworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCS8q
IElmIHdlIG5lZWQgdG8gbW92ZSB0aGUgZGlyZWN0b3J5IGJldHdlZW4gZW50cmllcywgbG9jayB0
aGUKKwkgKiBzb3VyY2Ugc28gdGhhdCB3ZSBjYW4gc2FmZWx5IG9wZXJhdGUgb24gaXQuICovCisJ
aWYgKHRkdnAgIT0gZmR2cCkgeworCQllcnJvciA9IHZuX2xvY2soZmR2cCwgTEtfRVhDTFVTSVZF
IHwgTEtfUkVUUlkpOworCQlpZiAoZXJyb3IgIT0gMCkKKwkJCWdvdG8gb3V0OworCX0KKwlmZG5v
ZGUgPSBWUF9UT19UTVBGU19ESVIoZmR2cCk7CisJZm5vZGUgPSBWUF9UT19UTVBGU19OT0RFKGZ2
cCk7CisJZGUgPSB0bXBmc19kaXJfbG9va3VwKGZkbm9kZSwgZm5vZGUsIGZuY3ApOworCisJLyog
QXZvaWQgbWFuaXB1bGF0aW5nICcuJyBhbmQgJy4uJyBlbnRyaWVzLiAqLworCWlmIChkZSA9PSBO
VUxMKSB7CisJCWVycm9yID0gRU5PRU5UOworCQlnb3RvIG91dF9sb2NrZWQ7CisJfQorCUtLQVNT
RVJUKGRlLT50ZF9ub2RlID09IGZub2RlKTsKKworCS8qIElmIHJlLW5hbWluZyBhIGRpcmVjdG9y
eSB0byBhbm90aGVyIHByZWV4aXN0aW5nIGRpcmVjdG9yeQorCSAqIGVuc3VyZSB0aGF0IHRoZSB0
YXJnZXQgZGlyZWN0b3J5IGlzIGVtcHR5IHNvIHRoYXQgaXRzCisJICogcmVtb3ZhbCBjYXVzZXMg
bm8gc2lkZSBlZmZlY3RzLgorCSAqIEtlcm5fcmVuYW1lIGd1cmFudGVlcyB0aGUgZGVzdGluYXRp
b24gdG8gYmUgYSBkaXJlY3RvcnkKKwkgKiBpZiB0aGUgc291cmNlIGlzIG9uZS4gKi8KKwlpZiAo
dHZwICE9IE5VTEwpIHsKKwkJS0tBU1NFUlQodG5vZGUgIT0gTlVMTCk7CisKKwkJaWYgKCh0bm9k
ZS0+dG5fZmxhZ3MgJiAoTk9VTkxJTksgfCBJTU1VVEFCTEUgfCBBUFBFTkQpKSB8fAorCQkgICAg
KHRkbm9kZS0+dG5fZmxhZ3MgJiAoQVBQRU5EIHwgSU1NVVRBQkxFKSkpIHsKKwkJCWVycm9yID0g
RVBFUk07CisJCQlnb3RvIG91dF9sb2NrZWQ7CisJCX0KKworCQlpZiAoZm5vZGUtPnRuX3R5cGUg
PT0gVkRJUiAmJiB0bm9kZS0+dG5fdHlwZSA9PSBWRElSKSB7CisJCQlpZiAodG5vZGUtPnRuX3Np
emUgPiAwKSB7CisJCQkJZXJyb3IgPSBFTk9URU1QVFk7CisJCQkJZ290byBvdXRfbG9ja2VkOwor
CQkJfQorCQl9IGVsc2UgaWYgKGZub2RlLT50bl90eXBlID09IFZESVIgJiYgdG5vZGUtPnRuX3R5
cGUgIT0gVkRJUikgeworCQkJZXJyb3IgPSBFTk9URElSOworCQkJZ290byBvdXRfbG9ja2VkOwor
CQl9IGVsc2UgaWYgKGZub2RlLT50bl90eXBlICE9IFZESVIgJiYgdG5vZGUtPnRuX3R5cGUgPT0g
VkRJUikgeworCQkJZXJyb3IgPSBFSVNESVI7CisJCQlnb3RvIG91dF9sb2NrZWQ7CisJCX0gZWxz
ZSB7CisJCQlLS0FTU0VSVChmbm9kZS0+dG5fdHlwZSAhPSBWRElSICYmCisJCQkJdG5vZGUtPnRu
X3R5cGUgIT0gVkRJUik7CisJCX0KKwl9CisKKwlpZiAoKGZub2RlLT50bl9mbGFncyAmIChOT1VO
TElOSyB8IElNTVVUQUJMRSB8IEFQUEVORCkpCisJICAgIHx8IChmZG5vZGUtPnRuX2ZsYWdzICYg
KEFQUEVORCB8IElNTVVUQUJMRSkpKSB7CisJCWVycm9yID0gRVBFUk07CisJCWdvdG8gb3V0X2xv
Y2tlZDsKKwl9CisKKwkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgdG8gaG9s
ZCB0aGUgbmV3IG5hbWUsIGlmIGl0CisJICogaGFzIHRvIGJlIGNoYW5nZWQuICovCisJaWYgKGZu
Y3AtPm5jX25sZW4gIT0gdG5jcC0+bmNfbmxlbiB8fAorCSAgICBiY21wKGZuY3AtPm5jX25hbWUs
IHRuY3AtPm5jX25hbWUsIGZuY3AtPm5jX25sZW4pICE9IDApIHsKKwkJbmV3bmFtZSA9IGttYWxs
b2ModG5jcC0+bmNfbmxlbiwgTV9UTVBGU05BTUUsIE1fV0FJVE9LKTsKKwl9IGVsc2UKKwkJbmV3
bmFtZSA9IE5VTEw7CisKKwkvKiBJZiB0aGUgbm9kZSBpcyBiZWluZyBtb3ZlZCB0byBhbm90aGVy
IGRpcmVjdG9yeSwgd2UgaGF2ZSB0byBkbworCSAqIHRoZSBtb3ZlLiAqLworCWlmIChmZG5vZGUg
IT0gdGRub2RlKSB7CisJCS8qIEluIGNhc2Ugd2UgYXJlIG1vdmluZyBhIGRpcmVjdG9yeSwgd2Ug
aGF2ZSB0byBhZGp1c3QgaXRzCisJCSAqIHBhcmVudCB0byBwb2ludCB0byB0aGUgbmV3IHBhcmVu
dC4gKi8KKwkJaWYgKGRlLT50ZF9ub2RlLT50bl90eXBlID09IFZESVIpIHsKKwkJCXN0cnVjdCB0
bXBmc19ub2RlICpuOworCisJCQkvKiBFbnN1cmUgdGhlIHRhcmdldCBkaXJlY3RvcnkgaXMgbm90
IGEgY2hpbGQgb2YgdGhlCisJCQkgKiBkaXJlY3RvcnkgYmVpbmcgbW92ZWQuICBPdGhlcndpc2Us
IHdlJ2QgZW5kIHVwCisJCQkgKiB3aXRoIHN0YWxlIG5vZGVzLiAqLworCQkJbiA9IHRkbm9kZTsK
KwkJCS8qIFRNUEZTX0xPQ0sgZ2FyYW50aWVzIHRoYXQgbm8gbm9kZXMgYXJlIGZyZWVkIHdoaWxl
CisJCQkgKiB0cmF2ZXJzaW5nIHRoZSBsaXN0LiBOb2RlcyBjYW4gb25seSBiZSBtYXJrZWQgYXMK
KwkJCSAqIHJlbW92ZWQ6IHRuX3BhcmVudCA9PSBOVUxMLiAqLworCQkJVE1QRlNfTE9DSyh0bXAp
OworCQkJVE1QRlNfTk9ERV9MT0NLKG4pOworCQkJd2hpbGUgKG4gIT0gbi0+dG5fZGlyLnRuX3Bh
cmVudCkgeworCQkJCXN0cnVjdCB0bXBmc19ub2RlICpwYXJlbnQ7CisKKwkJCQlpZiAobiA9PSBm
bm9kZSkgeworCQkJCQlUTVBGU19OT0RFX1VOTE9DSyhuKTsKKwkJCQkJVE1QRlNfVU5MT0NLKHRt
cCk7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQlpZiAobmV3bmFtZSAhPSBOVUxMKQorCQkJ
CQkJICAgIGtmcmVlKG5ld25hbWUsIE1fVE1QRlNOQU1FKTsKKwkJCQkJZ290byBvdXRfbG9ja2Vk
OworCQkJCX0KKwkJCQlwYXJlbnQgPSBuLT50bl9kaXIudG5fcGFyZW50OworCQkJCWlmIChwYXJl
bnQgPT0gTlVMTCkgeworCQkJCQluID0gTlVMTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCVRN
UEZTX05PREVfTE9DSyhwYXJlbnQpOworCQkJCWlmIChwYXJlbnQtPnRuX2Rpci50bl9wYXJlbnQg
PT0gTlVMTCkgeworCQkJCQlUTVBGU19OT0RFX1VOTE9DSyhwYXJlbnQpOworCQkJCQluID0gTlVM
TDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW4gPSBwYXJlbnQ7CisJCQl9CisJCQlUTVBGU19O
T0RFX1VOTE9DSyhuKTsKKwkJCVRNUEZTX1VOTE9DSyh0bXApOworCQkJaWYgKG4gPT0gTlVMTCkg
eworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWlmIChuZXduYW1lICE9IE5VTEwpCisJCQkJCSAg
ICBrZnJlZShuZXduYW1lLCBNX1RNUEZTTkFNRSk7CisJCQkJZ290byBvdXRfbG9ja2VkOworCQkJ
fQorCisJCQkvKiBBZGp1c3QgdGhlIHBhcmVudCBwb2ludGVyLiAqLworCQkJVE1QRlNfVkFMSURB
VEVfRElSKGZub2RlKTsKKwkJCVRNUEZTX05PREVfTE9DSyhkZS0+dGRfbm9kZSk7CisJCQlkZS0+
dGRfbm9kZS0+dG5fZGlyLnRuX3BhcmVudCA9IHRkbm9kZTsKKworCQkJLyogQXMgYSByZXN1bHQg
b2YgY2hhbmdpbmcgdGhlIHRhcmdldCBvZiB0aGUgJy4uJworCQkJICogZW50cnksIHRoZSBsaW5r
IGNvdW50IG9mIHRoZSBzb3VyY2UgYW5kIHRhcmdldAorCQkJICogZGlyZWN0b3JpZXMgaGFzIHRv
IGJlIGFkanVzdGVkLiAqLworCQkJVE1QRlNfTk9ERV9MT0NLKHRkbm9kZSk7CisJCQlUTVBGU19B
U1NFUlRfTE9DS0VEKHRkbm9kZSk7CisJCQlUTVBGU19OT0RFX0xPQ0soZmRub2RlKTsKKwkJCVRN
UEZTX0FTU0VSVF9MT0NLRUQoZmRub2RlKTsKKworCQkJdGRub2RlLT50bl9saW5rcysrOworCQkJ
ZmRub2RlLT50bl9saW5rcy0tOworCisJCQlUTVBGU19OT0RFX1VOTE9DSyhmZG5vZGUpOworCQkJ
VE1QRlNfTk9ERV9VTkxPQ0sodGRub2RlKTsKKwkJCVRNUEZTX05PREVfVU5MT0NLKGRlLT50ZF9u
b2RlKTsKKwkJfQorCisJCS8qIERvIHRoZSBtb3ZlOiBqdXN0IHJlbW92ZSB0aGUgZW50cnkgZnJv
bSB0aGUgc291cmNlIGRpcmVjdG9yeQorCQkgKiBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIHRhcmdl
dCBvbmUuICovCisJCXRtcGZzX2Rpcl9kZXRhY2goZmR2cCwgZGUpOworCQl0bXBmc19kaXJfYXR0
YWNoKHRkdnAsIGRlKTsKKwl9CisKKwkvKiBJZiB0aGUgbmFtZSBoYXMgY2hhbmdlZCwgd2UgbmVl
ZCB0byBtYWtlIGl0IGVmZmVjdGl2ZSBieSBjaGFuZ2luZworCSAqIGl0IGluIHRoZSBkaXJlY3Rv
cnkgZW50cnkuICovCisJaWYgKG5ld25hbWUgIT0gTlVMTCkgeworCisJCWtmcmVlKGRlLT50ZF9u
YW1lLCBNX1RNUEZTTkFNRSk7CisJCWRlLT50ZF9uYW1lbGVuID0gKHVpbnQxNl90KXRuY3AtPm5j
X25sZW47CisJCWJjb3B5KHRuY3AtPm5jX25hbWUsIG5ld25hbWUsIHRuY3AtPm5jX25sZW4pOwor
CQluZXduYW1lW3RuY3AtPm5jX25sZW5dID0gJ1wwJzsKKwkJZGUtPnRkX25hbWUgPSBuZXduYW1l
OworCisJCVRNUEZTX05PREVfTE9DSyh0ZG5vZGUpOworCQlUTVBGU19OT0RFX0xPQ0soZmRub2Rl
KTsKKworCQlmbm9kZS0+dG5fc3RhdHVzIHw9IFRNUEZTX05PREVfQ0hBTkdFRDsKKwkJdGRub2Rl
LT50bl9zdGF0dXMgfD0gVE1QRlNfTk9ERV9NT0RJRklFRDsKKworCQlUTVBGU19OT0RFX1VOTE9D
SyhmZG5vZGUpOworCQlUTVBGU19OT0RFX1VOTE9DSyh0ZG5vZGUpOworCX0KKworCS8qIElmIHdl
IGFyZSBvdmVyd3JpdGluZyBhbiBlbnRyeSwgd2UgaGF2ZSB0byByZW1vdmUgdGhlIG9sZCBvbmUK
KwkgKiBmcm9tIHRoZSB0YXJnZXQgZGlyZWN0b3J5LiAqLworCWlmICh0dnAgIT0gTlVMTCkgewor
CQkvKiBSZW1vdmUgdGhlIG9sZCBlbnRyeSBmcm9tIHRoZSB0YXJnZXQgZGlyZWN0b3J5LiAqLwor
CQlkZSA9IHRtcGZzX2Rpcl9sb29rdXAodGRub2RlLCB0bm9kZSwgdG5jcCk7CisJCXRtcGZzX2Rp
cl9kZXRhY2godGR2cCwgZGUpOworCisJCS8qIEZyZWUgdGhlIGRpcmVjdG9yeSBlbnRyeSB3ZSBq
dXN0IGRlbGV0ZWQuICBOb3RlIHRoYXQgdGhlCisJCSAqIG5vZGUgcmVmZXJyZWQgYnkgaXQgd2ls
bCBub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGUgdm5vZGUgaXMKKwkJICogcmVhbGx5IHJlY2xhaW1l
ZC4gKi8KKwkJdG1wZnNfZnJlZV9kaXJlbnQoVkZTX1RPX1RNUEZTKHR2cC0+dl9tb3VudCksIGRl
LCBUUlVFKTsKKworCQljYWNoZV9pbnZhbF92cCh0dnAsIENJTlZfREVTVFJPWSk7CisJfQorCisJ
Y2FjaGVfcmVuYW1lKHYtPmFfZm5jaCwgdi0+YV90bmNoKTsKKwllcnJvciA9IDA7CisKK291dF9s
b2NrZWQ6CisJaWYgKGZkbm9kZSAhPSB0ZG5vZGUpCisJCXZuX3VubG9jayhmZHZwKTsKKworb3V0
OgorCS8qIFJlbGVhc2UgdGFyZ2V0IG5vZGVzLiAqLworCS8qIFhYWDogSSBkb24ndCB1bmRlcnN0
YW5kIHdoZW4gdGR2cCBjYW4gYmUgdGhlIHNhbWUgYXMgdHZwLCBidXQKKwkgKiBvdGhlciBjb2Rl
IHRha2VzIGNhcmUgb2YgdGhpcy4uLiAqLworCWlmICh0ZHZwID09IHR2cCkKKwkJdnJlbGUodGR2
cCk7CisJZWxzZSB7CisJCWlmICh0dnAgIT0gTlVMTCkKKwkJCXZuX3VubG9jayh0dnApOworCQl2
bl91bmxvY2sodGR2cCk7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCisvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KKworc3RhdGljIGludAordG1wZnNfbm1rZGlyKHN0cnVjdCB2b3Bfbm1rZGlyX2FyZ3Mg
KnYpCit7CisJc3RydWN0IHZub2RlICpkdnAgPSB2LT5hX2R2cDsKKwlzdHJ1Y3Qgdm5vZGUgKip2
cHAgPSB2LT5hX3ZwcDsKKwlzdHJ1Y3QgbmFtZWNhY2hlICpuY3AgPSB2LT5hX25jaC0+bmNwOwor
CXN0cnVjdCB2YXR0ciAqdmFwID0gdi0+YV92YXA7CisJc3RydWN0IHVjcmVkICpjcmVkID0gdi0+
YV9jcmVkOworCWludCBlcnJvcjsKKworCUtLQVNTRVJUKHZhcC0+dmFfdHlwZSA9PSBWRElSKTsK
KworCXZuX2xvY2soZHZwLCBMS19FWENMVVNJVkUgfCBMS19SRVRSWSk7CisJZXJyb3IgPSB0bXBm
c19hbGxvY19maWxlKGR2cCwgdnBwLCB2YXAsIG5jcCwgY3JlZCwgTlVMTCk7CisJaWYgKGVycm9y
ID09IDApIHsKKwkJY2FjaGVfc2V0dW5yZXNvbHZlZCh2LT5hX25jaCk7CisJCWNhY2hlX3NldHZw
KHYtPmFfbmNoLCAqdnBwKTsKKwl9CisJdm5fdW5sb2NrKGR2cCk7CisJCisJcmV0dXJuIGVycm9y
OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludAordG1wZnNfbnJtZGlyKHN0
cnVjdCB2b3BfbnJtZGlyX2FyZ3MgKnYpCit7CisJc3RydWN0IHZub2RlICpkdnAgPSB2LT5hX2R2
cDsKKwlzdHJ1Y3QgbmFtZWNhY2hlICpuY3AgPSB2LT5hX25jaC0+bmNwOworCXN0cnVjdCB2bm9k
ZSAqdnAgPSBuY3AtPm5jX3ZwOworCisJaW50IGVycm9yOworCXN0cnVjdCB0bXBmc19kaXJlbnQg
KmRlOworCXN0cnVjdCB0bXBmc19tb3VudCAqdG1wOworCXN0cnVjdCB0bXBmc19ub2RlICpkbm9k
ZTsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKworCXZuX2xvY2soZHZwLCBMS19FWENMVVNJ
VkUgfCBMS19SRVRSWSk7CisJdm5fbG9jayh2cCwgTEtfRVhDTFVTSVZFIHwgTEtfUkVUUlkpOwor
CisJdG1wID0gVkZTX1RPX1RNUEZTKGR2cC0+dl9tb3VudCk7CisJZG5vZGUgPSBWUF9UT19UTVBG
U19ESVIoZHZwKTsKKwlub2RlID0gVlBfVE9fVE1QRlNfRElSKHZwKTsKKworCS8qIERpcmVjdG9y
aWVzIHdpdGggbW9yZSB0aGFuIHR3byBlbnRyaWVzICgnLicgYW5kICcuLicpIGNhbm5vdCBiZQor
CSAqIHJlbW92ZWQuICovCisJIGlmIChub2RlLT50bl9zaXplID4gMCkgeworCQkgZXJyb3IgPSBF
Tk9URU1QVFk7CisJCSBnb3RvIG91dDsKKwkgfQorCisJaWYgKChkbm9kZS0+dG5fZmxhZ3MgJiBB
UFBFTkQpCisJICAgIHx8IChub2RlLT50bl9mbGFncyAmIChOT1VOTElOSyB8IElNTVVUQUJMRSB8
IEFQUEVORCkpKSB7CisJCWVycm9yID0gRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCS8qIFRo
aXMgaW52YXJpYW50IGhvbGRzIG9ubHkgaWYgd2UgYXJlIG5vdCB0cnlpbmcgdG8gcmVtb3ZlICIu
LiIuCisJICAqIFdlIGNoZWNrZWQgZm9yIHRoYXQgYWJvdmUgc28gdGhpcyBpcyBzYWZlIG5vdy4g
Ki8KKwlLS0FTU0VSVChub2RlLT50bl9kaXIudG5fcGFyZW50ID09IGRub2RlKTsKKworCS8qIEdl
dCB0aGUgZGlyZWN0b3J5IGVudHJ5IGFzc29jaWF0ZWQgd2l0aCBub2RlICh2cCkuICBUaGlzIHdh
cworCSAqIGZpbGxlZCBieSB0bXBmc19sb29rdXAgd2hpbGUgbG9va2luZyB1cCB0aGUgZW50cnku
ICovCisJZGUgPSB0bXBmc19kaXJfbG9va3VwKGRub2RlLCBub2RlLCBuY3ApOworCUtLQVNTRVJU
KFRNUEZTX0RJUkVOVF9NQVRDSEVTKGRlLAorCSAgICBuY3AtPm5jX25hbWUsCisJICAgIG5jcC0+
bmNfbmxlbikpOworCisJLyogQ2hlY2sgZmxhZ3MgdG8gc2VlIGlmIHdlIGFyZSBhbGxvd2VkIHRv
IHJlbW92ZSB0aGUgZGlyZWN0b3J5LiAqLworCWlmIChkbm9kZS0+dG5fZmxhZ3MgJiBBUFBFTkQK
KwkJfHwgbm9kZS0+dG5fZmxhZ3MgJiAoTk9VTkxJTksgfCBJTU1VVEFCTEUgfCBBUFBFTkQpKSB7
CisJCWVycm9yID0gRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCisJLyogRGV0YWNoIHRoZSBk
aXJlY3RvcnkgZW50cnkgZnJvbSB0aGUgZGlyZWN0b3J5IChkbm9kZSkuICovCisJdG1wZnNfZGly
X2RldGFjaChkdnAsIGRlKTsKKworCS8qIE5vIHZub2RlIHNob3VsZCBiZSBhbGxvY2F0ZWQgZm9y
IHRoaXMgZW50cnkgZnJvbSB0aGlzIHBvaW50ICovCisJVE1QRlNfTk9ERV9MT0NLKG5vZGUpOwor
CVRNUEZTX0FTU0VSVF9FTE9DS0VEKG5vZGUpOworCVRNUEZTX05PREVfTE9DSyhkbm9kZSk7CisJ
VE1QRlNfQVNTRVJUX0VMT0NLRUQoZG5vZGUpOworCisJbm9kZS0+dG5fbGlua3MtLTsKKwlub2Rl
LT50bl9kaXIudG5fcGFyZW50ID0gTlVMTDsKKwlub2RlLT50bl9zdGF0dXMgfD0gVE1QRlNfTk9E
RV9BQ0NFU1NFRCB8IFRNUEZTX05PREVfQ0hBTkdFRCB8IFwKKwkgICAgVE1QRlNfTk9ERV9NT0RJ
RklFRDsKKworCWRub2RlLT50bl9saW5rcy0tOworCWRub2RlLT50bl9zdGF0dXMgfD0gVE1QRlNf
Tk9ERV9BQ0NFU1NFRCB8IFwKKwkgICAgVE1QRlNfTk9ERV9DSEFOR0VEIHwgVE1QRlNfTk9ERV9N
T0RJRklFRDsKKworCVRNUEZTX05PREVfVU5MT0NLKGRub2RlKTsKKwlUTVBGU19OT0RFX1VOTE9D
Syhub2RlKTsKKworCS8qIEZyZWUgdGhlIGRpcmVjdG9yeSBlbnRyeSB3ZSBqdXN0IGRlbGV0ZWQu
ICBOb3RlIHRoYXQgdGhlIG5vZGUKKwkgKiByZWZlcnJlZCBieSBpdCB3aWxsIG5vdCBiZSByZW1v
dmVkIHVudGlsIHRoZSB2bm9kZSBpcyByZWFsbHkKKwkgKiByZWNsYWltZWQuICovCisJdG1wZnNf
ZnJlZV9kaXJlbnQodG1wLCBkZSwgVFJVRSk7CisKKwkvKiBSZWxlYXNlIHRoZSBkZWxldGVkIHZu
b2RlICh3aWxsIGRlc3Ryb3kgdGhlIG5vZGUsIG5vdGlmeQorCSAqIGludGVyZXN0ZWQgcGFydGll
cyBhbmQgY2xlYW4gaXQgZnJvbSB0aGUgY2FjaGUpLiAqLworCisJVE1QRlNfTk9ERV9MT0NLKGRu
b2RlKTsKKwlkbm9kZS0+dG5fc3RhdHVzIHw9IFRNUEZTX05PREVfQ0hBTkdFRDsKKwlUTVBGU19O
T0RFX1VOTE9DSyhkbm9kZSk7CisJdG1wZnNfdXBkYXRlKGR2cCk7CisKKwljYWNoZV9zZXR1bnJl
c29sdmVkKHYtPmFfbmNoKTsKKwljYWNoZV9zZXR2cCh2LT5hX25jaCwgTlVMTCk7CisJY2FjaGVf
aW52YWxfdnAodnAsIENJTlZfREVTVFJPWSk7CisJZXJyb3IgPSAwOworCitvdXQ6CisJdm5fdW5s
b2NrKHZwKTsKKwl2bl91bmxvY2soZHZwKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQKK3RtcGZzX25zeW1saW5rKHN0cnVjdCB2b3BfbnN5
bWxpbmtfYXJncyAqdikKK3sKKwlzdHJ1Y3Qgdm5vZGUgKmR2cCA9IHYtPmFfZHZwOworCXN0cnVj
dCB2bm9kZSAqKnZwcCA9IHYtPmFfdnBwOworCXN0cnVjdCBuYW1lY2FjaGUgKm5jcCA9IHYtPmFf
bmNoLT5uY3A7CisJc3RydWN0IHZhdHRyICp2YXAgPSB2LT5hX3ZhcDsKKwlzdHJ1Y3QgdWNyZWQg
KmNyZWQgPSB2LT5hX2NyZWQ7CisJY2hhciAqdGFyZ2V0ID0gdi0+YV90YXJnZXQ7CisJaW50IGVy
cm9yOworCisJdm5fbG9jayhkdnAsIExLX0VYQ0xVU0lWRSB8IExLX1JFVFJZKTsKKwl2YXAtPnZh
X3R5cGUgPSBWTE5LOworCWVycm9yID0gdG1wZnNfYWxsb2NfZmlsZShkdnAsIHZwcCwgdmFwLCBu
Y3AsIGNyZWQsIHRhcmdldCk7CisJaWYgKGVycm9yID09IDApIHsKKwkJY2FjaGVfc2V0dW5yZXNv
bHZlZCh2LT5hX25jaCk7CisJCWNhY2hlX3NldHZwKHYtPmFfbmNoLCAqdnBwKTsKKwl9CisJdm5f
dW5sb2NrKGR2cCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor
CitzdGF0aWMgaW50Cit0bXBmc19yZWFkZGlyKHN0cnVjdCB2b3BfcmVhZGRpcl9hcmdzICp2KQor
eworCXN0cnVjdCB2bm9kZSAqdnAgPSB2LT5hX3ZwOworCXN0cnVjdCB1aW8gKnVpbyA9IHYtPmFf
dWlvOworCWludCAqZW9mZmxhZyA9IHYtPmFfZW9mZmxhZzsKKwlvZmZfdCAqKmNvb2tpZXMgPSB2
LT5hX2Nvb2tpZXM7CisJaW50ICpuY29va2llcyA9IHYtPmFfbmNvb2tpZXM7CisKKwlpbnQgZXJy
b3I7CisJb2ZmX3Qgc3RhcnRvZmY7CisJb2ZmX3QgY250ID0gMDsKKwlzdHJ1Y3QgdG1wZnNfbm9k
ZSAqbm9kZTsKKworCS8qIFRoaXMgb3BlcmF0aW9uIG9ubHkgbWFrZXMgc2Vuc2Ugb24gZGlyZWN0
b3J5IG5vZGVzLiAqLworCWlmICh2cC0+dl90eXBlICE9IFZESVIpCisJCXJldHVybiBFTk9URElS
OworCisJdm5fbG9jayh2cCwgTEtfRVhDTFVTSVZFIHwgTEtfUkVUUlkpOworCisJbm9kZSA9IFZQ
X1RPX1RNUEZTX0RJUih2cCk7CisJc3RhcnRvZmYgPSB1aW8tPnVpb19vZmZzZXQ7CisKKwlpZiAo
dWlvLT51aW9fb2Zmc2V0ID09IFRNUEZTX0RJUkNPT0tJRV9ET1QpIHsKKwkJZXJyb3IgPSB0bXBm
c19kaXJfZ2V0ZG90ZGVudChub2RlLCB1aW8pOworCQlpZiAoZXJyb3IgIT0gMCkKKwkJCWdvdG8g
b3V0b2s7CisJCWNudCsrOworCX0KKworCWlmICh1aW8tPnVpb19vZmZzZXQgPT0gVE1QRlNfRElS
Q09PS0lFX0RPVERPVCkgeworCQllcnJvciA9IHRtcGZzX2Rpcl9nZXRkb3Rkb3RkZW50KG5vZGUs
IHVpbyk7CisJCWlmIChlcnJvciAhPSAwKQorCQkJZ290byBvdXRvazsKKwkJY250Kys7CisJfQor
CisJZXJyb3IgPSB0bXBmc19kaXJfZ2V0ZGVudHMobm9kZSwgdWlvLCAmY250KTsKKworb3V0b2s6
CisJS0tBU1NFUlQoZXJyb3IgPj0gLTEpOworCisJaWYgKGVycm9yID09IC0xKQorCQllcnJvciA9
IDA7CisKKwlpZiAoZW9mZmxhZyAhPSBOVUxMKQorCQkqZW9mZmxhZyA9CisJCSAgICAoZXJyb3Ig
PT0gMCAmJiB1aW8tPnVpb19vZmZzZXQgPT0gVE1QRlNfRElSQ09PS0lFX0VPRik7CisKKwkvKiBV
cGRhdGUgTkZTLXJlbGF0ZWQgdmFyaWFibGVzLiAqLworCWlmIChlcnJvciA9PSAwICYmIGNvb2tp
ZXMgIT0gTlVMTCAmJiBuY29va2llcyAhPSBOVUxMKSB7CisJCW9mZl90IGk7CisJCW9mZl90IG9m
ZiA9IHN0YXJ0b2ZmOworCQlzdHJ1Y3QgdG1wZnNfZGlyZW50ICpkZSA9IE5VTEw7CisKKwkJKm5j
b29raWVzID0gY250OworCQkqY29va2llcyA9IGttYWxsb2MoY250ICogc2l6ZW9mKG9mZl90KSwg
TV9URU1QLCBNX1dBSVRPSyk7CisKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlL
S0FTU0VSVChvZmYgIT0gVE1QRlNfRElSQ09PS0lFX0VPRik7CisJCQlpZiAob2ZmID09IFRNUEZT
X0RJUkNPT0tJRV9ET1QpIHsKKwkJCQlvZmYgPSBUTVBGU19ESVJDT09LSUVfRE9URE9UOworCQkJ
fSBlbHNlIHsKKwkJCQlpZiAob2ZmID09IFRNUEZTX0RJUkNPT0tJRV9ET1RET1QpIHsKKwkJCQkJ
ZGUgPSBUQUlMUV9GSVJTVCgmbm9kZS0+dG5fZGlyLnRuX2RpcmhlYWQpOworCQkJCX0gZWxzZSBp
ZiAoZGUgIT0gTlVMTCkgeworCQkJCQlkZSA9IFRBSUxRX05FWFQoZGUsIHRkX2VudHJpZXMpOwor
CQkJCX0gZWxzZSB7CisJCQkJCWRlID0gdG1wZnNfZGlyX2xvb2t1cGJ5Y29va2llKG5vZGUsCisJ
CQkJCSAgICBvZmYpOworCQkJCQlLS0FTU0VSVChkZSAhPSBOVUxMKTsKKwkJCQkJZGUgPSBUQUlM
UV9ORVhUKGRlLCB0ZF9lbnRyaWVzKTsKKwkJCQl9CisJCQkJaWYgKGRlID09IE5VTEwpCisJCQkJ
CW9mZiA9IFRNUEZTX0RJUkNPT0tJRV9FT0Y7CisJCQkJZWxzZQorCQkJCQlvZmYgPSB0bXBmc19k
aXJjb29raWUoZGUpOworCQkJfQorCisJCQkoKmNvb2tpZXMpW2ldID0gb2ZmOworCQl9CisJCUtL
QVNTRVJUKHVpby0+dWlvX29mZnNldCA9PSBvZmYpOworCX0KKwl2bl91bmxvY2sodnApOworCisJ
cmV0dXJuIGVycm9yOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludAordG1w
ZnNfcmVhZGxpbmsoc3RydWN0IHZvcF9yZWFkbGlua19hcmdzICp2KQoreworCXN0cnVjdCB2bm9k
ZSAqdnAgPSB2LT5hX3ZwOworCXN0cnVjdCB1aW8gKnVpbyA9IHYtPmFfdWlvOworCisJaW50IGVy
cm9yOworCXN0cnVjdCB0bXBmc19ub2RlICpub2RlOworCisJS0tBU1NFUlQodWlvLT51aW9fb2Zm
c2V0ID09IDApOworCUtLQVNTRVJUKHZwLT52X3R5cGUgPT0gVkxOSyk7CisKKwlub2RlID0gVlBf
VE9fVE1QRlNfTk9ERSh2cCk7CisKKwllcnJvciA9IHVpb21vdmUobm9kZS0+dG5fbGluaywgTUlO
KG5vZGUtPnRuX3NpemUsIHVpby0+dWlvX3Jlc2lkKSwKKwkgICAgdWlvKTsKKwlUTVBGU19OT0RF
X0xPQ0sobm9kZSk7CisJbm9kZS0+dG5fc3RhdHVzIHw9IFRNUEZTX05PREVfQUNDRVNTRUQ7CisJ
VE1QRlNfTk9ERV9VTkxPQ0sobm9kZSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLworCitzdGF0aWMgaW50Cit0bXBmc19pbmFjdGl2ZShzdHJ1Y3Qgdm9wX2luYWN0
aXZlX2FyZ3MgKnYpCit7CisJc3RydWN0IHZub2RlICp2cCA9IHYtPmFfdnA7CisKKwlzdHJ1Y3Qg
dG1wZnNfbm9kZSAqbm9kZTsKKworCUtLQVNTRVJUKHZuX2lzbG9ja2VkKHZwKSk7CisKKwlub2Rl
ID0gVlBfVE9fVE1QRlNfTk9ERSh2cCk7CisKKwlUTVBGU19OT0RFX0xPQ0sobm9kZSk7CisJaWYg
KG5vZGUtPnRuX2xpbmtzID09IDAgJiYgCisJICAgIChub2RlLT50bl92cHN0YXRlICYgVE1QRlNf
Vk5PREVfRE9PTUVEKSkgeworCQlUTVBGU19OT0RFX1VOTE9DSyhub2RlKTsKKwkJdnJlY3ljbGUo
dnApOworCX0KKwllbHNlCisJCVRNUEZTX05PREVfVU5MT0NLKG5vZGUpOworCisJcmV0dXJuIDA7
Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbnQKK3RtcGZzX3JlY2xhaW0oc3RydWN0IHZv
cF9yZWNsYWltX2FyZ3MgKnYpCit7CisJc3RydWN0IHZub2RlICp2cCA9IHYtPmFfdnA7CisKKwlz
dHJ1Y3QgdG1wZnNfbW91bnQgKnRtcDsKKwlzdHJ1Y3QgdG1wZnNfbm9kZSAqbm9kZTsKKworCW5v
ZGUgPSBWUF9UT19UTVBGU19OT0RFKHZwKTsKKwl0bXAgPSBWRlNfVE9fVE1QRlModnAtPnZfbW91
bnQpOworCisJdm5fbG9jayh2cCwgTEtfRVhDTFVTSVZFIHwgTEtfUkVUUlkpOworCXRtcGZzX2Zy
ZWVfdnAodnApOworCisJLyogSWYgdGhlIG5vZGUgcmVmZXJlbmNlZCBieSB0aGlzIHZub2RlIHdh
cyBkZWxldGVkIGJ5IHRoZSB1c2VyLAorCSAqIHdlIG11c3QgZnJlZSBpdHMgYXNzb2NpYXRlZCBk
YXRhIHN0cnVjdHVyZXMgKG5vdyB0aGF0IHRoZSB2bm9kZQorCSAqIGlzIGJlaW5nIHJlY2xhaW1l
ZCkuICovCisJVE1QRlNfTk9ERV9MT0NLKG5vZGUpOworCWlmIChub2RlLT50bl9saW5rcyA9PSAw
ICYmCisJICAgIChub2RlLT50bl92cHN0YXRlICYgVE1QRlNfVk5PREVfQUxMT0NBVElORykgPT0g
MCkgeworCQlub2RlLT50bl92cHN0YXRlID0gVE1QRlNfVk5PREVfRE9PTUVEOworCQlUTVBGU19O
T0RFX1VOTE9DSyhub2RlKTsKKwkJdG1wZnNfZnJlZV9ub2RlKHRtcCwgbm9kZSk7CisJfQorCWVs
c2UKKwkJVE1QRlNfTk9ERV9VTkxPQ0sobm9kZSk7CisKKwl2bl91bmxvY2sodnApOworCisJS0tB
U1NFUlQodnAtPnZfZGF0YSA9PSBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCisKK3N0YXRpYyBpbnQKK3RtcGZzX3ByaW50KHN0cnVjdCB2b3BfcHJpbnRfYXJncyAq
dikKK3sKKwlzdHJ1Y3Qgdm5vZGUgKnZwID0gdi0+YV92cDsKKworCXN0cnVjdCB0bXBmc19ub2Rl
ICpub2RlOworCisJbm9kZSA9IFZQX1RPX1RNUEZTX05PREUodnApOworCisJa3ByaW50ZigidGFn
IFZUX1RNUEZTLCB0bXBmc19ub2RlICVwLCBmbGFncyAweCV4LCBsaW5rcyAlZFxuIiwKKwkgICAg
bm9kZSwgbm9kZS0+dG5fZmxhZ3MsIG5vZGUtPnRuX2xpbmtzKTsKKwlrcHJpbnRmKCJcdG1vZGUg
MCVvLCBvd25lciAlZCwgZ3JvdXAgJWQsIHNpemUgJWp1LCBzdGF0dXMgMHgleFxuIiwKKwkgICAg
bm9kZS0+dG5fbW9kZSwgbm9kZS0+dG5fdWlkLCBub2RlLT50bl9naWQsCisJICAgICh1aW50bWF4
X3Qpbm9kZS0+dG5fc2l6ZSwgbm9kZS0+dG5fc3RhdHVzKTsKKworCWlmICh2cC0+dl90eXBlID09
IFZGSUZPKQorCQlmaWZvX3ByaW50aW5mbyh2cCk7CisKKwlrcHJpbnRmKCJcbiIpOworCisJcmV0
dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50Cit0bXBmc19wYXRo
Y29uZihzdHJ1Y3Qgdm9wX3BhdGhjb25mX2FyZ3MgKnYpCit7CisJaW50IG5hbWUgPSB2LT5hX25h
bWU7CisJcmVnaXN0ZXJfdCAqcmV0dmFsID0gdi0+YV9yZXR2YWw7CisKKwlpbnQgZXJyb3I7CisK
KwllcnJvciA9IDA7CisKKwlzd2l0Y2ggKG5hbWUpIHsKKwljYXNlIF9QQ19MSU5LX01BWDoKKwkJ
KnJldHZhbCA9IExJTktfTUFYOworCQlicmVhazsKKworCWNhc2UgX1BDX05BTUVfTUFYOgorCQkq
cmV0dmFsID0gTkFNRV9NQVg7CisJCWJyZWFrOworCisJY2FzZSBfUENfUEFUSF9NQVg6CisJCSpy
ZXR2YWwgPSBQQVRIX01BWDsKKwkJYnJlYWs7CisKKwljYXNlIF9QQ19QSVBFX0JVRjoKKwkJKnJl
dHZhbCA9IFBJUEVfQlVGOworCQlicmVhazsKKworCWNhc2UgX1BDX0NIT1dOX1JFU1RSSUNURUQ6
CisJCSpyZXR2YWwgPSAxOworCQlicmVhazsKKworCWNhc2UgX1BDX05PX1RSVU5DOgorCQkqcmV0
dmFsID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIF9QQ19TWU5DX0lPOgorCQkqcmV0dmFsID0gMTsK
KwkJYnJlYWs7CisKKwljYXNlIF9QQ19GSUxFU0laRUJJVFM6CisJCSpyZXR2YWwgPSAwOyAvKiBY
WFggRG9uJ3Qga25vdyB3aGljaCB2YWx1ZSBzaG91bGQgSSByZXR1cm4uICovCisJCWJyZWFrOwor
CisJZGVmYXVsdDoKKwkJZXJyb3IgPSBFSU5WQUw7CisJfQorCisJcmV0dXJuIGVycm9yOworfQor
CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIHZub2RlIG9wZXJhdGlvbnMgdmVjdG9yIHVz
ZWQgZm9yIGZpbGVzIHN0b3JlZCBpbiBhIHRtcGZzIGZpbGUgc3lzdGVtLgorICovCitzdHJ1Y3Qg
dm9wX29wcyB0bXBmc192bm9kZV92b3BzID0geworCS52b3BfZGVmYXVsdCA9CQkJdm9wX2RlZmF1
bHRvcCwKKwkudm9wX2dldHBhZ2VzID0gCQl2b3Bfc3RkZ2V0cGFnZXMsCisJLnZvcF9wdXRwYWdl
cyA9IAkJdm9wX3N0ZHB1dHBhZ2VzLAorCS52b3BfbmNyZWF0ZSA9CQkJdG1wZnNfbmNyZWF0ZSwK
Kwkudm9wX25yZXNvbHZlID0JCQl0bXBmc19ucmVzb2x2ZSwKKwkudm9wX25sb29rdXBkb3Rkb3Qg
PQkJdG1wZnNfbmxvb2t1cGRvdGRvdCwKKwkudm9wX25ta25vZCA9CQkJdG1wZnNfbm1rbm9kLAor
CS52b3Bfb3BlbiA9CQkJdG1wZnNfb3BlbiwKKwkudm9wX2Nsb3NlID0JCQl0bXBmc19jbG9zZSwK
Kwkudm9wX2FjY2VzcyA9CQkJdG1wZnNfYWNjZXNzLAorCS52b3BfZ2V0YXR0ciA9CQkJdG1wZnNf
Z2V0YXR0ciwKKwkudm9wX3NldGF0dHIgPQkJCXRtcGZzX3NldGF0dHIsCisJLnZvcF9yZWFkID0J
CQl0bXBmc19yZWFkLAorCS52b3Bfd3JpdGUgPQkJCXRtcGZzX3dyaXRlLAorCS52b3BfZnN5bmMg
PQkJCXRtcGZzX2ZzeW5jLAorCS52b3BfbnJlbW92ZSA9CQkJdG1wZnNfbnJlbW92ZSwKKwkudm9w
X25saW5rID0JCQl0bXBmc19ubGluaywKKwkudm9wX25yZW5hbWUgPQkJCXRtcGZzX25yZW5hbWUs
CisJLnZvcF9ubWtkaXIgPQkJCXRtcGZzX25ta2RpciwKKwkudm9wX25ybWRpciA9CQkJdG1wZnNf
bnJtZGlyLAorCS52b3BfbnN5bWxpbmsgPQkJCXRtcGZzX25zeW1saW5rLAorCS52b3BfcmVhZGRp
ciA9CQkJdG1wZnNfcmVhZGRpciwKKwkudm9wX3JlYWRsaW5rID0JCQl0bXBmc19yZWFkbGluaywK
Kwkudm9wX2luYWN0aXZlID0JCQl0bXBmc19pbmFjdGl2ZSwKKwkudm9wX3JlY2xhaW0gPQkJCXRt
cGZzX3JlY2xhaW0sCisJLnZvcF9wcmludCA9CQkJdG1wZnNfcHJpbnQsCisJLnZvcF9wYXRoY29u
ZiA9CQkJdG1wZnNfcGF0aGNvbmYsCisvLwkudm9wX2JtYXAgPQkJCXRtcGZzX2JtYXAsCisJLnZv
cF9ibWFwID0JCQkodm9pZCAqKXZvcF9lb3Bub3RzdXBwLAorCS52b3Bfc3RyYXRlZ3kgPQkJCXRt
cGZzX3N0cmF0ZWd5LAorCS52b3BfYWR2bG9jayA9CQkJdG1wZnNfYWR2bG9jaywKK307CmRpZmYg
LS1naXQgYS9zeXMvdmZzL3RtcGZzL3RtcGZzX3Zub3BzLmggYi9zeXMvdmZzL3RtcGZzL3RtcGZz
X3Zub3BzLmgKaW5kZXggZTY5ZGUyOS4uMTIxNWJiYyAxMDA2NDQKLS0tIGEvc3lzL3Zmcy90bXBm
cy90bXBmc192bm9wcy5oCisrKyBiL3N5cy92ZnMvdG1wZnMvdG1wZnNfdm5vcHMuaApAQCAtMCww
ICsxLDU4IEBACisvKgkkTmV0QlNEOiB0bXBmc192bm9wcy5oLHYgMS43IDIwMDUvMTIvMDMgMTc6
MzQ6NDQgY2hyaXN0b3MgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhl
IE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5l
dEJTRCBGb3VuZGF0aW9uCisgKiBieSBKdWxpbyBNLiBNZXJpbm8gVmlkYWwsIGRldmVsb3BlZCBh
cyBwYXJ0IG9mIEdvb2dsZSdzIFN1bW1lciBvZiBDb2RlCisgKiAyMDA1IHByb2dyYW0uCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5E
QVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHNyYy9zeXMvZnMvdG1wZnMvdG1wZnNfdm5v
cHMuaCx2IDEuMyAyMDA4LzA5LzAzIDE4OjUzOjQ4IGRlbHBoaWogRXhwICQKKyAqLworCisjaWZu
ZGVmIF9WRlNfVE1QRlNfVE1QRlNfVk5PUFNfSF8KKyNkZWZpbmUgX1ZGU19UTVBGU19UTVBGU19W
Tk9QU19IXworCisjaWYgIWRlZmluZWQoX0tFUk5FTCkKKyNlcnJvciBub3Qgc3VwcG9zZWQgdG8g
YmUgZXhwb3NlZCB0byB1c2VybGFuZC4KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwor
ZXh0ZXJuIHN0cnVjdCB2b3Bfb3BzIHRtcGZzX3Zub2RlX3ZvcHM7CitleHRlcm4gc3RydWN0IHZv
cF9vcHMgdG1wZnNfZmlmb192b3BzOworCisvKgorICogRGVjbGFyYXRpb25zIGZvciB0bXBmc192
bm9wcy5jLgorICovCisKK2ludCB0bXBmc19hY2Nlc3Moc3RydWN0IHZvcF9hY2Nlc3NfYXJncyAq
KTsKK2ludCB0bXBmc19nZXRhdHRyKHN0cnVjdCB2b3BfZ2V0YXR0cl9hcmdzICopOworaW50IHRt
cGZzX3NldGF0dHIoc3RydWN0IHZvcF9zZXRhdHRyX2FyZ3MgKik7CitpbnQgdG1wZnNfcmVjbGFp
bShzdHJ1Y3Qgdm9wX3JlY2xhaW1fYXJncyAqKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNl
bmRpZiAvKiBfVkZTX1RNUEZTX1RNUEZTX1ZOT1BTX0hfICovCi0tIAoxLjYuNAoK
--0016e6d5667aa03412047f4fdf30--





More information about the Users mailing list