{ "id": "ssc-testnet-hive", "json": { "contractName":"contract", "contractAction":"update", "contractPayload":{ "name": "nft", "params": "", "code": "Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntpZighMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygibmZ0cyIpKXthd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoIm5mdHMiLFsic3ltYm9sIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicGFyYW1zIiksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsWyJzeW1ib2wiLCJjb21wbGV0ZVRpbWVzdGFtcCJdKTtjb25zdCBwYXJhbXM9e25mdENyZWF0aW9uRmVlOiIxMDAiLG5mdElzc3VhbmNlRmVlOnsiQkVFIjoiMC4wMDEiLFBBTDoiMC4wMDEifSxkYXRhUHJvcGVydHlDcmVhdGlvbkZlZToiMTAwIixlbmFibGVEZWxlZ2F0aW9uRmVlOiIxMDAwIn07YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZW5hYmxlRGVsZWdhdGlvbkZlZT0+e2lmKGFwaS5zZW5kZXI9PT1hcGkub3duZXIpe3ZhcntuZnRDcmVhdGlvbkZlZSxuZnRJc3N1YW5jZUZlZSxkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSxlbmFibGVEZWxlZ2F0aW9uRmVlfT1lbmFibGVEZWxlZ2F0aW9uRmVlO2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7bmZ0Q3JlYXRpb25GZWUmJiJzdHJpbmciPT10eXBlb2YgbmZ0Q3JlYXRpb25GZWUmJiFhcGkuQmlnTnVtYmVyKG5mdENyZWF0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG5mdENyZWF0aW9uRmVlKS5ndGUoMCkmJihwYXJhbXMubmZ0Q3JlYXRpb25GZWU9bmZ0Q3JlYXRpb25GZWUpLG5mdElzc3VhbmNlRmVlJiYib2JqZWN0Ij09dHlwZW9mIG5mdElzc3VhbmNlRmVlJiYocGFyYW1zLm5mdElzc3VhbmNlRmVlPW5mdElzc3VhbmNlRmVlKSxkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSYmInN0cmluZyI9PXR5cGVvZiBkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSYmIWFwaS5CaWdOdW1iZXIoZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUpLmd0ZSgwKSYmKHBhcmFtcy5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1kYXRhUHJvcGVydHlDcmVhdGlvbkZlZSksZW5hYmxlRGVsZWdhdGlvbkZlZSYmInN0cmluZyI9PXR5cGVvZiBlbmFibGVEZWxlZ2F0aW9uRmVlJiYhYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGVuYWJsZURlbGVnYXRpb25GZWUpLmd0ZSgwKSYmKHBhcmFtcy5lbmFibGVEZWxlZ2F0aW9uRmVlPWVuYWJsZURlbGVnYXRpb25GZWUpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscGFyYW1zKX19O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShyZXN1bHQsZnJvbSx0byxzeW1ib2wscXVhbnRpdHksZXZlbnRTdHIpPT4hKHZvaWQgMCE9PXJlc3VsdC5lcnJvcnN8fCFyZXN1bHQuZXZlbnRzfHx2b2lkIDA9PT1yZXN1bHQuZXZlbnRzLmZpbmQoZWw9PiJ0b2tlbnMiPT09ZWwuY29udHJhY3QmJmVsLmV2ZW50PT09ZXZlbnRTdHImJmVsLmRhdGEuZnJvbT09PWZyb20mJmVsLmRhdGEudG89PT10byYmZWwuZGF0YS5xdWFudGl0eT09PXF1YW50aXR5JiZlbC5kYXRhLnN5bWJvbD09PXN5bWJvbCkpLGNhbGN1bGF0ZUJhbGFuY2U9KGJhbGFuY2UscXVhbnRpdHkscHJlY2lzaW9uLGFkZCk9PihhZGQ/YXBpLkJpZ051bWJlcihiYWxhbmNlKS5wbHVzKHF1YW50aXR5KTphcGkuQmlnTnVtYmVyKGJhbGFuY2UpLm1pbnVzKHF1YW50aXR5KSkudG9GaXhlZChwcmVjaXNpb24pLGNvdW50RGVjaW1hbHM9dmFsdWU9PmFwaS5CaWdOdW1iZXIodmFsdWUpLmRwKCksY29udGFpbnNEdXBsaWNhdGVzPWFycj0+bmV3IFNldChhcnIpLnNpemUhPT1hcnIubGVuZ3RoLGlzVmFsaWRIaXZlQWNjb3VudExlbmd0aD1hY2NvdW50PT4zPD1hY2NvdW50Lmxlbmd0aCYmYWNjb3VudC5sZW5ndGg8PTE2LGlzVmFsaWRDb250cmFjdExlbmd0aD1jb250cmFjdD0+Mzw9Y29udHJhY3QubGVuZ3RoJiZjb250cmFjdC5sZW5ndGg8PTUwLGlzVmFsaWRBY2NvdW50c0FycmF5PWFycj0+e2xldCB2YWxpZENvbnRlbnRzPSEwO3JldHVybiBhcnIuZm9yRWFjaChhY2NvdW50PT57InN0cmluZyI9PXR5cGVvZiBhY2NvdW50JiZpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoYWNjb3VudCl8fCh2YWxpZENvbnRlbnRzPSExKX0pLHZhbGlkQ29udGVudHN9LGlzVmFsaWRDb250cmFjdHNBcnJheT1hcnI9PntsZXQgdmFsaWRDb250ZW50cz0hMDtyZXR1cm4gYXJyLmZvckVhY2goY29udHJhY3Q9Pnsic3RyaW5nIj09dHlwZW9mIGNvbnRyYWN0JiZpc1ZhbGlkQ29udHJhY3RMZW5ndGgoY29udHJhY3QpfHwodmFsaWRDb250ZW50cz0hMSl9KSx2YWxpZENvbnRlbnRzfSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGZyb20sZnJvbVR5cGUsbmZ0LHByb3BlcnRpZXMpPT57dmFyIG5hbWUsZGF0YSxwcm9wZXJ0eUNvdW50PU9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmxlbmd0aCxuZnRQcm9wZXJ0eUNvdW50PU9iamVjdC5rZXlzKG5mdC5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQocHJvcGVydHlDb3VudDw9bmZ0UHJvcGVydHlDb3VudCwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IoW25hbWUsZGF0YV1vZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKSl7bGV0IHZhbGlkQ29udGVudHM9ITE7aWYoYXBpLmFzc2VydChuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUmJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobmFtZSkmJjA8bmFtZS5sZW5ndGgmJm5hbWUubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChuYW1lIGluIG5mdC5wcm9wZXJ0aWVzLCJkYXRhIHByb3BlcnR5IG11c3QgZXhpc3QiKSl7Y29uc3QgcHJvcGVydHlTY2hlbWE9bmZ0LnByb3BlcnRpZXNbbmFtZV07YXBpLmFzc2VydCh2b2lkIDAhPT1kYXRhJiZudWxsIT09ZGF0YSYmKHR5cGVvZiBkYXRhPT09cHJvcGVydHlTY2hlbWEudHlwZXx8Im51bWJlciI9PT1wcm9wZXJ0eVNjaGVtYS50eXBlJiYic3RyaW5nIj09dHlwZW9mIGRhdGEmJiFhcGkuQmlnTnVtYmVyKGRhdGEpLmlzTmFOKCkpLGBkYXRhIHByb3BlcnR5IHR5cGUgbWlzbWF0Y2g6IGV4cGVjdGVkICR7cHJvcGVydHlTY2hlbWEudHlwZX0gYnV0IGdvdCAke3R5cGVvZiBkYXRhfSBmb3IgcHJvcGVydHkgYCtuYW1lKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIGRhdGF8fGRhdGEubGVuZ3RoPD1NQVhfREFUQV9QUk9QRVJUWV9MRU5HVEgsYHN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzICR7TUFYX0RBVEFfUFJPUEVSVFlfTEVOR1RIfSBjaGFyYWN0ZXJzYCkmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PWZyb21UeXBlJiZwcm9wZXJ0eVNjaGVtYS5hdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cy5pbmNsdWRlcyhmcm9tKXx8InVzZXIiPT09ZnJvbVR5cGUmJnByb3BlcnR5U2NoZW1hLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMuaW5jbHVkZXMoZnJvbSksIm5vdCBhbGxvd2VkIHRvIHNldCBkYXRhIHByb3BlcnRpZXMiKSYmKHZhbGlkQ29udGVudHM9ITAsIm51bWJlciI9PT1wcm9wZXJ0eVNjaGVtYS50eXBlJiYic3RyaW5nIj09dHlwZW9mIGRhdGEmJihwcm9wZXJ0aWVzW25hbWVdPWFwaS5CaWdOdW1iZXIoZGF0YSkudG9OdW1iZXIoKSkpfWlmKCF2YWxpZENvbnRlbnRzKXJldHVybiExfXJldHVybiEwfSxpc1ZhbGlkRGF0YVByb3BlcnRpZXNBcnJheT0oZnJvbSxmcm9tVHlwZSxuZnQsYXJyKT0+e3RyeXtmb3IobGV0IGk9MDtpPGFyci5sZW5ndGg7aSs9MSl7bGV0IHZhbGlkQ29udGVudHM9ITE7dmFye2lkLHByb3BlcnRpZXN9PWFycltpXTtpZihhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiYhYXBpLkJpZ051bWJlcihpZCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihpZCkuZ3QoMCkmJnByb3BlcnRpZXMmJiJvYmplY3QiPT10eXBlb2YgcHJvcGVydGllcywiaW52YWxpZCBkYXRhIHByb3BlcnRpZXMiKSYmaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGZyb20sZnJvbVR5cGUsbmZ0LHByb3BlcnRpZXMpJiYodmFsaWRDb250ZW50cz0hMCksIXZhbGlkQ29udGVudHMpcmV0dXJuITF9fWNhdGNoKGUpe3JldHVybiExfXJldHVybiEwfSxpc1ZhbGlkTmZ0SWRBcnJheT1hcnI9Pnt0cnl7bGV0IGluc3RhbmNlQ291bnQ9MDtmb3IobGV0IGk9MDtpPGFyci5sZW5ndGg7aSs9MSl7bGV0IHZhbGlkQ29udGVudHM9ITE7dmFye3N5bWJvbCxpZHN9PWFycltpXTtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJmFwaS52YWxpZGF0b3IuaXNBbHBoYShzeW1ib2wpJiZhcGkudmFsaWRhdG9yLmlzVXBwZXJjYXNlKHN5bWJvbCkmJjA8c3ltYm9sLmxlbmd0aCYmc3ltYm9sLmxlbmd0aDw9TUFYX1NZTUJPTF9MRU5HVEgmJmlkcyYmIm9iamVjdCI9PXR5cGVvZiBpZHMmJkFycmF5LmlzQXJyYXkoaWRzKSwiaW52YWxpZCBuZnQgbGlzdCIpJiYoaW5zdGFuY2VDb3VudCs9aWRzLmxlbmd0aCxhcGkuYXNzZXJ0KGluc3RhbmNlQ291bnQ8PU1BWF9OVU1fTkZUU19PUEVSQUJMRSxgY2Fubm90IG9wZXJhdGUgb24gbW9yZSB0aGFuICR7TUFYX05VTV9ORlRTX09QRVJBQkxFfSBORlQgaW5zdGFuY2VzIGF0IG9uY2VgKSkpe2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXt2YXIgaWQ9aWRzW2pdO2lmKCFhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiYhYXBpLkJpZ051bWJlcihpZCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihpZCkuZ3QoMCksImludmFsaWQgbmZ0IGxpc3QiKSlyZXR1cm4hMX12YWxpZENvbnRlbnRzPSEwfWlmKCF2YWxpZENvbnRlbnRzKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZFRva2VuQmFza2V0PWFzeW5jKGJhc2tldCxiYWxhbmNlVGFibGVOYW1lLGFjY291bnROYW1lLGZlZVN5bWJvbCxmZWVRdWFudGl0eSk9Pnt0cnl7dmFyIHN5bWJvbCxxdWFudGl0eSx0b2tlbixmaW5hbFF1YW50aXR5LGJhc2tldFRva2VuQmFsYW5jZTtpZihPYmplY3Qua2V5cyhiYXNrZXQpLmxlbmd0aD5NQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUylyZXR1cm4hMTtmb3IoW3N5bWJvbCxxdWFudGl0eV1vZiBPYmplY3QuZW50cmllcyhiYXNrZXQpKXtsZXQgdmFsaWRDb250ZW50cz0hMTtpZigic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYXBpLnZhbGlkYXRvci5pc0FscGhhKHN5bWJvbCkmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2Uoc3ltYm9sKSYmMDxzeW1ib2wubGVuZ3RoJiZzeW1ib2wubGVuZ3RoPD1NQVhfU1lNQk9MX0xFTkdUSCYmKCh0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KSkmJnF1YW50aXR5JiYic3RyaW5nIj09dHlwZW9mIHF1YW50aXR5JiYhYXBpLkJpZ051bWJlcihxdWFudGl0eSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihxdWFudGl0eSkuZ3QoMCkmJmNvdW50RGVjaW1hbHMocXVhbnRpdHkpPD10b2tlbi5wcmVjaXNpb24mJihmaW5hbFF1YW50aXR5PXN5bWJvbD09PWZlZVN5bWJvbD9jYWxjdWxhdGVCYWxhbmNlKHF1YW50aXR5LGZlZVF1YW50aXR5LHRva2VuLnByZWNpc2lvbiwhMCk6cXVhbnRpdHksKGJhc2tldFRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsYmFsYW5jZVRhYmxlTmFtZSx7YWNjb3VudDphY2NvdW50TmFtZSxzeW1ib2w6c3ltYm9sfSkpJiZhcGkuQmlnTnVtYmVyKGJhc2tldFRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUoZmluYWxRdWFudGl0eSkmJih2YWxpZENvbnRlbnRzPSEwKSkpLCF2YWxpZENvbnRlbnRzKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0sdHJhbnNmZXJBbmRWZXJpZnlOZnRzPWFzeW5jKGZyb20sZnJvbVR5cGUsdG8sdG9UeXBlLG5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm8pPT57Y29uc3QgcmVzdWx0cz17c3VjY2VzczpbXSxmYWlsOltdfTt2YXIgZmluYWxGcm9tVHlwZT0idXNlciI9PT1mcm9tVHlwZT8idSI6ImMiLGZpbmFsVG9UeXBlPSJ1c2VyIj09PXRvVHlwZT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsbmZ0czpuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfSk7dmFyIGxvZ3M9YXBpLmxvZ3MoKTtjb25zdCB0b2tlbk1hcD17fSxjb3VudGVkTWFwPXt9O2lmKGxvZ3MuZXZlbnRzKWZvcihsZXQgaT0wO2k8bG9ncy5ldmVudHMubGVuZ3RoO2krPTEpe3ZhciBrZXk9bG9ncy5ldmVudHNbaV07a2V5LmNvbnRyYWN0JiZrZXkuZXZlbnQmJmtleS5kYXRhJiYibmZ0Ij09PWtleS5jb250cmFjdCYmInRyYW5zZmVyIj09PWtleS5ldmVudCYma2V5LmRhdGEuZnJvbT09PWZyb20mJmtleS5kYXRhLmZyb21UeXBlPT09ZmluYWxGcm9tVHlwZSYma2V5LmRhdGEudG89PT10byYma2V5LmRhdGEudG9UeXBlPT09ZmluYWxUb1R5cGUmJihrZXk9a2V5LmRhdGEuc3ltYm9sKyItIitrZXkuZGF0YS5pZCx0b2tlbk1hcFtrZXldPTEpfWZvcihsZXQgaW5kZXg9MDtpbmRleDxuZnRzLmxlbmd0aDtpbmRleCs9MSl7Y29uc3R7c3ltYm9sLGlkc309bmZ0c1tpbmRleF0sc3VjY2Vzcz1bXSxmYWlsPVtdO2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXt2YXIgaW5wdXRLZXk9c3ltYm9sKyItIitpZHNbal07aW5wdXRLZXkgaW4gY291bnRlZE1hcHx8KChpbnB1dEtleSBpbiB0b2tlbk1hcD9zdWNjZXNzOmZhaWwpLnB1c2goaWRzW2pdLnRvU3RyaW5nKCkpLGNvdW50ZWRNYXBbaW5wdXRLZXldPTEpfTA8c3VjY2Vzcy5sZW5ndGgmJnJlc3VsdHMuc3VjY2Vzcy5wdXNoKHtzeW1ib2w6c3ltYm9sLGlkczpzdWNjZXNzfSksMDxmYWlsLmxlbmd0aCYmcmVzdWx0cy5mYWlsLnB1c2goe3N5bWJvbDpzeW1ib2wsaWRzOmZhaWx9KX1yZXR1cm4gcmVzdWx0c307YWN0aW9ucy51cGRhdGVVcmw9YXN5bmMgc3ltYm9sPT57dmFye3VybCxzeW1ib2x9PXN5bWJvbDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJnVybCYmInN0cmluZyI9PXR5cGVvZiB1cmwsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodXJsLmxlbmd0aDw9MjU1LCJpbnZhbGlkIHVybDogbWF4IGxlbmd0aCBvZiAyNTUiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2NvbnN0IG1ldGFkYXRhPUpTT04ucGFyc2UobmZ0Lm1ldGFkYXRhKTthcGkuYXNzZXJ0KG1ldGFkYXRhJiZtZXRhZGF0YS51cmwsImFuIGVycm9yIG9jY3VyZWQgd2hlbiB0cnlpbmcgdG8gdXBkYXRlIHRoZSB1cmwiKSYmKG1ldGFkYXRhLnVybD11cmwsbmZ0Lm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX1jYXRjaChlKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBzeW1ib2w9Pnt2YXJ7bWV0YWRhdGEsc3ltYm9sfT1zeW1ib2w7aWYoYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZtZXRhZGF0YSYmIm9iamVjdCI9PXR5cGVvZiBtZXRhZGF0YSwiaW52YWxpZCBwYXJhbXMiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e3ZhciBmaW5hbE1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKTthcGkuYXNzZXJ0KGZpbmFsTWV0YWRhdGEubGVuZ3RoPD0xZTMsImludmFsaWQgbWV0YWRhdGE6IG1heCBsZW5ndGggb2YgMTAwMCIpJiYobmZ0Lm1ldGFkYXRhPWZpbmFsTWV0YWRhdGEsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9Y2F0Y2goZSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBzeW1ib2w9Pnt2YXJ7bmFtZSxzeW1ib2x9PXN5bWJvbDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG5hbWUsIiAiKSkmJjA8bmFtZS5sZW5ndGgmJm5hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYobmZ0Lm5hbWU9bmFtZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBzeW1ib2w9Pnt2YXJ7b3JnTmFtZSxzeW1ib2x9PXN5bWJvbDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm9yZ05hbWUmJiJzdHJpbmciPT10eXBlb2Ygb3JnTmFtZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG9yZ05hbWUsIiAiKSkmJjA8b3JnTmFtZS5sZW5ndGgmJm9yZ05hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7bmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKG5mdC5vcmdOYW1lPW9yZ05hbWUsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIHN5bWJvbD0+e3Zhcntwcm9kdWN0TmFtZSxzeW1ib2x9PXN5bWJvbDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJnByb2R1Y3ROYW1lJiYic3RyaW5nIj09dHlwZW9mIHByb2R1Y3ROYW1lLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QocHJvZHVjdE5hbWUsIiAiKSkmJjA8cHJvZHVjdE5hbWUubGVuZ3RoJiZwcm9kdWN0TmFtZS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7bmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKG5mdC5wcm9kdWN0TmFtZT1wcm9kdWN0TmFtZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBmaW5hbEFjY291bnRMaXN0PT57Y29uc3R7YWNjb3VudHMsc3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09ZmluYWxBY2NvdW50TGlzdDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZhY2NvdW50cyYmIm9iamVjdCI9PXR5cGVvZiBhY2NvdW50cyYmQXJyYXkuaXNBcnJheShhY2NvdW50cyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYWNjb3VudHMubGVuZ3RoPD1NQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUyxgY2Fubm90IGhhdmUgbW9yZSB0aGFuICR7TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlN9IGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50c2ApKXt2YXIgZmluYWxBY2NvdW50TGlzdD1pc1ZhbGlkQWNjb3VudHNBcnJheShhY2NvdW50cyk7aWYoYXBpLmFzc2VydChmaW5hbEFjY291bnRMaXN0LCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXtjb25zdCBzYW5pdGl6ZWRMaXN0PVtdO2FjY291bnRzLmZvckVhY2goYWNjb3VudD0+e3ZhciBmaW5hbEFjY291bnQ9YWNjb3VudC50cmltKCkudG9Mb3dlckNhc2UoKTtsZXQgaXNEdXBsaWNhdGU9ITE7Zm9yKGxldCBpPTA7aTxuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7aSs9MSlpZihmaW5hbEFjY291bnQ9PT1uZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50c1tpXSl7aXNEdXBsaWNhdGU9ITA7YnJlYWt9aXNEdXBsaWNhdGV8fHNhbml0aXplZExpc3QucHVzaChmaW5hbEFjY291bnQpfSksYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhzYW5pdGl6ZWRMaXN0KSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQobmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3Nhbml0aXplZExpc3QubGVuZ3RoPD1NQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUyxgY2Fubm90IGhhdmUgbW9yZSB0aGFuICR7TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlN9IGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50c2ApJiYoZmluYWxBY2NvdW50TGlzdD1uZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5jb25jYXQoc2FuaXRpemVkTGlzdCksbmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9ZmluYWxBY2NvdW50TGlzdCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBmaW5hbENvbnRyYWN0TGlzdD0+e2NvbnN0e2NvbnRyYWN0cyxzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5fT1maW5hbENvbnRyYWN0TGlzdDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZjb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgY29udHJhY3RzJiZBcnJheS5pc0FycmF5KGNvbnRyYWN0cyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoY29udHJhY3RzLmxlbmd0aDw9TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlMsYGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAke01BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTfSBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzYCkpe3ZhciBmaW5hbENvbnRyYWN0TGlzdD1pc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKTtpZihhcGkuYXNzZXJ0KGZpbmFsQ29udHJhY3RMaXN0LCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCl7Y29uc3Qgc2FuaXRpemVkTGlzdD1bXTtjb250cmFjdHMuZm9yRWFjaChjb250cmFjdD0+e3ZhciBmaW5hbENvbnRyYWN0PWNvbnRyYWN0LnRyaW0oKTtsZXQgaXNEdXBsaWNhdGU9ITE7Zm9yKGxldCBpPTA7aTxuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoO2krPTEpaWYoZmluYWxDb250cmFjdD09PW5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1tpXSl7aXNEdXBsaWNhdGU9ITA7YnJlYWt9aXNEdXBsaWNhdGV8fHNhbml0aXplZExpc3QucHVzaChmaW5hbENvbnRyYWN0KX0pLGFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMoc2FuaXRpemVkTGlzdCksImNhbm5vdCBhZGQgdGhlIHNhbWUgY29udHJhY3QgdHdpY2UiKSYmYXBpLmFzc2VydChuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3Nhbml0aXplZExpc3QubGVuZ3RoPD1NQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUyxgY2Fubm90IGhhdmUgbW9yZSB0aGFuICR7TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlN9IGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHNgKSYmKGZpbmFsQ29udHJhY3RMaXN0PW5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQoc2FuaXRpemVkTGlzdCksbmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzPWZpbmFsQ29udHJhY3RMaXN0LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX19fSxhY3Rpb25zLnJlbW92ZUF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9YXN5bmMgZmluYWxBY2NvdW50TGlzdD0+e2NvbnN0e2FjY291bnRzLHN5bWJvbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXl9PWZpbmFsQWNjb3VudExpc3Q7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYWNjb3VudHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFjY291bnRzLmxlbmd0aDw9TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlMsYGNhbm5vdCByZW1vdmUgbW9yZSB0aGFuICR7TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlN9IGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50c2ApKXt2YXIgZmluYWxBY2NvdW50TGlzdD1pc1ZhbGlkQWNjb3VudHNBcnJheShhY2NvdW50cyk7aWYoYXBpLmFzc2VydChmaW5hbEFjY291bnRMaXN0LCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7bmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGZpbmFsQWNjb3VudExpc3Q9bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGN1cnJlbnRWYWx1ZT0+e2ZvcihsZXQgaT0wO2k8YWNjb3VudHMubGVuZ3RoO2krPTEpaWYoY3VycmVudFZhbHVlPT09YWNjb3VudHNbaV0udHJpbSgpLnRvTG93ZXJDYXNlKCkpcmV0dXJuITE7cmV0dXJuITB9KSxuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1maW5hbEFjY291bnRMaXN0LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX19LGFjdGlvbnMucmVtb3ZlQXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM9YXN5bmMgZmluYWxDb250cmFjdExpc3Q9Pntjb25zdHtjb250cmFjdHMsc3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09ZmluYWxDb250cmFjdExpc3Q7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmY29udHJhY3RzJiYib2JqZWN0Ij09dHlwZW9mIGNvbnRyYWN0cyYmQXJyYXkuaXNBcnJheShjb250cmFjdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGNvbnRyYWN0cy5sZW5ndGg8PU1BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTLGBjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAke01BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTfSBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzYCkpe3ZhciBmaW5hbENvbnRyYWN0TGlzdD1pc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKTtpZihhcGkuYXNzZXJ0KGZpbmFsQ29udHJhY3RMaXN0LCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO25mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihmaW5hbENvbnRyYWN0TGlzdD1uZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGN1cnJlbnRWYWx1ZT0+e2ZvcihsZXQgaT0wO2k8Y29udHJhY3RzLmxlbmd0aDtpKz0xKWlmKGN1cnJlbnRWYWx1ZT09PWNvbnRyYWN0c1tpXS50cmltKCkpcmV0dXJuITE7cmV0dXJuITB9KSxuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM9ZmluYWxDb250cmFjdExpc3QsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9fX0sYWN0aW9ucy50cmFuc2Zlck93bmVyc2hpcD1hc3luYyBmaW5hbFRvPT57Y29uc3R7c3ltYm9sLHRvLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09ZmluYWxUbztpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZ0byYmInN0cmluZyI9PXR5cGVvZiB0bywiaW52YWxpZCBwYXJhbXMiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO25mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihmaW5hbFRvPXRvLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGFwaS5hc3NlcnQoaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGZpbmFsVG8pLCJpbnZhbGlkIHRvIikmJihuZnQuaXNzdWVyPWZpbmFsVG8sYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSkpfX0sYWN0aW9ucy5lbmFibGVEZWxlZ2F0aW9uPWFzeW5jIGF1dGhvcml6ZWQ9Pnt2YXJ7c3ltYm9sLHVuZGVsZWdhdGlvbkNvb2xkb3duLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyZXN9PWF1dGhvcml6ZWQsZW5hYmxlRGVsZWdhdGlvbkZlZT0oYXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pKVsiZW5hYmxlRGVsZWdhdGlvbkZlZSJdLGF1dGhvcml6ZWQ9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0x9KSxhdXRob3JpemVkPSEhYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5sdGUoMCl8fGF1dGhvcml6ZWQmJmFwaS5CaWdOdW1iZXIoYXV0aG9yaXplZC5iYWxhbmNlKS5ndGUoZW5hYmxlRGVsZWdhdGlvbkZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgZmVlcyIpJiZhcGkuYXNzZXJ0KCEwPT09cmVzLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sLCJpbnZhbGlkIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KHVuZGVsZWdhdGlvbkNvb2xkb3duJiZOdW1iZXIuaXNJbnRlZ2VyKHVuZGVsZWdhdGlvbkNvb2xkb3duKSYmMDx1bmRlbGVnYXRpb25Db29sZG93biYmdW5kZWxlZ2F0aW9uQ29vbGRvd248PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoYXBpLmFzc2VydChudWxsIT09bmZ0LCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bmZ0LmRlbGVnYXRpb25FbmFibGVkfHwhMT09PW5mdC5kZWxlZ2F0aW9uRW5hYmxlZCwiZGVsZWdhdGlvbiBhbHJlYWR5IGVuYWJsZWQiKSl7aWYoYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5ndCgwKSl7cmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MLHF1YW50aXR5OmVuYWJsZURlbGVnYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnJlc30pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsYXBpLnNlbmRlciwibnVsbCIsVVRJTElUWV9UT0tFTl9TWU1CT0wsZW5hYmxlRGVsZWdhdGlvbkZlZSwidHJhbnNmZXIiKSlyZXR1cm4hMX1yZXR1cm4gbmZ0LmRlbGVnYXRpb25FbmFibGVkPSEwLG5mdC51bmRlbGVnYXRpb25Db29sZG93bj11bmRlbGVnYXRpb25Db29sZG93bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy51cGRhdGVQcm9wZXJ0eURlZmluaXRpb249YXN5bmMgb3JpZ2luYWxUeXBlPT57dmFye3N5bWJvbCxuYW1lLG5ld05hbWUsdHlwZSxpc1JlYWRPbmx5LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpvcmlnaW5hbElzUmVhZE9ubHl9PW9yaWdpbmFsVHlwZTtpZihhcGkuYXNzZXJ0KCEwPT09b3JpZ2luYWxJc1JlYWRPbmx5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhuYW1lKSYmMDxuYW1lLmxlbmd0aCYmbmFtZS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1uZXdOYW1lfHwic3RyaW5nIj09dHlwZW9mIG5ld05hbWUmJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobmV3TmFtZSkmJjA8bmV3TmFtZS5sZW5ndGgmJm5ld05hbWUubGVuZ3RoPD0yNSwiaW52YWxpZCBuZXcgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXR5cGV8fCJzdHJpbmciPT10eXBlb2YgdHlwZSYmKCJudW1iZXIiPT09dHlwZXx8InN0cmluZyI9PT10eXBlfHwiYm9vbGVhbiI9PT10eXBlKSwiaW52YWxpZCB0eXBlOiBtdXN0IGJlIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuIikmJmFwaS5hc3NlcnQodm9pZCAwPT09aXNSZWFkT25seXx8ImJvb2xlYW4iPT10eXBlb2YgaXNSZWFkT25seSwiaW52YWxpZCBpc1JlYWRPbmx5OiBtdXN0IGJlIHRydWUgb3IgZmFsc2UiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCgwPT09bmZ0LnN1cHBseSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IGRlZmluaXRpb247IHRva2VucyBhbHJlYWR5IGlzc3VlZCIpJiZhcGkuYXNzZXJ0KG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PW5ld05hbWUpe2lmKHZvaWQgMCE9PW5mdC5ncm91cEJ5JiYwPG5mdC5ncm91cEJ5Lmxlbmd0aCYmIWFwaS5hc3NlcnQoIW5mdC5ncm91cEJ5LmluY2x1ZGVzKG5hbWUpLCJjYW5ub3QgY2hhbmdlIGRhdGEgcHJvcGVydHkgbmFtZTsgcHJvcGVydHkgaXMgcGFydCBvZiBncm91cEJ5IikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQobmV3TmFtZSE9PW5hbWUsIm5ldyBuYW1lIG11c3QgYmUgZGlmZmVyZW50IGZyb20gb2xkIG5hbWUiKXx8IWFwaS5hc3NlcnQoIShuZXdOYW1lIGluIG5mdC5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSlyZXR1cm4hMX1sZXQgc2hvdWxkVXBkYXRlPSExO29yaWdpbmFsVHlwZT1uZnQucHJvcGVydGllc1tuYW1lXS50eXBlLG9yaWdpbmFsSXNSZWFkT25seT1uZnQucHJvcGVydGllc1tuYW1lXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT10eXBlJiZ0eXBlIT09b3JpZ2luYWxUeXBlJiYobmZ0LnByb3BlcnRpZXNbbmFtZV0udHlwZT10eXBlLHNob3VsZFVwZGF0ZT0hMCksdm9pZCAwIT09aXNSZWFkT25seSYmaXNSZWFkT25seSE9PW9yaWdpbmFsSXNSZWFkT25seSYmKG5mdC5wcm9wZXJ0aWVzW25hbWVdLmlzUmVhZE9ubHk9aXNSZWFkT25seSxzaG91bGRVcGRhdGU9ITApLHZvaWQgMCE9PW5ld05hbWUmJm5ld05hbWUhPT1uYW1lJiYobmZ0LnByb3BlcnRpZXNbbmV3TmFtZV09bmZ0LnByb3BlcnRpZXNbbmFtZV0sZGVsZXRlIG5mdC5wcm9wZXJ0aWVzW25hbWVdLHNob3VsZFVwZGF0ZT0hMCksc2hvdWxkVXBkYXRlJiYoYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnN5bWJvbCxvcmlnaW5hbE5hbWU6bmFtZSxvcmlnaW5hbFR5cGU6b3JpZ2luYWxUeXBlLG9yaWdpbmFsSXNSZWFkT25seTpvcmlnaW5hbElzUmVhZE9ubHksbmV3TmFtZTpuZXdOYW1lLG5ld1R5cGU6dHlwZSxuZXdJc1JlYWRPbmx5OmlzUmVhZE9ubHl9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIHJlcz0+e3ZhcntzeW1ib2wsbmFtZSx0eXBlLGlzUmVhZE9ubHksYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cyxhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXJlcyxpbml0aWFsQWNjb3VudExpc3Q9KGF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSlbImRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlIl07aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmbmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lJiYodm9pZCAwPT09aXNSZWFkT25seXx8ImJvb2xlYW4iPT10eXBlb2YgaXNSZWFkT25seSkmJih2b2lkIDA9PT1hdXRob3JpemVkRWRpdGluZ0FjY291bnRzfHxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzJiYib2JqZWN0Ij09dHlwZW9mIGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cykpJiYodm9pZCAwPT09YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHN8fGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzJiYib2JqZWN0Ij09dHlwZW9mIGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzJiZBcnJheS5pc0FycmF5KGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzKSkmJnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdHlwZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKG5hbWUpJiYwPG5hbWUubGVuZ3RoJiZuYW1lLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KCJudW1iZXIiPT09dHlwZXx8InN0cmluZyI9PT10eXBlfHwiYm9vbGVhbiI9PT10eXBlLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCghKG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIHByb3BlcnR5IHR3aWNlIikmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtpZigzPD1PYmplY3Qua2V5cyhuZnQucHJvcGVydGllcykubGVuZ3RoKXtyZXM9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0x9KSxyZXM9ISFhcGkuQmlnTnVtYmVyKGluaXRpYWxBY2NvdW50TGlzdCkubHRlKDApfHxyZXMmJmFwaS5CaWdOdW1iZXIocmVzLmJhbGFuY2UpLmd0ZShpbml0aWFsQWNjb3VudExpc3QpO2lmKCFhcGkuYXNzZXJ0KHJlcywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikpcmV0dXJuITE7aWYoYXBpLkJpZ051bWJlcihpbml0aWFsQWNjb3VudExpc3QpLmd0KDApKXtyZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6aW5pdGlhbEFjY291bnRMaXN0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGFwaS5zZW5kZXIsIm51bGwiLFVUSUxJVFlfVE9LRU5fU1lNQk9MLGluaXRpYWxBY2NvdW50TGlzdCwidHJhbnNmZXIiKSlyZXR1cm4hMX19aW5pdGlhbEFjY291bnRMaXN0PXZvaWQgMD09PWF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM/W2FwaS5zZW5kZXJdOltdO3JldHVybiBuZnQucHJvcGVydGllc1tuYW1lXT17dHlwZTp0eXBlLGlzUmVhZE9ubHk6dm9pZCAwIT09aXNSZWFkT25seSYmaXNSZWFkT25seSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOmluaXRpYWxBY2NvdW50TGlzdCxhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0czpbXX0sYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSwoYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50c3x8YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMpJiZhd2FpdCBhY3Rpb25zLnNldFByb3BlcnR5UGVybWlzc2lvbnMoe3N5bWJvbDpzeW1ib2wsbmFtZTpuYW1lLGFjY291bnRzOmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMsY29udHJhY3RzOmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sLG5hbWUsYWNjb3VudHMsY29udHJhY3RzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUmJih2b2lkIDA9PT1hY2NvdW50c3x8YWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYWNjb3VudHMpKSYmKHZvaWQgMD09PWNvbnRyYWN0c3x8Y29udHJhY3RzJiYib2JqZWN0Ij09dHlwZW9mIGNvbnRyYWN0cyYmQXJyYXkuaXNBcnJheShjb250cmFjdHMpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKG5hbWUpJiYwPG5hbWUubGVuZ3RoJiZuYW1lLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWFjY291bnRzfHxhY2NvdW50cy5sZW5ndGg8PU1BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTLGBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gJHtNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSU30gYXV0aG9yaXplZCBhY2NvdW50c2ApJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWNvbnRyYWN0c3x8Y29udHJhY3RzLmxlbmd0aDw9TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlMsYGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAke01BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTfSBhdXRob3JpemVkIGNvbnRyYWN0c2ApJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWFjY291bnRzfHxpc1ZhbGlkQWNjb3VudHNBcnJheShhY2NvdW50cyksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09Y29udHJhY3RzfHxpc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKSwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQobmFtZSBpbiBuZnQucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl7bGV0IHNhbml0aXplZEFjY291bnRMaXN0PVtdLHNhbml0aXplZENvbnRyYWN0TGlzdD1bXTtpZihhY2NvdW50cyYmKHNhbml0aXplZEFjY291bnRMaXN0PWFjY291bnRzLm1hcChhY2NvdW50PT5hY2NvdW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSksY29udHJhY3RzJiYoc2FuaXRpemVkQ29udHJhY3RMaXN0PWNvbnRyYWN0cy5tYXAoY29udHJhY3Q9PmNvbnRyYWN0LnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YWNjb3VudHN8fCFjb250YWluc0R1cGxpY2F0ZXMoc2FuaXRpemVkQWNjb3VudExpc3QpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1jb250cmFjdHN8fCFjb250YWluc0R1cGxpY2F0ZXMoc2FuaXRpemVkQ29udHJhY3RMaXN0KSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgc2hvdWxkVXBkYXRlPSExO2FjY291bnRzJiYobmZ0LnByb3BlcnRpZXNbbmFtZV0uYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cz1zYW5pdGl6ZWRBY2NvdW50TGlzdCxzaG91bGRVcGRhdGU9ITApLGNvbnRyYWN0cyYmKG5mdC5wcm9wZXJ0aWVzW25hbWVdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPXNhbml0aXplZENvbnRyYWN0TGlzdCxzaG91bGRVcGRhdGU9ITApLHNob3VsZFVwZGF0ZSYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KX19fX0sYWN0aW9ucy5zZXRHcm91cEJ5PWFzeW5jIGlzU2lnbmVkV2l0aEFjdGl2ZUtleT0+e3ZhcntzeW1ib2w6bmZ0UHJvcGVydHlDb3VudCxwcm9wZXJ0aWVzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09aXNTaWduZWRXaXRoQWN0aXZlS2V5O2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KG5mdFByb3BlcnR5Q291bnQmJiJzdHJpbmciPT10eXBlb2YgbmZ0UHJvcGVydHlDb3VudCYmcHJvcGVydGllcyYmIm9iamVjdCI9PXR5cGVvZiBwcm9wZXJ0aWVzJiZBcnJheS5pc0FycmF5KHByb3BlcnRpZXMpLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6bmZ0UHJvcGVydHlDb3VudH0pO2lmKG5mdCl7bmZ0UHJvcGVydHlDb3VudD1PYmplY3Qua2V5cyhuZnQucHJvcGVydGllcykubGVuZ3RoO2lmKGFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW5mdC5ncm91cEJ5fHwwPT09bmZ0Lmdyb3VwQnkubGVuZ3RoLCJsaXN0IGlzIGFscmVhZHkgc2V0IikmJmFwaS5hc3NlcnQocHJvcGVydGllcy5sZW5ndGg8PW5mdFByb3BlcnR5Q291bnQsImNhbm5vdCBzZXQgbW9yZSBkYXRhIHByb3BlcnRpZXMgdGhhbiBORlQgaGFzIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhwcm9wZXJ0aWVzKSwibGlzdCBjYW5ub3QgY29udGFpbiBkdXBsaWNhdGVzIikpe2ZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7dmFyIG5hbWU9cHJvcGVydGllc1tpXTtpZighYXBpLmFzc2VydChuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUmJm5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsImRhdGEgcHJvcGVydHkgbXVzdCBleGlzdCIpKXJldHVybiExfXJldHVybiBuZnQuZ3JvdXBCeT1wcm9wZXJ0aWVzLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCksITB9fX1yZXR1cm4hMX0sYWN0aW9ucy5zZXRQcm9wZXJ0aWVzPWFzeW5jIGZpbmFsRnJvbT0+e3ZhcntzeW1ib2wsZnJvbVR5cGU6ZmluYWxGcm9tVHlwZSxuZnRzLGNhbGxpbmdDb250cmFjdEluZm86ZmluYWxGcm9tfT1maW5hbEZyb20sZmluYWxGcm9tVHlwZT12b2lkIDA9PT1maW5hbEZyb21UeXBlPyJ1c2VyIjpmaW5hbEZyb21UeXBlO2lmKGFwaS5hc3NlcnQobmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpJiZmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJlsidXNlciIsImNvbnRyYWN0Il0uaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJihmaW5hbEZyb218fHZvaWQgMD09PWZpbmFsRnJvbSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZSksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQobmZ0cy5sZW5ndGg8PU1BWF9OVU1fTkZUU19FRElUQUJMRSxgY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiAke01BWF9OVU1fTkZUU19FRElUQUJMRX0gTkZUIGluc3RhbmNlcyBhdCBvbmNlYCkpe3ZhciBmaW5hbEZyb209InVzZXIiPT09ZmluYWxGcm9tVHlwZT9hcGkuc2VuZGVyOmZpbmFsRnJvbS5uYW1lLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1uZnQsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpKXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXkoZmluYWxGcm9tLGZpbmFsRnJvbVR5cGUsbmZ0LG5mdHMpKXJldHVybiExO3ZhciBpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyI7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXt2YXJ7aWQscHJvcGVydGllc309bmZ0c1tpXTtpZigwIT09T2JqZWN0LmtleXMocHJvcGVydGllcykubGVuZ3RoKXtjb25zdCBuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1uZnRJbnN0YW5jZSwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBzaG91bGRVcGRhdGU9ITE7Zm9yKHZhcltuYW1lLGRhdGFdb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpe2xldCBvbGRQcm9wZXJ0eT1udWxsO25mdC5wcm9wZXJ0aWVzW25hbWVdLmlzUmVhZE9ubHk/YXBpLmFzc2VydCghKG5hbWUgaW4gbmZ0SW5zdGFuY2UucHJvcGVydGllcyksImNhbm5vdCBlZGl0IHJlYWQtb25seSBwcm9wZXJ0aWVzIikmJihuZnRJbnN0YW5jZS5wcm9wZXJ0aWVzW25hbWVdPWRhdGEsc2hvdWxkVXBkYXRlPSEwKToob2xkUHJvcGVydHk9bmZ0SW5zdGFuY2UucHJvcGVydGllc1tuYW1lXSxuZnRJbnN0YW5jZS5wcm9wZXJ0aWVzW25hbWVdPWRhdGEsc2hvdWxkVXBkYXRlPSEwKSxzaG91bGRVcGRhdGUmJm9sZFByb3BlcnR5IT09ZGF0YSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnRTZXRQcm9wZXJ0eSIse3N5bWJvbDpzeW1ib2wsbmZ0Om5mdEluc3RhbmNlLHByb3BlcnR5TmFtZTpuYW1lLG9sZFZhbHVlOm9sZFByb3BlcnR5fSl9c2hvdWxkVXBkYXRlJiZhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKX19fXJldHVybiEwfX1yZXR1cm4hMX0sYWN0aW9ucy5idXJuPWFzeW5jIGNhbGxpbmdDb250cmFjdEluZm89Pnt2YXJ7ZnJvbVR5cGUsbmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mb309Y2FsbGluZ0NvbnRyYWN0SW5mbyxmaW5hbEZyb21UeXBlPXZvaWQgMD09PWZyb21UeXBlPyJ1c2VyIjpmcm9tVHlwZTtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJlsidXNlciIsImNvbnRyYWN0Il0uaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7dmFyIGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lO2xldCBjb250YWluZXJDb3VudD0wLHRva2VuQ291bnQ9MCxpc0ZpcnN0SW5zdGFuY2VDb250YWluZXI9ITE7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXt2YXJ7c3ltYm9sLGlkc309bmZ0c1tpXTtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXt2YXIgaW5zdGFuY2VUYWJsZU5hbWU9c3ltYm9sKyJpbnN0YW5jZXMiO2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXt2YXIgaWQ9aWRzW2pdO2NvbnN0IG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO2lmKG5mdEluc3RhbmNlKXtsZXQgaXNCdXJuQXV0aG9yaXplZD0hMDtpZihuZnRJbnN0YW5jZS5sb2NrZWROZnRzJiYwPG5mdEluc3RhbmNlLmxvY2tlZE5mdHMubGVuZ3RoPygwPT09dG9rZW5Db3VudCYmKGlzRmlyc3RJbnN0YW5jZUNvbnRhaW5lcj0hMCksY29udGFpbmVyQ291bnQrPTEsKGNvbnRhaW5lckNvdW50Pk1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEV8fCFpc0ZpcnN0SW5zdGFuY2VDb250YWluZXIpJiYoaXNCdXJuQXV0aG9yaXplZD0hMSkpOmlzRmlyc3RJbnN0YW5jZUNvbnRhaW5lciYmKGlzQnVybkF1dGhvcml6ZWQ9ITEpLHRva2VuQ291bnQrPTEsbmZ0SW5zdGFuY2UuYWNjb3VudD09PWZpbmFsRnJvbSYmKCJ1Ij09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGV8fCJjIj09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlKSYmdm9pZCAwPT09bmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8mJmlzQnVybkF1dGhvcml6ZWQpe2NvbnN0IGZpbmFsTG9ja1Rva2Vucz17fTtsZXQgaXNUcmFuc2ZlclN1Y2Nlc3M9ITA7Zm9yKHZhcltsb2Nrc3ltYm9sLHF1YW50aXR5XW9mIE9iamVjdC5lbnRyaWVzKG5mdEluc3RhbmNlLmxvY2tlZFRva2Vucykpe3ZhciByZXM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKGZpbmFsRnJvbSxsb2Nrc3ltYm9sLHF1YW50aXR5LGZpbmFsRnJvbVR5cGUpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcywibmZ0IixmaW5hbEZyb20sbG9ja3N5bWJvbCxxdWFudGl0eSwidHJhbnNmZXJGcm9tQ29udHJhY3QiKXx8KGZpbmFsTG9ja1Rva2Vuc1tsb2Nrc3ltYm9sXT1xdWFudGl0eSxpc1RyYW5zZmVyU3VjY2Vzcz0hMSl9YXBpLmFzc2VydChpc1RyYW5zZmVyU3VjY2VzcyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIHRva2VucyBpbjogJHtzeW1ib2x9LCBpZCBgK2lkKTt2YXIgb3JpZ0xvY2tOZnRzPW5mdEluc3RhbmNlLmxvY2tlZE5mdHMmJjA8bmZ0SW5zdGFuY2UubG9ja2VkTmZ0cy5sZW5ndGg/bmZ0SW5zdGFuY2UubG9ja2VkTmZ0czpbXTtpZihpc1RyYW5zZmVyU3VjY2VzcyYmbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cyYmMDxuZnRJbnN0YW5jZS5sb2NrZWROZnRzLmxlbmd0aCl7Y29uc3QgcmVzPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhDT05UUkFDVF9OQU1FLCJjb250cmFjdCIsZmluYWxGcm9tLGZpbmFsRnJvbVR5cGUsbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXkse25hbWU6Q09OVFJBQ1RfTkFNRX0pO25mdEluc3RhbmNlLmxvY2tlZE5mdHM9cmVzLmZhaWwsMDxuZnRJbnN0YW5jZS5sb2NrZWROZnRzLmxlbmd0aCYmKGlzVHJhbnNmZXJTdWNjZXNzPSExKSxhcGkuYXNzZXJ0KGlzVHJhbnNmZXJTdWNjZXNzLGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgTkZUIGluc3RhbmNlcyBpbjogJHtzeW1ib2x9LCBpZCBgK2lkKX12YXIgb3JpZ093bmVkQnk9bmZ0SW5zdGFuY2Uub3duZWRCeSxvcmlnTG9ja1Rva2Vucz1uZnRJbnN0YW5jZS5sb2NrZWRUb2tlbnM7bmZ0SW5zdGFuY2UubG9ja2VkVG9rZW5zPWZpbmFsTG9ja1Rva2Vucyxpc1RyYW5zZmVyU3VjY2VzcyYmKG5mdEluc3RhbmNlLnByZXZpb3VzQWNjb3VudD1uZnRJbnN0YW5jZS5hY2NvdW50LG5mdEluc3RhbmNlLnByZXZpb3VzT3duZWRCeT1uZnRJbnN0YW5jZS5vd25lZEJ5LG5mdEluc3RhbmNlLmFjY291bnQ9Im51bGwiLG5mdEluc3RhbmNlLm93bmVkQnk9InUiLC0tbmZ0LmNpcmN1bGF0aW5nU3VwcGx5KSxhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKSxpc1RyYW5zZmVyU3VjY2VzcyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50OmZpbmFsRnJvbSxvd25lZEJ5Om9yaWdPd25lZEJ5LHVubG9ja2VkVG9rZW5zOm9yaWdMb2NrVG9rZW5zLHVubG9ja2VkTmZ0czpvcmlnTG9ja05mdHMsc3ltYm9sOnN5bWJvbCxpZDppZH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KX19fX0sYWN0aW9ucy50cmFuc2Zlcj1hc3luYyB0b1ZhbGlkPT57Y29uc3R7ZnJvbVR5cGUsdG8sdG9UeXBlLG5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm99PXRvVmFsaWQsdHlwZXM9WyJ1c2VyIiwiY29udHJhY3QiXTt2YXIgZmluYWxUb1R5cGU9dm9pZCAwPT09dG9UeXBlPyJ1c2VyIjp0b1R5cGUsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZmluYWxGcm9tVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbEZyb21UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8mJmZpbmFsVG9UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsVG9UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbFRvVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7dmFyIGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLHRvVmFsaWQ9KCJ1c2VyIj09PWZpbmFsVG9UeXBlP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aDppc1ZhbGlkQ29udHJhY3RMZW5ndGgpKGZpbmFsVG8pLGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lO2lmKGFwaS5hc3NlcnQodG9WYWxpZCwiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEoZmluYWxUb1R5cGU9PT1maW5hbEZyb21UeXBlJiZmaW5hbFRvPT09ZmluYWxGcm9tKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWZpbmFsVG9UeXBlJiYibnVsbCI9PT1maW5hbFRvKSwiY2Fubm90IHRyYW5zZmVyIHRvIG51bGw7IHVzZSBidXJuIGFjdGlvbiBpbnN0ZWFkIikpZm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXt2YXJ7c3ltYm9sLGlkc309bmZ0c1tpXTtpZihhd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KSl7dmFyIGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7dmFyIG9yaWdPd25lZEJ5LG5ld093bmVkQnksaWQ9aWRzW2pdO2NvbnN0IG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO25mdEluc3RhbmNlJiZuZnRJbnN0YW5jZS5hY2NvdW50PT09ZmluYWxGcm9tJiYoInUiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZXx8ImMiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpJiZ2b2lkIDA9PT1uZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbyYmKG9yaWdPd25lZEJ5PW5mdEluc3RhbmNlLm93bmVkQnksbmV3T3duZWRCeT0idXNlciI9PT1maW5hbFRvVHlwZT8idSI6ImMiLG5mdEluc3RhbmNlLnByZXZpb3VzQWNjb3VudD1uZnRJbnN0YW5jZS5hY2NvdW50LG5mdEluc3RhbmNlLnByZXZpb3VzT3duZWRCeT1uZnRJbnN0YW5jZS5vd25lZEJ5LG5mdEluc3RhbmNlLmFjY291bnQ9ZmluYWxUbyxuZnRJbnN0YW5jZS5vd25lZEJ5PW5ld093bmVkQnksYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxuZnRJbnN0YW5jZSksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmaW5hbEZyb20sZnJvbVR5cGU6b3JpZ093bmVkQnksdG86ZmluYWxUbyx0b1R5cGU6bmV3T3duZWRCeSxzeW1ib2w6c3ltYm9sLGlkOmlkfSkpfX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyB0b1ZhbGlkPT57Y29uc3R7ZnJvbVR5cGUsdG8sdG9UeXBlLG5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm99PXRvVmFsaWQsdHlwZXM9WyJ1c2VyIiwiY29udHJhY3QiXTt2YXIgZmluYWxUb1R5cGU9dm9pZCAwPT09dG9UeXBlPyJ1c2VyIjp0b1R5cGUsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZmluYWxGcm9tVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbEZyb21UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8mJmZpbmFsVG9UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsVG9UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbFRvVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7dmFyIGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLHRvVmFsaWQ9KCJ1c2VyIj09PWZpbmFsVG9UeXBlP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aDppc1ZhbGlkQ29udHJhY3RMZW5ndGgpKGZpbmFsVG8pLGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lO2lmKGFwaS5hc3NlcnQodG9WYWxpZCwiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEoZmluYWxUb1R5cGU9PT1maW5hbEZyb21UeXBlJiZmaW5hbFRvPT09ZmluYWxGcm9tKSwiY2Fubm90IGRlbGVnYXRlIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWZpbmFsVG9UeXBlJiYibnVsbCI9PT1maW5hbFRvKSwiY2Fubm90IGRlbGVnYXRlIHRvIG51bGwiKSlmb3IobGV0IGk9MDtpPG5mdHMubGVuZ3RoO2krPTEpe3ZhcntzeW1ib2wsaWRzfT1uZnRzW2ldLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQoITA9PT1uZnQuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICIrc3ltYm9sKSl7dmFyIGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7dmFyIG5ld093bmVkQnksaWQ9aWRzW2pdO2NvbnN0IG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO25mdEluc3RhbmNlJiZuZnRJbnN0YW5jZS5hY2NvdW50PT09ZmluYWxGcm9tJiYoInUiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZXx8ImMiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpJiZ2b2lkIDA9PT1uZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbyYmKG5ld093bmVkQnk9InVzZXIiPT09ZmluYWxUb1R5cGU/InUiOiJjIixuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbz17YWNjb3VudDpmaW5hbFRvLG93bmVkQnk6bmV3T3duZWRCeX0sYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxuZnRJbnN0YW5jZSksYXBpLmVtaXQoImRlbGVnYXRlIix7ZnJvbTpmaW5hbEZyb20sZnJvbVR5cGU6bmZ0SW5zdGFuY2Uub3duZWRCeSx0bzpmaW5hbFRvLHRvVHlwZTpuZXdPd25lZEJ5LHN5bWJvbDpzeW1ib2wsaWQ6aWR9KSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdERlbGVnYXRpb25DaGFuZ2UiLHtzeW1ib2w6c3ltYm9sLG5mdDpuZnRJbnN0YW5jZSxhZGQ6ITB9KSl9fX19fSxhY3Rpb25zLnVuZGVsZWdhdGU9YXN5bmMgY2FsbGluZ0NvbnRyYWN0SW5mbz0+e3Zhcntmcm9tVHlwZSxuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvfT1jYWxsaW5nQ29udHJhY3RJbmZvLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmWyJ1c2VyIiwiY29udHJhY3QiXS5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmKGNhbGxpbmdDb250cmFjdEluZm98fHZvaWQgMD09PWNhbGxpbmdDb250cmFjdEluZm8mJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGUpJiZuZnRzJiYib2JqZWN0Ij09dHlwZW9mIG5mdHMmJkFycmF5LmlzQXJyYXkobmZ0cyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG5mdHMpKXt2YXIgZmluYWxGcm9tPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/YXBpLnNlbmRlcjpjYWxsaW5nQ29udHJhY3RJbmZvLm5hbWU7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIik7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXt2YXJ7c3ltYm9sLGlkc309bmZ0c1tpXSxjb29sZG93blBlcmlvZE1pbGxpc2VjPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKGNvb2xkb3duUGVyaW9kTWlsbGlzZWMmJmFwaS5hc3NlcnQoITA9PT1jb29sZG93blBlcmlvZE1pbGxpc2VjLmRlbGVnYXRpb25FbmFibGVkLCJkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAiK3N5bWJvbCkpe3ZhciBjb29sZG93blBlcmlvZE1pbGxpc2VjPTI0KmNvb2xkb3duUGVyaW9kTWlsbGlzZWMudW5kZWxlZ2F0aW9uQ29vbGRvd24qMzYwMCoxZTMsY29tcGxldGVUaW1lc3RhbXA9YmxvY2tEYXRlLmdldFRpbWUoKStjb29sZG93blBlcmlvZE1pbGxpc2VjLGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtjb25zdCB1bmRlbGVnYXRpb249e3N5bWJvbDpzeW1ib2wsaWRzOltdLGNvbXBsZXRlVGltZXN0YW1wOmNvbXBsZXRlVGltZXN0YW1wfTtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7dmFyIGlkPWlkc1tqXTtjb25zdCBuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtuZnRJbnN0YW5jZSYmbmZ0SW5zdGFuY2UuYWNjb3VudD09PWZpbmFsRnJvbSYmKCJ1Ij09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGV8fCJjIj09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlKSYmbmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8mJnZvaWQgMD09PW5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKG5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdD1jb21wbGV0ZVRpbWVzdGFtcCx1bmRlbGVnYXRpb24uaWRzLnB1c2gobmZ0SW5zdGFuY2UuX2lkKSxhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKSxhcGkuZW1pdCgidW5kZWxlZ2F0ZVN0YXJ0Iix7ZnJvbTpuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUby5hY2NvdW50LGZyb21UeXBlOm5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnN5bWJvbCxpZDppZH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDpzeW1ib2wsbmZ0Om5mdEluc3RhbmNlLGFkZDohMX0pKX0wPHVuZGVsZWdhdGlvbi5pZHMubGVuZ3RoJiZhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsdW5kZWxlZ2F0aW9uKX19fX07Y29uc3QgcHJvY2Vzc1VuZGVsZWdhdGlvbj1hc3luYyB1bmRlbGVnYXRpb249Pnt2YXJ7c3ltYm9sLGlkc309dW5kZWxlZ2F0aW9uLGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtjb25zdCBpbnN0YW5jZXM9YXdhaXQgYXBpLmRiLmZpbmQoaW5zdGFuY2VUYWJsZU5hbWUse19pZDp7JGluOmlkc319LE1BWF9OVU1fTkZUU19PUEVSQUJMRSwwLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPGluc3RhbmNlcy5sZW5ndGg7aSs9MSlkZWxldGUgaW5zdGFuY2VzW2ldLmRlbGVnYXRlZFRvLGF3YWl0IGFwaS5kYi51cGRhdGUoaW5zdGFuY2VUYWJsZU5hbWUsaW5zdGFuY2VzW2ldLHtkZWxlZ2F0ZWRUbzoiIn0pO2F3YWl0IGFwaS5kYi5yZW1vdmUoInBlbmRpbmdVbmRlbGVnYXRpb25zIix1bmRlbGVnYXRpb24pLGFwaS5lbWl0KCJ1bmRlbGVnYXRlRG9uZSIse3N5bWJvbDpzeW1ib2wsaWRzOmlkc30pfTthY3Rpb25zLmNoZWNrUGVuZGluZ1VuZGVsZWdhdGlvbnM9YXN5bmMoKT0+e2lmKGFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwibm90IGF1dGhvcml6ZWQiKSl7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIik7dmFyIHRpbWVzdGFtcD1ibG9ja0RhdGUuZ2V0VGltZSgpO2xldCBwZW5kaW5nVW5kZWxlZ2F0aW9ucz1hd2FpdCBhcGkuZGIuZmluZCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLHtjb21wbGV0ZVRpbWVzdGFtcDp7JGx0ZTp0aW1lc3RhbXB9fSksbmJQZW5kaW5nVW5kZWxlZ2F0aW9ucz1wZW5kaW5nVW5kZWxlZ2F0aW9ucy5sZW5ndGg7Zm9yKDswPG5iUGVuZGluZ1VuZGVsZWdhdGlvbnM7KXtmb3IobGV0IGluZGV4PTA7aW5kZXg8bmJQZW5kaW5nVW5kZWxlZ2F0aW9ucztpbmRleCs9MSl7dmFyIHBlbmRpbmdVbmRlbGVnYXRpb249cGVuZGluZ1VuZGVsZWdhdGlvbnNbaW5kZXhdO2F3YWl0IHByb2Nlc3NVbmRlbGVnYXRpb24ocGVuZGluZ1VuZGVsZWdhdGlvbil9cGVuZGluZ1VuZGVsZWdhdGlvbnM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dGltZXN0YW1wfX0pLG5iUGVuZGluZ1VuZGVsZWdhdGlvbnM9cGVuZGluZ1VuZGVsZWdhdGlvbnMubGVuZ3RofX19LGFjdGlvbnMuY3JlYXRlPWFzeW5jIHJlcz0+e3ZhcntuYW1lLG9yZ05hbWU6ZmluYWxQcm9kdWN0TmFtZSxwcm9kdWN0TmFtZTptZXRhZGF0YSxzeW1ib2wsdXJsOmluc3RhbmNlVGFibGVOYW1lLG1heFN1cHBseTpmaW5hbE9yZ05hbWUsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyxhdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXJlcyxuZXdOZnQ9KGF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSlbIm5mdENyZWF0aW9uRmVlIl0scmVzPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MfSkscmVzPSEhYXBpLkJpZ051bWJlcihuZXdOZnQpLmx0ZSgwKXx8cmVzJiZhcGkuQmlnTnVtYmVyKHJlcy5iYWxhbmNlKS5ndGUobmV3TmZ0KTtpZihhcGkuYXNzZXJ0KHJlcywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KG5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSYmc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmKHZvaWQgMD09PWluc3RhbmNlVGFibGVOYW1lfHxpbnN0YW5jZVRhYmxlTmFtZSYmInN0cmluZyI9PXR5cGVvZiBpbnN0YW5jZVRhYmxlTmFtZSkmJih2b2lkIDA9PT1maW5hbFByb2R1Y3ROYW1lfHxmaW5hbFByb2R1Y3ROYW1lJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsUHJvZHVjdE5hbWUpJiYodm9pZCAwPT09bWV0YWRhdGF8fG1ldGFkYXRhJiYic3RyaW5nIj09dHlwZW9mIG1ldGFkYXRhKSYmKHZvaWQgMD09PWF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHN8fGF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyYmQXJyYXkuaXNBcnJheShhdXRob3JpemVkSXNzdWluZ0FjY291bnRzKSkmJih2b2lkIDA9PT1hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c3x8YXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMmJkFycmF5LmlzQXJyYXkoYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMpKSYmKHZvaWQgMD09PWZpbmFsT3JnTmFtZXx8ZmluYWxPcmdOYW1lJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsT3JnTmFtZSYmIWFwaS5CaWdOdW1iZXIoZmluYWxPcmdOYW1lKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEoc3ltYm9sKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShzeW1ib2wpJiYwPHN5bWJvbC5sZW5ndGgmJnN5bWJvbC5sZW5ndGg8PU1BWF9TWU1CT0xfTEVOR1RILCJpbnZhbGlkIHN5bWJvbDogdXBwZXJjYXNlIGxldHRlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAiK01BWF9TWU1CT0xfTEVOR1RIKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW3N5bWJvbF18fGFwaS5zZW5kZXI9PT1SRVNFUlZFRF9TWU1CT0xTW3N5bWJvbF0sImNhbm5vdCB1c2UgdGhpcyBzeW1ib2wiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG5hbWUsIiAiKSkmJjA8bmFtZS5sZW5ndGgmJm5hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikmJmFwaS5hc3NlcnQodm9pZCAwPT09ZmluYWxQcm9kdWN0TmFtZXx8YXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChmaW5hbFByb2R1Y3ROYW1lLCIgIikpJiYwPGZpbmFsUHJvZHVjdE5hbWUubGVuZ3RoJiZmaW5hbFByb2R1Y3ROYW1lLmxlbmd0aDw9NTAsImludmFsaWQgb3JnIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1tZXRhZGF0YXx8YXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChtZXRhZGF0YSwiICIpKSYmMDxtZXRhZGF0YS5sZW5ndGgmJm1ldGFkYXRhLmxlbmd0aDw9NTAsImludmFsaWQgcHJvZHVjdCBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikmJmFwaS5hc3NlcnQodm9pZCAwPT09aW5zdGFuY2VUYWJsZU5hbWV8fGluc3RhbmNlVGFibGVOYW1lLmxlbmd0aDw9MjU1LCJpbnZhbGlkIHVybDogbWF4IGxlbmd0aCBvZiAyNTUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1maW5hbE9yZ05hbWV8fGFwaS5CaWdOdW1iZXIoZmluYWxPcmdOYW1lKS5ndCgwKSwibWF4U3VwcGx5IG11c3QgYmUgcG9zaXRpdmUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1maW5hbE9yZ05hbWV8fGFwaS5CaWdOdW1iZXIoZmluYWxPcmdOYW1lKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLCJtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXtyZXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoYXBpLmFzc2VydChudWxsPT09cmVzLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihuZXdOZnQpLmd0KDApKXtyZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6bmV3TmZ0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGFwaS5zZW5kZXIsIm51bGwiLFVUSUxJVFlfVE9LRU5fU1lNQk9MLG5ld05mdCwidHJhbnNmZXIiKSlyZXR1cm4hMX1uZXdOZnQ9dm9pZCAwPT09ZmluYWxPcmdOYW1lPzA6YXBpLkJpZ051bWJlcihmaW5hbE9yZ05hbWUpLmludGVnZXJWYWx1ZShhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLnRvTnVtYmVyKCksZmluYWxPcmdOYW1lPXZvaWQgMD09PWZpbmFsUHJvZHVjdE5hbWU/IiI6ZmluYWxQcm9kdWN0TmFtZSxmaW5hbFByb2R1Y3ROYW1lPXZvaWQgMD09PW1ldGFkYXRhPyIiOm1ldGFkYXRhLG1ldGFkYXRhPXt1cmw6dm9pZCAwPT09aW5zdGFuY2VUYWJsZU5hbWU/IiI6aW5zdGFuY2VUYWJsZU5hbWV9LG1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKSxpbnN0YW5jZVRhYmxlTmFtZT12b2lkIDA9PT1hdXRob3JpemVkSXNzdWluZ0FjY291bnRzP1thcGkuc2VuZGVyXTpbXSxuZXdOZnQ9e2lzc3VlcjphcGkuc2VuZGVyLHN5bWJvbDpzeW1ib2wsbmFtZTpuYW1lLG9yZ05hbWU6ZmluYWxPcmdOYW1lLHByb2R1Y3ROYW1lOmZpbmFsUHJvZHVjdE5hbWUsbWV0YWRhdGE6bWV0YWRhdGEsbWF4U3VwcGx5Om5ld05mdCxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czppbnN0YW5jZVRhYmxlTmFtZSxhdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0czpbXSxwcm9wZXJ0aWVzOnt9LGdyb3VwQnk6W119LGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtyZXR1cm4hMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cyhpbnN0YW5jZVRhYmxlTmFtZSkmJmF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZShpbnN0YW5jZVRhYmxlTmFtZSxbImFjY291bnQiLCJvd25lZEJ5Il0pLGF3YWl0IGFwaS5kYi5pbnNlcnQoIm5mdHMiLG5ld05mdCksdm9pZCAwIT09YXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyYmYXdhaXQgYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0FjY291bnRzKHthY2NvdW50czphdXRob3JpemVkSXNzdWluZ0FjY291bnRzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLHZvaWQgMCE9PWF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6YXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMsc3ltYm9sOnN5bWJvbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSksITB9fXJldHVybiExfSxhY3Rpb25zLmlzc3VlPWFzeW5jIHJlc3VsdD0+e2NvbnN0e3N5bWJvbCxmcm9tVHlwZSx0byx0b1R5cGUsZmVlU3ltYm9sLGxvY2tUb2tlbnMsbG9ja05mdHMscHJvcGVydGllcyxpc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mb309cmVzdWx0LHR5cGVzPVsidXNlciIsImNvbnRyYWN0Il07dmFyIGZpbmFsVG9UeXBlPXZvaWQgMD09PXRvVHlwZT8idXNlciI6dG9UeXBlLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlLG5mdElzc3VhbmNlRmVlPShhd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkpWyJuZnRJc3N1YW5jZUZlZSJdO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJmZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8mJmZpbmFsVG9UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsVG9UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbFRvVHlwZSkmJmZlZVN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBmZWVTeW1ib2wmJmZlZVN5bWJvbCBpbiBuZnRJc3N1YW5jZUZlZSYmKHZvaWQgMD09PXByb3BlcnRpZXN8fHByb3BlcnRpZXMmJiJvYmplY3QiPT10eXBlb2YgcHJvcGVydGllcykmJih2b2lkIDA9PT1sb2NrVG9rZW5zfHxsb2NrVG9rZW5zJiYib2JqZWN0Ij09dHlwZW9mIGxvY2tUb2tlbnMpJiYodm9pZCAwPT09bG9ja05mdHN8fGxvY2tOZnRzJiYib2JqZWN0Ij09dHlwZW9mIGxvY2tOZnRzJiZBcnJheS5pc0FycmF5KGxvY2tOZnRzKSksImludmFsaWQgcGFyYW1zIikmJih2b2lkIDA9PT1sb2NrTmZ0c3x8aXNWYWxpZE5mdElkQXJyYXkobG9ja05mdHMpKSl7dmFyIGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLG93bmVkQnk9KCJ1c2VyIj09PWZpbmFsVG9UeXBlP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aDppc1ZhbGlkQ29udHJhY3RMZW5ndGgpKGZpbmFsVG8pLGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLGlzTG9ja1ZhbGlkPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQob3duZWRCeSwiaW52YWxpZCB0byIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7dmFyIHJlcz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpmZWVTeW1ib2x9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1uZnQsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG51bGwhPT1yZXMsImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7cmVzdWx0PXN5bWJvbCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlJiZuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuaW5jbHVkZXMoZmluYWxGcm9tKXx8InVzZXIiPT09ZmluYWxGcm9tVHlwZSYmbmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoZmluYWxGcm9tKSwibm90IGFsbG93ZWQgdG8gaXNzdWUgdG9rZW5zIikmJmFwaS5hc3NlcnQoMD09PW5mdC5tYXhTdXBwbHl8fG5mdC5zdXBwbHk8bmZ0Lm1heFN1cHBseSwibWF4IHN1cHBseSBsaW1pdCByZWFjaGVkIikpe293bmVkQnk9T2JqZWN0LmtleXMobmZ0LnByb3BlcnRpZXMpLmxlbmd0aCxvd25lZEJ5PWFwaS5CaWdOdW1iZXIobmZ0SXNzdWFuY2VGZWVbZmVlU3ltYm9sXSkubXVsdGlwbGllZEJ5KG93bmVkQnkpLG93bmVkQnk9Y2FsY3VsYXRlQmFsYW5jZShuZnRJc3N1YW5jZUZlZVtmZWVTeW1ib2xdLG93bmVkQnkscmVzLnByZWNpc2lvbiwhMCkscmVzPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIixpc0xvY2tWYWxpZCx7YWNjb3VudDpmaW5hbEZyb20sc3ltYm9sOmZlZVN5bWJvbH0pLHJlcz0hIWFwaS5CaWdOdW1iZXIob3duZWRCeSkubHRlKDApfHxyZXMmJmFwaS5CaWdOdW1iZXIocmVzLmJhbGFuY2UpLmd0ZShvd25lZEJ5KTtpZihsb2NrVG9rZW5zKXtpc0xvY2tWYWxpZD1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQobG9ja1Rva2Vucyxpc0xvY2tWYWxpZCxmaW5hbEZyb20sZmVlU3ltYm9sLG93bmVkQnkpO2lmKCFhcGkuYXNzZXJ0KGlzTG9ja1ZhbGlkLGBpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuICR7TUFYX05VTV9MT0NLRURfVE9LRU5fVFlQRVN9IHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKWApKXJldHVybiExfWxldCBmaW5hbFByb3BlcnRpZXM9e307aWYodm9pZCAwIT09cHJvcGVydGllcyl7dHJ5e2lmKCFpc1ZhbGlkRGF0YVByb3BlcnRpZXMoZmluYWxGcm9tLGZpbmFsRnJvbVR5cGUsbmZ0LHByb3BlcnRpZXMpKXJldHVybiExfWNhdGNoKGUpe3JldHVybiExfWZpbmFsUHJvcGVydGllcz1wcm9wZXJ0aWVzfWlmKGFwaS5hc3NlcnQocmVzLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGlzc3VhbmNlIGZlZXMiKSl7aWYoYXBpLkJpZ051bWJlcihvd25lZEJ5KS5ndCgwKSlpZigiY29udHJhY3QiPT09ZmluYWxGcm9tVHlwZSl7cmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm51bGwiLGZlZVN5bWJvbCxvd25lZEJ5LCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGZpbmFsRnJvbSwibnVsbCIsZmVlU3ltYm9sLG93bmVkQnksInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2NvbnN0IHJlcz1hd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDpmZWVTeW1ib2wscXVhbnRpdHk6b3duZWRCeSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGZpbmFsRnJvbSwibnVsbCIsZmVlU3ltYm9sLG93bmVkQnksInRyYW5zZmVyIiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1jb25zdCBmaW5hbExvY2tUb2tlbnM9e307aWYobG9ja1Rva2Vucylmb3IodmFyW2xvY2tzeW1ib2wscXVhbnRpdHldb2YgT2JqZWN0LmVudHJpZXMobG9ja1Rva2VucykpaWYoImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpe2NvbnN0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnNGcm9tQ2FsbGluZ0NvbnRyYWN0KENPTlRSQUNUX05BTUUsbG9ja3N5bWJvbCxxdWFudGl0eSwiY29udHJhY3QiKTtpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsZmluYWxGcm9tLENPTlRSQUNUX05BTUUsbG9ja3N5bWJvbCxxdWFudGl0eSwidHJhbnNmZXJGcm9tQ29udHJhY3QiKSYmKGZpbmFsTG9ja1Rva2Vuc1tsb2Nrc3ltYm9sXT1xdWFudGl0eSl9ZWxzZXtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzpDT05UUkFDVF9OQU1FLHN5bWJvbDpsb2Nrc3ltYm9sLHF1YW50aXR5OnF1YW50aXR5LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsZmluYWxGcm9tLENPTlRSQUNUX05BTUUsbG9ja3N5bWJvbCxxdWFudGl0eSwidHJhbnNmZXJUb0NvbnRyYWN0IikmJihmaW5hbExvY2tUb2tlbnNbbG9ja3N5bWJvbF09cXVhbnRpdHkpfWxldCBmaW5hbExvY2tOZnRzPVtdO2lmKGxvY2tOZnRzJiYwPGxvY2tOZnRzLmxlbmd0aCl7Y29uc3QgcmVzPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhmaW5hbEZyb20sZmluYWxGcm9tVHlwZSxDT05UUkFDVF9OQU1FLCJjb250cmFjdCIsbG9ja05mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm8pO2ZpbmFsTG9ja05mdHM9cmVzLnN1Y2Nlc3N9b3duZWRCeT0idXNlciI9PT1maW5hbFRvVHlwZT8idSI6ImMiO2xldCBuZXdJbnN0YW5jZT17fTtuZXdJbnN0YW5jZT0wPGZpbmFsTG9ja05mdHMubGVuZ3RoP3thY2NvdW50OmZpbmFsVG8sb3duZWRCeTpvd25lZEJ5LGxvY2tlZFRva2VuczpmaW5hbExvY2tUb2tlbnMsbG9ja2VkTmZ0czpmaW5hbExvY2tOZnRzLHByb3BlcnRpZXM6ZmluYWxQcm9wZXJ0aWVzfTp7YWNjb3VudDpmaW5hbFRvLG93bmVkQnk6b3duZWRCeSxsb2NrZWRUb2tlbnM6ZmluYWxMb2NrVG9rZW5zLHByb3BlcnRpZXM6ZmluYWxQcm9wZXJ0aWVzfTtyZXN1bHQ9YXdhaXQgYXBpLmRiLmluc2VydChyZXN1bHQsbmV3SW5zdGFuY2UpO3JldHVybiBuZnQuc3VwcGx5Kz0xLCJudWxsIj09PWZpbmFsVG8mJiJjb250cmFjdCIhPT1maW5hbFRvVHlwZXx8KG5mdC5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSxhcGkuZW1pdCgiaXNzdWUiLHtmcm9tOmZpbmFsRnJvbSxmcm9tVHlwZTpmaW5hbEZyb21UeXBlLHRvOmZpbmFsVG8sdG9UeXBlOmZpbmFsVG9UeXBlLHN5bWJvbDpzeW1ib2wsbG9ja2VkVG9rZW5zOmZpbmFsTG9ja1Rva2Vucyxsb2NrZWROZnRzOmZpbmFsTG9ja05mdHMscHJvcGVydGllczpmaW5hbFByb3BlcnRpZXMsaWQ6cmVzdWx0Ll9pZH0pLCEwfX19fX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZU11bHRpcGxlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpbnN0YW5jZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoaW5zdGFuY2VzJiYib2JqZWN0Ij09dHlwZW9mIGluc3RhbmNlcyYmQXJyYXkuaXNBcnJheShpbnN0YW5jZXMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGluc3RhbmNlcy5sZW5ndGg8PU1BWF9OVU1fTkZUU19JU1NVQUJMRSxgY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAke01BWF9OVU1fTkZUU19JU1NVQUJMRX0gTkZUIGluc3RhbmNlcyBhdCBvbmNlYCkpe2xldCBjb250YWluZXJDb3VudD0wO2lmKGluc3RhbmNlcy5mb3JFYWNoKGluc3RhbmNlPT57aW5zdGFuY2UubG9ja05mdHMmJihjb250YWluZXJDb3VudCs9MSl9KSxhcGkuYXNzZXJ0KGNvbnRhaW5lckNvdW50PD1NQVhfTlVNX0NPTlRBSU5FUl9ORlRTX09QRVJBQkxFLGBjYW5ub3QgaXNzdWUgbW9yZSB0aGFuICR7TUFYX05VTV9DT05UQUlORVJfTkZUU19PUEVSQUJMRX0gY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgYXQgb25jZWApJiZhcGkuYXNzZXJ0KDA9PT1jb250YWluZXJDb3VudHx8Y29udGFpbmVyQ291bnQ9PT1pbnN0YW5jZXMubGVuZ3RoLCJjYW5ub3QgaXNzdWUgYSBtaXggb2YgY29udGFpbmVyIGFuZCBub24tY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgc2ltdWx0YW5lb3VzbHkiKSlmb3IobGV0IGk9MDtpPGluc3RhbmNlcy5sZW5ndGg7aSs9MSl7dmFye3N5bWJvbCxmcm9tVHlwZSx0byx0b1R5cGUsZmVlU3ltYm9sLGxvY2tUb2tlbnMsbG9ja05mdHMscHJvcGVydGllc309aW5zdGFuY2VzW2ldO2F3YWl0IGFjdGlvbnMuaXNzdWUoe3N5bWJvbDpzeW1ib2wsZnJvbVR5cGU6ZnJvbVR5cGUsdG86dG8sdG9UeXBlOnRvVHlwZSxmZWVTeW1ib2w6ZmVlU3ltYm9sLGxvY2tUb2tlbnM6bG9ja1Rva2Vucyxsb2NrTmZ0czpsb2NrTmZ0cyxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99KX19fTsK" }}}
RE: testnet