View full version

Mining Smart Contract

{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"mining","params":"","code":"Y29uc3QgTUFYX0RJR0lUUz0yMCxQUk9QRVJUWV9PUFM9e0FERDp7YWRkOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLnBsdXMoeSkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLm1pbnVzKHkpLGRlZmF1bHRWYWx1ZTowfSxNVUxUSVBMWTp7YWRkOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLm11bHRpcGxpZWRCeSh5KS5kcCgyMCkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLmRpdmlkZWRCeSh5KS5kcCgyMCksZGVmYXVsdFZhbHVlOjF9fSxNSU5JTkdfUE9XRVJfRklFTERfSU5ERVg9Il9taW5pbmdQb3dlciI7YWN0aW9ucy5jcmVhdGVTU0M9YXN5bmMoKT0+e2lmKCExPT09YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKCJtaW5pbmdQb3dlciIpKXthd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoIm1pbmluZ1Bvd2VyIixbImlkIiwicG93ZXIiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwb29scyIsWyJpZCJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInRva2VuUG9vbHMiLFsic3ltYm9sIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0VG9rZW5Qb29scyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKTtjb25zdCBwYXJhbXM9e3Bvb2xDcmVhdGlvbkZlZToiMTAwMCIscG9vbFVwZGF0ZUZlZToiMzAwIixtYXhMb3R0ZXJpZXNQZXJCbG9jazoyMCxtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrOjFlNCxwcm9jZXNzUXVlcnlMaW1pdDoxZTN9O2F3YWl0IGFwaS5kYi5pbnNlcnQoInBhcmFtcyIscGFyYW1zKX1lbHNle2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7cGFyYW1zLnVwZGF0ZUluZGV4fHwoYXdhaXQgYXBpLmRiLmFkZEluZGV4ZXMoIm1pbmluZ1Bvd2VyIixbe25hbWU6ImJ5UG9vbElkQW5kQWNjb3VudCIsaW5kZXg6e2lkOjEsYWNjb3VudDoxfX1dKSxwYXJhbXMudXBkYXRlSW5kZXg9MSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHBhcmFtcykpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgcGF5bG9hZD0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2NvbnN0e3Bvb2xDcmVhdGlvbkZlZTpwb29sQ3JlYXRpb25GZWUscG9vbFVwZGF0ZUZlZTpwb29sVXBkYXRlRmVlLG1heExvdHRlcmllc1BlckJsb2NrOm1heExvdHRlcmllc1BlckJsb2NrLG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s6bWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jayxwcm9jZXNzUXVlcnlMaW1pdDpwcm9jZXNzUXVlcnlMaW1pdH09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO2lmKHBvb2xDcmVhdGlvbkZlZSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwb29sQ3JlYXRpb25GZWUmJiFhcGkuQmlnTnVtYmVyKHBvb2xDcmVhdGlvbkZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihwb29sQ3JlYXRpb25GZWUpLmd0ZSgwKSwiaW52YWxpZCBwb29sQ3JlYXRpb25GZWUiKSlyZXR1cm47cGFyYW1zLnBvb2xDcmVhdGlvbkZlZT1wb29sQ3JlYXRpb25GZWV9aWYocG9vbFVwZGF0ZUZlZSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwb29sVXBkYXRlRmVlJiYhYXBpLkJpZ051bWJlcihwb29sVXBkYXRlRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHBvb2xVcGRhdGVGZWUpLmd0ZSgwKSwiaW52YWxpZCBwb29sVXBkYXRlRmVlIikpcmV0dXJuO3BhcmFtcy5wb29sVXBkYXRlRmVlPXBvb2xVcGRhdGVGZWV9aWYobWF4TG90dGVyaWVzUGVyQmxvY2spe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobWF4TG90dGVyaWVzUGVyQmxvY2spJiZtYXhMb3R0ZXJpZXNQZXJCbG9jaz49MSwiaW52YWxpZCBtYXhMb3R0ZXJpZXNQZXJCbG9jayIpKXJldHVybjtwYXJhbXMubWF4TG90dGVyaWVzUGVyQmxvY2s9bWF4TG90dGVyaWVzUGVyQmxvY2t9aWYobWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jayl7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrKSYmbWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jaz49MSwiaW52YWxpZCBtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrIikpcmV0dXJuO3BhcmFtcy5tYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrPW1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2t9aWYocHJvY2Vzc1F1ZXJ5TGltaXQpe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIocHJvY2Vzc1F1ZXJ5TGltaXQpJiZwcm9jZXNzUXVlcnlMaW1pdD49MSwiaW52YWxpZCBwcm9jZXNzUXVlcnlMaW1pdCIpKXJldHVybjtwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQ9cHJvY2Vzc1F1ZXJ5TGltaXR9YXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixwYXJhbXMpfTtjb25zdCBmaW5kQW5kUHJvY2Vzc0FsbD1hc3luYyhjb250cmFjdE5hbWUsdGFibGUscXVlcnksY2FsbGJhY2spPT57bGV0IG9mZnNldD0wLHJlc3VsdHM9W10sZG9uZT0hMTtmb3IoOyFkb25lOylpZihyZXN1bHRzPWF3YWl0IGFwaS5kYi5maW5kSW5UYWJsZShjb250cmFjdE5hbWUsdGFibGUscXVlcnksMWUzLG9mZnNldCkscmVzdWx0cyl7Zm9yKGxldCBpPTA7aTxyZXN1bHRzLmxlbmd0aDtpKz0xKWF3YWl0IGNhbGxiYWNrKHJlc3VsdHNbaV0pO3Jlc3VsdHMubGVuZ3RoPDFlMz9kb25lPSEwOm9mZnNldCs9MWUzfX07YXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVOZnRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpe2lmKCFhcGkuYXNzZXJ0KHByb3BlcnRpZXMmJkFycmF5LmlzQXJyYXkocHJvcGVydGllcyksImludmFsaWQgbmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQocHJvcGVydGllcy5sZW5ndGg+MCYmcHJvcGVydGllcy5sZW5ndGg8PTQsIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBzaXplIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0IikpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxwcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wPXByb3BlcnRpZXNbaV0scHJvcEtleXM9T2JqZWN0LmtleXMocHJvcCk7Zm9yKGxldCBqPTA7ajxwcm9wS2V5cy5sZW5ndGg7ais9MSl7Y29uc3QgcHJvcEtleT1wcm9wS2V5c1tqXTtpZigib3AiPT09cHJvcEtleSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwcm9wLm9wJiZQUk9QRVJUWV9PUFNbcHJvcC5vcF0sIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBvcCBzaG91bGQgYmUgQUREIG9yIE1VTFRJUExZIikpcmV0dXJuITF9ZWxzZSBpZigibmFtZSI9PT1wcm9wS2V5KXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHByb3AubmFtZSYmcHJvcC5uYW1lLmxlbmd0aDw9MTYsIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBuYW1lIHNob3VsZCBiZSBhIHN0cmluZyBvZiBsZW5ndGggPD0gMTYiKSlyZXR1cm4hMX1lbHNle2lmKCJidXJuQ2hhbmdlIiE9PXByb3BLZXkpcmV0dXJuIGFwaS5hc3NlcnQoITEsIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBmaWVsZCBpbnZhbGlkIiksITE7e2lmKCFhcGkuYXNzZXJ0KCJvYmplY3QiPT10eXBlb2YgcHJvcC5idXJuQ2hhbmdlJiYic3RyaW5nIj09dHlwZW9mIHByb3AuYnVybkNoYW5nZS5zeW1ib2wmJmFwaS5CaWdOdW1iZXIocHJvcC5idXJuQ2hhbmdlLnF1YW50aXR5KS5pc0Zpbml0ZSgpJiZhcGkuQmlnTnVtYmVyKHByb3AuYnVybkNoYW5nZS5xdWFudGl0eSkuaXNQb3NpdGl2ZSgpLCJuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMgYnVybkNoYW5nZSBpbnZhbGlkIikpcmV0dXJuITE7Y29uc3QgdG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cHJvcC5idXJuQ2hhbmdlLnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KHRva2VuLCJuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMgYnVybkNoYW5nZSBzeW1ib2wgbm90IGZvdW5kIikpcmV0dXJuITF9fX19cmV0dXJuITB9ZnVuY3Rpb24gdmFsaWRhdGVOZnRUeXBlTWFwKHR5cGVNYXAscHJvcGVydGllcyl7aWYoIWFwaS5hc3NlcnQodHlwZU1hcCYmIm9iamVjdCI9PXR5cGVvZiB0eXBlTWFwLCJpbnZhbGlkIG5mdFRva2VuTWluZXIgdHlwZU1hcCIpKXJldHVybiExO2NvbnN0IHR5cGVzPU9iamVjdC5rZXlzKHR5cGVNYXApO2ZvcihsZXQgaj0wO2o8dHlwZXMubGVuZ3RoO2orPTEpe2NvbnN0IHR5cGVDb25maWc9dHlwZU1hcFt0eXBlc1tqXV07aWYoIWFwaS5hc3NlcnQoQXJyYXkuaXNBcnJheSh0eXBlQ29uZmlnKSYmdHlwZUNvbmZpZy5sZW5ndGg9PT1wcm9wZXJ0aWVzLmxlbmd0aCwibmZ0VG9rZW5NaW5lciB0eXBlQ29uZmlnIGxlbmd0aCBtaXNtYXRjaCIpKXJldHVybiExO2ZvcihsZXQgaz0wO2s8dHlwZUNvbmZpZy5sZW5ndGg7ays9MSl7Y29uc3QgdHlwZVByb3BlcnR5PWFwaS5CaWdOdW1iZXIodHlwZUNvbmZpZ1trXSk7aWYoIWFwaS5hc3NlcnQoIXR5cGVQcm9wZXJ0eS5pc05hTigpJiZ0eXBlUHJvcGVydHkuaXNGaW5pdGUoKSwibmZ0VG9rZW5NaW5lciB0eXBlQ29uZmlnIGludmFsaWQiKSlyZXR1cm4hMTtpZigiTVVMVElQTFkiPT09cHJvcGVydGllc1trXS5vcCYmIWFwaS5hc3NlcnQodHlwZVByb3BlcnR5Lmd0ZSguMDEpJiZ0eXBlUHJvcGVydHkubHRlKDEwMCksIm5mdFRva2VuTWluZXIgdHlwZUNvbmZpZyBNVUxUSVBMWSBwcm9wZXJ0eSBzaG91bGQgYmUgYmV0d2VlbiAwLjAxIGFuZCAxMDAiKSlyZXR1cm4hMX19cmV0dXJuITB9YXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUb2tlbk1pbmVycyh0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyKXtpZighYXBpLmFzc2VydCh0b2tlbk1pbmVycyYmQXJyYXkuaXNBcnJheSh0b2tlbk1pbmVycyksInRva2VuTWluZXJzIGludmFsaWQiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydCh0b2tlbk1pbmVycy5sZW5ndGg+PTEmJnRva2VuTWluZXJzLmxlbmd0aDw9Mnx8bmZ0VG9rZW5NaW5lciYmMD09PXRva2VuTWluZXJzLmxlbmd0aCwib25seSAxIG9yIDIgdG9rZW5NaW5lcnMgYWxsb3dlZCIpKXJldHVybiExO2NvbnN0IHRva2VuTWluZXJTeW1ib2xzPW5ldyBTZXQ7Zm9yKGxldCBpPTA7aTx0b2tlbk1pbmVycy5sZW5ndGg7aSs9MSl7Y29uc3QgdG9rZW5NaW5lckNvbmZpZz10b2tlbk1pbmVyc1tpXTtpZighYXBpLmFzc2VydCh0b2tlbk1pbmVyQ29uZmlnJiZ0b2tlbk1pbmVyQ29uZmlnLnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiB0b2tlbk1pbmVyQ29uZmlnLnN5bWJvbCwidG9rZW5NaW5lcnMgaW52YWxpZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KCF0b2tlbk1pbmVyU3ltYm9scy5oYXModG9rZW5NaW5lckNvbmZpZy5zeW1ib2wpLCJ0b2tlbk1pbmVycyBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgc3ltYm9scyIpKXJldHVybiExO3Rva2VuTWluZXJTeW1ib2xzLmFkZCh0b2tlbk1pbmVyQ29uZmlnLnN5bWJvbCk7Y29uc3R7c3ltYm9sOnN5bWJvbH09dG9rZW5NaW5lckNvbmZpZyx0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KTtpZighYXBpLmFzc2VydCh0b2tlbiYmdG9rZW4uc3Rha2luZ0VuYWJsZWQsInRva2VuTWluZXJzIG11c3QgaGF2ZSBzdGFraW5nIGVuYWJsZWQiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKHRva2VuTWluZXJDb25maWcubXVsdGlwbGllcikmJnRva2VuTWluZXJDb25maWcubXVsdGlwbGllcj49MSYmdG9rZW5NaW5lckNvbmZpZy5tdWx0aXBsaWVyPD0xMDAsInRva2VuTWluZXIgbXVsdGlwbGllciBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxIHRvIDEwMCIpKXJldHVybiExfWlmKG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KG5mdFRva2VuTWluZXIuc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIG5mdFRva2VuTWluZXIuc3ltYm9sLCJuZnRUb2tlbk1pbmVyIGludmFsaWQiKSlyZXR1cm4hMTtjb25zdHtzeW1ib2w6c3ltYm9sLHR5cGVNYXA6dHlwZU1hcCxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsdHlwZUZpZWxkOnR5cGVGaWVsZCxlcXVpcEZpZWxkOmVxdWlwRmllbGQsbWluaW5nUG93ZXJGaWVsZDptaW5pbmdQb3dlckZpZWxkfT1uZnRUb2tlbk1pbmVyLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoIm5mdCIsIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQobmZ0JiZuZnQuZGVsZWdhdGlvbkVuYWJsZWQsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIGRlbGVnYXRpb24gZW5hYmxlZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHR5cGVGaWVsZCYmInN0cmluZyI9PXR5cGVvZiB0eXBlRmllbGQsInR5cGVGaWVsZCBtdXN0IGJlIGEgc3RyaW5nIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQobmZ0LnByb3BlcnRpZXNbdHlwZUZpZWxkXSYmInN0cmluZyI9PT1uZnQucHJvcGVydGllc1t0eXBlRmllbGRdLnR5cGUsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIHN0cmluZyB0eXBlIHByb3BlcnR5IikpcmV0dXJuITE7aWYodm9pZCAwIT09ZXF1aXBGaWVsZCl7aWYoIWFwaS5hc3NlcnQoZXF1aXBGaWVsZCYmInN0cmluZyI9PXR5cGVvZiBlcXVpcEZpZWxkLCJlcXVpcEZpZWxkIG11c3QgYmUgYSBzdHJpbmciKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChuZnQucHJvcGVydGllc1tlcXVpcEZpZWxkXSYmInN0cmluZyI9PT1uZnQucHJvcGVydGllc1tlcXVpcEZpZWxkXS50eXBlLCJuZnRUb2tlbk1pbmVyIG11c3QgaGF2ZSBzdHJpbmcgZXF1aXAgcHJvcGVydHkiKSlyZXR1cm4hMX1pZih2b2lkIDAhPT1taW5pbmdQb3dlckZpZWxkKXtpZighYXBpLmFzc2VydChtaW5pbmdQb3dlckZpZWxkJiYic3RyaW5nIj09dHlwZW9mIG1pbmluZ1Bvd2VyRmllbGQsIm1pbmluZ1Bvd2VyRmllbGQgbXVzdCBiZSBhIHN0cmluZyIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KG5mdC5wcm9wZXJ0aWVzW21pbmluZ1Bvd2VyRmllbGRdJiYic3RyaW5nIj09PW5mdC5wcm9wZXJ0aWVzW21pbmluZ1Bvd2VyRmllbGRdLnR5cGUsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIHN0cmluZyBtaW5pbmdQb3dlciBwcm9wZXJ0eSIpKXJldHVybiExfWlmKCFhd2FpdCB2YWxpZGF0ZU5mdFByb3BlcnRpZXMocHJvcGVydGllcykpcmV0dXJuITE7aWYoIXZhbGlkYXRlTmZ0VHlwZU1hcCh0eXBlTWFwLHByb3BlcnRpZXMpKXJldHVybiExfXJldHVybiEwfWFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlVG9rZW5NaW5lcnNDaGFuZ2Uob2xkVG9rZW5NaW5lcnMsdG9rZW5NaW5lcnMsb2xkTmZ0VG9rZW5NaW5lcixuZnRUb2tlbk1pbmVyKXtpZighYXBpLmFzc2VydCh0b2tlbk1pbmVycy5sZW5ndGg9PT1vbGRUb2tlbk1pbmVycy5sZW5ndGgsImNhbm5vdCBjaGFuZ2Ugd2hpY2ggdG9rZW5zIGFyZSBpbiB0b2tlbk1pbmVycyIpKXJldHVybiExO2xldCBjaGFuZ2VkPSExO2ZvcihsZXQgaT0wO2k8dG9rZW5NaW5lcnMubGVuZ3RoO2krPTEpe2NvbnN0IG9sZENvbmZpZz1vbGRUb2tlbk1pbmVyc1tpXSxuZXdDb25maWc9dG9rZW5NaW5lcnNbaV07aWYoIWFwaS5hc3NlcnQob2xkQ29uZmlnLnN5bWJvbD09PW5ld0NvbmZpZy5zeW1ib2wsImNhbm5vdCBjaGFuZ2Ugd2hpY2ggdG9rZW5zIGFyZSBpbiB0b2tlbk1pbmVycyIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobmV3Q29uZmlnLm11bHRpcGxpZXIpJiZuZXdDb25maWcubXVsdGlwbGllcj49MSYmbmV3Q29uZmlnLm11bHRpcGxpZXI8PTEwMCwidG9rZW5NaW5lciBtdWx0aXBsaWVyIG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEgdG8gMTAwIikpcmV0dXJuITE7b2xkQ29uZmlnLm11bHRpcGxpZXIhPT1uZXdDb25maWcubXVsdGlwbGllciYmKGNoYW5nZWQ9ITApfWlmKCFhcGkuYXNzZXJ0KCEhb2xkTmZ0VG9rZW5NaW5lcj09ISFuZnRUb2tlbk1pbmVyLCJjYW5ub3QgY2hhbmdlIG5mdFRva2VuTWluZXIgdG9rZW4iKSlyZXR1cm4hMTtpZihuZnRUb2tlbk1pbmVyKXtpZighYXBpLmFzc2VydChvbGROZnRUb2tlbk1pbmVyLnN5bWJvbD09PW5mdFRva2VuTWluZXIuc3ltYm9sLCJjYW5ub3QgY2hhbmdlIG5mdFRva2VuTWluZXIgdG9rZW4iKSlyZXR1cm4hMTtjb25zdHt0eXBlTWFwOnR5cGVNYXAscHJvcGVydGllczpwcm9wZXJ0aWVzLHR5cGVGaWVsZDp0eXBlRmllbGQsZXF1aXBGaWVsZDplcXVpcEZpZWxkLG1pbmluZ1Bvd2VyRmllbGQ6bWluaW5nUG93ZXJGaWVsZH09bmZ0VG9rZW5NaW5lcjtpZighYXBpLmFzc2VydCh0eXBlRmllbGQmJiJzdHJpbmciPT10eXBlb2YgdHlwZUZpZWxkJiZ0eXBlRmllbGQ9PT1vbGROZnRUb2tlbk1pbmVyLnR5cGVGaWVsZCwiY2Fubm90IGNoYW5nZSBuZnRUb2tlbk1pbmVyIHR5cGVGaWVsZCIpKXJldHVybiExO2lmKG9sZE5mdFRva2VuTWluZXIuZXF1aXBGaWVsZCl7aWYoIWFwaS5hc3NlcnQoZXF1aXBGaWVsZCYmInN0cmluZyI9PXR5cGVvZiBlcXVpcEZpZWxkJiZlcXVpcEZpZWxkPT09b2xkTmZ0VG9rZW5NaW5lci5lcXVpcEZpZWxkLCJjYW5ub3QgY2hhbmdlIG5mdFRva2VuTWluZXIgZXF1aXBGaWVsZCIpKXJldHVybiExfWVsc2UgaWYoIWFwaS5hc3NlcnQoIWVxdWlwRmllbGQsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciBlcXVpcEZpZWxkIikpcmV0dXJuITE7aWYob2xkTmZ0VG9rZW5NaW5lci5taW5pbmdQb3dlckZpZWxkKXtpZighYXBpLmFzc2VydChtaW5pbmdQb3dlckZpZWxkJiYic3RyaW5nIj09dHlwZW9mIG1pbmluZ1Bvd2VyRmllbGQmJm1pbmluZ1Bvd2VyRmllbGQ9PT1vbGROZnRUb2tlbk1pbmVyLm1pbmluZ1Bvd2VyRmllbGQsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciBtaW5pbmdQb3dlckZpZWxkIikpcmV0dXJuITF9ZWxzZSBpZighYXBpLmFzc2VydCghbWluaW5nUG93ZXJGaWVsZCwiY2Fubm90IGNoYW5nZSBuZnRUb2tlbk1pbmVyIG1pbmluZ1Bvd2VyRmllbGQiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydCh0eXBlTWFwJiYib2JqZWN0Ij09dHlwZW9mIHR5cGVNYXAsImludmFsaWQgbmZ0VG9rZW5NaW5lciB0eXBlTWFwIikpcmV0dXJuITE7aWYoIWF3YWl0IHZhbGlkYXRlTmZ0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSlyZXR1cm4hMTtpZihwcm9wZXJ0aWVzLmxlbmd0aCE9PW9sZE5mdFRva2VuTWluZXIucHJvcGVydGllcy5sZW5ndGgpY2hhbmdlZD0hMDtlbHNlIGZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcHJvcD1wcm9wZXJ0aWVzW2ldLG9sZFByb3A9b2xkTmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzW2ldO3Byb3Aub3AhPT1vbGRQcm9wLm9wJiYoY2hhbmdlZD0hMCl9aWYoIXZhbGlkYXRlTmZ0VHlwZU1hcCh0eXBlTWFwLHByb3BlcnRpZXMpKXJldHVybiExO2NvbnN0IG9sZFR5cGVzPU9iamVjdC5rZXlzKG9sZE5mdFRva2VuTWluZXIudHlwZU1hcCk7Zm9yKGxldCBpPTA7aTxvbGRUeXBlcy5sZW5ndGg7aSs9MSl7Y29uc3Qgb2xkVHlwZT1vbGRUeXBlc1tpXSxvbGRUeXBlQ29uZmlnPW9sZE5mdFRva2VuTWluZXIudHlwZU1hcFtvbGRUeXBlXSx0eXBlQ29uZmlnPXR5cGVNYXBbb2xkVHlwZV07aWYoIWFwaS5hc3NlcnQodHlwZUNvbmZpZywidHlwZUNvbmZpZyB0eXBlcyBtdXN0IGJlIGEgc3VwZXJzZXQgb2Ygb2xkIHR5cGVDb25maWcgdHlwZXMiKSlyZXR1cm4hMTtmb3IobGV0IGo9MDtqPHR5cGVDb25maWcubGVuZ3RoO2orPTEpb2xkVHlwZUNvbmZpZ1tqXSE9PXR5cGVDb25maWdbal0mJihjaGFuZ2VkPSEwKX19cmV0dXJue2NoYW5nZWQ6Y2hhbmdlZH19ZnVuY3Rpb24gY29tcHV0ZU1pbmluZ1Bvd2VyKG1pbmluZ1Bvd2VyLHRva2VuTWluZXJzLG5mdFRva2VuTWluZXIpe2xldCBwb3dlcj1hcGkuQmlnTnVtYmVyKDApO2ZvcihsZXQgaT0wO2k8dG9rZW5NaW5lcnMubGVuZ3RoO2krPTEpbWluaW5nUG93ZXIuYmFsYW5jZXNbaV0mJihwb3dlcj1wb3dlci5wbHVzKGFwaS5CaWdOdW1iZXIobWluaW5nUG93ZXIuYmFsYW5jZXNbaV0pLm11bHRpcGxpZWRCeSh0b2tlbk1pbmVyc1tpXS5tdWx0aXBsaWVyKSkpO2lmKG5mdFRva2VuTWluZXImJm1pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzKXtsZXQgbmZ0UG93ZXI9YXBpLkJpZ051bWJlcigxKTtmb3IobGV0IGk9MDtpPG5mdFRva2VuTWluZXIucHJvcGVydGllcy5sZW5ndGg7aSs9MSluZnRQb3dlcj1uZnRQb3dlci5tdWx0aXBsaWVkQnkobWluaW5nUG93ZXIubmZ0QmFsYW5jZXNbaV0pLmRwKDIwKTtuZnRQb3dlci5pc0Zpbml0ZSgpfHwobmZ0UG93ZXI9YXBpLkJpZ051bWJlcigwKSksbWluaW5nUG93ZXIubmZ0QmFsYW5jZXMuX21pbmluZ1Bvd2VyJiYobmZ0UG93ZXI9bmZ0UG93ZXIucGx1cyhtaW5pbmdQb3dlci5uZnRCYWxhbmNlcy5fbWluaW5nUG93ZXIpKSxwb3dlcj1wb3dlci5wbHVzKG5mdFBvd2VyKX1yZXR1cm4gcG93ZXIuaXNQb3NpdGl2ZSgpJiZwb3dlci5pc0Zpbml0ZSgpP3Bvd2VyOmFwaS5CaWdOdW1iZXIoMCl9YXN5bmMgZnVuY3Rpb24gdXBkYXRlTWluaW5nUG93ZXIocG9vbCx0b2tlbixhY2NvdW50LHN0YWtlZFF1YW50aXR5LGRlbGVnYXRlZFF1YW50aXR5LHVwZGF0ZVBvb2xUaW1lc3RhbXApe2xldCBtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudH0pLHN0YWtlPWFwaS5CaWdOdW1iZXIoc3Rha2VkUXVhbnRpdHkpLG9sZE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCk7c3Rha2U9c3Rha2UucGx1cyhkZWxlZ2F0ZWRRdWFudGl0eSk7Y29uc3QgdG9rZW5JbmRleD1wb29sLnRva2VuTWluZXJzLmZpbmRJbmRleCh0PT50LnN5bWJvbD09PXRva2VuKTtpZihtaW5pbmdQb3dlcil7aWYodXBkYXRlUG9vbFRpbWVzdGFtcCYmbWluaW5nUG93ZXIudXBkYXRlUG9vbFRpbWVzdGFtcCE9PXVwZGF0ZVBvb2xUaW1lc3RhbXApe2ZvcihsZXQgaT0wO2k8cG9vbC50b2tlbk1pbmVycy5sZW5ndGg7aSs9MSltaW5pbmdQb3dlci5iYWxhbmNlc1tpXT0iMCI7aWYobWluaW5nUG93ZXIubmZ0QmFsYW5jZXMpe21pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzPXt9O2NvbnN0e25mdEJhbGFuY2VzOm5mdEJhbGFuY2VzfT1taW5pbmdQb3dlcjtmb3IobGV0IGo9MDtqPHBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aDtqKz0xKXtjb25zdCBwcm9wZXJ0eT1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllc1tqXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tqXT1vcEluZm8uZGVmYXVsdFZhbHVlfX19ZWxzZSBtaW5pbmdQb3dlci5iYWxhbmNlc1t0b2tlbkluZGV4XXx8KG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdPSIwIik7b2xkTWluaW5nUG93ZXI9Y29tcHV0ZU1pbmluZ1Bvd2VyKG1pbmluZ1Bvd2VyLHBvb2wudG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyKSxtaW5pbmdQb3dlci5iYWxhbmNlc1t0b2tlbkluZGV4XT1zdGFrZS5wbHVzKG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdKX1lbHNle2NvbnN0IGJhbGFuY2VzPXt9O2JhbGFuY2VzW3Rva2VuSW5kZXhdPXN0YWtlLG1pbmluZ1Bvd2VyPXtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudCxiYWxhbmNlczpiYWxhbmNlcyxwb3dlcjp7JG51bWJlckRlY2ltYWw6IjAifX0sbWluaW5nUG93ZXI9YXdhaXQgYXBpLmRiLmluc2VydCgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKX1jb25zdCBuZXdNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpO3JldHVybiBtaW5pbmdQb3dlci5wb3dlcj17JG51bWJlckRlY2ltYWw6bmV3TWluaW5nUG93ZXJ9LHVwZGF0ZVBvb2xUaW1lc3RhbXAmJihtaW5pbmdQb3dlci51cGRhdGVQb29sVGltZXN0YW1wPXVwZGF0ZVBvb2xUaW1lc3RhbXApLGF3YWl0IGFwaS5kYi51cGRhdGUoIm1pbmluZ1Bvd2VyIixtaW5pbmdQb3dlciksbmV3TWluaW5nUG93ZXIubWludXMob2xkTWluaW5nUG93ZXIpfWZ1bmN0aW9uIGdldE5mdEFjY291bnQobmZ0KXtyZXR1cm4ibWluaW5nIj09PW5mdC5kZWxlZ2F0ZWRUby5hY2NvdW50JiYiYyI9PT1uZnQuZGVsZWdhdGVkVG8ub3duZWRCeT9uZnQuYWNjb3VudDoidSI9PT1uZnQuZGVsZWdhdGVkVG8ub3duZWRCeT9uZnQuZGVsZWdhdGVkVG8uYWNjb3VudDpudWxsfWZ1bmN0aW9uIHNhbml0aXplTmZ0TWluaW5nUG93ZXIobmZ0TWluaW5nUG93ZXIpe2xldCBleHRyYU5mdE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIobmZ0TWluaW5nUG93ZXIpO3JldHVybiFleHRyYU5mdE1pbmluZ1Bvd2VyLmlzTmFOKCkmJmV4dHJhTmZ0TWluaW5nUG93ZXIuaXNGaW5pdGUoKXx8KGV4dHJhTmZ0TWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcigwKSksZXh0cmFOZnRNaW5pbmdQb3dlci5kcCgyMCl9YXN5bmMgZnVuY3Rpb24gdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsYWRkLHVwZGF0ZVBvb2xUaW1lc3RhbXAsYWNjb3VudE92ZXJyaWRlKXtjb25zdCBhY2NvdW50PWFjY291bnRPdmVycmlkZXx8Z2V0TmZ0QWNjb3VudChuZnQpO2lmKCFhY2NvdW50KXJldHVybiBhcGkuQmlnTnVtYmVyKDApO2xldCBtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudH0pLG9sZE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCksZXh0cmFOZnRNaW5pbmdQb3dlcj1hcGkuQmlnTnVtYmVyKDApO2NvbnN0e3R5cGVNYXA6dHlwZU1hcCxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsdHlwZUZpZWxkOnR5cGVGaWVsZCxlcXVpcEZpZWxkOmVxdWlwRmllbGQsbWluaW5nUG93ZXJGaWVsZDptaW5pbmdQb3dlckZpZWxkfT1wb29sLm5mdFRva2VuTWluZXIsbmZ0VHlwZT1uZnQucHJvcGVydGllc1t0eXBlRmllbGRdLHR5cGVQcm9wZXJ0aWVzPXR5cGVNYXBbbmZ0VHlwZV07aWYobWluaW5nUG93ZXJGaWVsZCYmKGV4dHJhTmZ0TWluaW5nUG93ZXI9c2FuaXRpemVOZnRNaW5pbmdQb3dlcihuZnQucHJvcGVydGllc1ttaW5pbmdQb3dlckZpZWxkXSkpLG1pbmluZ1Bvd2VyKXttaW5pbmdQb3dlci5uZnRCYWxhbmNlc3x8KG1pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzPXt9KSxtaW5pbmdQb3dlci5lcXVpcHBlZE5mdHN8fChtaW5pbmdQb3dlci5lcXVpcHBlZE5mdHM9e30pO2NvbnN0IG9sZEV4dHJhTmZ0TWluaW5nUG93ZXI9MDtsZXQgZXF1aXBwZWROZnQ9bWluaW5nUG93ZXIuZXF1aXBwZWROZnRzW25mdC5faWRdO2lmKCFlcXVpcHBlZE5mdCl7aWYoZXF1aXBGaWVsZCYmIWFkZClyZXR1cm4gYXBpLkJpZ051bWJlcigwKTtlcXVpcHBlZE5mdD17dHlwZTpuZnRUeXBlfSxtaW5pbmdQb3dlci5lcXVpcHBlZE5mdHNbbmZ0Ll9pZF09ZXF1aXBwZWROZnR9Y29uc3R7bmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXN9PW1pbmluZ1Bvd2VyO2lmKHR5cGVQcm9wZXJ0aWVzKWZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcHJvcGVydHk9cHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tpXSYmbWluaW5nUG93ZXIudXBkYXRlUG9vbFRpbWVzdGFtcD09PXVwZGF0ZVBvb2xUaW1lc3RhbXB8fChuZnRCYWxhbmNlc1tpXT1vcEluZm8uZGVmYXVsdFZhbHVlKX1pZihtaW5pbmdQb3dlckZpZWxkJiZtaW5pbmdQb3dlci51cGRhdGVQb29sVGltZXN0YW1wIT09dXBkYXRlUG9vbFRpbWVzdGFtcCYmKG5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcj1hcGkuQmlnTnVtYmVyKDApKSxvbGRNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpLHR5cGVQcm9wZXJ0aWVzKWZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcHJvcGVydHk9cHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tpXT1hZGQ/b3BJbmZvLmFkZChuZnRCYWxhbmNlc1tpXSx0eXBlUHJvcGVydGllc1tpXSk6b3BJbmZvLnJlbW92ZShuZnRCYWxhbmNlc1tpXSx0eXBlUHJvcGVydGllc1tpXSl9bWluaW5nUG93ZXJGaWVsZCYmKG5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcnx8KG5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcj1hcGkuQmlnTnVtYmVyKDApKSxhZGQ/KGVxdWlwcGVkTmZ0LmV4dHJhTWluaW5nUG93ZXI9ZXh0cmFOZnRNaW5pbmdQb3dlcixuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcihuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXIpLm1pbnVzKG9sZEV4dHJhTmZ0TWluaW5nUG93ZXIpLnBsdXMoZXh0cmFOZnRNaW5pbmdQb3dlcikpOm5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcj1hcGkuQmlnTnVtYmVyKG5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcikubWludXMoZXh0cmFOZnRNaW5pbmdQb3dlcikpfWVsc2V7Y29uc3QgbmZ0QmFsYW5jZXM9e30sZXF1aXBwZWROZnQ9e3R5cGU6bmZ0VHlwZX07aWYodHlwZVByb3BlcnRpZXMpZm9yKGxldCBpPTA7aTxwcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wZXJ0eT1wcm9wZXJ0aWVzW2ldLG9wSW5mbz1QUk9QRVJUWV9PUFNbcHJvcGVydHkub3BdO2lmKCFhZGQpcmV0dXJuIGFwaS5hc3NlcnQoITEsInVuZXhwZWN0ZWQgY29uZGl0aW9uOiByZW1vdmUgd2l0aG91dCBwcmV2aW91cyBtaW5pbmdQb3dlciIpLGFwaS5CaWdOdW1iZXIoMCk7bmZ0QmFsYW5jZXNbaV09b3BJbmZvLmFkZChvcEluZm8uZGVmYXVsdFZhbHVlLHR5cGVQcm9wZXJ0aWVzW2ldKX1taW5pbmdQb3dlckZpZWxkJiYobmZ0QmFsYW5jZXMuX21pbmluZ1Bvd2VyPWV4dHJhTmZ0TWluaW5nUG93ZXIsZXF1aXBwZWROZnQuZXh0cmFNaW5pbmdQb3dlcj1leHRyYU5mdE1pbmluZ1Bvd2VyKTtjb25zdCBlcXVpcHBlZE5mdHM9e307ZXF1aXBwZWROZnRzW25mdC5faWRdPWVxdWlwcGVkTmZ0LG1pbmluZ1Bvd2VyPXtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudCxiYWxhbmNlczp7fSxuZnRCYWxhbmNlczpuZnRCYWxhbmNlcyxwb3dlcjp7JG51bWJlckRlY2ltYWw6IjAifSxlcXVpcHBlZE5mdHM6ZXF1aXBwZWROZnRzfSxtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpfWNvbnN0IG5ld01pbmluZ1Bvd2VyPWNvbXB1dGVNaW5pbmdQb3dlcihtaW5pbmdQb3dlcixwb29sLnRva2VuTWluZXJzLHBvb2wubmZ0VG9rZW5NaW5lcik7cmV0dXJuIG1pbmluZ1Bvd2VyLnBvd2VyPXskbnVtYmVyRGVjaW1hbDpuZXdNaW5pbmdQb3dlcn0sbWluaW5nUG93ZXIudXBkYXRlUG9vbFRpbWVzdGFtcD11cGRhdGVQb29sVGltZXN0YW1wLGFkZHx8ZGVsZXRlIG1pbmluZ1Bvd2VyLmVxdWlwcGVkTmZ0c1tuZnQuX2lkXSxhd2FpdCBhcGkuZGIudXBkYXRlKCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpLG5ld01pbmluZ1Bvd2VyLm1pbnVzKG9sZE1pbmluZ1Bvd2VyKX1hc3luYyBmdW5jdGlvbiB1cGRhdGVOZnRNaW5pbmdQb3dlckZyb21Qcm9wZXJ0eVVwZGF0ZShwb29sLG5mdCxhY2NvdW50T3ZlcnJpZGUpe2NvbnN0IGFjY291bnQ9YWNjb3VudE92ZXJyaWRlfHxnZXROZnRBY2NvdW50KG5mdCk7aWYoIWFjY291bnQpcmV0dXJuIGFwaS5CaWdOdW1iZXIoMCk7bGV0IG1pbmluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5maW5kT25lKCJtaW5pbmdQb3dlciIse2lkOnBvb2wuaWQsYWNjb3VudDphY2NvdW50fSksb2xkTWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcigwKSxleHRyYU5mdE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCk7Y29uc3R7dHlwZUZpZWxkOnR5cGVGaWVsZCxlcXVpcEZpZWxkOmVxdWlwRmllbGQsbWluaW5nUG93ZXJGaWVsZDptaW5pbmdQb3dlckZpZWxkfT1wb29sLm5mdFRva2VuTWluZXIsbmZ0VHlwZT1uZnQucHJvcGVydGllc1t0eXBlRmllbGRdO2lmKCFtaW5pbmdQb3dlckZpZWxkKXJldHVybiBhcGkuQmlnTnVtYmVyKDApO2lmKGV4dHJhTmZ0TWluaW5nUG93ZXI9c2FuaXRpemVOZnRNaW5pbmdQb3dlcihuZnQucHJvcGVydGllc1ttaW5pbmdQb3dlckZpZWxkXSksbWluaW5nUG93ZXIpe21pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzfHwobWluaW5nUG93ZXIubmZ0QmFsYW5jZXM9e30pLG1pbmluZ1Bvd2VyLmVxdWlwcGVkTmZ0c3x8KG1pbmluZ1Bvd2VyLmVxdWlwcGVkTmZ0cz17fSk7bGV0IG9sZEV4dHJhTmZ0TWluaW5nUG93ZXI9MCxlcXVpcHBlZE5mdD1taW5pbmdQb3dlci5lcXVpcHBlZE5mdHNbbmZ0Ll9pZF07aWYoZXF1aXBwZWROZnQpb2xkRXh0cmFOZnRNaW5pbmdQb3dlcj1lcXVpcHBlZE5mdC5leHRyYU1pbmluZ1Bvd2VyO2Vsc2V7aWYoZXF1aXBGaWVsZClyZXR1cm4gYXBpLkJpZ051bWJlcigwKTtlcXVpcHBlZE5mdD17dHlwZTpuZnRUeXBlfSxtaW5pbmdQb3dlci5lcXVpcHBlZE5mdHNbbmZ0Ll9pZF09ZXF1aXBwZWROZnR9Y29uc3R7bmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXN9PW1pbmluZ1Bvd2VyO29sZE1pbmluZ1Bvd2VyPWNvbXB1dGVNaW5pbmdQb3dlcihtaW5pbmdQb3dlcixwb29sLnRva2VuTWluZXJzLHBvb2wubmZ0VG9rZW5NaW5lciksbmZ0QmFsYW5jZXMuX21pbmluZ1Bvd2VyfHwobmZ0QmFsYW5jZXMuX21pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCkpLGVxdWlwcGVkTmZ0LmV4dHJhTWluaW5nUG93ZXI9ZXh0cmFOZnRNaW5pbmdQb3dlcixuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcihuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXIpLm1pbnVzKG9sZEV4dHJhTmZ0TWluaW5nUG93ZXIpLnBsdXMoZXh0cmFOZnRNaW5pbmdQb3dlcil9ZWxzZXtjb25zdCBuZnRCYWxhbmNlcz17fSxlcXVpcHBlZE5mdD17dHlwZTpuZnRUeXBlfTtuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXI9ZXh0cmFOZnRNaW5pbmdQb3dlcixlcXVpcHBlZE5mdC5leHRyYU1pbmluZ1Bvd2VyPWV4dHJhTmZ0TWluaW5nUG93ZXI7Y29uc3QgZXF1aXBwZWROZnRzPXt9O2VxdWlwcGVkTmZ0c1tuZnQuX2lkXT1lcXVpcHBlZE5mdCxtaW5pbmdQb3dlcj17aWQ6cG9vbC5pZCxhY2NvdW50OmFjY291bnQsYmFsYW5jZXM6e30sbmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXMscG93ZXI6eyRudW1iZXJEZWNpbWFsOiIwIn0sZXF1aXBwZWROZnRzOmVxdWlwcGVkTmZ0c30sbWluaW5nUG93ZXI9YXdhaXQgYXBpLmRiLmluc2VydCgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKX1jb25zdCBuZXdNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpO3JldHVybiBtaW5pbmdQb3dlci5wb3dlcj17JG51bWJlckRlY2ltYWw6bmV3TWluaW5nUG93ZXJ9LGF3YWl0IGFwaS5kYi51cGRhdGUoIm1pbmluZ1Bvd2VyIixtaW5pbmdQb3dlciksbmV3TWluaW5nUG93ZXIubWludXMob2xkTWluaW5nUG93ZXIpfWFzeW5jIGZ1bmN0aW9uIGluaXRNaW5pbmdQb3dlcihwb29sLHVwZGF0ZVBvb2xUaW1lc3RhbXAscGFyYW1zLHRva2VuLGxhc3RJZCl7bGV0IGJhbGFuY2VzLGFkanVzdGVkUG93ZXI9YXBpLkJpZ051bWJlcigwKSxvZmZzZXQ9MCxsYXN0SWRQcm9jZXNzZWQ9bGFzdElkLGNvbXBsZXRlPSExO2Zvcig7IWNvbXBsZXRlJiZvZmZzZXQ8cGFyYW1zLm1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s7KXtiYWxhbmNlcz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7c3ltYm9sOnRva2VuLF9pZDp7JGd0Omxhc3RJZH19LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8YmFsYW5jZXMubGVuZ3RoO2krPTEpe2NvbnN0IGJhbGFuY2U9YmFsYW5jZXNbaV07aWYoYXBpLkJpZ051bWJlcihiYWxhbmNlLnN0YWtlKS5ndCgwKXx8YXBpLkJpZ051bWJlcihiYWxhbmNlLmRlbGVnYXRpb25zSW4pLmd0KDApKXtjb25zdCBhZGp1c3RlZD1hd2FpdCB1cGRhdGVNaW5pbmdQb3dlcihwb29sLHRva2VuLGJhbGFuY2UuYWNjb3VudCxiYWxhbmNlLnN0YWtlLGJhbGFuY2UuZGVsZWdhdGlvbnNJbix1cGRhdGVQb29sVGltZXN0YW1wKTthZGp1c3RlZFBvd2VyPWFkanVzdGVkUG93ZXIucGx1cyhhZGp1c3RlZCl9bGFzdElkUHJvY2Vzc2VkPWJhbGFuY2UuX2lkfWJhbGFuY2VzLmxlbmd0aDxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQmJihjb21wbGV0ZT0hMCksb2Zmc2V0Kz1wYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXR9cmV0dXJue2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bGFzdElkUHJvY2Vzc2VkLGNvbXBsZXRlOmNvbXBsZXRlfX1hc3luYyBmdW5jdGlvbiBpbml0TmZ0TWluaW5nUG93ZXIocG9vbCx1cGRhdGVQb29sVGltZXN0YW1wLHBhcmFtcyxuZnRUb2tlbk1pbmVyLGxhc3RJZCl7bGV0IG5mdHMsYWRqdXN0ZWRQb3dlcj1hcGkuQmlnTnVtYmVyKDApLG9mZnNldD0wLGxhc3RJZFByb2Nlc3NlZD1sYXN0SWQsY29tcGxldGU9ITE7Y29uc3R7c3ltYm9sOnN5bWJvbCxlcXVpcEZpZWxkOmVxdWlwRmllbGR9PW5mdFRva2VuTWluZXI7Zm9yKDshY29tcGxldGUmJm9mZnNldDxwYXJhbXMubWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazspe2NvbnN0IG5mdFF1ZXJ5PXtfaWQ6eyRndDpsYXN0SWR9fTtlcXVpcEZpZWxkP25mdFF1ZXJ5WyJwcm9wZXJ0aWVzLiIrZXF1aXBGaWVsZF09eyRleGlzdHM6ITAsJG5lOiIifToobmZ0UXVlcnkuZGVsZWdhdGVkVG89eyRuZTpudWxsfSxuZnRRdWVyeVsiZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0Il09eyRlcTpudWxsfSksbmZ0cz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoIm5mdCIsc3ltYm9sKyJpbnN0YW5jZXMiLG5mdFF1ZXJ5LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bmZ0cy5sZW5ndGg7aSs9MSl7Y29uc3QgbmZ0PW5mdHNbaV07aWYoIWVxdWlwRmllbGR8fG5mdC5wcm9wZXJ0aWVzW2VxdWlwRmllbGRdKXtjb25zdCBhZGp1c3RlZD1hd2FpdCB1cGRhdGVOZnRNaW5pbmdQb3dlcihwb29sLG5mdCwhMCx1cGRhdGVQb29sVGltZXN0YW1wLGVxdWlwRmllbGQ/bmZ0LnByb3BlcnRpZXNbZXF1aXBGaWVsZF06bnVsbCk7YWRqdXN0ZWRQb3dlcj1hZGp1c3RlZFBvd2VyLnBsdXMoYWRqdXN0ZWQpfWxhc3RJZFByb2Nlc3NlZD1uZnQuX2lkfW5mdHMubGVuZ3RoPHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCYmKGNvbXBsZXRlPSEwKSxvZmZzZXQrPXBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdH1yZXR1cm57YWRqdXN0ZWRQb3dlcjphZGp1c3RlZFBvd2VyLG5leHRJZDpsYXN0SWRQcm9jZXNzZWQsY29tcGxldGU6Y29tcGxldGV9fWFzeW5jIGZ1bmN0aW9uIHJlc3VtZVBvd2VyVXBkYXRlKHBvb2wscGFyYW1zKXtsZXR7aW5Qcm9ncmVzczppblByb2dyZXNzLHRva2VuSW5kZXg6dG9rZW5JbmRleCxuZnRUb2tlbkluZGV4Om5mdFRva2VuSW5kZXgsbGFzdElkOmxhc3RJZH09cG9vbC51cGRhdGluZztjb25zdHt1cGRhdGVQb29sVGltZXN0YW1wOnVwZGF0ZVBvb2xUaW1lc3RhbXB9PXBvb2wudXBkYXRpbmc7aWYoIWluUHJvZ3Jlc3MpcmV0dXJuO2lmKHRva2VuSW5kZXg8cG9vbC50b2tlbk1pbmVycy5sZW5ndGgpe2NvbnN0IHRva2VuQ29uZmlnPXBvb2wudG9rZW5NaW5lcnNbdG9rZW5JbmRleF0se2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bmV4dElkLGNvbXBsZXRlOmNvbXBsZXRlfT1hd2FpdCBpbml0TWluaW5nUG93ZXIocG9vbCx1cGRhdGVQb29sVGltZXN0YW1wLHBhcmFtcyx0b2tlbkNvbmZpZy5zeW1ib2wsbGFzdElkKTtwb29sLnRvdGFsUG93ZXI9YXBpLkJpZ051bWJlcihwb29sLnRvdGFsUG93ZXIpLnBsdXMoYWRqdXN0ZWRQb3dlciksY29tcGxldGU/KGxhc3RJZD0wLHRva2VuSW5kZXgrPTEpOmxhc3RJZD1uZXh0SWR9ZWxzZSBpZihwb29sLm5mdFRva2VuTWluZXImJm5mdFRva2VuSW5kZXg8MSl7Y29uc3R7bmZ0VG9rZW5NaW5lcjpuZnRUb2tlbk1pbmVyfT1wb29sLHthZGp1c3RlZFBvd2VyOmFkanVzdGVkUG93ZXIsbmV4dElkOm5leHRJZCxjb21wbGV0ZTpjb21wbGV0ZX09YXdhaXQgaW5pdE5mdE1pbmluZ1Bvd2VyKHBvb2wsdXBkYXRlUG9vbFRpbWVzdGFtcCxwYXJhbXMsbmZ0VG9rZW5NaW5lcixsYXN0SWQpO3Bvb2wudG90YWxQb3dlcj1hcGkuQmlnTnVtYmVyKHBvb2wudG90YWxQb3dlcikucGx1cyhhZGp1c3RlZFBvd2VyKSxjb21wbGV0ZT8obGFzdElkPTAsbmZ0VG9rZW5JbmRleCs9MSk6bGFzdElkPW5leHRJZH10b2tlbkluZGV4IT09cG9vbC50b2tlbk1pbmVycy5sZW5ndGh8fHBvb2wubmZ0VG9rZW5NaW5lciYmMSE9PW5mdFRva2VuSW5kZXh8fChpblByb2dyZXNzPSExLHRva2VuSW5kZXg9MCxuZnRUb2tlbkluZGV4PTApO2NvbnN0e3VwZGF0aW5nOnVwZGF0aW5nfT1wb29sO3VwZGF0aW5nLmluUHJvZ3Jlc3M9aW5Qcm9ncmVzcyx1cGRhdGluZy50b2tlbkluZGV4PXRva2VuSW5kZXgsdXBkYXRpbmcubmZ0VG9rZW5JbmRleD1uZnRUb2tlbkluZGV4LHVwZGF0aW5nLmxhc3RJZD1sYXN0SWQsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfWZ1bmN0aW9uIGdlbmVyYXRlUG9vbElkKHBvb2wpe2NvbnN0IHRva2VuTWluZXJTdHJpbmc9cG9vbC5leHRlcm5hbENvbnRyYWN0JiZwb29sLmV4dGVybmFsTWluZXJzPyJFWFQtIitwb29sLmV4dGVybmFsTWluZXJzLnJlcGxhY2UoIjoiLCIiKTpwb29sLnRva2VuTWluZXJzLm1hcCh0PT50LnN5bWJvbC5yZXBsYWNlKCIuIiwiLSIpKS5zb3J0KCkuam9pbigiLCIpLG5mdFRva2VuTWluZXJTdHJpbmc9cG9vbC5uZnRUb2tlbk1pbmVyPyI6Iitwb29sLm5mdFRva2VuTWluZXIuc3ltYm9sOiIiO3JldHVybmAke3Bvb2wubWluZWRUb2tlbi5yZXBsYWNlKCIuIiwiLSIpfToke3Rva2VuTWluZXJTdHJpbmd9JHtuZnRUb2tlbk1pbmVyU3RyaW5nfWB9YXN5bmMgZnVuY3Rpb24gcnVuTG90dGVyeShwb29sLHBhcmFtcyl7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksd2lubmluZ051bWJlcnM9W10sbWluZWRUb2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwb29sLm1pbmVkVG9rZW59KSx3aW5uaW5nQW1vdW50PWFwaS5CaWdOdW1iZXIocG9vbC5sb3R0ZXJ5QW1vdW50KS5kaXZpZGVkQnkocG9vbC5sb3R0ZXJ5V2lubmVycykudG9GaXhlZChtaW5lZFRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0hBTEZfVVApO2lmKHBvb2wuZXh0ZXJuYWxDb250cmFjdCl7aWYoIm1hcmtldHBvb2xzIj09PXBvb2wuZXh0ZXJuYWxDb250cmFjdCl7Y29uc3QgbWFya2V0cG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoIm1hcmtldHBvb2xzIiwicG9vbHMiLHt0b2tlblBhaXI6cG9vbC5leHRlcm5hbE1pbmVyc30pO2ZvcihsZXQgaT0wO2k8cG9vbC5sb3R0ZXJ5V2lubmVycztpKz0xKXdpbm5pbmdOdW1iZXJzW2ldPWFwaS5CaWdOdW1iZXIobWFya2V0cG9vbC50b3RhbFNoYXJlcykubXVsdGlwbGllZEJ5KGFwaS5yYW5kb20oKSl9fWVsc2UgZm9yKGxldCBpPTA7aTxwb29sLmxvdHRlcnlXaW5uZXJzO2krPTEpd2lubmluZ051bWJlcnNbaV09YXBpLkJpZ051bWJlcihwb29sLnRvdGFsUG93ZXIpLm11bHRpcGxpZWRCeShhcGkucmFuZG9tKCkpO2xldCBtaW5pbmdQb3dlcnMsb2Zmc2V0PTAsY3VtdWxhdGl2ZVBvd2VyPWFwaS5CaWdOdW1iZXIoMCksbmV4dEN1bXVsYXRpdmVQb3dlcj1hcGkuQmlnTnVtYmVyKDApLGNvbXB1dGVkV2lubmVycz0wO2NvbnN0IHdpbm5lcnM9W107Zm9yKDtjb21wdXRlZFdpbm5lcnM8cG9vbC5sb3R0ZXJ5V2lubmVyczspe2lmKHBvb2wuZXh0ZXJuYWxDb250cmFjdCl7aWYoIm1hcmtldHBvb2xzIj09PXBvb2wuZXh0ZXJuYWxDb250cmFjdCl7bWluaW5nUG93ZXJzPWF3YWl0IGFwaS5kYi5maW5kSW5UYWJsZSgibWFya2V0cG9vbHMiLCJsaXF1aWRpdHlQb3NpdGlvbnMiLHt0b2tlblBhaXI6cG9vbC5leHRlcm5hbE1pbmVyc30scGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0LG9mZnNldCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxtaW5pbmdQb3dlcnMubGVuZ3RoO2krPTEpbWluaW5nUG93ZXJzW2ldLnBvd2VyPXskbnVtYmVyRGVjaW1hbDphcGkuQmlnTnVtYmVyKG1pbmluZ1Bvd2Vyc1tpXS5zaGFyZXMpLnRvRml4ZWQobWluZWRUb2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKX19fWVsc2UgbWluaW5nUG93ZXJzPWF3YWl0IGFwaS5kYi5maW5kKCJtaW5pbmdQb3dlciIse2lkOnBvb2wuaWQscG93ZXI6eyRndDp7JG51bWJlckRlY2ltYWw6IjAifX19LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoicG93ZXIiLGRlc2NlbmRpbmc6ITB9LHtpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bWluaW5nUG93ZXJzLmxlbmd0aDtpKz0xKXtjb25zdCBtaW5pbmdQb3dlcj1taW5pbmdQb3dlcnNbaV07bmV4dEN1bXVsYXRpdmVQb3dlcj1jdW11bGF0aXZlUG93ZXIucGx1cyhtaW5pbmdQb3dlci5wb3dlci4kbnVtYmVyRGVjaW1hbCk7Zm9yKGxldCBqPTA7ajxwb29sLmxvdHRlcnlXaW5uZXJzO2orPTEpe2NvbnN0IGN1cnJlbnRXaW5uaW5nTnVtYmVyPXdpbm5pbmdOdW1iZXJzW2pdO2N1bXVsYXRpdmVQb3dlci5sdGUoY3VycmVudFdpbm5pbmdOdW1iZXIpJiZuZXh0Q3VtdWxhdGl2ZVBvd2VyLmd0KGN1cnJlbnRXaW5uaW5nTnVtYmVyKSYmKGNvbXB1dGVkV2lubmVycys9MSx3aW5uZXJzLnB1c2goe3dpbm5lcjptaW5pbmdQb3dlci5hY2NvdW50LHdpbm5pbmdOdW1iZXI6Y3VycmVudFdpbm5pbmdOdW1iZXIsd2lubmluZ0Ftb3VudDp3aW5uaW5nQW1vdW50fSkpfWN1bXVsYXRpdmVQb3dlcj1uZXh0Q3VtdWxhdGl2ZVBvd2VyfWlmKGNvbXB1dGVkV2lubmVycz09PXBvb2wubG90dGVyeVdpbm5lcnN8fG1pbmluZ1Bvd2Vycy5sZW5ndGg8cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0KWJyZWFrO29mZnNldCs9cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0fWFwaS5lbWl0KCJtaW5pbmdMb3R0ZXJ5Iix7cG9vbElkOnBvb2wuaWQsd2lubmVyczp3aW5uZXJzfSk7Zm9yKGxldCBpPTA7aTx3aW5uZXJzLmxlbmd0aDtpKz0xKXtjb25zdCB3aW5uZXI9d2lubmVyc1tpXTthd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsImlzc3VlIix7dG86d2lubmVyLndpbm5lcixzeW1ib2w6bWluZWRUb2tlbi5zeW1ib2wscXVhbnRpdHk6d2lubmluZ0Ftb3VudH0pfXBvb2wubmV4dExvdHRlcnlUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5wbHVzKDM2MDAqcG9vbC5sb3R0ZXJ5SW50ZXJ2YWxIb3VycyoxZTMpLnRvTnVtYmVyKCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfWFjdGlvbnMuc2V0QWN0aXZlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpZDppZCxhY3RpdmU6YWN0aXZlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpKXJldHVybjtjb25zdCBwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOmlkfSk7aWYoYXBpLmFzc2VydChwb29sLCJwb29sIGlkIG5vdCBmb3VuZCIpKXtwb29sLmFjdGl2ZT0hIWFjdGl2ZTtjb25zdCBtaW5lZFRva2VuT2JqZWN0PWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnBvb2wubWluZWRUb2tlbn0pO2lmKGFwaS5hc3NlcnQobWluZWRUb2tlbk9iamVjdCYmKG1pbmVkVG9rZW5PYmplY3QuaXNzdWVyPT09YXBpLnNlbmRlcnx8IkJFRSI9PT1taW5lZFRva2VuT2JqZWN0LnN5bWJvbCYmYXBpLnNlbmRlcj09PWFwaS5vd25lciksIm11c3QgYmUgaXNzdWVyIG9mIG1pbmVkVG9rZW4iKSl7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIik7cG9vbC5uZXh0TG90dGVyeVRpbWVzdGFtcD1hcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnBsdXMoMzYwMCpwb29sLmxvdHRlcnlJbnRlcnZhbEhvdXJzKjFlMykudG9OdW1iZXIoKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9fX0sYWN0aW9ucy51cGRhdGVQb29sPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpZDppZCxsb3R0ZXJ5V2lubmVyczpsb3R0ZXJ5V2lubmVycyxsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczpsb3R0ZXJ5SW50ZXJ2YWxIb3Vycyxsb3R0ZXJ5QW1vdW50OmxvdHRlcnlBbW91bnQsdG9rZW5NaW5lcnM6dG9rZW5NaW5lcnMsbmZ0VG9rZW5NaW5lcjpuZnRUb2tlbk1pbmVyLGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mbyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse3Bvb2xVcGRhdGVGZWU6cG9vbFVwZGF0ZUZlZX09cGFyYW1zLHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhdXRob3JpemVkPSEoIWFwaS5CaWdOdW1iZXIocG9vbFVwZGF0ZUZlZSkubHRlKDApJiZhcGkuc2VuZGVyIT09YXBpLm93bmVyKXx8dXRpbGl0eVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShwb29sVXBkYXRlRmVlKTtpZihhcGkuYXNzZXJ0KGF1dGhvcml6ZWQsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgdXBkYXRlIGZlZSIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChpZCYmInN0cmluZyI9PXR5cGVvZiBpZCYmbG90dGVyeUFtb3VudCYmInN0cmluZyI9PXR5cGVvZiBsb3R0ZXJ5QW1vdW50JiYhYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmd0KDApLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobG90dGVyeVdpbm5lcnMpJiZsb3R0ZXJ5V2lubmVycz49MSYmbG90dGVyeVdpbm5lcnM8PTIwLCJpbnZhbGlkIGxvdHRlcnlXaW5uZXJzOiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMjAgb25seSIpJiZhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobG90dGVyeUludGVydmFsSG91cnMpJiZsb3R0ZXJ5SW50ZXJ2YWxIb3Vycz49MSYmbG90dGVyeUludGVydmFsSG91cnM8PTcyMCwiaW52YWxpZCBsb3R0ZXJ5SW50ZXJ2YWxIb3VyczogaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDcyMCBvbmx5Iikpe2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6aWR9KTtpZihhcGkuYXNzZXJ0KHBvb2wsInBvb2wgaWQgbm90IGZvdW5kIikpe2NvbnN0IG1pbmVkVG9rZW5PYmplY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cG9vbC5taW5lZFRva2VufSk7aWYoYXBpLmFzc2VydChtaW5lZFRva2VuT2JqZWN0JiYobWluZWRUb2tlbk9iamVjdC5pc3N1ZXI9PT1hcGkuc2VuZGVyfHwiQkVFIj09PW1pbmVkVG9rZW5PYmplY3Quc3ltYm9sJiZhcGkuc2VuZGVyPT09YXBpLm93bmVyKSwibXVzdCBiZSBpc3N1ZXIgb2YgbWluZWRUb2tlbiIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuZHAoKTw9bWluZWRUb2tlbk9iamVjdC5wcmVjaXNpb24sIm1pbmVkVG9rZW4gcHJlY2lzaW9uIG1pc21hdGNoIGZvciBsb3R0ZXJ5QW1vdW50Iikpe2lmKGNhbGxpbmdDb250cmFjdEluZm8pcG9vbC5sb3R0ZXJ5V2lubmVycz1sb3R0ZXJ5V2lubmVycyxwb29sLmxvdHRlcnlJbnRlcnZhbEhvdXJzPWxvdHRlcnlJbnRlcnZhbEhvdXJzLHBvb2wubG90dGVyeUFtb3VudD1sb3R0ZXJ5QW1vdW50O2Vsc2V7Y29uc3QgdmFsaWRNaW5lcnNDaGFuZ2U9YXdhaXQgdmFsaWRhdGVUb2tlbk1pbmVyc0NoYW5nZShwb29sLnRva2VuTWluZXJzLHRva2VuTWluZXJzLHBvb2wubmZ0VG9rZW5NaW5lcixuZnRUb2tlbk1pbmVyKTtpZih2YWxpZE1pbmVyc0NoYW5nZSl7cG9vbC5sb3R0ZXJ5V2lubmVycz1sb3R0ZXJ5V2lubmVycyxwb29sLmxvdHRlcnlJbnRlcnZhbEhvdXJzPWxvdHRlcnlJbnRlcnZhbEhvdXJzLHBvb2wubG90dGVyeUFtb3VudD1sb3R0ZXJ5QW1vdW50LHBvb2wudG9rZW5NaW5lcnM9dG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyPW5mdFRva2VuTWluZXI7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIik7dmFsaWRNaW5lcnNDaGFuZ2UuY2hhbmdlZCYmKHBvb2wudXBkYXRpbmcudXBkYXRlUG9vbFRpbWVzdGFtcD1hcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnRvTnVtYmVyKCkscG9vbC51cGRhdGluZy5pblByb2dyZXNzPSEwLHBvb2wudXBkYXRpbmcudG9rZW5JbmRleD0wLHBvb2wudXBkYXRpbmcubmZ0VG9rZW5JbmRleD0wLHBvb2wudXBkYXRpbmcubGFzdElkPTAscG9vbC50b3RhbFBvd2VyPSIwIikscG9vbC5uZXh0TG90dGVyeVRpbWVzdGFtcD1hcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnBsdXMoMzYwMCpsb3R0ZXJ5SW50ZXJ2YWxIb3VycyoxZTMpLnRvTnVtYmVyKCl9fWF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKSxhcGkuc2VuZGVyIT09YXBpLm93bmVyJiZhcGkuQmlnTnVtYmVyKHBvb2xVcGRhdGVGZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDoiQkVFIixxdWFudGl0eTpwb29sVXBkYXRlRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KX19fX0sYWN0aW9ucy5jaGFuZ2VOZnRQcm9wZXJ0eT1hc3luYyBwYXlsb2FkPT57Y29uc3R7aWQ6aWQsdHlwZTp0eXBlLHByb3BlcnR5TmFtZTpwcm9wZXJ0eU5hbWUsY2hhbmdlQW1vdW50OmNoYW5nZUFtb3VudCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiZ0eXBlJiYic3RyaW5nIj09dHlwZW9mIHR5cGUmJnByb3BlcnR5TmFtZSYmInN0cmluZyI9PXR5cGVvZiBwcm9wZXJ0eU5hbWUmJmNoYW5nZUFtb3VudCYmInN0cmluZyI9PXR5cGVvZiBjaGFuZ2VBbW91bnQmJiFhcGkuQmlnTnVtYmVyKGNoYW5nZUFtb3VudCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihjaGFuZ2VBbW91bnQpLmlzRmluaXRlKCksImludmFsaWQgcGFyYW1zIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSlyZXR1cm47Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDppZH0pO2lmKCFhcGkuYXNzZXJ0KHBvb2wsInBvb2wgaWQgbm90IGZvdW5kIikpcmV0dXJuO2NvbnN0IHByb3BlcnR5SW5kZXg9cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMuZmluZEluZGV4KHA9PnAubmFtZT09PXByb3BlcnR5TmFtZSkscHJvcGVydHk9cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXNbcHJvcGVydHlJbmRleF07aWYoIWFwaS5hc3NlcnQocHJvcGVydHkmJnByb3BlcnR5LmJ1cm5DaGFuZ2UsInByb3BlcnR5IG5vdCBlbmFibGVkIGZvciBidXJuIGNoYW5nZSIpKXJldHVybjtjb25zdCB0eXBlUHJvcGVydGllcz1wb29sLm5mdFRva2VuTWluZXIudHlwZU1hcFt0eXBlXTtpZighYXBpLmFzc2VydCh0eXBlUHJvcGVydGllcywidHlwZSBub3QgZm91bmQiKSlyZXR1cm47Y29uc3QgYnVyblN5bWJvbD1wcm9wZXJ0eS5idXJuQ2hhbmdlLnN5bWJvbCx0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpidXJuU3ltYm9sfSksZmVlPWFwaS5CaWdOdW1iZXIoY2hhbmdlQW1vdW50KS5hYnMoKS5tdWx0aXBsaWVkQnkocHJvcGVydHkuYnVybkNoYW5nZS5xdWFudGl0eSk7aWYoIWFwaS5hc3NlcnQoZmVlLmRwKCk8PXRva2VuLnByZWNpc2lvbiwiZmVlIHByZWNpc2lvbiBtaXNtYXRjaCBmb3IgYW1vdW50ICIrZmVlKSlyZXR1cm47Y29uc3QgYmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpidXJuU3ltYm9sfSksYXV0aG9yaXplZD1hcGkuQmlnTnVtYmVyKGZlZSkubHRlKDApfHxiYWxhbmNlJiZhcGkuQmlnTnVtYmVyKGJhbGFuY2UuYmFsYW5jZSkuZ3RlKGZlZSk7aWYoIWFwaS5hc3NlcnQoYXV0aG9yaXplZCxgeW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSB1cGRhdGUgZmVlIG9mICR7ZmVlfSAke2J1cm5TeW1ib2x9YCkpcmV0dXJuO2lmKHR5cGVQcm9wZXJ0aWVzW3Byb3BlcnR5SW5kZXhdPWFwaS5CaWdOdW1iZXIodHlwZVByb3BlcnRpZXNbcHJvcGVydHlJbmRleF0pLnBsdXMoY2hhbmdlQW1vdW50KSwhdmFsaWRhdGVOZnRUeXBlTWFwKHBvb2wubmZ0VG9rZW5NaW5lci50eXBlTWFwLHBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzKSlyZXR1cm47Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIik7cG9vbC51cGRhdGluZy51cGRhdGVQb29sVGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkudG9OdW1iZXIoKSxwb29sLnVwZGF0aW5nLmluUHJvZ3Jlc3M9ITAscG9vbC51cGRhdGluZy50b2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5uZnRUb2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5sYXN0SWQ9MCxwb29sLnRvdGFsUG93ZXI9IjAiLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKSxhcGkuQmlnTnVtYmVyKGZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmJ1cm5TeW1ib2wscXVhbnRpdHk6ZmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KX0sYWN0aW9ucy5jcmVhdGVQb29sPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtsb3R0ZXJ5V2lubmVyczpsb3R0ZXJ5V2lubmVycyxsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczpsb3R0ZXJ5SW50ZXJ2YWxIb3Vycyxsb3R0ZXJ5QW1vdW50OmxvdHRlcnlBbW91bnQsbWluZWRUb2tlbjptaW5lZFRva2VuLHRva2VuTWluZXJzOnRva2VuTWluZXJzLG5mdFRva2VuTWluZXI6bmZ0VG9rZW5NaW5lcixleHRlcm5hbE1pbmVyczpleHRlcm5hbE1pbmVycyxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm8saXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtwb29sQ3JlYXRpb25GZWU6cG9vbENyZWF0aW9uRmVlfT1wYXJhbXM7aWYoISh2b2lkIDA9PT1leHRlcm5hbE1pbmVyc3x8YXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGV4dGVybmFsTWluZXJzLCJleHRlcm5hbE1pbmVycyBtdXN0IGJlIGEgc3RyaW5nIikmJmFwaS5hc3NlcnQoY2FsbGluZ0NvbnRyYWN0SW5mbywibXVzdCBiZSBjYWxsZWQgZnJvbSBhIGNvbnRyYWN0IikpKXJldHVybjtjb25zdCB1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksYXV0aG9yaXplZENyZWF0aW9uPSEoIWFwaS5CaWdOdW1iZXIocG9vbENyZWF0aW9uRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHBvb2xDcmVhdGlvbkZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkQ3JlYXRpb24sInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KG1pbmVkVG9rZW4mJiJzdHJpbmciPT10eXBlb2YgbWluZWRUb2tlbiYmbG90dGVyeUFtb3VudCYmInN0cmluZyI9PXR5cGVvZiBsb3R0ZXJ5QW1vdW50JiYhYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmd0KDApLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KG1pbmVkVG9rZW4ubGVuZ3RoPjAmJm1pbmVkVG9rZW4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGxvdHRlcnlXaW5uZXJzKSYmbG90dGVyeVdpbm5lcnM+PTEmJmxvdHRlcnlXaW5uZXJzPD0yMCwiaW52YWxpZCBsb3R0ZXJ5V2lubmVyczogaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDIwIG9ubHkiKSYmYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGxvdHRlcnlJbnRlcnZhbEhvdXJzKSYmbG90dGVyeUludGVydmFsSG91cnM+PTEmJmxvdHRlcnlJbnRlcnZhbEhvdXJzPD03MjAsImludmFsaWQgbG90dGVyeUludGVydmFsSG91cnM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCA3MjAgb25seSIpKXtjb25zdCBtaW5lZFRva2VuT2JqZWN0PWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOm1pbmVkVG9rZW59KTtpZihhcGkuYXNzZXJ0KG1pbmVkVG9rZW5PYmplY3QsIm1pbmVkVG9rZW4gZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChtaW5lZFRva2VuT2JqZWN0Lmlzc3Vlcj09PWFwaS5zZW5kZXJ8fCJCRUUiPT09bWluZWRUb2tlbk9iamVjdC5zeW1ib2wmJmFwaS5zZW5kZXI9PT1hcGkub3duZXIsIm11c3QgYmUgaXNzdWVyIG9mIG1pbmVkVG9rZW4iKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmRwKCk8PW1pbmVkVG9rZW5PYmplY3QucHJlY2lzaW9uLCJtaW5lZFRva2VuIHByZWNpc2lvbiBtaXNtYXRjaCBmb3IgbG90dGVyeUFtb3VudCIpJiYoY2FsbGluZ0NvbnRyYWN0SW5mb3x8YXdhaXQgdmFsaWRhdGVUb2tlbk1pbmVycyh0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyKSkpe2NvbnN0IGJsb2NrRGF0ZT1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpLG5ld1Bvb2w9e21pbmVkVG9rZW46bWluZWRUb2tlbixsb3R0ZXJ5V2lubmVyczpsb3R0ZXJ5V2lubmVycyxsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczpsb3R0ZXJ5SW50ZXJ2YWxIb3Vycyxsb3R0ZXJ5QW1vdW50OmxvdHRlcnlBbW91bnQsdG9rZW5NaW5lcnM6dG9rZW5NaW5lcnN8fFtdLG5mdFRva2VuTWluZXI6bmZ0VG9rZW5NaW5lcixhY3RpdmU6ITEsbmV4dExvdHRlcnlUaW1lc3RhbXA6YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5wbHVzKDM2MDAqbG90dGVyeUludGVydmFsSG91cnMqMWUzKS50b051bWJlcigpLHRvdGFsUG93ZXI6IjAifTtpZihjYWxsaW5nQ29udHJhY3RJbmZvKXtpZighYXBpLmFzc2VydCghbmZ0VG9rZW5NaW5lciwiZXh0ZXJuYWwgbmZ0VG9rZW5NaW5lciBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpKXJldHVybjtuZXdQb29sLmV4dGVybmFsQ29udHJhY3Q9Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLG5ld1Bvb2wuZXh0ZXJuYWxNaW5lcnM9ZXh0ZXJuYWxNaW5lcnN9bmV3UG9vbC5pZD1nZW5lcmF0ZVBvb2xJZChuZXdQb29sKTtjb25zdCBleGlzdGluZ1Bvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6bmV3UG9vbC5pZH0pO2lmKGFwaS5hc3NlcnQoIWV4aXN0aW5nUG9vbCwicG9vbCBhbHJlYWR5IGV4aXN0cyIpKXtpZih0b2tlbk1pbmVycylmb3IobGV0IGk9MDtpPHRva2VuTWluZXJzLmxlbmd0aDtpKz0xKXtjb25zdCB0b2tlbkNvbmZpZz10b2tlbk1pbmVyc1tpXTthd2FpdCBhcGkuZGIuaW5zZXJ0KCJ0b2tlblBvb2xzIix7c3ltYm9sOnRva2VuQ29uZmlnLnN5bWJvbCxpZDpuZXdQb29sLmlkfSl9bmZ0VG9rZW5NaW5lciYmYXdhaXQgYXBpLmRiLmluc2VydCgibmZ0VG9rZW5Qb29scyIse3N5bWJvbDpuZnRUb2tlbk1pbmVyLnN5bWJvbCxpZDpuZXdQb29sLmlkfSksbmV3UG9vbC51cGRhdGluZz17aW5Qcm9ncmVzczohMCx1cGRhdGVQb29sVGltZXN0YW1wOmFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkudG9OdW1iZXIoKSx0b2tlbkluZGV4OjAsbmZ0VG9rZW5JbmRleDowLGxhc3RJZDowfTtjb25zdCBpbnNlcnRlZFBvb2w9YXdhaXQgYXBpLmRiLmluc2VydCgicG9vbHMiLG5ld1Bvb2wpO2FwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIocG9vbENyZWF0aW9uRmVlKS5ndCgwKSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6cG9vbENyZWF0aW9uRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSxhcGkuZW1pdCgiY3JlYXRlUG9vbCIse2lkOmluc2VydGVkUG9vbC5pZH0pfX19fSxhY3Rpb25zLmNoZWNrUGVuZGluZ0xvdHRlcmllcz1hc3luYygpPT57aWYoYXBpLmFzc2VydCgibnVsbCI9PT1hcGkuc2VuZGVyLCJub3QgYXV0aG9yaXplZCIpKXtjb25zdCB0aW1lc3RhbXA9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKS5nZXRUaW1lKCkscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx1cGRhdGluZ0xvdHRlcmllcz1hd2FpdCBhcGkuZGIuZmluZCgicG9vbHMiLHsidXBkYXRpbmcuaW5Qcm9ncmVzcyI6ITB9LHBhcmFtcy5tYXhMb3R0ZXJpZXNQZXJCbG9jaywwLFt7aW5kZXg6ImlkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8dXBkYXRpbmdMb3R0ZXJpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHBvb2w9dXBkYXRpbmdMb3R0ZXJpZXNbaV07YXdhaXQgcmVzdW1lUG93ZXJVcGRhdGUocG9vbCxwYXJhbXMpfWNvbnN0IHBlbmRpbmdMb3R0ZXJpZXM9YXdhaXQgYXBpLmRiLmZpbmQoInBvb2xzIix7YWN0aXZlOiEwLCJ1cGRhdGluZy5pblByb2dyZXNzIjohMSxuZXh0TG90dGVyeVRpbWVzdGFtcDp7JGx0ZTp0aW1lc3RhbXB9fSxwYXJhbXMubWF4TG90dGVyaWVzUGVyQmxvY2ssMCxbe2luZGV4OiJpZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPHBlbmRpbmdMb3R0ZXJpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHBvb2w9cGVuZGluZ0xvdHRlcmllc1tpXTthd2FpdCBydW5Mb3R0ZXJ5KHBvb2wscGFyYW1zKX19fSxhY3Rpb25zLmhhbmRsZVN0YWtlQ2hhbmdlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHthY2NvdW50OmFjY291bnQsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpxdWFudGl0eSxkZWxlZ2F0ZWQ6ZGVsZWdhdGVkLGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZDthcGkuYXNzZXJ0KGNhbGxpbmdDb250cmFjdEluZm8mJiJ0b2tlbnMiPT09Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLCJtdXN0IGJlIGNhbGxlZCBmcm9tIHRva2VucyBjb250cmFjdCIpJiZhd2FpdCBmaW5kQW5kUHJvY2Vzc0FsbCgibWluaW5nIiwidG9rZW5Qb29scyIse3N5bWJvbDpzeW1ib2x9LGFzeW5jIHRva2VuUG9vbD0+e2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6dG9rZW5Qb29sLmlkfSk7bGV0IGFkanVzdGVkO2FkanVzdGVkPWRlbGVnYXRlZD9hd2FpdCB1cGRhdGVNaW5pbmdQb3dlcihwb29sLHN5bWJvbCxhY2NvdW50LDAscXVhbnRpdHkpOmF3YWl0IHVwZGF0ZU1pbmluZ1Bvd2VyKHBvb2wsc3ltYm9sLGFjY291bnQscXVhbnRpdHksMCkscG9vbC50b3RhbFBvd2VyPWFkanVzdGVkLnBsdXMocG9vbC50b3RhbFBvd2VyKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9KX0sYWN0aW9ucy5oYW5kbGVOZnRDaGFuZ2U9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3N5bWJvbDpzeW1ib2wsbmZ0Om5mdCxhZGQ6YWRkLGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZDthcGkuYXNzZXJ0KGNhbGxpbmdDb250cmFjdEluZm8mJiJuZnQiPT09Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLCJtdXN0IGJlIGNhbGxlZCBmcm9tIG5mdCBjb250cmFjdCIpJiZhd2FpdCBmaW5kQW5kUHJvY2Vzc0FsbCgibWluaW5nIiwibmZ0VG9rZW5Qb29scyIse3N5bWJvbDpzeW1ib2x9LGFzeW5jIHRva2VuUG9vbD0+e2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6dG9rZW5Qb29sLmlkfSk7aWYocG9vbC51cGRhdGluZy5pblByb2dyZXNzJiZwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9PT1wb29sLnRva2VuTWluZXJzLmxlbmd0aCYmcG9vbC51cGRhdGluZy5sYXN0SWQ8bmZ0Ll9pZClyZXR1cm47aWYoIXBvb2wubmZ0VG9rZW5NaW5lcilyZXR1cm47Y29uc3R7ZXF1aXBGaWVsZDplcXVpcEZpZWxkLHR5cGVGaWVsZDp0eXBlRmllbGQsdHlwZU1hcDp0eXBlTWFwLG1pbmluZ1Bvd2VyRmllbGQ6bWluaW5nUG93ZXJGaWVsZH09cG9vbC5uZnRUb2tlbk1pbmVyO2lmKGVxdWlwRmllbGQpcmV0dXJuO2lmKHR5cGVNYXBbbmZ0LnByb3BlcnRpZXNbdHlwZUZpZWxkXV18fG1pbmluZ1Bvd2VyRmllbGQpe2NvbnN0IGFkanVzdGVkPWF3YWl0IHVwZGF0ZU5mdE1pbmluZ1Bvd2VyKHBvb2wsbmZ0LGFkZCxwb29sLnVwZGF0aW5nLnVwZGF0ZVBvb2xUaW1lc3RhbXApO3Bvb2wudG90YWxQb3dlcj1hZGp1c3RlZC5wbHVzKHBvb2wudG90YWxQb3dlciksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfX0pfSxhY3Rpb25zLmhhbmRsZU5mdFNldFByb3BlcnR5PWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLG5mdDpuZnQscHJvcGVydHlOYW1lOnByb3BlcnR5TmFtZSxvbGRWYWx1ZTpvbGRWYWx1ZSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQ7aWYoYXBpLmFzc2VydChjYWxsaW5nQ29udHJhY3RJbmZvJiYibmZ0Ij09PWNhbGxpbmdDb250cmFjdEluZm8ubmFtZSwibXVzdCBiZSBjYWxsZWQgZnJvbSBuZnQgY29udHJhY3QiKSl7Y29uc3QgbmV3VmFsdWU9bmZ0LnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtpZihvbGRWYWx1ZT09PW5ld1ZhbHVlKXJldHVybjthd2FpdCBmaW5kQW5kUHJvY2Vzc0FsbCgibWluaW5nIiwibmZ0VG9rZW5Qb29scyIse3N5bWJvbDpzeW1ib2x9LGFzeW5jIHRva2VuUG9vbD0+e2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6dG9rZW5Qb29sLmlkfSk7aWYocG9vbC51cGRhdGluZy5pblByb2dyZXNzJiZwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9PT1wb29sLnRva2VuTWluZXJzLmxlbmd0aCYmcG9vbC51cGRhdGluZy5sYXN0SWQ8bmZ0Ll9pZClyZXR1cm47aWYoIXBvb2wubmZ0VG9rZW5NaW5lcilyZXR1cm47Y29uc3R7ZXF1aXBGaWVsZDplcXVpcEZpZWxkLG1pbmluZ1Bvd2VyRmllbGQ6bWluaW5nUG93ZXJGaWVsZH09cG9vbC5uZnRUb2tlbk1pbmVyO2lmKGVxdWlwRmllbGQmJnByb3BlcnR5TmFtZT09PWVxdWlwRmllbGQpe2lmKG9sZFZhbHVlJiZhcGkuaXNWYWxpZEFjY291bnROYW1lKG9sZFZhbHVlKSl7Y29uc3QgYWRqdXN0ZWQ9YXdhaXQgdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsITEscG9vbC51cGRhdGluZy51cGRhdGVQb29sVGltZXN0YW1wLG9sZFZhbHVlKTtwb29sLnRvdGFsUG93ZXI9YWRqdXN0ZWQucGx1cyhwb29sLnRvdGFsUG93ZXIpfWlmKG5ld1ZhbHVlJiZhcGkuaXNWYWxpZEFjY291bnROYW1lKG5ld1ZhbHVlKSl7Y29uc3QgYWRqdXN0ZWQ9YXdhaXQgdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsITAscG9vbC51cGRhdGluZy51cGRhdGVQb29sVGltZXN0YW1wLG5ld1ZhbHVlKTtwb29sLnRvdGFsUG93ZXI9YWRqdXN0ZWQucGx1cyhwb29sLnRvdGFsUG93ZXIpfX1lbHNlIGlmKG1pbmluZ1Bvd2VyRmllbGQmJnByb3BlcnR5TmFtZT09PW1pbmluZ1Bvd2VyRmllbGQmJighZXF1aXBGaWVsZHx8YXBpLmlzVmFsaWRBY2NvdW50TmFtZShuZnQucHJvcGVydGllc1tlcXVpcEZpZWxkXSkpKXtjb25zdCBhZGp1c3RlZD1hd2FpdCB1cGRhdGVOZnRNaW5pbmdQb3dlckZyb21Qcm9wZXJ0eVVwZGF0ZShwb29sLG5mdCxlcXVpcEZpZWxkP25mdC5wcm9wZXJ0aWVzW2VxdWlwRmllbGRdOm51bGwpO3Bvb2wudG90YWxQb3dlcj1hZGp1c3RlZC5wbHVzKHBvb2wudG90YWxQb3dlcil9YXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfSl9fTs="}}}