NFT Market Smart Contract

Words
1
Reading
1 min
Listen
Play
5y

{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nftmarket","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0bWFya2V0IixNQVhfTlVNX1VOSVRTX09QRVJBQkxFPTUwO2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PnshMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygicGFyYW1zIikmJmF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicGFyYW1zIixbInN5bWJvbCJdKX07Y29uc3QgaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQ9KHJlc3VsdCxmcm9tLHRvLHN5bWJvbCxxdWFudGl0eSxldmVudFN0cik9PiEodm9pZCAwIT09cmVzdWx0LmVycm9yc3x8IXJlc3VsdC5ldmVudHN8fHZvaWQgMD09PXJlc3VsdC5ldmVudHMuZmluZChlbD0+InRva2VucyI9PT1lbC5jb250cmFjdCYmZWwuZXZlbnQ9PT1ldmVudFN0ciYmZWwuZGF0YS5mcm9tPT09ZnJvbSYmZWwuZGF0YS50bz09PXRvJiZlbC5kYXRhLnF1YW50aXR5PT09cXVhbnRpdHkmJmVsLmRhdGEuc3ltYm9sPT09c3ltYm9sKSksY291bnREZWNpbWFscz12YWx1ZT0+YXBpLkJpZ051bWJlcih2YWx1ZSkuZHAoKSxpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGg9YWNjb3VudD0+YWNjb3VudC5sZW5ndGg+PTMmJmFjY291bnQubGVuZ3RoPD0xNixtYWtlTWFwS2V5PShhY2NvdW50LHR5cGUpPT5hY2NvdW50KyItIit0eXBlLG1ha2VHcm91cGluZ0tleT0oZ3JvdXBpbmcsZ3JvdXBCeSk9PntsZXQga2V5PSIiO3JldHVybiBncm91cEJ5LmZvckVhY2gobmFtZT0+e2tleT1rZXkrIjoiK25hbWUrIjoiK2dyb3VwaW5nW25hbWVdfSksa2V5fSxpc1ZhbGlkSWRBcnJheT1hcnI9Pnt0cnl7aWYoIWFwaS5hc3NlcnQoYXJyJiYib2JqZWN0Ij09dHlwZW9mIGFyciYmQXJyYXkuaXNBcnJheShhcnIpLCJpbnZhbGlkIGlkIGxpc3QiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChhcnIubGVuZ3RoPD01MCwiY2Fubm90IGFjdCBvbiBtb3JlIHRoYW4gNTAgSURzIGF0IG9uY2UiKSlyZXR1cm4hMTtmb3IobGV0IGk9MDtpPGFyci5sZW5ndGg7aSs9MSl7Y29uc3QgaWQ9YXJyW2ldO2lmKCFhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiYhYXBpLkJpZ051bWJlcihpZCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihpZCkuZ3QoMCksImludmFsaWQgaWQgbGlzdCIpKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH07YWN0aW9ucy5lbmFibGVNYXJrZXQ9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3N5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJuZnQiLCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PW5mdCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtjb25zdCBtYXJrZXRUYWJsZU5hbWU9c3ltYm9sKyJzZWxsQm9vayIsbWV0cmljc1RhYmxlTmFtZT1zeW1ib2wrIm9wZW5JbnRlcmVzdCIsaGlzdG9yeVRhYmxlTmFtZT1zeW1ib2wrInRyYWRlc0hpc3RvcnkiLHRhYmxlRXhpc3RzPWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cyhtYXJrZXRUYWJsZU5hbWUpO2FwaS5hc3NlcnQoITE9PT10YWJsZUV4aXN0cywibWFya2V0IGFscmVhZHkgZW5hYmxlZCIpJiYoYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKG1hcmtldFRhYmxlTmFtZSxbIm93bmVkQnkiLCJhY2NvdW50IiwibmZ0SWQiLCJncm91cGluZyIsInByaWNlU3ltYm9sIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZShtZXRyaWNzVGFibGVOYW1lLFsic2lkZSIsInByaWNlU3ltYm9sIiwiZ3JvdXBpbmciXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKGhpc3RvcnlUYWJsZU5hbWUsWyJwcmljZVN5bWJvbCIsInRpbWVzdGFtcCJdKSxhcGkuZW1pdCgiZW5hYmxlTWFya2V0Iix7c3ltYm9sOnN5bWJvbH0pKX19fTtjb25zdCB1cGRhdGVPcGVuSW50ZXJlc3Q9YXN5bmMoc2lkZSxzeW1ib2wscHJpY2VTeW1ib2wsZ3JvdXBzLGdyb3VwQnkpPT57Y29uc3QgbWV0cmljc1RhYmxlTmFtZT1zeW1ib2wrIm9wZW5JbnRlcmVzdCIsZ3JvdXBLZXlzPVtdO2Zvcihjb25zdCBpbmZvIG9mIE9iamVjdC52YWx1ZXMoZ3JvdXBzKSlncm91cEtleXMucHVzaChpbmZvLmdyb3VwaW5nKTtpZihncm91cEtleXMubGVuZ3RoPD0wKXJldHVybjtjb25zdCBvcGVuSW50ZXJlc3Q9YXdhaXQgYXBpLmRiLmZpbmQobWV0cmljc1RhYmxlTmFtZSx7c2lkZTpzaWRlLHByaWNlU3ltYm9sOnByaWNlU3ltYm9sLGdyb3VwaW5nOnskaW46Z3JvdXBLZXlzfX0sNTAsMCxbe2luZGV4OiJzaWRlIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6InByaWNlU3ltYm9sIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6Imdyb3VwaW5nIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8b3BlbkludGVyZXN0Lmxlbmd0aDtpKz0xKXtjb25zdCBtZXRyaWM9b3BlbkludGVyZXN0W2ldLGtleT1tYWtlR3JvdXBpbmdLZXkobWV0cmljLmdyb3VwaW5nLGdyb3VwQnkpO2tleSBpbiBncm91cHMmJihncm91cHNba2V5XS5pc0luQ29sbGVjdGlvbj0hMCxtZXRyaWMuY291bnQrPWdyb3Vwc1trZXldLmNvdW50LG1ldHJpYy5jb3VudDwwJiYobWV0cmljLmNvdW50PTApLGF3YWl0IGFwaS5kYi51cGRhdGUobWV0cmljc1RhYmxlTmFtZSxtZXRyaWMpKX1mb3IoY29uc3QgaW5mbyBvZiBPYmplY3QudmFsdWVzKGdyb3VwcykpaWYoIWluZm8uaXNJbkNvbGxlY3Rpb24pe2NvbnN0IGZpbmFsQ291bnQ9aW5mby5jb3VudD4wP2luZm8uY291bnQ6MCxuZXdNZXRyaWM9e3NpZGU6c2lkZSxwcmljZVN5bWJvbDpwcmljZVN5bWJvbCxncm91cGluZzppbmZvLmdyb3VwaW5nLGNvdW50OmZpbmFsQ291bnR9O2F3YWl0IGFwaS5kYi5pbnNlcnQobWV0cmljc1RhYmxlTmFtZSxuZXdNZXRyaWMpfX0sdXBkYXRlVHJhZGVzSGlzdG9yeT1hc3luYyh0eXBlLGFjY291bnQsb3duZWRCeSxjb3VudGVycGFydGllcyxzeW1ib2wscHJpY2VTeW1ib2wscHJpY2UsaXNNYXJrZXRGZWVQYWlkLG1hcmtldEFjY291bnQsZmVlLGlzQWdlbnRGZWVQYWlkLGFnZW50QWNjb3VudCxhZ2VudEZlZSx2b2x1bWUpPT57Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksdGltZXN0YW1wU2VjPWJsb2NrRGF0ZS5nZXRUaW1lKCkvMWUzLHRpbWVzdGFtcE1pbnVzMjRocnM9YmxvY2tEYXRlLnNldFVUQ0RhdGUoYmxvY2tEYXRlLmdldFVUQ0RhdGUoKS0xKS8xZTMsaGlzdG9yeVRhYmxlTmFtZT1zeW1ib2wrInRyYWRlc0hpc3RvcnkiO2xldCB0cmFkZXNUb0RlbGV0ZT1hd2FpdCBhcGkuZGIuZmluZChoaXN0b3J5VGFibGVOYW1lLHtwcmljZVN5bWJvbDpwcmljZVN5bWJvbCx0aW1lc3RhbXA6eyRsdDp0aW1lc3RhbXBNaW51czI0aHJzfX0sMWUzLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pLG5iVHJhZGVzVG9EZWxldGU9dHJhZGVzVG9EZWxldGUubGVuZ3RoO2Zvcig7bmJUcmFkZXNUb0RlbGV0ZT4wOyl7Zm9yKGxldCBpbmRleD0wO2luZGV4PG5iVHJhZGVzVG9EZWxldGU7aW5kZXgrPTEpe2NvbnN0IHRyYWRlPXRyYWRlc1RvRGVsZXRlW2luZGV4XTthd2FpdCBhcGkuZGIucmVtb3ZlKGhpc3RvcnlUYWJsZU5hbWUsdHJhZGUpfXRyYWRlc1RvRGVsZXRlPWF3YWl0IGFwaS5kYi5maW5kKGhpc3RvcnlUYWJsZU5hbWUse3ByaWNlU3ltYm9sOnByaWNlU3ltYm9sLHRpbWVzdGFtcDp7JGx0OnRpbWVzdGFtcE1pbnVzMjRocnN9fSwxZTMsMCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSksbmJUcmFkZXNUb0RlbGV0ZT10cmFkZXNUb0RlbGV0ZS5sZW5ndGh9Y29uc3QgbmV3VHJhZGU9e307bmV3VHJhZGUudHlwZT10eXBlLG5ld1RyYWRlLmFjY291bnQ9YWNjb3VudCxuZXdUcmFkZS5vd25lZEJ5PW93bmVkQnksbmV3VHJhZGUuY291bnRlcnBhcnRpZXM9Y291bnRlcnBhcnRpZXMsbmV3VHJhZGUucHJpY2VTeW1ib2w9cHJpY2VTeW1ib2wsbmV3VHJhZGUucHJpY2U9cHJpY2UsaXNNYXJrZXRGZWVQYWlkJiYobmV3VHJhZGUubWFya2V0QWNjb3VudD1tYXJrZXRBY2NvdW50LG5ld1RyYWRlLmZlZT1mZWUpLGlzQWdlbnRGZWVQYWlkJiYobmV3VHJhZGUuYWdlbnRBY2NvdW50PWFnZW50QWNjb3VudCxuZXdUcmFkZS5hZ2VudEZlZT1hZ2VudEZlZSksbmV3VHJhZGUudGltZXN0YW1wPXRpbWVzdGFtcFNlYyxuZXdUcmFkZS52b2x1bWU9dm9sdW1lLGF3YWl0IGFwaS5kYi5pbnNlcnQoaGlzdG9yeVRhYmxlTmFtZSxuZXdUcmFkZSl9O2FjdGlvbnMuc2V0TWFya2V0UGFyYW1zPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLG9mZmljaWFsTWFya2V0Om9mZmljaWFsTWFya2V0LGFnZW50Q3V0OmFnZW50Q3V0LG1pbkZlZTptaW5GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sLCJpbnZhbGlkIHBhcmFtcyIpKXJldHVybiExO2lmKHZvaWQgMD09PW9mZmljaWFsTWFya2V0JiZ2b2lkIDA9PT1hZ2VudEN1dCYmdm9pZCAwPT09bWluRmVlKXJldHVybiExO2NvbnN0IG1hcmtldFRhYmxlTmFtZT1zeW1ib2wrInNlbGxCb29rIix0YWJsZUV4aXN0cz1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMobWFya2V0VGFibGVOYW1lKTtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0YWJsZUV4aXN0cywibWFya2V0IG5vdCBlbmFibGVkIGZvciBzeW1ib2wiKSYmYXBpLmFzc2VydCgodm9pZCAwPT09b2ZmaWNpYWxNYXJrZXR8fG9mZmljaWFsTWFya2V0JiYic3RyaW5nIj09dHlwZW9mIG9mZmljaWFsTWFya2V0JiZpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgob2ZmaWNpYWxNYXJrZXQudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSYmKHZvaWQgMD09PWFnZW50Q3V0fHwibnVtYmVyIj09dHlwZW9mIGFnZW50Q3V0JiZhZ2VudEN1dD49MCYmYWdlbnRDdXQ8PTFlNCYmTnVtYmVyLmlzSW50ZWdlcihhZ2VudEN1dCkpJiYodm9pZCAwPT09bWluRmVlfHwibnVtYmVyIj09dHlwZW9mIG1pbkZlZSYmbWluRmVlPj0wJiZtaW5GZWU8PTFlNCYmTnVtYmVyLmlzSW50ZWdlcihtaW5GZWUpKSwiaW52YWxpZCBwYXJhbXMiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgibmZ0IiwibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgc2hvdWxkVXBkYXRlPSExLGlzRmlyc3RUaW1lU2V0PSExO2NvbnN0IHVwZGF0ZT17c3ltYm9sOnN5bWJvbH07bGV0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7c3ltYm9sOnN5bWJvbH0pO3BhcmFtc3x8KGlzRmlyc3RUaW1lU2V0PSEwLHBhcmFtcz17c3ltYm9sOnN5bWJvbH0pO2NvbnN0IGZpbmFsT2ZmaWNpYWxNYXJrZXQ9dm9pZCAwIT09b2ZmaWNpYWxNYXJrZXQ/b2ZmaWNpYWxNYXJrZXQudHJpbSgpLnRvTG93ZXJDYXNlKCk6bnVsbDtpZih2b2lkIDA9PT1vZmZpY2lhbE1hcmtldHx8dm9pZCAwIT09cGFyYW1zLm9mZmljaWFsTWFya2V0JiZmaW5hbE9mZmljaWFsTWFya2V0PT09cGFyYW1zLm9mZmljaWFsTWFya2V0fHwodm9pZCAwIT09cGFyYW1zLm9mZmljaWFsTWFya2V0JiYodXBkYXRlLm9sZE9mZmljaWFsTWFya2V0PXBhcmFtcy5vZmZpY2lhbE1hcmtldCkscGFyYW1zLm9mZmljaWFsTWFya2V0PWZpbmFsT2ZmaWNpYWxNYXJrZXQsdXBkYXRlLm9mZmljaWFsTWFya2V0PWZpbmFsT2ZmaWNpYWxNYXJrZXQsc2hvdWxkVXBkYXRlPSEwKSx2b2lkIDA9PT1hZ2VudEN1dHx8dm9pZCAwIT09cGFyYW1zLmFnZW50Q3V0JiZhZ2VudEN1dD09PXBhcmFtcy5hZ2VudEN1dHx8KHZvaWQgMCE9PXBhcmFtcy5hZ2VudEN1dCYmKHVwZGF0ZS5vbGRBZ2VudEN1dD1wYXJhbXMuYWdlbnRDdXQpLHBhcmFtcy5hZ2VudEN1dD1hZ2VudEN1dCx1cGRhdGUuYWdlbnRDdXQ9YWdlbnRDdXQsc2hvdWxkVXBkYXRlPSEwKSx2b2lkIDA9PT1taW5GZWV8fHZvaWQgMCE9PXBhcmFtcy5taW5GZWUmJm1pbkZlZT09PXBhcmFtcy5taW5GZWV8fCh2b2lkIDAhPT1wYXJhbXMubWluRmVlJiYodXBkYXRlLm9sZE1pbkZlZT1wYXJhbXMubWluRmVlKSxwYXJhbXMubWluRmVlPW1pbkZlZSx1cGRhdGUubWluRmVlPW1pbkZlZSxzaG91bGRVcGRhdGU9ITApLHNob3VsZFVwZGF0ZSlyZXR1cm4gaXNGaXJzdFRpbWVTZXQ/YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpOmF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscGFyYW1zKSxhcGkuZW1pdCgic2V0TWFya2V0UGFyYW1zIix1cGRhdGUpLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5jaGFuZ2VQcmljZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxuZnRzOm5mdHMscHJpY2U6cHJpY2UsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sLCJpbnZhbGlkIHBhcmFtcyIpKXJldHVybjtjb25zdCBtYXJrZXRUYWJsZU5hbWU9c3ltYm9sKyJzZWxsQm9vayIsdGFibGVFeGlzdHM9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKG1hcmtldFRhYmxlTmFtZSk7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmlzVmFsaWRJZEFycmF5KG5mdHMpJiZhcGkuYXNzZXJ0KHByaWNlJiYic3RyaW5nIj09dHlwZW9mIHByaWNlJiYhYXBpLkJpZ051bWJlcihwcmljZSkuaXNOYU4oKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0YWJsZUV4aXN0cywibWFya2V0IG5vdCBlbmFibGVkIGZvciBzeW1ib2wiKSl7Y29uc3Qgb3JkZXJzPWF3YWl0IGFwaS5kYi5maW5kKG1hcmtldFRhYmxlTmFtZSx7bmZ0SWQ6eyRpbjpuZnRzfX0sNTAsMCxbe2luZGV4OiJuZnRJZCIsZGVzY2VuZGluZzohMX1dKTtpZihvcmRlcnMubGVuZ3RoPjApe2xldCBwcmljZVN5bWJvbD0iIjtmb3IobGV0IGk9MDtpPG9yZGVycy5sZW5ndGg7aSs9MSl7Y29uc3Qgb3JkZXI9b3JkZXJzW2ldO2lmKCIiPT09cHJpY2VTeW1ib2wmJih7cHJpY2VTeW1ib2w6cHJpY2VTeW1ib2x9PW9yZGVyKSwhYXBpLmFzc2VydChvcmRlci5hY2NvdW50PT09YXBpLnNlbmRlciYmInUiPT09b3JkZXIub3duZWRCeSwiYWxsIG9yZGVycyBtdXN0IGJlIHlvdXIgb3duIil8fCFhcGkuYXNzZXJ0KHByaWNlU3ltYm9sPT09b3JkZXIucHJpY2VTeW1ib2wsImFsbCBvcmRlcnMgbXVzdCBoYXZlIHRoZSBzYW1lIHByaWNlIHN5bWJvbCIpKXJldHVybn1jb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwcmljZVN5bWJvbH0pO2lmKGFwaS5hc3NlcnQodG9rZW4mJmFwaS5CaWdOdW1iZXIocHJpY2UpLmd0KDApJiZjb3VudERlY2ltYWxzKHByaWNlKTw9dG9rZW4ucHJlY2lzaW9uLCJpbnZhbGlkIHByaWNlIikpe2NvbnN0IGZpbmFsUHJpY2U9YXBpLkJpZ051bWJlcihwcmljZSkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24pO2ZvcihsZXQgaT0wO2k8b3JkZXJzLmxlbmd0aDtpKz0xKXtjb25zdCBvcmRlcj1vcmRlcnNbaV0sb2xkUHJpY2U9b3JkZXIucHJpY2U7b3JkZXIucHJpY2U9ZmluYWxQcmljZSxvcmRlci5wcmljZURlYz17JG51bWJlckRlY2ltYWw6ZmluYWxQcmljZX0sYXdhaXQgYXBpLmRiLnVwZGF0ZShtYXJrZXRUYWJsZU5hbWUsb3JkZXIpLGFwaS5lbWl0KCJjaGFuZ2VQcmljZSIse3N5bWJvbDpzeW1ib2wsbmZ0SWQ6b3JkZXIubmZ0SWQsb2xkUHJpY2U6b2xkUHJpY2UsbmV3UHJpY2U6b3JkZXIucHJpY2UscHJpY2VTeW1ib2w6b3JkZXIucHJpY2VTeW1ib2wsb3JkZXJJZDpvcmRlci5faWR9KX19fX19LGFjdGlvbnMuY2FuY2VsPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLG5mdHM6bmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wsImludmFsaWQgcGFyYW1zIikpcmV0dXJuO2NvbnN0IG1hcmtldFRhYmxlTmFtZT1zeW1ib2wrInNlbGxCb29rIix0YWJsZUV4aXN0cz1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMobWFya2V0VGFibGVOYW1lKTtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmaXNWYWxpZElkQXJyYXkobmZ0cykmJmFwaS5hc3NlcnQodGFibGVFeGlzdHMsIm1hcmtldCBub3QgZW5hYmxlZCBmb3Igc3ltYm9sIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoIm5mdCIsIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQobmZ0JiZuZnQuZ3JvdXBCeSYmbmZ0Lmdyb3VwQnkubGVuZ3RoPjAsIm1hcmtldCBncm91cGluZyBub3Qgc2V0IikpcmV0dXJuO2NvbnN0IG9yZGVycz1hd2FpdCBhcGkuZGIuZmluZChtYXJrZXRUYWJsZU5hbWUse25mdElkOnskaW46bmZ0c319LDUwLDAsW3tpbmRleDoibmZ0SWQiLGRlc2NlbmRpbmc6ITF9XSk7aWYob3JkZXJzLmxlbmd0aD4wKXtjb25zdCBpZHM9W10saWRNYXA9e307bGV0IHByaWNlU3ltYm9sPSIiO2ZvcihsZXQgaT0wO2k8b3JkZXJzLmxlbmd0aDtpKz0xKXtjb25zdCBvcmRlcj1vcmRlcnNbaV07aWYoIiI9PT1wcmljZVN5bWJvbCYmKHtwcmljZVN5bWJvbDpwcmljZVN5bWJvbH09b3JkZXIpLCFhcGkuYXNzZXJ0KG9yZGVyLmFjY291bnQ9PT1hcGkuc2VuZGVyJiYidSI9PT1vcmRlci5vd25lZEJ5LCJhbGwgb3JkZXJzIG11c3QgYmUgeW91ciBvd24iKXx8IWFwaS5hc3NlcnQocHJpY2VTeW1ib2w9PT1vcmRlci5wcmljZVN5bWJvbCwiYWxsIG9yZGVycyBtdXN0IGhhdmUgdGhlIHNhbWUgcHJpY2Ugc3ltYm9sIikpcmV0dXJuO2lkcy5wdXNoKG9yZGVyLm5mdElkKSxpZE1hcFtvcmRlci5uZnRJZF09b3JkZXJ9Y29uc3QgbmZ0QXJyYXk9W10sd3JhcHBlZE5mdHM9e3N5bWJvbDpzeW1ib2wsaWRzOmlkc307bmZ0QXJyYXkucHVzaCh3cmFwcGVkTmZ0cyk7Y29uc3QgcmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibmZ0IiwidHJhbnNmZXIiLHtmcm9tVHlwZToiY29udHJhY3QiLHRvOmFwaS5zZW5kZXIsdG9UeXBlOiJ1c2VyIixuZnRzOm5mdEFycmF5LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpZihyZXMuZXZlbnRzKXtjb25zdCBncm91cGluZ01hcD17fTtmb3IobGV0IGo9MDtqPHJlcy5ldmVudHMubGVuZ3RoO2orPTEpe2NvbnN0IGV2PXJlcy5ldmVudHNbal07aWYoZXYuY29udHJhY3QmJmV2LmV2ZW50JiZldi5kYXRhJiYibmZ0Ij09PWV2LmNvbnRyYWN0JiYidHJhbnNmZXIiPT09ZXYuZXZlbnQmJiJuZnRtYXJrZXQiPT09ZXYuZGF0YS5mcm9tJiYiYyI9PT1ldi5kYXRhLmZyb21UeXBlJiZldi5kYXRhLnRvPT09YXBpLnNlbmRlciYmInUiPT09ZXYuZGF0YS50b1R5cGUmJmV2LmRhdGEuc3ltYm9sPT09c3ltYm9sKXtjb25zdCBpbnN0YW5jZUlkPWV2LmRhdGEuaWQ7aWYoaW5zdGFuY2VJZCBpbiBpZE1hcCl7Y29uc3Qgb3JkZXI9aWRNYXBbaW5zdGFuY2VJZF07YXdhaXQgYXBpLmRiLnJlbW92ZShtYXJrZXRUYWJsZU5hbWUsb3JkZXIpLGFwaS5lbWl0KCJjYW5jZWxPcmRlciIse2FjY291bnQ6b3JkZXIuYWNjb3VudCxvd25lZEJ5Om9yZGVyLm93bmVkQnksc3ltYm9sOnN5bWJvbCxuZnRJZDpvcmRlci5uZnRJZCx0aW1lc3RhbXA6b3JkZXIudGltZXN0YW1wLHByaWNlOm9yZGVyLnByaWNlLHByaWNlU3ltYm9sOm9yZGVyLnByaWNlU3ltYm9sLGZlZTpvcmRlci5mZWUsb3JkZXJJZDpvcmRlci5faWR9KTtjb25zdCBrZXk9bWFrZUdyb3VwaW5nS2V5KG9yZGVyLmdyb3VwaW5nLG5mdC5ncm91cEJ5KSxncm91cEluZm89a2V5IGluIGdyb3VwaW5nTWFwP2dyb3VwaW5nTWFwW2tleV06e2dyb3VwaW5nOm9yZGVyLmdyb3VwaW5nLGlzSW5Db2xsZWN0aW9uOiExLGNvdW50OjB9O2dyb3VwSW5mby5jb3VudC09MSxncm91cGluZ01hcFtrZXldPWdyb3VwSW5mb319fWF3YWl0IHVwZGF0ZU9wZW5JbnRlcmVzdCgic2VsbCIsc3ltYm9sLHByaWNlU3ltYm9sLGdyb3VwaW5nTWFwLG5mdC5ncm91cEJ5KX19fX0sYWN0aW9ucy5idXk9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3N5bWJvbDpzeW1ib2wsbmZ0czpuZnRzLG1hcmtldEFjY291bnQ6bWFya2V0QWNjb3VudCxleHBQcmljZTpleHBQcmljZSxleHBQcmljZVN5bWJvbDpleHBQcmljZVN5bWJvbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm1hcmtldEFjY291bnQmJiJzdHJpbmciPT10eXBlb2YgbWFya2V0QWNjb3VudCYmKHZvaWQgMD09PWV4cFByaWNlfHxleHBQcmljZSYmInN0cmluZyI9PXR5cGVvZiBleHBQcmljZSYmIWFwaS5CaWdOdW1iZXIoZXhwUHJpY2UpLmlzTmFOKCkpJiYodm9pZCAwPT09ZXhwUHJpY2VTeW1ib2x8fGV4cFByaWNlU3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIGV4cFByaWNlU3ltYm9sKSwiaW52YWxpZCBwYXJhbXMiKSlyZXR1cm47Y29uc3QgbWFya2V0VGFibGVOYW1lPXN5bWJvbCsic2VsbEJvb2siLHRhYmxlRXhpc3RzPWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cyhtYXJrZXRUYWJsZU5hbWUpO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZpc1ZhbGlkSWRBcnJheShuZnRzKSYmYXBpLmFzc2VydCh0YWJsZUV4aXN0cywibWFya2V0IG5vdCBlbmFibGVkIGZvciBzeW1ib2wiKSl7Y29uc3QgZmluYWxNYXJrZXRBY2NvdW50PW1hcmtldEFjY291bnQudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoYXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoZmluYWxNYXJrZXRBY2NvdW50KSwiaW52YWxpZCBtYXJrZXQgYWNjb3VudCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJuZnQiLCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KG5mdCYmbmZ0Lmdyb3VwQnkmJm5mdC5ncm91cEJ5Lmxlbmd0aD4wLCJtYXJrZXQgZ3JvdXBpbmcgbm90IHNldCIpKXJldHVybjtjb25zdCBvcmRlcnM9YXdhaXQgYXBpLmRiLmZpbmQobWFya2V0VGFibGVOYW1lLHtuZnRJZDp7JGluOm5mdHN9fSw1MCwwLFt7aW5kZXg6Im5mdElkIixkZXNjZW5kaW5nOiExfV0pO2lmKG9yZGVycy5sZW5ndGg+MCl7bGV0IHByaWNlU3ltYm9sPSIiO2ZvcihsZXQgaT0wO2k8b3JkZXJzLmxlbmd0aDtpKz0xKXtjb25zdCBvcmRlcj1vcmRlcnNbaV07aWYoIiI9PT1wcmljZVN5bWJvbCYmKHtwcmljZVN5bWJvbDpwcmljZVN5bWJvbH09b3JkZXIpLCFhcGkuYXNzZXJ0KCEoInUiPT09b3JkZXIub3duZWRCeSYmb3JkZXIuYWNjb3VudD09PWFwaS5zZW5kZXIpLCJjYW5ub3QgZmlsbCB5b3VyIG93biBvcmRlcnMiKXx8IWFwaS5hc3NlcnQocHJpY2VTeW1ib2w9PT1vcmRlci5wcmljZVN5bWJvbCwiYWxsIG9yZGVycyBtdXN0IGhhdmUgdGhlIHNhbWUgcHJpY2Ugc3ltYm9sIikpcmV0dXJufWlmKCFhcGkuYXNzZXJ0KHZvaWQgMD09PWV4cFByaWNlU3ltYm9sfHxleHBQcmljZVN5bWJvbD09PXByaWNlU3ltYm9sLCJ1bmV4cGVjdGVkIHByaWNlIHN5bWJvbCAiK3ByaWNlU3ltYm9sKSlyZXR1cm47Y29uc3QgdG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cHJpY2VTeW1ib2x9KTtpZighdG9rZW4pcmV0dXJuO2xldCBmZWVUb3RhbD1hcGkuQmlnTnVtYmVyKDApLGFnZW50RmVlVG90YWw9YXBpLkJpZ051bWJlcigwKSxwYXltZW50VG90YWw9YXBpLkJpZ051bWJlcigwKSxzb2xkTmZ0cz1bXTtjb25zdCBzZWxsZXJzPVtdLHNlbGxlck1hcD17fTtmb3IobGV0IGk9MDtpPG9yZGVycy5sZW5ndGg7aSs9MSl7Y29uc3Qgb3JkZXI9b3JkZXJzW2ldLGZpbmFsUHJpY2U9YXBpLkJpZ051bWJlcihvcmRlci5wcmljZSksZmVlUGVyY2VudD1vcmRlci5mZWUvMWU0O2xldCBmaW5hbEZlZT1maW5hbFByaWNlLm11bHRpcGxpZWRCeShmZWVQZXJjZW50KS5kZWNpbWFsUGxhY2VzKHRva2VuLnByZWNpc2lvbik7ZmluYWxGZWUuZ3QoZmluYWxQcmljZSkmJihmaW5hbEZlZT1maW5hbFByaWNlKTtsZXQgZmluYWxQYXltZW50PWZpbmFsUHJpY2UubWludXMoZmluYWxGZWUpLmRlY2ltYWxQbGFjZXModG9rZW4ucHJlY2lzaW9uKTtmaW5hbFBheW1lbnQubHQoMCkmJihmaW5hbFBheW1lbnQ9YXBpLkJpZ051bWJlcigwKSkscGF5bWVudFRvdGFsPXBheW1lbnRUb3RhbC5wbHVzKGZpbmFsUGF5bWVudCksZmVlVG90YWw9ZmVlVG90YWwucGx1cyhmaW5hbEZlZSk7Y29uc3Qga2V5PShhY2NvdW50PW9yZGVyLmFjY291bnQsdHlwZT1vcmRlci5vd25lZEJ5LGFjY291bnQrIi0iK3R5cGUpLHNlbGxlckluZm89a2V5IGluIHNlbGxlck1hcD9zZWxsZXJNYXBba2V5XTp7YWNjb3VudDpvcmRlci5hY2NvdW50LG93bmVkQnk6b3JkZXIub3duZWRCeSxuZnRJZHM6W10scGF5bWVudFRvdGFsOmFwaS5CaWdOdW1iZXIoMCl9O3NlbGxlckluZm8ucGF5bWVudFRvdGFsPXNlbGxlckluZm8ucGF5bWVudFRvdGFsLnBsdXMoZmluYWxQYXltZW50KSxzZWxsZXJJbmZvLm5mdElkcy5wdXNoKG9yZGVyLm5mdElkKSxzZWxsZXJNYXBba2V5XT1zZWxsZXJJbmZvfWNvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7c3ltYm9sOnN5bWJvbH0pO2lmKHBhcmFtcyYmcGFyYW1zLm9mZmljaWFsTWFya2V0JiZ2b2lkIDAhPT1wYXJhbXMuYWdlbnRDdXQmJnBhcmFtcy5hZ2VudEN1dD4wJiZmZWVUb3RhbC5ndCgwKSl7Y29uc3QgYWdlbnRGZWVQZXJjZW50PXBhcmFtcy5hZ2VudEN1dC8xZTQ7YWdlbnRGZWVUb3RhbD1mZWVUb3RhbC5tdWx0aXBsaWVkQnkoYWdlbnRGZWVQZXJjZW50KS5kZWNpbWFsUGxhY2VzKHRva2VuLnByZWNpc2lvbiksYWdlbnRGZWVUb3RhbC5ndChmZWVUb3RhbCkmJihhZ2VudEZlZVRvdGFsPWFwaS5CaWdOdW1iZXIoZmVlVG90YWwpKSxmZWVUb3RhbD1mZWVUb3RhbC5taW51cyhhZ2VudEZlZVRvdGFsKS5kZWNpbWFsUGxhY2VzKHRva2VuLnByZWNpc2lvbiksZmVlVG90YWwubHQoMCkmJihmZWVUb3RhbD1hcGkuQmlnTnVtYmVyKDApKX1jb25zdCByZXF1aXJlZEJhbGFuY2U9cGF5bWVudFRvdGFsLnBsdXMoZmVlVG90YWwpLnBsdXMoYWdlbnRGZWVUb3RhbCkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24pO2lmKCFhcGkuYXNzZXJ0KHZvaWQgMD09PWV4cFByaWNlfHxhcGkuQmlnTnVtYmVyKGV4cFByaWNlKS5lcShyZXF1aXJlZEJhbGFuY2UpLGB0b3RhbCByZXF1aXJlZCBwYXltZW50ICR7cmVxdWlyZWRCYWxhbmNlfSAke3ByaWNlU3ltYm9sfSBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBhbW91bnRgKSlyZXR1cm47Y29uc3QgYnV5ZXJCYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOnByaWNlU3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQoYnV5ZXJCYWxhbmNlJiZhcGkuQmlnTnVtYmVyKGJ1eWVyQmFsYW5jZS5iYWxhbmNlKS5ndGUocmVxdWlyZWRCYWxhbmNlKSwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIGZvciBwYXltZW50IikpcmV0dXJuO3BheW1lbnRUb3RhbD1wYXltZW50VG90YWwudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24pO2NvbnN0IG9mZmljaWFsTWFya2V0QWNjb3VudD1wYXJhbXMmJnBhcmFtcy5vZmZpY2lhbE1hcmtldD9wYXJhbXMub2ZmaWNpYWxNYXJrZXQ6ZmluYWxNYXJrZXRBY2NvdW50O2xldCBpc01hcmtldEZlZVBhaWQ9ITE7aWYoZmVlVG90YWwuZ3QoMCkpe2lzTWFya2V0RmVlUGFpZD0hMCxmZWVUb3RhbD1mZWVUb3RhbC50b0ZpeGVkKHRva2VuLnByZWNpc2lvbik7Y29uc3QgcmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzpvZmZpY2lhbE1hcmtldEFjY291bnQsc3ltYm9sOnByaWNlU3ltYm9sLHF1YW50aXR5OmZlZVRvdGFsLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpZighYXBpLmFzc2VydChpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsYXBpLnNlbmRlcixvZmZpY2lhbE1hcmtldEFjY291bnQscHJpY2VTeW1ib2wsZmVlVG90YWwsInRyYW5zZmVyIiksInVuYWJsZSB0byB0cmFuc2ZlciBtYXJrZXQgZmVlcyIpKXJldHVybn1sZXQgaXNBZ2VudEZlZVBhaWQ9ITE7aWYoYWdlbnRGZWVUb3RhbC5ndCgwKSl7aXNBZ2VudEZlZVBhaWQ9ITAsYWdlbnRGZWVUb3RhbD1hZ2VudEZlZVRvdGFsLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uKTtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOmZpbmFsTWFya2V0QWNjb3VudCxzeW1ib2w6cHJpY2VTeW1ib2wscXVhbnRpdHk6YWdlbnRGZWVUb3RhbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGFwaS5zZW5kZXIsZmluYWxNYXJrZXRBY2NvdW50LHByaWNlU3ltYm9sLGFnZW50RmVlVG90YWwsInRyYW5zZmVyIiksInVuYWJsZSB0byB0cmFuc2ZlciBhZ2VudCBmZWVzIikpcmV0dXJufWZvcihjb25zdCBpbmZvIG9mIE9iamVjdC52YWx1ZXMoc2VsbGVyTWFwKSlpZihpbmZvLnBheW1lbnRUb3RhbC5ndCgwKSl7Y29uc3QgY29udHJhY3RBY3Rpb249InUiPT09aW5mby5vd25lZEJ5PyJ0cmFuc2ZlciI6InRyYW5zZmVyVG9Db250cmFjdCI7aW5mby5wYXltZW50VG90YWw9aW5mby5wYXltZW50VG90YWwudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24pO2NvbnN0IHJlcz1hd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsY29udHJhY3RBY3Rpb24se3RvOmluZm8uYWNjb3VudCxzeW1ib2w6cHJpY2VTeW1ib2wscXVhbnRpdHk6aW5mby5wYXltZW50VG90YWwsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pO2FwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGFwaS5zZW5kZXIsaW5mby5hY2NvdW50LHByaWNlU3ltYm9sLGluZm8ucGF5bWVudFRvdGFsLGNvbnRyYWN0QWN0aW9uKSwidW5hYmxlIHRvIHRyYW5zZmVyIHBheW1lbnQgdG8gIitpbmZvLmFjY291bnQpJiYoc29sZE5mdHM9c29sZE5mdHMuY29uY2F0KGluZm8ubmZ0SWRzKSxzZWxsZXJzLnB1c2goaW5mbykpfWVsc2Ugc29sZE5mdHM9c29sZE5mdHMuY29uY2F0KGluZm8ubmZ0SWRzKSxzZWxsZXJzLnB1c2goaW5mbyk7Y29uc3QgbmZ0QXJyYXk9W10sd3JhcHBlZE5mdHM9e3N5bWJvbDpzeW1ib2wsaWRzOnNvbGROZnRzfTtuZnRBcnJheS5wdXNoKHdyYXBwZWROZnRzKSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm5mdCIsInRyYW5zZmVyIix7ZnJvbVR5cGU6ImNvbnRyYWN0Iix0bzphcGkuc2VuZGVyLHRvVHlwZToidXNlciIsbmZ0czpuZnRBcnJheSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7Y29uc3QgZ3JvdXBpbmdNYXA9e30sc29sZFNldD1uZXcgU2V0KHNvbGROZnRzKTtmb3IobGV0IGk9MDtpPG9yZGVycy5sZW5ndGg7aSs9MSl7Y29uc3Qgb3JkZXI9b3JkZXJzW2ldO2lmKHNvbGRTZXQuaGFzKG9yZGVyLm5mdElkKSl7YXdhaXQgYXBpLmRiLnJlbW92ZShtYXJrZXRUYWJsZU5hbWUsb3JkZXIpO2NvbnN0IGtleT1tYWtlR3JvdXBpbmdLZXkob3JkZXIuZ3JvdXBpbmcsbmZ0Lmdyb3VwQnkpLGdyb3VwSW5mbz1rZXkgaW4gZ3JvdXBpbmdNYXA/Z3JvdXBpbmdNYXBba2V5XTp7Z3JvdXBpbmc6b3JkZXIuZ3JvdXBpbmcsaXNJbkNvbGxlY3Rpb246ITEsY291bnQ6MH07Z3JvdXBJbmZvLmNvdW50LT0xLGdyb3VwaW5nTWFwW2tleV09Z3JvdXBJbmZvfX1hd2FpdCB1cGRhdGVUcmFkZXNIaXN0b3J5KCJidXkiLGFwaS5zZW5kZXIsInUiLHNlbGxlcnMsc3ltYm9sLHByaWNlU3ltYm9sLHJlcXVpcmVkQmFsYW5jZSxpc01hcmtldEZlZVBhaWQsb2ZmaWNpYWxNYXJrZXRBY2NvdW50LGZlZVRvdGFsLGlzQWdlbnRGZWVQYWlkLGZpbmFsTWFya2V0QWNjb3VudCxhZ2VudEZlZVRvdGFsLHNvbGROZnRzLmxlbmd0aCk7Y29uc3QgYWNrUGFja2V0PXtzeW1ib2w6c3ltYm9sLHByaWNlU3ltYm9sOnByaWNlU3ltYm9sLGFjY291bnQ6YXBpLnNlbmRlcixvd25lZEJ5OiJ1IixzZWxsZXJzOnNlbGxlcnMscGF5bWVudFRvdGFsOnBheW1lbnRUb3RhbH07aXNNYXJrZXRGZWVQYWlkJiYoYWNrUGFja2V0Lm1hcmtldEFjY291bnQ9b2ZmaWNpYWxNYXJrZXRBY2NvdW50LGFja1BhY2tldC5mZWVUb3RhbD1mZWVUb3RhbCksaXNBZ2VudEZlZVBhaWQmJihhY2tQYWNrZXQuYWdlbnRBY2NvdW50PWZpbmFsTWFya2V0QWNjb3VudCxhY2tQYWNrZXQuYWdlbnRGZWVUb3RhbD1hZ2VudEZlZVRvdGFsKSxhcGkuZW1pdCgiaGl0U2VsbE9yZGVyIixhY2tQYWNrZXQpLGF3YWl0IHVwZGF0ZU9wZW5JbnRlcmVzdCgic2VsbCIsc3ltYm9sLHByaWNlU3ltYm9sLGdyb3VwaW5nTWFwLG5mdC5ncm91cEJ5KX19fXZhciBhY2NvdW50LHR5cGV9LGFjdGlvbnMuc2VsbD1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxuZnRzOm5mdHMscHJpY2U6cHJpY2UscHJpY2VTeW1ib2w6cHJpY2VTeW1ib2wsZmVlOmZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wsImludmFsaWQgcGFyYW1zIikpcmV0dXJuO2NvbnN0IG1hcmtldFRhYmxlTmFtZT1zeW1ib2wrInNlbGxCb29rIixpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyIsdGFibGVFeGlzdHM9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKG1hcmtldFRhYmxlTmFtZSk7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQobmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpJiZwcmljZVN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBwcmljZVN5bWJvbCYmcHJpY2UmJiJzdHJpbmciPT10eXBlb2YgcHJpY2UmJiFhcGkuQmlnTnVtYmVyKHByaWNlKS5pc05hTigpJiYibnVtYmVyIj09dHlwZW9mIGZlZSYmZmVlPj0wJiZmZWU8PTFlNCYmTnVtYmVyLmlzSW50ZWdlcihmZWUpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KG5mdHMubGVuZ3RoPD01MCwiY2Fubm90IHNlbGwgbW9yZSB0aGFuIDUwIE5GVCBpbnN0YW5jZXMgYXQgb25jZSIpJiZhcGkuYXNzZXJ0KHRhYmxlRXhpc3RzLCJtYXJrZXQgbm90IGVuYWJsZWQgZm9yIHN5bWJvbCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJuZnQiLCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KG5mdCYmbmZ0Lmdyb3VwQnkmJm5mdC5ncm91cEJ5Lmxlbmd0aD4wLCJtYXJrZXQgZ3JvdXBpbmcgbm90IHNldCIpKXJldHVybjtjb25zdCBwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse3N5bWJvbDpzeW1ib2x9KTtpZihwYXJhbXMmJnZvaWQgMCE9PXBhcmFtcy5taW5GZWUmJiFhcGkuYXNzZXJ0KGZlZT49cGFyYW1zLm1pbkZlZSwiZmVlIG11c3QgYmUgPj0gIitwYXJhbXMubWluRmVlKSlyZXR1cm47Y29uc3QgdG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cHJpY2VTeW1ib2x9KTtpZihhcGkuYXNzZXJ0KHRva2VuJiZhcGkuQmlnTnVtYmVyKHByaWNlKS5ndCgwKSYmY291bnREZWNpbWFscyhwcmljZSk8PXRva2VuLnByZWNpc2lvbiwiaW52YWxpZCBwcmljZSIpKXtjb25zdCBuZnRBcnJheT1bXSx3cmFwcGVkTmZ0cz17c3ltYm9sOnN5bWJvbCxpZHM6bmZ0c307bmZ0QXJyYXkucHVzaCh3cmFwcGVkTmZ0cyk7Y29uc3QgcmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibmZ0IiwidHJhbnNmZXIiLHtmcm9tVHlwZToidXNlciIsdG86Im5mdG1hcmtldCIsdG9UeXBlOiJjb250cmFjdCIsbmZ0czpuZnRBcnJheSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aWYocmVzLmV2ZW50cyl7Y29uc3QgdGltZXN0YW1wPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIikuZ2V0VGltZSgpLGZpbmFsUHJpY2U9YXBpLkJpZ051bWJlcihwcmljZSkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24pLG5mdEludGVnZXJJZExpc3Q9W10sb3JkZXJEYXRhTWFwPXt9O2ZvcihsZXQgaT0wO2k8cmVzLmV2ZW50cy5sZW5ndGg7aSs9MSl7Y29uc3QgZXY9cmVzLmV2ZW50c1tpXTtpZihldi5jb250cmFjdCYmZXYuZXZlbnQmJmV2LmRhdGEmJiJuZnQiPT09ZXYuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1ldi5ldmVudCYmZXYuZGF0YS5mcm9tPT09YXBpLnNlbmRlciYmInUiPT09ZXYuZGF0YS5mcm9tVHlwZSYmIm5mdG1hcmtldCI9PT1ldi5kYXRhLnRvJiYiYyI9PT1ldi5kYXRhLnRvVHlwZSYmZXYuZGF0YS5zeW1ib2w9PT1zeW1ib2wpe2NvbnN0IGluc3RhbmNlSWQ9ZXYuZGF0YS5pZCxvcmRlckRhdGE9e25mdElkOmluc3RhbmNlSWQsZ3JvdXBpbmc6e30sZ3JvdXBpbmdLZXk6IiJ9LGludGVnZXJJZD1hcGkuQmlnTnVtYmVyKGluc3RhbmNlSWQpLnRvTnVtYmVyKCk7bmZ0SW50ZWdlcklkTGlzdC5wdXNoKGludGVnZXJJZCksb3JkZXJEYXRhTWFwW2ludGVnZXJJZF09b3JkZXJEYXRhfX1jb25zdCBpbnN0YW5jZXM9YXdhaXQgYXBpLmRiLmZpbmRJblRhYmxlKCJuZnQiLGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6eyRpbjpuZnRJbnRlZ2VySWRMaXN0fX0sNTAsMCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBqPTA7ajxpbnN0YW5jZXMubGVuZ3RoO2orPTEpe2NvbnN0IGluc3RhbmNlPWluc3RhbmNlc1tqXSxncm91cGluZz17fTtsZXQgZ3JvdXBpbmdLZXk9IiI7bmZ0Lmdyb3VwQnkuZm9yRWFjaChuYW1lPT57dm9pZCAwIT09aW5zdGFuY2UucHJvcGVydGllc1tuYW1lXSYmbnVsbCE9PWluc3RhbmNlLnByb3BlcnRpZXNbbmFtZV0/Z3JvdXBpbmdbbmFtZV09aW5zdGFuY2UucHJvcGVydGllc1tuYW1lXS50b1N0cmluZygpOmdyb3VwaW5nW25hbWVdPSIiLGdyb3VwaW5nS2V5PWdyb3VwaW5nS2V5KyI6IituYW1lKyI6Iitncm91cGluZ1tuYW1lXX0pLG9yZGVyRGF0YU1hcFtpbnN0YW5jZS5faWRdLmdyb3VwaW5nPWdyb3VwaW5nLG9yZGVyRGF0YU1hcFtpbnN0YW5jZS5faWRdLmdyb3VwaW5nS2V5PWdyb3VwaW5nS2V5fWNvbnN0IGdyb3VwaW5nTWFwPXt9O2ZvcihsZXQgaz0wO2s8bmZ0SW50ZWdlcklkTGlzdC5sZW5ndGg7ays9MSl7Y29uc3Qgb3JkZXJJbmZvPW9yZGVyRGF0YU1hcFtuZnRJbnRlZ2VySWRMaXN0W2tdXSxvcmRlcj17YWNjb3VudDphcGkuc2VuZGVyLG93bmVkQnk6InUiLG5mdElkOm9yZGVySW5mby5uZnRJZCxncm91cGluZzpvcmRlckluZm8uZ3JvdXBpbmcsdGltZXN0YW1wOnRpbWVzdGFtcCxwcmljZTpmaW5hbFByaWNlLHByaWNlRGVjOnskbnVtYmVyRGVjaW1hbDpmaW5hbFByaWNlfSxwcmljZVN5bWJvbDpwcmljZVN5bWJvbCxmZWU6ZmVlfSxyZXN1bHQ9YXdhaXQgYXBpLmRiLmluc2VydChtYXJrZXRUYWJsZU5hbWUsb3JkZXIpO2FwaS5lbWl0KCJzZWxsT3JkZXIiLHthY2NvdW50Om9yZGVyLmFjY291bnQsb3duZWRCeTpvcmRlci5vd25lZEJ5LHN5bWJvbDpzeW1ib2wsbmZ0SWQ6b3JkZXIubmZ0SWQsdGltZXN0YW1wOnRpbWVzdGFtcCxwcmljZTpvcmRlci5wcmljZSxwcmljZVN5bWJvbDpvcmRlci5wcmljZVN5bWJvbCxmZWU6ZmVlLG9yZGVySWQ6cmVzdWx0Ll9pZH0pO2NvbnN0IGdyb3VwSW5mbz1vcmRlckluZm8uZ3JvdXBpbmdLZXkgaW4gZ3JvdXBpbmdNYXA/Z3JvdXBpbmdNYXBbb3JkZXJJbmZvLmdyb3VwaW5nS2V5XTp7Z3JvdXBpbmc6b3JkZXJJbmZvLmdyb3VwaW5nLGlzSW5Db2xsZWN0aW9uOiExLGNvdW50OjB9O2dyb3VwSW5mby5jb3VudCs9MSxncm91cGluZ01hcFtvcmRlckluZm8uZ3JvdXBpbmdLZXldPWdyb3VwSW5mb31hd2FpdCB1cGRhdGVPcGVuSW50ZXJlc3QoInNlbGwiLHN5bWJvbCxwcmljZVN5bWJvbCxncm91cGluZ01hcCxuZnQuZ3JvdXBCeSl9fX19Ow=="}}}