{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"mining","params":"","code":"Y29uc3QgUFJPUEVSVFlfT1BTPXtBREQ6e2FkZDooeCx5KT0+YXBpLkJpZ051bWJlcih4KS5wbHVzKHkpLHJlbW92ZTooeCx5KT0+YXBpLkJpZ051bWJlcih4KS5taW51cyh5KSxkZWZhdWx0VmFsdWU6MH0sTVVMVElQTFk6e2FkZDooeCx5KT0+YXBpLkJpZ051bWJlcih4KS5tdWx0aXBsaWVkQnkoeSkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLmRpdmlkZWRCeSh5KSxkZWZhdWx0VmFsdWU6MX19O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntpZighMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygibWluaW5nUG93ZXIiKSl7YXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJtaW5pbmdQb3dlciIsWyJpZCIsInBvd2VyIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicG9vbHMiLFsiaWQiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJ0b2tlblBvb2xzIixbInN5bWJvbCJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoIm5mdFRva2VuUG9vbHMiLFsic3ltYm9sIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicGFyYW1zIik7Y29uc3QgcGFyYW1zPXtwb29sQ3JlYXRpb25GZWU6IjEwMDAiLHBvb2xVcGRhdGVGZWU6IjMwMCIsbWF4TG90dGVyaWVzUGVyQmxvY2s6MjAsbWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazoxZTQscHJvY2Vzc1F1ZXJ5TGltaXQ6MWUzfTthd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHBhcmFtcyl9ZWxzZXtjb25zdCBwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO3BhcmFtcy51cGRhdGVJbmRleHx8KGF3YWl0IGFwaS5kYi5hZGRJbmRleGVzKCJtaW5pbmdQb3dlciIsW3tuYW1lOiJieVBvb2xJZEFuZEFjY291bnQiLGluZGV4OntpZDoxLGFjY291bnQ6MX19XSkscGFyYW1zLnVwZGF0ZUluZGV4PTEsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixwYXJhbXMpKX19LGFjdGlvbnMudXBkYXRlUGFyYW1zPWFzeW5jIHBheWxvYWQ9PntpZihhcGkuc2VuZGVyIT09YXBpLm93bmVyKXJldHVybjtjb25zdHtwb29sQ3JlYXRpb25GZWU6cG9vbENyZWF0aW9uRmVlLHBvb2xVcGRhdGVGZWU6cG9vbFVwZGF0ZUZlZSxtYXhMb3R0ZXJpZXNQZXJCbG9jazptYXhMb3R0ZXJpZXNQZXJCbG9jayxtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrOm1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2sscHJvY2Vzc1F1ZXJ5TGltaXQ6cHJvY2Vzc1F1ZXJ5TGltaXR9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtpZihwb29sQ3JlYXRpb25GZWUpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcG9vbENyZWF0aW9uRmVlJiYhYXBpLkJpZ051bWJlcihwb29sQ3JlYXRpb25GZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIocG9vbENyZWF0aW9uRmVlKS5ndGUoMCksImludmFsaWQgcG9vbENyZWF0aW9uRmVlIikpcmV0dXJuO3BhcmFtcy5wb29sQ3JlYXRpb25GZWU9cG9vbENyZWF0aW9uRmVlfWlmKHBvb2xVcGRhdGVGZWUpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcG9vbFVwZGF0ZUZlZSYmIWFwaS5CaWdOdW1iZXIocG9vbFVwZGF0ZUZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihwb29sVXBkYXRlRmVlKS5ndGUoMCksImludmFsaWQgcG9vbFVwZGF0ZUZlZSIpKXJldHVybjtwYXJhbXMucG9vbFVwZGF0ZUZlZT1wb29sVXBkYXRlRmVlfWlmKG1heExvdHRlcmllc1BlckJsb2NrKXtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKG1heExvdHRlcmllc1BlckJsb2NrKSYmbWF4TG90dGVyaWVzUGVyQmxvY2s+PTEsImludmFsaWQgbWF4TG90dGVyaWVzUGVyQmxvY2siKSlyZXR1cm47cGFyYW1zLm1heExvdHRlcmllc1BlckJsb2NrPW1heExvdHRlcmllc1BlckJsb2NrfWlmKG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2spe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jaykmJm1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s+PTEsImludmFsaWQgbWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jayIpKXJldHVybjtwYXJhbXMubWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jaz1tYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrfWlmKHByb2Nlc3NRdWVyeUxpbWl0KXtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKHByb2Nlc3NRdWVyeUxpbWl0KSYmcHJvY2Vzc1F1ZXJ5TGltaXQ+PTEsImludmFsaWQgcHJvY2Vzc1F1ZXJ5TGltaXQiKSlyZXR1cm47cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0PXByb2Nlc3NRdWVyeUxpbWl0fWF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscGFyYW1zKX07Y29uc3QgZmluZEFuZFByb2Nlc3NBbGw9YXN5bmMoY29udHJhY3ROYW1lLHRhYmxlLHF1ZXJ5LGNhbGxiYWNrKT0+e2xldCBvZmZzZXQ9MCxyZXN1bHRzPVtdLGRvbmU9ITE7Zm9yKDshZG9uZTspaWYocmVzdWx0cz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoY29udHJhY3ROYW1lLHRhYmxlLHF1ZXJ5LDFlMyxvZmZzZXQpLHJlc3VsdHMpe2ZvcihsZXQgaT0wO2k8cmVzdWx0cy5sZW5ndGg7aSs9MSlhd2FpdCBjYWxsYmFjayhyZXN1bHRzW2ldKTtyZXN1bHRzLmxlbmd0aDwxZTM/ZG9uZT0hMDpvZmZzZXQrPTFlM319O2FzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlTmZ0UHJvcGVydGllcyhwcm9wZXJ0aWVzKXtpZighYXBpLmFzc2VydChwcm9wZXJ0aWVzJiZBcnJheS5pc0FycmF5KHByb3BlcnRpZXMpLCJpbnZhbGlkIG5mdFRva2VuTWluZXIgcHJvcGVydGllcyIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHByb3BlcnRpZXMubGVuZ3RoPjAmJnByb3BlcnRpZXMubGVuZ3RoPD00LCJuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNCIpKXJldHVybiExO2ZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcHJvcD1wcm9wZXJ0aWVzW2ldLHByb3BLZXlzPU9iamVjdC5rZXlzKHByb3ApO2ZvcihsZXQgaj0wO2o8cHJvcEtleXMubGVuZ3RoO2orPTEpe2NvbnN0IHByb3BLZXk9cHJvcEtleXNbal07aWYoIm9wIj09PXByb3BLZXkpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcHJvcC5vcCYmUFJPUEVSVFlfT1BTW3Byb3Aub3BdLCJuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMgb3Agc2hvdWxkIGJlIEFERCBvciBNVUxUSVBMWSIpKXJldHVybiExfWVsc2UgaWYoIm5hbWUiPT09cHJvcEtleSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwcm9wLm5hbWUmJnByb3AubmFtZS5sZW5ndGg8PTE2LCJuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMgbmFtZSBzaG91bGQgYmUgYSBzdHJpbmcgb2YgbGVuZ3RoIDw9IDE2IikpcmV0dXJuITF9ZWxzZXtpZigiYnVybkNoYW5nZSIhPT1wcm9wS2V5KXJldHVybiBhcGkuYXNzZXJ0KCExLCJuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMgZmllbGQgaW52YWxpZCIpLCExO3tpZighYXBpLmFzc2VydCgib2JqZWN0Ij09dHlwZW9mIHByb3AuYnVybkNoYW5nZSYmInN0cmluZyI9PXR5cGVvZiBwcm9wLmJ1cm5DaGFuZ2Uuc3ltYm9sJiZhcGkuQmlnTnVtYmVyKHByb3AuYnVybkNoYW5nZS5xdWFudGl0eSkuaXNGaW5pdGUoKSYmYXBpLkJpZ051bWJlcihwcm9wLmJ1cm5DaGFuZ2UucXVhbnRpdHkpLmlzUG9zaXRpdmUoKSwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIGJ1cm5DaGFuZ2UgaW52YWxpZCIpKXJldHVybiExO2NvbnN0IHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnByb3AuYnVybkNoYW5nZS5zeW1ib2x9KTtpZighYXBpLmFzc2VydCh0b2tlbiwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIGJ1cm5DaGFuZ2Ugc3ltYm9sIG5vdCBmb3VuZCIpKXJldHVybiExfX19fXJldHVybiEwfWZ1bmN0aW9uIHZhbGlkYXRlTmZ0VHlwZU1hcCh0eXBlTWFwLHByb3BlcnRpZXMpe2lmKCFhcGkuYXNzZXJ0KHR5cGVNYXAmJiJvYmplY3QiPT10eXBlb2YgdHlwZU1hcCwiaW52YWxpZCBuZnRUb2tlbk1pbmVyIHR5cGVNYXAiKSlyZXR1cm4hMTtjb25zdCB0eXBlcz1PYmplY3Qua2V5cyh0eXBlTWFwKTtmb3IobGV0IGo9MDtqPHR5cGVzLmxlbmd0aDtqKz0xKXtjb25zdCB0eXBlQ29uZmlnPXR5cGVNYXBbdHlwZXNbal1dO2lmKCFhcGkuYXNzZXJ0KEFycmF5LmlzQXJyYXkodHlwZUNvbmZpZykmJnR5cGVDb25maWcubGVuZ3RoPT09cHJvcGVydGllcy5sZW5ndGgsIm5mdFRva2VuTWluZXIgdHlwZUNvbmZpZyBsZW5ndGggbWlzbWF0Y2giKSlyZXR1cm4hMTtmb3IobGV0IGs9MDtrPHR5cGVDb25maWcubGVuZ3RoO2srPTEpe2NvbnN0IHR5cGVQcm9wZXJ0eT1hcGkuQmlnTnVtYmVyKHR5cGVDb25maWdba10pO2lmKCFhcGkuYXNzZXJ0KCF0eXBlUHJvcGVydHkuaXNOYU4oKSYmdHlwZVByb3BlcnR5LmlzRmluaXRlKCksIm5mdFRva2VuTWluZXIgdHlwZUNvbmZpZyBpbnZhbGlkIikpcmV0dXJuITE7aWYoIk1VTFRJUExZIj09PXByb3BlcnRpZXNba10ub3AmJiFhcGkuYXNzZXJ0KHR5cGVQcm9wZXJ0eS5ndGUoLjAxKSYmdHlwZVByb3BlcnR5Lmx0ZSgxMDApLCJuZnRUb2tlbk1pbmVyIHR5cGVDb25maWcgTVVMVElQTFkgcHJvcGVydHkgc2hvdWxkIGJlIGJldHdlZW4gMC4wMSBhbmQgMTAwIikpcmV0dXJuITF9fXJldHVybiEwfWFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlVG9rZW5NaW5lcnModG9rZW5NaW5lcnMsbmZ0VG9rZW5NaW5lcil7aWYoIWFwaS5hc3NlcnQodG9rZW5NaW5lcnMmJkFycmF5LmlzQXJyYXkodG9rZW5NaW5lcnMpLCJ0b2tlbk1pbmVycyBpbnZhbGlkIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQodG9rZW5NaW5lcnMubGVuZ3RoPj0xJiZ0b2tlbk1pbmVycy5sZW5ndGg8PTJ8fG5mdFRva2VuTWluZXImJjA9PT10b2tlbk1pbmVycy5sZW5ndGgsIm9ubHkgMSBvciAyIHRva2VuTWluZXJzIGFsbG93ZWQiKSlyZXR1cm4hMTtjb25zdCB0b2tlbk1pbmVyU3ltYm9scz1uZXcgU2V0O2ZvcihsZXQgaT0wO2k8dG9rZW5NaW5lcnMubGVuZ3RoO2krPTEpe2NvbnN0IHRva2VuTWluZXJDb25maWc9dG9rZW5NaW5lcnNbaV07aWYoIWFwaS5hc3NlcnQodG9rZW5NaW5lckNvbmZpZyYmdG9rZW5NaW5lckNvbmZpZy5zeW1ib2wmJiJzdHJpbmciPT10eXBlb2YgdG9rZW5NaW5lckNvbmZpZy5zeW1ib2wsInRva2VuTWluZXJzIGludmFsaWQiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydCghdG9rZW5NaW5lclN5bWJvbHMuaGFzKHRva2VuTWluZXJDb25maWcuc3ltYm9sKSwidG9rZW5NaW5lcnMgY2Fubm90IGhhdmUgZHVwbGljYXRlIHN5bWJvbHMiKSlyZXR1cm4hMTt0b2tlbk1pbmVyU3ltYm9scy5hZGQodG9rZW5NaW5lckNvbmZpZy5zeW1ib2wpO2NvbnN0e3N5bWJvbDpzeW1ib2x9PXRva2VuTWluZXJDb25maWcsdG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQodG9rZW4mJnRva2VuLnN0YWtpbmdFbmFibGVkLCJ0b2tlbk1pbmVycyBtdXN0IGhhdmUgc3Rha2luZyBlbmFibGVkIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcih0b2tlbk1pbmVyQ29uZmlnLm11bHRpcGxpZXIpJiZ0b2tlbk1pbmVyQ29uZmlnLm11bHRpcGxpZXI+PTEmJnRva2VuTWluZXJDb25maWcubXVsdGlwbGllcjw9MTAwLCJ0b2tlbk1pbmVyIG11bHRpcGxpZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMSB0byAxMDAiKSlyZXR1cm4hMX1pZihuZnRUb2tlbk1pbmVyKXtpZighYXBpLmFzc2VydChuZnRUb2tlbk1pbmVyLnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBuZnRUb2tlbk1pbmVyLnN5bWJvbCwibmZ0VG9rZW5NaW5lciBpbnZhbGlkIikpcmV0dXJuITE7Y29uc3R7c3ltYm9sOnN5bWJvbCx0eXBlTWFwOnR5cGVNYXAscHJvcGVydGllczpwcm9wZXJ0aWVzLHR5cGVGaWVsZDp0eXBlRmllbGR9PW5mdFRva2VuTWluZXIsbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgibmZ0IiwibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZighYXBpLmFzc2VydChuZnQmJm5mdC5kZWxlZ2F0aW9uRW5hYmxlZCwibmZ0VG9rZW5NaW5lciBtdXN0IGhhdmUgZGVsZWdhdGlvbiBlbmFibGVkIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQodHlwZUZpZWxkJiYic3RyaW5nIj09dHlwZW9mIHR5cGVGaWVsZCwidHlwZUZpZWxkIG11c3QgYmUgYSBzdHJpbmciKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChuZnQucHJvcGVydGllc1t0eXBlRmllbGRdJiYic3RyaW5nIj09PW5mdC5wcm9wZXJ0aWVzW3R5cGVGaWVsZF0udHlwZSwibmZ0VG9rZW5NaW5lciBtdXN0IGhhdmUgc3RyaW5nIHR5cGUgcHJvcGVydHkiKSlyZXR1cm4hMTtpZighYXdhaXQgdmFsaWRhdGVOZnRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpKXJldHVybiExO2lmKCF2YWxpZGF0ZU5mdFR5cGVNYXAodHlwZU1hcCxwcm9wZXJ0aWVzKSlyZXR1cm4hMX1yZXR1cm4hMH1hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRva2VuTWluZXJzQ2hhbmdlKG9sZFRva2VuTWluZXJzLHRva2VuTWluZXJzLG9sZE5mdFRva2VuTWluZXIsbmZ0VG9rZW5NaW5lcil7aWYoIWFwaS5hc3NlcnQodG9rZW5NaW5lcnMubGVuZ3RoPT09b2xkVG9rZW5NaW5lcnMubGVuZ3RoLCJjYW5ub3QgY2hhbmdlIHdoaWNoIHRva2VucyBhcmUgaW4gdG9rZW5NaW5lcnMiKSlyZXR1cm4hMTtsZXQgY2hhbmdlZD0hMTtmb3IobGV0IGk9MDtpPHRva2VuTWluZXJzLmxlbmd0aDtpKz0xKXtjb25zdCBvbGRDb25maWc9b2xkVG9rZW5NaW5lcnNbaV0sbmV3Q29uZmlnPXRva2VuTWluZXJzW2ldO2lmKCFhcGkuYXNzZXJ0KG9sZENvbmZpZy5zeW1ib2w9PT1uZXdDb25maWcuc3ltYm9sLCJjYW5ub3QgY2hhbmdlIHdoaWNoIHRva2VucyBhcmUgaW4gdG9rZW5NaW5lcnMiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKG5ld0NvbmZpZy5tdWx0aXBsaWVyKSYmbmV3Q29uZmlnLm11bHRpcGxpZXI+PTEmJm5ld0NvbmZpZy5tdWx0aXBsaWVyPD0xMDAsInRva2VuTWluZXIgbXVsdGlwbGllciBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxIHRvIDEwMCIpKXJldHVybiExO29sZENvbmZpZy5tdWx0aXBsaWVyIT09bmV3Q29uZmlnLm11bHRpcGxpZXImJihjaGFuZ2VkPSEwKX1pZighYXBpLmFzc2VydCghIW9sZE5mdFRva2VuTWluZXI9PSEhbmZ0VG9rZW5NaW5lciwiY2Fubm90IGNoYW5nZSBuZnRUb2tlbk1pbmVyIHRva2VuIikpcmV0dXJuITE7aWYobmZ0VG9rZW5NaW5lcil7aWYoIWFwaS5hc3NlcnQob2xkTmZ0VG9rZW5NaW5lci5zeW1ib2w9PT1uZnRUb2tlbk1pbmVyLnN5bWJvbCwiY2Fubm90IGNoYW5nZSBuZnRUb2tlbk1pbmVyIHRva2VuIikpcmV0dXJuITE7Y29uc3R7dHlwZU1hcDp0eXBlTWFwLHByb3BlcnRpZXM6cHJvcGVydGllcyx0eXBlRmllbGQ6dHlwZUZpZWxkfT1uZnRUb2tlbk1pbmVyO2lmKCFhcGkuYXNzZXJ0KHR5cGVGaWVsZCYmInN0cmluZyI9PXR5cGVvZiB0eXBlRmllbGQmJnR5cGVGaWVsZD09PW9sZE5mdFRva2VuTWluZXIudHlwZUZpZWxkLCJjYW5ub3QgY2hhbmdlIG5mdFRva2VuTWluZXIgdHlwZUZpZWxkIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQodHlwZU1hcCYmIm9iamVjdCI9PXR5cGVvZiB0eXBlTWFwLCJpbnZhbGlkIG5mdFRva2VuTWluZXIgdHlwZU1hcCIpKXJldHVybiExO2lmKCFhd2FpdCB2YWxpZGF0ZU5mdFByb3BlcnRpZXMocHJvcGVydGllcykpcmV0dXJuITE7aWYocHJvcGVydGllcy5sZW5ndGghPT1vbGROZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMubGVuZ3RoKWNoYW5nZWQ9ITA7ZWxzZSBmb3IobGV0IGk9MDtpPHByb3BlcnRpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHByb3A9cHJvcGVydGllc1tpXSxvbGRQcm9wPW9sZE5mdFRva2VuTWluZXIucHJvcGVydGllc1tpXTtwcm9wLm9wIT09b2xkUHJvcC5vcCYmKGNoYW5nZWQ9ITApfWlmKCF2YWxpZGF0ZU5mdFR5cGVNYXAodHlwZU1hcCxwcm9wZXJ0aWVzKSlyZXR1cm4hMTtjb25zdCBvbGRUeXBlcz1PYmplY3Qua2V5cyhvbGROZnRUb2tlbk1pbmVyLnR5cGVNYXApO2ZvcihsZXQgaT0wO2k8b2xkVHlwZXMubGVuZ3RoO2krPTEpe2NvbnN0IG9sZFR5cGU9b2xkVHlwZXNbaV0sb2xkVHlwZUNvbmZpZz1vbGROZnRUb2tlbk1pbmVyLnR5cGVNYXBbb2xkVHlwZV0sdHlwZUNvbmZpZz10eXBlTWFwW29sZFR5cGVdO2lmKCFhcGkuYXNzZXJ0KHR5cGVDb25maWcsInR5cGVDb25maWcgdHlwZXMgbXVzdCBiZSBhIHN1cGVyc2V0IG9mIG9sZCB0eXBlQ29uZmlnIHR5cGVzIikpcmV0dXJuITE7Zm9yKGxldCBqPTA7ajx0eXBlQ29uZmlnLmxlbmd0aDtqKz0xKW9sZFR5cGVDb25maWdbal0hPT10eXBlQ29uZmlnW2pdJiYoY2hhbmdlZD0hMCl9fXJldHVybntjaGFuZ2VkOmNoYW5nZWR9fWZ1bmN0aW9uIGNvbXB1dGVNaW5pbmdQb3dlcihtaW5pbmdQb3dlcix0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyKXtsZXQgcG93ZXI9YXBpLkJpZ051bWJlcigwKTtmb3IobGV0IGk9MDtpPHRva2VuTWluZXJzLmxlbmd0aDtpKz0xKW1pbmluZ1Bvd2VyLmJhbGFuY2VzW2ldJiYocG93ZXI9cG93ZXIucGx1cyhhcGkuQmlnTnVtYmVyKG1pbmluZ1Bvd2VyLmJhbGFuY2VzW2ldKS5tdWx0aXBsaWVkQnkodG9rZW5NaW5lcnNbaV0ubXVsdGlwbGllcikpKTtpZihuZnRUb2tlbk1pbmVyJiZtaW5pbmdQb3dlci5uZnRCYWxhbmNlcyl7bGV0IG5mdFBvd2VyPWFwaS5CaWdOdW1iZXIoMSk7Zm9yKGxldCBpPTA7aTxuZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMubGVuZ3RoO2krPTEpbmZ0UG93ZXI9bmZ0UG93ZXIubXVsdGlwbGllZEJ5KG1pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzW2ldKTtwb3dlcj1wb3dlci5wbHVzKG5mdFBvd2VyKX1yZXR1cm4gcG93ZXIuaXNQb3NpdGl2ZSgpJiZwb3dlci5pc0Zpbml0ZSgpP3Bvd2VyOmFwaS5CaWdOdW1iZXIoMCl9YXN5bmMgZnVuY3Rpb24gdXBkYXRlTWluaW5nUG93ZXIocG9vbCx0b2tlbixhY2NvdW50LHN0YWtlZFF1YW50aXR5LGRlbGVnYXRlZFF1YW50aXR5LHJlc2V0KXtsZXQgbWluaW5nUG93ZXI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm1pbmluZ1Bvd2VyIix7aWQ6cG9vbC5pZCxhY2NvdW50OmFjY291bnR9KSxzdGFrZT1hcGkuQmlnTnVtYmVyKHN0YWtlZFF1YW50aXR5KSxvbGRNaW5pbmdQb3dlcj1hcGkuQmlnTnVtYmVyKDApO3N0YWtlPXN0YWtlLnBsdXMoZGVsZWdhdGVkUXVhbnRpdHkpO2NvbnN0IHRva2VuSW5kZXg9cG9vbC50b2tlbk1pbmVycy5maW5kSW5kZXgodD0+dC5zeW1ib2w9PT10b2tlbik7aWYobWluaW5nUG93ZXIpbWluaW5nUG93ZXIuYmFsYW5jZXNbdG9rZW5JbmRleF0mJiFyZXNldHx8KG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdPSIwIiksbWluaW5nUG93ZXIuYmFsYW5jZXNbdG9rZW5JbmRleF09c3Rha2UucGx1cyhtaW5pbmdQb3dlci5iYWxhbmNlc1t0b2tlbkluZGV4XSksb2xkTWluaW5nUG93ZXI9bWluaW5nUG93ZXIucG93ZXIuJG51bWJlckRlY2ltYWw7ZWxzZXtjb25zdCBiYWxhbmNlcz17fTtiYWxhbmNlc1t0b2tlbkluZGV4XT1zdGFrZSxtaW5pbmdQb3dlcj17aWQ6cG9vbC5pZCxhY2NvdW50OmFjY291bnQsYmFsYW5jZXM6YmFsYW5jZXMscG93ZXI6eyRudW1iZXJEZWNpbWFsOiIwIn19LG1pbmluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5pbnNlcnQoIm1pbmluZ1Bvd2VyIixtaW5pbmdQb3dlcil9Y29uc3QgbmV3TWluaW5nUG93ZXI9Y29tcHV0ZU1pbmluZ1Bvd2VyKG1pbmluZ1Bvd2VyLHBvb2wudG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyKTtyZXR1cm4gbWluaW5nUG93ZXIucG93ZXI9eyRudW1iZXJEZWNpbWFsOm5ld01pbmluZ1Bvd2VyfSxhd2FpdCBhcGkuZGIudXBkYXRlKCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpLG5ld01pbmluZ1Bvd2VyLm1pbnVzKG9sZE1pbmluZ1Bvd2VyKX1mdW5jdGlvbiBnZXROZnRBY2NvdW50KG5mdCl7cmV0dXJuIm1pbmluZyI9PT1uZnQuZGVsZWdhdGVkVG8uYWNjb3VudCYmImMiPT09bmZ0LmRlbGVnYXRlZFRvLm93bmVkQnk/bmZ0LmFjY291bnQ6InUiPT09bmZ0LmRlbGVnYXRlZFRvLm93bmVkQnk/bmZ0LmRlbGVnYXRlZFRvLmFjY291bnQ6bnVsbH1hc3luYyBmdW5jdGlvbiB1cGRhdGVOZnRNaW5pbmdQb3dlcihwb29sLG5mdCx0eXBlUHJvcGVydGllcyxhZGQsdXBkYXRlUG9vbFRpbWVzdGFtcCl7Y29uc3QgYWNjb3VudD1nZXROZnRBY2NvdW50KG5mdCk7aWYoIWFjY291bnQpcmV0dXJuIDA7bGV0IG1pbmluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5maW5kT25lKCJtaW5pbmdQb3dlciIse2lkOnBvb2wuaWQsYWNjb3VudDphY2NvdW50fSksb2xkTWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcigwKTtpZihtaW5pbmdQb3dlcil7bWluaW5nUG93ZXIubmZ0QmFsYW5jZXN8fChtaW5pbmdQb3dlci5uZnRCYWxhbmNlcz17fSk7Y29uc3R7bmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXN9PW1pbmluZ1Bvd2VyO2ZvcihsZXQgaT0wO2k8cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHByb3BlcnR5PXBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzW2ldLG9wSW5mbz1QUk9QRVJUWV9PUFNbcHJvcGVydHkub3BdO25mdEJhbGFuY2VzW2ldJiZtaW5pbmdQb3dlci51cGRhdGVQb29sVGltZXN0YW1wPT09dXBkYXRlUG9vbFRpbWVzdGFtcHx8KG5mdEJhbGFuY2VzW2ldPW9wSW5mby5kZWZhdWx0VmFsdWUpLG5mdEJhbGFuY2VzW2ldPWFkZD9vcEluZm8uYWRkKG5mdEJhbGFuY2VzW2ldLHR5cGVQcm9wZXJ0aWVzW2ldKTpvcEluZm8ucmVtb3ZlKG5mdEJhbGFuY2VzW2ldLHR5cGVQcm9wZXJ0aWVzW2ldKX1vbGRNaW5pbmdQb3dlcj1taW5pbmdQb3dlci5wb3dlci4kbnVtYmVyRGVjaW1hbH1lbHNle2NvbnN0IG5mdEJhbGFuY2VzPXt9O2ZvcihsZXQgaT0wO2k8cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHByb3BlcnR5PXBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzW2ldLG9wSW5mbz1QUk9QRVJUWV9PUFNbcHJvcGVydHkub3BdO2FkZD9uZnRCYWxhbmNlc1tpXT1vcEluZm8uYWRkKG9wSW5mby5kZWZhdWx0VmFsdWUsdHlwZVByb3BlcnRpZXNbaV0pOmFwaS5hc3NlcnQoITEsInVuZXhwZWN0ZWQgY29uZGl0aW9uOiByZW1vdmUgd2l0aG91dCBwcmV2aW91cyBtaW5pbmdQb3dlciIpfW1pbmluZ1Bvd2VyPXtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudCxiYWxhbmNlczp7fSxuZnRCYWxhbmNlczpuZnRCYWxhbmNlcyxwb3dlcjp7JG51bWJlckRlY2ltYWw6IjAifX0sbWluaW5nUG93ZXI9YXdhaXQgYXBpLmRiLmluc2VydCgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKX1jb25zdCBuZXdNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpO3JldHVybiBtaW5pbmdQb3dlci5wb3dlcj17JG51bWJlckRlY2ltYWw6bmV3TWluaW5nUG93ZXJ9LG1pbmluZ1Bvd2VyLnVwZGF0ZVBvb2xUaW1lc3RhbXA9dXBkYXRlUG9vbFRpbWVzdGFtcCxhd2FpdCBhcGkuZGIudXBkYXRlKCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpLG5ld01pbmluZ1Bvd2VyLm1pbnVzKG9sZE1pbmluZ1Bvd2VyKX1hc3luYyBmdW5jdGlvbiBpbml0TWluaW5nUG93ZXIocG9vbCxwYXJhbXMsdG9rZW4sbGFzdElkKXtsZXQgYmFsYW5jZXMsYWRqdXN0ZWRQb3dlcj1hcGkuQmlnTnVtYmVyKDApLG9mZnNldD0wLGxhc3RJZFByb2Nlc3NlZD1sYXN0SWQsY29tcGxldGU9ITE7Zm9yKDshY29tcGxldGUmJm9mZnNldDxwYXJhbXMubWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazspe2JhbGFuY2VzPWF3YWl0IGFwaS5kYi5maW5kSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHtzeW1ib2w6dG9rZW4sX2lkOnskZ3Q6bGFzdElkfX0scGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0LG9mZnNldCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxiYWxhbmNlcy5sZW5ndGg7aSs9MSl7Y29uc3QgYmFsYW5jZT1iYWxhbmNlc1tpXTtpZihhcGkuQmlnTnVtYmVyKGJhbGFuY2Uuc3Rha2UpLmd0KDApfHxhcGkuQmlnTnVtYmVyKGJhbGFuY2UuZGVsZWdhdGlvbnNJbikuZ3QoMCkpe2NvbnN0IGFkanVzdGVkPWF3YWl0IHVwZGF0ZU1pbmluZ1Bvd2VyKHBvb2wsdG9rZW4sYmFsYW5jZS5hY2NvdW50LGJhbGFuY2Uuc3Rha2UsYmFsYW5jZS5kZWxlZ2F0aW9uc0luLCEwKTthZGp1c3RlZFBvd2VyPWFkanVzdGVkUG93ZXIucGx1cyhhZGp1c3RlZCl9bGFzdElkUHJvY2Vzc2VkPWJhbGFuY2UuX2lkfWJhbGFuY2VzLmxlbmd0aDxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQmJihjb21wbGV0ZT0hMCksb2Zmc2V0Kz1wYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXR9cmV0dXJue2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bGFzdElkUHJvY2Vzc2VkLGNvbXBsZXRlOmNvbXBsZXRlfX1hc3luYyBmdW5jdGlvbiBpbml0TmZ0TWluaW5nUG93ZXIocG9vbCx1cGRhdGVQb29sVGltZXN0YW1wLHBhcmFtcyxuZnRUb2tlbk1pbmVyLGxhc3RJZCl7bGV0IG5mdHMsYWRqdXN0ZWRQb3dlcj1hcGkuQmlnTnVtYmVyKDApLG9mZnNldD0wLGxhc3RJZFByb2Nlc3NlZD1sYXN0SWQsY29tcGxldGU9ITE7Zm9yKDshY29tcGxldGUmJm9mZnNldDxwYXJhbXMubWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazspe25mdHM9YXdhaXQgYXBpLmRiLmZpbmRJblRhYmxlKCJuZnQiLG5mdFRva2VuTWluZXIuc3ltYm9sKyJpbnN0YW5jZXMiLHtfaWQ6eyRndDpsYXN0SWR9LGRlbGVnYXRlZFRvOnskbmU6bnVsbH0sImRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCI6eyRlcTpudWxsfX0scGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0LG9mZnNldCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXtjb25zdCBuZnQ9bmZ0c1tpXTtpZihuZnRUb2tlbk1pbmVyLnR5cGVNYXBbbmZ0LnByb3BlcnRpZXNbbmZ0VG9rZW5NaW5lci50eXBlRmllbGRdXSl7Y29uc3QgYWRqdXN0ZWQ9YXdhaXQgdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsbmZ0VG9rZW5NaW5lci50eXBlTWFwW25mdC5wcm9wZXJ0aWVzW25mdFRva2VuTWluZXIudHlwZUZpZWxkXV0sITAsdXBkYXRlUG9vbFRpbWVzdGFtcCk7YWRqdXN0ZWRQb3dlcj1hZGp1c3RlZFBvd2VyLnBsdXMoYWRqdXN0ZWQpfWxhc3RJZFByb2Nlc3NlZD1uZnQuX2lkfW5mdHMubGVuZ3RoPHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCYmKGNvbXBsZXRlPSEwKSxvZmZzZXQrPXBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdH1yZXR1cm57YWRqdXN0ZWRQb3dlcjphZGp1c3RlZFBvd2VyLG5leHRJZDpsYXN0SWRQcm9jZXNzZWQsY29tcGxldGU6Y29tcGxldGV9fWFzeW5jIGZ1bmN0aW9uIHJlc3VtZVBvd2VyVXBkYXRlKHBvb2wscGFyYW1zKXtsZXR7aW5Qcm9ncmVzczppblByb2dyZXNzLHRva2VuSW5kZXg6dG9rZW5JbmRleCxuZnRUb2tlbkluZGV4Om5mdFRva2VuSW5kZXgsbGFzdElkOmxhc3RJZH09cG9vbC51cGRhdGluZztjb25zdHt1cGRhdGVQb29sVGltZXN0YW1wOnVwZGF0ZVBvb2xUaW1lc3RhbXB9PXBvb2wudXBkYXRpbmc7aWYoIWluUHJvZ3Jlc3MpcmV0dXJuO2lmKHRva2VuSW5kZXg8cG9vbC50b2tlbk1pbmVycy5sZW5ndGgpe2NvbnN0IHRva2VuQ29uZmlnPXBvb2wudG9rZW5NaW5lcnNbdG9rZW5JbmRleF0se2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bmV4dElkLGNvbXBsZXRlOmNvbXBsZXRlfT1hd2FpdCBpbml0TWluaW5nUG93ZXIocG9vbCxwYXJhbXMsdG9rZW5Db25maWcuc3ltYm9sLGxhc3RJZCk7cG9vbC50b3RhbFBvd2VyPWFwaS5CaWdOdW1iZXIocG9vbC50b3RhbFBvd2VyKS5wbHVzKGFkanVzdGVkUG93ZXIpLGNvbXBsZXRlPyhsYXN0SWQ9MCx0b2tlbkluZGV4Kz0xKTpsYXN0SWQ9bmV4dElkfWVsc2UgaWYocG9vbC5uZnRUb2tlbk1pbmVyJiZuZnRUb2tlbkluZGV4PDEpe2NvbnN0e25mdFRva2VuTWluZXI6bmZ0VG9rZW5NaW5lcn09cG9vbCx7YWRqdXN0ZWRQb3dlcjphZGp1c3RlZFBvd2VyLG5leHRJZDpuZXh0SWQsY29tcGxldGU6Y29tcGxldGV9PWF3YWl0IGluaXROZnRNaW5pbmdQb3dlcihwb29sLHVwZGF0ZVBvb2xUaW1lc3RhbXAscGFyYW1zLG5mdFRva2VuTWluZXIsbGFzdElkKTtwb29sLnRvdGFsUG93ZXI9YXBpLkJpZ051bWJlcihwb29sLnRvdGFsUG93ZXIpLnBsdXMoYWRqdXN0ZWRQb3dlciksY29tcGxldGU/KGxhc3RJZD0wLG5mdFRva2VuSW5kZXgrPTEpOmxhc3RJZD1uZXh0SWR9dG9rZW5JbmRleCE9PXBvb2wudG9rZW5NaW5lcnMubGVuZ3RofHxwb29sLm5mdFRva2VuTWluZXImJjEhPT1uZnRUb2tlbkluZGV4fHwoaW5Qcm9ncmVzcz0hMSx0b2tlbkluZGV4PTAsbmZ0VG9rZW5JbmRleD0wKTtjb25zdHt1cGRhdGluZzp1cGRhdGluZ309cG9vbDt1cGRhdGluZy5pblByb2dyZXNzPWluUHJvZ3Jlc3MsdXBkYXRpbmcudG9rZW5JbmRleD10b2tlbkluZGV4LHVwZGF0aW5nLm5mdFRva2VuSW5kZXg9bmZ0VG9rZW5JbmRleCx1cGRhdGluZy5sYXN0SWQ9bGFzdElkLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKX1mdW5jdGlvbiBnZW5lcmF0ZVBvb2xJZChwb29sKXtjb25zdCB0b2tlbk1pbmVyU3RyaW5nPXBvb2wuZXh0ZXJuYWxDb250cmFjdCYmcG9vbC5leHRlcm5hbE1pbmVycz8iRVhULSIrcG9vbC5leHRlcm5hbE1pbmVycy5yZXBsYWNlKCI6IiwiIik6cG9vbC50b2tlbk1pbmVycy5tYXAodD0+dC5zeW1ib2wucmVwbGFjZSgiLiIsIi0iKSkuc29ydCgpLmpvaW4oIiwiKSxuZnRUb2tlbk1pbmVyU3RyaW5nPXBvb2wubmZ0VG9rZW5NaW5lcj8iOiIrcG9vbC5uZnRUb2tlbk1pbmVyLnN5bWJvbDoiIjtyZXR1cm5gJHtwb29sLm1pbmVkVG9rZW4ucmVwbGFjZSgiLiIsIi0iKX06JHt0b2tlbk1pbmVyU3RyaW5nfSR7bmZ0VG9rZW5NaW5lclN0cmluZ31gfWFzeW5jIGZ1bmN0aW9uIHJ1bkxvdHRlcnkocG9vbCxwYXJhbXMpe2NvbnN0IGJsb2NrRGF0ZT1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpLHdpbm5pbmdOdW1iZXJzPVtdLG1pbmVkVG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cG9vbC5taW5lZFRva2VufSksd2lubmluZ0Ftb3VudD1hcGkuQmlnTnVtYmVyKHBvb2wubG90dGVyeUFtb3VudCkuZGl2aWRlZEJ5KHBvb2wubG90dGVyeVdpbm5lcnMpLnRvRml4ZWQobWluZWRUb2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKTtpZihwb29sLmV4dGVybmFsQ29udHJhY3Qpe2lmKCJtYXJrZXRwb29scyI9PT1wb29sLmV4dGVybmFsQ29udHJhY3Qpe2NvbnN0IG1hcmtldHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJtYXJrZXRwb29scyIsInBvb2xzIix7dG9rZW5QYWlyOnBvb2wuZXh0ZXJuYWxNaW5lcnN9KTtmb3IobGV0IGk9MDtpPHBvb2wubG90dGVyeVdpbm5lcnM7aSs9MSl3aW5uaW5nTnVtYmVyc1tpXT1hcGkuQmlnTnVtYmVyKG1hcmtldHBvb2wudG90YWxTaGFyZXMpLm11bHRpcGxpZWRCeShhcGkucmFuZG9tKCkpfX1lbHNlIGZvcihsZXQgaT0wO2k8cG9vbC5sb3R0ZXJ5V2lubmVycztpKz0xKXdpbm5pbmdOdW1iZXJzW2ldPWFwaS5CaWdOdW1iZXIocG9vbC50b3RhbFBvd2VyKS5tdWx0aXBsaWVkQnkoYXBpLnJhbmRvbSgpKTtsZXQgbWluaW5nUG93ZXJzLG9mZnNldD0wLGN1bXVsYXRpdmVQb3dlcj1hcGkuQmlnTnVtYmVyKDApLG5leHRDdW11bGF0aXZlUG93ZXI9YXBpLkJpZ051bWJlcigwKSxjb21wdXRlZFdpbm5lcnM9MDtjb25zdCB3aW5uZXJzPVtdO2Zvcig7Y29tcHV0ZWRXaW5uZXJzPHBvb2wubG90dGVyeVdpbm5lcnM7KXtpZihwb29sLmV4dGVybmFsQ29udHJhY3Qpe2lmKCJtYXJrZXRwb29scyI9PT1wb29sLmV4dGVybmFsQ29udHJhY3Qpe21pbmluZ1Bvd2Vycz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoIm1hcmtldHBvb2xzIiwibGlxdWlkaXR5UG9zaXRpb25zIix7dG9rZW5QYWlyOnBvb2wuZXh0ZXJuYWxNaW5lcnN9LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bWluaW5nUG93ZXJzLmxlbmd0aDtpKz0xKW1pbmluZ1Bvd2Vyc1tpXS5wb3dlcj17JG51bWJlckRlY2ltYWw6YXBpLkJpZ051bWJlcihtaW5pbmdQb3dlcnNbaV0uc2hhcmVzKS50b0ZpeGVkKG1pbmVkVG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCl9fX1lbHNlIG1pbmluZ1Bvd2Vycz1hd2FpdCBhcGkuZGIuZmluZCgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLHBvd2VyOnskZ3Q6eyRudW1iZXJEZWNpbWFsOiIwIn19fSxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQsb2Zmc2V0LFt7aW5kZXg6InBvd2VyIixkZXNjZW5kaW5nOiEwfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPG1pbmluZ1Bvd2Vycy5sZW5ndGg7aSs9MSl7Y29uc3QgbWluaW5nUG93ZXI9bWluaW5nUG93ZXJzW2ldO25leHRDdW11bGF0aXZlUG93ZXI9Y3VtdWxhdGl2ZVBvd2VyLnBsdXMobWluaW5nUG93ZXIucG93ZXIuJG51bWJlckRlY2ltYWwpO2ZvcihsZXQgaj0wO2o8cG9vbC5sb3R0ZXJ5V2lubmVycztqKz0xKXtjb25zdCBjdXJyZW50V2lubmluZ051bWJlcj13aW5uaW5nTnVtYmVyc1tqXTtjdW11bGF0aXZlUG93ZXIubHRlKGN1cnJlbnRXaW5uaW5nTnVtYmVyKSYmbmV4dEN1bXVsYXRpdmVQb3dlci5ndChjdXJyZW50V2lubmluZ051bWJlcikmJihjb21wdXRlZFdpbm5lcnMrPTEsd2lubmVycy5wdXNoKHt3aW5uZXI6bWluaW5nUG93ZXIuYWNjb3VudCx3aW5uaW5nTnVtYmVyOmN1cnJlbnRXaW5uaW5nTnVtYmVyLHdpbm5pbmdBbW91bnQ6d2lubmluZ0Ftb3VudH0pKX1jdW11bGF0aXZlUG93ZXI9bmV4dEN1bXVsYXRpdmVQb3dlcn1pZihjb21wdXRlZFdpbm5lcnM9PT1wb29sLmxvdHRlcnlXaW5uZXJzfHxtaW5pbmdQb3dlcnMubGVuZ3RoPHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdClicmVhaztvZmZzZXQrPXBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdH1hcGkuZW1pdCgibWluaW5nTG90dGVyeSIse3Bvb2xJZDpwb29sLmlkLHdpbm5lcnM6d2lubmVyc30pO2ZvcihsZXQgaT0wO2k8d2lubmVycy5sZW5ndGg7aSs9MSl7Y29uc3Qgd2lubmVyPXdpbm5lcnNbaV07YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJpc3N1ZSIse3RvOndpbm5lci53aW5uZXIsc3ltYm9sOm1pbmVkVG9rZW4uc3ltYm9sLHF1YW50aXR5Ondpbm5pbmdBbW91bnR9KX1wb29sLm5leHRMb3R0ZXJ5VGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkucGx1cygzNjAwKnBvb2wubG90dGVyeUludGVydmFsSG91cnMqMWUzKS50b051bWJlcigpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKX1hY3Rpb25zLnNldEFjdGl2ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7aWQ6aWQsYWN0aXZlOmFjdGl2ZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSlyZXR1cm47Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDppZH0pO2lmKGFwaS5hc3NlcnQocG9vbCwicG9vbCBpZCBub3QgZm91bmQiKSl7cG9vbC5hY3RpdmU9ISFhY3RpdmU7Y29uc3QgbWluZWRUb2tlbk9iamVjdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwb29sLm1pbmVkVG9rZW59KTtpZihhcGkuYXNzZXJ0KG1pbmVkVG9rZW5PYmplY3QmJihtaW5lZFRva2VuT2JqZWN0Lmlzc3Vlcj09PWFwaS5zZW5kZXJ8fCJCRUUiPT09bWluZWRUb2tlbk9iamVjdC5zeW1ib2wmJmFwaS5zZW5kZXI9PT1hcGkub3duZXIpLCJtdXN0IGJlIGlzc3VlciBvZiBtaW5lZFRva2VuIikpe2NvbnN0IGJsb2NrRGF0ZT1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpO3Bvb2wubmV4dExvdHRlcnlUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5wbHVzKDM2MDAqcG9vbC5sb3R0ZXJ5SW50ZXJ2YWxIb3VycyoxZTMpLnRvTnVtYmVyKCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfX19LGFjdGlvbnMudXBkYXRlUG9vbD1hc3luYyBwYXlsb2FkPT57Y29uc3R7aWQ6aWQsbG90dGVyeVdpbm5lcnM6bG90dGVyeVdpbm5lcnMsbG90dGVyeUludGVydmFsSG91cnM6bG90dGVyeUludGVydmFsSG91cnMsbG90dGVyeUFtb3VudDpsb3R0ZXJ5QW1vdW50LHRva2VuTWluZXJzOnRva2VuTWluZXJzLG5mdFRva2VuTWluZXI6bmZ0VG9rZW5NaW5lcixjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm8saXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtwb29sVXBkYXRlRmVlOnBvb2xVcGRhdGVGZWV9PXBhcmFtcyx1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksYXV0aG9yaXplZD0hKCFhcGkuQmlnTnVtYmVyKHBvb2xVcGRhdGVGZWUpLmx0ZSgwKSYmYXBpLnNlbmRlciE9PWFwaS5vd25lcil8fHV0aWxpdHlUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIodXRpbGl0eVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUocG9vbFVwZGF0ZUZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIHVwZGF0ZSBmZWUiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoaWQmJiJzdHJpbmciPT10eXBlb2YgaWQmJmxvdHRlcnlBbW91bnQmJiJzdHJpbmciPT10eXBlb2YgbG90dGVyeUFtb3VudCYmIWFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5ndCgwKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGxvdHRlcnlXaW5uZXJzKSYmbG90dGVyeVdpbm5lcnM+PTEmJmxvdHRlcnlXaW5uZXJzPD0yMCwiaW52YWxpZCBsb3R0ZXJ5V2lubmVyczogaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDIwIG9ubHkiKSYmYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGxvdHRlcnlJbnRlcnZhbEhvdXJzKSYmbG90dGVyeUludGVydmFsSG91cnM+PTEmJmxvdHRlcnlJbnRlcnZhbEhvdXJzPD03MjAsImludmFsaWQgbG90dGVyeUludGVydmFsSG91cnM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCA3MjAgb25seSIpKXtjb25zdCBwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOmlkfSk7aWYoYXBpLmFzc2VydChwb29sLCJwb29sIGlkIG5vdCBmb3VuZCIpKXtjb25zdCBtaW5lZFRva2VuT2JqZWN0PWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnBvb2wubWluZWRUb2tlbn0pO2lmKGFwaS5hc3NlcnQobWluZWRUb2tlbk9iamVjdCYmKG1pbmVkVG9rZW5PYmplY3QuaXNzdWVyPT09YXBpLnNlbmRlcnx8IkJFRSI9PT1taW5lZFRva2VuT2JqZWN0LnN5bWJvbCYmYXBpLnNlbmRlcj09PWFwaS5vd25lciksIm11c3QgYmUgaXNzdWVyIG9mIG1pbmVkVG9rZW4iKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmRwKCk8PW1pbmVkVG9rZW5PYmplY3QucHJlY2lzaW9uLCJtaW5lZFRva2VuIHByZWNpc2lvbiBtaXNtYXRjaCBmb3IgbG90dGVyeUFtb3VudCIpKXtpZihjYWxsaW5nQ29udHJhY3RJbmZvKXBvb2wubG90dGVyeVdpbm5lcnM9bG90dGVyeVdpbm5lcnMscG9vbC5sb3R0ZXJ5SW50ZXJ2YWxIb3Vycz1sb3R0ZXJ5SW50ZXJ2YWxIb3Vycyxwb29sLmxvdHRlcnlBbW91bnQ9bG90dGVyeUFtb3VudDtlbHNle2NvbnN0IHZhbGlkTWluZXJzQ2hhbmdlPWF3YWl0IHZhbGlkYXRlVG9rZW5NaW5lcnNDaGFuZ2UocG9vbC50b2tlbk1pbmVycyx0b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIsbmZ0VG9rZW5NaW5lcik7aWYodmFsaWRNaW5lcnNDaGFuZ2Upe3Bvb2wubG90dGVyeVdpbm5lcnM9bG90dGVyeVdpbm5lcnMscG9vbC5sb3R0ZXJ5SW50ZXJ2YWxIb3Vycz1sb3R0ZXJ5SW50ZXJ2YWxIb3Vycyxwb29sLmxvdHRlcnlBbW91bnQ9bG90dGVyeUFtb3VudCxwb29sLnRva2VuTWluZXJzPXRva2VuTWluZXJzLHBvb2wubmZ0VG9rZW5NaW5lcj1uZnRUb2tlbk1pbmVyO2NvbnN0IGJsb2NrRGF0ZT1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpO3ZhbGlkTWluZXJzQ2hhbmdlLmNoYW5nZWQmJihwb29sLnVwZGF0aW5nLnVwZGF0ZVBvb2xUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS50b051bWJlcigpLHBvb2wudXBkYXRpbmcuaW5Qcm9ncmVzcz0hMCxwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLm5mdFRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLmxhc3RJZD0wKSxwb29sLm5leHRMb3R0ZXJ5VGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkucGx1cygzNjAwKmxvdHRlcnlJbnRlcnZhbEhvdXJzKjFlMykudG9OdW1iZXIoKX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpLGFwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIocG9vbFVwZGF0ZUZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OnBvb2xVcGRhdGVGZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pfX19fSxhY3Rpb25zLmNoYW5nZU5mdFByb3BlcnR5PWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpZDppZCx0eXBlOnR5cGUscHJvcGVydHlOYW1lOnByb3BlcnR5TmFtZSxjaGFuZ2VBbW91bnQ6Y2hhbmdlQW1vdW50LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoaWQmJiJzdHJpbmciPT10eXBlb2YgaWQmJnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdHlwZSYmcHJvcGVydHlOYW1lJiYic3RyaW5nIj09dHlwZW9mIHByb3BlcnR5TmFtZSYmY2hhbmdlQW1vdW50JiYic3RyaW5nIj09dHlwZW9mIGNoYW5nZUFtb3VudCYmIWFwaS5CaWdOdW1iZXIoY2hhbmdlQW1vdW50KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGNoYW5nZUFtb3VudCkuaXNGaW5pdGUoKSwiaW52YWxpZCBwYXJhbXMiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpKXJldHVybjtjb25zdCBwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOmlkfSk7aWYoIWFwaS5hc3NlcnQocG9vbCwicG9vbCBpZCBub3QgZm91bmQiKSlyZXR1cm47Y29uc3QgcHJvcGVydHlJbmRleD1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllcy5maW5kSW5kZXgocD0+cC5uYW1lPT09cHJvcGVydHlOYW1lKSxwcm9wZXJ0eT1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllc1twcm9wZXJ0eUluZGV4XTtpZighYXBpLmFzc2VydChwcm9wZXJ0eSYmcHJvcGVydHkuYnVybkNoYW5nZSwicHJvcGVydHkgbm90IGVuYWJsZWQgZm9yIGJ1cm4gY2hhbmdlIikpcmV0dXJuO2NvbnN0IHR5cGVQcm9wZXJ0aWVzPXBvb2wubmZ0VG9rZW5NaW5lci50eXBlTWFwW3R5cGVdO2lmKCFhcGkuYXNzZXJ0KHR5cGVQcm9wZXJ0aWVzLCJ0eXBlIG5vdCBmb3VuZCIpKXJldHVybjtjb25zdCBidXJuU3ltYm9sPXByb3BlcnR5LmJ1cm5DaGFuZ2Uuc3ltYm9sLHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmJ1cm5TeW1ib2x9KSxmZWU9YXBpLkJpZ051bWJlcihjaGFuZ2VBbW91bnQpLmFicygpLm11bHRpcGxpZWRCeShwcm9wZXJ0eS5idXJuQ2hhbmdlLnF1YW50aXR5KTtpZighYXBpLmFzc2VydChmZWUuZHAoKTw9dG9rZW4ucHJlY2lzaW9uLCJmZWUgcHJlY2lzaW9uIG1pc21hdGNoIGZvciBhbW91bnQgIitmZWUpKXJldHVybjtjb25zdCBiYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOmJ1cm5TeW1ib2x9KSxhdXRob3JpemVkPWFwaS5CaWdOdW1iZXIoZmVlKS5sdGUoMCl8fGJhbGFuY2UmJmFwaS5CaWdOdW1iZXIoYmFsYW5jZS5iYWxhbmNlKS5ndGUoZmVlKTtpZighYXBpLmFzc2VydChhdXRob3JpemVkLGB5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIHVwZGF0ZSBmZWUgb2YgJHtmZWV9ICR7YnVyblN5bWJvbH1gKSlyZXR1cm47aWYodHlwZVByb3BlcnRpZXNbcHJvcGVydHlJbmRleF09YXBpLkJpZ051bWJlcih0eXBlUHJvcGVydGllc1twcm9wZXJ0eUluZGV4XSkucGx1cyhjaGFuZ2VBbW91bnQpLCF2YWxpZGF0ZU5mdFR5cGVNYXAocG9vbC5uZnRUb2tlbk1pbmVyLnR5cGVNYXAscG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMpKXJldHVybjtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTtwb29sLnVwZGF0aW5nLnVwZGF0ZVBvb2xUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS50b051bWJlcigpLHBvb2wudXBkYXRpbmcuaW5Qcm9ncmVzcz0hMCxwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLm5mdFRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLmxhc3RJZD0wLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKSxhcGkuQmlnTnVtYmVyKGZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmJ1cm5TeW1ib2wscXVhbnRpdHk6ZmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KX0sYWN0aW9ucy5jcmVhdGVQb29sPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtsb3R0ZXJ5V2lubmVyczpsb3R0ZXJ5V2lubmVycyxsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczpsb3R0ZXJ5SW50ZXJ2YWxIb3Vycyxsb3R0ZXJ5QW1vdW50OmxvdHRlcnlBbW91bnQsbWluZWRUb2tlbjptaW5lZFRva2VuLHRva2VuTWluZXJzOnRva2VuTWluZXJzLG5mdFRva2VuTWluZXI6bmZ0VG9rZW5NaW5lcixleHRlcm5hbE1pbmVyczpleHRlcm5hbE1pbmVycyxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm8saXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtwb29sQ3JlYXRpb25GZWU6cG9vbENyZWF0aW9uRmVlfT1wYXJhbXM7aWYoISh2b2lkIDA9PT1leHRlcm5hbE1pbmVyc3x8YXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGV4dGVybmFsTWluZXJzLCJleHRlcm5hbE1pbmVycyBtdXN0IGJlIGEgc3RyaW5nIikmJmFwaS5hc3NlcnQoY2FsbGluZ0NvbnRyYWN0SW5mbywibXVzdCBiZSBjYWxsZWQgZnJvbSBhIGNvbnRyYWN0IikpKXJldHVybjtjb25zdCB1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksYXV0aG9yaXplZENyZWF0aW9uPSEoIWFwaS5CaWdOdW1iZXIocG9vbENyZWF0aW9uRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHBvb2xDcmVhdGlvbkZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkQ3JlYXRpb24sInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KG1pbmVkVG9rZW4mJiJzdHJpbmciPT10eXBlb2YgbWluZWRUb2tlbiYmbG90dGVyeUFtb3VudCYmInN0cmluZyI9PXR5cGVvZiBsb3R0ZXJ5QW1vdW50JiYhYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmd0KDApLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KG1pbmVkVG9rZW4ubGVuZ3RoPjAmJm1pbmVkVG9rZW4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGxvdHRlcnlXaW5uZXJzKSYmbG90dGVyeVdpbm5lcnM+PTEmJmxvdHRlcnlXaW5uZXJzPD0yMCwiaW52YWxpZCBsb3R0ZXJ5V2lubmVyczogaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDIwIG9ubHkiKSYmYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGxvdHRlcnlJbnRlcnZhbEhvdXJzKSYmbG90dGVyeUludGVydmFsSG91cnM+PTEmJmxvdHRlcnlJbnRlcnZhbEhvdXJzPD03MjAsImludmFsaWQgbG90dGVyeUludGVydmFsSG91cnM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCA3MjAgb25seSIpKXtjb25zdCBtaW5lZFRva2VuT2JqZWN0PWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOm1pbmVkVG9rZW59KTtpZihhcGkuYXNzZXJ0KG1pbmVkVG9rZW5PYmplY3QsIm1pbmVkVG9rZW4gZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChtaW5lZFRva2VuT2JqZWN0Lmlzc3Vlcj09PWFwaS5zZW5kZXJ8fCJCRUUiPT09bWluZWRUb2tlbk9iamVjdC5zeW1ib2wmJmFwaS5zZW5kZXI9PT1hcGkub3duZXIsIm11c3QgYmUgaXNzdWVyIG9mIG1pbmVkVG9rZW4iKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmRwKCk8PW1pbmVkVG9rZW5PYmplY3QucHJlY2lzaW9uLCJtaW5lZFRva2VuIHByZWNpc2lvbiBtaXNtYXRjaCBmb3IgbG90dGVyeUFtb3VudCIpJiYoY2FsbGluZ0NvbnRyYWN0SW5mb3x8YXdhaXQgdmFsaWRhdGVUb2tlbk1pbmVycyh0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyKSkpe2NvbnN0IGJsb2NrRGF0ZT1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpLG5ld1Bvb2w9e21pbmVkVG9rZW46bWluZWRUb2tlbixsb3R0ZXJ5V2lubmVyczpsb3R0ZXJ5V2lubmVycyxsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczpsb3R0ZXJ5SW50ZXJ2YWxIb3Vycyxsb3R0ZXJ5QW1vdW50OmxvdHRlcnlBbW91bnQsdG9rZW5NaW5lcnM6dG9rZW5NaW5lcnN8fFtdLG5mdFRva2VuTWluZXI6bmZ0VG9rZW5NaW5lcixhY3RpdmU6ITEsbmV4dExvdHRlcnlUaW1lc3RhbXA6YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5wbHVzKDM2MDAqbG90dGVyeUludGVydmFsSG91cnMqMWUzKS50b051bWJlcigpLHRvdGFsUG93ZXI6IjAifTtpZihjYWxsaW5nQ29udHJhY3RJbmZvKXtpZighYXBpLmFzc2VydCghbmZ0VG9rZW5NaW5lciwiZXh0ZXJuYWwgbmZ0VG9rZW5NaW5lciBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpKXJldHVybjtuZXdQb29sLmV4dGVybmFsQ29udHJhY3Q9Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLG5ld1Bvb2wuZXh0ZXJuYWxNaW5lcnM9ZXh0ZXJuYWxNaW5lcnN9bmV3UG9vbC5pZD1nZW5lcmF0ZVBvb2xJZChuZXdQb29sKTtjb25zdCBleGlzdGluZ1Bvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6bmV3UG9vbC5pZH0pO2lmKGFwaS5hc3NlcnQoIWV4aXN0aW5nUG9vbCwicG9vbCBhbHJlYWR5IGV4aXN0cyIpKXtpZih0b2tlbk1pbmVycylmb3IobGV0IGk9MDtpPHRva2VuTWluZXJzLmxlbmd0aDtpKz0xKXtjb25zdCB0b2tlbkNvbmZpZz10b2tlbk1pbmVyc1tpXTthd2FpdCBhcGkuZGIuaW5zZXJ0KCJ0b2tlblBvb2xzIix7c3ltYm9sOnRva2VuQ29uZmlnLnN5bWJvbCxpZDpuZXdQb29sLmlkfSl9bmZ0VG9rZW5NaW5lciYmYXdhaXQgYXBpLmRiLmluc2VydCgibmZ0VG9rZW5Qb29scyIse3N5bWJvbDpuZnRUb2tlbk1pbmVyLnN5bWJvbCxpZDpuZXdQb29sLmlkfSksbmV3UG9vbC51cGRhdGluZz17aW5Qcm9ncmVzczohMCx1cGRhdGVQb29sVGltZXN0YW1wOmFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkudG9OdW1iZXIoKSx0b2tlbkluZGV4OjAsbmZ0VG9rZW5JbmRleDowLGxhc3RJZDowfTtjb25zdCBpbnNlcnRlZFBvb2w9YXdhaXQgYXBpLmRiLmluc2VydCgicG9vbHMiLG5ld1Bvb2wpO2FwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIocG9vbENyZWF0aW9uRmVlKS5ndCgwKSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6cG9vbENyZWF0aW9uRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSxhcGkuZW1pdCgiY3JlYXRlUG9vbCIse2lkOmluc2VydGVkUG9vbC5pZH0pfX19fSxhY3Rpb25zLmNoZWNrUGVuZGluZ0xvdHRlcmllcz1hc3luYygpPT57aWYoYXBpLmFzc2VydCgibnVsbCI9PT1hcGkuc2VuZGVyLCJub3QgYXV0aG9yaXplZCIpKXtjb25zdCB0aW1lc3RhbXA9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKS5nZXRUaW1lKCkscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx1cGRhdGluZ0xvdHRlcmllcz1hd2FpdCBhcGkuZGIuZmluZCgicG9vbHMiLHsidXBkYXRpbmcuaW5Qcm9ncmVzcyI6ITB9LHBhcmFtcy5tYXhMb3R0ZXJpZXNQZXJCbG9jaywwLFt7aW5kZXg6ImlkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8dXBkYXRpbmdMb3R0ZXJpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHBvb2w9dXBkYXRpbmdMb3R0ZXJpZXNbaV07YXdhaXQgcmVzdW1lUG93ZXJVcGRhdGUocG9vbCxwYXJhbXMpfWNvbnN0IHBlbmRpbmdMb3R0ZXJpZXM9YXdhaXQgYXBpLmRiLmZpbmQoInBvb2xzIix7YWN0aXZlOiEwLCJ1cGRhdGluZy5pblByb2dyZXNzIjohMSxuZXh0TG90dGVyeVRpbWVzdGFtcDp7JGx0ZTp0aW1lc3RhbXB9fSxwYXJhbXMubWF4TG90dGVyaWVzUGVyQmxvY2ssMCxbe2luZGV4OiJpZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPHBlbmRpbmdMb3R0ZXJpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHBvb2w9cGVuZGluZ0xvdHRlcmllc1tpXTthd2FpdCBydW5Mb3R0ZXJ5KHBvb2wscGFyYW1zKX19fSxhY3Rpb25zLmhhbmRsZVN0YWtlQ2hhbmdlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHthY2NvdW50OmFjY291bnQsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpxdWFudGl0eSxkZWxlZ2F0ZWQ6ZGVsZWdhdGVkLGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZDthcGkuYXNzZXJ0KGNhbGxpbmdDb250cmFjdEluZm8mJiJ0b2tlbnMiPT09Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLCJtdXN0IGJlIGNhbGxlZCBmcm9tIHRva2VucyBjb250cmFjdCIpJiZhd2FpdCBmaW5kQW5kUHJvY2Vzc0FsbCgibWluaW5nIiwidG9rZW5Qb29scyIse3N5bWJvbDpzeW1ib2x9LGFzeW5jIHRva2VuUG9vbD0+e2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6dG9rZW5Qb29sLmlkfSk7bGV0IGFkanVzdGVkO2FkanVzdGVkPWRlbGVnYXRlZD9hd2FpdCB1cGRhdGVNaW5pbmdQb3dlcihwb29sLHN5bWJvbCxhY2NvdW50LDAscXVhbnRpdHkpOmF3YWl0IHVwZGF0ZU1pbmluZ1Bvd2VyKHBvb2wsc3ltYm9sLGFjY291bnQscXVhbnRpdHksMCkscG9vbC50b3RhbFBvd2VyPWFkanVzdGVkLnBsdXMocG9vbC50b3RhbFBvd2VyKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9KX0sYWN0aW9ucy5oYW5kbGVOZnRDaGFuZ2U9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3N5bWJvbDpzeW1ib2wsbmZ0Om5mdCxhZGQ6YWRkLGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZDthcGkuYXNzZXJ0KGNhbGxpbmdDb250cmFjdEluZm8mJiJuZnQiPT09Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLCJtdXN0IGJlIGNhbGxlZCBmcm9tIG5mdCBjb250cmFjdCIpJiZhd2FpdCBmaW5kQW5kUHJvY2Vzc0FsbCgibWluaW5nIiwibmZ0VG9rZW5Qb29scyIse3N5bWJvbDpzeW1ib2x9LGFzeW5jIHRva2VuUG9vbD0+e2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6dG9rZW5Qb29sLmlkfSk7aWYocG9vbC51cGRhdGluZy5pblByb2dyZXNzJiZwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9PT1wb29sLnRva2VuTWluZXJzLmxlbmd0aCYmcG9vbC51cGRhdGluZy5sYXN0SWQ8bmZ0Ll9pZClyZXR1cm47Y29uc3QgdHlwZVByb3BlcnRpZXM9cG9vbC5uZnRUb2tlbk1pbmVyLnR5cGVNYXBbbmZ0LnByb3BlcnRpZXNbcG9vbC5uZnRUb2tlbk1pbmVyLnR5cGVGaWVsZF1dO2lmKHR5cGVQcm9wZXJ0aWVzKXtjb25zdCBhZGp1c3RlZD1hd2FpdCB1cGRhdGVOZnRNaW5pbmdQb3dlcihwb29sLG5mdCx0eXBlUHJvcGVydGllcyxhZGQscG9vbC51cGRhdGluZy51cGRhdGVQb29sVGltZXN0YW1wKTtwb29sLnRvdGFsUG93ZXI9YWRqdXN0ZWQucGx1cyhwb29sLnRvdGFsUG93ZXIpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKX19KX07"}}}