# upm_img_popper v.1.3.7 # 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 MS4zLjciO3M6NDoidHlwZSI7aToxO3M6NjoiYXV0aG9yIjtzOjEzOiJNYXJ5IEZyZWRib3Jn IjtzOjEwOiJhdXRob3JfdXJpIjtzOjQ4OiJodHRwOi8vdXR0ZXJwbHVzaC5jb20vdHhwLXBs dWdpbnMvdXBtLWltZy1wb3BwZXIiO3M6NDoiY29kZSI7czozNDEwMToiaWYgKHR4cGludGVy 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 aHIoMzkpLicsIFwnXCcsIFwnXCcsICcuY2hyKDM5KS5odG1sc3BlY2lhbGNoYXJzKCRhbHQp LmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsiPlRleHRpbGU8L2E+PC9saT4nLgoJCQkJCW4u dC4nPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9Imluc2VydFRhZyhcJ3hodG1sXCcsICcuY2hy KDM5KS4kaWQuY2hyKDM5KS4nLCAnLmNocigzOSkuJGV4dC5jaHIoMzkpLicsICcuY2hyKDM5 KS4kdy5jaHIoMzkpLicsICcuY2hyKDM5KS4kaC5jaHIoMzkpLicsICcuY2hyKDM5KS5odG1s c3BlY2lhbGNoYXJzKCRhbHQpLmNocigzOSkuJywgJy5jaHIoMzkpLmh0bWxzcGVjaWFsY2hh cnMoJGNhcHRpb24pLmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsiPlhIVE1MPC9hPjwvbGk+ Jy4KCQkJCQluLic8L3VsPic7CgoJCQkJJHBsdWdpbiAuPSBuLnQuJzxsaT48YSBocmVmPSIj IiBvbmNsaWNrPSJpbnNlcnRUYWcoXCdwbHVnaW4tY3VzdG9tXCcsICcuY2hyKDM5KS4kaWQu Y2hyKDM5KS4nKTsgcmV0dXJuIGZhbHNlOyI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdjdXN0 b21fZm9ybScpLic8L2E+PC9saT4nLgoJCQkJCW4uJzwvdWw+JzsKCgkJCQkkcHJldmlldyA9 IG4uJzx1bD4nLgoJCQkJCW4udC4nPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9Im1ha2VXaW4o Jy5jaHIoMzkpLicmIzgyMjA7Jy4kbmFtZS4nJiM4MjIxOycuY2hyKDM5KS4nLCAnLmNocigz OSkuJyYjNjA7aW1nIHNyYz0mIzM0OycuaHUuJGltZ19kaXIuJy8nLiRpZC4kZXh0LicmIzM0 OyAvJiM2MjsnLmNocigzOSkuJywgJy4kdy4nLCAnLiRoLicpOyByZXR1cm4gZmFsc2U7Ij4n LnVwbV9pbWdfcG9wcGVyX2dUeHQoJ2ltYWdlJykuJzwvYT48L2xpPic7CgoJCQkJaWYgKCFl bXB0eSgkYWx0KSkKCQkJCXsKCQkJCQkkcHJldmlldyAuPSBuLnQuJzxsaT48YSBocmVmPSIj IiBvbmNsaWNrPSJtYWtlV2luKCcuY2hyKDM5KS51cG1faW1nX3BvcHBlcl9nVHh0KCdhbHRf dGV4dF9mb3InKS4nICYjODIyMDsnLiRuYW1lLicmIzgyMjE7Jy5jaHIoMzkpLicsICcuY2hy KDM5KS5odG1sc3BlY2lhbGNoYXJzKCRhbHQpLmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsi PicuZ1R4dCgnYWx0X3RleHQnKS4nPC9hPjwvbGk+JzsKCQkJCX0KCgkJCQlpZiAoIWVtcHR5 KCRjYXB0aW9uKSkKCQkJCXsKCQkJCQkkcHJldmlldyAuPSBuLnQuJzxsaT48YSBocmVmPSIj IiBvbmNsaWNrPSJtYWtlV2luKCcuY2hyKDM5KS51cG1faW1nX3BvcHBlcl9nVHh0KCdjYXB0 aW9uX2ZvcicpLicgJiM4MjIwOycuJG5hbWUuJyYjODIyMTsnLmNocigzOSkuJywgJy5jaHIo MzkpLmh0bWxzcGVjaWFsY2hhcnMoJGNhcHRpb24pLmNocigzOSkuJyk7IHJldHVybiBmYWxz ZTsiPicuZ1R4dCgnY2FwdGlvbicpLic8L2E+PC9saT4nOwoJCQkJfQoKCQkJCSRwcmV2aWV3 IC49IG4uJzwvdWw+JzsKCgkJCQkkY2F0ZWdvcnkgPSAoJGNhdGVnb3J5KSA/ICc8c3BhbiB0 aXRsZT0iJy5mZXRjaF9jYXRlZ29yeV90aXRsZSgkY2F0ZWdvcnksICdpbWFnZScpLiciPicu JGNhdGVnb3J5Lic8L3NwYW4+JyA6ICcnOwoKCgkJCQllY2hvIG4ubi50cigKCgkJCQkJbi50 ZCgkaWQsIDIwKS4KCgkJCQkJdGQoJzxhIGhyZWY9IicuJGVkaXRfdXJsLiciIG9uY2xpY2s9 Indhcm5FZGl0SW1hZ2UoJy4kaWQuJyk7IHJldHVybiBmYWxzZTsiPicuZ1R4dCgnZWRpdCcp Lic8L2E+JwoJCQkJCSwgMzUpLgoKCQkJCQl0ZCgKCQkJCQkJc2FmZV9zdHJmdGltZSgnJWQg JWIgJVkgJUk6JU0gJXAnLCAkdURhdGUpCgkJCQkJLCA3NSkuCgoJCQkJCXRkKCc8YSBocmVm PSInLiRlZGl0X3VybC4nIiBvbmNsaWNrPSJ3YXJuRWRpdEltYWdlKCcuJGlkLicpOyByZXR1 cm4gZmFsc2U7Ij4nLiRuYW1lLic8L2E+JwoJCQkJCSwgNzUpLgoKCQkJCQl0ZCgkdGh1bWJu YWlsLCA3NSkuCgoJCQkJCXRkKCRwcmV2aWV3KS4KCgkJCQkJdGQoJGNhdGVnb3J5LCA3NSku CgoJCQkJCXRkKAoJCQkJCQknPHNwYW4gdGl0bGU9IicuZ2V0X2F1dGhvcl9uYW1lKCRhdXRo b3IpLiciPicuJGF1dGhvci4nPC9zcGFuPicKCQkJCQksIDc1KS4KCgkJCQkJdGQoJGluc2Vy dCwgMTUwKS4KCQkJCQkoIGZ1bmN0aW9uX2V4aXN0cygndXBtX2ltYWdlJykgPyBuLnRkKCRw bHVnaW4pIDogJycgKS4KCgkJCQkJdGQoCgkJCQkJCWRMaW5rKCdpbWFnZScsICdpbWFnZV9k ZWxldGUnLCAnaWQnLCAkaWQpCgkJCQkJLCAxMCkKCQkJCSk7CgkJCX0KCgkJCWVjaG8gZW5k VGFibGUoKS4KCgkJCQluYXZfZm9ybSgndXBtX2ltZ19wb3BwZXInLmEuJ2JtPTEnLCAkcGFn ZSwgJG51bVBhZ2VzLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4KCgkJ CQl1cG1faW1nX3BvcHBlcl9wYWdlYnlfZm9ybSgpLgoKCQkJCW4udGFnKAoJCQkJCW4uZ3Jh Zih1cG1faW1nX3BvcHBlcl9nVHh0KCdyZXR1cm4nKSkuCgkJCQkJbi5ncmFmKCc8YSBpZD0i eWVzIiBocmVmPSIjIiBvbmNsaWNrPSJnb0JhY2sodGhpcy5ocmVmKTsgcmV0dXJuIGZhbHNl OyI+Jy5nVHh0KCd5ZXMnKS4nPC9hPi4nLgoJCQkJCQknIDxhIGlkPSJubyIgaHJlZj0iIyIg b25jbGljaz0iZG9uZShcJ3JldHVyblwnKTsgcmV0dXJuIGZhbHNlOyI+Jy5nVHh0KCdubycp Lic8L2E+LicpCgkJCQksICdkaXYnLAknIGlkPSJyZXR1cm4iIHN0eWxlPSJkaXNwbGF5OiBu b25lOyB3aWR0aDogMjAwcHg7IGhlaWdodDogNzVweDsiJykuCgoJCQkJbi5ncmFmKHVwbV9p bWdfcG9wcGVyX2dUeHQoJ3N1Y2Nlc3MnKSwgJyBpZD0ic3VjY2VzcyIgc3R5bGU9ImRpc3Bs YXk6IG5vbmU7IHdpZHRoOiAxNTBweDsgaGVpZ2h0OiAzNXB4OyInKS4KCQkJCW4uZ3JhZih1 cG1faW1nX3BvcHBlcl9nVHh0KCdmYWlsZWQnKSwgJyBpZD0iZmFpbGVkIiBzdHlsZT0iZGlz cGxheTogbm9uZTsgd2lkdGg6IDE1MHB4OyBoZWlnaHQ6IDM1cHg7IicpOwoJCX0KCX0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX3BvcHBlcl9vcHRpb25zX2Zvcm0oKQoJewoJ CWdsb2JhbCAkcHJlZnM7CgoJCWVjaG8gbi4nPGZvcm0gYWN0aW9uPSIiIHN0eWxlPSJtYXJn aW4tYm90dG9tOiAxNXB4OycuKCAhJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X2Zvcm0n XSA/ICcgZGlzcGxheTogbm9uZTsnIDogJycpLiciPicuCgkJCWdyYWYoCgkJCQluLic8aW5w dXQgdHlwZT0iY2hlY2tib3giIGlkPSJpbmNfd2lkdGgiJy4oKCRwcmVmc1sndXBtX2ltZ19w b3BwZXJfc2hvd193aWR0aCddID09ICcxJykgPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcn KS4nIC8+IDxsYWJlbCBmb3I9ImluY193aWR0aCI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdp bmNsdWRlX3dpZHRoJykuJzwvbGFiZWw+ICcuCgkJCQluLic8aW5wdXQgdHlwZT0iY2hlY2ti b3giIGlkPSJpbmNfaGVpZ2h0IicuKCgkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3Nob3dfaGVp Z2h0J10gPT0gJzEnKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4gPGxhYmVs IGZvcj0iaW5jX2hlaWdodCI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdpbmNsdWRlX2hlaWdo dCcpLic8L2xhYmVsPiAnLgoJCQkJbi4nPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5j X2FsdCInLigoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X2FsdCddID09ICcxJykgPyAn IGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+IDxsYWJlbCBmb3I9ImluY19hbHQiPicu dXBtX2ltZ19wb3BwZXJfZ1R4dCgnaW5jbHVkZV9hbHQnKS4nPC9sYWJlbD4gJy4KCQkJCW4u JzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImluY190aXRsZSInLigoJHByZWZzWyd1cG1f aW1nX3BvcHBlcl9zaG93X3RpdGxlJ10gPT0gJzEnKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCIn IDogJycpLicgLz4gPGxhYmVsIGZvcj0iaW5jX3RpdGxlIj4nLnVwbV9pbWdfcG9wcGVyX2dU eHQoJ2luY2x1ZGVfY2FwdGlvbicpLic8L2xhYmVsPicuYnIuCgkJCQluLic8aW5wdXQgdHlw ZT0iY2hlY2tib3giIGlkPSJpbmNfY2xhc3MiJy4oKCRwcmVmc1sndXBtX2ltZ19wb3BwZXJf c2hvd19jbGFzcyddID09ICcxJykgPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+ IDxsYWJlbCBmb3I9ImluY19jbGFzcyI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdhc3NpZ25f Y2xhc3MnKS4nPC9sYWJlbD4gJy4KCQkJCW4uJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idGhl X2NsYXNzIiB2YWx1ZT0iJy4kcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3RoZV9jbGFzcyddLici IGNsYXNzPSJlZGl0IiAvPicKCQkJLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Iicp LgoKCQkJbi5ncmFmKAoJCQkJJzxsYWJlbCBmb3I9ImN1c3RvbV9mb3JtIj4nLnVwbV9pbWdf cG9wcGVyX2dUeHQoJ2N1c3RvbV9mb3JtJykuJzwvbGFiZWw+IDxpbnB1dCB0eXBlPSJ0ZXh0 IiBpZD0iY3VzdG9tX2Zvcm0iIHZhbHVlPSInLiRwcmVmc1sndXBtX2ltZ19wb3BwZXJfY3Vz dG9tX2Zvcm0nXS4nIiBjbGFzcz0iZWRpdCIgLz4gKCcudXBtX2ltZ19wb3BwZXJfZ1R4dCgn b3ZlcnJpZGUnKS4nKScKCQkJLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IicpLgoK CQluLic8L2Zvcm0+JzsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX3BvcHBl cl9zZWFyY2hfZm9ybSgkY3JpdCwgJG1ldGhvZCwgJHNvcnQsICRkaXIpCgl7CgkJJGRlZmF1 bHRfbWV0aG9kID0gJ25hbWUnOwoKCQkkbWV0aG9kID0gKCRtZXRob2QpID8gJG1ldGhvZCA6 ICRkZWZhdWx0X21ldGhvZDsKCgkJJG1ldGhvZHMgPQlhcnJheSgKCQkJJ2lkJwkJCSA9PiBn VHh0KCdJRCcpLAoJCQknbmFtZScJCSA9PiBnVHh0KCduYW1lJyksCgkJCSdjYXRlZ29yeScg PT4gZ1R4dCgnaW1hZ2VfY2F0ZWdvcnknKSwKCQkJJ2F1dGhvcicJID0+IGdUeHQoJ2F1dGhv cicpLAoJCQknYWx0JwkJCSA9PiBnVHh0KCdhbHRfdGV4dCcpLAoJCQknY2FwdGlvbicJID0+ IGdUeHQoJ2NhcHRpb24nKQoJCSk7CgoJCXJldHVybiBuLm4uJzxmb3JtIG1ldGhvZD0iZ2V0 IiBhY3Rpb249ImluZGV4LnBocCIgc3R5bGU9Im1hcmdpbjogYXV0bzsgdGV4dC1hbGlnbjog Y2VudGVyOyI+Jy4KCQkJbi5ncmFmKAoJCQkJJzxsYWJlbCBmb3I9InVwbS1pbWctcG9wcGVy LXNlYXJjaCI+Jy5nVHh0KCdzZWFyY2gnKS4nPC9sYWJlbD4nLnNwLgoJCQkJc2VsZWN0SW5w dXQoJ3NlYXJjaF9tZXRob2QnLCAkbWV0aG9kcywgJG1ldGhvZCwgJycsICcnLCAndXBtLWlt Zy1wb3BwZXItc2VhcmNoJykuc3AuCgkJCQlmSW5wdXQoJ3RleHQnLCAnY3JpdCcsICRjcml0 LCAnZWRpdCcsICcnLCAnJywgJzE1JykuCgkJCQllSW5wdXQoJ3VwbV9pbWdfcG9wcGVyJyku CgkJCQloSW5wdXQoJ2JtJywnMScpLgoJCQkJZklucHV0KCdzdWJtaXQnLCAnc2VhcmNoJywg Z1R4dCgnZ28nKSwgJ3NtYWxsZXJib3gnKQoJCQkpLgoKCQkJKCRjcml0ID8gbi5ncmFmKCc8 YSBocmVmPSI/ZXZlbnQ9dXBtX2ltZ19wb3BwZXInLmEuJ2JtPXRydWUiPicudXBtX2ltZ19w b3BwZXJfZ1R4dCgndmlld19hbGwnKS4nPC9hPicpIDogJycpLgoKCQluLic8L2Zvcm0+JzsK CX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX3BvcHBlcl9saW5rKCkKCXsKCQkk dmlldyA9IGdwcygndmlldycpOwoKCQlpZiAoJHZpZXcgPT0gJ3RleHQnIG9yIGVtcHR5KCR2 aWV3KSkKCQl7CgkJCWVjaG8gPDw8Zm9ybQoKPGZvcm0gYWN0aW9uPSIiPgo8aW5wdXQgdHlw ZT0iaGlkZGVuIiBpZD0idXBtX2ltZ19wb3BwZXJfc3RhcnQiIHZhbHVlPSIiPgo8L2Zvcm0+ Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJpbmRleC5waHA/ZXZlbnQ9 dXBtX2ltZ19wb3BwZXJfanMmIzM4O25hbWU9bGluayI+PC9zY3JpcHQ+Cgpmb3JtOwoKCQl9 Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltZ19wb3BwZXJfcGFnZWJ5X2Zvcm0o KQoJewoJCWdsb2JhbCAkcHJlZnM7CgoJCSR2YWxzID0gYXJyYXkoCgkJCTE1CT0+IDE1LAoJ CQkyNQk9PiAyNSwKCQkJNTAJPT4gNTAsCgkJCTEwMCA9PiAxMDAKCQkpOwoKCQkkc2VsZWN0 X3BhZ2UgPSBzZWxlY3RJbnB1dCgncXR5JywgJHZhbHMsICRwcmVmc1snaW1hZ2VfbGlzdF9w YWdlYnknXSwgJycsIDEpOwoKCQkvLyBwcm9wZXIgbG9jYWxpc2F0aW9uCgkJJHBhZ2UgPSBz dHJfcmVwbGFjZSgne3BhZ2V9JywgJHNlbGVjdF9wYWdlLCBnVHh0KCd2aWV3X3Blcl9wYWdl JykpOwoKCQlyZXR1cm4gZm9ybSgKCQkJJzxkaXYgc3R5bGU9Im1hcmdpbjogYXV0bzsgdGV4 dC1hbGlnbjogY2VudGVyOyI+Jy4KCQkJCSRwYWdlLgoJCQkJZUlucHV0KCd1cG1faW1nX3Bv cHBlcicpLgoJCQkJc0lucHV0KCd1cG1faW1nX3BvcHBlcl9jaGFuZ2VfcGFnZWJ5JykuCgkJ CQloSW5wdXQoJ2JtJywgJzEnKS4KCQkJCSc8bm9zY3JpcHQ+IDxpbnB1dCB0eXBlPSJzdWJt aXQiIHZhbHVlPSInLmdUeHQoJ2dvJykuJyIgY2xhc3M9InNtYWxsZXJib3giIC8+PC9ub3Nj cmlwdD4nLgoJCQknPC9kaXY+JwoJCSk7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBt X2ltZ19wb3BwZXJfanMoKQoJewoJCXdoaWxlIChAb2JfZW5kX2NsZWFuKCkpOwoKCQlpZiAo Z3BzKCduYW1lJykgPT0gJ2xpbmsnKQoJCXsKCQkJZ2xvYmFsICRwcmVmczsKCgkJCSR0eHQg PSBnVHh0KCdhZHZhbmNlZF9vcHRpb25zJyk7CgkJCSRsYW5nX2luc2VydF9pbWFnZSA9IHVw bV9pbWdfcG9wcGVyX2dUeHQoJ2luc2VydF9pbWFnZScpOwoKCQkJaGVhZGVyKCJDb250ZW50 LXR5cGU6IHRleHQvamF2YXNjcmlwdCIpOwoKCQkJZWNobyA8PDxqcwoKCWRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCd1cG1faW1nX3BvcHBlcl9zdGFydCcpLnZhbHVlID0gZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ2JvZHknKS52YWx1ZTsKCgl2YXIgY3VycmVudCA9ICdib2R5JzsK CglpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4Y2VycHQnKSkKCXsKCQkvLyBJRSBp cyByZXRhcmRlZAoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib2R5Jykub25jbGljayA9 IGZ1bmN0aW9uICgpIHsKCQkJY3VycmVudCA9ICdib2R5JzsKCQl9OwoKCQlkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgnZXhjZXJwdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CgkJCWN1 cnJlbnQgPSAnZXhjZXJwdCc7CgkJfTsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgl2YXIgdHh0ID0gJyR0 eHQnOwoKCXZhciBhID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUykgPwoJCWRvY3VtZW50 LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdhJykg OgoJCWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKCglhLmFwcGVuZENoaWxkKGRvY3Vt ZW50LmNyZWF0ZVRleHROb2RlKCckbGFuZ19pbnNlcnRfaW1hZ2UnKSk7CgoJdmFyIHcgPSB7 JHByZWZzWyd1cG1faW1nX3BvcHBlcl9hZG1pbl9wb3B1cF93aWR0aCddfTsKCXZhciBoID0g eyRwcmVmc1sndXBtX2ltZ19wb3BwZXJfYWRtaW5fcG9wdXBfaGVpZ2h0J119OwoKCXZhciB0 ID0gKHNjcmVlbi5oZWlnaHQpID8gKHNjcmVlbi5oZWlnaHQgLSBoKSAvIDIgOiAwOwoJdmFy IGwgPSAoc2NyZWVuLndpZHRoKSA/IChzY3JlZW4ud2lkdGggLSB3KSAvIDIgOiAwOwoKCWEu b25jbGljayA9IGZ1bmN0aW9uICgpIHsKCQl2YXIgdXBtX2ltZ19wb3BwZXIgPSB3aW5kb3cu b3Blbih0aGlzLmhyZWYsICd1cG1faW1nX3BvcHBlcicsICd0b3AgPSAnK3QrJywgbGVmdCA9 ICcrbCsnLCB3aWR0aCA9ICcrdysnLCBoZWlnaHQgPSAnK2grJywgdG9vbGJhciA9IG5vLCBs b2NhdGlvbiA9IG5vLCBkaXJlY3RvcmllcyA9IG5vLCBzdGF0dXMgPSB5ZXMsIG1lbnViYXIg PSBubywgc2Nyb2xsYmFycyA9IHllcywgY29weWhpc3RvcnkgPSBubywgcmVzaXphYmxlID0g eWVzJyk7CgkJCXVwbV9pbWdfcG9wcGVyLmZvY3VzKCk7CgkJCXJldHVybiBmYWxzZTsKCX07 CgoJYS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdibGFuaycpOwoJYS5zZXRBdHRyaWJ1dGUo J2hyZWYnLCAnP2V2ZW50PXVwbV9pbWdfcG9wcGVyXHUwMDI2Ym09MScpOwoKCXZhciBsaW5r ID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUykgPwoJCWRvY3VtZW50LmNyZWF0ZUVsZW1l bnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdoMycpIDoKCQlkb2N1bWVu dC5jcmVhdGVFbGVtZW50KCdoMycpOwoKCWxpbmsuc2V0QXR0cmlidXRlKCdjbGFzc05hbWUn LCAncGxhaW4nKTsgLy8gc3R1cGlkIElFCglsaW5rLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAn cGxhaW4nKTsKCWxpbmsuYXBwZW5kQ2hpbGQoYSk7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJdmFyIGgzcyA9 IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoMycpOwoKCWZvciAodmFyIGkgPSAw OyBpIDwgaDNzLmxlbmd0aDsgaSsrKQoJewoJCXZhciBoMyA9IGRvY3VtZW50LmdldEVsZW1l bnRzQnlUYWdOYW1lKCdoMycpW2ldOwoKCQlpZiAoaDMuZmlyc3RDaGlsZC5maXJzdENoaWxk KQoJCXsKCQkJaWYgKGgzLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPT0gdHh0 KQoJCQl7CgkJCQloMy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsaW5rLCBoMyk7CgkJCX0K CQl9Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi8vIHRoYW5rcyBBbGV4ISA8aHR0cDovL3d3dy5hbGV4a2lu Zy5vcmcvPgoKCWZ1bmN0aW9uIHVwbV9pbWdfcG9wcGVyX2luc2VydChteUZpZWxkLCBteVZh bHVlKQoJewoJCS8vIElFIHN1cHBvcnQKCQlpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKQoJCXsK CQkJbXlGaWVsZC5mb2N1cygpOwoJCQlzZWwgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRl UmFuZ2UoKTsKCQkJc2VsLnRleHQgPSBteVZhbHVlOwoJCQlteUZpZWxkLmZvY3VzKCk7CgkJ fQoKCQkvLyBNb3ppbGxhL05ldHNjYXBlIHN1cHBvcnQKCQllbHNlIGlmIChteUZpZWxkLnNl bGVjdGlvblN0YXJ0IHx8IG15RmllbGQuc2VsZWN0aW9uU3RhcnQgPT0gJzAnKQoJCXsKCQkJ c3RhcnRQb3MgPSBteUZpZWxkLnNlbGVjdGlvblN0YXJ0OwoJCQllbmRQb3MgPSBteUZpZWxk LnNlbGVjdGlvbkVuZDsKCgkJCW15RmllbGQudmFsdWUgPSBteUZpZWxkLnZhbHVlLnN1YnN0 cmluZygwLCBzdGFydFBvcykgKyBteVZhbHVlICsgbXlGaWVsZC52YWx1ZS5zdWJzdHJpbmco ZW5kUG9zLCBteUZpZWxkLnZhbHVlLmxlbmd0aCk7CgoJCQlteUZpZWxkLmZvY3VzKCk7CgkJ CW15RmllbGQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydFBvcyArIG15VmFsdWUubGVuZ3RoOwoJ CQlteUZpZWxkLnNlbGVjdGlvbkVuZCA9IHN0YXJ0UG9zICsgbXlWYWx1ZS5sZW5ndGg7CgkJ fQoKCQllbHNlCgkJewoJCQlteUZpZWxkLnZhbHVlICs9IG15VmFsdWU7CgkJCW15RmllbGQu Zm9jdXMoKTsKCQl9Cgl9CmpzOwoJCX0KCgkJZWxzZWlmIChncHMoJ25hbWUnKSA9PSAncG9w JykKCQl7CgkJCWdsb2JhbCAkaW1nX2RpcjsKCgkJCSRpbWdfdXJsID0gaHUuJGltZ19kaXI7 CgoJCQkkbGFuZ19jb25maXJtX292ZXJ3cml0ZSA9IHVwbV9pbWdfcG9wcGVyX2dUeHQoJ2Nv bmZpcm1fb3ZlcndyaXRlJyk7CgkJCSRsYW5nX2NoZWNrX2xlYXZlID0gdXBtX2ltZ19wb3Bw ZXJfZ1R4dCgnY2hlY2tfbGVhdmUnKTsKCgkJCWhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0 L2phdmFzY3JpcHQiKTsKCgkJCWVjaG8gPDw8anMKCWZ1bmN0aW9uIG1ha2VXaW4odGl0bGUs IGNvbnRlbnQsIHcsIGgpCgl7CgkJaWYgKHcgJiYgaCkKCQl7CgkJCXZhciB3dyA9IHBhcnNl SW50KHcpOwoJCQl2YXIgd2ggPSBwYXJzZUludChoKTsKCgkJCWlmICh3dyA8IDEwMCkKCQkJ ewoJCQkJd3cgPSAxMjU7CgkJCX0KCgkJCWlmICh3aCA8IDEwMCkKCQkJewoJCQkJd2ggPSAx MjU7CgoJCQkJd3cgKz0gNzU7CgkJCX0KCgkJCXZhciBzY3JvbGwgPSBmYWxzZTsKCgkJCWlm IChzY3JlZW4ud2lkdGggJiYgKHNjcmVlbi53aWR0aCA8IHd3KSkKCQkJewoJCQkJc2Nyb2xs ID0gJ3llcyc7CgkJCQl3dyA9IHNjcmVlbi53aWR0aDsKCQkJfQoKCQkJaWYgKHNjcmVlbi5o ZWlnaHQgJiYgKHNjcmVlbi5oZWlnaHQgPCB3aCkpCgkJCXsKCQkJCXNjcm9sbCA9ICd5ZXMn OwoJCQkJd2ggPSBzY3JlZW4uaGVpZ2h0OwoJCQl9CgkJfQoKCQllbHNlCgkJewoJCQl3dyA9 IDQ1MDsKCQkJd2ggPSAyNTA7CgkJfQoKCQlpZiAoIXRpdGxlKQoJCXsKCQkJdGl0bGUgPSBu YW1lOwoJCX0KCgkJdmFyIHQgPSAoc2NyZWVuLmhlaWdodCkgPyAoc2NyZWVuLmhlaWdodCAt IHdoKSAvIDIgOiAwOwoJCXZhciBsID0gKHNjcmVlbi53aWR0aCkgPyAoc2NyZWVuLndpZHRo IC0gd3cpIC8gMiA6IDA7CgoJCXZhciBmYXN0V2luID0gd2luZG93Lm9wZW4oJycsICd1cG1f aW1nX3BvcHBlcl9wcmV2aWV3JywgJ3RvcCA9ICcrdCsnLCBsZWZ0ID0gJytsKycsIHdpZHRo ID0gJyt3dysnLCBoZWlnaHQgPSAnK3doKycsIHRvb2xiYXIgPSBubywgbG9jYXRpb24gPSBu bywgZGlyZWN0b3JpZXMgPSBubywgc3RhdHVzID0gbm8sIG1lbnViYXIgPSBubywgc2Nyb2xs YmFycyA9ICcrc2Nyb2xsKycsIGNvcHloaXN0b3J5ID0gbm8sIHJlc2l6YWJsZSA9IHllcycp OwoKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi LS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0 L3N0cmljdC5kdGQiPicpOwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignPGh0bWw+Jyk7 CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCc8aGVhZD4nKTsKCQlmYXN0V2luLmRvY3Vt ZW50LndyaXRlbG4oJzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4nKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRl bG4oJzxtZXRhIGh0dHAtZXF1aXY9ImltYWdldG9vbGJhciIgY29udGVudD0ibm8iPicpOwoJ CWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignPHRpdGxlPicrdGl0bGUrJzwvdGl0bGU+Jyk7 CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicp OwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignPCEtLScpOwoJCWZhc3RXaW4uZG9jdW1l bnQud3JpdGVsbignYm9keSB7Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdtYXJn aW46IDA7Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdwYWRkaW5nOiAwOycpOwoJ CWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignY29sb3I6ICMwMDA7Jyk7CgkJZmFzdFdpbi5k b2N1bWVudC53cml0ZWxuKCdiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOycpOwoJCWZhc3RXaW4u ZG9jdW1lbnQud3JpdGVsbignYm9yZGVyLXRvcDogMTVweCBzb2xpZCAjZmMzOycpOwoJCWZh c3RXaW4uZG9jdW1lbnQud3JpdGVsbigndGV4dC1hbGlnbjogY2VudGVyOycpOwoKCQlpZiAo c2Nyb2xsID09IGZhbHNlKQoJCXsKCQkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdvdmVy ZmxvdzogaGlkZGVuOycpOwoJCX0KCgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCd9Jyk7 CgoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignJyk7CgkJZmFzdFdpbi5kb2N1bWVudC53 cml0ZWxuKCdpbWcgeycpOwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignbWFyZ2luOiAw IGF1dG87Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdwYWRkaW5nOiAwOycpOwoJ CWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignYm9yZGVyOiBub25lOycpOwoKCQlpZiAod2gg PT0gMTI1KQoJCXsKCQkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdtYXJnaW4tdG9wOiAn ICsgTWF0aC5mbG9vcig1MC0oaC8yKSkgKyAncHg7Jyk7CgkJfQoKCQlmYXN0V2luLmRvY3Vt ZW50LndyaXRlbG4oJ30nKTsKCgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCctLT4nKTsK CQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJzwvc3R5bGU+Jyk7CgkJZmFzdFdpbi5kb2N1 bWVudC53cml0ZWxuKCc8L2hlYWQ+Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCc8 Ym9keT4nKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJzxkaXY+Jyk7CgkJZmFzdFdp bi5kb2N1bWVudC53cml0ZWxuKGNvbnRlbnQpOwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVs bignPC9kaXY+Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCc8L2JvZHk+Jyk7CgkJ ZmFzdFdpbi5kb2N1bWVudC53cml0ZSgnPC9odG1sPicpOwoKCQlmYXN0V2luLmRvY3VtZW50 LmNsb3NlKCk7CgoJCWZhc3RXaW4uZm9jdXMoKTsKCgkJcmV0dXJuIGZhbHNlOwoJfQoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQoKCWZ1bmN0aW9uIGJ1aWxkVGFnKHR5cGUsIGlkLCBleHQsIHdpZHRoLCBoZWln aHQsIGFsdCwgdGl0bGUpCgl7CgkJdmFyIGluY19hbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgnaW5jX2FsdCcpOwoJCXZhciBpbmNfdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgnaW5jX3RpdGxlJyk7CgoJCXZhciBpbmNfd2lkdGggPSBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgnaW5jX3dpZHRoJyk7CgkJdmFyIGluY19oZWlnaHQgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgnaW5jX2hlaWdodCcpOwoKCQl2YXIgaW5jX2NsYXNzID0gZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ2luY19jbGFzcycpOwoJCXZhciB0aGVfY2xhc3MgPSBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgndGhlX2NsYXNzJykudmFsdWU7CgoJCXZhciBjdXN0b21fZm9y bSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0b21fZm9ybScpLnZhbHVlOwoKCQlp ZiAodHlwZSA9PSAnaW1hZ2UnKQoJCXsKCQkJdmFyIGluc2VydCA9ICc8dHhwOmltYWdlIGlk PSInK2lkKyciJzsKCgkJCWlmIChpbmNfY2xhc3MuY2hlY2tlZCAmJiB0aGVfY2xhc3MpCgkJ CXsKCQkJCWluc2VydCArPSAnIGNsYXNzPSInK3RoZV9jbGFzcysnIic7CgkJCX0KCQl9CgoJ CWVsc2UgaWYgKHR5cGUgPT0gJ3RodW1iJykKCQl7CgkJCXZhciBpbnNlcnQgPSAnPHR4cDp0 aHVtYm5haWwgaWQ9IicraWQrJyInOwoJCX0KCgkJZWxzZSBpZiAodHlwZSA9PSAncG9wdXAn KQoJCXsKCQkJdmFyIGluc2VydCA9ICc8dHhwOnRodW1ibmFpbCBpZD0iJytpZCsnIiBwb3Bs aW5rPSIxIic7CgkJfQoKCQllbHNlIGlmICh0eXBlID09ICd0ZXh0aWxlJykKCQl7CgkJCXZh ciBpbnNlcnQgPSAnISc7CgoJCQlpZiAoaW5jX2NsYXNzLmNoZWNrZWQgJiYgdGhlX2NsYXNz KQoJCQl7CgkJCQlpbnNlcnQgKz0gJygnK3RoZV9jbGFzcysnKSc7CgkJCX0KCgkJCWluc2Vy dCArPSAnJGltZ191cmwvJytpZCtleHQ7CgoJCQlpZiAoaW5jX2FsdC5jaGVja2VkICYmIGFs dCkKCQkJewoJCQkJaW5zZXJ0ICs9ICcoJythbHQrJyknOwoJCQl9CgoJCQlpbnNlcnQgKz0g JyEnOwoKCQkJcmV0dXJuIGluc2VydDsKCQl9CgoJCWVsc2UgaWYgKHR5cGUgPT0gJ3hodG1s JykKCQl7CgkJCXZhciBpbnNlcnQgPSAnPGltZyBzcmM9IiRpbWdfdXJsLycraWQrZXh0Kyci JzsKCgkJCWlmIChpbmNfY2xhc3MuY2hlY2tlZCAmJiB0aGVfY2xhc3MpCgkJCXsKCQkJCWlu c2VydCArPSAnIGNsYXNzPSInK3RoZV9jbGFzcysnIic7CgkJCX0KCgkJCWlmIChpbmNfd2lk dGguY2hlY2tlZCAmJiB3aWR0aCkKCQkJewoJCQkJaW5zZXJ0ICs9ICcgd2lkdGg9Iicrd2lk dGgrJyInOwoJCQl9CgoJCQlpZiAoaW5jX2hlaWdodC5jaGVja2VkICYmIGhlaWdodCkKCQkJ ewoJCQkJaW5zZXJ0ICs9ICcgaGVpZ2h0PSInK2hlaWdodCsnIic7CgkJCX0KCgkJCWlmIChp bmNfYWx0LmNoZWNrZWQgJiYgYWx0KQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBhbHQ9IicrYWx0 KyciJzsKCQkJfQoKCQkJZWxzZQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBhbHQ9IiInOwoJCQl9 CgoJCQlpZiAoaW5jX3RpdGxlLmNoZWNrZWQgJiYgdGl0bGUpCgkJCXsKCQkJCWluc2VydCAr PSAnIHRpdGxlPSInK3RpdGxlKyciJzsKCQkJfQoJCX0KCgkJZWxzZSBpZiAodHlwZSA9PSAn cGx1Z2luLWN1c3RvbScpCgkJewoJCQl2YXIgaW5zZXJ0ID0gJzx0eHA6dXBtX2ltYWdlIGlt YWdlX2lkPSInK2lkKyciIGZvcm09IicrY3VzdG9tX2Zvcm0rJyInOwoJCX0KCgkJZWxzZQoJ CXsKCQkJdHlwZSA9IG5ldyBTdHJpbmcodHlwZSk7CgkJCXR5cGUgPSB0eXBlLnJlcGxhY2Uo J3BsdWdpbi0nLCAnJyk7CgoJCQl2YXIgaW5zZXJ0ID0gJzx0eHA6dXBtX2ltYWdlIHR5cGU9 IicrdHlwZSsnIiBpbWFnZV9pZD0iJytpZCsnIic7CgoJCQlpZiAoaW5jX2NsYXNzLmNoZWNr ZWQgJiYgdGhlX2NsYXNzKQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBjbGFzcz0iJyt0aGVfY2xh c3MrJyInOwoJCQl9CgoJCQlpZiAoaW5jX3dpZHRoLmNoZWNrZWQgPT0gZmFsc2UpCgkJCXsK CQkJCWluc2VydCArPSAnIHNob3dfd2lkdGg9Im5vIic7CgkJCX0KCgkJCWlmIChpbmNfaGVp Z2h0LmNoZWNrZWQgPT0gZmFsc2UpCgkJCXsKCQkJCWluc2VydCArPSAnIHNob3dfaGVpZ2h0 PSJubyInOwoJCQl9CgoJCQlpZiAoaW5jX2FsdC5jaGVja2VkID09IGZhbHNlKQoJCQl7CgkJ CQlpbnNlcnQgKz0gJyBzaG93X2FsdD0ibm8iJzsKCQkJfQoKCQkJaWYgKGluY190aXRsZS5j aGVja2VkID09IGZhbHNlKQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBzaG93X3RpdGxlPSJubyIn OwoJCQl9CgkJfQoKCQlpbnNlcnQgKz0gJyAvPic7CgoJCXJldHVybiBpbnNlcnQ7Cgl9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCgoJZnVuY3Rpb24gaW5zZXJ0VGFnKHR5cGUsIGlkLCBleHQsIHdpZHRoLCBo ZWlnaHQsIGFsdCwgdGl0bGUpCgl7CgkJdmFyIGluc2VydCA9IGJ1aWxkVGFnKHR5cGUsIGlk LCBleHQsIHdpZHRoLCBoZWlnaHQsIGFsdCwgdGl0bGUpOwoKCQlpZiAod2luZG93Lm9wZW5l ci5kb2N1bWVudC5hcnRpY2xlKQoJCXsKCQkJaWYgKHR5cGUgPT0gJ2FwcGVuZC1hcnRpY2xl LWltYWdlJykKCQkJewoJCQkJaWYgKHdpbmRvdy5vcGVuZXIuZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoJ2FydGljbGUtaW1hZ2UnKS52YWx1ZSA9PSAnJykKCQkJCXsKCQkJCQl3aW5kb3cu b3BlbmVyLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcnRpY2xlLWltYWdlJykudmFsdWUg PSBpZDsKCQkJCQlyZXR1cm4gc2hvd01zZygnc3VjY2VzcycpOwoJCQkJfQoKCQkJCWVsc2UK CQkJCXsKCQkJCQl3aW5kb3cub3BlbmVyLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcnRp Y2xlLWltYWdlJykudmFsdWUgKz0gJywnK2lkOwoJCQkJCXJldHVybiBzaG93TXNnKCdzdWNj ZXNzJyk7CgkJCQl9CgkJCX0KCgkJCWVsc2UgaWYgKHR5cGUgPT0gJ3JlcGxhY2UtYXJ0aWNs ZS1pbWFnZScpCgkJCXsKCQkJCWlmICh3aW5kb3cub3BlbmVyLmRvY3VtZW50LmdldEVsZW1l bnRCeUlkKCdhcnRpY2xlLWltYWdlJykudmFsdWUubGVuZ3RoID4gMSkKCQkJCXsKCQkJCQl2 YXIgb3B0aW9uID0gY29uZmlybSgnJGxhbmdfY29uZmlybV9vdmVyd3JpdGUnKTsKCgkJCQkJ aWYgKG9wdGlvbikKCQkJCQl7CgkJCQkJCXdpbmRvdy5vcGVuZXIuZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoJ2FydGljbGUtaW1hZ2UnKS52YWx1ZSA9IGlkOwoJCQkJCQlyZXR1cm4gc2hv d01zZygnc3VjY2VzcycpOwoJCQkJCX0KCQkJCX0KCgkJCQllbHNlCgkJCQl7CgkJCQkJd2lu ZG93Lm9wZW5lci5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXJ0aWNsZS1pbWFnZScpLnZh bHVlID0gaWQ7CgkJCQkJcmV0dXJuIHNob3dNc2coJ3N1Y2Nlc3MnKTsKCQkJCX0KCQkJfQoK CQkJZWxzZQoJCQl7CgkJCQl2YXIgdGVtcCA9ICd3aW5kb3cub3BlbmVyLmRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKHdpbmRvdy5vcGVuZXIuY3VycmVudCknOwoKCQkJCXRlbXAgPSBldmFs KHRlbXApOwoKCQkJCXdpbmRvdy5vcGVuZXIudXBtX2ltZ19wb3BwZXJfaW5zZXJ0KHRlbXAs IGluc2VydCk7CgoJCQkJcmV0dXJuIHNob3dNc2coJ3N1Y2Nlc3MnKTsKCQkJfQoJCX0KCgkJ ZWxzZSBpZiAod2luZG93Lm9wZW5lci5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScp KQoJCXsKCQkJd2luZG93Lm9wZW5lci51cG1faW1nX3BvcHBlcl9pbnNlcnQod2luZG93Lm9w ZW5lci5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpLCBpbnNlcnQpOwoJCQlyZXR1 cm4gc2hvd01zZygnc3VjY2VzcycpOwoJCX0KCgkJZWxzZSBpZiAod2luZG93Lm9wZW5lci5k b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHRtbCcpKQoJCXsKCQkJd2luZG93Lm9wZW5lci51 cG1faW1nX3BvcHBlcl9pbnNlcnQod2luZG93Lm9wZW5lci5kb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgnaHRtbCcpLCBpbnNlcnQpOwoJCQlyZXR1cm4gc2hvd01zZygnc3VjY2VzcycpOwoJ CX0KCgkJcmV0dXJuIHNob3dNc2coJ2ZhaWxlZCcpOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0 aW9uIHdhcm5FZGl0SW1hZ2UoaWQpCgl7CgkJaWYgKHdpbmRvdy5vcGVuZXIuZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ2JvZHknKS52YWx1ZSAhPSB3aW5kb3cub3BlbmVyLmRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCd1cG1faW1nX3BvcHBlcl9zdGFydCcpLnZhbHVlKQoJCXsKCQkJ dmFyIGNoZWNrID0gY29uZmlybSgnJGxhbmdfY2hlY2tfbGVhdmUnKTsKCgkJCWlmIChjaGVj aykKCQkJewoJCQkJZ29FZGl0SW1hZ2UoaWQpOwoJCQl9CgkJfQoKCQllbHNlCgkJewoJCQln b0VkaXRJbWFnZShpZCk7CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJ ZnVuY3Rpb24gZ29FZGl0SW1hZ2UoaWQpCgl7CgkJd2luZG93Lm9wZW5lci5mb2N1cygpOwoK CQlpZiAod2luZG93Lm9wZW5lci5kb2N1bWVudC5hcnRpY2xlLnN0ZXAudmFsdWUgIT0gJ2Ny ZWF0ZScpCgkJewoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWVzJykuc2V0QXR0cmli dXRlKCdocmVmJywgd2luZG93Lm9wZW5lci5kb2N1bWVudC5sb2NhdGlvbik7CgkJCXNob3dN c2coJ3JldHVybicpOwoJCX0KCgkJd2luZG93Lm9wZW5lci5kb2N1bWVudC5sb2NhdGlvbiA9 ICc/ZXZlbnQ9aW1hZ2VcdTAwMjZzdGVwPWltYWdlX2VkaXRcdTAwMjZpZD0nK2lkOwoJfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKCWZ1bmN0aW9uIGdvQmFjayh1cmwpCgl7CgkJd2luZG93Lm9wZW5lci5m b2N1cygpOwoKCQlkb25lKCdyZXR1cm4nKTsKCgkJd2luZG93Lm9wZW5lci5kb2N1bWVudC5s b2NhdGlvbiA9IHVybDsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiBzaG93TXNnKGlkKQoJ ewoJCXZhciBvYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CgoJCXZhciB3aWR0 aCA9IHBhcnNlSW50KG9iai5zdHlsZS53aWR0aCk7CgkJdmFyIGhlaWdodCA9IHBhcnNlSW50 KG9iai5zdHlsZS5oZWlnaHQpOwoKCQl2YXIgdG9wID0gMTAwICsgc2Nyb2xsVG9wKCk7CgkJ dmFyIGxlZnQgPSAoIChwYWdlV2lkdGgoKSAvIDIpIC0gKHdpZHRoIC8gMikgKSArIHNjcm9s bExlZnQoKTsKCgkJb2JqLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKCQlvYmouc3R5 bGUudG9wID0gdG9wICsgJ3B4JzsKCQlvYmouc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnOwoJ CW9iai5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCgkJaWYgKGlkICE9ICdyZXR1cm4nKQoJ CXsKCQkJc2V0VGltZW91dCgiZG9uZSgnIitpZCsiJykiLCAxMDAwKTsKCQl9Cgl9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCgoJZnVuY3Rpb24gZG9uZShpZCkKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZChpZCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlv biBwYWdlV2lkdGgoKQoJewoJCWlmIChzZWxmLmlubmVyV2lkdGgpCgkJewoJCQlyZXR1cm4g c2VsZi5pbm5lcldpZHRoOwoJCX0KCgkJZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVt ZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkKCQl7CgkJCXJl dHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7CgkJfQoKCQlyZXR1 cm4gMDsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiBzY3JvbGxUb3AoKQoJewoJCWlmIChz ZWxmLnBhZ2VZT2Zmc2V0KQoJCXsKCQkJcmV0dXJuIHNlbGYucGFnZVlPZmZzZXQ7CgkJfQoK CQllbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1l bnRFbGVtZW50LnNjcm9sbFRvcCkKCQl7CgkJCXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVs ZW1lbnQuc2Nyb2xsVG9wOwoJCX0KCgkJcmV0dXJuIDA7Cgl9CgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVu Y3Rpb24gc2Nyb2xsTGVmdCgpCgl7CgkJaWYgKHNlbGYucGFnZVlPZmZzZXQpCgkJewoJCQly ZXR1cm4gc2VsZi5wYWdlWE9mZnNldDsKCQl9CgoJCWVsc2UgaWYgKGRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKQoJCXsK CQkJcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OwoJCX0KCgkJ cmV0dXJuIDA7Cgl9CgpqczsKCQl9CgoJCWV4aXQoMCk7Cgl9CgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVu Y3Rpb24gdXBtX2ltZ19wb3BwZXJfcHJlZnMoJGV2ZW50LCAkc3RlcCkKCXsKCQlnbG9iYWwg JHByZWZzOwoKCQlwYWdldG9wKHVwbV9pbWdfcG9wcGVyX2dUeHQoJ3ByZWZzJyksICgkc3Rl cCA9PSAndXBkYXRlJyA/IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJykgOiAnJykpOwoKCQlp ZiAoJHN0ZXAgPT0gJ3VwZGF0ZScpCgkJewoJCQlleHRyYWN0KGRvU2xhc2gocHNhcyhhcnJh eSgKCQkJCSdzaG93X3dpZHRoJywgJ3Nob3dfaGVpZ2h0JywgJ3Nob3dfYWx0JywgJ3Nob3df dGl0bGUnLCAnc2hvd19jbGFzcycsICd0aGVfY2xhc3MnLCAnY3VzdG9tX2Zvcm0nLAoJCQkJ J3Nob3dfZm9ybScsICdhZG1pbl9wb3B1cF93aWR0aCcsICdhZG1pbl9wb3B1cF9oZWlnaHQn CgkJCSkpKSk7CgoJCQkkc2hvd193aWR0aCAgPSAoJHNob3dfd2lkdGggPT0gJzEnKSA/ICRz aG93X3dpZHRoIDogJzAnOwoJCQkkc2hvd19oZWlnaHQgPSAoJHNob3dfaGVpZ2h0ID09ICcx JykgPyAkc2hvd19oZWlnaHQgOiAnMCc7CgkJCSRzaG93X2FsdCAgICA9ICgkc2hvd19hbHQg PT0gJzEnKSA/ICRzaG93X2FsdCA6ICcwJzsKCQkJJHNob3dfdGl0bGUgID0gKCRzaG93X3Rp dGxlID09ICcxJykgPyAkc2hvd190aXRsZSA6ICcwJzsKCQkJJHNob3dfY2xhc3MgID0gKCRz aG93X2NsYXNzID09ICcxJykgPyAkc2hvd19jbGFzcyA6ICcwJzsKCgkJCSR0aGVfY2xhc3Mg ICA9IHByZWdfcmVwbGFjZSgiLyhefCZcUys7KXwoPFtePl0qPikvVSIsICcnLCBkdW1iRG93 bigkdGhlX2NsYXNzKSk7CgkJCSRjdXN0b21fZm9ybSA9IHNhbml0aXplRm9yVXJsKCRjdXN0 b21fZm9ybSk7CgoJCQlpZiAoZW1wdHkoJGFkbWluX3BvcHVwX3dpZHRoKSkKCQkJewoJCQkJ JGFkbWluX3BvcHVwX3dpZHRoID0gJzcyNSc7CgkJCX0KCgkJCWlmIChlbXB0eSgkYWRtaW5f cG9wdXBfaGVpZ2h0KSkKCQkJewoJCQkJJGFkbWluX3BvcHVwX2hlaWdodCA9ICc0MDAnOwoJ CQl9CgoJCQlzYWZlX3VwZGF0ZSgndHhwX3ByZWZzJywgInZhbCA9ICckc2hvd193aWR0aCci LCAibmFtZSA9ICd1cG1faW1nX3BvcHBlcl9zaG93X3dpZHRoJyIpOwoJCQlzYWZlX3VwZGF0 ZSgndHhwX3ByZWZzJywgInZhbCA9ICckc2hvd19oZWlnaHQnIiwgIm5hbWUgPSAndXBtX2lt Z19wb3BwZXJfc2hvd19oZWlnaHQnIik7CgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLCAi dmFsID0gJyRzaG93X2FsdCciLCAibmFtZSA9ICd1cG1faW1nX3BvcHBlcl9zaG93X2FsdCci KTsKCQkJc2FmZV91cGRhdGUoJ3R4cF9wcmVmcycsICJ2YWwgPSAnJHNob3dfdGl0bGUnIiwg Im5hbWUgPSAndXBtX2ltZ19wb3BwZXJfc2hvd190aXRsZSciKTsKCQkJc2FmZV91cGRhdGUo J3R4cF9wcmVmcycsICJ2YWwgPSAnJHNob3dfY2xhc3MnIiwgIm5hbWUgPSAndXBtX2ltZ19w b3BwZXJfc2hvd19jbGFzcyciKTsKCQkJc2FmZV91cGRhdGUoJ3R4cF9wcmVmcycsICJ2YWwg PSAnJHRoZV9jbGFzcyciLCAibmFtZSA9ICd1cG1faW1nX3BvcHBlcl90aGVfY2xhc3MnIik7 CgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLCAidmFsID0gJyRjdXN0b21fZm9ybSciLCAi bmFtZSA9ICd1cG1faW1nX3BvcHBlcl9jdXN0b21fZm9ybSciKTsKCgkJCXNhZmVfdXBkYXRl KCd0eHBfcHJlZnMnLCAidmFsID0gJyRzaG93X2Zvcm0nIiwgIm5hbWUgPSAndXBtX2ltZ19w b3BwZXJfc2hvd19mb3JtJyIpOwoJCQlzYWZlX3VwZGF0ZSgndHhwX3ByZWZzJywgInZhbCA9 ICckYWRtaW5fcG9wdXBfd2lkdGgnIiwgIm5hbWUgPSAndXBtX2ltZ19wb3BwZXJfYWRtaW5f cG9wdXBfd2lkdGgnIik7CgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLCAidmFsID0gJyRh ZG1pbl9wb3B1cF9oZWlnaHQnIiwgIm5hbWUgPSAndXBtX2ltZ19wb3BwZXJfYWRtaW5fcG9w dXBfaGVpZ2h0JyIpOwoKCQkJJHByZWZzID0gZ2V0X3ByZWZzKCk7CgkJfQoKCQllY2hvIG4u bi4nPGRpdiBzdHlsZT0ibWFyZ2luOiAzZW0gYXV0byBhdXRvIGF1dG87IHdpZHRoOiAyMGVt OyI+Jy4KCgkJbi5uLmhlZCh1cG1faW1nX3BvcHBlcl9nVHh0KCdwcmVmcycpLCAnMScpLgoK CQluLm4uZm9ybSgKCQkJbi5lSW5wdXQoJ3VwbV9pbWdfcG9wcGVyX3ByZWZzJykuCgkJCW4u c0lucHV0KCd1cGRhdGUnKS4KCgkJCW4ubi50YWcoCgkJCQluLm4udGFnKHVwbV9pbWdfcG9w cGVyX2dUeHQoJ3B1YmxpY19zaWRlJyksICdsZWdlbmQnKS4KCgkJCQluLm4uZ3JhZigKCQkJ CQl1cG1faW1nX3BvcHBlcl9nVHh0KCdzaG93X3dpZHRoJykuYnIuCgkJCQkJbi55ZXNub1Jh ZGlvKCdzaG93X3dpZHRoJywgJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X3dpZHRoJ10p CgkJCQkpLgoKCQkJCW4ubi5ncmFmKAoJCQkJCXVwbV9pbWdfcG9wcGVyX2dUeHQoJ3Nob3df aGVpZ2h0JykuYnIuCgkJCQkJbi55ZXNub1JhZGlvKCdzaG93X2hlaWdodCcsICRwcmVmc1sn dXBtX2ltZ19wb3BwZXJfc2hvd19oZWlnaHQnXSkKCQkJCSkuCgoJCQkJbi5uLmdyYWYoCgkJ CQkJdXBtX2ltZ19wb3BwZXJfZ1R4dCgnc2hvd19hbHQnKS5ici4KCQkJCQluLnllc25vUmFk aW8oJ3Nob3dfYWx0JywgJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X2FsdCddKQoJCQkJ KS4KCgkJCQluLm4uZ3JhZigKCQkJCQl1cG1faW1nX3BvcHBlcl9nVHh0KCdzaG93X3RpdGxl JykuYnIuCgkJCQkJbi55ZXNub1JhZGlvKCdzaG93X3RpdGxlJywgJHByZWZzWyd1cG1faW1n X3BvcHBlcl9zaG93X3RpdGxlJ10pCgkJCQkpLgoKCQkJCW4ubi5ncmFmKAoJCQkJCXVwbV9p bWdfcG9wcGVyX2dUeHQoJ3Nob3dfY2xhc3MnKS5ici4KCQkJCQluLnllc25vUmFkaW8oJ3No b3dfY2xhc3MnLCAkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3Nob3dfY2xhc3MnXSkKCQkJCSku CgoJCQkJbi5uLmdyYWYoCgkJCQkJdXBtX2ltZ19wb3BwZXJfZ1R4dCgndGhlX2NsYXNzJyku YnIuCgkJCQkJbi5mSW5wdXQoJ3RleHQnLCAndGhlX2NsYXNzJywgJHByZWZzWyd1cG1faW1n X3BvcHBlcl90aGVfY2xhc3MnXSwgJ2VkaXQnKQoJCQkJKS4KCgkJCQluLm4uZ3JhZigKCQkJ CQl1cG1faW1nX3BvcHBlcl9nVHh0KCdjdXN0b21fZm9ybScpLmJyLgoJCQkJCW4uZklucHV0 KCd0ZXh0JywgJ2N1c3RvbV9mb3JtJywgJHByZWZzWyd1cG1faW1nX3BvcHBlcl9jdXN0b21f Zm9ybSddLCAnZWRpdCcpCgkJCQkpCgkJCSwgJ2ZpZWxkc2V0JykuCgoJCQluLm4udGFnKAoJ CQkJbi5uLnRhZyh1cG1faW1nX3BvcHBlcl9nVHh0KCdhZG1pbl9zaWRlJyksICdsZWdlbmQn KS4KCgkJCQluLm4uZ3JhZigKCQkJCQl1cG1faW1nX3BvcHBlcl9nVHh0KCdzaG93X2Zvcm0n KS5ici4KCQkJCQluLnllc25vUmFkaW8oJ3Nob3dfZm9ybScsICRwcmVmc1sndXBtX2ltZ19w b3BwZXJfc2hvd19mb3JtJ10pCgkJCQkpLgoKCQkJCW4ubi5ncmFmKAoJCQkJCXVwbV9pbWdf cG9wcGVyX2dUeHQoJ2FkbWluX3BvcHVwX3dpZHRoJykuYnIuCgkJCQkJbi5mSW5wdXQoJ3Rl eHQnLCAnYWRtaW5fcG9wdXBfd2lkdGgnLCAkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX2FkbWlu X3BvcHVwX3dpZHRoJ10sICdlZGl0JykKCQkJCSkuCgoJCQkJbi5uLmdyYWYoCgkJCQkJdXBt X2ltZ19wb3BwZXJfZ1R4dCgnYWRtaW5fcG9wdXBfaGVpZ2h0JykuYnIuCgkJCQkJbi5mSW5w dXQoJ3RleHQnLCAnYWRtaW5fcG9wdXBfaGVpZ2h0JywgJHByZWZzWyd1cG1faW1nX3BvcHBl cl9hZG1pbl9wb3B1cF9oZWlnaHQnXSwgJ2VkaXQnKQoJCQkJKQoKCQkJLCAnZmllbGRzZXQn KS4KCgkJCW4ubi5mSW5wdXQoJ3N1Ym1pdCcsICd1cGRhdGUnLCAnVXBkYXRlJywgJ3NtYWxs ZXJib3gnKQoKCQkpLm4ubi4nPC9kaXY+JzsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1 cG1faW1nX3BvcHBlcl9pbnN0YWxsKCkKCXsKCQlnbG9iYWwgJHByZWZzOwoKCQkkdXBkYXRl ZCA9IGZhbHNlOwoKCQkkc2V0dGluZ3MgPSAicHJlZnNfaWQgPSAxLCB0eXBlID0gMiwgZXZl bnQgPSAnYWRtaW4nLCBwb3NpdGlvbiA9IDAiOwoKCQlpZiAoIWlzc2V0KCRwcmVmc1sndXBt X2ltZ19wb3BwZXJfc2hvd193aWR0aCddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJl ZnMnLCAiCgkJCQluYW1lID0gJ3VwbV9pbWdfcG9wcGVyX3Nob3dfd2lkdGgnLAoJCQkJdmFs ID0gJzEnLAoJCQkJaHRtbCA9ICd5ZXNub3JhZGlvJywKCQkJCSRzZXR0aW5ncwoJCQkiKTsK CgkJCSR1cGRhdGVkID0gdHJ1ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1n X3BvcHBlcl9zaG93X2hlaWdodCddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMn LCAiCgkJCQluYW1lID0gJ3VwbV9pbWdfcG9wcGVyX3Nob3dfaGVpZ2h0JywKCQkJCXZhbCA9 ICcxJywKCQkJCWh0bWwgPSAneWVzbm9yYWRpbycsCgkJCQkkc2V0dGluZ3MKCQkJIik7CgoJ CQkkdXBkYXRlZCA9IHRydWU7CgkJfQoKCQlpZiAoIWlzc2V0KCRwcmVmc1sndXBtX2ltZ19w b3BwZXJfc2hvd19hbHQnXSkpCgkJewoJCQlzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIgoJ CQkJbmFtZSA9ICd1cG1faW1nX3BvcHBlcl9zaG93X2FsdCcsCgkJCQl2YWwgPSAnMScsCgkJ CQlodG1sID0gJ3llc25vcmFkaW8nLAoJCQkJJHNldHRpbmdzCgkJCSIpOwoKCQkJJHVwZGF0 ZWQgPSB0cnVlOwoJCX0KCgkJaWYgKCFpc3NldCgkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3No b3dfdGl0bGUnXSkpCgkJewoJCQlzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFt ZSA9ICd1cG1faW1nX3BvcHBlcl9zaG93X3RpdGxlJywKCQkJCXZhbCA9ICcxJywKCQkJCWh0 bWwgPSAneWVzbm9yYWRpbycsCgkJCQkkc2V0dGluZ3MKCQkJIik7CgoJCQkkdXBkYXRlZCA9 IHRydWU7CgkJfQoKCQlpZiAoIWlzc2V0KCRwcmVmc1sndXBtX2ltZ19wb3BwZXJfc2hvd19j bGFzcyddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAiCgkJCQluYW1lID0g J3VwbV9pbWdfcG9wcGVyX3Nob3dfY2xhc3MnLAoJCQkJdmFsID0gJzEnLAoJCQkJaHRtbCA9 ICd5ZXNub3JhZGlvJywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJCSR1cGRhdGVkID0gdHJ1 ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3BvcHBlcl90aGVfY2xhc3Mn XSkpCgkJewoJCQlzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1f aW1nX3BvcHBlcl90aGVfY2xhc3MnLAoJCQkJdmFsID0gJ2ltYWdlJywKCQkJCWh0bWwgPSAn dGV4dF9pbnB1dCcsCgkJCQkkc2V0dGluZ3MKCQkJIik7CgoJCQkkdXBkYXRlZCA9IHRydWU7 CgkJfQoKCQlpZiAoIWlzc2V0KCRwcmVmc1sndXBtX2ltZ19wb3BwZXJfY3VzdG9tX2Zvcm0n XSkpCgkJewoJCQlzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1f aW1nX3BvcHBlcl9jdXN0b21fZm9ybScsCgkJCQl2YWwgPSAndXBtX2ltZ19wb3BwZXInLAoJ CQkJaHRtbCA9ICd0ZXh0X2lucHV0JywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJCSR1cGRh dGVkID0gdHJ1ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9z aG93X2Zvcm0nXSkpCgkJewoJCQlzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFt ZSA9ICd1cG1faW1nX3BvcHBlcl9zaG93X2Zvcm0nLAoJCQkJdmFsID0gJzEnLAoJCQkJaHRt bCA9ICd5ZXNub3JhZGlvJywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJCSR1cGRhdGVkID0g dHJ1ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9hZG1pbl9w b3B1cF93aWR0aCddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAiCgkJCQlu YW1lID0gJ3VwbV9pbWdfcG9wcGVyX2FkbWluX3BvcHVwX3dpZHRoJywKCQkJCXZhbCA9ICc3 MjUnLAoJCQkJaHRtbCA9ICd0ZXh0X2lucHV0JywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJ CSR1cGRhdGVkID0gdHJ1ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3Bv cHBlcl9hZG1pbl9wb3B1cF9oZWlnaHQnXSkpCgkJewoJCQlzYWZlX2luc2VydCgndHhwX3By ZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1faW1nX3BvcHBlcl9hZG1pbl9wb3B1cF9oZWlnaHQn LAoJCQkJdmFsID0gJzQwMCcsCgkJCQlodG1sID0gJ3RleHRfaW5wdXQnLAoJCQkJJHNldHRp bmdzCgkJCSIpOwoKCQkJJHVwZGF0ZWQgPSB0cnVlOwoJCX0KCgkJaWYgKCR1cGRhdGVkKQoJ CXsKCQkJJEdMT0JBTFNbJ3ByZWZzJ10gPSBnZXRfcHJlZnMoKTsKCQl9Cgl9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCgoJZnVuY3Rpb24gdXBtX2ltZ19wb3BwZXJfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJh eSgpKQoJewoJCSRsYW5nID0gYXJyYXkoCgkJCSdhZG1pbl9wb3B1cF93aWR0aCcgICAgID0+ ICdQb3B1cCB3aWR0aCcsCgkJCSdhZG1pbl9wb3B1cF9oZWlnaHQnICAgID0+ICdQb3B1cCBo ZWlnaHQnLAoJCQknYWRtaW5fc2lkZScgICAgICAgICAgICA9PiAnQWRtaW4nLAoJCQknYWx0 X3RleHRfZm9yJwkJCQkJPT4gJ0FsdGVybmF0ZSB0ZXh0IGZvcicsCgkJCSdhcnRpY2xlX2lt YWdlX2FwcGVuZCcJPT4gJ0FydGljbGUgaW1hZ2UgKGFwcGVuZCknLAoJCQknYXJ0aWNsZV9p bWFnZV9yZXBsYWNlJyA9PiAnQXJ0aWNsZSBpbWFnZSAocmVwbGFjZSknLAoJCQknYXNzaWdu X2NsYXNzJwkJCQkJPT4gJ2Fzc2lnbiBjbGFzcycsCgkJCSdidWlsdF9pbicJCQkJCQkJPT4g J0J1aWx0LWluJywKCQkJJ2NhcHRpb25fZm9yJwkJCQkJCT0+ICdDYXB0aW9uIGZvcicsCgkJ CSdjaGVja19sZWF2ZScJCQkJCQk9PiAnWW91IGhhdmUgbWFkZSBjaGFuZ2VzIHRvIHRoZSBj dXJyZW50IHBvc3Qgd2hpY2ggeW91IGhhdmUgbm90IHNhdmVkLiBDb250aW51ZSB3aXRob3V0 IHNhdmluZz8nLAoJCQknY29uZmlybV9vdmVyd3JpdGUnCQkJPT4gJ1lvdSBoYXZlIG1vcmUg dGhhbiBvbmUgYXJ0aWNsZSBpbWFnZSBkZWZpbmVkLiBUaGlzIGFjdGlvbiB3aWxsIG92ZXJ3 cml0ZSB0aGUgZW50aXJlIGxpc3QuIENvbnRpbnVlPycsCgkJCSdjdXN0b21fZm9ybScJCQkJ CQk9PiAnQ3VzdG9tIGZvcm0nLAoJCQknZmFpbGVkJwkJCQkJCQkJPT4gJ0luc2VydCBmYWls ZWQuJywKCQkJJ2ZvcicJCQkJCQkJCQkJPT4gJ2ZvcicsCgkJCSdpbWFnZScJCQkJCQkJCQk9 PiAnSW1hZ2UnLAoJCQknaW1hZ2Vfc2VsZWN0b3InCQkJCT0+ICdJbWFnZSBTZWxlY3Rvcics CgkJCSdpbmNsdWRlJwkJCQkJCQkJPT4gJ2luY2x1ZGUnLAoJCQknaW5jbHVkZV9hbHQnCQkJ CQkJPT4gJ2luY2x1ZGUgYWx0IHRleHQnLAoJCQknaW5jbHVkZV9jYXB0aW9uJwkJCQk9PiAn aW5jbHVkZSBjYXB0aW9uJywKCQkJJ2luY2x1ZGVfaGVpZ2h0JwkJCQk9PiAnaW5jbHVkZSBo ZWlnaHQnLAoJCQknaW5jbHVkZV93aWR0aCcJCQkJCT0+ICdpbmNsdWRlIHdpZHRoJywKCQkJ J2luc2VydCcJCQkJCQkJCT0+ICdJbnNlcnQnLAoJCQknaW5zZXJ0X2ltYWdlJwkJCQkJPT4g J0luc2VydCBJbWFnZScsCgkJCSdpbnNlcnRfcGx1Z2luJwkJCQkJPT4gJ0luc2VydCAodXBt X2ltYWdlKScsCgkJCSdub190aHVtYm5haWwnCQkJCQk9PiAnVGh1bWJuYWlsIG5vdCBmb3Vu ZC4nLAoJCQknb3ZlcnJpZGUnCQkJCQkJCT0+ICdvdmVycmlkZXMgYWxsIG9wdGlvbmFsIHBh cmFtZXRlcnMnLAoJCQkncG9wdXAnCQkJCQkJCQkJPT4gJ1BvcHVwJywKCQkJJ3ByZWZzJwkJ CQkJCQkJCT0+ICd1cG1faW1nX3BvcHBlciBQcmVmZXJlbmNlcycsCgkJCSdwdWJsaWNfc2lk ZScgICAgICAgICAgID0+ICdQdWJsaWMnLAoJCQkncmV0dXJuJwkJCQkJCQkJPT4gJ1JldHVy biB0byBlZGl0aW5nIHRoZSBwb3N0PycsCgkJCSdzaG93X2FsdCcJCQkJCQkJPT4gJ1Nob3cg YWx0ZXJuYXRlIHRleHQ/JywKCQkJJ3Nob3dfY2xhc3MnCQkJCQkJPT4gJ1Nob3cgY2xhc3M/ JywKCQkJJ3Nob3dfaGVpZ2h0JwkJCQkJCT0+ICdTaG93IGhlaWdodD8nLAoJCQknc2hvd190 aXRsZScJCQkJCQk9PiAnU2hvdyBjYXB0aW9uPycsCgkJCSdzaG93X3dpZHRoJwkJCQkJCT0+ ICdTaG93IHdpZHRoPycsCgkJCSdzaG93X2Zvcm0nCQkJCQkJCT0+ICdTaG93IGN1c3RvbWl6 YXRpb24gb3B0aW9ucyBpbiBwb3B1cD8nLAoJCQknc3VjY2VzcycJCQkJCQkJCT0+ICdTdWNj ZXNzLicsCgkJCSd0aGVfY2xhc3MnCQkJCQkJCT0+ICdUaGUgY2xhc3MnLAoJCQkndmlld19h bGwnCQkJCQkJCT0+ICdWaWV3IEFsbCcKCQkpOwoKCQlyZXR1cm4gc3RydHIoJGxhbmdbJHdo YXRdLCAkYXR0cyk7Cgl9IjtzOjQ6ImhlbHAiO3M6MTA3MToiaDEuIHVwbV9pbWdfcG9wcGVy CgoKaDIoI2ludHJvKS4gSW50cm8KClRleHRwYXR0ZXJuIGhhcyBzb21lIG5pY2UgaW1hZ2Ug aGFuZGxpbmcgZmVhdHVyZXMsIGJ1dCBvbmUgdGhpbmcgbGFja2luZyBpcyBhbiAiaW1hZ2Ug cGlja2VyIi4gQW55b25lIGNhbiBjb3B5IGFuZCBwYXN0ZSB0aGUgcmVxdWlyZWQtYnV0LW5l YXQgdGFncywgYnV0IHdvdWxkbid0IGl0IGJlIGV2ZW4gbmljZXIgdG8gYmUgYWJsZSB0byBj bGljayB0byBpbnNlcnQgdGhlbSByaWdodCBpbiB0aGUgd3JpdGUgdGFiPyBOb3cgeW91IGNh bi4KCiImIzg2MTc7IChKdW1wIGJhY2sgY29udGVudHMgbGlzdCkiOiNzdGFydAoKCmgyKCNj cmVkaXRzKS4gQ3JlZGl0IGFuZCBEZXZlbG9wZXIgTm90ZXMKClNpbmNlIFRleHRwYXR0ZXJu IHNhdmVzIGltYWdlIGluZm8gaW4gdGhlIGRhdGFiYXNlLCB0aGlzIHJlcXVpcmVzIGNhbGxz IHRvIHRoZSBkYXRhYmFzZSB0byBmZXRjaCBpdC4gQXMgdGhlIGFtb3VudCBvZiBpbWFnZXMg aW5jcmVhc2UsIHRoZSByZXN1bHRzIHJldHVybmVkIHdvdWxkIGluY3JlYXNlLiBGb3IgdGhp cyByZWFzb24sIEkgaGF2ZSBjaG9zZW4gdG8gbWFrZSB1c2Ugb2YgYSBwb3B1cCB3aW5kb3cs IHJhdGhlciB0aGFuIGEgZHJvcGRvd24gbGlzdC4gVGhpcyB3YXksIGl0J3MgdGhlcmUgYW5k IGVhc3ktdG8tdXNlIHdoZW4geW91IG5lZWQgaXQsIGJ1dCB3b24ndCBib2cgZG93biB0aGUg d3JpdGUgdGFiIHdoZW4geW91IGFyZW4ndCBpbnRlcmVzdGVkIGluIHVzaW5nIGltYWdlcyBm b3IgeW91ciBwb3N0LiBBZGRpdGlvbmFsbHksIHRoaXMgYWxsb3dzIHlvdSB0byB2aWV3IG1v cmUgaW1hZ2UgaW5mb3JtYXRpb24sIHNvIHlvdSBjYW4gYmUgc3VyZSB3aGljaCBpbWFnZSB5 b3UgYXJlIGluc2VydGluZy4KClRvIG1ha2UgdGhlIGltYWdlIGluc2VydGlvbiBpbnRvIHRo ZSBhcnRpY2xlIGJvZHkgInNtYXJ0ZXIiLCBJIG1hZGUgdXNlIG9mIEphdmFTY3JpcHQgYnkg IkFsZXggS2luZyI6aHR0cDovL3d3dy5hbGV4a2luZy5vcmcvLgoKIiYjODYxNzsgKEp1bXAg YmFjayBjb250ZW50cyBsaXN0KSI6I3N0YXJ0IjtzOjg6ImhlbHBfcmF3IjtzOjEwNzE6Imgx LiB1cG1faW1nX3BvcHBlcgoKCmgyKCNpbnRybykuIEludHJvCgpUZXh0cGF0dGVybiBoYXMg c29tZSBuaWNlIGltYWdlIGhhbmRsaW5nIGZlYXR1cmVzLCBidXQgb25lIHRoaW5nIGxhY2tp bmcgaXMgYW4gImltYWdlIHBpY2tlciIuIEFueW9uZSBjYW4gY29weSBhbmQgcGFzdGUgdGhl IHJlcXVpcmVkLWJ1dC1uZWF0IHRhZ3MsIGJ1dCB3b3VsZG4ndCBpdCBiZSBldmVuIG5pY2Vy IHRvIGJlIGFibGUgdG8gY2xpY2sgdG8gaW5zZXJ0IHRoZW0gcmlnaHQgaW4gdGhlIHdyaXRl IHRhYj8gTm93IHlvdSBjYW4uCgoiJiM4NjE3OyAoSnVtcCBiYWNrIGNvbnRlbnRzIGxpc3Qp Ijojc3RhcnQKCgpoMigjY3JlZGl0cykuIENyZWRpdCBhbmQgRGV2ZWxvcGVyIE5vdGVzCgpT aW5jZSBUZXh0cGF0dGVybiBzYXZlcyBpbWFnZSBpbmZvIGluIHRoZSBkYXRhYmFzZSwgdGhp cyByZXF1aXJlcyBjYWxscyB0byB0aGUgZGF0YWJhc2UgdG8gZmV0Y2ggaXQuIEFzIHRoZSBh bW91bnQgb2YgaW1hZ2VzIGluY3JlYXNlLCB0aGUgcmVzdWx0cyByZXR1cm5lZCB3b3VsZCBp bmNyZWFzZS4gRm9yIHRoaXMgcmVhc29uLCBJIGhhdmUgY2hvc2VuIHRvIG1ha2UgdXNlIG9m IGEgcG9wdXAgd2luZG93LCByYXRoZXIgdGhhbiBhIGRyb3Bkb3duIGxpc3QuIFRoaXMgd2F5 LCBpdCdzIHRoZXJlIGFuZCBlYXN5LXRvLXVzZSB3aGVuIHlvdSBuZWVkIGl0LCBidXQgd29u J3QgYm9nIGRvd24gdGhlIHdyaXRlIHRhYiB3aGVuIHlvdSBhcmVuJ3QgaW50ZXJlc3RlZCBp biB1c2luZyBpbWFnZXMgZm9yIHlvdXIgcG9zdC4gQWRkaXRpb25hbGx5LCB0aGlzIGFsbG93 cyB5b3UgdG8gdmlldyBtb3JlIGltYWdlIGluZm9ybWF0aW9uLCBzbyB5b3UgY2FuIGJlIHN1 cmUgd2hpY2ggaW1hZ2UgeW91IGFyZSBpbnNlcnRpbmcuCgpUbyBtYWtlIHRoZSBpbWFnZSBp bnNlcnRpb24gaW50byB0aGUgYXJ0aWNsZSBib2R5ICJzbWFydGVyIiwgSSBtYWRlIHVzZSBv ZiBKYXZhU2NyaXB0IGJ5ICJBbGV4IEtpbmciOmh0dHA6Ly93d3cuYWxleGtpbmcub3JnLy4K CiImIzg2MTc7IChKdW1wIGJhY2sgY29udGVudHMgbGlzdCkiOiNzdGFydCI7czoxNToiYWxs b3dfaHRtbF9oZWxwIjtpOjA7czozOiJtZDUiO3M6MzI6ImM5OWQxNzdjOWVmYjUwN2UxOTA3 N2VkYWFmZTAxMDk0Ijt9