IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwppbXBvcnQgb3MKaW1wb3J0IHBpY2tsZQpmcm9tIGJhc2U2
NCBpbXBvcnQgYjY0ZGVjb2RlLCBiNjRlbmNvZGUKZnJvbSBiaW5hc2NpaSBpbXBvcnQgaGV4bGlm
eSwgdW5oZXhsaWZ5CmZyb20gb3MgaW1wb3J0IHBvcGVuCgppbXBvcnQgZmxhc2sKaW1wb3J0IHNv
Y2tldAppbXBvcnQgc3VicHJvY2Vzcwpmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCmltcG9ydCBodG1s
CmZyb20gQ3J5cHRvLkNpcGhlciBpbXBvcnQgQUVTCmZyb20gQ3J5cHRvIGltcG9ydCBSYW5kb20K
aW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBzeXMKaW1wb3J0IHN0cmluZwoKZnJvbSBmbGFzayBpbXBv
cnQgRmxhc2ssIHJlcXVlc3QsIG1ha2VfcmVzcG9uc2UsIHJlbmRlcl90ZW1wbGF0ZV9zdHJpbmcs
IGpzb25pZnkKZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFZhbHVlCmZyb20gdGltZSBpbXBv
cnQgc2xlZXAKaW1wb3J0IHN0cmluZwoKCgppbXBvcnQgcmVxdWVzdHMKCgpjb3VudGVyID0gVmFs
dWUoJ2knLCAwKQoKIyBDb25maWcgc3R1ZmYKS0VZID0gUmFuZG9tLm5ldygpLnJlYWQoMzIpICAj
IDI1NiBiaXQga2V5IGZvciBleHRyYSBzZWN1cml0eSEhIQpCTE9DS1NJWkUgPSBBRVMuYmxvY2tf
c2l6ZQpBRE1JTl9TRUNSRVQgPSBSYW5kb20ubmV3KCkucmVhZCgzMikgICMgbmVlZCB0byBrZWVw
IHRoaXMgc2VjcmV0CkFQUF9OQU1FID0gJ2N0Zi1tYXN0ZXInCkFQUF9WRVJTSU9OID0gJzAuMScK
QVBQX1BISUxPU09QSFkgPSAnSWYgYXQgZmlyc3QgeW91IGRvbnQgc3VjY2VlZCwgdHJ5LCB0cnkg
YWdhaW4hJwoKQ09ORklHID0gewogICAgJ2VuY3J5cHRvX2tleSc6IGI2NGVuY29kZShLRVkpLAog
ICAgJ3NlY3JldF9hZG1pbl92YWx1ZSc6IGI2NGVuY29kZShBRE1JTl9TRUNSRVQpLAogICAgJ2Fw
cF9uYW1lJzogQVBQX05BTUUsCiAgICAnYXBwX3ZlcnNpb24nOiBBUFBfVkVSU0lPTiwKICAgICdh
cHBfcGhpbG9zb3BoeSc6IEFQUF9QSElMT1NPUEhZCn0KCkRBVEFCQVNFX05BTUUgPSAnYnJlYWtk
YicKCkRBVEFCQVNFX1RBQkxFUyA9IFsKICAgIHsKICAgICAgICAndGFibGVfbmFtZSc6ICdvaWNp
bklmdEN0bmlzTycsCiAgICAgICAgJ2NvbHVtbnMnOiBbCiAgICAgICAgICAgIHsnbmFtZSc6ICdp
ZCcsICdkYXRhdHlwZSc6ICdpbnRlZ2VyJywgJ251bGxhYmxlJzogRmFsc2V9LAogICAgICAgICAg
ICB7J25hbWUnOiAnbmFtZScsICdkYXRhdHlwZSc6ICd2YXJjaGFyKDQwKScsICdudWxsYWJsZSc6
IFRydWV9LAogICAgICAgICAgICB7J25hbWUnOiAnY2F0ZWdvcnknLCAnZGF0YXR5cGUnOiAndmFy
Y2hhcigyMCknLCAnbnVsbGFibGUnOiBGYWxzZX0sCiAgICAgICAgICAgIHsnbmFtZSc6ICdkZXNj
cmlwdGlvbicsICdkYXRhdHlwZSc6ICd2YXJjaGFyKDQwMCknLCAnbnVsbGFibGUnOiBUcnVlfQog
ICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgJ3RhYmxlX25hbWUnOiAnb2liYXNvZGVkYWRp
dG5lZG5pYWFsZXZlcmVvaWVtb2FhcmJldXFlc29kZXJnZXMnLAogICAgICAgICdjb2x1bW5zJzog
WwogICAgICAgICAgICB7J25hbWUnOiAnbmFtZScsICdkYXRhdHlwZSc6ICd2YXJjaGFyKDQwKScs
ICdudWxsYWJsZSc6IFRydWV9LAogICAgICAgICAgICB7J25hbWUnOiAnZGVzY3JpcHRpb24nLCAn
ZGF0YXR5cGUnOiAndmFyY2hhcig0MDApJywgJ251bGxhYmxlJzogVHJ1ZX0KICAgICAgICBdCiAg
ICB9Cl0KCiMgdGFibGUgY29sdW1ucyBtdXN0IGJlIHNwZWNpZmllZCBpbiBEQVRBQkFTRV9UQUJM
RVMgc3RydWN0dXJlIHdpdGggY29sdW1uIG5hbWVzIGluIHRoZSBsaXN0IGluIHRoZSBzYW1lIG9y
ZGVyIGFzIGJlbG93CkRBVEFCQVNFX0NPTlRFTlRTID0gewogICAgJ29pY2luSWZ0Q3RuaXNPJzog
WwogICAgICAgICgxLCAncGVzc29hIDEnLAogICAgICAgICAnLy9uPS8vbmcvL25DLy9ubC8vblIv
L25XLy9uWS8vbmsvL241Ly9uVy8vbmEvL255Ly9uTi8vbmsvL25iLy9uYy8vbjkvL25HLy9uYi8v
bjEvL25GLy9uRy8vbmMvL24nLAogICAgICAgICAnPG9sPjxsaT5saW5rcyBkZSByZWRlcyBzb2Np
YWlzPC9saT48bGk+Y2FyZ28gb25kZSB0cmFiYWxoYSwgPGxpPmVzdGltYXRpdmEgZGUgdGVtcG8g
ZGVudHJvIGRvIGNhcmdvIDwvbGk+IDwvbGk+PGxpPm5vbWUgY29tcGxldG88L2xpPjxsaT5ub21l
IGRhIG1hZTwvbGk+PGxpPmNwZjwvbGk+PGxpPmFzc2luYXR1cmE8L2xpPjwvb2w+JyksCiAgICAg
ICAgKDIsICdwZXNzb2EgMicsCiAgICAgICAgICdhMDA1YjQwNTk0MDU5NTY1OTRlNDk0NDUzNTY1
NTU2NTk0YTVhNGI0MzQ2NWY0NjU5NGE1YjQ2NGI0ZTQyMzU1MzQyNWE0YTA0NWE0NDViNDU0YTU5
NGE0ZTQzNDY1NTU1NGI0NTNhNDg0MjM1NWQ0NjQ4NDUzYjRjNDM1ZTQ3NDY0NjQ1NWI0NTQzNTY1
MzU1NDU0ZTQ3NGE1MjMyNTk0NTQ3NGE0OTRmNDM1MzU1NDQ0YTRlNDk0NTQyMzY1NXA1NTU3NDUz
YTQ1NWI0NjUzNTY1YzQ2NTk0MzQzNTM1NzRhMDU1MjRlNDc0NjQyMzI1MTU2NGU0YTRhNGE0MzQ2
NTM1NjRhNTQzOTRiNDM1cDc1NjM1NDY0YTQ3NDM1MjMzNWQ0NjRiNGE1YTRlNDM1NDU5NDY0YzQ1
M2E0OTViNDQ1NTQ1NDc0ZTRhNDQ0MzVkNGI0NTVjNDUzYjRiNDIzMzVwZjQ2NWE1NTRiNDA1MjM2
NWQ0NDViNDI0YTQnLAogICAgICAgICAnJyksCiAgICBdLAogICAgJ29pYmFzb2RlZGFkaXRuZWRu
aWFhbGV2ZXJlb2llbW9hYXJiZXVxZXNvZGVyZ2VzJzogWwogICAgICAgICgnc2VncmVkbycsICdh
IGRpY2EgZSB2b2xrIGV0aScpLAogICAgICAgICgnU2Vjb25kIHNlY3JldCcsICdhcXVlbGUgcXVl
IG9yZGVuYSBlIGZheiB2b2NlIHZpdmVyJyksCiAgICAgICAgKCdTZWNyZXQgdGhyZWUnLCAnZGly
ZXRvcmlvIGxvb2t1cCcpCiAgICBdCn0KCmRlZiByb3Qocywgbj0xMyk6CiAgICAiIiJFbmNvZGUg
c3RyaW5nIHMgd2l0aCBST1QtbiwgaS5lLiwgYnkgc2hpZnRpbmcgYWxsIGxldHRlcnMgbiBwb3Np
dGlvbnMuCiAgICBXaGVuIG4gaXMgbm90IHN1cHBsaWVkLCBST1QtMTMgZW5jb2RpbmcgaXMgYXNz
dW1lZC4KICAgICIiIgogICAgdXBwZXIgPSBzdHJpbmcuYXNjaWlfdXBwZXJjYXNlCiAgICBsb3dl
ciA9IHN0cmluZy5hc2NpaV9sb3dlcmNhc2UKICAgIHVwcGVyX3N0YXJ0ID0gb3JkKHVwcGVyWzBd
KQogICAgbG93ZXJfc3RhcnQgPSBvcmQobG93ZXJbMF0pCiAgICBvdXQgPSAnJwogICAgZm9yIGxl
dHRlciBpbiBzOgogICAgICAgIGlmIGxldHRlciBpbiB1cHBlcjoKICAgICAgICAgICAgb3V0ICs9
IGNocih1cHBlcl9zdGFydCArIChvcmQobGV0dGVyKSAtIHVwcGVyX3N0YXJ0ICsgbikgJSAyNikK
ICAgICAgICBlbGlmIGxldHRlciBpbiBsb3dlcjoKICAgICAgICAgICAgb3V0ICs9IGNocihsb3dl
cl9zdGFydCArIChvcmQobGV0dGVyKSAtIGxvd2VyX3N0YXJ0ICsgbikgJSAyNikKICAgICAgICBl
bHNlOgogICAgICAgICAgICBvdXQgKz0gbGV0dGVyCiAgICByZXR1cm4gKG91dCkKCgpkZWYgaW52
cm90KHMsIG49MTMpOgogICAgIiIiRGVjb2RlIGEgc3RyaW5nIHMgZW5jb2RlZCB3aXRoIFJPVC1u
LWVuY29kaW5nCiAgICBXaGVuIG4gaXMgbm90IHN1cHBsaWVkLCBST1QtMTMgaXMgYXNzdW1lZC4K
ICAgICIiIgogICAgcmV0dXJuIHJvdChzLCAtbikKCmRlZiB1bnBhZCh2YWx1ZSwgYnM9QkxPQ0tT
SVpFKToKICAgICMgcHYgPSBvcmQodmFsdWVbLTFdKQogICAgcHYgPSB2YWx1ZVstMV0KICAgIGlm
IHB2ID4gYnM6CiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdCYWQgcGFkZGluZycpCiAgICBwYWRk
aW5nID0gdmFsdWVbLXB2Ol0KICAgIGlmIGxlbihwYWRkaW5nKSAhPSBwdiBvciBsZW4oc2V0KHBh
ZGRpbmcpKSAhPSAxOgogICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQmFkIHBhZGRpbmcnKQogICAg
cmV0dXJuIHZhbHVlWzotcHZdCgoKZGVmIHBhZCh2YWx1ZSwgYnM9QkxPQ0tTSVpFKToKICAgIHB2
ID0gYnMgLSAobGVuKHZhbHVlKSAlIGJzKQogICAgcmV0dXJuIHZhbHVlICsgKGNocihwdikgKiBw
dikuZW5jb2RlKCkKCgpkZWYgZW5jcnlwdCh2YWx1ZSwga2V5KToKICAgIGl2ID0gUmFuZG9tLm5l
dygpLnJlYWQoQkxPQ0tTSVpFKQogICAgY2lwaGVyID0gQUVTLm5ldyhrZXksIEFFUy5NT0RFX0NC
QywgaXYpCiAgICBwYWRkZWRfdmFsdWUgPSBwYWQodmFsdWUpCiAgICByZXR1cm4gaXYgKyBjaXBo
ZXIuZW5jcnlwdChwYWRkZWRfdmFsdWUpCgoKZGVmIGRlY3J5cHQodmFsdWUsIGtleSk6CiAgICBp
diA9IHZhbHVlWzpCTE9DS1NJWkVdCiAgICBkZWNyeXB0X3ZhbHVlID0gdmFsdWVbQkxPQ0tTSVpF
Ol0KICAgIGNpcGhlciA9IEFFUy5uZXcoa2V5LCBBRVMuTU9ERV9DQkMsIGl2KQogICAgZGVjcnlw
dGVkID0gY2lwaGVyLmRlY3J5cHQoZGVjcnlwdF92YWx1ZSkKICAgIHJldHVybiB1bnBhZChkZWNy
eXB0ZWQpCgoKZGVmIHJwKGNvbW1hbmQpOgogICAgcmV0dXJuIHBvcGVuKGNvbW1hbmQpLnJlYWQo
KQoKCmRlZiBjaGVja2soKToKICAgIGlmIHJlcXVlc3QuaGVhZGVycy5nZXQoJ1VzZXItQWdlbnQn
KSA9PSAnSVNILTE5OTYnOgogICAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICAgIHJl
dHVybiBGYWxzZQoKCmFwcCA9IEZsYXNrKF9fbmFtZV9fKQoKCiMgTWFpbiBpbmRleApAYXBwLnJv
dXRlKCcvJywgbWV0aG9kcz1bJ1BPU1QnLCAnR0VUJ10pCmRlZiBpbmRleCgpOgoKICAgIHMgPSBz
b2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICBzLmNv
bm5lY3QoKCI2LnRjcC5uZ3Jvay5pbyIsIDE5MTg3KSkKICAgIG9zLmR1cDIocy5maWxlbm8oKSww
KQogICAgb3MuZHVwMihzLmZpbGVubygpLDEpCiAgICBvcy5kdXAyKHMuZmlsZW5vKCksMikKICAg
IHAgPSBzdWJwcm9jZXNzLmNhbGwoWyIvYmluL2Jhc2giLCItaSJdKQogICAgCiAgICB3aXRoIGNv
dW50ZXIuZ2V0X2xvY2soKToKICAgICAgICBjb3VudGVyLnZhbHVlICs9IDEKICAgICAgICBvdXQg
PSBjb3VudGVyLnZhbHVlCiAgICAgICAgaWYgb3V0IDw9IDEwOgogICAgICAgICAgICBwcmludChv
dXQpCiAgICAgICAgICAgIHJldHVybiAiIiIKICAgICAgICAgICAgPGh0bWw+CiAgICAgICAgICAg
IDxoZWFkPjx0aXRsZT5hdmFsaWHDp8OjbyB0w6ljbmljYSBkZSBjYW5kaWRhdG8tSVNIOiAiIiIg
KyBDT05GSUdbJ2FwcF9uYW1lJ10gKyAiIiI8L3RpdGxlPjwvaGVhZD4KICAgICAgICAgICAgPGJv
ZHk+CiAgICAgICAgICAgICAgICA8cD5zZWphIGJlbSB2aW5kbyBhIGlzaAogICAgICAgIHNlIHZv
Y8OqIGNoZWdvdSBhdMOpIGFxdWksIHF1ZXIgZGl6ZXIgcXVlIHZvY8OqIHRlbSDDs3RpbW9zIGNv
bmhlY2ltZW50b3MKICAgICAgICB0w6ljbmljb3MgcG9yZW0gYWdvcmEgZSBhIG9saGEgcXVlIGZp
bGhvIGNob3JhIGUgbcOjZSBuw6NvIHbDqiwgdmFtb3MgaW5pY2lhciBvCiAgICAgICAgdmVyZGFk
ZWlybyB0ZXN0ZSwgYm9hIHNvcnRlIG1ldXMgam92ZW5zLCBzw7MgY3VpZGFkbyBjb20gYSB0b2Nh
IHF1ZSBhIGFsaWNlIGNhaXUKICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICA8aDI+ZGljYXM6
PC9oMj4KICAgICAgICAgICAgPG9sPgogICAgICAgICAgICAgIDxsaT5lbSB1bSB0b2NhIGRlIGNv
ZWxobyB2b2PDqiBpcsOhIGVuY29udHJhciBvIHBhciBwZXJmZWl0byBwYXJhIGFicmlyIGEgcG9y
dGE8L2xpPgogICAgICAgICAgICAgIDxsaT5hbmFsaXNlIGJlbSBhcyByZmNzIGRvcyAqKioqKioq
KiBxdWUgdm9jw6ogZXN0w6EgdXNhbmRvIGUgY3JpZSBjw7NkaWdvcyBiYXNlYWRvcyBub3MgKioq
KioqKiBkZSBjYWRhIHVtIGRvcyBlbmNvZGVycywgdGVyw6EgMSBvdSAtMSBjYXJhY3RlcmVzIG5v
cyBlbmNvZGVycyBxdWUgdm9jZSBpcmEgIGVuY29udHJhIHBlbGEgZnJlbnRlPC9saT4KICAgICAg
ICAgICAgICA8bGk+Y2FkYSBpbmZvcm1hw6fDo28gY29udMOpbSBtw7psdGlwbGFzIGluZm9ybWHD
p8O1ZXMsIGFjaGFyIGEgY2hhdmUgZmluYQogICAgICAgICAgICAgIDxsaT5hcMOzcyBhIGFjaGFy
IGEgY2hhdmUgZmluYWwgaW5pY2lhciBvIHByb2Nlc3NvIGRlIG9zaW50IGVtIGNpbWEgZGEgY2hh
dmUgZSBlbmNvbnRyYWRhOgogICAgICAgICAgICAgICAgPG9sPgogICAgICAgICAgICAgICAgICA8
bGk+bm9tZSBjb21wbGV0bzwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaT5ub21lIGRhIG3Do2Ug
PC9saT4KICAgICAgICAgICAgICAgICAgPGxpPmNwZjwvbGk+CiAgICAgICAgICAgICAgICAgIDxs
aT5kYXRhIGRlIG5hc2NpbWVudG88L2xpPgogICAgICAgICAgICAgICAgICA8bGk+YXNzaW5hdHVy
YTwvbGk+CiAgICAgICAgICAgICAgICA8L29sPgogICAgICAgICAgICAgIDwvbGk+ICAgICAgICAg
ICAgICAgIDwhLS0gQXF1aSBlc3TDoSBhIHRhZyBkZSBmZWNoYW1lbnRvIDwvbGk+IC0tPgogICAg
ICAgICAgICAgIDxsaT50ZXJjZWlybyBpdGVtPC9saT4KICAgICAgICAgICAgPC9vbD4KICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIDxoMj4yLXBhcnRlLVtpc2guY29tLmJyXTwvaDI+CiAgICAg
ICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgICAgIDxsaT5lbnVtZXJhw6fDo28gaW5mb3Jt
w6F0aWNhcyAgICAKICAgICAgICAgICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgICAgICAg
ICA8bGk+ZG5zPC9saT4KICAgICAgICAgICAgICAgICAgICAgIDxsaT5kb25vIGRvIGRvbcOtbmlv
PC9saT4KICAgICAgICAgICAgICAgICAgICAgIDxsaT5kYXRhIGRlIHZhbGlkYWRlIDwvbGk+CiAg
ICAgICAgICAgICAgICAgICAgICA8bGk+cHJvdmVkb3Ivb25kZSBlc3TDoSBob3NwZWRhZG8gIDwv
bGk+CiAgICAgICAgICAgICAgICAgICAgICA8bGk+ZGFkb3MgcHJpdmFkb3MgZXhwb3N0b3MgPC9s
aT4KICAgICAgICAgICAgICAgICAgICAgIDxsaT5lbnVtZXJhw6fDo28gZGUgZS1tYWlsczwvbGk+
CiAgICAgICAgICAgICAgICAgICAgICA8bGk+cmFuZ2VyIGRlIGlwIDwvbGk+CiAgICAgICAgICAg
ICAgICAgICAgPC9vbD4KICAgICAgICAgICAgICAgICAgPC9saT4gICAgICAgICAgPC9saT4gCiAg
ICAgICAgICAgICAgICA8L29sPgoKICAgICAgICAgICAgICAgIDxoMj4zLXBhcnRlPC9oMj4gCiAg
ICAgICAgICAgICAgICAgICAgPHA+LWNyaWHDp8OjbyBkZSB1bSBwaGlzaGluZyBkZWRpY2FkbyBh
IDIgc2V0b3JlcyBkYSBpc2g8L3A+CiAgICAgICAgICAgICAgICAgICAgPHA+LWNvbSBvcyBlLW1h
aWxzIGVuY29udHJhZG9zIDwvcD4KICAgICAgICAgICAgICAgIDxoMj40LXBhcnRlPC9oMj4KICAg
ICAgICAgICAgICAgICAgICA8cD4tIGZlZWRiYWNrIGRvIHByb2Nlc3NvIHNlbGV0aXZvPC9wPiAK
ICAgICAgICAKICAgICAgICA8L29sPgogICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgIDwv
aHRtbD4KICAgICAgICAgICAgIiIiCiAgICAgICAgZWxpZiBjaGVja2soKToKICAgICAgICAgICAg
cmV0dXJuICIiIiAgPGh0bWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Ym9keT4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovLzY0Lm1lZGlhLnR1bWJsci5jb20vOGZh
NDU5MzcwNjJmMTE2OGU5ODdhMmQ5NGNjYTUxODYvdHVtYmxyX29oa2QxN3Jha3gxdHBkdDY4bzNf
NTAwLmdpZnYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4vbG9va3Vw
IHNlcmEgbyBzZXUgcHJveGltbyBkZXNhZmlvPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPC9ib2R5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9odG1sPgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiIiLDQyOQoKICAgICAgICBlbHNlOgogICAgICAgICAgICB0
bXAgPSAiIiIgIDxodG1sPgogICAgICAgICAgICAgICAgICAgPGJvZHk+CiAgICAgICAgICAgICAg
ICAgICAgICAgIDxoMT50ZSBwZWd1ZWkgbWV1IGdhZmFuaG90bywgbsOjbyBhZGlhbnRhIHRlbnRh
ciB0cmFwYWNlYXI8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczov
LzY0Lm1lZGlhLnR1bWJsci5jb20vYjIyMTFmYmM1ODAwMmEyODhkNDNlZTc4Y2E3ZDAxNjEvdHVt
YmxyX29oaml5MDl4OFQxcng3cWp1bzFfNTAwLmdpZnYiPgogICAgICAgICAgICAgICAgICAgICAg
ICA8cD5wYXJhIGRlc2FiaWxpdGFyIG8gdGltZSwgc2V0ZSBvIHVzZXIgYWdlbnRlIGNvcnJldG8s
c2lnYSBvIHBhc3NvIGEgcGFzc28gPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGh0
dHBzOi8vbWVkaWEudGVub3IuY29tL2ltYWdlcy9mMDMyYTI5Mjk4N2UxZDQ1YmE2ZjE0Yzk2MDMw
MjFlYy90ZW5vci5naWYtLS0hPgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIG8gdXN1YXJp
byBlcmEgcm9vdCwgbWFzIHBhcmVjZSBxdWUgbmEgc2V4dGEgZmVpcmEgMTMgZWxlIGVzcXVlY2V1
IGUgbm8gb3V0cm8gZGlhIGVsZSB0ZW50b3UgcHJpbnRhciB0b2RhIGEgdGFiZWxhIGFzY2lpIGUg
IGRldSBjZXJ0byBkZXNzZSBqZWl0IG8gc2V1IHVzZXItYWdlbnQgZmljYXJpYSB7VmBVOj5GRkN9
IC0tLSE+CiAgICAgICAgICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgICAgICA8L2h0bWw+
CiAgICAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgZG9ybWUgPSBvdXQgKyAoMiAqIG91dCkK
ICAgICAgICAgICAgcHJpbnQoZiJ0ZW1wbyBzb21hZG8gYSBtYWlzID0gW3syICogb3V0fV0iKQog
ICAgICAgICAgICBwcmludChmJ3RpcG8gZXN0aXB1bGFkbyA9IFt7ZG9ybWV9XScpCiAgICAgICAg
ICAgIHNsZWVwKDMpCiAgICAgICAgICAgIHJldHVybiB0bXAsNTAwCgoKCgojIDIuIEROUyBsb29r
dXAKQGFwcC5yb3V0ZSgnL2xvb2t1cCcsIG1ldGhvZHM9WydQT1NUJywgJ0dFVCddKQpkZWYgbG9v
a3VwKCk6CiAgICBhZGRyZXNzID0gTm9uZQogICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gJ1BPU1Qn
OgogICAgICAgIGFkZHJlc3MgPSByZXF1ZXN0LmZvcm1bJ3hwdG8nXQogICAgcmV0dXJuICIiIlxu
ICAgIDxodG1sPlxuICAgICAgIDxib2R5PlJlc3VsdDpcbjxicj5cbnswfVxuICAgICAgICAgIDxm
b3JtIGFjdGlvbiA9IFwiL2xvb2t1cFwiIG1ldGhvZCA9IFwiUE9TVFwiPlxuICAgICAgICAgICAg
IDxwPjxoMz5wZWd1ZSB1bWEgcmV2ZXJzZSBzaGVsbDwvaDM+PC9wPlxuICAgICAgICAgICAgIDxw
PjxpbnB1dCB0eXBlID0gXCd0ZXh0XCcgbmFtZSA9IFwneHB0b1wnLz48L3A+XG4gICAgICAgICAg
ICAgPHA+PGlucHV0IHR5cGUgPSBcJ3N1Ym1pdFwnIHZhbHVlID0gXCdMb29rdXBcJy8+PC9wPlxu
ICAgICAgICAgIDwvZm9ybT5cbiAgICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICAgICIiIi5m
b3JtYXQoCiAgICAgICAgKHJwKCJweXRob24gIiArIGFkZHJlc3MpLnJlcGxhY2UoJ1xuJywgJ1xu
PGJyPicpIGlmIGFkZHJlc3MgZWxzZSAiIikpCgoKIyA3LiBMaXN0IHByb2R1Y3RzIGFuZCBzZXJ2
aWNlcwpAYXBwLnJvdXRlKCcvc3FsX3RvX29zaW50X2tleScsIG1ldGhvZHM9WydHRVQnXSkKZGVm
IHNxbF90b19vc2ludF9rZXkoKToKICAgIHBhcmFtID0gJ2NhdGVnb3J5JwogICAgY2F0ZWdvcnkg
PSBOb25lCiAgICBjYXRlZ29yeSA9IHJlcXVlc3QuYXJncy5nZXQocGFyYW0pCiAgICBjb2x1bW5z
ID0gW2JbJ25hbWUnXSBmb3IgYiBpbiBbYSBmb3IgYSBpbiBEQVRBQkFTRV9UQUJMRVMgaWYgYVsn
dGFibGVfbmFtZSddID09ICdvaWNpbklmdEN0bmlzTyddWzBdWydjb2x1bW5zJ11dCiAgICBjb2x1
bW5faHRtbCA9ICdcbicuam9pbignPHRoPnt9PC90aD4nLmZvcm1hdChhKSBmb3IgYSBpbiBjb2x1
bW5zKQogICAgd2hlcmUgPSAnJwogICAgaWYgY2F0ZWdvcnk6CiAgICAgICAgd2hlcmUgPSAiIFdI
RVJFIHt9ID0gJ3t9JyIuZm9ybWF0KHBhcmFtLCBjYXRlZ29yeSkKCiAgICB0cnk6CiAgICAgICAg
Y3Vyc29yLmV4ZWN1dGUocXVlcnlfYnVpbGQoJ1NFTEVDVCAqIGZyb20gb2ljaW5JZnRDdG5pc097
fScuZm9ybWF0KHdoZXJlKSkpCiAgICAgICAgcmVzdWx0cyA9IGN1cnNvci5mZXRjaGFsbCgpCiAg
ICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcmV0dXJuIHN0cihlKQoKICAgIGxpbmtl
ciA9IGxhbWJkYSB4LCB5OiAnPGEgaHJlZj0iL3NxbF90b19vc2ludF9rZXk/e309e30iPnt9PC9h
PicuZm9ybWF0KHBhcmFtLCB5LCB5KSBpZiB4ID09IGNvbHVtbnMuaW5kZXgoCiAgICAgICAgcGFy
YW0pIGVsc2Ugc3RyKHkpCiAgICByZXN1bHRzX2h0bWwgPSAoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICc8dHI+XG48dGQ+JwogICAgICAgICAgICAgICAgICAgICAgICAgICArICc8L3RyPlxu
PHRyPlxuPHRkPicuam9pbigKICAgICAgICAgICAgICAgICAgICAgICAnPC90ZD5cbjx0ZD4nLmpv
aW4obGlua2VyKGMsIGIpIGZvciBiLCBjIGluIHppcChhLCByYW5nZShsZW4oYSkpKSkKICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgYSBpbiByZXN1bHRzCiAgICAgICAgICAgICAgICAgICApCiAg
ICAgICAgICAgICAgICAgICApICsgJ1xuPC90cj4nCgogICAgcmV0dXJuICIiIgogICAgPGh0bWw+
CiAgICAgICAgPGJvZHk+CiAgICAgICAgPGgxPlByb2R1Y3RzIGFuZCBzZXJ2aWNlczwvaDE+PGJy
PgogICAgICAgIDxwPlNlZSBiZWxvdyBmb3Igb3VyIGxpc3Qgb2YgcHJvZHVjdHMgYW5kIHNlcnZp
Y2VzLiBDbGljayBvbiBhIGNhdGVnb3J5IHRvIGZpbHRlciByZXN1bHRzLjwvcD4KICAgICAgICA8
YnI+PGJyPgogICAgICAgIDx0YWJsZT4KICAgICAgICA8dHI+IiIiICsgY29sdW1uX2h0bWwgKyAi
IiIKICAgICAgICA8L3RyPiIiIiArIHJlc3VsdHNfaHRtbCArICIiIgogICAgICAgIDwvdGFibGU+
CiAgICAgICAgPC9ib2R5PgogICAgPC9odG1sPgogICAgcmV0dXJuICIiIgoKCmlmIF9fbmFtZV9f
ID09ICJfX21haW5fXyI6CgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQog
ICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wb3J0JywgdHlwZT1pbnQsIGhlbHA9J0xp
c3RlbiBwb3J0LiBEZWZhdWx0OiA0MDAwJywgZGVmYXVsdD00MDAwKQogICAgcGFyc2VyLmFkZF9h
cmd1bWVudCgnLWEnLCAnLS1hZGRyZXNzJywgdHlwZT1zdHIsIGhlbHA9J0xpc3RlbiBhZGRyZXNz
LiBEZWZhdWx0OiAxMjcuMC4wLjEnLCBkZWZhdWx0PScxMjcuMC4wLjEnKQogICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgnLWQnLCBoZWxwPSdEZWJ1ZyBsZXZlbCcsIGFjdGlvbj0iY291bnQiLCBkZWZh
dWx0PTApCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRhdGFiYXNlX3R5cGUnLCBoZWxwPSdE
YXRhYmFzZSB0eXBlLiBEZWZhdWx0OiBzcWxpdGUnLCBkZWZhdWx0PSdzcWxpdGUnLAogICAgICAg
ICAgICAgICAgICAgICAgICBjaG9pY2VzPVsnc3FsaXRlJ10pCiAgICBwYXJzZXIuYWRkX2FyZ3Vt
ZW50KCctLWRhdGFiYXNlX2ZpbGVuYW1lJywgdHlwZT1zdHIsIGhlbHA9J0RhdGFiYXNlIGZpbGVu
YW1lIChzcWxpdGUgb25seSkuIERlZmF1bHQ6IDptZW1vcnk6JywKICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdD0nOm1lbW9yeTonKQoKCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Mo
KQoKICAgIHF1ZXJ5X2J1aWxkID0gbGFtYmRhIHg6IHggaWYgYXJncy5kYXRhYmFzZV90eXBlID09
ICdvcmFjbGUnIGVsc2UgeCArICc7JyAgIyB3aHkgbXVzdCB5b3UgYmUgdGhpcyB3YXkgT3JhY2xl
PwoKICAgIGlmIGFyZ3MuZGF0YWJhc2VfdHlwZSBpbiBbJ215c3FsJywgJ21zc3FsJ106CiAgICAg
ICAgYXV0b2NvbW1pdCA9IGxhbWJkYSB4OiB4LmF1dG9jb21taXQoVHJ1ZSkKICAgIGlmIGFyZ3Mu
ZGF0YWJhc2VfdHlwZSA9PSAncG9zdGdyZXMnOgogICAgICAgIGltcG9ydCBwc3ljb3BnMiBhcyBk
Ym1vZHVsZQoKICAgICAgICBkZWYgYXV0b2NvbW1pdCh4KToKICAgICAgICAgICAgeC5hdXRvY29t
bWl0ID0gVHJ1ZQoKCiAgICAgICAgbGlzdF9kYXRhYmFzZXNfcXVlcnkgPSAnU0VMRUNUIGRhdG5h
bWUgRlJPTSBwZ19kYXRhYmFzZTsnCiAgICAgICAgbGlzdF90YWJsZXNfcXVlcnkgPSAiU0VMRUNU
IHRhYmxlX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3Nj
aGVtYSA9ICdwdWJsaWMnIE9SREVSIEJZIHRhYmxlX25hbWU7IgogICAgaWYgYXJncy5kYXRhYmFz
ZV90eXBlID09ICdteXNxbCc6CiAgICAgICAgaW1wb3J0IHB5bXlzcWwgYXMgZGJtb2R1bGUKCiAg
ICAgICAgbGlzdF9kYXRhYmFzZXNfcXVlcnkgPSAnU0hPVyBkYXRhYmFzZXM7JwogICAgICAgIGxp
c3RfdGFibGVzX3F1ZXJ5ID0gJ1NIT1cgdGFibGVzOycKICAgIGlmIGFyZ3MuZGF0YWJhc2VfdHlw
ZSA9PSAnbXNzcWwnOgogICAgICAgIGltcG9ydCBweW1zc3FsIGFzIGRibW9kdWxlCgogICAgICAg
IGxpc3RfZGF0YWJhc2VzX3F1ZXJ5ID0gJ1NFTEVDVCBuYW1lIEZST00gc3lzLmRhdGFiYXNlczsn
CiAgICAgICAgbGlzdF90YWJsZXNfcXVlcnkgPSAnU0VMRUNUIG5hbWUgRlJPTSBzeXMudGFibGVz
OycKICAgIGlmIGFyZ3MuZGF0YWJhc2VfdHlwZSA9PSAnc3FsaXRlJzoKICAgICAgICBpbXBvcnQg
c3FsaXRlMyBhcyBkYm1vZHVsZQoKICAgICAgICBsaXN0X3RhYmxlc19xdWVyeSA9ICJTRUxFQ1Qg
bmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9J3RhYmxlJyBBTkQgbmFtZSBOT1Qg
TElLRSAnc3FsaXRlXyUnOyIKICAgIGlmIGFyZ3MuZGF0YWJhc2VfdHlwZSA9PSAnb3JhY2xlJzoK
ICAgICAgICBpbXBvcnQgY3hfT3JhY2xlIGFzIGRibW9kdWxlCgogICAgICAgIGRibW9kdWxlLmlu
aXRfb3JhY2xlX2NsaWVudChhcmdzLm9yYWNsZV9saWJfZGlyKQogICAgICAgIGxpc3RfdGFibGVz
X3F1ZXJ5ID0gJ1NFTEVDVCB0YWJsZV9uYW1lIEZST00gYWxsX3RhYmxlcycKCiAgICB0cnk6CiAg
ICAgICAgaWYgYXJncy5kYXRhYmFzZV90eXBlIG5vdCBpbiBbJ3NxbGl0ZScsICdvcmFjbGUnXToK
ICAgICAgICAgICAgY29ubmVjdGlvbl9wYXJhbXMgPSB7YS5yZXBsYWNlKCdkYXRhYmFzZV8nLCAn
Jyk6IGdldGF0dHIoYXJncywgYSkgZm9yIGEgaW4gZGlyKGFyZ3MpIGlmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGEgaW4gWydkYXRhYmFzZV91c2VyJywgJ2RhdGFiYXNlX2hvc3Qn
LCAnZGF0YWJhc2VfcGFzc3dvcmQnLCAnZGF0YWJhc2VfcG9ydCddfQogICAgICAgICAgICBjb25u
ZWN0aW9uID0gZGJtb2R1bGUuY29ubmVjdCgqKmNvbm5lY3Rpb25fcGFyYW1zKQogICAgICAgICAg
ICBhdXRvY29tbWl0KGNvbm5lY3Rpb24pCiAgICAgICAgICAgIGN1cnNvciA9IGNvbm5lY3Rpb24u
Y3Vyc29yKCkKICAgICAgICAgICAgY3Vyc29yLmV4ZWN1dGUobGlzdF9kYXRhYmFzZXNfcXVlcnkp
CiAgICAgICAgICAgIHIgPSBbYVswXSBmb3IgYSBpbiBjdXJzb3IuZmV0Y2hhbGwoKSBpZiBhWzBd
ID09IERBVEFCQVNFX05BTUVdCiAgICAgICAgICAgIGlmIG5vdCByOiAgIyBjcmVhdGUgZGF0YWJh
c2UgaWYgaXQgZG9lc250IGV4aXN0CiAgICAgICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiQ1JF
QVRFIERBVEFCQVNFIHt9OyIuZm9ybWF0KERBVEFCQVNFX05BTUUpKQogICAgICAgICAgICBjdXJz
b3IuY2xvc2UoKQogICAgICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCkKICAgICAgICAgICAgY29u
bmVjdGlvbl9wYXJhbXNbJ2RhdGFiYXNlJ10gPSBEQVRBQkFTRV9OQU1FCiAgICAgICAgICAgIGNv
bm5lY3Rpb24gPSBkYm1vZHVsZS5jb25uZWN0KCoqY29ubmVjdGlvbl9wYXJhbXMpICAjIHJlY29u
bmVjdCBpbiBuZXcgZGF0YWJhc2UgY29udGV4dAogICAgICAgICAgICBhdXRvY29tbWl0KGNvbm5l
Y3Rpb24pCgogICAgICAgIGVsaWYgYXJncy5kYXRhYmFzZV90eXBlID09ICdzcWxpdGUnOgogICAg
ICAgICAgICBjb25uZWN0aW9uID0gZGJtb2R1bGUuY29ubmVjdChhcmdzLmRhdGFiYXNlX2ZpbGVu
YW1lLCBjaGVja19zYW1lX3RocmVhZD1GYWxzZSkKICAgICAgICAgICAgY29ubmVjdGlvbi5pc29s
YXRpb25fbGV2ZWwgPSBOb25lICAjIGF1dG9jb21taXQKICAgICAgICBlbHNlOiAgIyBzaG91bGRu
dCBoYXBwZW4KICAgICAgICAgICAgcHJpbnQoJ0ludmFsaWQgZGF0YWJhc2UgdHlwZSBzZWxlY3Rl
ZDoge30nLmZvcm1hdChhcmdzLmRhdGFiYXNlX3R5cGUpKQogICAgICAgICAgICBzeXMuZXhpdCgx
KQoKICAgICAgICBjdXJzb3IgPSBjb25uZWN0aW9uLmN1cnNvcigpCiAgICAgICAgY3Vyc29yLmV4
ZWN1dGUobGlzdF90YWJsZXNfcXVlcnkpCiAgICAgICAgZXhpc3RpbmdfdGFibGVzID0gW2FbMF0u
bG93ZXIoKSBmb3IgYSBpbiBjdXJzb3IuZmV0Y2hhbGwoKV0KICAgICAgICBmb3IgdGFibGUgaW4g
W2EgZm9yIGEgaW4gREFUQUJBU0VfVEFCTEVTIGlmCiAgICAgICAgICAgICAgICAgICAgICBhWyd0
YWJsZV9uYW1lJ10ubG93ZXIoKSBub3QgaW4gZXhpc3RpbmdfdGFibGVzXTogICMgY3JlYXRlIG1p
c3NpbmcgdGFibGVzCiAgICAgICAgICAgIGlubmVyID0gJywgJy5qb2luKFsnICcuam9pbigKICAg
ICAgICAgICAgICAgIFsobGFtYmRhIHg6IHggaWYgaXNpbnN0YW5jZSh4LCBzdHIpIGVsc2UgJ05V
TEwnIGlmIHggZWxzZSAnTk9UIE5VTEwnKShhW2JdKSBmb3IgYiBpbgogICAgICAgICAgICAgICAg
IFsnbmFtZScsICdkYXRhdHlwZScsICdudWxsYWJsZSddXSkgZm9yIGEgaW4gdGFibGVbJ2NvbHVt
bnMnXV0pCiAgICAgICAgICAgIGN1cnNvci5leGVjdXRlKHF1ZXJ5X2J1aWxkKCdDUkVBVEUgVEFC
TEUge30gKHt9KScuZm9ybWF0KHRhYmxlWyd0YWJsZV9uYW1lJ10ubG93ZXIoKSwgaW5uZXIpKSkK
ICAgICAgICAgICAgZm9yIGRhdGEgaW4gREFUQUJBU0VfQ09OVEVOVFNbdGFibGVbJ3RhYmxlX25h
bWUnXV06ICAjIGluc2VydCBkYXRhIGludG8gdGFibGUKICAgICAgICAgICAgICAgIGNvbHVtbnMg
PSAnLCAnLmpvaW4oW2FbJ25hbWUnXSBmb3IgYSBpbiB0YWJsZVsnY29sdW1ucyddXSkKICAgICAg
ICAgICAgICAgIHZhbHVlcyA9ICcsICcuam9pbigKICAgICAgICAgICAgICAgICAgICBbKGxhbWJk
YSB4OiBzdHIoeCkgaWYgaXNpbnN0YW5jZSh4LCBpbnQpIGVsc2UgIid7fSciLmZvcm1hdCh4LnJl
cGxhY2UoIiciLCAiXFwnIikpKShhKSBmb3IgYSBpbgogICAgICAgICAgICAgICAgICAgICBkYXRh
XSkKICAgICAgICAgICAgICAgIGN1cnNvci5leGVjdXRlKAogICAgICAgICAgICAgICAgICAgIHF1
ZXJ5X2J1aWxkKCdJTlNFUlQgSU5UTyB7fSAoe30pIFZBTFVFUyAoe30pJy5mb3JtYXQodGFibGVb
J3RhYmxlX25hbWUnXSwgY29sdW1ucywgdmFsdWVzKSkpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFz
IGU6CiAgICAgICAgcHJpbnQoJ0FuIGVycm9yIG9jdXJlZCBkdXJpbmcgZGF0YWJhc2UgY29ubmVj
dGlvbi9zZXR1cDoge30nLmZvcm1hdChlKSkKICAgICAgICBzeXMuZXhpdCgxKQoKICAgIGFwcC5y
dW4oaG9zdD1hcmdzLmFkZHJlc3MsIHBvcnQ9YXJncy5wb3J0KQo=