Source code for versioneer
#!/usr/bin/env python
import sys, base64
from typing import NoReturn
VERSIONEER_b64 = """
CiMgVmVyc2lvbjogMC4yOQoKIiIiVGhlIFZlcnNpb25lZXIgLSBsaWtlIGEg
cm9ja2V0ZWVyLCBidXQgZm9yIHZlcnNpb25zLgoKVGhlIFZlcnNpb25lZXIK
PT09PT09PT09PT09PT0KCiogbGlrZSBhIHJvY2tldGVlciwgYnV0IGZvciB2
ZXJzaW9ucyEKKiBodHRwczovL2dpdGh1Yi5jb20vcHl0aG9uLXZlcnNpb25l
ZXIvcHl0aG9uLXZlcnNpb25lZXIKKiBCcmlhbiBXYXJuZXIKKiBMaWNlbnNl
OiBQdWJsaWMgRG9tYWluIChVbmxpY2Vuc2UpCiogQ29tcGF0aWJsZSB3aXRo
OiBQeXRob24gMy43LCAzLjgsIDMuOSwgMy4xMCwgMy4xMSBhbmQgcHlweTMK
KiBbIVtMYXRlc3QgVmVyc2lvbl1bcHlwaS1pbWFnZV1dW3B5cGktdXJsXQoq
IFshW0J1aWxkIFN0YXR1c11bdHJhdmlzLWltYWdlXV1bdHJhdmlzLXVybF0K
ClRoaXMgaXMgYSB0b29sIGZvciBtYW5hZ2luZyBhIHJlY29yZGVkIHZlcnNp
b24gbnVtYmVyIGluIHNldHVwdG9vbHMtYmFzZWQKcHl0aG9uIHByb2plY3Rz
LiBUaGUgZ29hbCBpcyB0byByZW1vdmUgdGhlIHRlZGlvdXMgYW5kIGVycm9y
LXByb25lICJ1cGRhdGUKdGhlIGVtYmVkZGVkIHZlcnNpb24gc3RyaW5nIiBz
dGVwIGZyb20geW91ciByZWxlYXNlIHByb2Nlc3MuIE1ha2luZyBhIG5ldwpy
ZWxlYXNlIHNob3VsZCBiZSBhcyBlYXN5IGFzIHJlY29yZGluZyBhIG5ldyB0
YWcgaW4geW91ciB2ZXJzaW9uLWNvbnRyb2wKc3lzdGVtLCBhbmQgbWF5YmUg
bWFraW5nIG5ldyB0YXJiYWxscy4KCgojIyBRdWljayBJbnN0YWxsCgpWZXJz
aW9uZWVyIHByb3ZpZGVzIHR3byBpbnN0YWxsYXRpb24gbW9kZXMuIFRoZSAi
Y2xhc3NpYyIgdmVuZG9yZWQgbW9kZSBpbnN0YWxscwphIGNvcHkgb2YgdmVy
c2lvbmVlciBpbnRvIHlvdXIgcmVwb3NpdG9yeS4gVGhlIGV4cGVyaW1lbnRh
bCBidWlsZC10aW1lIGRlcGVuZGVuY3kgbW9kZQppcyBpbnRlbmRlZCB0byBh
bGxvdyB5b3UgdG8gc2tpcCB0aGlzIHN0ZXAgYW5kIHNpbXBsaWZ5IHRoZSBw
cm9jZXNzIG9mIHVwZ3JhZGluZy4KCiMjIyBWZW5kb3JlZCBtb2RlCgoqIGBw
aXAgaW5zdGFsbCB2ZXJzaW9uZWVyYCB0byBzb21ld2hlcmUgaW4geW91ciAk
UEFUSAogICAqIEEgW2NvbmRhLWZvcmdlIHJlY2lwZV0oaHR0cHM6Ly9naXRo
dWIuY29tL2NvbmRhLWZvcmdlL3ZlcnNpb25lZXItZmVlZHN0b2NrKSBpcwog
ICAgIGF2YWlsYWJsZSwgc28geW91IGNhbiBhbHNvIHVzZSBgY29uZGEgaW5z
dGFsbCAtYyBjb25kYS1mb3JnZSB2ZXJzaW9uZWVyYAoqIGFkZCBhIGBbdG9v
bC52ZXJzaW9uZWVyXWAgc2VjdGlvbiB0byB5b3VyIGBweXByb2plY3QudG9t
bGAgb3IgYQogIGBbdmVyc2lvbmVlcl1gIHNlY3Rpb24gdG8geW91ciBgc2V0
dXAuY2ZnYCAoc2VlIFtJbnN0YWxsXShJTlNUQUxMLm1kKSkKICAgKiBOb3Rl
IHRoYXQgeW91IHdpbGwgbmVlZCB0byBhZGQgYHRvbWxpOyBweXRob25fdmVy
c2lvbiA8ICIzLjExImAgdG8geW91cgogICAgIGJ1aWxkLXRpbWUgZGVwZW5k
ZW5jaWVzIGlmIHlvdSB1c2UgYHB5cHJvamVjdC50b21sYAoqIHJ1biBgdmVy
c2lvbmVlciBpbnN0YWxsIC0tdmVuZG9yYCBpbiB5b3VyIHNvdXJjZSB0cmVl
LCBjb21taXQgdGhlIHJlc3VsdHMKKiB2ZXJpZnkgdmVyc2lvbiBpbmZvcm1h
dGlvbiB3aXRoIGBweXRob24gc2V0dXAucHkgdmVyc2lvbmAKCiMjIyBCdWls
ZC10aW1lIGRlcGVuZGVuY3kgbW9kZQoKKiBgcGlwIGluc3RhbGwgdmVyc2lv
bmVlcmAgdG8gc29tZXdoZXJlIGluIHlvdXIgJFBBVEgKICAgKiBBIFtjb25k
YS1mb3JnZSByZWNpcGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9jb25kYS1mb3Jn
ZS92ZXJzaW9uZWVyLWZlZWRzdG9jaykgaXMKICAgICBhdmFpbGFibGUsIHNv
IHlvdSBjYW4gYWxzbyB1c2UgYGNvbmRhIGluc3RhbGwgLWMgY29uZGEtZm9y
Z2UgdmVyc2lvbmVlcmAKKiBhZGQgYSBgW3Rvb2wudmVyc2lvbmVlcl1gIHNl
Y3Rpb24gdG8geW91ciBgcHlwcm9qZWN0LnRvbWxgIG9yIGEKICBgW3ZlcnNp
b25lZXJdYCBzZWN0aW9uIHRvIHlvdXIgYHNldHVwLmNmZ2AgKHNlZSBbSW5z
dGFsbF0oSU5TVEFMTC5tZCkpCiogYWRkIGB2ZXJzaW9uZWVyYCAod2l0aCBg
W3RvbWxdYCBleHRyYSwgaWYgY29uZmlndXJpbmcgaW4gYHB5cHJvamVjdC50
b21sYCkKICB0byB0aGUgYHJlcXVpcmVzYCBrZXkgb2YgdGhlIGBidWlsZC1z
eXN0ZW1gIHRhYmxlIGluIGBweXByb2plY3QudG9tbGA6CiAgYGBgdG9tbAog
IFtidWlsZC1zeXN0ZW1dCiAgcmVxdWlyZXMgPSBbInNldHVwdG9vbHMiLCAi
dmVyc2lvbmVlclt0b21sXSJdCiAgYnVpbGQtYmFja2VuZCA9ICJzZXR1cHRv
b2xzLmJ1aWxkX21ldGEiCiAgYGBgCiogcnVuIGB2ZXJzaW9uZWVyIGluc3Rh
bGwgLS1uby12ZW5kb3JgIGluIHlvdXIgc291cmNlIHRyZWUsIGNvbW1pdCB0
aGUgcmVzdWx0cwoqIHZlcmlmeSB2ZXJzaW9uIGluZm9ybWF0aW9uIHdpdGgg
YHB5dGhvbiBzZXR1cC5weSB2ZXJzaW9uYAoKIyMgVmVyc2lvbiBJZGVudGlm
aWVycwoKU291cmNlIHRyZWVzIGNvbWUgZnJvbSBhIHZhcmlldHkgb2YgcGxh
Y2VzOgoKKiBhIHZlcnNpb24tY29udHJvbCBzeXN0ZW0gY2hlY2tvdXQgKG1v
c3RseSB1c2VkIGJ5IGRldmVsb3BlcnMpCiogYSBuaWdodGx5IHRhcmJhbGws
IHByb2R1Y2VkIGJ5IGJ1aWxkIGF1dG9tYXRpb24KKiBhIHNuYXBzaG90IHRh
cmJhbGwsIHByb2R1Y2VkIGJ5IGEgd2ViLWJhc2VkIFZDUyBicm93c2VyLCBs
aWtlIGdpdGh1YidzCiAgInRhcmJhbGwgZnJvbSB0YWciIGZlYXR1cmUKKiBh
IHJlbGVhc2UgdGFyYmFsbCwgcHJvZHVjZWQgYnkgInNldHVwLnB5IHNkaXN0
IiwgZGlzdHJpYnV0ZWQgdGhyb3VnaCBQeVBJCgpXaXRoaW4gZWFjaCBzb3Vy
Y2UgdHJlZSwgdGhlIHZlcnNpb24gaWRlbnRpZmllciAoZWl0aGVyIGEgc3Ry
aW5nIG9yIGEgbnVtYmVyLAp0aGlzIHRvb2wgaXMgZm9ybWF0LWFnbm9zdGlj
KSBjYW4gY29tZSBmcm9tIGEgdmFyaWV0eSBvZiBwbGFjZXM6CgoqIGFzayB0
aGUgVkNTIHRvb2wgaXRzZWxmLCBlLmcuICJnaXQgZGVzY3JpYmUiIChmb3Ig
Y2hlY2tvdXRzKSwgd2hpY2gga25vd3MKICBhYm91dCByZWNlbnQgInRhZ3Mi
IGFuZCBhbiBhYnNvbHV0ZSByZXZpc2lvbi1pZAoqIHRoZSBuYW1lIG9mIHRo
ZSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgdGFyYmFsbCB3YXMgdW5wYWNr
ZWQKKiBhbiBleHBhbmRlZCBWQ1Mga2V5d29yZCAoJElkJCwgZXRjKQoqIGEg
YF92ZXJzaW9uLnB5YCBjcmVhdGVkIGJ5IHNvbWUgZWFybGllciBidWlsZCBz
dGVwCgpGb3IgcmVsZWFzZWQgc29mdHdhcmUsIHRoZSB2ZXJzaW9uIGlkZW50
aWZpZXIgaXMgY2xvc2VseSByZWxhdGVkIHRvIGEgVkNTCnRhZy4gU29tZSBw
cm9qZWN0cyB1c2UgdGFnIG5hbWVzIHRoYXQgaW5jbHVkZSBtb3JlIHRoYW4g
anVzdCB0aGUgdmVyc2lvbgpzdHJpbmcgKGUuZy4gIm15cHJvamVjdC0xLjIi
IGluc3RlYWQgb2YganVzdCAiMS4yIiksIGluIHdoaWNoIGNhc2UgdGhlIHRv
b2wKbmVlZHMgdG8gc3RyaXAgdGhlIHRhZyBwcmVmaXggdG8gZXh0cmFjdCB0
aGUgdmVyc2lvbiBpZGVudGlmaWVyLiBGb3IKdW5yZWxlYXNlZCBzb2Z0d2Fy
ZSAoYmV0d2VlbiB0YWdzKSwgdGhlIHZlcnNpb24gaWRlbnRpZmllciBzaG91
bGQgcHJvdmlkZQplbm91Z2ggaW5mb3JtYXRpb24gdG8gaGVscCBkZXZlbG9w
ZXJzIHJlY3JlYXRlIHRoZSBzYW1lIHRyZWUsIHdoaWxlIGFsc28KZ2l2aW5n
IHRoZW0gYW4gaWRlYSBvZiByb3VnaGx5IGhvdyBvbGQgdGhlIHRyZWUgaXMg
KGFmdGVyIHZlcnNpb24gMS4yLCBiZWZvcmUKdmVyc2lvbiAxLjMpLiBNYW55
IFZDUyBzeXN0ZW1zIGNhbiByZXBvcnQgYSBkZXNjcmlwdGlvbiB0aGF0IGNh
cHR1cmVzIHRoaXMsCmZvciBleGFtcGxlIGBnaXQgZGVzY3JpYmUgLS10YWdz
IC0tZGlydHkgLS1hbHdheXNgIHJlcG9ydHMgdGhpbmdzIGxpa2UKIjAuNy0x
LWc1NzRhYjk4LWRpcnR5IiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjaGVja291
dCBpcyBvbmUgcmV2aXNpb24gcGFzdCB0aGUKMC43IHRhZywgaGFzIGEgdW5p
cXVlIHJldmlzaW9uIGlkIG9mICI1NzRhYjk4IiwgYW5kIGlzICJkaXJ0eSIg
KGl0IGhhcwp1bmNvbW1pdHRlZCBjaGFuZ2VzKS4KClRoZSB2ZXJzaW9uIGlk
ZW50aWZpZXIgaXMgdXNlZCBmb3IgbXVsdGlwbGUgcHVycG9zZXM6CgoqIHRv
IGFsbG93IHRoZSBtb2R1bGUgdG8gc2VsZi1pZGVudGlmeSBpdHMgdmVyc2lv
bjogYG15cHJvamVjdC5fX3ZlcnNpb25fX2AKKiB0byBjaG9vc2UgYSBuYW1l
IGFuZCBwcmVmaXggZm9yIGEgJ3NldHVwLnB5IHNkaXN0JyB0YXJiYWxsCgoj
IyBUaGVvcnkgb2YgT3BlcmF0aW9uCgpWZXJzaW9uZWVyIHdvcmtzIGJ5IGFk
ZGluZyBhIHNwZWNpYWwgYF92ZXJzaW9uLnB5YCBmaWxlIGludG8geW91ciBz
b3VyY2UKdHJlZSwgd2hlcmUgeW91ciBgX19pbml0X18ucHlgIGNhbiBpbXBv
cnQgaXQuIFRoaXMgYF92ZXJzaW9uLnB5YCBrbm93cyBob3cgdG8KZHluYW1p
Y2FsbHkgYXNrIHRoZSBWQ1MgdG9vbCBmb3IgdmVyc2lvbiBpbmZvcm1hdGlv
biBhdCBpbXBvcnQgdGltZS4KCmBfdmVyc2lvbi5weWAgYWxzbyBjb250YWlu
cyBgJFJldmlzaW9uJGAgbWFya2VycywgYW5kIHRoZSBpbnN0YWxsYXRpb24K
cHJvY2VzcyBtYXJrcyBgX3ZlcnNpb24ucHlgIHRvIGhhdmUgdGhpcyBtYXJr
ZXIgcmV3cml0dGVuIHdpdGggYSB0YWcgbmFtZQpkdXJpbmcgdGhlIGBnaXQg
YXJjaGl2ZWAgY29tbWFuZC4gQXMgYSByZXN1bHQsIGdlbmVyYXRlZCB0YXJi
YWxscyB3aWxsCmNvbnRhaW4gZW5vdWdoIGluZm9ybWF0aW9uIHRvIGdldCB0
aGUgcHJvcGVyIHZlcnNpb24uCgpUbyBhbGxvdyBgc2V0dXAucHlgIHRvIGNv
bXB1dGUgYSB2ZXJzaW9uIHRvbywgYSBgdmVyc2lvbmVlci5weWAgaXMgYWRk
ZWQgdG8KdGhlIHRvcCBsZXZlbCBvZiB5b3VyIHNvdXJjZSB0cmVlLCBuZXh0
IHRvIGBzZXR1cC5weWAgYW5kIHRoZSBgc2V0dXAuY2ZnYAp0aGF0IGNvbmZp
Z3VyZXMgaXQuIFRoaXMgb3ZlcnJpZGVzIHNldmVyYWwgZGlzdHV0aWxzL3Nl
dHVwdG9vbHMgY29tbWFuZHMgdG8KY29tcHV0ZSB0aGUgdmVyc2lvbiB3aGVu
IGludm9rZWQsIGFuZCBjaGFuZ2VzIGBzZXR1cC5weSBidWlsZGAgYW5kIGBz
ZXR1cC5weQpzZGlzdGAgdG8gcmVwbGFjZSBgX3ZlcnNpb24ucHlgIHdpdGgg
YSBzbWFsbCBzdGF0aWMgZmlsZSB0aGF0IGNvbnRhaW5zIGp1c3QKdGhlIGdl
bmVyYXRlZCB2ZXJzaW9uIGRhdGEuCgojIyBJbnN0YWxsYXRpb24KClNlZSBb
SU5TVEFMTC5tZF0oLi9JTlNUQUxMLm1kKSBmb3IgZGV0YWlsZWQgaW5zdGFs
bGF0aW9uIGluc3RydWN0aW9ucy4KCiMjIFZlcnNpb24tU3RyaW5nIEZsYXZv
cnMKCkNvZGUgd2hpY2ggdXNlcyBWZXJzaW9uZWVyIGNhbiBsZWFybiBhYm91
dCBpdHMgdmVyc2lvbiBzdHJpbmcgYXQgcnVudGltZSBieQppbXBvcnRpbmcg
YF92ZXJzaW9uYCBmcm9tIHlvdXIgbWFpbiBgX19pbml0X18ucHlgIGZpbGUg
YW5kIHJ1bm5pbmcgdGhlCmBnZXRfdmVyc2lvbnMoKWAgZnVuY3Rpb24uIEZy
b20gdGhlICJvdXRzaWRlIiAoZS5nLiBpbiBgc2V0dXAucHlgKSwgeW91IGNh
bgppbXBvcnQgdGhlIHRvcC1sZXZlbCBgdmVyc2lvbmVlci5weWAgYW5kIHJ1
biBgZ2V0X3ZlcnNpb25zKClgLgoKQm90aCBmdW5jdGlvbnMgcmV0dXJuIGEg
ZGljdGlvbmFyeSB3aXRoIGRpZmZlcmVudCBmbGF2b3JzIG9mIHZlcnNpb24K
aW5mb3JtYXRpb246CgoqIGBbJ3ZlcnNpb24nXWA6IEEgY29uZGVuc2VkIHZl
cnNpb24gc3RyaW5nLCByZW5kZXJlZCB1c2luZyB0aGUgc2VsZWN0ZWQKICBz
dHlsZS4gVGhpcyBpcyB0aGUgbW9zdCBjb21tb25seSB1c2VkIHZhbHVlIGZv
ciB0aGUgcHJvamVjdCdzIHZlcnNpb24KICBzdHJpbmcuIFRoZSBkZWZhdWx0
ICJwZXA0NDAiIHN0eWxlIHlpZWxkcyBzdHJpbmdzIGxpa2UgYDAuMTFgLAog
IGAwLjExKzIuZzEwNzZjOTdgLCBvciBgMC4xMSsyLmcxMDc2Yzk3LmRpcnR5
YC4gU2VlIHRoZSAiU3R5bGVzIiBzZWN0aW9uCiAgYmVsb3cgZm9yIGFsdGVy
bmF0aXZlIHN0eWxlcy4KCiogYFsnZnVsbC1yZXZpc2lvbmlkJ11gOiBkZXRh
aWxlZCByZXZpc2lvbiBpZGVudGlmaWVyLiBGb3IgR2l0LCB0aGlzIGlzIHRo
ZQogIGZ1bGwgU0hBMSBjb21taXQgaWQsIGUuZy4gIjEwNzZjOTc4YThkM2Nm
YzcwZjQwOGZlNTk3NGFhNmMwOTJjOTQ5YWMiLgoKKiBgWydkYXRlJ11gOiBE
YXRlIGFuZCB0aW1lIG9mIHRoZSBsYXRlc3QgYEhFQURgIGNvbW1pdC4gRm9y
IEdpdCwgaXQgaXMgdGhlCiAgY29tbWl0IGRhdGUgaW4gSVNPIDg2MDEgZm9y
bWF0LiBUaGlzIHdpbGwgYmUgTm9uZSBpZiB0aGUgZGF0ZSBpcyBub3QKICBh
dmFpbGFibGUuCgoqIGBbJ2RpcnR5J11gOiBhIGJvb2xlYW4sIFRydWUgaWYg
dGhlIHRyZWUgaGFzIHVuY29tbWl0dGVkIGNoYW5nZXMuIE5vdGUgdGhhdAog
IHRoaXMgaXMgb25seSBhY2N1cmF0ZSBpZiBydW4gaW4gYSBWQ1MgY2hlY2tv
dXQsIG90aGVyd2lzZSBpdCBpcyBsaWtlbHkgdG8KICBiZSBGYWxzZSBvciBO
b25lCgoqIGBbJ2Vycm9yJ11gOiBpZiB0aGUgdmVyc2lvbiBzdHJpbmcgY291
bGQgbm90IGJlIGNvbXB1dGVkLCB0aGlzIHdpbGwgYmUgc2V0CiAgdG8gYSBz
dHJpbmcgZGVzY3JpYmluZyB0aGUgcHJvYmxlbSwgb3RoZXJ3aXNlIGl0IHdp
bGwgYmUgTm9uZS4gSXQgbWF5IGJlCiAgdXNlZnVsIHRvIHRocm93IGFuIGV4
Y2VwdGlvbiBpbiBzZXR1cC5weSBpZiB0aGlzIGlzIHNldCwgdG8gYXZvaWQg
ZS5nLgogIGNyZWF0aW5nIHRhcmJhbGxzIHdpdGggYSB2ZXJzaW9uIHN0cmlu
ZyBvZiAidW5rbm93biIuCgpTb21lIHZhcmlhbnRzIGFyZSBtb3JlIHVzZWZ1
bCB0aGFuIG90aGVycy4gSW5jbHVkaW5nIGBmdWxsLXJldmlzaW9uaWRgIGlu
IGEKYnVnIHJlcG9ydCBzaG91bGQgYWxsb3cgZGV2ZWxvcGVycyB0byByZWNv
bnN0cnVjdCB0aGUgZXhhY3QgY29kZSBiZWluZyB0ZXN0ZWQKKG9yIGluZGlj
YXRlIHRoZSBwcmVzZW5jZSBvZiBsb2NhbCBjaGFuZ2VzIHRoYXQgc2hvdWxk
IGJlIHNoYXJlZCB3aXRoIHRoZQpkZXZlbG9wZXJzKS4gYHZlcnNpb25gIGlz
IHN1aXRhYmxlIGZvciBkaXNwbGF5IGluIGFuICJhYm91dCIgYm94IG9yIGEg
Q0xJCmAtLXZlcnNpb25gIG91dHB1dDogaXQgY2FuIGJlIGVhc2lseSBjb21w
YXJlZCBhZ2FpbnN0IHJlbGVhc2Ugbm90ZXMgYW5kIGxpc3RzCm9mIGJ1Z3Mg
Zml4ZWQgaW4gdmFyaW91cyByZWxlYXNlcy4KClRoZSBpbnN0YWxsZXIgYWRk
cyB0aGUgZm9sbG93aW5nIHRleHQgdG8geW91ciBgX19pbml0X18ucHlgIHRv
IHBsYWNlIGEgYmFzaWMKdmVyc2lvbiBpbiBgWU9VUlBST0pFQ1QuX192ZXJz
aW9uX19gOgoKICAgIGZyb20gLl92ZXJzaW9uIGltcG9ydCBnZXRfdmVyc2lv
bnMKICAgIF9fdmVyc2lvbl9fID0gZ2V0X3ZlcnNpb25zKClbJ3ZlcnNpb24n
XQogICAgZGVsIGdldF92ZXJzaW9ucwoKIyMgU3R5bGVzCgpUaGUgc2V0dXAu
Y2ZnIGBzdHlsZT1gIGNvbmZpZ3VyYXRpb24gY29udHJvbHMgaG93IHRoZSBW
Q1MgaW5mb3JtYXRpb24gaXMKcmVuZGVyZWQgaW50byBhIHZlcnNpb24gc3Ry
aW5nLgoKVGhlIGRlZmF1bHQgc3R5bGUsICJwZXA0NDAiLCBwcm9kdWNlcyBh
IFBFUDQ0MC1jb21wbGlhbnQgc3RyaW5nLCBlcXVhbCB0byB0aGUKdW4tcHJl
Zml4ZWQgdGFnIG5hbWUgZm9yIGFjdHVhbCByZWxlYXNlcywgYW5kIGNvbnRh
aW5pbmcgYW4gYWRkaXRpb25hbCAibG9jYWwKdmVyc2lvbiIgc2VjdGlvbiB3
aXRoIG1vcmUgZGV0YWlsIGZvciBpbi1iZXR3ZWVuIGJ1aWxkcy4gRm9yIEdp
dCwgdGhpcyBpcwpUQUdbK0RJU1RBTkNFLmdIRVhbLmRpcnR5XV0gLCB1c2lu
ZyBpbmZvcm1hdGlvbiBmcm9tIGBnaXQgZGVzY3JpYmUgLS10YWdzCi0tZGly
dHkgLS1hbHdheXNgLiBGb3IgZXhhbXBsZSAiMC4xMSsyLmcxMDc2Yzk3LmRp
cnR5IiBpbmRpY2F0ZXMgdGhhdCB0aGUKdHJlZSBpcyBsaWtlIHRoZSAiMTA3
NmM5NyIgY29tbWl0IGJ1dCBoYXMgdW5jb21taXR0ZWQgY2hhbmdlcyAoIi5k
aXJ0eSIpLCBhbmQKdGhhdCB0aGlzIGNvbW1pdCBpcyB0d28gcmV2aXNpb25z
ICgiKzIiKSBiZXlvbmQgdGhlICIwLjExIiB0YWcuIEZvciByZWxlYXNlZApz
b2Z0d2FyZSAoZXhhY3RseSBlcXVhbCB0byBhIGtub3duIHRhZyksIHRoZSBp
ZGVudGlmaWVyIHdpbGwgb25seSBjb250YWluIHRoZQpzdHJpcHBlZCB0YWcs
IGUuZy4gIjAuMTEiLgoKT3RoZXIgc3R5bGVzIGFyZSBhdmFpbGFibGUuIFNl
ZSBbZGV0YWlscy5tZF0oZGV0YWlscy5tZCkgaW4gdGhlIFZlcnNpb25lZXIK
c291cmNlIHRyZWUgZm9yIGRlc2NyaXB0aW9ucy4KCiMjIERlYnVnZ2luZwoK
VmVyc2lvbmVlciB0cmllcyB0byBhdm9pZCBmYXRhbCBlcnJvcnM6IGlmIHNv
bWV0aGluZyBnb2VzIHdyb25nLCBpdCB3aWxsIHRlbmQKdG8gcmV0dXJuIGEg
dmVyc2lvbiBvZiAiMCt1bmtub3duIi4gVG8gaW52ZXN0aWdhdGUgdGhlIHBy
b2JsZW0sIHJ1biBgc2V0dXAucHkKdmVyc2lvbmAsIHdoaWNoIHdpbGwgcnVu
IHRoZSB2ZXJzaW9uLWxvb2t1cCBjb2RlIGluIGEgdmVyYm9zZSBtb2RlLCBh
bmQgd2lsbApkaXNwbGF5IHRoZSBmdWxsIGNvbnRlbnRzIG9mIGBnZXRfdmVy
c2lvbnMoKWAgKGluY2x1ZGluZyB0aGUgYGVycm9yYCBzdHJpbmcsCndoaWNo
IG1heSBoZWxwIGlkZW50aWZ5IHdoYXQgd2VudCB3cm9uZykuCgojIyBLbm93
biBMaW1pdGF0aW9ucwoKU29tZSBzaXR1YXRpb25zIGFyZSBrbm93biB0byBj
YXVzZSBwcm9ibGVtcyBmb3IgVmVyc2lvbmVlci4gVGhpcyBkZXRhaWxzIHRo
ZQptb3N0IHNpZ25pZmljYW50IG9uZXMuIE1vcmUgY2FuIGJlIGZvdW5kIG9u
IEdpdGh1YgpbaXNzdWVzIHBhZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9weXRo
b24tdmVyc2lvbmVlci9weXRob24tdmVyc2lvbmVlci9pc3N1ZXMpLgoKIyMj
IFN1YnByb2plY3RzCgpWZXJzaW9uZWVyIGhhcyBsaW1pdGVkIHN1cHBvcnQg
Zm9yIHNvdXJjZSB0cmVlcyBpbiB3aGljaCBgc2V0dXAucHlgIGlzIG5vdCBp
bgp0aGUgcm9vdCBkaXJlY3RvcnkgKGUuZy4gYHNldHVwLnB5YCBhbmQgYC5n
aXQvYCBhcmUgKm5vdCogc2libGluZ3MpLiBUaGUgYXJlCnR3byBjb21tb24g
cmVhc29ucyB3aHkgYHNldHVwLnB5YCBtaWdodCBub3QgYmUgaW4gdGhlIHJv
b3Q6CgoqIFNvdXJjZSB0cmVlcyB3aGljaCBjb250YWluIG11bHRpcGxlIHN1
YnByb2plY3RzLCBzdWNoIGFzCiAgW0J1aWxkYm90XShodHRwczovL2dpdGh1
Yi5jb20vYnVpbGRib3QvYnVpbGRib3QpLCB3aGljaCBjb250YWlucyBib3Ro
CiAgIm1hc3RlciIgYW5kICJzbGF2ZSIgc3VicHJvamVjdHMsIGVhY2ggd2l0
aCB0aGVpciBvd24gYHNldHVwLnB5YCwKICBgc2V0dXAuY2ZnYCwgYW5kIGB0
b3guaW5pYC4gUHJvamVjdHMgbGlrZSB0aGVzZSBwcm9kdWNlIG11bHRpcGxl
IFB5UEkKICBkaXN0cmlidXRpb25zIChhbmQgdXBsb2FkIG11bHRpcGxlIGlu
ZGVwZW5kZW50bHktaW5zdGFsbGFibGUgdGFyYmFsbHMpLgoqIFNvdXJjZSB0
cmVlcyB3aG9zZSBtYWluIHB1cnBvc2UgaXMgdG8gY29udGFpbiBhIEMgbGli
cmFyeSwgYnV0IHdoaWNoIGFsc28KICBwcm92aWRlIGJpbmRpbmdzIHRvIFB5
dGhvbiAoYW5kIHBlcmhhcHMgb3RoZXIgbGFuZ3VhZ2VzKSBpbiBzdWJkaXJl
Y3Rvcmllcy4KClZlcnNpb25lZXIgd2lsbCBsb29rIGZvciBgLmdpdGAgaW4g
cGFyZW50IGRpcmVjdG9yaWVzLCBhbmQgbW9zdCBvcGVyYXRpb25zCnNob3Vs
ZCBnZXQgdGhlIHJpZ2h0IHZlcnNpb24gc3RyaW5nLiBIb3dldmVyIGBwaXBg
IGFuZCBgc2V0dXB0b29sc2AgaGF2ZSBidWdzCmFuZCBpbXBsZW1lbnRhdGlv
biBkZXRhaWxzIHdoaWNoIGZyZXF1ZW50bHkgY2F1c2UgYHBpcCBpbnN0YWxs
IC5gIGZyb20gYQpzdWJwcm9qZWN0IGRpcmVjdG9yeSB0byBmYWlsIHRvIGZp
bmQgYSBjb3JyZWN0IHZlcnNpb24gc3RyaW5nIChzbyBpdCB1c3VhbGx5CmRl
ZmF1bHRzIHRvIGAwK3Vua25vd25gKS4KCmBwaXAgaW5zdGFsbCAtLWVkaXRh
YmxlIC5gIHNob3VsZCB3b3JrIGNvcnJlY3RseS4gYHNldHVwLnB5IGluc3Rh
bGxgIG1pZ2h0CndvcmsgdG9vLgoKUGlwLTguMS4xIGlzIGtub3duIHRvIGhh
dmUgdGhpcyBwcm9ibGVtLCBidXQgaG9wZWZ1bGx5IGl0IHdpbGwgZ2V0IGZp
eGVkIGluCnNvbWUgbGF0ZXIgdmVyc2lvbi4KCltCdWcgIzM4XShodHRwczov
L2dpdGh1Yi5jb20vcHl0aG9uLXZlcnNpb25lZXIvcHl0aG9uLXZlcnNpb25l
ZXIvaXNzdWVzLzM4KSBpcyB0cmFja2luZwp0aGlzIGlzc3VlLiBUaGUgZGlz
Y3Vzc2lvbiBpbgpbUFIgIzYxXShodHRwczovL2dpdGh1Yi5jb20vcHl0aG9u
LXZlcnNpb25lZXIvcHl0aG9uLXZlcnNpb25lZXIvcHVsbC82MSkgZGVzY3Jp
YmVzIHRoZQppc3N1ZSBmcm9tIHRoZSBWZXJzaW9uZWVyIHNpZGUgaW4gbW9y
ZSBkZXRhaWwuCltwaXAgUFIjMzE3Nl0oaHR0cHM6Ly9naXRodWIuY29tL3B5
cGEvcGlwL3B1bGwvMzE3NikgYW5kCltwaXAgUFIjMzYxNV0oaHR0cHM6Ly9n
aXRodWIuY29tL3B5cGEvcGlwL3B1bGwvMzYxNSkgY29udGFpbiB3b3JrIHRv
IGltcHJvdmUKcGlwIHRvIGxldCBWZXJzaW9uZWVyIHdvcmsgY29ycmVjdGx5
LgoKVmVyc2lvbmVlci0wLjE2IGFuZCBlYXJsaWVyIG9ubHkgbG9va2VkIGZv
ciBhIGAuZ2l0YCBkaXJlY3RvcnkgbmV4dCB0byB0aGUKYHNldHVwLmNmZ2As
IHNvIHN1YnByb2plY3RzIHdlcmUgY29tcGxldGVseSB1bnN1cHBvcnRlZCB3
aXRoIHRob3NlIHJlbGVhc2VzLgoKIyMjIEVkaXRhYmxlIGluc3RhbGxzIHdp
dGggc2V0dXB0b29scyA8PSAxOC41Cgpgc2V0dXAucHkgZGV2ZWxvcGAgYW5k
IGBwaXAgaW5zdGFsbCAtLWVkaXRhYmxlIC5gIGFsbG93IHlvdSB0byBpbnN0
YWxsIGEKcHJvamVjdCBpbnRvIGEgdmlydHVhbGVudiBvbmNlLCB0aGVuIGNv
bnRpbnVlIGVkaXRpbmcgdGhlIHNvdXJjZSBjb2RlIChhbmQKdGVzdCkgd2l0
aG91dCByZS1pbnN0YWxsaW5nIGFmdGVyIGV2ZXJ5IGNoYW5nZS4KCiJFbnRy
eS1wb2ludCBzY3JpcHRzIiAoYHNldHVwKGVudHJ5X3BvaW50cz17ImNvbnNv
bGVfc2NyaXB0cyI6IC4ufSlgKSBhcmUgYQpjb252ZW5pZW50IHdheSB0byBz
cGVjaWZ5IGV4ZWN1dGFibGUgc2NyaXB0cyB0aGF0IHNob3VsZCBiZSBpbnN0
YWxsZWQgYWxvbmcKd2l0aCB0aGUgcHl0aG9uIHBhY2thZ2UuCgpUaGVzZSBi
b3RoIHdvcmsgYXMgZXhwZWN0ZWQgd2hlbiB1c2luZyBtb2Rlcm4gc2V0dXB0
b29scy4gV2hlbiB1c2luZwpzZXR1cHRvb2xzLTE4LjUgb3IgZWFybGllciwg
aG93ZXZlciwgY2VydGFpbiBvcGVyYXRpb25zIHdpbGwgY2F1c2UKYHBrZ19y
ZXNvdXJjZXMuRGlzdHJpYnV0aW9uTm90Rm91bmRgIGVycm9ycyB3aGVuIHJ1
bm5pbmcgdGhlIGVudHJ5cG9pbnQKc2NyaXB0LCB3aGljaCBtdXN0IGJlIHJl
c29sdmVkIGJ5IHJlLWluc3RhbGxpbmcgdGhlIHBhY2thZ2UuIFRoaXMgaGFw
cGVucwp3aGVuIHRoZSBpbnN0YWxsIGhhcHBlbnMgd2l0aCBvbmUgdmVyc2lv
biwgdGhlbiB0aGUgZWdnX2luZm8gZGF0YSBpcwpyZWdlbmVyYXRlZCB3aGls
ZSBhIGRpZmZlcmVudCB2ZXJzaW9uIGlzIGNoZWNrZWQgb3V0LiBNYW55IHNl
dHVwLnB5IGNvbW1hbmRzCmNhdXNlIGVnZ19pbmZvIHRvIGJlIHJlYnVpbHQg
KGluY2x1ZGluZyBgc2Rpc3RgLCBgd2hlZWxgLCBhbmQgaW5zdGFsbGluZyBp
bnRvCmEgZGlmZmVyZW50IHZpcnR1YWxlbnYpLCBzbyB0aGlzIGNhbiBiZSBz
dXJwcmlzaW5nLgoKW0J1ZyAjODNdKGh0dHBzOi8vZ2l0aHViLmNvbS9weXRo
b24tdmVyc2lvbmVlci9weXRob24tdmVyc2lvbmVlci9pc3N1ZXMvODMpIGRl
c2NyaWJlcwp0aGlzIG9uZSwgYnV0IHVwZ3JhZGluZyB0byBhIG5ld2VyIHZl
cnNpb24gb2Ygc2V0dXB0b29scyBzaG91bGQgcHJvYmFibHkKcmVzb2x2ZSBp
dC4KCgojIyBVcGRhdGluZyBWZXJzaW9uZWVyCgpUbyB1cGdyYWRlIHlvdXIg
cHJvamVjdCB0byBhIG5ldyByZWxlYXNlIG9mIFZlcnNpb25lZXIsIGRvIHRo
ZSBmb2xsb3dpbmc6CgoqIGluc3RhbGwgdGhlIG5ldyBWZXJzaW9uZWVyIChg
cGlwIGluc3RhbGwgLVUgdmVyc2lvbmVlcmAgb3IgZXF1aXZhbGVudCkKKiBl
ZGl0IGBzZXR1cC5jZmdgIGFuZCBgcHlwcm9qZWN0LnRvbWxgLCBpZiBuZWNl
c3NhcnksCiAgdG8gaW5jbHVkZSBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gc2V0
dGluZ3MgaW5kaWNhdGVkIGJ5IHRoZSByZWxlYXNlIG5vdGVzLgogIFNlZSBb
VVBHUkFESU5HXSguL1VQR1JBRElORy5tZCkgZm9yIGRldGFpbHMuCiogcmUt
cnVuIGB2ZXJzaW9uZWVyIGluc3RhbGwgLS1bbm8tXXZlbmRvcmAgaW4geW91
ciBzb3VyY2UgdHJlZSwgdG8gcmVwbGFjZQogIGBTUkMvX3ZlcnNpb24ucHlg
CiogY29tbWl0IGFueSBjaGFuZ2VkIGZpbGVzCgojIyBGdXR1cmUgRGlyZWN0
aW9ucwoKVGhpcyB0b29sIGlzIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzaWx5
IGV4dGVuZGVkIHRvIG90aGVyIHZlcnNpb24tY29udHJvbApzeXN0ZW1zOiBh
bGwgVkNTLXNwZWNpZmljIGNvbXBvbmVudHMgYXJlIGluIHNlcGFyYXRlIGRp
cmVjdG9yaWVzIGxpa2UKc3JjL2dpdC8gLiBUaGUgdG9wLWxldmVsIGB2ZXJz
aW9uZWVyLnB5YCBzY3JpcHQgaXMgYXNzZW1ibGVkIGZyb20gdGhlc2UKY29t
cG9uZW50cyBieSBydW5uaW5nIG1ha2UtdmVyc2lvbmVlci5weSAuIEluIHRo
ZSBmdXR1cmUsIG1ha2UtdmVyc2lvbmVlci5weQp3aWxsIHRha2UgYSBWQ1Mg
bmFtZSBhcyBhbiBhcmd1bWVudCwgYW5kIHdpbGwgY29uc3RydWN0IGEgdmVy
c2lvbiBvZgpgdmVyc2lvbmVlci5weWAgdGhhdCBpcyBzcGVjaWZpYyB0byB0
aGUgZ2l2ZW4gVkNTLiBJdCBtaWdodCBhbHNvIHRha2UgdGhlCmNvbmZpZ3Vy
YXRpb24gYXJndW1lbnRzIHRoYXQgYXJlIGN1cnJlbnRseSBwcm92aWRlZCBt
YW51YWxseSBkdXJpbmcKaW5zdGFsbGF0aW9uIGJ5IGVkaXRpbmcgc2V0dXAu
cHkgLiBBbHRlcm5hdGl2ZWx5LCBpdCBtaWdodCBnbyB0aGUgb3RoZXIKZGly
ZWN0aW9uIGFuZCBpbmNsdWRlIGNvZGUgZnJvbSBhbGwgc3VwcG9ydGVkIFZD
UyBzeXN0ZW1zLCByZWR1Y2luZyB0aGUKbnVtYmVyIG9mIGludGVybWVkaWF0
ZSBzY3JpcHRzLgoKIyMgU2ltaWxhciBwcm9qZWN0cwoKKiBbc2V0dXB0b29s
c19zY21dKGh0dHBzOi8vZ2l0aHViLmNvbS9weXBhL3NldHVwdG9vbHNfc2Nt
LykgLSBhIG5vbi12ZW5kb3JlZCBidWlsZC10aW1lCiAgZGVwZW5kZW5jeQoq
IFttaW52ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9qYndlc3Rvbi9taW5pdmVy
KSAtIGEgbGlnaHR3ZWlnaHQgcmVpbXBsZW1lbnRhdGlvbiBvZgogIHZlcnNp
b25lZXIKKiBbdmVyc2lvbmluZ2l0XShodHRwczovL2dpdGh1Yi5jb20vandv
ZGRlci92ZXJzaW9uaW5naXQpIC0gYSBQRVAgNTE4LWJhc2VkIHNldHVwdG9v
bHMKICBwbHVnaW4KCiMjIExpY2Vuc2UKClRvIG1ha2UgVmVyc2lvbmVlciBl
YXNpZXIgdG8gZW1iZWQsIGFsbCBpdHMgY29kZSBpcyBkZWRpY2F0ZWQgdG8g
dGhlIHB1YmxpYwpkb21haW4uIFRoZSBgX3ZlcnNpb24ucHlgIHRoYXQgaXQg
Y3JlYXRlcyBpcyBhbHNvIGluIHRoZSBwdWJsaWMgZG9tYWluLgpTcGVjaWZp
Y2FsbHksIGJvdGggYXJlIHJlbGVhc2VkIHVuZGVyIHRoZSAiVW5saWNlbnNl
IiwgYXMgZGVzY3JpYmVkIGluCmh0dHBzOi8vdW5saWNlbnNlLm9yZy8uCgpb
cHlwaS1pbWFnZV06IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcHlwaS92L3Zl
cnNpb25lZXIuc3ZnCltweXBpLXVybF06IGh0dHBzOi8vcHlwaS5weXRob24u
b3JnL3B5cGkvdmVyc2lvbmVlci8KW3RyYXZpcy1pbWFnZV06Cmh0dHBzOi8v
aW1nLnNoaWVsZHMuaW8vdHJhdmlzL2NvbS9weXRob24tdmVyc2lvbmVlci9w
eXRob24tdmVyc2lvbmVlci5zdmcKW3RyYXZpcy11cmxdOiBodHRwczovL3Ry
YXZpcy1jaS5jb20vZ2l0aHViL3B5dGhvbi12ZXJzaW9uZWVyL3B5dGhvbi12
ZXJzaW9uZWVyCgoiIiIKIyBweWxpbnQ6ZGlzYWJsZT1pbnZhbGlkLW5hbWUs
aW1wb3J0LW91dHNpZGUtdG9wbGV2ZWwsbWlzc2luZy1mdW5jdGlvbi1kb2Nz
dHJpbmcKIyBweWxpbnQ6ZGlzYWJsZT1taXNzaW5nLWNsYXNzLWRvY3N0cmlu
Zyx0b28tbWFueS1icmFuY2hlcyx0b28tbWFueS1zdGF0ZW1lbnRzCiMgcHls
aW50OmRpc2FibGU9cmFpc2UtbWlzc2luZy1mcm9tLHRvby1tYW55LWxpbmVz
LHRvby1tYW55LWxvY2FscyxpbXBvcnQtZXJyb3IKIyBweWxpbnQ6ZGlzYWJs
ZT10b28tZmV3LXB1YmxpYy1tZXRob2RzLHJlZGVmaW5lZC1vdXRlci1uYW1l
LGNvbnNpZGVyLXVzaW5nLXdpdGgKIyBweWxpbnQ6ZGlzYWJsZT1hdHRyaWJ1
dGUtZGVmaW5lZC1vdXRzaWRlLWluaXQsdG9vLW1hbnktYXJndW1lbnRzCgpp
bXBvcnQgY29uZmlncGFyc2VyCmltcG9ydCBlcnJubwppbXBvcnQganNvbgpp
bXBvcnQgb3MKaW1wb3J0IHJlCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBz
eXMKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gdHlwaW5nIGltcG9y
dCBBbnksIENhbGxhYmxlLCBjYXN0LCBEaWN0LCBMaXN0LCBPcHRpb25hbCwg
VHVwbGUsIFVuaW9uCmZyb20gdHlwaW5nIGltcG9ydCBOb1JldHVybgppbXBv
cnQgZnVuY3Rvb2xzCgpoYXZlX3RvbWxsaWIgPSBUcnVlCmlmIHN5cy52ZXJz
aW9uX2luZm8gPj0gKDMsIDExKToKICAgIGltcG9ydCB0b21sbGliCmVsc2U6
CiAgICB0cnk6CiAgICAgICAgaW1wb3J0IHRvbWxpIGFzIHRvbWxsaWIKICAg
IGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICBoYXZlX3RvbWxsaWIgPSBG
YWxzZQoKCmNsYXNzIFZlcnNpb25lZXJDb25maWc6CiAgICAiIiJDb250YWlu
ZXIgZm9yIFZlcnNpb25lZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiIi
IgoKICAgIFZDUzogc3RyCiAgICBzdHlsZTogc3RyCiAgICB0YWdfcHJlZml4
OiBzdHIKICAgIHZlcnNpb25maWxlX3NvdXJjZTogc3RyCiAgICB2ZXJzaW9u
ZmlsZV9idWlsZDogT3B0aW9uYWxbc3RyXQogICAgcGFyZW50ZGlyX3ByZWZp
eDogT3B0aW9uYWxbc3RyXQogICAgdmVyYm9zZTogT3B0aW9uYWxbYm9vbF0K
CgpkZWYgZ2V0X3Jvb3QoKSAtPiBzdHI6CiAgICAiIiJHZXQgdGhlIHByb2pl
Y3Qgcm9vdCBkaXJlY3RvcnkuCgogICAgV2UgcmVxdWlyZSB0aGF0IGFsbCBj
b21tYW5kcyBhcmUgcnVuIGZyb20gdGhlIHByb2plY3Qgcm9vdCwgaS5lLiB0
aGUKICAgIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHNldHVwLnB5LCBzZXR1
cC5jZmcsIGFuZCB2ZXJzaW9uZWVyLnB5IC4KICAgICIiIgogICAgcm9vdCA9
IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgp
KSkKICAgIHNldHVwX3B5ID0gb3MucGF0aC5qb2luKHJvb3QsICJzZXR1cC5w
eSIpCiAgICBweXByb2plY3RfdG9tbCA9IG9zLnBhdGguam9pbihyb290LCAi
cHlwcm9qZWN0LnRvbWwiKQogICAgdmVyc2lvbmVlcl9weSA9IG9zLnBhdGgu
am9pbihyb290LCAidmVyc2lvbmVlci5weSIpCiAgICBpZiBub3QgKAogICAg
ICAgIG9zLnBhdGguZXhpc3RzKHNldHVwX3B5KQogICAgICAgIG9yIG9zLnBh
dGguZXhpc3RzKHB5cHJvamVjdF90b21sKQogICAgICAgIG9yIG9zLnBhdGgu
ZXhpc3RzKHZlcnNpb25lZXJfcHkpCiAgICApOgogICAgICAgICMgYWxsb3cg
J3B5dGhvbiBwYXRoL3RvL3NldHVwLnB5IENPTU1BTkQnCiAgICAgICAgcm9v
dCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGgu
YWJzcGF0aChzeXMuYXJndlswXSkpKQogICAgICAgIHNldHVwX3B5ID0gb3Mu
cGF0aC5qb2luKHJvb3QsICJzZXR1cC5weSIpCiAgICAgICAgcHlwcm9qZWN0
X3RvbWwgPSBvcy5wYXRoLmpvaW4ocm9vdCwgInB5cHJvamVjdC50b21sIikK
ICAgICAgICB2ZXJzaW9uZWVyX3B5ID0gb3MucGF0aC5qb2luKHJvb3QsICJ2
ZXJzaW9uZWVyLnB5IikKICAgIGlmIG5vdCAoCiAgICAgICAgb3MucGF0aC5l
eGlzdHMoc2V0dXBfcHkpCiAgICAgICAgb3Igb3MucGF0aC5leGlzdHMocHlw
cm9qZWN0X3RvbWwpCiAgICAgICAgb3Igb3MucGF0aC5leGlzdHModmVyc2lv
bmVlcl9weSkKICAgICk6CiAgICAgICAgZXJyID0gKCJWZXJzaW9uZWVyIHdh
cyB1bmFibGUgdG8gcnVuIHRoZSBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5LiAi
CiAgICAgICAgICAgICAgICJWZXJzaW9uZWVyIHJlcXVpcmVzIHNldHVwLnB5
IHRvIGJlIGV4ZWN1dGVkIGZyb20gIgogICAgICAgICAgICAgICAiaXRzIGlt
bWVkaWF0ZSBkaXJlY3RvcnkgKGxpa2UgJ3B5dGhvbiBzZXR1cC5weSBDT01N
QU5EJyksICIKICAgICAgICAgICAgICAgIm9yIGluIGEgd2F5IHRoYXQgbGV0
cyBpdCB1c2Ugc3lzLmFyZ3ZbMF0gdG8gZmluZCB0aGUgcm9vdCAiCiAgICAg
ICAgICAgICAgICIobGlrZSAncHl0aG9uIHBhdGgvdG8vc2V0dXAucHkgQ09N
TUFORCcpLiIpCiAgICAgICAgcmFpc2UgVmVyc2lvbmVlckJhZFJvb3RFcnJv
cihlcnIpCiAgICB0cnk6CiAgICAgICAgIyBDZXJ0YWluIHJ1bnRpbWUgd29y
a2Zsb3dzIChzZXR1cC5weSBpbnN0YWxsL2RldmVsb3AgaW4gYSBzZXR1cHRv
b2xzCiAgICAgICAgIyB0cmVlKSBleGVjdXRlIGFsbCBkZXBlbmRlbmNpZXMg
aW4gYSBzaW5nbGUgcHl0aG9uIHByb2Nlc3MsIHNvCiAgICAgICAgIyAidmVy
c2lvbmVlciIgbWF5IGJlIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzLCBhbmQg
cHl0aG9uJ3Mgc2hhcmVkCiAgICAgICAgIyBtb2R1bGUtaW1wb3J0IHRhYmxl
IHdpbGwgY2FjaGUgdGhlIGZpcnN0IG9uZS4gU28gd2UgY2FuJ3QgdXNlCiAg
ICAgICAgIyBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBhcyB0aGF0IHdp
bGwgZmluZCB3aGljaGV2ZXIKICAgICAgICAjIHZlcnNpb25lZXIucHkgd2Fz
IGZpcnN0IGltcG9ydGVkLCBldmVuIGluIGxhdGVyIHByb2plY3RzLgogICAg
ICAgIG15X3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguYWJzcGF0
aChfX2ZpbGVfXykpCiAgICAgICAgbWVfZGlyID0gb3MucGF0aC5ub3JtY2Fz
ZShvcy5wYXRoLnNwbGl0ZXh0KG15X3BhdGgpWzBdKQogICAgICAgIHZzcl9k
aXIgPSBvcy5wYXRoLm5vcm1jYXNlKG9zLnBhdGguc3BsaXRleHQodmVyc2lv
bmVlcl9weSlbMF0pCiAgICAgICAgaWYgbWVfZGlyICE9IHZzcl9kaXIgYW5k
ICJWRVJTSU9ORUVSX1BFUDUxOCIgbm90IGluIGdsb2JhbHMoKToKICAgICAg
ICAgICAgcHJpbnQoIldhcm5pbmc6IGJ1aWxkIGluICVzIGlzIHVzaW5nIHZl
cnNpb25lZXIucHkgZnJvbSAlcyIKICAgICAgICAgICAgICAgICAgJSAob3Mu
cGF0aC5kaXJuYW1lKG15X3BhdGgpLCB2ZXJzaW9uZWVyX3B5KSkKICAgIGV4
Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgcGFzcwogICAgcmV0dXJuIHJvb3QK
CgpkZWYgZ2V0X2NvbmZpZ19mcm9tX3Jvb3Qocm9vdDogc3RyKSAtPiBWZXJz
aW9uZWVyQ29uZmlnOgogICAgIiIiUmVhZCB0aGUgcHJvamVjdCBzZXR1cC5j
ZmcgZmlsZSB0byBkZXRlcm1pbmUgVmVyc2lvbmVlciBjb25maWcuIiIiCiAg
ICAjIFRoaXMgbWlnaHQgcmFpc2UgT1NFcnJvciAoaWYgc2V0dXAuY2ZnIGlz
IG1pc3NpbmcpLCBvcgogICAgIyBjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJy
b3IgKGlmIGl0IGxhY2tzIGEgW3ZlcnNpb25lZXJdIHNlY3Rpb24pLCBvcgog
ICAgIyBjb25maWdwYXJzZXIuTm9PcHRpb25FcnJvciAoaWYgaXQgbGFja3Mg
IlZDUz0iKS4gU2VlIHRoZSBkb2NzdHJpbmcgYXQKICAgICMgdGhlIHRvcCBv
ZiB2ZXJzaW9uZWVyLnB5IGZvciBpbnN0cnVjdGlvbnMgb24gd3JpdGluZyB5
b3VyIHNldHVwLmNmZyAuCiAgICByb290X3B0aCA9IFBhdGgocm9vdCkKICAg
IHB5cHJvamVjdF90b21sID0gcm9vdF9wdGggLyAicHlwcm9qZWN0LnRvbWwi
CiAgICBzZXR1cF9jZmcgPSByb290X3B0aCAvICJzZXR1cC5jZmciCiAgICBz
ZWN0aW9uOiBVbmlvbltEaWN0W3N0ciwgQW55XSwgY29uZmlncGFyc2VyLlNl
Y3Rpb25Qcm94eSwgTm9uZV0gPSBOb25lCiAgICBpZiBweXByb2plY3RfdG9t
bC5leGlzdHMoKSBhbmQgaGF2ZV90b21sbGliOgogICAgICAgIHRyeToKICAg
ICAgICAgICAgd2l0aCBvcGVuKHB5cHJvamVjdF90b21sLCAncmInKSBhcyBm
b2JqOgogICAgICAgICAgICAgICAgcHAgPSB0b21sbGliLmxvYWQoZm9iaikK
ICAgICAgICAgICAgc2VjdGlvbiA9IHBwWyd0b29sJ11bJ3ZlcnNpb25lZXIn
XQogICAgICAgIGV4Y2VwdCAodG9tbGxpYi5UT01MRGVjb2RlRXJyb3IsIEtl
eUVycm9yKSBhcyBlOgogICAgICAgICAgICBwcmludChmIkZhaWxlZCB0byBs
b2FkIGNvbmZpZyBmcm9tIHtweXByb2plY3RfdG9tbH06IHtlfSIpCiAgICAg
ICAgICAgIHByaW50KCJUcnkgdG8gbG9hZCBpdCBmcm9tIHNldHVwLmNmZyIp
CiAgICBpZiBub3Qgc2VjdGlvbjoKICAgICAgICBwYXJzZXIgPSBjb25maWdw
YXJzZXIuQ29uZmlnUGFyc2VyKCkKICAgICAgICB3aXRoIG9wZW4oc2V0dXBf
Y2ZnKSBhcyBjZmdfZmlsZToKICAgICAgICAgICAgcGFyc2VyLnJlYWRfZmls
ZShjZmdfZmlsZSkKICAgICAgICBwYXJzZXIuZ2V0KCJ2ZXJzaW9uZWVyIiwg
IlZDUyIpICAjIHJhaXNlIGVycm9yIGlmIG1pc3NpbmcKCiAgICAgICAgc2Vj
dGlvbiA9IHBhcnNlclsidmVyc2lvbmVlciJdCgogICAgIyBgY2FzdGBgIHJl
YWxseSBzaG91bGRuJ3QgYmUgdXNlZCwgYnV0IGl0cyBzaW1wbGVzdCBmb3Ig
dGhlCiAgICAjIGNvbW1vbiBWZXJzaW9uZWVyQ29uZmlnIHVzZXJzIGF0IHRo
ZSBtb21lbnQuIFdlIHZlcmlmeSBhZ2FpbnN0CiAgICAjIGBOb25lYCB2YWx1
ZXMgZWxzZXdoZXJlIHdoZXJlIGl0IG1hdHRlcnMKCiAgICBjZmcgPSBWZXJz
aW9uZWVyQ29uZmlnKCkKICAgIGNmZy5WQ1MgPSBzZWN0aW9uWydWQ1MnXQog
ICAgY2ZnLnN0eWxlID0gc2VjdGlvbi5nZXQoInN0eWxlIiwgIiIpCiAgICBj
ZmcudmVyc2lvbmZpbGVfc291cmNlID0gY2FzdChzdHIsIHNlY3Rpb24uZ2V0
KCJ2ZXJzaW9uZmlsZV9zb3VyY2UiKSkKICAgIGNmZy52ZXJzaW9uZmlsZV9i
dWlsZCA9IHNlY3Rpb24uZ2V0KCJ2ZXJzaW9uZmlsZV9idWlsZCIpCiAgICBj
ZmcudGFnX3ByZWZpeCA9IGNhc3Qoc3RyLCBzZWN0aW9uLmdldCgidGFnX3By
ZWZpeCIpKQogICAgaWYgY2ZnLnRhZ19wcmVmaXggaW4gKCInJyIsICciIics
IE5vbmUpOgogICAgICAgIGNmZy50YWdfcHJlZml4ID0gIiIKICAgIGNmZy5w
YXJlbnRkaXJfcHJlZml4ID0gc2VjdGlvbi5nZXQoInBhcmVudGRpcl9wcmVm
aXgiKQogICAgaWYgaXNpbnN0YW5jZShzZWN0aW9uLCBjb25maWdwYXJzZXIu
U2VjdGlvblByb3h5KToKICAgICAgICAjIE1ha2Ugc3VyZSBjb25maWdwYXJz
ZXIgdHJhbnNsYXRlcyB0byBib29sCiAgICAgICAgY2ZnLnZlcmJvc2UgPSBz
ZWN0aW9uLmdldGJvb2xlYW4oInZlcmJvc2UiKQogICAgZWxzZToKICAgICAg
ICBjZmcudmVyYm9zZSA9IHNlY3Rpb24uZ2V0KCJ2ZXJib3NlIikKCiAgICBy
ZXR1cm4gY2ZnCgoKY2xhc3MgTm90VGhpc01ldGhvZChFeGNlcHRpb24pOgog
ICAgIiIiRXhjZXB0aW9uIHJhaXNlZCBpZiBhIG1ldGhvZCBpcyBub3QgdmFs
aWQgZm9yIHRoZSBjdXJyZW50IHNjZW5hcmlvLiIiIgoKCiMgdGhlc2UgZGlj
dGlvbmFyaWVzIGNvbnRhaW4gVkNTLXNwZWNpZmljIHRvb2xzCkxPTkdfVkVS
U0lPTl9QWTogRGljdFtzdHIsIHN0cl0gPSB7fQpIQU5ETEVSUzogRGljdFtz
dHIsIERpY3Rbc3RyLCBDYWxsYWJsZV1dID0ge30KCgpkZWYgcmVnaXN0ZXJf
dmNzX2hhbmRsZXIodmNzOiBzdHIsIG1ldGhvZDogc3RyKSAtPiBDYWxsYWJs
ZTogICMgZGVjb3JhdG9yCiAgICAiIiJDcmVhdGUgZGVjb3JhdG9yIHRvIG1h
cmsgYSBtZXRob2QgYXMgdGhlIGhhbmRsZXIgb2YgYSBWQ1MuIiIiCiAgICBk
ZWYgZGVjb3JhdGUoZjogQ2FsbGFibGUpIC0+IENhbGxhYmxlOgogICAgICAg
ICIiIlN0b3JlIGYgaW4gSEFORExFUlNbdmNzXVttZXRob2RdLiIiIgogICAg
ICAgIEhBTkRMRVJTLnNldGRlZmF1bHQodmNzLCB7fSlbbWV0aG9kXSA9IGYK
ICAgICAgICByZXR1cm4gZgogICAgcmV0dXJuIGRlY29yYXRlCgoKZGVmIHJ1
bl9jb21tYW5kKAogICAgY29tbWFuZHM6IExpc3Rbc3RyXSwKICAgIGFyZ3M6
IExpc3Rbc3RyXSwKICAgIGN3ZDogT3B0aW9uYWxbc3RyXSA9IE5vbmUsCiAg
ICB2ZXJib3NlOiBib29sID0gRmFsc2UsCiAgICBoaWRlX3N0ZGVycjogYm9v
bCA9IEZhbHNlLAogICAgZW52OiBPcHRpb25hbFtEaWN0W3N0ciwgc3RyXV0g
PSBOb25lLAopIC0+IFR1cGxlW09wdGlvbmFsW3N0cl0sIE9wdGlvbmFsW2lu
dF1dOgogICAgIiIiQ2FsbCB0aGUgZ2l2ZW4gY29tbWFuZChzKS4iIiIKICAg
IGFzc2VydCBpc2luc3RhbmNlKGNvbW1hbmRzLCBsaXN0KQogICAgcHJvY2Vz
cyA9IE5vbmUKCiAgICBwb3Blbl9rd2FyZ3M6IERpY3Rbc3RyLCBBbnldID0g
e30KICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgogICAgICAgICMg
VGhpcyBoaWRlcyB0aGUgY29uc29sZSB3aW5kb3cgaWYgcHl0aG9udy5leGUg
aXMgdXNlZAogICAgICAgIHN0YXJ0dXBpbmZvID0gc3VicHJvY2Vzcy5TVEFS
VFVQSU5GTygpCiAgICAgICAgc3RhcnR1cGluZm8uZHdGbGFncyB8PSBzdWJw
cm9jZXNzLlNUQVJURl9VU0VTSE9XV0lORE9XCiAgICAgICAgcG9wZW5fa3dh
cmdzWyJzdGFydHVwaW5mbyJdID0gc3RhcnR1cGluZm8KCiAgICBmb3IgY29t
bWFuZCBpbiBjb21tYW5kczoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRp
c3BjbWQgPSBzdHIoW2NvbW1hbmRdICsgYXJncykKICAgICAgICAgICAgIyBy
ZW1lbWJlciBzaGVsbD1GYWxzZSwgc28gdXNlIGdpdC5jbWQgb24gd2luZG93
cywgbm90IGp1c3QgZ2l0CiAgICAgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9j
ZXNzLlBvcGVuKFtjb21tYW5kXSArIGFyZ3MsIGN3ZD1jd2QsIGVudj1lbnYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91
dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZGVycj0oc3VicHJvY2Vzcy5QSVBFIGlmIGhpZGVf
c3RkZXJyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBOb25lKSwgKipwb3Blbl9rd2FyZ3MpCiAgICAgICAg
ICAgIGJyZWFrCiAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAg
ICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAg
ICAgICBjb250aW51ZQogICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAg
ICAgICAgICAgcHJpbnQoInVuYWJsZSB0byBydW4gJXMiICUgZGlzcGNtZCkK
ICAgICAgICAgICAgICAgIHByaW50KGUpCiAgICAgICAgICAgIHJldHVybiBO
b25lLCBOb25lCiAgICBlbHNlOgogICAgICAgIGlmIHZlcmJvc2U6CiAgICAg
ICAgICAgIHByaW50KCJ1bmFibGUgdG8gZmluZCBjb21tYW5kLCB0cmllZCAl
cyIgJSAoY29tbWFuZHMsKSkKICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQog
ICAgc3Rkb3V0ID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCku
ZGVjb2RlKCkKICAgIGlmIHByb2Nlc3MucmV0dXJuY29kZSAhPSAwOgogICAg
ICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJ1bmFibGUgdG8g
cnVuICVzIChlcnJvcikiICUgZGlzcGNtZCkKICAgICAgICAgICAgcHJpbnQo
InN0ZG91dCB3YXMgJXMiICUgc3Rkb3V0KQogICAgICAgIHJldHVybiBOb25l
LCBwcm9jZXNzLnJldHVybmNvZGUKICAgIHJldHVybiBzdGRvdXQsIHByb2Nl
c3MucmV0dXJuY29kZQoKCkxPTkdfVkVSU0lPTl9QWVsnZ2l0J10gPSByJycn
CiMgVGhpcyBmaWxlIGhlbHBzIHRvIGNvbXB1dGUgYSB2ZXJzaW9uIG51bWJl
ciBpbiBzb3VyY2UgdHJlZXMgb2J0YWluZWQgZnJvbQojIGdpdC1hcmNoaXZl
IHRhcmJhbGwgKHN1Y2ggYXMgdGhvc2UgcHJvdmlkZWQgYnkgZ2l0aHVicyBk
b3dubG9hZC1mcm9tLXRhZwojIGZlYXR1cmUpLiBEaXN0cmlidXRpb24gdGFy
YmFsbHMgKGJ1aWx0IGJ5IHNldHVwLnB5IHNkaXN0KSBhbmQgYnVpbGQKIyBk
aXJlY3RvcmllcyAocHJvZHVjZWQgYnkgc2V0dXAucHkgYnVpbGQpIHdpbGwg
Y29udGFpbiBhIG11Y2ggc2hvcnRlciBmaWxlCiMgdGhhdCBqdXN0IGNvbnRh
aW5zIHRoZSBjb21wdXRlZCB2ZXJzaW9uIG51bWJlci4KCiMgVGhpcyBmaWxl
IGlzIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uCiMgR2VuZXJh
dGVkIGJ5IHZlcnNpb25lZXItMC4yOQojIGh0dHBzOi8vZ2l0aHViLmNvbS9w
eXRob24tdmVyc2lvbmVlci9weXRob24tdmVyc2lvbmVlcgoKIiIiR2l0IGlt
cGxlbWVudGF0aW9uIG9mIF92ZXJzaW9uLnB5LiIiIgoKaW1wb3J0IGVycm5v
CmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0
IHN5cwpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBDYWxsYWJsZSwgRGljdCwg
TGlzdCwgT3B0aW9uYWwsIFR1cGxlCmltcG9ydCBmdW5jdG9vbHMKCgpkZWYg
Z2V0X2tleXdvcmRzKCkgLT4gRGljdFtzdHIsIHN0cl06CiAgICAiIiJHZXQg
dGhlIGtleXdvcmRzIG5lZWRlZCB0byBsb29rIHVwIHRoZSB2ZXJzaW9uIGlu
Zm9ybWF0aW9uLiIiIgogICAgIyB0aGVzZSBzdHJpbmdzIHdpbGwgYmUgcmVw
bGFjZWQgYnkgZ2l0IGR1cmluZyBnaXQtYXJjaGl2ZS4KICAgICMgc2V0dXAu
cHkvdmVyc2lvbmVlci5weSB3aWxsIGdyZXAgZm9yIHRoZSB2YXJpYWJsZSBu
YW1lcywgc28gdGhleSBtdXN0CiAgICAjIGVhY2ggYmUgZGVmaW5lZCBvbiBh
IGxpbmUgb2YgdGhlaXIgb3duLiBfdmVyc2lvbi5weSB3aWxsIGp1c3QgY2Fs
bAogICAgIyBnZXRfa2V5d29yZHMoKS4KICAgIGdpdF9yZWZuYW1lcyA9ICIl
KERPTExBUilzRm9ybWF0OiUlZCUoRE9MTEFSKXMiCiAgICBnaXRfZnVsbCA9
ICIlKERPTExBUilzRm9ybWF0OiUlSCUoRE9MTEFSKXMiCiAgICBnaXRfZGF0
ZSA9ICIlKERPTExBUilzRm9ybWF0OiUlY2klKERPTExBUilzIgogICAga2V5
d29yZHMgPSB7InJlZm5hbWVzIjogZ2l0X3JlZm5hbWVzLCAiZnVsbCI6IGdp
dF9mdWxsLCAiZGF0ZSI6IGdpdF9kYXRlfQogICAgcmV0dXJuIGtleXdvcmRz
CgoKY2xhc3MgVmVyc2lvbmVlckNvbmZpZzoKICAgICIiIkNvbnRhaW5lciBm
b3IgVmVyc2lvbmVlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIiIiCgog
ICAgVkNTOiBzdHIKICAgIHN0eWxlOiBzdHIKICAgIHRhZ19wcmVmaXg6IHN0
cgogICAgcGFyZW50ZGlyX3ByZWZpeDogc3RyCiAgICB2ZXJzaW9uZmlsZV9z
b3VyY2U6IHN0cgogICAgdmVyYm9zZTogYm9vbAoKCmRlZiBnZXRfY29uZmln
KCkgLT4gVmVyc2lvbmVlckNvbmZpZzoKICAgICIiIkNyZWF0ZSwgcG9wdWxh
dGUgYW5kIHJldHVybiB0aGUgVmVyc2lvbmVlckNvbmZpZygpIG9iamVjdC4i
IiIKICAgICMgdGhlc2Ugc3RyaW5ncyBhcmUgZmlsbGVkIGluIHdoZW4gJ3Nl
dHVwLnB5IHZlcnNpb25lZXInIGNyZWF0ZXMKICAgICMgX3ZlcnNpb24ucHkK
ICAgIGNmZyA9IFZlcnNpb25lZXJDb25maWcoKQogICAgY2ZnLlZDUyA9ICJn
aXQiCiAgICBjZmcuc3R5bGUgPSAiJShTVFlMRSlzIgogICAgY2ZnLnRhZ19w
cmVmaXggPSAiJShUQUdfUFJFRklYKXMiCiAgICBjZmcucGFyZW50ZGlyX3By
ZWZpeCA9ICIlKFBBUkVOVERJUl9QUkVGSVgpcyIKICAgIGNmZy52ZXJzaW9u
ZmlsZV9zb3VyY2UgPSAiJShWRVJTSU9ORklMRV9TT1VSQ0UpcyIKICAgIGNm
Zy52ZXJib3NlID0gRmFsc2UKICAgIHJldHVybiBjZmcKCgpjbGFzcyBOb3RU
aGlzTWV0aG9kKEV4Y2VwdGlvbik6CiAgICAiIiJFeGNlcHRpb24gcmFpc2Vk
IGlmIGEgbWV0aG9kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgc2Nl
bmFyaW8uIiIiCgoKTE9OR19WRVJTSU9OX1BZOiBEaWN0W3N0ciwgc3RyXSA9
IHt9CkhBTkRMRVJTOiBEaWN0W3N0ciwgRGljdFtzdHIsIENhbGxhYmxlXV0g
PSB7fQoKCmRlZiByZWdpc3Rlcl92Y3NfaGFuZGxlcih2Y3M6IHN0ciwgbWV0
aG9kOiBzdHIpIC0+IENhbGxhYmxlOiAgIyBkZWNvcmF0b3IKICAgICIiIkNy
ZWF0ZSBkZWNvcmF0b3IgdG8gbWFyayBhIG1ldGhvZCBhcyB0aGUgaGFuZGxl
ciBvZiBhIFZDUy4iIiIKICAgIGRlZiBkZWNvcmF0ZShmOiBDYWxsYWJsZSkg
LT4gQ2FsbGFibGU6CiAgICAgICAgIiIiU3RvcmUgZiBpbiBIQU5ETEVSU1t2
Y3NdW21ldGhvZF0uIiIiCiAgICAgICAgaWYgdmNzIG5vdCBpbiBIQU5ETEVS
UzoKICAgICAgICAgICAgSEFORExFUlNbdmNzXSA9IHt9CiAgICAgICAgSEFO
RExFUlNbdmNzXVttZXRob2RdID0gZgogICAgICAgIHJldHVybiBmCiAgICBy
ZXR1cm4gZGVjb3JhdGUKCgpkZWYgcnVuX2NvbW1hbmQoCiAgICBjb21tYW5k
czogTGlzdFtzdHJdLAogICAgYXJnczogTGlzdFtzdHJdLAogICAgY3dkOiBP
cHRpb25hbFtzdHJdID0gTm9uZSwKICAgIHZlcmJvc2U6IGJvb2wgPSBGYWxz
ZSwKICAgIGhpZGVfc3RkZXJyOiBib29sID0gRmFsc2UsCiAgICBlbnY6IE9w
dGlvbmFsW0RpY3Rbc3RyLCBzdHJdXSA9IE5vbmUsCikgLT4gVHVwbGVbT3B0
aW9uYWxbc3RyXSwgT3B0aW9uYWxbaW50XV06CiAgICAiIiJDYWxsIHRoZSBn
aXZlbiBjb21tYW5kKHMpLiIiIgogICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29t
bWFuZHMsIGxpc3QpCiAgICBwcm9jZXNzID0gTm9uZQoKICAgIHBvcGVuX2t3
YXJnczogRGljdFtzdHIsIEFueV0gPSB7fQogICAgaWYgc3lzLnBsYXRmb3Jt
ID09ICJ3aW4zMiI6CiAgICAgICAgIyBUaGlzIGhpZGVzIHRoZSBjb25zb2xl
IHdpbmRvdyBpZiBweXRob253LmV4ZSBpcyB1c2VkCiAgICAgICAgc3RhcnR1
cGluZm8gPSBzdWJwcm9jZXNzLlNUQVJUVVBJTkZPKCkKICAgICAgICBzdGFy
dHVwaW5mby5kd0ZsYWdzIHw9IHN1YnByb2Nlc3MuU1RBUlRGX1VTRVNIT1dX
SU5ET1cKICAgICAgICBwb3Blbl9rd2FyZ3NbInN0YXJ0dXBpbmZvIl0gPSBz
dGFydHVwaW5mbwoKICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAg
ICAgIHRyeToKICAgICAgICAgICAgZGlzcGNtZCA9IHN0cihbY29tbWFuZF0g
KyBhcmdzKQogICAgICAgICAgICAjIHJlbWVtYmVyIHNoZWxsPUZhbHNlLCBz
byB1c2UgZ2l0LmNtZCBvbiB3aW5kb3dzLCBub3QganVzdCBnaXQKICAgICAg
ICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW2NvbW1hbmRdICsg
YXJncywgY3dkPWN3ZCwgZW52PWVudiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPShz
dWJwcm9jZXNzLlBJUEUgaWYgaGlkZV9zdGRlcnIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIE5vbmUpLCAq
KnBvcGVuX2t3YXJncykKICAgICAgICAgICAgYnJlYWsKICAgICAgICBleGNl
cHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICBpZiBlLmVycm5vID09IGVy
cm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAg
ICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludCgidW5hYmxl
IHRvIHJ1biAlJXMiICUlIGRpc3BjbWQpCiAgICAgICAgICAgICAgICBwcmlu
dChlKQogICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogICAgZWxzZToK
ICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICBwcmludCgidW5hYmxl
IHRvIGZpbmQgY29tbWFuZCwgdHJpZWQgJSVzIiAlJSAoY29tbWFuZHMsKSkK
ICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogICAgc3Rkb3V0ID0gcHJvY2Vz
cy5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkuZGVjb2RlKCkKICAgIGlmIHBy
b2Nlc3MucmV0dXJuY29kZSAhPSAwOgogICAgICAgIGlmIHZlcmJvc2U6CiAg
ICAgICAgICAgIHByaW50KCJ1bmFibGUgdG8gcnVuICUlcyAoZXJyb3IpIiAl
JSBkaXNwY21kKQogICAgICAgICAgICBwcmludCgic3Rkb3V0IHdhcyAlJXMi
ICUlIHN0ZG91dCkKICAgICAgICByZXR1cm4gTm9uZSwgcHJvY2Vzcy5yZXR1
cm5jb2RlCiAgICByZXR1cm4gc3Rkb3V0LCBwcm9jZXNzLnJldHVybmNvZGUK
CgpkZWYgdmVyc2lvbnNfZnJvbV9wYXJlbnRkaXIoCiAgICBwYXJlbnRkaXJf
cHJlZml4OiBzdHIsCiAgICByb290OiBzdHIsCiAgICB2ZXJib3NlOiBib29s
LAopIC0+IERpY3Rbc3RyLCBBbnldOgogICAgIiIiVHJ5IHRvIGRldGVybWlu
ZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG5hbWUu
CgogICAgU291cmNlIHRhcmJhbGxzIGNvbnZlbnRpb25hbGx5IHVucGFjayBp
bnRvIGEgZGlyZWN0b3J5IHRoYXQgaW5jbHVkZXMgYm90aAogICAgdGhlIHBy
b2plY3QgbmFtZSBhbmQgYSB2ZXJzaW9uIHN0cmluZy4gV2Ugd2lsbCBhbHNv
IHN1cHBvcnQgc2VhcmNoaW5nIHVwCiAgICB0d28gZGlyZWN0b3J5IGxldmVs
cyBmb3IgYW4gYXBwcm9wcmlhdGVseSBuYW1lZCBwYXJlbnQgZGlyZWN0b3J5
CiAgICAiIiIKICAgIHJvb3RkaXJzID0gW10KCiAgICBmb3IgXyBpbiByYW5n
ZSgzKToKICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5iYXNlbmFtZShyb290
KQogICAgICAgIGlmIGRpcm5hbWUuc3RhcnRzd2l0aChwYXJlbnRkaXJfcHJl
Zml4KToKICAgICAgICAgICAgcmV0dXJuIHsidmVyc2lvbiI6IGRpcm5hbWVb
bGVuKHBhcmVudGRpcl9wcmVmaXgpOl0sCiAgICAgICAgICAgICAgICAgICAg
ImZ1bGwtcmV2aXNpb25pZCI6IE5vbmUsCiAgICAgICAgICAgICAgICAgICAg
ImRpcnR5IjogRmFsc2UsICJlcnJvciI6IE5vbmUsICJkYXRlIjogTm9uZX0K
ICAgICAgICByb290ZGlycy5hcHBlbmQocm9vdCkKICAgICAgICByb290ID0g
b3MucGF0aC5kaXJuYW1lKHJvb3QpICAjIHVwIGEgbGV2ZWwKCiAgICBpZiB2
ZXJib3NlOgogICAgICAgIHByaW50KCJUcmllZCBkaXJlY3RvcmllcyAlJXMg
YnV0IG5vbmUgc3RhcnRlZCB3aXRoIHByZWZpeCAlJXMiICUlCiAgICAgICAg
ICAgICAgKHN0cihyb290ZGlycyksIHBhcmVudGRpcl9wcmVmaXgpKQogICAg
cmFpc2UgTm90VGhpc01ldGhvZCgicm9vdGRpciBkb2Vzbid0IHN0YXJ0IHdp
dGggcGFyZW50ZGlyX3ByZWZpeCIpCgoKQHJlZ2lzdGVyX3Zjc19oYW5kbGVy
KCJnaXQiLCAiZ2V0X2tleXdvcmRzIikKZGVmIGdpdF9nZXRfa2V5d29yZHMo
dmVyc2lvbmZpbGVfYWJzOiBzdHIpIC0+IERpY3Rbc3RyLCBzdHJdOgogICAg
IiIiRXh0cmFjdCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVu
IGZpbGUuIiIiCiAgICAjIHRoZSBjb2RlIGVtYmVkZGVkIGluIF92ZXJzaW9u
LnB5IGNhbiBqdXN0IGZldGNoIHRoZSB2YWx1ZSBvZiB0aGVzZQogICAgIyBr
ZXl3b3Jkcy4gV2hlbiB1c2VkIGZyb20gc2V0dXAucHksIHdlIGRvbid0IHdh
bnQgdG8gaW1wb3J0IF92ZXJzaW9uLnB5LAogICAgIyBzbyB3ZSBkbyBpdCB3
aXRoIGEgcmVnZXhwIGluc3RlYWQuIFRoaXMgZnVuY3Rpb24gaXMgbm90IHVz
ZWQgZnJvbQogICAgIyBfdmVyc2lvbi5weS4KICAgIGtleXdvcmRzOiBEaWN0
W3N0ciwgc3RyXSA9IHt9CiAgICB0cnk6CiAgICAgICAgd2l0aCBvcGVuKHZl
cnNpb25maWxlX2FicywgInIiKSBhcyBmb2JqOgogICAgICAgICAgICBmb3Ig
bGluZSBpbiBmb2JqOgogICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgp
LnN0YXJ0c3dpdGgoImdpdF9yZWZuYW1lcyA9Iik6CiAgICAgICAgICAgICAg
ICAgICAgbW8gPSByZS5zZWFyY2gocic9XHMqIiguKikiJywgbGluZSkKICAg
ICAgICAgICAgICAgICAgICBpZiBtbzoKICAgICAgICAgICAgICAgICAgICAg
ICAga2V5d29yZHNbInJlZm5hbWVzIl0gPSBtby5ncm91cCgxKQogICAgICAg
ICAgICAgICAgaWYgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoImdpdF9mdWxs
ID0iKToKICAgICAgICAgICAgICAgICAgICBtbyA9IHJlLnNlYXJjaChyJz1c
cyoiKC4qKSInLCBsaW5lKQogICAgICAgICAgICAgICAgICAgIGlmIG1vOgog
ICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkc1siZnVsbCJdID0gbW8u
Z3JvdXAoMSkKICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKS5zdGFy
dHN3aXRoKCJnaXRfZGF0ZSA9Iik6CiAgICAgICAgICAgICAgICAgICAgbW8g
PSByZS5zZWFyY2gocic9XHMqIiguKikiJywgbGluZSkKICAgICAgICAgICAg
ICAgICAgICBpZiBtbzoKICAgICAgICAgICAgICAgICAgICAgICAga2V5d29y
ZHNbImRhdGUiXSA9IG1vLmdyb3VwKDEpCiAgICBleGNlcHQgT1NFcnJvcjoK
ICAgICAgICBwYXNzCiAgICByZXR1cm4ga2V5d29yZHMKCgpAcmVnaXN0ZXJf
dmNzX2hhbmRsZXIoImdpdCIsICJrZXl3b3JkcyIpCmRlZiBnaXRfdmVyc2lv
bnNfZnJvbV9rZXl3b3JkcygKICAgIGtleXdvcmRzOiBEaWN0W3N0ciwgc3Ry
XSwKICAgIHRhZ19wcmVmaXg6IHN0ciwKICAgIHZlcmJvc2U6IGJvb2wsCikg
LT4gRGljdFtzdHIsIEFueV06CiAgICAiIiJHZXQgdmVyc2lvbiBpbmZvcm1h
dGlvbiBmcm9tIGdpdCBrZXl3b3Jkcy4iIiIKICAgIGlmICJyZWZuYW1lcyIg
bm90IGluIGtleXdvcmRzOgogICAgICAgIHJhaXNlIE5vdFRoaXNNZXRob2Qo
IlNob3J0IHZlcnNpb24gZmlsZSBmb3VuZCIpCiAgICBkYXRlID0ga2V5d29y
ZHMuZ2V0KCJkYXRlIikKICAgIGlmIGRhdGUgaXMgbm90IE5vbmU6CiAgICAg
ICAgIyBVc2Ugb25seSB0aGUgbGFzdCBsaW5lLiAgUHJldmlvdXMgbGluZXMg
bWF5IGNvbnRhaW4gR1BHIHNpZ25hdHVyZQogICAgICAgICMgaW5mb3JtYXRp
b24uCiAgICAgICAgZGF0ZSA9IGRhdGUuc3BsaXRsaW5lcygpWy0xXQoKICAg
ICAgICAjIGdpdC0yLjIuMCBhZGRlZCAiJSVjSSIsIHdoaWNoIGV4cGFuZHMg
dG8gYW4gSVNPLTg2MDEgLWNvbXBsaWFudAogICAgICAgICMgZGF0ZXN0YW1w
LiBIb3dldmVyIHdlIHByZWZlciAiJSVjaSIgKHdoaWNoIGV4cGFuZHMgdG8g
YW4gIklTTy04NjAxCiAgICAgICAgIyAtbGlrZSIgc3RyaW5nLCB3aGljaCB3
ZSBtdXN0IHRoZW4gZWRpdCB0byBtYWtlIGNvbXBsaWFudCksIGJlY2F1c2UK
ICAgICAgICAjIGl0J3MgYmVlbiBhcm91bmQgc2luY2UgZ2l0LTEuNS4zLCBh
bmQgaXQncyB0b28gZGlmZmljdWx0IHRvCiAgICAgICAgIyBkaXNjb3ZlciB3
aGljaCB2ZXJzaW9uIHdlJ3JlIHVzaW5nLCBvciB0byB3b3JrIGFyb3VuZCB1
c2luZyBhbgogICAgICAgICMgb2xkZXIgb25lLgogICAgICAgIGRhdGUgPSBk
YXRlLnN0cmlwKCkucmVwbGFjZSgiICIsICJUIiwgMSkucmVwbGFjZSgiICIs
ICIiLCAxKQogICAgcmVmbmFtZXMgPSBrZXl3b3Jkc1sicmVmbmFtZXMiXS5z
dHJpcCgpCiAgICBpZiByZWZuYW1lcy5zdGFydHN3aXRoKCIkRm9ybWF0Iik6
CiAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoImtleXdv
cmRzIGFyZSB1bmV4cGFuZGVkLCBub3QgdXNpbmciKQogICAgICAgIHJhaXNl
IE5vdFRoaXNNZXRob2QoInVuZXhwYW5kZWQga2V5d29yZHMsIG5vdCBhIGdp
dC1hcmNoaXZlIHRhcmJhbGwiKQogICAgcmVmcyA9IHtyLnN0cmlwKCkgZm9y
IHIgaW4gcmVmbmFtZXMuc3RyaXAoIigpIikuc3BsaXQoIiwiKX0KICAgICMg
c3RhcnRpbmcgaW4gZ2l0LTEuOC4zLCB0YWdzIGFyZSBsaXN0ZWQgYXMgInRh
ZzogZm9vLTEuMCIgaW5zdGVhZCBvZgogICAgIyBqdXN0ICJmb28tMS4wIi4g
SWYgd2Ugc2VlIGEgInRhZzogIiBwcmVmaXgsIHByZWZlciB0aG9zZS4KICAg
IFRBRyA9ICJ0YWc6ICIKICAgIHRhZ3MgPSB7cltsZW4oVEFHKTpdIGZvciBy
IGluIHJlZnMgaWYgci5zdGFydHN3aXRoKFRBRyl9CiAgICBpZiBub3QgdGFn
czoKICAgICAgICAjIEVpdGhlciB3ZSdyZSB1c2luZyBnaXQgPCAxLjguMywg
b3IgdGhlcmUgcmVhbGx5IGFyZSBubyB0YWdzLiBXZSB1c2UKICAgICAgICAj
IGEgaGV1cmlzdGljOiBhc3N1bWUgYWxsIHZlcnNpb24gdGFncyBoYXZlIGEg
ZGlnaXQuIFRoZSBvbGQgZ2l0ICUlZAogICAgICAgICMgZXhwYW5zaW9uIGJl
aGF2ZXMgbGlrZSBnaXQgbG9nIC0tZGVjb3JhdGU9c2hvcnQgYW5kIHN0cmlw
cyBvdXQgdGhlCiAgICAgICAgIyByZWZzL2hlYWRzLyBhbmQgcmVmcy90YWdz
LyBwcmVmaXhlcyB0aGF0IHdvdWxkIGxldCB1cyBkaXN0aW5ndWlzaAogICAg
ICAgICMgYmV0d2VlbiBicmFuY2hlcyBhbmQgdGFncy4gQnkgaWdub3Jpbmcg
cmVmbmFtZXMgd2l0aG91dCBkaWdpdHMsIHdlCiAgICAgICAgIyBmaWx0ZXIg
b3V0IG1hbnkgY29tbW9uIGJyYW5jaCBuYW1lcyBsaWtlICJyZWxlYXNlIiBh
bmQKICAgICAgICAjICJzdGFiaWxpemF0aW9uIiwgYXMgd2VsbCBhcyAiSEVB
RCIgYW5kICJtYXN0ZXIiLgogICAgICAgIHRhZ3MgPSB7ciBmb3IgciBpbiBy
ZWZzIGlmIHJlLnNlYXJjaChyJ1xkJywgcil9CiAgICAgICAgaWYgdmVyYm9z
ZToKICAgICAgICAgICAgcHJpbnQoImRpc2NhcmRpbmcgJyUlcycsIG5vIGRp
Z2l0cyIgJSUgIiwiLmpvaW4ocmVmcyAtIHRhZ3MpKQogICAgaWYgdmVyYm9z
ZToKICAgICAgICBwcmludCgibGlrZWx5IHRhZ3M6ICUlcyIgJSUgIiwiLmpv
aW4oc29ydGVkKHRhZ3MpKSkKICAgIGZvciByZWYgaW4gc29ydGVkKHRhZ3Mp
OgogICAgICAgICMgc29ydGluZyB3aWxsIHByZWZlciBlLmcuICIyLjAiIG92
ZXIgIjIuMHJjMSIKICAgICAgICBpZiByZWYuc3RhcnRzd2l0aCh0YWdfcHJl
Zml4KToKICAgICAgICAgICAgciA9IHJlZltsZW4odGFnX3ByZWZpeCk6XQog
ICAgICAgICAgICAjIEZpbHRlciBvdXQgcmVmcyB0aGF0IGV4YWN0bHkgbWF0
Y2ggcHJlZml4IG9yIHRoYXQgZG9uJ3Qgc3RhcnQKICAgICAgICAgICAgIyB3
aXRoIGEgbnVtYmVyIG9uY2UgdGhlIHByZWZpeCBpcyBzdHJpcHBlZCAobW9z
dGx5IGEgY29uY2VybgogICAgICAgICAgICAjIHdoZW4gcHJlZml4IGlzICcn
KQogICAgICAgICAgICBpZiBub3QgcmUubWF0Y2gocidcZCcsIHIpOgogICAg
ICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgdmVyYm9zZToK
ICAgICAgICAgICAgICAgIHByaW50KCJwaWNraW5nICUlcyIgJSUgcikKICAg
ICAgICAgICAgcmV0dXJuIHsidmVyc2lvbiI6IHIsCiAgICAgICAgICAgICAg
ICAgICAgImZ1bGwtcmV2aXNpb25pZCI6IGtleXdvcmRzWyJmdWxsIl0uc3Ry
aXAoKSwKICAgICAgICAgICAgICAgICAgICAiZGlydHkiOiBGYWxzZSwgImVy
cm9yIjogTm9uZSwKICAgICAgICAgICAgICAgICAgICAiZGF0ZSI6IGRhdGV9
CiAgICAjIG5vIHN1aXRhYmxlIHRhZ3MsIHNvIHZlcnNpb24gaXMgIjArdW5r
bm93biIsIGJ1dCBmdWxsIGhleCBpcyBzdGlsbCB0aGVyZQogICAgaWYgdmVy
Ym9zZToKICAgICAgICBwcmludCgibm8gc3VpdGFibGUgdGFncywgdXNpbmcg
dW5rbm93biArIGZ1bGwgcmV2aXNpb24gaWQiKQogICAgcmV0dXJuIHsidmVy
c2lvbiI6ICIwK3Vua25vd24iLAogICAgICAgICAgICAiZnVsbC1yZXZpc2lv
bmlkIjoga2V5d29yZHNbImZ1bGwiXS5zdHJpcCgpLAogICAgICAgICAgICAi
ZGlydHkiOiBGYWxzZSwgImVycm9yIjogIm5vIHN1aXRhYmxlIHRhZ3MiLCAi
ZGF0ZSI6IE5vbmV9CgoKQHJlZ2lzdGVyX3Zjc19oYW5kbGVyKCJnaXQiLCAi
cGllY2VzX2Zyb21fdmNzIikKZGVmIGdpdF9waWVjZXNfZnJvbV92Y3MoCiAg
ICB0YWdfcHJlZml4OiBzdHIsCiAgICByb290OiBzdHIsCiAgICB2ZXJib3Nl
OiBib29sLAogICAgcnVubmVyOiBDYWxsYWJsZSA9IHJ1bl9jb21tYW5kCikg
LT4gRGljdFtzdHIsIEFueV06CiAgICAiIiJHZXQgdmVyc2lvbiBmcm9tICdn
aXQgZGVzY3JpYmUnIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
CiAgICBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgaWYgdGhlIGdpdC1hcmNoaXZl
ICdzdWJzdCcga2V5d29yZHMgd2VyZSAqbm90KgogICAgZXhwYW5kZWQsIGFu
ZCBfdmVyc2lvbi5weSBoYXNuJ3QgYWxyZWFkeSBiZWVuIHJld3JpdHRlbiB3
aXRoIGEgc2hvcnQKICAgIHZlcnNpb24gc3RyaW5nLCBtZWFuaW5nIHdlJ3Jl
IGluc2lkZSBhIGNoZWNrZWQgb3V0IHNvdXJjZSB0cmVlLgogICAgIiIiCiAg
ICBHSVRTID0gWyJnaXQiXQogICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4z
MiI6CiAgICAgICAgR0lUUyA9IFsiZ2l0LmNtZCIsICJnaXQuZXhlIl0KCiAg
ICAjIEdJVF9ESVIgY2FuIGludGVyZmVyZSB3aXRoIGNvcnJlY3Qgb3BlcmF0
aW9uIG9mIFZlcnNpb25lZXIuCiAgICAjIEl0IG1heSBiZSBpbnRlbmRlZCB0
byBiZSBwYXNzZWQgdG8gdGhlIFZlcnNpb25lZXItdmVyc2lvbmVkIHByb2pl
Y3QsCiAgICAjIGJ1dCB0aGF0IHNob3VsZCBub3QgY2hhbmdlIHdoZXJlIHdl
IGdldCBvdXIgdmVyc2lvbiBmcm9tLgogICAgZW52ID0gb3MuZW52aXJvbi5j
b3B5KCkKICAgIGVudi5wb3AoIkdJVF9ESVIiLCBOb25lKQogICAgcnVubmVy
ID0gZnVuY3Rvb2xzLnBhcnRpYWwocnVubmVyLCBlbnY9ZW52KQoKICAgIF8s
IHJjID0gcnVubmVyKEdJVFMsIFsicmV2LXBhcnNlIiwgIi0tZ2l0LWRpciJd
LCBjd2Q9cm9vdCwKICAgICAgICAgICAgICAgICAgIGhpZGVfc3RkZXJyPW5v
dCB2ZXJib3NlKQogICAgaWYgcmMgIT0gMDoKICAgICAgICBpZiB2ZXJib3Nl
OgogICAgICAgICAgICBwcmludCgiRGlyZWN0b3J5ICUlcyBub3QgdW5kZXIg
Z2l0IGNvbnRyb2wiICUlIHJvb3QpCiAgICAgICAgcmFpc2UgTm90VGhpc01l
dGhvZCgiJ2dpdCByZXYtcGFyc2UgLS1naXQtZGlyJyByZXR1cm5lZCBlcnJv
ciIpCgogICAgIyBpZiB0aGVyZSBpcyBhIHRhZyBtYXRjaGluZyB0YWdfcHJl
Zml4LCB0aGlzIHlpZWxkcyBUQUctTlVNLWdIRVhbLWRpcnR5XQogICAgIyBp
ZiB0aGVyZSBpc24ndCBvbmUsIHRoaXMgeWllbGRzIEhFWFstZGlydHldIChu
byBOVU0pCiAgICBkZXNjcmliZV9vdXQsIHJjID0gcnVubmVyKEdJVFMsIFsK
ICAgICAgICAiZGVzY3JpYmUiLCAiLS10YWdzIiwgIi0tZGlydHkiLCAiLS1h
bHdheXMiLCAiLS1sb25nIiwKICAgICAgICAiLS1tYXRjaCIsIGYie3RhZ19w
cmVmaXh9W1s6ZGlnaXQ6XV0qIgogICAgXSwgY3dkPXJvb3QpCiAgICAjIC0t
bG9uZyB3YXMgYWRkZWQgaW4gZ2l0LTEuNS41CiAgICBpZiBkZXNjcmliZV9v
dXQgaXMgTm9uZToKICAgICAgICByYWlzZSBOb3RUaGlzTWV0aG9kKCInZ2l0
IGRlc2NyaWJlJyBmYWlsZWQiKQogICAgZGVzY3JpYmVfb3V0ID0gZGVzY3Jp
YmVfb3V0LnN0cmlwKCkKICAgIGZ1bGxfb3V0LCByYyA9IHJ1bm5lcihHSVRT
LCBbInJldi1wYXJzZSIsICJIRUFEIl0sIGN3ZD1yb290KQogICAgaWYgZnVs
bF9vdXQgaXMgTm9uZToKICAgICAgICByYWlzZSBOb3RUaGlzTWV0aG9kKCIn
Z2l0IHJldi1wYXJzZScgZmFpbGVkIikKICAgIGZ1bGxfb3V0ID0gZnVsbF9v
dXQuc3RyaXAoKQoKICAgIHBpZWNlczogRGljdFtzdHIsIEFueV0gPSB7fQog
ICAgcGllY2VzWyJsb25nIl0gPSBmdWxsX291dAogICAgcGllY2VzWyJzaG9y
dCJdID0gZnVsbF9vdXRbOjddICAjIG1heWJlIGltcHJvdmVkIGxhdGVyCiAg
ICBwaWVjZXNbImVycm9yIl0gPSBOb25lCgogICAgYnJhbmNoX25hbWUsIHJj
ID0gcnVubmVyKEdJVFMsIFsicmV2LXBhcnNlIiwgIi0tYWJicmV2LXJlZiIs
ICJIRUFEIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXJv
b3QpCiAgICAjIC0tYWJicmV2LXJlZiB3YXMgYWRkZWQgaW4gZ2l0LTEuNi4z
CiAgICBpZiByYyAhPSAwIG9yIGJyYW5jaF9uYW1lIGlzIE5vbmU6CiAgICAg
ICAgcmFpc2UgTm90VGhpc01ldGhvZCgiJ2dpdCByZXYtcGFyc2UgLS1hYmJy
ZXYtcmVmJyByZXR1cm5lZCBlcnJvciIpCiAgICBicmFuY2hfbmFtZSA9IGJy
YW5jaF9uYW1lLnN0cmlwKCkKCiAgICBpZiBicmFuY2hfbmFtZSA9PSAiSEVB
RCI6CiAgICAgICAgIyBJZiB3ZSBhcmVuJ3QgZXhhY3RseSBvbiBhIGJyYW5j
aCwgcGljayBhIGJyYW5jaCB3aGljaCByZXByZXNlbnRzCiAgICAgICAgIyB0
aGUgY3VycmVudCBjb21taXQuIElmIGFsbCBlbHNlIGZhaWxzLCB3ZSBhcmUg
b24gYSBicmFuY2hsZXNzCiAgICAgICAgIyBjb21taXQuCiAgICAgICAgYnJh
bmNoZXMsIHJjID0gcnVubmVyKEdJVFMsIFsiYnJhbmNoIiwgIi0tY29udGFp
bnMiXSwgY3dkPXJvb3QpCiAgICAgICAgIyAtLWNvbnRhaW5zIHdhcyBhZGRl
ZCBpbiBnaXQtMS41LjQKICAgICAgICBpZiByYyAhPSAwIG9yIGJyYW5jaGVz
IGlzIE5vbmU6CiAgICAgICAgICAgIHJhaXNlIE5vdFRoaXNNZXRob2QoIidn
aXQgYnJhbmNoIC0tY29udGFpbnMnIHJldHVybmVkIGVycm9yIikKICAgICAg
ICBicmFuY2hlcyA9IGJyYW5jaGVzLnNwbGl0KCJcbiIpCgogICAgICAgICMg
UmVtb3ZlIHRoZSBmaXJzdCBsaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgZGV0YWNo
ZWQKICAgICAgICBpZiAiKCIgaW4gYnJhbmNoZXNbMF06CiAgICAgICAgICAg
IGJyYW5jaGVzLnBvcCgwKQoKICAgICAgICAjIFN0cmlwIG9mZiB0aGUgbGVh
ZGluZyAiKiAiIGZyb20gdGhlIGxpc3Qgb2YgYnJhbmNoZXMuCiAgICAgICAg
YnJhbmNoZXMgPSBbYnJhbmNoWzI6XSBmb3IgYnJhbmNoIGluIGJyYW5jaGVz
XQogICAgICAgIGlmICJtYXN0ZXIiIGluIGJyYW5jaGVzOgogICAgICAgICAg
ICBicmFuY2hfbmFtZSA9ICJtYXN0ZXIiCiAgICAgICAgZWxpZiBub3QgYnJh
bmNoZXM6CiAgICAgICAgICAgIGJyYW5jaF9uYW1lID0gTm9uZQogICAgICAg
IGVsc2U6CiAgICAgICAgICAgICMgUGljayB0aGUgZmlyc3QgYnJhbmNoIHRo
YXQgaXMgcmV0dXJuZWQuIEdvb2Qgb3IgYmFkLgogICAgICAgICAgICBicmFu
Y2hfbmFtZSA9IGJyYW5jaGVzWzBdCgogICAgcGllY2VzWyJicmFuY2giXSA9
IGJyYW5jaF9uYW1lCgogICAgIyBwYXJzZSBkZXNjcmliZV9vdXQuIEl0IHdp
bGwgYmUgbGlrZSBUQUctTlVNLWdIRVhbLWRpcnR5XSBvciBIRVhbLWRpcnR5
XQogICAgIyBUQUcgbWlnaHQgaGF2ZSBoeXBoZW5zLgogICAgZ2l0X2Rlc2Ny
aWJlID0gZGVzY3JpYmVfb3V0CgogICAgIyBsb29rIGZvciAtZGlydHkgc3Vm
Zml4CiAgICBkaXJ0eSA9IGdpdF9kZXNjcmliZS5lbmRzd2l0aCgiLWRpcnR5
IikKICAgIHBpZWNlc1siZGlydHkiXSA9IGRpcnR5CiAgICBpZiBkaXJ0eToK
ICAgICAgICBnaXRfZGVzY3JpYmUgPSBnaXRfZGVzY3JpYmVbOmdpdF9kZXNj
cmliZS5yaW5kZXgoIi1kaXJ0eSIpXQoKICAgICMgbm93IHdlIGhhdmUgVEFH
LU5VTS1nSEVYIG9yIEhFWAoKICAgIGlmICItIiBpbiBnaXRfZGVzY3JpYmU6
CiAgICAgICAgIyBUQUctTlVNLWdIRVgKICAgICAgICBtbyA9IHJlLnNlYXJj
aChyJ14oLispLShcZCspLWcoWzAtOWEtZl0rKSQnLCBnaXRfZGVzY3JpYmUp
CiAgICAgICAgaWYgbm90IG1vOgogICAgICAgICAgICAjIHVucGFyc2FibGUu
IE1heWJlIGdpdC1kZXNjcmliZSBpcyBtaXNiZWhhdmluZz8KICAgICAgICAg
ICAgcGllY2VzWyJlcnJvciJdID0gKCJ1bmFibGUgdG8gcGFyc2UgZ2l0LWRl
c2NyaWJlIG91dHB1dDogJyUlcyciCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAlJSBkZXNjcmliZV9vdXQpCiAgICAgICAgICAgIHJldHVybiBw
aWVjZXMKCiAgICAgICAgIyB0YWcKICAgICAgICBmdWxsX3RhZyA9IG1vLmdy
b3VwKDEpCiAgICAgICAgaWYgbm90IGZ1bGxfdGFnLnN0YXJ0c3dpdGgodGFn
X3ByZWZpeCk6CiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAg
ICAgICBmbXQgPSAidGFnICclJXMnIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwcmVm
aXggJyUlcyciCiAgICAgICAgICAgICAgICBwcmludChmbXQgJSUgKGZ1bGxf
dGFnLCB0YWdfcHJlZml4KSkKICAgICAgICAgICAgcGllY2VzWyJlcnJvciJd
ID0gKCJ0YWcgJyUlcycgZG9lc24ndCBzdGFydCB3aXRoIHByZWZpeCAnJSVz
JyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIChmdWxsX3Rh
ZywgdGFnX3ByZWZpeCkpCiAgICAgICAgICAgIHJldHVybiBwaWVjZXMKICAg
ICAgICBwaWVjZXNbImNsb3Nlc3QtdGFnIl0gPSBmdWxsX3RhZ1tsZW4odGFn
X3ByZWZpeCk6XQoKICAgICAgICAjIGRpc3RhbmNlOiBudW1iZXIgb2YgY29t
bWl0cyBzaW5jZSB0YWcKICAgICAgICBwaWVjZXNbImRpc3RhbmNlIl0gPSBp
bnQobW8uZ3JvdXAoMikpCgogICAgICAgICMgY29tbWl0OiBzaG9ydCBoZXgg
cmV2aXNpb24gSUQKICAgICAgICBwaWVjZXNbInNob3J0Il0gPSBtby5ncm91
cCgzKQoKICAgIGVsc2U6CiAgICAgICAgIyBIRVg6IG5vIHRhZ3MKICAgICAg
ICBwaWVjZXNbImNsb3Nlc3QtdGFnIl0gPSBOb25lCiAgICAgICAgb3V0LCBy
YyA9IHJ1bm5lcihHSVRTLCBbInJldi1saXN0IiwgIkhFQUQiLCAiLS1sZWZ0
LXJpZ2h0Il0sIGN3ZD1yb290KQogICAgICAgIHBpZWNlc1siZGlzdGFuY2Ui
XSA9IGxlbihvdXQuc3BsaXQoKSkgICMgdG90YWwgbnVtYmVyIG9mIGNvbW1p
dHMKCiAgICAjIGNvbW1pdCBkYXRlOiBzZWUgSVNPLTg2MDEgY29tbWVudCBp
biBnaXRfdmVyc2lvbnNfZnJvbV9rZXl3b3JkcygpCiAgICBkYXRlID0gcnVu
bmVyKEdJVFMsIFsic2hvdyIsICItcyIsICItLWZvcm1hdD0lJWNpIiwgIkhF
QUQiXSwgY3dkPXJvb3QpWzBdLnN0cmlwKCkKICAgICMgVXNlIG9ubHkgdGhl
IGxhc3QgbGluZS4gIFByZXZpb3VzIGxpbmVzIG1heSBjb250YWluIEdQRyBz
aWduYXR1cmUKICAgICMgaW5mb3JtYXRpb24uCiAgICBkYXRlID0gZGF0ZS5z
cGxpdGxpbmVzKClbLTFdCiAgICBwaWVjZXNbImRhdGUiXSA9IGRhdGUuc3Ry
aXAoKS5yZXBsYWNlKCIgIiwgIlQiLCAxKS5yZXBsYWNlKCIgIiwgIiIsIDEp
CgogICAgcmV0dXJuIHBpZWNlcwoKCmRlZiBwbHVzX29yX2RvdChwaWVjZXM6
IERpY3Rbc3RyLCBBbnldKSAtPiBzdHI6CiAgICAiIiJSZXR1cm4gYSArIGlm
IHdlIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUsIGVsc2UgcmV0dXJuIGEgLiIi
IgogICAgaWYgIisiIGluIHBpZWNlcy5nZXQoImNsb3Nlc3QtdGFnIiwgIiIp
OgogICAgICAgIHJldHVybiAiLiIKICAgIHJldHVybiAiKyIKCgpkZWYgcmVu
ZGVyX3BlcDQ0MChwaWVjZXM6IERpY3Rbc3RyLCBBbnldKSAtPiBzdHI6CiAg
ICAiIiJCdWlsZCB1cCB2ZXJzaW9uIHN0cmluZywgd2l0aCBwb3N0LXJlbGVh
c2UgImxvY2FsIHZlcnNpb24gaWRlbnRpZmllciIuCgogICAgT3VyIGdvYWw6
IFRBR1srRElTVEFOQ0UuZ0hFWFsuZGlydHldXSAuIE5vdGUgdGhhdCBpZiB5
b3UKICAgIGdldCBhIHRhZ2dlZCBidWlsZCBhbmQgdGhlbiBkaXJ0eSBpdCwg
eW91J2xsIGdldCBUQUcrMC5nSEVYLmRpcnR5CgogICAgRXhjZXB0aW9uczoK
ICAgIDE6IG5vIHRhZ3MuIGdpdF9kZXNjcmliZSB3YXMganVzdCBIRVguIDAr
dW50YWdnZWQuRElTVEFOQ0UuZ0hFWFsuZGlydHldCiAgICAiIiIKICAgIGlm
IHBpZWNlc1siY2xvc2VzdC10YWciXToKICAgICAgICByZW5kZXJlZCA9IHBp
ZWNlc1siY2xvc2VzdC10YWciXQogICAgICAgIGlmIHBpZWNlc1siZGlzdGFu
Y2UiXSBvciBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgICAgIHJlbmRlcmVk
ICs9IHBsdXNfb3JfZG90KHBpZWNlcykKICAgICAgICAgICAgcmVuZGVyZWQg
Kz0gIiUlZC5nJSVzIiAlJSAocGllY2VzWyJkaXN0YW5jZSJdLCBwaWVjZXNb
InNob3J0Il0pCiAgICAgICAgICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAg
ICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAgICBlbHNlOgog
ICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSAiMCt1
bnRhZ2dlZC4lJWQuZyUlcyIgJSUgKHBpZWNlc1siZGlzdGFuY2UiXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGllY2Vz
WyJzaG9ydCJdKQogICAgICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAgICAg
ICAgICAgcmVuZGVyZWQgKz0gIi5kaXJ0eSIKICAgIHJldHVybiByZW5kZXJl
ZAoKCmRlZiByZW5kZXJfcGVwNDQwX2JyYW5jaChwaWVjZXM6IERpY3Rbc3Ry
LCBBbnldKSAtPiBzdHI6CiAgICAiIiJUQUdbWy5kZXYwXStESVNUQU5DRS5n
SEVYWy5kaXJ0eV1dIC4KCiAgICBUaGUgIi5kZXYwIiBtZWFucyBub3QgbWFz
dGVyIGJyYW5jaC4gTm90ZSB0aGF0IC5kZXYwIHNvcnRzIGJhY2t3YXJkcwog
ICAgKGEgZmVhdHVyZSBicmFuY2ggd2lsbCBhcHBlYXIgIm9sZGVyIiB0aGFu
IHRoZSBtYXN0ZXIgYnJhbmNoKS4KCiAgICBFeGNlcHRpb25zOgogICAgMTog
bm8gdGFncy4gMFsuZGV2MF0rdW50YWdnZWQuRElTVEFOQ0UuZ0hFWFsuZGly
dHldCiAgICAiIiIKICAgIGlmIHBpZWNlc1siY2xvc2VzdC10YWciXToKICAg
ICAgICByZW5kZXJlZCA9IHBpZWNlc1siY2xvc2VzdC10YWciXQogICAgICAg
IGlmIHBpZWNlc1siZGlzdGFuY2UiXSBvciBwaWVjZXNbImRpcnR5Il06CiAg
ICAgICAgICAgIGlmIHBpZWNlc1siYnJhbmNoIl0gIT0gIm1hc3RlciI6CiAg
ICAgICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAgICAg
IHJlbmRlcmVkICs9IHBsdXNfb3JfZG90KHBpZWNlcykKICAgICAgICAgICAg
cmVuZGVyZWQgKz0gIiUlZC5nJSVzIiAlJSAocGllY2VzWyJkaXN0YW5jZSJd
LCBwaWVjZXNbInNob3J0Il0pCiAgICAgICAgICAgIGlmIHBpZWNlc1siZGly
dHkiXToKICAgICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAg
ICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVy
ZWQgPSAiMCIKICAgICAgICBpZiBwaWVjZXNbImJyYW5jaCJdICE9ICJtYXN0
ZXIiOgogICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAg
cmVuZGVyZWQgKz0gIit1bnRhZ2dlZC4lJWQuZyUlcyIgJSUgKHBpZWNlc1si
ZGlzdGFuY2UiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGllY2VzWyJzaG9ydCJdKQogICAgICAgIGlmIHBpZWNlc1si
ZGlydHkiXToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5kaXJ0eSIKICAg
IHJldHVybiByZW5kZXJlZAoKCmRlZiBwZXA0NDBfc3BsaXRfcG9zdCh2ZXI6
IHN0cikgLT4gVHVwbGVbc3RyLCBPcHRpb25hbFtpbnRdXToKICAgICIiIlNw
bGl0IHBlcDQ0MCB2ZXJzaW9uIHN0cmluZyBhdCB0aGUgcG9zdC1yZWxlYXNl
IHNlZ21lbnQuCgogICAgUmV0dXJucyB0aGUgcmVsZWFzZSBzZWdtZW50cyBi
ZWZvcmUgdGhlIHBvc3QtcmVsZWFzZSBhbmQgdGhlCiAgICBwb3N0LXJlbGVh
c2UgdmVyc2lvbiBudW1iZXIgKG9yIC0xIGlmIG5vIHBvc3QtcmVsZWFzZSBz
ZWdtZW50IGlzIHByZXNlbnQpLgogICAgIiIiCiAgICB2YyA9IHN0ci5zcGxp
dCh2ZXIsICIucG9zdCIpCiAgICByZXR1cm4gdmNbMF0sIGludCh2Y1sxXSBv
ciAwKSBpZiBsZW4odmMpID09IDIgZWxzZSBOb25lCgoKZGVmIHJlbmRlcl9w
ZXA0NDBfcHJlKHBpZWNlczogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoKICAg
ICIiIlRBR1sucG9zdE4uZGV2RElTVEFOQ0VdIC0tIE5vIC1kaXJ0eS4KCiAg
ICBFeGNlcHRpb25zOgogICAgMTogbm8gdGFncy4gMC5wb3N0MC5kZXZESVNU
QU5DRQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06CiAg
ICAgICAgaWYgcGllY2VzWyJkaXN0YW5jZSJdOgogICAgICAgICAgICAjIHVw
ZGF0ZSB0aGUgcG9zdCByZWxlYXNlIHNlZ21lbnQKICAgICAgICAgICAgdGFn
X3ZlcnNpb24sIHBvc3RfdmVyc2lvbiA9IHBlcDQ0MF9zcGxpdF9wb3N0KHBp
ZWNlc1siY2xvc2VzdC10YWciXSkKICAgICAgICAgICAgcmVuZGVyZWQgPSB0
YWdfdmVyc2lvbgogICAgICAgICAgICBpZiBwb3N0X3ZlcnNpb24gaXMgbm90
IE5vbmU6CiAgICAgICAgICAgICAgICByZW5kZXJlZCArPSAiLnBvc3QlJWQu
ZGV2JSVkIiAlJSAocG9zdF92ZXJzaW9uICsgMSwgcGllY2VzWyJkaXN0YW5j
ZSJdKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmVuZGVy
ZWQgKz0gIi5wb3N0MC5kZXYlJWQiICUlIChwaWVjZXNbImRpc3RhbmNlIl0p
CiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBubyBjb21taXRzLCB1c2Ug
dGhlIHRhZyBhcyB0aGUgdmVyc2lvbgogICAgICAgICAgICByZW5kZXJlZCA9
IHBpZWNlc1siY2xvc2VzdC10YWciXQogICAgZWxzZToKICAgICAgICAjIGV4
Y2VwdGlvbiAjMQogICAgICAgIHJlbmRlcmVkID0gIjAucG9zdDAuZGV2JSVk
IiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAgIHJldHVybiByZW5kZXJlZAoK
CmRlZiByZW5kZXJfcGVwNDQwX3Bvc3QocGllY2VzOiBEaWN0W3N0ciwgQW55
XSkgLT4gc3RyOgogICAgIiIiVEFHWy5wb3N0RElTVEFOQ0VbLmRldjBdK2dI
RVhdIC4KCiAgICBUaGUgIi5kZXYwIiBtZWFucyBkaXJ0eS4gTm90ZSB0aGF0
IC5kZXYwIHNvcnRzIGJhY2t3YXJkcwogICAgKGEgZGlydHkgdHJlZSB3aWxs
IGFwcGVhciAib2xkZXIiIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgY2xlYW4g
b25lKSwKICAgIGJ1dCB5b3Ugc2hvdWxkbid0IGJlIHJlbGVhc2luZyBzb2Z0
d2FyZSB3aXRoIC1kaXJ0eSBhbnl3YXlzLgoKICAgIEV4Y2VwdGlvbnM6CiAg
ICAxOiBubyB0YWdzLiAwLnBvc3RESVNUQU5DRVsuZGV2MF0KICAgICIiIgog
ICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJdOgogICAgICAgIHJlbmRlcmVk
ID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAgICAgICAgaWYgcGllY2VzWyJk
aXN0YW5jZSJdIG9yIHBpZWNlc1siZGlydHkiXToKICAgICAgICAgICAgcmVu
ZGVyZWQgKz0gIi5wb3N0JSVkIiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAg
ICAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICAgICAg
cmVuZGVyZWQgKz0gIi5kZXYwIgogICAgICAgICAgICByZW5kZXJlZCArPSBw
bHVzX29yX2RvdChwaWVjZXMpCiAgICAgICAgICAgIHJlbmRlcmVkICs9ICJn
JSVzIiAlJSBwaWVjZXNbInNob3J0Il0KICAgIGVsc2U6CiAgICAgICAgIyBl
eGNlcHRpb24gIzEKICAgICAgICByZW5kZXJlZCA9ICIwLnBvc3QlJWQiICUl
IHBpZWNlc1siZGlzdGFuY2UiXQogICAgICAgIGlmIHBpZWNlc1siZGlydHki
XToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5kZXYwIgogICAgICAgIHJl
bmRlcmVkICs9ICIrZyUlcyIgJSUgcGllY2VzWyJzaG9ydCJdCiAgICByZXR1
cm4gcmVuZGVyZWQKCgpkZWYgcmVuZGVyX3BlcDQ0MF9wb3N0X2JyYW5jaChw
aWVjZXM6IERpY3Rbc3RyLCBBbnldKSAtPiBzdHI6CiAgICAiIiJUQUdbLnBv
c3RESVNUQU5DRVsuZGV2MF0rZ0hFWFsuZGlydHldXSAuCgogICAgVGhlICIu
ZGV2MCIgbWVhbnMgbm90IG1hc3RlciBicmFuY2guCgogICAgRXhjZXB0aW9u
czoKICAgIDE6IG5vIHRhZ3MuIDAucG9zdERJU1RBTkNFWy5kZXYwXStnSEVY
Wy5kaXJ0eV0KICAgICIiIgogICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJd
OgogICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAg
ICAgICAgaWYgcGllY2VzWyJkaXN0YW5jZSJdIG9yIHBpZWNlc1siZGlydHki
XToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5wb3N0JSVkIiAlJSBwaWVj
ZXNbImRpc3RhbmNlIl0KICAgICAgICAgICAgaWYgcGllY2VzWyJicmFuY2gi
XSAhPSAibWFzdGVyIjoKICAgICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIu
ZGV2MCIKICAgICAgICAgICAgcmVuZGVyZWQgKz0gcGx1c19vcl9kb3QocGll
Y2VzKQogICAgICAgICAgICByZW5kZXJlZCArPSAiZyUlcyIgJSUgcGllY2Vz
WyJzaG9ydCJdCiAgICAgICAgICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAg
ICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAgICBlbHNlOgog
ICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSAiMC5w
b3N0JSVkIiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAgICAgICBpZiBwaWVj
ZXNbImJyYW5jaCJdICE9ICJtYXN0ZXIiOgogICAgICAgICAgICByZW5kZXJl
ZCArPSAiLmRldjAiCiAgICAgICAgcmVuZGVyZWQgKz0gIitnJSVzIiAlJSBw
aWVjZXNbInNob3J0Il0KICAgICAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAg
ICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAgICByZXR1cm4gcmVu
ZGVyZWQKCgpkZWYgcmVuZGVyX3BlcDQ0MF9vbGQocGllY2VzOiBEaWN0W3N0
ciwgQW55XSkgLT4gc3RyOgogICAgIiIiVEFHWy5wb3N0RElTVEFOQ0VbLmRl
djBdXSAuCgogICAgVGhlICIuZGV2MCIgbWVhbnMgZGlydHkuCgogICAgRXhj
ZXB0aW9uczoKICAgIDE6IG5vIHRhZ3MuIDAucG9zdERJU1RBTkNFWy5kZXYw
XQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06CiAgICAg
ICAgcmVuZGVyZWQgPSBwaWVjZXNbImNsb3Nlc3QtdGFnIl0KICAgICAgICBp
ZiBwaWVjZXNbImRpc3RhbmNlIl0gb3IgcGllY2VzWyJkaXJ0eSJdOgogICAg
ICAgICAgICByZW5kZXJlZCArPSAiLnBvc3QlJWQiICUlIHBpZWNlc1siZGlz
dGFuY2UiXQogICAgICAgICAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAgICAg
ICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICBlbHNlOgogICAg
ICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSAiMC5wb3N0
JSVkIiAlJSBwaWVjZXNbImRpc3RhbmNlIl0KICAgICAgICBpZiBwaWVjZXNb
ImRpcnR5Il06CiAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGV2MCIKICAg
IHJldHVybiByZW5kZXJlZAoKCmRlZiByZW5kZXJfZ2l0X2Rlc2NyaWJlKHBp
ZWNlczogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoKICAgICIiIlRBR1stRElT
VEFOQ0UtZ0hFWF1bLWRpcnR5XS4KCiAgICBMaWtlICdnaXQgZGVzY3JpYmUg
LS10YWdzIC0tZGlydHkgLS1hbHdheXMnLgoKICAgIEV4Y2VwdGlvbnM6CiAg
ICAxOiBubyB0YWdzLiBIRVhbLWRpcnR5XSAgKG5vdGU6IG5vICdnJyBwcmVm
aXgpCiAgICAiIiIKICAgIGlmIHBpZWNlc1siY2xvc2VzdC10YWciXToKICAg
ICAgICByZW5kZXJlZCA9IHBpZWNlc1siY2xvc2VzdC10YWciXQogICAgICAg
IGlmIHBpZWNlc1siZGlzdGFuY2UiXToKICAgICAgICAgICAgcmVuZGVyZWQg
Kz0gIi0lJWQtZyUlcyIgJSUgKHBpZWNlc1siZGlzdGFuY2UiXSwgcGllY2Vz
WyJzaG9ydCJdKQogICAgZWxzZToKICAgICAgICAjIGV4Y2VwdGlvbiAjMQog
ICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJzaG9ydCJdCiAgICBpZiBwaWVj
ZXNbImRpcnR5Il06CiAgICAgICAgcmVuZGVyZWQgKz0gIi1kaXJ0eSIKICAg
IHJldHVybiByZW5kZXJlZAoKCmRlZiByZW5kZXJfZ2l0X2Rlc2NyaWJlX2xv
bmcocGllY2VzOiBEaWN0W3N0ciwgQW55XSkgLT4gc3RyOgogICAgIiIiVEFH
LURJU1RBTkNFLWdIRVhbLWRpcnR5XS4KCiAgICBMaWtlICdnaXQgZGVzY3Jp
YmUgLS10YWdzIC0tZGlydHkgLS1hbHdheXMgLWxvbmcnLgogICAgVGhlIGRp
c3RhbmNlL2hhc2ggaXMgdW5jb25kaXRpb25hbC4KCiAgICBFeGNlcHRpb25z
OgogICAgMTogbm8gdGFncy4gSEVYWy1kaXJ0eV0gIChub3RlOiBubyAnZycg
cHJlZml4KQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06
CiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbImNsb3Nlc3QtdGFnIl0KICAg
ICAgICByZW5kZXJlZCArPSAiLSUlZC1nJSVzIiAlJSAocGllY2VzWyJkaXN0
YW5jZSJdLCBwaWVjZXNbInNob3J0Il0pCiAgICBlbHNlOgogICAgICAgICMg
ZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbInNob3J0
Il0KICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAgICAgICByZW5kZXJlZCAr
PSAiLWRpcnR5IgogICAgcmV0dXJuIHJlbmRlcmVkCgoKZGVmIHJlbmRlcihw
aWVjZXM6IERpY3Rbc3RyLCBBbnldLCBzdHlsZTogc3RyKSAtPiBEaWN0W3N0
ciwgQW55XToKICAgICIiIlJlbmRlciB0aGUgZ2l2ZW4gdmVyc2lvbiBwaWVj
ZXMgaW50byB0aGUgcmVxdWVzdGVkIHN0eWxlLiIiIgogICAgaWYgcGllY2Vz
WyJlcnJvciJdOgogICAgICAgIHJldHVybiB7InZlcnNpb24iOiAidW5rbm93
biIsCiAgICAgICAgICAgICAgICAiZnVsbC1yZXZpc2lvbmlkIjogcGllY2Vz
LmdldCgibG9uZyIpLAogICAgICAgICAgICAgICAgImRpcnR5IjogTm9uZSwK
ICAgICAgICAgICAgICAgICJlcnJvciI6IHBpZWNlc1siZXJyb3IiXSwKICAg
ICAgICAgICAgICAgICJkYXRlIjogTm9uZX0KCiAgICBpZiBub3Qgc3R5bGUg
b3Igc3R5bGUgPT0gImRlZmF1bHQiOgogICAgICAgIHN0eWxlID0gInBlcDQ0
MCIgICMgdGhlIGRlZmF1bHQKCiAgICBpZiBzdHlsZSA9PSAicGVwNDQwIjoK
ICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDAocGllY2VzKQogICAg
ZWxpZiBzdHlsZSA9PSAicGVwNDQwLWJyYW5jaCI6CiAgICAgICAgcmVuZGVy
ZWQgPSByZW5kZXJfcGVwNDQwX2JyYW5jaChwaWVjZXMpCiAgICBlbGlmIHN0
eWxlID09ICJwZXA0NDAtcHJlIjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRl
cl9wZXA0NDBfcHJlKHBpZWNlcykKICAgIGVsaWYgc3R5bGUgPT0gInBlcDQ0
MC1wb3N0IjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDBfcG9z
dChwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJwZXA0NDAtcG9zdC1icmFu
Y2giOgogICAgICAgIHJlbmRlcmVkID0gcmVuZGVyX3BlcDQ0MF9wb3N0X2Jy
YW5jaChwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJwZXA0NDAtb2xkIjoK
ICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDBfb2xkKHBpZWNlcykK
ICAgIGVsaWYgc3R5bGUgPT0gImdpdC1kZXNjcmliZSI6CiAgICAgICAgcmVu
ZGVyZWQgPSByZW5kZXJfZ2l0X2Rlc2NyaWJlKHBpZWNlcykKICAgIGVsaWYg
c3R5bGUgPT0gImdpdC1kZXNjcmliZS1sb25nIjoKICAgICAgICByZW5kZXJl
ZCA9IHJlbmRlcl9naXRfZGVzY3JpYmVfbG9uZyhwaWVjZXMpCiAgICBlbHNl
OgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gc3R5bGUgJyUl
cyciICUlIHN0eWxlKQoKICAgIHJldHVybiB7InZlcnNpb24iOiByZW5kZXJl
ZCwgImZ1bGwtcmV2aXNpb25pZCI6IHBpZWNlc1sibG9uZyJdLAogICAgICAg
ICAgICAiZGlydHkiOiBwaWVjZXNbImRpcnR5Il0sICJlcnJvciI6IE5vbmUs
CiAgICAgICAgICAgICJkYXRlIjogcGllY2VzLmdldCgiZGF0ZSIpfQoKCmRl
ZiBnZXRfdmVyc2lvbnMoKSAtPiBEaWN0W3N0ciwgQW55XToKICAgICIiIkdl
dCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9yIHJldHVybiBkZWZhdWx0IGlmIHVu
YWJsZSB0byBkbyBzby4iIiIKICAgICMgSSBhbSBpbiBfdmVyc2lvbi5weSwg
d2hpY2ggbGl2ZXMgYXQgUk9PVC9WRVJTSU9ORklMRV9TT1VSQ0UuIElmIHdl
IGhhdmUKICAgICMgX19maWxlX18sIHdlIGNhbiB3b3JrIGJhY2t3YXJkcyBm
cm9tIHRoZXJlIHRvIHRoZSByb290LiBTb21lCiAgICAjIHB5MmV4ZS9iYmZy
ZWV6ZS9ub24tQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgZG8gX19m
aWxlX18sIGluIHdoaWNoCiAgICAjIGNhc2Ugd2UgY2FuIG9ubHkgdXNlIGV4
cGFuZGVkIGtleXdvcmRzLgoKICAgIGNmZyA9IGdldF9jb25maWcoKQogICAg
dmVyYm9zZSA9IGNmZy52ZXJib3NlCgogICAgdHJ5OgogICAgICAgIHJldHVy
biBnaXRfdmVyc2lvbnNfZnJvbV9rZXl3b3JkcyhnZXRfa2V5d29yZHMoKSwg
Y2ZnLnRhZ19wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZlcmJvc2UpCiAgICBleGNlcHQgTm90VGhpc01ldGhv
ZDoKICAgICAgICBwYXNzCgogICAgdHJ5OgogICAgICAgIHJvb3QgPSBvcy5w
YXRoLnJlYWxwYXRoKF9fZmlsZV9fKQogICAgICAgICMgdmVyc2lvbmZpbGVf
c291cmNlIGlzIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIHRvcCBvZiB0
aGUgc291cmNlCiAgICAgICAgIyB0cmVlICh3aGVyZSB0aGUgLmdpdCBkaXJl
Y3RvcnkgbWlnaHQgbGl2ZSkgdG8gdGhpcyBmaWxlLiBJbnZlcnQKICAgICAg
ICAjIHRoaXMgdG8gZmluZCB0aGUgcm9vdCBmcm9tIF9fZmlsZV9fLgogICAg
ICAgIGZvciBfIGluIGNmZy52ZXJzaW9uZmlsZV9zb3VyY2Uuc3BsaXQoJy8n
KToKICAgICAgICAgICAgcm9vdCA9IG9zLnBhdGguZGlybmFtZShyb290KQog
ICAgZXhjZXB0IE5hbWVFcnJvcjoKICAgICAgICByZXR1cm4geyJ2ZXJzaW9u
IjogIjArdW5rbm93biIsICJmdWxsLXJldmlzaW9uaWQiOiBOb25lLAogICAg
ICAgICAgICAgICAgImRpcnR5IjogTm9uZSwKICAgICAgICAgICAgICAgICJl
cnJvciI6ICJ1bmFibGUgdG8gZmluZCByb290IG9mIHNvdXJjZSB0cmVlIiwK
ICAgICAgICAgICAgICAgICJkYXRlIjogTm9uZX0KCiAgICB0cnk6CiAgICAg
ICAgcGllY2VzID0gZ2l0X3BpZWNlc19mcm9tX3ZjcyhjZmcudGFnX3ByZWZp
eCwgcm9vdCwgdmVyYm9zZSkKICAgICAgICByZXR1cm4gcmVuZGVyKHBpZWNl
cywgY2ZnLnN0eWxlKQogICAgZXhjZXB0IE5vdFRoaXNNZXRob2Q6CiAgICAg
ICAgcGFzcwoKICAgIHRyeToKICAgICAgICBpZiBjZmcucGFyZW50ZGlyX3By
ZWZpeDoKICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25zX2Zyb21fcGFyZW50
ZGlyKGNmZy5wYXJlbnRkaXJfcHJlZml4LCByb290LCB2ZXJib3NlKQogICAg
ZXhjZXB0IE5vdFRoaXNNZXRob2Q6CiAgICAgICAgcGFzcwoKICAgIHJldHVy
biB7InZlcnNpb24iOiAiMCt1bmtub3duIiwgImZ1bGwtcmV2aXNpb25pZCI6
IE5vbmUsCiAgICAgICAgICAgICJkaXJ0eSI6IE5vbmUsCiAgICAgICAgICAg
ICJlcnJvciI6ICJ1bmFibGUgdG8gY29tcHV0ZSB2ZXJzaW9uIiwgImRhdGUi
OiBOb25lfQonJycKCgpAcmVnaXN0ZXJfdmNzX2hhbmRsZXIoImdpdCIsICJn
ZXRfa2V5d29yZHMiKQpkZWYgZ2l0X2dldF9rZXl3b3Jkcyh2ZXJzaW9uZmls
ZV9hYnM6IHN0cikgLT4gRGljdFtzdHIsIHN0cl06CiAgICAiIiJFeHRyYWN0
IHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4gZmlsZS4iIiIK
ICAgICMgdGhlIGNvZGUgZW1iZWRkZWQgaW4gX3ZlcnNpb24ucHkgY2FuIGp1
c3QgZmV0Y2ggdGhlIHZhbHVlIG9mIHRoZXNlCiAgICAjIGtleXdvcmRzLiBX
aGVuIHVzZWQgZnJvbSBzZXR1cC5weSwgd2UgZG9uJ3Qgd2FudCB0byBpbXBv
cnQgX3ZlcnNpb24ucHksCiAgICAjIHNvIHdlIGRvIGl0IHdpdGggYSByZWdl
eHAgaW5zdGVhZC4gVGhpcyBmdW5jdGlvbiBpcyBub3QgdXNlZCBmcm9tCiAg
ICAjIF92ZXJzaW9uLnB5LgogICAga2V5d29yZHM6IERpY3Rbc3RyLCBzdHJd
ID0ge30KICAgIHRyeToKICAgICAgICB3aXRoIG9wZW4odmVyc2lvbmZpbGVf
YWJzLCAiciIpIGFzIGZvYmo6CiAgICAgICAgICAgIGZvciBsaW5lIGluIGZv
Ymo6CiAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0
aCgiZ2l0X3JlZm5hbWVzID0iKToKICAgICAgICAgICAgICAgICAgICBtbyA9
IHJlLnNlYXJjaChyJz1ccyoiKC4qKSInLCBsaW5lKQogICAgICAgICAgICAg
ICAgICAgIGlmIG1vOgogICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jk
c1sicmVmbmFtZXMiXSA9IG1vLmdyb3VwKDEpCiAgICAgICAgICAgICAgICBp
ZiBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0aCgiZ2l0X2Z1bGwgPSIpOgogICAg
ICAgICAgICAgICAgICAgIG1vID0gcmUuc2VhcmNoKHInPVxzKiIoLiopIics
IGxpbmUpCiAgICAgICAgICAgICAgICAgICAgaWYgbW86CiAgICAgICAgICAg
ICAgICAgICAgICAgIGtleXdvcmRzWyJmdWxsIl0gPSBtby5ncm91cCgxKQog
ICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoImdp
dF9kYXRlID0iKToKICAgICAgICAgICAgICAgICAgICBtbyA9IHJlLnNlYXJj
aChyJz1ccyoiKC4qKSInLCBsaW5lKQogICAgICAgICAgICAgICAgICAgIGlm
IG1vOgogICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkc1siZGF0ZSJd
ID0gbW8uZ3JvdXAoMSkKICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgIHBh
c3MKICAgIHJldHVybiBrZXl3b3JkcwoKCkByZWdpc3Rlcl92Y3NfaGFuZGxl
cigiZ2l0IiwgImtleXdvcmRzIikKZGVmIGdpdF92ZXJzaW9uc19mcm9tX2tl
eXdvcmRzKAogICAga2V5d29yZHM6IERpY3Rbc3RyLCBzdHJdLAogICAgdGFn
X3ByZWZpeDogc3RyLAogICAgdmVyYm9zZTogYm9vbCwKKSAtPiBEaWN0W3N0
ciwgQW55XToKICAgICIiIkdldCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20g
Z2l0IGtleXdvcmRzLiIiIgogICAgaWYgInJlZm5hbWVzIiBub3QgaW4ga2V5
d29yZHM6CiAgICAgICAgcmFpc2UgTm90VGhpc01ldGhvZCgiU2hvcnQgdmVy
c2lvbiBmaWxlIGZvdW5kIikKICAgIGRhdGUgPSBrZXl3b3Jkcy5nZXQoImRh
dGUiKQogICAgaWYgZGF0ZSBpcyBub3QgTm9uZToKICAgICAgICAjIFVzZSBv
bmx5IHRoZSBsYXN0IGxpbmUuICBQcmV2aW91cyBsaW5lcyBtYXkgY29udGFp
biBHUEcgc2lnbmF0dXJlCiAgICAgICAgIyBpbmZvcm1hdGlvbi4KICAgICAg
ICBkYXRlID0gZGF0ZS5zcGxpdGxpbmVzKClbLTFdCgogICAgICAgICMgZ2l0
LTIuMi4wIGFkZGVkICIlY0kiLCB3aGljaCBleHBhbmRzIHRvIGFuIElTTy04
NjAxIC1jb21wbGlhbnQKICAgICAgICAjIGRhdGVzdGFtcC4gSG93ZXZlciB3
ZSBwcmVmZXIgIiVjaSIgKHdoaWNoIGV4cGFuZHMgdG8gYW4gIklTTy04NjAx
CiAgICAgICAgIyAtbGlrZSIgc3RyaW5nLCB3aGljaCB3ZSBtdXN0IHRoZW4g
ZWRpdCB0byBtYWtlIGNvbXBsaWFudCksIGJlY2F1c2UKICAgICAgICAjIGl0
J3MgYmVlbiBhcm91bmQgc2luY2UgZ2l0LTEuNS4zLCBhbmQgaXQncyB0b28g
ZGlmZmljdWx0IHRvCiAgICAgICAgIyBkaXNjb3ZlciB3aGljaCB2ZXJzaW9u
IHdlJ3JlIHVzaW5nLCBvciB0byB3b3JrIGFyb3VuZCB1c2luZyBhbgogICAg
ICAgICMgb2xkZXIgb25lLgogICAgICAgIGRhdGUgPSBkYXRlLnN0cmlwKCku
cmVwbGFjZSgiICIsICJUIiwgMSkucmVwbGFjZSgiICIsICIiLCAxKQogICAg
cmVmbmFtZXMgPSBrZXl3b3Jkc1sicmVmbmFtZXMiXS5zdHJpcCgpCiAgICBp
ZiByZWZuYW1lcy5zdGFydHN3aXRoKCIkRm9ybWF0Iik6CiAgICAgICAgaWYg
dmVyYm9zZToKICAgICAgICAgICAgcHJpbnQoImtleXdvcmRzIGFyZSB1bmV4
cGFuZGVkLCBub3QgdXNpbmciKQogICAgICAgIHJhaXNlIE5vdFRoaXNNZXRo
b2QoInVuZXhwYW5kZWQga2V5d29yZHMsIG5vdCBhIGdpdC1hcmNoaXZlIHRh
cmJhbGwiKQogICAgcmVmcyA9IHtyLnN0cmlwKCkgZm9yIHIgaW4gcmVmbmFt
ZXMuc3RyaXAoIigpIikuc3BsaXQoIiwiKX0KICAgICMgc3RhcnRpbmcgaW4g
Z2l0LTEuOC4zLCB0YWdzIGFyZSBsaXN0ZWQgYXMgInRhZzogZm9vLTEuMCIg
aW5zdGVhZCBvZgogICAgIyBqdXN0ICJmb28tMS4wIi4gSWYgd2Ugc2VlIGEg
InRhZzogIiBwcmVmaXgsIHByZWZlciB0aG9zZS4KICAgIFRBRyA9ICJ0YWc6
ICIKICAgIHRhZ3MgPSB7cltsZW4oVEFHKTpdIGZvciByIGluIHJlZnMgaWYg
ci5zdGFydHN3aXRoKFRBRyl9CiAgICBpZiBub3QgdGFnczoKICAgICAgICAj
IEVpdGhlciB3ZSdyZSB1c2luZyBnaXQgPCAxLjguMywgb3IgdGhlcmUgcmVh
bGx5IGFyZSBubyB0YWdzLiBXZSB1c2UKICAgICAgICAjIGEgaGV1cmlzdGlj
OiBhc3N1bWUgYWxsIHZlcnNpb24gdGFncyBoYXZlIGEgZGlnaXQuIFRoZSBv
bGQgZ2l0ICVkCiAgICAgICAgIyBleHBhbnNpb24gYmVoYXZlcyBsaWtlIGdp
dCBsb2cgLS1kZWNvcmF0ZT1zaG9ydCBhbmQgc3RyaXBzIG91dCB0aGUKICAg
ICAgICAjIHJlZnMvaGVhZHMvIGFuZCByZWZzL3RhZ3MvIHByZWZpeGVzIHRo
YXQgd291bGQgbGV0IHVzIGRpc3Rpbmd1aXNoCiAgICAgICAgIyBiZXR3ZWVu
IGJyYW5jaGVzIGFuZCB0YWdzLiBCeSBpZ25vcmluZyByZWZuYW1lcyB3aXRo
b3V0IGRpZ2l0cywgd2UKICAgICAgICAjIGZpbHRlciBvdXQgbWFueSBjb21t
b24gYnJhbmNoIG5hbWVzIGxpa2UgInJlbGVhc2UiIGFuZAogICAgICAgICMg
InN0YWJpbGl6YXRpb24iLCBhcyB3ZWxsIGFzICJIRUFEIiBhbmQgIm1hc3Rl
ciIuCiAgICAgICAgdGFncyA9IHtyIGZvciByIGluIHJlZnMgaWYgcmUuc2Vh
cmNoKHInXGQnLCByKX0KICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAg
ICBwcmludCgiZGlzY2FyZGluZyAnJXMnLCBubyBkaWdpdHMiICUgIiwiLmpv
aW4ocmVmcyAtIHRhZ3MpKQogICAgaWYgdmVyYm9zZToKICAgICAgICBwcmlu
dCgibGlrZWx5IHRhZ3M6ICVzIiAlICIsIi5qb2luKHNvcnRlZCh0YWdzKSkp
CiAgICBmb3IgcmVmIGluIHNvcnRlZCh0YWdzKToKICAgICAgICAjIHNvcnRp
bmcgd2lsbCBwcmVmZXIgZS5nLiAiMi4wIiBvdmVyICIyLjByYzEiCiAgICAg
ICAgaWYgcmVmLnN0YXJ0c3dpdGgodGFnX3ByZWZpeCk6CiAgICAgICAgICAg
IHIgPSByZWZbbGVuKHRhZ19wcmVmaXgpOl0KICAgICAgICAgICAgIyBGaWx0
ZXIgb3V0IHJlZnMgdGhhdCBleGFjdGx5IG1hdGNoIHByZWZpeCBvciB0aGF0
IGRvbid0IHN0YXJ0CiAgICAgICAgICAgICMgd2l0aCBhIG51bWJlciBvbmNl
IHRoZSBwcmVmaXggaXMgc3RyaXBwZWQgKG1vc3RseSBhIGNvbmNlcm4KICAg
ICAgICAgICAgIyB3aGVuIHByZWZpeCBpcyAnJykKICAgICAgICAgICAgaWYg
bm90IHJlLm1hdGNoKHInXGQnLCByKToKICAgICAgICAgICAgICAgIGNvbnRp
bnVlCiAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICBw
cmludCgicGlja2luZyAlcyIgJSByKQogICAgICAgICAgICByZXR1cm4geyJ2
ZXJzaW9uIjogciwKICAgICAgICAgICAgICAgICAgICAiZnVsbC1yZXZpc2lv
bmlkIjoga2V5d29yZHNbImZ1bGwiXS5zdHJpcCgpLAogICAgICAgICAgICAg
ICAgICAgICJkaXJ0eSI6IEZhbHNlLCAiZXJyb3IiOiBOb25lLAogICAgICAg
ICAgICAgICAgICAgICJkYXRlIjogZGF0ZX0KICAgICMgbm8gc3VpdGFibGUg
dGFncywgc28gdmVyc2lvbiBpcyAiMCt1bmtub3duIiwgYnV0IGZ1bGwgaGV4
IGlzIHN0aWxsIHRoZXJlCiAgICBpZiB2ZXJib3NlOgogICAgICAgIHByaW50
KCJubyBzdWl0YWJsZSB0YWdzLCB1c2luZyB1bmtub3duICsgZnVsbCByZXZp
c2lvbiBpZCIpCiAgICByZXR1cm4geyJ2ZXJzaW9uIjogIjArdW5rbm93biIs
CiAgICAgICAgICAgICJmdWxsLXJldmlzaW9uaWQiOiBrZXl3b3Jkc1siZnVs
bCJdLnN0cmlwKCksCiAgICAgICAgICAgICJkaXJ0eSI6IEZhbHNlLCAiZXJy
b3IiOiAibm8gc3VpdGFibGUgdGFncyIsICJkYXRlIjogTm9uZX0KCgpAcmVn
aXN0ZXJfdmNzX2hhbmRsZXIoImdpdCIsICJwaWVjZXNfZnJvbV92Y3MiKQpk
ZWYgZ2l0X3BpZWNlc19mcm9tX3ZjcygKICAgIHRhZ19wcmVmaXg6IHN0ciwK
ICAgIHJvb3Q6IHN0ciwKICAgIHZlcmJvc2U6IGJvb2wsCiAgICBydW5uZXI6
IENhbGxhYmxlID0gcnVuX2NvbW1hbmQKKSAtPiBEaWN0W3N0ciwgQW55XToK
ICAgICIiIkdldCB2ZXJzaW9uIGZyb20gJ2dpdCBkZXNjcmliZScgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgoKICAgIFRoaXMgb25seSBnZXRz
IGNhbGxlZCBpZiB0aGUgZ2l0LWFyY2hpdmUgJ3N1YnN0JyBrZXl3b3JkcyB3
ZXJlICpub3QqCiAgICBleHBhbmRlZCwgYW5kIF92ZXJzaW9uLnB5IGhhc24n
dCBhbHJlYWR5IGJlZW4gcmV3cml0dGVuIHdpdGggYSBzaG9ydAogICAgdmVy
c2lvbiBzdHJpbmcsIG1lYW5pbmcgd2UncmUgaW5zaWRlIGEgY2hlY2tlZCBv
dXQgc291cmNlIHRyZWUuCiAgICAiIiIKICAgIEdJVFMgPSBbImdpdCJdCiAg
ICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICAgICBHSVRTID0g
WyJnaXQuY21kIiwgImdpdC5leGUiXQoKICAgICMgR0lUX0RJUiBjYW4gaW50
ZXJmZXJlIHdpdGggY29ycmVjdCBvcGVyYXRpb24gb2YgVmVyc2lvbmVlci4K
ICAgICMgSXQgbWF5IGJlIGludGVuZGVkIHRvIGJlIHBhc3NlZCB0byB0aGUg
VmVyc2lvbmVlci12ZXJzaW9uZWQgcHJvamVjdCwKICAgICMgYnV0IHRoYXQg
c2hvdWxkIG5vdCBjaGFuZ2Ugd2hlcmUgd2UgZ2V0IG91ciB2ZXJzaW9uIGZy
b20uCiAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgZW52LnBvcCgi
R0lUX0RJUiIsIE5vbmUpCiAgICBydW5uZXIgPSBmdW5jdG9vbHMucGFydGlh
bChydW5uZXIsIGVudj1lbnYpCgogICAgXywgcmMgPSBydW5uZXIoR0lUUywg
WyJyZXYtcGFyc2UiLCAiLS1naXQtZGlyIl0sIGN3ZD1yb290LAogICAgICAg
ICAgICAgICAgICAgaGlkZV9zdGRlcnI9bm90IHZlcmJvc2UpCiAgICBpZiBy
YyAhPSAwOgogICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50
KCJEaXJlY3RvcnkgJXMgbm90IHVuZGVyIGdpdCBjb250cm9sIiAlIHJvb3Qp
CiAgICAgICAgcmFpc2UgTm90VGhpc01ldGhvZCgiJ2dpdCByZXYtcGFyc2Ug
LS1naXQtZGlyJyByZXR1cm5lZCBlcnJvciIpCgogICAgIyBpZiB0aGVyZSBp
cyBhIHRhZyBtYXRjaGluZyB0YWdfcHJlZml4LCB0aGlzIHlpZWxkcyBUQUct
TlVNLWdIRVhbLWRpcnR5XQogICAgIyBpZiB0aGVyZSBpc24ndCBvbmUsIHRo
aXMgeWllbGRzIEhFWFstZGlydHldIChubyBOVU0pCiAgICBkZXNjcmliZV9v
dXQsIHJjID0gcnVubmVyKEdJVFMsIFsKICAgICAgICAiZGVzY3JpYmUiLCAi
LS10YWdzIiwgIi0tZGlydHkiLCAiLS1hbHdheXMiLCAiLS1sb25nIiwKICAg
ICAgICAiLS1tYXRjaCIsIGYie3RhZ19wcmVmaXh9W1s6ZGlnaXQ6XV0qIgog
ICAgXSwgY3dkPXJvb3QpCiAgICAjIC0tbG9uZyB3YXMgYWRkZWQgaW4gZ2l0
LTEuNS41CiAgICBpZiBkZXNjcmliZV9vdXQgaXMgTm9uZToKICAgICAgICBy
YWlzZSBOb3RUaGlzTWV0aG9kKCInZ2l0IGRlc2NyaWJlJyBmYWlsZWQiKQog
ICAgZGVzY3JpYmVfb3V0ID0gZGVzY3JpYmVfb3V0LnN0cmlwKCkKICAgIGZ1
bGxfb3V0LCByYyA9IHJ1bm5lcihHSVRTLCBbInJldi1wYXJzZSIsICJIRUFE
Il0sIGN3ZD1yb290KQogICAgaWYgZnVsbF9vdXQgaXMgTm9uZToKICAgICAg
ICByYWlzZSBOb3RUaGlzTWV0aG9kKCInZ2l0IHJldi1wYXJzZScgZmFpbGVk
IikKICAgIGZ1bGxfb3V0ID0gZnVsbF9vdXQuc3RyaXAoKQoKICAgIHBpZWNl
czogRGljdFtzdHIsIEFueV0gPSB7fQogICAgcGllY2VzWyJsb25nIl0gPSBm
dWxsX291dAogICAgcGllY2VzWyJzaG9ydCJdID0gZnVsbF9vdXRbOjddICAj
IG1heWJlIGltcHJvdmVkIGxhdGVyCiAgICBwaWVjZXNbImVycm9yIl0gPSBO
b25lCgogICAgYnJhbmNoX25hbWUsIHJjID0gcnVubmVyKEdJVFMsIFsicmV2
LXBhcnNlIiwgIi0tYWJicmV2LXJlZiIsICJIRUFEIl0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3dkPXJvb3QpCiAgICAjIC0tYWJicmV2LXJl
ZiB3YXMgYWRkZWQgaW4gZ2l0LTEuNi4zCiAgICBpZiByYyAhPSAwIG9yIGJy
YW5jaF9uYW1lIGlzIE5vbmU6CiAgICAgICAgcmFpc2UgTm90VGhpc01ldGhv
ZCgiJ2dpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmJyByZXR1cm5lZCBlcnJv
ciIpCiAgICBicmFuY2hfbmFtZSA9IGJyYW5jaF9uYW1lLnN0cmlwKCkKCiAg
ICBpZiBicmFuY2hfbmFtZSA9PSAiSEVBRCI6CiAgICAgICAgIyBJZiB3ZSBh
cmVuJ3QgZXhhY3RseSBvbiBhIGJyYW5jaCwgcGljayBhIGJyYW5jaCB3aGlj
aCByZXByZXNlbnRzCiAgICAgICAgIyB0aGUgY3VycmVudCBjb21taXQuIElm
IGFsbCBlbHNlIGZhaWxzLCB3ZSBhcmUgb24gYSBicmFuY2hsZXNzCiAgICAg
ICAgIyBjb21taXQuCiAgICAgICAgYnJhbmNoZXMsIHJjID0gcnVubmVyKEdJ
VFMsIFsiYnJhbmNoIiwgIi0tY29udGFpbnMiXSwgY3dkPXJvb3QpCiAgICAg
ICAgIyAtLWNvbnRhaW5zIHdhcyBhZGRlZCBpbiBnaXQtMS41LjQKICAgICAg
ICBpZiByYyAhPSAwIG9yIGJyYW5jaGVzIGlzIE5vbmU6CiAgICAgICAgICAg
IHJhaXNlIE5vdFRoaXNNZXRob2QoIidnaXQgYnJhbmNoIC0tY29udGFpbnMn
IHJldHVybmVkIGVycm9yIikKICAgICAgICBicmFuY2hlcyA9IGJyYW5jaGVz
LnNwbGl0KCJcbiIpCgogICAgICAgICMgUmVtb3ZlIHRoZSBmaXJzdCBsaW5l
IGlmIHdlJ3JlIHJ1bm5pbmcgZGV0YWNoZWQKICAgICAgICBpZiAiKCIgaW4g
YnJhbmNoZXNbMF06CiAgICAgICAgICAgIGJyYW5jaGVzLnBvcCgwKQoKICAg
ICAgICAjIFN0cmlwIG9mZiB0aGUgbGVhZGluZyAiKiAiIGZyb20gdGhlIGxp
c3Qgb2YgYnJhbmNoZXMuCiAgICAgICAgYnJhbmNoZXMgPSBbYnJhbmNoWzI6
XSBmb3IgYnJhbmNoIGluIGJyYW5jaGVzXQogICAgICAgIGlmICJtYXN0ZXIi
IGluIGJyYW5jaGVzOgogICAgICAgICAgICBicmFuY2hfbmFtZSA9ICJtYXN0
ZXIiCiAgICAgICAgZWxpZiBub3QgYnJhbmNoZXM6CiAgICAgICAgICAgIGJy
YW5jaF9uYW1lID0gTm9uZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMg
UGljayB0aGUgZmlyc3QgYnJhbmNoIHRoYXQgaXMgcmV0dXJuZWQuIEdvb2Qg
b3IgYmFkLgogICAgICAgICAgICBicmFuY2hfbmFtZSA9IGJyYW5jaGVzWzBd
CgogICAgcGllY2VzWyJicmFuY2giXSA9IGJyYW5jaF9uYW1lCgogICAgIyBw
YXJzZSBkZXNjcmliZV9vdXQuIEl0IHdpbGwgYmUgbGlrZSBUQUctTlVNLWdI
RVhbLWRpcnR5XSBvciBIRVhbLWRpcnR5XQogICAgIyBUQUcgbWlnaHQgaGF2
ZSBoeXBoZW5zLgogICAgZ2l0X2Rlc2NyaWJlID0gZGVzY3JpYmVfb3V0Cgog
ICAgIyBsb29rIGZvciAtZGlydHkgc3VmZml4CiAgICBkaXJ0eSA9IGdpdF9k
ZXNjcmliZS5lbmRzd2l0aCgiLWRpcnR5IikKICAgIHBpZWNlc1siZGlydHki
XSA9IGRpcnR5CiAgICBpZiBkaXJ0eToKICAgICAgICBnaXRfZGVzY3JpYmUg
PSBnaXRfZGVzY3JpYmVbOmdpdF9kZXNjcmliZS5yaW5kZXgoIi1kaXJ0eSIp
XQoKICAgICMgbm93IHdlIGhhdmUgVEFHLU5VTS1nSEVYIG9yIEhFWAoKICAg
IGlmICItIiBpbiBnaXRfZGVzY3JpYmU6CiAgICAgICAgIyBUQUctTlVNLWdI
RVgKICAgICAgICBtbyA9IHJlLnNlYXJjaChyJ14oLispLShcZCspLWcoWzAt
OWEtZl0rKSQnLCBnaXRfZGVzY3JpYmUpCiAgICAgICAgaWYgbm90IG1vOgog
ICAgICAgICAgICAjIHVucGFyc2FibGUuIE1heWJlIGdpdC1kZXNjcmliZSBp
cyBtaXNiZWhhdmluZz8KICAgICAgICAgICAgcGllY2VzWyJlcnJvciJdID0g
KCJ1bmFibGUgdG8gcGFyc2UgZ2l0LWRlc2NyaWJlIG91dHB1dDogJyVzJyIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZGVzY3JpYmVfb3V0
KQogICAgICAgICAgICByZXR1cm4gcGllY2VzCgogICAgICAgICMgdGFnCiAg
ICAgICAgZnVsbF90YWcgPSBtby5ncm91cCgxKQogICAgICAgIGlmIG5vdCBm
dWxsX3RhZy5zdGFydHN3aXRoKHRhZ19wcmVmaXgpOgogICAgICAgICAgICBp
ZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgZm10ID0gInRhZyAnJXMnIGRv
ZXNuJ3Qgc3RhcnQgd2l0aCBwcmVmaXggJyVzJyIKICAgICAgICAgICAgICAg
IHByaW50KGZtdCAlIChmdWxsX3RhZywgdGFnX3ByZWZpeCkpCiAgICAgICAg
ICAgIHBpZWNlc1siZXJyb3IiXSA9ICgidGFnICclcycgZG9lc24ndCBzdGFy
dCB3aXRoIHByZWZpeCAnJXMnIgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJSAoZnVsbF90YWcsIHRhZ19wcmVmaXgpKQogICAgICAgICAgICBy
ZXR1cm4gcGllY2VzCiAgICAgICAgcGllY2VzWyJjbG9zZXN0LXRhZyJdID0g
ZnVsbF90YWdbbGVuKHRhZ19wcmVmaXgpOl0KCiAgICAgICAgIyBkaXN0YW5j
ZTogbnVtYmVyIG9mIGNvbW1pdHMgc2luY2UgdGFnCiAgICAgICAgcGllY2Vz
WyJkaXN0YW5jZSJdID0gaW50KG1vLmdyb3VwKDIpKQoKICAgICAgICAjIGNv
bW1pdDogc2hvcnQgaGV4IHJldmlzaW9uIElECiAgICAgICAgcGllY2VzWyJz
aG9ydCJdID0gbW8uZ3JvdXAoMykKCiAgICBlbHNlOgogICAgICAgICMgSEVY
OiBubyB0YWdzCiAgICAgICAgcGllY2VzWyJjbG9zZXN0LXRhZyJdID0gTm9u
ZQogICAgICAgIG91dCwgcmMgPSBydW5uZXIoR0lUUywgWyJyZXYtbGlzdCIs
ICJIRUFEIiwgIi0tbGVmdC1yaWdodCJdLCBjd2Q9cm9vdCkKICAgICAgICBw
aWVjZXNbImRpc3RhbmNlIl0gPSBsZW4ob3V0LnNwbGl0KCkpICAjIHRvdGFs
IG51bWJlciBvZiBjb21taXRzCgogICAgIyBjb21taXQgZGF0ZTogc2VlIElT
Ty04NjAxIGNvbW1lbnQgaW4gZ2l0X3ZlcnNpb25zX2Zyb21fa2V5d29yZHMo
KQogICAgZGF0ZSA9IHJ1bm5lcihHSVRTLCBbInNob3ciLCAiLXMiLCAiLS1m
b3JtYXQ9JWNpIiwgIkhFQUQiXSwgY3dkPXJvb3QpWzBdLnN0cmlwKCkKICAg
ICMgVXNlIG9ubHkgdGhlIGxhc3QgbGluZS4gIFByZXZpb3VzIGxpbmVzIG1h
eSBjb250YWluIEdQRyBzaWduYXR1cmUKICAgICMgaW5mb3JtYXRpb24uCiAg
ICBkYXRlID0gZGF0ZS5zcGxpdGxpbmVzKClbLTFdCiAgICBwaWVjZXNbImRh
dGUiXSA9IGRhdGUuc3RyaXAoKS5yZXBsYWNlKCIgIiwgIlQiLCAxKS5yZXBs
YWNlKCIgIiwgIiIsIDEpCgogICAgcmV0dXJuIHBpZWNlcwoKCmRlZiBkb192
Y3NfaW5zdGFsbCh2ZXJzaW9uZmlsZV9zb3VyY2U6IHN0ciwgaXB5OiBPcHRp
b25hbFtzdHJdKSAtPiBOb25lOgogICAgIiIiR2l0LXNwZWNpZmljIGluc3Rh
bGxhdGlvbiBsb2dpYyBmb3IgVmVyc2lvbmVlci4KCiAgICBGb3IgR2l0LCB0
aGlzIG1lYW5zIGNyZWF0aW5nL2NoYW5naW5nIC5naXRhdHRyaWJ1dGVzIHRv
IG1hcmsgX3ZlcnNpb24ucHkKICAgIGZvciBleHBvcnQtc3Vic3Qga2V5d29y
ZCBzdWJzdGl0dXRpb24uCiAgICAiIiIKICAgIEdJVFMgPSBbImdpdCJdCiAg
ICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICAgICBHSVRTID0g
WyJnaXQuY21kIiwgImdpdC5leGUiXQogICAgZmlsZXMgPSBbdmVyc2lvbmZp
bGVfc291cmNlXQogICAgaWYgaXB5OgogICAgICAgIGZpbGVzLmFwcGVuZChp
cHkpCiAgICBpZiAiVkVSU0lPTkVFUl9QRVA1MTgiIG5vdCBpbiBnbG9iYWxz
KCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBteV9wYXRoID0gX19maWxl
X18KICAgICAgICAgICAgaWYgbXlfcGF0aC5lbmRzd2l0aCgoIi5weWMiLCAi
LnB5byIpKToKICAgICAgICAgICAgICAgIG15X3BhdGggPSBvcy5wYXRoLnNw
bGl0ZXh0KG15X3BhdGgpWzBdICsgIi5weSIKICAgICAgICAgICAgdmVyc2lv
bmVlcl9maWxlID0gb3MucGF0aC5yZWxwYXRoKG15X3BhdGgpCiAgICAgICAg
ZXhjZXB0IE5hbWVFcnJvcjoKICAgICAgICAgICAgdmVyc2lvbmVlcl9maWxl
ID0gInZlcnNpb25lZXIucHkiCiAgICAgICAgZmlsZXMuYXBwZW5kKHZlcnNp
b25lZXJfZmlsZSkKICAgIHByZXNlbnQgPSBGYWxzZQogICAgdHJ5OgogICAg
ICAgIHdpdGggb3BlbigiLmdpdGF0dHJpYnV0ZXMiLCAiciIpIGFzIGZvYmo6
CiAgICAgICAgICAgIGZvciBsaW5lIGluIGZvYmo6CiAgICAgICAgICAgICAg
ICBpZiBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0aCh2ZXJzaW9uZmlsZV9zb3Vy
Y2UpOgogICAgICAgICAgICAgICAgICAgIGlmICJleHBvcnQtc3Vic3QiIGlu
IGxpbmUuc3RyaXAoKS5zcGxpdCgpWzE6XToKICAgICAgICAgICAgICAgICAg
ICAgICAgcHJlc2VudCA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsKICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgIHBhc3MKICAgIGlm
IG5vdCBwcmVzZW50OgogICAgICAgIHdpdGggb3BlbigiLmdpdGF0dHJpYnV0
ZXMiLCAiYSsiKSBhcyBmb2JqOgogICAgICAgICAgICBmb2JqLndyaXRlKGYi
e3ZlcnNpb25maWxlX3NvdXJjZX0gZXhwb3J0LXN1YnN0XG4iKQogICAgICAg
IGZpbGVzLmFwcGVuZCgiLmdpdGF0dHJpYnV0ZXMiKQogICAgcnVuX2NvbW1h
bmQoR0lUUywgWyJhZGQiLCAiLS0iXSArIGZpbGVzKQoKCmRlZiB2ZXJzaW9u
c19mcm9tX3BhcmVudGRpcigKICAgIHBhcmVudGRpcl9wcmVmaXg6IHN0ciwK
ICAgIHJvb3Q6IHN0ciwKICAgIHZlcmJvc2U6IGJvb2wsCikgLT4gRGljdFtz
dHIsIEFueV06CiAgICAiIiJUcnkgdG8gZGV0ZXJtaW5lIHRoZSB2ZXJzaW9u
IGZyb20gdGhlIHBhcmVudCBkaXJlY3RvcnkgbmFtZS4KCiAgICBTb3VyY2Ug
dGFyYmFsbHMgY29udmVudGlvbmFsbHkgdW5wYWNrIGludG8gYSBkaXJlY3Rv
cnkgdGhhdCBpbmNsdWRlcyBib3RoCiAgICB0aGUgcHJvamVjdCBuYW1lIGFu
ZCBhIHZlcnNpb24gc3RyaW5nLiBXZSB3aWxsIGFsc28gc3VwcG9ydCBzZWFy
Y2hpbmcgdXAKICAgIHR3byBkaXJlY3RvcnkgbGV2ZWxzIGZvciBhbiBhcHBy
b3ByaWF0ZWx5IG5hbWVkIHBhcmVudCBkaXJlY3RvcnkKICAgICIiIgogICAg
cm9vdGRpcnMgPSBbXQoKICAgIGZvciBfIGluIHJhbmdlKDMpOgogICAgICAg
IGRpcm5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHJvb3QpCiAgICAgICAgaWYg
ZGlybmFtZS5zdGFydHN3aXRoKHBhcmVudGRpcl9wcmVmaXgpOgogICAgICAg
ICAgICByZXR1cm4geyJ2ZXJzaW9uIjogZGlybmFtZVtsZW4ocGFyZW50ZGly
X3ByZWZpeCk6XSwKICAgICAgICAgICAgICAgICAgICAiZnVsbC1yZXZpc2lv
bmlkIjogTm9uZSwKICAgICAgICAgICAgICAgICAgICAiZGlydHkiOiBGYWxz
ZSwgImVycm9yIjogTm9uZSwgImRhdGUiOiBOb25lfQogICAgICAgIHJvb3Rk
aXJzLmFwcGVuZChyb290KQogICAgICAgIHJvb3QgPSBvcy5wYXRoLmRpcm5h
bWUocm9vdCkgICMgdXAgYSBsZXZlbAoKICAgIGlmIHZlcmJvc2U6CiAgICAg
ICAgcHJpbnQoIlRyaWVkIGRpcmVjdG9yaWVzICVzIGJ1dCBub25lIHN0YXJ0
ZWQgd2l0aCBwcmVmaXggJXMiICUKICAgICAgICAgICAgICAoc3RyKHJvb3Rk
aXJzKSwgcGFyZW50ZGlyX3ByZWZpeCkpCiAgICByYWlzZSBOb3RUaGlzTWV0
aG9kKCJyb290ZGlyIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwYXJlbnRkaXJfcHJl
Zml4IikKCgpTSE9SVF9WRVJTSU9OX1BZID0gIiIiCiMgVGhpcyBmaWxlIHdh
cyBnZW5lcmF0ZWQgYnkgJ3ZlcnNpb25lZXIucHknICgwLjI5KSBmcm9tCiMg
cmV2aXNpb24tY29udHJvbCBzeXN0ZW0gZGF0YSwgb3IgZnJvbSB0aGUgcGFy
ZW50IGRpcmVjdG9yeSBuYW1lIG9mIGFuCiMgdW5wYWNrZWQgc291cmNlIGFy
Y2hpdmUuIERpc3RyaWJ1dGlvbiB0YXJiYWxscyBjb250YWluIGEgcHJlLWdl
bmVyYXRlZCBjb3B5CiMgb2YgdGhpcyBmaWxlLgoKaW1wb3J0IGpzb24KCnZl
cnNpb25fanNvbiA9ICcnJwolcwonJycgICMgRU5EIFZFUlNJT05fSlNPTgoK
CmRlZiBnZXRfdmVyc2lvbnMoKToKICAgIHJldHVybiBqc29uLmxvYWRzKHZl
cnNpb25fanNvbikKIiIiCgoKZGVmIHZlcnNpb25zX2Zyb21fZmlsZShmaWxl
bmFtZTogc3RyKSAtPiBEaWN0W3N0ciwgQW55XToKICAgICIiIlRyeSB0byBk
ZXRlcm1pbmUgdGhlIHZlcnNpb24gZnJvbSBfdmVyc2lvbi5weSBpZiBwcmVz
ZW50LiIiIgogICAgdHJ5OgogICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkg
YXMgZjoKICAgICAgICAgICAgY29udGVudHMgPSBmLnJlYWQoKQogICAgZXhj
ZXB0IE9TRXJyb3I6CiAgICAgICAgcmFpc2UgTm90VGhpc01ldGhvZCgidW5h
YmxlIHRvIHJlYWQgX3ZlcnNpb24ucHkiKQogICAgbW8gPSByZS5zZWFyY2go
ciJ2ZXJzaW9uX2pzb24gPSAnJydcbiguKiknJycgICMgRU5EIFZFUlNJT05f
SlNPTiIsCiAgICAgICAgICAgICAgICAgICBjb250ZW50cywgcmUuTSB8IHJl
LlMpCiAgICBpZiBub3QgbW86CiAgICAgICAgbW8gPSByZS5zZWFyY2gociJ2
ZXJzaW9uX2pzb24gPSAnJydcclxuKC4qKScnJyAgIyBFTkQgVkVSU0lPTl9K
U09OIiwKICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cywgcmUuTSB8
IHJlLlMpCiAgICBpZiBub3QgbW86CiAgICAgICAgcmFpc2UgTm90VGhpc01l
dGhvZCgibm8gdmVyc2lvbl9qc29uIGluIF92ZXJzaW9uLnB5IikKICAgIHJl
dHVybiBqc29uLmxvYWRzKG1vLmdyb3VwKDEpKQoKCmRlZiB3cml0ZV90b192
ZXJzaW9uX2ZpbGUoZmlsZW5hbWU6IHN0ciwgdmVyc2lvbnM6IERpY3Rbc3Ry
LCBBbnldKSAtPiBOb25lOgogICAgIiIiV3JpdGUgdGhlIGdpdmVuIHZlcnNp
b24gbnVtYmVyIHRvIHRoZSBnaXZlbiBfdmVyc2lvbi5weSBmaWxlLiIiIgog
ICAgY29udGVudHMgPSBqc29uLmR1bXBzKHZlcnNpb25zLCBzb3J0X2tleXM9
VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ9MSwgc2Vw
YXJhdG9ycz0oIiwiLCAiOiAiKSkKICAgIHdpdGggb3BlbihmaWxlbmFtZSwg
InciKSBhcyBmOgogICAgICAgIGYud3JpdGUoU0hPUlRfVkVSU0lPTl9QWSAl
IGNvbnRlbnRzKQoKICAgIHByaW50KCJzZXQgJXMgdG8gJyVzJyIgJSAoZmls
ZW5hbWUsIHZlcnNpb25zWyJ2ZXJzaW9uIl0pKQoKCmRlZiBwbHVzX29yX2Rv
dChwaWVjZXM6IERpY3Rbc3RyLCBBbnldKSAtPiBzdHI6CiAgICAiIiJSZXR1
cm4gYSArIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUsIGVsc2UgcmV0
dXJuIGEgLiIiIgogICAgaWYgIisiIGluIHBpZWNlcy5nZXQoImNsb3Nlc3Qt
dGFnIiwgIiIpOgogICAgICAgIHJldHVybiAiLiIKICAgIHJldHVybiAiKyIK
CgpkZWYgcmVuZGVyX3BlcDQ0MChwaWVjZXM6IERpY3Rbc3RyLCBBbnldKSAt
PiBzdHI6CiAgICAiIiJCdWlsZCB1cCB2ZXJzaW9uIHN0cmluZywgd2l0aCBw
b3N0LXJlbGVhc2UgImxvY2FsIHZlcnNpb24gaWRlbnRpZmllciIuCgogICAg
T3VyIGdvYWw6IFRBR1srRElTVEFOQ0UuZ0hFWFsuZGlydHldXSAuIE5vdGUg
dGhhdCBpZiB5b3UKICAgIGdldCBhIHRhZ2dlZCBidWlsZCBhbmQgdGhlbiBk
aXJ0eSBpdCwgeW91J2xsIGdldCBUQUcrMC5nSEVYLmRpcnR5CgogICAgRXhj
ZXB0aW9uczoKICAgIDE6IG5vIHRhZ3MuIGdpdF9kZXNjcmliZSB3YXMganVz
dCBIRVguIDArdW50YWdnZWQuRElTVEFOQ0UuZ0hFWFsuZGlydHldCiAgICAi
IiIKICAgIGlmIHBpZWNlc1siY2xvc2VzdC10YWciXToKICAgICAgICByZW5k
ZXJlZCA9IHBpZWNlc1siY2xvc2VzdC10YWciXQogICAgICAgIGlmIHBpZWNl
c1siZGlzdGFuY2UiXSBvciBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgICAg
IHJlbmRlcmVkICs9IHBsdXNfb3JfZG90KHBpZWNlcykKICAgICAgICAgICAg
cmVuZGVyZWQgKz0gIiVkLmclcyIgJSAocGllY2VzWyJkaXN0YW5jZSJdLCBw
aWVjZXNbInNob3J0Il0pCiAgICAgICAgICAgIGlmIHBpZWNlc1siZGlydHki
XToKICAgICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAgICBl
bHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQg
PSAiMCt1bnRhZ2dlZC4lZC5nJXMiICUgKHBpZWNlc1siZGlzdGFuY2UiXSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGll
Y2VzWyJzaG9ydCJdKQogICAgICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAg
ICAgICAgICAgcmVuZGVyZWQgKz0gIi5kaXJ0eSIKICAgIHJldHVybiByZW5k
ZXJlZAoKCmRlZiByZW5kZXJfcGVwNDQwX2JyYW5jaChwaWVjZXM6IERpY3Rb
c3RyLCBBbnldKSAtPiBzdHI6CiAgICAiIiJUQUdbWy5kZXYwXStESVNUQU5D
RS5nSEVYWy5kaXJ0eV1dIC4KCiAgICBUaGUgIi5kZXYwIiBtZWFucyBub3Qg
bWFzdGVyIGJyYW5jaC4gTm90ZSB0aGF0IC5kZXYwIHNvcnRzIGJhY2t3YXJk
cwogICAgKGEgZmVhdHVyZSBicmFuY2ggd2lsbCBhcHBlYXIgIm9sZGVyIiB0
aGFuIHRoZSBtYXN0ZXIgYnJhbmNoKS4KCiAgICBFeGNlcHRpb25zOgogICAg
MTogbm8gdGFncy4gMFsuZGV2MF0rdW50YWdnZWQuRElTVEFOQ0UuZ0hFWFsu
ZGlydHldCiAgICAiIiIKICAgIGlmIHBpZWNlc1siY2xvc2VzdC10YWciXToK
ICAgICAgICByZW5kZXJlZCA9IHBpZWNlc1siY2xvc2VzdC10YWciXQogICAg
ICAgIGlmIHBpZWNlc1siZGlzdGFuY2UiXSBvciBwaWVjZXNbImRpcnR5Il06
CiAgICAgICAgICAgIGlmIHBpZWNlc1siYnJhbmNoIl0gIT0gIm1hc3RlciI6
CiAgICAgICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAg
ICAgIHJlbmRlcmVkICs9IHBsdXNfb3JfZG90KHBpZWNlcykKICAgICAgICAg
ICAgcmVuZGVyZWQgKz0gIiVkLmclcyIgJSAocGllY2VzWyJkaXN0YW5jZSJd
LCBwaWVjZXNbInNob3J0Il0pCiAgICAgICAgICAgIGlmIHBpZWNlc1siZGly
dHkiXToKICAgICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGlydHkiCiAg
ICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVy
ZWQgPSAiMCIKICAgICAgICBpZiBwaWVjZXNbImJyYW5jaCJdICE9ICJtYXN0
ZXIiOgogICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAg
cmVuZGVyZWQgKz0gIit1bnRhZ2dlZC4lZC5nJXMiICUgKHBpZWNlc1siZGlz
dGFuY2UiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGllY2VzWyJzaG9ydCJdKQogICAgICAgIGlmIHBpZWNlc1siZGly
dHkiXToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5kaXJ0eSIKICAgIHJl
dHVybiByZW5kZXJlZAoKCmRlZiBwZXA0NDBfc3BsaXRfcG9zdCh2ZXI6IHN0
cikgLT4gVHVwbGVbc3RyLCBPcHRpb25hbFtpbnRdXToKICAgICIiIlNwbGl0
IHBlcDQ0MCB2ZXJzaW9uIHN0cmluZyBhdCB0aGUgcG9zdC1yZWxlYXNlIHNl
Z21lbnQuCgogICAgUmV0dXJucyB0aGUgcmVsZWFzZSBzZWdtZW50cyBiZWZv
cmUgdGhlIHBvc3QtcmVsZWFzZSBhbmQgdGhlCiAgICBwb3N0LXJlbGVhc2Ug
dmVyc2lvbiBudW1iZXIgKG9yIC0xIGlmIG5vIHBvc3QtcmVsZWFzZSBzZWdt
ZW50IGlzIHByZXNlbnQpLgogICAgIiIiCiAgICB2YyA9IHN0ci5zcGxpdCh2
ZXIsICIucG9zdCIpCiAgICByZXR1cm4gdmNbMF0sIGludCh2Y1sxXSBvciAw
KSBpZiBsZW4odmMpID09IDIgZWxzZSBOb25lCgoKZGVmIHJlbmRlcl9wZXA0
NDBfcHJlKHBpZWNlczogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoKICAgICIi
IlRBR1sucG9zdE4uZGV2RElTVEFOQ0VdIC0tIE5vIC1kaXJ0eS4KCiAgICBF
eGNlcHRpb25zOgogICAgMTogbm8gdGFncy4gMC5wb3N0MC5kZXZESVNUQU5D
RQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNsb3Nlc3QtdGFnIl06CiAgICAg
ICAgaWYgcGllY2VzWyJkaXN0YW5jZSJdOgogICAgICAgICAgICAjIHVwZGF0
ZSB0aGUgcG9zdCByZWxlYXNlIHNlZ21lbnQKICAgICAgICAgICAgdGFnX3Zl
cnNpb24sIHBvc3RfdmVyc2lvbiA9IHBlcDQ0MF9zcGxpdF9wb3N0KHBpZWNl
c1siY2xvc2VzdC10YWciXSkKICAgICAgICAgICAgcmVuZGVyZWQgPSB0YWdf
dmVyc2lvbgogICAgICAgICAgICBpZiBwb3N0X3ZlcnNpb24gaXMgbm90IE5v
bmU6CiAgICAgICAgICAgICAgICByZW5kZXJlZCArPSAiLnBvc3QlZC5kZXYl
ZCIgJSAocG9zdF92ZXJzaW9uICsgMSwgcGllY2VzWyJkaXN0YW5jZSJdKQog
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmVuZGVyZWQgKz0g
Ii5wb3N0MC5kZXYlZCIgJSAocGllY2VzWyJkaXN0YW5jZSJdKQogICAgICAg
IGVsc2U6CiAgICAgICAgICAgICMgbm8gY29tbWl0cywgdXNlIHRoZSB0YWcg
YXMgdGhlIHZlcnNpb24KICAgICAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNb
ImNsb3Nlc3QtdGFnIl0KICAgIGVsc2U6CiAgICAgICAgIyBleGNlcHRpb24g
IzEKICAgICAgICByZW5kZXJlZCA9ICIwLnBvc3QwLmRldiVkIiAlIHBpZWNl
c1siZGlzdGFuY2UiXQogICAgcmV0dXJuIHJlbmRlcmVkCgoKZGVmIHJlbmRl
cl9wZXA0NDBfcG9zdChwaWVjZXM6IERpY3Rbc3RyLCBBbnldKSAtPiBzdHI6
CiAgICAiIiJUQUdbLnBvc3RESVNUQU5DRVsuZGV2MF0rZ0hFWF0gLgoKICAg
IFRoZSAiLmRldjAiIG1lYW5zIGRpcnR5LiBOb3RlIHRoYXQgLmRldjAgc29y
dHMgYmFja3dhcmRzCiAgICAoYSBkaXJ0eSB0cmVlIHdpbGwgYXBwZWFyICJv
bGRlciIgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBjbGVhbiBvbmUpLAogICAg
YnV0IHlvdSBzaG91bGRuJ3QgYmUgcmVsZWFzaW5nIHNvZnR3YXJlIHdpdGgg
LWRpcnR5IGFueXdheXMuCgogICAgRXhjZXB0aW9uczoKICAgIDE6IG5vIHRh
Z3MuIDAucG9zdERJU1RBTkNFWy5kZXYwXQogICAgIiIiCiAgICBpZiBwaWVj
ZXNbImNsb3Nlc3QtdGFnIl06CiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNb
ImNsb3Nlc3QtdGFnIl0KICAgICAgICBpZiBwaWVjZXNbImRpc3RhbmNlIl0g
b3IgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICByZW5kZXJlZCArPSAi
LnBvc3QlZCIgJSBwaWVjZXNbImRpc3RhbmNlIl0KICAgICAgICAgICAgaWYg
cGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICAgICAgcmVuZGVyZWQgKz0g
Ii5kZXYwIgogICAgICAgICAgICByZW5kZXJlZCArPSBwbHVzX29yX2RvdChw
aWVjZXMpCiAgICAgICAgICAgIHJlbmRlcmVkICs9ICJnJXMiICUgcGllY2Vz
WyJzaG9ydCJdCiAgICBlbHNlOgogICAgICAgICMgZXhjZXB0aW9uICMxCiAg
ICAgICAgcmVuZGVyZWQgPSAiMC5wb3N0JWQiICUgcGllY2VzWyJkaXN0YW5j
ZSJdCiAgICAgICAgaWYgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICBy
ZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAgcmVuZGVyZWQgKz0gIitnJXMi
ICUgcGllY2VzWyJzaG9ydCJdCiAgICByZXR1cm4gcmVuZGVyZWQKCgpkZWYg
cmVuZGVyX3BlcDQ0MF9wb3N0X2JyYW5jaChwaWVjZXM6IERpY3Rbc3RyLCBB
bnldKSAtPiBzdHI6CiAgICAiIiJUQUdbLnBvc3RESVNUQU5DRVsuZGV2MF0r
Z0hFWFsuZGlydHldXSAuCgogICAgVGhlICIuZGV2MCIgbWVhbnMgbm90IG1h
c3RlciBicmFuY2guCgogICAgRXhjZXB0aW9uczoKICAgIDE6IG5vIHRhZ3Mu
IDAucG9zdERJU1RBTkNFWy5kZXYwXStnSEVYWy5kaXJ0eV0KICAgICIiIgog
ICAgaWYgcGllY2VzWyJjbG9zZXN0LXRhZyJdOgogICAgICAgIHJlbmRlcmVk
ID0gcGllY2VzWyJjbG9zZXN0LXRhZyJdCiAgICAgICAgaWYgcGllY2VzWyJk
aXN0YW5jZSJdIG9yIHBpZWNlc1siZGlydHkiXToKICAgICAgICAgICAgcmVu
ZGVyZWQgKz0gIi5wb3N0JWQiICUgcGllY2VzWyJkaXN0YW5jZSJdCiAgICAg
ICAgICAgIGlmIHBpZWNlc1siYnJhbmNoIl0gIT0gIm1hc3RlciI6CiAgICAg
ICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAgICAgIHJl
bmRlcmVkICs9IHBsdXNfb3JfZG90KHBpZWNlcykKICAgICAgICAgICAgcmVu
ZGVyZWQgKz0gImclcyIgJSBwaWVjZXNbInNob3J0Il0KICAgICAgICAgICAg
aWYgcGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICAgICAgcmVuZGVyZWQg
Kz0gIi5kaXJ0eSIKICAgIGVsc2U6CiAgICAgICAgIyBleGNlcHRpb24gIzEK
ICAgICAgICByZW5kZXJlZCA9ICIwLnBvc3QlZCIgJSBwaWVjZXNbImRpc3Rh
bmNlIl0KICAgICAgICBpZiBwaWVjZXNbImJyYW5jaCJdICE9ICJtYXN0ZXIi
OgogICAgICAgICAgICByZW5kZXJlZCArPSAiLmRldjAiCiAgICAgICAgcmVu
ZGVyZWQgKz0gIitnJXMiICUgcGllY2VzWyJzaG9ydCJdCiAgICAgICAgaWYg
cGllY2VzWyJkaXJ0eSJdOgogICAgICAgICAgICByZW5kZXJlZCArPSAiLmRp
cnR5IgogICAgcmV0dXJuIHJlbmRlcmVkCgoKZGVmIHJlbmRlcl9wZXA0NDBf
b2xkKHBpZWNlczogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoKICAgICIiIlRB
R1sucG9zdERJU1RBTkNFWy5kZXYwXV0gLgoKICAgIFRoZSAiLmRldjAiIG1l
YW5zIGRpcnR5LgoKICAgIEV4Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdzLiAw
LnBvc3RESVNUQU5DRVsuZGV2MF0KICAgICIiIgogICAgaWYgcGllY2VzWyJj
bG9zZXN0LXRhZyJdOgogICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJjbG9z
ZXN0LXRhZyJdCiAgICAgICAgaWYgcGllY2VzWyJkaXN0YW5jZSJdIG9yIHBp
ZWNlc1siZGlydHkiXToKICAgICAgICAgICAgcmVuZGVyZWQgKz0gIi5wb3N0
JWQiICUgcGllY2VzWyJkaXN0YW5jZSJdCiAgICAgICAgICAgIGlmIHBpZWNl
c1siZGlydHkiXToKICAgICAgICAgICAgICAgIHJlbmRlcmVkICs9ICIuZGV2
MCIKICAgIGVsc2U6CiAgICAgICAgIyBleGNlcHRpb24gIzEKICAgICAgICBy
ZW5kZXJlZCA9ICIwLnBvc3QlZCIgJSBwaWVjZXNbImRpc3RhbmNlIl0KICAg
ICAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgICAgIHJlbmRlcmVk
ICs9ICIuZGV2MCIKICAgIHJldHVybiByZW5kZXJlZAoKCmRlZiByZW5kZXJf
Z2l0X2Rlc2NyaWJlKHBpZWNlczogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoK
ICAgICIiIlRBR1stRElTVEFOQ0UtZ0hFWF1bLWRpcnR5XS4KCiAgICBMaWtl
ICdnaXQgZGVzY3JpYmUgLS10YWdzIC0tZGlydHkgLS1hbHdheXMnLgoKICAg
IEV4Y2VwdGlvbnM6CiAgICAxOiBubyB0YWdzLiBIRVhbLWRpcnR5XSAgKG5v
dGU6IG5vICdnJyBwcmVmaXgpCiAgICAiIiIKICAgIGlmIHBpZWNlc1siY2xv
c2VzdC10YWciXToKICAgICAgICByZW5kZXJlZCA9IHBpZWNlc1siY2xvc2Vz
dC10YWciXQogICAgICAgIGlmIHBpZWNlc1siZGlzdGFuY2UiXToKICAgICAg
ICAgICAgcmVuZGVyZWQgKz0gIi0lZC1nJXMiICUgKHBpZWNlc1siZGlzdGFu
Y2UiXSwgcGllY2VzWyJzaG9ydCJdKQogICAgZWxzZToKICAgICAgICAjIGV4
Y2VwdGlvbiAjMQogICAgICAgIHJlbmRlcmVkID0gcGllY2VzWyJzaG9ydCJd
CiAgICBpZiBwaWVjZXNbImRpcnR5Il06CiAgICAgICAgcmVuZGVyZWQgKz0g
Ii1kaXJ0eSIKICAgIHJldHVybiByZW5kZXJlZAoKCmRlZiByZW5kZXJfZ2l0
X2Rlc2NyaWJlX2xvbmcocGllY2VzOiBEaWN0W3N0ciwgQW55XSkgLT4gc3Ry
OgogICAgIiIiVEFHLURJU1RBTkNFLWdIRVhbLWRpcnR5XS4KCiAgICBMaWtl
ICdnaXQgZGVzY3JpYmUgLS10YWdzIC0tZGlydHkgLS1hbHdheXMgLWxvbmcn
LgogICAgVGhlIGRpc3RhbmNlL2hhc2ggaXMgdW5jb25kaXRpb25hbC4KCiAg
ICBFeGNlcHRpb25zOgogICAgMTogbm8gdGFncy4gSEVYWy1kaXJ0eV0gIChu
b3RlOiBubyAnZycgcHJlZml4KQogICAgIiIiCiAgICBpZiBwaWVjZXNbImNs
b3Nlc3QtdGFnIl06CiAgICAgICAgcmVuZGVyZWQgPSBwaWVjZXNbImNsb3Nl
c3QtdGFnIl0KICAgICAgICByZW5kZXJlZCArPSAiLSVkLWclcyIgJSAocGll
Y2VzWyJkaXN0YW5jZSJdLCBwaWVjZXNbInNob3J0Il0pCiAgICBlbHNlOgog
ICAgICAgICMgZXhjZXB0aW9uICMxCiAgICAgICAgcmVuZGVyZWQgPSBwaWVj
ZXNbInNob3J0Il0KICAgIGlmIHBpZWNlc1siZGlydHkiXToKICAgICAgICBy
ZW5kZXJlZCArPSAiLWRpcnR5IgogICAgcmV0dXJuIHJlbmRlcmVkCgoKZGVm
IHJlbmRlcihwaWVjZXM6IERpY3Rbc3RyLCBBbnldLCBzdHlsZTogc3RyKSAt
PiBEaWN0W3N0ciwgQW55XToKICAgICIiIlJlbmRlciB0aGUgZ2l2ZW4gdmVy
c2lvbiBwaWVjZXMgaW50byB0aGUgcmVxdWVzdGVkIHN0eWxlLiIiIgogICAg
aWYgcGllY2VzWyJlcnJvciJdOgogICAgICAgIHJldHVybiB7InZlcnNpb24i
OiAidW5rbm93biIsCiAgICAgICAgICAgICAgICAiZnVsbC1yZXZpc2lvbmlk
IjogcGllY2VzLmdldCgibG9uZyIpLAogICAgICAgICAgICAgICAgImRpcnR5
IjogTm9uZSwKICAgICAgICAgICAgICAgICJlcnJvciI6IHBpZWNlc1siZXJy
b3IiXSwKICAgICAgICAgICAgICAgICJkYXRlIjogTm9uZX0KCiAgICBpZiBu
b3Qgc3R5bGUgb3Igc3R5bGUgPT0gImRlZmF1bHQiOgogICAgICAgIHN0eWxl
ID0gInBlcDQ0MCIgICMgdGhlIGRlZmF1bHQKCiAgICBpZiBzdHlsZSA9PSAi
cGVwNDQwIjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDAocGll
Y2VzKQogICAgZWxpZiBzdHlsZSA9PSAicGVwNDQwLWJyYW5jaCI6CiAgICAg
ICAgcmVuZGVyZWQgPSByZW5kZXJfcGVwNDQwX2JyYW5jaChwaWVjZXMpCiAg
ICBlbGlmIHN0eWxlID09ICJwZXA0NDAtcHJlIjoKICAgICAgICByZW5kZXJl
ZCA9IHJlbmRlcl9wZXA0NDBfcHJlKHBpZWNlcykKICAgIGVsaWYgc3R5bGUg
PT0gInBlcDQ0MC1wb3N0IjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9w
ZXA0NDBfcG9zdChwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJwZXA0NDAt
cG9zdC1icmFuY2giOgogICAgICAgIHJlbmRlcmVkID0gcmVuZGVyX3BlcDQ0
MF9wb3N0X2JyYW5jaChwaWVjZXMpCiAgICBlbGlmIHN0eWxlID09ICJwZXA0
NDAtb2xkIjoKICAgICAgICByZW5kZXJlZCA9IHJlbmRlcl9wZXA0NDBfb2xk
KHBpZWNlcykKICAgIGVsaWYgc3R5bGUgPT0gImdpdC1kZXNjcmliZSI6CiAg
ICAgICAgcmVuZGVyZWQgPSByZW5kZXJfZ2l0X2Rlc2NyaWJlKHBpZWNlcykK
ICAgIGVsaWYgc3R5bGUgPT0gImdpdC1kZXNjcmliZS1sb25nIjoKICAgICAg
ICByZW5kZXJlZCA9IHJlbmRlcl9naXRfZGVzY3JpYmVfbG9uZyhwaWVjZXMp
CiAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24g
c3R5bGUgJyVzJyIgJSBzdHlsZSkKCiAgICByZXR1cm4geyJ2ZXJzaW9uIjog
cmVuZGVyZWQsICJmdWxsLXJldmlzaW9uaWQiOiBwaWVjZXNbImxvbmciXSwK
ICAgICAgICAgICAgImRpcnR5IjogcGllY2VzWyJkaXJ0eSJdLCAiZXJyb3Ii
OiBOb25lLAogICAgICAgICAgICAiZGF0ZSI6IHBpZWNlcy5nZXQoImRhdGUi
KX0KCgpjbGFzcyBWZXJzaW9uZWVyQmFkUm9vdEVycm9yKEV4Y2VwdGlvbik6
CiAgICAiIiJUaGUgcHJvamVjdCByb290IGRpcmVjdG9yeSBpcyB1bmtub3du
IG9yIG1pc3Npbmcga2V5IGZpbGVzLiIiIgoKCmRlZiBnZXRfdmVyc2lvbnMo
dmVyYm9zZTogYm9vbCA9IEZhbHNlKSAtPiBEaWN0W3N0ciwgQW55XToKICAg
ICIiIkdldCB0aGUgcHJvamVjdCB2ZXJzaW9uIGZyb20gd2hhdGV2ZXIgc291
cmNlIGlzIGF2YWlsYWJsZS4KCiAgICBSZXR1cm5zIGRpY3Qgd2l0aCB0d28g
a2V5czogJ3ZlcnNpb24nIGFuZCAnZnVsbCcuCiAgICAiIiIKICAgIGlmICJ2
ZXJzaW9uZWVyIiBpbiBzeXMubW9kdWxlczoKICAgICAgICAjIHNlZSB0aGUg
ZGlzY3Vzc2lvbiBpbiBjbWRjbGFzcy5weTpnZXRfY21kY2xhc3MoKQogICAg
ICAgIGRlbCBzeXMubW9kdWxlc1sidmVyc2lvbmVlciJdCgogICAgcm9vdCA9
IGdldF9yb290KCkKICAgIGNmZyA9IGdldF9jb25maWdfZnJvbV9yb290KHJv
b3QpCgogICAgYXNzZXJ0IGNmZy5WQ1MgaXMgbm90IE5vbmUsICJwbGVhc2Ug
c2V0IFt2ZXJzaW9uZWVyXVZDUz0gaW4gc2V0dXAuY2ZnIgogICAgaGFuZGxl
cnMgPSBIQU5ETEVSUy5nZXQoY2ZnLlZDUykKICAgIGFzc2VydCBoYW5kbGVy
cywgInVucmVjb2duaXplZCBWQ1MgJyVzJyIgJSBjZmcuVkNTCiAgICB2ZXJi
b3NlID0gdmVyYm9zZSBvciBib29sKGNmZy52ZXJib3NlKSAgIyBgYm9vbCgp
YCB1c2VkIHRvIGF2b2lkIGBOb25lYAogICAgYXNzZXJ0IGNmZy52ZXJzaW9u
ZmlsZV9zb3VyY2UgaXMgbm90IE5vbmUsIFwKICAgICAgICAicGxlYXNlIHNl
dCB2ZXJzaW9uZWVyLnZlcnNpb25maWxlX3NvdXJjZSIKICAgIGFzc2VydCBj
ZmcudGFnX3ByZWZpeCBpcyBub3QgTm9uZSwgInBsZWFzZSBzZXQgdmVyc2lv
bmVlci50YWdfcHJlZml4IgoKICAgIHZlcnNpb25maWxlX2FicyA9IG9zLnBh
dGguam9pbihyb290LCBjZmcudmVyc2lvbmZpbGVfc291cmNlKQoKICAgICMg
ZXh0cmFjdCB2ZXJzaW9uIGZyb20gZmlyc3Qgb2Y6IF92ZXJzaW9uLnB5LCBW
Q1MgY29tbWFuZCAoZS5nLiAnZ2l0CiAgICAjIGRlc2NyaWJlJyksIHBhcmVu
dGRpci4gVGhpcyBpcyBtZWFudCB0byB3b3JrIGZvciBkZXZlbG9wZXJzIHVz
aW5nIGEKICAgICMgc291cmNlIGNoZWNrb3V0LCBmb3IgdXNlcnMgb2YgYSB0
YXJiYWxsIGNyZWF0ZWQgYnkgJ3NldHVwLnB5IHNkaXN0JywKICAgICMgYW5k
IGZvciB1c2VycyBvZiBhIHRhcmJhbGwvemlwYmFsbCBjcmVhdGVkIGJ5ICdn
aXQgYXJjaGl2ZScgb3IgZ2l0aHViJ3MKICAgICMgZG93bmxvYWQtZnJvbS10
YWcgZmVhdHVyZSBvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBWQ1Nlcy4K
CiAgICBnZXRfa2V5d29yZHNfZiA9IGhhbmRsZXJzLmdldCgiZ2V0X2tleXdv
cmRzIikKICAgIGZyb21fa2V5d29yZHNfZiA9IGhhbmRsZXJzLmdldCgia2V5
d29yZHMiKQogICAgaWYgZ2V0X2tleXdvcmRzX2YgYW5kIGZyb21fa2V5d29y
ZHNfZjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGtleXdvcmRzID0gZ2V0
X2tleXdvcmRzX2YodmVyc2lvbmZpbGVfYWJzKQogICAgICAgICAgICB2ZXIg
PSBmcm9tX2tleXdvcmRzX2Yoa2V5d29yZHMsIGNmZy50YWdfcHJlZml4LCB2
ZXJib3NlKQogICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAg
ICAgcHJpbnQoImdvdCB2ZXJzaW9uIGZyb20gZXhwYW5kZWQga2V5d29yZCAl
cyIgJSB2ZXIpCiAgICAgICAgICAgIHJldHVybiB2ZXIKICAgICAgICBleGNl
cHQgTm90VGhpc01ldGhvZDoKICAgICAgICAgICAgcGFzcwoKICAgIHRyeToK
ICAgICAgICB2ZXIgPSB2ZXJzaW9uc19mcm9tX2ZpbGUodmVyc2lvbmZpbGVf
YWJzKQogICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJn
b3QgdmVyc2lvbiBmcm9tIGZpbGUgJXMgJXMiICUgKHZlcnNpb25maWxlX2Fi
cywgdmVyKSkKICAgICAgICByZXR1cm4gdmVyCiAgICBleGNlcHQgTm90VGhp
c01ldGhvZDoKICAgICAgICBwYXNzCgogICAgZnJvbV92Y3NfZiA9IGhhbmRs
ZXJzLmdldCgicGllY2VzX2Zyb21fdmNzIikKICAgIGlmIGZyb21fdmNzX2Y6
CiAgICAgICAgdHJ5OgogICAgICAgICAgICBwaWVjZXMgPSBmcm9tX3Zjc19m
KGNmZy50YWdfcHJlZml4LCByb290LCB2ZXJib3NlKQogICAgICAgICAgICB2
ZXIgPSByZW5kZXIocGllY2VzLCBjZmcuc3R5bGUpCiAgICAgICAgICAgIGlm
IHZlcmJvc2U6CiAgICAgICAgICAgICAgICBwcmludCgiZ290IHZlcnNpb24g
ZnJvbSBWQ1MgJXMiICUgdmVyKQogICAgICAgICAgICByZXR1cm4gdmVyCiAg
ICAgICAgZXhjZXB0IE5vdFRoaXNNZXRob2Q6CiAgICAgICAgICAgIHBhc3MK
CiAgICB0cnk6CiAgICAgICAgaWYgY2ZnLnBhcmVudGRpcl9wcmVmaXg6CiAg
ICAgICAgICAgIHZlciA9IHZlcnNpb25zX2Zyb21fcGFyZW50ZGlyKGNmZy5w
YXJlbnRkaXJfcHJlZml4LCByb290LCB2ZXJib3NlKQogICAgICAgICAgICBp
ZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgcHJpbnQoImdvdCB2ZXJzaW9u
IGZyb20gcGFyZW50ZGlyICVzIiAlIHZlcikKICAgICAgICAgICAgcmV0dXJu
IHZlcgogICAgZXhjZXB0IE5vdFRoaXNNZXRob2Q6CiAgICAgICAgcGFzcwoK
ICAgIGlmIHZlcmJvc2U6CiAgICAgICAgcHJpbnQoInVuYWJsZSB0byBjb21w
dXRlIHZlcnNpb24iKQoKICAgIHJldHVybiB7InZlcnNpb24iOiAiMCt1bmtu
b3duIiwgImZ1bGwtcmV2aXNpb25pZCI6IE5vbmUsCiAgICAgICAgICAgICJk
aXJ0eSI6IE5vbmUsICJlcnJvciI6ICJ1bmFibGUgdG8gY29tcHV0ZSB2ZXJz
aW9uIiwKICAgICAgICAgICAgImRhdGUiOiBOb25lfQoKCmRlZiBnZXRfdmVy
c2lvbigpIC0+IHN0cjoKICAgICIiIkdldCB0aGUgc2hvcnQgdmVyc2lvbiBz
dHJpbmcgZm9yIHRoaXMgcHJvamVjdC4iIiIKICAgIHJldHVybiBnZXRfdmVy
c2lvbnMoKVsidmVyc2lvbiJdCgoKZGVmIGdldF9jbWRjbGFzcyhjbWRjbGFz
czogT3B0aW9uYWxbRGljdFtzdHIsIEFueV1dID0gTm9uZSk6CiAgICAiIiJH
ZXQgdGhlIGN1c3RvbSBzZXR1cHRvb2xzIHN1YmNsYXNzZXMgdXNlZCBieSBW
ZXJzaW9uZWVyLgoKICAgIElmIHRoZSBwYWNrYWdlIHVzZXMgYSBkaWZmZXJl
bnQgY21kY2xhc3MgKGUuZy4gb25lIGZyb20gbnVtcHkpLCBpdAogICAgc2hv
dWxkIGJlIHByb3ZpZGUgYXMgYW4gYXJndW1lbnQuCiAgICAiIiIKICAgIGlm
ICJ2ZXJzaW9uZWVyIiBpbiBzeXMubW9kdWxlczoKICAgICAgICBkZWwgc3lz
Lm1vZHVsZXNbInZlcnNpb25lZXIiXQogICAgICAgICMgdGhpcyBmaXhlcyB0
aGUgInB5dGhvbiBzZXR1cC5weSBkZXZlbG9wIiBjYXNlIChhbHNvICdpbnN0
YWxsJyBhbmQKICAgICAgICAjICdlYXN5X2luc3RhbGwgLicpLCBpbiB3aGlj
aCBzdWJkZXBlbmRlbmNpZXMgb2YgdGhlIG1haW4gcHJvamVjdCBhcmUKICAg
ICAgICAjIGJ1aWx0ICh1c2luZyBzZXR1cC5weSBiZGlzdF9lZ2cpIGluIHRo
ZSBzYW1lIHB5dGhvbiBwcm9jZXNzLiBBc3N1bWUKICAgICAgICAjIGEgbWFp
biBwcm9qZWN0IEEgYW5kIGEgZGVwZW5kZW5jeSBCLCB3aGljaCB1c2UgZGlm
ZmVyZW50IHZlcnNpb25zCiAgICAgICAgIyBvZiBWZXJzaW9uZWVyLiBBJ3Mg
c2V0dXAucHkgaW1wb3J0cyBBJ3MgVmVyc2lvbmVlciwgbGVhdmluZyBpdCBp
bgogICAgICAgICMgc3lzLm1vZHVsZXMgYnkgdGhlIHRpbWUgQidzIHNldHVw
LnB5IGlzIGV4ZWN1dGVkLCBjYXVzaW5nIEIgdG8gcnVuCiAgICAgICAgIyB3
aXRoIHRoZSB3cm9uZyB2ZXJzaW9uZWVyLiBTZXR1cHRvb2xzIHdyYXBzIHRo
ZSBzdWItZGVwIGJ1aWxkcyBpbiBhCiAgICAgICAgIyBzYW5kYm94IHRoYXQg
cmVzdG9yZXMgc3lzLm1vZHVsZXMgdG8gaXQncyBwcmUtYnVpbGQgc3RhdGUs
IHNvIHRoZQogICAgICAgICMgcGFyZW50IGlzIHByb3RlY3RlZCBhZ2FpbnN0
IHRoZSBjaGlsZCdzICJpbXBvcnQgdmVyc2lvbmVlciIuIEJ5CiAgICAgICAg
IyByZW1vdmluZyBvdXJzZWx2ZXMgZnJvbSBzeXMubW9kdWxlcyBoZXJlLCBi
ZWZvcmUgdGhlIGNoaWxkIGJ1aWxkCiAgICAgICAgIyBoYXBwZW5zLCB3ZSBw
cm90ZWN0IHRoZSBjaGlsZCBmcm9tIHRoZSBwYXJlbnQncyB2ZXJzaW9uZWVy
IHRvby4KICAgICAgICAjIEFsc28gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9w
eXRob24tdmVyc2lvbmVlci9weXRob24tdmVyc2lvbmVlci9pc3N1ZXMvNTIK
CiAgICBjbWRzID0ge30gaWYgY21kY2xhc3MgaXMgTm9uZSBlbHNlIGNtZGNs
YXNzLmNvcHkoKQoKICAgICMgd2UgYWRkICJ2ZXJzaW9uIiB0byBzZXR1cHRv
b2xzCiAgICBmcm9tIHNldHVwdG9vbHMgaW1wb3J0IENvbW1hbmQKCiAgICBj
bGFzcyBjbWRfdmVyc2lvbihDb21tYW5kKToKICAgICAgICBkZXNjcmlwdGlv
biA9ICJyZXBvcnQgZ2VuZXJhdGVkIHZlcnNpb24gc3RyaW5nIgogICAgICAg
IHVzZXJfb3B0aW9uczogTGlzdFtUdXBsZVtzdHIsIHN0ciwgc3RyXV0gPSBb
XQogICAgICAgIGJvb2xlYW5fb3B0aW9uczogTGlzdFtzdHJdID0gW10KCiAg
ICAgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKSAtPiBOb25lOgog
ICAgICAgICAgICBwYXNzCgogICAgICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25z
KHNlbGYpIC0+IE5vbmU6CiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgZGVm
IHJ1bihzZWxmKSAtPiBOb25lOgogICAgICAgICAgICB2ZXJzID0gZ2V0X3Zl
cnNpb25zKHZlcmJvc2U9VHJ1ZSkKICAgICAgICAgICAgcHJpbnQoIlZlcnNp
b246ICVzIiAlIHZlcnNbInZlcnNpb24iXSkKICAgICAgICAgICAgcHJpbnQo
IiBmdWxsLXJldmlzaW9uaWQ6ICVzIiAlIHZlcnMuZ2V0KCJmdWxsLXJldmlz
aW9uaWQiKSkKICAgICAgICAgICAgcHJpbnQoIiBkaXJ0eTogJXMiICUgdmVy
cy5nZXQoImRpcnR5IikpCiAgICAgICAgICAgIHByaW50KCIgZGF0ZTogJXMi
ICUgdmVycy5nZXQoImRhdGUiKSkKICAgICAgICAgICAgaWYgdmVyc1siZXJy
b3IiXToKICAgICAgICAgICAgICAgIHByaW50KCIgZXJyb3I6ICVzIiAlIHZl
cnNbImVycm9yIl0pCiAgICBjbWRzWyJ2ZXJzaW9uIl0gPSBjbWRfdmVyc2lv
bgoKICAgICMgd2Ugb3ZlcnJpZGUgImJ1aWxkX3B5IiBpbiBzZXR1cHRvb2xz
CiAgICAjCiAgICAjIG1vc3QgaW52b2NhdGlvbiBwYXRod2F5cyBlbmQgdXAg
cnVubmluZyBidWlsZF9weToKICAgICMgIGRpc3R1dGlscy9idWlsZCAtPiBi
dWlsZF9weQogICAgIyAgZGlzdHV0aWxzL2luc3RhbGwgLT4gZGlzdHV0aWxz
L2J1aWxkIC0+Li4KICAgICMgIHNldHVwdG9vbHMvYmRpc3Rfd2hlZWwgLT4g
ZGlzdHV0aWxzL2luc3RhbGwgLT4uLgogICAgIyAgc2V0dXB0b29scy9iZGlz
dF9lZ2cgLT4gZGlzdHV0aWxzL2luc3RhbGxfbGliIC0+IGJ1aWxkX3B5CiAg
ICAjICBzZXR1cHRvb2xzL2luc3RhbGwgLT4gYmRpc3RfZWdnIC0+Li4KICAg
ICMgIHNldHVwdG9vbHMvZGV2ZWxvcCAtPiA/CiAgICAjICBwaXAgaW5zdGFs
bDoKICAgICMgICBjb3BpZXMgc291cmNlIHRyZWUgdG8gYSB0ZW1wZGlyIGJl
Zm9yZSBydW5uaW5nIGVnZ19pbmZvL2V0YwogICAgIyAgIGlmIC5naXQgaXNu
J3QgY29waWVkIHRvbywgJ2dpdCBkZXNjcmliZScgd2lsbCBmYWlsCiAgICAj
ICAgdGhlbiBkb2VzIHNldHVwLnB5IGJkaXN0X3doZWVsLCBvciBzb21ldGlt
ZXMgc2V0dXAucHkgaW5zdGFsbAogICAgIyAgc2V0dXAucHkgZWdnX2luZm8g
LT4gPwoKICAgICMgcGlwIGluc3RhbGwgLWUgLiBhbmQgc2V0dXB0b29sL2Vk
aXRhYmxlX3doZWVsIHdpbGwgaW52b2tlIGJ1aWxkX3B5CiAgICAjIGJ1dCB0
aGUgYnVpbGRfcHkgY29tbWFuZCBpcyBub3QgZXhwZWN0ZWQgdG8gY29weSBh
bnkgZmlsZXMuCgogICAgIyB3ZSBvdmVycmlkZSBkaWZmZXJlbnQgImJ1aWxk
X3B5IiBjb21tYW5kcyBmb3IgYm90aCBlbnZpcm9ubWVudHMKICAgIGlmICdi
dWlsZF9weScgaW4gY21kczoKICAgICAgICBfYnVpbGRfcHk6IEFueSA9IGNt
ZHNbJ2J1aWxkX3B5J10KICAgIGVsc2U6CiAgICAgICAgZnJvbSBzZXR1cHRv
b2xzLmNvbW1hbmQuYnVpbGRfcHkgaW1wb3J0IGJ1aWxkX3B5IGFzIF9idWls
ZF9weQoKICAgIGNsYXNzIGNtZF9idWlsZF9weShfYnVpbGRfcHkpOgogICAg
ICAgIGRlZiBydW4oc2VsZikgLT4gTm9uZToKICAgICAgICAgICAgcm9vdCA9
IGdldF9yb290KCkKICAgICAgICAgICAgY2ZnID0gZ2V0X2NvbmZpZ19mcm9t
X3Jvb3Qocm9vdCkKICAgICAgICAgICAgdmVyc2lvbnMgPSBnZXRfdmVyc2lv
bnMoKQogICAgICAgICAgICBfYnVpbGRfcHkucnVuKHNlbGYpCiAgICAgICAg
ICAgIGlmIGdldGF0dHIoc2VsZiwgImVkaXRhYmxlX21vZGUiLCBGYWxzZSk6
CiAgICAgICAgICAgICAgICAjIER1cmluZyBlZGl0YWJsZSBpbnN0YWxscyBg
LnB5YCBhbmQgZGF0YSBmaWxlcyBhcmUKICAgICAgICAgICAgICAgICMgbm90
IGNvcGllZCB0byBidWlsZF9saWIKICAgICAgICAgICAgICAgIHJldHVybgog
ICAgICAgICAgICAjIG5vdyBsb2NhdGUgX3ZlcnNpb24ucHkgaW4gdGhlIG5l
dyBidWlsZC8gZGlyZWN0b3J5IGFuZCByZXBsYWNlCiAgICAgICAgICAgICMg
aXQgd2l0aCBhbiB1cGRhdGVkIHZhbHVlCiAgICAgICAgICAgIGlmIGNmZy52
ZXJzaW9uZmlsZV9idWlsZDoKICAgICAgICAgICAgICAgIHRhcmdldF92ZXJz
aW9uZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2xpYiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
ZmcudmVyc2lvbmZpbGVfYnVpbGQpCiAgICAgICAgICAgICAgICBwcmludCgi
VVBEQVRJTkcgJXMiICUgdGFyZ2V0X3ZlcnNpb25maWxlKQogICAgICAgICAg
ICAgICAgd3JpdGVfdG9fdmVyc2lvbl9maWxlKHRhcmdldF92ZXJzaW9uZmls
ZSwgdmVyc2lvbnMpCiAgICBjbWRzWyJidWlsZF9weSJdID0gY21kX2J1aWxk
X3B5CgogICAgaWYgJ2J1aWxkX2V4dCcgaW4gY21kczoKICAgICAgICBfYnVp
bGRfZXh0OiBBbnkgPSBjbWRzWydidWlsZF9leHQnXQogICAgZWxzZToKICAg
ICAgICBmcm9tIHNldHVwdG9vbHMuY29tbWFuZC5idWlsZF9leHQgaW1wb3J0
IGJ1aWxkX2V4dCBhcyBfYnVpbGRfZXh0CgogICAgY2xhc3MgY21kX2J1aWxk
X2V4dChfYnVpbGRfZXh0KToKICAgICAgICBkZWYgcnVuKHNlbGYpIC0+IE5v
bmU6CiAgICAgICAgICAgIHJvb3QgPSBnZXRfcm9vdCgpCiAgICAgICAgICAg
IGNmZyA9IGdldF9jb25maWdfZnJvbV9yb290KHJvb3QpCiAgICAgICAgICAg
IHZlcnNpb25zID0gZ2V0X3ZlcnNpb25zKCkKICAgICAgICAgICAgX2J1aWxk
X2V4dC5ydW4oc2VsZikKICAgICAgICAgICAgaWYgc2VsZi5pbnBsYWNlOgog
ICAgICAgICAgICAgICAgIyBidWlsZF9leHQgLS1pbnBsYWNlIHdpbGwgb25s
eSBidWlsZCBleHRlbnNpb25zIGluCiAgICAgICAgICAgICAgICAjIGJ1aWxk
L2xpYjwuLj4gZGlyIHdpdGggbm8gX3ZlcnNpb24ucHkgdG8gd3JpdGUgdG8u
CiAgICAgICAgICAgICAgICAjIEFzIGluIHBsYWNlIGJ1aWxkcyB3aWxsIGFs
cmVhZHkgaGF2ZSBhIF92ZXJzaW9uLnB5CiAgICAgICAgICAgICAgICAjIGlu
IHRoZSBtb2R1bGUgZGlyLCB3ZSBkbyBub3QgbmVlZCB0byB3cml0ZSBvbmUu
CiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIyBub3cgbG9j
YXRlIF92ZXJzaW9uLnB5IGluIHRoZSBuZXcgYnVpbGQvIGRpcmVjdG9yeSBh
bmQgcmVwbGFjZQogICAgICAgICAgICAjIGl0IHdpdGggYW4gdXBkYXRlZCB2
YWx1ZQogICAgICAgICAgICBpZiBub3QgY2ZnLnZlcnNpb25maWxlX2J1aWxk
OgogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIHRhcmdldF92
ZXJzaW9uZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2xpYiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNm
Zy52ZXJzaW9uZmlsZV9idWlsZCkKICAgICAgICAgICAgaWYgbm90IG9zLnBh
dGguZXhpc3RzKHRhcmdldF92ZXJzaW9uZmlsZSk6CiAgICAgICAgICAgICAg
ICBwcmludChmIldhcm5pbmc6IHt0YXJnZXRfdmVyc2lvbmZpbGV9IGRvZXMg
bm90IGV4aXN0LCBza2lwcGluZyAiCiAgICAgICAgICAgICAgICAgICAgICAi
dmVyc2lvbiB1cGRhdGUuIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgYXJlIHJ1
bm5pbmcgYnVpbGRfZXh0ICIKICAgICAgICAgICAgICAgICAgICAgICJ3aXRo
b3V0IGZpcnN0IHJ1bm5pbmcgYnVpbGRfcHkuIikKICAgICAgICAgICAgICAg
IHJldHVybgogICAgICAgICAgICBwcmludCgiVVBEQVRJTkcgJXMiICUgdGFy
Z2V0X3ZlcnNpb25maWxlKQogICAgICAgICAgICB3cml0ZV90b192ZXJzaW9u
X2ZpbGUodGFyZ2V0X3ZlcnNpb25maWxlLCB2ZXJzaW9ucykKICAgIGNtZHNb
ImJ1aWxkX2V4dCJdID0gY21kX2J1aWxkX2V4dAoKICAgIGlmICJjeF9GcmVl
emUiIGluIHN5cy5tb2R1bGVzOiAgIyBjeF9mcmVlemUgZW5hYmxlZD8KICAg
ICAgICBmcm9tIGN4X0ZyZWV6ZS5kaXN0IGltcG9ydCBidWlsZF9leGUgYXMg
X2J1aWxkX2V4ZSAgIyB0eXBlOiBpZ25vcmUKICAgICAgICAjIG5jemVjenVs
aW4gcmVwb3J0cyB0aGF0IHB5MmV4ZSB3b24ndCBsaWtlIHRoZSBwZXA0NDAt
c3R5bGUgc3RyaW5nCiAgICAgICAgIyBhcyBGSUxFVkVSU0lPTiwgYnV0IGl0
IGNhbiBiZSB1c2VkIGZvciBQUk9EVUNUVkVSU0lPTiwgZS5nLgogICAgICAg
ICMgc2V0dXAoY29uc29sZT1bewogICAgICAgICMgICAidmVyc2lvbiI6IHZl
cnNpb25lZXIuZ2V0X3ZlcnNpb24oKS5zcGxpdCgiKyIsIDEpWzBdLCAjIEZJ
TEVWRVJTSU9OCiAgICAgICAgIyAgICJwcm9kdWN0X3ZlcnNpb24iOiB2ZXJz
aW9uZWVyLmdldF92ZXJzaW9uKCksCiAgICAgICAgIyAgIC4uLgoKICAgICAg
ICBjbGFzcyBjbWRfYnVpbGRfZXhlKF9idWlsZF9leGUpOgogICAgICAgICAg
ICBkZWYgcnVuKHNlbGYpIC0+IE5vbmU6CiAgICAgICAgICAgICAgICByb290
ID0gZ2V0X3Jvb3QoKQogICAgICAgICAgICAgICAgY2ZnID0gZ2V0X2NvbmZp
Z19mcm9tX3Jvb3Qocm9vdCkKICAgICAgICAgICAgICAgIHZlcnNpb25zID0g
Z2V0X3ZlcnNpb25zKCkKICAgICAgICAgICAgICAgIHRhcmdldF92ZXJzaW9u
ZmlsZSA9IGNmZy52ZXJzaW9uZmlsZV9zb3VyY2UKICAgICAgICAgICAgICAg
IHByaW50KCJVUERBVElORyAlcyIgJSB0YXJnZXRfdmVyc2lvbmZpbGUpCiAg
ICAgICAgICAgICAgICB3cml0ZV90b192ZXJzaW9uX2ZpbGUodGFyZ2V0X3Zl
cnNpb25maWxlLCB2ZXJzaW9ucykKCiAgICAgICAgICAgICAgICBfYnVpbGRf
ZXhlLnJ1bihzZWxmKQogICAgICAgICAgICAgICAgb3MudW5saW5rKHRhcmdl
dF92ZXJzaW9uZmlsZSkKICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmcu
dmVyc2lvbmZpbGVfc291cmNlLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAg
ICAgICAgTE9ORyA9IExPTkdfVkVSU0lPTl9QWVtjZmcuVkNTXQogICAgICAg
ICAgICAgICAgICAgIGYud3JpdGUoTE9ORyAlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7IkRPTExBUiI6ICIkIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiU1RZTEUiOiBjZmcuc3R5bGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIlRBR19QUkVGSVgiOiBjZmcudGFnX3ByZWZpeCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFSRU5URElSX1BSRUZJ
WCI6IGNmZy5wYXJlbnRkaXJfcHJlZml4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJWRVJTSU9ORklMRV9TT1VSQ0UiOiBjZmcudmVyc2lvbmZp
bGVfc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAg
ICAgICAgY21kc1siYnVpbGRfZXhlIl0gPSBjbWRfYnVpbGRfZXhlCiAgICAg
ICAgZGVsIGNtZHNbImJ1aWxkX3B5Il0KCiAgICBpZiAncHkyZXhlJyBpbiBz
eXMubW9kdWxlczogICMgcHkyZXhlIGVuYWJsZWQ/CiAgICAgICAgdHJ5Ogog
ICAgICAgICAgICBmcm9tIHB5MmV4ZS5zZXR1cHRvb2xzX2J1aWxkZXhlIGlt
cG9ydCBweTJleGUgYXMgX3B5MmV4ZSAgIyB0eXBlOiBpZ25vcmUKICAgICAg
ICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgIGZyb20gcHkyZXhl
LmRpc3R1dGlsc19idWlsZGV4ZSBpbXBvcnQgcHkyZXhlIGFzIF9weTJleGUg
ICMgdHlwZTogaWdub3JlCgogICAgICAgIGNsYXNzIGNtZF9weTJleGUoX3B5
MmV4ZSk6CiAgICAgICAgICAgIGRlZiBydW4oc2VsZikgLT4gTm9uZToKICAg
ICAgICAgICAgICAgIHJvb3QgPSBnZXRfcm9vdCgpCiAgICAgICAgICAgICAg
ICBjZmcgPSBnZXRfY29uZmlnX2Zyb21fcm9vdChyb290KQogICAgICAgICAg
ICAgICAgdmVyc2lvbnMgPSBnZXRfdmVyc2lvbnMoKQogICAgICAgICAgICAg
ICAgdGFyZ2V0X3ZlcnNpb25maWxlID0gY2ZnLnZlcnNpb25maWxlX3NvdXJj
ZQogICAgICAgICAgICAgICAgcHJpbnQoIlVQREFUSU5HICVzIiAlIHRhcmdl
dF92ZXJzaW9uZmlsZSkKICAgICAgICAgICAgICAgIHdyaXRlX3RvX3ZlcnNp
b25fZmlsZSh0YXJnZXRfdmVyc2lvbmZpbGUsIHZlcnNpb25zKQoKICAgICAg
ICAgICAgICAgIF9weTJleGUucnVuKHNlbGYpCiAgICAgICAgICAgICAgICBv
cy51bmxpbmsodGFyZ2V0X3ZlcnNpb25maWxlKQogICAgICAgICAgICAgICAg
d2l0aCBvcGVuKGNmZy52ZXJzaW9uZmlsZV9zb3VyY2UsICJ3IikgYXMgZjoK
ICAgICAgICAgICAgICAgICAgICBMT05HID0gTE9OR19WRVJTSU9OX1BZW2Nm
Zy5WQ1NdCiAgICAgICAgICAgICAgICAgICAgZi53cml0ZShMT05HICUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsiRE9MTEFSIjogIiQiLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJTVFlMRSI6IGNmZy5zdHlsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVEFHX1BSRUZJWCI6IGNm
Zy50YWdfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ
QVJFTlRESVJfUFJFRklYIjogY2ZnLnBhcmVudGRpcl9wcmVmaXgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlZFUlNJT05GSUxFX1NPVVJDRSI6
IGNmZy52ZXJzaW9uZmlsZV9zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSkKICAgICAgICBjbWRzWyJweTJleGUiXSA9IGNtZF9weTJl
eGUKCiAgICAjIHNkaXN0IGZhcm1zIGl0cyBmaWxlIGxpc3QgYnVpbGRpbmcg
b3V0IHRvIGVnZ19pbmZvCiAgICBpZiAnZWdnX2luZm8nIGluIGNtZHM6CiAg
ICAgICAgX2VnZ19pbmZvOiBBbnkgPSBjbWRzWydlZ2dfaW5mbyddCiAgICBl
bHNlOgogICAgICAgIGZyb20gc2V0dXB0b29scy5jb21tYW5kLmVnZ19pbmZv
IGltcG9ydCBlZ2dfaW5mbyBhcyBfZWdnX2luZm8KCiAgICBjbGFzcyBjbWRf
ZWdnX2luZm8oX2VnZ19pbmZvKToKICAgICAgICBkZWYgZmluZF9zb3VyY2Vz
KHNlbGYpIC0+IE5vbmU6CiAgICAgICAgICAgICMgZWdnX2luZm8uZmluZF9z
b3VyY2VzIGJ1aWxkcyB0aGUgbWFuaWZlc3QgbGlzdCBhbmQgd3JpdGVzIGl0
CiAgICAgICAgICAgICMgaW4gb25lIHNob3QKICAgICAgICAgICAgc3VwZXIo
KS5maW5kX3NvdXJjZXMoKQoKICAgICAgICAgICAgIyBNb2RpZnkgdGhlIGZp
bGVsaXN0IGFuZCBub3JtYWxpemUgaXQKICAgICAgICAgICAgcm9vdCA9IGdl
dF9yb290KCkKICAgICAgICAgICAgY2ZnID0gZ2V0X2NvbmZpZ19mcm9tX3Jv
b3Qocm9vdCkKICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQoJ3Zl
cnNpb25lZXIucHknKQogICAgICAgICAgICBpZiBjZmcudmVyc2lvbmZpbGVf
c291cmNlOgogICAgICAgICAgICAgICAgIyBUaGVyZSBhcmUgcmFyZSBjYXNl
cyB3aGVyZSB2ZXJzaW9uZmlsZV9zb3VyY2UgbWlnaHQgbm90IGJlCiAgICAg
ICAgICAgICAgICAjIGluY2x1ZGVkIGJ5IGRlZmF1bHQsIHNvIHdlIG11c3Qg
YmUgZXhwbGljaXQKICAgICAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QuYXBw
ZW5kKGNmZy52ZXJzaW9uZmlsZV9zb3VyY2UpCiAgICAgICAgICAgIHNlbGYu
ZmlsZWxpc3Quc29ydCgpCiAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QucmVt
b3ZlX2R1cGxpY2F0ZXMoKQoKICAgICAgICAgICAgIyBUaGUgd3JpdGUgbWV0
aG9kIGlzIGhpZGRlbiBpbiB0aGUgbWFuaWZlc3RfbWFrZXIgaW5zdGFuY2Ug
dGhhdAogICAgICAgICAgICAjIGdlbmVyYXRlZCB0aGUgZmlsZWxpc3QgYW5k
IHdhcyB0aHJvd24gYXdheQogICAgICAgICAgICAjIFdlIHdpbGwgaW5zdGVh
ZCByZXBsaWNhdGUgdGhlaXIgZmluYWwgbm9ybWFsaXphdGlvbiAodG8gdW5p
Y29kZSwKICAgICAgICAgICAgIyBhbmQgUE9TSVgtc3R5bGUgcGF0aHMpCiAg
ICAgICAgICAgIGZyb20gc2V0dXB0b29scyBpbXBvcnQgdW5pY29kZV91dGls
cwogICAgICAgICAgICBub3JtYWxpemVkID0gW3VuaWNvZGVfdXRpbHMuZmls
ZXN5c19kZWNvZGUoZikucmVwbGFjZShvcy5zZXAsICcvJykKICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLmZpbGVsaXN0LmZpbGVz
XQoKICAgICAgICAgICAgbWFuaWZlc3RfZmlsZW5hbWUgPSBvcy5wYXRoLmpv
aW4oc2VsZi5lZ2dfaW5mbywgJ1NPVVJDRVMudHh0JykKICAgICAgICAgICAg
d2l0aCBvcGVuKG1hbmlmZXN0X2ZpbGVuYW1lLCAndycpIGFzIGZvYmo6CiAg
ICAgICAgICAgICAgICBmb2JqLndyaXRlKCdcbicuam9pbihub3JtYWxpemVk
KSkKCiAgICBjbWRzWydlZ2dfaW5mbyddID0gY21kX2VnZ19pbmZvCgogICAg
IyB3ZSBvdmVycmlkZSBkaWZmZXJlbnQgInNkaXN0IiBjb21tYW5kcyBmb3Ig
Ym90aCBlbnZpcm9ubWVudHMKICAgIGlmICdzZGlzdCcgaW4gY21kczoKICAg
ICAgICBfc2Rpc3Q6IEFueSA9IGNtZHNbJ3NkaXN0J10KICAgIGVsc2U6CiAg
ICAgICAgZnJvbSBzZXR1cHRvb2xzLmNvbW1hbmQuc2Rpc3QgaW1wb3J0IHNk
aXN0IGFzIF9zZGlzdAoKICAgIGNsYXNzIGNtZF9zZGlzdChfc2Rpc3QpOgog
ICAgICAgIGRlZiBydW4oc2VsZikgLT4gTm9uZToKICAgICAgICAgICAgdmVy
c2lvbnMgPSBnZXRfdmVyc2lvbnMoKQogICAgICAgICAgICBzZWxmLl92ZXJz
aW9uZWVyX2dlbmVyYXRlZF92ZXJzaW9ucyA9IHZlcnNpb25zCiAgICAgICAg
ICAgICMgdW5sZXNzIHdlIHVwZGF0ZSB0aGlzLCB0aGUgY29tbWFuZCB3aWxs
IGtlZXAgdXNpbmcgdGhlIG9sZAogICAgICAgICAgICAjIHZlcnNpb24KICAg
ICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24ubWV0YWRhdGEudmVyc2lvbiA9
IHZlcnNpb25zWyJ2ZXJzaW9uIl0KICAgICAgICAgICAgcmV0dXJuIF9zZGlz
dC5ydW4oc2VsZikKCiAgICAgICAgZGVmIG1ha2VfcmVsZWFzZV90cmVlKHNl
bGYsIGJhc2VfZGlyOiBzdHIsIGZpbGVzOiBMaXN0W3N0cl0pIC0+IE5vbmU6
CiAgICAgICAgICAgIHJvb3QgPSBnZXRfcm9vdCgpCiAgICAgICAgICAgIGNm
ZyA9IGdldF9jb25maWdfZnJvbV9yb290KHJvb3QpCiAgICAgICAgICAgIF9z
ZGlzdC5tYWtlX3JlbGVhc2VfdHJlZShzZWxmLCBiYXNlX2RpciwgZmlsZXMp
CiAgICAgICAgICAgICMgbm93IGxvY2F0ZSBfdmVyc2lvbi5weSBpbiB0aGUg
bmV3IGJhc2VfZGlyIGRpcmVjdG9yeQogICAgICAgICAgICAjIChyZW1lbWJl
cmluZyB0aGF0IGl0IG1heSBiZSBhIGhhcmRsaW5rKSBhbmQgcmVwbGFjZSBp
dCB3aXRoIGFuCiAgICAgICAgICAgICMgdXBkYXRlZCB2YWx1ZQogICAgICAg
ICAgICB0YXJnZXRfdmVyc2lvbmZpbGUgPSBvcy5wYXRoLmpvaW4oYmFzZV9k
aXIsIGNmZy52ZXJzaW9uZmlsZV9zb3VyY2UpCiAgICAgICAgICAgIHByaW50
KCJVUERBVElORyAlcyIgJSB0YXJnZXRfdmVyc2lvbmZpbGUpCiAgICAgICAg
ICAgIHdyaXRlX3RvX3ZlcnNpb25fZmlsZSh0YXJnZXRfdmVyc2lvbmZpbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl92ZXJz
aW9uZWVyX2dlbmVyYXRlZF92ZXJzaW9ucykKICAgIGNtZHNbInNkaXN0Il0g
PSBjbWRfc2Rpc3QKCiAgICByZXR1cm4gY21kcwoKCkNPTkZJR19FUlJPUiA9
ICIiIgpzZXR1cC5jZmcgaXMgbWlzc2luZyB0aGUgbmVjZXNzYXJ5IFZlcnNp
b25lZXIgY29uZmlndXJhdGlvbi4gWW91IG5lZWQKYSBzZWN0aW9uIGxpa2U6
CgogW3ZlcnNpb25lZXJdCiBWQ1MgPSBnaXQKIHN0eWxlID0gcGVwNDQwCiB2
ZXJzaW9uZmlsZV9zb3VyY2UgPSBzcmMvbXlwcm9qZWN0L192ZXJzaW9uLnB5
CiB2ZXJzaW9uZmlsZV9idWlsZCA9IG15cHJvamVjdC9fdmVyc2lvbi5weQog
dGFnX3ByZWZpeCA9CiBwYXJlbnRkaXJfcHJlZml4ID0gbXlwcm9qZWN0LQoK
WW91IHdpbGwgYWxzbyBuZWVkIHRvIGVkaXQgeW91ciBzZXR1cC5weSB0byB1
c2UgdGhlIHJlc3VsdHM6CgogaW1wb3J0IHZlcnNpb25lZXIKIHNldHVwKHZl
cnNpb249dmVyc2lvbmVlci5nZXRfdmVyc2lvbigpLAogICAgICAgY21kY2xh
c3M9dmVyc2lvbmVlci5nZXRfY21kY2xhc3MoKSwgLi4uKQoKUGxlYXNlIHJl
YWQgdGhlIGRvY3N0cmluZyBpbiAuL3ZlcnNpb25lZXIucHkgZm9yIGNvbmZp
Z3VyYXRpb24gaW5zdHJ1Y3Rpb25zLAplZGl0IHNldHVwLmNmZywgYW5kIHJl
LXJ1biB0aGUgaW5zdGFsbGVyIG9yICdweXRob24gdmVyc2lvbmVlci5weSBz
ZXR1cCcuCiIiIgoKU0FNUExFX0NPTkZJRyA9ICIiIgojIFNlZSB0aGUgZG9j
c3RyaW5nIGluIHZlcnNpb25lZXIucHkgZm9yIGluc3RydWN0aW9ucy4gTm90
ZSB0aGF0IHlvdSBtdXN0CiMgcmUtcnVuICd2ZXJzaW9uZWVyLnB5IHNldHVw
JyBhZnRlciBjaGFuZ2luZyB0aGlzIHNlY3Rpb24sIGFuZCBjb21taXQgdGhl
CiMgcmVzdWx0aW5nIGZpbGVzLgoKW3ZlcnNpb25lZXJdCiNWQ1MgPSBnaXQK
I3N0eWxlID0gcGVwNDQwCiN2ZXJzaW9uZmlsZV9zb3VyY2UgPQojdmVyc2lv
bmZpbGVfYnVpbGQgPQojdGFnX3ByZWZpeCA9CiNwYXJlbnRkaXJfcHJlZml4
ID0KCiIiIgoKT0xEX1NOSVBQRVQgPSAiIiIKZnJvbSAuX3ZlcnNpb24gaW1w
b3J0IGdldF92ZXJzaW9ucwpfX3ZlcnNpb25fXyA9IGdldF92ZXJzaW9ucygp
Wyd2ZXJzaW9uJ10KZGVsIGdldF92ZXJzaW9ucwoiIiIKCklOSVRfUFlfU05J
UFBFVCA9ICIiIgpmcm9tIC4gaW1wb3J0IHswfQpfX3ZlcnNpb25fXyA9IHsw
fS5nZXRfdmVyc2lvbnMoKVsndmVyc2lvbiddCiIiIgoKCmRlZiBkb19zZXR1
cCgpIC0+IGludDoKICAgICIiIkRvIG1haW4gVkNTLWluZGVwZW5kZW50IHNl
dHVwIGZ1bmN0aW9uIGZvciBpbnN0YWxsaW5nIFZlcnNpb25lZXIuIiIiCiAg
ICByb290ID0gZ2V0X3Jvb3QoKQogICAgdHJ5OgogICAgICAgIGNmZyA9IGdl
dF9jb25maWdfZnJvbV9yb290KHJvb3QpCiAgICBleGNlcHQgKE9TRXJyb3Is
IGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvciwKICAgICAgICAgICAgY29u
ZmlncGFyc2VyLk5vT3B0aW9uRXJyb3IpIGFzIGU6CiAgICAgICAgaWYgaXNp
bnN0YW5jZShlLCAoT1NFcnJvciwgY29uZmlncGFyc2VyLk5vU2VjdGlvbkVy
cm9yKSk6CiAgICAgICAgICAgIHByaW50KCJBZGRpbmcgc2FtcGxlIHZlcnNp
b25lZXIgY29uZmlnIHRvIHNldHVwLmNmZyIsCiAgICAgICAgICAgICAgICAg
IGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBh
dGguam9pbihyb290LCAic2V0dXAuY2ZnIiksICJhIikgYXMgZjoKICAgICAg
ICAgICAgICAgIGYud3JpdGUoU0FNUExFX0NPTkZJRykKICAgICAgICBwcmlu
dChDT05GSUdfRVJST1IsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICByZXR1
cm4gMQoKICAgIHByaW50KCIgY3JlYXRpbmcgJXMiICUgY2ZnLnZlcnNpb25m
aWxlX3NvdXJjZSkKICAgIHdpdGggb3BlbihjZmcudmVyc2lvbmZpbGVfc291
cmNlLCAidyIpIGFzIGY6CiAgICAgICAgTE9ORyA9IExPTkdfVkVSU0lPTl9Q
WVtjZmcuVkNTXQogICAgICAgIGYud3JpdGUoTE9ORyAlIHsiRE9MTEFSIjog
IiQiLAogICAgICAgICAgICAgICAgICAgICAgICAiU1RZTEUiOiBjZmcuc3R5
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJUQUdfUFJFRklYIjogY2Zn
LnRhZ19wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICJQQVJFTlRE
SVJfUFJFRklYIjogY2ZnLnBhcmVudGRpcl9wcmVmaXgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICJWRVJTSU9ORklMRV9TT1VSQ0UiOiBjZmcudmVyc2lv
bmZpbGVfc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICB9KQoKICAg
IGlweSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoY2ZnLnZlcnNp
b25maWxlX3NvdXJjZSksCiAgICAgICAgICAgICAgICAgICAgICAgIl9faW5p
dF9fLnB5IikKICAgIG1heWJlX2lweTogT3B0aW9uYWxbc3RyXSA9IGlweQog
ICAgaWYgb3MucGF0aC5leGlzdHMoaXB5KToKICAgICAgICB0cnk6CiAgICAg
ICAgICAgIHdpdGggb3BlbihpcHksICJyIikgYXMgZjoKICAgICAgICAgICAg
ICAgIG9sZCA9IGYucmVhZCgpCiAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAg
ICAgICAgICAgIG9sZCA9ICIiCiAgICAgICAgbW9kdWxlID0gb3MucGF0aC5z
cGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGNmZy52ZXJzaW9uZmlsZV9zb3Vy
Y2UpKVswXQogICAgICAgIHNuaXBwZXQgPSBJTklUX1BZX1NOSVBQRVQuZm9y
bWF0KG1vZHVsZSkKICAgICAgICBpZiBPTERfU05JUFBFVCBpbiBvbGQ6CiAg
ICAgICAgICAgIHByaW50KCIgcmVwbGFjaW5nIGJvaWxlcnBsYXRlIGluICVz
IiAlIGlweSkKICAgICAgICAgICAgd2l0aCBvcGVuKGlweSwgInciKSBhcyBm
OgogICAgICAgICAgICAgICAgZi53cml0ZShvbGQucmVwbGFjZShPTERfU05J
UFBFVCwgc25pcHBldCkpCiAgICAgICAgZWxpZiBzbmlwcGV0IG5vdCBpbiBv
bGQ6CiAgICAgICAgICAgIHByaW50KCIgYXBwZW5kaW5nIHRvICVzIiAlIGlw
eSkKICAgICAgICAgICAgd2l0aCBvcGVuKGlweSwgImEiKSBhcyBmOgogICAg
ICAgICAgICAgICAgZi53cml0ZShzbmlwcGV0KQogICAgICAgIGVsc2U6CiAg
ICAgICAgICAgIHByaW50KCIgJXMgdW5tb2RpZmllZCIgJSBpcHkpCiAgICBl
bHNlOgogICAgICAgIHByaW50KCIgJXMgZG9lc24ndCBleGlzdCwgb2siICUg
aXB5KQogICAgICAgIG1heWJlX2lweSA9IE5vbmUKCiAgICAjIE1ha2UgVkNT
LXNwZWNpZmljIGNoYW5nZXMuIEZvciBnaXQsIHRoaXMgbWVhbnMgY3JlYXRp
bmcvY2hhbmdpbmcKICAgICMgLmdpdGF0dHJpYnV0ZXMgdG8gbWFyayBfdmVy
c2lvbi5weSBmb3IgZXhwb3J0LXN1YnN0IGtleXdvcmQKICAgICMgc3Vic3Rp
dHV0aW9uLgogICAgZG9fdmNzX2luc3RhbGwoY2ZnLnZlcnNpb25maWxlX3Nv
dXJjZSwgbWF5YmVfaXB5KQogICAgcmV0dXJuIDAKCgpkZWYgc2Nhbl9zZXR1
cF9weSgpIC0+IGludDoKICAgICIiIlZhbGlkYXRlIHRoZSBjb250ZW50cyBv
ZiBzZXR1cC5weSBhZ2FpbnN0IFZlcnNpb25lZXIncyBleHBlY3RhdGlvbnMu
IiIiCiAgICBmb3VuZCA9IHNldCgpCiAgICBzZXR0ZXJzID0gRmFsc2UKICAg
IGVycm9ycyA9IDAKICAgIHdpdGggb3Blbigic2V0dXAucHkiLCAiciIpIGFz
IGY6CiAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKICAgICAg
ICAgICAgaWYgImltcG9ydCB2ZXJzaW9uZWVyIiBpbiBsaW5lOgogICAgICAg
ICAgICAgICAgZm91bmQuYWRkKCJpbXBvcnQiKQogICAgICAgICAgICBpZiAi
dmVyc2lvbmVlci5nZXRfY21kY2xhc3MoKSIgaW4gbGluZToKICAgICAgICAg
ICAgICAgIGZvdW5kLmFkZCgiY21kY2xhc3MiKQogICAgICAgICAgICBpZiAi
dmVyc2lvbmVlci5nZXRfdmVyc2lvbigpIiBpbiBsaW5lOgogICAgICAgICAg
ICAgICAgZm91bmQuYWRkKCJnZXRfdmVyc2lvbiIpCiAgICAgICAgICAgIGlm
ICJ2ZXJzaW9uZWVyLlZDUyIgaW4gbGluZToKICAgICAgICAgICAgICAgIHNl
dHRlcnMgPSBUcnVlCiAgICAgICAgICAgIGlmICJ2ZXJzaW9uZWVyLnZlcnNp
b25maWxlX3NvdXJjZSIgaW4gbGluZToKICAgICAgICAgICAgICAgIHNldHRl
cnMgPSBUcnVlCiAgICBpZiBsZW4oZm91bmQpICE9IDM6CiAgICAgICAgcHJp
bnQoIiIpCiAgICAgICAgcHJpbnQoIllvdXIgc2V0dXAucHkgYXBwZWFycyB0
byBiZSBtaXNzaW5nIHNvbWUgaW1wb3J0YW50IGl0ZW1zIikKICAgICAgICBw
cmludCgiKGJ1dCBJIG1pZ2h0IGJlIHdyb25nKS4gUGxlYXNlIG1ha2Ugc3Vy
ZSBpdCBoYXMgc29tZXRoaW5nIikKICAgICAgICBwcmludCgicm91Z2hseSBs
aWtlIHRoZSBmb2xsb3dpbmc6IikKICAgICAgICBwcmludCgiIikKICAgICAg
ICBwcmludCgiIGltcG9ydCB2ZXJzaW9uZWVyIikKICAgICAgICBwcmludCgi
IHNldHVwKCB2ZXJzaW9uPXZlcnNpb25lZXIuZ2V0X3ZlcnNpb24oKSwiKQog
ICAgICAgIHByaW50KCIgICAgICAgIGNtZGNsYXNzPXZlcnNpb25lZXIuZ2V0
X2NtZGNsYXNzKCksICAuLi4pIikKICAgICAgICBwcmludCgiIikKICAgICAg
ICBlcnJvcnMgKz0gMQogICAgaWYgc2V0dGVyczoKICAgICAgICBwcmludCgi
WW91IHNob3VsZCByZW1vdmUgbGluZXMgbGlrZSAndmVyc2lvbmVlci5WQ1Mg
PSAnIGFuZCIpCiAgICAgICAgcHJpbnQoIid2ZXJzaW9uZWVyLnZlcnNpb25m
aWxlX3NvdXJjZSA9ICcgLiBUaGlzIGNvbmZpZ3VyYXRpb24iKQogICAgICAg
IHByaW50KCJub3cgbGl2ZXMgaW4gc2V0dXAuY2ZnLCBhbmQgc2hvdWxkIGJl
IHJlbW92ZWQgZnJvbSBzZXR1cC5weSIpCiAgICAgICAgcHJpbnQoIiIpCiAg
ICAgICAgZXJyb3JzICs9IDEKICAgIHJldHVybiBlcnJvcnMKCgpkZWYgc2V0
dXBfY29tbWFuZCgpIC0+IE5vUmV0dXJuOgogICAgIiIiU2V0IHVwIFZlcnNp
b25lZXIgYW5kIGV4aXQgd2l0aCBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLiIi
IgogICAgZXJyb3JzID0gZG9fc2V0dXAoKQogICAgZXJyb3JzICs9IHNjYW5f
c2V0dXBfcHkoKQogICAgc3lzLmV4aXQoMSBpZiBlcnJvcnMgZWxzZSAwKQoK
CmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBjbWQgPSBzeXMuYXJn
dlsxXQogICAgaWYgY21kID09ICJzZXR1cCI6CiAgICAgICAgc2V0dXBfY29t
bWFuZCgpCg==
"""
newver = "0.29"
VERSIONEER_PEP518 = True
VERSIONEER = base64.b64decode(VERSIONEER_b64.encode('ASCII'))
# Stub overwritten by exec()
[docs]
def setup_command() -> NoReturn: ... # type: ignore
# Make versioneer usable via import
exec(VERSIONEER.decode(), globals())
[docs]
def detect_installed_version() -> str:
"""Find version string in vendored versioneer
Raises FileNotFoundError if missing.
"""
with open("versioneer.py") as fobj:
for i, line in enumerate(fobj):
if line.startswith("# Version: "):
return line[len("# Version: "):].strip()
if i > 5:
break
return "unknown version"
[docs]
def vendor() -> None:
"""Install versioneer into current directory"""
try:
oldver = detect_installed_version()
except FileNotFoundError:
pass
else:
print(f"replacing old versioneer.py ({oldver})")
with open("versioneer.py", "wb") as fobj:
fobj.write(VERSIONEER)
print(f"versioneer.py ({newver}) installed into local tree")
[docs]
def main() -> NoReturn:
usage = "Usage: versioneer install [--vendor|--no-vendor]"
if len(sys.argv) < 2 or len(sys.argv) > 3:
print(usage)
sys.exit(1)
command = sys.argv[1]
mode = "--vendor" if len(sys.argv) == 2 else sys.argv[2]
if command in ("version", "--version"):
print("versioneer (installer) %s" % newver)
sys.exit(0)
elif command in ("help", "-help", "--help"):
print(usage)
sys.exit(0)
elif command != "install" or mode not in ("--vendor", "--no-vendor"):
print(usage)
sys.exit(1)
if mode == "--vendor":
vendor()
print("Now running 'versioneer.py setup' to install the generated files..")
setup_command()
if __name__ == '__main__':
main()