# Name: upm_img_popper v1.3.7 # Type: Admin/Client side plugin # Minimal image selector. # Author: Mary Fredborg # URL: http://utterplush.com/txp-plugins/upm-img-popper # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE0OiJ1cG1faW1nX3BvcHBlciI7czo2OiJhdXRob3IiO3M6 MTM6Ik1hcnkgRnJlZGJvcmciO3M6MTA6ImF1dGhvcl91cmkiO3M6NDg6Imh0dHA6Ly91dHRl cnBsdXNoLmNvbS90eHAtcGx1Z2lucy91cG0taW1nLXBvcHBlciI7czo3OiJ2ZXJzaW9uIjtz OjU6IjEuMy43IjtzOjExOiJkZXNjcmlwdGlvbiI7czoyMzoiTWluaW1hbCBpbWFnZSBzZWxl Y3Rvci4iO3M6NDoiY29kZSI7czozNDEwMToiaWYgKHR4cGludGVyZmFjZSA9PSAnYWRtaW4n KQoJewoJCXVwbV9pbWdfcG9wcGVyX2luc3RhbGwoKTsKCgkJYWRkX3ByaXZzKCd1cG1faW1n X3BvcHBlcicsICcxLDIsMyw0LDUnKTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygndXBtX2ltZ19w b3BwZXInLCAndXBtX2ltZ19wb3BwZXInKTsKCgkJYWRkX3ByaXZzKCd1cG1faW1nX3BvcHBl cl9saW5rJywgJzEsMiwzLDQsNScpOwoJCXJlZ2lzdGVyX2NhbGxiYWNrKCd1cG1faW1nX3Bv cHBlcl9saW5rJywgJ2FydGljbGUnKTsKCgkJYWRkX3ByaXZzKCd1cG1faW1nX3BvcHBlcl9q cycsICcxLDIsMyw0LDUnKTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygndXBtX2ltZ19wb3BwZXJf anMnLCAndXBtX2ltZ19wb3BwZXJfanMnLCAnJywgMSk7CgoJCWFkZF9wcml2cygndXBtX2lt Z19wb3BwZXJfcHJlZnMnLCAnMSwyJyk7CgkJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywg J3VwbV9pbWdfcG9wcGVyX3ByZWZzJywgJ3VwbV9pbWdfcG9wcGVyJyk7CgkJcmVnaXN0ZXJf Y2FsbGJhY2soJ3VwbV9pbWdfcG9wcGVyX3ByZWZzJywgJ3VwbV9pbWdfcG9wcGVyX3ByZWZz Jyk7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltZ19wb3BwZXIoKQoJewoJCWds b2JhbCAkc3RlcDsKCgkJaWYgKCRzdGVwID09ICd1cG1faW1nX3BvcHBlcl9jaGFuZ2VfcGFn ZWJ5JykKCQl7CgkJCWV2ZW50X2NoYW5nZV9wYWdlYnkoJ2ltYWdlJyk7CgkJCSRHTE9CQUxT WydwcmVmcyddID0gZ2V0X3ByZWZzKCk7CgkJfQoKCQl1cG1faW1nX3BvcHBlcl9saXN0KCk7 Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltZ19wb3BwZXJfbGlzdCgkbWVzc2Fn ZSA9ICcnKQoJewoJCWdsb2JhbCAkcHJlZnM7CgoJCXBhZ2V0b3AodXBtX2ltZ19wb3BwZXJf Z1R4dCgnaW1hZ2Vfc2VsZWN0b3InKSwgJG1lc3NhZ2UpOwoKCQkkcGF0aF90b19zaXRlID0g JHByZWZzWydwYXRoX3RvX3NpdGUnXTsKCQkkaW1nX2RpciA9ICRwcmVmc1snaW1nX2Rpcidd OwoKCQlpZiAoIWRlZmluZWQoJ0lNUEFUSCcpKQoJCXsKCQkJZGVmaW5lKCdJTVBBVEgnLCAk cGF0aF90b19zaXRlLicvJy4kaW1nX2Rpci4nLycpOwoJCX0KCgkJZWNobyA8PDxjc3MKPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4KPCEtLQpsYWJlbCB7CmNvbG9yOiAjMDAwOwpjdXJzb3I6 IHBvaW50ZXI7Cn0KCnVsIHsKbWFyZ2luOiAwOwpwYWRkaW5nOiAwOwpsaXN0LXN0eWxlOiBu b25lOwp9CgpsaSB7Cm1hcmdpbjogMCAwIDJweCAwOwpwYWRkaW5nOiAwOwp9CgpwIHsKbWFy Z2luOiA1cHggMDsKcGFkZGluZzogMDsKfQoKLnJpZ2h0IHsKdGV4dC1hbGlnbjogcmlnaHQ7 Cn0KCi5jZW50ZXIgewptYXJnaW46IDAgYXV0bzsKdGV4dC1hbGlnbjogY2VudGVyOwp9Cgoj bm8gewptYXJnaW4tbGVmdDogMmVtOwp9CgojcmV0dXJuLCAjc3VjY2VzcywgI2ZhaWxlZCB7 CnBhZGRpbmc6IDFlbTsKdGV4dC1hbGlnbjogY2VudGVyOwpiYWNrZ3JvdW5kLWNvbG9yOiAj ZmZmOwpib3JkZXI6IDVweCBzb2xpZCAjZmMzOwp9Ci0tPgo8L3N0eWxlPgoKPHNjcmlwdCB0 eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaW5kZXgucGhwP2V2ZW50PXVwbV9pbWdfcG9w cGVyX2pzJiMzODtuYW1lPXBvcCI+PC9zY3JpcHQ+CmNzczsKCgkJZXh0cmFjdChncHNhKGFy cmF5KCdwYWdlJywgJ3NvcnQnLCAnZGlyJywgJ2NyaXQnLCAnc2VhcmNoX21ldGhvZCcpKSk7 CgoJCSRkaXIgPSAoJGRpciA9PSAnZGVzYycpID8gJ2Rlc2MnIDogJ2FzYyc7CgoJCXN3aXRj aCAoJHNvcnQpCgkJewoJCQljYXNlICdpZCc6CgkJCQkkc29ydF9zcWwgPSAiaWQgJGRpciI7 CgkJCWJyZWFrOwoKCQkJY2FzZSAnbmFtZSc6CgkJCQkkc29ydF9zcWwgPSAibmFtZSAkZGly IjsKCQkJYnJlYWs7CgoJCQljYXNlICd0aHVtYm5haWwnOgoJCQkJJHNvcnRfc3FsID0gInRo dW1ibmFpbCAkZGlyLCBpZCBhc2MiOwoJCQlicmVhazsKCgkJCWNhc2UgJ2NhdGVnb3J5JzoK CQkJCSRzb3J0X3NxbCA9ICJjYXRlZ29yeSAkZGlyLCBpZCBhc2MiOwoJCQlicmVhazsKCgkJ CWNhc2UgJ2RhdGUnOgoJCQkJJHNvcnRfc3FsID0gImRhdGUgJGRpciwgaWQgYXNjIjsKCQkJ YnJlYWs7CgoJCQljYXNlICdhdXRob3InOgoJCQkJJHNvcnRfc3FsID0gImF1dGhvciAkZGly LCBpZCBhc2MiOwoJCQlicmVhazsKCgkJCWRlZmF1bHQ6CgkJCQkkZGlyID0gJ2Rlc2MnOwoJ CQkJJHNvcnRfc3FsID0gImlkICRkaXIiOwoJCQlicmVhazsKCQl9CgoJCSRzd2l0Y2hfZGly ID0gKCRkaXIgPT0gJ2Rlc2MnKSA/ICdhc2MnIDogJ2Rlc2MnOwoKCQkkY3JpdGVyaWEgPSAx OwoKCQlpZiAoJHNlYXJjaF9tZXRob2QgYW5kICRjcml0KQoJCXsKCQkJJGNyaXRfZXNjYXBl ZCA9IGRvU2xhc2goJGNyaXQpOwoKCQkJJGNyaXRzcWwgPSBhcnJheSgKCQkJCSdpZCcJCQkg PT4gImlkID0gJyRjcml0X2VzY2FwZWQnIiwKCQkJCSduYW1lJwkJID0+ICJuYW1lIGxpa2Ug JyUkY3JpdF9lc2NhcGVkJSciLAoJCQkJJ2NhdGVnb3J5JyA9PiAiY2F0ZWdvcnkgbGlrZSAn JSRjcml0X2VzY2FwZWQlJyIsCgkJCQknYXV0aG9yJwkgPT4gImF1dGhvciBsaWtlICclJGNy aXRfZXNjYXBlZCUnIiwKCQkJCSdhbHQnCQkJID0+ICJhbHQgbGlrZSAnJSRjcml0X2VzY2Fw ZWQlJyIsCgkJCQknY2FwdGlvbicJID0+ICJjYXB0aW9uIGxpa2UgJyUkY3JpdF9lc2NhcGVk JSciCgkJCSk7CgoJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkc2VhcmNoX21ldGhvZCwgJGNy aXRzcWwpKQoJCQl7CgkJCQkkY3JpdGVyaWEgPSAkY3JpdHNxbFskc2VhcmNoX21ldGhvZF07 CgkJCQkkbGltaXQgPSA1MDA7CgkJCX0KCgkJCWVsc2UKCQkJewoJCQkJJHNlYXJjaF9tZXRo b2QgPSAnJzsKCQkJCSRjcml0ID0gJyc7CgkJCX0KCQl9CgoJCWVsc2UKCQl7CgkJCSRzZWFy Y2hfbWV0aG9kID0gJyc7CgkJCSRjcml0ID0gJyc7CgkJfQoKCQkkdG90YWwgPSBzYWZlX2Nv dW50KCd0eHBfaW1hZ2UnLCAiJGNyaXRlcmlhIik7CgoJCWlmICgkdG90YWwgPCAxKQoJCXsK CQkJaWYgKCRjcml0ZXJpYSAhPSAxKQoJCQl7CgkJCQllY2hvIG4udXBtX2ltZ19wb3BwZXJf c2VhcmNoX2Zvcm0oJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAkc29ydCwgJGRpcikuCgkJCQkJ bi5ncmFmKGdUeHQoJ25vX3Jlc3VsdHNfZm91bmQnKSwgJyBzdHlsZT0idGV4dC1hbGlnbjog Y2VudGVyOyInKTsKCQkJfQoKCQkJZWxzZQoJCQl7CgkJCQllY2hvIG4uZ3JhZihnVHh0KCdu b19pbWFnZXNfcmVjb3JkZWQnKSwgJyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyInKTsK CQkJfQoKCQkJcmV0dXJuOwoJCX0KCgkJZWNobyB1cG1faW1nX3BvcHBlcl9vcHRpb25zX2Zv cm0oKTsKCgkJJGxpbWl0ID0gbWF4KCRwcmVmc1snaW1hZ2VfbGlzdF9wYWdlYnknXSwgMTUp OwoKCQlsaXN0KCRwYWdlLCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0gcGFnZXIoJHRvdGFsLCAk bGltaXQsICRwYWdlKTsKCgkJZWNobyB1cG1faW1nX3BvcHBlcl9zZWFyY2hfZm9ybSgkY3Jp dCwgJHNlYXJjaF9tZXRob2QsICRzb3J0LCAkZGlyKTsKCgkJJHJzID0gc2FmZV9yb3dzX3N0 YXJ0KCcqLCB1bml4X3RpbWVzdGFtcChkYXRlKSBhcyB1RGF0ZScsICd0eHBfaW1hZ2UnLAoJ CQkiJGNyaXRlcmlhIG9yZGVyIGJ5ICRzb3J0X3NxbCBsaW1pdCAkb2Zmc2V0LCAkbGltaXQK CQkiKTsKCgkJaWYgKCRycykKCQl7CgkJCSRzb3J0X2xpbmsgPSAndXBtX2ltZ19wb3BwZXIn LmEuJ2JtPXRydWUnOwoKCQkJZWNobyBuLm4uc3RhcnRUYWJsZSgnbGlzdCcpLgoJCQkJbi50 cigKCQkJCQljb2x1bW5faGVhZCgnSUQnLCAnaWQnLCAkc29ydF9saW5rLCB0cnVlLCAkc3dp dGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4KCQkJCQloQ2VsbCgpLgoJCQkJCWNv bHVtbl9oZWFkKCdkYXRlJywgJ2RhdGUnLCAkc29ydF9saW5rLCB0cnVlLCAkc3dpdGNoX2Rp ciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4KCQkJCQljb2x1bW5faGVhZCgnbmFtZScsICdu YW1lJywgJHNvcnRfbGluaywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21l dGhvZCkuCgkJCQkJY29sdW1uX2hlYWQoJ3RodW1ibmFpbCcsICd0aHVtYm5haWwnLCAkc29y dF9saW5rLCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4KCQkJ CQloQ2VsbChnVHh0KCdwcmV2aWV3JykpLgoJCQkJCWNvbHVtbl9oZWFkKCdpbWFnZV9jYXRl Z29yeScsICdjYXRlZ29yeScsICRzb3J0X2xpbmssIHRydWUsICRzd2l0Y2hfZGlyLCAkY3Jp dCwgJHNlYXJjaF9tZXRob2QpLgoJCQkJCWNvbHVtbl9oZWFkKCdhdXRob3InLCAnYXV0aG9y JywgJHNvcnRfbGluaywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21ldGhv ZCkuCgkJCQkJaENlbGwodXBtX2ltZ19wb3BwZXJfZ1R4dCgnaW5zZXJ0JykpLgoJCQkJCSgg ZnVuY3Rpb25fZXhpc3RzKCd1cG1faW1hZ2UnKSA/IGhDZWxsKHVwbV9pbWdfcG9wcGVyX2dU eHQoJ2luc2VydF9wbHVnaW4nKSkgOiAnJyApLgoJCQkJCWhDZWxsKCkKCQkJCSk7CgoJCQl3 aGlsZSAoJGEgPSBuZXh0Um93KCRycykpCgkJCXsKCQkJCWV4dHJhY3QoJGEpOwoKCQkJCSRl ZGl0X3VybCA9ICc/ZXZlbnQ9aW1hZ2UnLmEuJ3N0ZXA9aW1hZ2VfZWRpdCcuYS4naWQ9Jy4k aWQuYS4nc29ydD0nLiRzb3J0LgoJCQkJCWEuJ2Rpcj0nLiRkaXIuYS4ncGFnZT0nLiRwYWdl LmEuJ3NlYXJjaF9tZXRob2Q9Jy4kc2VhcmNoX21ldGhvZC5hLidjcml0PScuJGNyaXQ7CgoJ CQkJJG5hbWUgPSBlbXB0eSgkbmFtZSkgPyBnVHh0KCd1bm5hbWVkJykgOiAkbmFtZTsKCgkJ CQkkdGh1bWJuYWlsID0gKCR0aHVtYm5haWwpID8KCQkJCQknPGltZyBzcmM9IicuaHUuJGlt Z19kaXIuJy8nLiRpZC4ndCcuJGV4dC4nIiAvPicgOgoJCQkJCWdUeHQoJ25vJyk7CgoJCQkJ Ly8gZ29kIEkgaGF0ZSBqYXZhc2NyaXB0IGluIHBocAoKCQkJCSRpbnNlcnQgPSBuLic8dWw+ Jy5uLgoJCQkJCW4udC4nPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9Imluc2VydFRhZyhcJ2Fw cGVuZC1hcnRpY2xlLWltYWdlXCcsICcuY2hyKDM5KS4kaWQuY2hyKDM5KS4nKTsgcmV0dXJu IGZhbHNlOyI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdhcnRpY2xlX2ltYWdlX2FwcGVuZCcp Lic8L2E+PC9saT4nLgoJCQkJCW4udC4nPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9Imluc2Vy dFRhZyhcJ3JlcGxhY2UtYXJ0aWNsZS1pbWFnZVwnLCAnLmNocigzOSkuJGlkLmNocigzOSku Jyk7IHJldHVybiBmYWxzZTsiPicudXBtX2ltZ19wb3BwZXJfZ1R4dCgnYXJ0aWNsZV9pbWFn ZV9yZXBsYWNlJykuJzwvYT48L2xpPicuCgkJCQkJbi50Lic8bGk+PGEgaHJlZj0iIyIgb25j bGljaz0iaW5zZXJ0VGFnKFwnaW1hZ2VcJywgJy5jaHIoMzkpLiRpZC5jaHIoMzkpLicpOyBy ZXR1cm4gZmFsc2U7Ij4nLnVwbV9pbWdfcG9wcGVyX2dUeHQoJ2ltYWdlJykuJzwvYT48L2xp Pic7CgoJCQkJJHBsdWdpbiA9IG4uJzx1bD4nLm4uCgkJCQkJbi50Lic8bGk+PGEgaHJlZj0i IyIgb25jbGljaz0iaW5zZXJ0VGFnKFwncGx1Z2luLWltYWdlXCcsICcuY2hyKDM5KS4kaWQu Y2hyKDM5KS4nKTsgcmV0dXJuIGZhbHNlOyI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdpbWFn ZScpLic8L2E+PC9saT4nOwoKCQkJCWlmICgkdGh1bWJuYWlsKQoJCQkJewoJCQkJCSRpbnNl cnQgLj0gbi50Lic8bGk+PGEgaHJlZj0iIyIgb25jbGljaz0iaW5zZXJ0VGFnKFwndGh1bWJc JywgJy5jaHIoMzkpLiRpZC5jaHIoMzkpLicpOyByZXR1cm4gZmFsc2U7Ij4nLmdUeHQoJ3Ro dW1ibmFpbCcpLic8L2E+PC9saT4nLgoJCQkJCQluLnQuJzxsaT48YSBocmVmPSIjIiBvbmNs aWNrPSJpbnNlcnRUYWcoXCdwb3B1cFwnLCAnLmNocigzOSkuJGlkLmNocigzOSkuJyk7IHJl dHVybiBmYWxzZTsiPicudXBtX2ltZ19wb3BwZXJfZ1R4dCgncG9wdXAnKS4nPC9hPjwvbGk+ JzsKCgkJCQkJJHBsdWdpbiAuPSBuLnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpbnNl cnRUYWcoXCdwbHVnaW4tdGh1bWJcJywgJy5jaHIoMzkpLiRpZC5jaHIoMzkpLicpOyByZXR1 cm4gZmFsc2U7Ij4nLmdUeHQoJ3RodW1ibmFpbCcpLic8L2E+PC9saT4nLgoJCQkJCQluLnQu JzxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpbnNlcnRUYWcoXCdwbHVnaW4tcG9wdXBcJywg Jy5jaHIoMzkpLiRpZC5jaHIoMzkpLicpOyByZXR1cm4gZmFsc2U7Ij4nLnVwbV9pbWdfcG9w cGVyX2dUeHQoJ3BvcHVwJykuJzwvYT48L2xpPic7CgkJCQl9CgoJCQkJJGluc2VydCAuPSBu LnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpbnNlcnRUYWcoXCd0ZXh0aWxlXCcsICcu Y2hyKDM5KS4kaWQuY2hyKDM5KS4nLCAnLmNocigzOSkuJGV4dC5jaHIoMzkpLicsIFwnXCcs IFwnXCcsICcuY2hyKDM5KS5odG1sc3BlY2lhbGNoYXJzKCRhbHQpLmNocigzOSkuJyk7IHJl dHVybiBmYWxzZTsiPlRleHRpbGU8L2E+PC9saT4nLgoJCQkJCW4udC4nPGxpPjxhIGhyZWY9 IiMiIG9uY2xpY2s9Imluc2VydFRhZyhcJ3hodG1sXCcsICcuY2hyKDM5KS4kaWQuY2hyKDM5 KS4nLCAnLmNocigzOSkuJGV4dC5jaHIoMzkpLicsICcuY2hyKDM5KS4kdy5jaHIoMzkpLics ICcuY2hyKDM5KS4kaC5jaHIoMzkpLicsICcuY2hyKDM5KS5odG1sc3BlY2lhbGNoYXJzKCRh bHQpLmNocigzOSkuJywgJy5jaHIoMzkpLmh0bWxzcGVjaWFsY2hhcnMoJGNhcHRpb24pLmNo cigzOSkuJyk7IHJldHVybiBmYWxzZTsiPlhIVE1MPC9hPjwvbGk+Jy4KCQkJCQluLic8L3Vs Pic7CgoJCQkJJHBsdWdpbiAuPSBuLnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJpbnNl cnRUYWcoXCdwbHVnaW4tY3VzdG9tXCcsICcuY2hyKDM5KS4kaWQuY2hyKDM5KS4nKTsgcmV0 dXJuIGZhbHNlOyI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdjdXN0b21fZm9ybScpLic8L2E+ PC9saT4nLgoJCQkJCW4uJzwvdWw+JzsKCgkJCQkkcHJldmlldyA9IG4uJzx1bD4nLgoJCQkJ CW4udC4nPGxpPjxhIGhyZWY9IiMiIG9uY2xpY2s9Im1ha2VXaW4oJy5jaHIoMzkpLicmIzgy MjA7Jy4kbmFtZS4nJiM4MjIxOycuY2hyKDM5KS4nLCAnLmNocigzOSkuJyYjNjA7aW1nIHNy Yz0mIzM0OycuaHUuJGltZ19kaXIuJy8nLiRpZC4kZXh0LicmIzM0OyAvJiM2MjsnLmNocigz OSkuJywgJy4kdy4nLCAnLiRoLicpOyByZXR1cm4gZmFsc2U7Ij4nLnVwbV9pbWdfcG9wcGVy X2dUeHQoJ2ltYWdlJykuJzwvYT48L2xpPic7CgoJCQkJaWYgKCFlbXB0eSgkYWx0KSkKCQkJ CXsKCQkJCQkkcHJldmlldyAuPSBuLnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJtYWtl V2luKCcuY2hyKDM5KS51cG1faW1nX3BvcHBlcl9nVHh0KCdhbHRfdGV4dF9mb3InKS4nICYj ODIyMDsnLiRuYW1lLicmIzgyMjE7Jy5jaHIoMzkpLicsICcuY2hyKDM5KS5odG1sc3BlY2lh bGNoYXJzKCRhbHQpLmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsiPicuZ1R4dCgnYWx0X3Rl eHQnKS4nPC9hPjwvbGk+JzsKCQkJCX0KCgkJCQlpZiAoIWVtcHR5KCRjYXB0aW9uKSkKCQkJ CXsKCQkJCQkkcHJldmlldyAuPSBuLnQuJzxsaT48YSBocmVmPSIjIiBvbmNsaWNrPSJtYWtl V2luKCcuY2hyKDM5KS51cG1faW1nX3BvcHBlcl9nVHh0KCdjYXB0aW9uX2ZvcicpLicgJiM4 MjIwOycuJG5hbWUuJyYjODIyMTsnLmNocigzOSkuJywgJy5jaHIoMzkpLmh0bWxzcGVjaWFs Y2hhcnMoJGNhcHRpb24pLmNocigzOSkuJyk7IHJldHVybiBmYWxzZTsiPicuZ1R4dCgnY2Fw dGlvbicpLic8L2E+PC9saT4nOwoJCQkJfQoKCQkJCSRwcmV2aWV3IC49IG4uJzwvdWw+JzsK CgkJCQkkY2F0ZWdvcnkgPSAoJGNhdGVnb3J5KSA/ICc8c3BhbiB0aXRsZT0iJy5mZXRjaF9j YXRlZ29yeV90aXRsZSgkY2F0ZWdvcnksICdpbWFnZScpLiciPicuJGNhdGVnb3J5Lic8L3Nw YW4+JyA6ICcnOwoKCgkJCQllY2hvIG4ubi50cigKCgkJCQkJbi50ZCgkaWQsIDIwKS4KCgkJ CQkJdGQoJzxhIGhyZWY9IicuJGVkaXRfdXJsLiciIG9uY2xpY2s9Indhcm5FZGl0SW1hZ2Uo Jy4kaWQuJyk7IHJldHVybiBmYWxzZTsiPicuZ1R4dCgnZWRpdCcpLic8L2E+JwoJCQkJCSwg MzUpLgoKCQkJCQl0ZCgKCQkJCQkJc2FmZV9zdHJmdGltZSgnJWQgJWIgJVkgJUk6JU0gJXAn LCAkdURhdGUpCgkJCQkJLCA3NSkuCgoJCQkJCXRkKCc8YSBocmVmPSInLiRlZGl0X3VybC4n IiBvbmNsaWNrPSJ3YXJuRWRpdEltYWdlKCcuJGlkLicpOyByZXR1cm4gZmFsc2U7Ij4nLiRu YW1lLic8L2E+JwoJCQkJCSwgNzUpLgoKCQkJCQl0ZCgkdGh1bWJuYWlsLCA3NSkuCgoJCQkJ CXRkKCRwcmV2aWV3KS4KCgkJCQkJdGQoJGNhdGVnb3J5LCA3NSkuCgoJCQkJCXRkKAoJCQkJ CQknPHNwYW4gdGl0bGU9IicuZ2V0X2F1dGhvcl9uYW1lKCRhdXRob3IpLiciPicuJGF1dGhv ci4nPC9zcGFuPicKCQkJCQksIDc1KS4KCgkJCQkJdGQoJGluc2VydCwgMTUwKS4KCQkJCQko IGZ1bmN0aW9uX2V4aXN0cygndXBtX2ltYWdlJykgPyBuLnRkKCRwbHVnaW4pIDogJycgKS4K CgkJCQkJdGQoCgkJCQkJCWRMaW5rKCdpbWFnZScsICdpbWFnZV9kZWxldGUnLCAnaWQnLCAk aWQpCgkJCQkJLCAxMCkKCQkJCSk7CgkJCX0KCgkJCWVjaG8gZW5kVGFibGUoKS4KCgkJCQlu YXZfZm9ybSgndXBtX2ltZ19wb3BwZXInLmEuJ2JtPTEnLCAkcGFnZSwgJG51bVBhZ2VzLCAk c29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4KCgkJCQl1cG1faW1nX3BvcHBl cl9wYWdlYnlfZm9ybSgpLgoKCQkJCW4udGFnKAoJCQkJCW4uZ3JhZih1cG1faW1nX3BvcHBl cl9nVHh0KCdyZXR1cm4nKSkuCgkJCQkJbi5ncmFmKCc8YSBpZD0ieWVzIiBocmVmPSIjIiBv bmNsaWNrPSJnb0JhY2sodGhpcy5ocmVmKTsgcmV0dXJuIGZhbHNlOyI+Jy5nVHh0KCd5ZXMn KS4nPC9hPi4nLgoJCQkJCQknIDxhIGlkPSJubyIgaHJlZj0iIyIgb25jbGljaz0iZG9uZShc J3JldHVyblwnKTsgcmV0dXJuIGZhbHNlOyI+Jy5nVHh0KCdubycpLic8L2E+LicpCgkJCQks ICdkaXYnLAknIGlkPSJyZXR1cm4iIHN0eWxlPSJkaXNwbGF5OiBub25lOyB3aWR0aDogMjAw cHg7IGhlaWdodDogNzVweDsiJykuCgoJCQkJbi5ncmFmKHVwbV9pbWdfcG9wcGVyX2dUeHQo J3N1Y2Nlc3MnKSwgJyBpZD0ic3VjY2VzcyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHdpZHRo OiAxNTBweDsgaGVpZ2h0OiAzNXB4OyInKS4KCQkJCW4uZ3JhZih1cG1faW1nX3BvcHBlcl9n VHh0KCdmYWlsZWQnKSwgJyBpZD0iZmFpbGVkIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgd2lk dGg6IDE1MHB4OyBoZWlnaHQ6IDM1cHg7IicpOwoJCX0KCX0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5j dGlvbiB1cG1faW1nX3BvcHBlcl9vcHRpb25zX2Zvcm0oKQoJewoJCWdsb2JhbCAkcHJlZnM7 CgoJCWVjaG8gbi4nPGZvcm0gYWN0aW9uPSIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxNXB4 OycuKCAhJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X2Zvcm0nXSA/ICcgZGlzcGxheTog bm9uZTsnIDogJycpLiciPicuCgkJCWdyYWYoCgkJCQluLic8aW5wdXQgdHlwZT0iY2hlY2ti b3giIGlkPSJpbmNfd2lkdGgiJy4oKCRwcmVmc1sndXBtX2ltZ19wb3BwZXJfc2hvd193aWR0 aCddID09ICcxJykgPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+IDxsYWJlbCBm b3I9ImluY193aWR0aCI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdpbmNsdWRlX3dpZHRoJyku JzwvbGFiZWw+ICcuCgkJCQluLic8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJpbmNfaGVp Z2h0IicuKCgkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3Nob3dfaGVpZ2h0J10gPT0gJzEnKSA/ ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4gPGxhYmVsIGZvcj0iaW5jX2hlaWdo dCI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdpbmNsdWRlX2hlaWdodCcpLic8L2xhYmVsPiAn LgoJCQkJbi4nPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iaW5jX2FsdCInLigoJHByZWZz Wyd1cG1faW1nX3BvcHBlcl9zaG93X2FsdCddID09ICcxJykgPyAnIGNoZWNrZWQ9ImNoZWNr ZWQiJyA6ICcnKS4nIC8+IDxsYWJlbCBmb3I9ImluY19hbHQiPicudXBtX2ltZ19wb3BwZXJf Z1R4dCgnaW5jbHVkZV9hbHQnKS4nPC9sYWJlbD4gJy4KCQkJCW4uJzxpbnB1dCB0eXBlPSJj aGVja2JveCIgaWQ9ImluY190aXRsZSInLigoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93 X3RpdGxlJ10gPT0gJzEnKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4gPGxh YmVsIGZvcj0iaW5jX3RpdGxlIj4nLnVwbV9pbWdfcG9wcGVyX2dUeHQoJ2luY2x1ZGVfY2Fw dGlvbicpLic8L2xhYmVsPicuYnIuCgkJCQluLic8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlk PSJpbmNfY2xhc3MiJy4oKCRwcmVmc1sndXBtX2ltZ19wb3BwZXJfc2hvd19jbGFzcyddID09 ICcxJykgPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+IDxsYWJlbCBmb3I9Imlu Y19jbGFzcyI+Jy51cG1faW1nX3BvcHBlcl9nVHh0KCdhc3NpZ25fY2xhc3MnKS4nPC9sYWJl bD4gJy4KCQkJCW4uJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idGhlX2NsYXNzIiB2YWx1ZT0i Jy4kcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3RoZV9jbGFzcyddLiciIGNsYXNzPSJlZGl0IiAv PicKCQkJLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IicpLgoKCQkJbi5ncmFmKAoJ CQkJJzxsYWJlbCBmb3I9ImN1c3RvbV9mb3JtIj4nLnVwbV9pbWdfcG9wcGVyX2dUeHQoJ2N1 c3RvbV9mb3JtJykuJzwvbGFiZWw+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iY3VzdG9tX2Zv cm0iIHZhbHVlPSInLiRwcmVmc1sndXBtX2ltZ19wb3BwZXJfY3VzdG9tX2Zvcm0nXS4nIiBj bGFzcz0iZWRpdCIgLz4gKCcudXBtX2ltZ19wb3BwZXJfZ1R4dCgnb3ZlcnJpZGUnKS4nKScK CQkJLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IicpLgoKCQluLic8L2Zvcm0+JzsK CX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX3BvcHBlcl9zZWFyY2hfZm9ybSgk Y3JpdCwgJG1ldGhvZCwgJHNvcnQsICRkaXIpCgl7CgkJJGRlZmF1bHRfbWV0aG9kID0gJ25h bWUnOwoKCQkkbWV0aG9kID0gKCRtZXRob2QpID8gJG1ldGhvZCA6ICRkZWZhdWx0X21ldGhv ZDsKCgkJJG1ldGhvZHMgPQlhcnJheSgKCQkJJ2lkJwkJCSA9PiBnVHh0KCdJRCcpLAoJCQkn bmFtZScJCSA9PiBnVHh0KCduYW1lJyksCgkJCSdjYXRlZ29yeScgPT4gZ1R4dCgnaW1hZ2Vf Y2F0ZWdvcnknKSwKCQkJJ2F1dGhvcicJID0+IGdUeHQoJ2F1dGhvcicpLAoJCQknYWx0JwkJ CSA9PiBnVHh0KCdhbHRfdGV4dCcpLAoJCQknY2FwdGlvbicJID0+IGdUeHQoJ2NhcHRpb24n KQoJCSk7CgoJCXJldHVybiBuLm4uJzxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249ImluZGV4 LnBocCIgc3R5bGU9Im1hcmdpbjogYXV0bzsgdGV4dC1hbGlnbjogY2VudGVyOyI+Jy4KCQkJ bi5ncmFmKAoJCQkJJzxsYWJlbCBmb3I9InVwbS1pbWctcG9wcGVyLXNlYXJjaCI+Jy5nVHh0 KCdzZWFyY2gnKS4nPC9sYWJlbD4nLnNwLgoJCQkJc2VsZWN0SW5wdXQoJ3NlYXJjaF9tZXRo b2QnLCAkbWV0aG9kcywgJG1ldGhvZCwgJycsICcnLCAndXBtLWltZy1wb3BwZXItc2VhcmNo Jykuc3AuCgkJCQlmSW5wdXQoJ3RleHQnLCAnY3JpdCcsICRjcml0LCAnZWRpdCcsICcnLCAn JywgJzE1JykuCgkJCQllSW5wdXQoJ3VwbV9pbWdfcG9wcGVyJykuCgkJCQloSW5wdXQoJ2Jt JywnMScpLgoJCQkJZklucHV0KCdzdWJtaXQnLCAnc2VhcmNoJywgZ1R4dCgnZ28nKSwgJ3Nt YWxsZXJib3gnKQoJCQkpLgoKCQkJKCRjcml0ID8gbi5ncmFmKCc8YSBocmVmPSI/ZXZlbnQ9 dXBtX2ltZ19wb3BwZXInLmEuJ2JtPXRydWUiPicudXBtX2ltZ19wb3BwZXJfZ1R4dCgndmll d19hbGwnKS4nPC9hPicpIDogJycpLgoKCQluLic8L2Zvcm0+JzsKCX0KCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K CglmdW5jdGlvbiB1cG1faW1nX3BvcHBlcl9saW5rKCkKCXsKCQkkdmlldyA9IGdwcygndmll dycpOwoKCQlpZiAoJHZpZXcgPT0gJ3RleHQnIG9yIGVtcHR5KCR2aWV3KSkKCQl7CgkJCWVj aG8gPDw8Zm9ybQoKPGZvcm0gYWN0aW9uPSIiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0i dXBtX2ltZ19wb3BwZXJfc3RhcnQiIHZhbHVlPSIiPgo8L2Zvcm0+Cgo8c2NyaXB0IHR5cGU9 InRleHQvamF2YXNjcmlwdCIgc3JjPSJpbmRleC5waHA/ZXZlbnQ9dXBtX2ltZ19wb3BwZXJf anMmIzM4O25hbWU9bGluayI+PC9zY3JpcHQ+Cgpmb3JtOwoKCQl9Cgl9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CgoJZnVuY3Rpb24gdXBtX2ltZ19wb3BwZXJfcGFnZWJ5X2Zvcm0oKQoJewoJCWdsb2JhbCAk cHJlZnM7CgoJCSR2YWxzID0gYXJyYXkoCgkJCTE1CT0+IDE1LAoJCQkyNQk9PiAyNSwKCQkJ NTAJPT4gNTAsCgkJCTEwMCA9PiAxMDAKCQkpOwoKCQkkc2VsZWN0X3BhZ2UgPSBzZWxlY3RJ bnB1dCgncXR5JywgJHZhbHMsICRwcmVmc1snaW1hZ2VfbGlzdF9wYWdlYnknXSwgJycsIDEp OwoKCQkvLyBwcm9wZXIgbG9jYWxpc2F0aW9uCgkJJHBhZ2UgPSBzdHJfcmVwbGFjZSgne3Bh Z2V9JywgJHNlbGVjdF9wYWdlLCBnVHh0KCd2aWV3X3Blcl9wYWdlJykpOwoKCQlyZXR1cm4g Zm9ybSgKCQkJJzxkaXYgc3R5bGU9Im1hcmdpbjogYXV0bzsgdGV4dC1hbGlnbjogY2VudGVy OyI+Jy4KCQkJCSRwYWdlLgoJCQkJZUlucHV0KCd1cG1faW1nX3BvcHBlcicpLgoJCQkJc0lu cHV0KCd1cG1faW1nX3BvcHBlcl9jaGFuZ2VfcGFnZWJ5JykuCgkJCQloSW5wdXQoJ2JtJywg JzEnKS4KCQkJCSc8bm9zY3JpcHQ+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSInLmdU eHQoJ2dvJykuJyIgY2xhc3M9InNtYWxsZXJib3giIC8+PC9ub3NjcmlwdD4nLgoJCQknPC9k aXY+JwoJCSk7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltZ19wb3BwZXJfanMo KQoJewoJCXdoaWxlIChAb2JfZW5kX2NsZWFuKCkpOwoKCQlpZiAoZ3BzKCduYW1lJykgPT0g J2xpbmsnKQoJCXsKCQkJZ2xvYmFsICRwcmVmczsKCgkJCSR0eHQgPSBnVHh0KCdhZHZhbmNl ZF9vcHRpb25zJyk7CgkJCSRsYW5nX2luc2VydF9pbWFnZSA9IHVwbV9pbWdfcG9wcGVyX2dU eHQoJ2luc2VydF9pbWFnZScpOwoKCQkJaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvamF2 YXNjcmlwdCIpOwoKCQkJZWNobyA8PDxqcwoKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1 cG1faW1nX3BvcHBlcl9zdGFydCcpLnZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo J2JvZHknKS52YWx1ZTsKCgl2YXIgY3VycmVudCA9ICdib2R5JzsKCglpZiAoZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ2V4Y2VycHQnKSkKCXsKCQkvLyBJRSBpcyByZXRhcmRlZAoJCWRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdib2R5Jykub25jbGljayA9IGZ1bmN0aW9uICgpIHsK CQkJY3VycmVudCA9ICdib2R5JzsKCQl9OwoKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn ZXhjZXJwdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CgkJCWN1cnJlbnQgPSAnZXhjZXJw dCc7CgkJfTsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgl2YXIgdHh0ID0gJyR0eHQnOwoKCXZhciBhID0g KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUykgPwoJCWRvY3VtZW50LmNyZWF0ZUVsZW1lbnRO UygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdhJykgOgoJCWRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2EnKTsKCglhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO b2RlKCckbGFuZ19pbnNlcnRfaW1hZ2UnKSk7CgoJdmFyIHcgPSB7JHByZWZzWyd1cG1faW1n X3BvcHBlcl9hZG1pbl9wb3B1cF93aWR0aCddfTsKCXZhciBoID0geyRwcmVmc1sndXBtX2lt Z19wb3BwZXJfYWRtaW5fcG9wdXBfaGVpZ2h0J119OwoKCXZhciB0ID0gKHNjcmVlbi5oZWln aHQpID8gKHNjcmVlbi5oZWlnaHQgLSBoKSAvIDIgOiAwOwoJdmFyIGwgPSAoc2NyZWVuLndp ZHRoKSA/IChzY3JlZW4ud2lkdGggLSB3KSAvIDIgOiAwOwoKCWEub25jbGljayA9IGZ1bmN0 aW9uICgpIHsKCQl2YXIgdXBtX2ltZ19wb3BwZXIgPSB3aW5kb3cub3Blbih0aGlzLmhyZWYs ICd1cG1faW1nX3BvcHBlcicsICd0b3AgPSAnK3QrJywgbGVmdCA9ICcrbCsnLCB3aWR0aCA9 ICcrdysnLCBoZWlnaHQgPSAnK2grJywgdG9vbGJhciA9IG5vLCBsb2NhdGlvbiA9IG5vLCBk aXJlY3RvcmllcyA9IG5vLCBzdGF0dXMgPSB5ZXMsIG1lbnViYXIgPSBubywgc2Nyb2xsYmFy cyA9IHllcywgY29weWhpc3RvcnkgPSBubywgcmVzaXphYmxlID0geWVzJyk7CgkJCXVwbV9p bWdfcG9wcGVyLmZvY3VzKCk7CgkJCXJldHVybiBmYWxzZTsKCX07CgoJYS5zZXRBdHRyaWJ1 dGUoJ3RhcmdldCcsICdibGFuaycpOwoJYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnP2V2ZW50 PXVwbV9pbWdfcG9wcGVyXHUwMDI2Ym09MScpOwoKCXZhciBsaW5rID0gKGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnROUykgPwoJCWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3 dy53My5vcmcvMTk5OS94aHRtbCcsICdoMycpIDoKCQlkb2N1bWVudC5jcmVhdGVFbGVtZW50 KCdoMycpOwoKCWxpbmsuc2V0QXR0cmlidXRlKCdjbGFzc05hbWUnLCAncGxhaW4nKTsgLy8g c3R1cGlkIElFCglsaW5rLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncGxhaW4nKTsKCWxpbmsu YXBwZW5kQ2hpbGQoYSk7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJdmFyIGgzcyA9IGRvY3VtZW50LmdldEVs ZW1lbnRzQnlUYWdOYW1lKCdoMycpOwoKCWZvciAodmFyIGkgPSAwOyBpIDwgaDNzLmxlbmd0 aDsgaSsrKQoJewoJCXZhciBoMyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdo MycpW2ldOwoKCQlpZiAoaDMuZmlyc3RDaGlsZC5maXJzdENoaWxkKQoJCXsKCQkJaWYgKGgz LmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPT0gdHh0KQoJCQl7CgkJCQloMy5w YXJlbnROb2RlLmluc2VydEJlZm9yZShsaW5rLCBoMyk7CgkJCX0KCQl9Cgl9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi8vIHRoYW5rcyBBbGV4ISA8aHR0cDovL3d3dy5hbGV4a2luZy5vcmcvPgoKCWZ1bmN0 aW9uIHVwbV9pbWdfcG9wcGVyX2luc2VydChteUZpZWxkLCBteVZhbHVlKQoJewoJCS8vIElF IHN1cHBvcnQKCQlpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKQoJCXsKCQkJbXlGaWVsZC5mb2N1 cygpOwoJCQlzZWwgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKCQkJc2Vs LnRleHQgPSBteVZhbHVlOwoJCQlteUZpZWxkLmZvY3VzKCk7CgkJfQoKCQkvLyBNb3ppbGxh L05ldHNjYXBlIHN1cHBvcnQKCQllbHNlIGlmIChteUZpZWxkLnNlbGVjdGlvblN0YXJ0IHx8 IG15RmllbGQuc2VsZWN0aW9uU3RhcnQgPT0gJzAnKQoJCXsKCQkJc3RhcnRQb3MgPSBteUZp ZWxkLnNlbGVjdGlvblN0YXJ0OwoJCQllbmRQb3MgPSBteUZpZWxkLnNlbGVjdGlvbkVuZDsK CgkJCW15RmllbGQudmFsdWUgPSBteUZpZWxkLnZhbHVlLnN1YnN0cmluZygwLCBzdGFydFBv cykgKyBteVZhbHVlICsgbXlGaWVsZC52YWx1ZS5zdWJzdHJpbmcoZW5kUG9zLCBteUZpZWxk LnZhbHVlLmxlbmd0aCk7CgoJCQlteUZpZWxkLmZvY3VzKCk7CgkJCW15RmllbGQuc2VsZWN0 aW9uU3RhcnQgPSBzdGFydFBvcyArIG15VmFsdWUubGVuZ3RoOwoJCQlteUZpZWxkLnNlbGVj dGlvbkVuZCA9IHN0YXJ0UG9zICsgbXlWYWx1ZS5sZW5ndGg7CgkJfQoKCQllbHNlCgkJewoJ CQlteUZpZWxkLnZhbHVlICs9IG15VmFsdWU7CgkJCW15RmllbGQuZm9jdXMoKTsKCQl9Cgl9 CmpzOwoJCX0KCgkJZWxzZWlmIChncHMoJ25hbWUnKSA9PSAncG9wJykKCQl7CgkJCWdsb2Jh bCAkaW1nX2RpcjsKCgkJCSRpbWdfdXJsID0gaHUuJGltZ19kaXI7CgoJCQkkbGFuZ19jb25m aXJtX292ZXJ3cml0ZSA9IHVwbV9pbWdfcG9wcGVyX2dUeHQoJ2NvbmZpcm1fb3ZlcndyaXRl Jyk7CgkJCSRsYW5nX2NoZWNrX2xlYXZlID0gdXBtX2ltZ19wb3BwZXJfZ1R4dCgnY2hlY2tf bGVhdmUnKTsKCgkJCWhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L2phdmFzY3JpcHQiKTsK CgkJCWVjaG8gPDw8anMKCWZ1bmN0aW9uIG1ha2VXaW4odGl0bGUsIGNvbnRlbnQsIHcsIGgp Cgl7CgkJaWYgKHcgJiYgaCkKCQl7CgkJCXZhciB3dyA9IHBhcnNlSW50KHcpOwoJCQl2YXIg d2ggPSBwYXJzZUludChoKTsKCgkJCWlmICh3dyA8IDEwMCkKCQkJewoJCQkJd3cgPSAxMjU7 CgkJCX0KCgkJCWlmICh3aCA8IDEwMCkKCQkJewoJCQkJd2ggPSAxMjU7CgoJCQkJd3cgKz0g NzU7CgkJCX0KCgkJCXZhciBzY3JvbGwgPSBmYWxzZTsKCgkJCWlmIChzY3JlZW4ud2lkdGgg JiYgKHNjcmVlbi53aWR0aCA8IHd3KSkKCQkJewoJCQkJc2Nyb2xsID0gJ3llcyc7CgkJCQl3 dyA9IHNjcmVlbi53aWR0aDsKCQkJfQoKCQkJaWYgKHNjcmVlbi5oZWlnaHQgJiYgKHNjcmVl bi5oZWlnaHQgPCB3aCkpCgkJCXsKCQkJCXNjcm9sbCA9ICd5ZXMnOwoJCQkJd2ggPSBzY3Jl ZW4uaGVpZ2h0OwoJCQl9CgkJfQoKCQllbHNlCgkJewoJCQl3dyA9IDQ1MDsKCQkJd2ggPSAy NTA7CgkJfQoKCQlpZiAoIXRpdGxlKQoJCXsKCQkJdGl0bGUgPSBuYW1lOwoJCX0KCgkJdmFy IHQgPSAoc2NyZWVuLmhlaWdodCkgPyAoc2NyZWVuLmhlaWdodCAtIHdoKSAvIDIgOiAwOwoJ CXZhciBsID0gKHNjcmVlbi53aWR0aCkgPyAoc2NyZWVuLndpZHRoIC0gd3cpIC8gMiA6IDA7 CgoJCXZhciBmYXN0V2luID0gd2luZG93Lm9wZW4oJycsICd1cG1faW1nX3BvcHBlcl9wcmV2 aWV3JywgJ3RvcCA9ICcrdCsnLCBsZWZ0ID0gJytsKycsIHdpZHRoID0gJyt3dysnLCBoZWln aHQgPSAnK3doKycsIHRvb2xiYXIgPSBubywgbG9jYXRpb24gPSBubywgZGlyZWN0b3JpZXMg PSBubywgc3RhdHVzID0gbm8sIG1lbnViYXIgPSBubywgc2Nyb2xsYmFycyA9ICcrc2Nyb2xs KycsIGNvcHloaXN0b3J5ID0gbm8sIHJlc2l6YWJsZSA9IHllcycpOwoKCQlmYXN0V2luLmRv Y3VtZW50LndyaXRlbG4oJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRN TCA0LjAxLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiPicp OwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignPGh0bWw+Jyk7CgkJZmFzdFdpbi5kb2N1 bWVudC53cml0ZWxuKCc8aGVhZD4nKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJzxt ZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFy c2V0PXV0Zi04Ij4nKTsKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJzxtZXRhIGh0dHAt ZXF1aXY9ImltYWdldG9vbGJhciIgY29udGVudD0ibm8iPicpOwoJCWZhc3RXaW4uZG9jdW1l bnQud3JpdGVsbignPHRpdGxlPicrdGl0bGUrJzwvdGl0bGU+Jyk7CgkJZmFzdFdpbi5kb2N1 bWVudC53cml0ZWxuKCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicpOwoJCWZhc3RXaW4uZG9j dW1lbnQud3JpdGVsbignPCEtLScpOwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignYm9k eSB7Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdtYXJnaW46IDA7Jyk7CgkJZmFz dFdpbi5kb2N1bWVudC53cml0ZWxuKCdwYWRkaW5nOiAwOycpOwoJCWZhc3RXaW4uZG9jdW1l bnQud3JpdGVsbignY29sb3I6ICMwMDA7Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxu KCdiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOycpOwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVs bignYm9yZGVyLXRvcDogMTVweCBzb2xpZCAjZmMzOycpOwoJCWZhc3RXaW4uZG9jdW1lbnQu d3JpdGVsbigndGV4dC1hbGlnbjogY2VudGVyOycpOwoKCQlpZiAoc2Nyb2xsID09IGZhbHNl KQoJCXsKCQkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdvdmVyZmxvdzogaGlkZGVuOycp OwoJCX0KCgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCd9Jyk7CgoJCWZhc3RXaW4uZG9j dW1lbnQud3JpdGVsbignJyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdpbWcgeycp OwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignbWFyZ2luOiAwIGF1dG87Jyk7CgkJZmFz dFdpbi5kb2N1bWVudC53cml0ZWxuKCdwYWRkaW5nOiAwOycpOwoJCWZhc3RXaW4uZG9jdW1l bnQud3JpdGVsbignYm9yZGVyOiBub25lOycpOwoKCQlpZiAod2ggPT0gMTI1KQoJCXsKCQkJ ZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCdtYXJnaW4tdG9wOiAnICsgTWF0aC5mbG9vcig1 MC0oaC8yKSkgKyAncHg7Jyk7CgkJfQoKCQlmYXN0V2luLmRvY3VtZW50LndyaXRlbG4oJ30n KTsKCgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCctLT4nKTsKCQlmYXN0V2luLmRvY3Vt ZW50LndyaXRlbG4oJzwvc3R5bGU+Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCc8 L2hlYWQ+Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCc8Ym9keT4nKTsKCQlmYXN0 V2luLmRvY3VtZW50LndyaXRlbG4oJzxkaXY+Jyk7CgkJZmFzdFdpbi5kb2N1bWVudC53cml0 ZWxuKGNvbnRlbnQpOwoJCWZhc3RXaW4uZG9jdW1lbnQud3JpdGVsbignPC9kaXY+Jyk7CgkJ ZmFzdFdpbi5kb2N1bWVudC53cml0ZWxuKCc8L2JvZHk+Jyk7CgkJZmFzdFdpbi5kb2N1bWVu dC53cml0ZSgnPC9odG1sPicpOwoKCQlmYXN0V2luLmRvY3VtZW50LmNsb3NlKCk7CgoJCWZh c3RXaW4uZm9jdXMoKTsKCgkJcmV0dXJuIGZhbHNlOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0 aW9uIGJ1aWxkVGFnKHR5cGUsIGlkLCBleHQsIHdpZHRoLCBoZWlnaHQsIGFsdCwgdGl0bGUp Cgl7CgkJdmFyIGluY19hbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5jX2FsdCcp OwoJCXZhciBpbmNfdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5jX3RpdGxl Jyk7CgoJCXZhciBpbmNfd2lkdGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5jX3dp ZHRoJyk7CgkJdmFyIGluY19oZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5j X2hlaWdodCcpOwoKCQl2YXIgaW5jX2NsYXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo J2luY19jbGFzcycpOwoJCXZhciB0aGVfY2xhc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgndGhlX2NsYXNzJykudmFsdWU7CgoJCXZhciBjdXN0b21fZm9ybSA9IGRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKCdjdXN0b21fZm9ybScpLnZhbHVlOwoKCQlpZiAodHlwZSA9PSAnaW1h Z2UnKQoJCXsKCQkJdmFyIGluc2VydCA9ICc8dHhwOmltYWdlIGlkPSInK2lkKyciJzsKCgkJ CWlmIChpbmNfY2xhc3MuY2hlY2tlZCAmJiB0aGVfY2xhc3MpCgkJCXsKCQkJCWluc2VydCAr PSAnIGNsYXNzPSInK3RoZV9jbGFzcysnIic7CgkJCX0KCQl9CgoJCWVsc2UgaWYgKHR5cGUg PT0gJ3RodW1iJykKCQl7CgkJCXZhciBpbnNlcnQgPSAnPHR4cDp0aHVtYm5haWwgaWQ9Iicr aWQrJyInOwoJCX0KCgkJZWxzZSBpZiAodHlwZSA9PSAncG9wdXAnKQoJCXsKCQkJdmFyIGlu c2VydCA9ICc8dHhwOnRodW1ibmFpbCBpZD0iJytpZCsnIiBwb3BsaW5rPSIxIic7CgkJfQoK CQllbHNlIGlmICh0eXBlID09ICd0ZXh0aWxlJykKCQl7CgkJCXZhciBpbnNlcnQgPSAnISc7 CgoJCQlpZiAoaW5jX2NsYXNzLmNoZWNrZWQgJiYgdGhlX2NsYXNzKQoJCQl7CgkJCQlpbnNl cnQgKz0gJygnK3RoZV9jbGFzcysnKSc7CgkJCX0KCgkJCWluc2VydCArPSAnJGltZ191cmwv JytpZCtleHQ7CgoJCQlpZiAoaW5jX2FsdC5jaGVja2VkICYmIGFsdCkKCQkJewoJCQkJaW5z ZXJ0ICs9ICcoJythbHQrJyknOwoJCQl9CgoJCQlpbnNlcnQgKz0gJyEnOwoKCQkJcmV0dXJu IGluc2VydDsKCQl9CgoJCWVsc2UgaWYgKHR5cGUgPT0gJ3hodG1sJykKCQl7CgkJCXZhciBp bnNlcnQgPSAnPGltZyBzcmM9IiRpbWdfdXJsLycraWQrZXh0KyciJzsKCgkJCWlmIChpbmNf Y2xhc3MuY2hlY2tlZCAmJiB0aGVfY2xhc3MpCgkJCXsKCQkJCWluc2VydCArPSAnIGNsYXNz PSInK3RoZV9jbGFzcysnIic7CgkJCX0KCgkJCWlmIChpbmNfd2lkdGguY2hlY2tlZCAmJiB3 aWR0aCkKCQkJewoJCQkJaW5zZXJ0ICs9ICcgd2lkdGg9Iicrd2lkdGgrJyInOwoJCQl9CgoJ CQlpZiAoaW5jX2hlaWdodC5jaGVja2VkICYmIGhlaWdodCkKCQkJewoJCQkJaW5zZXJ0ICs9 ICcgaGVpZ2h0PSInK2hlaWdodCsnIic7CgkJCX0KCgkJCWlmIChpbmNfYWx0LmNoZWNrZWQg JiYgYWx0KQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBhbHQ9IicrYWx0KyciJzsKCQkJfQoKCQkJ ZWxzZQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBhbHQ9IiInOwoJCQl9CgoJCQlpZiAoaW5jX3Rp dGxlLmNoZWNrZWQgJiYgdGl0bGUpCgkJCXsKCQkJCWluc2VydCArPSAnIHRpdGxlPSInK3Rp dGxlKyciJzsKCQkJfQoJCX0KCgkJZWxzZSBpZiAodHlwZSA9PSAncGx1Z2luLWN1c3RvbScp CgkJewoJCQl2YXIgaW5zZXJ0ID0gJzx0eHA6dXBtX2ltYWdlIGltYWdlX2lkPSInK2lkKyci IGZvcm09IicrY3VzdG9tX2Zvcm0rJyInOwoJCX0KCgkJZWxzZQoJCXsKCQkJdHlwZSA9IG5l dyBTdHJpbmcodHlwZSk7CgkJCXR5cGUgPSB0eXBlLnJlcGxhY2UoJ3BsdWdpbi0nLCAnJyk7 CgoJCQl2YXIgaW5zZXJ0ID0gJzx0eHA6dXBtX2ltYWdlIHR5cGU9IicrdHlwZSsnIiBpbWFn ZV9pZD0iJytpZCsnIic7CgoJCQlpZiAoaW5jX2NsYXNzLmNoZWNrZWQgJiYgdGhlX2NsYXNz KQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBjbGFzcz0iJyt0aGVfY2xhc3MrJyInOwoJCQl9CgoJ CQlpZiAoaW5jX3dpZHRoLmNoZWNrZWQgPT0gZmFsc2UpCgkJCXsKCQkJCWluc2VydCArPSAn IHNob3dfd2lkdGg9Im5vIic7CgkJCX0KCgkJCWlmIChpbmNfaGVpZ2h0LmNoZWNrZWQgPT0g ZmFsc2UpCgkJCXsKCQkJCWluc2VydCArPSAnIHNob3dfaGVpZ2h0PSJubyInOwoJCQl9CgoJ CQlpZiAoaW5jX2FsdC5jaGVja2VkID09IGZhbHNlKQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBz aG93X2FsdD0ibm8iJzsKCQkJfQoKCQkJaWYgKGluY190aXRsZS5jaGVja2VkID09IGZhbHNl KQoJCQl7CgkJCQlpbnNlcnQgKz0gJyBzaG93X3RpdGxlPSJubyInOwoJCQl9CgkJfQoKCQlp bnNlcnQgKz0gJyAvPic7CgoJCXJldHVybiBpbnNlcnQ7Cgl9CgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVu Y3Rpb24gaW5zZXJ0VGFnKHR5cGUsIGlkLCBleHQsIHdpZHRoLCBoZWlnaHQsIGFsdCwgdGl0 bGUpCgl7CgkJdmFyIGluc2VydCA9IGJ1aWxkVGFnKHR5cGUsIGlkLCBleHQsIHdpZHRoLCBo ZWlnaHQsIGFsdCwgdGl0bGUpOwoKCQlpZiAod2luZG93Lm9wZW5lci5kb2N1bWVudC5hcnRp Y2xlKQoJCXsKCQkJaWYgKHR5cGUgPT0gJ2FwcGVuZC1hcnRpY2xlLWltYWdlJykKCQkJewoJ CQkJaWYgKHdpbmRvdy5vcGVuZXIuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FydGljbGUt aW1hZ2UnKS52YWx1ZSA9PSAnJykKCQkJCXsKCQkJCQl3aW5kb3cub3BlbmVyLmRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdhcnRpY2xlLWltYWdlJykudmFsdWUgPSBpZDsKCQkJCQlyZXR1 cm4gc2hvd01zZygnc3VjY2VzcycpOwoJCQkJfQoKCQkJCWVsc2UKCQkJCXsKCQkJCQl3aW5k b3cub3BlbmVyLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcnRpY2xlLWltYWdlJykudmFs dWUgKz0gJywnK2lkOwoJCQkJCXJldHVybiBzaG93TXNnKCdzdWNjZXNzJyk7CgkJCQl9CgkJ CX0KCgkJCWVsc2UgaWYgKHR5cGUgPT0gJ3JlcGxhY2UtYXJ0aWNsZS1pbWFnZScpCgkJCXsK CQkJCWlmICh3aW5kb3cub3BlbmVyLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcnRpY2xl LWltYWdlJykudmFsdWUubGVuZ3RoID4gMSkKCQkJCXsKCQkJCQl2YXIgb3B0aW9uID0gY29u ZmlybSgnJGxhbmdfY29uZmlybV9vdmVyd3JpdGUnKTsKCgkJCQkJaWYgKG9wdGlvbikKCQkJ CQl7CgkJCQkJCXdpbmRvdy5vcGVuZXIuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FydGlj bGUtaW1hZ2UnKS52YWx1ZSA9IGlkOwoJCQkJCQlyZXR1cm4gc2hvd01zZygnc3VjY2Vzcycp OwoJCQkJCX0KCQkJCX0KCgkJCQllbHNlCgkJCQl7CgkJCQkJd2luZG93Lm9wZW5lci5kb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgnYXJ0aWNsZS1pbWFnZScpLnZhbHVlID0gaWQ7CgkJCQkJ cmV0dXJuIHNob3dNc2coJ3N1Y2Nlc3MnKTsKCQkJCX0KCQkJfQoKCQkJZWxzZQoJCQl7CgkJ CQl2YXIgdGVtcCA9ICd3aW5kb3cub3BlbmVyLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdp bmRvdy5vcGVuZXIuY3VycmVudCknOwoKCQkJCXRlbXAgPSBldmFsKHRlbXApOwoKCQkJCXdp bmRvdy5vcGVuZXIudXBtX2ltZ19wb3BwZXJfaW5zZXJ0KHRlbXAsIGluc2VydCk7CgoJCQkJ cmV0dXJuIHNob3dNc2coJ3N1Y2Nlc3MnKTsKCQkJfQoJCX0KCgkJZWxzZSBpZiAod2luZG93 Lm9wZW5lci5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKQoJCXsKCQkJd2luZG93 Lm9wZW5lci51cG1faW1nX3BvcHBlcl9pbnNlcnQod2luZG93Lm9wZW5lci5kb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgnZm9ybScpLCBpbnNlcnQpOwoJCQlyZXR1cm4gc2hvd01zZygnc3Vj Y2VzcycpOwoJCX0KCgkJZWxzZSBpZiAod2luZG93Lm9wZW5lci5kb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgnaHRtbCcpKQoJCXsKCQkJd2luZG93Lm9wZW5lci51cG1faW1nX3BvcHBlcl9p bnNlcnQod2luZG93Lm9wZW5lci5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHRtbCcpLCBp bnNlcnQpOwoJCQlyZXR1cm4gc2hvd01zZygnc3VjY2VzcycpOwoJCX0KCgkJcmV0dXJuIHNo b3dNc2coJ2ZhaWxlZCcpOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHdhcm5FZGl0SW1h Z2UoaWQpCgl7CgkJaWYgKHdpbmRvdy5vcGVuZXIuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo J2JvZHknKS52YWx1ZSAhPSB3aW5kb3cub3BlbmVyLmRvY3VtZW50LmdldEVsZW1lbnRCeUlk KCd1cG1faW1nX3BvcHBlcl9zdGFydCcpLnZhbHVlKQoJCXsKCQkJdmFyIGNoZWNrID0gY29u ZmlybSgnJGxhbmdfY2hlY2tfbGVhdmUnKTsKCgkJCWlmIChjaGVjaykKCQkJewoJCQkJZ29F ZGl0SW1hZ2UoaWQpOwoJCQl9CgkJfQoKCQllbHNlCgkJewoJCQlnb0VkaXRJbWFnZShpZCk7 CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gZ29FZGl0 SW1hZ2UoaWQpCgl7CgkJd2luZG93Lm9wZW5lci5mb2N1cygpOwoKCQlpZiAod2luZG93Lm9w ZW5lci5kb2N1bWVudC5hcnRpY2xlLnN0ZXAudmFsdWUgIT0gJ2NyZWF0ZScpCgkJewoJCQlk b2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWVzJykuc2V0QXR0cmlidXRlKCdocmVmJywgd2lu ZG93Lm9wZW5lci5kb2N1bWVudC5sb2NhdGlvbik7CgkJCXNob3dNc2coJ3JldHVybicpOwoJ CX0KCgkJd2luZG93Lm9wZW5lci5kb2N1bWVudC5sb2NhdGlvbiA9ICc/ZXZlbnQ9aW1hZ2Vc dTAwMjZzdGVwPWltYWdlX2VkaXRcdTAwMjZpZD0nK2lkOwoJfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1 bmN0aW9uIGdvQmFjayh1cmwpCgl7CgkJd2luZG93Lm9wZW5lci5mb2N1cygpOwoKCQlkb25l KCdyZXR1cm4nKTsKCgkJd2luZG93Lm9wZW5lci5kb2N1bWVudC5sb2NhdGlvbiA9IHVybDsK CX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiBzaG93TXNnKGlkKQoJewoJCXZhciBvYmogPSBk b2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CgoJCXZhciB3aWR0aCA9IHBhcnNlSW50KG9i ai5zdHlsZS53aWR0aCk7CgkJdmFyIGhlaWdodCA9IHBhcnNlSW50KG9iai5zdHlsZS5oZWln aHQpOwoKCQl2YXIgdG9wID0gMTAwICsgc2Nyb2xsVG9wKCk7CgkJdmFyIGxlZnQgPSAoIChw YWdlV2lkdGgoKSAvIDIpIC0gKHdpZHRoIC8gMikgKSArIHNjcm9sbExlZnQoKTsKCgkJb2Jq LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKCQlvYmouc3R5bGUudG9wID0gdG9wICsg J3B4JzsKCQlvYmouc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnOwoJCW9iai5zdHlsZS5kaXNw bGF5ID0gJ2Jsb2NrJzsKCgkJaWYgKGlkICE9ICdyZXR1cm4nKQoJCXsKCQkJc2V0VGltZW91 dCgiZG9uZSgnIitpZCsiJykiLCAxMDAwKTsKCQl9Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rp b24gZG9uZShpZCkKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlz cGxheSA9ICdub25lJzsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiBwYWdlV2lkdGgoKQoJ ewoJCWlmIChzZWxmLmlubmVyV2lkdGgpCgkJewoJCQlyZXR1cm4gc2VsZi5pbm5lcldpZHRo OwoJCX0KCgkJZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkKCQl7CgkJCXJldHVybiBkb2N1bWVudC5k b2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7CgkJfQoKCQlyZXR1cm4gMDsKCX0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KCglmdW5jdGlvbiBzY3JvbGxUb3AoKQoJewoJCWlmIChzZWxmLnBhZ2VZT2Zmc2V0 KQoJCXsKCQkJcmV0dXJuIHNlbGYucGFnZVlPZmZzZXQ7CgkJfQoKCQllbHNlIGlmIChkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9s bFRvcCkKCQl7CgkJCXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9w OwoJCX0KCgkJcmV0dXJuIDA7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gc2Nyb2xsTGVm dCgpCgl7CgkJaWYgKHNlbGYucGFnZVlPZmZzZXQpCgkJewoJCQlyZXR1cm4gc2VsZi5wYWdl WE9mZnNldDsKCQl9CgoJCWVsc2UgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBk b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKQoJCXsKCQkJcmV0dXJuIGRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OwoJCX0KCgkJcmV0dXJuIDA7Cgl9Cgpq czsKCQl9CgoJCWV4aXQoMCk7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltZ19w b3BwZXJfcHJlZnMoJGV2ZW50LCAkc3RlcCkKCXsKCQlnbG9iYWwgJHByZWZzOwoKCQlwYWdl dG9wKHVwbV9pbWdfcG9wcGVyX2dUeHQoJ3ByZWZzJyksICgkc3RlcCA9PSAndXBkYXRlJyA/ IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJykgOiAnJykpOwoKCQlpZiAoJHN0ZXAgPT0gJ3Vw ZGF0ZScpCgkJewoJCQlleHRyYWN0KGRvU2xhc2gocHNhcyhhcnJheSgKCQkJCSdzaG93X3dp ZHRoJywgJ3Nob3dfaGVpZ2h0JywgJ3Nob3dfYWx0JywgJ3Nob3dfdGl0bGUnLCAnc2hvd19j bGFzcycsICd0aGVfY2xhc3MnLCAnY3VzdG9tX2Zvcm0nLAoJCQkJJ3Nob3dfZm9ybScsICdh ZG1pbl9wb3B1cF93aWR0aCcsICdhZG1pbl9wb3B1cF9oZWlnaHQnCgkJCSkpKSk7CgoJCQkk c2hvd193aWR0aCAgPSAoJHNob3dfd2lkdGggPT0gJzEnKSA/ICRzaG93X3dpZHRoIDogJzAn OwoJCQkkc2hvd19oZWlnaHQgPSAoJHNob3dfaGVpZ2h0ID09ICcxJykgPyAkc2hvd19oZWln aHQgOiAnMCc7CgkJCSRzaG93X2FsdCAgICA9ICgkc2hvd19hbHQgPT0gJzEnKSA/ICRzaG93 X2FsdCA6ICcwJzsKCQkJJHNob3dfdGl0bGUgID0gKCRzaG93X3RpdGxlID09ICcxJykgPyAk c2hvd190aXRsZSA6ICcwJzsKCQkJJHNob3dfY2xhc3MgID0gKCRzaG93X2NsYXNzID09ICcx JykgPyAkc2hvd19jbGFzcyA6ICcwJzsKCgkJCSR0aGVfY2xhc3MgICA9IHByZWdfcmVwbGFj ZSgiLyhefCZcUys7KXwoPFtePl0qPikvVSIsICcnLCBkdW1iRG93bigkdGhlX2NsYXNzKSk7 CgkJCSRjdXN0b21fZm9ybSA9IHNhbml0aXplRm9yVXJsKCRjdXN0b21fZm9ybSk7CgoJCQlp ZiAoZW1wdHkoJGFkbWluX3BvcHVwX3dpZHRoKSkKCQkJewoJCQkJJGFkbWluX3BvcHVwX3dp ZHRoID0gJzcyNSc7CgkJCX0KCgkJCWlmIChlbXB0eSgkYWRtaW5fcG9wdXBfaGVpZ2h0KSkK CQkJewoJCQkJJGFkbWluX3BvcHVwX2hlaWdodCA9ICc0MDAnOwoJCQl9CgoJCQlzYWZlX3Vw ZGF0ZSgndHhwX3ByZWZzJywgInZhbCA9ICckc2hvd193aWR0aCciLCAibmFtZSA9ICd1cG1f aW1nX3BvcHBlcl9zaG93X3dpZHRoJyIpOwoJCQlzYWZlX3VwZGF0ZSgndHhwX3ByZWZzJywg InZhbCA9ICckc2hvd19oZWlnaHQnIiwgIm5hbWUgPSAndXBtX2ltZ19wb3BwZXJfc2hvd19o ZWlnaHQnIik7CgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLCAidmFsID0gJyRzaG93X2Fs dCciLCAibmFtZSA9ICd1cG1faW1nX3BvcHBlcl9zaG93X2FsdCciKTsKCQkJc2FmZV91cGRh dGUoJ3R4cF9wcmVmcycsICJ2YWwgPSAnJHNob3dfdGl0bGUnIiwgIm5hbWUgPSAndXBtX2lt Z19wb3BwZXJfc2hvd190aXRsZSciKTsKCQkJc2FmZV91cGRhdGUoJ3R4cF9wcmVmcycsICJ2 YWwgPSAnJHNob3dfY2xhc3MnIiwgIm5hbWUgPSAndXBtX2ltZ19wb3BwZXJfc2hvd19jbGFz cyciKTsKCQkJc2FmZV91cGRhdGUoJ3R4cF9wcmVmcycsICJ2YWwgPSAnJHRoZV9jbGFzcyci LCAibmFtZSA9ICd1cG1faW1nX3BvcHBlcl90aGVfY2xhc3MnIik7CgkJCXNhZmVfdXBkYXRl KCd0eHBfcHJlZnMnLCAidmFsID0gJyRjdXN0b21fZm9ybSciLCAibmFtZSA9ICd1cG1faW1n X3BvcHBlcl9jdXN0b21fZm9ybSciKTsKCgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLCAi dmFsID0gJyRzaG93X2Zvcm0nIiwgIm5hbWUgPSAndXBtX2ltZ19wb3BwZXJfc2hvd19mb3Jt JyIpOwoJCQlzYWZlX3VwZGF0ZSgndHhwX3ByZWZzJywgInZhbCA9ICckYWRtaW5fcG9wdXBf d2lkdGgnIiwgIm5hbWUgPSAndXBtX2ltZ19wb3BwZXJfYWRtaW5fcG9wdXBfd2lkdGgnIik7 CgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLCAidmFsID0gJyRhZG1pbl9wb3B1cF9oZWln aHQnIiwgIm5hbWUgPSAndXBtX2ltZ19wb3BwZXJfYWRtaW5fcG9wdXBfaGVpZ2h0JyIpOwoK CQkJJHByZWZzID0gZ2V0X3ByZWZzKCk7CgkJfQoKCQllY2hvIG4ubi4nPGRpdiBzdHlsZT0i bWFyZ2luOiAzZW0gYXV0byBhdXRvIGF1dG87IHdpZHRoOiAyMGVtOyI+Jy4KCgkJbi5uLmhl ZCh1cG1faW1nX3BvcHBlcl9nVHh0KCdwcmVmcycpLCAnMScpLgoKCQluLm4uZm9ybSgKCQkJ bi5lSW5wdXQoJ3VwbV9pbWdfcG9wcGVyX3ByZWZzJykuCgkJCW4uc0lucHV0KCd1cGRhdGUn KS4KCgkJCW4ubi50YWcoCgkJCQluLm4udGFnKHVwbV9pbWdfcG9wcGVyX2dUeHQoJ3B1Ymxp Y19zaWRlJyksICdsZWdlbmQnKS4KCgkJCQluLm4uZ3JhZigKCQkJCQl1cG1faW1nX3BvcHBl cl9nVHh0KCdzaG93X3dpZHRoJykuYnIuCgkJCQkJbi55ZXNub1JhZGlvKCdzaG93X3dpZHRo JywgJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X3dpZHRoJ10pCgkJCQkpLgoKCQkJCW4u bi5ncmFmKAoJCQkJCXVwbV9pbWdfcG9wcGVyX2dUeHQoJ3Nob3dfaGVpZ2h0JykuYnIuCgkJ CQkJbi55ZXNub1JhZGlvKCdzaG93X2hlaWdodCcsICRwcmVmc1sndXBtX2ltZ19wb3BwZXJf c2hvd19oZWlnaHQnXSkKCQkJCSkuCgoJCQkJbi5uLmdyYWYoCgkJCQkJdXBtX2ltZ19wb3Bw ZXJfZ1R4dCgnc2hvd19hbHQnKS5ici4KCQkJCQluLnllc25vUmFkaW8oJ3Nob3dfYWx0Jywg JHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X2FsdCddKQoJCQkJKS4KCgkJCQluLm4uZ3Jh ZigKCQkJCQl1cG1faW1nX3BvcHBlcl9nVHh0KCdzaG93X3RpdGxlJykuYnIuCgkJCQkJbi55 ZXNub1JhZGlvKCdzaG93X3RpdGxlJywgJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X3Rp dGxlJ10pCgkJCQkpLgoKCQkJCW4ubi5ncmFmKAoJCQkJCXVwbV9pbWdfcG9wcGVyX2dUeHQo J3Nob3dfY2xhc3MnKS5ici4KCQkJCQluLnllc25vUmFkaW8oJ3Nob3dfY2xhc3MnLCAkcHJl ZnNbJ3VwbV9pbWdfcG9wcGVyX3Nob3dfY2xhc3MnXSkKCQkJCSkuCgoJCQkJbi5uLmdyYWYo CgkJCQkJdXBtX2ltZ19wb3BwZXJfZ1R4dCgndGhlX2NsYXNzJykuYnIuCgkJCQkJbi5mSW5w dXQoJ3RleHQnLCAndGhlX2NsYXNzJywgJHByZWZzWyd1cG1faW1nX3BvcHBlcl90aGVfY2xh c3MnXSwgJ2VkaXQnKQoJCQkJKS4KCgkJCQluLm4uZ3JhZigKCQkJCQl1cG1faW1nX3BvcHBl cl9nVHh0KCdjdXN0b21fZm9ybScpLmJyLgoJCQkJCW4uZklucHV0KCd0ZXh0JywgJ2N1c3Rv bV9mb3JtJywgJHByZWZzWyd1cG1faW1nX3BvcHBlcl9jdXN0b21fZm9ybSddLCAnZWRpdCcp CgkJCQkpCgkJCSwgJ2ZpZWxkc2V0JykuCgoJCQluLm4udGFnKAoJCQkJbi5uLnRhZyh1cG1f aW1nX3BvcHBlcl9nVHh0KCdhZG1pbl9zaWRlJyksICdsZWdlbmQnKS4KCgkJCQluLm4uZ3Jh ZigKCQkJCQl1cG1faW1nX3BvcHBlcl9nVHh0KCdzaG93X2Zvcm0nKS5ici4KCQkJCQluLnll c25vUmFkaW8oJ3Nob3dfZm9ybScsICRwcmVmc1sndXBtX2ltZ19wb3BwZXJfc2hvd19mb3Jt J10pCgkJCQkpLgoKCQkJCW4ubi5ncmFmKAoJCQkJCXVwbV9pbWdfcG9wcGVyX2dUeHQoJ2Fk bWluX3BvcHVwX3dpZHRoJykuYnIuCgkJCQkJbi5mSW5wdXQoJ3RleHQnLCAnYWRtaW5fcG9w dXBfd2lkdGgnLCAkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX2FkbWluX3BvcHVwX3dpZHRoJ10s ICdlZGl0JykKCQkJCSkuCgoJCQkJbi5uLmdyYWYoCgkJCQkJdXBtX2ltZ19wb3BwZXJfZ1R4 dCgnYWRtaW5fcG9wdXBfaGVpZ2h0JykuYnIuCgkJCQkJbi5mSW5wdXQoJ3RleHQnLCAnYWRt aW5fcG9wdXBfaGVpZ2h0JywgJHByZWZzWyd1cG1faW1nX3BvcHBlcl9hZG1pbl9wb3B1cF9o ZWlnaHQnXSwgJ2VkaXQnKQoJCQkJKQoKCQkJLCAnZmllbGRzZXQnKS4KCgkJCW4ubi5mSW5w dXQoJ3N1Ym1pdCcsICd1cGRhdGUnLCAnVXBkYXRlJywgJ3NtYWxsZXJib3gnKQoKCQkpLm4u bi4nPC9kaXY+JzsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX3BvcHBlcl9p bnN0YWxsKCkKCXsKCQlnbG9iYWwgJHByZWZzOwoKCQkkdXBkYXRlZCA9IGZhbHNlOwoKCQkk c2V0dGluZ3MgPSAicHJlZnNfaWQgPSAxLCB0eXBlID0gMiwgZXZlbnQgPSAnYWRtaW4nLCBw b3NpdGlvbiA9IDAiOwoKCQlpZiAoIWlzc2V0KCRwcmVmc1sndXBtX2ltZ19wb3BwZXJfc2hv d193aWR0aCddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAiCgkJCQluYW1l ID0gJ3VwbV9pbWdfcG9wcGVyX3Nob3dfd2lkdGgnLAoJCQkJdmFsID0gJzEnLAoJCQkJaHRt bCA9ICd5ZXNub3JhZGlvJywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJCSR1cGRhdGVkID0g dHJ1ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X2hl aWdodCddKSkKCQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAiCgkJCQluYW1lID0g J3VwbV9pbWdfcG9wcGVyX3Nob3dfaGVpZ2h0JywKCQkJCXZhbCA9ICcxJywKCQkJCWh0bWwg PSAneWVzbm9yYWRpbycsCgkJCQkkc2V0dGluZ3MKCQkJIik7CgoJCQkkdXBkYXRlZCA9IHRy dWU7CgkJfQoKCQlpZiAoIWlzc2V0KCRwcmVmc1sndXBtX2ltZ19wb3BwZXJfc2hvd19hbHQn XSkpCgkJewoJCQlzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1f aW1nX3BvcHBlcl9zaG93X2FsdCcsCgkJCQl2YWwgPSAnMScsCgkJCQlodG1sID0gJ3llc25v cmFkaW8nLAoJCQkJJHNldHRpbmdzCgkJCSIpOwoKCQkJJHVwZGF0ZWQgPSB0cnVlOwoJCX0K CgkJaWYgKCFpc3NldCgkcHJlZnNbJ3VwbV9pbWdfcG9wcGVyX3Nob3dfdGl0bGUnXSkpCgkJ ewoJCQlzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1faW1nX3Bv cHBlcl9zaG93X3RpdGxlJywKCQkJCXZhbCA9ICcxJywKCQkJCWh0bWwgPSAneWVzbm9yYWRp bycsCgkJCQkkc2V0dGluZ3MKCQkJIik7CgoJCQkkdXBkYXRlZCA9IHRydWU7CgkJfQoKCQlp ZiAoIWlzc2V0KCRwcmVmc1sndXBtX2ltZ19wb3BwZXJfc2hvd19jbGFzcyddKSkKCQl7CgkJ CXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAiCgkJCQluYW1lID0gJ3VwbV9pbWdfcG9wcGVy X3Nob3dfY2xhc3MnLAoJCQkJdmFsID0gJzEnLAoJCQkJaHRtbCA9ICd5ZXNub3JhZGlvJywK CQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJCSR1cGRhdGVkID0gdHJ1ZTsKCQl9CgoJCWlmICgh aXNzZXQoJHByZWZzWyd1cG1faW1nX3BvcHBlcl90aGVfY2xhc3MnXSkpCgkJewoJCQlzYWZl X2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1faW1nX3BvcHBlcl90aGVf Y2xhc3MnLAoJCQkJdmFsID0gJ2ltYWdlJywKCQkJCWh0bWwgPSAndGV4dF9pbnB1dCcsCgkJ CQkkc2V0dGluZ3MKCQkJIik7CgoJCQkkdXBkYXRlZCA9IHRydWU7CgkJfQoKCQlpZiAoIWlz c2V0KCRwcmVmc1sndXBtX2ltZ19wb3BwZXJfY3VzdG9tX2Zvcm0nXSkpCgkJewoJCQlzYWZl X2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1faW1nX3BvcHBlcl9jdXN0 b21fZm9ybScsCgkJCQl2YWwgPSAndXBtX2ltZ19wb3BwZXInLAoJCQkJaHRtbCA9ICd0ZXh0 X2lucHV0JywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJCSR1cGRhdGVkID0gdHJ1ZTsKCQl9 CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9zaG93X2Zvcm0nXSkpCgkJ ewoJCQlzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1faW1nX3Bv cHBlcl9zaG93X2Zvcm0nLAoJCQkJdmFsID0gJzEnLAoJCQkJaHRtbCA9ICd5ZXNub3JhZGlv JywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJCSR1cGRhdGVkID0gdHJ1ZTsKCQl9CgoJCWlm ICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9hZG1pbl9wb3B1cF93aWR0aCddKSkK CQl7CgkJCXNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAiCgkJCQluYW1lID0gJ3VwbV9pbWdf cG9wcGVyX2FkbWluX3BvcHVwX3dpZHRoJywKCQkJCXZhbCA9ICc3MjUnLAoJCQkJaHRtbCA9 ICd0ZXh0X2lucHV0JywKCQkJCSRzZXR0aW5ncwoJCQkiKTsKCgkJCSR1cGRhdGVkID0gdHJ1 ZTsKCQl9CgoJCWlmICghaXNzZXQoJHByZWZzWyd1cG1faW1nX3BvcHBlcl9hZG1pbl9wb3B1 cF9oZWlnaHQnXSkpCgkJewoJCQlzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIgoJCQkJbmFt ZSA9ICd1cG1faW1nX3BvcHBlcl9hZG1pbl9wb3B1cF9oZWlnaHQnLAoJCQkJdmFsID0gJzQw MCcsCgkJCQlodG1sID0gJ3RleHRfaW5wdXQnLAoJCQkJJHNldHRpbmdzCgkJCSIpOwoKCQkJ JHVwZGF0ZWQgPSB0cnVlOwoJCX0KCgkJaWYgKCR1cGRhdGVkKQoJCXsKCQkJJEdMT0JBTFNb J3ByZWZzJ10gPSBnZXRfcHJlZnMoKTsKCQl9Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24g dXBtX2ltZ19wb3BwZXJfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKQoJewoJCSRsYW5n ID0gYXJyYXkoCgkJCSdhZG1pbl9wb3B1cF93aWR0aCcgICAgID0+ICdQb3B1cCB3aWR0aCcs CgkJCSdhZG1pbl9wb3B1cF9oZWlnaHQnICAgID0+ICdQb3B1cCBoZWlnaHQnLAoJCQknYWRt aW5fc2lkZScgICAgICAgICAgICA9PiAnQWRtaW4nLAoJCQknYWx0X3RleHRfZm9yJwkJCQkJ PT4gJ0FsdGVybmF0ZSB0ZXh0IGZvcicsCgkJCSdhcnRpY2xlX2ltYWdlX2FwcGVuZCcJPT4g J0FydGljbGUgaW1hZ2UgKGFwcGVuZCknLAoJCQknYXJ0aWNsZV9pbWFnZV9yZXBsYWNlJyA9 PiAnQXJ0aWNsZSBpbWFnZSAocmVwbGFjZSknLAoJCQknYXNzaWduX2NsYXNzJwkJCQkJPT4g J2Fzc2lnbiBjbGFzcycsCgkJCSdidWlsdF9pbicJCQkJCQkJPT4gJ0J1aWx0LWluJywKCQkJ J2NhcHRpb25fZm9yJwkJCQkJCT0+ICdDYXB0aW9uIGZvcicsCgkJCSdjaGVja19sZWF2ZScJ CQkJCQk9PiAnWW91IGhhdmUgbWFkZSBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IHBvc3Qgd2hp Y2ggeW91IGhhdmUgbm90IHNhdmVkLiBDb250aW51ZSB3aXRob3V0IHNhdmluZz8nLAoJCQkn Y29uZmlybV9vdmVyd3JpdGUnCQkJPT4gJ1lvdSBoYXZlIG1vcmUgdGhhbiBvbmUgYXJ0aWNs ZSBpbWFnZSBkZWZpbmVkLiBUaGlzIGFjdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgZW50aXJl IGxpc3QuIENvbnRpbnVlPycsCgkJCSdjdXN0b21fZm9ybScJCQkJCQk9PiAnQ3VzdG9tIGZv cm0nLAoJCQknZmFpbGVkJwkJCQkJCQkJPT4gJ0luc2VydCBmYWlsZWQuJywKCQkJJ2ZvcicJ CQkJCQkJCQkJPT4gJ2ZvcicsCgkJCSdpbWFnZScJCQkJCQkJCQk9PiAnSW1hZ2UnLAoJCQkn aW1hZ2Vfc2VsZWN0b3InCQkJCT0+ICdJbWFnZSBTZWxlY3RvcicsCgkJCSdpbmNsdWRlJwkJ CQkJCQkJPT4gJ2luY2x1ZGUnLAoJCQknaW5jbHVkZV9hbHQnCQkJCQkJPT4gJ2luY2x1ZGUg YWx0IHRleHQnLAoJCQknaW5jbHVkZV9jYXB0aW9uJwkJCQk9PiAnaW5jbHVkZSBjYXB0aW9u JywKCQkJJ2luY2x1ZGVfaGVpZ2h0JwkJCQk9PiAnaW5jbHVkZSBoZWlnaHQnLAoJCQknaW5j bHVkZV93aWR0aCcJCQkJCT0+ICdpbmNsdWRlIHdpZHRoJywKCQkJJ2luc2VydCcJCQkJCQkJ CT0+ICdJbnNlcnQnLAoJCQknaW5zZXJ0X2ltYWdlJwkJCQkJPT4gJ0luc2VydCBJbWFnZScs CgkJCSdpbnNlcnRfcGx1Z2luJwkJCQkJPT4gJ0luc2VydCAodXBtX2ltYWdlKScsCgkJCSdu b190aHVtYm5haWwnCQkJCQk9PiAnVGh1bWJuYWlsIG5vdCBmb3VuZC4nLAoJCQknb3ZlcnJp ZGUnCQkJCQkJCT0+ICdvdmVycmlkZXMgYWxsIG9wdGlvbmFsIHBhcmFtZXRlcnMnLAoJCQkn cG9wdXAnCQkJCQkJCQkJPT4gJ1BvcHVwJywKCQkJJ3ByZWZzJwkJCQkJCQkJCT0+ICd1cG1f aW1nX3BvcHBlciBQcmVmZXJlbmNlcycsCgkJCSdwdWJsaWNfc2lkZScgICAgICAgICAgID0+ ICdQdWJsaWMnLAoJCQkncmV0dXJuJwkJCQkJCQkJPT4gJ1JldHVybiB0byBlZGl0aW5nIHRo ZSBwb3N0PycsCgkJCSdzaG93X2FsdCcJCQkJCQkJPT4gJ1Nob3cgYWx0ZXJuYXRlIHRleHQ/ JywKCQkJJ3Nob3dfY2xhc3MnCQkJCQkJPT4gJ1Nob3cgY2xhc3M/JywKCQkJJ3Nob3dfaGVp Z2h0JwkJCQkJCT0+ICdTaG93IGhlaWdodD8nLAoJCQknc2hvd190aXRsZScJCQkJCQk9PiAn U2hvdyBjYXB0aW9uPycsCgkJCSdzaG93X3dpZHRoJwkJCQkJCT0+ICdTaG93IHdpZHRoPycs CgkJCSdzaG93X2Zvcm0nCQkJCQkJCT0+ICdTaG93IGN1c3RvbWl6YXRpb24gb3B0aW9ucyBp biBwb3B1cD8nLAoJCQknc3VjY2VzcycJCQkJCQkJCT0+ICdTdWNjZXNzLicsCgkJCSd0aGVf Y2xhc3MnCQkJCQkJCT0+ICdUaGUgY2xhc3MnLAoJCQkndmlld19hbGwnCQkJCQkJCT0+ICdW aWV3IEFsbCcKCQkpOwoKCQlyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7Cgl9 IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7czoxOiI1IjtzOjQ6ImhlbHAiO3M6 MTI1NzoiPGgxPnVwbV9pbWdfcG9wcGVyPC9oMT4KCgk8aDI+SW50cm88L2gyPgoKCTxwPlRl eHRwYXR0ZXJuIGhhcyBzb21lIG5pY2UgaW1hZ2UgaGFuZGxpbmcgZmVhdHVyZXMsIGJ1dCBv bmUgdGhpbmcgbGFja2luZyBpcyBhbiAmIzgyMjA7aW1hZ2UgcGlja2VyJiM4MjIxOy4gQW55 b25lIGNhbiBjb3B5IGFuZCBwYXN0ZSB0aGUgcmVxdWlyZWQtYnV0LW5lYXQgdGFncywgYnV0 IHdvdWxkbiYjODIxNzt0IGl0IGJlIGV2ZW4gbmljZXIgdG8gYmUgYWJsZSB0byBjbGljayB0 byBpbnNlcnQgdGhlbSByaWdodCBpbiB0aGUgd3JpdGUgdGFiPyBOb3cgeW91IGNhbi48L3A+ CgoJPHA+PGEgaHJlZj0iI3N0YXJ0IiB0aXRsZT0iSnVtcCBiYWNrIGNvbnRlbnRzIGxpc3Qi IHJlbD0ibm9mb2xsb3ciPiZhbXA7Izg2MTc7PC9hPjwvcD4KCgk8aDI+Q3JlZGl0IGFuZCBE ZXZlbG9wZXIgTm90ZXM8L2gyPgoKCTxwPlNpbmNlIFRleHRwYXR0ZXJuIHNhdmVzIGltYWdl IGluZm8gaW4gdGhlIGRhdGFiYXNlLCB0aGlzIHJlcXVpcmVzIGNhbGxzIHRvIHRoZSBkYXRh YmFzZSB0byBmZXRjaCBpdC4gQXMgdGhlIGFtb3VudCBvZiBpbWFnZXMgaW5jcmVhc2UsIHRo ZSByZXN1bHRzIHJldHVybmVkIHdvdWxkIGluY3JlYXNlLiBGb3IgdGhpcyByZWFzb24sIEkg aGF2ZSBjaG9zZW4gdG8gbWFrZSB1c2Ugb2YgYSBwb3B1cCB3aW5kb3csIHJhdGhlciB0aGFu IGEgZHJvcGRvd24gbGlzdC4gVGhpcyB3YXksIGl0JiM4MjE3O3MgdGhlcmUgYW5kIGVhc3kt dG8tdXNlIHdoZW4geW91IG5lZWQgaXQsIGJ1dCB3b24mIzgyMTc7dCBib2cgZG93biB0aGUg d3JpdGUgdGFiIHdoZW4geW91IGFyZW4mIzgyMTc7dCBpbnRlcmVzdGVkIGluIHVzaW5nIGlt YWdlcyBmb3IgeW91ciBwb3N0LiBBZGRpdGlvbmFsbHksIHRoaXMgYWxsb3dzIHlvdSB0byB2 aWV3IG1vcmUgaW1hZ2UgaW5mb3JtYXRpb24sIHNvIHlvdSBjYW4gYmUgc3VyZSB3aGljaCBp bWFnZSB5b3UgYXJlIGluc2VydGluZy48L3A+CgoJPHA+VG8gbWFrZSB0aGUgaW1hZ2UgaW5z ZXJ0aW9uIGludG8gdGhlIGFydGljbGUgYm9keSAmIzgyMjA7c21hcnRlciYjODIyMTssIEkg bWFkZSB1c2Ugb2YgSmF2YVNjcmlwdCBieSA8YSBocmVmPSJodHRwOi8vd3d3LmFsZXhraW5n Lm9yZy8iIHJlbD0ibm9mb2xsb3ciPkFsZXggS2luZzwvYT4uPC9wPgoKCTxwPjxhIGhyZWY9 IiNzdGFydCIgdGl0bGU9Ikp1bXAgYmFjayBjb250ZW50cyBsaXN0IiByZWw9Im5vZm9sbG93 Ij4mYW1wOyM4NjE3OzwvYT48L3A+IjtzOjM6Im1kNSI7czozMjoiYzk5ZDE3N2M5ZWZiNTA3 ZTE5MDc3ZWRhYWZlMDEwOTQiO30=