xiaomianao666

ε°η¨‹εΊοΌšπ‰πšπ―πƒπ

Jun 5th, 2025
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ζ΅·ι˜”θ§†η•Œθ§„εˆ™εˆ†δΊ«οΌŒε½“ε‰εˆ†δΊ«ηš„ζ˜―οΌšε°η¨‹εΊοΏ₯home_rule_v2οΏ₯base64://@π‰πšπ―πƒπ@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi8J2QifCdkJrwnZCv8J2Qg/CdkIEiLCJhdXRob3IiOiLOseaooeadvyZSIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjaHR0cHM6Ly9qYXZkYjQ1Ny5jb20vIyNmeXBhZ2UiLCJ2ZXJzaW9uIjoyMDI1MDUwNiwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IuS6kTZvb29vbGUveHh4eHh4LzNhOHI0Z2g5MzNneXhyYTJcblxu5bCP56iL5bqP77ya8J2QifCdkJrwnZCv8J2Qg/CdkIEiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbiAgICB2YXIgZCA9IFtdO1xuYWRkTGlzdGVuZXIoXCJvbkNsb3NlXCIsICQudG9TdHJpbmcoKCkgPT4ge1xuICAgIGxldCBrZXlzID0gbGlzdE15VmFyS2V5cygpO1xuICAgIGZvciAobGV0IGl0IG9mIGtleXMpIHtcbiAgICAgICAgY2xlYXJNeVZhcihpdCk7XG4gICAgfVxuY2xlYXJNeVZhcihcInVybFwiKTtcbn0pKTtcblxuY29uc3Qg5LiL5LiA6aG1ID0gXCJwZChodG1sLCAnLnBhZ2luYXRpb24mJmFbcmVsPW5leHRdJiZocmVmJylcIjtcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS95aScpKS5ydWxlKVxuXG52YXIg5a6a5L2N5L+h5oGvID0gW3tcbiAgICDlpKfnsbvlrprkvY06ICcubmF2YmFyLXN0YXJ0JiYubmF2YmFyLWxpbmsnLFxuICAgIOWinuWKoDogWyc8YSBocmVmPVwiJyArIE1ZX0hPTUUgKyAnL1wiPummlumhtTwvQT4nLCAnPGEgaHJlZj1cIi9hYm91dFwiPuaUtuiXjzwvQT4nXSxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjwn5SlKSknLFxuICAgIOmTvuaOpeWkhOeQhjogKHUpID0+IHtcbiAgICAgICAgbGV0IHVybCA9IHUucmVwbGFjZSgvdHlwZShcXC9cXGQrKVxcLmh0bWwvLCAnc2hvdyQxLS0tLS0tLS0tLS0uaHRtbCcpO1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgfVxufSwge1xuICAgIOS4gOe6p+WumuS9jTogJy5uYXZiYXItaXRlbVtocmVmPS9sb2dpbl0nLFxufSwge1xuICAgIOS4gOe6p+WumuS9jTogXCJAanM6XCIgKyAkLnRvU3RyaW5nKCgpID0+IHtcbiAgICAgICAgaWYgKCEvYWJvdXR8cmFua2luZ3N8dGFnc3xzZXJpZXN8bWFrZXJzfGxvZ2lufGFjdG9ycy8udGVzdCh0cnVlX3VybCkpIHtcbiAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLm5hdmJhci1kcm9wZG93bjpoYXMoaHIpJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbGlzdCA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3RcbiAgICB9KSxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjmlK/ku5joqJjpjIR85YCL5Lq65L+h5oGvKSknLFxufSwge1xuICAgIOS4gOe6p+WumuS9jTogXCJAanM6XCIgKyAkLnRvU3RyaW5nKCgpID0+IHtcbiAgICAgICAgaWYgKC9zZWFyY2gvLnRlc3QodHJ1ZV91cmwpKSB7XG4gICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCxcIi50b29sYmFyXCIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi50YWJzfHwuYnV0dG9ucy5oYXMtYWRkb25zJyk7XG4gICAgICAgICAgICBpZiAoIS9hYm91dHxyYW5raW5nc3x0YWdzfHNlcmllc3xtYWtlcnN8dXNlcnN8bG9naW58YWN0b3JzLy50ZXN0KHRydWVfdXJsKSkge1xuICAgICAgICAgICAgICAgIGxpc3RmID0gcGRmYShsaXN0WzBdLCBcImJvZHkmJmFcIilcbiAgICAgICAgICAgICAgICBsaXN0YiA9IGxpc3RmLmNvbmNhdChbJzxhIGhyZWY9XCIvdXNlcnMvcmVjZW50X3ZpZGVvc1wiPvCdkIXwnZCC8J2fkDwvQT4nXSlcbiAgICAgICAgICAgICAgICBsaXN0WzBdID0gbGlzdGIuam9pbihcIixcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHNpID0gMlxuICAgICAgICAgICAgbGlzdGEgPSBwZGZhKGxpc3Rbc2ldLCBcImJvZHkmJmFcIilcbiAgICAgICAgICAgIGVsZW1lbnQgPSBsaXN0YS5zcGxpY2UoMiwgMSlbMF1cbiAgICAgICAgICAgIGxpc3RhLnVuc2hpZnQoZWxlbWVudCk7XG4gICAgICAgICAgICBsaXN0W3NpXSA9IGxpc3RhLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXN0XG4gICAgfSksXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo54Ot5pKtfDI1MHzlsIHpnaJ854yc5L2gfEZDMikpJyxcbiAgICDmoIfpopg6ICdUZXh0LmpzOmlucHV0LnJlcGxhY2UoXCLlkKtcIixcIlwiKS5yZXBsYWNlKFwi5Lit5a2X5Y+v5pKt5pS+XCIsXCLkuK3lrZdcIikucmVwbGFjZShcIuWPr+aSreaUvlwiLFwi5Y+v5pKtXCIpJyxcbn0sIHtcbiAgICAvL+S4gOe6p+WumuS9jTogJyN0YWdzJiZkdCcsXG4gICAg5LiA57qn5a6a5L2NOiBcIkBqczpcIiArICQudG9TdHJpbmcoKCkgPT4ge1xuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJyN0YWdzJiZkdCcpO1xuICAgICAgICBmb3IgKHZhciBpIGluIGxpc3QpIHtcbiAgICAgICAgICAgIHZhciBsaXN0YSA9IHBkZmEobGlzdFtpXSwgJ2JvZHkmJi50YWcnKTtcbiAgICAgICAgICAgIHRpdGxlID0gcGRmaChsaXN0W2ldLCAnc3Ryb25nJiZUZXh0JylcbiAgICAgICAgICAgIGxpc3RhWzBdID0gbGlzdGFbMF0ucmVwbGFjZShcIj7lhajpg6g8XCIsIFwiPlwiICsgdGl0bGUgKyBcIjxcIilcblxuICAgICAgICAgICAgaWYgKGkgPT0gMCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsaXN0YS5zcGxpY2UoMywgMSlbMF1cbiAgICAgICAgICAgICAgICBsaXN0YS51bnNoaWZ0KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGxpc3RbMF0gPSBsaXN0YS5qb2luKFwiLFwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaiBpbiBsaXN0YSkge1xuICAgICAgICAgICAgICAgIGxpc3RhW2pdID0gbGlzdGFbal0ucmVwbGFjZSgvYnV0dG9uL2csICdhJykucmVwbGFjZShcIm9uY2xpY2tcIiwgXCJocmVmXCIpLnJlcGxhY2UoXCJ3aW5kb3cubG9jYXRpb24uaHJlZj1cIiwgXCJcIikucmVwbGFjZSgvXFwnL2csIFwiXCIpLnJlcGxhY2UoLyg8YS4qPykoPzpjbGFzcz1cImRlbGV0ZSBpcy1zbWFsbFwiICkoLio/PikvLCBgJDEkMuKZiO+4j2ApLnJlcGxhY2UoXCJqYXZhc2NyaXB0OjtcIiwgdHJ1ZV91cmwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaXN0W2ldID0gbGlzdGEuam9pbihcIixcIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdFxuICAgIH0pLFxuICAgIOWwj+exuzogJ2JvZHkmJi50YWc6bm90KDptYXRjaGVzKOabtOWkmikpJyxcbiAgICDmoIfpopg6ICdUZXh0Jyxcbn0sIHtcbiAgICDkuIDnuqflrprkvY06IFwiQGpzOlwiICsgJC50b1N0cmluZygoKSA9PiB7XG4gICAgICAgIGlmICh0cnVlX3VybC5pbmNsdWRlcyhcIi9hY3RvcnMvY2Vuc29yZWRcIikpIHtcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW3tcbiAgICAgICAgICAgICAgICBhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAg5qCH6aKYOiBbXCLlubTpvoRcIiwgXCIxOS0zMFwiLCBcIjMxLTQwXCIsIFwiNDEtNTBcIiwgXCI1MC02NVwiXSxcbiAgICAgICAgICAgICAgICAgICAg6ZO+5o6lOiBbXCIxOSUyQzY1XCIsIFwiMTklMkMzMFwiLCBcIjMxJTJDNDBcIiwgXCI0MSUyQzUwXCIsIFwiNTAlMkM2NVwiXSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB7XG4gICAgICAgICAgICAgICAgICAgIOagh+mimDogW1wi6Lqr6auYXCIsIFwiMTMwLTE0NlwiLCBcIjE0Ny0xNTNcIiwgXCIxNTQtMTU5XCIsIFwiMTYwLTE2NVwiLCBcIjE2Ni0xNzBcIiwgXCIxNzEtMTc1XCIsIFwiMTc2LTE4MFwiLCBcIjE4MC0xODVcIl0sXG4gICAgICAgICAgICAgICAgICAgIOmTvuaOpTogW1wiMTMwJTJDMTg1XCIsIFwiMTMwJTJDMTQ2XCIsIFwiMTQ3JTJDMTUzXCIsIFwiMTU0JTJDMTU5XCIsIFwiMTYwJTJDMTY1XCIsIFwiMTY2JTJDMTcwXCIsIFwiMTcxJTJDMTc1XCIsIFwiMTc2JTJDMTgwXCIsIFwiMTgwJTJDMTg1XCJdLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBjdXA6IHtcbiAgICAgICAgICAgICAgICAgICAg5qCH6aKYOiBbXCLnvanmna9cIiwgXCJBXCIsIFwiQkNcIiwgXCJEXCIsIFwiRUZcIiwgXCJHSFwiLCBcIklKXCIsIFwiS1wiXSxcbiAgICAgICAgICAgICAgICAgICAg6ZO+5o6lOiBbXCIwJTJDMTVcIiwgXCIwJTJDMVwiLCBcIjElMkMzXCIsIFwiMyUyQzRcIiwgXCI0JTJDNlwiLCBcIjYlMkM4XCIsIFwiOCUyQzEwXCIsIFwiMTAlMkMxNVwiXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB2YXIgbmV3bGlzdCA9IFtdXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGxpc3RhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhsaXN0YSk7XG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdGFba2V5XS7moIfpophcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBsaXN0YVtrZXldLumTvuaOpVxuICAgICAgICAgICAgICAgIHZhciBsaXN0YiA9IHRpdGxlLm1hcCgoaXRlbSwgYml4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj1cIicgKyAnJicgKyBrZXkgKyAnPScgKyB2YWx1ZVtiaXhdICsgJ1wiPicgKyBpdGVtICsgJzwvYT4nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgbGlzdGEgPSBsaXN0Yi5qb2luKFwiLFwiKVxuICAgICAgICAgICAgICAgIG5ld2xpc3QucHVzaChsaXN0YSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdsaXN0ID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3bGlzdFxuICAgIH0pLFxuICAgIOWwj+exuzogXCJib2R5JiZhXCIsXG4gICAg6ZO+5o6l5aSE55CGOiAodSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSB1LnJlcGxhY2UoLy4qPyhcXCYuKikvLCBcIiQxXCIpXG4gICAgICAgIHZhciByZWdleCA9IHZhbHVlLm1hdGNoKC8mLio9LylbMF1cbiAgICAgICAgaWYgKHRydWVfdXJsLmluY2x1ZGVzKFwiYWdlPVwiKSkge1xuICAgICAgICAgICAgYnVybCA9IHRydWVfdXJsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidXJsID0gZ2V0UHVibGljSXRlbShcImphdmRiMFwiLCBcImh0dHBzOi8vamF2ZGIuY29tXCIpICsgXCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiXG4gICAgICAgIH1cbiAgICAgICAgdXJsID0gYnVybC5yZXBsYWNlKG5ldyBSZWdFeHAocmVnZXggKyBcIlteJl0rXCIpLCB2YWx1ZSlcbiAgICAgICAgcmV0dXJuIHVybFxuICAgIH0sXG4gICAg5qCH6aKYOiBcIlwiLFxuICAgIOmTvuaOpTogXCJcIlxufV1cblxuTVlfVVJMID0gTVlfVVJMLnNwbGl0KCcjIycpWzFdXG5sZXQgdHJ1ZV91cmwgPSBnZXRUcnVlbGluayhNWV9SVUxFLnVybCwgTVlfVVJMLCBwYWdlKTtcblxubG9nKHRydWVfdXJsKVxuXG52YXIgaHRtbCA9IGZldGNoKHRydWVfdXJsLCB7XG4gICAgaGVhZGVyczoge1xuICAgICAgICBjb29raWU6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvQXBvbGxvL0Nvb2tpZS9qYXZkYl9jb29raWUudHh0JykgfHwgJycsXG4gICAgICAgIFwiVXNlci1BZ2VudFwiOiBcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XCIsXG4gICAgfSxcbiAgICByZWRpcmVjdDogZmFsc2Vcbn0pO1xuXG4vL2xvZyhodG1sKVxuXG4vKlxuaWYgKC9yZWRpcmVjdGVkLy50ZXN0KGh0bWwpJiYhL1xcL2ZjMi8udGVzdCh0cnVlX3VybCkpIHtcbiB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvQXBvbGxvL0Nvb2tpZS9qYXZkYl9jb29raWUudHh0JywgJycpO1xuICAgIGh0bWwgPSBmZXRjaCh0cnVlX3VybCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBjb29raWU6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvQXBvbGxvL0Nvb2tpZS9qYXZkYl9jb29raWUudHh0JykgfHwgJycsICAgICAgICBcbiAgICAgICAgfSxcbiAgICAgICAgcmVkaXJlY3Q6IGZhbHNlXG4gICAgfSlcbn1cbiovXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3NlYXJjaCcpKS5ydWxlKVxuXG5jb25zdCBkYyA9IGR5bmFtaWNDbGFzcyh7XG4gICAg5YiG57G76aKc6ImyOiBcIlwiIC8vZ2V0UmFuZ2VDb2xvcnMoKVxufSk7XG5kYy7lvIDlkK/mipjlj6AoZmFsc2UpXG5kYy7lvIDlkK/mkJzntKIoZmFsc2UpXG5kYy7liJvlu7rliqjmgIHliIbnsbso5a6a5L2N5L+h5oGvKVxuXG5pZiAoL0p1c3RcXHNhXFxzbW9tZW50Ly50ZXN0KGh0bWwpKSB7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ+iOt+WPlmNvb2tpZScuZm9udGNvbG9yKCcjRkYwMEZGJykuYmlnKCksXG4gICAgICAgIHVybDogdHJ1ZV91cmwgKyAkKCcnKS5ydWxlKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBkID0gW107XG4gICAgICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnLFxuICAgICAgICAgICAgICAgIHVybDogTVlfVVJMLFxuICAgICAgICAgICAgICAgIGRlc2M6ICdsaXN0JiZzY3JlZW4nLFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XCIsIC8vUENfVUEsICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjdGFncycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbyA9IGZiYS5nZXRDb29raWUodSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgdWEgPSBmYmEuZ2V0VWEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmJhLmxvZygnY286Ojo6OjonICsgdWEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZiYS5sb2coJ2NvOjo6Ojo6JyArIGNvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbENvbnRlbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC/msLjkuYXln5/lkI0vLnRlc3QoaHRtbENvbnRlbnQpKSB7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEucGFyc2VMYXp5UnVsZSgkJCQoKS5sYXp5UnVsZSgoY28pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9BcG9sbG8vQ29va2llL2phdmRiX2Nvb2tpZS50eHQnLCBjbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn5bey6I635Y+WY29va2ll77yM5YiH5o2i5Yiw6aaW6aG1Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjbykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgTVlfVVJMKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHNldFJlc3VsdChkKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcbiAgICB9KTtcbn1cblxudmFyIHBhcnNlUnVsZSA9IHtcbiAgICBsaXN0OiAnYm9keSYmLml0ZW0nLFxuICAgIHRpdGxlOiAnLnZpZGVvLXRpdGxlJiZUZXh0JyxcbiAgICBkZXNjMTogJy50YWdzJiZUZXh0JyxcbiAgICBkZXNjOiAnLm1ldGEmJlRleHQnLFxuICAgIGltZzogJ2ltZ3x8YSYmc3JjfHxkYXRhLW9yaWdpbmFsJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnbW92aWVfMicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGUxID0ge1xuICAgIGxpc3Q6ICdib2R5JiYuYWN0b3ItYm94JyxcbiAgICB0aXRsZTogJ2EmJnRpdGxlJyxcbiAgICBkZXNjOiAnLm1ldGEmJlRleHQnLFxuICAgIGltZzogJ2ltZ3x8YSYmc3JjfHxkYXRhLW9yaWdpbmFsJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMycsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGUyID0ge1xuICAgIGxpc3Q6ICcjc2VyaWVzJiYuYm94JyxcbiAgICB0aXRsZTogJ3N0cm9uZyYmVGV4dCcsXG4gICAgZGVzYzogJ3NwYW4mJlRleHQnLFxuICAgIGltZzogJ2EmJmhyZWYuanM6aW5wdXQucmVwbGFjZShpbnB1dCxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbW92aWUvMzAuc3ZnXCIpJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcbiAgICBpbXQ6IGZhbHNlLFxuICAgIC8vYmFja2ltZzogdHJ1ZSxcbn1cblxudmFyIHBhcnNlUnVsZTMgPSB7XG4gICAgbGlzdDogJyNtYWtlcnMmJi5ib3gnLFxuICAgIHRpdGxlOiAnc3Ryb25nJiZUZXh0JyxcbiAgICBkZXNjOiAnc3BhbiYmVGV4dCcsXG4gICAgaW1nOiAnYSYmaHJlZi5qczppbnB1dC5yZXBsYWNlKGlucHV0LFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3ZpZS8zMC5zdmdcIiknLFxuICAgIHVybDogJ2EmJmhyZWYnLFxuICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgY29sX3R5cGU6ICdhdmF0YXInLFxuICAgIGltdDogZmFsc2UsXG4gICAgLy9iYWNraW1nOiB0cnVlLFxufVxuXG52YXIgcGFyc2VSdWxlNCA9IHtcbiAgICBsaXN0OiAnI2RpcmVjdG9ycyYmLmJveCcsXG4gICAgdGl0bGU6ICdzdHJvbmcmJlRleHQnLFxuICAgIGRlc2M6ICdzcGFuJiZUZXh0JyxcbiAgICBpbWc6ICdhJiZocmVmLmpzOmlucHV0LnJlcGxhY2UoaW5wdXQsXCJodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvWGEyaEQucG5nXCIpJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcbiAgICBpbXQ6IGZhbHNlLFxuICAgIC8vYmFja2ltZzogdHJ1ZSxcbn1cblxudmFyIHBhcnNlUnVsZTUgPSB7XG4gICAgbGlzdDogJyNjb2RlcyYmLmJveCcsXG4gICAgdGl0bGU6ICdzdHJvbmcmJlRleHQnLFxuICAgIGRlc2M6ICdzcGFuJiZUZXh0JyxcbiAgICBpbWc6ICdhJiZocmVmLmpzOmlucHV0LnJlcGxhY2UoaW5wdXQsXCJodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvT1RNNGsucG5nXCIpJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcbiAgICBpbXQ6IGZhbHNlLFxuICAgIC8vYmFja2ltZzogdHJ1ZSxcbn1cblxudmFyIHBhcnNlUnVsZTYgPSB7XG4gICAgbGlzdDogJyNsaXN0cyYmYScsXG4gICAgdGl0bGU6ICdzdHJvbmcmJlRleHQnLFxuICAgIGRlc2M6ICdhJiZ0aXRsZScsXG4gICAgaW1nOiAnYSYmaHJlZi5qczppbnB1dC5yZXBsYWNlKGlucHV0LFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3ZpZS8zMC5zdmdcIiknLFxuICAgIHVybDogJ2EmJmhyZWYnLFxuICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgY29sX3R5cGU6ICdhdmF0YXInLFxuICAgIGltdDogZmFsc2UsXG4gICAgLy9iYWNraW1nOiB0cnVlLFxufVxuXG5pZiAodHJ1ZV91cmwuaW5jbHVkZXMoJy9hYm91dCcpKSB7XG4gICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS/mlLbol48nKSkucnVsZSlcbn1cblxuaWYgKHRydWVfdXJsLmluY2x1ZGVzKCcvbG9nb3V0JykpIHtcbiAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvQXBvbGxvL0Nvb2tpZS9qYXZkYl9jb29raWUudHh0JywgJycpO1xuICAgIHRvYXN0KCfotKblj7flt7Lnmbvlh7onKTtcbn1cblxuaWYgKHRydWVfdXJsLmluY2x1ZGVzKCcvbG9naW4nKSkge1xuICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2Uv55m75b2VJykpLnJ1bGUpXG59XG5cbkNyZWF0ZS5ydWxlTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUpO1xuXG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUxKTtcblxuQ3JlYXRlLkxpc3QoZCwgaHRtbCwgcGFyc2VSdWxlMik7XG5cbkNyZWF0ZS5MaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTMpO1xuXG5pZiAoL3NlYXJjaHxjb2xsZWN0aW9uX2RpcmVjdG9ycy8udGVzdCh0cnVlX3VybCkpIHtcbiAgICBDcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGU0KTtcbn1cblxuaWYgKHRydWVfdXJsLmluY2x1ZGVzKCdjb2xsZWN0aW9uX2NvZGVzJykpIHtcbiAgICBDcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGU1KTtcbn1cblxuaWYgKHRydWVfdXJsLmluY2x1ZGVzKCdzZWFyY2g/Zj1saXN0JykpIHtcbiAgICBDcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGU2KTtcbn1cblxuYXV0b1BhZ2UoKTtcblxuc2V0UmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Ii9zZWFyY2g/Zj1hbGwmcGFnZT1meXBhZ2UmcT0qKiIsImdyb3VwIjoiI++4j+KDozE4K0pBViIsInNlYXJjaEZpbmQiOiJqczpcbiQucmVxdWlyZShcInlqXCIpXG4vKlxuaGlrZXI6Ly9lbXB0eSMjKipcbnZhciBkID0gW107XG5sZXQgSE9NRSA9IFwiaGlrZXI6Ly9lbXB0eSMjXCIgKyBNWV9SVUxFLnVybC5zcGxpdChcIiMjXCIpWzFdO1xubGV0IGtleSA9IE1ZX1VSTC5zcGxpdChcIiMjXCIpWzFdO1xuZC5wdXNoKHtcbiAgICB0aXRsZTogXCLngrnmiJHlvIDlp4vmkJzntKJcIiArIGtleSxcbiAgICB1cmw6IEhPTUUgKyBcInNlYXJjaD9mPWFsbCZwYWdlPWZ5cGFnZSZxPVwiICsga2V5ICsgJ0BydWxlPWpzOiQucmVxdWlyZShcInlqXCIpJyxcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IGtleSxcbiAgICAgICAga2V5OiBrZXlcbiAgICB9XG59KTtcbiovXG5zZXRSZXN1bHQoZCk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiKiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6InZhciDmm7TmlrDpl7TpmpQgPSA3XG5sZXQgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKClcbmZ1bmN0aW9uIGNvdW50Q3Jvc3NlZERheXMoZGF0ZTEsIGRhdGUyKSB7XG4gICAgdmFyIGQxID0gbmV3IERhdGUoTnVtYmVyKGRhdGUxKSk7XG4gICAgdmFyIGQyID0gbmV3IERhdGUoTnVtYmVyKGRhdGUyKSk7XG4gICAgLy8g6I635Y+W5a6M5pW05pel5pyf6YOo5YiGXG4gICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoZDEuZ2V0RnVsbFllYXIoKSwgZDEuZ2V0TW9udGgoKSwgZDEuZ2V0RGF0ZSgpKTtcbiAgICB2YXIgZW5kID0gbmV3IERhdGUoZDIuZ2V0RnVsbFllYXIoKSwgZDIuZ2V0TW9udGgoKSwgZDIuZ2V0RGF0ZSgpKTsgICAgXG4gICAgLy8g5Yik5pat5byA5aeL5ZKM57uT5p2f5pel5pyfXG4gICAgIHZhciB0aW1lRGlmZmVyZW5jZSA9IE1hdGguYWJzKGVuZCAtIHN0YXJ0KTtcbiAgICAgLy8g6K6h566X6Leo6LaK55qE5aSp5pWwXG4gICAgIHZhciBjcm9zc2VkRGF5cyA9IE1hdGguY2VpbCh0aW1lRGlmZmVyZW5jZSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XG4gICAgIHJldHVybiBjcm9zc2VkRGF5czsgLy8g6L+U5Zue6Leo6LaK55qE5aSp5pWwXG59XG52YXIg6Leo6LaK5aSp5pWwID0gY291bnRDcm9zc2VkRGF5cyh0aW1lLGdldEl0ZW0oJ3RpbWUnLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSkpXG5cbmlmICjot6jotorlpKnmlbAgPj0g5pu05paw6Ze06ZqUKSB7XG4gICAgICAgICAgICBzZXRJdGVtKCd0aW1lJywgdGltZSk7XG4gICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvQXBvbGxvL/CdkILwnZCo8J2QnfCdkJ7wnZCL8J2QmvCdkLPwnZCyLmpzJywgJycpO1xuICAgICAgICAgICAgbGV0IEhPTUUgPSBNWV9SVUxFLnVybC5tYXRjaCgvaHR0cHM/OlxcL1xcL1teIy8/Jl0rXFwvLylbMF07XG4gICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKEhPTUUgKyAnYWJvdXQnLHtkbnM6J2h0dHBzOi8vMS4xLjEuMS9kbnMtcXVlcnknfSk7XG4gICAgICAgICAgICB2YXIgdXJsID0gcGRmaChodG1sLCcuc3ViLWhlYWRlciYmLmNvbnRlbnQmJmFbaHJlZn49Y29tL10mJmhyZWYnKVxubG9nKCflhY3nv7vlnLDlnYDvvJonK3VybClcbmlmIChIT01FICE9PSB1cmwpIHtcbiAgICBjb25maXJtKHtcbiAgICAgICAgdGl0bGU6IFwi5pu05paw5o+Q56S6XCIsXG4gICAgICAgIGNvbnRlbnQ6IFwi5pyJ5pyA5paw5YWN57+75Zyw5Z2ALOaYr+WQpuabtOaWsFwiLFxuICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB2YXIgeWVhciA9IGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB2YXIgbW9udGggPSBTdHJpbmcoY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgICAgICB2YXIgZGF5ID0gU3RyaW5nKGN1cnJlbnREYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICAgIE1ZX1JVTEUudmVyc2lvbiA9IGAke3llYXJ9JHttb250aH0ke2RheX1gO1xuICAgICAgICAgICAgLyhodHRwcz86XFwvXFwvW14jLz8mXStcXC8pLy50ZXN0KE1ZX1JVTEUudXJsKTtcbiAgICAgICAgICAgIE1ZX1JVTEUudXJsID0gTVlfUlVMRS51cmwucmVwbGFjZShSZWdFeHAuJDEsIHVybCk7XG4gICAgICAgICAgICByZXR1cm4gXCJydWxlOi8vXCIgKyBiYXNlNjRFbmNvZGUoXCLmtbfpmJTop4bnlYzvv6Vob21lX3J1bGXvv6VcIiArIEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUpKTsgICAgICAgICAgICBcbiAgICAgICAgfSx1cmwpLFxuICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBcInRvYXN0Oi8v8J+Yh1wiO1xuICAgICAgICB9XG4gICAgfSk7XG4gICB9XG59XG5cbnB1dE15VmFyKCd5b25naml1JywnaHR0cHM6Ly9qYXZkYi5jb20nKVxucHV0TXlWYXIoJ2ZjMicsXCJoaWtlcjovL2VtcHR5XCIpXG5ob3N0ID0gTVlfUlVMRS51cmwubWF0Y2goL2h0dHBzPzpcXC9cXC9bXiMvPyZdKy8pWzBdO1xuc2V0UHVibGljSXRlbSgnamF2ZGIwJyxob3N0KTtcbi8qXG5yZWdpc3RlckROUyh7XG4gICAgIFwiamF2ZGIuY29tXCI6IFwiaHR0cHM6Ly8yMjMuNS41LjUvZG5zLXF1ZXJ5XCIsXG4gICAgIFwiamRic3RhdGljLmNvbVwiOiBcImh0dHBzOi8vMjIzLjUuNS41L2Rucy1xdWVyeVwiLFxuICAgICBob3N0OiBcImh0dHBzOi8vMjIzLjUuNS41L2Rucy1xdWVyeVwiLFxufSk7XG4qLyIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaDkuIDnuqfliIbnsbvliJfooahcIixcInBhdGhcIjpcInlpXCIsXCJydWxlXCI6XCJqczpcXG4vKlxcbmJ5IM6xKHpldGFscGhhKVxcbuS4gOe6p+WwgeijhVxcbuWKqOaAgeWIhuexuyDliJfooajliJvlu7og6Ieq5Yqo5LiL5LiA6aG1XFxudmVyIDIwMjMxMDE3IDEuMFxcbiovXFxuXFxuLy/pmo/mnLrpopzoibJcXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcbn1cXG5cXG4vL+WKqOaAgeWIhuexu1xcbmZ1bmN0aW9uIGR5bmFtaWNDbGFzcyhvcHRpb25zKSB7XFxuICAgIGNvbnN0IG9iaiA9IHtcXG4gICAgICAgIC8v6buY6K6k5YC8XFxuICAgICAgICBsYXlvdXQ6IFxcXCJ1bmRlZmluZWRcXFwiLFxcbiAgICAgICAgaHRtbDogXFxcImVtcHR5XFxcIixcXG4gICAgICAgIHBhZ2U6IDAsXFxuICAgICAgICDliIbnsbvpopzoibI6IFxcXCIjRkE3Mjk4XFxcIixcXG4gICAgICAgIOaKmOWPoDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oinXFxcIi5mb250Y29sb3IoXFxcIiMxYWFkMTlcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIOWxleW8gDogXFxcIuKAnOKAnOKAneKAnTxiPlxcXCIgKyBcXFwi4oioXFxcIi5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArIFxcXCI8L2I+XFxcIixcXG4gICAgICAgIG9wZW46IHRydWUsXFxuICAgICAgICBzdGF0ZTogTVlfUlVMRS51cmwsXFxuICAgICAgICBzZWFyY2g6IGZhbHNlLFxcbiAgICAgICAgY2xlYXJzOiBbXSxcXG4gICAgICAgIGNsZWFyYWxsOiBbXFxcInlpX2ZpcnN0cGFnZVxcXCJdLFxcbiAgICAgICAgZGVidWc6IGZhbHNlLFxcblxcbiAgICAgICAg6aKE6K6+KHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBwYXJhbSA9IFtdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbSkuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcXG4gICAgICAgICAgICAgICAgLy8g5a+55q+P5Liq5bGe5oCn5ZCN5omn6KGM5pON5L2cXFxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1bcHJvcGVydHldOyAvLyDojrflj5blsZ7mgKflgLxcXG4gICAgICAgICAgICAgICAgLy8g5Zyo6L+Z6YeM5omn6KGM5oKo55qE5pON5L2cXFxuICAgICAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9wZXJ0eSArIFxcXCI6XFxcIiArIHZhbHVlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGV2YWxKU1J1bGUoaXRlbSxcXG4gICAgICAgICAgICBqc1J1bGUpIHtcXG4gICAgICAgICAgICBsZXQgcnVsZSA9IGpzUnVsZS5yZXBsYWNlKFxcXCJAanM6XFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIHJ1bGUgPSBydWxlLnRyaW0oKTtcXG4gICAgICAgICAgICAvL2xvZygkLnN0cmluZ2lmeShydWxlKSlcXG4gICAgICAgICAgICBsZXQgaW5wdXQgPSBpdGVtO1xcbiAgICAgICAgICAgIGlmIChydWxlLnN0YXJ0c1dpdGgoXFxcIihcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgLyoqXFxuICAgICAgICAgICAgICAgICAqIOi/mOWOn+aIkCAkLnRvU3RyaW5nKC4uLikg55qE5pyA57uI57uT5p6c77yM6L6+5Yiw5pyA57uI5aSE55CG5pa55byP6Lef5LiK6Z2i55qEIGlmIOS4gOiHtOeahOebrueahFxcbiAgICAgICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICAgICAgZXZhbChcXFwicmVzdWx0ID0gXFxcIiArIFxcXCIoKCkgPT4ge1xcXCIgKyBydWxlICsgXFxcIn0pKClcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBnZXRUaXRsZShzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHRpdGxlUnVsZSA9IGNhdGVnb3J5IHx8IFxcXCJhJiZUZXh0XFxcIjtcXG4gICAgICAgICAgICBpZiAodGl0bGVSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIHRpdGxlUnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoc3JjLCB0aXRsZVJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ2V0VXJsKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHVybFJ1bGUgPSBjYXRlZ29yeS7pk77mjqUgfHwgXFxcImEmJmhyZWZcXFwiO1xcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwZChzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhdGVnb3J5LumTvuaOpeWkhOeQhiA9PSBcXFwiZnVuY3Rpb25cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IGNhdGVnb3J5LumTvuaOpeWkhOeQhih1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdXJsIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGlzTnVsbChwYXJhbSkge1xcbiAgICAgICAgICAgIGlmIChwYXJhbSA9PSBudWxsKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9LFxcbiAgICAgICAgaXNCb29sZWFuKHZhcmlhYmxlKSB7XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YXJpYWJsZSAhPT0gXFxcImJvb2xlYW5cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5byA5ZCv5oqY5Y+g6K+35Lyg5YWl5biD5bCU5YC8XFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIOa4hemZpChsaXN0KSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAobGlzdC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLmuIXpmaTmiqXplJk66K+35Lyg5YiX6KGoXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuY2xlYXJzID0gbGlzdDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlhajmuIUobGlzdCkge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbChsaXN0KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGMgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgICAgICAgIGxpc3QgPSBjLmNvbmNhdChsaXN0KTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyYWxsID0gbGlzdDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDmupDnoIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLmh0bWwgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDnlYzpnaIoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLmxheW91dCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOmhteeggShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOeKtuaAgShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlvIDlkK/mkJzntKIoaW5wdXQpIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5zZWFyY2ggPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlvIDlkK/mipjlj6AoaW5wdXQpIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5pc0Jvb2xlYW4oaW5wdXQpO1xcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIHNldFRpdGxlKGssIGksIHQpIHtcXG4gICAgICAgICAgICByZXR1cm4gayA9PSBpID8gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0LmZvbnRjb2xvcih0aGlzLuWIhuexu+minOiJsikgOiB0O1xcbiAgICAgICAgfSxcXG4gICAgICAgIHNldGJnY29sb3IoayxpLHQpe1xcbiAgICAgICAgICAgIHJldHVybiAoIGsgPT0gaSB8fCB0LmluY2x1ZGVzKFxcXCLimYjvuI9cXFwiKSkgPyBnZXRSYW5nZUNvbG9ycygpIDogXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgYWN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIHJldHVybiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4hemZpOeKtuaAgVxcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhvYmopO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihvYmouc3RhdGUpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiaGVhZC5jYXRlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmFsbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICB9LCBvYmopLFxcbiAgICAgICAgICAgIH0sIF07XFxuICAgICAgICB9LFxcbiAgICAgICAgY2hlY2tQYXJhbSgpIHtcXG4gICAgICAgICAgICB2YXIgb2JqID0ge307XFxuICAgICAgICAgICAgaWYgKHRoaXMucGFnZSA9PSAwICYmIHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl6aG156CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIumhteeggVxcXCJdID0gdGhpcy5wYWdlO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHBhZ2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMuaHRtbCA9PSBcXFwiZW1wdHlcXFwiICYmIHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl5rqQ56CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gdGhpcy5odG1sO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IGh0bWw7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMubGF5b3V0ID09IFxcXCJ1bmRlZmluZWRcXFwiICYmIHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl55WM6Z2iXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gdGhpcy5sYXlvdXQ7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gZDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWIm+W7uuWKqOaAgeWIhuexuyhydWxlT2JqKSB7XFxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gW107XFxuICAgICAgICAgICAgbGV0IGNhdGVzID0gW107XFxuICAgICAgICAgICAgaWYgKHJ1bGVPYmogPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVPYmogPSBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy/liJ3lp4vljJblj5jph4/lvIDlp4tcXG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMuY2hlY2tQYXJhbSgpO1xcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJhbS7pobXnoIE7XFxuICAgICAgICAgICAgY29uc3QgaHRtbCA9IHBhcmFtLua6kOeggTtcXG4gICAgICAgICAgICBjb25zdCBkID0gcGFyYW0u55WM6Z2iO1xcbiAgICAgICAgICAgIGNvbnN0IOeKtuaAgSA9IHRoaXMuc3RhdGU7XFxuICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2g7XFxuICAgICAgICAgICAgY29uc3QgZW1wdHkgPSBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgY29uc3Qg5oqY5Y+g54q25oCBID0gdGhpcy5vcGVuO1xcbiAgICAgICAgICAgIHZhciDlsZXlvIAgPSB0aGlzLuWxleW8gDtcXG4gICAgICAgICAgICB2YXIg5oqY5Y+gID0gdGhpcy7mipjlj6A7XFxuICAgICAgICAgICAgdmFyIOWFqOa4hSA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgdmFyIOa4hemZpCA9IHRoaXMuY2xlYXJzO1xcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP57uT5p2fXFxuICAgICAgICAgICAgbGV0IGluaXRfY2F0ZSA9IG5ldyBBcnJheSgyMCkuZmlsbChcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoXFxuICAgICAgICAgICAgICAgIGdldE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgaWYgKHNlYXJjaCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCInaGlrZXI6Ly9zZWFyY2g/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImcz0nK2lucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwia2V5d29yZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgcnVsZU9iai5mb3JFYWNoKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgIC8vbG9nKHgpXFxuICAgICAgICAgICAgICAgIGlmICh4Lmpzb24gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgICAgICB4Lmpzb24ubWFwKGsgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChKU09OLnN0cmluZ2lmeShrKS5yZXBsYWNlKC9eXFxcXFt8XFxcXF0kL2csICcnKSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAvL2NhdGVnb3JpZXMucHVzaCh4Lmpzb24pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5aSn57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtwZGZhKGh0bWwsIHgu5aSn57G75a6a5L2NKS5qb2luKCdcXFxcbicpXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcblxcblxcbiAgICAgICAgdmFyIOS4gOe6pyA9IGxpc3QubWFwKChzKSA9PiB7XFxuICAgICAgICAgIHZhciBzbGlzdCA9IFtdO1xcbiAgICAgICAgICBpZiAoIShcXFwi5bCP57G7XFxcIiBpbiB4KSkge1xcbiAgICAgICAgICAgIHgu5bCP57G7ID0gXFxcImJvZHkmJmE6bm90KDptYXRjaGVzKOmmlumhtSkpOm5vdChhOm5vdChbaHJlZl0pKVxcXCI7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgaWYgKHgu5bCP57G7LnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgIHNsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBzbGlzdCA9IHBkZmEocywgeC7lsI/nsbspO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICBpZiAoKCflop7liqAnIGluIHgpKSB7XFxuICAgICAgICAgICAgaWYgKHgu5aKe5YqgLmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgeC7lop7liqAgPSBldmFsKHgu5aKe5YqgKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgc2xpc3QgPSB4LuWinuWKoC5jb25jYXQoc2xpc3QpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGlmICgoJ+ihpeWFhScgaW4geCkpIHtcXG4gICAgICAgICAgICBpZiAoeC7ooaXlhYUuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICB4LuihpeWFhSA9IGV2YWwoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzbGlzdCA9IHNsaXN0LmNvbmNhdCh4LuihpeWFhSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgIHZhciDlrprkvY0gPSBzbGlzdC5tYXAoKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKGl0ZW0sIHgu5qCH6aKYKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgeCk7XFxuICAgICAgICAgICAgdmFyIG9iaiA9IHtcXG4gICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSwgdXJsOiB1cmxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmICgoJ2V4dCcgaW4geCkpIHtcXG4gICAgICAgICAgICAgIG9ialsnZXh0J10gPSB4LmV4dDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgICByZXR1cm4g5a6a5L2NO1xcbiAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6pylcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgaWYgKOS4gOe6py5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKOS4gOe6py5qb2luKFxcXCJcXFxcblxcXCIpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIOS4gOe6py5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGl0ZW0uam9pbihcXFwiLFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKOaKmOWPoOeKtuaAgSkge1xcbiAgICAgICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PT0gXFxcIjFcXFwiID8g5oqY5Y+gIDog5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpdGxlLCBmb2xkLCB1LCBhbGwsIGV4cHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgW+WxleW8gCwg5oqY5Y+gXSA9IGV4cHM7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN4ID0gZmluZEl0ZW1zQnlDbHModGl0bGUgKyAnY2F0ZV9idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHRpdGxlICsgJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeCA9IHN0b3JhZ2UwLmdldE15VmFyKCdjYXRlX2J1dHRvbicsIFtdKS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbJ2NvbF90eXBlJ10gPSB4Wydjb2xfdHlwZSddID8geFsnY29sX3R5cGUnXSA6IHhbJ3R5cGUnXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHRpdGxlICsgJ2NhdGVfbGluZScsIGN4KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyphbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0odGl0bGUgKyAnY2F0ZV9leHAnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT0gMSA/IOWxleW8gCA6IOaKmOWPoCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSBcXFwiMVxcXCIgPyBcXFwiMFxcXCIgOiBcXFwiMVxcXCIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9SVUxFLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWFqOa4hSwgW+WxleW8gCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOaKmOWPoFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogTVlfUlVMRS50aXRsZSArICdjYXRlX2V4cCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogdGhpcy5hY3Rpb24oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbDog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2w6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3J5KVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAvKmlmICjlsI/nsbvlrprkvY0uaW5jbHVkZXMoXFxcIjtcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yl9jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0uc3BsaXQoXFxcIjtcXFwiKVsxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ki9cXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBKU09OLnBhcnNlKGBbJHtjYXRlZ29yeX1dYCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhzdWJfY2F0ZWdvcmllcylcXG4gICAgICAgICAgICAgICAgICAgIC8vIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lpKfnsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIF/lpKfnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBpdGVtLnRpdGxlO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXdSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSAnJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyczog5riF6ZmkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdXJsID0gcGQoaXRlbSwgX+Wkp+exu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAo5aSn57G75aSE55CGKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0g5LiA57qn5YiG57G75aSE55CGKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogeyAnYmFja2dyb3VuZENvbG9yJzogdGhpcy5zZXRiZ2NvbG9yKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSl9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWxsY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfbGluZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lsI/nsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhcG9zID0gZmFsc2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKGl0ZW0uaW5jbHVkZXMoJ3R5cGU9XFxcIkBleHRyYVxcXCInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcG9zID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygn6ZmE5Yqg5a6a5L2NJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYXBvcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwZGZoKGl0ZW0sIFxcXCJhJiZzdGF0ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIFxcXCJhJiZ2YWx1ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gaXRlbS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc3dpdGNoICh0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGpzb24gPSBwZChpdGVtLCDliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnZhciBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEBAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEAnKT97XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOuWIhuexu+mTvuaOpS5zcGxpdCgnQEAnKVswXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OnBkKGl0ZW0s5YiG57G76ZO+5o6lKTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGpzb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsY2xlYXJzOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGl0bGUgPT0gXFxcIvCdkIXwnZCC8J2fkFxcXCIgPyBcXFwiaGlrZXI6Ly9wYWdlL2ZjMj91cmw9XFxcIiArIGdldE15VmFyKFxcXCJmYzJcXFwiKSArIFxcXCIjZnlwYWdlI25vSGlzdG9yeSNcXFwiIDogJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkdF9cXFwiICsgcGFyYW1zLmpzb24udHlwZSwgcGFyYW1zLmpzb24udmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnN0YXRlLCBwYXJhbXMuanNvbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9idXR0b24nLCBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZENvbG9yJzogdGhpcy5zZXRiZ2NvbG9yKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfUlVMRS50aXRsZSArICdjYXRlX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmb2xkID09PSBcXFwiMVxcXCIgfHwg5oqY5Y+g54q25oCBID09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KGNhdGVzKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZvbGQgPT09IFxcXCIwXFxcIikge1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjYXRlcylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZXRQcmVSZXN1bHQgIT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMgPSBkLmNvbmNhdChpdGVtcyk7XFxuICAgICAgICAgICAgICAgIC8v5riF56m657un5om/5pWw57uEXFxuICAgICAgICAgICAgICAgIGQubGVuZ3RoID0gMDtcXG4gICAgICAgICAgICAgICAgc2V0UHJlUmVzdWx0KGl0ZW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgIH07XFxuICAgIG9iai7pooTorr4ob3B0aW9ucyk7XFxuICAgIHJldHVybiBvYmo7XFxufVxcblxcbnZhciDnirbmgIEgPVxcbiAgICB0eXBlb2Yg54q25oCB5qCH6K6wICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOeKtuaAgeagh+iusCAhPSBcXFwiXFxcIiA/IOeKtuaAgeagh+iusCA6IE1ZX1JVTEUudXJsO1xcblxcbmxldCBkdF9kZWJ1ZyA9IGZhbHNlO1xcblxcbmFkZExpc3RlbmVyKFxcbiAgICBcXFwib25DbG9zZVxcXCIsXFxuICAgICQudG9TdHJpbmcoKCkgPT4ge30pXFxuKTtcXG5cXG52YXIgQ3JlYXRlID0ge1xcbiAgICBuZXh0UGFnZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgICAgIC8vbG9nKCduOicrbmV4dClcXG4gICAgICAgICAgICBpZiAobmV4dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4i+S4gOmhtemTvuaOpeS4uuepuicpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwi6ZSZ6K+v5L+h5oGvOlxcXCIgKyBlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKChuZXh0ID09IFxcXCJcXFwiIHx8IG5leHQgPT0gdW5kZWZpbmVkKSAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZV91cmw7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vcmVzdWx0PWZhbHNlO1xcbiAgICAgICAgICAgIG5leHQgPSBnZXRNeVZhcijnirbmgIEpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ2wnK3RydWVfdXJsKVxcbiAgICAgICAgLy9sb2coJ24nK25leHQpXFxuICAgICAgICBpZiAocGFnZSAhPSAxKSB7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQgJiYgIXJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAvL3B1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH0sXFxuICAgIGdldEJhY2tJbWFnZTogZnVuY3Rpb24oaW1ndXJsKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gaW1ndXJsO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICByZXN1bHQgPSAvdXJsKD86XFxcXHMrKT9cXFxcKCguKj8pXFxcXCkvZ1xcbiAgICAgICAgICAgICAgICAuZXhlYyhpbWd1cmwpWzFdXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oJ3xcXFwifCZxdW90OykvZ20sIFxcXCJcXFwiKTtcXG4gICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH0sXFxuICAgIGh0dHBIYW5kbGU6IGZ1bmN0aW9uKGlucHV0KSB7XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBNWV9IT01FICsgaW5wdXQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGltZ0hhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGltZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUuaW1nLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBpbWcgPSBldmFsKHJ1bGUuaW1nKTtcXG4gICAgICAgIH0gZWxzZSBpZiAocnVsZS5iYWNraW1nKSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5nZXRCYWNrSW1hZ2UoaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaWYgKCFpbWcuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGltZyA9IHBkKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGltZyArIHJ1bGUucmVmO1xcbiAgICB9LFxcbiAgICB1cmxIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBocmVmID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS51cmwuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaHJlZiA9IHBkKGl0ZW0sIHJ1bGUudXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGhyZWYgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIgOiBocmVmO1xcbiAgICAgICAgcmV0dXJuIGhyZWY7XFxuICAgIH0sXFxuICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKGl0ZW0sIGlucHV0KSB7XFxuICAgICAgICBsZXQgb3V0cHV0ID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgb3V0cHV0ID0gZXZhbChpbnB1dCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIG91dHB1dCA9IHBkZmgoaXRlbSwgaW5wdXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgfSxcXG4gICAgcmVmcmVzaDogZnVuY3Rpb24oKSB7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXG4gICAgICAgICAgICBcXFwib25SZWZyZXNoXFxcIixcXG4gICAgICAgICAgICAkLnRvU3RyaW5nKCh1KSA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInlpbGlzdFxcXCIpO1xcbiAgICAgICAgICAgICAgICAvL3ZhciBwID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3NwYWdlJywgJycpO1xcbiAgICAgICAgICAgICAgICAvL3B1dE15VmFyKHUsIHApO1xcbiAgICAgICAgICAgIH0sIOeKtuaAgSlcXG4gICAgICAgICk7XFxuICAgIH0sXFxuICAgIGdldEJvb2xlYW5WYWx1ZTogZnVuY3Rpb24odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKHZhbHVlKSA6IChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHRydWUpO1xcbiAgICB9LFxcbiAgICBkZWJ1Z2xvZzogZnVuY3Rpb24oaSwgaXRlbSwgcnVsZSwgb2JqKSB7XFxuICAgICAgICBsb2coJy0tLS0tLS0tLS0nICsgKGkgKyAxKSArICc66LCD6K+V5byA5aeLLS0tLS0tLS0tLScpO1xcbiAgICAgICAgaWYgKGl0ZW0uY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgaXRlbSA9IEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgbG9nKCdpdGVt5YaF5a65OlxcXFxyXFxcXG4nICsgaXRlbSArICdcXFxcclxcXFxuJyArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHR0aXRsZeWumuS9jTogICR7cnVsZS50aXRsZX0gIC0tLT4g57uT5p6cOiAgJHtvYmoudGl0bGV9YCArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHRkZXNj5a6a5L2NOiAgJHtydWxlLmRlc2N9ICAtLS0+IOe7k+aenDogICR7b2JqLmRlc2N9YCArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHRpbWflrprkvY06ICAke3J1bGUuaW1nfSAgLS0tPiDnu5Pmnpw6ICAke29iai5pbWd9YCArXFxuICAgICAgICAgICAgKHJ1bGUuY29udGVudCAhPSB1bmRlZmluZWQgPyBgXFxcXG5cXFxcdGNvbnRlbnTlrprkvY06ICAke3J1bGUuY29udGVudH0gIC0tLT4g57uT5p6cOiAgJHtvYmouY29udGVudH1gIDogJycpICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdHVybOWumuS9jTogICR7cnVsZS51cmx9ICAtLS0+IOe7k+aenDogICR7b2JqLnVybH1gXFxuICAgICAgICApO1xcbiAgICAgICAgbG9nKCctLS0tLS0tLS0tJyArIChpICsgMSkgKyAnOuiwg+ivlee7k+adny0tLS0tLS0tLS0nKTtcXG4gICAgfSxcXG4gICAganNvbkxpc3Q6IGZ1bmN0aW9uKGFyciwganNvbiwgcnVsZSkge1xcbiAgICAgICAgaWYgKGpzb24uY29uc3RydWN0b3IgIT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvbik7XFxuICAgICAgICAgICAgfSBjYXRjaCB7fVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGpzb25bcnVsZS5saXN0XSA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICBhcnIucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKCflrprkvY3liJfooag6JyArIHJ1bGUubGlzdCk7XFxuICAgICAgICB9XFxuICAgICAgICBqc29uW3J1bGUubGlzdF0uZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGV2YWwocnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgdmFyIGRlc2MgPSBldmFsKHJ1bGUuZGVzYyk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBldmFsKHJ1bGUuY29udGVudCk7XFxuICAgICAgICAgICAgdmFyIGltZyA9IGV2YWwocnVsZS5pbWcpICsgcnVsZS5yZWY7XFxuICAgICAgICAgICAgdmFyIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiIDogaHJlZjtcXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcblxcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IGhyZWYgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgcnVsZUxpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsXFxuICAgICAgICAgICAgcnVsZS5saXN0KTtcXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsXFxuICAgICAgICAgICAgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpO1xcbiAgICAgICAgICAgIHZhciBkZXNjMSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MxKTtcXG4gICAgICAgICAgICB2YXIgZGVzYzIgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjMik7XFxuICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnVybEhhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcblxcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjMS5yZXBsYWNlKFxcXCLlkKvkuK3lrZfno4Hpj4hcXFwiLFxcXCLlkKvkuK3lrZdcXFwiKSArIFxcXCJcXFxcdFxcXFx0XFxcIiArIGRlc2MsXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiAoZW1wdHkgPyAnaGlrZXI6Ly9lbXB0eSMjJyA6ICcnKSArIHVybCArICcjbm9IaXN0b3J5I0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfjgJDot7PpobXjgJEnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0cnVlX3VybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnJywgJzHliLA4MeS5i+mXtOeahOeahOmhteeggScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5wdXQoKHRydWVfdXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoaW5wdXQpID4gMSAmJiBwYXJzZUludChpbnB1dCkgPCA4MSAmJiBwYXJzZUludChpbnB1dCkgJSAxID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganVtcHUgPSB0cnVlX3VybC5yZXBsYWNlKC8oXFxcXD9wYWdlPVxcXFxkK3xcXFxcJnBhZ2U9XFxcXGQrfCQpLywgKG1hdGNoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5zdGFydHNXaXRoKCc/cGFnZT0nKSB8fCBtYXRjaC5zdGFydHNXaXRoKCcmcGFnZT0nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmNoYXJBdCgwKSArICdwYWdlPScgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZV91cmwuaW5jbHVkZXMoJz8nKSA/ICcmcGFnZT0nIDogJz9wYWdlPScpICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS51cmwsIGp1bXB1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigneWlfZmlyc3RwYWdlJywganVtcHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5bey57uP56m/6LaK5Yiw5LqGJyArIGlucHV0ICsgJ+mhtSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ivt+i+k+WFpeato+ehrueahOmhteeggVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJ1ZV91cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnVlX3VybClcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IHVybCArIGxhenk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci5wdXNoKGRkKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBMaXN0OiBmdW5jdGlvbihhcnIsIGh0bWwsIHJ1bGUsIHBhcmFtKSB7XFxuICAgICAgICBwYXJhbSA9IHBhcmFtID8gcGFyYW0gOiB7fTtcXG4gICAgICAgIHZhciBhdXRvID0gcGFyYW0uYXV0byA/IHBhcmFtLmF1dG8gOiBmYWxzZTtcXG4gICAgICAgIHZhciBzaG93ID0gcGFyYW0uc2hvdyA/IHBhcmFtLnNob3cgOiBmYWxzZTtcXG4gICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAvL3RoaXMuc3BhZ2Uuc2V0KHRydWVfdXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZywgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgcnVsZS5saXN0KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2codGhpcy5uZXh0UGFnZSgpKVxcbiAgICAgICAgaWYgKChzdG9yYWdlMC5nZXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKSA9PSAndCcgJiYgbGlzdC5sZW5ndGggPiAwKSB8fCBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZW51bVxcXCIpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbGluZVxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIGNscyA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYyk7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcblxcbiAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBcXFwibGFzdGlkX1xcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgY2xzID0gXFxcImxhc3RtYXJrXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwgKyAnP3BhZ2U9ZnlwYWdlI25vSGlzdG9yeSNAcnVsZT1qczokLnJlcXVpcmUoXFxcInlqXFxcIiknLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGNscyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfjgJDot7PpobXjgJEnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh0cnVlX3VybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnJywgJzHliLAzMeS5i+mXtOeahOeahOmhteeggScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaW5wdXQoKHRydWVfdXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoaW5wdXQpID4gMSAmJiBwYXJzZUludChpbnB1dCkgPCA4MSAmJiBwYXJzZUludChpbnB1dCkgJSAxID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganVtcHUgPSB0cnVlX3VybC5yZXBsYWNlKC8oXFxcXD9wYWdlPVxcXFxkK3xcXFxcJnBhZ2U9XFxcXGQrfCQpLywgKG1hdGNoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5zdGFydHNXaXRoKCc/cGFnZT0nKSB8fCBtYXRjaC5zdGFydHNXaXRoKCcmcGFnZT0nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmNoYXJBdCgwKSArICdwYWdlPScgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZV91cmwuaW5jbHVkZXMoJz8nKSA/ICcmcGFnZT0nIDogJz9wYWdlPScpICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS51cmwsIGp1bXB1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigneWlfZmlyc3RwYWdlJywganVtcHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5bey57uP56m/6LaK5Yiw5LqGJyArIGlucHV0ICsgJ+mhtSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ivt+i+k+WFpeato+ehrueahOmhteeggVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJ1ZV91cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnVlX3VybClcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxICYmIHNob3cpIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPHNtYWxsPuWKoOi9veS4rS4uLjwvc21hbGw+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwicGFnZW51bVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7liLDlupXkuoY8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBcXFwibGFzdFxcXCIsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuLypcXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAwICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuaXoOWGheWuuTwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge30sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9Ki9cXG4gICAgICAgIGlmICh0aGlzLm5leHRQYWdlKCkpIHtcXG4gICAgICAgICAgICAvL2xvZygndCcpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAndCcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvL2xvZygnZicpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAnZicpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGF1dG8pIHtcXG4gICAgICAgICAgICAvL2NyZWF0ZU5leHRQYWdlKCk7XFxuICAgICAgICAgICAgYXV0b1BhZ2UoKTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG59O1xcblxcbnZhciBleHRNZXRob2QgPSB7XFxuICAgIFRvUGFyYW1zOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBqc29uID0gYXJndW1lbnRzWzBdO1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb24pXFxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiBrZXkgKyBcXFwiPVxcXCIgKyBqc29uW2tleV0pXFxuICAgICAgICAgICAgLmpvaW4oXFxcIiZcXFwiKTtcXG4gICAgfSxcXG4gICAgdXJsUGFyc2U6IGZ1bmN0aW9uKHUpIHtcXG4gICAgICAgIHZhciBkaWN0ID0ge307XFxuICAgICAgICBkaWN0LlNvdXJjZSA9IHU7XFxuICAgICAgICBsZXQgcGFyYW1zID0gKHVybCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xcbiAgICAgICAgICAgIGxldCByZWcgPSAvKFtePz0mXSspPShbXj89Jl0rKS9nO1xcbiAgICAgICAgICAgIHVybC5yZXBsYWNlKHJlZywgZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2FyZ3VtZW50c1sxXV0gPSBhcmd1bWVudHNbMl07XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBqYXZhVXJsID0gSmF2YUltcG9ydGVyKGphdmEubmV0LlVSTCk7XFxuICAgICAgICB3aXRoKGphdmFVcmwpIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTCh1KTtcXG4gICAgICAgICAgICBkaWN0LlByb3RvY29sID0gdXJsLmdldFByb3RvY29sKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0ID0gdXJsLmdldEhvc3QoKTtcXG4gICAgICAgICAgICBkaWN0LlBvcnQgPSB1cmwuZ2V0UG9ydCgpO1xcbiAgICAgICAgICAgIGRpY3QuRmlsZSA9IHVybC5nZXRGaWxlKCk7XFxuICAgICAgICAgICAgZGljdC5QYXRoID0gdXJsLmdldFBhdGgoKTtcXG4gICAgICAgICAgICBkaWN0LlJlZiA9IHVybC5nZXRSZWYoKTtcXG4gICAgICAgICAgICBkaWN0Lkhvc3RzID0gYCR7ZGljdC5Qcm90b2NvbH06Ly8ke3VybC5nZXRIb3N0KCl9YDtcXG4gICAgICAgIH1cXG4gICAgICAgIGRpY3QuUGFyYW1zID0gcGFyYW1zKHUpO1xcbiAgICAgICAgcmV0dXJuIGRpY3Q7XFxuICAgIH0sXFxuICAgIGlzRXF1YWw6IGZ1bmN0aW9uKHgsIHkpIHtcXG4gICAgICAgIGNvbnN0IG9rID0gT2JqZWN0LmtleXMsXFxuICAgICAgICAgICAgdHggPSB0eXBlb2YgeCxcXG4gICAgICAgICAgICB0eSA9IHR5cGVvZiB5O1xcbiAgICAgICAgcmV0dXJuIHggJiYgeSAmJiB0eCA9PT0gXFxcIm9iamVjdFxcXCIgJiYgdHggPT09IHR5ID9cXG4gICAgICAgICAgICBvayh4KS5sZW5ndGggPT09IG9rKHkpLmxlbmd0aCAmJlxcbiAgICAgICAgICAgIG9rKHgpLmV2ZXJ5KChrZXkpID0+IHRoaXMuaXNFcXVhbCh4W2tleV0sIHlba2V5XSkpIDogeCA9PT0geTtcXG4gICAgfSxcXG4gICAgZmluZERpZmZlcmVudEluZGV4OiBmdW5jdGlvbihzdHIxLCBzdHIyKSB7XFxuICAgICAgICBjb25zdCBkaWZmQ2hhcnMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyMi5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChzdHIxW2ldICE9PSBzdHIyW2ldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZDaGFycy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxcbiAgICAgICAgICAgICAgICAgICAgczE6IHN0cjFbaV0sXFxuICAgICAgICAgICAgICAgICAgICBzMjogc3RyMltpXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZDaGFycztcXG4gICAgfSxcXG4gICAgcmVwbGFjZUNoYXJBdDogZnVuY3Rpb24oc3RyLCBpbmRleCwgcmVwbGFjZW1lbnQpIHtcXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RyLmxlbmd0aCkge1xcbiAgICAgICAgICAgIHJldHVybiBzdHI7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhpbmRleClcXG4gICAgICAgIGNvbnN0IGFyciA9IHN0ci5zcGxpdChcXFwiXFxcIik7XFxuICAgICAgICBhcnJbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XFxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oXFxcIlxcXCIpO1xcbiAgICB9LFxcbiAgICBnZXRPYmplY3RLZXlzRGlmZjogZnVuY3Rpb24ob2JqMSwgb2JqMikge1xcbiAgICAgICAgY29uc3QgZGlmZmVyZW50S2V5cyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQga2V5IGluIG9iajEpIHtcXG4gICAgICAgICAgICBpZiAoIW9iajIuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xcbiAgICAgICAgICAgICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMikge1xcbiAgICAgICAgICAgIGlmICghb2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkaWZmZXJlbnRLZXlzO1xcbiAgICB9LFxcbiAgICBnZXROZXh0VXJsOiBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgcGFyYW1zKSB7XFxuICAgICAgICB2YXIgdTEgPSB0aGlzLnVybFBhcnNlKHNvdXJjZSk7XFxuICAgICAgICB2YXIgdTIgPSB0aGlzLnVybFBhcnNlKHRhcmdldCk7XFxuICAgICAgICB2YXIgcGEgPSB1bmRlZmluZWQ7XFxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgIHBhID0gcGFyYW1zLmhhc093blByb3BlcnR5KFxcXCLnibnlvoFcXFwiKSA/IHBhcmFtcy7nibnlvoEgOiB1bmRlZmluZWQ7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgbmV4dHVybCA9IHNvdXJjZTtcXG4gICAgICAgIHZhciBjYSA9IE9iamVjdC5rZXlzKHUyLlBhcmFtcykubGVuZ3RoID09IDAgPyBcXFwiXFxcIiA6IFxcXCI/XFxcIjtcXG4gICAgICAgIGlmIChwYSAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICB2YXIgcnMgPSBTdHJpbmcodTIuUGF0aCkucmVwbGFjZShuZXcgUmVnRXhwKHBhKSwgXFxcIiQxZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgcnMgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFcXVhbCh1MS5QYXJhbXMsIHUyLlBhcmFtcykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGR0X2RlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTEuUGF0aCk7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTIuUGF0aCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGRmID0gdGhpcy5maW5kRGlmZmVyZW50SW5kZXgoU3RyaW5nKHUxLlBhdGgpLCBTdHJpbmcodTIuUGF0aCkpO1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhkZik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGRmLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBkZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBmID0gZGYuZmlsdGVyKCh4KSA9PiAvXFxcXGQrLy50ZXN0KHguczIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGZbMF0uaW5kZXg7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGVxID0gdGhpcy5yZXBsYWNlQ2hhckF0KFN0cmluZyh1Mi5QYXRoKSwgcmUsIFxcXCJmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgZXAgPSB0aGlzLmdldE9iamVjdEtleXNEaWZmKHUxLlBhcmFtcywgdTIuUGFyYW1zKVxcbiAgICAgICAgICAgICAgICBpZiAoZXAubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHUxLlBhcmFtc1tlcFswXV0gPSAnZnlwYWdlJ1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGVwKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSBTdHJpbmcodTEuUGF0aCkucmVwbGFjZSgvXFxcXGQrLywgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTEuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1MS5QYXJhbXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCduZXh0OicrbmV4dHVybClcXG4gICAgICAgIHJldHVybiBuZXh0dXJsO1xcbiAgICB9LFxcbn07XFxuXFxuZnVuY3Rpb24gZ2V0VHJ1ZWxpbmsobWFyaywgdXJsLCBwYWdlKSB7XFxuICAgIHZhciBwID0gZ2V0TXlWYXIobWFyaywgdXJsKS5yZXBsYWNlKFxcXCJmeXBhZ2VcXFwiLCBwYWdlKTtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcmV0dXJuIGdldE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCBwKTtcXG4gICAgfSBlbHNlIGlmIChwICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICByZXR1cm4gcDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB1cmw7XFxuICAgIH1cXG59XFxuLy/mnoTlu7pcXG5mdW5jdGlvbiBjcmVhdGVOZXh0UGFnZSgpIHtcXG4gICAgbGV0IHN0YXJ0bnVtID0gMTtcXG4gICAgdmFyIG9iaiA9IGFyZ3VtZW50c1swXTtcXG4gICAgaWYgKHRydWVfdXJsICE9IGdldE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgXFxcIlxcXCIpKSB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIik7XFxuICAgIH1cXG4gICAgaWYgKHBhZ2UgPT0gc3RhcnRudW0gJiYgZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhuZXh0KTtcXG4gICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgbnh1cmwgPSBleHRNZXRob2QuZ2V0TmV4dFVybCh0cnVlX3VybCwgbmV4dCwgb2JqKTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibnh1cmw6XFxcIiArIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcijnirbmgIEsIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIG54dXJsKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhdXRvUGFnZSgpIHtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgLy8gIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICBuZXh0ID0gXFxcIuayoeacieS4i+S4gOmhteWTpvCfmJBcXFwiO1xcbiAgICB9XFxuICAgIGlmIChuZXh0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGi5LqM57qn5aSW6YOo6Kej5p6QXCIsXCJwYXRoXCI6XCJ0b29sXCIsXCJydWxlXCI6XCJcXG4gICB2YXIgY29kZWxhenkgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9BcG9sbG8v8J2QgvCdkKjwnZCd8J2QnvCdkIvwnZCa8J2Qs/CdkLIuanMnKSB8fCBcXFwiXFxcIjtcXG5cXG4gICBmdW5jdGlvbiBkb3duY29kZSgpIHtcXG4gICAgICAgdmFyIGpzID0gZmV0Y2goYmFzZTY0RGVjb2RlKFxcXCJhSFIwY0hNNkx5OXlZWGN1WjJsMGFIVmlkWE5sY21OdmJuUmxiblF1WTI5dEwwRndiMnhzYjFKcGIyOHZVaTl0WVhOMFpYSXY4SjJRZ3ZDZGtLanduWkNkOEoyUW52Q2RrSXZ3blpDYThKMlFzL0Nka0xJPVxcXCIpKTtcXG4gICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL0Fwb2xsby/wnZCC8J2QqPCdkJ3wnZCe8J2Qi/CdkJrwnZCz8J2Qsi5qcycsIGpzKTtcXG4gICAgICAgdG9hc3QoXFxcIui/nOeoi+aVsOaNruW3suabtOaWsOWIsOacrOWcsFxcXCIpXFxuICAgICAgIGNvZGVsYXp5ID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvQXBvbGxvL/CdkILwnZCo8J2QnfCdkJ7wnZCL8J2QmvCdkLPwnZCyLmpzJylcXG4gICB9XFxuICAgaWYgKCFjb2RlbGF6eSkge1xcbiAgICAgICBkb3duY29kZSgpXFxuICAgfVxcbiAgIHRyeSB7XFxuICAgICAgIGV2YWwoY29kZWxhenkpXFxuICAgfSBjYXRjaCB7XFxuICAgICAgIGRvd25jb2RlKClcXG4gICAgICAgZXZhbChjb2RlbGF6eSlcXG4gICAgICAgbG9nKFxcXCLor7vlj5blpLHotKXmm7TmlrDov5znqIvmlbDmja5cXFwiKVxcbiAgIH1cXG4gICBDb2RlTGF6eSjor4bliKvnoIEpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKE1ZX0hPTUUpID0+IHtcXG4gICAgdmFyIGlucCA9IGZldGNoKGlucHV0LHt9KTsgXFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIrcGRmYShpbnAsICcucHJldmlldy1pbWFnZXMmJmEsMTonKS5tYXAoaW1nID0+cGQoaW1nLCAnYSYmaHJlZicpK1xcXCJAUmVmZXJlcj1cXFwiLCkuam9pbihcXFwiJiZcXFwiKSAgXFxufSxNWV9IT01FKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGg5LiA57qn6aG16Z2i5YaF5a65XCIsXCJwYXRoXCI6XCJ5alwiLFwicnVsZVwiOlwianM6XFxuICAgIHZhciBkID0gW107XFxuXFxuYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAoKSA9PiB7XFxuICAgIGNsZWFyTXlWYXIoXFxcInVybFxcXCIpO1xcbiAgICBjbGVhck15VmFyKFxcXCJzb3J5XFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcIm5leHRQYWdlXFxcIik7XFxuICAgIGNsZWFySXRlbSgncGFnZXMnKVxcbn0pO1xcbmFkZExpc3RlbmVyKFxcXCJvblJlZnJlc2hcXFwiLCAoKSA9PiB7XFxuICAgIGNsZWFyTXlWYXIoXFxcInVybFxcXCIpO1xcbiAgICBjbGVhck15VmFyKFxcXCJzb3J0XFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcIm5leHRQYWdlXFxcIik7XFxuICAgIGNsZWFySXRlbSgncGFnZXMnKVxcbn0pO1xcblxcbk1ZX1VSTCA9IE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJyk7XFxubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoXFxcInVybFxcXCIsIE1ZX1VSTCk7XFxuLy/ojrflj5bkuIrmrKHnvJPlrZjnmoTkuIvpobXpk77mjqVcXG5sZXQgbmV4dFBhZ2UgPSBnZXRNeVZhcihcXFwibmV4dFBhZ2VcXFwiLCBcXFwiXFxcIik7XFxuLy/lpoLmnpzmnInkuIvkuIDpobXkuJTkuI3mmK/nrKzkuIDpobXlsLHkvb/nlKjkuIvkuIDpobXpk77mjqVcXG5pZiAobmV4dFBhZ2UgJiYgTVlfUEFHRSA+IDEpIHtcXG4gICAgdHJ1ZV91cmwgPSBuZXh0UGFnZTtcXG59XFxubG9nKHRydWVfdXJsKTtcXG4vL3ZhciBodG1sID0gcmVxdWVzdCh0cnVlX3VybCk7XFxudmFyIGh0bWwgPSBmZXRjaCh0cnVlX3VybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICAgICBjb29raWU6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvQXBvbGxvL0Nvb2tpZS9qYXZkYl9jb29raWUudHh0JykgfHwgJycsXFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlxcXCIsXFxuICAgIH0sXFxuICAgIHJlZGlyZWN0OiBmYWxzZVxcbn0pO1xcbmlmICgvSnVzdFxcXFxzYVxcXFxzbW9tZW50Ly50ZXN0KGh0bWwpKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAn6I635Y+WY29va2llJy5mb250Y29sb3IoJyNGRjAwRkYnKS5iaWcoKSxcXG4gICAgICAgIHVybDogdHJ1ZV91cmwgKyAkKCcnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnLFxcbiAgICAgICAgICAgICAgICB1cmw6IE1ZX1VSTCxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2xpc3QmJnNjcmVlbicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlxcXCIsIC8vUENfVUEsICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgc2hvd1Byb2dyZXNzOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2soKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IG5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3RhZ3MnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvID0gZmJhLmdldENvb2tpZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgdWEgPSBmYmEuZ2V0VWEoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2ZiYS5sb2coJ2NvOjo6Ojo6JyArIHVhKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGZiYS5sb2coJ2NvOjo6Ojo6JyArIGNvKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWxDb250ZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTDtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC/msLjkuYXln5/lkI0vLnRlc3QoaHRtbENvbnRlbnQpKSB7XFxuXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEucGFyc2VMYXp5UnVsZSgkJCQoKS5sYXp5UnVsZSgoY28pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvQXBvbGxvL0Nvb2tpZS9qYXZkYl9jb29raWUudHh0JywgY28pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCflt7Lojrflj5Zjb29raWXvvIzliIfmjaLliLDpppbpobUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY28pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwMCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2soKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIE1ZX1VSTClcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgfSk7XFxufVxcbnRyeSB7XFxuICAgIC8v57yT5a2Y5LiL5LiA6aG1XFxuICAgIGxldCBuZXh0VXJsID0gcGQoaHRtbCwgXFxcImE6Y29udGFpbnMo5LiL5LiAKSYmaHJlZlxcXCIpO1xcbiAgICBwdXRNeVZhcihcXFwibmV4dFBhZ2VcXFwiLCBuZXh0VXJsIHx8IFxcXCLmsqHmnInkuIvkuIDpobXlk6bwn5ivXFxcIik7XFxuICAgIC8vbG9nKFxcXCLkuIvkuIDpobXvvJpcXFwiICsgbmV4dFVybClcXG59IGNhdGNoIChlKSB7XFxuICAgIC8vY2xlYXJNeVZhcihcXFwibmV4dFBhZ2VcXFwiKTtcXG4gICAgbGV0IG5leHRVcmwgPSBcXFwi5rKh5pyJ5LiL5LiA6aG15ZOm8J+Yr1xcXCI7XFxuICAgIHRvYXN0KFxcXCLlpb3lg4/msqHmnInkuIvkuIDpobXkuobvvIFcXFwiKTtcXG59XFxuXFxudmFyIHBhZ2VzO1xcbmlmIChNWV9QQUdFID09IDEgJiYgIXRydWVfdXJsLmluY2x1ZGVzKFxcXCJzZWFyY2hcXFwiKSkge1xcbiAgICAvL+a8lOWRmOWbvlxcbiAgICB0cnkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgaW1nID0gcGRmaChodG1sLCBcXFwiLnNlY3Rpb24tY29sdW1ucyYmLmltYWdlJiYuYXZhdGFyJiZzdHlsZVxcXCIpO1xcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgdmFyIGltZyA9IFxcXCJodHRwczovL3RodW1ic25hcC5jb20vaS9zeVNNUTdNZy5qcGdcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIOaPj+i/sDEgPSBwZGZoKGh0bWwsIFxcXCIuc2VjdGlvbi1jb2x1bW5zJiZoMi0tLnNlY3Rpb24tbWV0YSwtMSYmVGV4dFxcXCIpO1xcbiAgICAgICAgdmFyIOaPj+i/sDIgPSBwZGZoKGh0bWwsIFxcXCIuc2VjdGlvbi1jb2x1bW5zJiZoMiYmLnNlY3Rpb24tbWV0YSwtMSYmVGV4dFxcXCIpO1xcbiAgICAgICAgdmFyIG51bSA9IOaPj+i/sDIubWF0Y2goL1xcXFxkKy8pWzBdIHx8ICcxJ1xcbiAgICAgICAgdmFyIHBhZ2VzID0gTWF0aC5mbG9vcihudW0gLyA0MCk7XFxuICAgICAgICBpZiAobnVtICUgNDAgIT09IDApIHtcXG4gICAgICAgICAgICBwYWdlcyArPSAxO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGxpc3RBY3RvcnMgPSBKU09OLnBhcnNlKGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiL2phdmRiX2FjdG9yLnR4dCcpIHx8ICdbXScpO1xcbiAgICAgICAgdmFyIHN0ciA9IOaPj+i/sDEgKyAnQEAnICsgaW1nICsgJ0BAJyArIChwZGZoKGh0bWwsJ2xpbmtbcmVsPWNhbm9uaWNhbF0mJmhyZWYnKSAhPVxcXCJcXFwiID8gcGRmaChodG1sLCdsaW5rW3JlbD1jYW5vbmljYWxdJiZocmVmJykgKyBcXFwiP3BhZ2U9ZnlwYWdlXFxcIiA6IHRydWVfdXJsLnJlcGxhY2UoL2phdmRiXFxcXGQqLyxcXFwiamF2ZGJcXFwiKS5yZXBsYWNlKC9wYWdlPVxcXFxkKy8sICdwYWdlPWZ5cGFnZScpKTtcXG4gICAgICAgIGlmIChsaXN0QWN0b3JzLmluZGV4T2Yoc3RyKSA9PSAnLTEnKSB7XFxuICAgICAgICAgICAgdmFyIHQgPSAnPGI+PHNtYWxsPjxmb250IGNvbG9yPSMxRTkwRkY+8J+kjeacquaUtuiXj/CfpI08L2ZvbnQ+PC9zbWFsbD4nXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciB0ID0gJzxiPjxzbWFsbD48Zm9udCBjb2xvcj0jRkYwMEZGPvCfkp3lt7LmlLbol4/wn5KdPC9mb250Pjwvc21hbGw+J1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIkphdkRCXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiMFxcXCIsXFxuICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgdXJsOiAnY29weTovLycgKyDmj4/ov7AxICsgJyxoaWtlcjovL3BhZ2UveWo/dXJsPScgKyBNWV9VUkwucmVwbGFjZSgvXFxcXC9cXFxcL1xcXFx3K1xcXFwuLywgJy8vamF2ZGIuJykucmVwbGFjZSgncGFnZT0xJywgJ3BhZ2U9ZnlwYWdlJykgKyAnJnJ1bGU98J2QifCdkJrwnZCv8J2Qg/CdkIEsJyArIGltZyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImNhcmRfcGljXzJcXFwiLFxcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiNmZTVjNGJcXFwiPuemu+aAneS6lOmmlsK35YW25ZubwrfllJDCt+WFg+eouVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHTmm77nu4/msqfmtbfpmr7kuLrmsLTvvIxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx06Zmk5Y205ber5bGx5LiN5piv5LqR44CCXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdOWPluasoeiKseS4m+aHkuWbnumhvu+8jFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHTljYrnvJjkv67pgZPljYrnvJjlkJvjgIJcXFxcbjwvZm9udD48L3NtYWxsPjxiPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiY3lhblxcXCI+ICcgKyDmj4/ov7AxLnNsaWNlKDAsIDEzKSArICc8L2ZvbnQ+PC9zbWFsbD48Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiMxRTkwRkZcXFwiPlxcXFxuICcgKyDmj4/ov7AyICsgJ1xcXFx0PC9mb250Pjwvc21hbGw+JyArIHQgKyAnPGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCIjRkZFMTAwXFxcIj5cXFxcbuS5n+iuuOaciScgKyBwYWdlcyArICfpobXvvIzmsqHpqpfkvaDlkKc8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgIGRlc2M6ICcwJyxcXG4gICAgICAgICAgICAvL2ltZzogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfMlxcXCIsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl9hY3Rvci50eHQnKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFzdHIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl9hY3Rvci50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2Uoc3RyKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LmluZGV4T2YobmFtZSkgPT0gJy0xJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpc3QucHVzaChuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnVuc2hpZnQobmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl9hY3Rvci50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZihuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYi9qYXZkYl9hY3Rvci50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHN0ciksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgXFxcImdyYWRpZW50XFxcIjogdHJ1ZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9IGNhdGNoIHt9XFxuICAgIGlmICh0eXBlb2YgcGFnZXMgIT09ICd1bmRlZmluZWQnICYmIHBhZ2VzICE9PSBudWxsKSB7XFxuICAgICAgICBzZXRJdGVtKCdwYWdlcycsIHBhZ2VzLnRvU3RyaW5nKCkpO1xcbiAgICB9XFxuXFxuICAgIC8v5ryU5ZGY5YiG57G7XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgY2F0ZWdvcnkgPSBwZGZhKGh0bWwsIFxcXCIuYWN0b3ItdGFncyYmLnRhZ1xcXCIpXFxuICAgICAgICBmb3IgKHZhciBqIGluIGNhdGVnb3J5KSB7XFxuICAgICAgICAgICAgY2F0ZWdvcnlbal0gPSBjYXRlZ29yeVtqXS5yZXBsYWNlKC9idXR0b24vZywgJ2EnKS5yZXBsYWNlKFxcXCJvbmNsaWNrXFxcIiwgXFxcImhyZWZcXFwiKS5yZXBsYWNlKFxcXCJ3aW5kb3cubG9jYXRpb24uaHJlZj1cXFwiLCBcXFwiXFxcIikucmVwbGFjZSgvXFxcXCcvZywgXFxcIlxcXCIpLnJlcGxhY2UoXFxcImphdmFzY3JpcHQ6O1xcXCIsIHRydWVfdXJsKVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgY2F0ZWdvcnkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKGl0ZW0sIFxcXCJUZXh0XFxcIik7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHBkKGl0ZW0sIFxcXCJhJiZocmVmXFxcIik7XFxuICAgICAgICAgICAgdXJsID0gdXJsLmluY2x1ZGVzKCc/cGFnZScpID8gdXJsIDogKHVybC5pbmNsdWRlcygnPycpID8gdXJsICsgXFxcIiZwYWdlPTFcXFwiIDogdXJsICsgXFxcIj9wYWdlPTFcXFwiKVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLmluY2x1ZGVzKFxcXCJpcy1saW5rXFxcIikgPyAn4oCc4oCc4oCd4oCdJyArIHRpdGxlLmZvbnRjb2xvcignY3lhbicpICsgXFxcIuKZiO+4j1xcXCIgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwgKyAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LCB0aXRsZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZENvbG9yJzogaXRlbS5pbmNsdWRlcyhcXFwiaXMtbGlua1xcXCIpID8gJyNGRjAwRkYnIDogJyM2NjY2NjYnXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSA0KSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0gY2F0Y2gge31cXG4gICAgLy/liIblibJcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgIH0pXFxuXFxuLy9zb3J0XFxudHJ5IHtcXG4gICAgdmFyIHNvcnQgPSBwZGZhKGh0bWwsIFxcXCIudG9vbGJhciYmYVxcXCIpXFxuICAgIHNvcnQuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgIHZhciB0aXRsZSA9IHBkZmgoaXRlbSwgXFxcIlRleHRcXFwiKTtcXG4gICAgICAgIHZhciB1cmwgPSBwZChpdGVtLCBcXFwiYSYmaHJlZlxcXCIpO1xcbiAgICAgICAgdXJsID0gdXJsLmluY2x1ZGVzKCc/cGFnZScpID8gdXJsIDogKHVybC5pbmNsdWRlcygnPycpID8gdXJsICsgXFxcIiZwYWdlPTFcXFwiIDogdXJsICsgXFxcIj9wYWdlPTFcXFwiKVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgdXJsOiB1cmwgKyAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwidXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic29ydFxcXCIsIGluZGV4KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LGluZGV4KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kQ29sb3InOiBnZXRNeVZhcihcXFwic29ydFxcXCIsIFxcXCIwXFxcIikgPT0gaW5kZXggPyAnI0ZGMDBGRicgOiAnIzY2NjY2NidcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9KVxcbn0gY2F0Y2gge31cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgIH0pXFxufVxcblxcbmlmICghdHJ1ZV91cmwuaW5jbHVkZXMoXFxcInNlYXJjaFxcXCIpKSB7XFxuICAgIHZhciBwYWdlcyA9IGdldEl0ZW0oJ3BhZ2VzJyk7XFxufVxcbnZhciBwYWdlO1xcbnRyeSB7XFxuICAgIHBhZ2UgPSB0cnVlX3VybC5tYXRjaCgvcGFnZT0oXFxcXGQrKS8pWzFdXFxufSBjYXRjaCB7XFxuICAgIHBhZ2UgPT0gMVxcbn1cXG50cnkge1xcbiAgICBpZiAocGFnZXMgPiAxICYmIHBhZ2VzIDwgMzcpIHtcXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDw9IHBhZ2VzOyBqKyspIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdHJ1ZV91cmwucmVwbGFjZSgvcGFnZT1cXFxcZCsvLCAncGFnZT0nICsgaik7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGogPT0gcGFnZSA/ICfigJzigJzigJ3igJ0nICsgKGogKyAn6aG1JykuZm9udGNvbG9yKCdyZWQnKSA6IChqICsgJ+mhtScpLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodXJsK1xcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChqKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwidXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sIGopLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0gZWxzZSBpZiAocGFnZXMgPiAzNykge1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPD0gNjE7IGogKz0gMSkge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB0cnVlX3VybC5yZXBsYWNlKC9wYWdlPVxcXFxkKy8sICdwYWdlPScgKyBqKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaiA9PSBwYWdlID8gJ+KAnOKAnOKAneKAnScgKyAoaiArICfpobUnKS5mb250Y29sb3IoJ3JlZCcpIDogKGogKyAn6aG1JyksXFxuICAgICAgICAgICAgICAgIHVybDogJCh1cmwrXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfSwgaiksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfVxcbn0gY2F0Y2gge31cXG5cXG5cXG5sZXQgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5pdGVtJyk7XFxuaWYgKGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICBsaXN0LmZvckVhY2goeCA9PiB7XFxuICAgICAgICBsZXQgaW1nID0gIXRydWVfdXJsLmluY2x1ZGVzKFxcXCJzZWFyY2hcXFwiKSA/IHBkKHgsICdpbWd8fGEmJnNyY3x8ZGF0YS1vcmlnaW5hbCcpIDogcGQoeCwgJ2ltZ3x8YSYmc3JjfHxkYXRhLW9yaWdpbmFsJykucmVwbGFjZShcXFwiY292ZXJzXFxcIiwgXFxcInRodW1ic1xcXCIpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaCh4LCAnLnZpZGVvLXRpdGxlJiZUZXh0JyksXFxuICAgICAgICAgICAgZGVzYzogcGRmaCh4LCAnLm1ldGEmJlRleHQnKSxcXG4gICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZWo/dXJsPScgKyBwZCh4LCAnYSYmaHJlZicpICsgJyNub0hpc3RvcnkjJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogaW1nLmluY2x1ZGVzKFxcXCIvdGh1bWJzL1xcXCIpID8gJ21vdmllXzMnIDogJ21vdmllXzInLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogcGRmaCh4LCAnLnZpZGVvLXRpdGxlJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+OAkOi3s+mhteOAkScsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodHJ1ZV91cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJycsICcx5YiwODHkuYvpl7TnmoTnmoTpobXnoIEnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmlucHV0KCh0cnVlX3VybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChpbnB1dCkgPiAwICYmIHBhcnNlSW50KGlucHV0KSA8IDgxICYmIHBhcnNlSW50KGlucHV0KSAlIDEgPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganVtcHUgPSB0cnVlX3VybC5yZXBsYWNlKC8oXFxcXD9wYWdlPVxcXFxkK3xcXFxcJnBhZ2U9XFxcXGQrfCQpLywgKG1hdGNoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guc3RhcnRzV2l0aCgnP3BhZ2U9JykgfHwgbWF0Y2guc3RhcnRzV2l0aCgnJnBhZ2U9JykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2guY2hhckF0KDApICsgJ3BhZ2U9JyArIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRydWVfdXJsLmluY2x1ZGVzKCc/JykgPyAnJnBhZ2U9JyA6ICc/cGFnZT0nKSArIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInVybFxcXCIsIGp1bXB1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5bey57uP56m/6LaK5Yiw5LqGJyArIGlucHV0ICsgJ+mhtSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+36L6T5YWl5q2j56Gu55qE6aG156CBXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRydWVfdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZV91cmwpXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pXFxufSBlbHNlIHtcXG4gICAgLypcXG4gICAgICBmdW5jdGlvbiBnZXRCaWdUZXh0KHRleHQsIGNvdW50KSB7XFxuICAgICAgICBpZiAoY291bnQgPiAwKSB7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmJpZygpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAtY291bnQ7IGkrKykge1xcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zbWFsbCgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0ZXh0O1xcbiAgICAgICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiK2dldEJpZ1RleHQoXFxcIjxiaWc+PGZvbnQgY29sb3I9JyNGRUJENkYnPuW3sue7j+i2hei/h+S6huacgOe7iOmhteeggTwvZm9udD48L2JpZz48YnI+PHNtYWxsPjxmb250IGNvbG9yPScjRkI2QzczJz7kuI3kv6Hngrnlh7vmiZPlvIDnvZHpobU8L2ZvbnQ+PC9zbWFsbD5cXFwiLCA1KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRydWVfdXJsKSA9PiB7XFxuICAgIHJldHVybiB0cnVlX3VybFxcbiAgICAgICAgIH0sdHJ1ZV91cmwpLFxcbiAgICAgICAgZXh0cmE6e2xpbmVWaXNpYmxlOmZhbHNlfVxcbiAgICAgICAgfSlcXG4gICAgKi9cXG59XFxuXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaHkuoznuqfpobXpnaLlhoXlrrlcIixcInBhdGhcIjpcImVqXCIsXCJydWxlXCI6XCJqczpcXG4gICAgICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgKCkgPT4ge1xcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInBpY2xpc3RcXFwiKTsgICAgICAgICAgXFxuICAgICAgICB9KTtcXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcbn1cXG5cXG52YXIgZCA9IFtdXFxuTVlfVVJMPU1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCcnKTtcXG5sb2coTVlfVVJMKVxcbi8vdmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIGNvb2tpZTogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9ydWxlcy9BcG9sbG8vQ29va2llL2phdmRiX2Nvb2tpZS50eHQnKSB8fCAnJyxcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIiwgICAgICBcXG4gICAgfSxcXG4gICAgcmVkaXJlY3Q6IGZhbHNlXFxufSk7XFxuXFxuaWYgKC9KdXN0XFxcXHNhXFxcXHNtb21lbnQvLnRlc3QoaHRtbCkpIHtcXG5kLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ+iOt+WPlmNvb2tpZScuZm9udGNvbG9yKCcjRkYwMEZGJykuYmlnKCksXFxuICAgICAgICB1cmw6IE1ZX1VSTCArICQoJycpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZScsXFxuICAgICAgICAgICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnbGlzdCYmc2NyZWVuJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIiwvL1BDX1VBLCAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrKCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0YWdzJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbyA9IGZiYS5nZXRDb29raWUodSk7XFxuLy92YXIgdWEgPSBmYmEuZ2V0VWEoKVxcbi8vZmJhLmxvZygnY286Ojo6OjonICsgdWEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2ZiYS5sb2coJ2NvOjo6Ojo6JyArIGNvKTtcXG52YXIgaHRtbENvbnRlbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MO1xcblxcbmlmKC/msLjkuYXln5/lkI0vLnRlc3QoaHRtbENvbnRlbnQpKSB7XFxuICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5wYXJzZUxhenlSdWxlKCQkJCgpLmxhenlSdWxlKChjbykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9BcG9sbG8vQ29va2llL2phdmRiX2Nvb2tpZS50eHQnLCBjbyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ+W3suiOt+WPlmNvb2tpZe+8jOWIh+aNouWIsOmmlumhtScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjbykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChjaGVjaywgNTAwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVjaygpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgTVlfVVJMKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHNldFJlc3VsdChkKTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICB9KTtcXG59XFxuXFxudHJ5e1xcbnZhciB0aXRsZSA9IHBkZmgoaHRtbCwnaDImJnN0cm9uZyYmVGV4dCcpICsgJyAnICsgcGRmaChodG1sLCdoMiYmLmN1cnJlbnQtdGl0bGUmJlRleHQnKTtcXG52YXIgZGVzY3QgPSBwZGZoKGh0bWwsJ2gyJiYuY3VycmVudC10aXRsZSYmVGV4dCcpO1xcbiAgIGlmKHRpdGxlICE9PW51bGwgJiYgIXRpdGxlLmluY2x1ZGVzKFxcXCLplovpgJpWSVAgXFxcIikpe1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9I0U1N0ExQT4nK3RpdGxlKyc8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChkZXNjdCkgPT4ge1xcbi8v5Yqo5oCB5Yi35pawXFxudmFyIGRlc2MgPSBmaW5kSXRlbSgndHJhbnNkZXNjJykuZGVzY1xcbiAgICAgICAgICBpZighZGVzYyl7XFxuICAgIHZhciB0cmFuc2xhdGVzID0gJC5yZXF1aXJlKFxcXCJ0cmFuc1xcXCIpLnRyYW5zbGF0ZShkZXNjdClcXG4gICAgICB1cGRhdGVJdGVtKFxcXCJ0cmFuc2Rlc2NcXFwiLHtcXG4gICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnScrdHJhbnNsYXRlcy5mb250Y29sb3IoXFxcInJlZFxcXCIpLFxcbn0pXFxufWVsc2V7XFxudXBkYXRlSXRlbShcXFwidHJhbnNkZXNjXFxcIix7XFxuICAgICAgICAgIGRlc2M6ICcnLFxcbn0pXFxufSAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIiAgICAgIFxcbi8qICAgICAgIFxcbiAgICAgICAgICB2YXIgdHJhbnNsYXRlcyA9ICQucmVxdWlyZShcXFwidHJhbnNcXFwiKS50cmFuc2xhdGUoZGVzY3QpICAgXFxuICAgICAgICAgIHJldHVybiBcXFwiY29uZmlybTovL1xcXCIgKyB0cmFuc2xhdGVzICsgXFxcIi5qczonaGlrZXI6Ly9lbXB0eScgXFxcIiAgICovXFxuICAgICAgICAgICAgICAgIH0sZGVzY3QpLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICBpZDogJ3RyYW5zZGVzYycsXFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+e9kemhtScsIGpzOiAkLnRvU3RyaW5nKCgpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJ3ZWI6Ly9cXFwiICsgTVlfVVJMXFxuICAgICAgICAgICAgICAgICAgICAgICB9KX0se3RpdGxlOiAn5aSN5Yi2JywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyB0aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgIH0sdGl0bGUpfSx7dGl0bGU6ICfnmb7luqbnv7vor5EnLCBqczogJC50b1N0cmluZygodGl0bGUpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vZmFueWkuYmFpZHUuY29tLyNqcC96aC9cXFwiICsgdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgIH0sdGl0bGUpfSx7dGl0bGU6ICdEZWVwbOe/u+ivkScsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcIng1Oi8vaHR0cHM6Ly93d3cuZGVlcGwuY29tL3poL3RyYW5zbGF0b3ItbW9iaWxlI2phL3poL1xcXCIgKyB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgfSx0aXRsZSl9LHt0aXRsZTogJ+iwt+atjOe/u+ivkScsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcIng1Oi8vaHR0cHM6Ly90cmFuc2xhdGUuZ29vZ2xlLmNvbS8/aGw9emgtQ04mc2w9amEmdGw9emgtQ04mdGV4dD1cXFwiICsgdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgIH0sdGl0bGUpfV1cXG59XFxuICAgIH0pXFxufVxcblxcbi8vc2V0UGFnZVRpdGxlKHRpdGxlKSAvL2Zj6aG16Z2i6I635Y+W5qCH6aKYXFxuXFxudmFyIOivhuWIq+eggSA9IHBkZmgoaHRtbCwgJ2JvZHkmJi5maXJzdC1ibG9jayYmLnZhbHVlJiZUZXh0JykucmVwbGFjZShcXFwiTktOS0pEVkFKXFxcIixcXFwiRFZBSlxcXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShcXFwiLWFpXFxcIixcXFwiXFxcIikucmVwbGFjZSgvKFxcXFxkKS0uKi8sXFxcIiQxXFxcIik7XFxudmFyIHBhZ2VVcmwgPSBwZGZoKGh0bWwsJ2xpbmtbcmVsPWNhbm9uaWNhbF0mJmhyZWYnKSAhPVxcXCJcXFwiID8gcGRmaChodG1sLCdsaW5rW3JlbD1jYW5vbmljYWxdJiZocmVmJykgOiBNWV9VUkwucmVwbGFjZSgvamF2ZGJcXFxcZCovLFxcXCJqYXZkYlxcXCIpO1xcbnZhciBpbWcgPSBwZChodG1sLCcuY29sdW1uLXZpZGVvLWNvdmVyJiZpbWcmJnNyYycpO1xcbnZhciBwaWNzID0gcGRmYShodG1sLFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW0sMTpuXFxcIikubWFwKGl0ZW09PnBkZmgoaXRlbSxcXFwiYSYmaHJlZlxcXCIpKVxcbi8vdmFyIGltZyA9IE1ZX1BBUkFNUy5pbWc7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgdXJsOiBcXFwiY29weTovL1xcXCIgKyB0aXRsZSArXFxcIiwsXFxcIisgaW1nLFxcbiAgICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcbiAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOmZhbHNlLFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7dGl0bGU6ICdETU0nLCBqczogJC50b1N0cmluZygo6K+G5Yir56CBKT0+e1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6Ly9waWNzLmRtbS5jby5qcC9tb25vL21vdmllL2FkdWx0L1xcXCIgKyDor4bliKvnoIEucmVwbGFjZSgvLXxfLywnJykgKyAnLycgKyDor4bliKvnoIEucmVwbGFjZSgvLXxfLywnJykgKyBcXFwicGwuanBnXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgfSzor4bliKvnoIEpfSx7dGl0bGU6ICflm77niYfpooTop4gnLCBqczogJC50b1N0cmluZygocGljcyk9PnsgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpY3MgIT1cXFwiXFxcIiA/IFxcXCJwaWNzOi8vXFxcIitwaWNzLmpvaW4oXFxcIiYmXFxcIikgOiBcXFwidG9hc3Q6Ly/msqHmnInlm77niYfpooTop4jlk6bwn5iQXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgfSxwaWNzKX0se3RpdGxlOiAn5omT5byA5Zu+54mHJywganM6ICQudG9TdHJpbmcoKGltZyk9PnsgXFxuICAgICAgICByZXR1cm4gaW1nXFxuICAgICAgICAgICAgICAgICAgICAgICB9LGltZyl9LHt0aXRsZTogJ+WkjeWItumhtemdoicsIGpzOiAkLnRvU3RyaW5nKChpbWcsdGl0bGUscGFnZVVybCk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiKyB0aXRsZSArIFxcXCIsaGlrZXI6Ly9wYWdlL2VqP3VybD1cXFwiICsgcGFnZVVybCArXFxcIiZydWxlPfCdkInwnZCa8J2Qr/CdkIPwnZCBLFxcXCIgKyBpbWdcXG4gICAgICAgICAgICAgICAgICAgICAgIH0saW1nLHRpdGxlLHBhZ2VVcmwpfV1cXG4gICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgIH0pO1xcblxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3lpeWFuJywge30pKS5ydWxlKTtcXG5cXG52YXIgc2NvcmUgPSBwZGZoKGh0bWwsXFxcIi5wYW5lbCYmLnBhbmVsLWJsb2NrOm1hdGNoZXMo6KmV5YiGOikmJlRleHRcXFwiKVxcbnZhciBzdGFyID0gcGRmYShodG1sLFxcXCIucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOipleWIhjopJiZpOm5vdCguZ3JheSlcXFwiKVxcbnZhciBhcnIgPSBbXVxcbmZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XFxuaWYoaTxzdGFyLmxlbmd0aCl7XFxuICAgIGFyci5wdXNoKCfwn5SlJyk7XFxuICB9IGVsc2Uge1xcbiAgICBhcnIucHVzaCgn8J+lticpO1xcbiAgfVxcbn1cXG52YXIgc2NvcmVzID0gc2NvcmUubWF0Y2goL+eUsShcXFxcZCsp5Lq66KmV5YO5LykgPyBzY29yZS5tYXRjaCgv55SxKFxcXFxkKynkurroqZXlg7kvKVsxXS50b1N0cmluZygpIDogXFxcIjIyM1xcXCJcXG5kLnB1c2goe1xcbnRpdGxlOiBzY29yZXMgPCAzMDAgPyAn4oCc4oCc4oCd4oCdJyArIGRheV9zYXkuc3BsaXQoXFxcIlxcXCIpLm1hcChiPT5iLmZvbnRjb2xvcihnZXRSYW5nZUNvbG9ycygpKS5zbWFsbCgpKS5qb2luKFxcXCJcXFwiKSA6IFxcXCLigJzigJzigJ3igJ3oqZXliIbvvJpcXFwiICsgYXJyLmpvaW4oXFxcIlxcXCIpICsgXFxcIlxcXFx0XFxcXHRcXFwiICsgIHNjb3JlLnJlcGxhY2UoXFxcIuipleWIhjpcXFwiLFxcXCJcXFwiKS5mb250Y29sb3IoXFxcIiNEQkRCREJcXFwiKSxcXG51cmw6ICQoJycpLmxhenlSdWxlKChwaWNzKSA9PiB7ICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpY3MgIT1cXFwiXFxcIiA/IFxcXCJwaWNzOi8vXFxcIitwaWNzLmpvaW4oXFxcIiYmXFxcIikgOiBcXFwiY29uZmlybTovL+ayoeacieWbvueJh+mihOiniOWTpvCfmJAuanM6J2hpa2VyOi8vZW1wdHknIFxcXCIgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICB9LHBpY3MpLFxcbmNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG5leHRyYTp7bGluZVZpc2libGU6ZmFsc2V9XFxufSlcXG5cXG4vL+WklumDqOi1hOa6kOiwg+eUqFxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3Rvb2wnLCB7fSkpLnJ1bGUpO1xcblxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxufSlcXG5cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW0sMTpcXFwiKVxcbiAgICAgICAgICAvLyAgaWYgKGxpc3QubGVuZ3RoPDEpIHtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaydcXG59LHtcXG4gICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snXFxufSlcXG4vL31cXG4gICAgICAgICAgICBpZiAobGlzdC5sZW5ndGg+MCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcGljbnVtID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAocGljbnVtICsgbGlzdC5sZW5ndGggK1xcXCIgUFxcXCIpLmZvbnRjb2xvcihcXFwiIzFFOTBGRlxcXCIpLmJvbGQoKS5iaWcoKSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyAkKFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5sYXp5UnVsZSgobGlzdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcihcXFwicGljbGlzdFxcXCIsIFxcXCLmlLbotbdcXFwiKSA9PSBcXFwi5pS26LW3XFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKCdwaWNudW0nLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgXFxcIuOAkOaUtui1t+WbvueJh+OAkVxcXCIuZm9udGNvbG9yKFxcXCIjRkYwMEZGXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyAkKFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubGF6eVJ1bGUoKGxpc3QpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oJ3ByZXZpZXdwaWMnICsgaSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbSgnbm9waWNsaXN0Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwaWNsaXN0XFxcIiwgXFxcIuaUtui1t1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbGlzdCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwibm9waWNsaXN0XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcigncGljbnVtJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBwZGZoKGxpc3RbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFfZnVsbFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3ByZXZpZXdwaWMnICsgaVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicGljbGlzdFxcXCIsIFxcXCLlsZXlvIBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbSgncHJldmlld3BpYycgKyBpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oJ25vcGljbGlzdCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBpY2xpc3RcXFwiLCBcXFwi5pS26LW3XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgbGlzdCksICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2gge31cXG5cXG52YXIgbGlzdFZpZGVvcyA9IEpTT04ucGFyc2UoZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vamF2ZGIvamF2ZGJfdmlkZW8udHh0JykgfHwgJ1tdJyk7XFxudmFyIHN0ciA9IHRpdGxlICsgJ0BAJyArIGltZyArICdAQCcgKyBwYWdlVXJsO1xcbmlmIChsaXN0VmlkZW9zLmluZGV4T2Yoc3RyKSA9PSAnLTEnKSB7XFxuICAgIHZhciB0ID0gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSNGRkUxMDA+8J+Sm+acquaUtuiXj/CfkpsnXFxufSBlbHNlIHtcXG4gICAgdmFyIHQgPSAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9I0ZGMDBGRj7wn5KW5bey5pS26JeP8J+SlidcXG59XFxuXFxubGV0IGluZm8gPSBwZGZhKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOeVquiZn3zml6XmnJ985pmC6ZW3KScpO1xcbmluZm8uZm9yRWFjaCgobGlzdCwgaW5kZXgpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBpbmRleCA9PSAwID8gJ+KAnOKAnOKAneKAnScgKyBwZGZoKGxpc3QsICdzdHJvbmcmJlRleHQnKS5mb250Y29sb3IoJyNGRkUxMDAnKSA6IHBkZmgobGlzdCwgJ3N0cm9uZyYmVGV4dCcpLFxcbiAgICAgICAgdXJsOiBpbmRleCA9PSAwID8gXFxcImNvcHk6Ly9cXFwiICsg6K+G5Yir56CBLnRvVXBwZXJDYXNlKCkgOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBpbmRleCA9PSAwID8gKHBkZmEobGlzdCwgJy52YWx1ZSYmYScpLmxlbmd0aCA+IDAgPyAoICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jRkZFMTAwPicgKyBwZGZoKGxpc3QsICcudmFsdWUmJmEmJlRleHQnKSArICc8L2ZvbnQ+JyArICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1ncmVlbj4nICsgcGRmaChsaXN0LCAnLnZhbHVlLS1hJiZUZXh0JykgKyAnPC9mb250PicgKSA6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jRkZFMTAwPicgKyBwZGZoKGxpc3QsICcudmFsdWUmJlRleHQnKSArICc8L2ZvbnQ+JykgOiBwZGZoKGxpc3QsICcudmFsdWUmJlRleHQnKSxcXG4gICAgICAgIHVybDogaW5kZXggPT0gMCA/IChwZChodG1sLCAnLnZpZGVvLWRldGFpbCYmLmZpcnN0LWJsb2NrJiZhJiZocmVmJykgPyBwZChodG1sLCAnLnZpZGVvLWRldGFpbCYmLmZpcnN0LWJsb2NrJiZhJiZocmVmJykgKyAnP3BhZ2U9ZnlwYWdlJnNvcnRfdHlwZT01QHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScgOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKTogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgIGV4dHJhOiBpbmRleCA9PSAwID8ge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogXFxcIueVquWPt+ezu+WIl++8mlxcXCIgKyBwZGZoKGh0bWwsICcudmlkZW8tZGV0YWlsJiYuZmlyc3QtYmxvY2smJmEmJlRleHQnKSxcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn6LC35q2M5pCc57SiJyxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVxcXCIgKyDor4bliKvnoIE7XFxuICAgICAgICAgICAgICAgIH0sIOivhuWIq+eggSlcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn56OB5Yqb5pCc5qCH6aKYJyxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zb3U/cnVsZT3no4HlipvlkJsu566AJnA9ZnlwYWdlJnNlYXJjaFRlcm1zPVxcXCIgKyB0aXRsZVxcbiAgICAgICAgICAgICAgICB9LCB0aXRsZSlcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfSA6ICcnXFxuICAgIH0pO1xcbiAgICBpZiAoaW5kZXggPT0gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdCxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiL2phdmRiX3ZpZGVvLnR4dCcpO1xcbiAgICAgICAgICAgICAgICBpZiAoIXN0cikge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiL2phdmRiX3ZpZGVvLnR4dCcsIEpTT04uc3RyaW5naWZ5KGxpc3QpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gSlNPTi5wYXJzZShzdHIpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuaW5kZXhPZihuYW1lKSA9PSAnLTEnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAvLyBsaXN0LnB1c2gobmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC51bnNoaWZ0KG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vamF2ZGIvamF2ZGJfdmlkZW8udHh0JywgSlNPTi5zdHJpbmdpZnkobGlzdCkpO1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZihuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiL2phdmRiX3ZpZGVvLnR4dCcsIEpTT04uc3RyaW5naWZ5KGxpc3QpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBzdHIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgZXh0cmE6IHtpZDogXFxcInBpY251bVxcXCJ9XFxuICAgICAgICB9KTtcXG5kLnB1c2goe1xcbmNvbF90eXBlOlxcXCJibGFua19ibG9ja1xcXCJcXG59KVxcbiAgICB9XFxufSk7XFxuXFxuLy/niYfllYZcXG50cnkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLniYfllYY6XFxcIixcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgfSlcXG4gICAgdmFyIG1ha2VycyA9IHBkZmgoaHRtbCwgJy5wYW5lbCYmLnBhbmVsLWJsb2NrOm1hdGNoZXMo54mH5ZWGKSYmLnZhbHVlJiZUZXh0Jyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiMxRTkwRkZcXFwiPicgKyBtYWtlcnMgKyAnPC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiBwZChodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjniYfllYYpJiZhJiZocmVmJykgKyAnJnBhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScsIC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IG1ha2Vyc1xcbiAgICAgICAgfVxcbiAgICB9KVxcbn0gY2F0Y2gge31cXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICB9KVxcbi8v5ryU5ZGYXFxudmFyIGFydHMgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYucGFuZWwtYmxvY2s6Y29udGFpbnMo5ryU5ZOhOikmJmEnKTtcXG5pZihhcnRzLmxlbmd0aD4wKXtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgICAgIHRpdGxlOiBcXFwi5ryU5ZOhOlxcXCIsXFxuICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxufSlcXG5mb3IgKHZhciBpIGluIGFydHMpIHtcXG4gICAgdmFyIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdUZXh0Jyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNjMTMxNDFcXFwiPicrdGl0bGUrJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgIHVybDogcGFyc2VEb20oYXJ0c1tpXSwgJ2EmJmhyZWYnKSArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJyxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogdGl0bGUsXFxuICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+WkjeWItua8lOWRmCcsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIHRpdGxlO30sdGl0bGUpfSx7dGl0bGU6ICfosLfmrYzmkJzntKInLCBqczogJC50b1N0cmluZygodGl0bGUpPT57IHJldHVybiBcXFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1cXFwiICsgdGl0bGUgK1xcXCIg6Lqr6auYXFxcIjt9LHRpdGxlKX0se3RpdGxlOiAn55m+5bqm5pCc57SiJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyByZXR1cm4gXFxcImh0dHBzOi8vd3d3LmJhaWR1LmNvbS9zP3dkPVxcXCIgKyB0aXRsZTt9LHRpdGxlKX0se3RpdGxlOiAn56OB5Yqb5pCc5ryU5ZGYJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NvdT9ydWxlPeejgeWKm+WQmy7nroAmcD1meXBhZ2Umc2VhcmNoVGVybXM9XFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICB9LHRpdGxlKX1dXFxuICAgICAgICB9XFxufSlcXG59XFxufVxcblxcbi8v5a+85ryUXFxudHJ5IHtcXG4gICAgdmFyIGRpcmVjdG9yID0gcGRmaChodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjlsI7mvJQpJiYudmFsdWUmJlRleHQnKTtcXG4gICAgaWYgKGRpcmVjdG9yKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5bCO5ryUOlxcXCIsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+JyArIGRpcmVjdG9yICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IHBkKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOWwjua8lCkmJmEmJmhyZWYnKSArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywgLy/pk77mjqVcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLCAvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogZGlyZWN0b3JcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn0gY2F0Y2gge31cXG5cXG4vL+exu+WIq1xcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOmhnuWIpSkmJmEnKTtcXG5pZihhcnRzLmxlbmd0aD4wKXtcXG5kLnB1c2goe1xcbmNvbF90eXBlOlxcXCJibGFua19ibG9ja1xcXCJcXG59KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICB0aXRsZTogXFxcIumhnuWIpTpcXFwiLFxcbiAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJywgICAgICBcXG59KTtcXG5mb3IgKHZhciBpIGluIGFydHMpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFODg4NFxcXCI+JytwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ1RleHQnKSsnPC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbShhcnRzW2ldLCAnYSYmaHJlZicpICsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLC8v57uE5Lu25qC35byPXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogcGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdUZXh0JylcXG4gICAgICAgIH1cXG59KVxcbn1cXG5kLnB1c2goe1xcbmNvbF90eXBlOlxcXCJibGFua19ibG9ja1xcXCJcXG59KVxcbn1cXG5cXG4vL+ezu+WIl1xcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOezu+WIlykmJmEnKTtcXG5pZihhcnRzLmxlbmd0aD4wKXtcXG5kLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgIHRpdGxlOiBcXFwi57O75YiXOlxcXCIsXFxuICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbn0pXFxuZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiMwMGQwZjRcXFwiPicrcGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdUZXh0Jykuc2xpY2UoMCwxOCkrJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgIHVybDogcGFyc2VEb20oYXJ0c1tpXSwgJ2EmJmhyZWYnKSArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywvL+mTvuaOpVxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJywvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHBhcnNlRG9tRm9ySHRtbChhcnRzW2ldLCAnVGV4dCcpXFxuICAgICAgICB9XFxufSlcXG59XFxuZC5wdXNoKHtcXG5jb2xfdHlwZTpcXFwiYmxhbmtfYmxvY2tcXFwiXFxufSlcXG59XFxuXFxuLy/pooTop4jop4bpopFcXG4gICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08bWlkZGxlPjxmb250IGNvbG9yPSMxM0I2NkE+8J+TuumgkOimveKRoDwvZm9udD48L21pZGRsZT4nLFxcbiAgICAgICAgdXJsOiBNWV9VUkwgKyAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwZGZoKGh0bWwsXFxcIi5tZXNzYWdlLWJvZHkmJnNvdXJjZSYmc3JjXFxcIilcXG4gICAgICAgICAgICAgICAgICAgaWYoICF1cmwuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpJiZ1cmwhPT1cXFwiXFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gXFxcImh0dHBzOlxcXCIgKyB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodXJsPT1cXFwiXFxcIil7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5rKS5pyJ6aCQ6Ka95ZKvXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICAgfWNhdGNoe3JldHVybiBcXFwidG9hc3Q6Ly/mspLmnInpoJDopr3lkq9cXFwifVxcbiAgICAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKSxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLCAgICAgICAgXFxuICAgICAgICAgICAgICAgICB9KVxcbiAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxtaWRkbGU+PGZvbnQgY29sb3I9IzEzQjY2QT7wn5O66aCQ6Ka94pGhPC9mb250PjwvbWlkZGxlPicsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiArICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IFxcXCJodHRwczovL2phdnN1YnRpdGxlZC5jb20vemgvc2VhcmNoP2tleXdvcmRzPVxcXCIgKyDor4bliKvnoIFcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2RldXJsID0gXFxcImh0dHBzOi8vamF2c3VidGl0bGVkLmNvbS9cXFwiICsgcGRmaChyZXF1ZXN0KHNlYXJjaCksXFxcImJvZHkmJi52aWRlb2JveCYmYSYmaHJlZlxcXCIpXFxuICAgICAgICAgICAgICAgICAgICB2YXIgcGxheWxpc3QgPSBmZXRjaChjb2RldXJsKS5tYXRjaCgvaHR0cHM/OlxcXFwvXFxcXC9cXFxcUytcXFxcLm0zdTgvKVswXVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXloZCA9IGZldGNoKHBsYXlsaXN0KS5tYXRjaCgvW15cXFwiXFxcXG5dK1xcXFwubTN1OC9nKS5wb3AoKVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHBsYXlsaXN0LnJlcGxhY2UoXFxcInBsYXlsaXN0Lm0zdThcXFwiLHBsYXloZClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICAgfWNhdGNoe3JldHVybiBcXFwidG9hc3Q6Ly/mjILmoq/miJbmspLmnInpoJDopr3lkq9cXFwifVxcbiAgICAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKSxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLCAgICAgICBcXG4gICAgICAgICAgICAgICAgIH0pXFxudmFyIOefreiplSA9IHBkZmgoaHRtbCxcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZUZXh0XFxcIilcXG52YXIgY2lsaSA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJ2JvZHkmJi5pdGVtLmNvbHVtbnMuaXMtZGVza3RvcCcpO1xcbnZhciB0YWJzID0gW1xcXCLno4Hpj4goXFxcIiArIGNpbGkubGVuZ3RoICsgXFxcIilcXFwiLOefreiplV07XFxuXFxuZnVuY3Rpb24gc2V0VGFicyh0YWJzLCB0YWJ1cmwpIHtcXG4gICAgdmFyIENvbG9yMSA9IFxcXCIjMTNCNjZBXFxcIjtcXG4gICAgZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZSkge1xcbiAgICAgICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXCInICsgQ29sb3IxICsgJ1xcXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9zdHJvbmc+JztcXG4gICAgICAgICB9XFxuICAgIHZhciBDb2xvcjIgPSBcXFwiI0ZGMDBGRlxcXCI7XFxuICAgIGZ1bmN0aW9uIGdldEhlYXIodGl0bGUpIHtcXG4gICAgICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yMiArICdcXFwiPicgKyB0aXRsZSArICc8L2Zyb250Pjwvc3Ryb25nPic7XFxuICAgICAgICB9XFxuXFxuICAgIGZvciAodmFyIGkgaW4gdGFicykge1xcbiAgICAgICAgdmFyIHRhYm5hbWUgPSB0YWJzW2ldO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIodGFidXJsLCAnMCcpID09IGkgPyBnZXRIZWFyKHRhYm5hbWUpIDogZ2V0SGVhZCh0YWJuYW1lKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHRhYm5hbWUsIHRhYnVybCwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcih0YWJ1cmwsIGkpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICB9LCB0YWJuYW1lLCB0YWJ1cmwsIGkpXFxuICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgIH1cXG5cXG52YXIgbGlzdHMgPSBbXTtcXG5mdW5jdGlvbiBzZXRMaXN0cyhsaXN0cywgaW5kZXgpIHtcXG4gICAgZnVuY3Rpb24gcGxheUxpc3RzKCkge1xcbiAgICAgICBpZiAoaW5kZXggPT0gMCkge1xcbi8v56OB5Yqb5YaF5a65XFxudHJ5e1xcbmNpbGkuZm9yRWFjaCh2aWRlbyA9PiB7XFxuLy92YXIgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwodmlkZW8sICdhJiZUZXh0Jyk7XFxudHJ5e1xcbnZhciBzaXplID0gcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnLm1ldGEmJlRleHQnKS5tYXRjaCgvXFxcXGQrKD86XFxcXC5cXFxcZCspP1tnbV0oYik/L2kpWzBdXFxufWNhdGNoe1xcbnZhciBzaXplID0gJzAuMDBHQidcXG59XFxudmFyIHRhZyA9IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy50YWdzJiZUZXh0JylcXG52YXIgdXJsID0gcGRmaCh2aWRlbywgJ2EmJmhyZWYnKS5zcGxpdChcXFwiJlxcXCIpWzBdXFxudmFyIHRpdGxlID0gcGRmaCh2aWRlbyxcXFwiLm5hbWUmJlRleHRcXFwiKVxcbnZhciBtYXRjaCA9IOivhuWIq+eggS5tYXRjaCgvKC4qPyktKC4qKS8pO1xcbmlmIChtYXRjaCkge1xcbiAgICBtYXRjaDEgPSBtYXRjaFsxXTtcXG4gICAgbWF0Y2gyID0gbWF0Y2hbMl07XFxuICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJy4qPygnICsgbWF0Y2gxICsgJ1stfF98XFxcXHNdPycgKyBtYXRjaDIgKyAnLiopJywgJ2knKTtcXG4gICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKHJlZ2V4LCAnJDEnKTtcXG59XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGl0bGVcXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZShcXFwiLnRvcnJlbnRcXFwiLFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxcXCIubXA0XFxcIixcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvQC9nLFxcXCJcXFxcdFxcXFx0XFxcIilcXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvbXA0L2dpLFxcXCJcXFwiKSxcXG4gICAgICAgIGRlc2M6IHRhZy5yZXBsYWNlKC9cXFxccy8sXFxcIlxcXCIpICsgJ1xcXFx08J+TgCcgKyBzaXplICsgJ1xcXFx0XFxcXHTwn5eTJyArcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnLnRpbWUmJlRleHQnKSxcXG4gICAgICAgIHBpY191cmw6ICdodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvT2NxcGoucG5nJyxcXG4gICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+myqOmxvCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuQXBwSW50ZW50KCdjb20uYmNsc2FwcC5kb3dubG9hZCcsICdjb20uYmNsc2FwcC5kb3dubG9hZC5pbnRlbnRBY3Rpdml0eScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50RGF0YTogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwpXFxuICAgICAgICAgICAgICAgICAgICB9LHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+mjnumpsCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuQXBwSW50ZW50KCdjb20uenkuZmVpY2hpeGlhemFpJywgJ2NvbS56eS5mZWljaGl4aWF6YWkudGFiYmFyLk1haW5BY3Rpdml0eScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50RGF0YTogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwpXFxuICAgICAgICAgICAgICAgICAgICB9LHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+afmuWtkCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuQXBwSW50ZW50KCdjb20ueXV6dXl1enUuZG93bmxvYWQnLCAnY29tLmU0YS5ydW50aW1lLmFuZHJvaWQubWFpbkFjdGl2aXR5Jywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50RGF0YTogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgfSx7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmtanlhYsnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkFwcEludGVudCgnY29tLnNhdXNhZ2UuZG93bmxvYWQnLCAnY29tLnNhdXNhZ2UuZG93bmxvYWQudWkudjEuYWN0aXZpdHkuTWFpbkFjdGl2aXR5Jywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50RGF0YTogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn6Zeq5a2Y5LqRJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5BcHBJbnRlbnQoJ2NvbS5zaGFueGlhemFpZG93bicsICdjb20uZTRhLnJ1bnRpbWUuYW5kcm9pZC5tYWluQWN0aXZpdHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnREYXRhOiB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwpXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkuozpqbQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkFwcEludGVudCgnY29tLnFpa2Nsb3VkLnFpaycsICdjb20uZTRhLnJ1bnRpbWUuYW5kcm9pZC5tYWluQWN0aXZpdHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnREYXRhOiB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwpXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmgp/nqbonLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkFwcEludGVudCgnY29tLnlmb28ud2tEb3dubG9hZGVyJywgJ2NvbS55Zm9vLndrRG93bmxvYWRlci5NYWluQWN0aXZpdHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnREYXRhOiB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwpXFxuICAgICAgICAgICAgICAgICAgICB9LHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+i/hembtycsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuQXBwSW50ZW50KCdjb20ueHVubGVpLmRvd25sb2FkcHJvdmlkZXInLCAnY29tLnh1bmxlaS5kb3dubG9hZHByb3ZpZGVyLmxhdW5jaC5MYXVuY2hBY3Rpdml0eScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudERhdGE6IHVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVybClcXG4gICAgICAgICAgICAgICAgICAgIH0se1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnUGlrcGFrJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwicGlrcGFrYXBwOi8vbXlwaWtwYWsuY29tL3hwYW4vbWFpbl90YWI/dGFiPTEmYWRkX3VybD1cXFwiICsgdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVybClcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxufVxcbiAgICB9KTtcXG59KVxcbn1jYXRjaHt9XFxuICAgICAgIH1lbHNlIGlmIChpbmRleCA9PSAxKSB7XFxudHJ5e1xcbiAgICAgICB2YXIgdXJsID0gcGQoaHRtbCxcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZhJiZkYXRhLXVybFxcXCIpXFxuICAgICAgIHZhciBoID0gZmV0Y2godXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIGNvb2tpZTogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9ydWxlcy9BcG9sbG8vQ29va2llL2phdmRiX2Nvb2tpZS50eHQnKSB8fCAnJyxcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIiwgICAgICBcXG4gICAgfSxcXG4gICAgcmVkaXJlY3Q6IGZhbHNlXFxufSk7XFxuICAgICAgIHZhciBsaXN0ID0gcGRmYShoLFxcXCIubWVzc2FnZS1ib2R5JiYucmV2aWV3LWl0ZW06aGFzKC5yZXZpZXctdGl0bGUpXFxcIilcXG4gICAgICAgbGlzdC5mb3JFYWNoKGl0ZW09PntcXG4gICAgICAgICB2YXIgZGVzYyA9ICc8bWlkZGxlPjxmb250IGNvbG9yPSNGRjhDMDA+JyArIHBkZmgoaXRlbSxcXFwiLnJldmlldy10aXRsZS0tLmxpa2VzLS0ucmVwb3J0JiZUZXh0XFxcIikgKyAnPC9mb250PjwvbWlkZGxlPic7ICAgICAgICAgICAgICBcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZGVzYyArICc8YnI+JyArICc8c21hbGw+PGZvbnQgY29sb3I9I2ZmNjg3Nz5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0JyArIHBkZmgoaXRlbSxcXFwiLmNvbnRlbnQmJlRleHRcXFwiKSArICc8L2ZvbnQ+PC9zbWFsbD4nLCAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtsaW5lVmlzaWJsZTpmYWxzZX1cXG4gICAgICAgICAgICAgICB9KVxcbiAgICAgICAgIH0pXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9IzEzQjY2QT7mm7TlpJrnn63oqZXlj6/miJDkuLpWSVDmiJboh7PlrpjmlrlBcHDkuK3mn6XnnIs8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHsgICAgICAgICAgICAgICBcXG4gICAgICAgICBvcGVuQXBwSW50ZW50KCd4eHgucG9ybmh1Yi5mdWNrJywgJ3h4eC5wb3JuaHViLmZ1Y2suTWFpbkFjdGl2aXR5Jywge2ludGVudERhdGE6IOivhuWIq+eggX0pXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtsaW5lVmlzaWJsZTpmYWxzZX1cXG4gICAgICAgICAgICAgICB9KVxcbn1jYXRjaHt9XFxuICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgcGxheUxpc3RzKCkgICAgICAgIFxcbiAgICAgICAgICAgIH1cXG5cXG5zZXRUYWJzKHRhYnMsIE1ZX1VSTCk7XFxuc2V0TGlzdHMobGlzdHMsIGdldE15VmFyKE1ZX1VSTCwgJzAnKSk7XFxuXFxuXFxuXFxudHJ5e1xcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLm1lc3NhZ2U6bWF0Y2hlcyjpgoTlh7rmvJTpgY4pJiYudGlsZS1zbWFsbCYmYScpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkYwMEZGO1xcXCI+VEEo5YCRKemChOWHuua8lOmBjjwvc3Bhbj4nLFxcbiAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEwMC5wbmdcXFwiLFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG59KTtcXG5saXN0LmZvckVhY2goKHZpZGVvLGluZGV4KSA9PiB7XFxuICAgIHZhciB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy52aWRlby1udW1iZXImJlRleHQnKSArICcgJyArIHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJ2EmJnRpdGxlJyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogIHRpdGxlLFxcbiAgICAgICAgLy9kZXNjOiBwYXJzZURvbUZvckh0bWwodmlkZW8sICcudmlkZW8tbnVtYmVyJiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBhcnNlRG9tKHZpZGVvLCAnaW1nJiZzcmMnKS5yZXBsYWNlKFxcXCJ0aHVtYnNcXFwiLFxcXCJjb3ZlcnNcXFwiKSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbSh2aWRlbywgJ2EmJmhyZWYnKSArICdAcnVsZT1qczokLnJlcXVpcmUoXFxcImVqXFxcIiknLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8yJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiB0aXRsZSxcXG5pbWc6IHBhcnNlRG9tKHZpZGVvLCAnaW1nJiZzcmMnKS5yZXBsYWNlKFxcXCJ0aHVtYnNcXFwiLFxcXCJjb3ZlcnNcXFwiKSBcXG4gICAgICAgIH1cXG4gIH0pO1xcbn0pICAgXFxuICAgICBpZiAobGlzdC5sZW5ndGggJSAyICE9IDApIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIvCfl69SYW5kb23wn5evXFxcIixcXG5pbWc6ICdodHRwczovL3RodW1ic25hcC5jb20vaS8zdXFqYzFxcS5naWYnLFxcbiAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL2phdmRiLmNvbS92L3dLYjRuQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlalxcXCIpJywgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8yXFxcIixcXG4gICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBcXFwiSVBYLTE0OSDliJ3mrKHlh4zovrEg57SU5r2U5aWz5aSn55Sf6YGt6Lef6Lmk54uC6IKP57+7IOaru+epuuahg1xcXCIsXFxuICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxufSBjYXRjaCAoZXJyKSB7XFxuICAvL2NvbnNvbGUubG9nKCfmsqHmnInlh7rmvJTliJfooagnLCBlcnIpO1xcbn07XFxuXFxudHJ5e1xcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLm1lc3NhZ2U6bWF0Y2hlcyjkvaDlj6/og73kuZ/llpzmraEpJiYudGlsZS1zbWFsbCYmYScpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkYwMEZGO1xcXCI+5L2g5Y+v6IO95Lmf5Zac5q2hPC9zcGFuPicsXFxuICAgIHBpY191cmw6IFxcXCJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8va2UvMTAwLnBuZ1xcXCIsXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbn0pO1xcbmxpc3QuZm9yRWFjaCh2aWRlbyA9PiB7XFxuICAgIHZhciB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy52aWRlby1udW1iZXImJlRleHQnKSArICcgJyArIHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJ2EmJnRpdGxlJyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogIHRpdGxlLFxcbiAgICAgICAgLy9kZXNjOiBwYXJzZURvbUZvckh0bWwodmlkZW8sICcudmlkZW8tbnVtYmVyJiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBhcnNlRG9tKHZpZGVvLCAnaW1nJiZzcmMnKS5yZXBsYWNlKFxcXCJ0aHVtYnNcXFwiLFxcXCJjb3ZlcnNcXFwiKSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbSh2aWRlbywgJ2EmJmhyZWYnKSArICdAcnVsZT1qczokLnJlcXVpcmUoXFxcImVqXFxcIiknLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8yJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiB0aXRsZSxcXG5pbWc6IHBhcnNlRG9tKHZpZGVvLCAnaW1nJiZzcmMnKS5yZXBsYWNlKFxcXCJ0aHVtYnNcXFwiLFxcXCJjb3ZlcnNcXFwiKVxcbiAgICAgICAgfVxcbiAgfSk7XFxufSkgICBcXG4gICAgIGlmIChsaXN0Lmxlbmd0aCAlIDIgIT0gMCkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi8J+Xr1JhbmRvbfCfl69cXFwiLFxcbmltZzogJ2h0dHBzOi8vdGh1bWJzbmFwLmNvbS9pL01VNVVhQjRZLmdpZicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLCAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG59IGNhdGNoIChlcnIpIHtcXG4gIC8vY29uc29sZS5sb2coJ+ayoeacieaOqOiNkOWIl+ihqCcsIGVycik7XFxufTtcXG5cXG59Y2F0Y2h7XFxudmFyIOivhuWIq+eggSA9IGdldFBhZ2VUaXRsZSgpLnNwbGl0KFxcXCIgXFxcIilbMF0ucmVwbGFjZShcXFwiRkMyXFxcIixcXFwiRkMyLVBQVlxcXCIpO1xcbnZhciBpbWcgPSBNWV9QQVJBTVMuaW1nO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgIHVybDogXFxcImNvcHk6Ly9cXFwiICsgaW1nLFxcbiAgICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcbn0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogIFxcXCJmYzLpnIDopoFWSVDnmbvlvZVcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIjMwMOWkp+a0i++8jOaJjeaYvuekuumhtemdou+8jOiwt+atjOaQnOe0ouS4gOS4i+aIluaIs+S4i+mdouWbvuagh1xcXCIsXFxuICAgICAgICB1cmw6IFxcXCJodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVxcXCIgKyDor4bliKvnoIEsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgZXh0cmE6e2xpbmVWaXNpYmxlOmZhbHNlfVxcbiAgICAgICAgfSk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdG9vbCcsIHt9KSkucnVsZSk7XFxuXFxufVxcbi8qXFxuZm9yICh2YXIgYiA9IDA7IGIgPCAyOyBiKyspIHtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2JpZ19ibGFua19ibG9jaydcXG59KVxcbn0qL1xcbmQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgXFxcIuaIkeaYr+acieW6lee6v+eahFxcXCIuZm9udGNvbG9yKFxcXCJncmV5XFxcIilcXG4gICAgICAgICAgICAgICAgLnNtYWxsKCksXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGj5LiA57qn5pS26JeP6aG16Z2iXCIsXCJwYXRoXCI6XCLmlLbol49cIixcInJ1bGVcIjpcImZ1bmN0aW9uIGdldEhlYWQodGl0bGUsY29sb3IpIHtcXG4gICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxiaWc+PGZvbnQgY29sb3I9XFxcIicrY29sb3IrJ1xcXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9iaWc+PC9zdHJvbmc+JztcXG59XFxuXFxudmFyIGxhYmVsID0gZ2V0VmFyKFxcXCJsYWJlbFxcXCIpID8gZ2V0VmFyKFxcXCJsYWJlbFxcXCIpIDogXFxcIuW9seeJh1xcXCI7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGxhYmVsID09IFxcXCLlvbHniYdcXFwiID8gZ2V0SGVhZChcXFwiPeKLmeW9seeJh+KLmD1cXFwiLFxcXCIjRkYwMEZGXFxcIikgOiBnZXRIZWFkKFxcXCI94ouZ5b2x54mH4ouYPVxcXCIsXFxcIiNEM0QzRDNcXFwiKSxcXG4gICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9jZG4xLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvdWktdXNlci1pbnRlcmZhY2UtOS8xMDAwL1ZpZGVvX0NhbWVyYS0xMjgucG5nXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI0BsYXp5UnVsZT0uanM6cHV0VmFyKCdsYWJlbCcsJ+W9seeJhycpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly/liIfmjaLmiJDlip8nXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl8yX3JvdW5kJ1xcbiAgICB9KTtcXG59XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogbGFiZWwgPT0gXFxcIua8lOWToVxcXCIgPyBnZXRIZWFkKFxcXCI94ouZ5ryU5ZOh4ouYPVxcXCIsXFxcIiNGRjAwRkZcXFwiKSA6IGdldEhlYWQoXFxcIj3ii5nmvJTlk6Hii5g9XFxcIixcXFwiI0QzRDNEM1xcXCIpLFxcbiAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9jZG4yLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvdmFsZW50aW5lLWRheS0xNi81MTIvNzA2X3Blbl9sb3ZlX2hlYXJ0X3dlZGRpbmdfdmFsZW50aW5lX3ZhbGVudGluZXNfZGF5X2xvdmUtMTI4LnBuZ1xcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOnB1dFZhcignbGFiZWwnLCfmvJTlk6EnKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5YiH5o2i5oiQ5YqfJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCdcXG4gICAgfSk7XFxuXFxuLy9sb2coXFxcIuiNieazpemprFxcXCIrTVlfSE9NRSlcXG52YXIgdSA9IGxhYmVsID09IFxcXCLlvbHniYdcXFwiID8gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiL2phdmRiX3ZpZGVvLnR4dCcgOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vamF2ZGIvamF2ZGJfYWN0b3IudHh0JztcXG52YXIgc3RyID0gcmVhZEZpbGUodSwgMCk7XFxuaWYgKHN0cikge1xcbiAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2Uoc3RyKTtcXG4gICAgbGlzdC5mb3JFYWNoKChsaXN0KSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBsaXN0LnNwbGl0KCdAQCcpWzBdLFxcbiAgICAgICAgICAgIGltZzogbGlzdC5zcGxpdCgnQEAnKVsxXSxcXG4gICAgICAgICAgICB1cmw6IGxhYmVsID09IFxcXCLmvJTlk6FcXFwiPydoaWtlcjovL3BhZ2UveWonOidoaWtlcjovL3BhZ2UvZWonLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBsYWJlbCA9PSBcXFwi5ryU5ZOhXFxcIiA/ICdjYXJkX3BpY18zJyA6ICdtb3ZpZV8yJyxcXG4gICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICB1cmw6IGxpc3Quc3BsaXQoJ0BAJylbMl0ucmVwbGFjZShnZXRNeVZhcigneW9uZ2ppdScpLE1ZX0hPTUUpLFxcbiAgICAgICAgICAgICAgcGFnZVRpdGxlOiBsaXN0LnNwbGl0KCdAQCcpWzBdLFxcbiAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5Y+W5raI5pS26JePJyxcXG4gICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygobGlzdCwgdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoZmV0Y2hQQyh1KSB8fCAnW10nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKHggPT4geCAhPSBsaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICB9LCBsaXN0LCB1KVxcbiAgICAgICAgICAgICAgfV0sXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaPkuIDnuqfpobXpnaLnmbvlvZVcIixcInBhdGhcIjpcIueZu+W9lVwiLFwicnVsZVwiOlwiXFxuLy9pZihmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9BcG9sbG8vQ29va2llL2phdmRiX2Nvb2tpZS50eHQnKSl7XFxuXFxuXFxuaWYoaHRtbC5pbmNsdWRlcyhcXFwi55m75Ye6XFxcIikpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxiaWc+PGZvbnQgY29sb3I9I0ZGMDBGRj7otKblj7flt7LnmbvlvZU8L2ZvbnQ+PC9iaWc+JyxcXG4gICAgICAgICAgICBkZXNjOiAn4oCc4oCc4oCd4oCdJyArICfliIfmjaLliIbnsbvliLfmlrDpobXpnaLlhoXlrrknLmZvbnRjb2xvcignI0ZGMDBGRicpLmJpZygpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICB9KTtcXG4gICAgfWVsc2V7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAn54K55Ye755m75b2V6LSm5Y+3Jy5mb250Y29sb3IoJyNGRjAwRkYnKS5iaWcoKSxcXG4gICAgICAgIHVybDogdHJ1ZV91cmwgKyAkKCcnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnLFxcbiAgICAgICAgICAgICAgICB1cmw6IE1ZX1VSTCxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2xpc3QmJnNjcmVlbicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlxcXCIsLy9QQ19VQSwgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGVjaygpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjdGFncycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY28gPSBmYmEuZ2V0Q29va2llKHUpO1xcbi8vdmFyIHVhID0gZmJhLmdldFVhKClcXG4vL2ZiYS5sb2coJ2NvOjo6Ojo6JyArIHVhKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBmYmEubG9nKCdjbzo6Ojo6OicgKyBjbyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjby5pbmNsdWRlcygncmVtZW1iZXJfbWVfdG9rZW4nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLnBhcnNlTGF6eVJ1bGUoJCQkKCkubGF6eVJ1bGUoKGNvKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL0Fwb2xsby9Db29raWUvamF2ZGJfY29va2llLnR4dCcsIGNvKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn6LSm5Y+35bey55m75b2VJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrLCA1MDApO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrKCk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBNWV9VUkwpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgIH0pO1xcblxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0olwiLFwicGF0aFwiOlwic2VhcmNoXCIsXCJydWxlXCI6XCJ2YXIgdGFicyA9IFtcXFwi5b2x54mHXFxcIiwgXFxcIua8lOWRmFxcXCIsIFxcXCLlj6/mkq1cXFwiLCBcXFwi5Lit5a2XXFxcIiwgXFxcIuejgemTvlxcXCIsIFxcXCLmuIXljZVcXFwiXVxcbnZhciBsaXN0cyA9IFtcXFwiYWxsXFxcIiwgXFxcImFjdG9yXFxcIiwgXFxcInBsYXlhYmxlXFxcIiwgXFxcImNuc3ViXFxcIiwgXFxcImRvd25sb2FkXFxcIiwgXFxcImxpc3RcXFwiXVxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGNsZWFyTXlWYXIoXFxcImxpc3RzXFxcIik7XFxufSkpO1xcbnN0b3JhZ2UwLnB1dE15VmFyKFxcXCJsaXN0c1xcXCIsIGxpc3RzKTtcXG52YXIgbGlzdCA9IGxpc3RzW2dldE15VmFyKFxcXCLliqjmgIHmkJzntKJcXFwiLCAnMCcpXTtcXG5cXG50YWJzLmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZ2V0TXlWYXIoXFxcIuWKqOaAgeaQnOe0olxcXCIsICcwJykgPT0gaWQgPyAn4oCc4oCc4oCd4oCdJyArIGRhdGEuZm9udGNvbG9yKFxcXCIjRkZGRkZGXFxcIikgOiBkYXRhLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjnur/ot68sIGlkLCBnZXRSYW5nZUNvbG9ycykgPT4ge1xcbiAgICAgICAgICAgIHZhciBsaXN0cyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJsaXN0c1xcXCIpO1xcbiAgICAgICAgICAgIOe6v+i3ry5mb3JFYWNoKChkYXRhLCB4bGlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGlkID09IHhsaWQgPyAn4oCc4oCc4oCd4oCdJyArIGRhdGEuZm9udGNvbG9yKFxcXCIjRkZGRkZGXFxcIikgOiBkYXRhLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGlkID09IHhsaWQgPyBnZXRSYW5nZUNvbG9ycygpIDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCLliqjmgIHmkJzntKJcXFwiICsgXFxcIl/nur/ot69cXFwiICsgeGxpZFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwi5Yqo5oCB5pCc57SiXFxcIiwgaWQpXFxuICAgICAgICAgICAgdmFyIOeroOiKgiA9IGxpc3RzW2dldE15VmFyKFxcXCLliqjmgIHmkJzntKJcXFwiLCAnMCcpXTtcXG4gICAgICAgICAgICBsZXQgY3AgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi8J+SoOaQnFxcXCIgKyDnur/ot69baWRdICsgXFxcIvCfkqBcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pCc57Si5L2g5oOz6KaB55qEXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCjnsbvlnospID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdrZXknLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXlzID0gbGlzdE15VmFyS2V5cygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGtleXMpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigneWlfZmlyc3RwYWdlJywgZ2V0UHVibGljSXRlbSgnamF2ZGIwJykgKyBcXFwiL3NlYXJjaD9mPVxcXCIgKyDnsbvlnosgKyBcXFwiJnE9XFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBsaXN0c1tnZXRNeVZhcihcXFwi5Yqo5oCB5pCc57SiXFxcIiwgJzAnKV0pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogZ2V0TXlWYXIoXFxcIuWKqOaAgeaQnOe0olxcXCIsICcwJykgPT0gaWQgPyBcXFwiIzI1NjhjNFxcXCIgOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcIuWKqOaAgeaQnOe0olxcXCIgKyBcXFwiX+agh+etvlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBpZDog56ug6IqCLFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcigna2V5JywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcigna2V5JywgaW5wdXQpXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoXFxcIuWKqOaAgeaQnOe0olxcXCIgKyBcXFwiX+agh+etvlxcXCIpO1xcbiAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUoXFxcIuWKqOaAgeaQnOe0olxcXCIgKyBcXFwiZm9vdGVyXFxcIiwgY3ApO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0sIHRhYnMsIGlkLCBnZXRSYW5nZUNvbG9ycyksXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBnZXRNeVZhcihcXFwi5Yqo5oCB5pCc57SiXFxcIiwgJzAnKSA9PSBpZCA/IGdldFJhbmdlQ29sb3JzKCkgOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBpZDogXFxcIuWKqOaAgeaQnOe0olxcXCIgKyBcXFwiX+e6v+i3r1xcXCIgKyBpZFxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59KVxcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi8J+SoOaQnFxcXCIgKyB0YWJzW2dldE15VmFyKFxcXCLliqjmgIHmkJzntKJcXFwiLCAnMCcpXSArIFxcXCLwn5KgXFxcIixcXG4gICAgZGVzYzogXFxcIuaQnOe0ouS9oOaDs+imgeeahFxcXCIsXFxuICAgIHVybDogJC50b1N0cmluZygo57G75Z6LKSA9PiB7XFxuICAgICAgICBwdXRNeVZhcigna2V5JywgaW5wdXQpXFxuICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBsZXQga2V5cyA9IGxpc3RNeVZhcktleXMoKTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBrZXlzKSB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3lpX2ZpcnN0cGFnZScsIGdldFB1YmxpY0l0ZW0oJ2phdmRiMCcpICsgXFxcIi9zZWFyY2g/Zj1cXFwiICsg57G75Z6LICsgXFxcIiZxPVxcXCIgKyBpbnB1dCk7XFxuICAgICAgICB9XFxuICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgbGlzdHNbZ2V0TXlWYXIoXFxcIuWKqOaAgeaQnOe0olxcXCIsICcwJyldKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBjbHM6IFxcXCLliqjmgIHmkJzntKJcXFwiICsgXFxcIl/moIfnrb5cXFwiLFxcbiAgICAgICAgaWQ6IGxpc3RzW2dldE15VmFyKFxcXCLliqjmgIHmkJzntKJcXFwiLCAnMCcpXSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ2tleScsICcnKSxcXG4gICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ2tleScsIGlucHV0KVxcXCJcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiBcXFwi5Yqo5oCB5pCc57SiXFxcIiArIFxcXCJmb290ZXJcXFwiXFxuICAgIH1cXG59KTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoOS4gOe6p+WklumDqEZjMlwiLFwicGF0aFwiOlwiZmMyXCIsXCJydWxlXCI6XCJqczogXFxuLy9zZXg4MDg2QGdtYWlsLmNvbVxcbi8vaHR0cHM6Ly9qYXZsaXN0Lm1lL3Bvc3QucGhwXFxuXFxuYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAoKSA9PiB7XFxuICAgICAgIC8vIGNsZWFyTXlWYXIoXFxcImZjdXJsXFxcIik7XFxufSk7XFxuXFxuICAgIHZhciBkID0gW11cXG5cXG4gICAgXFxuICAgIHNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5q+P5pel5LiA6KiAXCIsXCJwYXRoXCI6XCJ5aXlhblwiLFwicnVsZVwiOlwiLy9hdXRob3I657KJ5aa5XFxuZnVuY3Rpb24gc2F2ZV9kYXlfc2F5X2NhY2hlKCkge1xcbiAgICBsZXQgZGF5X3NheV9jYWNoZSA9IHt9XFxuICAgIGxldCBkYXlfc2F5X2h0bWwgPSBmZXRjaCgnaHR0cHM6Ly92MS5oaXRva290by5jbicsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6XFxuICAgICAgICAgICAgICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTIyLjAuMC4wIFNhZmFyaS81MzcuMzYnLFxcbiAgICAgICAgfSxcXG4gICAgfSlcXG4gICAgZGF5X3NheV9odG1sID0gSlNPTi5wYXJzZShkYXlfc2F5X2h0bWwpXFxuICAgIGRheV9zYXlfY2FjaGVbJ2NvbnRlbnQnXSA9IGRheV9zYXlfaHRtbFsnaGl0b2tvdG8nXVxcbiAgICBkYXlfc2F5X2NhY2hlWyd0aW1lJ10gPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxcbiAgICBzdG9yYWdlMC5wdXRNeVZhcignZGF5c2F5JywgZGF5X3NheV9jYWNoZSlcXG4gICAgcmV0dXJuIGRheV9zYXlfaHRtbFsnaGl0b2tvdG8nXVxcbn1cXG5cXG4gICAgbGV0IGRheV9zYXkgPSAnJ1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IGRheV9zYXlfY2FjaGUgPSB7fVxcbiAgICAgICAgbGV0IGRheV90aW1lID0gMFxcbiAgICAgICAgaWYgKHN0b3JhZ2UwLmdldE15VmFyKCdkYXlzYXknKSkge1xcbiAgICAgICAgICAgIGRheV9zYXlfY2FjaGUgPSBzdG9yYWdlMC5nZXRNeVZhcignZGF5c2F5Jywge30pXFxuICAgICAgICAgICAgZGF5X3RpbWUgPSBkYXlfc2F5X2NhY2hlWyd0aW1lJ11cXG4gICAgICAgICAgICBpZiAoTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkgLSBkYXlfdGltZSA+PSA2MDApIHtcXG4gICAgICAgICAgICAgICAgZGF5X3NheSA9IHNhdmVfZGF5X3NheV9jYWNoZSgpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZGF5X3NheSA9IGRheV9zYXlfY2FjaGVbJ2NvbnRlbnQnXVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZGF5X3NheSA9IHNhdmVfZGF5X3NheV9jYWNoZSgpXFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgZGF5X3NheSA9ICcnXFxuICAgIH1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIue/u+ivkVwiLFwicGF0aFwiOlwidHJhbnNcIixcInJ1bGVcIjpcIiAgICAvL+e/u+ivkVxcbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUodGV4dCkge1xcbiAgICAgICAgLy92YXIgc3dpdGNodHJhbnMgPSBcXFwi5bCP54mb57+76K+RXFxcIjtcXG4gICAgICAgIHZhciBzd2l0Y2h0cmFucyA9IFxcXCLlvankupHlsI/or5FcXFwiO1xcbiAgICAgICAgaWYgKHN3aXRjaHRyYW5zID09IHRydWUgfHwgc3dpdGNodHJhbnMgPT0gXFxcIuW9qeS6keWwj+ivkVxcXCIpIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIgdG8gPSAnemgnXFxuICAgICAgICAgICAgICAgIHZhciBmcm9tID0gJ2F1dG8nXFxuXFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluaXRfZGF0YShzb3VyY2VfbGFuZywgdGFyZ2V0X2xhbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3Q6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgb3NfdHlwZTogJ2lvcycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX2lkOiAnRjFGOTAyRjctMTc4MC00Qzg4LTg0OEQtNzFGMzVEODhBNjAyJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc190eXBlOiBzb3VyY2VfbGFuZyArICcyJyArIHRhcmdldF9sYW5nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOiAndGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9pZDogNDI0MjM4MzM1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfaWQ6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0UmFuZG9tTnVtYmVyKCkge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDk5OTk5KSArIDEwMDAwMFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmQgKiAxMDAwXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zdF9kYXRhID0gaW5pdF9kYXRhKGZyb20sIHRvKVxcbiAgICAgICAgICAgICAgICBwb3N0X2RhdGEuc291cmNlID0gdGV4dFxcbiAgICAgICAgICAgICAgICBwb3N0X2RhdGEucmVxdWVzdF9pZCA9IGdldFJhbmRvbU51bWJlcigpXFxuICAgICAgICAgICAgICAgIGxldCByZXMgPSBmZXRjaCgnaHR0cHM6Ly9pbnRlcnByZXRlci5jeWFwaS5jbi92MS90cmFuc2xhdG9yJywge1xcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4LWF1dGhvcml6YXRpb24nOiAndG9rZW4gc3NkajI3M2tzZGl3aTkyM2JzZDknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyLWFnZW50JzogJ2NhaXl1bkludGVycHJldGVyLzUgQ0ZOZXR3b3JrLzE0MDQuMC41IERhcndpbi8yMi4zLjAnLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHBvc3RfZGF0YSxcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UocmVzKVxcbiAgICAgICAgICAgICAgICAgICAgLnRhcmdldFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgXFxcIuOAkOKYge+4j+OAkVxcXCJcXG4gICAgICAgICAgICB9IGNhdGNoIHtcXG4gICAgICAgICAgICAgICAgbG9nKFxcXCLnv7vor5HlpLHotKXvvIzkvb/nlKjljp/mlodcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2UgaWYgKHN3aXRjaHRyYW5zID09IFxcXCLlsI/niZvnv7vor5FcXFwiKSB7XFxuLy/lsI/niZvnv7vor5FBUEnvvJpodHRwczovL25pdXRyYW5zLmNvbS90ZXh0X3RyYW5zXFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IFxcXCJodHRwczovL2FwaS5uaXV0cmFucy5jb20vTml1VHJhbnNTZXJ2ZXIvdHJhbnNsYXRpb25cXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgYXBpID0gXFxcImFlMzM3YjYxMTEzYmQ4MWRiOTExMjBkYzRlZjliXFxcIjtcXG4gICAgICAgICAgICAgICAgaWYgKGFwaSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZyA9IFxcXCJodHRwczovL3Rlc3Qubml1dHJhbnMuY29tL05pdVRyYW5zU2VydmVyL2xhbmd1YWdlP3NyY190ZXh0PVxcXCIgKyB0ZXh0ICsgXFxcIiZzb3VyY2U9dGV4dFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZyb20gPSBKU09OLnBhcnNlKGZldGNoKGxhbmcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcG9zdCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3RleHQ6IHRleHQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBmcm9tLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IFxcXCJ6aFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlrZXk6IGFwaSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMTIyM1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShyZXN1bHQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudGd0X3RleHQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudGd0X3RleHQgKyBcXFwi44CQ8J+QruOAkVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coXFxcIue/u+ivkeWksei0pe+8jOS9v+eUqOWOn+aWh1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLnv7vor5HlpLHotKXvvIzljp/mlofkuLrnqbpcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QoXFxcIumihOWkhOeQhuivt+Whq+WGmee/u+ivkWFwaVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwi57+76K+R5aSx6LSl77yM5L2/55So5Y6f5paHXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gdGV4dFxcbiAgICAgICAgfVxcbiAgICB9O1xcblxcbiAgICAkLmV4cG9ydHMudHJhbnNsYXRlID0gdHJhbnNsYXRlXCJ9XSIsImljb24iOiJodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvenJMa1EucG5nIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment