# upm_img_popper v.1.3.4
# Minimal image selector.

# Mary Fredborg
# http://utterplush.com/txp-plugins/upm-img-popper

# ..........................................................................
# A plugin for Textpattern
# http://textpattern.com/
#
# Adding Plugins to Your Textpattern Installation
# http://textpattern.net/wiki/index.php?title=Intermediate_Weblog_Model#Adding_Plugins_to_Your_Textpattern_Installation
# ..........................................................................

YToxMTp7czo0OiJuYW1lIjtzOjE0OiJ1cG1faW1nX3BvcHBlciI7czoxMToiZGVzY3JpcHRp
b24iO3M6MjM6Ik1pbmltYWwgaW1hZ2Ugc2VsZWN0b3IuIjtzOjc6InZlcnNpb24iO3M6NToi
MS4zLjQiO3M6NDoidHlwZSI7aToxO3M6NjoiYXV0aG9yIjtzOjEzOiJNYXJ5IEZyZWRib3Jn
IjtzOjEwOiJhdXRob3JfdXJpIjtzOjQ4OiJodHRwOi8vdXR0ZXJwbHVzaC5jb20vdHhwLXBs
dWdpbnMvdXBtLWltZy1wb3BwZXIiO3M6NDoiY29kZSI7czozMzk1MDoiaWYgKHR4cGludGVy
ZmFjZSA9PSAnYWRtaW4nKQoJewoJCXVwbV9pbWdfcG9wcGVyX2luc3RhbGwoKTsKCgkJYWRk
X3ByaXZzKCd1cG1faW1nX3BvcHBlcicsICcxLDIsMyw0LDUnKTsKCQlyZWdpc3Rlcl9jYWxs
YmFjaygndXBtX2ltZ19wb3BwZXInLCAndXBtX2ltZ19wb3BwZXInKTsKCgkJYWRkX3ByaXZz
KCd1cG1faW1nX3BvcHBlcl9saW5rJywgJzEsMiwzLDQsNScpOwoJCXJlZ2lzdGVyX2NhbGxi
YWNrKCd1cG1faW1nX3BvcHBlcl9saW5rJywgJ2FydGljbGUnKTsKCgkJYWRkX3ByaXZzKCd1
cG1faW1nX3BvcHBlcl9qcycsICcxLDIsMyw0LDUnKTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygn
dXBtX2ltZ19wb3BwZXJfanMnLCAndXBtX2ltZ19wb3BwZXJfanMnLCAnJywgMSk7CgoJCWFk
ZF9wcml2cygndXBtX2ltZ19wb3BwZXJfcHJlZnMnLCAnMSwyJyk7CgkJcmVnaXN0ZXJfdGFi
KCdleHRlbnNpb25zJywgJ3VwbV9pbWdfcG9wcGVyX3ByZWZzJywgJ3VwbV9pbWdfcG9wcGVy
Jyk7CgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3VwbV9pbWdfcG9wcGVyX3ByZWZzJywgJ3VwbV9p
bWdfcG9wcGVyX3ByZWZzJyk7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltZ19w
b3BwZXIoKQoJewoJCWdsb2JhbCAkc3RlcDsKCgkJaWYgKCRzdGVwID09ICd1cG1faW1nX3Bv
cHBlcl9jaGFuZ2VfcGFnZWJ5JykKCQl7CgkJCWV2ZW50X2NoYW5nZV9wYWdlYnkoJ2ltYWdl
Jyk7CgkJCSRHTE9CQUxTWydwcmVmcyddID0gZ2V0X3ByZWZzKCk7CgkJfQoKCQl1cG1faW1n
X3BvcHBlcl9saXN0KCk7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltZ19wb3Bw
ZXJfbGlzdCgkbWVzc2FnZSA9ICcnKQoJewoJCWdsb2JhbCAkcHJlZnM7CgoJCXBhZ2V0b3Ao
dXBtX2ltZ19wb3BwZXJfZ1R4dCgnaW1hZ2Vfc2VsZWN0b3InKSwgJG1lc3NhZ2UpOwoKCQkk
cGF0aF90b19zaXRlID0gJHByZWZzWydwYXRoX3RvX3NpdGUnXTsKCQkkaW1nX2RpciA9ICRw
cmVmc1snaW1nX2RpciddOwoKCQlpZiAoIWRlZmluZWQoJ0lNUEFUSCcpKQoJCXsKCQkJZGVm
aW5lKCdJTVBBVEgnLCAkcGF0aF90b19zaXRlLicvJy4kaW1nX2Rpci4nLycpOwoJCX0KCgkJ
ZWNobyA8PDxjc3MKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KPCEtLQpsYWJlbCB7CmNvbG9y
OiAjMDAwOwpjdXJzb3I6IHBvaW50ZXI7Cn0KCnVsIHsKbWFyZ2luOiAwOwpwYWRkaW5nOiAw
OwpsaXN0LXN0eWxlOiBub25lOwp9CgpsaSB7Cm1hcmdpbjogMCAwIDJweCAwOwpwYWRkaW5n
OiAwOwp9CgpwIHsKbWFyZ2luOiA1cHggMDsKcGFkZGluZzogMDsKfQoKLnJpZ2h0IHsKdGV4
dC1hbGlnbjogcmlnaHQ7Cn0KCi5jZW50ZXIgewptYXJnaW46IDAgYXV0bzsKdGV4dC1hbGln
bjogY2VudGVyOwp9Cgojbm8gewptYXJnaW4tbGVmdDogMmVtOwp9CgojcmV0dXJuLCAjc3Vj
Y2VzcywgI2ZhaWxlZCB7CnBhZGRpbmc6IDFlbTsKdGV4dC1hbGlnbjogY2VudGVyOwpiYWNr
Z3JvdW5kLWNvbG9yOiAjZmZmOwpib3JkZXI6IDVweCBzb2xpZCAjZmMzOwp9Ci0tPgo8L3N0
eWxlPgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaW5kZXgucGhwP2V2
ZW50PXVwbV9pbWdfcG9wcGVyX2pzJiMzODtuYW1lPXBvcCI+PC9zY3JpcHQ+CmNzczsKCgkJ
ZXh0cmFjdChncHNhKGFycmF5KCdwYWdlJywgJ3NvcnQnLCAnZGlyJywgJ2NyaXQnLCAnc2Vh
cmNoX21ldGhvZCcpKSk7CgoJCSRkaXIgPSAoJGRpciA9PSAnZGVzYycpID8gJ2Rlc2MnIDog
J2FzYyc7CgoJCXN3aXRjaCAoJHNvcnQpCgkJewoJCQljYXNlICdpZCc6CgkJCQkkc29ydF9z
cWwgPSAiaWQgJGRpciI7CgkJCWJyZWFrOwoKCQkJY2FzZSAnbmFtZSc6CgkJCQkkc29ydF9z
cWwgPSAibmFtZSAkZGlyIjsKCQkJYnJlYWs7CgoJCQljYXNlICd0aHVtYm5haWwnOgoJCQkJ
JHNvcnRfc3FsID0gInRodW1ibmFpbCAkZGlyLCBpZCBhc2MiOwoJCQlicmVhazsKCgkJCWNh
c2UgJ2NhdGVnb3J5JzoKCQkJCSRzb3J0X3NxbCA9ICJjYXRlZ29yeSAkZGlyLCBpZCBhc2Mi
OwoJCQlicmVhazsKCgkJCWNhc2UgJ2RhdGUnOgoJCQkJJHNvcnRfc3FsID0gImRhdGUgJGRp
ciwgaWQgYXNjIjsKCQkJYnJlYWs7CgoJCQljYXNlICdhdXRob3InOgoJCQkJJHNvcnRfc3Fs
ID0gImF1dGhvciAkZGlyLCBpZCBhc2MiOwoJCQlicmVhazsKCgkJCWRlZmF1bHQ6CgkJCQkk
ZGlyID0gJ2Rlc2MnOwoJCQkJJHNvcnRfc3FsID0gImlkICRkaXIiOwoJCQlicmVhazsKCQl9
CgoJCSRzd2l0Y2hfZGlyID0gKCRkaXIgPT0gJ2Rlc2MnKSA/ICdhc2MnIDogJ2Rlc2MnOwoK
CQkkY3JpdGVyaWEgPSAxOwoKCQlpZiAoJHNlYXJjaF9tZXRob2QgYW5kICRjcml0KQoJCXsK
CQkJJGNyaXRfZXNjYXBlZCA9IGRvU2xhc2goJGNyaXQpOwoKCQkJJGNyaXRzcWwgPSBhcnJh
eSgKCQkJCSdpZCcJCQkgPT4gImlkID0gJyRjcml0X2VzY2FwZWQnIiwKCQkJCSduYW1lJwkJ
ID0+ICJuYW1lIGxpa2UgJyUkY3JpdF9lc2NhcGVkJSciLAoJCQkJJ2NhdGVnb3J5JyA9PiAi
Y2F0ZWdvcnkgbGlrZSAnJSRjcml0X2VzY2FwZWQlJyIsCgkJCQknYXV0aG9yJwkgPT4gImF1
dGhvciBsaWtlICclJGNyaXRfZXNjYXBlZCUnIiwKCQkJCSdhbHQnCQkJID0+ICJhbHQgbGlr
ZSAnJSRjcml0X2VzY2FwZWQlJyIsCgkJCQknY2FwdGlvbicJID0+ICJjYXB0aW9uIGxpa2Ug
JyUkY3JpdF9lc2NhcGVkJSciCgkJCSk7CgoJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkc2Vh
cmNoX21ldGhvZCwgJGNyaXRzcWwpKQoJCQl7CgkJCQkkY3JpdGVyaWEgPSAkY3JpdHNxbFsk
c2VhcmNoX21ldGhvZF07CgkJCQkkbGltaXQgPSA1MDA7CgkJCX0KCgkJCWVsc2UKCQkJewoJ
CQkJJHNlYXJjaF9tZXRob2QgPSAnJzsKCQkJCSRjcml0ID0gJyc7CgkJCX0KCQl9CgoJCWVs
c2UKCQl7CgkJCSRzZWFyY2hfbWV0aG9kID0gJyc7CgkJCSRjcml0ID0gJyc7CgkJfQoKCQkk
dG90YWwgPSBzYWZlX2NvdW50KCd0eHBfaW1hZ2UnLCAiJGNyaXRlcmlhIik7CgoJCWlmICgk
dG90YWwgPCAxKQoJCXsKCQkJaWYgKCRjcml0ZXJpYSAhPSAxKQoJCQl7CgkJCQllY2hvIG4u
dXBtX2ltZ19wb3BwZXJfc2VhcmNoX2Zvcm0oJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAkc29y
dCwgJGRpcikuCgkJCQkJbi5ncmFmKGdUeHQoJ25vX3Jlc3VsdHNfZm91bmQnKSwgJyBzdHls
ZT0idGV4dC1hbGlnbjogY2VudGVyOyInKTsKCQkJfQoKCQkJZWxzZQoJCQl7CgkJCQllY2hv
IG4uZ3JhZihnVHh0KCdub19pbWFnZXNfcmVjb3JkZWQnKSwgJyBzdHlsZT0idGV4dC1hbGln
bjogY2VudGVyOyInKTsKCQkJfQoKCQkJcmV0dXJuOwoJCX0KCgkJZWNobyB1cG1faW1nX3Bv
cHBlcl9vcHRpb25zX2Zvcm0oKTsKCgkJJGxpbWl0ID0gbWF4KCRwcmVmc1snaW1hZ2VfbGlz
dF9wYWdlYnknXSwgMTUpOwoKCQlsaXN0KCRwYWdlLCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0g
cGFnZXIoJHRvdGFsLCAkbGltaXQsICRwYWdlKTsKCgkJZWNobyB1cG1faW1nX3BvcHBlcl9z
ZWFyY2hfZm9ybSgkY3JpdCwgJHNlYXJjaF9tZXRob2QsICRzb3J0LCAkZGlyKTsKCgkJJHJz
ID0gc2FmZV9yb3dzX3N0YXJ0KCcqLCB1bml4X3RpbWVzdGFtcChkYXRlKSBhcyB1RGF0ZScs
ICd0eHBfaW1hZ2UnLAoJCQkiJGNyaXRlcmlhIG9yZGVyIGJ5ICRzb3J0X3NxbCBsaW1pdCAk
b2Zmc2V0LCAkbGltaXQKCQkiKTsKCgkJaWYgKCRycykKCQl7CgkJCSRzb3J0X2xpbmsgPSAn
dXBtX2ltZ19wb3BwZXInLmEuJ2JtPXRydWUnOwoKCQkJZWNobyBuLm4uc3RhcnRUYWJsZSgn
bGlzdCcpLgoJCQkJbi50cigKCQkJCQljb2x1bW5faGVhZCgnSUQnLCAnaWQnLCAkc29ydF9s
aW5rLCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4KCQkJCQlo
Q2VsbCgpLgoJCQkJCWNvbHVtbl9oZWFkKCdkYXRlJywgJ2RhdGUnLCAkc29ydF9saW5rLCB0
cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4KCQkJCQljb2x1bW5f
aGVhZCgnbmFtZScsICduYW1lJywgJHNvcnRfbGluaywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRj
cml0LCAkc2VhcmNoX21ldGhvZCkuCgkJCQkJY29sdW1uX2hlYWQoJ3RodW1ibmFpbCcsICd0
aHVtYm5haWwnLCAkc29ydF9saW5rLCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFy
Y2hfbWV0aG9kKS4KCQkJCQloQ2VsbChnVHh0KCdwcmV2aWV3JykpLgoJCQkJCWNvbHVtbl9o
ZWFkKCdpbWFnZV9jYXRlZ29yeScsICdjYXRlZ29yeScsICRzb3J0X2xpbmssIHRydWUsICRz
d2l0Y2hfZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QpLgoJCQkJCWNvbHVtbl9oZWFkKCdh
dXRob3InLCAnYXV0aG9yJywgJHNvcnRfbGluaywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0
LCAkc2VhcmNoX21ldGhvZCkuCgkJCQkJaENlbGwodXBtX2ltZ19wb3BwZXJfZ1R4dCgnaW5z
ZXJ0JykpLgoJCQkJCSggZnVuY3Rpb25fZXhpc3RzKCd1cG1faW1hZ2UnKSA/IGhDZWxsKHVw
bV9pbWdfcG9wcGVyX2dUeHQoJ2luc2VydF9wbHVnaW4nKSkgOiAnJyApLgoJCQkJCWhDZWxs
KCkKCQkJCSk7CgoJCQl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpCgkJCXsKCQkJCWV4dHJh
Y3QoJGEpOwoKCQkJCSRlZGl0X3VybCA9ICc/ZXZlbnQ9aW1hZ2UnLmEuJ3N0ZXA9aW1hZ2Vf
ZWRpdCcuYS4naWQ9Jy4kaWQuYS4nc29ydD0nLiRzb3J0LgoJCQkJCWEuJ2Rpcj0nLiRkaXIu
YS4ncGFnZT0nLiRwYWdlLmEuJ3NlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC5hLidj
cml0PScuJGNyaXQ7CgoJCQkJJG5hbWUgPSBlbXB0eSgkbmFtZSkgPyBnVHh0KCd1bm5hbWVk
JykgOiAkbmFtZTsKCgkJCQkkdGh1bWJuYWlsID0gKCR0aHVtYm5haWwpID8KCQkJCQknPGlt
ZyBzcmM9IicuaHUuJGltZ19kaXIuJy8nLiRpZC4ndCcuJGV4dC4nIiAvPicgOgoJCQkJCWdU
eHQoJ25vJyk7CgoJCQkJLy8gZ29kIEkgaGF0ZSBqYXZhc2NyaXB0IGluIHBocAoKCQkJCSRp
bnNlcnQgPSBuLic8dWw+Jy5uLgoJCQkJCW4udC4nPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9
Imluc2VydFRhZyhcJ2FwcGVuZC1hcnRpY2xlLWltYWdlXCcsICcuY2hyKDM5KS4kaWQuY2hy
KDM5KS4nKTsgcmV0dXJuIGZhbHNlOyI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdhcnRpY2xl
X2ltYWdlX2FwcGVuZCcpLic8L2E+PC9saT4nLgoJCQkJCW4udC4nPGxpPjxhIGhyZWY9IiMi
IG9uY2xpY2s9Imluc2VydFRhZyhcJ3JlcGxhY2UtYXJ0aWNsZS1pbWFnZVwnLCAnLmNocigz
OSkuJGlkLmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsiPicudXBtX2ltZ19wb3BwZXJfZ1R4
dCgnYXJ0aWNsZV9pbWFnZV9yZXBsYWNlJykuJzwvYT48L2xpPicuCgkJCQkJbi50Lic8bGk+
PGEgaHJlZj0iIyIgb25jbGljaz0iaW5zZXJ0VGFnKFwnaW1hZ2VcJywgJy5jaHIoMzkpLiRp
ZC5jaHIoMzkpLicpOyByZXR1cm4gZmFsc2U7Ij4nLnVwbV9pbWdfcG9wcGVyX2dUeHQoJ2lt
YWdlJykuJzwvYT48L2xpPic7CgoJCQkJJHBsdWdpbiA9IG4uJzx1bD4nLm4uCgkJCQkJbi50
Lic8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iaW5zZXJ0VGFnKFwncGx1Z2luLWltYWdlXCcs
ICcuY2hyKDM5KS4kaWQuY2hyKDM5KS4nKTsgcmV0dXJuIGZhbHNlOyI+Jy51cG1faW1nX3Bv
cHBlcl9nVHh0KCdpbWFnZScpLic8L2E+PC9saT4nOwoKCQkJCWlmICgkdGh1bWJuYWlsKQoJ
CQkJewoJCQkJCSRpbnNlcnQgLj0gbi50Lic8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iaW5z
ZXJ0VGFnKFwndGh1bWJcJywgJy5jaHIoMzkpLiRpZC5jaHIoMzkpLicpOyByZXR1cm4gZmFs
c2U7Ij4nLmdUeHQoJ3RodW1ibmFpbCcpLic8L2E+PC9saT4nLgoJCQkJCQluLnQuJzxsaT48
YSBocmVmPSIjIiBvbmNsaWNrPSJpbnNlcnRUYWcoXCdwb3B1cFwnLCAnLmNocigzOSkuJGlk
LmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsiPicudXBtX2ltZ19wb3BwZXJfZ1R4dCgncG9w
dXAnKS4nPC9hPjwvbGk+JzsKCgkJCQkJJHBsdWdpbiAuPSBuLnQuJzxsaT48YSBocmVmPSIj
IiBvbmNsaWNrPSJpbnNlcnRUYWcoXCdwbHVnaW4tdGh1bWJcJywgJy5jaHIoMzkpLiRpZC5j
aHIoMzkpLicpOyByZXR1cm4gZmFsc2U7Ij4nLmdUeHQoJ3RodW1ibmFpbCcpLic8L2E+PC9s
aT4nLgoJCQkJCQluLnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpbnNlcnRUYWcoXCdw
bHVnaW4tcG9wdXBcJywgJy5jaHIoMzkpLiRpZC5jaHIoMzkpLicpOyByZXR1cm4gZmFsc2U7
Ij4nLnVwbV9pbWdfcG9wcGVyX2dUeHQoJ3BvcHVwJykuJzwvYT48L2xpPic7CgkJCQl9CgoJ
CQkJJGluc2VydCAuPSBuLnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpbnNlcnRUYWco
XCd0ZXh0aWxlXCcsICcuY2hyKDM5KS4kaWQuY2hyKDM5KS4nLCAnLmNocigzOSkuJGV4dC5j
aHIoMzkpLicsIFwnXCcsIFwnXCcsICcuY2hyKDM5KS5lc2NhcGVfb3V0cHV0KCRhbHQpLmNo
cigzOSkuJyk7IHJldHVybiBmYWxzZTsiPlRleHRpbGU8L2E+PC9saT4nLgoJCQkJCW4udC4n
PGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9Imluc2VydFRhZyhcJ3hodG1sXCcsICcuY2hyKDM5
KS4kaWQuY2hyKDM5KS4nLCAnLmNocigzOSkuJGV4dC5jaHIoMzkpLicsICcuY2hyKDM5KS4k
dy5jaHIoMzkpLicsICcuY2hyKDM5KS4kaC5jaHIoMzkpLicsICcuY2hyKDM5KS5lc2NhcGVf
b3V0cHV0KCRhbHQpLmNocigzOSkuJywgJy5jaHIoMzkpLmVzY2FwZV9vdXRwdXQoJGNhcHRp
b24pLmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsiPlhIVE1MPC9hPjwvbGk+Jy4KCQkJCQlu
Lic8L3VsPic7CgoJCQkJJHBsdWdpbiAuPSBuLnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNr
PSJpbnNlcnRUYWcoXCdwbHVnaW4tY3VzdG9tXCcsICcuY2hyKDM5KS4kaWQuY2hyKDM5KS4n
KTsgcmV0dXJuIGZhbHNlOyI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdjdXN0b21fZm9ybScp
Lic8L2E+PC9saT4nLgoJCQkJCW4uJzwvdWw+JzsKCgkJCQkkcHJldmlldyA9IG4uJzx1bD4n
LgoJCQkJCW4udC4nPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9Im1ha2VXaW4oJy5jaHIoMzkp
LicmIzgyMjA7Jy4kbmFtZS4nJiM4MjIxOycuY2hyKDM5KS4nLCAnLmNocigzOSkuJyYjNjA7
aW1nIHNyYz0mIzM0OycuaHUuJGltZ19kaXIuJy8nLiRpZC4kZXh0LicmIzM0OyAvJiM2Mjsn
LmNocigzOSkuJywgJy4kdy4nLCAnLiRoLicpOyByZXR1cm4gZmFsc2U7Ij4nLnVwbV9pbWdf
cG9wcGVyX2dUeHQoJ2ltYWdlJykuJzwvYT48L2xpPic7CgoJCQkJaWYgKCFlbXB0eSgkYWx0
KSkKCQkJCXsKCQkJCQkkcHJldmlldyAuPSBuLnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNr
PSJtYWtlV2luKCcuY2hyKDM5KS51cG1faW1nX3BvcHBlcl9nVHh0KCdhbHRfdGV4dF9mb3In
KS4nICYjODIyMDsnLiRuYW1lLicmIzgyMjE7Jy5jaHIoMzkpLicsICcuY2hyKDM5KS5lc2Nh
cGVfb3V0cHV0KCRhbHQpLmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsiPicuZ1R4dCgnYWx0
X3RleHQnKS4nPC9hPjwvbGk+JzsKCQkJCX0KCgkJCQlpZiAoIWVtcHR5KCRjYXB0aW9uKSkK
CQkJCXsKCQkJCQkkcHJldmlldyAuPSBuLnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJt
YWtlV2luKCcuY2hyKDM5KS51cG1faW1nX3BvcHBlcl9nVHh0KCdjYXB0aW9uX2ZvcicpLicg
JiM4MjIwOycuJG5hbWUuJyYjODIyMTsnLmNocigzOSkuJywgJy5jaHIoMzkpLmVzY2FwZV9v
dXRwdXQoJGNhcHRpb24pLmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsiPicuZ1R4dCgnY2Fw
dGlvbicpLic8L2E+PC9saT4nOwoJCQkJfQoKCQkJCSRwcmV2aWV3IC49IG4uJzwvdWw+JzsK
CgkJCQkkY2F0ZWdvcnkgPSAoJGNhdGVnb3J5KSA/ICc8c3BhbiB0aXRsZT0iJy5mZXRjaF9j
YXRlZ29yeV90aXRsZSgkY2F0ZWdvcnksICdpbWFnZScpLiciPicuJGNhdGVnb3J5Lic8L3Nw
YW4+JyA6ICcnOwoKCgkJCQllY2hvIG4ubi50cigKCgkJCQkJbi50ZCgkaWQsIDIwKS4KCgkJ
CQkJdGQoJzxhIGhyZWY9IicuJGVkaXRfdXJsLiciIG9uY2xpY2s9Indhcm5FZGl0SW1hZ2Uo
Jy4kaWQuJyk7IHJldHVybiBmYWxzZTsiPicuZ1R4dCgnZWRpdCcpLic8L2E+JwoJCQkJCSwg
MzUpLgoKCQkJCQl0ZCgKCQkJCQkJc2FmZV9zdHJmdGltZSgnJWQgJWIgJVkgJUk6JU0gJXAn
LCAkdURhdGUpCgkJCQkJLCA3NSkuCgoJCQkJCXRkKCc8YSBocmVmPSInLiRlZGl0X3VybC4n
IiBvbmNsaWNrPSJyZXR1cm4gd2FybkVkaXRJbWFnZSgnLiRpZC4nKTsiPicuJG5hbWUuJzwv
YT4nCgkJCQkJLCA3NSkuCgoJCQkJCXRkKCR0aHVtYm5haWwsIDc1KS4KCgkJCQkJdGQoJHBy
ZXZpZXcpLgoKCQkJCQl0ZCgkY2F0ZWdvcnksIDc1KS4KCgkJCQkJdGQoCgkJCQkJCSc8c3Bh
biB0aXRsZT0iJy5nZXRfYXV0aG9yX25hbWUoJGF1dGhvcikuJyI+Jy4kYXV0aG9yLic8L3Nw
YW4+JwoJCQkJCSwgNzUpLgoKCQkJCQl0ZCgkaW5zZXJ0LCAxNTApLgoJCQkJCSggZnVuY3Rp
b25fZXhpc3RzKCd1cG1faW1hZ2UnKSA/IG4udGQoJHBsdWdpbikgOiAnJyApLgoKCQkJCQl0
ZCgKCQkJCQkJZExpbmsoJ2ltYWdlJywgJ2ltYWdlX2RlbGV0ZScsICdpZCcsICRpZCkKCQkJ
CQksIDEwKQoJCQkJKTsKCQkJfQoKCQkJZWNobyBlbmRUYWJsZSgpLgoKCQkJCW5hdl9mb3Jt
KCd1cG1faW1nX3BvcHBlcicsICRwYWdlLCAkbnVtUGFnZXMsICRzb3J0LCAkZGlyLCAkY3Jp
dCwgJHNlYXJjaF9tZXRob2QpLgoKCQkJCXVwbV9pbWdfcG9wcGVyX3BhZ2VieV9mb3JtKCku
CgoJCQkJbi50YWcoCgkJCQkJbi5ncmFmKHVwbV9pbWdfcG9wcGVyX2dUeHQoJ3JldHVybicp
KS4KCQkJCQluLmdyYWYoJzxhIGlkPSJ5ZXMiIGhyZWY9IiMiIG9uY2xpY2s9ImdvQmFjayh0
aGlzLmhyZWYpOyByZXR1cm4gZmFsc2U7Ij4nLmdUeHQoJ3llcycpLic8L2E+LicuCgkJCQkJ
CScgPGEgaWQ9Im5vIiBocmVmPSIjIiBvbmNsaWNrPSJkb25lKFwncmV0dXJuXCcpOyByZXR1
cm4gZmFsc2U7Ij4nLmdUeHQoJ25vJykuJzwvYT4uJykKCQkJCSwgJ2RpdicsCScgaWQ9InJl
dHVybiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHdpZHRoOiAyMDBweDsgaGVpZ2h0OiA3NXB4
OyInKS4KCgkJCQluLmdyYWYodXBtX2ltZ19wb3BwZXJfZ1R4dCgnc3VjY2VzcycpLCAnIGlk
PSJzdWNjZXNzIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgd2lkdGg6IDE1MHB4OyBoZWlnaHQ6
IDM1cHg7IicpLgoJCQkJbi5ncmFmKHVwbV9pbWdfcG9wcGVyX2dUeHQoJ2ZhaWxlZCcpLCAn
IGlkPSJmYWlsZWQiIHN0eWxlPSJkaXNwbGF5OiBub25lOyB3aWR0aDogMTUwcHg7IGhlaWdo
dDogMzVweDsiJyk7CgkJfQoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9pbWdfcG9w
cGVyX29wdGlvbnNfZm9ybSgpCgl7CgkJZ2xvYmFsICRwcmVmczsKCgkJZWNobyBuLic8Zm9y
bSBhY3Rpb249IiIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDE1cHg7Jy4oICEkcHJlZnNbJ3Vw
bV9pbWdfcG9wcGVyX3Nob3dfZm9ybSddID8gJyBkaXNwbGF5OiBub25lOycgOiAnJykuJyI+
Jy4KCQkJZ3JhZigKCQkJCW4uJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImluY193aWR0
aCInLigoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X3dpZHRoJ10gPT0gJzEnKSA/ICcg
Y2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4gPGxhYmVsIGZvcj0iaW5jX3dpZHRoIj4n
LnVwbV9pbWdfcG9wcGVyX2dUeHQoJ2luY2x1ZGVfd2lkdGgnKS4nPC9sYWJlbD4gJy4KCQkJ
CW4uJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImluY19oZWlnaHQiJy4oKCRwcmVmc1sn
dXBtX2ltZ19wb3BwZXJfc2hvd19oZWlnaHQnXSA9PSAnMScpID8gJyBjaGVja2VkPSJjaGVj
a2VkIicgOiAnJykuJyAvPiA8bGFiZWwgZm9yPSJpbmNfaGVpZ2h0Ij4nLnVwbV9pbWdfcG9w
cGVyX2dUeHQoJ2luY2x1ZGVfaGVpZ2h0JykuJzwvbGFiZWw+ICcuCgkJCQluLic8aW5wdXQg
dHlwZT0iY2hlY2tib3giIGlkPSJpbmNfYWx0IicuKCgkcHJlZnNbJ3VwbV9pbWdfcG9wcGVy
X3Nob3dfYWx0J10gPT0gJzEnKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4g
PGxhYmVsIGZvcj0iaW5jX2FsdCI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdpbmNsdWRlX2Fs
dCcpLic8L2xhYmVsPiAnLgoJCQkJbi4nPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5j
X3RpdGxlIicuKCgkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3Nob3dfdGl0bGUnXSA9PSAnMScp
ID8gJyBjaGVja2VkPSJjaGVja2VkIicgOiAnJykuJyAvPiA8bGFiZWwgZm9yPSJpbmNfdGl0
bGUiPicudXBtX2ltZ19wb3BwZXJfZ1R4dCgnaW5jbHVkZV9jYXB0aW9uJykuJzwvbGFiZWw+
Jy5ici4KCQkJCW4uJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImluY19jbGFzcyInLigo
JHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X2NsYXNzJ10gPT0gJzEnKSA/ICcgY2hlY2tl
ZD0iY2hlY2tlZCInIDogJycpLicgLz4gPGxhYmVsIGZvcj0iaW5jX2NsYXNzIj4nLnVwbV9p
bWdfcG9wcGVyX2dUeHQoJ2Fzc2lnbl9jbGFzcycpLic8L2xhYmVsPiAnLgoJCQkJbi4nPGlu
cHV0IHR5cGU9InRleHQiIGlkPSJ0aGVfY2xhc3MiIHZhbHVlPSInLiRwcmVmc1sndXBtX2lt
Z19wb3BwZXJfdGhlX2NsYXNzJ10uJyIgY2xhc3M9ImVkaXQiIC8+JwoJCQksICcgc3R5bGU9
InRleHQtYWxpZ246IGNlbnRlcjsiJykuCgoJCQluLmdyYWYoCgkJCQknPGxhYmVsIGZvcj0i
Y3VzdG9tX2Zvcm0iPicudXBtX2ltZ19wb3BwZXJfZ1R4dCgnY3VzdG9tX2Zvcm0nKS4nPC9s
YWJlbD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJjdXN0b21fZm9ybSIgdmFsdWU9IicuJHBy
ZWZzWyd1cG1faW1nX3BvcHBlcl9jdXN0b21fZm9ybSddLiciIGNsYXNzPSJlZGl0IiAvPiAo
Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdvdmVycmlkZScpLicpJwoJCQksICcgc3R5bGU9InRl
eHQtYWxpZ246IGNlbnRlcjsiJykuCgoJCW4uJzwvZm9ybT4nOwoJfQoKLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK
CWZ1bmN0aW9uIHVwbV9pbWdfcG9wcGVyX3NlYXJjaF9mb3JtKCRjcml0LCAkbWV0aG9kLCAk
c29ydCwgJGRpcikKCXsKCQkkZGVmYXVsdF9tZXRob2QgPSAnbmFtZSc7CgoJCSRtZXRob2Qg
PSAoJG1ldGhvZCkgPyAkbWV0aG9kIDogJGRlZmF1bHRfbWV0aG9kOwoKCQkkbWV0aG9kcyA9
CWFycmF5KAoJCQknaWQnCQkJID0+IGdUeHQoJ0lEJyksCgkJCSduYW1lJwkJID0+IGdUeHQo
J25hbWUnKSwKCQkJJ2NhdGVnb3J5JyA9PiBnVHh0KCdpbWFnZV9jYXRlZ29yeScpLAoJCQkn
YXV0aG9yJwkgPT4gZ1R4dCgnYXV0aG9yJyksCgkJCSdhbHQnCQkJID0+IGdUeHQoJ2FsdF90
ZXh0JyksCgkJCSdjYXB0aW9uJwkgPT4gZ1R4dCgnY2FwdGlvbicpCgkJKTsKCgkJcmV0dXJu
IG4ubi4nPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iaW5kZXgucGhwIiBzdHlsZT0ibWFy
Z2luOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4nLgoJCQluLmdyYWYoCgkJCQknPGxh
YmVsIGZvcj0idXBtLWltZy1wb3BwZXItc2VhcmNoIj4nLmdUeHQoJ3NlYXJjaCcpLic8L2xh
YmVsPicuc3AuCgkJCQlzZWxlY3RJbnB1dCgnc2VhcmNoX21ldGhvZCcsICRtZXRob2RzLCAk
bWV0aG9kLCAnJywgJycsICd1cG0taW1nLXBvcHBlci1zZWFyY2gnKS5zcC4KCQkJCWZJbnB1
dCgndGV4dCcsICdjcml0JywgJGNyaXQsICdlZGl0JywgJycsICcnLCAnMTUnKS4KCQkJCWVJ
bnB1dCgndXBtX2ltZ19wb3BwZXInKS4KCQkJCWhJbnB1dCgnYm0nLCd0cnVlJykuCgkJCQlm
SW5wdXQoJ3N1Ym1pdCcsICdzZWFyY2gnLCBnVHh0KCdnbycpLCAnc21hbGxlcmJveCcpCgkJ
CSkuCgoJCQkoJGNyaXQgPyBuLmdyYWYoJzxhIGhyZWY9Ij9ldmVudD11cG1faW1nX3BvcHBl
cicuYS4nYm09dHJ1ZSI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCd2aWV3X2FsbCcpLic8L2E+
JykgOiAnJykuCgoJCW4uJzwvZm9ybT4nOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVw
bV9pbWdfcG9wcGVyX2xpbmsoKQoJewoJCSR2aWV3ID0gZ3BzKCd2aWV3Jyk7CgoJCWlmICgk
dmlldyA9PSAndGV4dCcgb3IgZW1wdHkoJHZpZXcpKQoJCXsKCQkJZWNobyA8PDxmb3JtCgo8
Zm9ybSBhY3Rpb249IiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJ1cG1faW1nX3BvcHBl
cl9zdGFydCIgdmFsdWU9IiI+CjwvZm9ybT4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9ImluZGV4LnBocD9ldmVudD11cG1faW1nX3BvcHBlcl9qcyYjMzg7bmFtZT1s
aW5rIj48L3NjcmlwdD4KCmZvcm07CgoJCX0KCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1
cG1faW1nX3BvcHBlcl9wYWdlYnlfZm9ybSgpCgl7CgkJZ2xvYmFsICRwcmVmczsKCgkJJHZh
bHMgPSBhcnJheSgKCQkJMTUJPT4gMTUsCgkJCTI1CT0+IDI1LAoJCQk1MAk9PiA1MCwKCQkJ
MTAwID0+IDEwMAoJCSk7CgoJCSRzZWxlY3RfcGFnZSA9IHNlbGVjdElucHV0KCdxdHknLCAk
dmFscywgJHByZWZzWydpbWFnZV9saXN0X3BhZ2VieSddLCAnJywgMSk7CgoJCS8vIHByb3Bl
ciBsb2NhbGlzYXRpb24KCQkkcGFnZSA9IHN0cl9yZXBsYWNlKCd7cGFnZX0nLCAkc2VsZWN0
X3BhZ2UsIGdUeHQoJ3ZpZXdfcGVyX3BhZ2UnKSk7CgoJCXJldHVybiBmb3JtKAoJCQknPGRp
diBzdHlsZT0ibWFyZ2luOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4nLgoJCQkJJHBh
Z2UuCgkJCQllSW5wdXQoJ3VwbV9pbWdfcG9wcGVyJykuCgkJCQlzSW5wdXQoJ3VwbV9pbWdf
cG9wcGVyX2NoYW5nZV9wYWdlYnknKS4KCQkJCWhJbnB1dCgnYm0nLCAnMScpLgoJCQkJJzxu
b3NjcmlwdD4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicuZ1R4dCgnZ28nKS4nIiBj
bGFzcz0ic21hbGxlcmJveCIgLz48L25vc2NyaXB0PicuCgkJCSc8L2Rpdj4nCgkJKTsKCX0K
Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX3BvcHBlcl9qcygpCgl7CgkJd2hpbGUg
KEBvYl9lbmRfY2xlYW4oKSk7CgoJCWlmIChncHMoJ25hbWUnKSA9PSAnbGluaycpCgkJewoJ
CQlnbG9iYWwgJHByZWZzOwoKCQkJJHR4dCA9IGdUeHQoJ2FkdmFuY2VkX29wdGlvbnMnKTsK
CQkJJGxhbmdfaW5zZXJ0X2ltYWdlID0gdXBtX2ltZ19wb3BwZXJfZ1R4dCgnaW5zZXJ0X2lt
YWdlJyk7CgoJCQloZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9qYXZhc2NyaXB0Iik7CgoJ
CQllY2hvIDw8PGpzCgoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbV9pbWdfcG9wcGVy
X3N0YXJ0JykudmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9keScpLnZhbHVl
OwoKCXZhciBjdXJyZW50ID0gJ2JvZHknOwoKCWlmIChkb2N1bWVudC5hcnRpY2xlLkV4Y2Vy
cHQpCgl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvZHknKS5zZXRBdHRyaWJ1dGUo
J29uY2xpY2snLCAiY3VycmVudCA9ICdib2R5JzsiKTsKCQlkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZXhjZXJwdCcpLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICJjdXJyZW50ID0gJ2V4
Y2VycHQnOyIpOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCXZhciB0eHQgPSAnJHR4dCc7CgoJdmFyIGEg
PSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKSA/CgkJZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2EnKSA6CgkJZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYScpOwoKCWEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoJyRsYW5nX2luc2VydF9pbWFnZScpKTsKCgl2YXIgdyA9IHskcHJlZnNbJ3VwbV9p
bWdfcG9wcGVyX2FkbWluX3BvcHVwX3dpZHRoJ119OwoJdmFyIGggPSB7JHByZWZzWyd1cG1f
aW1nX3BvcHBlcl9hZG1pbl9wb3B1cF9oZWlnaHQnXX07CgoJdmFyIHQgPSAoc2NyZWVuLmhl
aWdodCkgPyAoc2NyZWVuLmhlaWdodCAtIGgpIC8gMiA6IDA7Cgl2YXIgbCA9IChzY3JlZW4u
d2lkdGgpID8gKHNjcmVlbi53aWR0aCAtIHcpIC8gMiA6IDA7CgoJYS5zZXRBdHRyaWJ1dGUo
J29uY2xpY2snLCAidmFyIHVwbV9pbWdfcG9wcGVyID0gd2luZG93Lm9wZW4odGhpcy5ocmVm
LCAndXBtX2ltZ19wb3BwZXInLCAndG9wID0gJyt0KycsIGxlZnQgPSAnK2wrJywgd2lkdGgg
PSAnK3crJywgaGVpZ2h0ID0gJytoKycsIHRvb2xiYXIgPSBubywgbG9jYXRpb24gPSBubywg
ZGlyZWN0b3JpZXMgPSBubywgc3RhdHVzID0geWVzLCBtZW51YmFyID0gbm8sIHNjcm9sbGJh
cnMgPSB5ZXMsIGNvcHloaXN0b3J5ID0gbm8sIHJlc2l6YWJsZSA9IHllcycpOyB1cG1faW1n
X3BvcHBlci5mb2N1cygpOyByZXR1cm4gZmFsc2U7Iik7CgoJYS5zZXRBdHRyaWJ1dGUoJ3Rh
cmdldCcsICdibGFuaycpOwoJYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnP2V2ZW50PXVwbV9p
bWdfcG9wcGVyXHUwMDI2Ym09dHJ1ZScpOwoKCXZhciBsaW5rID0gKGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnROUykgPwoJCWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCcsICdoMycpIDoKCQlkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdo
MycpOwoKCWxpbmsuc2V0QXR0cmlidXRlKCdjbGFzcycsICdwbGFpbicpOwoJbGluay5hcHBl
bmRDaGlsZChhKTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgl2YXIgaDNzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2gzJyk7CgoJZm9yICh2YXIgaSA9IDA7IGkgPCBoM3MubGVuZ3RoOyBp
KyspCgl7CgkJdmFyIGgzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gzJylb
aV07CgoJCWlmIChoMy5maXJzdENoaWxkLmZpcnN0Q2hpbGQpCgkJewoJCQlpZiAoaDMuZmly
c3RDaGlsZC5maXJzdENoaWxkLm5vZGVWYWx1ZSA9PSB0eHQpCgkJCXsKCQkJCWgzLnBhcmVu
dE5vZGUuaW5zZXJ0QmVmb3JlKGxpbmssIGgzKTsKCQkJfQoJCX0KCX0KCi8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ly8gdGhhbmtzIEFsZXghIDxodHRwOi8vd3d3LmFsZXhraW5nLm9yZy8+CgoJZnVuY3Rpb24g
ZWRJbnNlcnRDb250ZW50KG15RmllbGQsIG15VmFsdWUpCgl7CgkJLy8gSUUgc3VwcG9ydAoJ
CWlmIChkb2N1bWVudC5zZWxlY3Rpb24pCgkJewoJCQlteUZpZWxkLmZvY3VzKCk7CgkJCXNl
bCA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwoJCQlzZWwudGV4dCA9IG15
VmFsdWU7CgkJCW15RmllbGQuZm9jdXMoKTsKCQl9CgoJCS8vIE1vemlsbGEvTmV0c2NhcGUg
c3VwcG9ydAoJCWVsc2UgaWYgKG15RmllbGQuc2VsZWN0aW9uU3RhcnQgfHwgbXlGaWVsZC5z
ZWxlY3Rpb25TdGFydCA9PSAnMCcpCgkJewoJCQlzdGFydFBvcyA9IG15RmllbGQuc2VsZWN0
aW9uU3RhcnQ7CgkJCWVuZFBvcyA9IG15RmllbGQuc2VsZWN0aW9uRW5kOwoKCQkJbXlGaWVs
ZC52YWx1ZSA9IG15RmllbGQudmFsdWUuc3Vic3RyaW5nKDAsIHN0YXJ0UG9zKSArIG15VmFs
dWUgKyBteUZpZWxkLnZhbHVlLnN1YnN0cmluZyhlbmRQb3MsIG15RmllbGQudmFsdWUubGVu
Z3RoKTsKCgkJCW15RmllbGQuZm9jdXMoKTsKCQkJbXlGaWVsZC5zZWxlY3Rpb25TdGFydCA9
IHN0YXJ0UG9zICsgbXlWYWx1ZS5sZW5ndGg7CgkJCW15RmllbGQuc2VsZWN0aW9uRW5kID0g
c3RhcnRQb3MgKyBteVZhbHVlLmxlbmd0aDsKCQl9CgoJCWVsc2UKCQl7CgkJCW15RmllbGQu
dmFsdWUgKz0gbXlWYWx1ZTsKCQkJbXlGaWVsZC5mb2N1cygpOwoJCX0KCX0KanM7CgkJfQoK
CQllbHNlaWYgKGdwcygnbmFtZScpID09ICdwb3AnKQoJCXsKCQkJZ2xvYmFsICRpbWdfZGly
OwoKCQkJJGltZ191cmwgPSBodS4kaW1nX2RpcjsKCgkJCSRsYW5nX2NvbmZpcm1fb3Zlcndy
aXRlID0gdXBtX2ltZ19wb3BwZXJfZ1R4dCgnY29uZmlybV9vdmVyd3JpdGUnKTsKCQkJJGxh
bmdfY2hlY2tfbGVhdmUgPSB1cG1faW1nX3BvcHBlcl9nVHh0KCdjaGVja19sZWF2ZScpOwoK
CQkJaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvamF2YXNjcmlwdCIpOwoKCQkJZWNobyA8
PDxqcwoJZnVuY3Rpb24gbWFrZVdpbih0aXRsZSwgY29udGVudCwgdywgaCkKCXsKCQlpZiAo
dyAmJiBoKQoJCXsKCQkJdmFyIHd3ID0gcGFyc2VJbnQodyk7CgkJCXZhciB3aCA9IHBhcnNl
SW50KGgpOwoKCQkJaWYgKHd3IDwgMTAwKQoJCQl7CgkJCQl3dyA9IDEyNTsKCQkJfQoKCQkJ
aWYgKHdoIDwgMTAwKQoJCQl7CgkJCQl3aCA9IDEyNTsKCgkJCQl3dyArPSA3NTsKCQkJfQoK
CQkJdmFyIHNjcm9sbCA9IGZhbHNlOwoKCQkJaWYgKHNjcmVlbi53aWR0aCAmJiAoc2NyZWVu
LndpZHRoIDwgd3cpKQoJCQl7CgkJCQlzY3JvbGwgPSAneWVzJzsKCQkJCXd3ID0gc2NyZWVu
LndpZHRoOwoJCQl9CgoJCQlpZiAoc2NyZWVuLmhlaWdodCAmJiAoc2NyZWVuLmhlaWdodCA8
IHdoKSkKCQkJewoJCQkJc2Nyb2xsID0gJ3llcyc7CgkJCQl3aCA9IHNjcmVlbi5oZWlnaHQ7
CgkJCX0KCQl9CgoJCWVsc2UKCQl7CgkJCXd3ID0gNDUwOwoJCQl3aCA9IDI1MDsKCQl9CgoJ
CWlmICghdGl0bGUpCgkJewoJCQl0aXRsZSA9IG5hbWU7CgkJfQoKCQl2YXIgdCA9IChzY3Jl
ZW4uaGVpZ2h0KSA/IChzY3JlZW4uaGVpZ2h0IC0gd2gpIC8gMiA6IDA7CgkJdmFyIGwgPSAo
c2NyZWVuLndpZHRoKSA/IChzY3JlZW4ud2lkdGggLSB3dykgLyAyIDogMDsKCgkJdmFyIGZh
c3RXaW4gPSB3aW5kb3cub3BlbignJywgJ3VwbV9pbWdfcG9wcGVyX3ByZXZpZXcnLCAndG9w
ID0gJyt0KycsIGxlZnQgPSAnK2wrJywgd2lkdGggPSAnK3d3KycsIGhlaWdodCA9ICcrd2gr
JywgdG9vbGJhciA9IG5vLCBsb2NhdGlvbiA9IG5vLCBkaXJlY3RvcmllcyA9IG5vLCBzdGF0
dXMgPSBubywgbWVudWJhciA9IG5vLCBzY3JvbGxiYXJzID0gJytzY3JvbGwrJywgY29weWhp
c3RvcnkgPSBubywgcmVzaXphYmxlID0geWVzJyk7CgoJCWZhc3RXaW4uZG9jdW1lbnQud3Jp
dGVsbignPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VO
IiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+Jyk7CgkJZmFzdFdp
bi5kb2N1bWVudC53cml0ZWxuKCc8aHRtbD4nKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRl
bG4oJzxoZWFkPicpOwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignPG1ldGEgaHR0cC1l
cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgi
PicpOwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignPG1ldGEgaHR0cC1lcXVpdj0iaW1h
Z2V0b29sYmFyIiBjb250ZW50PSJubyI+Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxu
KCc8dGl0bGU+Jyt0aXRsZSsnPC90aXRsZT4nKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRl
bG4oJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0
ZWxuKCc8IS0tJyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdib2R5IHsnKTsKCQlm
YXN0V2luLmRvY3VtZW50LndyaXRlbG4oJ21hcmdpbjogMDsnKTsKCQlmYXN0V2luLmRvY3Vt
ZW50LndyaXRlbG4oJ3BhZGRpbmc6IDA7Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxu
KCdjb2xvcjogIzAwMDsnKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJ2JhY2tncm91
bmQtY29sb3I6ICNmZmY7Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdib3JkZXIt
dG9wOiAxNXB4IHNvbGlkICNmYzM7Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCd0
ZXh0LWFsaWduOiBjZW50ZXI7Jyk7CgoJCWlmIChzY3JvbGwgPT0gZmFsc2UpCgkJewoJCQlm
YXN0V2luLmRvY3VtZW50LndyaXRlbG4oJ292ZXJmbG93OiBoaWRkZW47Jyk7CgkJfQoKCQlm
YXN0V2luLmRvY3VtZW50LndyaXRlbG4oJ30nKTsKCgkJZmFzdFdpbi5kb2N1bWVudC53cml0
ZWxuKCcnKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJ2ltZyB7Jyk7CgkJZmFzdFdp
bi5kb2N1bWVudC53cml0ZWxuKCdtYXJnaW46IDAgYXV0bzsnKTsKCQlmYXN0V2luLmRvY3Vt
ZW50LndyaXRlbG4oJ3BhZGRpbmc6IDA7Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxu
KCdib3JkZXI6IG5vbmU7Jyk7CgoJCWlmICh3aCA9PSAxMjUpCgkJewoJCQlmYXN0V2luLmRv
Y3VtZW50LndyaXRlbG4oJ21hcmdpbi10b3A6ICcgKyBNYXRoLmZsb29yKDUwLShoLzIpKSAr
ICdweDsnKTsKCQl9CgoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignfScpOwoKCQlmYXN0
V2luLmRvY3VtZW50LndyaXRlbG4oJy0tPicpOwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVs
bignPC9zdHlsZT4nKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJzwvaGVhZD4nKTsK
CQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJzxib2R5PicpOwoJCWZhc3RXaW4uZG9jdW1l
bnQud3JpdGVsbignPGRpdj4nKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oY29udGVu
dCk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCc8L2Rpdj4nKTsKCQlmYXN0V2luLmRv
Y3VtZW50LndyaXRlbG4oJzwvYm9keT4nKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlKCc8
L2h0bWw+Jyk7CgoJCWZhc3RXaW4uZG9jdW1lbnQuY2xvc2UoKTsKCgkJZmFzdFdpbi5mb2N1
cygpOwoKCQlyZXR1cm4gZmFsc2U7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gYnVpbGRU
YWcodHlwZSwgaWQsIGV4dCwgd2lkdGgsIGhlaWdodCwgYWx0LCB0aXRsZSkKCXsKCQl2YXIg
aW5jX2FsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmNfYWx0Jyk7CgkJdmFyIGlu
Y190aXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmNfdGl0bGUnKTsKCgkJdmFy
IGluY193aWR0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmNfd2lkdGgnKTsKCQl2
YXIgaW5jX2hlaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmNfaGVpZ2h0Jyk7
CgoJCXZhciBpbmNfY2xhc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5jX2NsYXNz
Jyk7CgkJdmFyIHRoZV9jbGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aGVfY2xh
c3MnKS52YWx1ZTsKCgkJdmFyIGN1c3RvbV9mb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2N1c3RvbV9mb3JtJykudmFsdWU7CgoJCWlmICh0eXBlID09ICdpbWFnZScpCgkJewoJ
CQl2YXIgaW5zZXJ0ID0gJzx0eHA6aW1hZ2UgaWQ9IicraWQrJyInOwoKCQkJaWYgKGluY19j
bGFzcy5jaGVja2VkICYmIHRoZV9jbGFzcykKCQkJewoJCQkJaW5zZXJ0ICs9ICcgY2xhc3M9
IicrdGhlX2NsYXNzKyciJzsKCQkJfQoJCX0KCgkJZWxzZSBpZiAodHlwZSA9PSAndGh1bWIn
KQoJCXsKCQkJdmFyIGluc2VydCA9ICc8dHhwOnRodW1ibmFpbCBpZD0iJytpZCsnIic7CgkJ
fQoKCQllbHNlIGlmICh0eXBlID09ICdwb3B1cCcpCgkJewoJCQl2YXIgaW5zZXJ0ID0gJzx0
eHA6dGh1bWJuYWlsIGlkPSInK2lkKyciIHBvcGxpbms9IjEiJzsKCQl9CgoJCWVsc2UgaWYg
KHR5cGUgPT0gJ3RleHRpbGUnKQoJCXsKCQkJdmFyIGluc2VydCA9ICchJzsKCgkJCWlmIChp
bmNfY2xhc3MuY2hlY2tlZCAmJiB0aGVfY2xhc3MpCgkJCXsKCQkJCWluc2VydCArPSAnKCcr
dGhlX2NsYXNzKycpJzsKCQkJfQoKCQkJaW5zZXJ0ICs9ICckaW1nX3VybC8nK2lkK2V4dDsK
CgkJCWlmIChpbmNfYWx0LmNoZWNrZWQgJiYgYWx0KQoJCQl7CgkJCQlpbnNlcnQgKz0gJygn
K2FsdCsnKSc7CgkJCX0KCgkJCWluc2VydCArPSAnISc7CgoJCQlyZXR1cm4gaW5zZXJ0OwoJ
CX0KCgkJZWxzZSBpZiAodHlwZSA9PSAneGh0bWwnKQoJCXsKCQkJdmFyIGluc2VydCA9ICc8
aW1nIHNyYz0iJGltZ191cmwvJytpZCtleHQrJyInOwoKCQkJaWYgKGluY19jbGFzcy5jaGVj
a2VkICYmIHRoZV9jbGFzcykKCQkJewoJCQkJaW5zZXJ0ICs9ICcgY2xhc3M9IicrdGhlX2Ns
YXNzKyciJzsKCQkJfQoKCQkJaWYgKGluY193aWR0aC5jaGVja2VkICYmIHdpZHRoKQoJCQl7
CgkJCQlpbnNlcnQgKz0gJyB3aWR0aD0iJyt3aWR0aCsnIic7CgkJCX0KCgkJCWlmIChpbmNf
aGVpZ2h0LmNoZWNrZWQgJiYgaGVpZ2h0KQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBoZWlnaHQ9
IicraGVpZ2h0KyciJzsKCQkJfQoKCQkJaWYgKGluY19hbHQuY2hlY2tlZCAmJiBhbHQpCgkJ
CXsKCQkJCWluc2VydCArPSAnIGFsdD0iJythbHQrJyInOwoJCQl9CgoJCQllbHNlCgkJCXsK
CQkJCWluc2VydCArPSAnIGFsdD0iIic7CgkJCX0KCgkJCWlmIChpbmNfdGl0bGUuY2hlY2tl
ZCAmJiB0aXRsZSkKCQkJewoJCQkJaW5zZXJ0ICs9ICcgdGl0bGU9IicrdGl0bGUrJyInOwoJ
CQl9CgkJfQoKCQllbHNlIGlmICh0eXBlID09ICdwbHVnaW4tY3VzdG9tJykKCQl7CgkJCXZh
ciBpbnNlcnQgPSAnPHR4cDp1cG1faW1hZ2UgaW1hZ2VfaWQ9IicraWQrJyIgZm9ybT0iJytj
dXN0b21fZm9ybSsnIic7CgkJfQoKCQllbHNlCgkJewoJCQl0eXBlID0gbmV3IFN0cmluZyh0
eXBlKTsKCQkJdHlwZSA9IHR5cGUucmVwbGFjZSgncGx1Z2luLScsICcnKTsKCgkJCXZhciBp
bnNlcnQgPSAnPHR4cDp1cG1faW1hZ2UgdHlwZT0iJyt0eXBlKyciIGltYWdlX2lkPSInK2lk
KyciJzsKCgkJCWlmIChpbmNfY2xhc3MuY2hlY2tlZCAmJiB0aGVfY2xhc3MpCgkJCXsKCQkJ
CWluc2VydCArPSAnIGNsYXNzPSInK3RoZV9jbGFzcysnIic7CgkJCX0KCgkJCWlmIChpbmNf
d2lkdGguY2hlY2tlZCA9PSBmYWxzZSkKCQkJewoJCQkJaW5zZXJ0ICs9ICcgc2hvd193aWR0
aD0ibm8iJzsKCQkJfQoKCQkJaWYgKGluY19oZWlnaHQuY2hlY2tlZCA9PSBmYWxzZSkKCQkJ
ewoJCQkJaW5zZXJ0ICs9ICcgc2hvd19oZWlnaHQ9Im5vIic7CgkJCX0KCgkJCWlmIChpbmNf
YWx0LmNoZWNrZWQgPT0gZmFsc2UpCgkJCXsKCQkJCWluc2VydCArPSAnIHNob3dfYWx0PSJu
byInOwoJCQl9CgoJCQlpZiAoaW5jX3RpdGxlLmNoZWNrZWQgPT0gZmFsc2UpCgkJCXsKCQkJ
CWluc2VydCArPSAnIHNob3dfdGl0bGU9Im5vIic7CgkJCX0KCQl9CgoJCWluc2VydCArPSAn
IC8+JzsKCgkJcmV0dXJuIGluc2VydDsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiBpbnNl
cnRUYWcodHlwZSwgaWQsIGV4dCwgd2lkdGgsIGhlaWdodCwgYWx0LCB0aXRsZSkKCXsKCQl2
YXIgaW5zZXJ0ID0gYnVpbGRUYWcodHlwZSwgaWQsIGV4dCwgd2lkdGgsIGhlaWdodCwgYWx0
LCB0aXRsZSk7CgoJCWlmICh3aW5kb3cub3BlbmVyLmRvY3VtZW50LmFydGljbGUpCgkJewoJ
CQlpZiAodHlwZSA9PSAnYXBwZW5kLWFydGljbGUtaW1hZ2UnKQoJCQl7CgkJCQlpZiAod2lu
ZG93Lm9wZW5lci5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXJ0aWNsZS1pbWFnZScpLnZh
bHVlID09ICcnKQoJCQkJewoJCQkJCXdpbmRvdy5vcGVuZXIuZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2FydGljbGUtaW1hZ2UnKS52YWx1ZSA9IGlkOwoJCQkJCXJldHVybiBzaG93TXNn
KCdzdWNjZXNzJyk7CgkJCQl9CgoJCQkJZWxzZQoJCQkJewoJCQkJCXdpbmRvdy5vcGVuZXIu
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FydGljbGUtaW1hZ2UnKS52YWx1ZSArPSAnLCcr
aWQ7CgkJCQkJcmV0dXJuIHNob3dNc2coJ3N1Y2Nlc3MnKTsKCQkJCX0KCQkJfQoKCQkJZWxz
ZSBpZiAodHlwZSA9PSAncmVwbGFjZS1hcnRpY2xlLWltYWdlJykKCQkJewoJCQkJaWYgKHdp
bmRvdy5vcGVuZXIuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FydGljbGUtaW1hZ2UnKS52
YWx1ZS5sZW5ndGggPiAxKQoJCQkJewoJCQkJCXZhciBvcHRpb24gPSBjb25maXJtKCckbGFu
Z19jb25maXJtX292ZXJ3cml0ZScpOwoKCQkJCQlpZiAob3B0aW9uKQoJCQkJCXsKCQkJCQkJ
d2luZG93Lm9wZW5lci5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXJ0aWNsZS1pbWFnZScp
LnZhbHVlID0gaWQ7CgkJCQkJCXJldHVybiBzaG93TXNnKCdzdWNjZXNzJyk7CgkJCQkJfQoJ
CQkJfQoKCQkJCWVsc2UKCQkJCXsKCQkJCQl3aW5kb3cub3BlbmVyLmRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhcnRpY2xlLWltYWdlJykudmFsdWUgPSBpZDsKCQkJCQlyZXR1cm4gc2hv
d01zZygnc3VjY2VzcycpOwoJCQkJfQoJCQl9CgoJCQllbHNlCgkJCXsKCQkJCXZhciB0ZW1w
ID0gJ3dpbmRvdy5vcGVuZXIuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2luZG93Lm9wZW5l
ci5jdXJyZW50KSc7CgoJCQkJdGVtcCA9IGV2YWwodGVtcCk7CgoJCQkJd2luZG93Lm9wZW5l
ci5lZEluc2VydENvbnRlbnQodGVtcCwgaW5zZXJ0KTsKCgkJCQlyZXR1cm4gc2hvd01zZygn
c3VjY2VzcycpOwoJCQl9CgkJfQoKCQllbHNlIGlmICh3aW5kb3cub3BlbmVyLmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpCgkJewoJCQl3aW5kb3cub3BlbmVyLmVkSW5zZXJ0
Q29udGVudCh3aW5kb3cub3BlbmVyLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJyks
IGluc2VydCk7CgkJCXJldHVybiBzaG93TXNnKCdzdWNjZXNzJyk7CgkJfQoKCQllbHNlIGlm
ICh3aW5kb3cub3BlbmVyLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdodG1sJykpCgkJewoJ
CQl3aW5kb3cub3BlbmVyLmVkSW5zZXJ0Q29udGVudCh3aW5kb3cub3BlbmVyLmRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdodG1sJyksIGluc2VydCk7CgkJCXJldHVybiBzaG93TXNnKCdz
dWNjZXNzJyk7CgkJfQoKCQlyZXR1cm4gc2hvd01zZygnZmFpbGVkJyk7Cgl9CgovLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCgoJZnVuY3Rpb24gd2FybkVkaXRJbWFnZShpZCkKCXsKCQlpZiAod2luZG93Lm9wZW5l
ci5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9keScpLnZhbHVlICE9IHdpbmRvdy5vcGVu
ZXIuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbV9pbWdfcG9wcGVyX3N0YXJ0JykudmFs
dWUpCgkJewoJCQl2YXIgY2hlY2sgPSBjb25maXJtKCckbGFuZ19jaGVja19sZWF2ZScpOwoK
CQkJaWYgKGNoZWNrKQoJCQl7CgkJCQlnb0VkaXRJbWFnZShpZCk7CgkJCX0KCQl9CgoJCWVs
c2UKCQl7CgkJCWdvRWRpdEltYWdlKGlkKTsKCQl9CgoJCXJldHVybiBmYWxzZTsKCX0KCi8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KCglmdW5jdGlvbiBnb0VkaXRJbWFnZShpZCkKCXsKCQl3aW5kb3cub3BlbmVy
LmZvY3VzKCk7CgoJCWlmICh3aW5kb3cub3BlbmVyLmRvY3VtZW50LmFydGljbGUuc3RlcC52
YWx1ZSAhPSAnY3JlYXRlJykKCQl7CgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5ZXMn
KS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cub3BlbmVyLmRvY3VtZW50LmxvY2F0aW9u
KTsKCQkJc2hvd01zZygncmV0dXJuJyk7CgkJfQoKCQl3aW5kb3cub3BlbmVyLmRvY3VtZW50
LmxvY2F0aW9uID0gJz9ldmVudD1pbWFnZVx1MDAyNnN0ZXA9aW1hZ2VfZWRpdFx1MDAyNmlk
PScraWQ7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gZ29CYWNrKHVybCkKCXsKCQl3aW5k
b3cub3BlbmVyLmZvY3VzKCk7CgoJCWRvbmUoJ3JldHVybicpOwoKCQl3aW5kb3cub3BlbmVy
LmRvY3VtZW50LmxvY2F0aW9uID0gdXJsOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHNo
b3dNc2coaWQpCgl7CgkJdmFyIG9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsK
CgkJdmFyIHdpZHRoID0gcGFyc2VJbnQob2JqLnN0eWxlLndpZHRoKTsKCQl2YXIgaGVpZ2h0
ID0gcGFyc2VJbnQob2JqLnN0eWxlLmhlaWdodCk7CgoJCXZhciB0b3AgPSAxMDAgKyBzY3Jv
bGxUb3AoKTsKCQl2YXIgbGVmdCA9ICggKHBhZ2VXaWR0aCgpIC8gMikgLSAod2lkdGggLyAy
KSApICsgc2Nyb2xsTGVmdCgpOwoKCQlvYmouc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUn
OwoJCW9iai5zdHlsZS50b3AgPSB0b3AgKyAncHgnOwoJCW9iai5zdHlsZS5sZWZ0ID0gbGVm
dCArICdweCc7CgkJb2JqLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwoKCQlpZiAoaWQgIT0g
J3JldHVybicpCgkJewoJCQlzZXRUaW1lb3V0KCJkb25lKCciK2lkKyInKSIsIDEwMDApOwoJ
CX0KCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiBkb25lKGlkKQoJewoJCWRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJfQoKLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQoKCWZ1bmN0aW9uIHBhZ2VXaWR0aCgpCgl7CgkJaWYgKHNlbGYuaW5uZXJXaWR0aCkKCQl7
CgkJCXJldHVybiBzZWxmLmlubmVyV2lkdGg7CgkJfQoKCQllbHNlIGlmIChkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo
KQoJCXsKCQkJcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsK
CQl9CgoJCXJldHVybiAwOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHNjcm9sbFRvcCgp
Cgl7CgkJaWYgKHNlbGYucGFnZVlPZmZzZXQpCgkJewoJCQlyZXR1cm4gc2VsZi5wYWdlWU9m
ZnNldDsKCQl9CgoJCWVsc2UgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKQoJCXsKCQkJcmV0dXJuIGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7CgkJfQoKCQlyZXR1cm4gMDsKCX0KCi8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KCglmdW5jdGlvbiBzY3JvbGxMZWZ0KCkKCXsKCQlpZiAoc2VsZi5wYWdlWU9mZnNl
dCkKCQl7CgkJCXJldHVybiBzZWxmLnBhZ2VYT2Zmc2V0OwoJCX0KCgkJZWxzZSBpZiAoZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv
bGxUb3ApCgkJewoJCQlyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExl
ZnQ7CgkJfQoKCQlyZXR1cm4gMDsKCX0KCmpzOwoJCX0KCgkJZXhpdCgwKTsKCX0KCi8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX3BvcHBlcl9wcmVmcygkZXZlbnQsICRzdGVwKQoJ
ewoJCWdsb2JhbCAkcHJlZnM7CgoJCXBhZ2V0b3AodXBtX2ltZ19wb3BwZXJfZ1R4dCgncHJl
ZnMnKSwgKCRzdGVwID09ICd1cGRhdGUnID8gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKSA6
ICcnKSk7CgoJCWlmICgkc3RlcCA9PSAndXBkYXRlJykKCQl7CgkJCWV4dHJhY3QoZG9TbGFz
aChwc2FzKGFycmF5KAoJCQkJJ3Nob3dfd2lkdGgnLCAnc2hvd19oZWlnaHQnLCAnc2hvd19h
bHQnLCAnc2hvd190aXRsZScsICdzaG93X2NsYXNzJywgJ3RoZV9jbGFzcycsICdjdXN0b21f
Zm9ybScsCgkJCQknc2hvd19mb3JtJywgJ2FkbWluX3BvcHVwX3dpZHRoJywgJ2FkbWluX3Bv
cHVwX2hlaWdodCcKCQkJKSkpKTsKCgkJCSRzaG93X3dpZHRoICA9ICgkc2hvd193aWR0aCA9
PSAnMScpID8gJHNob3dfd2lkdGggOiAnMCc7CgkJCSRzaG93X2hlaWdodCA9ICgkc2hvd19o
ZWlnaHQgPT0gJzEnKSA/ICRzaG93X2hlaWdodCA6ICcwJzsKCQkJJHNob3dfYWx0ICAgID0g
KCRzaG93X2FsdCA9PSAnMScpID8gJHNob3dfYWx0IDogJzAnOwoJCQkkc2hvd190aXRsZSAg
PSAoJHNob3dfdGl0bGUgPT0gJzEnKSA/ICRzaG93X3RpdGxlIDogJzAnOwoJCQkkc2hvd19j
bGFzcyAgPSAoJHNob3dfY2xhc3MgPT0gJzEnKSA/ICRzaG93X2NsYXNzIDogJzAnOwoKCQkJ
JHRoZV9jbGFzcyAgID0gcHJlZ19yZXBsYWNlKCIvKF58JlxTKzspfCg8W14+XSo+KS9VIiwg
JycsIGR1bWJEb3duKCR0aGVfY2xhc3MpKTsKCQkJJGN1c3RvbV9mb3JtID0gc2FuaXRpemVG
b3JVcmwoJGN1c3RvbV9mb3JtKTsKCgkJCWlmIChlbXB0eSgkYWRtaW5fcG9wdXBfd2lkdGgp
KQoJCQl7CgkJCQkkYWRtaW5fcG9wdXBfd2lkdGggPSAnNzI1JzsKCQkJfQoKCQkJaWYgKGVt
cHR5KCRhZG1pbl9wb3B1cF9oZWlnaHQpKQoJCQl7CgkJCQkkYWRtaW5fcG9wdXBfaGVpZ2h0
ID0gJzQwMCc7CgkJCX0KCgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLCAidmFsID0gJyRz
aG93X3dpZHRoJyIsICJuYW1lID0gJ3VwbV9pbWdfcG9wcGVyX3Nob3dfd2lkdGgnIik7CgkJ
CXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLCAidmFsID0gJyRzaG93X2hlaWdodCciLCAibmFt
ZSA9ICd1cG1faW1nX3BvcHBlcl9zaG93X2hlaWdodCciKTsKCQkJc2FmZV91cGRhdGUoJ3R4
cF9wcmVmcycsICJ2YWwgPSAnJHNob3dfYWx0JyIsICJuYW1lID0gJ3VwbV9pbWdfcG9wcGVy
X3Nob3dfYWx0JyIpOwoJCQlzYWZlX3VwZGF0ZSgndHhwX3ByZWZzJywgInZhbCA9ICckc2hv
d190aXRsZSciLCAibmFtZSA9ICd1cG1faW1nX3BvcHBlcl9zaG93X3RpdGxlJyIpOwoJCQlz
YWZlX3VwZGF0ZSgndHhwX3ByZWZzJywgInZhbCA9ICckc2hvd19jbGFzcyciLCAibmFtZSA9
ICd1cG1faW1nX3BvcHBlcl9zaG93X2NsYXNzJyIpOwoJCQlzYWZlX3VwZGF0ZSgndHhwX3By
ZWZzJywgInZhbCA9ICckdGhlX2NsYXNzJyIsICJuYW1lID0gJ3VwbV9pbWdfcG9wcGVyX3Ro
ZV9jbGFzcyciKTsKCQkJc2FmZV91cGRhdGUoJ3R4cF9wcmVmcycsICJ2YWwgPSAnJGN1c3Rv
bV9mb3JtJyIsICJuYW1lID0gJ3VwbV9pbWdfcG9wcGVyX2N1c3RvbV9mb3JtJyIpOwoKCQkJ
c2FmZV91cGRhdGUoJ3R4cF9wcmVmcycsICJ2YWwgPSAnJHNob3dfZm9ybSciLCAibmFtZSA9
ICd1cG1faW1nX3BvcHBlcl9zaG93X2Zvcm0nIik7CgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJl
ZnMnLCAidmFsID0gJyRhZG1pbl9wb3B1cF93aWR0aCciLCAibmFtZSA9ICd1cG1faW1nX3Bv
cHBlcl9hZG1pbl9wb3B1cF93aWR0aCciKTsKCQkJc2FmZV91cGRhdGUoJ3R4cF9wcmVmcycs
ICJ2YWwgPSAnJGFkbWluX3BvcHVwX2hlaWdodCciLCAibmFtZSA9ICd1cG1faW1nX3BvcHBl
cl9hZG1pbl9wb3B1cF9oZWlnaHQnIik7CgoJCQkkcHJlZnMgPSBnZXRfcHJlZnMoKTsKCQl9
CgoJCWVjaG8gbi5uLic8ZGl2IHN0eWxlPSJtYXJnaW46IDNlbSBhdXRvIGF1dG8gYXV0bzsg
d2lkdGg6IDIwZW07Ij4nLgoKCQluLm4uaGVkKHVwbV9pbWdfcG9wcGVyX2dUeHQoJ3ByZWZz
JyksICcxJykuCgoJCW4ubi5mb3JtKAoJCQluLmVJbnB1dCgndXBtX2ltZ19wb3BwZXJfcHJl
ZnMnKS4KCQkJbi5zSW5wdXQoJ3VwZGF0ZScpLgoKCQkJbi5uLnRhZygKCQkJCW4ubi50YWco
dXBtX2ltZ19wb3BwZXJfZ1R4dCgncHVibGljX3NpZGUnKSwgJ2xlZ2VuZCcpLgoKCQkJCW4u
bi5ncmFmKAoJCQkJCXVwbV9pbWdfcG9wcGVyX2dUeHQoJ3Nob3dfd2lkdGgnKS5ici4KCQkJ
CQluLnllc25vUmFkaW8oJ3Nob3dfd2lkdGgnLCAkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3No
b3dfd2lkdGgnXSkKCQkJCSkuCgoJCQkJbi5uLmdyYWYoCgkJCQkJdXBtX2ltZ19wb3BwZXJf
Z1R4dCgnc2hvd19oZWlnaHQnKS5ici4KCQkJCQluLnllc25vUmFkaW8oJ3Nob3dfaGVpZ2h0
JywgJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X2hlaWdodCddKQoJCQkJKS4KCgkJCQlu
Lm4uZ3JhZigKCQkJCQl1cG1faW1nX3BvcHBlcl9nVHh0KCdzaG93X2FsdCcpLmJyLgoJCQkJ
CW4ueWVzbm9SYWRpbygnc2hvd19hbHQnLCAkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3Nob3df
YWx0J10pCgkJCQkpLgoKCQkJCW4ubi5ncmFmKAoJCQkJCXVwbV9pbWdfcG9wcGVyX2dUeHQo
J3Nob3dfdGl0bGUnKS5ici4KCQkJCQluLnllc25vUmFkaW8oJ3Nob3dfdGl0bGUnLCAkcHJl
ZnNbJ3VwbV9pbWdfcG9wcGVyX3Nob3dfdGl0bGUnXSkKCQkJCSkuCgoJCQkJbi5uLmdyYWYo
CgkJCQkJdXBtX2ltZ19wb3BwZXJfZ1R4dCgnc2hvd19jbGFzcycpLmJyLgoJCQkJCW4ueWVz
bm9SYWRpbygnc2hvd19jbGFzcycsICRwcmVmc1sndXBtX2ltZ19wb3BwZXJfc2hvd19jbGFz
cyddKQoJCQkJKS4KCgkJCQluLm4uZ3JhZigKCQkJCQl1cG1faW1nX3BvcHBlcl9nVHh0KCd0
aGVfY2xhc3MnKS5ici4KCQkJCQluLmZJbnB1dCgndGV4dCcsICd0aGVfY2xhc3MnLCAkcHJl
ZnNbJ3VwbV9pbWdfcG9wcGVyX3RoZV9jbGFzcyddLCAnZWRpdCcpCgkJCQkpLgoKCQkJCW4u
bi5ncmFmKAoJCQkJCXVwbV9pbWdfcG9wcGVyX2dUeHQoJ2N1c3RvbV9mb3JtJykuYnIuCgkJ
CQkJbi5mSW5wdXQoJ3RleHQnLCAnY3VzdG9tX2Zvcm0nLCAkcHJlZnNbJ3VwbV9pbWdfcG9w
cGVyX2N1c3RvbV9mb3JtJ10sICdlZGl0JykKCQkJCSkKCQkJLCAnZmllbGRzZXQnKS4KCgkJ
CW4ubi50YWcoCgkJCQluLm4udGFnKHVwbV9pbWdfcG9wcGVyX2dUeHQoJ2FkbWluX3NpZGUn
KSwgJ2xlZ2VuZCcpLgoKCQkJCW4ubi5ncmFmKAoJCQkJCXVwbV9pbWdfcG9wcGVyX2dUeHQo
J3Nob3dfZm9ybScpLmJyLgoJCQkJCW4ueWVzbm9SYWRpbygnc2hvd19mb3JtJywgJHByZWZz
Wyd1cG1faW1nX3BvcHBlcl9zaG93X2Zvcm0nXSkKCQkJCSkuCgoJCQkJbi5uLmdyYWYoCgkJ
CQkJdXBtX2ltZ19wb3BwZXJfZ1R4dCgnYWRtaW5fcG9wdXBfd2lkdGgnKS5ici4KCQkJCQlu
LmZJbnB1dCgndGV4dCcsICdhZG1pbl9wb3B1cF93aWR0aCcsICRwcmVmc1sndXBtX2ltZ19w
b3BwZXJfYWRtaW5fcG9wdXBfd2lkdGgnXSwgJ2VkaXQnKQoJCQkJKS4KCgkJCQluLm4uZ3Jh
ZigKCQkJCQl1cG1faW1nX3BvcHBlcl9nVHh0KCdhZG1pbl9wb3B1cF9oZWlnaHQnKS5ici4K
CQkJCQluLmZJbnB1dCgndGV4dCcsICdhZG1pbl9wb3B1cF9oZWlnaHQnLCAkcHJlZnNbJ3Vw
bV9pbWdfcG9wcGVyX2FkbWluX3BvcHVwX2hlaWdodCddLCAnZWRpdCcpCgkJCQkpCgoJCQks
ICdmaWVsZHNldCcpLgoKCQkJbi5uLmZJbnB1dCgnc3VibWl0JywgJ3VwZGF0ZScsICdVcGRh
dGUnLCAnc21hbGxlcmJveCcpCgoJCSkubi5uLic8L2Rpdj4nOwoJfQoKLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK
CWZ1bmN0aW9uIHVwbV9pbWdfcG9wcGVyX2luc3RhbGwoKQoJewoJCWdsb2JhbCAkcHJlZnM7
CgoJCSR1cGRhdGVkID0gZmFsc2U7CgoJCSRzZXR0aW5ncyA9ICJwcmVmc19pZCA9IDEsIHR5
cGUgPSAyLCBldmVudCA9ICdhZG1pbicsIHBvc2l0aW9uID0gMCI7CgoJCWlmICghaXNzZXQo
JHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X3dpZHRoJ10pKQoJCXsKCQkJc2FmZV9pbnNl
cnQoJ3R4cF9wcmVmcycsICIKCQkJCW5hbWUgPSAndXBtX2ltZ19wb3BwZXJfc2hvd193aWR0
aCcsCgkJCQl2YWwgPSAnMScsCgkJCQlodG1sID0gJ3llc25vcmFkaW8nLAoJCQkJJHNldHRp
bmdzCgkJCSIpOwoKCQkJJHVwZGF0ZWQgPSB0cnVlOwoJCX0KCgkJaWYgKCFpc3NldCgkcHJl
ZnNbJ3VwbV9pbWdfcG9wcGVyX3Nob3dfaGVpZ2h0J10pKQoJCXsKCQkJc2FmZV9pbnNlcnQo
J3R4cF9wcmVmcycsICIKCQkJCW5hbWUgPSAndXBtX2ltZ19wb3BwZXJfc2hvd19oZWlnaHQn
LAoJCQkJdmFsID0gJzEnLAoJCQkJaHRtbCA9ICd5ZXNub3JhZGlvJywKCQkJCSRzZXR0aW5n
cwoJCQkiKTsKCgkJCSR1cGRhdGVkID0gdHJ1ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZz
Wyd1cG1faW1nX3BvcHBlcl9zaG93X2FsdCddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBf
cHJlZnMnLCAiCgkJCQluYW1lID0gJ3VwbV9pbWdfcG9wcGVyX3Nob3dfYWx0JywKCQkJCXZh
bCA9ICcxJywKCQkJCWh0bWwgPSAneWVzbm9yYWRpbycsCgkJCQkkc2V0dGluZ3MKCQkJIik7
CgoJCQkkdXBkYXRlZCA9IHRydWU7CgkJfQoKCQlpZiAoIWlzc2V0KCRwcmVmc1sndXBtX2lt
Z19wb3BwZXJfc2hvd190aXRsZSddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMn
LCAiCgkJCQluYW1lID0gJ3VwbV9pbWdfcG9wcGVyX3Nob3dfdGl0bGUnLAoJCQkJdmFsID0g
JzEnLAoJCQkJaHRtbCA9ICd5ZXNub3JhZGlvJywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJ
CSR1cGRhdGVkID0gdHJ1ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3Bv
cHBlcl9zaG93X2NsYXNzJ10pKQoJCXsKCQkJc2FmZV9pbnNlcnQoJ3R4cF9wcmVmcycsICIK
CQkJCW5hbWUgPSAndXBtX2ltZ19wb3BwZXJfc2hvd19jbGFzcycsCgkJCQl2YWwgPSAnMScs
CgkJCQlodG1sID0gJ3llc25vcmFkaW8nLAoJCQkJJHNldHRpbmdzCgkJCSIpOwoKCQkJJHVw
ZGF0ZWQgPSB0cnVlOwoJCX0KCgkJaWYgKCFpc3NldCgkcHJlZnNbJ3VwbV9pbWdfcG9wcGVy
X3RoZV9jbGFzcyddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAiCgkJCQlu
YW1lID0gJ3VwbV9pbWdfcG9wcGVyX3RoZV9jbGFzcycsCgkJCQl2YWwgPSAnaW1hZ2UnLAoJ
CQkJaHRtbCA9ICd0ZXh0X2lucHV0JywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJCSR1cGRh
dGVkID0gdHJ1ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9j
dXN0b21fZm9ybSddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAiCgkJCQlu
YW1lID0gJ3VwbV9pbWdfcG9wcGVyX2N1c3RvbV9mb3JtJywKCQkJCXZhbCA9ICd1cG1faW1n
X3BvcHBlcicsCgkJCQlodG1sID0gJ3RleHRfaW5wdXQnLAoJCQkJJHNldHRpbmdzCgkJCSIp
OwoKCQkJJHVwZGF0ZWQgPSB0cnVlOwoJCX0KCgkJaWYgKCFpc3NldCgkcHJlZnNbJ3VwbV9p
bWdfcG9wcGVyX3Nob3dfZm9ybSddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMn
LCAiCgkJCQluYW1lID0gJ3VwbV9pbWdfcG9wcGVyX3Nob3dfZm9ybScsCgkJCQl2YWwgPSAn
MScsCgkJCQlodG1sID0gJ3llc25vcmFkaW8nLAoJCQkJJHNldHRpbmdzCgkJCSIpOwoKCQkJ
JHVwZGF0ZWQgPSB0cnVlOwoJCX0KCgkJaWYgKCFpc3NldCgkcHJlZnNbJ3VwbV9pbWdfcG9w
cGVyX2FkbWluX3BvcHVwX3dpZHRoJ10pKQoJCXsKCQkJc2FmZV9pbnNlcnQoJ3R4cF9wcmVm
cycsICIKCQkJCW5hbWUgPSAndXBtX2ltZ19wb3BwZXJfYWRtaW5fcG9wdXBfd2lkdGgnLAoJ
CQkJdmFsID0gJzcyNScsCgkJCQlodG1sID0gJ3RleHRfaW5wdXQnLAoJCQkJJHNldHRpbmdz
CgkJCSIpOwoKCQkJJHVwZGF0ZWQgPSB0cnVlOwoJCX0KCgkJaWYgKCFpc3NldCgkcHJlZnNb
J3VwbV9pbWdfcG9wcGVyX2FkbWluX3BvcHVwX2hlaWdodCddKSkKCQl7CgkJCXNhZmVfaW5z
ZXJ0KCd0eHBfcHJlZnMnLCAiCgkJCQluYW1lID0gJ3VwbV9pbWdfcG9wcGVyX2FkbWluX3Bv
cHVwX2hlaWdodCcsCgkJCQl2YWwgPSAnNDAwJywKCQkJCWh0bWwgPSAndGV4dF9pbnB1dCcs
CgkJCQkkc2V0dGluZ3MKCQkJIik7CgoJCQkkdXBkYXRlZCA9IHRydWU7CgkJfQoKCQlpZiAo
JHVwZGF0ZWQpCgkJewoJCQkkR0xPQkFMU1sncHJlZnMnXSA9IGdldF9wcmVmcygpOwoJCX0K
CX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX3BvcHBlcl9nVHh0KCR3aGF0LCAk
YXR0cyA9IGFycmF5KCkpCgl7CgkJJGxhbmcgPSBhcnJheSgKCQkJJ2FkbWluX3BvcHVwX3dp
ZHRoJyAgICAgPT4gJ1BvcHVwIHdpZHRoJywKCQkJJ2FkbWluX3BvcHVwX2hlaWdodCcgICAg
PT4gJ1BvcHVwIGhlaWdodCcsCgkJCSdhZG1pbl9zaWRlJyAgICAgICAgICAgID0+ICdBZG1p
bicsCgkJCSdhbHRfdGV4dF9mb3InCQkJCQk9PiAnQWx0ZXJuYXRlIHRleHQgZm9yJywKCQkJ
J2FydGljbGVfaW1hZ2VfYXBwZW5kJwk9PiAnQXJ0aWNsZSBpbWFnZSAoYXBwZW5kKScsCgkJ
CSdhcnRpY2xlX2ltYWdlX3JlcGxhY2UnID0+ICdBcnRpY2xlIGltYWdlIChyZXBsYWNlKScs
CgkJCSdhc3NpZ25fY2xhc3MnCQkJCQk9PiAnYXNzaWduIGNsYXNzJywKCQkJJ2J1aWx0X2lu
JwkJCQkJCQk9PiAnQnVpbHQtaW4nLAoJCQknY2FwdGlvbl9mb3InCQkJCQkJPT4gJ0NhcHRp
b24gZm9yJywKCQkJJ2NoZWNrX2xlYXZlJwkJCQkJCT0+ICdZb3UgaGF2ZSBtYWRlIGNoYW5n
ZXMgdG8gdGhlIGN1cnJlbnQgcG9zdCB3aGljaCB5b3UgaGF2ZSBub3Qgc2F2ZWQuIENvbnRp
bnVlIHdpdGhvdXQgc2F2aW5nPycsCgkJCSdjb25maXJtX292ZXJ3cml0ZScJCQk9PiAnWW91
IGhhdmUgbW9yZSB0aGFuIG9uZSBhcnRpY2xlIGltYWdlIGRlZmluZWQuIFRoaXMgYWN0aW9u
IHdpbGwgb3ZlcndyaXRlIHRoZSBlbnRpcmUgbGlzdC4gQ29udGludWU/JywKCQkJJ2N1c3Rv
bV9mb3JtJwkJCQkJCT0+ICdDdXN0b20gZm9ybScsCgkJCSdmYWlsZWQnCQkJCQkJCQk9PiAn
SW5zZXJ0IGZhaWxlZC4nLAoJCQknZm9yJwkJCQkJCQkJCQk9PiAnZm9yJywKCQkJJ2ltYWdl
JwkJCQkJCQkJCT0+ICdJbWFnZScsCgkJCSdpbWFnZV9zZWxlY3RvcicJCQkJPT4gJ0ltYWdl
IFNlbGVjdG9yJywKCQkJJ2luY2x1ZGUnCQkJCQkJCQk9PiAnaW5jbHVkZScsCgkJCSdpbmNs
dWRlX2FsdCcJCQkJCQk9PiAnaW5jbHVkZSBhbHQgdGV4dCcsCgkJCSdpbmNsdWRlX2NhcHRp
b24nCQkJCT0+ICdpbmNsdWRlIGNhcHRpb24nLAoJCQknaW5jbHVkZV9oZWlnaHQnCQkJCT0+
ICdpbmNsdWRlIGhlaWdodCcsCgkJCSdpbmNsdWRlX3dpZHRoJwkJCQkJPT4gJ2luY2x1ZGUg
d2lkdGgnLAoJCQknaW5zZXJ0JwkJCQkJCQkJPT4gJ0luc2VydCcsCgkJCSdpbnNlcnRfaW1h
Z2UnCQkJCQk9PiAnSW5zZXJ0IEltYWdlJywKCQkJJ2luc2VydF9wbHVnaW4nCQkJCQk9PiAn
SW5zZXJ0ICh1cG1faW1hZ2UpJywKCQkJJ25vX3RodW1ibmFpbCcJCQkJCT0+ICdUaHVtYm5h
aWwgbm90IGZvdW5kLicsCgkJCSdvdmVycmlkZScJCQkJCQkJPT4gJ292ZXJyaWRlcyBhbGwg
b3B0aW9uYWwgcGFyYW1ldGVycycsCgkJCSdwb3B1cCcJCQkJCQkJCQk9PiAnUG9wdXAnLAoJ
CQkncHJlZnMnCQkJCQkJCQkJPT4gJ3VwbV9pbWdfcG9wcGVyIFByZWZlcmVuY2VzJywKCQkJ
J3B1YmxpY19zaWRlJyAgICAgICAgICAgPT4gJ1B1YmxpYycsCgkJCSdyZXR1cm4nCQkJCQkJ
CQk9PiAnUmV0dXJuIHRvIGVkaXRpbmcgdGhlIHBvc3Q/JywKCQkJJ3Nob3dfYWx0JwkJCQkJ
CQk9PiAnU2hvdyBhbHRlcm5hdGUgdGV4dD8nLAoJCQknc2hvd19jbGFzcycJCQkJCQk9PiAn
U2hvdyBjbGFzcz8nLAoJCQknc2hvd19oZWlnaHQnCQkJCQkJPT4gJ1Nob3cgaGVpZ2h0Pycs
CgkJCSdzaG93X3RpdGxlJwkJCQkJCT0+ICdTaG93IGNhcHRpb24/JywKCQkJJ3Nob3dfd2lk
dGgnCQkJCQkJPT4gJ1Nob3cgd2lkdGg/JywKCQkJJ3Nob3dfZm9ybScJCQkJCQkJPT4gJ1No
b3cgY3VzdG9taXphdGlvbiBvcHRpb25zIGluIHBvcHVwPycsCgkJCSdzdWNjZXNzJwkJCQkJ
CQkJPT4gJ1N1Y2Nlc3MuJywKCQkJJ3RoZV9jbGFzcycJCQkJCQkJPT4gJ1RoZSBjbGFzcycs
CgkJCSd2aWV3X2FsbCcJCQkJCQkJPT4gJ1ZpZXcgQWxsJwoJCSk7CgoJCXJldHVybiBzdHJ0
cigkbGFuZ1skd2hhdF0sICRhdHRzKTsKCX0iO3M6NDoiaGVscCI7czoxMDcxOiJoMS4gdXBt
X2ltZ19wb3BwZXIKCgpoMigjaW50cm8pLiBJbnRybwoKVGV4dHBhdHRlcm4gaGFzIHNvbWUg
bmljZSBpbWFnZSBoYW5kbGluZyBmZWF0dXJlcywgYnV0IG9uZSB0aGluZyBsYWNraW5nIGlz
IGFuICJpbWFnZSBwaWNrZXIiLiBBbnlvbmUgY2FuIGNvcHkgYW5kIHBhc3RlIHRoZSByZXF1
aXJlZC1idXQtbmVhdCB0YWdzLCBidXQgd291bGRuJ3QgaXQgYmUgZXZlbiBuaWNlciB0byBi
ZSBhYmxlIHRvIGNsaWNrIHRvIGluc2VydCB0aGVtIHJpZ2h0IGluIHRoZSB3cml0ZSB0YWI/
IE5vdyB5b3UgY2FuLgoKIiYjODYxNzsgKEp1bXAgYmFjayBjb250ZW50cyBsaXN0KSI6I3N0
YXJ0CgoKaDIoI2NyZWRpdHMpLiBDcmVkaXQgYW5kIERldmVsb3BlciBOb3RlcwoKU2luY2Ug
VGV4dHBhdHRlcm4gc2F2ZXMgaW1hZ2UgaW5mbyBpbiB0aGUgZGF0YWJhc2UsIHRoaXMgcmVx
dWlyZXMgY2FsbHMgdG8gdGhlIGRhdGFiYXNlIHRvIGZldGNoIGl0LiBBcyB0aGUgYW1vdW50
IG9mIGltYWdlcyBpbmNyZWFzZSwgdGhlIHJlc3VsdHMgcmV0dXJuZWQgd291bGQgaW5jcmVh
c2UuIEZvciB0aGlzIHJlYXNvbiwgSSBoYXZlIGNob3NlbiB0byBtYWtlIHVzZSBvZiBhIHBv
cHVwIHdpbmRvdywgcmF0aGVyIHRoYW4gYSBkcm9wZG93biBsaXN0LiBUaGlzIHdheSwgaXQn
cyB0aGVyZSBhbmQgZWFzeS10by11c2Ugd2hlbiB5b3UgbmVlZCBpdCwgYnV0IHdvbid0IGJv
ZyBkb3duIHRoZSB3cml0ZSB0YWIgd2hlbiB5b3UgYXJlbid0IGludGVyZXN0ZWQgaW4gdXNp
bmcgaW1hZ2VzIGZvciB5b3VyIHBvc3QuIEFkZGl0aW9uYWxseSwgdGhpcyBhbGxvd3MgeW91
IHRvIHZpZXcgbW9yZSBpbWFnZSBpbmZvcm1hdGlvbiwgc28geW91IGNhbiBiZSBzdXJlIHdo
aWNoIGltYWdlIHlvdSBhcmUgaW5zZXJ0aW5nLgoKVG8gbWFrZSB0aGUgaW1hZ2UgaW5zZXJ0
aW9uIGludG8gdGhlIGFydGljbGUgYm9keSAic21hcnRlciIsIEkgbWFkZSB1c2Ugb2YgSmF2
YVNjcmlwdCBieSAiQWxleCBLaW5nIjpodHRwOi8vd3d3LmFsZXhraW5nLm9yZy8uCgoiJiM4
NjE3OyAoSnVtcCBiYWNrIGNvbnRlbnRzIGxpc3QpIjojc3RhcnQiO3M6ODoiaGVscF9yYXci
O3M6MTA3MToiaDEuIHVwbV9pbWdfcG9wcGVyCgoKaDIoI2ludHJvKS4gSW50cm8KClRleHRw
YXR0ZXJuIGhhcyBzb21lIG5pY2UgaW1hZ2UgaGFuZGxpbmcgZmVhdHVyZXMsIGJ1dCBvbmUg
dGhpbmcgbGFja2luZyBpcyBhbiAiaW1hZ2UgcGlja2VyIi4gQW55b25lIGNhbiBjb3B5IGFu
ZCBwYXN0ZSB0aGUgcmVxdWlyZWQtYnV0LW5lYXQgdGFncywgYnV0IHdvdWxkbid0IGl0IGJl
IGV2ZW4gbmljZXIgdG8gYmUgYWJsZSB0byBjbGljayB0byBpbnNlcnQgdGhlbSByaWdodCBp
biB0aGUgd3JpdGUgdGFiPyBOb3cgeW91IGNhbi4KCiImIzg2MTc7IChKdW1wIGJhY2sgY29u
dGVudHMgbGlzdCkiOiNzdGFydAoKCmgyKCNjcmVkaXRzKS4gQ3JlZGl0IGFuZCBEZXZlbG9w
ZXIgTm90ZXMKClNpbmNlIFRleHRwYXR0ZXJuIHNhdmVzIGltYWdlIGluZm8gaW4gdGhlIGRh
dGFiYXNlLCB0aGlzIHJlcXVpcmVzIGNhbGxzIHRvIHRoZSBkYXRhYmFzZSB0byBmZXRjaCBp
dC4gQXMgdGhlIGFtb3VudCBvZiBpbWFnZXMgaW5jcmVhc2UsIHRoZSByZXN1bHRzIHJldHVy
bmVkIHdvdWxkIGluY3JlYXNlLiBGb3IgdGhpcyByZWFzb24sIEkgaGF2ZSBjaG9zZW4gdG8g
bWFrZSB1c2Ugb2YgYSBwb3B1cCB3aW5kb3csIHJhdGhlciB0aGFuIGEgZHJvcGRvd24gbGlz
dC4gVGhpcyB3YXksIGl0J3MgdGhlcmUgYW5kIGVhc3ktdG8tdXNlIHdoZW4geW91IG5lZWQg
aXQsIGJ1dCB3b24ndCBib2cgZG93biB0aGUgd3JpdGUgdGFiIHdoZW4geW91IGFyZW4ndCBp
bnRlcmVzdGVkIGluIHVzaW5nIGltYWdlcyBmb3IgeW91ciBwb3N0LiBBZGRpdGlvbmFsbHks
IHRoaXMgYWxsb3dzIHlvdSB0byB2aWV3IG1vcmUgaW1hZ2UgaW5mb3JtYXRpb24sIHNvIHlv
dSBjYW4gYmUgc3VyZSB3aGljaCBpbWFnZSB5b3UgYXJlIGluc2VydGluZy4KClRvIG1ha2Ug
dGhlIGltYWdlIGluc2VydGlvbiBpbnRvIHRoZSBhcnRpY2xlIGJvZHkgInNtYXJ0ZXIiLCBJ
IG1hZGUgdXNlIG9mIEphdmFTY3JpcHQgYnkgIkFsZXggS2luZyI6aHR0cDovL3d3dy5hbGV4
a2luZy5vcmcvLgoKIiYjODYxNzsgKEp1bXAgYmFjayBjb250ZW50cyBsaXN0KSI6I3N0YXJ0
IjtzOjE1OiJhbGxvd19odG1sX2hlbHAiO2k6MDtzOjM6Im1kNSI7czozMjoiNDJiNTk4MTYw
YmJjM2FjMTc4NWUxNGYwNmY4NjJjMGYiO30=