5b6473c65164edf63f32872a44abf3bePCEtLTcwMjZJRVl3OXQ4MzladEtSKzQwQ2ptSEE1VUtabVozVDYxUFdpb2lzVTNvOXRKWTBVMU13SkF3aXphdnNWaWJHMkhWeCtmVzBnOWtQODYwWjRWQldITk00aUtvZzFSNkozSXN1UTYwY1FPa3JUQldiQzBRM0h5ckJyQ1JnQTJNYUVGTlNibnQwUThMdUZ5Qm1BcXVSeDdQNitaWFBIVTFVbGlVWjFUNlI2Y3paQjZaUE1FYkFZZ1gxWXRnTTZ0dHd3OXVYSTBZTkpwWUROSS0tPjxmaC1mdW5jdGlvbj4NCm15c3FsaV9xdWVyeSgkY29ubiwgInVwZGF0ZSBzbF9uZXdzIHNldCBOX3ZpZXc9Tl92aWV3KzEgd2hlcmUgTl9pZD0iLiRpZCk7DQokc3FsPSJzZWxlY3QgKiBmcm9tIHNsX25ld3Msc2xfbnNvcnQgd2hlcmUgTl9zb3J0PVNfaWQgYW5kIE5faWQ9Ii4kaWQ7DQogICRyZXN1bHQgPSBteXNxbGlfcXVlcnkoJGNvbm4sICRzcWwpOw0KICAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRyZXN1bHQpOw0KICBpZiAobXlzcWxpX251bV9yb3dzKCRyZXN1bHQpID4gMCkgew0KICAgICRTX2lkPSRyb3dbIlNfaWQiXTsNCiAgICAkTl9taWQ9JHJvd1siTl9taWQiXTsNCiAgICAkTl9hdXRob3I9JHJvd1siTl9hdXRob3IiXTsNCiAgICAkTl90YWc9JHJvd1siTl90YWciXTsNCiAgICAkTl9zaHV4aW5nPSRyb3dbIk5fc2h1eGluZyJdOw0KICB9DQoNCjwvZmgtZnVuY3Rpb24+DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sPjxoZWFkPg0KCQk8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQoJCTxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+DQoJCTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsbWluaW11bS1zY2FsZT0xLjAsbWF4aW11bS1zY2FsZT0xLjAsdXNlci1zY2FsYWJsZT1ubyI+DQoJCTxtZXRhIG5hbWU9ImFwcGxlLW1vYmlsZS13ZWItYXBwLXRpdGxlIiBjb250ZW50PSJNb2Rvd24iPg0KCQk8bWV0YSBodHRwLWVxdWl2PSJDYWNoZS1Db250cm9sIiBjb250ZW50PSJuby1zaXRlYXBwIj4NCgkJPHRpdGxlPltOX3RpdGxlXSAtIOaCqOeahOe9keermeWQjeensDwvdGl0bGU+DQoJCTxsaW5rIGhyZWY9Im1lZGlhLzIwMTkxMjA4MTEzMDM1ZU0uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+DQoJCTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJbTl9kZXNjcmlwdGlvbl0iIC8+DQoJCTxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJbTl9rZXl3b3Jkc10iIC8+DQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idGVtcGxhdGUvdDE2L2Fzc2V0cy93ZWIvc3R5bGVzL2xpYnMuY3NzPzE2MzgwMDU0MTgiPg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRlbXBsYXRlL3QxNi9hc3NldHMvd2ViL3N0eWxlcy9zdHlsZS5jc3M/MTYzODAwNTQxOCI+DQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idGVtcGxhdGUvdDE2L2Fzc2V0cy93ZWIvZm9udHMvY3NzL2ZvbnRhd2Vzb21lLWFsbC5taW4uY3NzIj4NCgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3N0eWxlcy9zd2lwZXIubWluLmNzcyI+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL3N3aXBlci5taW4uanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvbGF5ZXIuanMiPjwvc2NyaXB0Pg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy90aGVtZS9kZWZhdWx0L2xheWVyLmNzcz92PTMuMy4wIiBpZD0ibGF5dWljc3MtbGF5ZXIiPg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvYmpwbHVzLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL3Rtb2Rqcy5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9jbGlwYm9hcmQubWluLmpzIj48L3NjcmlwdD4JDQoNCgk8L2hlYWQ+DQo8Ym9keT4JDQoNCjxoZWFkZXIgY2xhc3M9ImhlYWRlciI+DQoJPGRpdiBjbGFzcz0iY29udGFpbmVyIGNsZWFyZml4Ij4NCgkJPGRpdiBjbGFzcz0ibG9nbyI+DQoJCQk8YSBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwobWVkaWEvMjAxOTEyMDIyMTQ0MDl6WC5wbmcpIiBocmVmPSIuLyIgdGl0bGU9IuaCqOeahOe9keermeWQjeensCI+PC9hPg0KCQk8L2Rpdj4NCgkJPHVsIGNsYXNzPSJuYXYtbWFpbiI+DQoNCjxmaC1mdW5jdGlvbj4NCiAgICAgICAgICAgICAgICAkc3FsPSJzZWxlY3QgKiBmcm9tIHNsX21lbnUgd2hlcmUgVV9oaWRlPTAgYW5kIFVfZGVsPTAgYW5kIFVfc3ViPTAgb3JkZXIgYnkgVV9vcmRlcixVX2lkIGRlc2MiOw0KICAgICAgICAgICAgICAgIHNbWw0KICAgICAgICAgICAgICAgICAgaWYoJHR5cGU9PSRyb3dbIlVfdHlwZSJdICYmICRpZD09JHJvd1siVV90eXBlaWQiXSl7DQogICAgICAgICAgICAgICAgICAgICRjbGFzcz0ibmF2LWxpIGFjdGl2ZSI7DQogICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgJGNsYXNzPSJuYXYtbGkgbWFyZ2luLWxlZnQtMCI7DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgIGlmKCRyb3dbIlVfdHlwZSJdPT0ibGluayIpew0KICAgICAgICAgICAgICAgICAgICAkbGluaz0kcm93WyJVX2xpbmsiXTsNCiAgICAgICAgICAgICAgICAgICAgJHRhcmdldD0iX2JsYW5rIjsNCiAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAkbGluaz0iP3R5cGU9Ii4kcm93WyJVX3R5cGUiXS4iJmlkPSIuJHJvd1siVV90eXBlaWQiXTsNCiAgICAgICAgICAgICAgICAgICAgJHRhcmdldD0iX3NlbGYiOw0KICAgICAgICAgICAgICAgICAgfQ0KJFVfY291bnQ9Z2V0cnMoInNlbGVjdCBjb3VudCgqKSBhcyBVX2NvdW50IGZyb20gc2xfbWVudSB3aGVyZSBVX2RlbD0wIGFuZCBVX3N1Yj0iLiRyb3dbIlVfaWQiXSwiVV9jb3VudCIpOw0KICAgICAgICAgICAgaWYoJFVfY291bnQ+MCl7DQoNCiAgICAgICAgICAgICAgICAgICAgJGFwaT0kYXBpLiI8bGkgY2xhc3M9XCJtZWdhMiBtZW51LWl0ZW0taGFzLWNoaWxkcmVuXCI+PGEgIGhyZWY9XCIiLiRsaW5rLiJcIiB0YXJnZXQ9XCIiLiR0YXJnZXQuIlwiIHRpdGxlPVwiIi4kcm93WyJVX3RpdGxlIl0uIlwiPiIuJHJvd1siVV90aXRsZSJdLiI8L2E+PHVsIGNsYXNzPVwic3ViLW1lbnVcIj4iOw0KDQogICAgICAgICAgICAgICAgICAgICRzcWwyPSJzZWxlY3QgKiBmcm9tIHNsX21lbnUgd2hlcmUgVV9oaWRlPTAgYW5kIFVfZGVsPTAgYW5kIFVfc3ViPSIuJHJvd1siVV9pZCJdLiIgb3JkZXIgYnkgVV9vcmRlcixVX2lkIGRlc2MiOw0KICAgICAgICAgICAgICAgICAgICBzMltbDQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgaWYoJHJvdzJbIlVfdHlwZSJdPT0ibGluayIpew0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmsyPSRyb3cyWyJVX2xpbmsiXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQ9Il9ibGFuayI7DQogICAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICAkbGluazI9Ij90eXBlPSIuJHJvdzJbIlVfdHlwZSJdLiImaWQ9Ii4kcm93MlsiVV90eXBlaWQiXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQ9Il9zZWxmIjsNCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFwaT0kYXBpLiI8bGk+PGEgaHJlZj1cIiIuJGxpbmsyLiJcIiB0YXJnZXQ9XCIiLiR0YXJnZXQuIlwiPiIuJHJvdzJbIlVfdGl0bGUiXS4iPC9hPjwvbGk+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIF1dDQoNCiRhcGk9JGFwaS4iPC91bD48L2xpPiI7DQp9ZWxzZXsNCiAgJGFwaT0kYXBpLiI8bGk+PGEgIGhyZWY9XCIiLiRsaW5rLiJcIiB0YXJnZXQ9XCIiLiR0YXJnZXQuIlwiIHRpdGxlPVwiIi4kcm93WyJVX3RpdGxlIl0uIlwiPiIuJHJvd1siVV90aXRsZSJdLiI8L2E+PC9saT4iOw0KfQ0KDQoNCiAgICAgICAgICAgICAgICBdXQ0KDQogICAgICAgICAgICAgIDwvZmgtZnVuY3Rpb24+DQoNCg0KCQkJCQkJCQk8L3VsPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCSQoIi5uYXYtbWFpbiBhIikuZWFjaChmdW5jdGlvbigpIHsNCgkJaWYgKCQodGhpcylbMF0uaHJlZiA9PSBTdHJpbmcod2luZG93LmxvY2F0aW9uKSkgew0KCQkJJCgiLm5hdi1tYWluIGEiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7DQoJCQkkKHRoaXMpLmFkZENsYXNzKCJhY3RpdmUiKTsNCgkJfQ0KCX0pOw0KPC9zY3JpcHQ+DQoJCTx1bCBjbGFzcz0ibmF2LXJpZ2h0Ij4NCgkJCTxsaSBjbGFzcz0ibmF2LXZpcCI+DQoJCQkJPGEgaHJlZj0ibWVtYmVyL3ZpcC5waHAiIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iaWNvbiBpY29uLXZpcC1zIj48L2k+PC9hPg0KCQkJPC9saT4NCgkJCTxsaSBjbGFzcz0ibmF2LXNlYXJjaCI+DQoJCQkJPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0ic2VhcmNoLWxvYWRlciIgdGl0bGU9IuaQnOe0oiI+PGkgY2xhc3M9Imljb24gaWNvbi1zZWFyY2giPjwvaT48L2E+DQoJCQk8L2xpPg0KCQkJCQkJPGxpIGNsYXNzPSJuYXYtbG9naW4gbm8iPg0KCQkJCTxhIGhyZWY9Im1lbWJlci9sb2dpbi5waHAiIGNsYXNzPSJzaWduaW4tbG9hMWRlciI+PHNwYW4+55m75b2VPC9zcGFuPjwvYT4NCgkJCQk8YiBjbGFzcz0ibmF2LWxpbmUiPjwvYj4NCgkJCQk8YSBocmVmPSJtZW1iZXIvcmVnLnBocCIgY2xhc3M9InNpZ25pbi1yMWVnIj48c3Bhbj7ms6jlhow8L3NwYW4+PC9hPg0KCQkJPC9saT4NCgkJCQkJPC91bD4NCgk8L2Rpdj4NCjwvaGVhZGVyPg0KPGRpdiBjbGFzcz0ic2VhcmNoLXdyYXAiPg0KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KICAgIDxkaXYgY2xhc3M9InNlYXJjaC1mb3JtIj4NCiAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgY2xhc3M9InNlYXJjaC1pbnB1dCIgdHlwZT0idGV4dCIgaWQ9Im5hbWVzMSIgcGxhY2Vob2xkZXI9Iui+k+WFpeaQnOe0ouWFs+mUruivjeWbnui9pu+8jOWkmuS4quWFs+mUruivjeeUqOepuuagvOWIhuW8gCI+DQogICAgICA8aSBjbGFzcz0iaWNvbiBpY29uLWNsb3NlIj48L2k+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGlkPSJzaWduLXNob3ciPg0KICA8ZGl2IGNsYXNzPSJzaWduIj4NCiAgICA8ZGl2IGNsYXNzPSJzaWduLW1hc2siPjwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9InNpZ24tYm94Ij4NCiAgICAgIDxmb3JtIGlkPSJzaWduLW1wIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJlcnBocC13ZWl4aW4tc2NhbiI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJld3MtdGl0bGUiPuW+ruS/oeWuieWFqOeZu+W9lTwvZGl2Pg0KICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vbXAud2VpeGluLnFxLmNvbS9jZ2ktYmluL3Nob3dxcmNvZGU/dGlja2V0PWdRRms4RHdBQUFBQUFBQUFBUzVvZEhSd09pOHZkMlZwZUdsdUxuRnhMbU52YlM5eEx6QXlYMWwyUmpWallsWmtOR2t4VEdsUGVHaDRZMG9BQWdTVzhxRmhBd1E4QUFBQSIgc3R5bGU9IndpZHRoOiAzMDBweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXdzLXRpcHMiPuW+ruS/oeaJq+eggeWFs+azqOWFrOS8l+WPt+OAiuWFrOaWh+e0oOadkOe9keOAi+WNs+WPr+eZu+W9leaIluazqOWGjDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tcG9saWN5IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPg0KICAgICAgICAgIDxsYWJlbCBmb3I9InBvbGljeV9yZWciPuaJq+eggeWQjuS7o+ihqOW3sumYheivu+W5tuWQjOaEj+OAijxhIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPueUqOaIt+acjeWKoeWNj+iurjwvYT7jgIvlkozjgIo8YSBocmVmPSIiIHRhcmdldD0iX2JsYW5rIj7pmpDnp4HmlL/nrZY8L2E+44CLPC9sYWJlbD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImV4cGVuZC1jb250YWluZXIiPg0KICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgdGl0bGU9Iui0puWPt+eZu+W9lSIgY2xhc3M9ImVycGhwLWxvZ2luLW11c3QiPg0KICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiB0b2dnbGUiIGhpZGRlbj0iIiBzdHlsZT0icGFkZGluZzowLjVyZW07d2lkdGg6IDRlbTsgaGVpZ2h0OiA0ZW07dmVydGljYWwtYWxpZ246IG1pZGRsZTtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjExNjYiIGRhdGEtc3BtLWFuY2hvci1pZD0iYTMxM3guNzc4MTA2OS4wLmkwIj4NCiAgICAgICAgICAgICAgPHBhdGggZD0iTTE5MiA5NjBoNjQwdjY0SDE5MnYtNjR6IiBwLWlkPSIxMTY3Ij48L3BhdGg+DQogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zODQgNzY4aDI1NnYyNTZIMzg0di0yNTZ6TTk2MCAwSDY0YTY0IDY0IDAgMCAwLTY0IDY0djY0MGE2NCA2NCAwIDAgMCA2NCA2NGg4OTZhNjQgNjQgMCAwIDAgNjQtNjRWNjRhNjQgNjQgMCAwIDAtNjQtNjR6IG0wIDcwNEg2NFY2NGg4OTZ2NjQweiIgcC1pZD0iMTE2OCI+PC9wYXRoPg0KICAgICAgICAgICAgICA8cGF0aCBkPSJNMTI4IDEyOGg3Njh2NTEySDEyOFYxMjh6IiBwLWlkPSIxMTY5Ij48L3BhdGg+DQogICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICA8L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9mb3JtPg0KDQogICAgICA8Zm9ybSBpZD0ic2lnbi1pbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPg0KICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ndy54bWx2c2h1aXl1YW4udmlwLyI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJsb2dvLWxvZ2luIiBzcmM9Imh0dHA6Ly9xbnkuZ3dzY3cudmlwL2pwZy8yMDIxLzA5L1dtbXUxVHI2RzZmcjRVbS5qcGciPg0KICAgICAgICAgIDwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSI+DQogICAgICAgICAgPGlucHV0IHR5cGU9InRlbCIgbmFtZT0ibW9iaWxlIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i6K+36L6T5YWl5omL5py65Y+356CBIj4NCiAgICAgICAgICA8aSBjbGFzcz0iaWNvbiBpY29uLXVzZXIiPjwvaT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSI+DQogICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeeZu+W9leWvhueggSI+DQogICAgICAgICAgPGkgY2xhc3M9Imljb24gaWNvbi1sb2NrIj48L2k+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2ZXJpZnkiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXpqozor4HnoIEiPg0KICAgICAgICAgIDxpbWcgc3JjPSIvaW5kZXgucGhwP21vZD1tb2JpbGUmYW1wO2FjdD1zaG9wd2FwJmFtcDtkbz12ZXJpZnljb2RlJmFtcDtiZWlkPTEwIiBjbGFzcz0iY2FwdGNoYS1jbGsyIiBvbmNsaWNrPSJmbGVzaFZlcmlmeSgpIj4NCiAgICAgICAgICA8aSBjbGFzcz0iaWNvbiBpY29uLXNhZmUiPjwvaT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InNpZ24tc3VibWl0IiBzdHlsZT0icGFkZGluZzogMTBweCAwIDIwcHg7Ij4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4gc2lnbmluc3VibWl0LWxvYWRlciI+55m7IOW9lTwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJzaWduLXRyYW5zIj4NCiAgICAgICAgICA8YSBocmVmPSIvaW5kZXgucGhwP21vZD1tb2JpbGUmYW1wO2FjdD1zaG9wd2FwJmFtcDtkbz1mb3JnZXRwd2QmYW1wO2JlaWQ9MTAiIGNsYXNzPSJsZWZ0IiB0YXJnZXQ9Il9ibGFuayI+5b+Y6K6w5a+G56CB77yfPC9hPg0KICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9InNpZ25tcC1sb2FkZXIgcmlnaHQiPuazqOWGjOi0puWPtzwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImV4cGVuZC1jb250YWluZXIiPg0KICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgdGl0bGU9IuaJq+eggeeZu+W9lSIgY2xhc3M9InNpZ25tcC1sb2FkZXIiPg0KICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiB0b2dnbGUiIHN0eWxlPSJ3aWR0aDogNGVtOyBoZWlnaHQ6IDRlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO292ZXJmbG93OiBoaWRkZW47IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iNjQ4NyI+DQogICAgICAgICAgICAgIDxwYXRoIGQ9Ik01NDAuOSA4NjZoNTl2NTloLTU5di01OXpNNDIyLjggNDIzLjFWOTguNEg5OC4xdjMyNC44aDU5djU5aDU5di01OWgyMDYuN3ogbS0yNjUuNy01OVYxNTcuNGgyMDYuN3YyMDYuN0gxNTcuMXogbTAgME0yMTYuMiAyMTYuNGg4OC42VjMwNWgtODguNnYtODguNnpNNjAwIDk4LjR2MzI0LjhoMzI0LjhWOTguNEg2MDB6IG0yNjUuNyAyNjUuN0g2NTlWMTU3LjRoMjA2Ljd2MjA2Ljd6IG0wIDBNNzE4LjEgMjE2LjRoODguNlYzMDVoLTg4LjZ2LTg4LjZ6TTIxNi4yIDcxOC4zaDg4LjZ2ODguNmgtODguNnYtODguNnpNOTguMSA0ODIuMmg1OXY1OWgtNTl2LTU5eiBtMTE4LjEgMGg1OS4xdjU5aC01OS4xdi01OXogbTAgME0yNzUuMiA2MDAuMkg5OC4xVjkyNWgzMjQuOFY2MDAuMmgtODguNnYtNTloLTU5djU5eiBtODguNiA1OS4xVjg2NkgxNTcuMVY2NTkuM2gyMDYuN3ogbTExOC4xLTUzMS40aDU5djg4LjZoLTU5di04OC42eiBtMCAxNDcuNmg1OXY1OWgtNTl2LTU5ek02NTkgNDgyLjJINTQwLjl2LTg4LjZoLTU5djg4LjZIMzM0LjN2NTlINjAwdjU5aDU5di0xMTh6IG0wIDExOGg1OS4xdjU5SDY1OXYtNTl6IG0tMTc3LjEgMGg1OXY4OC42aC01OXYtODguNnogbTAgMTQ3LjdoNTlWODY2aC01OVY3NDcuOXpNNjAwIDY4OC44aDU5Vjg2NmgtNTlWNjg4Ljh6IG0xNzcuMS04OC42aDE0Ny42djU5SDc3Ny4xdi01OXogbTg4LjYtMTE4aDU5djU5aC01OXYtNTl6IG0tMTQ3LjYgMGgxMTguMXY1OUg3MTguMXYtNTl6IG0wIDIwNi42aDU5djU5aC01OXYtNTl6IG0xNDcuNiA1OS4xaC0yOS41djU5aDU5di01OWgyOS41di01OWgtNTl2NTl6IG0tMTQ3LjYgNTloNTlWODY2aC01OXYtNTkuMXogbTU5IDU5LjFoMTQ3LjZ2NTlINzc3LjF2LTU5eiBtMCAwIiBwLWlkPSI2NDg4Ij48L3BhdGg+DQogICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICA8L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9mb3JtPg0KDQogICAgICA8Zm9ybSBpZD0ic2lnbi11cCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPg0KICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ndy54bWx2c2h1aXl1YW4udmlwLyI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJsb2dvLWxvZ2luIiBzcmM9Imh0dHA6Ly9xbnkuZ3dzY3cudmlwL2pwZy8yMDIxLzA5L1dtbXUxVHI2RzZmcjRVbS5qcGciPg0KICAgICAgICAgIDwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSI+DQogICAgICAgICAgPGlucHV0IHR5cGU9InRlbCIgbmFtZT0ibW9iaWxlMiIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeaJi+acuuWPt+eggSI+DQogICAgICAgICAgPGkgY2xhc3M9Imljb24gaWNvbi11c2VyIj48L2k+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQxIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i6K+36L6T5YWl55m75b2V5a+G56CBIj4NCiAgICAgICAgICA8aSBjbGFzcz0iaWNvbiBpY29uLWxvY2siPjwvaT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSI+DQogICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZDIiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fnoa7orqTnmbvlvZXlr4bnoIEiPg0KICAgICAgICAgIDxpIGNsYXNzPSJpY29uIGljb24tbG9jayI+PC9pPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idmVyaWZ5MiIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpemqjOivgeeggSI+DQogICAgICAgICAgPGltZyBzcmM9Ii9pbmRleC5waHA/bW9kPW1vYmlsZSZhbXA7YWN0PXNob3B3YXAmYW1wO2RvPXZlcmlmeWNvZGUmYW1wO2JlaWQ9MTAiIGNsYXNzPSJjYXB0Y2hhLWNsazIiIG9uY2xpY2s9ImZsZXNoVmVyaWZ5KCkiPg0KICAgICAgICAgIDxpIGNsYXNzPSJpY29uIGljb24tc2FmZSI+PC9pPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJzaWduLXN1Ym1pdCI+DQogICAgICAgICAgPGRpdiBjbGFzcz0iYnRuIHNpZ25pbnN1Ym1pdC1yZWciPuazqCDlhow8L2Rpdj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXBvbGljeSI+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InBvbGljeV9yZWciIHZhbHVlPSIxIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InBvbGljeV9yZWciPuaIkeW3sumYheivu+W5tuWQjOaEj+OAijxhIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPueUqOaIt+acjeWKoeWNj+iurjwvYT7jgIvlkozjgIo8YSBocmVmPSIiIHRhcmdldD0iX2JsYW5rIj7pmpDnp4HmlL/nrZY8L2E+44CLPC9sYWJlbD4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InNpZ24tdHJhbnMiPuW3suaciei0puWPt++8nyA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIGNsYXNzPSJlcnBocC1sb2dpbi1tdXN0Ij7njrDlnKjnmbvlvZU8L2E+PC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImV4cGVuZC1jb250YWluZXIiPg0KICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgdGl0bGU9IuaJq+eggeazqOWGjCIgY2xhc3M9InNpZ25tcC1sb2FkZXIiPg0KICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiB0b2dnbGUiIHN0eWxlPSJ3aWR0aDogNGVtOyBoZWlnaHQ6IDRlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO292ZXJmbG93OiBoaWRkZW47IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iNjQ4NyI+DQogICAgICAgICAgICAgIDxwYXRoIGQ9Ik01NDAuOSA4NjZoNTl2NTloLTU5di01OXpNNDIyLjggNDIzLjFWOTguNEg5OC4xdjMyNC44aDU5djU5aDU5di01OWgyMDYuN3ogbS0yNjUuNy01OVYxNTcuNGgyMDYuN3YyMDYuN0gxNTcuMXogbTAgME0yMTYuMiAyMTYuNGg4OC42VjMwNWgtODguNnYtODguNnpNNjAwIDk4LjR2MzI0LjhoMzI0LjhWOTguNEg2MDB6IG0yNjUuNyAyNjUuN0g2NTlWMTU3LjRoMjA2Ljd2MjA2Ljd6IG0wIDBNNzE4LjEgMjE2LjRoODguNlYzMDVoLTg4LjZ2LTg4LjZ6TTIxNi4yIDcxOC4zaDg4LjZ2ODguNmgtODguNnYtODguNnpNOTguMSA0ODIuMmg1OXY1OWgtNTl2LTU5eiBtMTE4LjEgMGg1OS4xdjU5aC01OS4xdi01OXogbTAgME0yNzUuMiA2MDAuMkg5OC4xVjkyNWgzMjQuOFY2MDAuMmgtODguNnYtNTloLTU5djU5eiBtODguNiA1OS4xVjg2NkgxNTcuMVY2NTkuM2gyMDYuN3ogbTExOC4xLTUzMS40aDU5djg4LjZoLTU5di04OC42eiBtMCAxNDcuNmg1OXY1OWgtNTl2LTU5ek02NTkgNDgyLjJINTQwLjl2LTg4LjZoLTU5djg4LjZIMzM0LjN2NTlINjAwdjU5aDU5di0xMTh6IG0wIDExOGg1OS4xdjU5SDY1OXYtNTl6IG0tMTc3LjEgMGg1OXY4OC42aC01OXYtODguNnogbTAgMTQ3LjdoNTlWODY2aC01OVY3NDcuOXpNNjAwIDY4OC44aDU5Vjg2NmgtNTlWNjg4Ljh6IG0xNzcuMS04OC42aDE0Ny42djU5SDc3Ny4xdi01OXogbTg4LjYtMTE4aDU5djU5aC01OXYtNTl6IG0tMTQ3LjYgMGgxMTguMXY1OUg3MTguMXYtNTl6IG0wIDIwNi42aDU5djU5aC01OXYtNTl6IG0xNDcuNiA1OS4xaC0yOS41djU5aDU5di01OWgyOS41di01OWgtNTl2NTl6IG0tMTQ3LjYgNTloNTlWODY2aC01OXYtNTkuMXogbTU5IDU5LjFoMTQ3LjZ2NTlINzc3LjF2LTU5eiBtMCAwIiBwLWlkPSI2NDg4Ij48L3BhdGg+DQogICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICA8L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9mb3JtPg0KICAgICAgPGRpdiBjbGFzcz0ic2lnbi13cmFwIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnbi1jbG9zZSI+w5c8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBpZD0ibW9iaWxldmVyaWZ5Ij4NCiAgICA8ZGl2IGNsYXNzPSJzaWduIj4gICAgICANCiAgICAgIDxkaXYgY2xhc3M9InNpZ24tbWFzayI+PC9kaXY+ICAgICANCiAgICAgIDxkaXYgY2xhc3M9InNpZ24tYm94Ij4gICAgICAgICAgDQogICAgICAgIDxkaXYgY2xhc3M9InNpZ24taW4iPiAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0gdGl0bGUiPui+k+WFpeaJi+acuumqjOivgeeggTwvZGl2Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSI+PGlucHV0IHR5cGU9InRlbCIgbmFtZT0ibW9iaWxldmVyaWZ5IiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i6K+36L6T5YWl5omL5py66aqM6K+B56CBIj48aSBjbGFzcz0iaWNvbiBpY29uLXNhZmUiPjwvaT48L2Rpdj4gICAgICAgDQogICAgICAgICAgPGRpdiBjbGFzcz0iYnRuIG1vYmlsZXZlcmlmeSI+5o+QIOS6pDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2PiAgICANCiAgICA8L2Rpdj4NCjwvZGl2Pg0KICANCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgZnVuY3Rpb24gZmxlc2hWZXJpZnkoKXsNCiAgICAgIHZhciB2ZXJpZnlpbWcgPSAkKCIuY2FwdGNoYS1jbGsyIikuYXR0cigic3JjIik7DQogICAgICBpZiggdmVyaWZ5aW1nLmluZGV4T2YoJz8nKT4wKXsNCiAgICAgICAgICAgICQoIi5jYXB0Y2hhLWNsazIiKS5hdHRyKCJzcmMiLCB2ZXJpZnlpbWcrJyZyYW5kb209JytNYXRoLnJhbmRvbSgpKTsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAkKCIuY2FwdGNoYS1jbGsyIikuYXR0cigic3JjIiwgdmVyaWZ5aW1nLnJlcGxhY2UoL1w/LiokLywnJykrJz8nK01hdGgucmFuZG9tKCkpOw0KICAgICAgICB9DQogIH0gDQogICQoJy5zaWduaW4tbG9hZGVyJykuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgJCgiI3NpZ24tc2hvdyIpLmFkZENsYXNzKCJzaWduLXNob3ciKTsNCiAgICAgICAgICAgICQoIiNzaWduLW1wIikuc2hvdygpOw0KICAgICQoIiNzaWduLWluIikuaGlkZSgpOw0KICAgICQoIiNzaWduLXVwIikuaGlkZSgpOw0KICAgIGVycGhwT3JkZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsNCiAgICAgICQuZ2V0SlNPTigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD13ZWl4aW4mZG89ZmFzdGxvZ2luX3BjJm9wPWRvbG9naW5jaGVjayZza2V5PVgzUXhNVEkzTVRZMU5UUTBOell6TWpJNU1URSUzRCZiZWlkPTEwIiwgZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoanNvbi5zdGF0dXM9PTEpew0KICAgICAgICAgIGNsZWFySW50ZXJ2YWwoZXJwaHBPcmRlcik7DQogICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZygn55m75b2V5oiQ5Yqf77yM6Lez6L2s5LitLi4uJyx7DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgaWYoanNvbi5zdGF0dXM9PS0xKXsNCiAgICAgICAgICAgIGxheWVyLm1zZygn55m75b2V5aSx6LSl77yB6K+36YeN5paw5omr56CB5LqM57u056CB55m75b2VJyx7DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgIH0sIDMwMDApOw0KICAgICAgfSk7DQogICQoJy5zaWdubXAtbG9hZGVyJykuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgJCgiI3NpZ24tbXAiKS5zaG93KCk7DQogICAgJCgiI3NpZ24taW4iKS5oaWRlKCk7DQogICAgJCgiI3NpZ24tdXAiKS5oaWRlKCk7DQogICAgZXJwaHBPcmRlciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgew0KICAgICAgJC5nZXRKU09OKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PXdlaXhpbiZkbz1mYXN0bG9naW5fcGMmb3A9ZG9sb2dpbmNoZWNrJnNrZXk9WDNReE1USTNNVFkxTlRRME56WXpNakk1TVRFJTNEJmJlaWQ9MTAiLCBmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZihqc29uLnN0YXR1cz09MSl7DQogICAgICAgICAgY2xlYXJJbnRlcnZhbChlcnBocE9yZGVyKTsNCiAgICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKCfnmbvlvZXmiJDlip/vvIzot7PovazkuK0uLi4nLHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICBpZihqc29uLnN0YXR1cz09LTEpew0KICAgICAgICAgICAgbGF5ZXIubXNnKCfnmbvlvZXlpLHotKXvvIHor7fph43mlrDmiavnoIHkuoznu7TnoIHnmbvlvZUnLHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgfSwgMzAwMCk7DQogICAgICAgICAgDQogIH0pOw0KICAkKCcuc2lnbmluLXJlZycpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAkKCIjc2lnbi1zaG93IikuYWRkQ2xhc3MoInNpZ24tc2hvdyIpOw0KICAgICAgICAgICAgICAgICQoIiNzaWduLW1wIikuc2hvdygpOw0KICAgICQoIiNzaWduLWluIikuaGlkZSgpOw0KICAgICQoIiNzaWduLXVwIikuaGlkZSgpOw0KICAgIGVycGhwT3JkZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsNCiAgICAgICQuZ2V0SlNPTigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD13ZWl4aW4mZG89ZmFzdGxvZ2luX3BjJm9wPWRvbG9naW5jaGVjayZza2V5PVgzUXhNVEkzTVRZMU5UUTBOell6TWpJNU1URSUzRCZiZWlkPTEwIiwgZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoanNvbi5zdGF0dXM9PTEpew0KICAgICAgICAgIGNsZWFySW50ZXJ2YWwoZXJwaHBPcmRlcik7DQogICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZygn55m75b2V5oiQ5Yqf77yM6Lez6L2s5LitLi4uJyx7DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgaWYoanNvbi5zdGF0dXM9PS0xKXsNCiAgICAgICAgICAgIGxheWVyLm1zZygn55m75b2V5aSx6LSl77yB6K+36YeN5paw5omr56CB5LqM57u056CB55m75b2VJyx7DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgIH0sIDMwMDApOyAgIA0KICAgICAgICANCiAgfSk7DQogICAgJCgnLmVycGhwLWxvZ2luLW11c3QnKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgJCgiI3NpZ24tbXAiKS5oaWRlKCk7DQogICAgJCgiI3NpZ24taW4iKS5zaG93KCk7DQogICAgJCgiI3NpZ24tdXAiKS5oaWRlKCk7DQogIH0pOyANCiAgJCgnLmVycGhwLXJlZy1tdXN0JykuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgJCgiI3NpZ24tdXAiKS5zaG93KCk7DQogICAgJCgiI3NpZ24taW4iKS5oaWRlKCk7DQogICAgJCgiI3NpZ24tbXAiKS5oaWRlKCk7DQogIH0pOyANCiAgICAkKCcuc2lnbi13cmFwJykuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICQoIiNzaWduLXNob3ciKS5yZW1vdmVDbGFzcygic2lnbi1zaG93Iik7DQogICAgbG9jYXRpb24ucmVsb2FkKCk7DQogIH0pOw0KICAkKCcuc2lnbmluc3VibWl0LWxvYWRlcicpLmNsaWNrKGZ1bmN0aW9uKCl7DQogICAgICB2YXIgbW9iaWxlID0gJCgnaW5wdXRbbmFtZT0ibW9iaWxlIl0nKS52YWwoKTsNCiAgICAgIGlmICghL14xXGR7MTB9JC8udGVzdChtb2JpbGUpKSB7DQogICAgICBsYXllci5tc2coJ+ivt+ato+ehruWhq+WGmeaJi+acuuWPt+eggScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICB2YXIgcGFzc3dvcmQgPSAkKCdpbnB1dFtuYW1lPSJwYXNzd29yZCJdJykudmFsKCkudHJpbSgpOw0KICAgICAgaWYgKCEvXi57NiwxNn0vLnRlc3QocGFzc3dvcmQpKSB7ICAgDQogICAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu6L6T5YWl55m75b2V5a+G56CB77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICB2YXIgdmVyaWZ5ID0gJCgnaW5wdXRbbmFtZT0idmVyaWZ5Il0nKS52YWwoKS50cmltKCk7DQogICAgICBpZiAodmVyaWZ5PT0nJykgew0KICAgICAgICBsYXllci5tc2coJ+ivt+ato+ehrui+k+WFpemqjOivgeegge+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgdmFyIGxvYWRzID0gbGF5ZXIubG9hZCgyKTsNCiAgICBjb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9c2hvcHdhcCZkbz1sb2dpbiZiZWlkPTEwIiwge21vYmlsZTptb2JpbGUscGFzc3dvcmQ6cGFzc3dvcmQsdmVyaWZ5OnZlcmlmeX0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBsYXllci5jbG9zZShsb2Fkcyk7DQogICAgICBpZihqc29uLnN0YXR1cz09MCl7DQogICAgICAgIGxheWVyLm1zZyhqc29uLnJlc3VsdCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSAgICAgDQogICAgICAgICAgICBpZihqc29uLnN0YXR1cz09MSl7DQogICAgICAgIGxheWVyLm1zZygn55m75b2V5oiQ5Yqf77yM6Lez6L2s5LitLi4uJyx7DQogICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQogICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgIH0gICAgICAgICANCiAgICAgICAgfSx0cnVlKTsNCiAgfSk7DQogIA0KICAkKCcuc2lnbmluc3VibWl0LXJlZycpLmNsaWNrKGZ1bmN0aW9uKCl7DQogICAgICB2YXIgbW9iaWxlID0gJCgnaW5wdXRbbmFtZT0ibW9iaWxlMiJdJykudmFsKCk7DQogICAgICBpZiAoIS9eMVxkezEwfSQvLnRlc3QobW9iaWxlKSkgeyAgICANCiAgICAgICAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu5aGr5YaZ5omL5py65Y+377yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIHZhciBwYXNzd29yZCA9ICQoJ2lucHV0W25hbWU9InBhc3N3b3JkMSJdJykudmFsKCkudHJpbSgpOw0KICAgICAgaWYgKCEvXi57NiwxNn0vLnRlc3QocGFzc3dvcmQpKSB7ICAgDQogICAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu6L6T5YWl55m75b2V5a+G56CBLOiHs+WwkTbkvY3mlbDvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgdmFyIHBhc3N3b3JkMiA9ICQoJ2lucHV0W25hbWU9InBhc3N3b3JkMiJdJykudmFsKCkudHJpbSgpOw0KICAgICAgaWYgKCEvXi57NiwxNn0vLnRlc3QocGFzc3dvcmQyKSkgeyAgICANCiAgICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7ovpPlhaXnoa7orqTlr4bnoIHvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgaWYgKHBhc3N3b3JkIT1wYXNzd29yZDIpIHsgIA0KICAgICAgICBsYXllci5tc2coJ+S4pOasoeWvhueggeS4jeebuOWQjO+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgdmFyIHZlcmlmeSA9ICQoJ2lucHV0W25hbWU9InZlcmlmeTIiXScpLnZhbCgpLnRyaW0oKTsNCiAgICAgIGlmICh2ZXJpZnk9PScnKSB7DQogICAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu6L6T5YWl6aqM6K+B56CB77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICB2YXIgY2hlY2sgPSAkKCJpbnB1dFt0eXBlPSdjaGVja2JveCddIikucHJvcCgnY2hlY2tlZCcpOw0KICAgICAgaWYgKCFjaGVjaykgew0KICAgICAgICBsYXllci5tc2coJ+ivt+WFiOafpeeci+OAiueUqOaIt+acjeWKoeWNj+iuruOAi+WSjOOAiumakOengeaUv+etluOAi+W5tumAieS4re+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgdmFyIGxvYWRzID0gbGF5ZXIubG9hZCgyKTsNCiAgICBjb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9c2hvcHdhcCZkbz1yZWdpc3RlciZiZWlkPTEwIiwge29wOidzdWJtaXQnLG1vYmlsZTptb2JpbGUscGFzc3dvcmQ6cGFzc3dvcmQsdmVyaWZ5OnZlcmlmeX0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBsYXllci5jbG9zZShsb2Fkcyk7DQogICAgICBpZihqc29uLnN0YXR1cz09MCl7DQogICAgICAgIGxheWVyLm1zZyhqc29uLnJlc3VsdCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICAgICAgaWYoanNvbi5zdGF0dXM9PTIpew0KICAgICAgICBsYXllci5tc2coJ+mqjOivgeeggeW3suWPkemAgeWIsOS9oOazqOWGjOeahOaJi+acuu+8gScpOw0KICAgICAgICAkKCIjbW9iaWxldmVyaWZ5IikuYWRkQ2xhc3MoInNpZ24tc2hvdyIpOw0KICAgICAgICB9ICAgICANCiAgICAgICAgICAgIGlmKGpzb24uc3RhdHVzPT0xKXsNCiAgICAgICAgbGF5ZXIubXNnKCfms6jlhozmiJDlip/vvIzot7PovazkuK0uLi4nLHsNCiAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCiAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgfSAgICAgICAgIA0KICAgICAgICB9LHRydWUpOw0KICB9KTsNCiAgDQogICQoJy5tb2JpbGV2ZXJpZnknKS5jbGljayhmdW5jdGlvbigpew0KICAgICAgdmFyIG1vYmlsZSA9ICQoJ2lucHV0W25hbWU9Im1vYmlsZTIiXScpLnZhbCgpOw0KICAgICAgaWYgKCEvXjFcZHsxMH0kLy50ZXN0KG1vYmlsZSkpIHsgICAgDQogICAgICAgICAgICBsYXllci5tc2coJ+ivt+ato+ehruWhq+WGmeaJi+acuuWPt++8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICB2YXIgcGFzc3dvcmQgPSAkKCdpbnB1dFtuYW1lPSJwYXNzd29yZDEiXScpLnZhbCgpLnRyaW0oKTsNCiAgICAgIGlmICghL14uezYsMTZ9Ly50ZXN0KHBhc3N3b3JkKSkgeyAgIA0KICAgICAgICBsYXllci5tc2coJ+ivt+ato+ehrui+k+WFpeeZu+W9leWvhueggSzoh7PlsJE25L2N5pWw77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIHZhciBwYXNzd29yZDIgPSAkKCdpbnB1dFtuYW1lPSJwYXNzd29yZDIiXScpLnZhbCgpLnRyaW0oKTsNCiAgICAgIGlmICghL14uezYsMTZ9Ly50ZXN0KHBhc3N3b3JkMikpIHsgICAgDQogICAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu6L6T5YWl56Gu6K6k5a+G56CB77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIGlmIChwYXNzd29yZCE9cGFzc3dvcmQyKSB7ICANCiAgICAgICAgbGF5ZXIubXNnKCfmlrDlr4bnoIHkuI7noa7orqTlr4bnoIHkuI3nm7jlkIzvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgIHZhciB2ZXJpZnkgPSAkKCdpbnB1dFtuYW1lPSJtb2JpbGV2ZXJpZnkiXScpLnZhbCgpLnRyaW0oKTsNCiAgICAgIGlmICh2ZXJpZnk9PScnKSB7DQogICAgICAgIGxheWVyLm1zZygn6K+36L6T5YWl5omL5py66aqM6K+B56CB77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICB2YXIgbG9hZHMgPSBsYXllci5sb2FkKDIpOw0KICAgIGNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD1zaG9wd2FwJmRvPXJlZ2lzdGVyJmJlaWQ9MTAiLCB7b3A6J3NtcycsbW9iaWxlOm1vYmlsZSxwYXNzd29yZDpwYXNzd29yZCx2ZXJpZnk6dmVyaWZ5fSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGxheWVyLmNsb3NlKGxvYWRzKTsNCiAgICAgIGlmKGpzb24uc3RhdHVzPT0wKXsNCiAgICAgICAgbGF5ZXIubXNnKGpzb24ucmVzdWx0KTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9ICAgDQogICAgICAgICAgICBpZihqc29uLnN0YXR1cz09MSl7DQogICAgICAgICAgICAgICAgbGF5ZXIubXNnKCfms6jlhozmiJDlip/vvIzot7PovazkuK0uLi4nLHsNCiAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCiAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgfSAgICAgICAgIA0KICAgICAgICB9LHRydWUpOyAgICANCiAgfSk7DQo8L3NjcmlwdD4NCg0KPGRpdiBjbGFzcz0ic2luZ2xlIj4NCiAgIDxkaXYgY2xhc3M9Im1haW4iPg0KCSAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXJmaXgiPg0KCQkgICAgPGRpdiBjbGFzcz0iYnJlYWRjcnVtYnMiPuW9k+WJjeS9jee9ru+8mjxzcGFuPjxhIGhyZWY9Ii4vIj48c3Bhbj7pppbpobU8L3NwYW4+PC9hPjwvc3Bhbj4NCgkJCSAgICA8c3BhbiBjbGFzcz0ic2VwIj48aSBjbGFzcz0iZmEgZmEtYW5nbGUtcmlnaHQiPjwvaT48L3NwYW4+IA0KCQkJCTxzcGFuPjxhIGhyZWY9Ij90eXBlPW5ld3MmaWQ9W1NfaWRdIj4gPHNwYW4+W1NfdGl0bGVdPC9zcGFuPjwvYT48L3NwYW4+IA0KCQkJCTxzcGFuIGNsYXNzPSJzZXAiPjxpIGNsYXNzPSJmYSBmYS1hbmdsZS1yaWdodCI+PC9pPjwvc3Bhbj4gDQoJCQkJPHNwYW4+PGEgaHJlZj0iP3R5cGU9bmV3c2luZm8maWQ9W05faWRdIj48c3Bhbj5bTl90aXRsZV08L3NwYW4+PC9hPjwvc3Bhbj4gDQoJCQk8L2Rpdj4NCgkJICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcCI+DQoJCQkgICAgPGRpdiBjbGFzcz0iY29udGVudCI+DQoJCQkJICAgIDxhcnRpY2xlIGNsYXNzPSJzaW5nbGUtY29udGVudCI+DQoJCSAgICAJCSAgICA8aGVhZGVyIGNsYXNzPSJhcnRpY2xlLWhlYWRlciI+CTxoMSBjbGFzcz0iYXJ0aWNsZS10aXRsZSI+W05fdGl0bGVdPC9oMT4NCgkgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhcnRpY2xlLW1ldGEiPg0KCQkgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbSBwb3N0LXNpZ24iPuaOqOiNkDwvc3Bhbj4JCQ0KCQkJCQkJCQk8c3BhbiBjbGFzcz0iaXRlbSI+PGkgY2xhc3M9Imljb24gaWNvbi10aW1lIj48L2k+IFtOX2RhdGVdPC9zcGFuPgkJDQoJCQkJCQkJCTxzcGFuIGNsYXNzPSJpdGVtIj48aSBjbGFzcz0iaWNvbiBpY29uLWV5ZSI+PC9pPiBbTl92aWV3XTwvc3Bhbj4NCgkJCQkJCQkJPHNwYW4gY2xhc3M9Iml0ZW0iPjxpIGNsYXNzPSJpY29uIGljb24tcG9zdHMiPjwvaT4g77+lW05fcHJpY2VdPC9zcGFuPgkJCQkJCQ0KCQkJCQkJCSAgICA8c3BhbiBjbGFzcz0iaXRlbSBzaGFyZSI+PGkgY2xhc3M9Imljb24gaWNvbi1jb3ZlciI+PC9pPiDliIbkuqs8L3NwYW4+CQ0KCQkJCQkJCTwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+CQkgICAgCQkNCgkJCQkJCTxkaXYgY2xhc3M9ImFydGljbGUtY29udGVudCI+DQoJCSAgICAJCQkgICAgW05fY29udGVudF0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkNCgkJCQkJCQkNCgkJCQkJCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CQkgICAgCQkJDQoNCgkJCQkJCQkJCQkJCQ0KCQkJCQkJPGRpdiBjbGFzcz0iYXJ0aWNsZS1zaGFyZXMiPg0KCQkJCQkJICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9InNoYXJlLXdlaXhpbiIgdGl0bGU9IuWIhuS6q+WIsOW+ruS/oSI+DQoJCQkJCQkJICAgIDxpIGNsYXNzPSJpY29uIGljb24td2VpeGluIj48L2k+DQoJCQkJCQkJPHNwYW4gY2xhc3M9InNoYXJlLXBvcG92ZXIiPjxzcGFuIGNsYXNzPSJzaGFyZS1wb3BvdmVyLWlubmVyIiBpZD0id2VpeGluLXFyY29kZSI+PC9zcGFuPjwvc3Bhbj48L2E+DQoJCQkJCQkJPGEgZGF0YS1zaGFyZT0icXpvbmUiIGNsYXNzPSJzaGFyZS1xem9uZSIgdGl0bGU9IuWIhuS6q+WIsFFR56m66Ze0Ij4NCgkJCQkJCQkgICA8aSBjbGFzcz0iaWNvbiBpY29uLXF6b25lIj48L2k+DQoJCQkJCQkJPC9hPg0KCQkJCQkJCTxhIGRhdGEtc2hhcmU9IndlaWJvIiBjbGFzcz0ic2hhcmUtdHNpbmEiIHRpdGxlPSLliIbkuqvliLDmlrDmtarlvq7ljZoiPg0KCQkJCQkJCSAgICA8aSBjbGFzcz0iaWNvbiBpY29uLXdlaWJvIj48L2k+DQoJCQkJCQkJPC9hPg0KCQkJCQkJCTxhIGRhdGEtc2hhcmU9InFxIiBjbGFzcz0ic2hhcmUtc3FxIiB0aXRsZT0i5YiG5Lqr5YiwUVHlpb3lj4siPg0KCQkJCQkJCQk8aSBjbGFzcz0iaWNvbiBpY29uLXFxIj48L2k+DQoJCQkJCQkJPC9hPg0KCQkJCQkJCTxhIGRhdGEtc2hhcmU9ImRvdWJhbiIgY2xhc3M9InNoYXJlLWRvdWJhbiIgdGl0bGU9IuWIhuS6q+WIsOixhueTo+e9kSI+DQoJCQkJCQkJICAgIDxpIGNsYXNzPSJpY29uIGljb24tZG91YmFuIj48L2k+DQoJCQkJCQkJPC9hPg0KCQkJCQkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImFydGljbGUtY292ZXIgcmlnaHQgc2hhcmUiIHRpdGxlPSLliIbkuqvljaHniYciPg0KCQkJCQkJCSAgICA8aSBjbGFzcz0iaWNvbiBpY29uLWNvdmVyIj48L2k+IOWwgemdouWbvg0KCQkJCQkJCTwvYT4NCgkJCQkJCTwvZGl2Pg0KCQkJCQk8L2FydGljbGU+CQkJCQkJCQkJCQ0KCQkJCQkNCgkJCQkJPG5hdiBjbGFzcz0iYXJ0aWNsZS1uYXYiPg0KCQkJCQkgICAgCQkJCQkJPHNwYW4gY2xhc3M9ImFydGljbGUtbmF2LXByZXYiPuS4iuS4gOevhzxicj4NCgkJCQkJCSAgICA8YSBocmVmPSJbTl9QdXJsXSIgcmVsPSJwcmV2Ij5bTl9QdGl0bGVdPC9hPg0KCQkJCQkJPC9zcGFuPg0KCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImFydGljbGUtbmF2LW5leHQiPuS4i+S4gOevhzxicj4NCgkJCQkJCSAgICA8YSBocmVmPSJbTl9OdXJsXSIgcmVsPSJuZXh0Ij5bTl9OdGl0bGVdPC9hPg0KCQkJCQkJPC9zcGFuPg0KCQkJCQkJCQkJCQk8L25hdj4NCgkJCSAgICA8L2Rpdj4NCgkJICAgIDwvZGl2Pg0KCQkNCgkJICAgIDxhc2lkZSBjbGFzcz0ic2lkZWJhciI+DQoJCQkgICAgPGRpdiBjbGFzcz0idGhlaWFTdGlja3lTaWRlYmFyIj4NCgkJCSAgICAgICAgPGRpdiBjbGFzcz0id2lkZ2V0IHdpZGdldC1lcnBocGRvd24iPg0KCQkJCQkgICAgCQkJCQkgICAgPGZpZWxkc2V0IGNsYXNzPSJlcnBocGRvd24tY2hpbGQiPg0KCQkJCQkgICAgICAgIAkJCQkJCSAgICA8ZGl2IGNsYXNzPSJpdGVtIHZpcCI+VklQ5Lya5ZGY5Y+v5YWN6LS55LiL6L295LiO6L2s5a2YPC9kaXY+CQkJCQkNCgkJCQkJICAgICAgICAJCQkJCQkgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0gdmlwIj48YSBocmVmPSJtZW1iZXIvdmlwLnBocCI+5Yqg5YWl5Lya5ZGYPC9hPjwvZGl2Pg0KCQkJCQkgICAgICAgIAkJCQkJCSAgICAJCQkJCSAgICA8L2ZpZWxkc2V0Pg0KCQkJCQkgICAgPGRpdiBjbGFzcz0idGlwcyI+5pys5YaF5a655Li65LuY6LS55YaF5a6577yM6K+35YWI6LSt5Lmw77yBPC9kaXY+DQoJCQkJCSAgICAJCQkJICAgIDwvZGl2Pg0KCQkJDQoJCQkJICAgIDxkaXYgY2xhc3M9IndpZGdldCB3aWRnZXQtcG9zdGxpc3QiPg0KCQkJCQkgICAgPGgzPjxpIGNsYXNzPSJpY29uIGljb24tcG9zdHMiPjwvaT4g5pyA5paw5Y+R5biDPC9oMz4NCgkJCQkJICAgIDx1bCBjbGFzcz0iY2xlYXJmaXggaGFzaW1nIj4NCg0KDQoJCQkJCSAgICAJICAgIDxmaC1mdW5jdGlvbj4NCiAgICAgICRpPTE7DQogJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9uZXdzLHNsX25zb3J0IHdoZXJlIFNfaWQ9Tl9zb3J0IGFuZCBTX2RlbD0wIGFuZCBOX2RlbD0wICIuJE1fbmluZm8uIiAgb3JkZXIgYnkgTl9kYXRlIGRlc2MgbGltaXQgOCI7DQogICAgICAgICAgc1tbDQoNCg0KICAgICAgJGFwaT0kYXBpLiI8bGkgb25jbGljaz1cImxvY2F0aW9uLmhyZWY9Jz90eXBlPW5ld3NpbmZvJmlkPSIuJHJvd1siTl9pZCJdLiInXCI+DQoJCQkJCQkJPGEgaHJlZj1cIj90eXBlPW5ld3NpbmZvJmlkPSIuJHJvd1siTl9pZCJdLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0aXRsZT1cIiIuJHJvd1siTl90aXRsZSJdLiJcIiBjbGFzcz1cImltZ1wiPg0KCQkJCQkJCQk8aW1nIHNyYz1cIiIucGljKCRyb3dbIk5fcGljIl0pLiJcIiBjbGFzcz1cInRodW1iXCIgYWx0PVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiPg0KCQkJCQkJCTwvYT4NCgkJCQkJCQk8aDQ+PGEgaHJlZj1cIj90eXBlPW5ld3NpbmZvJmlkPSIuJHJvd1siTl9pZCJdLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0aXRsZT1cIiIuJHJvd1siTl90aXRsZSJdLiJcIj4iLiRyb3dbIk5fdGl0bGUiXS4iPC9hPjwvaDQ+DQoJCQkJCQkJPHAgY2xhc3M9XCJtZXRhXCI+DQoJCQkJCQkJCTxzcGFuIGNsYXNzPVwidGltZVwiPjxpIGNsYXNzPVwiaWNvbiBpY29uLXRpbWVcIj48L2k+ICIuZGF0ZSgiWS1tLWQiLHN0cnRvdGltZSgkcm93WyJOX2RhdGUiXSkpLiI8L3NwYW4+IA0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cInZpZXdzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tZXllXCI+PC9pPiAiLiRyb3dbIk5fdmlldyJdLiI8L3NwYW4+IA0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cImNvbW1lbnRzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tcG9zdHNcIj48L2k+IO+/pSIucCgkcm93WyJOX3ByaWNlIl0pLiI8L3NwYW4+DQoJCQkJCQkJPC9wPg0KCQkJCQkJPC9saT4iOw0KDQoNCiAgICAgJGk9JGkrMTsNCiAgICAgXV0NCjwvZmgtZnVuY3Rpb24+DQoNCg0KDQoJCQkJCSAgICAJCQkJCSAgIA0KCQkJCQkgICAgCQ0KCQkgICAgICAgICAgICAgICAgPC91bD4NCgkJICAgICAgICAgICAgPC9kaXY+DQoJCQkJCQ0KDQoJCQkJCTxkaXYgY2xhc3M9IndpZGdldCB3aWRnZXQtcG9zdGxpc3QiPg0KCQkJCQkgICAgPGgzPjxpIGNsYXNzPSJpY29uIGljb24tcG9zdHMiPjwvaT4g5pyA5aSa5rWP6KeIPC9oMz4NCgkJCQkJICAgIDx1bCBjbGFzcz0iY2xlYXJmaXggaGFzaW1nIj4NCg0KDQoJCQkJCSAgICAJICAgIDxmaC1mdW5jdGlvbj4NCiAgICAgICRpPTE7DQogJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9uZXdzLHNsX25zb3J0IHdoZXJlIFNfaWQ9Tl9zb3J0IGFuZCBTX2RlbD0wIGFuZCBOX2RlbD0wICIuJE1fbmluZm8uIiAgb3JkZXIgYnkgTl92aWV3IGRlc2MgbGltaXQgOCI7DQogICAgICAgICAgc1tbDQoNCg0KICAgICAgJGFwaT0kYXBpLiI8bGkgb25jbGljaz1cImxvY2F0aW9uLmhyZWY9Jz90eXBlPW5ld3NpbmZvJmlkPSIuJHJvd1siTl9pZCJdLiInXCI+DQoJCQkJCQkJPGEgaHJlZj1cIj90eXBlPW5ld3NpbmZvJmlkPSIuJHJvd1siTl9pZCJdLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0aXRsZT1cIiIuJHJvd1siTl90aXRsZSJdLiJcIiBjbGFzcz1cImltZ1wiPg0KCQkJCQkJCQk8aW1nIHNyYz1cIiIucGljKCRyb3dbIk5fcGljIl0pLiJcIiBjbGFzcz1cInRodW1iXCIgYWx0PVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiPg0KCQkJCQkJCTwvYT4NCgkJCQkJCQk8aDQ+PGEgaHJlZj1cIj90eXBlPW5ld3NpbmZvJmlkPSIuJHJvd1siTl9pZCJdLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0aXRsZT1cIiIuJHJvd1siTl90aXRsZSJdLiJcIj4iLiRyb3dbIk5fdGl0bGUiXS4iPC9hPjwvaDQ+DQoJCQkJCQkJPHAgY2xhc3M9XCJtZXRhXCI+DQoJCQkJCQkJCTxzcGFuIGNsYXNzPVwidGltZVwiPjxpIGNsYXNzPVwiaWNvbiBpY29uLXRpbWVcIj48L2k+ICIuZGF0ZSgiWS1tLWQiLHN0cnRvdGltZSgkcm93WyJOX2RhdGUiXSkpLiI8L3NwYW4+IA0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cInZpZXdzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tZXllXCI+PC9pPiAiLiRyb3dbIk5fdmlldyJdLiI8L3NwYW4+IA0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cImNvbW1lbnRzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tcG9zdHNcIj48L2k+IO+/pSIucCgkcm93WyJOX3ByaWNlIl0pLiI8L3NwYW4+DQoJCQkJCQkJPC9wPg0KCQkJCQkJPC9saT4iOw0KDQoNCiAgICAgJGk9JGkrMTsNCiAgICAgXV0NCjwvZmgtZnVuY3Rpb24+DQoNCg0KDQoJCQkJCSAgICAJCQkJCSAgIA0KCQkJCQkgICAgCQ0KCQkgICAgICAgICAgICAgICAgPC91bD4NCgkJICAgICAgICAgICAgPC9kaXY+DQoNCgkJCSAgICA8L2Rpdj4NCgkJICAgIDwvYXNpZGU+DQoJICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJ6Y3MiPg0KICAgIDxkaXYgY2xhc3M9InNpZ24iPgkJCQ0KCSAgICA8ZGl2IGNsYXNzPSJzaWduLW1hc2siPjwvZGl2PgkJCQ0KCSAgICA8ZGl2IGNsYXNzPSJzaWduLWJveCI+CQkJCQkNCgkJICAgIDxkaXYgY2xhc3M9InNpZ24taW4iPiAgDQoJCSAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIHRpdGxlIj7ovpPlhaXpgq7nrrE8L2Rpdj4NCgkJCSAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPjxpbnB1dCB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSIiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXovazlrZjnmoTpgq7nrrEiPjxpIGNsYXNzPSJpY29uIGljb24tbWFpbCI+PC9pPjwvZGl2PgkJCQkNCgkJCSAgICA8ZGl2IGNsYXNzPSJidG4gc2lnbmluc3VibWl0LWxvYWRlciBlbWFpbCI+5o+QIOS6pDwvZGl2Pg0KCQkgICAgPC9kaXY+DQoJCSAgICA8ZGl2IGNsYXNzPSJzaWduLXdyYXAiPg0KCQkgICAgICAgIDxkaXYgY2xhc3M9InNpZ24tY2xvc2UiPsOXPC9kaXY+DQoJCSAgICA8L2Rpdj4NCgkgICAgPC9kaXY+CQkNCiAgICA8L2Rpdj4NCjwvZGl2Pg0KCQ0KDQoNCjxkaXYgY2xhc3M9IndwcGF5LWN1c3RvbS1tb2RhbC1ib3ggcGF5dHlwZSI+DQoJPGRpdiBjbGFzcz0id3BwYXktbW9kYWwiPg0KCQk8ZGl2IGNsYXNzPSJsYXl1aS1sYXllci10aXRsZSI+6K+36YCJ5oup5pSv5LuY5pa55byPPC9kaXY+DQoJCTxkaXYgY2xhc3M9ImxheXVpLWxheWVyLXNldHdpbiI+DQoJCSAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIGNsYXNzPSJsYXl1aS1sYXllci1pY28gbGF5dWktbGF5ZXItY2xvc2UxIj48L2E+DQoJCTwvZGl2Pg0KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZ2lkIiB2YWx1ZT0iIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Imd0eXBlIiB2YWx1ZT0iIj4JCQ0KCQk8ZGl2IGNsYXNzPSJlcnBocC13cHBheS1xcmNvZGUgbW9iYW50dS13cHBheSI+DQoJCQkJCTxkaXYgY2xhc3M9InNhdmVwYXkgZXJwaHBkb3duLXR5cGUtbGluayBiZy1waG9uZSIgZGF0YS1jb2RlPSJ4dW5odXBheSI+PGkgY2xhc3M9Imljb24gaWNvbi14dW5odXBheS1jb2xvciI+PC9pPiDlvq7kv6HmlK/ku5g8L2Rpdj4NCgkJCQk8L2Rpdj4NCgkJPGRpdiBjbGFzcz0id3BwYXktZGVzYyI+6Jma5ouf5Lqn5ZOB77yM5LiA57uP5pSv5LuY77yM5qaC5LiN6YCA5qy+77yBPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4NCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KCSQoJy5ncm91cCcpLnVuYmluZCgnY2xpY2snKS5jbGljayhmdW5jdGlvbigpIHsJDQoJCSQoIi5ncm91cHMiKS5zaG93KCk7DQoJfSk7DQogICAgJCgnLnZpcHMnKS51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCXZhciBnaWQgPSAkKHRoaXMpLmRhdGEoJ2dpZCcpOw0KCSAgICAkKCcjZ2lkJykudmFsKGdpZCk7DQoJCSQoJyNndHlwZScpLnZhbCg0KTsNCgkJJCgiLnBheXR5cGUiKS5zaG93KCk7DQoJfSk7DQoJDQogICAgJCgnLmtpZCcpLnVuYmluZCgnY2xpY2snKS5jbGljayhmdW5jdGlvbigpIHsNCgkgICAgJCgnI2dpZCcpLnZhbCgiODc3NCIpOw0KCQkkKCcjZ3R5cGUnKS52YWwoMyk7DQoJCSQoIi5wYXl0eXBlIikuc2hvdygpOw0KCX0pOw0KCQ0KICAgICQoJy5jaWQnKS51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJICAgICQoJyNnaWQnKS52YWwoIjg3NzQiKTsNCgkJJCgnI2d0eXBlJykudmFsKDIpOw0KCQkkKCIucGF5dHlwZSIpLnNob3coKTsNCgl9KTsNCgkNCgkkKCcuYWlkJykudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCSAgICAkKCcjZ2lkJykudmFsKCIxMzA4NDIiKTsNCgkJJCgnI2d0eXBlJykudmFsKDEpOw0KCQkkKCIucGF5dHlwZSIpLnNob3coKTsNCgl9KTsNCg0KCSQoJy5sYXl1aS1sYXllci1pY28nKS51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCSQoIi5wYXl0eXBlIikuaGlkZSgpOw0KCQkkKCIuZ3JvdXBzIikuaGlkZSgpOw0KCX0pOwkNCg0KCSQoJy5zYXZlcGF5JykuY2xpY2soZnVuY3Rpb24gKCkgew0KCQl2YXIgZ2lkID0gJCgnI2dpZCcpLnZhbCgpOw0KCQl2YXIgZ3R5cGUgPSAkKCcjZ3R5cGUnKS52YWwoKTsNCgkJdmFyIHB0eXBlID0gJCh0aGlzKS5kYXRhKCdjb2RlJyk7DQoJCWlmIChnaWQgPT0gJycgfHwgcHR5cGUgPT0gJycgfHwgZ3R5cGUgPT0gJycpIHsNCgkJCWxheWVyLm1zZygn6K+35Yi35paw6YeN6K+VIScpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXZhciBsb2FkcyA9IGxheWVyLmxvYWQoMik7DQoJCWNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD1jb25maXJtJmRvPW9yZGVyJm9wPWNvbmZpcm0mbT1lc2hvcCZiZWlkPTEwIiwge3B0eXBlOnB0eXBlLGdpZDpnaWQsZ3R5cGU6Z3R5cGV9LCBmdW5jdGlvbiAocGpzb24pIHsNCgkJCWxheWVyLmNsb3NlKGxvYWRzKTsNCgkJCWlmIChwanNvbi5zdGF0dXMgPT0gMCl7DQoJCQkJbGF5ZXIubXNnKHBqc29uLnJlc3VsdCk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJaWYgKHBqc29uLnN0YXR1cyA9PSAyKXsNCgkJCQkkKCIucGF5dHlwZSIpLmhpZGUoKTsNCgkJCQlsYXllci5tc2coJ+ivt+WFiOeZu+W9lScpOwkJCQkNCgkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KCQkJICAgICAgICAkKCcuc2lnbmluLWxvYWRlcicpLmNsaWNrKCk7DQoJCSAgICAgICAgfSwgMTAwMCk7CQkJCQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCWlmIChwanNvbi5zdGF0dXMgPT0gMSl7DQoJCQkJaWYgKHB0eXBlID09ICd4dW5odXBheScpew0KCQkJCQlsYXllci5tc2cocGpzb24ucmVzdWx0Lm1zZyx7DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCgkJCQkJICAgIGxvY2F0aW9uLmhyZWYgPSBwanNvbi5yZXN1bHQudXJsOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJICAgIH0NCgkJCQlpZiAocHR5cGUgPT0gJ2NyZWRpdCcpew0KCQkJCQlsYXllci5tc2cocGpzb24ucmVzdWx0Lm1zZyx7DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCgkJCQkJICAgIGxvY2F0aW9uLmhyZWYgPSBwanNvbi5yZXN1bHQudXJsOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJICAgIH0NCgkJCQlsYXllci5tc2cocGpzb24ucmVzdWx0Lm1zZyx7DQogICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQoJCQkJICAgIGxheWVyLm9wZW4oew0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMiwNCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZWE6IFsnMzMwcHgnLCAnNDgwcHgnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZTpmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhcjogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBwanNvbi5yZXN1bHQudXJsICsgJyZ0eXBlPTEnDQogICAgICAgICAgICAgICAgICAgIH0pOw0KCQkJCX0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgIA0KCQkJfQ0KCQkJbGF5ZXIubXNnKCfor7fliLfmlrDph43or5UhJyk7CQkJCQ0KCQl9LCB0cnVlKTsNCgl9KTsNCjwvc2NyaXB0Pg0KDQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCg0KDQoNCg0KCSQoJy5zaGFyZS13ZWl4aW4nKS5lYWNoKGZ1bmN0aW9uKCl7DQoJCWlmKCAhJCh0aGlzKS5maW5kKCcuc2hhcmUtcG9wb3ZlcicpLmxlbmd0aCl7DQoJCQkkKHRoaXMpLmFwcGVuZCgnPHNwYW4gY2xhc3M9InNoYXJlLXBvcG92ZXIiPjxzcGFuIGNsYXNzPSJzaGFyZS1wb3BvdmVyLWlubmVyIiBpZD0id2VpeGluLXFyY29kZSI+PC9zcGFuPjwvc3Bhbj4nKTsNCgkJCQ0KCQl9DQoJfSkNCiAgICAkKCIuYXJ0aWNsZS1zaGFyZXMgYSIpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCl7DQoJCXZhciB0byA9ICQodGhpcykuZGF0YSgnc2hhcmUnKTsgDQoJCXZhciB0aXRsZSA9ICIiOw0KCQl2YXIgZGVzYyA9ICIiOw0KCQl2YXIgcGljID0gIiI7DQoJCXZhciB1cmwgPSAiPGZoLWZ1bmN0aW9uPiRhcGk9JGFwaS5nZXRodHRwKCkuJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10uJzonLiRfU0VSVkVSWydTRVJWRVJfUE9SVCddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddOzwvZmgtZnVuY3Rpb24+IjsNCgkJc3dpdGNoKHRvKXsNCgkJICAgIGNhc2UgJ3FxJzoNCgkJICAgICAgICB1cmwgPSAnaHR0cDovL2Nvbm5lY3QucXEuY29tL3dpZGdldC9zaGFyZXFxL2luZGV4Lmh0bWw/dXJsPScrdXJsKycmZGVzYz0nK2Rlc2MrJyZzdW1tYXJ5PScrdGl0bGUrJyZzaXRlPXplc2hsaWZlJnBpY3M9JytwaWM7DQoJCSAgICAgICAgd2luZG93Lm9wZW4odXJsKTsNCgkJCQlicmVhazsNCgkJICAgIGNhc2UgJ3dlaWJvJzoNCgkJICAgICAgICB1cmwgPSAnaHR0cDovL3NlcnZpY2Uud2VpYm8uY29tL3NoYXJlL3NoYXJlLnBocD90aXRsZT0nK3RpdGxlKycmdXJsPScrdXJsKycmc291cmNlPWJvb2ttYXJrJnBpYz0nK3BpYzsNCgkJICAgICAgICB3aW5kb3cub3Blbih1cmwpOw0KCQkJCWJyZWFrOw0KCQkgICAgY2FzZSAnZG91YmFuJzoNCgkJICAgICAgICB1cmwgPSAnaHR0cDovL3d3dy5kb3ViYW4uY29tL3NoYXJlL3NlcnZpY2U/aW1hZ2U9JytwaWMrJyZocmVmPScrdXJsKycmbmFtZT0nK3RpdGxlKycmdGV4dD0nK2Rlc2M7DQoJCSAgICAgICAgd2luZG93Lm9wZW4odXJsKTsNCgkJCQlicmVhazsNCgkJICAgIGNhc2UgJ3F6b25lJzoNCgkJICAgICAgICB1cmwgPSAnaHR0cDovL3Nucy5xem9uZS5xcS5jb20vY2dpLWJpbi9xenNoYXJlL2NnaV9xenNoYXJlX29uZWtleT91cmw9Jyt1cmwrJyZ0aXRsZT0nK3RpdGxlKycmZGVzYz0nK2Rlc2M7DQoJCSAgICAgICAgd2luZG93Lm9wZW4odXJsKTsNCgkJCQlicmVhazsNCgkJICAgIGNhc2UgJ3RxcSc6DQoJCSAgICAgICAgdXJsID0gJ2h0dHA6Ly9zaGFyZS52LnQucXEuY29tL2luZGV4LnBocD9jPXNoYXJlJmE9aW5kZXgmdXJsPScrdXJsKycmdGl0bGU9Jyt0aXRsZTsNCgkJICAgICAgICB3aW5kb3cub3Blbih1cmwpOw0KCQkJCWJyZWFrOw0KCQkgICAgY2FzZSAncmVucmVuJzoNCgkJICAgICAgICB1cmwgPSAnaHR0cDovL3dpZGdldC5yZW5yZW4uY29tL2RpYWxvZy9zaGFyZT9zcmNVcmw9JytwaWMrJyZyZXNvdXJjZVVybD0nK3VybCsnJnRpdGxlPScrdGl0bGUrJyZkZXNjcmlwdGlvbj0nK2Rlc2M7DQoJCSAgICAgICAgd2luZG93Lm9wZW4odXJsKTsNCgkJCSAgICBicmVhazsJDQoJCX0JCQkNCgl9KTsNCgl2YXIgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZCgnLmJ0bnMnKTsNCgljbGlwYm9hcmQub24oJ3N1Y2Nlc3MnLCBmdW5jdGlvbihlKSB7DQoJCWxheWVyLm1zZygn5o+Q5Y+W5a+G56CB5aSN5Yi25oiQ5YqfJyk7DQoJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQoJCQl3aW5kb3cubG9jYXRpb24gPSBlLnRyaWdnZXIuZGF0YXNldC5jbGlwYm9hcmRVcmw7DQoJCX0sIDEwMDApOw0KCX0pOw0KCWNsaXBib2FyZC5vbignZXJyb3InLCBmdW5jdGlvbihlKSB7DQoJCWxheWVyLm1zZygn5o+Q5Y+W5a+G56CB5aSN5Yi25aSx6LSlJyk7DQoJfSk7DQogICAgJCgnLnpodWFuY3VuJykuY2xpY2soZnVuY3Rpb24gKCkgew0KCSAgICQoIi56Y3MiKS5hZGRDbGFzcygic2lnbi1zaG93Iik7DQoJfSk7DQoJJCgnLnNpZ24tY2xvc2UnKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJICAgJCgiLnpjcyIpLnJlbW92ZUNsYXNzKCJzaWduLXNob3ciKTsNCgl9KTsNCiAgICAkKCcubm96YycpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCgkgICBsYXllci5tc2coJ+adg+mZkOS4jei2syzor7flvIDpgJpWSVDkvJrlkZjmiJbljZXni6zotK3kubDvvIEnKTsNCgl9KTsNCgkkKCcuZW1haWwnKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJCXZhciBlbWFpbCA9ICQoJ2lucHV0W25hbWU9ImVtYWlsIl0nKS52YWwoKTsNCgkJaWYgKGVtYWlsID09ICcnKSB7DQoJCQlsYXllci5tc2coJ+ivt+i+k+WFpei9rOWtmOeahOmCrueusSEnKTsNCgkJCXJldHVybjsNCgkJfQ0KCQlpZiAoIWVtYWlsLm1hdGNoKC9eXHcrQFx3K1wuXHcrJC9pKSl7DQoJCQlsYXllci5tc2coJ+mCrueuseagvOW8j+S4jeato+ehriEnKTsNCgkJCXJldHVybjsNCiAgICAgICAgfQ0KCQl2YXIgbG9hZHMgPSBsYXllci5sb2FkKDIpOw0KCQljb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9YXJ0aWNsZSZkbz1hcnRpY2xlJm9wPWVtYWlsJm09ZXNob3AmaWQ9MTMwODQyJmJlaWQ9MTAiLCB7ZW1haWw6ZW1haWx9LCBmdW5jdGlvbiAocGpzb24pIHsNCgkJCWxheWVyLmNsb3NlKGxvYWRzKTsNCgkJCWlmIChwanNvbi5zdGF0dXMgPT0gMCl7DQoJCQkJbGF5ZXIubXNnKHBqc29uLnJlc3VsdCk7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KCQkJaWYgKHBqc29uLnN0YXR1cyA9PSAyKXsNCgkJCQlsYXllci5tc2coJ+ivt+WFiOeZu+W9lScpOwkJCQkNCgkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KCQkJICAgICAgICAkKCcuc2lnbmluLWxvYWRlcicpLmNsaWNrKCk7DQoJCSAgICAgICAgfSwgMTAwMCk7CQkJCQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCWlmIChwanNvbi5zdGF0dXMgPT0gMSl7DQoJCQkJJCgiLnpjcyIpLnJlbW92ZUNsYXNzKCJzaWduLXNob3ciKTsNCgkJCQlsYXllci5tc2coJ+i9rOWtmOaIkOWKn++8jOWPkemAgeWkp+e6pumcgDMtNeWIhumSn++8jOivt+azqOaEj+afpeaUtu+8gScpOwkJCQkNCgkJCQlyZXR1cm47ICAgICAgICAgICAgICAgICANCgkJCX0NCgkJCWxheWVyLm1zZygn6K+35Yi35paw6YeN6K+VIScpOwkJCQkNCgkJfSwgdHJ1ZSk7DQoJfSk7DQoJDQoJJCgnLmFydGljbGUtY29sbGVjdCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCgkJdmFyIGdpZCA9ICQodGhpcykuZGF0YSgnaWQnKTsNCgkJdmFyIGN0eXBlID0gJCgnI2N0eXBlJykudmFsKCk7DQoJCWlmIChnaWQgPT0gJycpIHsNCgkJCWxheWVyLm1zZygn6K+35Yi35paw6YeN6K+VIScpOw0KCQkJcmV0dXJuOw0KCQl9DQoJCXZhciBsb2FkcyA9IGxheWVyLmxvYWQoMik7DQoJCWNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD11dGlsaXR5JmRvPXNhdmVzJm9wPWNvbGxlY3QmYmVpZD0xMCIsIHtnaWQ6Z2lkLGd0eXBlOjEsY3R5cGU6Y3R5cGV9LCBmdW5jdGlvbiAocGpzb24pIHsNCgkJCWxheWVyLmNsb3NlKGxvYWRzKTsNCgkJCWlmIChwanNvbi5zdGF0dXMgPT0gMil7DQoJCQkJbGF5ZXIubXNnKCfor7flhYjnmbvlvZUnKTsJCQkJDQoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsNCgkJCSAgICAgICAgJCgnLnNpZ25pbi1sb2FkZXInKS5jbGljaygpOw0KCQkgICAgICAgIH0sIDEwMDApOwkJCQkNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQlpZiAocGpzb24uc3RhdHVzID09IDEpew0KCQkJCWxheWVyLm1zZyhwanNvbi5yZXN1bHQpOw0KCQkJCXZhciBjdHlwZSA9ICQoJyNjdHlwZScpLnZhbCgxKTsNCgkJCQkkKCIuYXJ0aWNsZS1jb2xsZWN0IikuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KCQkJCSQoIi5hcnRpY2xlLWNvbGxlY3Qgc3BhbiIpLmh0bWwoJ+W3suaUtuiXjycpOwkJCQ0KCQkJfQ0KCQkJaWYgKHBqc29uLnN0YXR1cyA9PSAwKXsNCgkJCQlsYXllci5tc2cocGpzb24ucmVzdWx0KTsNCgkJCQl2YXIgY3R5cGUgPSAkKCcjY3R5cGUnKS52YWwoMCk7DQoJCQkJJCgiLmFydGljbGUtY29sbGVjdCIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCgkJCQkkKCIuYXJ0aWNsZS1jb2xsZWN0IHNwYW4iKS5odG1sKCfmlLbol48nKTsJCQkJDQoJCQl9DQoJCX0sIHRydWUpOw0KCX0pOwkNCg0KPC9zY3JpcHQ+DQoNCg0KDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLndpZGdldC1ib3R0b20tbG9nbyAuZm9vdGVyLWxvZ28gaW1ne3dpZHRoOiBhdXRvfQ0KPC9zdHlsZT4NCjxmb290ZXIgY2xhc3M9ImZvb3RlciI+DQoJPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCgkJPGRpdiBjbGFzcz0iZm9vdGVyLXdpZGdldHMiPg0KCQkJPGRpdiBjbGFzcz0iZm9vdGVyLXdpZGdldCB3aWRnZXQtYm90dG9tIHdpZGdldC1ib3R0b20tbG9nbyI+DQoJCQkJPHNwYW4gY2xhc3M9ImZvb3Rlci1sb2dvIGxlZnQiPg0KCQkJCSAgICA8aW1nIHNyYz0ibWVkaWEvMjAxOTExMjYyMjQzNTJXZi5qcGciIGFsdD0i5oKo55qE572R56uZ5ZCN56ewIj4NCgkJCQkJPHA+5b6u5L+h54mIPC9wPg0KCQkJCTwvc3Bhbj4JCQkNCgkJCSAgICA8c3BhbiBjbGFzcz0iZm9vdGVyLWxvZ28gbW9iaWxlIj4NCg0KCQkJICAgIAk8ZGl2ICBpZD0iYmlsbEltYWdleCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjogdG9wO2JhY2tncm91bmQ6ICNmZmY7cGFkZGluZzogNXB4IDVweCAwIDVweDt3aWR0aDogMTIwcHg7aGVpZ2h0OiAxMjBweCI+PC9kaXY+DQoNCgkJCQkJPHA+5omL5py654mIPC9wPg0KCQkJCTwvc3Bhbj4NCgkJCTwvZGl2Pg0KCQkJPGRpdiBjbGFzcz0iZm9vdGVyLXdpZGdldCB3aWRnZXQtYm90dG9tIj4NCgkJCQk8aDM+5YWz5LqOPC9oMz4NCgkJCQk8ZGl2IGNsYXNzPSJmb290ZXItd2lkZ2V0LWNvbnRlbnQiPg0KCQkJCQk8dWw+DQoJCQkJCQk8ZmgtZnVuY3Rpb24+DQoJCQkJCQkJJHNxbD0ic2VsZWN0ICogZnJvbSBzbF90ZXh0IHdoZXJlIFRfZGVsPTAiOw0KCQkJCQkJCXNbWw0KCQkJCQkJCQkkYXBpPSRhcGkuIjxsaT48YSBocmVmPVwiP3R5cGU9dGV4dCZpZD0iLiRyb3dbIlRfaWQiXS4iXCI+Ii4kcm93WyJUX3RpdGxlIl0uIjwvYT48L2xpPiI7DQoJCQkJCQkJXV0NCgkJCQkJCTwvZmgtZnVuY3Rpb24+DQoNCgkJCQkJCQkJCQk8L3VsPg0KCQkJCTwvZGl2Pg0KCQkJPC9kaXY+DQoJCQk8ZGl2IGNsYXNzPSJmb290ZXItd2lkZ2V0IHdpZGdldC1ib3R0b20iPg0KCQkJCTxoMz7liIbnsbs8L2gzPg0KCQkJCTxkaXYgY2xhc3M9ImZvb3Rlci13aWRnZXQtY29udGVudCI+DQoJCQkJCTx1bD4NCgkJCQkJCTxmaC1mdW5jdGlvbj4NCgkJCQkJCQkkc3FsPSJzZWxlY3QgKiBmcm9tIHNsX25zb3J0IHdoZXJlIFNfc3ViPTAgYW5kIFNfZGVsPTAgb3JkZXIgYnkgU19vcmRlcixTX2lkIGRlc2MiOw0KCQkJCQkJCXNbWw0KCQkJCQkJCQkkYXBpPSRhcGkuIjxsaT48YSBocmVmPVwiP3R5cGU9bmV3cyZpZD0iLiRyb3dbIlNfaWQiXS4iXCI+Ii4kcm93WyJTX3RpdGxlIl0uIjwvYT48L2xpPiI7DQoJCQkJCQkJXV0NCgkJCQkJCTwvZmgtZnVuY3Rpb24+DQoNCgkJCQkJCQkJCQk8L3VsPg0KCQkJCTwvZGl2Pg0KCQkJPC9kaXY+DQoJCQk8ZGl2IGNsYXNzPSJmb290ZXItd2lkZ2V0IHdpZGdldC1ib3R0b20gd2lkZ2V0LWJvdHRvbS1zZWFyY2giPg0KCQkJCTxoMz7mkJzntKI8L2gzPg0KCQkJCTxkaXYgY2xhc3M9ImZvb3Rlci13aWRnZXQtY29udGVudCI+DQoJCQkJCTxkaXYgY2xhc3M9InNlYXJjaGZvcm0gY2xlYXJmaXgiPg0KCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIGlkPSJuYW1lcyIgcGxhY2Vob2xkZXI9Iui+k+WFpeWFs+mUruivje+8jOWkmuS4quWFs+mUruivjeeUqOepuuagvOWIhuW8gCI+DQoJCQkJCQk8YnV0dG9uIGlkPSJzZWFyY2giIHR5cGU9InN1Ym1pdCI+PGkgY2xhc3M9Imljb24gaWNvbi1zZWFyY2giPjwvaT48L2J1dHRvbj4NCgkJCQkJPC9kaXY+DQoJCQkJCTxwPuWPkei0pzEwMC3omZrmi5/llYblk4Hoh6rliqjlj5HotKfns7vnu588L3A+DQoJCQkJPC9kaXY+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJCTxkaXYgY2xhc3M9ImZvb3Rlci1saW5rcyI+DQoJCQk8dWw+DQoJCQkJPGxpPuWPi+aDhemTvuaOpe+8mjwvbGk+DQoJCQkJPGZoLWZ1bmN0aW9uPg0KICAgICAgICAkc3FsPSJzZWxlY3QgKiBmcm9tIHNsX2xpbmsgd2hlcmUgTF9kZWw9MCBvcmRlciBieSBMX2lkIGRlc2MiOw0KICAgICAgICBzW1skYXBpPSRhcGkuIjxsaT48YSBocmVmPVwiIi4kcm93WyJMX2xpbmsiXS4iXCIgdGFyZ2V0PVwiX2JsYW5rXCI+Ii4kcm93WyJMX3RpdGxlIl0uIjwvYT48L2xpPiI7XV0NCiAgICAgICAgPC9maC1mdW5jdGlvbj4NCgkJCQkJCQk8L3VsPg0KCQk8L2Rpdj4NCgkJPHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0IMKpIDIwMTQtMjAxNyDmt4TljZrpl6rngbXnvZHnu5znp5HmioDmnInpmZDlhazlj7gg54mI5p2D5omA5pyJIDxhIGhyZWY9Imh0dHA6Ly9iZWlhbi5taWl0Lmdvdi5jbi8iIHRhcmdldD0iX2JsYW5rIj7psoFJQ1DlpIcxNTAxNTEzN+WPty0yIDwvYT48L3A+DQoJPC9kaXY+DQo8L2Zvb3Rlcj4NCjxkaXYgY2xhc3M9InJvbGxiYXIiPg0KCTx1bD4NCgkJPGxpIGNsYXNzPSJ2aXAtbGkiPg0KCQkgICAgPGEgaHJlZj0ibWVtYmVyL3ZpcC5waHAiPjxpIGNsYXNzPSJpY29uIGljb24tY3Jvd24tcyI+PC9pPjwvYT4NCgkJCTxoNj7ljYfnuqdWSVA8aT48L2k+PC9oNj4NCgkJPC9saT4NCgkJPGxpIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQoJCSAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIGNsYXNzPSJkYXktY2hlY2tpbiI+PGkgY2xhc3M9Imljb24gaWNvbi1jYWxlbmRhciI+PC9pPjwvYT4NCgkJCTxoNj7mr4/ml6Xnrb7liLA8aT48L2k+PC9oNj4NCgkJPC9saT4NCgkJPGxpIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQoJCSAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iaWNvbiBpY29uLXFxIj48L2k+PC9hPg0KCQkJPGg2PuiBlOezu1FRPGk+PC9pPjwvaDY+DQoJCTwvbGk+DQoJCTxsaT4NCgkJICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImtlZnVfd2VpeGluIj48aSBjbGFzcz0iaWNvbiBpY29uLXdlaXhpbiI+PC9pPg0KCQkJICAgIDxpbWcgc3JjPSJtZWRpYS8yMDE5MTEyNjIyNDM1MldmLmpwZyI+DQoJCQk8L2E+DQoJCTwvbGk+DQoNCgkJPGxpIGNsYXNzPSJ0b3RvcC1saSIgc3R5bGU9ImRpc3BsYXk6IGxpc3QtaXRlbTsiPg0KCQkgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0idG90b3AiPjxpIGNsYXNzPSJpY29uIGljb24tYXJyb3ctdXAiPjwvaT48L2E+DQoJCQk8aDY+6L+U5Zue6aG26YOoPGk+PC9pPjwvaDY+DQoJCTwvbGk+DQoJPC91bD4NCjwvZGl2Pg0KCQkNCjxkaXYgY2xhc3M9InNoYXJlcyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCiAgICA8ZGl2IGNsYXNzPSJtb2JpbGUtc2hhcmUtYmciPjwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9Im1vYmlsZS1zaGFyZS13cmFwIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLWNvbnRhaW5lciIgaWQ9InJvdGF0ZS1zd2lwZXIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItd3JhcHBlciIgaWQ9InBvc3RlciI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItc2xpZGUgcm90YXRlLXNsaWRlIj4NCgkgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+DQoJCQkJICAgIDxkaXYgY2xhc3M9ImZvb3RlcnMiPuWIhuS6q+a1t+aKpeato+WcqOeUn+aIkOS4rS4uLjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9pbWcvc2N6LmdpZiI+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1wYWdpbmF0aW9uIiBpZD0icm90YXRlLXBhZ2luYXRpb24iPjwvZGl2Pg0KCQk8ZGl2IGNsYXNzPSJzd2lwZXItYnV0dG9uLW5leHQiPjwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItYnV0dG9uLXByZXYiPjwvZGl2Pg0KICAgICAgICA8L2Rpdj4JDQogICAgICAgIDxkaXYgY2xhc3M9Im1vYmlsZS1zaGFyZS1jbG9zZSI+w5c8L2Rpdj4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KCQ0KDQo8c2NyaXB0IHNyYz0ianMvcXJjb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4JCQ0KDQoJJCgnLnNoYXJlJykuY2xpY2soZnVuY3Rpb24gKCkgew0KCSAgICBjb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9dXRpbGl0eSZkbz1zaGFyZSZvcD10d28mYmVpZD0xMCIsIHt0eXBlOicxJyxpZDonJ30sIGZ1bmN0aW9uIChzanNvbikgew0KCQkgICAgaWYoc2pzb24uc3RhdHVzPT0xKXsNCgkJCQkkKCcjcG9zdGVyJykuaHRtbCh0cGwoJ3RwbF9wb3N0ZXInLHNqc29uLnJlc3VsdCkpOw0KCQkJCXZhciBjbGlwYm9hcmQgPSBuZXcgQ2xpcGJvYXJkKCcuZnpsaicpOw0KICAgICAgICAgICAgICAgIGNsaXBib2FyZC5vbignc3VjY2VzcycsIGZ1bmN0aW9uKGUpIHsNCgkJICAgICAgICAgICAgbGF5ZXIubXNnKCfpk77mjqXlpI3liLbmiJDlip8nKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB2YXIgc3dpcGVyID0gbmV3IFN3aXBlcignI3JvdGF0ZS1zd2lwZXInLCB7DQogICAgCSAgICAgICAgICAgIHBhZ2luYXRpb246IHsNCiAgICAJCSAgICAgICAgICAgIGVsOiAnI3JvdGF0ZS1wYWdpbmF0aW9uJywNCgkJCQkJCXR5cGU6ICdmcmFjdGlvbicsDQogICAgCSAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbDogJy5zd2lwZXItYnV0dG9uLW5leHQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgcHJldkVsOiAnLnN3aXBlci1idXR0b24tcHJldicsDQogICAgICAgICAgICAgICAgICAgIH0sDQogICAgCSAgICAgICAgICAgIHJ1bkNhbGxiYWNrc09uSW5pdDogdHJ1ZSwNCiAgICAJICAgICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSwNCiAgICAJICAgICAgICAgICAgb246IHsNCiAgICAJCSAgICAgICAgICAgIHByb2dyZXNzOiBmdW5jdGlvbigpIHsNCiAgICAJCQkgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRoaXMuc2xpZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgCQkJCSAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcyA8PSAwKSB7DQogICAgCQkJCQkgICAgICAgICAgICB0aGlzLnNsaWRlcy5lcShpKS5maW5kKCIuYmxvY2siKS50cmFuc2l0aW9uKDApLnRyYW5zZm9ybSgicm90YXRlWigiICsgMTMgKiBNYXRoLmFicyh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcykgKyAiZGVnKSB0cmFuc2xhdGUzZCgwLCAwLCAwKSIpDQogICAgCQkJCSAgICAgICAgICAgIH0NCiAgICAJCQkgICAgICAgICAgICB9DQogICAgCQkgICAgICAgICAgICB9LA0KICAgIAkJICAgICAgICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24odHJhbnNpdGlvbikgew0KICAgIAkJCSAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyBpKyspIHsNCiAgICAJCQkJICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzIDw9IDApIHsNCiAgICAJCQkJCSAgICAgICAgICAgIHJvdCA9IDEzICogTWF0aC5hYnModGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MpOw0KICAgIAkJCQkJICAgICAgICAgICAgdGhpcy5zbGlkZXMuZXEoaSkuZmluZCgiLmJsb2NrIikudHJhbnNpdGlvbih0cmFuc2l0aW9uKS50cmFuc2Zvcm0oInJvdGF0ZVooIiArIHJvdCArICJkZWcpIHRyYW5zbGF0ZTNkKDAsIDAsIDApIikNCiAgICAJCQkJICAgICAgICAgICAgfQ0KICAgIAkJCSAgICAgICAgICAgIH0NCiAgICAJCSAgICAgICAgICAgIH0sDQoNCiAgICAJICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICB9KTsJDQoJICAgICAgICB9DQoJCQlpZihzanNvbi5zdGF0dXM9PTApew0KCQkJCSQoJyNwb3N0ZXInKS5odG1sKHRwbCgndHBsX2VtcHR5cycsc2pzb24ucmVzdWx0KSk7DQoJCQkJdmFyIGNsaXBib2FyZCA9IG5ldyBDbGlwYm9hcmQoJy5memxqJyk7DQogICAgICAgICAgICAgICAgY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24oZSkgew0KCQkgICAgICAgICAgICBsYXllci5tc2coJ+mTvuaOpeWkjeWItuaIkOWKnycpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHZhciBzd2lwZXIgPSBuZXcgU3dpcGVyKCcjcm90YXRlLXN3aXBlcicsIHsNCiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbjogew0KICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVsOiAnLnN3aXBlci1idXR0b24tbmV4dCcsDQogICAgICAgICAgICAgICAgICAgICAgICBwcmV2RWw6ICcuc3dpcGVyLWJ1dHRvbi1wcmV2JywNCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAJICAgICAgICAgICAgcnVuQ2FsbGJhY2tzT25Jbml0OiB0cnVlLA0KICAgIAkgICAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLA0KICAgIAkgICAgICAgICAgICBvbjogew0KICAgIAkJICAgICAgICAgICAgcHJvZ3Jlc3M6IGZ1bmN0aW9uKCkgew0KICAgIAkJCSAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyBpKyspIHsNCiAgICAJCQkJICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzIDw9IDApIHsNCiAgICAJCQkJCSAgICAgICAgICAgIHRoaXMuc2xpZGVzLmVxKGkpLmZpbmQoIi5ibG9jayIpLnRyYW5zaXRpb24oMCkudHJhbnNmb3JtKCJyb3RhdGVaKCIgKyAxMyAqIE1hdGguYWJzKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzKSArICJkZWcpIHRyYW5zbGF0ZTNkKDAsIDAsIDApIikNCiAgICAJCQkJICAgICAgICAgICAgfQ0KICAgIAkJCSAgICAgICAgICAgIH0NCiAgICAJCSAgICAgICAgICAgIH0sDQogICAgCQkgICAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbih0cmFuc2l0aW9uKSB7DQogICAgCQkJICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnNsaWRlcy5sZW5ndGg7IGkrKykgew0KICAgIAkJCQkgICAgICAgICAgICBpZiAodGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MgPD0gMCkgew0KICAgIAkJCQkJICAgICAgICAgICAgcm90ID0gMTMgKiBNYXRoLmFicyh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcyk7DQogICAgCQkJCQkgICAgICAgICAgICB0aGlzLnNsaWRlcy5lcShpKS5maW5kKCIuYmxvY2siKS50cmFuc2l0aW9uKHRyYW5zaXRpb24pLnRyYW5zZm9ybSgicm90YXRlWigiICsgcm90ICsgImRlZykgdHJhbnNsYXRlM2QoMCwgMCwgMCkiKQ0KICAgIAkJCQkgICAgICAgICAgICB9DQogICAgCQkJICAgICAgICAgICAgfQ0KICAgIAkJICAgICAgICAgICAgfSwNCg0KICAgIAkgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIH0pOwkNCgkgICAgICAgIH0NCgkgICAgfSx0cnVlKTsNCgkJJCgiLnNoYXJlcyIpLnNob3coKTsNCgl9KTsNCgkNCiAgICAkKCcubW9iaWxlLXNoYXJlLWNsb3NlJykuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkkKCIuc2hhcmVzIikuaGlkZSgpOw0KCX0pOwkNCjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgICQoIiNuYW1lcyIsKS5vbigna2V5cHJlc3MnLGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgdmFyIGtleWNvZGUgPSBlLmtleUNvZGU7DQogICAgICAgIGlmKGtleWNvZGU9PScxMycpIHsgIA0KICAgICAgICAgICAgJCgnI3NlYXJjaCcpLmNsaWNrKCk7ICAgICANCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICQoIiNuYW1lczEiKS5vbigna2V5cHJlc3MnLGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgdmFyIGtleWNvZGUgPSBlLmtleUNvZGU7DQoJCXZhciBzZWFyY2hrZXkgPSAkLnRyaW0oJCgiI25hbWVzMSIpLnZhbCgpKTsNCiAgICAgICAgaWYoa2V5Y29kZT09JzEzJykgeyAgDQogICAgICAgICAgICBpZihzZWFyY2hrZXkgPT0gJycpewkNCgkJCSAgICBsYXllci5tc2coJ+ivt+i+k+WFpeaQnOe0ouWFs+mUruivjScpOw0KCQkgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiP3R5cGU9c2VhcmNoJmtleXdvcmQ9IitzZWFyY2hrZXk7DQoJCSAgICB9ICAgICANCiAgICAgICAgfQ0KICAgIH0pOwkNCgkkKCIjc2VhcmNoIikuY2xpY2soZnVuY3Rpb24oKXsJCQ0KCQl2YXIgc2VhcmNoa2V5ID0gJC50cmltKCQoIiNuYW1lcyIpLnZhbCgpKTsNCgkJaWYoc2VhcmNoa2V5ID09ICcnKXsJDQoJCQlsYXllci5tc2coJ+ivt+i+k+WFpeaQnOe0ouWFs+mUruivjScpOw0KCQl9ZWxzZXsNCiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIj90eXBlPXNlYXJjaCZrZXl3b3JkPSIrc2VhcmNoa2V5Ow0KCQl9DQoJfSk7DQoJDQoJJCgiLm5hdi1zZWFyY2giKS5jbGljayhmdW5jdGlvbigpew0KCQkkKCIuc2VhcmNoLXdyYXAiKS5hZGRDbGFzcygnc2hvdycpOw0KCX0pOwkNCgkkKCIuc2VhcmNoLWZvcm0gaSIpLmNsaWNrKGZ1bmN0aW9uKCl7DQoJCSQoIi5zZWFyY2gtd3JhcCIpLnJlbW92ZUNsYXNzKCdzaG93Jyk7DQoJfSk7DQoNCgkkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCkgew0KCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPiAxNTAgPyBqUXVlcnkoJy50b3RvcC1saScpLnNob3coKSA6IGpRdWVyeSgnLnRvdG9wLWxpJykuaGlkZSgpOw0KCX0pOw0KCSQoIi50b3RvcCIpLmNsaWNrKGZ1bmN0aW9uKCl7DQoJCXdpbmRvdy5zY3JvbGxUbygwLDApOw0KCX0pOw0KDQoJdmFyIHFyY29kZXggPSBuZXcgUVJDb2RlKCdiaWxsSW1hZ2V4Jywge3dpZHRoOiAxMTAsaGVpZ2h0OiAxMTAsY29sb3JEYXJrOiAnIzAwMDAwMCcsY29sb3JMaWdodDogJyNmZmZmZmYnLGNvcnJlY3RMZXZlbDogUVJDb2RlLkNvcnJlY3RMZXZlbC5IfSk7DQpxcmNvZGV4Lm1ha2VDb2RlKCI8ZmgtZnVuY3Rpb24+JGFwaT0kYXBpLmdldGh0dHAoKS4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4nOicuJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10uJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107PC9maC1mdW5jdGlvbj4iKTsNCg0KPC9zY3JpcHQ+DQo8c2NyaXB0Pg0KCXZhciBxcmNvZGV5ID0gbmV3IFFSQ29kZSgnd2VpeGluLXFyY29kZScsIHt3aWR0aDogODAsaGVpZ2h0OiA4MCxjb2xvckRhcms6ICcjMDAwMDAwJyxjb2xvckxpZ2h0OiAnI2ZmZmZmZicsY29ycmVjdExldmVsOiBRUkNvZGUuQ29ycmVjdExldmVsLkh9KTsNCnFyY29kZXkubWFrZUNvZGUoIjxmaC1mdW5jdGlvbj4kYXBpPSRhcGkuZ2V0aHR0cCgpLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLic6Jy4kX1NFUlZFUlsnU0VSVkVSX1BPUlQnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTs8L2ZoLWZ1bmN0aW9uPiIpOw0KPC9zY3JpcHQ+DQo8L2JvZHk+PC9odG1sPg==