[omniORB] What's wrong with the ccs program ?
zdx_nari
zdx_nari@sina.com
Wed, 21 Mar 2001 18:00:01 +0800
This is a multi-part message in MIME format.
------------98516880114954SINAEMAIL---
Content-Disposition: inline
Content-Transfer-Encoding: binary
Content-Type: text/plain;charset="gb2312"
Hi,
In accessories ,there is a complete program code including it's .idl file .But when I make it in omniORB3 and Redhat Linux 6.2 , it fails. The error information is written into the end of ccs.idl . Could you tell me what's the problem.
Best regards !
______________________________________
===================================================================
新浪免费电子邮箱 (http://mail.sina.com.cn)
网里寻她千百度!没有"聊友速配",怎能"成双成对"? (http://newchat.sina.com.cn)
------------98516880114954SINAEMAIL---
Content-Disposition: inline;filename="ccs.idl"
Content-Transfer-Encoding: base64
Content-Type: application/x-msdownload; name="ccs.idl"
I3ByYWdtYSAgcHJlZml4ICJhY21lLmNvbSIKCm1vZHVsZSBDQ1N7CiAgICB0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgICBBc3NldFR5cGU7IAogICAgdHlwZWRlZiBzdHJpbmcgICAgICAgICAgTW9kZWxUeXBlOyAK
ICAgIHR5cGVkZWYgc2hvcnQgICAgICAgICAgIFRlbXBUeXBlOyAKICAgIHR5cGVkZWYgc3RyaW5nICAg
ICAgICAgIExvY1R5cGU7IAogCiAgICBpbnRlcmZhY2UgVGhlcm1vbWV0ZXIgeyAKICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgTW9kZWxUeXBlICAgIG1vZGVsOyAKICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgQXNzZXRUeXBlICAgIGFzc2V0X251bTsgCiAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFRlbXBU
eXBlICAgICB0ZW1wZXJhdHVyZTsgCiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIExvY1R5cGUgICAg
ICBsb2NhdGlvbjsgCiAgICB9OyAKIAogICAgaW50ZXJmYWNlIFRoZXJtb3N0YXQgOiBUaGVybW9tZXRl
ciB7IAogICAgICAgIHN0cnVjdCBCdERhdGEgeyAKICAgICAgICAgICAgVGVtcFR5cGUgICAgcmVxdWVz
dGVkOyAKICAgICAgICAgICAgVGVtcFR5cGUgICAgbWluX3Blcm1pdHRlZDsgCiAgICAgICAgICAgIFRl
bXBUeXBlICAgIG1heF9wZXJtaXR0ZWQ7IAogICAgICAgICAgICBzdHJpbmcgICAgICBlcnJvcl9tc2c7
IAogICAgICAgIH07IAogICAgICAgIGV4Y2VwdGlvbiBCYWRUZW1wIHsgQnREYXRhIGRldGFpbHM7IH07
IAogCiAgICAgICAgVGVtcFR5cGUgICAgZ2V0X25vbWluYWwoKTsgCiAgICAgICAgVGVtcFR5cGUgICAg
c2V0X25vbWluYWwoaW4gVGVtcFR5cGUgbmV3X3RlbXApIAogICAgICAgICAgICAgICAgICAgICAgICBy
YWlzZXMoQmFkVGVtcCk7IAogICAgfTsgCiAKICAgIGludGVyZmFjZSBDb250cm9sbGVyIHsgCiAgICAg
ICAgdHlwZWRlZiBzZXF1ZW5jZTxUaGVybW9tZXRlcj4gICBUaGVybW9tZXRlclNlcTsgCiAgICAgICAg
dHlwZWRlZiBzZXF1ZW5jZTxUaGVybW9zdGF0PiAgICBUaGVybW9zdGF0U2VxOyAKIAogICAgICAgIGVu
dW0gU2VhcmNoQ3JpdGVyaW9uIHsgQVNTRVQsIExPQ0FUSU9OLCBNT0RFTCB9OyAKIAogICAgICAgIHVu
aW9uIEtleVR5cGUgc3dpdGNoKFNlYXJjaENyaXRlcmlvbikgeyAKICAgICAgICBjYXNlIEFTU0VUOiAK
ICAgICAgICAgICAgQXNzZXRUeXBlICAgYXNzZXRfbnVtOyAKICAgICAgICBjYXNlIExPQ0FUSU9OOiAK
ICAgICAgICAgICAgTG9jVHlwZSAgICAgbG9jOyAKICAgICAgICBjYXNlIE1PREVMOiAKICAgICAgICAg
ICAgTW9kZWxUeXBlICAgbW9kZWxfZGVzYzsgCiAgICAgICAgfTsgCiAKICAgICAgICBzdHJ1Y3QgU2Vh
cmNoVHlwZSB7IAogICAgICAgICAgICBLZXlUeXBlICAgICBrZXk7IAogICAgICAgICAgICBUaGVybW9t
ZXRlciBkZXZpY2U7IAogICAgICAgIH07IAogICAgICAgIHR5cGVkZWYgc2VxdWVuY2U8U2VhcmNoVHlw
ZT4gICAgU2VhcmNoU2VxOyAKIAogICAgICAgIHN0cnVjdCBFcnJvckRldGFpbHMgeyAKICAgICAgICAg
ICAgVGhlcm1vc3RhdCAgICAgICAgICB0bXN0YXRfcmVmOyAKICAgICAgICAgICAgVGhlcm1vc3RhdDo6
QnREYXRhICBpbmZvOyAKICAgICAgICB9OyAKICAgICAgICB0eXBlZGVmIHNlcXVlbmNlPEVycm9yRGV0
YWlscz4gIEVyclNlcTsgCiAKICAgICAgICBleGNlcHRpb24gRUNoYW5nZSB7IAogICAgICAgICAgICBF
cnJTZXEgIGVycm9yczsgCiAgICAgICAgfTsgCiAKICAgICAgICBUaGVybW9tZXRlclNlcSAgbGlzdCgp
OyAKICAgICAgICB2b2lkICAgICAgICAgICAgZmluZChpbm91dCBTZWFyY2hTZXEgc2xpc3QpOyAKICAg
ICAgICB2b2lkICAgICAgICAgICAgY2hhbmdlKCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFRoZXJtb3N0YXRTZXEgdGxpc3QsIGluIHNob3J0IGRlbHRhIAogICAgICAgICAgICAgICAgICAgICAg
ICApIHJhaXNlcyhFQ2hhbmdlKTsgCiAgICB9OyAKfTsgCg==
------------98516880114954SINAEMAIL---
Content-Disposition: inline;filename="ccs_clt.cc"
Content-Transfer-Encoding: base64
Content-Type: application/x-msdownload; name="ccs_clt.cc"
I2luY2x1ZGUgICAgPGlvc3RyZWFtLmg+CiNpbmNsdWRlICAgIDxmc3RyZWFtLmg+CiNpbmNsdWRlICAg
ICJjY3MuaGgiICAgICAgICAvLyBPUkItc3BlY2lmaWMKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gR2VuZXJpYyBvc3RyZWFt
IGluc2VydGVyIGZvciBleGNlcHRpb25zLiBJbnNlcnRzIHRoZSBleGNlcHRpb24KLy8gbmFtZSwgaWYg
YXZhaWxhYmxlLCBhbmQgdGhlIHJlcG9zaXRvcnkgSUQgb3RoZXJ3aXNlLgoKI2lmIDEgICAvLyBUaGlz
IGluc2VydGVyIG1heSBvciBtYXkgbm90IGJlIG5lZWRlZCBmb3IgeW91ciBPUkIuCgpzdGF0aWMgb3N0
cmVhbSAmCm9wZXJhdG9yPDwob3N0cmVhbSAmIG9zLCBjb25zdCBDT1JCQTo6RXhjZXB0aW9uICYgZSkK
ewogICAgQ09SQkE6OkFueSB0bXA7CiAgICB0bXAgPDw9IGU7CgogICAgQ09SQkE6OlR5cGVDb2RlX3Zh
ciB0YyA9IHRtcC50eXBlKCk7CiAgICBjb25zdCBjaGFyICogcCA9IHRjLT5uYW1lKCk7CiAgICBpZiAo
KnAgIT0gJ1wwJykKICAgICAgICBvcyA8PCBwOwogICAgZWxzZQogICAgICAgIG9zIDw8IHRjLT5pZCgp
OwogICAgcmV0dXJuIG9zOwp9CgojZW5kaWYKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gU2hvdyB0aGUgZGV0YWlscyBmb3Ig
YSB0aGVybW9tZXRlciBvciB0aGVybW9zdGF0LgoKc3RhdGljIG9zdHJlYW0gJgpvcGVyYXRvcjw8KG9z
dHJlYW0gJm9zLCBDQ1M6OlRoZXJtb21ldGVyX3B0ciB0KQp7CiAgICAvLyBDaGVjayBmb3IgbmlsLgog
ICAgaWYgKENPUkJBOjppc19uaWwodCkpIHsKICAgICAgICBvcyA8PCAiQ2Fubm90IHNob3cgc3RhdGUg
Zm9yIG5pbCByZWZlcmVuY2UuIiA8PCBlbmRsOwogICAgICAgIHJldHVybiBvczsKICAgIH0KICAgIAog
ICAgLy8gVHJ5IHRvIG5hcnJvdyBhbmQgcHJpbnQgd2hhdCBraW5kIG9mIGRldmljZSBpdCBpcy4KICAg
IENDUzo6VGhlcm1vc3RhdF92YXIgdG1zdGF0ID0gQ0NTOjpUaGVybW9zdGF0OjpfbmFycm93KHQpOwog
ICAgb3MgPDwgKENPUkJBOjppc19uaWwodG1zdGF0KSA/ICJUaGVybW9tZXRlcjoiIDogIlRoZXJtb3N0
YXQ6IikKICAgICAgIDw8IGVuZGw7CgogICAgLy8gU2hvdyBhdHRyaWJ1dGUgdmFsdWVzLgogICAgQ0NT
OjpNb2RlbFR5cGVfdmFyIG1vZGVsID0gdC0+bW9kZWwoKTsKICAgIENDUzo6TG9jVHlwZV92YXIgbG9j
YXRpb24gPSB0LT5sb2NhdGlvbigpOwogICAgb3MgPDwgIlx0QXNzZXQgbnVtYmVyOiAiIDw8IHQtPmFz
c2V0X251bSgpIDw8IGVuZGw7CiAgICBvcyA8PCAiXHRNb2RlbCAgICAgICA6ICIgPDwgbW9kZWwgPDwg
ZW5kbDsKICAgIG9zIDw8ICJcdExvY2F0aW9uICAgIDogIiA8PCBsb2NhdGlvbiA8PCBlbmRsOwogICAg
b3MgPDwgIlx0VGVtcGVyYXR1cmUgOiAiIDw8IHQtPnRlbXBlcmF0dXJlKCkgPDwgZW5kbDsKCiAgICAv
LyBJZiBkZXZpY2UgaXMgYSB0aGVybW9zdGF0LCBzaG93IG5vbWluYWwgdGVtcGVyYXR1cmUuCiAgICBp
ZiAoIUNPUkJBOjppc19uaWwodG1zdGF0KSkKICAgICAgICBvcyA8PCAiXHROb21pbmFsIHRlbXA6ICIg
PDwgdG1zdGF0LT5nZXRfbm9taW5hbCgpIDw8IGVuZGw7CiAgICByZXR1cm4gb3M7Cn0KCi8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK
Ly8gU2hvdyB0aGUgaW5mb3JtYXRpb24gaW4gYSBCdERhdGEgc3RydWN0LgoKc3RhdGljIG9zdHJlYW0g
JgpvcGVyYXRvcjw8KG9zdHJlYW0gJm9zLCBjb25zdCBDQ1M6OlRoZXJtb3N0YXQ6OkJ0RGF0YSAmYnRk
KQp7CiAgICBvcyA8PCAiQ0NTOjpUaGVybW9zdGF0OjpCdERhdGEgZGV0YWlsczoiIDw8IGVuZGw7CiAg
ICBvcyA8PCAiXHRyZXF1ZXN0ZWQgICAgOiAiIDw8IGJ0ZC5yZXF1ZXN0ZWQgPDwgZW5kbDsKICAgIG9z
IDw8ICJcdG1pbl9wZXJtaXR0ZWQ6ICIgPDwgYnRkLm1pbl9wZXJtaXR0ZWQgPDwgZW5kbDsKICAgIG9z
IDw8ICJcdG1heF9wZXJtaXR0ZWQ6ICIgPDwgYnRkLm1heF9wZXJtaXR0ZWQgPDwgZW5kbDsKICAgIG9z
IDw8ICJcdGVycm9yX21zZyAgICA6ICIgPDwgYnRkLmVycm9yX21zZyA8PCBlbmRsOwogICAgcmV0dXJu
IG9zOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KCi8vIExvb3Agb3ZlciB0aGUgc2VxdWVuY2Ugb2YgcmVjb3JkcyBpbiBhbiBF
Q2hhbmdlIGV4Y2VwdGlvbiBhbmQKLy8gc2hvdyB0aGUgZGV0YWlscyBvZiBlYWNoIHJlY29yZC4KCnN0
YXRpYyBvc3RyZWFtICYKb3BlcmF0b3I8PChvc3RyZWFtICZvcywgY29uc3QgQ0NTOjpDb250cm9sbGVy
OjpFQ2hhbmdlICZlYykKewogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBlYy5lcnJvcnMu
bGVuZ3RoKCk7IGkrKykgewogICAgICAgIG9zIDw8ICJDaGFuZ2UgZmFpbGVkOiIgPDwgZW5kbDsKICAg
ICAgICBvcyA8PCBlYy5lcnJvcnNbaV0udG1zdGF0X3JlZi5pbigpOyAvLyBPdmVybG9hZGVkIDw8CiAg
ICAgICAgb3MgPDwgZWMuZXJyb3JzW2ldLmluZm8gPDwgZW5kbDsgICAgLy8gT3ZlcmxvYWRlZCA8PAog
ICAgfQogICAgcmV0dXJuIG9zOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIENoYW5nZSB0aGUgdGVtcGVyYXR1cmUgb2Yg
YSB0aGVybW9zdGF0LgoKc3RhdGljIHZvaWQKc2V0X3RlbXAoQ0NTOjpUaGVybW9zdGF0X3B0ciB0bXN0
YXQsIENDUzo6VGVtcFR5cGUgbmV3X3RlbXApCnsKICAgIGlmIChDT1JCQTo6aXNfbmlsKHRtc3RhdCkp
ICAvLyBEb24ndCBjYWxsIHZpYSBuaWwgcmVmZXJlbmNlCiAgICAgICAgcmV0dXJuOwoKICAgIENDUzo6
QXNzZXRUeXBlIGFudW0gPSB0bXN0YXQtPmFzc2V0X251bSgpOwogICAgdHJ5IHsKICAgICAgICBjb3V0
IDw8ICJTZXR0aW5nIHRoZXJtb3N0YXQgIiA8PCBhbnVtCiAgICAgICAgICAgICA8PCAiIHRvICIgPDwg
bmV3X3RlbXAgPDwgIiBkZWdyZWVzLiIgPDwgZW5kbDsKICAgICAgICBDQ1M6OlRlbXBUeXBlIG9sZF9u
b21pbmFsID0gdG1zdGF0LT5zZXRfbm9taW5hbChuZXdfdGVtcCk7CiAgICAgICAgY291dCA8PCAiT2xk
IG5vbWluYWwgdGVtcGVyYXR1cmUgd2FzOiAiCiAgICAgICAgICAgICA8PCBvbGRfbm9taW5hbCA8PCBl
bmRsOwogICAgICAgIGNvdXQgPDwgIk5ldyBub21pbmFsIHRlbXBlcmF0dXJlIGlzOiAiCiAgICAgICAg
ICAgICA8PCB0bXN0YXQtPmdldF9ub21pbmFsKCkgPDwgZW5kbDsKICAgIH0gY2F0Y2ggKGNvbnN0IEND
Uzo6VGhlcm1vc3RhdDo6QmFkVGVtcCAmYnQpIHsKICAgICAgICBjZXJyIDw8ICJTZXR0aW5nIG9mIG5v
bWluYWwgdGVtcGVyYXR1cmUgZmFpbGVkLiIgPDwgZW5kbDsKICAgICAgICBjZXJyIDw8IGJ0LmRldGFp
bHMgPDwgZW5kbDsgICAgICAgICAgICAgLy8gT3ZlcmxvYWRlZCA8PAogICAgfQp9CgovLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlu
dAptYWluKGludCBhcmdjLCBjaGFyICogYXJndltdKQp7CiAgICB0cnkgewogICAgICAgIC8vIEluaXRp
YWxpemUgdGhlIE9SQgogICAgICAgIENPUkJBOjpPUkJfdmFyIG9yYiA9IENPUkJBOjpPUkJfaW5pdChh
cmdjLCBhcmd2KTsKCiAgICAgICAgLy8gQ2hlY2sgYXJndW1lbnRzCiAgICAgICAgaWYgKGFyZ2MgIT0g
MikgewogICAgICAgICAgICBjZXJyIDw8ICJVc2FnZTogY2xpZW50IElPUl9zdHJpbmciIDw8IGVuZGw7
CiAgICAgICAgICAgIHRocm93IDA7CiAgICAgICAgfQoKICAgICAgICAvLyBHZXQgY29udHJvbGxlciBy
ZWZlcmVuY2UgZnJvbSBhcmd2CiAgICAgICAgLy8gYW5kIGNvbnZlcnQgdG8gb2JqZWN0LgogICAgICAg
IENPUkJBOjpPYmplY3RfdmFyIG9iaiA9IG9yYi0+c3RyaW5nX3RvX29iamVjdChhcmd2WzFdKTsKICAg
ICAgICBpZiAoQ09SQkE6OmlzX25pbChvYmopKSB7CiAgICAgICAgICAgIGNlcnIgPDwgIk5pbCBjb250
cm9sbGVyIHJlZmVyZW5jZSIgPDwgZW5kbDsKICAgICAgICAgICAgdGhyb3cgMDsKICAgICAgICB9Cgog
ICAgICAgIC8vIFRyeSB0byBuYXJyb3cgdG8gQ0NTOjpDb250cm9sbGVyLgogICAgICAgIENDUzo6Q29u
dHJvbGxlcl92YXIgY3RybDsKICAgICAgICB0cnkgewogICAgICAgICAgICBjdHJsID0gQ0NTOjpDb250
cm9sbGVyOjpfbmFycm93KG9iaik7CiAgICAgICAgfSBjYXRjaCAoY29uc3QgQ09SQkE6OlN5c3RlbUV4
Y2VwdGlvbiAmc2UpIHsKICAgICAgICAgICAgY2VyciA8PCAiQ2Fubm90IG5hcnJvdyBjb250cm9sbGVy
IHJlZmVyZW5jZTogIgogICAgICAgICAgICAgICAgIDw8IHNlIDw8IGVuZGw7CiAgICAgICAgICAgIHRo
cm93IDA7CiAgICAgICAgfQogICAgICAgIGlmIChDT1JCQTo6aXNfbmlsKGN0cmwpKSB7CiAgICAgICAg
ICAgIGNlcnIgPDwgIldyb25nIHR5cGUgZm9yIGNvbnRyb2xsZXIgcmVmLiIgPDwgZW5kbDsKICAgICAg
ICAgICAgdGhyb3cgMDsKICAgICAgICB9CgogICAgICAgIC8vIEdldCBsaXN0IG9mIGRldmljZXMKICAg
ICAgICBDQ1M6OkNvbnRyb2xsZXI6OlRoZXJtb21ldGVyU2VxX3ZhciBsaXN0ID0gY3RybC0+bGlzdCgp
OwoKICAgICAgICAvLyBTaG93IG51bWJlciBvZiBkZXZpY2VzLgogICAgICAgIENPUkJBOjpVTG9uZyBs
ZW4gPSBsaXN0LT5sZW5ndGgoKTsKICAgICAgICBjb3V0IDw8ICJDb250cm9sbGVyIGhhcyAiIDw8IGxl
biA8PCAiIGRldmljZSI7CiAgICAgICAgaWYgKGxlbiAhPSAxKQogICAgICAgICAgICBjb3V0IDw8ICJz
IjsKICAgICAgICBjb3V0IDw8ICIuIiA8PCBlbmRsOwoKICAgICAgICBDQ1M6OlRoZXJtb21ldGVyX3Zh
ciB0ID0gY3RybC0+Y3JlYXRlX3RoZXJtb21ldGVyKDI3LCAiUm9vbSAxIik7CiAgICAgICAgQ0NTOjpU
aGVybW9zdGF0X3ZhciB0cyA9IGN0cmwtPmNyZWF0ZV90aGVybW9zdGF0KDI4LCAiUm9vbSAyIiwgNDgp
OwogICAgICAgIENDUzo6VGhlcm1vc3RhdF92YXIgdHMyID0gY3RybC0+Y3JlYXRlX3RoZXJtb3N0YXQo
MzAsICJSb29tIDMiLCA0OCk7CiAgICAgICAgQ0NTOjpUaGVybW9zdGF0X3ZhciB0czMgPSBjdHJsLT5j
cmVhdGVfdGhlcm1vc3RhdCgzMiwgIlJvb20gMyIsIDY4KTsKICAgICAgICBDQ1M6OlRoZXJtb3N0YXRf
dmFyIHRzNCA9IGN0cmwtPmNyZWF0ZV90aGVybW9zdGF0KDM0LCAiUm9vbSAzIiwgNjgpOwogICAgICAg
IENDUzo6VGhlcm1vc3RhdF92YXIgdHM1ID0gY3RybC0+Y3JlYXRlX3RoZXJtb3N0YXQoMzYsICJSb29t
IDMiLCA0OCk7CiAgICAgICAgY291dCA8PCB0LT5sb2NhdGlvbigpIDw8IGVuZGw7CiAgICAgICAgY291
dCA8PCB0cy0+bG9jYXRpb24oKSA8PCBlbmRsOwogICAgICAgIGNvdXQgPDwgdHMyLT5sb2NhdGlvbigp
IDw8IGVuZGw7CiAgICAgICAgdC0+cmVtb3ZlKCk7CgogICAgICAgIGxpc3QgPSBjdHJsLT5saXN0KCk7
CiAgICAgICAgLy8gU2hvdyBkZXRhaWxzIGZvciBlYWNoIGRldmljZS4KICAgICAgICBmb3IgKENPUkJB
OjpVTG9uZyBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyBpKyspCiAgICAgICAgICAgIGNvdXQgPDwg
bGlzdFtpXTsKICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICAgICAgCiAgICAgICAgLy8gQ2hhbmdlIHRo
ZSBsb2NhdGlvbiBvZiBmaXJzdCBkZXZpY2UgaW4gdGhlIGxpc3QKICAgICAgICBDQ1M6OkFzc2V0VHlw
ZSBhbnVtID0gbGlzdFswXS0+YXNzZXRfbnVtKCk7CiAgICAgICAgY291dCA8PCAiQ2hhbmdpbmcgbG9j
YXRpb24gb2YgZGV2aWNlICIKICAgICAgICAgICAgIDw8IGFudW0gPDwgIi4iIDw8IGVuZGw7CiAgICAg
ICAgbGlzdFswXS0+bG9jYXRpb24oIkVhcnRoIik7CiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbG9j
YXRpb24gd2FzIHVwZGF0ZWQKICAgICAgICBjb3V0IDw8ICJOZXcgZGV0YWlscyBmb3IgZGV2aWNlICIK
ICAgICAgICAgICAgIDw8IGFudW0gPDwgIiBhcmU6IiA8PCBlbmRsOwogICAgICAgIGNvdXQgPDwgbGlz
dFswXSA8PCBlbmRsOwoKICAgICAgICAvLyBGaW5kIGZpcnN0IHRoZXJtb3N0YXQgaW4gbGlzdC4KICAg
ICAgICBDQ1M6OlRoZXJtb3N0YXRfdmFyIHRtc3RhdDsKICAgICAgICBmb3IgKCAgIENPUkJBOjpVTG9u
ZyBpID0gMDsKICAgICAgICAgICAgICAgIGkgPCBsaXN0LT5sZW5ndGgoKSAmJiBDT1JCQTo6aXNfbmls
KHRtc3RhdCk7CiAgICAgICAgICAgICAgICBpKyspIHsKICAgICAgICAgICAgdG1zdGF0ID0gQ0NTOjpU
aGVybW9zdGF0OjpfbmFycm93KGxpc3RbaV0pOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdGhh
dCB3ZSBmb3VuZCBhIHRoZXJtb3N0YXQgb24gdGhlIGxpc3QuCiAgICAgICAgaWYgKENPUkJBOjppc19u
aWwodG1zdGF0KSkgewogICAgICAgICAgICBjb3V0IDw8ICJObyB0aGVybW9zdGF0IGRldmljZXMgaW4g
bGlzdC4iIDw8IGVuZGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2V0IHRlbXBlcmF0
dXJlIG9mIHRoZXJtb3N0YXQgdG8KICAgICAgICAgICAgLy8gNTAgZGVncmVlcyAoc2hvdWxkIHdvcmsp
LgogICAgICAgICAgICBzZXRfdGVtcCh0bXN0YXQsIDUwKTsKICAgICAgICAgICAgY291dCA8PCBlbmRs
OwoKICAgICAgICAgICAgLy8gU2V0IHRlbXBlcmF0dXJlIG9mIHRoZXJtb3N0YXQgdG8KICAgICAgICAg
ICAgLy8gLTEwIGRlZ3JlZXMgKHNob3VsZCBmYWlsKS4KICAgICAgICAgICAgc2V0X3RlbXAodG1zdGF0
LCAtMTApOwogICAgICAgIH0KCiAgICAgICAgLy8gTG9vayBmb3IgZGV2aWNlIGluIFJvb21zIEVhcnRo
IGFuZCBIQUwuIFRoaXMgbXVzdAogICAgICAgIC8vIGxvY2F0ZSBhdCBsZWFzdCBvbmUgZGV2aWNlIGJl
Y2F1c2Ugd2UgZWFybGllciBjaGFuZ2VkCiAgICAgICAgLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJz
dCBkZXZpY2UgdG8gUm9vbSBFYXJ0aC4KICAgICAgICBjb3V0IDw8ICJMb29raW5nIGZvciBkZXZpY2Vz
IGluIEVhcnRoIGFuZCBIQUwuIiA8PCBlbmRsOwogICAgICAgIENDUzo6Q29udHJvbGxlcjo6U2VhcmNo
U2VxIHNzOwogICAgICAgIHNzLmxlbmd0aCgyKTsKICAgICAgICBzc1swXS5rZXkubG9jKENPUkJBOjpz
dHJpbmdfZHVwKCJFYXJ0aCIpKTsKICAgICAgICBzc1sxXS5rZXkubG9jKENPUkJBOjpzdHJpbmdfZHVw
KCJIQUwiKSk7CiAgICAgICAgY3RybC0+ZmluZChzcyk7CgogICAgICAgIC8vIFNob3cgdGhlIGRldmlj
ZXMgZm91bmQgaW4gdGhhdCByb29tLgogICAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwg
c3MubGVuZ3RoKCk7IGkrKykKICAgICAgICAgICAgY291dCA8PCBzc1tpXS5kZXZpY2UuaW4oKTsgICAg
ICAgICAgLy8gT3ZlcmxvYWRlZCA8PAogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICAKICAgICAg
ICAvLyBJbmNyZWFzZSB0aGUgdGVtcGVyYXR1cmUgb2YgYWxsIHRoZXJtb3N0YXRzCiAgICAgICAgLy8g
YnkgNDAgZGVncmVlcy4gRmlyc3QsIG1ha2UgYSBuZXcgbGlzdCAodHNzKQogICAgICAgIC8vIGNvbnRh
aW5pbmcgb25seSB0aGVybW9zdGF0cy4KICAgICAgICBjb3V0IDw8ICJJbmNyZWFzaW5nIHRoZXJtb3N0
YXRzIGJ5IDQwIGRlZ3JlZXMuIiA8PCBlbmRsOwogICAgICAgIENDUzo6Q29udHJvbGxlcjo6VGhlcm1v
c3RhdFNlcSB0c3M7CiAgICAgICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBsaXN0LT5sZW5n
dGgoKTsgaSsrKSB7CiAgICAgICAgICAgIHRtc3RhdCA9IENDUzo6VGhlcm1vc3RhdDo6X25hcnJvdyhs
aXN0W2ldKTsKICAgICAgICAgICAgaWYgKENPUkJBOjppc19uaWwodG1zdGF0KSkKICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZXJtb21ldGVycwogICAgICAg
ICAgICBsZW4gPSB0c3MubGVuZ3RoKCk7CiAgICAgICAgICAgIHRzcy5sZW5ndGgobGVuICsgMSk7CiAg
ICAgICAgICAgIHRzc1tsZW5dID0gdG1zdGF0OwogICAgICAgIH0KCiAgICAgICAgLy8gVHJ5IHRvIGNo
YW5nZSBhbGwgdGhlcm1vc3RhdHMuCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY3RybC0+Y2hhbmdl
KHRzcywgNDApOwogICAgICAgIH0gY2F0Y2ggKGNvbnN0IENDUzo6Q29udHJvbGxlcjo6RUNoYW5nZSAm
ZWMpIHsKICAgICAgICAgICAgY2VyciA8PCBlYzsgICAgICAgICAgICAgICAgICAgICAvLyBPdmVybG9h
ZGVkIDw8CiAgICAgICAgfQogICAgfSBjYXRjaCAoY29uc3QgQ09SQkE6OkV4Y2VwdGlvbiAmIGUpIHsK
ICAgICAgICBjZXJyIDw8ICJVbmNhdWdodCBDT1JCQSBleGNlcHRpb246ICIgPDwgZSA8PCBlbmRsOwog
ICAgICAgIHJldHVybiAxOwogICAgfSBjYXRjaCAoLi4uKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9
CiAgICByZXR1cm4gMDsKfQo=
------------98516880114954SINAEMAIL---
Content-Disposition: inline;filename="ccs_impl.cc"
Content-Transfer-Encoding: base64
Content-Type: application/x-msdownload; name="ccs_impl.cc"
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtLmg+CiNpbmNsdWRlIDxmc3RyZWFt
Lmg+CiNpbmNsdWRlIDxzdHJzdHJlYW0uaD4KI2luY2x1ZGUgImljcC5jYyIKI2luY2x1ZGUgInNlcnZl
ci5oaCIKCmNvbnN0IGNoYXIgKiBDb250cm9sbGVyX29pZCA9ICJDb250cm9sbGVyIjsKCi8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK
Ly8gR2VuZXJpYyBvc3RyZWFtIGluc2VydGVyIGZvciBleGNlcHRpb25zLiBJbnNlcnRzIHRoZSBleGNl
cHRpb24KLy8gbmFtZSwgaWYgYXZhaWxhYmxlLCBhbmQgdGhlIHJlcG9zaXRvcnkgSUQgb3RoZXJ3aXNl
LgoKI2lmIDEgICAgICAgICAvLyBUaGlzIGluc2VydGVyIG1heSBvciBtYXkgbm90IGJlIG5lZWRlZCBm
b3IgeW91ciBPUkIuCgpzdGF0aWMgb3N0cmVhbSAmCm9wZXJhdG9yPDwob3N0cmVhbSAmIG9zLCBjb25z
dCBDT1JCQTo6RXhjZXB0aW9uICYgZSkKewogICAgQ09SQkE6OkFueSB0bXA7CiAgICB0bXAgPDw9IGU7
CgogICAgQ09SQkE6OlR5cGVDb2RlX3ZhciB0YyA9IHRtcC50eXBlKCk7CiAgICBjb25zdCBjaGFyICog
cCA9IHRjLT5uYW1lKCk7CiAgICBpZiAoKnAgIT0gJ1wwJykKICAgICAgICBvcyA8PCBwOwogICAgZWxz
ZQogICAgICAgIG9zIDw8IHRjLT5pZCgpOwogICAgcmV0dXJuIG9zOwp9CgojZW5kaWYKCi8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBvYmplY3QgcmVmZXJlbmNlcy4gCgpzdGF0aWMgQ0NT
OjpUaGVybW9tZXRlcl9wdHIKbWFrZV9kcmVmKFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSwgQ0NT
OjpBc3NldFR5cGUgYW51bSkKewogICAgLy8gQ29udmVydCBhc3NldCBudW1iZXIgdG8gT0lELgogICAg
b3N0cnN0cmVhbSBvc3RyOwogICAgb3N0ciA8PCBhbnVtIDw8IGVuZHM7CiAgICBjaGFyICogYW51bV9z
dHIgPSBvc3RyLnN0cigpOwogICAgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3ZhciBvaWQKICAgICAg
ICA9IFBvcnRhYmxlU2VydmVyOjpzdHJpbmdfdG9fT2JqZWN0SWQoYW51bV9zdHIpOwogICAgb3N0ci5y
ZGJ1ZigpLT5mcmVlemUoMCk7CgogICAgLy8gTG9vayBhdCB0aGUgbW9kZWwgdmlhIHRoZSBuZXR3b3Jr
IHRvIGRldGVybWluZQogICAgLy8gdGhlIHJlcG9zaXRvcnkgSUQuCiAgICBjaGFyIGJ1ZlszMl07CiAg
ICBpZiAoSUNQX2dldChhbnVtLCAibW9kZWwiLCBidWYsIHNpemVvZihidWYpKSAhPSAwKQogICAgICAg
IGFib3J0KCk7CiAgICBjb25zdCBjaGFyICogcmVwX2lkID0gc3RyY21wKGJ1ZiwgIlNlbnMtQS1UZW1w
IikgPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiSURMOmFjbWUuY29tL0NDUy9UaGVy
bW9tZXRlcjoxLjAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJREw6YWNtZS5jb20vQ0NT
L1RoZXJtb3N0YXQ6MS4wIjsKCiAgICAvLyBNYWtlIGEgbmV3IHJlZmVyZW5jZS4KICAgIENPUkJBOjpP
YmplY3RfdmFyIG9iagogICAgICAgID0gcG9hLT5jcmVhdGVfcmVmZXJlbmNlX3dpdGhfaWQob2lkLCBy
ZXBfaWQpOwogICAgcmV0dXJuIENDUzo6VGhlcm1vbWV0ZXI6Ol9uYXJyb3cob2JqKTsKfQoKLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CgpDb250cm9sbGVyX2ltcGwgKiBUaGVybW9tZXRlcl9pbXBsOjptX2N0cmw7ICAgICAvLyBzdGF0aWMg
bWVtYmVyCgovLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCB0aGUgbW9kZWwgc3RyaW5nIGZyb20gYSBk
ZXZpY2UuCgpDQ1M6Ok1vZGVsVHlwZQpUaGVybW9tZXRlcl9pbXBsOjoKZ2V0X21vZGVsKCkKewogICAg
Y2hhciBidWZbMzJdOwogICAgaWYgKElDUF9nZXQobV9hbnVtLCAibW9kZWwiLCBidWYsIHNpemVvZihi
dWYpKSAhPSAwKQogICAgICAgIGFib3J0KCk7CiAgICByZXR1cm4gQ09SQkE6OnN0cmluZ19kdXAoYnVm
KTsKfQoKLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgdGhlIHRlbXBlcmF0dXJlIGZyb20gYSBkZXZp
Y2UuCgpDQ1M6OlRlbXBUeXBlClRoZXJtb21ldGVyX2ltcGw6OgpnZXRfdGVtcCgpCnsKICAgIHNob3J0
IHRlbXA7CiAgICBpZiAoSUNQX2dldChtX2FudW0sICJ0ZW1wZXJhdHVyZSIsICZ0ZW1wLCBzaXplb2Yo
dGVtcCkpICE9IDApCiAgICAgICAgYWJvcnQoKTsKICAgIHJldHVybiB0ZW1wOwp9CgovLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gcmVhZCB0aGUgbG9jYXRpb24gZnJvbSBhIGRldmljZS4KCkNDUzo6TG9jVHlwZQpU
aGVybW9tZXRlcl9pbXBsOjoKZ2V0X2xvYygpCnsKICAgIGNoYXIgYnVmWzMyXTsKICAgIGlmIChJQ1Bf
Z2V0KG1fYW51bSwgImxvY2F0aW9uIiwgYnVmLCBzaXplb2YoYnVmKSkgIT0gMCkKICAgICAgICBhYm9y
dCgpOwogICAgcmV0dXJuIENPUkJBOjpzdHJpbmdfZHVwKGJ1Zik7Cn0KCi8vIEhlbHBlciBmdW5jdGlv
biB0byBzZXQgdGhlIGxvY2F0aW9uIG9mIGEgZGV2aWNlLgoKdm9pZApUaGVybW9tZXRlcl9pbXBsOjoK
c2V0X2xvYyhjb25zdCBjaGFyICogbG9jKQp7CiAgICBpZiAoSUNQX3NldChtX2FudW0sICJsb2NhdGlv
biIsIGxvYykgIT0gMCkKICAgICAgICBhYm9ydCgpOwp9CgovLyBDb25zdHJ1Y3Rvci4KClRoZXJtb21l
dGVyX2ltcGw6OgpUaGVybW9tZXRlcl9pbXBsKENDUzo6QXNzZXRUeXBlIGFudW0pIDogbV9hbnVtKGFu
dW0pCnsKICAgIG1fY3RybC0+YWRkX2ltcGwoYW51bSwgdGhpcyk7ICAgLy8gQWRkIHNlbGYgdG8gY29u
dHJvbGxlcidzIHNldAp9CgovLyBEZXN0cnVjdG9yLgoKVGhlcm1vbWV0ZXJfaW1wbDo6Cn5UaGVybW9t
ZXRlcl9pbXBsKCkKewogICAgaWYgKG1fY3RybC0+ZXhpc3RzKG1fYW51bSkpCiAgICAgICAgbV9jdHJs
LT5hZGRfaW1wbChtX2FudW0sIDApOyAgICAvLyBDbGVhciBzZXJ2YW50IHBvaW50ZXIKfQoKLy8gSURM
IG1vZGVsIGF0dHJpYnV0ZS4KCkNDUzo6TW9kZWxUeXBlClRoZXJtb21ldGVyX2ltcGw6Ogptb2RlbCgp
IHRocm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pCnsKICAgIHJldHVybiBnZXRfbW9kZWwoKTsKfQoK
Ly8gSURMIGFzc2V0X251bSBhdHRyaWJ1dGUuCgpDQ1M6OkFzc2V0VHlwZQpUaGVybW9tZXRlcl9pbXBs
OjoKYXNzZXRfbnVtKCkgdGhyb3coQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbikKewogICAgcmV0dXJuIG1f
YW51bTsKfQoKLy8gSURMIHRlbXBlcmF0dXJlIGF0dHJpYnV0ZS4KCkNDUzo6VGVtcFR5cGUKVGhlcm1v
bWV0ZXJfaW1wbDo6CnRlbXBlcmF0dXJlKCkgdGhyb3coQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbikKewog
ICAgcmV0dXJuIGdldF90ZW1wKCk7Cn0KCi8vIElETCBsb2NhdGlvbiBhdHRyaWJ1dGUgYWNjZXNzb3Iu
CgpDQ1M6OkxvY1R5cGUKVGhlcm1vbWV0ZXJfaW1wbDo6CmxvY2F0aW9uKCkgdGhyb3coQ09SQkE6OlN5
c3RlbUV4Y2VwdGlvbikKewogICAgcmV0dXJuIGdldF9sb2MoKTsKfQoKLy8gSURMIHJlbW92ZSBvcGVy
YXRpb24uCgp2b2lkClRoZXJtb21ldGVyX2ltcGw6OgpyZW1vdmUoKSB0aHJvdyhDT1JCQTo6U3lzdGVt
RXhjZXB0aW9uKQp7CiAgICBtX2N0cmwtPnJlbW92ZV9pbXBsKG1fYW51bSk7CiAgICBpZiAoSUNQX29m
ZmxpbmUobV9hbnVtKSAhPSAwKQogICAgICAgIGFib3J0KCk7CiAgICAvLyBwb3N0aW52b2tlKCkgZGVs
ZXRlcyB0aGUgc2VydmFudC4KfQoKLy8gSURMIGxvY2F0aW9uIGF0dHJpYnV0ZSBtb2RpZmllci4KCnZv
aWQKVGhlcm1vbWV0ZXJfaW1wbDo6CmxvY2F0aW9uKGNvbnN0IGNoYXIgKmxvYykgdGhyb3coQ09SQkE6
OlN5c3RlbUV4Y2VwdGlvbikKewogICAgc2V0X2xvYyhsb2MpOwp9CiAgICAKLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gZ2V0IGEgdGhlcm1vc3RhdCdzIG5vbWluYWwgdGVtcGVyYXR1cmUuCgpDQ1M6
OlRlbXBUeXBlClRoZXJtb3N0YXRfaW1wbDo6CmdldF9ub21pbmFsX3RlbXAoKQp7CiAgICBzaG9ydCB0
ZW1wOwogICAgaWYgKElDUF9nZXQobV9hbnVtLCAibm9taW5hbF90ZW1wIiwgJnRlbXAsIHNpemVvZih0
ZW1wKSkgIT0gMCkKICAgICAgICBhYm9ydCgpOwogICAgcmV0dXJuIHRlbXA7Cn0KCi8vIEhlbHBlciBm
dW5jdGlvbiB0byBzZXQgYSB0aGVybW9zdGF0J3Mgbm9taW5hbCB0ZW1wZXJhdHVyZS4KCkNDUzo6VGVt
cFR5cGUKVGhlcm1vc3RhdF9pbXBsOjoKc2V0X25vbWluYWxfdGVtcChDQ1M6OlRlbXBUeXBlIG5ld190
ZW1wKQp0aHJvdyhDQ1M6OlRoZXJtb3N0YXQ6OkJhZFRlbXApCnsKICAgIHNob3J0IG9sZF90ZW1wOwoK
ICAgIC8vIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwcmV2aW91cyBub21pbmFsIHRlbXBlcmF0dXJlLAog
ICAgLy8gc28gd2UgZmlyc3QgcmVhZCB0aGUgY3VycmVudCBub21pbmFsIHRlbXBlcmF0dXJlIGJlZm9y
ZQogICAgLy8gY2hhbmdpbmcgaXQuCiAgICBpZiAoSUNQX2dldCgKICAgICAgICBtX2FudW0sICJub21p
bmFsX3RlbXAiLCAmb2xkX3RlbXAsIHNpemVvZihvbGRfdGVtcCkKICAgICAgICkgIT0gMCkgewogICAg
ICAgIGFib3J0KCk7CiAgICB9CiAgICAKICAgIC8vIE5vdyBzZXQgdGhlIG5vbWluYWwgdGVtcGVyYXR1
cmUgdG8gdGhlIG5ldyB2YWx1ZS4KICAgIGlmIChJQ1Bfc2V0KG1fYW51bSwgIm5vbWluYWxfdGVtcCIs
ICZuZXdfdGVtcCkgIT0gMCkgewoKICAgICAgICAvLyBJZiBJQ1Bfc2V0KCkgZmFpbGVkLCByZWFkIHRo
aXMgdGhlcm1vc3RhdCdzIG1pbmltdW0KICAgICAgICAvLyBhbmQgbWF4aW11bSBzbyB3ZSBjYW4gaW5p
dGlhbGl6ZSB0aGUgQmFkVGVtcCBleGNlcHRpb24uCiAgICAgICAgQ0NTOjpUaGVybW9zdGF0OjpCdERh
dGEgYnRkOwogICAgICAgIElDUF9nZXQoCiAgICAgICAgICAgIG1fYW51bSwgIk1JTl9URU1QIiwKICAg
ICAgICAgICAgJmJ0ZC5taW5fcGVybWl0dGVkLCBzaXplb2YoYnRkLm1pbl9wZXJtaXR0ZWQpCiAgICAg
ICAgKTsKICAgICAgICBJQ1BfZ2V0KAogICAgICAgICAgICBtX2FudW0sICJNQVhfVEVNUCIsCiAgICAg
ICAgICAgICZidGQubWF4X3Blcm1pdHRlZCwgc2l6ZW9mKGJ0ZC5tYXhfcGVybWl0dGVkKQogICAgICAg
ICk7CiAgICAgICAgYnRkLnJlcXVlc3RlZCA9IG5ld190ZW1wOwogICAgICAgIGJ0ZC5lcnJvcl9tc2cg
PSBDT1JCQTo6c3RyaW5nX2R1cCgKICAgICAgICAgICAgbmV3X3RlbXAgPiBidGQubWF4X3Blcm1pdHRl
ZCA/ICJUb28gaG90IiA6ICJUb28gY29sZCIKICAgICAgICApOwogICAgICAgIHRocm93IENDUzo6VGhl
cm1vc3RhdDo6QmFkVGVtcChidGQpOwogICAgfQogICAgcmV0dXJuIG9sZF90ZW1wOwp9CgovLyBDb25z
dHJ1Y3Rvci4KClRoZXJtb3N0YXRfaW1wbDo6ClRoZXJtb3N0YXRfaW1wbChDQ1M6OkFzc2V0VHlwZSBh
bnVtKSA6IFRoZXJtb21ldGVyX2ltcGwoYW51bSkKewogICAgLy8gSW50ZW50aW9uYWxseSBlbXB0eS4K
fQoKLy8gRGVzdHJ1Y3Rvci4KClRoZXJtb3N0YXRfaW1wbDo6Cn5UaGVybW9zdGF0X2ltcGwoKQp7CiAg
ICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5Lgp9CgovLyBJREwgZ2V0X25vbWluYWwgb3BlcmF0aW9uLgoK
Q0NTOjpUZW1wVHlwZQpUaGVybW9zdGF0X2ltcGw6OgpnZXRfbm9taW5hbCgpIHRocm93KENPUkJBOjpT
eXN0ZW1FeGNlcHRpb24pCnsKICAgIHJldHVybiBnZXRfbm9taW5hbF90ZW1wKCk7Cn0KCi8vIElETCBz
ZXRfbm9taW5hbCBvcGVyYXRpb24uCgpDQ1M6OlRlbXBUeXBlClRoZXJtb3N0YXRfaW1wbDo6CnNldF9u
b21pbmFsKENDUzo6VGVtcFR5cGUgbmV3X3RlbXApCnRocm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24s
IENDUzo6VGhlcm1vc3RhdDo6QmFkVGVtcCkKewogICAgcmV0dXJuIHNldF9ub21pbmFsX3RlbXAobmV3
X3RlbXApOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KCi8vIEhlbHBlciBmdW5jdGlvbiB0byBhZGQgYW4gZW50cnkgdG8gdGhl
IGFzc2V0IG1hcC4KCnZvaWQKQ29udHJvbGxlcl9pbXBsOjoKYWRkX2ltcGwoQ0NTOjpBc3NldFR5cGUg
YW51bSwgVGhlcm1vbWV0ZXJfaW1wbCAqIHRpcCkKewogICAgbV9hc3NldHNbYW51bV0gPSB0aXA7Cn0K
Ci8vIEhlbHBlciBmdW5jdGlvbiB0byByZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgYXNzZXQgbWFwLgoK
dm9pZApDb250cm9sbGVyX2ltcGw6OgpyZW1vdmVfaW1wbChDQ1M6OkFzc2V0VHlwZSBhbnVtKQp7CiAg
ICBtX2Fzc2V0cy5lcmFzZShhbnVtKTsKfQoKLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGxvY2F0ZSBhIHNl
cnZhbnQgaW4gdGhlIGFzc2V0IG1hcC4KCmJvb2wKQ29udHJvbGxlcl9pbXBsOjoKZXhpc3RzKENDUzo6
QXNzZXRUeXBlIGFudW0pCnsKICAgIHJldHVybiBtX2Fzc2V0cy5maW5kKGFudW0pICE9IG1fYXNzZXRz
LmVuZCgpOwp9CgovLyBDb25zdHJ1Y3RvcgoKQ29udHJvbGxlcl9pbXBsOjoKQ29udHJvbGxlcl9pbXBs
KAogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLAogICAgY29uc3QgY2hhciAqICAgICAgICAg
ICAgYXNzZXRfZmlsZQopIHRocm93KGludCkgOiBtX3BvYShQb3J0YWJsZVNlcnZlcjo6UE9BOjpfZHVw
bGljYXRlKHBvYSkpLAogICAgICAgICAgICAgICBtX2Fzc2V0X2ZpbGUoYXNzZXRfZmlsZSkKewogICAg
ZnN0cmVhbSBhZmlsZShtX2Fzc2V0X2ZpbGUsIGlvczo6aW58aW9zOjpvdXQsIDA2NjYpOwogICAgaWYg
KCFhZmlsZSkgewogICAgICAgIGNlcnIgPDwgIkNhbm5vdCBvcGVuICIgPDwgbV9hc3NldF9maWxlIDw8
IGVuZGw7CiAgICAgICAgdGhyb3cgMDsKICAgIH0KICAgIENDUzo6QXNzZXRUeXBlIGFudW07CiAgICB3
aGlsZSAoYWZpbGUgPj4gYW51bSkKICAgICAgICBtX2Fzc2V0c1thbnVtXSA9IDA7CiAgICBhZmlsZS5j
bG9zZSgpOwogICAgaWYgKCFhZmlsZSkgewogICAgICAgIGNlcnIgPDwgIkNhbm5vdCBjbG9zZSAiIDw8
IG1fYXNzZXRfZmlsZSA8PCBlbmRsOwogICAgICAgIHRocm93IDA7CiAgICB9Cn0KCi8vIERlc3RydWN0
b3IKCkNvbnRyb2xsZXJfaW1wbDo6Cn5Db250cm9sbGVyX2ltcGwoKQp7CiAgICAvLyBXcml0ZSBvdXQg
dGhlIGN1cnJlbnQgc2V0IG9mIGFzc2V0IG51bWJlcnMKICAgIC8vIGFuZCBjbGVhbiB1cCBhbGwgc2Vy
dmFudCBpbnN0YW5jZXMuCiAgICBvZnN0cmVhbSBhZmlsZShtX2Fzc2V0X2ZpbGUpOwogICAgaWYgKCFh
ZmlsZSkgewogICAgICAgIGNlcnIgPDwgIkNhbm5vdCBvcGVuICIgPDwgbV9hc3NldF9maWxlIDw8IGVu
ZGw7CiAgICAgICAgYWJvcnQoKTsKICAgIH0KICAgIEFzc2V0TWFwOjppdGVyYXRvciBpOwogICAgZm9y
IChpID0gbV9hc3NldHMuYmVnaW4oKTsgaSAhPSBtX2Fzc2V0cy5lbmQoKTsgaSsrKSB7CiAgICAgICAg
YWZpbGUgPDwgaS0+Zmlyc3QgPDwgZW5kbDsKICAgICAgICBpZiAoIWFmaWxlKSB7CiAgICAgICAgICAg
IGNlcnIgPDwgIkNhbm5vdCB1cGRhdGUgIiA8PCBtX2Fzc2V0X2ZpbGUgPDwgZW5kbDsKICAgICAgICAg
ICAgYWJvcnQoKTsKICAgICAgICB9CiAgICAgICAgZGVsZXRlIGktPnNlY29uZDsKICAgIH0KICAgIGFm
aWxlLmNsb3NlKCk7CiAgICBpZiAoIWFmaWxlKSB7CiAgICAgICAgY2VyciA8PCAiQ2Fubm90IGNsb3Nl
ICIgPDwgbV9hc3NldF9maWxlIDw8IGVuZGw7CiAgICAgICAgYWJvcnQoKTsKICAgIH0KfQoKQ0NTOjpU
aGVybW9tZXRlcl9wdHIKQ29udHJvbGxlcl9pbXBsOjoKY3JlYXRlX3RoZXJtb21ldGVyKENDUzo6QXNz
ZXRUeXBlIGFudW0sIGNvbnN0IGNoYXIgKiBsb2MpCnRocm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24s
IENDUzo6Q29udHJvbGxlcjo6RHVwbGljYXRlQXNzZXQpCnsKICAgIGlmIChhbnVtICUgMiA9PSAwKQog
ICAgICAgIHRocm93IENPUkJBOjpCQURfUEFSQU0oKTsgIC8vIFRoZXJtb21ldGVycyBoYXZlIG9kZCBu
dW1iZXJzCiAgICBpZiAoZXhpc3RzKGFudW0pKQogICAgICAgIHRocm93IENDUzo6Q29udHJvbGxlcjo6
RHVwbGljYXRlQXNzZXQoKTsKCiAgICBpZiAoSUNQX29ubGluZShhbnVtKSAhPSAwKQogICAgICAgIGFi
b3J0KCk7CiAgICBpZiAoSUNQX3NldChhbnVtLCAibG9jYXRpb24iLCBsb2MpICE9IDApCiAgICAgICAg
YWJvcnQoKTsKICAgIGFkZF9pbXBsKGFudW0sIDApOwogICAgcmV0dXJuIG1ha2VfZHJlZihtX3BvYSwg
YW51bSk7Cn0KCkNDUzo6VGhlcm1vc3RhdF9wdHIKQ29udHJvbGxlcl9pbXBsOjoKY3JlYXRlX3RoZXJt
b3N0YXQoCiAgICBDQ1M6OkFzc2V0VHlwZSAgICAgIGFudW0sCiAgICBjb25zdCBjaGFyKiAgICAgbG9j
LAogICAgQ0NTOjpUZW1wVHlwZSAgICAgICB0ZW1wKQp0aHJvdygKICAgIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24sCiAgICBDQ1M6OkNvbnRyb2xsZXI6OkR1cGxpY2F0ZUFzc2V0LAogICAgQ0NTOjpUaGVybW9z
dGF0OjpCYWRUZW1wKQp7CiAgICBpZiAoYW51bSAlIDIgIT0gMCkKICAgICAgICB0aHJvdyBDT1JCQTo6
QkFEX1BBUkFNKCk7ICAgLy8gVGhlcm1vc3RhdHMgaGF2ZSBldmVuIG51bWJlcnMKICAgIGlmIChleGlz
dHMoYW51bSkpCiAgICAgICAgdGhyb3cgQ0NTOjpDb250cm9sbGVyOjpEdXBsaWNhdGVBc3NldCgpOwoK
ICAgIGlmIChJQ1Bfb25saW5lKGFudW0pICE9IDApCiAgICAgICAgYWJvcnQoKTsKICAgIGlmIChJQ1Bf
c2V0KGFudW0sICJsb2NhdGlvbiIsIGxvYykgIT0gMCkKICAgICAgICBhYm9ydCgpOwogICAgLy8gU2V0
IHRoZSBub21pbmFsIHRlbXBlcmF0dXJlLgogICAgaWYgKElDUF9zZXQoYW51bSwgIm5vbWluYWxfdGVt
cCIsICZ0ZW1wKSAhPSAwKSB7CgogICAgICAgIC8vIElmIElDUF9zZXQoKSBmYWlsZWQsIHJlYWQgdGhp
cyB0aGVybW9zdGF0J3MgbWluaW11bQogICAgICAgIC8vIGFuZCBtYXhpbXVtIHNvIHdlIGNhbiBpbml0
aWFsaXplIHRoZSBCYWRUZW1wIGV4Y2VwdGlvbi4KICAgICAgICBDQ1M6OlRoZXJtb3N0YXQ6OkJ0RGF0
YSBidGQ7CiAgICAgICAgSUNQX2dldCgKICAgICAgICAgICAgYW51bSwgIk1JTl9URU1QIiwKICAgICAg
ICAgICAgJmJ0ZC5taW5fcGVybWl0dGVkLCBzaXplb2YoYnRkLm1pbl9wZXJtaXR0ZWQpCiAgICAgICAg
KTsKICAgICAgICBJQ1BfZ2V0KAogICAgICAgICAgICBhbnVtLCAiTUFYX1RFTVAiLAogICAgICAgICAg
ICAmYnRkLm1heF9wZXJtaXR0ZWQsIHNpemVvZihidGQubWF4X3Blcm1pdHRlZCkKICAgICAgICApOwog
ICAgICAgIGJ0ZC5yZXF1ZXN0ZWQgPSB0ZW1wOwogICAgICAgIGJ0ZC5lcnJvcl9tc2cgPSBDT1JCQTo6
c3RyaW5nX2R1cCgKICAgICAgICAgICAgdGVtcCA+IGJ0ZC5tYXhfcGVybWl0dGVkID8gIlRvbyBob3Qi
IDogIlRvbyBjb2xkIgogICAgICAgICk7CiAgICAgICAgSUNQX29mZmxpbmUoYW51bSk7CiAgICAgICAg
dGhyb3cgQ0NTOjpUaGVybW9zdGF0OjpCYWRUZW1wKGJ0ZCk7CiAgICB9CgogICAgYWRkX2ltcGwoYW51
bSwgMCk7CiAgICBDT1JCQTo6T2JqZWN0X3ZhciBvYmogPSBtYWtlX2RyZWYobV9wb2EsIGFudW0pOwog
ICAgcmV0dXJuIENDUzo6VGhlcm1vc3RhdDo6X25hcnJvdyhvYmopOwp9CgovLyBJREwgbGlzdCBvcGVy
YXRpb24uCgpDQ1M6OkNvbnRyb2xsZXI6OlRoZXJtb21ldGVyU2VxICoKQ29udHJvbGxlcl9pbXBsOjoK
bGlzdCgpIHRocm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pCnsKICAgIC8vIENyZWF0ZSBhIG5ldyB0
aGVybW9tZXRlciBzZXF1ZW5jZS4gQmVjYXVzZSB3ZSBrbm93CiAgICAvLyB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIHdlIHdpbGwgcHV0IG9udG8gdGhlIHNlcXVlbmNlLAogICAgLy8gd2UgdXNlIHRoZSBtYXhp
bXVtIGNvbnN0cnVjdG9yLgogICAgQ0NTOjpDb250cm9sbGVyOjpUaGVybW9tZXRlclNlcV92YXIgbGlz
dHYKICAgICAgICA9IG5ldyBDQ1M6OkNvbnRyb2xsZXI6OlRoZXJtb21ldGVyU2VxKG1fYXNzZXRzLnNp
emUoKSk7CiAgICBsaXN0di0+bGVuZ3RoKG1fYXNzZXRzLnNpemUoKSk7CgogICAgLy8gTG9vcCBvdmVy
IHRoZSBtX2Fzc2V0cyBzZXQgYW5kIGNyZWF0ZSBhCiAgICAvLyByZWZlcmVuY2UgZm9yIGVhY2ggZGV2
aWNlLgogICAgQ09SQkE6OlVMb25nIGNvdW50ID0gMDsKICAgIEFzc2V0TWFwOjppdGVyYXRvciBpOwog
ICAgZm9yIChpID0gbV9hc3NldHMuYmVnaW4oKTsgaSAhPSBtX2Fzc2V0cy5lbmQoKTsgaSsrKQogICAg
ICAgIGxpc3R2W2NvdW50KytdID0gbWFrZV9kcmVmKG1fcG9hLCBpLT5maXJzdCk7CiAgICByZXR1cm4g
bGlzdHYuX3JldG4oKTsKfQoKLy8gSURMIGNoYW5nZSBvcGVyYXRpb24uCgp2b2lkCkNvbnRyb2xsZXJf
aW1wbDo6CmNoYW5nZSgKICAgIGNvbnN0IENDUzo6Q29udHJvbGxlcjo6VGhlcm1vc3RhdFNlcSAmICB0
bGlzdCwKICAgIENPUkJBOjpTaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YQopIHRo
cm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIENDUzo6Q29udHJvbGxlcjo6RUNoYW5nZSkKewogICAg
Q0NTOjpDb250cm9sbGVyOjpFQ2hhbmdlIGVjOyAgICAvLyBKdXN0IGluIGNhc2Ugd2UgbmVlZCBpdAoK
ICAgIC8vIFdlIGNhbm5vdCBhZGQgYSBkZWx0YSB2YWx1ZSB0byBhIHRoZXJtb3N0YXQncyB0ZW1wZXJh
dHVyZQogICAgLy8gZGlyZWN0bHksIHNvIGZvciBlYWNoIHRoZXJtb3N0YXQsIHdlIHJlYWQgdGhlIG5v
bWluYWwKICAgIC8vIHRlbXBlcmF0dXJlLCBhZGQgdGhlIGRlbHRhIHZhbHVlIHRvIGl0LCBhbmQgd3Jp
dGUKICAgIC8vIGl0IGJhY2sgYWdhaW4uCiAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRs
aXN0Lmxlbmd0aCgpOyBpKyspIHsKICAgICAgICBpZiAoQ09SQkE6OmlzX25pbCh0bGlzdFtpXSkpCiAg
ICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBuaWwgcmVmZXJl
bmNlcwoKICAgICAgICAvLyBSZWFkIG5vbWluYWwgdGVtcCBhbmQgdXBkYXRlIGl0LgogICAgICAgIEND
Uzo6VGVtcFR5cGUgdG5vbSA9IHRsaXN0W2ldLT5nZXRfbm9taW5hbCgpOwogICAgICAgIHRub20gKz0g
ZGVsdGE7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGxpc3RbaV0tPnNldF9ub21pbmFsKHRub20p
OwogICAgICAgIH0KICAgICAgICBjYXRjaCAoY29uc3QgQ0NTOjpUaGVybW9zdGF0OjpCYWRUZW1wICZi
dCkgewogICAgICAgICAgICAvLyBJZiB0aGUgdXBkYXRlIGZhaWxlZCBiZWNhdXNlIHRoZSB0ZW1wZXJh
dHVyZQogICAgICAgICAgICAvLyBpcyBvdXQgb2YgcmFuZ2UsIHdlIGFkZCB0aGUgdGhlcm1vc3RhdCdz
IGluZm8KICAgICAgICAgICAgLy8gdG8gdGhlIGVycm9ycyBzZXF1ZW5jZS4KICAgICAgICAgICAgQ09S
QkE6OlVMb25nIGxlbiA9IGVjLmVycm9ycy5sZW5ndGgoKTsKICAgICAgICAgICAgZWMuZXJyb3JzLmxl
bmd0aChsZW4gKyAxKTsKICAgICAgICAgICAgZWMuZXJyb3JzW2xlbl0udG1zdGF0X3JlZiA9IHRsaXN0
W2ldOwogICAgICAgICAgICBlYy5lcnJvcnNbbGVuXS5pbmZvID0gYnQuZGV0YWlsczsKICAgICAgICB9
CiAgICB9CgogICAgLy8gSWYgd2UgZW5jb3VudGVyZWQgZXJyb3JzIGluIHRoZSBhYm92ZSBsb29wLAog
ICAgLy8gd2Ugd2lsbCBoYXZlIGFkZGVkIGVsZW1lbnRzIHRvIHRoZSBlcnJvcnMgc2VxdWVuY2UuCiAg
ICBpZiAoZWMuZXJyb3JzLmxlbmd0aCgpICE9IDApCiAgICAgICAgdGhyb3cgZWM7Cn0KCi8vIElETCBm
aW5kIG9wZXJhdGlvbgoKdm9pZApDb250cm9sbGVyX2ltcGw6OgpmaW5kKENDUzo6Q29udHJvbGxlcjo6
U2VhcmNoU2VxICYgc2xpc3QpCnRocm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pCnsKICAgIC8vIExv
b3Agb3ZlciBpbnB1dCBsaXN0IGFuZCBsb29rdXAgZWFjaCBkZXZpY2UuCiAgICBDT1JCQTo6VUxvbmcg
bGlzdGxlbiA9IHNsaXN0Lmxlbmd0aCgpOwogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBs
aXN0bGVuOyBpKyspIHsKCiAgICAgICAgQXNzZXRNYXA6Oml0ZXJhdG9yIHdoZXJlOyAgIC8vIEl0ZXJh
dG9yIGZvciBhc3NldCBzZXQKICAgICAgICBpbnQgbnVtX2ZvdW5kID0gMDsgICAgICAgICAgLy8gTnVt
IG1hdGNoZWQgcGVyIGl0ZXJhdGlvbgogICAgICAgIAogICAgICAgIC8vIEFzc3VtZSB3ZSB3aWxsIG5v
dCBmaW5kIGEgbWF0Y2hpbmcgZGV2aWNlLgogICAgICAgIHNsaXN0W2ldLmRldmljZSA9IENDUzo6VGhl
cm1vbWV0ZXI6Ol9uaWwoKTsKCiAgICAgICAgLy8gV29yayBvdXQgd2hldGhlciB3ZSBhcmUgc2VhcmNo
aW5nIGJ5IGFzc2V0LAogICAgICAgIC8vIG1vZGVsLCBvciBsb2NhdGlvbi4KICAgICAgICBDQ1M6OkNv
bnRyb2xsZXI6OlNlYXJjaENyaXRlcmlvbiBzYyA9IHNsaXN0W2ldLmtleS5fZCgpOwogICAgICAgIGlm
IChzYyA9PSBDQ1M6OkNvbnRyb2xsZXI6OkFTU0VUKSB7CiAgICAgICAgICAgIC8vIFNlYXJjaCBmb3Ig
bWF0Y2hpbmcgYXNzZXQgbnVtYmVyLgogICAgICAgICAgICB3aGVyZSA9IG1fYXNzZXRzLmZpbmQoc2xp
c3RbaV0ua2V5LmFzc2V0X251bSgpKTsKICAgICAgICAgICAgaWYgKHdoZXJlICE9IG1fYXNzZXRzLmVu
ZCgpKQogICAgICAgICAgICAgICAgc2xpc3RbaV0uZGV2aWNlID0gbWFrZV9kcmVmKG1fcG9hLCB3aGVy
ZS0+Zmlyc3QpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFNlYXJjaCBmb3IgbW9kZWwg
b3IgbG9jYXRpb24gc3RyaW5nLgogICAgICAgICAgICBjb25zdCBjaGFyICpzZWFyY2hfc3RyOwogICAg
ICAgICAgICBpZiAoc2MgPT0gQ0NTOjpDb250cm9sbGVyOjpMT0NBVElPTikKICAgICAgICAgICAgICAg
IHNlYXJjaF9zdHIgPSBzbGlzdFtpXS5rZXkubG9jKCk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIHNlYXJjaF9zdHIgPSBzbGlzdFtpXS5rZXkubW9kZWxfZGVzYygpOwoKICAgICAgICAgICAg
Ly8gRmluZCBmaXJzdCBtYXRjaGluZyBkZXZpY2UgKGlmIGFueSkuCiAgICAgICAgICAgIHdoZXJlID0g
ZmluZF9pZigKICAgICAgICAgICAgICAgICAgICAgICAgbV9hc3NldHMuYmVnaW4oKSwgbV9hc3NldHMu
ZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgIFN0ckZpbmRlcihzYywgc2VhcmNoX3N0cikKICAg
ICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gV2hpbGUgdGhlcmUg
YXJlIG1hdGNoZXMuLi4KICAgICAgICAgICAgd2hpbGUgKHdoZXJlICE9IG1fYXNzZXRzLmVuZCgpKSB7
CiAgICAgICAgICAgICAgICBpZiAobnVtX2ZvdW5kID09IDApIHsKICAgICAgICAgICAgICAgICAgICAv
LyBGaXJzdCBtYXRjaCBvdmVyd3JpdGVzIHJlZmVyZW5jZQogICAgICAgICAgICAgICAgICAgIC8vIGlu
IHNlYXJjaCByZWNvcmQuCiAgICAgICAgICAgICAgICAgICAgc2xpc3RbaV0uZGV2aWNlID0gbWFrZV9k
cmVmKG1fcG9hLCB3aGVyZS0+Zmlyc3QpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAvLyBGdXJ0aGVyIG1hdGNoZXMgZWFjaCBhcHBlbmQgYSBuZXcKICAgICAgICAgICAg
ICAgICAgICAvLyBlbGVtZW50IHRvIHRoZSBzZWFyY2ggc2VxdWVuY2UuCiAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OlVMb25nIGxlbiA9IHNsaXN0Lmxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAgIHNs
aXN0Lmxlbmd0aChsZW4gKyAxKTsKICAgICAgICAgICAgICAgICAgICBzbGlzdFtsZW5dLmtleSA9IHNs
aXN0W2ldLmtleTsKICAgICAgICAgICAgICAgICAgICBzbGlzdFtsZW5dLmRldmljZSA9IG1ha2VfZHJl
ZihtX3BvYSwgd2hlcmUtPmZpcnN0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG51
bV9mb3VuZCsrOwoKICAgICAgICAgICAgICAgIC8vIEZpbmQgbmV4dCBtYXRjaGluZyBkZXZpY2Ugd2l0
aCB0aGlzIGtleS4KICAgICAgICAgICAgICAgIHdoZXJlID0gZmluZF9pZigKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsrd2hlcmUsIG1fYXNzZXRzLmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyRmluZGVyKHNjLCBzZWFyY2hfc3RyKQogICAgICAgICAgICAgICAgICAgICAgICApOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkRldmljZUxvY2F0b3JfaW1wbDo6
CkRldmljZUxvY2F0b3JfaW1wbChDb250cm9sbGVyX2ltcGwgKiBjdHJsKSA6IG1fY3RybChjdHJsKQp7
CiAgICAvLyBJbnRlbnRpb25hbGx5IGVtcHR5Cn0KClBvcnRhYmxlU2VydmVyOjpTZXJ2YW50CkRldmlj
ZUxvY2F0b3JfaW1wbDo6CnByZWludm9rZSgKICAgIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpPYmplY3RJ
ZCAmIG9pZCwKICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyICAgICAgICAgIHBvYSwKICAgIGNvbnN0
IGNoYXIgKiAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwKICAgIHZvaWQgKiAmICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvb2tpZQopIHRocm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRh
YmxlU2VydmVyOjpGb3J3YXJkUmVxdWVzdCkKewogICAgLy8gQ29udmVydCBvYmplY3QgaWQgaW50byBh
c3NldCBudW1iZXIuCiAgICBDT1JCQTo6U3RyaW5nX3ZhciBvaWRfc3RyaW5nOwogICAgdHJ5IHsKICAg
ICAgICBvaWRfc3RyaW5nID0gUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3RvX3N0cmluZyhvaWQpOwog
ICAgfSBjYXRjaCAoY29uc3QgQ09SQkE6OkJBRF9QQVJBTSAmKSB7CiAgICAgICAgdGhyb3cgQ09SQkE6
Ok9CSkVDVF9OT1RfRVhJU1QoKTsKICAgIH0KCiAgICBpZiAoc3RyY21wKG9pZF9zdHJpbmcuaW4oKSwg
Q29udHJvbGxlcl9vaWQpID09IDApCiAgICAgICAgcmV0dXJuIG1fY3RybDsKCiAgICBpc3Ryc3RyZWFt
IGlzdHIob2lkX3N0cmluZy5pbigpKTsKICAgIENDUzo6QXNzZXRUeXBlIGFudW07CiAgICBpc3RyID4+
IGFudW07CiAgICBpZiAoaXN0ci5mYWlsKCkpCiAgICAgICAgdGhyb3cgQ09SQkE6Ok9CSkVDVF9OT1Rf
RVhJU1QoKTsKICAgIAogICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZGV2aWNlIGlzIGtub3duLgogICAg
aWYgKCFtX2N0cmwtPmV4aXN0cyhhbnVtKSkKICAgICAgICB0aHJvdyBDT1JCQTo6T0JKRUNUX05PVF9F
WElTVCgpOwoKICAgIC8vIExvb2sgYXQgdGhlIG9iamVjdCBtYXAgdG8gZmluZCBvdXQgd2hldGhlcgog
ICAgLy8gd2UgaGF2ZSBhIHNlcnZhbnQgaW4gbWVtb3J5LgogICAgVGhlcm1vbWV0ZXJfaW1wbCAqIHNl
cnZhbnQ7CiAgICBBY3RpdmVPYmplY3RNYXA6Oml0ZXJhdG9yIHNlcnZhbnRfcG9zID0gbV9hb20uZmlu
ZChhbnVtKTsKICAgIGlmIChzZXJ2YW50X3BvcyAgPT0gbV9hb20uZW5kKCkpIHsKICAgICAgICAvLyBO
byBzZXJ2YW50IGluIG1lbW9yeS4gSWYgZXZpY3RvciBxdWV1ZSBpcyBmdWxsLAogICAgICAgIC8vIGV2
aWN0IHNlcnZhbnQgYXQgaGVhZCBvZiBxdWV1ZS4KICAgICAgICBpZiAobV9lcS5zaXplKCkgPT0gTUFY
X0VRX1NJWkUpIHsKICAgICAgICAgICAgc2VydmFudCA9IG1fZXEuYmFjaygpOwogICAgICAgICAgICBt
X2FvbS5lcmFzZShzZXJ2YW50LT5tX2FudW0pOwogICAgICAgICAgICBtX2VxLnBvcF9iYWNrKCk7CiAg
ICAgICAgICAgIGRlbGV0ZSBzZXJ2YW50OwogICAgICAgIH0KICAgICAgICAvLyBJbnN0YW50aWF0ZSBj
b3JyZWN0IHR5cGUgb2Ygc2VydmFudC4KICAgICAgICBjaGFyIGJ1ZlszMl07CiAgICAgICAgaWYgKElD
UF9nZXQoYW51bSwgIm1vZGVsIiwgYnVmLCBzaXplb2YoYnVmKSkgIT0gMCkKICAgICAgICAgICAgYWJv
cnQoKTsKICAgICAgICBpZiAoc3RyY21wKGJ1ZiwgIlNlbnMtQS1UZW1wIikgPT0gMCkKICAgICAgICAg
ICAgc2VydmFudCA9IG5ldyBUaGVybW9tZXRlcl9pbXBsKGFudW0pOwogICAgICAgIGVsc2UKICAgICAg
ICAgICAgc2VydmFudCA9IG5ldyBUaGVybW9zdGF0X2ltcGwoYW51bSk7CiAgICB9IGVsc2UgewogICAg
ICAgIC8vIFNlcnZhbnQgYWxyZWFkeSBpbiBtZW1vcnkuCiAgICAgICAgc2VydmFudCA9ICooc2VydmFu
dF9wb3MtPnNlY29uZCk7ICAgLy8gUmVtZW1iZXIgc2VydmFudAogICAgICAgIG1fZXEuZXJhc2Uoc2Vy
dmFudF9wb3MtPnNlY29uZCk7ICAgIC8vIFJlbW92ZSBmcm9tIHF1ZXVlCgogICAgICAgIC8vIElmIG9w
ZXJhdGlvbiBpcyAicmVtb3ZlIiwgYWxzbyByZW1vdmUgZW50cnkgZnJvbQogICAgICAgIC8vIGFjdGl2
ZSBvYmplY3QgbWFwIC0tIHRoZSBvYmplY3QgaXMgYWJvdXQgdG8gYmUgZGVsZXRlZC4KICAgICAgICBp
ZiAoc3RyY21wKG9wZXJhdGlvbiwgInJlbW92ZSIpID09IDApCiAgICAgICAgICAgIG1fYW9tLmVyYXNl
KHNlcnZhbnRfcG9zKTsKICAgIH0KCiAgICAvLyBXZSBmb3VuZCBhIHNlcnZhbnQsIG9yIGp1c3QgaW5z
dGFudGlhdGVkIGl0LgogICAgLy8gSWYgdGhlIG9wZXJhdGlvbiBpcyBub3QgYSByZW1vdmUsIG1vdmUK
ICAgIC8vIHRoZSBzZXJ2YW50IHRvIHRoZSB0YWlsIG9mIHRoZSBldmljdG9yIHF1ZXVlCiAgICAvLyBh
bmQgdXBkYXRlIGl0cyBxdWV1ZSBwb3NpdGlvbiBpbiB0aGUgbWFwLgogICAgaWYgKHN0cmNtcChvcGVy
YXRpb24sICJyZW1vdmUiKSAhPSAwKSB7CiAgICAgICAgbV9lcS5wdXNoX2Zyb250KHNlcnZhbnQpOwog
ICAgICAgIG1fYW9tW2FudW1dID0gbV9lcS5iZWdpbigpOwogICAgfQoKICAgIHJldHVybiBzZXJ2YW50
Owp9Cgp2b2lkCkRldmljZUxvY2F0b3JfaW1wbDo6CnBvc3RpbnZva2UoCiAgICBjb25zdCBQb3J0YWJs
ZVNlcnZlcjo6T2JqZWN0SWQgJiBvaWQsCiAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciAgICAgICAg
ICBwb2EsCiAgICBjb25zdCBjaGFyICogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sCiAgICB2
b2lkICogICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUsCiAgICBQb3J0YWJsZVNlcnZlcjo6
U2VydmFudCAgICAgICAgICBzZXJ2YW50CikgdGhyb3coQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbikKewog
ICAgLy8gRG8gbm90aGluZyBpZiB0aGlzIHdhcyBhbiBvcGVyYXRpb24gb24gdGhlIGNvbnRyb2xsZXIu
CiAgICBpZiAoc2VydmFudCA9PSBtX2N0cmwpCiAgICAgICAgcmV0dXJuOwoKICAgIC8vIElmIHRoZSBv
cGVyYXRpb24gdGhhdCBqdXN0IHJhbiB3YXMgYSByZW1vdmUsIHdlIGRlbGV0ZSB0aGUKICAgIC8vIHNl
cnZhbnQuCiAgICBpZiAoc3RyY21wKG9wZXJhdGlvbiwgInJlbW92ZSIpID09IDApCiAgICAgICAgZGVs
ZXRlIHNlcnZhbnQ7Cn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCnsK
ICAgIENPUkJBOjpPUkJfdmFyIG9yYjsKCiAgICB0cnkgewogICAgICAgIC8vIEluaXRpYWxpemUgb3Ji
CiAgICAgICAgb3JiID0gQ09SQkE6Ok9SQl9pbml0KGFyZ2MsIGFyZ3YpOwoKICAgICAgICAvLyBHZXQg
cmVmZXJlbmNlIHRvIFJvb3QgUE9BLgogICAgICAgIENPUkJBOjpPYmplY3RfdmFyIG9iagogICAgICAg
ICAgICA9IG9yYi0+cmVzb2x2ZV9pbml0aWFsX3JlZmVyZW5jZXMoIlJvb3RQT0EiKTsKICAgICAgICBQ
b3J0YWJsZVNlcnZlcjo6UE9BX3ZhciBwb2EKICAgICAgICAgICAgPSBQb3J0YWJsZVNlcnZlcjo6UE9B
OjpfbmFycm93KG9iaik7CgogICAgICAgIC8vIEdldCBQT0EgbWFuYWdlcgogICAgICAgIFBvcnRhYmxl
U2VydmVyOjpQT0FNYW5hZ2VyX3ZhciBwb2FfbWdyID0gcG9hLT50aGVfUE9BTWFuYWdlcigpOwogICAg
ICAgIAogICAgICAgIC8vIENyZWF0ZSBhIHBvbGljeSBsaXN0LiBXZSB1c2UgcGVyc2lzdGVudCBvYmpl
Y3RzIHdpdGgKICAgICAgICAvLyB1c2VyLWFzc2lnbmVkIElEcywgYW5kIGV4cGxpY2l0IGFjdGl2YXRp
b24uCiAgICAgICAgQ09SQkE6OlBvbGljeUxpc3QgcG9saWN5X2xpc3Q7CiAgICAgICAgcG9saWN5X2xp
c3QubGVuZ3RoKDYpOwogICAgICAgIHBvbGljeV9saXN0WzBdID0gcG9hLT5jcmVhdGVfbGlmZXNwYW5f
cG9saWN5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydGFibGVTZXJ2ZXI6OlBFUlNJU1RF
TlQKICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgcG9saWN5X2xpc3RbMV0gPSBwb2Et
PmNyZWF0ZV9pZF9hc3NpZ25tZW50X3BvbGljeSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBv
cnRhYmxlU2VydmVyOjpVU0VSX0lECiAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHBv
bGljeV9saXN0WzJdID0gcG9hLT5jcmVhdGVfaW1wbGljaXRfYWN0aXZhdGlvbl9wb2xpY3koCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQb3J0YWJsZVNlcnZlcjo6Tk9fSU1QTElDSVRfQUNUSVZBVElP
TgogICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICBwb2xpY3lfbGlzdFszXSA9IHBvYS0+
Y3JlYXRlX3JlcXVlc3RfcHJvY2Vzc2luZ19wb2xpY3koCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQb3J0YWJsZVNlcnZlcjo6VVNFX1NFUlZBTlRfTUFOQUdFUgogICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgICAgICBwb2xpY3lfbGlzdFs0XSA9IHBvYS0+Y3JlYXRlX3NlcnZhbnRfcmV0ZW50aW9u
X3BvbGljeSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRhYmxlU2VydmVyOjpOT05fUkVU
QUlOCiAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHBvbGljeV9saXN0WzVdID0gcG9h
LT5jcmVhdGVfdGhyZWFkX3BvbGljeSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRhYmxl
U2VydmVyOjpTSU5HTEVfVEhSRUFEX01PREVMCiAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAg
ICAgICAvLyBDcmVhdGUgYSBQT0EgZm9yIGFsbCBDQ1MgZWxlbWVudHMuCiAgICAgICAgUG9ydGFibGVT
ZXJ2ZXI6OlBPQV92YXIgY2NzX3BvYQogICAgICAgICAgICA9IHBvYS0+Y3JlYXRlX1BPQSgiQ0NTX1BP
QSIsIHBvYV9tZ3IsIHBvbGljeV9saXN0KTsKICAgICAgICAKICAgICAgICAvLyBDcmVhdGUgYSBjb250
cm9sbGVyIGFuZCBzZXQgc3RhdGljIG1fY3RybCBtZW1iZXIKICAgICAgICAvLyBmb3IgdGhlcm1vc3Rh
dHMgYW5kIHRoZXJtb21ldGVycy4KICAgICAgICBDb250cm9sbGVyX2ltcGwgY3RybF9zZXJ2YW50KGNj
c19wb2EsICIvdG1wL0NDU19hc3NldHMiKTsKICAgICAgICBUaGVybW9tZXRlcl9pbXBsOjptX2N0cmwg
PSAmY3RybF9zZXJ2YW50OwoKICAgICAgICAvLyBDcmVhdGUgYSByZWZlcmVuY2UgZm9yIHRoZSBjb250
cm9sbGVyIGFuZAogICAgICAgIC8vIGNyZWF0ZSB0aGUgY29ycmVzcG9uZGluZyBDT1JCQSBvYmplY3Qu
CiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3ZhciBvaWQKICAgICAgICAgICAgPSBQb3J0
YWJsZVNlcnZlcjo6c3RyaW5nX3RvX09iamVjdElkKENvbnRyb2xsZXJfb2lkKTsKICAgICAgICBvYmog
PSBjY3NfcG9hLT5jcmVhdGVfcmVmZXJlbmNlX3dpdGhfaWQoCiAgICAgICAgICAgICAgICBvaWQsICJJ
REw6YWNtZS5jb20vQ0NTL0NvbnRyb2xsZXI6MS4wIgogICAgICAgICAgICAgICk7CgogICAgICAgIC8v
IFdyaXRlIGEgcmVmZXJlbmNlIGZvciB0aGUgY29udHJvbGxlciB0byBzdGRvdXQuCiAgICAgICAgQ09S
QkE6OlN0cmluZ192YXIgc3RyID0gb3JiLT5vYmplY3RfdG9fc3RyaW5nKG9iaik7CiAgICAgICAgY291
dCA8PCBzdHIgPDwgZW5kbCA8PCBlbmRsOwoKICAgICAgICAvLyBJbnN0YW50aWF0ZSB0aGUgc2VydmFu
dCBsb2NhdG9yIGZvciBkZXZpY2VzLgogICAgICAgIERldmljZUxvY2F0b3JfaW1wbCBteV9sb2NhdG9y
KCZjdHJsX3NlcnZhbnQpOwogICAgICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcl92YXIg
bG9jYXRvcgogICAgICAgICAgICA9IG15X2xvY2F0b3IuX3RoaXMoKTsKCiAgICAgICAgLy8gU2V0IHNl
cnZhbnQgbG9jYXRvci4KICAgICAgICBjY3NfcG9hLT5zZXRfc2VydmFudF9tYW5hZ2VyKGxvY2F0b3Ip
OwogICAgICAgIAogICAgICAgIC8vIEFjdGl2YXRlIHRoZSBQT0EgbWFuYWdlci4KICAgICAgICBwb2Ff
bWdyLT5hY3RpdmF0ZSgpOwoKICAgICAgICAvLyBBY2NlcHQgcmVxdWVzdHMKICAgICAgICBvcmItPnJ1
bigpOwogICAgfQogICAgY2F0Y2ggKGNvbnN0IENPUkJBOjpFeGNlcHRpb24gJiBlKSB7CiAgICAgICAg
Y2VyciA8PCAiVW5jYXVnaHQgQ09SQkEgZXhjZXB0aW9uOiAiIDw8IGUgPDwgZW5kbDsKICAgICAgICBy
ZXR1cm4gMTsKICAgIH0gY2F0Y2ggKC4uLikgewogICAgICAgIGFib3J0KCk7ICAgIC8vIFVuY2F1Z2h0
IGV4Y2VwdGlvbiwgZHVtcCBjb3JlCiAgICB9CiAgICByZXR1cm4gMDsKfQo=
------------98516880114954SINAEMAIL---
Content-Disposition: inline;filename="icp.cc"
Content-Transfer-Encoding: base64
Content-Type: application/x-msdownload; name="icp.cc"
I2luY2x1ZGUgICAgPHN0cmluZz4KI2luY2x1ZGUgICAgPG1hcD4KI2luY2x1ZGUgICAgPGFsZ29yaXRo
bT4KI2luY2x1ZGUgICAgPHN0ZGxpYi5oPgojaW5jbHVkZSAgICAiaWNwLmgiCgovLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmVudW0g
RGV2aWNlVHlwZSB7IHRoZXJtb21ldGVyLCB0aGVybW9zdGF0IH07CgpzdHJ1Y3QgRGV2aWNlU3RhdGUg
eyAgICAgICAgICAgICAgICAvLyBTdGF0ZSBmb3IgYSBkZXZpY2UKICAgIERldmljZVR5cGUgICAgICB0
eXBlOwogICAgY29uc3QgY2hhciAqICAgIG1vZGVsOwogICAgc3RyaW5nICAgICAgICAgIGxvY2F0aW9u
OwogICAgc2hvcnQgICAgICAgICAgIG5vbWluYWxfdGVtcDsgICAvLyBGb3IgdGhlcm1vc3RhdHMgb25s
eQp9Owp0eXBlZGVmIG1hcDx1bnNpZ25lZCBsb25nLCBEZXZpY2VTdGF0ZT4gU3RhdGVNYXA7CgovLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KCmNvbnN0IHNpemVfdCBNQVhTVFIgPSAzMjsgICAgICAgLy8gTWF4IGxlbiBvZiBzdHJpbmcgaW5j
bHVkaW5nIE5VTAoKY29uc3Qgc2hvcnQgTUlOX1RFTVAgPSA0MDsgICAgICAvLyA0MCBGID09ICA0LjQ0
IEMKY29uc3Qgc2hvcnQgTUFYX1RFTVAgPSA5MDsgICAgICAvLyA5MCBGID09IDMyLjIyIEMKY29uc3Qg
c2hvcnQgREZMVF9URU1QID0gNjg7ICAgICAvLyA2OCBGID09IDIwLjAwIEMKCnN0YXRpYyBTdGF0ZU1h
cCBkc3RhdGU7ICAgICAgICAgLy8gTWFwIG9mIGtub3duIGRldmljZXMKCi8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gSUNQX29u
bGluZSgpIHNpbXVsYXRlcyBhZGRpbmcgYSBuZXcgZGV2aWNlIHRvIHRoZSBuZXR3b3JrIGJ5Ci8vIGFk
ZGluZyBpdCB0byB0aGUgZHN0YXRlIG1hcC4KLy8KLy8gRm9yIHRoaXMgc2ltcGxlIHNpbXVsYXRpb24s
IGRldmljZXMgd2l0aCBvZGQgYXNzZXQgbnVtYmVycwovLyBhcmUgdGhlcm1vbWV0ZXJzIGFuZCBkZXZp
Y2VzIHdpdGggZXZlbiBhc3NldCBudW1iZXJzCi8vIGFyZSB0aGVybW9zdGF0cy4KLy8KLy8gVGhlcm1v
c3RhdHMgZ2V0IGFuIGluaXRpYWwgbm9taW5hbCB0ZW1wZXJhdHVyZSBvZiBERkxUX1RFTVAuCi8vIFRo
ZSBsb2NhdGlvbiBzdHJpbmcgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rIGJlY2F1c2UgaXQKLy8g
bXVzdCBiZSBwcm9ncmFtbWVkIGJ5IHRoZSBjb250cm9sbGVyIGFmdGVyIHB1dHRpbmcgdGhlIGRldmlj
ZQovLyBvbi1saW5lIChhcyBzaG91bGQgYmUgdGhlIG5vbWluYWwgdGVtcGVyYXR1cmUpLgovLwovLyBJ
ZiBhIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgaXMgYWxyZWFkeSBvbi1saW5lLCB0aGUKLy8g
cmV0dXJuIHZhbHVlIGlzIC0xLiBBIHplcm8gcmV0dXJuIHZhbHVlIGluZGljYXRlcyBzdWNjZXNzLgoK
ZXh0ZXJuICJDIgppbnQKSUNQX29ubGluZSh1bnNpZ25lZCBsb25nIGlkKQp7CiAgICAvLyBMb29rIGZv
ciBpZCBpbiBzdGF0ZSBtYXAuCiAgICBTdGF0ZU1hcDo6aXRlcmF0b3IgcG9zID0gZHN0YXRlLmZpbmQo
aWQpOwogICAgaWYgKHBvcyAhPSBkc3RhdGUuZW5kKCkpCiAgICAgICAgcmV0dXJuIC0xOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBleGlzdHMKICAgIAogICAgLy8gRmlsbCBpbiBzdGF0
ZS4KICAgIERldmljZVN0YXRlIGRzOwogICAgZHMudHlwZSA9IChpZCAlIDIpID8gdGhlcm1vbWV0ZXIg
OiB0aGVybW9zdGF0OwogICAgZHMubW9kZWwgPSAoZHMudHlwZSA9PSB0aGVybW9tZXRlcikKICAgICAg
ICAgICAgICAgID8gIlNlbnMtQS1UZW1wIiA6ICJTZWxlY3QtQS1UZW1wIjsKICAgIGRzLm5vbWluYWxf
dGVtcCA9IERGTFRfVEVNUDsKCiAgICAvLyBJbnNlcnQgbmV3IGRldmljZSBpbnRvIG1hcAogICAgZHN0
YXRlW2lkXSA9IGRzOwoKICAgIHJldHVybiAwOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIElDUF9vZmZsaW5lKCkgc2lt
dWxhdGVzIHJlbW92aW5nIGEgZGV2aWNlIGZyb20gdGhlIG5ldHdvcmsgYnkKLy8gcmVtb3ZpbmcgaXQg
ZnJvbSB0aGUgZHN0YXRlIG1hcC4gSWYgdGhlIGRldmljZSBpc24ndCBrbm93biwgdGhlCi8vIHJldHVy
biB2YWx1ZSBpcyAtMS4gQSB6ZXJvIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgc3VjY2Vzcy4KCmV4dGVy
biAiQyIKaW50CklDUF9vZmZsaW5lKHVuc2lnbmVkIGxvbmcgaWQpCnsKICAgIC8vIExvb2sgZm9yIGlk
IGluIHN0YXRlIG1hcAogICAgU3RhdGVNYXA6Oml0ZXJhdG9yIHBvcyA9IGRzdGF0ZS5maW5kKGlkKTsK
ICAgIGlmIChwb3MgPT0gZHN0YXRlLmVuZCgpKQogICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBObyBzdWNoIGRldmljZQogICAgZHN0YXRlLmVyYXNlKGlkKTsKICAg
IHJldHVybiAwOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIHZhcnlfdGVtcCgpIHNpbXVsYXRlcyB0aGUgdmFyaWF0aW9u
IGluIGFjdHVhbCB0ZW1wZXJhdHVyZQovLyBhcm91bmQgYSB0aGVybW9zdGF0LlRoZSBmdW5jdGlvbiBy
YW5kb21seSB2YXJpZXMgdGhlCi8vIHRlbXBlcmF0dXJlIGFzIGEgcGVyY2VudGFnZSBvZiBjYWxscyBh
cyBmb2xsb3dzOgovLwovLyAgICAgIDMgZGVncmVlcyB0b28gY29sZDogICAgICA1JQovLyAgICAgIDMg
ZGVncmVlcyB0b28gaG90OiAgICAgICA1JQovLyAgICAgIDIgZGVncmVlcyB0b28gY29sZDogICAgIDEw
JQovLyAgICAgIDIgZGVncmVlcyB0b28gaG90OiAgICAgIDEwJQovLyAgICAgIDEgZGVncmVlIHRvbyBj
b2xkOiAgICAgIDE1JQovLyAgICAgIDEgZGVncmVlIHRvbyBob3Q6ICAgICAgIDE1JQovLyAgICAgIGV4
YWN0IHRlbXBlcmF0dXJlOiAgICAgIDQwJQoKc3RhdGljCnNob3J0CnZhcnlfdGVtcChzaG9ydCB0ZW1w
KQp7CiAgICBsb25nIHIgPSBscmFuZDQ4KCkgJSA1MDsKICAgIGxvbmcgZGVsdGE7CiAgICBpZiAociA8
IDUpCiAgICAgICAgZGVsdGEgPSAzOwogICAgZWxzZSBpZiAociA8IDE1KQogICAgICAgIGRlbHRhID0g
MjsKICAgIGVsc2UgaWYgKHIgPCAzMCkKICAgICAgICBkZWx0YSA9IDE7CiAgICBlbHNlCiAgICAgICAg
ZGVsdGEgPSAwOwogICAgaWYgKGxyYW5kNDgoKSAlIDIpCiAgICAgICAgZGVsdGEgPSAtZGVsdGE7CiAg
ICByZXR1cm4gdGVtcCArIGRlbHRhOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIEZ1bmN0aW9uIG9iamVjdC4gTG9jYXRl
cyBhIHRoZXJtb3N0YXQgdGhhdCBpcyBpbiB0aGUgc2FtZSByb29tCi8vIGFzIHRoZSBkZXZpY2UgYXQg
cG9zaXRpb24gcG9zLgoKY2xhc3MgVGhlcm1vc3RhdEluU2FtZVJvb20gewpwdWJsaWM6CiAgICAgICAg
ICAgIFRoZXJtb3N0YXRJblNhbWVSb29tKAogICAgICAgICAgICAgICAgY29uc3QgU3RhdGVNYXA6Oml0
ZXJhdG9yICYgcG9zCiAgICAgICAgICAgICkgOiBtX3Bvcyhwb3MpIHt9CiAgICBib29sICAgIG9wZXJh
dG9yKCkoCiAgICAgICAgICAgICAgICBwYWlyPGNvbnN0IHVuc2lnbmVkIGxvbmcsIERldmljZVN0YXRl
PiAmIHAKICAgICAgICAgICAgKSBjb25zdAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1
cm4oCiAgICAgICAgICAgICAgICAgICAgICAgIHAuc2Vjb25kLnR5cGUgPT0gdGhlcm1vc3RhdAogICAg
ICAgICAgICAgICAgICAgICAgICAmJiBwLnNlY29uZC5sb2NhdGlvbgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID09IG1fcG9zLT5zZWNvbmQubG9jYXRpb24KICAgICAgICAgICAgICAgICk7CiAg
ICAgICAgICAgIH0KcHJpdmF0ZToKICAgIGNvbnN0IFN0YXRlTWFwOjppdGVyYXRvciAmIG1fcG9zOwp9
OwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCgovLyBhY3R1YWxfdGVtcCgpIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWlu
ZSB0aGUgYWN0dWFsCi8vIHRlbXBlcmF0dXJlIHJldHVybmVkIGJ5IGEgcGFydGljdWxhciB0aGVybW9t
ZXRlciBvciB0aGVybW9zdGF0LgovLyBUaGUgcG9zIGFyZ3VtZW50IGluZGljYXRlcyB0aGUgZGV2aWNl
LgovLyAKLy8gVGhlIGZ1bmN0aW9uIGxvY2F0ZXMgYWxsIHRoZXJtb3N0YXRzIHRoYXQgYXJlIGluIHRo
ZSBzYW1lIHJvb20KLy8gYXMgdGhlIGRldmljZSBkZW5vdGVkIGJ5IHBvcyBhbmQgY29tcHV0ZXMgdGhl
IGF2ZXJhZ2Ugb2YgYWxsCi8vIHRoZSB0aGVybW9zdGF0cycgbm9taW5hbCB0ZW1wZXJhdHVyZXMuIChJ
ZiBubyB0aGVybW9zdGF0cyBhcmUKLy8gaW4gdGhlIHNhbWUgcm9vbSBhcyB0aGUgZGV2aWNlLCB0aGUg
ZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZQovLyBhdmVyYWdlIG9mIHRoZSBub21pbmFsIHRlbXBlcmF0
dXJlcyBpcyBERkxUX1RFTVAuKQovLwovLyBUaGUgcmV0dXJuZWQgdGVtcGVyYXR1cmUgdmFyaWVzIGZy
b20gdGhlIGF2ZXJhZ2UgYXMKLy8gZGV0ZXJtaW5lZCBieSB2YXJ5X3RlbXAoKS4KCnN0YXRpYwpzaG9y
dAphY3R1YWxfdGVtcChjb25zdCBTdGF0ZU1hcDo6aXRlcmF0b3IgJiBwb3MpCnsKICAgIGxvbmcgc3Vt
ID0gMDsKICAgIGxvbmcgY291bnQgPSAwOwogICAgU3RhdGVNYXA6Oml0ZXJhdG9yIHdoZXJlID0gZmlu
ZF9pZigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0YXRlLmJlZ2luKCksIGRz
dGF0ZS5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlcm1vc3RhdElu
U2FtZVJvb20ocG9zKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHdoaWxlICh3
aGVyZSAhPSBkc3RhdGUuZW5kKCkpIHsKICAgICAgICBjb3VudCsrOwogICAgICAgIHN1bSArPSB3aGVy
ZS0+c2Vjb25kLm5vbWluYWxfdGVtcDsKICAgICAgICB3aGVyZSA9IGZpbmRfaWYoCiAgICAgICAgICAg
ICAgICAgICAgKyt3aGVyZSwgZHN0YXRlLmVuZCgpLAogICAgICAgICAgICAgICAgICAgIFRoZXJtb3N0
YXRJblNhbWVSb29tKHBvcykKICAgICAgICAgICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gdmFyeV90
ZW1wKGNvdW50ID09IDAgPyBERkxUX1RFTVAgOiBzdW0gLyBjb3VudCk7Cn0KCi8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gSUNQ
X2dldCgpIHJldHVybnMgYW4gYXR0cmlidXRlIHZhbHVlIG9mIHRoZSBkZXZpY2Ugd2l0aCB0aGUKLy8g
Z2l2ZW4gaWQuIFRoZSBhdHRyaWJ1dGUgaXMgbmFtZWQgYnkgdGhlIGF0dHIgcGFyYW1ldGVyLiBUaGUK
Ly8gdmFsdWUgaXMgY29waWVkIGludG8gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IHRoZSB2YWx1ZQov
LyBwb2ludGVyLiBUaGUgbGVuIHBhcmFtZXRlciBpcyB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIGJ1ZmZl
ciwKLy8gc28gSUNQX2dldCgpIGNhbiBhdm9pZCBvdmVycnVubmluZyB0aGUgYnVmZmVyLgovLwovLyBC
eSBkZWZhdWx0LCB0aGVybW9tZXRlcnMgcmVwb3J0IGEgdGVtcGVyYXR1cmUgdGhhdCB2YXJpZXMKLy8g
c29tZXdoYXQgYXJvdW5kIERGTFRfVEVNUC4gSG93ZXZlciwgaWYgdGhlcmUgaXMgYW5vdGhlcgovLyB0
aGVybW9zdGF0IGluIHRoZSBzYW1lIHJvb20gYXMgdGhlIHRoZSB0aGVybW9tZXRlciwgdGhlCi8vIHRo
ZXJtb21ldGVyIHJlcG9ydHMgYSB0ZW1wZXJhdHVyZSB0aGF0IHZhcmllcyBhcm91bmQgdGhhdAovLyB0
aGVybW9zdGF0J3MgdGVtcGVyYXR1cmUuIEZvciBzZXZlcmFsIHRoZXJtb3N0YXRzIHRoYXQgYXJlIGlu
Ci8vIHRoZSBzYW1lIHJvb20sIHRoZSB0aGVybW9tZXRlciByZXBvcnRzIGFyb3VuZCB0aGUgYXZlcmFn
ZQovLyBub21pbmFsIHRlbXBlcmF0dXJlIG9mIGFsbCB0aGUgdGhlcm1vc3RhdHMuCi8vCi8vIEF0dGVt
cHRzIHRvIHJlYWQgZnJvbSBhIG5vbi1leGlzdGVudCBkZXZpY2Ugb3IgdG8gcmVhZCBhCi8vIG5vbi1l
eGlzdGVudCBhdHRyaWJ1dGUgcmV0dXJuIC0xLiBBIHJldHVybiB2YWx1ZSBvZiB6ZXJvCi8vIGluZGlj
YXRlcyBzdWNjZXNzLiBJZiB0aGUgc3VwcGxpZWQgYnVmZmVyIGlzIHRvbyBzaG9ydCB0byBob2xkCi8v
IGEgdmFsdWUsIElDUF9nZXQoKSBzaWxlbnRseSB0cnVuY2F0ZXMgdGhlIHZhbHVlIGFuZAovLyByZXR1
cm5zIHN1Y2Nlc3MuCgpleHRlcm4gIkMiCmludApJQ1BfZ2V0KAogICAgdW5zaWduZWQgbG9uZyAgIGlk
LAogICAgY29uc3QgY2hhciAqICAgIGF0dHIsCiAgICB2b2lkICogICAgICAgICAgdmFsdWUsCiAgICBz
aXplX3QgICAgICAgICAgbGVuKQp7CiAgICAvLyBMb29rIGZvciBpZCBpbiBzdGF0ZSBtYXAKICAgIFN0
YXRlTWFwOjppdGVyYXRvciBwb3MgPSBkc3RhdGUuZmluZChpZCk7CiAgICBpZiAocG9zID09IGRzdGF0
ZS5lbmQoKSkKICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm8gc3VjaCBkZXZpY2UKCiAgICAvLyBEZXBlbmRpbmcgb24gdGhlIGF0dHJpYnV0ZSwgcmV0dXJuIHRo
ZQogICAgLy8gY29ycmVzcG9uZGluZyBwaWVjZSBvZiBzdGF0ZS4KICAgIGlmIChzdHJjbXAoYXR0ciwg
Im1vZGVsIikgPT0gMCkgewogICAgICAgIHN0cm5jcHkoKGNoYXIgKil2YWx1ZSwgcG9zLT5zZWNvbmQu
bW9kZWwsIGxlbik7CiAgICB9IGVsc2UgaWYgKHN0cmNtcChhdHRyLCAibG9jYXRpb24iKSA9PSAwKSB7
CiAgICAgICAgc3RybmNweSgoY2hhciAqKXZhbHVlLCBwb3MtPnNlY29uZC5sb2NhdGlvbi5jX3N0cigp
LCBsZW4pOwogICAgfSBlbHNlIGlmIChzdHJjbXAoYXR0ciwgIm5vbWluYWxfdGVtcCIpID09IDApIHsK
ICAgICAgICBpZiAocG9zLT5zZWNvbmQudHlwZSAhPSB0aGVybW9zdGF0KQogICAgICAgICAgICByZXR1
cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgIC8vIE11c3QgYmUgdGhlcm1vc3RhdAogICAgICAgIG1l
bWNweSgKICAgICAgICAgICAgdmFsdWUsICZwb3MtPnNlY29uZC5ub21pbmFsX3RlbXAsCiAgICAgICAg
ICAgIG1pbihsZW4sIHNpemVvZihwb3MtPnNlY29uZC5ub21pbmFsX3RlbXApKQogICAgICAgICk7CiAg
ICB9IGVsc2UgaWYgKHN0cmNtcChhdHRyLCAidGVtcGVyYXR1cmUiKSA9PSAwKSB7CiAgICAgICAgc2hv
cnQgdGVtcCA9IGFjdHVhbF90ZW1wKHBvcyk7CiAgICAgICAgbWVtY3B5KHZhbHVlLCAmdGVtcCwgbWlu
KGxlbiwgc2l6ZW9mKHRlbXApKSk7CiAgICB9IGVsc2UgaWYgKHN0cmNtcChhdHRyLCAiTUlOX1RFTVAi
KSA9PSAwKSB7CiAgICAgICAgbWVtY3B5KHZhbHVlLCAmTUlOX1RFTVAsIG1pbihsZW4sIHNpemVvZihN
SU5fVEVNUCkpKTsKICAgIH0gZWxzZSBpZiAoc3RyY21wKGF0dHIsICJNQVhfVEVNUCIpID09IDApIHsK
ICAgICAgICBtZW1jcHkodmFsdWUsICZNQVhfVEVNUCwgbWluKGxlbiwgc2l6ZW9mKE1BWF9URU1QKSkp
OwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBObyBzdWNoIGF0dHJpYnV0ZQogICAgfQogICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE9LCn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gSUNQX3NldCgpIHNldHMgdGhlIHRoZSBhdHRyaWJ1
dGVkIHNwZWNpZmllZCBieSBhdHRyIHRvIHRoZQovLyB2YWx1ZSBzcGVjaWZpZWQgYnkgdmFsdWUgZm9y
IHRoZSBkZXZpY2Ugd2l0aCBJRCBpZC4gQXR0ZW1wdHMgdG8KLy8gd3JpdGUgYSBzdHJpbmcgbG9uZ2Vy
IHRoYW4gTUFYU1RSIGJ5dGVzIChpbmNsdWRpbmcgdGhlCi8vIHRlcm1pbmF0aW5nIE5VTCkgcmVzdWx0
IGluIHNpbGVudCB0cnVuY2F0aW9uIG9mIHRoZSBzdHJpbmcuCi8vIEF0dGVtcHRzIHRvIGFjY2VzcyBh
IG5vbi1leGlzdGVudCBkZXZpY2Ugb3IgYXR0cmlidXRlCi8vIHJldHVybiAtMS4gQXR0ZW1wdHMgdG8g
c2V0IGEgbm9taW5hbCB0ZW1wZXJhdHVyZSBvdXRzaWRlIHRoZQovLyBsZWdhbCByYW5nZSBhbHNvIHJl
dHVybiAtMS4gQSB6ZXJvIHJldHVybiB2YWx1ZQovLyBpbmRpY2F0ZXMgc3VjY2Vzcy4KCmV4dGVybiAi
QyIKaW50CklDUF9zZXQodW5zaWduZWQgbG9uZyBpZCwgY29uc3QgY2hhciAqIGF0dHIsIGNvbnN0IHZv
aWQgKiB2YWx1ZSkKewogICAgLy8gTG9vayBmb3IgaWQgaW4gc3RhdGUgbWFwCiAgICBTdGF0ZU1hcDo6
aXRlcmF0b3IgcG9zID0gZHN0YXRlLmZpbmQoaWQpOwogICAgaWYgKHBvcyA9PSBkc3RhdGUuZW5kKCkp
CiAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gc3VjaCBkZXZp
Y2UKCiAgICAvLyBDaGFuZ2UgZWl0aGVyIGxvY2F0aW9uIG9yIG5vbWluYWwgdGVtcCwgZGVwZW5kaW5n
IG9uIGF0dHIuCiAgICBpZiAoc3RyY21wKGF0dHIsICJsb2NhdGlvbiIpID09IDApIHsKICAgICAgICBw
b3MtPnNlY29uZC5sb2NhdGlvbi5hc3NpZ24oCiAgICAgICAgICAgIChjb25zdCBjaGFyICopdmFsdWUs
IE1BWFNUUiAtIDEKICAgICAgICApOwogICAgfSBlbHNlIGlmIChzdHJjbXAoYXR0ciwgIm5vbWluYWxf
dGVtcCIpID09IDApIHsKICAgICAgICBpZiAocG9zLT5zZWNvbmQudHlwZSAhPSB0aGVybW9zdGF0KSAK
ICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IGJlIHRoZXJt
b3N0YXQKICAgICAgICBzaG9ydCB0ZW1wOwogICAgICAgIG1lbWNweSgmdGVtcCwgdmFsdWUsIHNpemVv
Zih0ZW1wKSk7CiAgICAgICAgaWYgKHRlbXAgPCBNSU5fVEVNUCB8fCB0ZW1wID4gTUFYX1RFTVApCiAg
ICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBwb3MtPnNlY29uZC5ub21pbmFsX3RlbXAgPSB0ZW1w
OwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBObyBzdWNoIGF0dHJpYnV0ZQogICAgfQogICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE9LCn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKI2luY2x1ZGUgPGZzdHJlYW0uaD4KCmNsYXNzIElDUF9Q
ZXJzaXN0IHsKcHVibGljOgogICAgSUNQX1BlcnNpc3QoY29uc3QgY2hhciAqIGZpbGUpOwogICAgfklD
UF9QZXJzaXN0KCk7CnByaXZhdGU6CiAgICBzdHJpbmcgbV9maWxlbmFtZTsKfTsKCi8vIFJlYWQgZGV2
aWNlIHN0YXRlIGZyb20gYSBmaWxlIGFuZCBpbml0aWFsaXplIHRoZSBkc3RhdGUgbWFwLgoKSUNQX1Bl
cnNpc3Q6OgpJQ1BfUGVyc2lzdChjb25zdCBjaGFyICogZmlsZSkgOiBtX2ZpbGVuYW1lKGZpbGUpCnsK
ICAgIC8vIE9wZW4gaW5wdXQgZmlsZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LgogICAgZnN0cmVh
bSBkYihtX2ZpbGVuYW1lLmNfc3RyKCksIGlvczo6aW58aW9zOjpvdXQsIDA2NjYpOwogICAgaWYgKCFk
YikgewogICAgICAgIGNlcnIgPDwgIkVycm9yIG9wZW5pbmcgIiA8PCBtX2ZpbGVuYW1lIDw8IGVuZGw7
CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICAvLyBSZWFkIGRldmljZSBkZXRhaWxzLCBvbmUgYXR0
cmlidXRlIHBlciBsaW5lLgogICAgRGV2aWNlU3RhdGUgZHM7CiAgICB1bnNpZ25lZCBsb25nIGlkOwog
ICAgd2hpbGUgKGRiID4+IGlkKSB7CiAgICAgICAgLy8gUmVhZCBkZXZpY2UgdHlwZSBhbmQgc2V0IG1v
ZGVsIHN0cmluZyBhY2NvcmRpbmdseS4KICAgICAgICBpbnQgZHR5cGU7CiAgICAgICAgZGIgPj4gZHR5
cGU7CiAgICAgICAgZHMudHlwZSA9IGR0eXBlID09IHRoZXJtb21ldGVyCiAgICAgICAgICAgICAgICAg
ICAgPyB0aGVybW9tZXRlciA6IHRoZXJtb3N0YXQ7CiAgICAgICAgZHMubW9kZWwgPSBkdHlwZSA9PSB0
aGVybW9tZXRlcgogICAgICAgICAgICAgICAgICAgID8gIlNlbnMtQS1UZW1wIiA6ICJTZWxlY3QtQS1U
ZW1wIjsKICAgICAgICBjaGFyIGxvY1tNQVhTVFJdOwogICAgICAgIGRiLmdldChsb2NbMF0pOyAgICAg
ICAgICAgICAgICAgLy8gU2tpcCBuZXdsaW5lCiAgICAgICAgZGIuZ2V0bGluZShsb2MsIHNpemVvZihs
b2MpKTsgICAvLyBSZWFkIGxvY2F0aW9uCiAgICAgICAgZHMubG9jYXRpb24gPSBsb2M7CiAgICAgICAg
aWYgKGRzLnR5cGUgPT0gdGhlcm1vc3RhdCkKICAgICAgICAgICAgZGIgPj4gZHMubm9taW5hbF90ZW1w
OyAgICAgIC8vIFJlYWQgdGVtcGVyYXR1cmUKICAgICAgICBkc3RhdGVbaWRdID0gZHM7ICAgICAgICAg
ICAgICAgIC8vIEFkZCBlbnRyeSB0byBtYXAKICAgIH0KCiAgICBkYi5jbG9zZSgpOwogICAgaWYgKCFk
YikgewogICAgICAgIGNlcnIgPDwgIkVycm9yIGNsb3NpbmcgIiA8PCBtX2ZpbGVuYW1lIDw8IGVuZGw7
CiAgICAgICAgZXhpdCgxKTsKICAgIH0KfQoKLy8gV3JpdGUgZGV2aWNlIHN0YXRlIHRvIHRoZSBmaWxl
LgoKSUNQX1BlcnNpc3Q6Ogp+SUNQX1BlcnNpc3QoKQp7CiAgICAvLyBPcGVuIGlucHV0IGZpbGUsIHRy
dW5jYXRpbmcgaXQuCiAgICBvZnN0cmVhbSBkYihtX2ZpbGVuYW1lLmNfc3RyKCkpOwogICAgaWYgKCFk
YikgewogICAgICAgIGNlcnIgPDwgIkVycm9yIG9wZW5pbmcgIiA8PCBtX2ZpbGVuYW1lIDw8IGVuZGw7
CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICAvLyBXcml0ZSB0aGUgc3RhdGUgZGV0YWlscyBmb3Ig
ZWFjaCBkZXZpY2UuCiAgICBTdGF0ZU1hcDo6aXRlcmF0b3IgaTsKICAgIGZvciAoaSA9IGRzdGF0ZS5i
ZWdpbigpOyBpICE9IGRzdGF0ZS5lbmQoKTsgaSsrKSB7CiAgICAgICAgZGIgPDwgaS0+Zmlyc3QgPDwg
ZW5kbDsKICAgICAgICBkYiA8PCBpLT5zZWNvbmQudHlwZSA8PCBlbmRsOwogICAgICAgIGRiIDw8IGkt
PnNlY29uZC5sb2NhdGlvbiA8PCBlbmRsOwogICAgICAgIGlmIChpLT5zZWNvbmQudHlwZSA9PSB0aGVy
bW9zdGF0KQogICAgICAgICAgICBkYiA8PCBpLT5zZWNvbmQubm9taW5hbF90ZW1wIDw8IGVuZGw7CiAg
ICB9CiAgICBpZiAoIWRiKSB7CiAgICAgICAgY2VyciA8PCAiRXJyb3Igd3JpdGluZyAiIDw8IG1fZmls
ZW5hbWUgPDwgZW5kbDsKICAgICAgICBleGl0KDEpOwogICAgfQoKICAgIGRiLmNsb3NlKCk7CiAgICBp
ZiAoIWRiKSB7CiAgICAgICAgY2VyciA8PCAiRXJyb3IgY2xvc2luZyAiIDw8IG1fZmlsZW5hbWUgPDwg
ZW5kbDsKICAgICAgICBleGl0KDEpOwogICAgfQp9CgovLyBJbnN0YW50aWF0ZSBhIHNpbmdsZSBnbG9i
YWwgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLgpzdGF0aWMgSUNQX1BlcnNpc3QgbXlkYigiL3RtcC9DQ1Nf
REIiKTsK=
------------98516880114954SINAEMAIL---
Content-Disposition: inline;filename="server.hh"
Content-Transfer-Encoding: base64
Content-Type: application/x-msdownload; name="server.hh"
I2lmbmRlZiBzZXJ2ZXJfSEhfCiNkZWZpbmUgc2VydmVyX0hIXwoKI2luY2x1ZGUgPG1hcD4KI2luY2x1
ZGUgPGxpc3Q+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG9tbmlPUkIzL3BvYS5oPgoKI2lu
Y2x1ZGUgImNjcy5oaCIKCmNsYXNzIENvbnRyb2xsZXJfaW1wbDsKCmNsYXNzIFRoZXJtb21ldGVyX2lt
cGwgOiBwdWJsaWMgdmlydHVhbCBQT0FfQ0NTOjpUaGVybW9tZXRlciB7CnB1YmxpYzoKICAgIC8vIENP
UkJBIGF0dHJpYnV0ZXMKICAgIHZpcnR1YWwgQ0NTOjpNb2RlbFR5cGUgIG1vZGVsKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyhDT1JCQTo6U3lzdGVtRXhjZXB0aW9uKTsKICAgIHZp
cnR1YWwgQ0NTOjpBc3NldFR5cGUgIGFzc2V0X251bSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3coQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7CiAgICB2aXJ0dWFsIENDUzo6VGVtcFR5
cGUgICB0ZW1wZXJhdHVyZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coQ09S
QkE6OlN5c3RlbUV4Y2VwdGlvbik7CiAgICB2aXJ0dWFsIENDUzo6TG9jVHlwZSAgICBsb2NhdGlvbigp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coQ09SQkE6OlN5c3RlbUV4Y2VwdGlv
bik7CiAgICB2aXJ0dWFsIHZvaWQgICAgICAgICAgICBsb2NhdGlvbihjb25zdCBjaGFyICpsb2MpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7
CiAgICB2aXJ0dWFsIHZvaWQgICAgICAgICAgICByZW1vdmUoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwogICAgCiAgICAvLyBDb25zdHJ1
Y3RvciAmIGRlc3RydWN0b3IKICAgIFRoZXJtb21ldGVyX2ltcGwoQ0NTOjpBc3NldFR5cGUgYW51bSk7
CiAgICB2aXJ0dWFsIH5UaGVybW9tZXRlcl9pbXBsKCk7CgogICAgc3RhdGljIENvbnRyb2xsZXJfaW1w
bCAqICAgIG1fY3RybDsgLy8gTXkgY29udHJvbGxlcgogICAgY29uc3QgQ0NTOjpBc3NldFR5cGUgICAg
ICAgIG1fYW51bTsgLy8gTXkgYXNzZXQgbnVtYmVyCgpwcml2YXRlOgogICAgLy8gSGVscGVyIGZ1bmN0
aW9ucwogICAgQ0NTOjpNb2RlbFR5cGUgIGdldF9tb2RlbCgpOwogICAgQ0NTOjpUZW1wVHlwZSAgIGdl
dF90ZW1wKCk7CiAgICBDQ1M6OkxvY1R5cGUgICAgZ2V0X2xvYygpOwogICAgdm9pZCAgICAgICAgICAg
IHNldF9sb2MoY29uc3QgY2hhciAqIG5ld19sb2MpOwoKICAgIC8vIENvcHkgYW5kIGFzc2lnbm1lbnQg
bm90IHN1cHBvcnRlZAogICAgVGhlcm1vbWV0ZXJfaW1wbChjb25zdCBUaGVybW9tZXRlcl9pbXBsICYp
OwogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVGhlcm1vbWV0ZXJfaW1wbCAmKTsKfTsKCmNsYXNzIFRo
ZXJtb3N0YXRfaW1wbCA6CiAgICBwdWJsaWMgdmlydHVhbCBQT0FfQ0NTOjpUaGVybW9zdGF0LAogICAg
cHVibGljIHZpcnR1YWwgVGhlcm1vbWV0ZXJfaW1wbCB7CnB1YmxpYzoKICAgIC8vIENPUkJBIG9wZXJh
dGlvbnMKICAgIHZpcnR1YWwgQ0NTOjpUZW1wVHlwZSAgIGdldF9ub21pbmFsKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyhDT1JCQTo6U3lzdGVtRXhjZXB0aW9uKTsKICAgIHZpcnR1
YWwgQ0NTOjpUZW1wVHlwZSAgIHNldF9ub21pbmFsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDUzo6VGVtcFR5cGUgbmV3X3RlbXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgdGhy
b3coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ1M6OlRoZXJtb3N0YXQ6OkJhZFRlbXAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgLy8gQ29uc3RydWN0b3IgYW5kIGRlc3RydWN0
b3IKICAgIFRoZXJtb3N0YXRfaW1wbChDQ1M6OkFzc2V0VHlwZSBhbnVtKTsKICAgIHZpcnR1YWwgflRo
ZXJtb3N0YXRfaW1wbCgpOwoKcHJpdmF0ZToKICAgIC8vIEhlbHBlciBmdW5jdGlvbnMKICAgIENDUzo6
VGVtcFR5cGUgICBnZXRfbm9taW5hbF90ZW1wKCk7CiAgICBDQ1M6OlRlbXBUeXBlICAgc2V0X25vbWlu
YWxfdGVtcChDQ1M6OlRlbXBUeXBlIG5ld190ZW1wKQogICAgICAgICAgICAgICAgICAgICAgICB0aHJv
dyhDQ1M6OlRoZXJtb3N0YXQ6OkJhZFRlbXApOwoKICAgIC8vIENvcHkgYW5kIGFzc2lnbm1lbnQgbm90
IHN1cHBvcnRlZAogICAgVGhlcm1vc3RhdF9pbXBsKGNvbnN0IFRoZXJtb3N0YXRfaW1wbCAmKTsKICAg
IHZvaWQgb3BlcmF0b3I9KGNvbnN0IFRoZXJtb3N0YXRfaW1wbCAmKTsKfTsKCmNsYXNzIENvbnRyb2xs
ZXJfaW1wbCA6IHB1YmxpYyB2aXJ0dWFsIFBPQV9DQ1M6OkNvbnRyb2xsZXIgewpwdWJsaWM6CiAgICAv
LyBDT1JCQSBvcGVyYXRpb25zCiAgICB2aXJ0dWFsIENDUzo6Q29udHJvbGxlcjo6VGhlcm1vbWV0ZXJT
ZXEgKgogICAgICAgICAgICAgICAgbGlzdCgpIHRocm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwog
ICAgdmlydHVhbCB2b2lkCiAgICAgICAgICAgICAgICBmaW5kKENDUzo6Q29udHJvbGxlcjo6U2VhcmNo
U2VxICYgc2xpc3QpCiAgICAgICAgICAgICAgICAgICAgdGhyb3coQ09SQkE6OlN5c3RlbUV4Y2VwdGlv
bik7CiAgICB2aXJ0dWFsIHZvaWQKICAgICAgICAgICAgICAgIGNoYW5nZSgKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDQ1M6OkNvbnRyb2xsZXI6OlRoZXJtb3N0YXRTZXEgJiB0bGlzdCwKICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6U2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YQogICAg
ICAgICAgICAgICAgKSB0aHJvdygKICAgICAgICAgICAgICAgICAgICBDT1JCQTo6U3lzdGVtRXhjZXB0
aW9uLAogICAgICAgICAgICAgICAgICAgIENDUzo6Q29udHJvbGxlcjo6RUNoYW5nZQogICAgICAgICAg
ICAgICAgKTsKICAgIHZpcnR1YWwgQ0NTOjpUaGVybW9tZXRlcl9wdHIKICAgICAgICAgICAgICAgIGNy
ZWF0ZV90aGVybW9tZXRlcigKICAgICAgICAgICAgICAgICAgICBDQ1M6OkFzc2V0VHlwZSAgICAgIGFu
dW0sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgIGxvYwogICAgICAgICAgICAgICAg
KSB0aHJvdygKICAgICAgICAgICAgICAgICAgICBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLAogICAgICAg
ICAgICAgICAgICAgIENDUzo6Q29udHJvbGxlcjo6RHVwbGljYXRlQXNzZXQKICAgICAgICAgICAgICAg
ICk7CiAgICB2aXJ0dWFsIENDUzo6VGhlcm1vc3RhdF9wdHIKICAgICAgICAgICAgICAgIGNyZWF0ZV90
aGVybW9zdGF0KAogICAgICAgICAgICAgICAgICAgIENDUzo6QXNzZXRUeXBlICAgICAgYW51bSwKICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgICAgbG9jLAogICAgICAgICAgICAgICAgICAgIEND
Uzo6VGVtcFR5cGUgICAgICAgdGVtcAogICAgICAgICAgICAgICAgKSB0aHJvdygKICAgICAgICAgICAg
ICAgICAgICBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgIENDUzo6Q29u
dHJvbGxlcjo6RHVwbGljYXRlQXNzZXQsCiAgICAgICAgICAgICAgICAgICAgQ0NTOjpUaGVybW9zdGF0
OjpCYWRUZW1wCiAgICAgICAgICAgICAgICApOwoKICAgIC8vIENvbnN0cnVjdG9yIGFuZCBkZXN0cnVj
dG9yCiAgICBDb250cm9sbGVyX2ltcGwoCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9h
LAogICAgICAgIGNvbnN0IGNoYXIgKiAgICAgICAgICAgIGFzc2V0X2ZpbGUKICAgICkgdGhyb3coaW50
KTsKICAgIHZpcnR1YWwgfkNvbnRyb2xsZXJfaW1wbCgpOwoKICAgIC8vIEhlbHBlciBmdW5jdGlvbnMg
dG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBvYmplY3QgbWFwCiAgICB2b2lkICAgICAgICAgICAgICAgIGFk
ZF9pbXBsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NTOjpBc3NldFR5cGUgICAgICBhbnVt
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlcm1vbWV0ZXJfaW1wbCAqICB0aXAKICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgcmVtb3ZlX2ltcGwoQ0NT
OjpBc3NldFR5cGUgYW51bSk7CiAgICBib29sICAgICAgICAgICAgICAgIGV4aXN0cyhDQ1M6OkFzc2V0
VHlwZSBhbnVtKTsKCnByaXZhdGU6CiAgICAvLyBNYXAgb2YgZXhpc3RpbmcgYXNzZXRzLiBUaGUgc2Vy
dmFudCBwb2ludGVyIGlzIG51bGwKICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIHNlcnZhbnQgaXMgbm90
IGluIG1lbW9yeS4KICAgIHR5cGVkZWYgbWFwPENDUzo6QXNzZXRUeXBlLCBUaGVybW9tZXRlcl9pbXBs
ICo+IEFzc2V0TWFwOwogICAgQXNzZXRNYXAgbV9hc3NldHM7CgogICAgLy8gUE9BIGZvciB0aGVybW9t
ZXRlcnMgYW5kIHRoZXJtb3N0YXRzCiAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3ZhciBtX3BvYTsKCiAg
ICAvLyBOYW1lIG9mIGFzc2V0IG51bWJlciBmaWxlCiAgICBDT1JCQTo6U3RyaW5nX3ZhciBtX2Fzc2V0
X2ZpbGU7CgogICAgLy8gQ29weSBhbmQgYXNzaWdubWVudCBub3Qgc3VwcG9ydGVkCiAgICBDb250cm9s
bGVyX2ltcGwoY29uc3QgQ29udHJvbGxlcl9pbXBsICYpOwogICAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
Q29udHJvbGxlcl9pbXBsICYpOwoKICAgIC8vIEZ1bmN0aW9uIG9iamVjdCBmb3IgdGhlIGZpbmRfaWYg
YWxnb3JpdGhtIHRvIHNlYXJjaCBmb3IKICAgIC8vIGRldmljZXMgYnkgbG9jYXRpb24gYW5kIG1vZGVs
IHN0cmluZy4KICAgIGNsYXNzIFN0ckZpbmRlciB7CiAgICBwdWJsaWM6CiAgICAgICAgU3RyRmluZGVy
KAogICAgICAgICAgICBDQ1M6OkNvbnRyb2xsZXI6OlNlYXJjaENyaXRlcmlvbiAgICBzYywKICAgICAg
ICAgICAgY29uc3QgY2hhciAqICAgICAgICAgICAgICAgICAgICAgICAgc3RyCiAgICAgICAgKSA6IG1f
c2Moc2MpLCBtX3N0cihzdHIpIHt9CiAgICAgICAgYm9vbCBvcGVyYXRvcigpKAogICAgICAgICAgICBw
YWlyPGNvbnN0IENDUzo6QXNzZXRUeXBlLCBUaGVybW9tZXRlcl9pbXBsICo+ICYgcAogICAgICAgICkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgICAgIGNoYXIgYnVmWzMyXTsKICAgICAgICAgICAgc3dpdGNo
IChtX3NjKSB7CiAgICAgICAgICAgIGNhc2UgQ0NTOjpDb250cm9sbGVyOjpMT0NBVElPTjoKICAgICAg
ICAgICAgICAgIElDUF9nZXQocC5maXJzdCwgImxvY2F0aW9uIiwgYnVmLCBzaXplb2YoYnVmKSk7CiAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBDQ1M6OkNvbnRyb2xsZXI6Ok1PREVM
OgogICAgICAgICAgICAgICAgSUNQX2dldChwLmZpcnN0LCAibW9kZWwiLCBidWYsIHNpemVvZihidWYp
KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgYWJvcnQoKTsgICAgLy8gUHJlY29uZGl0aW9uIHZpb2xhdGlvbgogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHJldHVybiBzdHJjbXAoYnVmLCBtX3N0cikgPT0gMDsKICAgICAgICB9CiAgICBwcml2YXRl
OgogICAgICAgIENDUzo6Q29udHJvbGxlcjo6U2VhcmNoQ3JpdGVyaW9uICAgIG1fc2M7CiAgICAgICAg
Y29uc3QgY2hhciAqICAgICAgICAgICAgICAgICAgICAgICAgbV9zdHI7CiAgICB9Owp9OwoKY2xhc3Mg
RGV2aWNlTG9jYXRvcl9pbXBsIDoKICAgIHB1YmxpYyB2aXJ0dWFsIFBPQV9Qb3J0YWJsZVNlcnZlcjo6
U2VydmFudExvY2F0b3IgewpwdWJsaWM6CiAgICBEZXZpY2VMb2NhdG9yX2ltcGwoQ29udHJvbGxlcl9p
bXBsICogY3RybCk7CgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6U2VydmFudAogICAgICAgICAg
ICAgICAgcHJlaW52b2tlKAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpP
YmplY3RJZCAmIG9pZCwKICAgICAgICAgICAgICAgICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciAg
ICAgICAgICBwb2EsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqICAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgIHZvaWQgKiAmICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvb2tpZQogICAgICAgICAgICAgICAgKSB0aHJvdygKICAgICAgICAgICAgICAgICAg
ICBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgIFBvcnRhYmxlU2VydmVy
OjpGb3J3YXJkUmVxdWVzdCk7CiAgICB2aXJ0dWFsIHZvaWQKICAgICAgICAgICAgICAgIHBvc3RpbnZv
a2UoCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICYgb2lk
LAogICAgICAgICAgICAgICAgICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyICAgICAgICAgIHBvYSwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b24sCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29v
a2llLAogICAgICAgICAgICAgICAgICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50ICAgICAgICAgIHNl
cnZhbnQKICAgICAgICAgICAgICAgICkgdGhyb3coQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7CnByaXZh
dGU6CiAgICBDb250cm9sbGVyX2ltcGwgKiAgICAgICAgICAgICAgICAgICBtX2N0cmw7CgogICAgdHlw
ZWRlZiBsaXN0PFRoZXJtb21ldGVyX2ltcGwgKj4gICAgRXZpY3RvclF1ZXVlOwogICAgdHlwZWRlZiBt
YXA8Q0NTOjpBc3NldFR5cGUsIEV2aWN0b3JRdWV1ZTo6aXRlcmF0b3I+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBY3RpdmVPYmplY3RNYXA7CiAgICAKICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBpbnQgICAgICAgICAgIE1BWF9FUV9TSVpFID0gMTAwOwogICAgRXZpY3RvclF1ZXVl
ICAgICAgICAgICAgICAgICAgICAgICAgbV9lcTsKICAgIEFjdGl2ZU9iamVjdE1hcCAgICAgICAgICAg
ICAgICAgICAgIG1fYW9tOwoKICAgIC8vIENvcHkgYW5kIGFzc2lnbm1lbnQgbm90IHN1cHBvcnRlZAog
ICAgRGV2aWNlTG9jYXRvcl9pbXBsKGNvbnN0IERldmljZUxvY2F0b3JfaW1wbCAmKTsKICAgIHZvaWQg
b3BlcmF0b3I9KGNvbnN0IERldmljZUxvY2F0b3JfaW1wbCAmKTsKfTsKCiNlbmRpZgo=
------------98516880114954SINAEMAIL-----