e4b6d6aeb3c57ab196438b068fcbb7c7PCEtLWZjNGZCRTFMV1ZTZS9RUHI3Y1p1U1RjM1NQNDJWU3hmbHFrNjdoRW1TWHdkTFpDSHF5WjY5OVc3cjVRUElmb1dPbi95MEpySTc1anVnODJFTE5NOHhKSHd1WmpLTzY5S3UwbWx5LzFydE5Qc0wzdmZUYUFOLzNmb3NEQTA4M3VTWmFoYkVYQTdoR0YyamlpNzBvUXgyaWJJWDgzODNVa0xUdnB3eUJDcTN5L2xNV0dBSmJyYUQ0QzNSMFhRbFNuOGZ2RE1jYUxQTGY1aXZSdy0tPjxmaC1mdW5jdGlvbj4NCiRjb25maWc9anNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoImNvbm4vY29uZmlnLmpzb24iKSk7DQoNCiRwYWdlPSRfR0VUWyJwYWdlIl07DQokdGFnPXQoJF9HRVRbInRhZyJdKTsNCg0KJHVybD1nZXRodHRwKCkuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiRfU0VSVkVSWydQSFBfU0VMRiddLic/Jy4kX1NFUlZFUlsnUVVFUllfU1RSSU5HJ107DQpmdW5jdGlvbiB1cmwoJHVybCwka2V5LCR2YWx1ZSl7DQogICR1cmw9c3RyX3JlcGxhY2UoIiYiLiRrZXkuIj0iLnN0cl9yZXBsYWNlKCIlM0EiLCI6Iix1cmxlbmNvZGUoJHZhbHVlKSksIiIsJHVybCk7DQogIHJldHVybiAkdXJsOw0KfQ0KDQppZigkdGFnPT0iIil7DQogICR0YWdpbmZvPSIiOw0KfWVsc2V7DQogICR0YWdpbmZvPSIgYW5kIENPTkNBVChcIiBcIixOX3RhZyxcIiBcIikgbGlrZSAnJSAiLiR0YWcuIiAlJyI7DQp9DQoNCiRNX2lkPWludHZhbCgkX0dFVFsiTV9pZCJdKTsNCmlmKCRwYWdlPT0iIil7DQogICRwYWdlPTE7DQp9DQoNCmlmKCRNX2lkIT0wKXsNCiAgJE1faW5mbz0iIGFuZCBOX21pZD0kTV9pZCIuJHRhZ2luZm87DQp9ZWxzZXsNCiAgJE1faW5mbz0iIGFuZCBOX3NoPTEiLiR0YWdpbmZvOw0KfQ0KDQokc3FsPSJzZWxlY3QgKiBmcm9tIHNsX25zb3J0IHdoZXJlIFNfaWQ9Ii4kaWQ7DQogICRyZXN1bHQgPSBteXNxbGlfcXVlcnkoJGNvbm4sICRzcWwpOw0KICAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRyZXN1bHQpOw0KICBpZiAobXlzcWxpX251bV9yb3dzKCRyZXN1bHQpID4gMCkgew0KICAgICRTX3N1Yj0kcm93WyJTX3N1YiJdOw0KICB9DQoNCmlmKCRpZD09MCl7DQogICRzcWw9InNlbGVjdCBjb3VudChOX2lkKSBhcyBOX2NvdW50IGZyb20gc2xfbmV3cyB3aGVyZSBOX2RlbD0wICIuJE1fbmluZm8uIiAgJE1faW5mbyBvcmRlciBieSBOX3RvcCBkZXNjLE5fb3JkZXIsTl9pZCBkZXNjIjsNCn1lbHNlew0KICBpZigkU19zdWI9PTApew0KICAgICRzcWw9InNlbGVjdCBjb3VudChOX2lkKSBhcyBOX2NvdW50IGZyb20gc2xfbmV3cyxzbF9uc29ydCB3aGVyZSBTX2RlbD0wICRNX2luZm8gYW5kIE5fZGVsPTAgIi4kTV9uaW5mby4iICBhbmQgTl9zb3J0PVNfaWQgYW5kIFNfc3ViPSIuJGlkLiIgb3JkZXIgYnkgTl90b3AgZGVzYyxOX29yZGVyLE5faWQgZGVzYyI7DQogIH1lbHNlew0KICAgICRzcWw9InNlbGVjdCBjb3VudChOX2lkKSBhcyBOX2NvdW50IGZyb20gc2xfbmV3cyxzbF9uc29ydCB3aGVyZSBTX2RlbD0wICRNX2luZm8gYW5kIE5fZGVsPTAgIi4kTV9uaW5mby4iICBhbmQgTl9zb3J0PVNfaWQgYW5kIFNfaWQ9Ii4kaWQuIiBvcmRlciBieSBOX3RvcCBkZXNjLE5fb3JkZXIsTl9pZCBkZXNjIjsNCiAgfQ0KfQ0KDQokcmVzdWx0ID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCAkc3FsKTsNCiRyb3cgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7DQokTl9jb3VudD0kcm93WyJOX2NvdW50Il07DQoNCiRwYWdlX251bT1pbnR2YWwoJE5fY291bnQvMTYpKzE7DQppZigkTl9jb3VudCUxNiA9PTApew0KICAkcGFnZV9udW09JHBhZ2VfbnVtLTE7DQp9DQoNCjwvZmgtZnVuY3Rpb24+DQo8IURPQ1RZUEUgSFRNTD4NCjxodG1sPjxoZWFkPg0KCQk8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQoJCTxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+DQoJCTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsbWluaW11bS1zY2FsZT0xLjAsbWF4aW11bS1zY2FsZT0xLjAsdXNlci1zY2FsYWJsZT1ubyI+DQoJCTxtZXRhIG5hbWU9ImFwcGxlLW1vYmlsZS13ZWItYXBwLXRpdGxlIiBjb250ZW50PSJNb2Rvd24iPg0KCQk8bWV0YSBodHRwLWVxdWl2PSJDYWNoZS1Db250cm9sIiBjb250ZW50PSJuby1zaXRlYXBwIj4NCgkJPHRpdGxlPltTX3RpdGxlXSAtIOaCqOeahOe9keermeWQjeensDwvdGl0bGU+DQoJCTxsaW5rIGhyZWY9Im1lZGlhLzIwMTkxMjA4MTEzMDM1ZU0uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+DQoJCTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJbU19jb250ZW50XSIgLz4NCgkJPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IltTX2tleXdvcmRzXSIgLz4NCgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3dlYi9zdHlsZXMvbGlicy5jc3M/MTYzODAwNDg0NiI+DQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idGVtcGxhdGUvdDE2L2Fzc2V0cy93ZWIvc3R5bGVzL3N0eWxlLmNzcz8xNjM4MDA0ODQ2Ij4NCgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3dlYi9mb250cy9jc3MvZm9udGF3ZXNvbWUtYWxsLm1pbi5jc3MiPg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRlbXBsYXRlL3QxNi9hc3NldHMvc3R5bGVzL3N3aXBlci5taW4uY3NzIj4NCgkJPGxpbmsgaHJlZj0iY3NzL1BhZ2VyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvc3dpcGVyLm1pbi5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9sYXllci5qcyI+PC9zY3JpcHQ+DQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL3RoZW1lL2RlZmF1bHQvbGF5ZXIuY3NzP3Y9My4zLjAiIGlkPSJsYXl1aWNzcy1sYXllciI+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9ianBsdXMuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvdG1vZGpzLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0PgkNCgk8L2hlYWQ+DQo8Ym9keT4JDQo8aGVhZGVyIGNsYXNzPSJoZWFkZXIiPg0KCTxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhcmZpeCI+DQoJCTxkaXYgY2xhc3M9ImxvZ28iPg0KCQkJPGEgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKG1lZGlhLzIwMTkxMjAyMjE0NDA5elgucG5nKSIgaHJlZj0iLi8iIHRpdGxlPSLmgqjnmoTnvZHnq5nlkI3np7AiPjwvYT4NCgkJPC9kaXY+DQoJCTx1bCBjbGFzcz0ibmF2LW1haW4iPg0KDQo8ZmgtZnVuY3Rpb24+DQogICAgICAgICAgICAgICAgJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9tZW51IHdoZXJlIFVfaGlkZT0wIGFuZCBVX2RlbD0wIGFuZCBVX3N1Yj0wIG9yZGVyIGJ5IFVfb3JkZXIsVV9pZCBkZXNjIjsNCiAgICAgICAgICAgICAgICBzW1sNCiAgICAgICAgICAgICAgICAgIGlmKCR0eXBlPT0kcm93WyJVX3R5cGUiXSAmJiAkaWQ9PSRyb3dbIlVfdHlwZWlkIl0pew0KICAgICAgICAgICAgICAgICAgICAkY2xhc3M9Im5hdi1saSBhY3RpdmUiOw0KICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICRjbGFzcz0ibmF2LWxpIG1hcmdpbi1sZWZ0LTAiOw0KICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICBpZigkcm93WyJVX3R5cGUiXT09ImxpbmsiKXsNCiAgICAgICAgICAgICAgICAgICAgJGxpbms9JHJvd1siVV9saW5rIl07DQogICAgICAgICAgICAgICAgICAgICR0YXJnZXQ9Il9ibGFuayI7DQogICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgJGxpbms9Ij90eXBlPSIuJHJvd1siVV90eXBlIl0uIiZpZD0iLiRyb3dbIlVfdHlwZWlkIl07DQogICAgICAgICAgICAgICAgICAgICR0YXJnZXQ9Il9zZWxmIjsNCiAgICAgICAgICAgICAgICAgIH0NCiRVX2NvdW50PWdldHJzKCJzZWxlY3QgY291bnQoKikgYXMgVV9jb3VudCBmcm9tIHNsX21lbnUgd2hlcmUgVV9kZWw9MCBhbmQgVV9zdWI9Ii4kcm93WyJVX2lkIl0sIlVfY291bnQiKTsNCiAgICAgICAgICAgIGlmKCRVX2NvdW50PjApew0KDQogICAgICAgICAgICAgICAgICAgICRhcGk9JGFwaS4iPGxpIGNsYXNzPVwibWVnYTIgbWVudS1pdGVtLWhhcy1jaGlsZHJlblwiPjxhICBocmVmPVwiIi4kbGluay4iXCIgdGFyZ2V0PVwiIi4kdGFyZ2V0LiJcIiB0aXRsZT1cIiIuJHJvd1siVV90aXRsZSJdLiJcIj4iLiRyb3dbIlVfdGl0bGUiXS4iPC9hPjx1bCBjbGFzcz1cInN1Yi1tZW51XCI+IjsNCg0KICAgICAgICAgICAgICAgICAgICAkc3FsMj0ic2VsZWN0ICogZnJvbSBzbF9tZW51IHdoZXJlIFVfaGlkZT0wIGFuZCBVX2RlbD0wIGFuZCBVX3N1Yj0iLiRyb3dbIlVfaWQiXS4iIG9yZGVyIGJ5IFVfb3JkZXIsVV9pZCBkZXNjIjsNCiAgICAgICAgICAgICAgICAgICAgczJbWw0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIGlmKCRyb3cyWyJVX3R5cGUiXT09ImxpbmsiKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rMj0kcm93MlsiVV9saW5rIl07DQogICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0PSJfYmxhbmsiOw0KICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmsyPSI/dHlwZT0iLiRyb3cyWyJVX3R5cGUiXS4iJmlkPSIuJHJvdzJbIlVfdHlwZWlkIl07DQogICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0PSJfc2VsZiI7DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcGk9JGFwaS4iPGxpPjxhIGhyZWY9XCIiLiRsaW5rMi4iXCIgdGFyZ2V0PVwiIi4kdGFyZ2V0LiJcIj4iLiRyb3cyWyJVX3RpdGxlIl0uIjwvYT48L2xpPiI7DQogICAgICAgICAgICAgICAgICAgICAgICBdXQ0KDQokYXBpPSRhcGkuIjwvdWw+PC9saT4iOw0KfWVsc2V7DQogICRhcGk9JGFwaS4iPGxpPjxhICBocmVmPVwiIi4kbGluay4iXCIgdGFyZ2V0PVwiIi4kdGFyZ2V0LiJcIiB0aXRsZT1cIiIuJHJvd1siVV90aXRsZSJdLiJcIj4iLiRyb3dbIlVfdGl0bGUiXS4iPC9hPjwvbGk+IjsNCn0NCg0KDQogICAgICAgICAgICAgICAgXV0NCg0KICAgICAgICAgICAgICA8L2ZoLWZ1bmN0aW9uPg0KDQoNCgkJCQkJCQkJPC91bD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkkKCIubmF2LW1haW4gYSIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWlmICgkKHRoaXMpWzBdLmhyZWYgPT0gU3RyaW5nKHdpbmRvdy5sb2NhdGlvbikpIHsNCgkJCSQoIi5uYXYtbWFpbiBhIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpOw0KCQkJJCh0aGlzKS5hZGRDbGFzcygiYWN0aXZlIik7DQoJCX0NCgl9KTsNCjwvc2NyaXB0Pg0KCQk8dWwgY2xhc3M9Im5hdi1yaWdodCI+DQoJCQk8bGkgY2xhc3M9Im5hdi12aXAiPg0KCQkJCTxhIGhyZWY9Im1lbWJlci92aXAucGhwIiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9Imljb24gaWNvbi12aXAtcyI+PC9pPjwvYT4NCgkJCTwvbGk+DQoJCQk8bGkgY2xhc3M9Im5hdi1zZWFyY2giPg0KCQkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9InNlYXJjaC1sb2FkZXIiIHRpdGxlPSLmkJzntKIiPjxpIGNsYXNzPSJpY29uIGljb24tc2VhcmNoIj48L2k+PC9hPg0KCQkJPC9saT4NCgkJCQkJCTxsaSBjbGFzcz0ibmF2LWxvZ2luIG5vIj4NCgkJCQk8YSBocmVmPSJtZW1iZXIvbG9naW4ucGhwIiBjbGFzcz0ic2lnbmluLWxvYTFkZXIiPjxzcGFuPueZu+W9lTwvc3Bhbj48L2E+DQoJCQkJPGIgY2xhc3M9Im5hdi1saW5lIj48L2I+DQoJCQkJPGEgaHJlZj0ibWVtYmVyL3JlZy5waHAiIGNsYXNzPSJzaWduaW4tcjFlZyI+PHNwYW4+5rOo5YaMPC9zcGFuPjwvYT4NCgkJCTwvbGk+DQoJCQkJCTwvdWw+DQoJPC9kaXY+DQo8L2hlYWRlcj4NCjxkaXYgY2xhc3M9InNlYXJjaC13cmFwIj4NCiAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtZm9ybSI+DQogICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPSJvZmYiIGNsYXNzPSJzZWFyY2gtaW5wdXQiIHR5cGU9InRleHQiIGlkPSJuYW1lczEiIHBsYWNlaG9sZGVyPSLovpPlhaXmkJzntKLlhbPplK7or43lm57ovabvvIzlpJrkuKrlhbPplK7or43nlKjnqbrmoLzliIblvIAiPg0KICAgICAgPGkgY2xhc3M9Imljb24gaWNvbi1jbG9zZSI+PC9pPg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBpZD0ic2lnbi1zaG93Ij4NCiAgPGRpdiBjbGFzcz0ic2lnbiI+DQogICAgPGRpdiBjbGFzcz0ic2lnbi1tYXNrIj48L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJzaWduLWJveCI+DQogICAgICA8Zm9ybSBpZD0ic2lnbi1tcCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSI+DQogICAgICAgICAgPGRpdiBjbGFzcz0iZXJwaHAtd2VpeGluLXNjYW4iPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXdzLXRpdGxlIj7lvq7kv6HlronlhajnmbvlvZU8L2Rpdj4NCiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL21wLndlaXhpbi5xcS5jb20vY2dpLWJpbi9zaG93cXJjb2RlP3RpY2tldD1nUUZrOER3QUFBQUFBQUFBQVM1b2RIUndPaTh2ZDJWcGVHbHVMbkZ4TG1OdmJTOXhMekF5WDFsMlJqVmpZbFprTkdreFRHbFBlR2g0WTBvQUFnU1c4cUZoQXdROEFBQUEiIHN0eWxlPSJ3aWR0aDogMzAwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV3cy10aXBzIj7lvq7kv6HmiavnoIHlhbPms6jlhazkvJflj7fjgIrlhazmlofntKDmnZDnvZHjgIvljbPlj6/nmbvlvZXmiJbms6jlhow8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXBvbGljeSIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj4NCiAgICAgICAgICA8bGFiZWwgZm9yPSJwb2xpY3lfcmVnIj7miavnoIHlkI7ku6Pooajlt7LpmIXor7vlubblkIzmhI/jgIo8YSBocmVmPSIiIHRhcmdldD0iX2JsYW5rIj7nlKjmiLfmnI3liqHljY/orq48L2E+44CL5ZKM44CKPGEgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+6ZqQ56eB5pS/562WPC9hPuOAizwvbGFiZWw+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJleHBlbmQtY29udGFpbmVyIj4NCiAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIHRpdGxlPSLotKblj7fnmbvlvZUiIGNsYXNzPSJlcnBocC1sb2dpbi1tdXN0Ij4NCiAgICAgICAgICAgIDxzdmcgY2xhc3M9Imljb24gdG9nZ2xlIiBoaWRkZW49IiIgc3R5bGU9InBhZGRpbmc6MC41cmVtO3dpZHRoOiA0ZW07IGhlaWdodDogNGVtO3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7b3ZlcmZsb3c6IGhpZGRlbjsiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwLWlkPSIxMTY2IiBkYXRhLXNwbS1hbmNob3ItaWQ9ImEzMTN4Ljc3ODEwNjkuMC5pMCI+DQogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOTIgOTYwaDY0MHY2NEgxOTJ2LTY0eiIgcC1pZD0iMTE2NyI+PC9wYXRoPg0KICAgICAgICAgICAgICA8cGF0aCBkPSJNMzg0IDc2OGgyNTZ2MjU2SDM4NHYtMjU2ek05NjAgMEg2NGE2NCA2NCAwIDAgMC02NCA2NHY2NDBhNjQgNjQgMCAwIDAgNjQgNjRoODk2YTY0IDY0IDAgMCAwIDY0LTY0VjY0YTY0IDY0IDAgMCAwLTY0LTY0eiBtMCA3MDRINjRWNjRoODk2djY0MHoiIHAtaWQ9IjExNjgiPjwvcGF0aD4NCiAgICAgICAgICAgICAgPHBhdGggZD0iTTEyOCAxMjhoNzY4djUxMkgxMjhWMTI4eiIgcC1pZD0iMTE2OSI+PC9wYXRoPg0KICAgICAgICAgICAgPC9zdmc+DQogICAgICAgICAgPC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZm9ybT4NCg0KICAgICAgPGZvcm0gaWQ9InNpZ24taW4iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj4NCiAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZ3cueG1sdnNodWl5dWFuLnZpcC8iPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0ibG9nby1sb2dpbiIgc3JjPSJodHRwOi8vcW55Lmd3c2N3LnZpcC9qcGcvMjAyMS8wOS9XbW11MVRyNkc2ZnI0VW0uanBnIj4NCiAgICAgICAgICA8L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZWwiIG5hbWU9Im1vYmlsZSIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeaJi+acuuWPt+eggSI+DQogICAgICAgICAgPGkgY2xhc3M9Imljb24gaWNvbi11c2VyIj48L2k+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXnmbvlvZXlr4bnoIEiPg0KICAgICAgICAgIDxpIGNsYXNzPSJpY29uIGljb24tbG9jayI+PC9pPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idmVyaWZ5IiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i6K+36L6T5YWl6aqM6K+B56CBIj4NCiAgICAgICAgICA8aW1nIHNyYz0iL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFtcDthY3Q9c2hvcHdhcCZhbXA7ZG89dmVyaWZ5Y29kZSZhbXA7YmVpZD0xMCIgY2xhc3M9ImNhcHRjaGEtY2xrMiIgb25jbGljaz0iZmxlc2hWZXJpZnkoKSI+DQogICAgICAgICAgPGkgY2xhc3M9Imljb24gaWNvbi1zYWZlIj48L2k+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJzaWduLXN1Ym1pdCIgc3R5bGU9InBhZGRpbmc6IDEwcHggMCAyMHB4OyI+DQogICAgICAgICAgPGRpdiBjbGFzcz0iYnRuIHNpZ25pbnN1Ym1pdC1sb2FkZXIiPueZuyDlvZU8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnbi10cmFucyI+DQogICAgICAgICAgPGEgaHJlZj0iL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFtcDthY3Q9c2hvcHdhcCZhbXA7ZG89Zm9yZ2V0cHdkJmFtcDtiZWlkPTEwIiBjbGFzcz0ibGVmdCIgdGFyZ2V0PSJfYmxhbmsiPuW/mOiusOWvhuegge+8nzwvYT4NCiAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIGNsYXNzPSJzaWdubXAtbG9hZGVyIHJpZ2h0Ij7ms6jlhozotKblj7c8L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJleHBlbmQtY29udGFpbmVyIj4NCiAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIHRpdGxlPSLmiavnoIHnmbvlvZUiIGNsYXNzPSJzaWdubXAtbG9hZGVyIj4NCiAgICAgICAgICAgIDxzdmcgY2xhc3M9Imljb24gdG9nZ2xlIiBzdHlsZT0id2lkdGg6IDRlbTsgaGVpZ2h0OiA0ZW07dmVydGljYWwtYWxpZ246IG1pZGRsZTtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY0ODciPg0KICAgICAgICAgICAgICA8cGF0aCBkPSJNNTQwLjkgODY2aDU5djU5aC01OXYtNTl6TTQyMi44IDQyMy4xVjk4LjRIOTguMXYzMjQuOGg1OXY1OWg1OXYtNTloMjA2Ljd6IG0tMjY1LjctNTlWMTU3LjRoMjA2Ljd2MjA2LjdIMTU3LjF6IG0wIDBNMjE2LjIgMjE2LjRoODguNlYzMDVoLTg4LjZ2LTg4LjZ6TTYwMCA5OC40djMyNC44aDMyNC44Vjk4LjRINjAweiBtMjY1LjcgMjY1LjdINjU5VjE1Ny40aDIwNi43djIwNi43eiBtMCAwTTcxOC4xIDIxNi40aDg4LjZWMzA1aC04OC42di04OC42ek0yMTYuMiA3MTguM2g4OC42djg4LjZoLTg4LjZ2LTg4LjZ6TTk4LjEgNDgyLjJoNTl2NTloLTU5di01OXogbTExOC4xIDBoNTkuMXY1OWgtNTkuMXYtNTl6IG0wIDBNMjc1LjIgNjAwLjJIOTguMVY5MjVoMzI0LjhWNjAwLjJoLTg4LjZ2LTU5aC01OXY1OXogbTg4LjYgNTkuMVY4NjZIMTU3LjFWNjU5LjNoMjA2Ljd6IG0xMTguMS01MzEuNGg1OXY4OC42aC01OXYtODguNnogbTAgMTQ3LjZoNTl2NTloLTU5di01OXpNNjU5IDQ4Mi4ySDU0MC45di04OC42aC01OXY4OC42SDMzNC4zdjU5SDYwMHY1OWg1OXYtMTE4eiBtMCAxMThoNTkuMXY1OUg2NTl2LTU5eiBtLTE3Ny4xIDBoNTl2ODguNmgtNTl2LTg4LjZ6IG0wIDE0Ny43aDU5Vjg2NmgtNTlWNzQ3Ljl6TTYwMCA2ODguOGg1OVY4NjZoLTU5VjY4OC44eiBtMTc3LjEtODguNmgxNDcuNnY1OUg3NzcuMXYtNTl6IG04OC42LTExOGg1OXY1OWgtNTl2LTU5eiBtLTE0Ny42IDBoMTE4LjF2NTlINzE4LjF2LTU5eiBtMCAyMDYuNmg1OXY1OWgtNTl2LTU5eiBtMTQ3LjYgNTkuMWgtMjkuNXY1OWg1OXYtNTloMjkuNXYtNTloLTU5djU5eiBtLTE0Ny42IDU5aDU5Vjg2NmgtNTl2LTU5LjF6IG01OSA1OS4xaDE0Ny42djU5SDc3Ny4xdi01OXogbTAgMCIgcC1pZD0iNjQ4OCI+PC9wYXRoPg0KICAgICAgICAgICAgPC9zdmc+DQogICAgICAgICAgPC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZm9ybT4NCg0KICAgICAgPGZvcm0gaWQ9InNpZ24tdXAiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj4NCiAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZ3cueG1sdnNodWl5dWFuLnZpcC8iPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0ibG9nby1sb2dpbiIgc3JjPSJodHRwOi8vcW55Lmd3c2N3LnZpcC9qcGcvMjAyMS8wOS9XbW11MVRyNkc2ZnI0VW0uanBnIj4NCiAgICAgICAgICA8L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZWwiIG5hbWU9Im1vYmlsZTIiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXmiYvmnLrlj7fnoIEiPg0KICAgICAgICAgIDxpIGNsYXNzPSJpY29uIGljb24tdXNlciI+PC9pPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkMSIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeeZu+W9leWvhueggSI+DQogICAgICAgICAgPGkgY2xhc3M9Imljb24gaWNvbi1sb2NrIj48L2k+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQyIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i6K+356Gu6K6k55m75b2V5a+G56CBIj4NCiAgICAgICAgICA8aSBjbGFzcz0iaWNvbiBpY29uLWxvY2siPjwvaT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSI+DQogICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZlcmlmeTIiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXpqozor4HnoIEiPg0KICAgICAgICAgIDxpbWcgc3JjPSIvaW5kZXgucGhwP21vZD1tb2JpbGUmYW1wO2FjdD1zaG9wd2FwJmFtcDtkbz12ZXJpZnljb2RlJmFtcDtiZWlkPTEwIiBjbGFzcz0iY2FwdGNoYS1jbGsyIiBvbmNsaWNrPSJmbGVzaFZlcmlmeSgpIj4NCiAgICAgICAgICA8aSBjbGFzcz0iaWNvbiBpY29uLXNhZmUiPjwvaT4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnbi1zdWJtaXQiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0biBzaWduaW5zdWJtaXQtcmVnIj7ms6gg5YaMPC9kaXY+DQogICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1wb2xpY3kiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJwb2xpY3lfcmVnIiB2YWx1ZT0iMSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJwb2xpY3lfcmVnIj7miJHlt7LpmIXor7vlubblkIzmhI/jgIo8YSBocmVmPSIiIHRhcmdldD0iX2JsYW5rIj7nlKjmiLfmnI3liqHljY/orq48L2E+44CL5ZKM44CKPGEgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+6ZqQ56eB5pS/562WPC9hPuOAizwvbGFiZWw+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJzaWduLXRyYW5zIj7lt7LmnInotKblj7fvvJ8gPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0iZXJwaHAtbG9naW4tbXVzdCI+546w5Zyo55m75b2VPC9hPjwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJleHBlbmQtY29udGFpbmVyIj4NCiAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIHRpdGxlPSLmiavnoIHms6jlhowiIGNsYXNzPSJzaWdubXAtbG9hZGVyIj4NCiAgICAgICAgICAgIDxzdmcgY2xhc3M9Imljb24gdG9nZ2xlIiBzdHlsZT0id2lkdGg6IDRlbTsgaGVpZ2h0OiA0ZW07dmVydGljYWwtYWxpZ246IG1pZGRsZTtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY0ODciPg0KICAgICAgICAgICAgICA8cGF0aCBkPSJNNTQwLjkgODY2aDU5djU5aC01OXYtNTl6TTQyMi44IDQyMy4xVjk4LjRIOTguMXYzMjQuOGg1OXY1OWg1OXYtNTloMjA2Ljd6IG0tMjY1LjctNTlWMTU3LjRoMjA2Ljd2MjA2LjdIMTU3LjF6IG0wIDBNMjE2LjIgMjE2LjRoODguNlYzMDVoLTg4LjZ2LTg4LjZ6TTYwMCA5OC40djMyNC44aDMyNC44Vjk4LjRINjAweiBtMjY1LjcgMjY1LjdINjU5VjE1Ny40aDIwNi43djIwNi43eiBtMCAwTTcxOC4xIDIxNi40aDg4LjZWMzA1aC04OC42di04OC42ek0yMTYuMiA3MTguM2g4OC42djg4LjZoLTg4LjZ2LTg4LjZ6TTk4LjEgNDgyLjJoNTl2NTloLTU5di01OXogbTExOC4xIDBoNTkuMXY1OWgtNTkuMXYtNTl6IG0wIDBNMjc1LjIgNjAwLjJIOTguMVY5MjVoMzI0LjhWNjAwLjJoLTg4LjZ2LTU5aC01OXY1OXogbTg4LjYgNTkuMVY4NjZIMTU3LjFWNjU5LjNoMjA2Ljd6IG0xMTguMS01MzEuNGg1OXY4OC42aC01OXYtODguNnogbTAgMTQ3LjZoNTl2NTloLTU5di01OXpNNjU5IDQ4Mi4ySDU0MC45di04OC42aC01OXY4OC42SDMzNC4zdjU5SDYwMHY1OWg1OXYtMTE4eiBtMCAxMThoNTkuMXY1OUg2NTl2LTU5eiBtLTE3Ny4xIDBoNTl2ODguNmgtNTl2LTg4LjZ6IG0wIDE0Ny43aDU5Vjg2NmgtNTlWNzQ3Ljl6TTYwMCA2ODguOGg1OVY4NjZoLTU5VjY4OC44eiBtMTc3LjEtODguNmgxNDcuNnY1OUg3NzcuMXYtNTl6IG04OC42LTExOGg1OXY1OWgtNTl2LTU5eiBtLTE0Ny42IDBoMTE4LjF2NTlINzE4LjF2LTU5eiBtMCAyMDYuNmg1OXY1OWgtNTl2LTU5eiBtMTQ3LjYgNTkuMWgtMjkuNXY1OWg1OXYtNTloMjkuNXYtNTloLTU5djU5eiBtLTE0Ny42IDU5aDU5Vjg2NmgtNTl2LTU5LjF6IG01OSA1OS4xaDE0Ny42djU5SDc3Ny4xdi01OXogbTAgMCIgcC1pZD0iNjQ4OCI+PC9wYXRoPg0KICAgICAgICAgICAgPC9zdmc+DQogICAgICAgICAgPC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZm9ybT4NCiAgICAgIDxkaXYgY2xhc3M9InNpZ24td3JhcCI+DQogICAgICAgIDxkaXYgY2xhc3M9InNpZ24tY2xvc2UiPsOXPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQo8L2Rpdj4NCjxkaXYgaWQ9Im1vYmlsZXZlcmlmeSI+DQogICAgPGRpdiBjbGFzcz0ic2lnbiI+ICAgICAgDQogICAgICA8ZGl2IGNsYXNzPSJzaWduLW1hc2siPjwvZGl2PiAgICAgDQogICAgICA8ZGl2IGNsYXNzPSJzaWduLWJveCI+ICAgICAgICAgIA0KICAgICAgICA8ZGl2IGNsYXNzPSJzaWduLWluIj4gIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIHRpdGxlIj7ovpPlhaXmiYvmnLrpqozor4HnoIE8L2Rpdj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPjxpbnB1dCB0eXBlPSJ0ZWwiIG5hbWU9Im1vYmlsZXZlcmlmeSIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeaJi+acuumqjOivgeeggSI+PGkgY2xhc3M9Imljb24gaWNvbi1zYWZlIj48L2k+PC9kaXY+ICAgICAgIA0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0biBtb2JpbGV2ZXJpZnkiPuaPkCDkuqQ8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4gICAgDQogICAgPC9kaXY+DQo8L2Rpdj4NCiAgDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogIGZ1bmN0aW9uIGZsZXNoVmVyaWZ5KCl7DQogICAgICB2YXIgdmVyaWZ5aW1nID0gJCgiLmNhcHRjaGEtY2xrMiIpLmF0dHIoInNyYyIpOw0KICAgICAgaWYoIHZlcmlmeWltZy5pbmRleE9mKCc/Jyk+MCl7DQogICAgICAgICAgICAkKCIuY2FwdGNoYS1jbGsyIikuYXR0cigic3JjIiwgdmVyaWZ5aW1nKycmcmFuZG9tPScrTWF0aC5yYW5kb20oKSk7DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgJCgiLmNhcHRjaGEtY2xrMiIpLmF0dHIoInNyYyIsIHZlcmlmeWltZy5yZXBsYWNlKC9cPy4qJC8sJycpKyc/JytNYXRoLnJhbmRvbSgpKTsNCiAgICAgICAgfQ0KICB9IA0KICAkKCcuc2lnbmluLWxvYWRlcicpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICQoIiNzaWduLXNob3ciKS5hZGRDbGFzcygic2lnbi1zaG93Iik7DQogICAgICAgICAgICAkKCIjc2lnbi1tcCIpLnNob3coKTsNCiAgICAkKCIjc2lnbi1pbiIpLmhpZGUoKTsNCiAgICAkKCIjc2lnbi11cCIpLmhpZGUoKTsNCiAgICBlcnBocE9yZGVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQogICAgICAkLmdldEpTT04oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9d2VpeGluJmRvPWZhc3Rsb2dpbl9wYyZvcD1kb2xvZ2luY2hlY2smc2tleT1YM1F4TVRJM01UWTFOVFEwTnpZek1qSTVNVEUlM0QmYmVpZD0xMCIsIGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKGpzb24uc3RhdHVzPT0xKXsNCiAgICAgICAgICBjbGVhckludGVydmFsKGVycGhwT3JkZXIpOw0KICAgICAgICAgICAgICAgICAgICBsYXllci5tc2coJ+eZu+W9leaIkOWKn++8jOi3s+i9rOS4rS4uLicsew0KICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIGlmKGpzb24uc3RhdHVzPT0tMSl7DQogICAgICAgICAgICBsYXllci5tc2coJ+eZu+W9leWksei0pe+8geivt+mHjeaWsOaJq+eggeS6jOe7tOeggeeZu+W9lScsew0KICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICB9LCAzMDAwKTsNCiAgICAgIH0pOw0KICAkKCcuc2lnbm1wLWxvYWRlcicpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICQoIiNzaWduLW1wIikuc2hvdygpOw0KICAgICQoIiNzaWduLWluIikuaGlkZSgpOw0KICAgICQoIiNzaWduLXVwIikuaGlkZSgpOw0KICAgIGVycGhwT3JkZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsNCiAgICAgICQuZ2V0SlNPTigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD13ZWl4aW4mZG89ZmFzdGxvZ2luX3BjJm9wPWRvbG9naW5jaGVjayZza2V5PVgzUXhNVEkzTVRZMU5UUTBOell6TWpJNU1URSUzRCZiZWlkPTEwIiwgZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoanNvbi5zdGF0dXM9PTEpew0KICAgICAgICAgIGNsZWFySW50ZXJ2YWwoZXJwaHBPcmRlcik7DQogICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZygn55m75b2V5oiQ5Yqf77yM6Lez6L2s5LitLi4uJyx7DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgaWYoanNvbi5zdGF0dXM9PS0xKXsNCiAgICAgICAgICAgIGxheWVyLm1zZygn55m75b2V5aSx6LSl77yB6K+36YeN5paw5omr56CB5LqM57u056CB55m75b2VJyx7DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgIH0sIDMwMDApOw0KICAgICAgICAgIA0KICB9KTsNCiAgJCgnLnNpZ25pbi1yZWcnKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgJCgiI3NpZ24tc2hvdyIpLmFkZENsYXNzKCJzaWduLXNob3ciKTsNCiAgICAgICAgICAgICAgICAkKCIjc2lnbi1tcCIpLnNob3coKTsNCiAgICAkKCIjc2lnbi1pbiIpLmhpZGUoKTsNCiAgICAkKCIjc2lnbi11cCIpLmhpZGUoKTsNCiAgICBlcnBocE9yZGVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQogICAgICAkLmdldEpTT04oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9d2VpeGluJmRvPWZhc3Rsb2dpbl9wYyZvcD1kb2xvZ2luY2hlY2smc2tleT1YM1F4TVRJM01UWTFOVFEwTnpZek1qSTVNVEUlM0QmYmVpZD0xMCIsIGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKGpzb24uc3RhdHVzPT0xKXsNCiAgICAgICAgICBjbGVhckludGVydmFsKGVycGhwT3JkZXIpOw0KICAgICAgICAgICAgICAgICAgICBsYXllci5tc2coJ+eZu+W9leaIkOWKn++8jOi3s+i9rOS4rS4uLicsew0KICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIGlmKGpzb24uc3RhdHVzPT0tMSl7DQogICAgICAgICAgICBsYXllci5tc2coJ+eZu+W9leWksei0pe+8geivt+mHjeaWsOaJq+eggeS6jOe7tOeggeeZu+W9lScsew0KICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICB9LCAzMDAwKTsgICANCiAgICAgICAgDQogIH0pOw0KICAgICQoJy5lcnBocC1sb2dpbi1tdXN0JykuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICQoIiNzaWduLW1wIikuaGlkZSgpOw0KICAgICQoIiNzaWduLWluIikuc2hvdygpOw0KICAgICQoIiNzaWduLXVwIikuaGlkZSgpOw0KICB9KTsgDQogICQoJy5lcnBocC1yZWctbXVzdCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICQoIiNzaWduLXVwIikuc2hvdygpOw0KICAgICQoIiNzaWduLWluIikuaGlkZSgpOw0KICAgICQoIiNzaWduLW1wIikuaGlkZSgpOw0KICB9KTsgDQogICAgJCgnLnNpZ24td3JhcCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAkKCIjc2lnbi1zaG93IikucmVtb3ZlQ2xhc3MoInNpZ24tc2hvdyIpOw0KICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICB9KTsNCiAgJCgnLnNpZ25pbnN1Ym1pdC1sb2FkZXInKS5jbGljayhmdW5jdGlvbigpew0KICAgICAgdmFyIG1vYmlsZSA9ICQoJ2lucHV0W25hbWU9Im1vYmlsZSJdJykudmFsKCk7DQogICAgICBpZiAoIS9eMVxkezEwfSQvLnRlc3QobW9iaWxlKSkgew0KICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7loavlhpnmiYvmnLrlj7fnoIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgdmFyIHBhc3N3b3JkID0gJCgnaW5wdXRbbmFtZT0icGFzc3dvcmQiXScpLnZhbCgpLnRyaW0oKTsNCiAgICAgIGlmICghL14uezYsMTZ9Ly50ZXN0KHBhc3N3b3JkKSkgeyAgIA0KICAgICAgICBsYXllci5tc2coJ+ivt+ato+ehrui+k+WFpeeZu+W9leWvhuegge+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgdmFyIHZlcmlmeSA9ICQoJ2lucHV0W25hbWU9InZlcmlmeSJdJykudmFsKCkudHJpbSgpOw0KICAgICAgaWYgKHZlcmlmeT09JycpIHsNCiAgICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7ovpPlhaXpqozor4HnoIHvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgIHZhciBsb2FkcyA9IGxheWVyLmxvYWQoMik7DQogICAgY29yZV9qc29uKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PXNob3B3YXAmZG89bG9naW4mYmVpZD0xMCIsIHttb2JpbGU6bW9iaWxlLHBhc3N3b3JkOnBhc3N3b3JkLHZlcmlmeTp2ZXJpZnl9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgbGF5ZXIuY2xvc2UobG9hZHMpOw0KICAgICAgaWYoanNvbi5zdGF0dXM9PTApew0KICAgICAgICBsYXllci5tc2coanNvbi5yZXN1bHQpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0gICAgIA0KICAgICAgICAgICAgaWYoanNvbi5zdGF0dXM9PTEpew0KICAgICAgICBsYXllci5tc2coJ+eZu+W9leaIkOWKn++8jOi3s+i9rOS4rS4uLicsew0KICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICB9ICAgICAgICAgDQogICAgICAgIH0sdHJ1ZSk7DQogIH0pOw0KICANCiAgJCgnLnNpZ25pbnN1Ym1pdC1yZWcnKS5jbGljayhmdW5jdGlvbigpew0KICAgICAgdmFyIG1vYmlsZSA9ICQoJ2lucHV0W25hbWU9Im1vYmlsZTIiXScpLnZhbCgpOw0KICAgICAgaWYgKCEvXjFcZHsxMH0kLy50ZXN0KG1vYmlsZSkpIHsgICAgDQogICAgICAgICAgICBsYXllci5tc2coJ+ivt+ato+ehruWhq+WGmeaJi+acuuWPt++8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICB2YXIgcGFzc3dvcmQgPSAkKCdpbnB1dFtuYW1lPSJwYXNzd29yZDEiXScpLnZhbCgpLnRyaW0oKTsNCiAgICAgIGlmICghL14uezYsMTZ9Ly50ZXN0KHBhc3N3b3JkKSkgeyAgIA0KICAgICAgICBsYXllci5tc2coJ+ivt+ato+ehrui+k+WFpeeZu+W9leWvhueggSzoh7PlsJE25L2N5pWw77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIHZhciBwYXNzd29yZDIgPSAkKCdpbnB1dFtuYW1lPSJwYXNzd29yZDIiXScpLnZhbCgpLnRyaW0oKTsNCiAgICAgIGlmICghL14uezYsMTZ9Ly50ZXN0KHBhc3N3b3JkMikpIHsgICAgDQogICAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu6L6T5YWl56Gu6K6k5a+G56CB77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIGlmIChwYXNzd29yZCE9cGFzc3dvcmQyKSB7ICANCiAgICAgICAgbGF5ZXIubXNnKCfkuKTmrKHlr4bnoIHkuI3nm7jlkIzvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgIHZhciB2ZXJpZnkgPSAkKCdpbnB1dFtuYW1lPSJ2ZXJpZnkyIl0nKS52YWwoKS50cmltKCk7DQogICAgICBpZiAodmVyaWZ5PT0nJykgew0KICAgICAgICBsYXllci5tc2coJ+ivt+ato+ehrui+k+WFpemqjOivgeegge+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgdmFyIGNoZWNrID0gJCgiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIpLnByb3AoJ2NoZWNrZWQnKTsNCiAgICAgIGlmICghY2hlY2spIHsNCiAgICAgICAgbGF5ZXIubXNnKCfor7flhYjmn6XnnIvjgIrnlKjmiLfmnI3liqHljY/orq7jgIvlkozjgIrpmpDnp4HmlL/nrZbjgIvlubbpgInkuK3vvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgIHZhciBsb2FkcyA9IGxheWVyLmxvYWQoMik7DQogICAgY29yZV9qc29uKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PXNob3B3YXAmZG89cmVnaXN0ZXImYmVpZD0xMCIsIHtvcDonc3VibWl0Jyxtb2JpbGU6bW9iaWxlLHBhc3N3b3JkOnBhc3N3b3JkLHZlcmlmeTp2ZXJpZnl9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgbGF5ZXIuY2xvc2UobG9hZHMpOw0KICAgICAgaWYoanNvbi5zdGF0dXM9PTApew0KICAgICAgICBsYXllci5tc2coanNvbi5yZXN1bHQpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgICAgIGlmKGpzb24uc3RhdHVzPT0yKXsNCiAgICAgICAgbGF5ZXIubXNnKCfpqozor4HnoIHlt7Llj5HpgIHliLDkvaDms6jlhoznmoTmiYvmnLrvvIEnKTsNCiAgICAgICAgJCgiI21vYmlsZXZlcmlmeSIpLmFkZENsYXNzKCJzaWduLXNob3ciKTsNCiAgICAgICAgfSAgICAgDQogICAgICAgICAgICBpZihqc29uLnN0YXR1cz09MSl7DQogICAgICAgIGxheWVyLm1zZygn5rOo5YaM5oiQ5Yqf77yM6Lez6L2s5LitLi4uJyx7DQogICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQogICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgIH0gICAgICAgICANCiAgICAgICAgfSx0cnVlKTsNCiAgfSk7DQogIA0KICAkKCcubW9iaWxldmVyaWZ5JykuY2xpY2soZnVuY3Rpb24oKXsNCiAgICAgIHZhciBtb2JpbGUgPSAkKCdpbnB1dFtuYW1lPSJtb2JpbGUyIl0nKS52YWwoKTsNCiAgICAgIGlmICghL14xXGR7MTB9JC8udGVzdChtb2JpbGUpKSB7ICAgIA0KICAgICAgICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7loavlhpnmiYvmnLrlj7fvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgdmFyIHBhc3N3b3JkID0gJCgnaW5wdXRbbmFtZT0icGFzc3dvcmQxIl0nKS52YWwoKS50cmltKCk7DQogICAgICBpZiAoIS9eLns2LDE2fS8udGVzdChwYXNzd29yZCkpIHsgICANCiAgICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7ovpPlhaXnmbvlvZXlr4bnoIEs6Iez5bCRNuS9jeaVsO+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICB2YXIgcGFzc3dvcmQyID0gJCgnaW5wdXRbbmFtZT0icGFzc3dvcmQyIl0nKS52YWwoKS50cmltKCk7DQogICAgICBpZiAoIS9eLns2LDE2fS8udGVzdChwYXNzd29yZDIpKSB7ICAgIA0KICAgICAgICBsYXllci5tc2coJ+ivt+ato+ehrui+k+WFpeehruiupOWvhuegge+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICBpZiAocGFzc3dvcmQhPXBhc3N3b3JkMikgeyAgDQogICAgICAgIGxheWVyLm1zZygn5paw5a+G56CB5LiO56Gu6K6k5a+G56CB5LiN55u45ZCM77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICB2YXIgdmVyaWZ5ID0gJCgnaW5wdXRbbmFtZT0ibW9iaWxldmVyaWZ5Il0nKS52YWwoKS50cmltKCk7DQogICAgICBpZiAodmVyaWZ5PT0nJykgew0KICAgICAgICBsYXllci5tc2coJ+ivt+i+k+WFpeaJi+acuumqjOivgeegge+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgdmFyIGxvYWRzID0gbGF5ZXIubG9hZCgyKTsNCiAgICBjb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9c2hvcHdhcCZkbz1yZWdpc3RlciZiZWlkPTEwIiwge29wOidzbXMnLG1vYmlsZTptb2JpbGUscGFzc3dvcmQ6cGFzc3dvcmQsdmVyaWZ5OnZlcmlmeX0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBsYXllci5jbG9zZShsb2Fkcyk7DQogICAgICBpZihqc29uLnN0YXR1cz09MCl7DQogICAgICAgIGxheWVyLm1zZyhqc29uLnJlc3VsdCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSAgIA0KICAgICAgICAgICAgaWYoanNvbi5zdGF0dXM9PTEpew0KICAgICAgICAgICAgICAgIGxheWVyLm1zZygn5rOo5YaM5oiQ5Yqf77yM6Lez6L2s5LitLi4uJyx7DQogICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQogICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgIH0gICAgICAgICANCiAgICAgICAgfSx0cnVlKTsgICAgDQogIH0pOw0KPC9zY3JpcHQ+DQo8ZGl2IGNsYXNzPSJzaW5nbGUiPg0KICAgPGRpdiBjbGFzcz0ibWFpbiI+DQoJICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhcmZpeCIgc3R5bGU9Im1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzOTlweCk7Ij4NCgkJICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWJzIj7lvZPliY3kvY3nva7vvJo8c3Bhbj48YSBocmVmPSIuLyI+PHNwYW4+6aaW6aG1PC9zcGFuPjwvYT48L3NwYW4+IA0KCQkJICAgIDxzcGFuIGNsYXNzPSJzZXAiPjxpIGNsYXNzPSJmYSBmYS1hbmdsZS1yaWdodCI+PC9pPjwvc3Bhbj4gDQoJCQkJPHNwYW4+PGEgaHJlZj0iIj4gPHNwYW4+W1NfdGl0bGVdPC9zcGFuPjwvYT48L3NwYW4+IA0KCQkJPC9kaXY+DQoJCSAgICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXAiPg0KCQkJICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPg0KCQkJCSAgICA8ZGl2IGNsYXNzPSJzaW5nbGUtcmVsYXRlZCI+DQoJCQkJCTxoMyBjbGFzcz0icmVsYXRlZC10aXRsZSI+PGkgY2xhc3M9Imljb24gaWNvbi1yZWxhdGVkIj48L2k+IFtTX3RpdGxlXTwvaDM+DQoJCQkJCQkJCQkJPGRpdiBjbGFzcz0iZmlsdGVycyI+DQoJCQkgICAgICAgICAgCTxkaXYgY2xhc3M9ImZpbHRlci1pdGVtIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWx0ZXIiPg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPGZoLWZ1bmN0aW9uPg0KICAkc3FsPSJzZWxlY3QgKiBmcm9tIHNsX25zb3J0IHdoZXJlIFNfc3ViPTAgYW5kIFNfZGVsPTAgb3JkZXIgYnkgU19pZCBkZXNjIjsNCiAgICAgICAgc1tbDQogICAgICAgIGlmKCRpZD09JHJvd1siU19pZCJdIHx8IGdldHJzKCJzZWxlY3QgKiBmcm9tIHNsX25zb3J0IHdoZXJlIFNfaWQ9JGlkIiwiU19zdWIiKT09JHJvd1siU19pZCJdKXsNCiAgICAgICAgJGNsYXNzPSJhY3RpdmUiOw0KICAgIH1lbHNlew0KICAgICRjbGFzcz0iIjsNCn0NCg0KICAgICAgICAkYXBpPSRhcGkuIjxhIGhyZWY9XCI/dHlwZT1uZXdzJmlkPSIuJHJvd1siU19pZCJdLiJcIiBjbGFzcz1cIiIuJGNsYXNzLiJcIiBkYXRhLXR5cGU9XCIiLiRyb3dbIlNfaWQiXS4iXCI+Ii4kcm93WyJTX3RpdGxlIl0uIjwvYT4iOw0KDQoNCiAgICAgICAgXV0NCiAgICAgICAgPC9maC1mdW5jdGlvbj4NCg0KDQoJCQkJCQkJCQkJCQkJCQk8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCgkJCQkJCQkJICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxpc3RzIGNvbHMtdHdvIHJlbGF0ZWRzIGNsZWFyZml4IiBpZD0iY29udGFpbmVyIj4NCiAgICAgICAgPGZoLWZ1bmN0aW9uPg0KaWYoJGlkPT0wKXsNCiAgJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9uZXdzLHNsX25zb3J0IHdoZXJlIFNfZGVsPTAgYW5kIE5fZGVsPTAgIi4kcGEuJE1fbmluZm8uIiAgYW5kIE5fc29ydD1TX2lkICIuc2h1eGluZygiTl9zaHV4aW5nIikuIiAkTV9pbmZvICRvcmRlciBsaW1pdCAiLigoJHBhZ2UtMSkqMTYpLiIsMTYiOw0KfWVsc2V7DQogIGlmKCRTX3N1Yj09MCl7DQogICAgJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9uZXdzLHNsX25zb3J0IHdoZXJlIFNfZGVsPTAgIi5zaHV4aW5nKCJOX3NodXhpbmciKS4iICRNX2luZm8gYW5kIE5fZGVsPTAgIi4kcGEuJE1fbmluZm8uIiAgYW5kIE5fc29ydD1TX2lkIGFuZCBTX3N1Yj0iLiRpZC4iICRvcmRlciBsaW1pdCAiLigoJHBhZ2UtMSkqMTYpLiIsMTYiOw0KICB9ZWxzZXsNCiAgICAkc3FsPSJzZWxlY3QgKiBmcm9tIHNsX25ld3Msc2xfbnNvcnQgd2hlcmUgU19kZWw9MCAiLnNodXhpbmcoIk5fc2h1eGluZyIpLiIgJE1faW5mbyBhbmQgTl9kZWw9MCAiLiRwYS4kTV9uaW5mby4iICBhbmQgTl9zb3J0PVNfaWQgYW5kIFNfaWQ9Ii4kaWQuIiAkb3JkZXIgbGltaXQgIi4oKCRwYWdlLTEpKjE2KS4iLDE2IjsNCiAgfQ0KfQ0KICAgICAgICAgICAgICAgIHNbWw0KICBpZihzdHJwb3MoJHJvd1siTl9jb250ZW50Il0sIltmaF9mcmVlXSIpIT09ZmFsc2UgfHwgcCgkcm93WyJOX3ByaWNlIl0pPT0wKXsNCiAgICAkaW50cm89bWJfc3Vic3RyKHN0cmlwX3RhZ3Moc3BsaXR4KCRyb3dbIk5fY29udGVudCJdLCJbZmhfZnJlZV0iLDApKSwwLDIwMCwidXRmLTgiKTsNCiAgfWVsc2V7DQogICAgJGludHJvPSLlhoXlrrnliqDlr4YiOw0KICB9DQoNCmlmKCRyb3dbJ05fbWlkJ109PTApew0KICAkYXV0aG9yX3BpYz1waWMoJENbIkNfaWNvIl0pOw0KfWVsc2V7DQogICRhdXRob3JfcGljPXBpYyhnZXRycygic2VsZWN0ICogZnJvbSBzbF9tZW1iZXIgd2hlcmUgTV9pZD0iLiRyb3dbJ05fbWlkJ10sIk1faGVhZCIpKTsNCn0NCg0KJHN1Yl90aXRsZT1nZXRycygic2VsZWN0ICogZnJvbSBzbF9uc29ydCB3aGVyZSBTX2lkPSIuJHJvd1siU19zdWIiXSk7DQokYXBpPSRhcGkuIjxkaXYgY2xhc3M9XCJwb3N0IGdyaWRcIj4NCgkJCQkJCQk8ZGl2IGNsYXNzPVwiaW1nXCI+DQoJCQkJCQkJICAgIDxhIGhyZWY9XCI/dHlwZT1uZXdzaW5mbyZpZD0iLiRyb3dbIk5faWQiXS4iXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGl0bGU9XCIiLiRyb3dbIk5fdGl0bGUiXS4iXCI+DQoJCQkJCQkJCQk8aW1nIHNyYz1cIiIucGljKCRyb3dbIk5fcGljIl0pLiJcIiBjbGFzcz1cInRodW1iXCIgYWx0PVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiIHN0eWxlPVwid2lkdGg6IDExNXB4XCI+DQoJCQkJCQkJCTwvYT4NCgkJCQkJCQk8L2Rpdj4NCgkJCQkJCQk8ZGl2IGNsYXNzPVwiY2F0XCI+PGEgaHJlZj1cIj90eXBlPW5ld3MmaWQ9Ii4kcm93WyJTX2lkIl0uIlwiPiIuJHJvd1siU190aXRsZSJdLiI8L2E+IDxhIGhyZWY9XCI/dHlwZT1uZXdzJmlkPSIuJHN1Yl90aXRsZVsiU19pZCJdLiJcIj4iLiRzdWJfdGl0bGVbIlNfdGl0bGUiXS4iPC9hPjwvZGl2Pg0KCQkJCQkJCTxoMz48YSBocmVmPVwiP3R5cGU9bmV3c2luZm8maWQ9Ii4kcm93WyJOX2lkIl0uIlwiIHRhcmdldD1cIl9ibGFua1wiIHRpdGxlPVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiPiIuJHJvd1siTl90aXRsZSJdLiI8L2E+PC9oMz4NCgkJCQkJCQk8cCBjbGFzcz1cImV4Y2VycHRcIiB0YXJnZXQ9XCJfYmxhbmtcIj4iLiRyb3dbIk5fdGl0bGUiXS4iPC9wPg0KCQkJCQkJCTxkaXYgY2xhc3M9XCJncmlkLW1ldGFcIj4NCgkJCQkJCQkJPHNwYW4gY2xhc3M9XCJ0aW1lXCI+PGkgY2xhc3M9XCJpY29uIGljb24tdGltZVwiPjwvaT4gIi5kYXRlKCJZLW0tZCIsc3RydG90aW1lKCRyb3dbIk5fZGF0ZSJdKSkuIjwvc3Bhbj4NCgkJCQkJCQkJPHNwYW4gY2xhc3M9XCJ2aWV3c1wiPjxpIGNsYXNzPVwiaWNvbiBpY29uLWV5ZVwiPjwvaT4gIi4kcm93WyJOX3ZpZXciXS4iPC9zcGFuPg0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cImNvbW1lbnRzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tcG9zdHNcIj48L2k+IO+/pSIucCgkcm93WyJOX3ByaWNlIl0pLiI8L3NwYW4+DQoJCQkJCQkJPC9kaXY+DQoJCQkJCQk8L2Rpdj4iOw0KXV0NCg0KICAgICAgICA8L2ZoLWZ1bmN0aW9uPg0KDQoNCgkJPC9kaXY+DQoNCgkJCQkJCQkJDQoJCQkJICAgIDwvZGl2Pg0KCQkJCSAgICA8ZGl2IGlkPSJwYWdlciI+PC9kaXY+DQoJCQkgICAgPC9kaXY+DQoJCSAgICA8L2Rpdj4NCgkJDQoJCTxhc2lkZSBjbGFzcz0ic2lkZWJhciI+DQoJCQk8ZGl2IGNsYXNzPSJ0aGVpYVN0aWNreVNpZGViYXIiPg0KCQkJCTxkaXYgY2xhc3M9IndpZGdldCB3aWRnZXQtcG9zdGxpc3QiPg0KCQkJCQkgICAgPGgzPjxpIGNsYXNzPSJpY29uIGljb24tcG9zdHMiPjwvaT4g5pyA5paw5Y+R5biDPC9oMz4NCgkJCQkJICAgIDx1bCBjbGFzcz0iY2xlYXJmaXggaGFzaW1nIj4NCg0KDQoJCQkJCSAgICAJICAgIDxmaC1mdW5jdGlvbj4NCiAgICAgICRpPTE7DQogJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9uZXdzLHNsX25zb3J0IHdoZXJlIFNfaWQ9Tl9zb3J0IGFuZCBTX2RlbD0wIGFuZCBOX2RlbD0wICIuJE1fbmluZm8uIiAgb3JkZXIgYnkgTl9kYXRlIGRlc2MgbGltaXQgOCI7DQogICAgICAgICAgc1tbDQoNCg0KICAgICAgJGFwaT0kYXBpLiI8bGkgb25jbGljaz1cImxvY2F0aW9uLmhyZWY9Jz90eXBlPW5ld3NpbmZvJmlkPSIuJHJvd1siTl9pZCJdLiInXCI+DQoJCQkJCQkJPGEgaHJlZj1cIj90eXBlPW5ld3NpbmZvJmlkPSIuJHJvd1siTl9pZCJdLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0aXRsZT1cIiIuJHJvd1siTl90aXRsZSJdLiJcIiBjbGFzcz1cImltZ1wiPg0KCQkJCQkJCQk8aW1nIHNyYz1cIiIucGljKCRyb3dbIk5fcGljIl0pLiJcIiBjbGFzcz1cInRodW1iXCIgYWx0PVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiPg0KCQkJCQkJCTwvYT4NCgkJCQkJCQk8aDQ+PGEgaHJlZj1cIj90eXBlPW5ld3NpbmZvJmlkPSIuJHJvd1siTl9pZCJdLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0aXRsZT1cIiIuJHJvd1siTl90aXRsZSJdLiJcIj4iLiRyb3dbIk5fdGl0bGUiXS4iPC9hPjwvaDQ+DQoJCQkJCQkJPHAgY2xhc3M9XCJtZXRhXCI+DQoJCQkJCQkJCTxzcGFuIGNsYXNzPVwidGltZVwiPjxpIGNsYXNzPVwiaWNvbiBpY29uLXRpbWVcIj48L2k+ICIuZGF0ZSgiWS1tLWQiLHN0cnRvdGltZSgkcm93WyJOX2RhdGUiXSkpLiI8L3NwYW4+IA0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cInZpZXdzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tZXllXCI+PC9pPiAiLiRyb3dbIk5fdmlldyJdLiI8L3NwYW4+IA0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cImNvbW1lbnRzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tcG9zdHNcIj48L2k+IO+/pSIucCgkcm93WyJOX3ByaWNlIl0pLiI8L3NwYW4+DQoJCQkJCQkJPC9wPg0KCQkJCQkJPC9saT4iOw0KDQoNCiAgICAgJGk9JGkrMTsNCiAgICAgXV0NCjwvZmgtZnVuY3Rpb24+DQoNCg0KDQoJCQkJCSAgICAJCQkJCSAgIA0KCQkJCQkgICAgCQ0KCQkgICAgICAgICAgICAgICAgPC91bD4NCgkJICAgICAgICAgICAgPC9kaXY+DQoJCQkJDQoJCQkJPGRpdiBjbGFzcz0id2lkZ2V0IHdpZGdldC1wb3N0bGlzdCI+DQoJCQkJCSAgICA8aDM+PGkgY2xhc3M9Imljb24gaWNvbi1wb3N0cyI+PC9pPiDmnIDlpJrmtY/op4g8L2gzPg0KCQkJCQkgICAgPHVsIGNsYXNzPSJjbGVhcmZpeCBoYXNpbWciPg0KDQoNCgkJCQkJICAgIAkgICAgPGZoLWZ1bmN0aW9uPg0KICAgICAgJGk9MTsNCiAkc3FsPSJzZWxlY3QgKiBmcm9tIHNsX25ld3Msc2xfbnNvcnQgd2hlcmUgU19pZD1OX3NvcnQgYW5kIFNfZGVsPTAgYW5kIE5fZGVsPTAgIi4kTV9uaW5mby4iICBvcmRlciBieSBOX3ZpZXcgZGVzYyBsaW1pdCA4IjsNCiAgICAgICAgICBzW1sNCg0KDQogICAgICAkYXBpPSRhcGkuIjxsaSBvbmNsaWNrPVwibG9jYXRpb24uaHJlZj0nP3R5cGU9bmV3c2luZm8maWQ9Ii4kcm93WyJOX2lkIl0uIidcIj4NCgkJCQkJCQk8YSBocmVmPVwiP3R5cGU9bmV3c2luZm8maWQ9Ii4kcm93WyJOX2lkIl0uIlwiIHRhcmdldD1cIl9ibGFua1wiIHRpdGxlPVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiIGNsYXNzPVwiaW1nXCI+DQoJCQkJCQkJCTxpbWcgc3JjPVwiIi5waWMoJHJvd1siTl9waWMiXSkuIlwiIGNsYXNzPVwidGh1bWJcIiBhbHQ9XCIiLiRyb3dbIk5fdGl0bGUiXS4iXCI+DQoJCQkJCQkJPC9hPg0KCQkJCQkJCTxoND48YSBocmVmPVwiP3R5cGU9bmV3c2luZm8maWQ9Ii4kcm93WyJOX2lkIl0uIlwiIHRhcmdldD1cIl9ibGFua1wiIHRpdGxlPVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiPiIuJHJvd1siTl90aXRsZSJdLiI8L2E+PC9oND4NCgkJCQkJCQk8cCBjbGFzcz1cIm1ldGFcIj4NCgkJCQkJCQkJPHNwYW4gY2xhc3M9XCJ0aW1lXCI+PGkgY2xhc3M9XCJpY29uIGljb24tdGltZVwiPjwvaT4gIi5kYXRlKCJZLW0tZCIsc3RydG90aW1lKCRyb3dbIk5fZGF0ZSJdKSkuIjwvc3Bhbj4gDQoJCQkJCQkJCTxzcGFuIGNsYXNzPVwidmlld3NcIj48aSBjbGFzcz1cImljb24gaWNvbi1leWVcIj48L2k+ICIuJHJvd1siTl92aWV3Il0uIjwvc3Bhbj4gDQoJCQkJCQkJCTxzcGFuIGNsYXNzPVwiY29tbWVudHNcIj48aSBjbGFzcz1cImljb24gaWNvbi1wb3N0c1wiPjwvaT4g77+lIi5wKCRyb3dbIk5fcHJpY2UiXSkuIjwvc3Bhbj4NCgkJCQkJCQk8L3A+DQoJCQkJCQk8L2xpPiI7DQoNCg0KICAgICAkaT0kaSsxOw0KICAgICBdXQ0KPC9maC1mdW5jdGlvbj4NCg0KDQoNCgkJCQkJICAgIAkJCQkJICAgDQoJCQkJCSAgICAJDQoJCSAgICAgICAgICAgICAgICA8L3VsPg0KDQoJCSAgICAgICAgICAgIDwvZGl2Pg0KCQkJPC9kaXY+DQoJCTwvYXNpZGU+DQoJPC9kaXY+DQo8L2Rpdj4NCjwvZGl2PgkJDQoNCjxzY3JpcHQgaWQ9InRwbF9lbXB0eSIgdHlwZT0idGV4dC9odG1sIj4NCiAgICA8ZGl2IGNsYXNzPSJpbmZvaW1nIj4NCgkgICAgPGltZyBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvL2ltZy9ub2RhdGEucG5nIj4NCgk8L2Rpdj4NCjwvc2NyaXB0Pg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQogICAgdmFyIHBhZ2UgPSAxOw0KICAgIHZhciBzY3JvbGxlZCA9IGZhbHNlOw0KICAgIHZhciBjdXJyZW50X3R5cGUgPSAiNDAwNiI7DQogICAgZnVuY3Rpb24gYmluZFNjcm9sbGVyKCl7DQogICAgICAgIHZhciBsb2FkZWQgPSBmYWxzZTsNCiAgICAgICAgdmFyIHN0b3AgPSB0cnVlOyAgDQogICAgICAgICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGxvYWRlZCkgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRvdGFsaGVpZ2h0ID0gcGFyc2VGbG9hdCgkKHdpbmRvdykuaGVpZ2h0KCkpICsgcGFyc2VGbG9hdCgkKHdpbmRvdykuc2Nyb2xsVG9wKCkpOw0KICAgICAgICAgICAgaWYgKCQoZG9jdW1lbnQpLmhlaWdodCgpIDw9IHRvdGFsaGVpZ2h0KSB7DQogICAgICAgICAgICAgICAgaWYgKHN0b3AgPT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgICAgICBzdG9wID0gZmFsc2U7IHNjcm9sbGVkID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgJCgnI2NvbnRhaW5lcicpLmFwcGVuZCgnPGRpdiBpZD0iY3JlZGl0X2xvYWRpbmciPjxpIGNsYXNzPSJmYSBmYS1zcGlubmVyIGZhLXNwaW4iPjwvaT4g5q2j5Zyo5Yqg6L29Li4uPC9kaXY+Jyk7DQogICAgICAgICAgICAgICAgICAgIHBhZ2UrKzsNCiAgICAgICAgICAgICAgICAgICAgY29yZV9qc29uKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PWNhdGVnb3J5JmRvPWFydGljbGUmb3A9Y2F0ZWdvcnkmbT1lc2hvcCZiZWlkPTEwIiwge2lkOmN1cnJlbnRfdHlwZSxwYWdlOiBwYWdlfSwgZnVuY3Rpb24gKG1vcmVqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVkaXRfbG9hZGluZycpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2NvbnRhaW5lciIpLmFwcGVuZCh0cGwoJ3RwbF9sb2cnLCBtb3JlanNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb3JlanNvbi5yZXN1bHQubGlzdC5sZW5ndGggPCBtb3JlanNvbi5yZXN1bHQucGFnZXNpemUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjY29udGFpbmVyIikuYXBwZW5kKCc8ZGl2IGlkPSJjcmVkaXRfbG9hZGluZyI+5bey57uP5Yqg6L295a6M5YWo6YOo6K6w5b2VPC9kaXY+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykuc2Nyb2xsID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0sIHRydWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGdldExvZyh0eXBlKSB7DQogICAgICAgIGNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD1jYXRlZ29yeSZkbz1hcnRpY2xlJm9wPWNhdGVnb3J5Jm09ZXNob3AmYmVpZD0xMCIsIHtpZDp0eXBlLHBhZ2U6IHBhZ2V9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzdWx0Lmxpc3QubGVuZ3RoIDw9IDApIHsNCiAgICAgICAgICAgICAgICAkKCcjY29udGFpbmVyJykuaHRtbCh0cGwoJ3RwbF9lbXB0eScpKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjY29udGFpbmVyJykuaHRtbCh0cGwoJ3RwbF9sb2cnLCBqc29uLnJlc3VsdCkpOw0KICAgICAgICAgICAgYmluZFNjcm9sbGVyKCk7DQogICAgICAgIH0sIHRydWUpOw0KICAgIH0NCiAgICAkKCcuZmlsdGVyIGEnKS51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkgdmFyICRjdXJySXRlbSA9ICQodGhpcyksDQoJICAgIGluZGV4ID0gJGN1cnJJdGVtLmluZGV4KCk7DQoJICAgICRjdXJySXRlbS5hZGRDbGFzcygnYWN0aXZlJykuc2libGluZ3MoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CQ0KICAgICAgICBwYWdlID0gMTsgY3VycmVudF90eXBlID0gJCh0aGlzKS5kYXRhKCd0eXBlJykNCiAgICAgICAgZ2V0TG9nKGN1cnJlbnRfdHlwZSk7DQogICAgfSk7CQ0KICAgIGdldExvZyhjdXJyZW50X3R5cGUpOw0KPC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LnBhZ2VyLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiQoIi5zY21zLXBpYyIpLmF0dHIoInN0eWxlIiwiZmxvYXQ6IG5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wOyIpOw0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQogICAgJCgiI3BhZ2VyIikucGFnZXIoeyBwYWdlbnVtYmVyOiA8ZmgtZnVuY3Rpb24+ICRhcGk9JGFwaS4kcGFnZTs8L2ZoLWZ1bmN0aW9uPiwgcGFnZWNvdW50OiA8ZmgtZnVuY3Rpb24+ICRhcGk9JGFwaS4kcGFnZV9udW07PC9maC1mdW5jdGlvbj4sIGJ1dHRvbkNsaWNrQ2FsbGJhY2s6IFBhZ2VDbGljayB9KTsNCn0pOw0KDQpQYWdlQ2xpY2sgPSBmdW5jdGlvbihwYWdlY2xpY2tlZG51bWJlcikgew0KICB3aW5kb3cubG9jYXRpb249IjxmaC1mdW5jdGlvbj4kYXBpPSRhcGkudXJsKCR1cmwsInBhZ2UiLCRfR0VUWyJwYWdlIl0pOzwvZmgtZnVuY3Rpb24+JnBhZ2U9IitwYWdlY2xpY2tlZG51bWJlcjsNCn0NCjwvc2NyaXB0Pg0KDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLndpZGdldC1ib3R0b20tbG9nbyAuZm9vdGVyLWxvZ28gaW1ne3dpZHRoOiBhdXRvfQ0KPC9zdHlsZT4NCjxmb290ZXIgY2xhc3M9ImZvb3RlciI+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+DQo8L2JvZHk+PC9odG1sPg==