diff --git a/loader.ebc.user.js b/loader.ebc.user.js
index 11e3205..ffd2b34 100644
--- a/loader.ebc.user.js
+++ b/loader.ebc.user.js
@@ -7,12 +7,11 @@
// @description:en PEX local-dev loader for EBC (loads the build from localhost:8000)
// @author PEX
// @supportURL https://github.com/Nice8923/BC-PEX
-// @include /^https:\/\/(www\.)?bondage(projects\.elementfx|-(europe|asia))\.com\/.*/
+// @include /^https?:\/\/(www\.)?(bondageprojects\.com|bondageprojects\.elementfx\.com|bondage-europe\.com|bondage-asia\.com)\/.*/
// @grant none
// @run-at document-end
// ==/UserScript==
-window.PEX = window.PEX ?? {};
if (window.PEX) {
console.warn('⚗️[PEX] 已加载,跳过重复导入。');
} else {
diff --git a/loader.embedded.user.js b/loader.embedded.user.js
index 95e3d3d..d98ea27 100644
--- a/loader.embedded.user.js
+++ b/loader.embedded.user.js
@@ -7,16 +7,15 @@
// @description:en Persona excretion gameplay: dizzy → excrete → blank → gel → feed-back recovery. Built-in sounds & expressions, /pex commands.
// @author PEX
// @supportURL https://github.com/Nice8923/BC-PEX
-// @include /^https:\/\/(www\.)?bondage(projects\.elementfx|-(europe|asia))\.com\/.*/
+// @include /^https?:\/\/(www\.)?(bondageprojects\.com|bondageprojects\.elementfx\.com|bondage-europe\.com|bondage-asia\.com)\/.*/
// @grant none
// @run-at document-end
// ==/UserScript==
-window.PEX = window.PEX ?? {};
if (window.PEX) {
console.warn('⚗️[PEX] 已加载,跳过重复加载。');
} else {
- const CODE = 'Y29uc3QgTj0iMC4xLjM0Ijtjb25zdCBndD0iUEVYX1NldHRpbmdzIixHbj1bIuS6uuagvOiNr+awtCIsIuS6uuagvOiNr+WJgiIsInBlcnNvbmEgcG90aW9uIiwicGVyc29uYWxpdHkgZXh0cmFjdGlvbiJdLFZuPVsi5Yed6IO26I2v5YmCIiwi5Yed6IO26I2v5rC0IiwicGxhaW4gZ2VsIiwibm9ybWFsIGdlbCJdLEtuPVt7RXllYnJvd3M6IlNvZnQiLEV5ZXM6IlZlcnlMZXdkIixNb3V0aDoiRnJvd24iLEJsdXNoOiJIaWdoIn0se0V5ZWJyb3dzOiJMb3dlcmVkIixFeWVzOiJIZWFydFBpbmsiLE1vdXRoOiJNb2FuIixCbHVzaDoiSGlnaCJ9XSxIbj17RXllYnJvd3M6IlJhaXNlZCIsRXllczoiTGV3ZEhlYXJ0UGluayIsTW91dGg6IkFoZWdhbyIsQmx1c2g6IlZlcnlIaWdoIn0sam49e0V5ZWJyb3dzOiJMb3dlcmVkIixFeWVzOiJEYXplZCIsTW91dGg6IkZyb3duIixCbHVzaDoiVmVyeUhpZ2gifSx6bj17RXllYnJvd3M6Ikxvd2VyZWQiLEV5ZXM6Ikxld2QiLE1vdXRoOiJPcGVuIixCbHVzaDoiTWVkaXVtIn0sV249Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9OaWNlODkyMy9CQy1QRVhAbWFpbi9Tb3VuZC8iLFg9ZT0+V24rZSxVZT17d2FpdDpbWCgid2FpdF8xLm1wMyIpLFgoIndhaXRfMi5tcDMiKSxYKCJ3YWl0XzMubXAzIiksWCgid2FpdF80Lm1wMyIpLFgoIndhaXRfNS5tcDMiKV0sZXhjcmV0ZTpbWCgiZXhjcmV0ZS5tcDMiKV0sZmVlZDpbWCgiZmVlZC5tcDMiKV19O2Z1bmN0aW9uIFIoKXtyZXR1cm57ZW5hYmxlZDohMCxrZXl3b3JkczpbLi4uR25dLG5vcm1hbEtleXdvcmRzOlsuLi5Wbl0sd2FpdFNlY29uZHM6NTAsYmxvY2tlZFdhaXRNaW51dGVzOjE1LGF1dG9SZXZlcnRFbmFibGVkOiEwLGF1dG9SZXZlcnRNaW51dGVzOjE1LGdlbEV4cGlyZU1vZGU6InZhbmlzaCIsbm9ybWFsRXhwcmVzc2lvblNlY29uZHM6NSxlZmZlY3RMZXZlbDozLHZpZXdNb2RlOiJzdXJyb3VuZCIsYmxpbmRMZXZlbDoyLHRpbWVyVmlzaWJpbGl0eToiYWxsIixmeERpenp5OiEwLGZ4Qmxhbms6ITAsZnhCbHVyOiEwLGZ4U2hha2U6ITAscmVzdHJpY3Rpb25zOiEwLHNlZVJlbW90ZUFuaW1zOiEwLGhlYXJSZW1vdGVTb3VuZHM6ITEsZXhwcmVzc2lvbnM6e3dhaXQ6S24ubWFwKGU9Pih7Li4uZX0pKSxleGNyZXRlOnsuLi5Ibn0sYmxhbms6ey4uLmpufX0sbm9ybWFsRXhwcmVzc2lvbjp7Li4uem59LGdlbExheWVyOjI0LHNvdW5kczp7d2FpdDpVZS53YWl0Lm1hcChlPT5lKSxleGNyZXRlOlVlLmV4Y3JldGUubWFwKGU9PmUpLGZlZWQ6VWUuZmVlZC5tYXAoZT0+ZSl9LHNvdW5kT246e3dhaXQ6ITAsZXhjcmV0ZTohMCxmZWVkOiEwfSxlZGl0TW9kZXM6e3RpbWU6Im9mZiIsYXV0b1JldmVydDoib2ZmIix0aW1lclZpc2liaWxpdHk6Im9mZiJ9LHdoaXRlbGlzdDpbXX19bGV0IGw9UigpO2Z1bmN0aW9uIEdlKGUpe2w9ZX1sZXQgb249bnVsbDtmdW5jdGlvbiBVbihlKXtvbj1lfWZ1bmN0aW9uIFUoKXtyZXR1cm4gb259Y29uc3QgT3Q9e3poOntsb2FkZWQ6IuKal++4jyBQRVggdnt2fSDlt7LliqDovb3jgILovpPlhaUgL3BleCBoZWxwIOafpeeci+aMh+S7pOOAgiIsaGVscDpbIuKal++4jyBQRVggdnt2fSDmjIfku6TvvJoiLCIvcGV4IGhlbHAgICAgIOKAlCDmnKzluK7liqkiLCIvcGV4IGhvd3RvICAgIOKAlCDnjqnms5Xor7TmmI4iLCIvcGV4IHNob3cgICAgIOKAlCDmiZPlvIAv5YWz6Zet5ri45oiP5YaF5o6n5Yi25Y+w6Z2i5p2/IiwiL3BleCBzdGF0dXMgICDigJQg5p+l55yL5b2T5YmN54q25oCBIiwiL3BleCByZXNldCAgICDigJQg5by65Yi25oGi5aSN77yI5riF6Zmk562J5b6FL+Wkseelni/lh53og7bnirbmgIHvvIkiLCIvcGV4IHNldHRpbmdzIOKAlCDmiZPlvIDorr7nva7pobUiLCIvcGV4IHNhdmUgICAgIOKAlCDnq4vljbPkv53lrZjorr7nva4iLCLosIPor5XvvJrmjIkgRjEyIOaIliBDdHJsK1NoaWZ0K0kg5omT5byA5rWP6KeI5Zmo5o6n5Yi25Y+w77yMIiwi5oqKIOKal++4j1tQRVhdIOW8gOWktOeahOaKpemUmeS/oeaBr+WPkee7meS9nOiAheOAgiJdLmpvaW4oYApgKSxjbWRVbmtub3duOiLmnKrnn6XmjIfku6TvvJovcGV4IHtzdWJ977yIL3BleCBoZWxwIOafpeeci+W4ruWKqe+8iSIsaG93dG86WyLimpfvuI8gUEVYIOeOqeazleivtOaYju+8miIsJzEuIOWItuS9nOS4gOeTtumlruaWme+8iOa4uOaIj+iHquW4pumBk+WFt++8ie+8jOWcqOWItuS9nOWQjS/mj4/ov7Dlhpnop6blj5HlhbPplK7or43vvIjlpoIi5Lq65qC86I2v5rC0Iu+8ieOAgicsIjIuIOWWneS4i+aIluazqOWwhOW4puWFs+mUruivjeeahOmlruaWmSDihpIg5LiA6Zi16Zi16LaK5p2l6LaK5pmV44CCIiwiMy4g5Yiw5o6S5Ye65pe25Yi75qOA5p+l6IeA6YOo6KOF5aSH5L2N77ya5rKh5Lic6KW/5bCx5o6S5Ye677ybIiwiICAg5pyJ5Lic6KW/5Lya562J5b6F77yI5ou/5o6J56uL5Yi75o6S77yJ77yM6LaF5LiK6ZmQ5YiZ6I2v5pWI5raI5aSx44CCIiwiNC4g5Lq65qC85Yed6IO25o6S5Ye65ZCO5aSx56We77yI6buR55m9L+S4jeiDveWKqC/op4bph47lj5jnqoQv56aB6KiA77yJ77yM5Yed6IO26JC95Zyo6ISa6L6544CCIiwnNS4g54K55Ye75aSx56We6ICFIOKGkiDlr7nor53moYYi5o2h6LW35Yed6IO2Iu+8iOaJi+imgeepuu+8ieOAgicsIjYuIOaKiuWHneiDtuS6pOi/mOWOn+S4u+S6uu+8jOS4u+S6uuWWneS4i+iHquW3seeahOWHneiDtiDihpIg5oGi5aSN77ybIiwiICAg6buY6K6kMTXliIbpkp/msqHlloLlm57oh6rliqjmgaLlpI3vvIzlh53og7bmtojmlaPvvIjlj6/lhbPpl63vvInjgIIiLCI3LiDmma7pgJrlh53og7bvvIjlj6bkuIDlpZflhbPplK7or43vvInvvJrml6DnnKnmmZXlpLHnpZ7vvIzlj6rmnInnn63mmoLooajmg4Xlj5jljJbjgIIiLCc4LiDlronlhajvvJovcGV4IHJlc2V0IOaIluiuvue9rumhtSLlvLrliLbmgaLlpI0i44CCJywi5pu05aSa77yaL3BleCBzZXR0aW5ncyDph4zmnInlrozmlbTnjqnms5Xor7TmmI7pobXjgIIiXS5qb2luKGAKYCkscmVzZXREb25lOiLlt7LlvLrliLbmgaLlpI3vvIzmiYDmnInnirbmgIHlt7LmuIXpmaTjgIIiLHJlc2V0Q29uZmlybToi56Gu5a6a6KaB5by65Yi25oGi5aSN5ZCX77yf5q2k5pON5L2c5Lya56uL5Y2z5riF6Zmk5YWo6YOoIFBFWCDnirbmgIHjgIIiLHN0YXR1c0xpbmU6IuW9k+WJjeeKtuaAge+8mntzdGF0ZX0iLHN0YXRlSWRsZToi5q2j5bi4IixzdGF0ZVdhaXRpbmc6IuetieW+heaOkuWHuu+8iOWJqeS9mSB7c2VjfSDnp5LvvIkiLHN0YXRlQmxvY2tlZDoi6IeA6YOo5pyJ54mp5ZOB6YGu5oyh77yM562J5b6F5Lit77yI5Ymp5L2ZIHttaW59IOWIhiB7c2VjfSDnp5LvvIkiLHN0YXRlRXhjcmV0aW5nOiLmjpLlh7rkuK3igKYiLHN0YXRlQmxhbms6IuWkseelnuS4re+8iOWJqeS9mSB7bWlufSDliIYge3NlY30g56eS77yJIixzdGF0ZUJsYW5rTm9ybWFsOiLlh53og7bmjpLlh7rvvIjliankvZkge21pbn0g5YiGIHtzZWN9IOenku+8iSIsY2FudE9wZW5TZXR0aW5nczoi5peg5rOV5omT5byA6K6+572u6aG177yI5b2T5YmN55S76Z2i5LiN5pSv5oyB77yJ44CCIixub0NoYXRCb3g6IuaJvuS4jeWIsOiBiuWkqeahhu+8jOivt+WFiOi/m+WFpeiBiuWkqeWupOWGjei+k+WFpSAvcGV4IHNob3fjgIIiLGdlbEV4cGlyZWQ6IiVOQU1FJeeahOS6uuagvOWHneiDtumaj+aXtumXtOa2iOaVo+S6huOAgiIsZ2VsRXhwaXJlZE5vcm1hbDoiJU5BTUUl55qE5pmu6YCa5Yed6IO26ZqP5pe26Ze05raI5pWj5LqG44CCIixnZWxJbnZhbGlkYXRlZDoiJU5BTUUl55qE5Lq65qC85Yed6IO25aSx5Y675LqG5pWI5Yqb77yM5Y+Y5oiQ5LqG5peg5pWI5Yed6IO24oCmIixnZWxJbnZhbGlkYXRlZE5vcm1hbDoiJU5BTUUl55qE5pmu6YCa5Yed6IO25aSx5Y675LqG5pWI5Yqb77yM5Y+Y5oiQ5LqG5peg5pWI5Yed6IO24oCmIixwcm9maWxlRWRpdEJ0bjoi6L+c56iL57yW6L6R5a+55pa5IFBFWCDorr7nva4iLHByb2ZpbGVFZGl0Tm9QZXJtOiLkuI3lnKjlr7nmlrnnmb3lkI3ljZXvvIzml6Dms5XnvJbovpEiLHByb2ZpbGVFZGl0T2ZmOiLlr7nmlrnkuI3lhYHorrjov5znqIvkv67mlLkiLGFjY2Vzc2VkWW91clBFWDoie3dob30g5p+l55yL5LqG5L2g55qEIFBFWCDorr7nva4iLGVkaXRlZFlvdXJQRVg6Int3aG99IOS/ruaUueS6huS9oOeahCBQRVgg6K6+572uIixyZW1vdGVFZGl0TG9hZGluZzoi5q2j5Zyo6I635Y+WIHtuYW1lfSDnmoQgUEVYIOiuvue9ruKApiIscmVtb3RlRWRpdExvYWRGYWlsOiLojrflj5blpLHotKXvvJrlr7nmlrnmnKrlronoo4UgUEVYIOaIluacquWTjeW6lO+8jOWPr+mHjeivleOAgiJ9fTtsZXQgcnQ9InpoIjthc3luYyBmdW5jdGlvbiBZbigpe3JldHVybiBydD0iemgiLHJ0fWZ1bmN0aW9uIHgoZSx0PXt9KXtsZXQgbj1PdFtydF0/LltlXT8/T3QuemhbZV0/P2U7Zm9yKGNvbnN0W3IsaV1vZiBPYmplY3QuZW50cmllcyh0KSluPW4uc3BsaXQoYHske3J9fWApLmpvaW4oU3RyaW5nKGkpKTtyZXR1cm4gbn1jb25zdCAkdD0yNTAsZGU9W10sb2U9bmV3IE1hcDtsZXQgcT1udWxsLEJ0PTA7ZnVuY3Rpb24gcW4oZSl7Y29uc3QgdD1bXTt0cnl7UGxheWVyJiZ0eXBlb2YgUGxheWVyLk1lbWJlck51bWJlcj09Im51bWJlciImJnQucHVzaCh7U291cmNlQ2hhcmFjdGVyOlBsYXllci5NZW1iZXJOdW1iZXJ9KX1jYXRjaHt9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/dC5jb25jYXQoZSk6dH1mdW5jdGlvbiBpdCgpe2lmKHE9bnVsbCwhZGUubGVuZ3RoKXJldHVybjtjb25zdCBlPURhdGUubm93KCksdD1NYXRoLm1heCgwLCR0LShlLUJ0KSk7aWYodD4wKXtxPXNldFRpbWVvdXQoaXQsdCk7cmV0dXJufWNvbnN0IG49ZGUuc2hpZnQoKTt0cnl7dHlwZW9mIFNlcnZlclNlbmQ9PSJmdW5jdGlvbiImJlNlcnZlclNlbmQoIkNoYXRSb29tQ2hhdCIsbi5wYXlsb2FkKX1jYXRjaHt9QnQ9RGF0ZS5ub3coKSxkZS5sZW5ndGgmJiFxJiYocT1zZXRUaW1lb3V0KGl0LCR0KSl9ZnVuY3Rpb24gUChlLHQsbj17fSl7Y29uc3R7ZGVkdXBlS2V5OnI9bnVsbCxkZWR1cGVNczppPTgwMCxwcmlvcml0eTpvPSExfT1uO2lmKHIpe2NvbnN0IGM9RGF0ZS5ub3coKSx1PW9lLmdldChyKTtpZih1JiZjLXU8aSlyZXR1cm4hMTtpZihvZS5zZXQocixjKSxvZS5zaXplPjIwMClmb3IoY29uc3RbZCxoXW9mIG9lKWMtaD42ZTQmJm9lLmRlbGV0ZShkKX1jb25zdCBhPXtwYXlsb2FkOntUeXBlOiJIaWRkZW4iLENvbnRlbnQ6ZSxEaWN0aW9uYXJ5OnFuKHQpfX07cmV0dXJuIG8/ZGUudW5zaGlmdChhKTpkZS5wdXNoKGEpLHF8fChxPXNldFRpbWVvdXQoaXQsMCkpLCEwfWZ1bmN0aW9uIGIoZSx0KXt0cnl7Y29uc3Qgbj1KbihlKTtpZighbilyZXR1cm47Y29uc3Qgcj17VHlwZToiQWN0aW9uIixDb250ZW50Om59O3QhPW51bGwmJihyLlRhcmdldD10KSx0eXBlb2YgU2VydmVyU2VuZD09ImZ1bmN0aW9uIiYmU2VydmVyU2VuZCgiQ2hhdFJvb21DaGF0IixyKSxzZXRUaW1lb3V0KCgpPT57dHJ5e2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHRBcmVhQ2hhdExvZyIpO2kmJihpLnNjcm9sbFRvcD1pLnNjcm9sbEhlaWdodCl9Y2F0Y2h7fX0sNjApfWNhdGNoe319ZnVuY3Rpb24gSm4oZSl7bGV0IHQ9IiI7dHJ5e3Q9Q2hhcmFjdGVyTmlja25hbWUoUGxheWVyKXx8IiJ9Y2F0Y2h7fXJldHVybiBTdHJpbmcoZSkuc3BsaXQoIiVOQU1FJSIpLmpvaW4odCkuc3BsaXQoIiVQT1NTRVNTSVZFJSIpLmpvaW4oIuiHquW3seeahCIpLnNwbGl0KCIlT1BQX05BTUUlIikuam9pbigi5a+55pa5Iikuc3BsaXQoIiVPUFBfUE9TU0VTU0lWRSUiKS5qb2luKCLlr7nmlrnnmoQiKS5zcGxpdCgiJVBST05PVU4lIikuam9pbigi6Ieq5bexIikuc3BsaXQoIiVJTlRFTlNJVkUlIikuam9pbigi6Ieq5bexIil9Y29uc3QgeHQ9W107ZnVuY3Rpb24gaWUoZSl7dHlwZW9mIGU9PSJmdW5jdGlvbiImJnh0LnB1c2goZSl9ZnVuY3Rpb24gYW4oZSl7aWYoZSl0cnl7ZS5ob29rRnVuY3Rpb24oIlRleHRRdWVyeU11bHRpcGxlIiwwLCh0LG4pPT57Y29uc3Qgcj10JiZ0WzBdLGk9bih0KTtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZpLmluZGV4T2YoIk1JU1NJTkcgVEVYVCBJTiIpPj0wJiZ0eXBlb2Ygcj09InN0cmluZyI/cjppfSl9Y2F0Y2h7fX1mdW5jdGlvbiBvdChlKXtpZihlKXRyeXtlLmhvb2tGdW5jdGlvbigiQ2hhdFJvb21NZXNzYWdlIiwxLCh0LG4pPT57Y29uc3Qgcj1uKHQpO3RyeXtjb25zdCBpPXRbMF07aWYoIWl8fHR5cGVvZiBpIT0ib2JqZWN0IilyZXR1cm4gcjtmb3IoY29uc3QgbyBvZiB4dCl0cnl7byhpKX1jYXRjaHt9fWNhdGNoe31yZXR1cm4gcn0pfWNhdGNoKHQpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0gQ2hhdFJvb21NZXNzYWdlIOaMgumSqeWksei0pToiLHQubWVzc2FnZSl9fWZ1bmN0aW9uIFFuKCl7eHQubGVuZ3RoPTB9Y29uc3QgWm49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGNsZWFyTWVzc2FnZUhhbmRsZXJzOlFuLHBleE9uTWVzc2FnZTppZSxwZXhTZW5kQWN0aW9uOmIscGV4U2VuZEhpZGRlbjpQLHJlZ2lzdGVyTWVzc2FnZUhvb2s6b3QscmVnaXN0ZXJUZXh0UXVlcnlIb29rOmFufSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO2Z1bmN0aW9uIGJ0KGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OmU7aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QiKXtjb25zdCBuPXt9O2Zvcihjb25zdCByIG9mIE9iamVjdC5rZXlzKGUpKW5bcl09dCYmciBpbiB0P2J0KGVbcl0sdFtyXSk6ZVtyXTtyZXR1cm4gbn1yZXR1cm4gdD09PXZvaWQgMD9lOnR9ZnVuY3Rpb24gdnQoKXtjb25zdCBlPWw7cmV0dXJue3Y6MSxlbmFibGVkOmUuZW5hYmxlZCxrZXl3b3JkczplLmtleXdvcmRzLG5vcm1hbEtleXdvcmRzOmUubm9ybWFsS2V5d29yZHMsd2FpdFNlY29uZHM6ZS53YWl0U2Vjb25kcyxibG9ja2VkV2FpdE1pbnV0ZXM6ZS5ibG9ja2VkV2FpdE1pbnV0ZXMsYXV0b1JldmVydEVuYWJsZWQ6ZS5hdXRvUmV2ZXJ0RW5hYmxlZCxhdXRvUmV2ZXJ0TWludXRlczplLmF1dG9SZXZlcnRNaW51dGVzLGdlbEV4cGlyZU1vZGU6ZS5nZWxFeHBpcmVNb2RlLG5vcm1hbEV4cHJlc3Npb25TZWNvbmRzOmUubm9ybWFsRXhwcmVzc2lvblNlY29uZHMsZWZmZWN0TGV2ZWw6ZS5lZmZlY3RMZXZlbCx2aWV3TW9kZTplLnZpZXdNb2RlLGJsaW5kTGV2ZWw6ZS5ibGluZExldmVsLHRpbWVyVmlzaWJpbGl0eTplLnRpbWVyVmlzaWJpbGl0eSxmeERpenp5OmUuZnhEaXp6eSxmeEJsYW5rOmUuZnhCbGFuayxmeEJsdXI6ZS5meEJsdXIsZnhTaGFrZTplLmZ4U2hha2UscmVzdHJpY3Rpb25zOmUucmVzdHJpY3Rpb25zLHNlZVJlbW90ZUFuaW1zOmUuc2VlUmVtb3RlQW5pbXMsZXhwcmVzc2lvbnM6ZS5leHByZXNzaW9ucyxub3JtYWxFeHByZXNzaW9uOmUubm9ybWFsRXhwcmVzc2lvbixnZWxMYXllcjplLmdlbExheWVyLGVkaXRNb2RlczplLmVkaXRNb2Rlcyx3aGl0ZWxpc3Q6ZS53aGl0ZWxpc3R9fWNvbnN0IHNuPSJQRVhfc291bmRzIjtmdW5jdGlvbiBsbigpe3RyeXtjb25zdCBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKHNuKSx0PVIoKS5zb3VuZHM7aWYoZSl7Y29uc3Qgbj1KU09OLnBhcnNlKGUpLHI9biYmdHlwZW9mIG49PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShuKSYmInNvdW5kcyJpbiBuP24uc291bmRzOm4saT1BcnJheS5pc0FycmF5KHI/LmRyaW5rKT9yLmRyaW5rOltdLG89e3dhaXQ6W10sZXhjcmV0ZTpbXSxmZWVkOltdfTtmb3IoY29uc3QgcyBvZlsid2FpdCIsImV4Y3JldGUiLCJmZWVkIl0pe2NvbnN0IGE9cj8uW3NdO29bc109QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MD9hLnNsaWNlKCk6dFtzXS5zbGljZSgpfWkubGVuZ3RoJiYoby53YWl0PWkuY29uY2F0KG8ud2FpdCkpLGwuc291bmRzPW8sbiYmdHlwZW9mIG4uc291bmRPbj09Im9iamVjdCImJm4uc291bmRPbiYmKGwuc291bmRPbj1PYmplY3QuYXNzaWduKHt9LFIoKS5zb3VuZE9uLG4uc291bmRPbikpfWVsc2UgbC5zb3VuZHM9e3dhaXQ6dC53YWl0LnNsaWNlKCksZXhjcmV0ZTp0LmV4Y3JldGUuc2xpY2UoKSxmZWVkOnQuZmVlZC5zbGljZSgpfSxsLnNvdW5kT249UigpLnNvdW5kT259Y2F0Y2h7fX1mdW5jdGlvbiBSZSgpe3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzbixKU09OLnN0cmluZ2lmeSh7c291bmRzOmwuc291bmRzLHNvdW5kT246bC5zb3VuZE9ufSkpfWNhdGNoe319ZnVuY3Rpb24gRGUoKXt0cnl7cmV0dXJuIlBFWF9zZXR0aW5nc19iYWNrdXBfIisoUGxheWVyPy5NZW1iZXJOdW1iZXJ8fFBsYXllcj8uQWNjb3VudE5hbWV8fCJhbm9uIil9Y2F0Y2h7cmV0dXJuIlBFWF9zZXR0aW5nc19iYWNrdXBfYW5vbiJ9fWxldCBMZT0hMTtmdW5jdGlvbiBhdChlKXt0cnl7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1MWlN0cmluZy5kZWNvbXByZXNzRnJvbUJhc2U2NChlKTtyZXR1cm4gdD9KU09OLnBhcnNlKHQpOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGVyKGUpe0dlKGJ0KFIoKSxlKSl9ZnVuY3Rpb24gdHIoZT0xNWUzKXtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuIG5ldyBQcm9taXNlKG49Pntjb25zdCByPSgpPT57dHJ5e1BsYXllciYmUGxheWVyLkV4dGVuc2lvblNldHRpbmdzIT09dm9pZCAwP24oITApOkRhdGUubm93KCktdD5lP24oITEpOnNldFRpbWVvdXQociwyMDApfWNhdGNoe24oITEpfX07cigpfSl9ZnVuY3Rpb24gY24oKXtsZXQgZT1udWxsLHQ9bnVsbDt0cnl7ZT1QbGF5ZXI/LkV4dGVuc2lvblNldHRpbmdzPy5bIlBFWCJdPz9udWxsfWNhdGNoe310cnl7dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShEZSgpKX1jYXRjaHt9Y29uc3Qgbj1hdChlKSxyPWF0KHQpLGk9biYmK24udHN8fDAsbz1yJiYrci50c3x8MDtsZXQgcz1udWxsLGE9bnVsbCxjPSExO24mJmk+PW8/KHM9bixhPWUpOnI/KHM9cixhPXQsYz1pPG8pOm4mJihzPW4sYT1lKTtsZXQgdT0hMTtpZihzKXRyeXtlcihzKSx1PSEwfWNhdGNoKGQpe25yKGQpfWlmKHV8fEdlKFIoKSksbC50aW1lclZpc2liaWxpdHk9PT0iYm90aCImJihsLnRpbWVyVmlzaWJpbGl0eT0iYWxsIiksQXJyYXkuaXNBcnJheShsLmV4cHJlc3Npb25zKSl7Y29uc3QgZD1sLmV4cHJlc3Npb25zLGg9UigpLmV4cHJlc3Npb25zO2wuZXhwcmVzc2lvbnM9e3dhaXQ6W2RbMF0sZFsxXV0uZmlsdGVyKEJvb2xlYW4pLm1hcChBPT4oey4uLkF9KSksZXhjcmV0ZTpkWzJdP3suLi5kWzJdfTpoLmV4Y3JldGUsYmxhbms6ZFszXXx8ZFswXT97Li4uZFszXXx8ZFswXX06aC5ibGFua319aWYoTGU9ITAsbG4oKSx1JiZhKXt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oRGUoKSxhKX1jYXRjaHt9aWYoYyl0cnl7UGxheWVyLkV4dGVuc2lvblNldHRpbmdzfHwoUGxheWVyLkV4dGVuc2lvblNldHRpbmdzPXt9KSxQbGF5ZXIuRXh0ZW5zaW9uU2V0dGluZ3MuUEVYPWEsdHlwZW9mIFNlcnZlclBsYXllckV4dGVuc2lvblNldHRpbmdzU3luYz09ImZ1bmN0aW9uIiYmU2VydmVyUGxheWVyRXh0ZW5zaW9uU2V0dGluZ3NTeW5jKCJQRVgiKSxjb25zb2xlLmxvZygi4pqX77iPW1BFWF0g6LSm5Y+35pWw5o2u6JC95ZCOL+S4ouWkse+8jOW3suS7juacrOWcsOWkh+S7vei/mOWOn+W5tuihpeWbnui0puWPtyIpfWNhdGNoe319fWxldCBJPW51bGw7ZnVuY3Rpb24gWWUoKXt0cnl7aWYoSSYmKGNsZWFyVGltZW91dChJKSxJPW51bGwpLExlJiZQbGF5ZXIpe1BsYXllci5FeHRlbnNpb25TZXR0aW5nc3x8KFBsYXllci5FeHRlbnNpb25TZXR0aW5ncz17fSk7Y29uc3QgZT12dCgpO2UudHM9RGF0ZS5ub3coKTtjb25zdCB0PUpTT04uc3RyaW5naWZ5KGUpLG49TFpTdHJpbmcuY29tcHJlc3NUb0Jhc2U2NCh0KTtQbGF5ZXIuRXh0ZW5zaW9uU2V0dGluZ3MuUEVYPW47dHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKERlKCksbil9Y2F0Y2h7fVJlKCk7dHJ5e3R5cGVvZiBTZXJ2ZXJQbGF5ZXJFeHRlbnNpb25TZXR0aW5nc1N5bmM9PSJmdW5jdGlvbiImJlNlcnZlclBsYXllckV4dGVuc2lvblNldHRpbmdzU3luYygiUEVYIil9Y2F0Y2h7fXRyeXt0eXBlb2YgU2VydmVyU2VuZFF1ZXVlUHJvY2Vzcz09ImZ1bmN0aW9uIiYmU2VydmVyU2VuZFF1ZXVlUHJvY2VzcygpfWNhdGNoe319fWNhdGNoe319dHlwZW9mIHdpbmRvdzwidSImJiF3aW5kb3cuX3BleFNhdmVGbHVzaCYmKHdpbmRvdy5fcGV4U2F2ZUZsdXNoPVllLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsWWUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLFllKSk7ZnVuY3Rpb24gXyhlPSExKXtpZighTGUpcmV0dXJuO2NvbnN0IHQ9KCk9Pnt0cnl7aWYoIUxlfHwhUGxheWVyKXJldHVybjtQbGF5ZXIuRXh0ZW5zaW9uU2V0dGluZ3N8fChQbGF5ZXIuRXh0ZW5zaW9uU2V0dGluZ3M9e30pO2NvbnN0IG49dnQoKTtuLnRzPURhdGUubm93KCk7Y29uc3Qgcj1KU09OLnN0cmluZ2lmeShuKSxpPUxaU3RyaW5nLmNvbXByZXNzVG9CYXNlNjQociksbz1hdChpKTtpZighb3x8dHlwZW9mIG8hPSJvYmplY3QiKXtjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIOWtmOaho+agoemqjOWksei0pe+8jOi3s+i/h+acrOasoeWGmeWFpSIpO3JldHVybn1pLmxlbmd0aD5FU19CVURHRVQmJmNvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g6K6+572u6L+H5aSn77yIIitpLmxlbmd0aCsiIOWtl+iKgiA+ICIrRVNfQlVER0VUKyLvvInvvIzmnI3liqHlmajlj6/og73mi5LmlLbvvJror7flh4/lsJHooajmg4Uv5YWz6ZSu6K+NL+mfs+aViCIpLFBsYXllci5FeHRlbnNpb25TZXR0aW5ncy5QRVg9aSx0eXBlb2YgU2VydmVyUGxheWVyRXh0ZW5zaW9uU2V0dGluZ3NTeW5jPT0iZnVuY3Rpb24iJiZTZXJ2ZXJQbGF5ZXJFeHRlbnNpb25TZXR0aW5nc1N5bmMoIlBFWCIpO3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShEZSgpLGkpfWNhdGNoe31SZSgpfWNhdGNoKG4pe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g5L+d5a2Y5aSx6LSlOiIsbi5tZXNzYWdlKX19O2lmKGUpe0kmJihjbGVhclRpbWVvdXQoSSksST1udWxsKSx0KCk7cmV0dXJufUkmJmNsZWFyVGltZW91dChJKSxJPXNldFRpbWVvdXQoKCk9PntJPW51bGwsdCgpfSw2MDApfWxldCBGPW51bGwsWHQ9IiI7ZnVuY3Rpb24gVChlLHQ9ITEpe3RyeXtpZighUGxheWVyfHwhUGxheWVyLk9ubGluZVNoYXJlZFNldHRpbmdzKXJldHVybjtQbGF5ZXIuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYfHwoUGxheWVyLk9ubGluZVNoYXJlZFNldHRpbmdzLlBFWD17fSk7Y29uc3Qgbj1KU09OLnN0cmluZ2lmeShlKTtpZihuPT09WHQmJiF0KXJldHVybjtYdD1uO2NvbnN0IHI9KCk9Pntjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sZSk7aS50aW1lclZpc2liaWxpdHk9PT12b2lkIDAmJihpLnRpbWVyVmlzaWJpbGl0eT1sLnRpbWVyVmlzaWJpbGl0eXx8ImJvdGgiKSxQbGF5ZXIuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYLnN0YXRlPWksdHlwZW9mIFNlcnZlckFjY291bnRVcGRhdGU/LlF1ZXVlRGF0YT09ImZ1bmN0aW9uIiYmU2VydmVyQWNjb3VudFVwZGF0ZS5RdWV1ZURhdGEoe09ubGluZVNoYXJlZFNldHRpbmdzOlBsYXllci5PbmxpbmVTaGFyZWRTZXR0aW5nc30sITApO3RyeXtQKCJQRVhfU3RhdGVTeW5jIixbe1RhZzoiUGF5bG9hZCIsVmFsdWU6SlNPTi5zdHJpbmdpZnkoaSl9XSx7ZGVkdXBlS2V5OiJzdGF0ZToiKyhlPy5tb2RlfHwiIikrIjoiKyhlPy5yZW1haW5pbmdTZWN8fDApKyI6IisoZT8uZ2VsSG9sZGVyPz8iIiksZGVkdXBlTXM6NGUzfSl9Y2F0Y2h7fX07dD8oRiYmKGNsZWFyVGltZW91dChGKSxGPW51bGwpLHIoKSk6KEYmJmNsZWFyVGltZW91dChGKSxGPXNldFRpbWVvdXQoKCk9PntGPW51bGwscigpfSwxZTMpKX1jYXRjaHt9fWxldCBHPW51bGw7ZnVuY3Rpb24gZ2UoZT0hMSl7Y29uc3QgdD0oKT0+e3RyeXtpZighUGxheWVyfHwhUGxheWVyLk9ubGluZVNoYXJlZFNldHRpbmdzKXJldHVybjtjb25zdCBuPWwuZWRpdE1vZGVzfHx7fSxyPWE9PmE9PT0iYW55Inx8YT09PSJ3aGl0ZWxpc3QiLG89WyJ0aW1lIiwiYXV0b1JldmVydCIsInRpbWVyVmlzaWJpbGl0eSJdLnNvbWUoYT0+cihuW2FdKSkscz1QbGF5ZXIuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYPy5zdGF0ZTtQbGF5ZXIuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYPXt2Ok4sc3RhdGU6c3x8bnVsbCxlZGl0Om8sZWRpdE1vZGVzOnt0aW1lOm4udGltZXx8Im9mZiIsYXV0b1JldmVydDpuLmF1dG9SZXZlcnR8fCJvZmYiLHRpbWVyVmlzaWJpbGl0eTpuLnRpbWVyVmlzaWJpbGl0eXx8Im9mZiJ9LHdsOkFycmF5LmZyb20obC53aGl0ZWxpc3R8fFtdKX0sdHlwZW9mIFNlcnZlckFjY291bnRVcGRhdGU/LlF1ZXVlRGF0YT09ImZ1bmN0aW9uIiYmU2VydmVyQWNjb3VudFVwZGF0ZS5RdWV1ZURhdGEoe09ubGluZVNoYXJlZFNldHRpbmdzOlBsYXllci5PbmxpbmVTaGFyZWRTZXR0aW5nc30sITApO3RyeXtQKCJQRVhfU2hhcmVkU3luYyIsW3tUYWc6IlBheWxvYWQiLFZhbHVlOkpTT04uc3RyaW5naWZ5KHtlZGl0Om8sZWRpdE1vZGVzOnt0aW1lOm4udGltZXx8Im9mZiIsYXV0b1JldmVydDpuLmF1dG9SZXZlcnR8fCJvZmYiLHRpbWVyVmlzaWJpbGl0eTpuLnRpbWVyVmlzaWJpbGl0eXx8Im9mZiJ9LHdsOkFycmF5LmZyb20obC53aGl0ZWxpc3R8fFtdKX0pfV0se2RlZHVwZUtleToic2hhcmVkIixkZWR1cGVNczozZTN9KX1jYXRjaHt9fWNhdGNoe319O2lmKGUpe0cmJihjbGVhclRpbWVvdXQoRyksRz1udWxsKSx0KCk7cmV0dXJufUcmJmNsZWFyVGltZW91dChHKSxHPXNldFRpbWVvdXQoKCk9PntHPW51bGwsdCgpfSwyZTMpfWZ1bmN0aW9uIHVuKCl7dHJ5e2NvbnN0IGU9e3BsdWdpbjoiUEVYIix2Ok4scGV4OnZ0KCl9LHQ9bmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGUsbnVsbCwyKV0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb24ifSksbj1VUkwuY3JlYXRlT2JqZWN0VVJMKHQpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3IuaHJlZj1uLHIuZG93bmxvYWQ9IlBFWC1zZXR0aW5ncy5qc29uIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLHIuY2xpY2soKSxyLnJlbW92ZSgpLHNldFRpbWVvdXQoKCk9PlVSTC5yZXZva2VPYmplY3RVUkwobiksMWUzKX1jYXRjaChlKXtjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIOWvvOWHuuWksei0pToiLGUubWVzc2FnZSl9fWZ1bmN0aW9uIGRuKCl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2UudHlwZT0iZmlsZSIsZS5hY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24sLmpzb24iLGUub25jaGFuZ2U9KCk9Pntjb25zdCB0PWUuZmlsZXMmJmUuZmlsZXNbMF07aWYoIXQpcmV0dXJuO2NvbnN0IG49bmV3IEZpbGVSZWFkZXI7bi5vbmxvYWQ9KCk9Pnt0cnl7Y29uc3Qgcj1KU09OLnBhcnNlKFN0cmluZyhuLnJlc3VsdCkpLGk9ci5wZXh8fHI7R2UoYnQoUigpLGkpKSxfKCEwKSxnZSghMCksY29uc29sZS5sb2coIuKal++4j1tQRVhdIOiuvue9ruWvvOWFpeWujOaIkCIpfWNhdGNoKHIpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g5a+85YWl5aSx6LSlOiIsci5tZXNzYWdlKX19LG4ucmVhZEFzVGV4dCh0KX0sZS5jbGljaygpfWZ1bmN0aW9uIG5yKGUpe3RyeXtjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIOiuvue9ruW6lOeUqOWksei0pToiLGUubWVzc2FnZSl9Y2F0Y2h7fX1jb25zdCBtPXtJRExFOiJpZGxlIixXQUlUSU5HOiJ3YWl0aW5nIixCTE9DS0VEOiJibG9ja2VkIixFWENSRVRJTkc6ImV4Y3JldGluZyIsQkxBTks6ImJsYW5rIn0sZj17bW9kZTptLklETEUsZ2VsVHlwZToicGVyc29uYSIscGhhc2VTdGFydGVkQXQ6MCxwaGFzZUVuZHNBdDowLG93bmVyTWVtYmVyTnVtYmVyOm51bGwsZ2VsSWQ6bnVsbCxnZWxIb2xkZXI6bnVsbH07ZnVuY3Rpb24gQyhlLHQ9e30pe2YubW9kZT1lLGYucGhhc2VTdGFydGVkQXQ9RGF0ZS5ub3coKSxmLnBoYXNlRW5kc0F0PXQuZW5kc0F0Pz8wLHQub3duZXJNZW1iZXJOdW1iZXIhPT12b2lkIDAmJihmLm93bmVyTWVtYmVyTnVtYmVyPXQub3duZXJNZW1iZXJOdW1iZXIpLHQuZ2VsSWQhPT12b2lkIDAmJihmLmdlbElkPXQuZ2VsSWQpLHQuZ2VsSG9sZGVyIT09dm9pZCAwJiYoZi5nZWxIb2xkZXI9dC5nZWxIb2xkZXIpLHQuZ2VsVHlwZSE9PXZvaWQgMCYmKGYuZ2VsVHlwZT10LmdlbFR5cGUpfWZ1bmN0aW9uIGZuKCl7Y29uc3QgZT1mO3N3aXRjaChlLm1vZGUpe2Nhc2UgbS5JRExFOnJldHVybiB4KCJzdGF0ZUlkbGUiKTtjYXNlIG0uV0FJVElORzp7Y29uc3QgdD1NYXRoLm1heCgwLE1hdGgucm91bmQoKGUucGhhc2VFbmRzQXQtRGF0ZS5ub3coKSkvMWUzKSk7cmV0dXJuIHgoInN0YXRlV2FpdGluZyIse3NlYzp0fSl9Y2FzZSBtLkJMT0NLRUQ6e2NvbnN0IHQ9TWF0aC5tYXgoMCxNYXRoLnJvdW5kKChlLnBoYXNlRW5kc0F0LURhdGUubm93KCkpLzFlMykpO3JldHVybiB4KCJzdGF0ZUJsb2NrZWQiLHttaW46TWF0aC5mbG9vcih0LzYwKSxzZWM6dCU2MH0pfWNhc2UgbS5FWENSRVRJTkc6cmV0dXJuIHgoInN0YXRlRXhjcmV0aW5nIik7Y2FzZSBtLkJMQU5LOntjb25zdCB0PU1hdGgubWF4KDAsTWF0aC5yb3VuZCgoZS5waGFzZUVuZHNBdC1EYXRlLm5vdygpKS8xZTMpKTtyZXR1cm4gZS5nZWxUeXBlPT09Im5vcm1hbCI/eCgic3RhdGVCbGFua05vcm1hbCIse21pbjpNYXRoLmZsb29yKHQvNjApLHNlYzp0JTYwfSk6eCgic3RhdGVCbGFuayIse21pbjpNYXRoLmZsb29yKHQvNjApLHNlYzp0JTYwfSl9ZGVmYXVsdDpyZXR1cm4geCgic3RhdGVJZGxlIil9fWNvbnN0IGNlPVtdLEZ0PTQwO2Z1bmN0aW9uIHBuKGUpe3RyeXtjb25zdCB0PW5ldyBEYXRlLG49aT0+U3RyaW5nKGkpLnBhZFN0YXJ0KDIsIjAiKSxyPSJbIituKHQuZ2V0SG91cnMoKSkrIjoiK24odC5nZXRNaW51dGVzKCkpKyI6IituKHQuZ2V0U2Vjb25kcygpKSsiXSAiK2UubWFwKGk9PnR5cGVvZiBpPT0ic3RyaW5nIj9pOnJyKGkpKS5qb2luKCIgIik7Y2UucHVzaChyKSxjZS5sZW5ndGg+RnQmJmNlLnNwbGljZSgwLGNlLmxlbmd0aC1GdCl9Y2F0Y2h7fX1mdW5jdGlvbiBycihlKXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWNhdGNoe3JldHVybiBTdHJpbmcoZSl9fWZ1bmN0aW9uIHAoLi4uZSl7cG4oZSksY29uc29sZS5sb2coIuKal++4j1tQRVhdIiwuLi5lKX1mdW5jdGlvbiBPZSguLi5lKXtwbihlKSxjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIiwuLi5lKX1mdW5jdGlvbiBHdChlLHQpe3JldHVybiFlfHwhdD8hMTpTdHJpbmcoZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gbmUoZSx0PSIiKXt0cnl7cmV0dXJuIENoYXJhY3Rlck5pY2tuYW1lKGUpfWNhdGNoe3JldHVybiB0fX1mdW5jdGlvbiBpcihlKXtpZighZXx8dHlwZW9mIGUhPSJzdHJpbmciKXJldHVybiIiO2lmKCFlLnN0YXJ0c1dpdGgoIlwwIikpcmV0dXJuIGU7dHJ5e3JldHVybiBBcnJheS5mcm9tKGUuc2xpY2UoMSwyMDApKS5mbGF0TWFwKHQ9Pntjb25zdCBuPXQuY2hhckNvZGVBdCgwKSxyPU1hdGguZmxvb3Iobi8yNTYpLGk9bi1yKjI1NjtyZXR1cm5bcixpXS5maWx0ZXIoQm9vbGVhbikubWFwKG89PlN0cmluZy5mcm9tQ2hhckNvZGUobykpfSkuam9pbigiIil9Y2F0Y2h7cmV0dXJuIiJ9fWZ1bmN0aW9uIHN0KGUpe2lmKCFlKXJldHVybiIiO2NvbnN0IHQ9W107dHJ5e3R5cGVvZiBlLkNyYWZ0Py5OYW1lPT0ic3RyaW5nIiYmdC5wdXNoKGUuQ3JhZnQuTmFtZSksdHlwZW9mIGUuQ3JhZnQ/LkRlc2NyaXB0aW9uPT0ic3RyaW5nIiYmdC5wdXNoKGlyKGUuQ3JhZnQuRGVzY3JpcHRpb24pKSx0eXBlb2YgZS5EZXNjcmlwdGlvbj09InN0cmluZyImJnQucHVzaChlLkRlc2NyaXB0aW9uKSx0eXBlb2YgZS5OYW1lPT0ic3RyaW5nIiYmdC5wdXNoKGUuTmFtZSksdHlwZW9mIGUuQXNzZXQ/Lk5hbWU9PSJzdHJpbmciJiZ0LnB1c2goZS5Bc3NldC5OYW1lKSx0eXBlb2YgZS5Bc3NldD8uRGVzY3JpcHRpb249PSJzdHJpbmciJiZ0LnB1c2goZS5Bc3NldC5EZXNjcmlwdGlvbil9Y2F0Y2h7fXJldHVybiB0LmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9bGV0IGFlPW51bGw7Y29uc3QgVnQ9bmV3IE1hcDtmdW5jdGlvbiBtbigpe3RyeXtpZighYWUpe2NvbnN0IGU9d2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtpZighZSlyZXR1cm4gbnVsbDthZT1uZXcgZX1pZihhZS5zdGF0ZT09PSJzdXNwZW5kZWQiKXRyeXthZS5yZXN1bWUoKX1jYXRjaHt9cmV0dXJuIGFlfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBvcihlKXt0cnl7Y29uc3QgdD1TdHJpbmcoZSkubWF0Y2goL15odHRwczpcL1wvY2RuXC5qc2RlbGl2clwubmV0XC9naFwvKFteL10rKVwvKFteQF0rKUAoW14vXSspXC8oLispJC8pO3JldHVybiB0PyJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vIit0WzFdKyIvIit0WzJdKyIvIit0WzNdKyIvIit0WzRdOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEt0KGUsdCl7dHJ5e2NvbnN0IG49bW4oKTtpZighbnx8IWUpcmV0dXJuITE7Y29uc3Qgcj1uLmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3IuYnVmZmVyPWU7Y29uc3QgaT1uLmNyZWF0ZUdhaW4oKTtyZXR1cm4gaS5nYWluLnZhbHVlPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0fHwxKSksci5jb25uZWN0KGkpLGkuY29ubmVjdChuLmRlc3RpbmF0aW9uKSxyLnN0YXJ0KCksITB9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIEV0KGUsdD0xKXt0cnl7aWYoIWUpcmV0dXJuO2NvbnN0IG49bW4oKTtpZighbil7dHlwZW9mIEF1ZGlvUGxheVNvdW5kRWZmZWN0PT0iZnVuY3Rpb24iJiZBdWRpb1BsYXlTb3VuZEVmZmVjdChTdHJpbmcoZSkpO3JldHVybn1jb25zdCByPVN0cmluZyhlKSxpPVZ0LmdldChyKTtpZihpKXtLdChpLHQpO3JldHVybn1jb25zdCBvPVtyLG9yKHIpXS5maWx0ZXIoQm9vbGVhbik7bGV0IHM9MDtjb25zdCBhPSgpPT57aWYocz49by5sZW5ndGgpcmV0dXJuO2NvbnN0IGM9b1tzKytdO2ZldGNoKGMpLnRoZW4odT0+e2lmKCF1Lm9rKXRocm93IG5ldyBFcnJvcigiSFRUUCAiK3Uuc3RhdHVzKTtyZXR1cm4gdS5hcnJheUJ1ZmZlcigpfSkudGhlbih1PT5uLmRlY29kZUF1ZGlvRGF0YSh1KSkudGhlbih1PT57VnQuc2V0KHIsdSksS3QodSx0KX0pLmNhdGNoKCgpPT5hKCkpfTthKCl9Y2F0Y2h7fX1mdW5jdGlvbiB5bigpe3JldHVybiAuNTUrTWF0aC5tYXgoMSxNYXRoLm1pbig1LGw/LmVmZmVjdExldmVsfHwzKSkqLjA5fWZ1bmN0aW9uIGhuKGUpe3RyeXtpZihsPy5zb3VuZE9uJiZsLnNvdW5kT25bZV09PT0hMSlyZXR1cm4gbnVsbDtjb25zdCB0PWw/LnNvdW5kcz8uW2VdO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIG51bGw7Y29uc3Qgbj10W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp0Lmxlbmd0aCldO3JldHVybiBuJiZFdChTdHJpbmcobikseW4oKSksbnx8bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gUGUoZSl7dHJ5e2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYoUGxheWVyJiZQbGF5ZXIuTWVtYmVyTnVtYmVyPT09ZSlyZXR1cm4gUGxheWVyO2lmKHR5cGVvZiBDaGF0Um9vbUNoYXJhY3RlcjwidSImJkFycmF5LmlzQXJyYXkoQ2hhdFJvb21DaGFyYWN0ZXIpKXJldHVybiBDaGF0Um9vbUNoYXJhY3Rlci5maW5kKHQ9PnQmJnQuTWVtYmVyTnVtYmVyPT09ZSl8fG51bGx9Y2F0Y2h7fXJldHVybiBudWxsfWxldCAkZT0wLFN0PTA7ZnVuY3Rpb24gQihlKXskZT1NYXRoLm1heCgwLGV8fDApfWZ1bmN0aW9uIGduKCl7JGU9MH1mdW5jdGlvbiB3dChlKXtTdD1NYXRoLm1heCgwLE1hdGgubWluKDMsZXx8MCkpfWZ1bmN0aW9uIHhuKCl7U3Q9MH1mdW5jdGlvbiBhcigpe2lmKCRlPD0wKXJldHVybiAwO3RyeXtpZihQbGF5ZXI/LkdyYXBoaWNzU2V0dGluZ3M/LkFsbG93Qmx1cj09PSExKXJldHVybiAwfWNhdGNoe31yZXR1cm4gJGV9ZnVuY3Rpb24gc3IoKXtyZXR1cm4gU3R9ZnVuY3Rpb24gbHIoZSl7aWYoZSl0cnl7ZS5ob29rRnVuY3Rpb24oIlBsYXllci5HZXRCbHVyTGV2ZWwiLDQsKHQsbik9PntsZXQgcj0wO3RyeXtyPW4odCl8fDB9Y2F0Y2h7fWNvbnN0IGk9YXIoKTtyZXR1cm4gaT5yP2k6cn0pLGUuaG9va0Z1bmN0aW9uKCJQbGF5ZXIuR2V0QmxpbmRMZXZlbCIsNCwodCxuKT0+e2xldCByPTA7dHJ5e3I9bih0KXx8MH1jYXRjaHt9Y29uc3QgaT1zcigpO3JldHVybiBpPnI/aTpyfSl9Y2F0Y2godCl7Y29uc29sZS53YXJuKCLimpfvuI9bUEVYXSBHZXRCbHVyTGV2ZWwg5oyC6ZKp5aSx6LSlOiIsdC5tZXNzYWdlKX19Y29uc3QgcWU9InBleC1vdmVybGF5IjtsZXQgaj1udWxsLGZlPW51bGwseGU9ITEsSHQ9Myx3PW51bGwsanQ9ITE7ZnVuY3Rpb24gWSgpe3JldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTWFpbkNhbnZhcyIpfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJjYW52YXMiKX1mdW5jdGlvbiBQdCgpe2lmKGomJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHFlKSlyZXR1cm4gajtsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChxZSk7cmV0dXJuIGV8fChlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuaWQ9cWUsT2JqZWN0LmFzc2lnbihlLnN0eWxlLHtwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjAiLHRvcDoiMCIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIscG9pbnRlckV2ZW50czoibm9uZSIsekluZGV4OiI5OTk5OCIsb3ZlcmZsb3c6ImhpZGRlbiJ9KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpKSxqPWUsZX1mdW5jdGlvbiBibigpe2lmKCFqdCl7anQ9ITA7dHJ5e2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLmlkPSJwZXgtYW5pbS1zdHlsZXMiLGUudGV4dENvbnRlbnQ9IkBrZXlmcmFtZXMgcGV4RGl6enlGbGFzaHswJSwxMDAle29wYWNpdHk6MC4wNH0zMCV7b3BhY2l0eTowLjE2fTYwJXtvcGFjaXR5OjAuMjR9ODUle29wYWNpdHk6MC4xMH19QGtleWZyYW1lcyBwZXhEaXp6eVB1bHNlezAlLDEwMCV7b3BhY2l0eTowLjI1fTQwJXtvcGFjaXR5OjAuODV9NzAle29wYWNpdHk6MC4zNX19Iixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfWNhdGNoe319fWZ1bmN0aW9uIHZuKGUsdD0zKXt6KCksSHQ9TWF0aC5tYXgoMSxNYXRoLm1pbig1LHR8fDMpKSx4ZT0hMCxibigpO2NvbnN0IG49UHQoKSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtwb2ludGVyLWV2ZW50czpub25lO2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNTAlLCB0cmFuc3BhcmVudCA0MiUsIHJnYmEoMjQyLDEyMywxNjgsMC41NSkpO2FuaW1hdGlvbjpwZXhEaXp6eUZsYXNoIDE0MDBtcyBlYXNlLWluLW91dCBpbmZpbml0ZTsiLG4uYXBwZW5kQ2hpbGQocik7Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChlbGxpcHNlIGF0IDUwJSA1MCUsIHRyYW5zcGFyZW50IDM1JSwgcmdiYSgxNSw4LDI4LDAuNDIpIDEwMCUpO2FuaW1hdGlvbjpwZXhEaXp6eVB1bHNlIDE0MDBtcyBlYXNlLWluLW91dCBpbmZpbml0ZTsiLG4uYXBwZW5kQ2hpbGQoaSk7Y29uc3Qgbz0xNDAwLHM9ODAwLGE9TWF0aC5tYXgoMixNYXRoLnJvdW5kKGUvbykpO2xldCBjPTAsdT0wO2NvbnN0IGQ9aD0+e2lmKHhlKXtpZihoLXU+PTEwMCl7dT1oO2NvbnN0IEE9aCVvL28saz1NYXRoLm1pbigxLGMvTWF0aC5tYXgoMSxhLTEpKSxEPWglbzxzP01hdGguc2luKEEvKHMvbykqTWF0aC5QSSk6MDtCKEQ+LjAyPzErMi4yKmsqKEh0LzMpKkQ6LjMpLEE8LjA1JiZjPGEmJmMrK31mZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCl9fTtmZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCl9ZnVuY3Rpb24gY3IoZT0xNTAwKXtpZigheGUpcmV0dXJuO2NvbnN0IHQ9cGVyZm9ybWFuY2Uubm93KCk7bGV0IG49MDtjb25zdCByPWk9PntpZigheGUpcmV0dXJuO2NvbnN0IG89TWF0aC5taW4oMSwoaS10KS9lKTtpLW4+PTEwMCYmKG49aSxCKC40KigxLW8pKSksbzwxP3JlcXVlc3RBbmltYXRpb25GcmFtZShyKTp6KCl9O3JlcXVlc3RBbmltYXRpb25GcmFtZShyKX1mdW5jdGlvbiB6KCl7eGU9ITEsZmUmJihjYW5jZWxBbmltYXRpb25GcmFtZShmZSksZmU9bnVsbCksQigwKTtjb25zdCBlPVkoKTtpZihlKXtlLnN0eWxlLnRyYW5zaXRpb249IiIsZS5zdHlsZS50cmFuc2Zvcm09IiI7Y29uc3QgdD1lLnN0eWxlLmZpbHRlcnx8IiI7ZS5zdHlsZS5maWx0ZXI9dC5yZXBsYWNlKC9ibHVyXChbXildKlwpL2csIiIpLnRyaW0oKX1qJiYoai5pbm5lckhUTUw9IiIpfWxldCBwZT1udWxsLF9lPSExO2Z1bmN0aW9uIHVyKGUsdD0zLG49ITAscj0hMCl7aWYocmUoKSwhbiYmIXIpcmV0dXJuO2lmKF9lPSEwLGJuKCksbil7Y29uc3QgYT1QdCgpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjpmaXhlZDtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA1MCUsIHRyYW5zcGFyZW50IDQwJSwgcmdiYSgyNDIsMTIzLDE2OCwwLjYyKSk7YW5pbWF0aW9uOnBleERpenp5Rmxhc2ggOTAwbXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IixhLmFwcGVuZENoaWxkKGMpfXImJkIoMysodHx8MykqLjgpO2NvbnN0IGk9WSgpLG89MysodHx8MykqMS4yLHM9KCk9PntpZihfZSl7aWYoaSYmbil7Y29uc3QgYT0oTWF0aC5yYW5kb20oKS0uNSkqbyoyLGM9KE1hdGgucmFuZG9tKCktLjUpKm8qMjtpLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7YS50b0ZpeGVkKDEpfXB4LCAke2MudG9GaXhlZCgxKX1weClgfXBlPXJlcXVlc3RBbmltYXRpb25GcmFtZShzKX19O3BlPXJlcXVlc3RBbmltYXRpb25GcmFtZShzKSxzZXRUaW1lb3V0KCgpPT57X2UmJnJlKCl9LE1hdGgubWF4KDUwMCxlKSl9ZnVuY3Rpb24gcmUoKXtfZT0hMSxwZSYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHBlKSxwZT1udWxsKTtjb25zdCBlPVkoKTtlJiYoZS5zdHlsZS50cmFuc2Zvcm09IiIpLGomJihqLmlubmVySFRNTD0iIil9bGV0IFZlPSExO2Z1bmN0aW9uIE10KGU9InN1cnJvdW5kIil7VmU9ITA7Y29uc3QgdD1ZKCk7aWYodCl7Y29uc3Qgcj10LnN0eWxlLmZpbHRlcnx8IiI7ci5pbmNsdWRlcygiZ3JheXNjYWxlIil8fCh0LnN0eWxlLmZpbHRlcj0ocj9yKyIgIjoiIikrImdyYXlzY2FsZSgxKSIpfWNvbnN0IG49UHQoKTtpZih3JiZ3LnJlbW92ZSgpLGUhPT0iYWxsIil7aWYodz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx3LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OTk3OyIsZT09PSJzdXJyb3VuZCIpe2NvbnN0IGk9LjMrLjEzKihNYXRoLm1heCgxLE1hdGgubWluKDUsbC5lZmZlY3RMZXZlbHx8MykpLTEpO3cuc3R5bGUuYmFja2dyb3VuZD1gcmFkaWFsLWdyYWRpZW50KGVsbGlwc2UgYXQgNTAlIDU1JSwgdHJhbnNwYXJlbnQgMCUsIHRyYW5zcGFyZW50IDI4JSwgcmdiYSg1LDUsMTAsJHtpLnRvRml4ZWQoMil9KSA1NSUsIHJnYmEoNSw1LDEwLCR7TWF0aC5taW4oLjk1LGkrLjI3KS50b0ZpeGVkKDIpfSkgMTAwJSlgfWVsc2Ugdy5zdHlsZS5iYWNrZ3JvdW5kPSJyYWRpYWwtZ3JhZGllbnQoZWxsaXBzZSBhdCA1MCUgNjAlLCB0cmFuc3BhcmVudCAwJSwgdHJhbnNwYXJlbnQgMTAlLCByZ2JhKDUsNSwxMCwwLjcpIDMwJSwgcmdiYSg1LDUsMTAsMC45NCkgMTAwJSkiO24uYXBwZW5kQ2hpbGQodyl9fWZ1bmN0aW9uIGRyKCl7aWYoVmUpdHJ5e2NvbnN0IGU9WSgpO2lmKCFlKXJldHVybjtjb25zdCB0PWUuc3R5bGUuZmlsdGVyfHwiIjt0LmluY2x1ZGVzKCJncmF5c2NhbGUiKXx8KGUuc3R5bGUuZmlsdGVyPSh0P3QrIiAiOiIiKSsiZ3JheXNjYWxlKDEpIil9Y2F0Y2h7fX1mdW5jdGlvbiBmcigpe1ZlPSExO2NvbnN0IGU9WSgpO2lmKGUpe2NvbnN0IHQ9ZS5zdHlsZS5maWx0ZXJ8fCIiO2Uuc3R5bGUuZmlsdGVyPXQucmVwbGFjZSgvZ3JheXNjYWxlXCgxXCkvZywiIikucmVwbGFjZSgvXHMrL2csIiAiKS50cmltKCl9dyYmKHcucmVtb3ZlKCksdz1udWxsKX1mdW5jdGlvbiBwcihlPTgwMCx0KXtWZT0hMTtjb25zdCBuPU1hdGgubWF4KDEsZXx8ODAwKTt0cnl7Y29uc3Qgcj1ZKCk7aWYocil7Y29uc3QgaT1yLnN0eWxlLmZpbHRlcnx8IiI7aS5pbmNsdWRlcygiZ3JheXNjYWxlIikmJihyLnN0eWxlLnRyYW5zaXRpb249ImZpbHRlciAiK24rIm1zIGVhc2UiLHIuc3R5bGUuZmlsdGVyPWkucmVwbGFjZSgvZ3JheXNjYWxlXCgxXCkvZywiIikucmVwbGFjZSgvXHMrL2csIiAiKS50cmltKCksc2V0VGltZW91dCgoKT0+e3RyeXtyLnN0eWxlLnRyYW5zaXRpb249IiJ9Y2F0Y2h7fX0sbis1MCkpfX1jYXRjaHt9dHJ5e2lmKHcpe3cuc3R5bGUudHJhbnNpdGlvbj0ib3BhY2l0eSAiK24rIm1zIGVhc2UiLHcuc3R5bGUub3BhY2l0eT0iMCI7Y29uc3Qgcj13O3NldFRpbWVvdXQoKCk9Pnt0cnl7ci5yZW1vdmUoKX1jYXRjaHt9fSxuKzUwKSx3PW51bGx9fWNhdGNoe31zZXRUaW1lb3V0KCgpPT57dHJ5e3QmJnQoKX1jYXRjaHt9fSxuKX1mdW5jdGlvbiBtcigpe3ooKSxyZSgpLGZyKCksZ24oKX1sZXQgbWU9bnVsbCx5ZT1udWxsLE5lPW51bGwsa2U9bnVsbCxFbj0hMTtmdW5jdGlvbiBTbigpe3RyeXtpZih0eXBlb2YgV2FyZHJvYmVHZXRFeHByZXNzaW9uPT0iZnVuY3Rpb24iKXJldHVybiBXYXJkcm9iZUdldEV4cHJlc3Npb24oUGxheWVyKXx8bnVsbH1jYXRjaHt9cmV0dXJuIG51bGx9ZnVuY3Rpb24geXIoZSl7Y29uc3QgdD1lLkV5ZXM/P251bGwsbj1lLkV5ZXMyIT09dm9pZCAwP2UuRXllczI6dDtyZXR1cm57RXllYnJvd3M6ZS5FeWVicm93cz8/bnVsbCxFeWVzOnQsRXllczI6bixNb3V0aDplLk1vdXRoPz9udWxsLEJsdXNoOmUuQmx1c2g/P251bGws5Y+z55y8X0x1emk6dCzlt6bnnLxfTHV6aTpufX1jb25zdCBocj1bIkV5ZXMiLCJFeWVzMiIsIkVtb3RpY29uIl07ZnVuY3Rpb24gQXQoZSx0KXt0cnl7aWYoIVBsYXllcj8uQXBwZWFyYW5jZSlyZXR1cm47Y29uc3Qgbj1bXTtmb3IoY29uc3RbcixpXW9mIE9iamVjdC5lbnRyaWVzKGUpKXRyeXtpZihpPT1udWxsKWNvbnRpbnVlO2NvbnN0IG89UGxheWVyLkFwcGVhcmFuY2UuZmluZChhPT5hLkFzc2V0Lkdyb3VwLk5hbWU9PT1yKTtpZighbyljb250aW51ZTtjb25zdCBzPW8uQXNzZXQ/Lkdyb3VwPy5BbGxvd0V4cHJlc3Npb247aWYoQXJyYXkuaXNBcnJheShzKSYmIXMuaW5jbHVkZXMoaSl8fChvLlByb3BlcnR5fHwoby5Qcm9wZXJ0eT17fSksby5Qcm9wZXJ0eS5FeHByZXNzaW9uPT09aSkpY29udGludWU7by5Qcm9wZXJ0eS5FeHByZXNzaW9uPWksbi5wdXNoKHIpfWNhdGNoe31pZighbi5sZW5ndGgpcmV0dXJuO3RyeXt0eXBlb2YgQ2hhcmFjdGVyUmVmcmVzaD09ImZ1bmN0aW9uIiYmQ2hhcmFjdGVyUmVmcmVzaChQbGF5ZXIsITEsITEpfWNhdGNoe31pZih0KXtmb3IoY29uc3QgciBvZiBuKWlmKGhyLmluY2x1ZGVzKHIpKXRyeXt0eXBlb2YgQ2hhdFJvb21DaGFyYWN0ZXJFeHByZXNzaW9uVXBkYXRlPT0iZnVuY3Rpb24iJiZDaGF0Um9vbUNoYXJhY3RlckV4cHJlc3Npb25VcGRhdGUoUGxheWVyLHIpfWNhdGNoe319fWNhdGNoe319ZnVuY3Rpb24gbHQoZSl7dHJ5e2lmKCFlKXJldHVybjttZT09PW51bGwmJihtZT1TbigpKSxBdCh5cihlKSwhMCl9Y2F0Y2h7fX1mdW5jdGlvbiBfdChlPW51bGwpe3RyeXtpZih5ZT09PW51bGwpe2NvbnN0IG49U24oKTt5ZT1uPy5FeWVzPz9udWxsLE5lPW4/LkV5ZXMyPz9udWxsLGtlPW4/LkVtb3RpY29uPz9udWxsfWNvbnN0IHQ9e307aWYoZSlmb3IoY29uc3RbbixyXW9mIE9iamVjdC5lbnRyaWVzKGUpKXIhPW51bGwmJih0W25dPXIpO3QuRXllcz0iRGF6ZWQiLHQuRXllczI9IkRhemVkIixBdCh0LCEwKX1jYXRjaHt9fWZ1bmN0aW9uIEtlKCl7dHJ5e2NvbnN0IGU9e307aWYoeWUhPT1udWxsJiYoZS5FeWVzPXllKSxOZSE9PW51bGwmJihlLkV5ZXMyPU5lKSxrZSE9PW51bGwmJihlLkVtb3RpY29uPWtlKSxtZSlmb3IoY29uc3RbdCxuXW9mIE9iamVjdC5lbnRyaWVzKG1lKSluIT1udWxsJiZlW3RdPT09dm9pZCAwJiYoZVt0XT1uKTtBdChlLCEwKX1jYXRjaHt9bWU9bnVsbCx5ZT1udWxsLE5lPW51bGwsa2U9bnVsbH1sZXQgSz0hMSxzZT1udWxsO2Z1bmN0aW9uIEhlKGUpe0s9ISFlO3RyeXtLJiZQbGF5ZXI/KHNlPT09bnVsbCYmKHNlPVBsYXllci5CbGlua0ZhY3RvciksUGxheWVyLkJsaW5rRmFjdG9yPTk5OTk5OSx0eXBlb2YgUG9zZVJlZnJlc2g9PSJmdW5jdGlvbiImJlBvc2VSZWZyZXNoKFBsYXllcikpOiFLJiZQbGF5ZXImJihzZSE9PW51bGwmJihQbGF5ZXIuQmxpbmtGYWN0b3I9c2Usc2U9bnVsbCksdHlwZW9mIFBvc2VSZWZyZXNoPT0iZnVuY3Rpb24iJiZQb3NlUmVmcmVzaChQbGF5ZXIpKX1jYXRjaHt9fWxldCBJZT1udWxsO2Z1bmN0aW9uIGdyKGUpe3RyeXtjb25zdCB0PWU/Lk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdPy5zdGF0ZTtpZih0JiZ0Lm1vZGU9PT0iYmxhbmsiJiZ0LnR5cGUhPT0ibm9ybWFsIilyZXR1cm4gSWU9ZS5CbGlua0ZhY3RvcixlLkJsaW5rRmFjdG9yPTk5OTk5OSwhMH1jYXRjaHt9cmV0dXJuITF9ZnVuY3Rpb24geHIoZSl7aWYoSWUhPT1udWxsKXt0cnl7ZS5CbGlua0ZhY3Rvcj1JZX1jYXRjaHt9SWU9bnVsbH19ZnVuY3Rpb24gYnIoZSl7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9bj0+e3RyeXtlLmhvb2tGdW5jdGlvbihuLDQsKHIsaSk9Pks/ITE6aShyKSl9Y2F0Y2h7fX07dCgiUGxheWVyLkNhbldhbGsiKSx0KCJQbGF5ZXIuQ2FuSW50ZXJhY3QiKSx0KCJQbGF5ZXIuQ2FuQ2hhbmdlT3duQ2xvdGhlcyIpLHQoIlBsYXllci5DYW5LbmVlbCIpO3RyeXtlLmhvb2tGdW5jdGlvbigiQWN0aXZpdHlDaGVja1ByZXJlcXVpc2l0ZXMiLDQsKG4scik9Pntjb25zdFtpLG9dPW47cmV0dXJuIG8mJnR5cGVvZiBvLklzUGxheWVyPT0iZnVuY3Rpb24iJiZvLklzUGxheWVyKCkmJks/ITE6cihuKX0pfWNhdGNoe310cnl7ZS5ob29rRnVuY3Rpb24oIlBvc2VSZWZyZXNoIiw0LChuLHIpPT57Y29uc3QgaT1yKG4pO3RyeXtjb25zdCBvPW4mJm5bMF07byYmdHlwZW9mIG8uSXNQbGF5ZXI9PSJmdW5jdGlvbiImJm8uSXNQbGF5ZXIoKSYmSyYmKG8uQWxsb3dlZEFjdGl2ZVBvc2VNYXBwaW5nPXtCb2R5VXBwZXI6W10sQm9keUxvd2VyOltdLEJvZHlGdWxsOltdfSl9Y2F0Y2h7fXJldHVybiBpfSl9Y2F0Y2h7fXRyeXtlLmhvb2tGdW5jdGlvbigiQ2hhcmFjdGVyU2V0RmFjaWFsRXhwcmVzc2lvbiIsNCwobixyKT0+e2NvbnN0IGk9cihuKTt0cnl7Y29uc3Qgbz1uJiZuWzBdO2lmKG8mJnR5cGVvZiBvLklzUGxheWVyPT0iZnVuY3Rpb24iJiZvLklzUGxheWVyKCkmJkspe2NvbnN0IHM9bC5leHByZXNzaW9uc3x8e307X3Qocy5ibGFua3x8cy5leGNyZXRlKX19Y2F0Y2h7fXJldHVybiBpfSl9Y2F0Y2h7fX1jb25zdCB6dD1bIiVOQU1FJeWDj+S4quacqOWktOS4gOagt+S4gOWKqOS4jeWKqOKApiIsIiVOQU1FJei6q+S9k+WDteWcqOWOn+WcsO+8jOavq+aXoOWPjeW6lOKApiIsIiVOQU1FJeWPjOebruaXoOelnu+8jOWRhuWRhuWcsOadteWcqOmCo+mHjOKApiIsIiVOQU1FJeS7v+S9m+iiq+aKvei1sOS6humtgu+8jOS4gOWKqOS4jeWKqOKApiIsIiVOQU1FJeWDj+Wdj+aOieeahOacqOWBtuS4gOagt+WDteS9j+S6huKApiIsIiVOQU1FJeWFqOi6q+WDteehrO+8jOi/nuaJi+aMh+WktOmDveS4jeWKqOS4gOS4i+KApiJdO2Z1bmN0aW9uIGplKGUpe0VuPSEhZX1mdW5jdGlvbiB2cihlKXtpZihlKXRyeXtlLmhvb2tGdW5jdGlvbigiQ2hhdFJvb21TZW5kQ2hhdCIsNSwodCxuKT0+e2lmKCFFbilyZXR1cm4gbih0KTtsZXQgcj0iIjt0cnl7cj0oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIklucHV0Q2hhdCIpfHx7fSkudmFsdWV8fCIifWNhdGNoe31jb25zdCBpPXIudHJpbSgpO2lmKCFpfHwvXlsvKCouXS8udGVzdChpKSlyZXR1cm4gbih0KTt0cnl7aWYodHlwZW9mIENoYXRSb29tVGFyZ2V0TWVtYmVyTnVtYmVyPT0ibnVtYmVyIiYmQ2hhdFJvb21UYXJnZXRNZW1iZXJOdW1iZXI+PTApcmV0dXJuIG4odCl9Y2F0Y2h7fWNvbnN0IG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIklucHV0Q2hhdCIpO2lmKG8pe28udmFsdWU9IiI7dHJ5e28uZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSl9Y2F0Y2h7fX1jb25zdCBzPXp0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp6dC5sZW5ndGgpXTtzZXRUaW1lb3V0KCgpPT57dHJ5e2Iocyl9Y2F0Y2h7fX0sMmUzKX0pfWNhdGNoKHQpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g56aB6KiA5oyC6ZKp5aSx6LSlOiIsdC5tZXNzYWdlKX19bGV0IGN0PVtdO2Z1bmN0aW9uIHplKCl7Zm9yKGNvbnN0IGUgb2YgY3QpY2xlYXJUaW1lb3V0KGUpO2N0PVtdfWZ1bmN0aW9uIEVyKGUpe3JldHVybiBNYXRoLm1heCgxLE1hdGgubWluKDUsTWF0aC5mbG9vcigoZXx8MCkvMTApKSl9ZnVuY3Rpb24gU3IoZSx0KXtjb25zdCBuPVtdO2ZvcihsZXQgcj0xO3I8PXQ7cisrKW4ucHVzaChlKnIvKHQrMSkpO3JldHVybiBufWZ1bmN0aW9uIFd0KGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZSl8fGUubGVuZ3RoPT09MClyZXR1cm5bXTtjb25zdCBuPWUuc2xpY2UoKSxyPVtdO2Zvcig7ci5sZW5ndGg8dDspe24ubGVuZ3RofHxuLnB1c2goLi4uZSk7Y29uc3QgaT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbi5sZW5ndGgpO3IucHVzaChuLnNwbGljZShpLDEpWzBdKX1yZXR1cm4gcn1mdW5jdGlvbiB3cihlLHQpe2lmKHplKCksISh0PjApKXJldHVybjtjb25zdCBuPUVyKHQvMWUzKSxyPVNyKHQsbiksaT1XdChsLnNvdW5kcz8ud2FpdHx8W10sbiksbz1XdChsLmV4cHJlc3Npb25zPy53YWl0fHxbXSxuKTshaS5sZW5ndGgmJiFvLmxlbmd0aHx8ci5mb3JFYWNoKChzLGEpPT57Y3QucHVzaChzZXRUaW1lb3V0KCgpPT57aWYoIWUoKSlyZXR1cm47Y29uc3QgYz1pW2FdO2MmJmw/LnNvdW5kT24/LndhaXQhPT0hMSYmKEV0KFN0cmluZyhjKSksTnQoIndhaXQiLGMpKTtjb25zdCB1PW9bYV07dSYmbHQodSl9LHMpKX0pfWZ1bmN0aW9uIE50KGUsdCl7aWYoISghdHx8IWw/LnNvdW5kT258fGwuc291bmRPbltlXT09PSExKSl0cnl7UCgiUEVYX1NvdW5kIixbe1RhZzoiS2luZCIsVmFsdWU6U3RyaW5nKGUpfSx7VGFnOiJJZCIsVmFsdWU6U3RyaW5nKHQpfV0pfWNhdGNoe319ZnVuY3Rpb24gUHIoKXtpZShlPT57dHJ5e2lmKGU/LlR5cGUhPT0iSGlkZGVuInx8ZS5Db250ZW50IT09IlBFWF9Tb3VuZCIpcmV0dXJuO2NvbnN0IHQ9TnVtYmVyKGUuU2VuZGVyKTtpZighdHx8dD09PVBsYXllcj8uTWVtYmVyTnVtYmVyfHwhbC5oZWFyUmVtb3RlU291bmRzKXJldHVybjtjb25zdCByPShBcnJheS5pc0FycmF5KGUuRGljdGlvbmFyeSk/ZS5EaWN0aW9uYXJ5OltdKS5maW5kKGk9Pmk/LlRhZz09PSJJZCIpO3ImJihyLlZhbHVlPz9yLk5hbWUpJiZFdChTdHJpbmcoci5WYWx1ZT8/ci5OYW1lKSx5bigpKX1jYXRjaHt9fSkscCgi562J5b6F6Z+z5pWIL+ihqOaDheezu+e7n+W3suWQr+eUqO+8iOauteaVsOmaj+etieW+heenkuaVsO+8jOmfs+aViOS4juihqOaDheWQjOatpe+8iSIpfWxldCAkPTAsTT1udWxsO2NvbnN0IE1yPTgwMDtmdW5jdGlvbiB3bigpe3RyeXtyZXR1cm4hIUludmVudG9yeUdldChQbGF5ZXIsIkl0ZW1CdXR0Iil9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIHV0KGUpe2lmKGYubW9kZSE9PW0uSURMRSlpZihmLm1vZGU9PT1tLkJMQU5LJiZmLmdlbFR5cGU9PT0ibm9ybWFsIilwKCLmma7pgJrlh53og7bnirbmgIHkuK3lho3mrKHllp3kuIvvvJrmuIXmjonml6flh53og7bvvIzph43mlrDlvIDlp4siKSx6ZSgpLE0mJihjbGVhclRpbWVvdXQoTSksTT1udWxsKSxmLmdlbElkJiZUdChmLmdlbElkKSxDKG0uSURMRSk7ZWxzZSByZXR1cm4gcCgi5bey5pyJ5rS75Yqo54q25oCB77yM5b+955Wl5pys5qyh6Kem5Y+RIiksITE7JCsrO2NvbnN0IHQ9JCxuPU1hdGgubWF4KDAsbC53YWl0U2Vjb25kcykqMWUzO3JldHVybiBDKG0uV0FJVElORyx7Z2VsVHlwZTplLGVuZHNBdDpEYXRlLm5vdygpK259KSxuPjAmJihsLmZ4RGl6enkmJnZuKG4sbC5lZmZlY3RMZXZlbCksd3IoKCk9PnQ9PT0kLG4pKSxUKHttb2RlOm0uV0FJVElORyx0eXBlOmUscmVtYWluaW5nU2VjOk1hdGguY2VpbChuLzFlMyksb3duZXI6UGxheWVyPy5NZW1iZXJOdW1iZXJ9LCEwKSxiKGU9PT0icGVyc29uYSI/IiVOQU1FJeWWneS4i+S6huS7gOS5iOWlh+aAqueahOS4nOilv++8jOS4gOmYteW8guagt+eahOaEn+iniea2jOS6huS4iuadpeKApiI6IiVOQU1FJeWWneS4i+S6huS7gOS5iOm7j+eziueziueahOS4nOilv+KApiIpLCEwfWZ1bmN0aW9uIEFyKCl7aWYod24oKSl7Y3IoMTUwMCksS2UoKTtjb25zdCBlPU1hdGgubWF4KDEsbC5ibG9ja2VkV2FpdE1pbnV0ZXMpKjYwKjFlMztDKG0uQkxPQ0tFRCx7ZW5kc0F0OkRhdGUubm93KCkrZX0pLFQoe21vZGU6bS5CTE9DS0VELHR5cGU6Zi5nZWxUeXBlLHJlbWFpbmluZ1NlYzpNYXRoLmNlaWwoZS8xZTMpLG93bmVyOlBsYXllcj8uTWVtYmVyTnVtYmVyfSwhMCksYigiJU5BTUUl55qE6IeA6YOo6KKr5LuA5LmI5Lic6KW/5oyh5L2P5LqG77yM5Yed6IO25aC15Zyo6YeM6Z2i5Ye65LiN5p2l4oCmIik7cmV0dXJufVBuKCl9YXN5bmMgZnVuY3Rpb24gUG4oKXtpZihmLm1vZGU9PT1tLkVYQ1JFVElORylyZXR1cm47Y29uc3QgZT0kO0MobS5FWENSRVRJTkcpO2NvbnN0IHQ9bC5leHByZXNzaW9uc3x8e307dC5leGNyZXRlJiZsdCh0LmV4Y3JldGUpLHooKSwobC5meFNoYWtlfHxsLmZ4Qmx1cikmJnVyKGt0KzMwMCxsLmVmZmVjdExldmVsLGwuZnhTaGFrZSxsLmZ4Qmx1cik7Y29uc3Qgbj1obigiZXhjcmV0ZSIpO050KCJleGNyZXRlIixuKTtjb25zdCByPURhdGUubm93KCk7aWYoVCh7bW9kZTptLkVYQ1JFVElORyx0eXBlOmYuZ2VsVHlwZSxvd25lcjpQbGF5ZXI/Lk1lbWJlck51bWJlcixzdGFydGVkQXQ6cn0sITApLGF3YWl0IExyKG4pLGUhPT0kKXJldHVybjtpZihmLmdlbFR5cGU9PT0ibm9ybWFsIil7Y29uc3Qgcz1sLmF1dG9SZXZlcnRFbmFibGVkP01hdGgubWF4KDEsbC5hdXRvUmV2ZXJ0TWludXRlcykqNjAqMWUzOjAsYT1ZdChQbGF5ZXI/Lk1lbWJlck51bWJlcik7cmUoKSxCKDApLEMobS5CTEFOSyx7ZW5kc0F0OnM/RGF0ZS5ub3coKStzOjAsZ2VsSWQ6YSxnZWxIb2xkZXI6bnVsbCxnZWxUeXBlOiJub3JtYWwifSksbHQobC5ub3JtYWxFeHByZXNzaW9uKSxNJiZjbGVhclRpbWVvdXQoTSksTT1zZXRUaW1lb3V0KCgpPT57TT1udWxsLGU9PT0kJiZLZSgpfSxNYXRoLm1heCgxLGwubm9ybWFsRXhwcmVzc2lvblNlY29uZHMpKjFlMyksVCh7bW9kZTptLkJMQU5LLHR5cGU6Im5vcm1hbCIscmVtYWluaW5nU2VjOnM/TWF0aC5jZWlsKHMvMWUzKTowLG93bmVyOlBsYXllcj8uTWVtYmVyTnVtYmVyLGdlbElkOmEsZ2VsSG9sZGVyOm51bGwsZXhwaXJlc0F0OnM/RGF0ZS5ub3coKStzOjB9LCEwKSxiKCIlTkFNRSXmjpLlh7rkuobkuIDlnajova/otrTotrTnmoTmma7pgJrlh53og7bvvIzokL3lnKjohJrovrnigKYiKTtyZXR1cm59Y29uc3QgaT1sLmF1dG9SZXZlcnRFbmFibGVkP01hdGgubWF4KDEsbC5hdXRvUmV2ZXJ0TWludXRlcykqNjAqMWUzOjAsbz1ZdChQbGF5ZXI/Lk1lbWJlck51bWJlcik7cmUoKSx6KCksbC5meEJsdXImJkIoMS41K2wuZWZmZWN0TGV2ZWwqLjUpLHd0KGwuYmxpbmRMZXZlbCksQyhtLkJMQU5LLHtlbmRzQXQ6aT9EYXRlLm5vdygpK2k6MCxnZWxJZDpvLGdlbEhvbGRlcjpudWxsfSksZHQ9bC52aWV3TW9kZSxmdD1sLmVmZmVjdExldmVsLHB0PWwuYmxpbmRMZXZlbCxsLmZ4QmxhbmsmJk10KGwudmlld01vZGUpLF90KHQuYmxhbmt8fHQuZXhjcmV0ZSksbC5yZXN0cmljdGlvbnMmJihqZSghMCksSGUoITApKSxUKHttb2RlOm0uQkxBTkssdHlwZToicGVyc29uYSIscmVtYWluaW5nU2VjOmk/TWF0aC5jZWlsKGkvMWUzKTowLG93bmVyOlBsYXllcj8uTWVtYmVyTnVtYmVyLGdlbElkOm8sZ2VsSG9sZGVyOm51bGwsZXhwaXJlc0F0Omk/RGF0ZS5ub3coKStpOjB9LCEwKSxiKCIlTkFNRSXnmoTouqvkvZPkuIDpmLXohLHlipvvvIznmKvlnZDkuIvmnaXnnLznpZ7nqbrmtJ7igJTigJTkurrmoLzlh53og7booqvmjpLkuoblh7rmnaXvvIzokL3lnKjohJrovrnigKYiKX1mdW5jdGlvbiBNbihlPSEwKXskKyssemUoKSxNJiYoY2xlYXJUaW1lb3V0KE0pLE09bnVsbCksbXIoKSx4bigpLEtlKCksamUoITEpLEhlKCExKSxDKG0uSURMRSksVChudWxsLCEwKSxlfHxiKCIlTkFNRSXmgaLlpI3kuobmraPluLjjgIIiKX1mdW5jdGlvbiBCZShlLHQpeyQrKyx6ZSgpLE0mJihjbGVhclRpbWVvdXQoTSksTT1udWxsKSx6KCkscmUoKSxnbigpLHhuKCksS2UoKSxqZSghMSksSGUoITEpLEMobS5JRExFKSxUKG51bGwsITApLHByKE1yLHQpLGUmJmIoZSl9ZnVuY3Rpb24gX3IoKXtwKCLoh6rliqjlm57lvZLop6blj5EiKTtjb25zdCBlPWYuZ2VsVHlwZT09PSJub3JtYWwiO2lmKGYuZ2VsSWQpe2lmKGwuZ2VsRXhwaXJlTW9kZT09PSJpbnZhbGlkIil7WHIoZi5nZWxJZCxQbGF5ZXI/Lk1lbWJlck51bWJlciksQmUoeChlPyJnZWxJbnZhbGlkYXRlZE5vcm1hbCI6ImdlbEludmFsaWRhdGVkIikpO3JldHVybn1UdChmLmdlbElkKX1CZSh4KGU/ImdlbEV4cGlyZWROb3JtYWwiOiJnZWxFeHBpcmVkIikpfWxldCBkdD1udWxsLGZ0PW51bGwscHQ9bnVsbDtmdW5jdGlvbiBOcihlKXtjb25zdCB0PWY7dC5tb2RlPT09bS5XQUlUSU5HP3QucGhhc2VFbmRzQXQ+MCYmZT49dC5waGFzZUVuZHNBdCYmQXIoKTp0Lm1vZGU9PT1tLkJMT0NLRUQ/d24oKT90LnBoYXNlRW5kc0F0PjAmJmU+PXQucGhhc2VFbmRzQXQmJihNbigpLGIoIiVOQU1FJeWlveWDj+S7gOS5iOS5n+ayoeWPkeeUn+OAgiIpKTooYigiJU5BTUUl6IeA6YOo55qE6YGu5oyh6KKr5ou/5byA5LqG77yM5Yed6IO25byA5aeL5b6A5aSW5oyk4oCmIiksUG4oKSk6dC5tb2RlPT09bS5CTEFOSyYmKHQuZ2VsVHlwZSE9PSJub3JtYWwiJiYobC5meEJsYW5rJiZkdCE9PWwudmlld01vZGUmJihkdD1sLnZpZXdNb2RlLE10KGwudmlld01vZGUpKSxsLmZ4Qmx1ciYmZnQhPT1sLmVmZmVjdExldmVsJiYoZnQ9bC5lZmZlY3RMZXZlbCxCKDEuNStsLmVmZmVjdExldmVsKi41KSkscHQhPT1sLmJsaW5kTGV2ZWwmJihwdD1sLmJsaW5kTGV2ZWwsd3QobC5ibGluZExldmVsKSkpLGwuYXV0b1JldmVydEVuYWJsZWQmJnQucGhhc2VFbmRzQXQ+MCYmZT49dC5waGFzZUVuZHNBdCYmX3IoKSl9ZnVuY3Rpb24ga3IoKXt0cnl7RnIoKX1jYXRjaHt9Y29uc3QgZT1mO2lmKChlLm1vZGU9PT1tLldBSVRJTkd8fGUubW9kZT09PW0uQkxPQ0tFRHx8ZS5tb2RlPT09bS5CTEFOSykmJihlLnBoYXNlRW5kc0F0PjB8fGUubW9kZT09PW0uQkxBTkspKXtjb25zdCB0PWUucGhhc2VFbmRzQXQ+MD9NYXRoLm1heCgwLE1hdGgucm91bmQoKGUucGhhc2VFbmRzQXQtRGF0ZS5ub3coKSkvMWUzKSk6MCxuPU1hdGguY2VpbCh0LzUpKjU7VCh7bW9kZTplLm1vZGUsdHlwZTplLmdlbFR5cGUscmVtYWluaW5nU2VjOm4sb3duZXI6ZS5vd25lck1lbWJlck51bWJlcj8/UGxheWVyPy5NZW1iZXJOdW1iZXIsZ2VsSWQ6ZS5nZWxJZCxnZWxIb2xkZXI6ZS5nZWxIb2xkZXIsZXhwaXJlc0F0OmUucGhhc2VFbmRzQXR8fDB9KX19Y29uc3Qga3Q9NzM0MDtsZXQgbXQ9a3QsYmU9MDtjb25zdCBJdD1uZXcgTWFwO2Z1bmN0aW9uIElyKGUpe3JldHVybiBJdC5nZXQoZSl8fDB9ZnVuY3Rpb24gVHIoZSl7SXQuZGVsZXRlKGUpfWZ1bmN0aW9uIENyKCl7cmV0dXJuIGJlPjA/YmU6bXR9ZnVuY3Rpb24gUnIoZSl7YmU9ZT4wP2U6MH1mdW5jdGlvbiBBbihlKXt0cnl7aWYoIWV8fGUuTWVtYmVyTnVtYmVyPT1udWxsKXJldHVybjtJdC5zZXQoZS5NZW1iZXJOdW1iZXIsRGF0ZS5ub3coKSl9Y2F0Y2h7fX1mdW5jdGlvbiBVdChlKXtyZXR1cm4gbmV3IFByb21pc2UodD0+c2V0VGltZW91dCh0LGUpKX1mdW5jdGlvbiBEcihlKXtyZXR1cm4gZT9uZXcgUHJvbWlzZSh0PT57dHJ5e2NvbnN0IG49bmV3IEF1ZGlvKFN0cmluZyhlKSk7bGV0IHI9ITE7Y29uc3QgaT1vPT57cnx8KHI9ITAsdChvKSl9O24uYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLCgpPT5pKG4uZHVyYXRpb24+MD9uLmR1cmF0aW9uKjFlMzowKSksbi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PmkoMCkpLHNldFRpbWVvdXQoKCk9PmkoMCksM2UzKX1jYXRjaHt0KDApfX0pOlByb21pc2UucmVzb2x2ZSgwKX1hc3luYyBmdW5jdGlvbiBMcihlKXtpZihBbihQbGF5ZXIpLGJlPjApe2F3YWl0IFV0KGJlKTtyZXR1cm59Y29uc3QgdD1hd2FpdCBEcihlKTttdD1NYXRoLm1heChrdCx0KSxhd2FpdCBVdChtdCl9ZnVuY3Rpb24gT3IoKXt0cnl7Y29uc3QgZT1QbGF5ZXI/Lk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdPy5zdGF0ZTtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QifHwhZS5tb2RlKXJldHVybjtpZihlLm1vZGU9PT1tLkJMQU5LKXtjb25zdCB0PWUudHlwZT09PSJub3JtYWwiO2lmKEMobS5CTEFOSyx7ZW5kc0F0OmUuZXhwaXJlc0F0fHwwLGdlbElkOmUuZ2VsSWR8fG51bGwsZ2VsSG9sZGVyOm51bGwsZ2VsVHlwZTp0PyJub3JtYWwiOiJwZXJzb25hIn0pLHQpe3AoIueZu+W9lei/mOWOn++8muaZrumAmuWHneiDtueKtuaAge+8iOWHneiDtiAiKyhlLmdlbElkfHwi5pegIikrIu+8iSIpO3JldHVybn16KCksbC5meEJsdXImJkIoMS41K2wuZWZmZWN0TGV2ZWwqLjUpLHd0KGwuYmxpbmRMZXZlbCksbC5meEJsYW5rJiZNdChsLnZpZXdNb2RlKTtjb25zdCBuPWwuZXhwcmVzc2lvbnN8fHt9O190KG4uYmxhbmt8fG4uZXhjcmV0ZSksbC5yZXN0cmljdGlvbnMmJihqZSghMCksSGUoITApKSxwKCLnmbvlvZXov5jljp/vvJrlpLHnpZ7nirbmgIHvvIjlh53og7YgIisoZS5nZWxJZHx8IuaXoCIpKyLvvIkiKX1lbHNlIGlmKGUubW9kZT09PW0uV0FJVElOR3x8ZS5tb2RlPT09bS5CTE9DS0VEKXtjb25zdCB0PU1hdGgubWF4KDEsZS5yZW1haW5pbmdTZWN8fDMwKSoxZTM7QyhlLm1vZGUse2dlbFR5cGU6ZS50eXBlfHwicGVyc29uYSIsZW5kc0F0OkRhdGUubm93KCkrdH0pLGUubW9kZT09PW0uV0FJVElORyYmdm4odCxsLmVmZmVjdExldmVsKSxwKCLnmbvlvZXov5jljp/vvJoiK2UubW9kZSsi77yI5Ymp5L2ZICIrKGUucmVtYWluaW5nU2VjfHwiPyIpKyIg56eS77yJIil9fWNhdGNoKGUpe3AoIueZu+W9lei/mOWOn+Wksei0pToiLGUubWVzc2FnZSl9fWNvbnN0ICRyPSJHbGFzc0ZpbGxlZCIsWGU9IlBFWHwiO2Z1bmN0aW9uIFl0KGUpe3JldHVybmAke2V9LSR7RGF0ZS5ub3coKX1gfWZ1bmN0aW9uIEJyKGUsdCxuLHI9InBlcnNvbmEiKXt0cnl7aWYodHlwZW9mIEludmVudG9yeUdldCE9ImZ1bmN0aW9uInx8dHlwZW9mIEludmVudG9yeVdlYXIhPSJmdW5jdGlvbiJ8fEludmVudG9yeUdldChQbGF5ZXIsIkl0ZW1IYW5kaGVsZCIpKXJldHVybiBudWxsO2NvbnN0IHM9e05hbWU6YCR7a24oZSl8fCLmn5DkuroifeeahCR7cj09PSJub3JtYWwiPyLmma7pgJrlh53og7YiOiLkurrmoLzlh53og7YifWAsRGVzY3JpcHRpb246YCR7WGV9JHt0fXwke2V9fCR7bn1gLE1lbWJlck51bWJlcjplLFByb3BlcnR5OiJOb3JtYWwifSxhPUludmVudG9yeVdlYXIoUGxheWVyLCRyLCJJdGVtSGFuZGhlbGQiLHZvaWQgMCx2b2lkIDAsZSxzLCExKTtpZighYSlyZXR1cm4gbnVsbDt0cnl7dHlwZW9mIENoYXRSb29tQ2hhcmFjdGVyVXBkYXRlPT0iZnVuY3Rpb24iJiZDaGF0Um9vbUNoYXJhY3RlclVwZGF0ZShQbGF5ZXIpfWNhdGNoe31yZXR1cm4gcCgi5Yed6IO254mp5ZOB5bey55Sf5oiQOiIsdCksYX1jYXRjaChpKXtyZXR1cm4gcCgi55Sf5oiQ5Yed6IO25aSx6LSlOiIsaS5tZXNzYWdlKSxudWxsfX1mdW5jdGlvbiBFZShlKXt0cnl7Y29uc3QgdD1lPy5DcmFmdD8uRGVzY3JpcHRpb24/PyIiO2lmKCF0LnN0YXJ0c1dpdGgoWGUpKXJldHVybiBudWxsO2NvbnN0IG49dC5zbGljZShYZS5sZW5ndGgpLnNwbGl0KCJ8IiksW3IsaSxvXT1uO3JldHVybntnZWxJZDpyLG93bmVyTWVtYmVyTnVtYmVyOitpLGV4cGlyZXNBdDorbyxpbnZhbGlkOm5bM109PT0iSU5WQUxJRCJ9fWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBfbihlKXtyZXR1cm4hIUVlKGUpfWZ1bmN0aW9uIFNlKGUpe3RyeXtjb25zdCB0PUludmVudG9yeUdldChQbGF5ZXIsIkl0ZW1IYW5kaGVsZCIpLG49RWUodCk7aWYobiYmKCFlfHxuLmdlbElkPT09ZSkpe0ludmVudG9yeVJlbW92ZShQbGF5ZXIsIkl0ZW1IYW5kaGVsZCIsITEpO3RyeXt0eXBlb2YgQ2hhdFJvb21DaGFyYWN0ZXJVcGRhdGU9PSJmdW5jdGlvbiImJkNoYXRSb29tQ2hhcmFjdGVyVXBkYXRlKFBsYXllcil9Y2F0Y2h7fXJldHVybiBwKCLlh53og7blt7Lku47miYvkuIrnp7vpmaQ6IixuLmdlbElkKSwhMH19Y2F0Y2h7fXJldHVybiExfWZ1bmN0aW9uIHF0KGUsdCxuKXtTZShuPy5nZWxJZCksUCgiUEVYX0dlbENvbnN1bWVkIixbe1RhZzoiR2VsSWQiLFZhbHVlOlN0cmluZyhuPy5nZWxJZD8/IiIpfSx7VGFnOiJEcmlua2VyIixWYWx1ZTpTdHJpbmcodCl9LHtUYWc6Ik93bmVyIixWYWx1ZTpTdHJpbmcobj8ub3duZXJNZW1iZXJOdW1iZXIpfV0pfWZ1bmN0aW9uIFR0KGUpe1AoIlBFWF9HZWxFeHBpcmVkIixbe1RhZzoiR2VsSWQiLFZhbHVlOmV9XSx7ZGVkdXBlS2V5OiJleHBpcmUtIitlLGRlZHVwZU1zOjVlM30pfWZ1bmN0aW9uIE5uKGUsdCl7dHJ5e2NvbnN0IG49SW52ZW50b3J5R2V0KFBsYXllciwiSXRlbUhhbmRoZWxkIikscj1FZShuKTtpZighcnx8ci5nZWxJZCE9PWV8fHIuaW52YWxpZClyZXR1cm4hMTtjb25zdCBpPWtuKHQpfHwi5p+Q5Lq6IjtuLkNyYWZ0fHwobi5DcmFmdD17fSksbi5DcmFmdC5OYW1lPWAke2l955qE5peg5pWI5Yed6IO2YCxuLkNyYWZ0LkRlc2NyaXB0aW9uPWAke1hlfSR7ZX18JHt0fXwke3IuZXhwaXJlc0F0fXxJTlZBTElEYCxuLkNyYWZ0LlByb3BlcnR5PSJOb3JtYWwiO3RyeXt0eXBlb2YgQ2hhdFJvb21DaGFyYWN0ZXJVcGRhdGU9PSJmdW5jdGlvbiImJkNoYXRSb29tQ2hhcmFjdGVyVXBkYXRlKFBsYXllcil9Y2F0Y2h7fXJldHVybiBwKCLlh53og7blt7Llj5jkuLrml6DmlYjlh53og7Y6IixlKSwhMH1jYXRjaChuKXtyZXR1cm4gcCgi5peg5pWI5YyW5Yed6IO25aSx6LSlOiIsbi5tZXNzYWdlKSwhMX19ZnVuY3Rpb24gWHIoZSx0KXtQKCJQRVhfR2VsSW52YWxpZGF0ZWQiLFt7VGFnOiJHZWxJZCIsVmFsdWU6U3RyaW5nKGUpfSx7VGFnOiJPd25lciIsVmFsdWU6U3RyaW5nKHQpfV0se2RlZHVwZUtleToiaW52YWxpZGF0ZS0iK2UsZGVkdXBlTXM6NWUzfSl9ZnVuY3Rpb24gRnIoKXt0cnl7Y29uc3QgZT1JbnZlbnRvcnlHZXQoUGxheWVyLCJJdGVtSGFuZGhlbGQiKSx0PUVlKGUpO2lmKCF0fHwhKHQuZXhwaXJlc0F0PjApfHx0LmV4cGlyZXNBdD5EYXRlLm5vdygpfHx0LmludmFsaWQpcmV0dXJuO3R5cGVvZiBsPCJ1IiYmbC5nZWxFeHBpcmVNb2RlPT09ImludmFsaWQiP05uKHQuZ2VsSWQsdC5vd25lck1lbWJlck51bWJlcik6U2UodC5nZWxJZCl9Y2F0Y2h7fX1mdW5jdGlvbiBHcihlKXtpZihlKXRyeXtlLmhvb2tGdW5jdGlvbigiRHJhd0NoYXJhY3RlciIsMSwodCxuKT0+e2NvbnN0W3IsaSxvLHNdPXQsYT0hKGwuZ2VsTGF5ZXI+PTI0KTt0cnl7YSYmciYmci5NZW1iZXJOdW1iZXIhPW51bGwmJnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIG89PSJudW1iZXIiJiZKdChyLGksbyxzfHwxKX1jYXRjaHt9Y29uc3QgYz1yJiZyLk1lbWJlck51bWJlciE9bnVsbD9ncihyKTohMSx1PW4odCk7YyYmeHIocik7dHJ5eyFhJiZyJiZyLk1lbWJlck51bWJlciE9bnVsbCYmdHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2Ygbz09Im51bWJlciImJkp0KHIsaSxvLHN8fDEpfWNhdGNoe31yZXR1cm4gdX0pfWNhdGNoKHQpe3AoIuWHneiDtuW6leWxgue7mOWItuaMgumSqeWksei0pToiLHQubWVzc2FnZSl9fWZ1bmN0aW9uIEp0KGUsdCxuLHIpe3RyeXtjb25zdCBpPUlyKGUuTWVtYmVyTnVtYmVyKTtpZihpKXtjb25zdCBzPUNyKCl8fDczNDAsYT1EYXRlLm5vdygpLWk7aWYoYT5zKXtUcihlLk1lbWJlck51bWJlcik7cmV0dXJufWlmKHR5cGVvZiBEcmF3UmVjdCE9ImZ1bmN0aW9uIilyZXR1cm47Y29uc3QgYz10KzI1MCpyLHU9bis1MjUqcixkPW4rOTUwKnIsaD1NYXRoLm1pbigxLGEvcyk7aDwuMjU/RHJhd1JlY3QoYy0xNCpyLHUtMTQqciwyOCpyLDI4KnIsIiNmZmZmZmYiKTpoPC41P0RyYXdSZWN0KGMtMTQqcix1KyhkLXUpKi40NS0xNCpyLDI4KnIsMjgqciwiI2ZmZmZmZiIpOmg8Ljc1PyhEcmF3UmVjdChjLTE0KnIsdSsoZC11KSouODItMTQqciwyOCpyLDI4KnIsIiNmZmZmZmYiKSxEcmF3UmVjdChjLTE4KnIsZC04KnIsMzYqciwxNipyLCIjZmZmZmZmIikpOkRyYXdSZWN0KGMtMjQqcixkLTExKnIsNDgqciwyMipyLCIjZmZmZmZmIik7cmV0dXJufWNvbnN0IG89ZS5PbmxpbmVTaGFyZWRTZXR0aW5ncz8uWyJQRVgiXT8uc3RhdGU7byYmby5tb2RlPT09ImJsYW5rIiYmby5nZWxJZCYmIW8uZ2VsSG9sZGVyJiZ0eXBlb2YgRHJhd0ltYWdlUmVzaXplPT0iZnVuY3Rpb24iJiZEcmF3SW1hZ2VSZXNpemUoIkFzc2V0cy9GZW1hbGUzRENHL0l0ZW1IYW5kaGVsZC9QcmV2aWV3L0dsYXNzRmlsbGVkLnBuZyIsdCsyNTAqci0yMCpyLG4rOTUwKnItMTcqciw0MCpyLDM0KnIpfWNhdGNoe319Y29uc3QgVGU9bmV3IE1hcDtmdW5jdGlvbiBWcigpe3RyeXtpZih0eXBlb2YgQ2hhdFJvb21DaGFyYWN0ZXI+InUifHwhQXJyYXkuaXNBcnJheShDaGF0Um9vbUNoYXJhY3RlcikpcmV0dXJuO2Zvcihjb25zdCBlIG9mIENoYXRSb29tQ2hhcmFjdGVyKXtpZighZXx8ZS5NZW1iZXJOdW1iZXI9PW51bGx8fGUuTWVtYmVyTnVtYmVyPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpY29udGludWU7Y29uc3QgdD1lLk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdPy5zdGF0ZSxuPVRlLmdldChlLk1lbWJlck51bWJlcik7dCYmdC5tb2RlPT09ImV4Y3JldGluZyImJnQuc3RhcnRlZEF0P24hPT10LnN0YXJ0ZWRBdCYmKFRlLnNldChlLk1lbWJlck51bWJlcix0LnN0YXJ0ZWRBdCksQW4oZSkpOm4hPT12b2lkIDAmJlRlLmRlbGV0ZShlLk1lbWJlck51bWJlcil9fWNhdGNoe319ZnVuY3Rpb24gS3IoKXtUZS5jbGVhcigpfWZ1bmN0aW9uIEhyKGUpe2llKHQ9Pnt0cnl7aWYodD8uVHlwZSE9PSJIaWRkZW4iKXJldHVybjtjb25zdCBuPUFycmF5LmlzQXJyYXkodC5EaWN0aW9uYXJ5KT90LkRpY3Rpb25hcnk6W10scj1pPT57Y29uc3Qgbz1uLmZpbmQocz0+cz8uVGFnPT09aSk7cmV0dXJuIG8/by5WYWx1ZT8/by5OYW1lOnZvaWQgMH07aWYodC5Db250ZW50PT09IlBFWF9HZWxFeHBpcmVkIil7Y29uc3QgaT1yKCJHZWxJZCIpO2kmJlNlKGkpfWVsc2UgaWYodC5Db250ZW50PT09IlBFWF9HZWxJbnZhbGlkYXRlZCIpe2NvbnN0IGk9cigiR2VsSWQiKSxvPStyKCJPd25lciIpO2kmJk5uKGksbyl9ZWxzZSBpZih0LkNvbnRlbnQ9PT0iUEVYX0dlbENvbnN1bWVkIil7Y29uc3QgaT0rcigiT3duZXIiKSxvPStyKCJEcmlua2VyIikscz1yKCJHZWxJZCIpO3RyeXtjb25zdCBhPVBlKGkpO2E/Lk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdJiYoYS5PbmxpbmVTaGFyZWRTZXR0aW5ncy5QRVguc3RhdGU9bnVsbCl9Y2F0Y2h7fXR5cGVvZiBlPT0iZnVuY3Rpb24iJiZlKHtnZWxJZDpzLG93bmVyOmksZHJpbmtlcjpvfSl9ZWxzZSBpZih0LkNvbnRlbnQ9PT0iUEVYX0dlbEhlbGQiKXtjb25zdCBpPXIoIkdlbElkIiksbz0rcigiT3duZXIiKSxzPStyKCJIb2xkZXIiKTt0cnl7Y29uc3QgYT1QZShvKTthPy5PbmxpbmVTaGFyZWRTZXR0aW5ncz8uWyJQRVgiXT8uc3RhdGUmJihhLk9ubGluZVNoYXJlZFNldHRpbmdzLlBFWC5zdGF0ZS5nZWxIb2xkZXI9cyl9Y2F0Y2h7fWlmKG89PT1QbGF5ZXI/Lk1lbWJlck51bWJlcil0cnl7Zi5nZWxIb2xkZXI9cyxUKHttb2RlOiJibGFuayIscmVtYWluaW5nU2VjOmYucGhhc2VFbmRzQXQ/TWF0aC5tYXgoMCxNYXRoLnJvdW5kKChmLnBoYXNlRW5kc0F0LURhdGUubm93KCkpLzFlMykpOjAsb3duZXI6UGxheWVyPy5NZW1iZXJOdW1iZXIsZ2VsSWQ6aSxnZWxIb2xkZXI6cyxleHBpcmVzQXQ6Zi5waGFzZUVuZHNBdHx8MH0sITApfWNhdGNoe319ZWxzZSBpZih0LkNvbnRlbnQ9PT0iUEVYX1N0YXRlU3luYyIpe2NvbnN0IGk9cigiUGF5bG9hZCIpO2lmKCFpKXJldHVybjtsZXQgbz1udWxsO3RyeXtvPUpTT04ucGFyc2UoaSl9Y2F0Y2h7cmV0dXJufWNvbnN0IHM9TnVtYmVyKHQuU2VuZGVyKTtpZighc3x8cz09PVBsYXllcj8uTWVtYmVyTnVtYmVyfHwhb3x8dHlwZW9mIG8hPSJvYmplY3QiKXJldHVybjtjb25zdCBhPVBlKHMpO2lmKCFhKXJldHVybjt0cnl7YS5PbmxpbmVTaGFyZWRTZXR0aW5nc3x8KGEuT25saW5lU2hhcmVkU2V0dGluZ3M9e30pLGEuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYfHwoYS5PbmxpbmVTaGFyZWRTZXR0aW5ncy5QRVg9e30pLGEuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYLnN0YXRlPW99Y2F0Y2h7fX1lbHNlIGlmKHQuQ29udGVudD09PSJQRVhfU2hhcmVkU3luYyIpe2NvbnN0IGk9cigiUGF5bG9hZCIpO2lmKCFpKXJldHVybjtsZXQgbz1udWxsO3RyeXtvPUpTT04ucGFyc2UoaSl9Y2F0Y2h7cmV0dXJufWNvbnN0IHM9TnVtYmVyKHQuU2VuZGVyKTtpZighc3x8cz09PVBsYXllcj8uTWVtYmVyTnVtYmVyfHwhb3x8dHlwZW9mIG8hPSJvYmplY3QiKXJldHVybjtjb25zdCBhPVBlKHMpO2lmKCFhKXJldHVybjt0cnl7YS5PbmxpbmVTaGFyZWRTZXR0aW5nc3x8KGEuT25saW5lU2hhcmVkU2V0dGluZ3M9e30pLGEuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYfHwoYS5PbmxpbmVTaGFyZWRTZXR0aW5ncy5QRVg9e30pO2NvbnN0IGM9YS5PbmxpbmVTaGFyZWRTZXR0aW5ncy5QRVg7by5lZGl0IT09dm9pZCAwJiYoYy5lZGl0PW8uZWRpdCksby5lZGl0TW9kZXMmJihjLmVkaXRNb2Rlcz1vLmVkaXRNb2Rlcyksby53bCYmKGMud2w9by53bCl9Y2F0Y2h7fX19Y2F0Y2h7fX0pfWZ1bmN0aW9uIGtuKGUpe3RyeXtpZihlPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpcmV0dXJuIENoYXJhY3Rlck5pY2tuYW1lKFBsYXllcik7Y29uc3QgdD1DaGF0Um9vbUNoYXJhY3Rlcj8uZmluZChuPT5uPy5NZW1iZXJOdW1iZXI9PT1lKTtpZih0KXJldHVybiBDaGFyYWN0ZXJOaWNrbmFtZSh0KX1jYXRjaHt9cmV0dXJuIG51bGx9ZnVuY3Rpb24gV2UoKXtwKCLlvLrliLbmgaLlpI0iKSxmLmdlbElkJiZUdChmLmdlbElkKSxTZShmLmdlbElkKSxNbighMCksYigiJU5BTUUl6KKr5by65Yi25oGi5aSN5LqG77yM5LiA5YiH5Zue5b2S5q2j5bi444CCIil9Y29uc3QgZz17YWNjZW50OiIjZjI3YmE4Iix0ZWFsOiIjM2Y5YzkyIix0ZWFsRGFyazoiIzJhNmI2MyIsdGV4dDoiI2U4ZTRmNSIsZGltOiIjOWI5M2JkIixkYW5nZXI6IiNmZjZiNmIifSxqcj17aWRsZToi56m66ZeyIix3YWl0aW5nOiLmjpLlh7rliY3nrYnlvoUiLGJsb2NrZWQ6IuiHgOmDqOiiq+aMocK3562J5b6F5LitIixleGNyZXRpbmc6IuaOkuWHuuWKqOeUu+S4rSIsYmxhbms6IuWkseelnuS4rSJ9LHpyPXthbGw6IuWFqOmDqCIsc3Vycm91bmQ6IuWRqOWbtCIsc2VsZjoi6Ieq5bexIn0sV3I9e3NlbGY6IuS7heiHquW3sSIsb3RoZXJzOiLku4Xku5bkuroiLGJvdGg6IumDveWPr+ingSJ9O2xldCBTPW51bGwsQ2U9bnVsbCx1ZT0hMSxKPW51bGw7ZnVuY3Rpb24gVXIoKXtyZXR1cm4hIVN9ZnVuY3Rpb24gSW4oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gbGUoZSx0LG4scil7Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtyZXR1cm4gaS50ZXh0Q29udGVudD1lLE9iamVjdC5hc3NpZ24oaS5zdHlsZSx7YmFja2dyb3VuZDp0LGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiLGJvcmRlclJhZGl1czoiNHB4Iixjb2xvcjpuLGN1cnNvcjoicG9pbnRlciIsZm9udFNpemU6IjExcHgiLHBhZGRpbmc6IjJweCA4cHgiLGxpbmVIZWlnaHQ6IjE2cHgiLGZvbnRXZWlnaHQ6ImJvbGQiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixyKSxpfWZ1bmN0aW9uIFlyKCl7Y29uc3QgZT1mO2xldCB0PSLigJQiO2lmKGUucGhhc2VFbmRzQXQ+MCl7Y29uc3QgYz1NYXRoLm1heCgwLE1hdGgucm91bmQoKGUucGhhc2VFbmRzQXQtRGF0ZS5ub3coKSkvMWUzKSk7dD1NYXRoLmZsb29yKGMvNjApKyI6IitTdHJpbmcoYyU2MCkucGFkU3RhcnQoMiwiMCIpfWNvbnN0IG49anJbZS5tb2RlXXx8ZS5tb2RlLHI9ZS5tb2RlPT09ImlkbGUiP2cuZGltOmcuYWNjZW50LGk9ZS5nZWxJZD8iIyIrU3RyaW5nKGUuZ2VsSWQpLnNsaWNlKDAsOCk6IuKAlCIsbz1lLmdlbEhvbGRlciE9bnVsbD8iIyIrZS5nZWxIb2xkZXI6IuKAlCIscz1lLm93bmVyTWVtYmVyTnVtYmVyIT1udWxsPyIjIitlLm93bmVyTWVtYmVyTnVtYmVyOiLigJQiLGE9bDtyZXR1cm5gCiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjJweCAxNHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHgiPgogICAgICA8ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjoke2cuZGltfSI+54q25oCBPC9zcGFuPiA8YiBzdHlsZT0iY29sb3I6JHtyfSI+JHtufTwvYj4ke2UuZ2VsVHlwZT09PSJub3JtYWwiP2AgPHNwYW4gc3R5bGU9ImNvbG9yOiR7Zy50ZWFsfSI+77yI5pmu6YCa5Yed6IO277yJPC9zcGFuPmA6IiJ9PC9kaXY+CiAgICAgIDxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiR7Zy5kaW19Ij7lgJLorqHml7Y8L3NwYW4+IDxiIHN0eWxlPSJjb2xvcjoke2cudGV4dH0iPiR7dH08L2I+PC9kaXY+CiAgICAgIDxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiR7Zy5kaW19Ij7lh53og7ZJRDwvc3Bhbj4gPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHtpfTwvYj48L2Rpdj4KICAgICAgPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6JHtnLmRpbX0iPuaMgeacieiAhTwvc3Bhbj4gPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHtvfTwvYj48L2Rpdj4KICAgICAgPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6JHtnLmRpbX0iPuS4u+S6ujwvc3Bhbj4gPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHtzfTwvYj48L2Rpdj4KICAgICAgPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6JHtnLmRpbX0iPuexu+Weizwvc3Bhbj4gPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHtJbihlLmdlbFR5cGUpfTwvYj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7cGFkZGluZy10b3A6NHB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoNjMsMTU2LDE0NiwwLjM1KTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjJweCAxNHB4O2ZvbnQtc2l6ZToxMXB4O2xpbmUtaGVpZ2h0OjE3cHg7Y29sb3I6JHtnLmRpbX0iPgogICAgICA8c3Bhbj7mgLvlvIDlhbPvvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke2EuZW5hYmxlZD8i5byAIjoi5YWzIn08L2I+PC9zcGFuPgogICAgICA8c3Bhbj7mjpLlh7rnrYnlvoXvvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke2Eud2FpdFNlY29uZHN956eSPC9iPjwvc3Bhbj4KICAgICAgPHNwYW4+6Zi75oyh5LiK6ZmQ77yaPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHthLmJsb2NrZWRXYWl0TWludXRlc33liIY8L2I+PC9zcGFuPgogICAgICA8c3Bhbj7oh6rliqjlm57lvZLvvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke2EuYXV0b1JldmVydEVuYWJsZWQ/YS5hdXRvUmV2ZXJ0TWludXRlcysi5YiGIjoi5YWzIn08L2I+PC9zcGFuPgogICAgICA8c3Bhbj7mma7pgJrooajmg4XvvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke2Eubm9ybWFsRXhwcmVzc2lvblNlY29uZHN956eSPC9iPjwvc3Bhbj4KICAgICAgPHNwYW4+54m55pWI5by65bqm77yaPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHthLmVmZmVjdExldmVsfSAvIDU8L2I+PC9zcGFuPgogICAgICA8c3Bhbj7lpLHnpZ7op4bph47vvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke3pyW2Eudmlld01vZGVdfHxhLnZpZXdNb2RlfTwvYj48L3NwYW4+CiAgICAgIDxzcGFuPuiuoeaXtuWZqO+8mjxiIHN0eWxlPSJjb2xvcjoke2cudGV4dH0iPiR7V3JbYS50aW1lclZpc2liaWxpdHldfHxhLnRpbWVyVmlzaWJpbGl0eX08L2I+PC9zcGFuPgogICAgPC9kaXY+YH1mdW5jdGlvbiBxcigpe2NvbnN0IGU9Y2Uuc2xpY2UoLTgpO3JldHVybiBlLmxlbmd0aD9lLm1hcCh0PT5gPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6JHtnLmRpbX07d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzIj4ke0luKHQpfTwvZGl2PmApLmpvaW4oIiIpOmA8ZGl2IHN0eWxlPSJjb2xvcjoke2cuZGltfTtmb250LXNpemU6MTFweCI+77yI5pqC5peg5pel5b+X77yJPC9kaXY+YH1mdW5jdGlvbiBKcihlKXtpZihTfHwhZSlyZXR1cm47Uz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxTLmlkPSJwZXgtcGFuZWwiLE9iamVjdC5hc3NpZ24oUy5zdHlsZSx7YmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyMiwxNyw0MCwwLjk3KSAwJSwgcmdiYSgyNCw0MCwzOCwwLjk3KSAxMDAlKSIsYm9yZGVyTGVmdDoiM3B4IHNvbGlkICIrZy5hY2NlbnQsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSg2MywxNTYsMTQ2LDAuNCkiLHBhZGRpbmc6IjhweCAxMHB4IDZweCIsYm94U2hhZG93OiIwIC00cHggMjBweCByZ2JhKDI0MiwxMjMsMTY4LDAuMjApIixmb250RmFtaWx5OiciTm90byBTYW5zIFNDIiwiTWljcm9zb2Z0IFlhSGVpIixzYW5zLXNlcmlmJyxmb250U2l6ZToiMTJweCIsdXNlclNlbGVjdDoibm9uZSIsbWFyZ2luVG9wOiI0cHgiLGRpc3BsYXk6ImJsb2NrIn0pO2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7T2JqZWN0LmFzc2lnbih0LnN0eWxlLHtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixtYXJnaW5Cb3R0b206IjZweCJ9KTtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtuLmlubmVySFRNTD1g4pqX77iPIDxiIHN0eWxlPSJjb2xvcjoke2cuYWNjZW50fSI+UEVYPC9iPiA8c3BhbiBzdHlsZT0iY29sb3I6JHtnLmRpbX07Zm9udC1zaXplOjEwcHgiPuaOp+WItuWPsCB2JHtOfTwvc3Bhbj5gO2NvbnN0IHI9bGUoIuKamSDorr7nva4iLGcudGVhbERhcmssIiNjOWYwZWEiLCgpPT57dHJ5e3R5cGVvZiBQcmVmZXJlbmNlU3Vic2NyZWVuRXh0ZW5zaW9uc09wZW49PSJmdW5jdGlvbiImJlByZWZlcmVuY2VTdWJzY3JlZW5FeHRlbnNpb25zT3BlbihndCl9Y2F0Y2h7fX0pLGk9bGUoIvCfp6og5rWL6K+V5rWB56iLIixnLnRlYWxEYXJrLCIjYzlmMGVhIiwoKT0+e3RyeXtpZihmLm1vZGUhPT0iaWRsZSIpe3AoIuW3suaciei/m+ihjOS4reeahOa1geeoi++8jOWFiCAvcGV4IHJlc2V0IOWGjea1iyIpO3JldHVybn1jb25zdCBoPWwud2FpdFNlY29uZHM7bC53YWl0U2Vjb25kcz0xMCx1dCgicGVyc29uYSIpLGwud2FpdFNlY29uZHM9aCxwKCLmtYvor5XmtYHnqIvlt7LlkK/liqjvvJoxMCDnp5LlkI7mjpLlh7rvvIjoh4Dpg6jmnInkuJzopb/kvJrnrYnlvoXvvIkiKX1jYXRjaChoKXtwKCLmtYvor5XmtYHnqIvlkK/liqjlpLHotKU6IixoLm1lc3NhZ2UpfX0pLG89bGUoIvCfkr4g5L+d5a2YIixnLnRlYWxEYXJrLCIjYzlmMGVhIiwoKT0+e18oITApLHAoIuiuvue9ruW3suS/neWtmCIpLE1lKCl9KSxzPWxlKCLimqAg5by65Yi25oGi5aSNIiwicmdiYSgxMjAsMzAsMzAsMC44NSkiLCIjZmY4ODk5IiwoKT0+e2lmKCF1ZSl7dWU9ITAscy50ZXh0Q29udGVudD0i4pqgIOWGjeasoeeCueWHu+ehruiupCIscy5zdHlsZS5iYWNrZ3JvdW5kPWcuZGFuZ2VyLGNsZWFyVGltZW91dChKKSxKPXNldFRpbWVvdXQoKCk9Pnt1ZT0hMSxzLnRleHRDb250ZW50PSLimqAg5by65Yi25oGi5aSNIixzLnN0eWxlLmJhY2tncm91bmQ9InJnYmEoMTIwLDMwLDMwLDAuODUpIn0sNGUzKTtyZXR1cm59dWU9ITEsY2xlYXJUaW1lb3V0KEopLHMudGV4dENvbnRlbnQ9IuKaoCDlvLrliLbmgaLlpI0iLHMuc3R5bGUuYmFja2dyb3VuZD0icmdiYSgxMjAsMzAsMzAsMC44NSkiLFdlKCksTWUoKX0pLGE9bGUoIuKclSIsInJnYmEoMTAwLDIwLDQwLDAuOCkiLCIjZmY4ODk5IiwoKT0+VG4oKSksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLnN0eWxlLmNzc1RleHQ9ImRpc3BsYXk6ZmxleDtnYXA6NHB4O2FsaWduLWl0ZW1zOmNlbnRlciIsYy5hcHBlbmQocixpLG8scyxhKSx0LmFwcGVuZChuLGMpLFMuYXBwZW5kQ2hpbGQodCk7Y29uc3QgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmlkPSJwZXgtcGFuZWwtc3RhdHVzIixTLmFwcGVuZENoaWxkKHUpO2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5pZD0icGV4LXBhbmVsLWxvZyIsT2JqZWN0LmFzc2lnbihkLnN0eWxlLHttYXJnaW5Ub3A6IjVweCIscGFkZGluZ1RvcDoiNHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI0MiwxMjMsMTY4LDAuMjUpIixtYXhIZWlnaHQ6IjExMHB4IixvdmVyZmxvd1k6ImF1dG8ifSksUy5hcHBlbmRDaGlsZChkKSxlLmFwcGVuZENoaWxkKFMpLENlPXNldEludGVydmFsKE1lLDFlMyksTWUoKX1mdW5jdGlvbiBNZSgpe2lmKCFTKXJldHVybjtjb25zdCBlPVMucXVlcnlTZWxlY3RvcigiI3BleC1wYW5lbC1zdGF0dXMiKSx0PVMucXVlcnlTZWxlY3RvcigiI3BleC1wYW5lbC1sb2ciKTtlJiYoZS5pbm5lckhUTUw9WXIoKSksdCYmKHQuaW5uZXJIVE1MPXFyKCkpfWZ1bmN0aW9uIFRuKCl7aWYoQ2UmJihjbGVhckludGVydmFsKENlKSxDZT1udWxsKSxKJiYoY2xlYXJUaW1lb3V0KEopLEo9bnVsbCksdWU9ITEsUyl7dHJ5e1MucmVtb3ZlKCl9Y2F0Y2h7fVM9bnVsbH19ZnVuY3Rpb24gdihlLHQ9MCl7dHJ5e2NvbnN0IG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHRBcmVhQ2hhdExvZyIpO2lmKCFuKXRocm93IG5ldyBFcnJvcigibm8gbG9nIik7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmNsYXNzTmFtZT0iQ2hhdE1lc3NhZ2UgQ2hhdE1lc3NhZ2VMb2NhbE1lc3NhZ2UiLE9iamVjdC5hc3NpZ24oci5zdHlsZSx7YmFja2dyb3VuZDoicmdiYSgxNjAsNTAsMTIwLDAuMTYpIixib3JkZXJMZWZ0OiIzcHggc29saWQgcmdiKDI0MiwxMjMsMTY4KSIscGFkZGluZzoiNHB4IDhweCIsbWFyZ2luOiIycHggMCIsY29sb3I6InJnYigyNDIsMTc1LDIwNSkiLGZvbnRTaXplOiIwLjkyZW0iLGZvbnRGYW1pbHk6ImluaGVyaXQiLHdoaXRlU3BhY2U6InByZS13cmFwIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuNXMgZWFzZSJ9KSxyLmlubmVySFRNTD0nPHNwYW4gc3R5bGU9Im9wYWNpdHk6MC42O2ZvbnQtc2l6ZTowLjg1ZW0iPuKal++4jyBQRVg8L3NwYW4+44CAJytlLnNwbGl0KGAKYCkuam9pbigiPGJyPiIpLG4uYXBwZW5kQ2hpbGQociksbi5zY3JvbGxUb3A9bi5zY3JvbGxIZWlnaHQsdD4wJiZzZXRUaW1lb3V0KCgpPT57ci5zdHlsZS5vcGFjaXR5PSIwIixzZXRUaW1lb3V0KCgpPT5yLnJlbW92ZSgpLDUwMCl9LHQpO3JldHVybn1jYXRjaHt9dHJ5e3R5cGVvZiBDaGF0Um9vbU1lc3NhZ2U9PSJmdW5jdGlvbiImJkNoYXRSb29tTWVzc2FnZSh7VHlwZToiTG9jYWxNZXNzYWdlIixTZW5kZXI6UGxheWVyPy5NZW1iZXJOdW1iZXIsQ29udGVudDpgPGZvbnQgY29sb3I9IiNmMmFmY2QiPuKal++4jyBbUEVYXSAke2V9PC9mb250PmB9KX1jYXRjaHt9fWZ1bmN0aW9uIEN0KGUpe2NvbnN0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pO2lmKCh0WzBdfHwiIikudG9Mb3dlckNhc2UoKSE9PSIvcGV4IilyZXR1cm4hMTtjb25zdCBuPSh0WzFdfHwiIikudG9Mb3dlckNhc2UoKTtpZighbnx8bj09PSJoZWxwIilyZXR1cm4gdih4KCJoZWxwIix7djpOfSkpLCEwO2lmKG49PT0iaG93dG8iKXJldHVybiB2KHgoImhvd3RvIix7djpOfSkpLCEwO2lmKG49PT0icmVzZXQiKXJldHVybiB0WzJdPT09InllcyI/KFdlKCksdih4KCJyZXNldERvbmUiKSkpOnYoeCgicmVzZXRDb25maXJtIikrIu+8iOWGjeasoei+k+WFpSAvcGV4IHJlc2V0IHllcyDnoa7orqTvvIkiKSwhMDtpZihuPT09InNob3ciKXtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0QXJlYUNoYXRMb2ciKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLkNoYXRMb2ciKTtyZXR1cm4gcj8oVXIoKT9UbigpOkpyKHIpLCEwKToodih4KCJub0NoYXRCb3giKSksITApfWlmKG49PT0ic3RhdHVzIilyZXR1cm4gdih4KCJzdGF0dXNMaW5lIix7c3RhdGU6Zm4oKX0pKSwhMDtpZihuPT09InNldHRpbmdzIil7dHJ5e3R5cGVvZiBQcmVmZXJlbmNlU3Vic2NyZWVuRXh0ZW5zaW9uc09wZW49PSJmdW5jdGlvbiI/UHJlZmVyZW5jZVN1YnNjcmVlbkV4dGVuc2lvbnNPcGVuKGd0KTp2KHgoImNhbnRPcGVuU2V0dGluZ3MiKSl9Y2F0Y2gocil7digi4pqg77iPIOaJk+W8gOiuvue9rumhteWksei0pTogIityLm1lc3NhZ2UpfXJldHVybiEwfXJldHVybiBuPT09InNhdmUiPyhfKCEwKSx2KCLorr7nva7lt7Lkv53lrZjjgIIiKSwhMCk6KHYoeCgiY21kVW5rbm93biIse3N1YjpufSkpLCEwKX1mdW5jdGlvbiBRcigpe3RyeXtpZih0eXBlb2YgQ29tbWFuZENvbWJpbmU9PSJmdW5jdGlvbiIpcmV0dXJuIENvbW1hbmRDb21iaW5lKFt7VGFnOiJwZXgiLERlc2NyaXB0aW9uOiLkurrmoLzmjpLms4Tmj5Lku7bmjIfku6TvvIgvcGV4IGhlbHAg5p+l55yL6K+05piO77yJIixBY3Rpb246ZT0+e0N0KCIvcGV4ICIrKGU/PyIiKSl9fV0pLCEwfWNhdGNoKGUpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0gQ29tbWFuZENvbWJpbmUg5rOo5YaM5aSx6LSlOiIsZS5tZXNzYWdlKX1yZXR1cm4hMX1mdW5jdGlvbiBDbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGU9PntpZihlLmtleSE9PSJFbnRlciIpcmV0dXJuO2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIklucHV0Q2hhdCIpfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYVtpZCo9IkNoYXQiXScpO2lmKCF0KXJldHVybjtjb25zdCBuPXQudmFsdWUudHJpbSgpO24udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCIvcGV4IikmJihDdChuKSxlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0LnZhbHVlPSIiKX0sITApfWxldCBRdD0hMTtmdW5jdGlvbiBacigpe1F0fHwoUXQ9ITAsIVFyKCkmJkNuKCkpfWZ1bmN0aW9uIGVpKCl7Q24oKX1jb25zdCB0aT0ibW9kdWxlcHJlbG9hZCIsbmk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9LFp0PXt9LHJpPWZ1bmN0aW9uKHQsbixyKXtsZXQgaT1Qcm9taXNlLnJlc29sdmUoKTtpZihuJiZuLmxlbmd0aD4wKXtsZXQgdT1mdW5jdGlvbihkKXtyZXR1cm4gUHJvbWlzZS5hbGwoZC5tYXAoaD0+UHJvbWlzZS5yZXNvbHZlKGgpLnRoZW4oQT0+KHtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6QX0pLEE9Pih7c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOkF9KSkpKX07Y29uc3Qgcz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigibWV0YVtwcm9wZXJ0eT1jc3Atbm9uY2VdIiksYz1hPy5ub25jZXx8YT8uZ2V0QXR0cmlidXRlKCJub25jZSIpO2k9dShuLm1hcChkPT57aWYoZD1uaShkLHIpLGQgaW4gWnQpcmV0dXJuO1p0W2RdPSEwO2NvbnN0IGg9ZC5lbmRzV2l0aCgiLmNzcyIpLEE9aD8nW3JlbD0ic3R5bGVzaGVldCJdJzoiIjtpZihyKWZvcihsZXQgRD1zLmxlbmd0aC0xO0Q+PTA7RC0tKXtjb25zdCB3ZT1zW0RdO2lmKHdlLmhyZWY9PT1kJiYoIWh8fHdlLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke0F9YCkpcmV0dXJuO2NvbnN0IGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKGsucmVsPWg/InN0eWxlc2hlZXQiOnRpLGh8fChrLmFzPSJzY3JpcHQiKSxrLmNyb3NzT3JpZ2luPSIiLGsuaHJlZj1kLGMmJmsuc2V0QXR0cmlidXRlKCJub25jZSIsYyksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrKSxoKXJldHVybiBuZXcgUHJvbWlzZSgoRCx3ZSk9PntrLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLEQpLGsuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCgpPT53ZShuZXcgRXJyb3IoYFVuYWJsZSB0byBwcmVsb2FkIENTUyBmb3IgJHtkfWApKSl9KX0pKX1mdW5jdGlvbiBvKHMpe2NvbnN0IGE9bmV3IEV2ZW50KCJ2aXRlOnByZWxvYWRFcnJvciIse2NhbmNlbGFibGU6ITB9KTtpZihhLnBheWxvYWQ9cyx3aW5kb3cuZGlzcGF0Y2hFdmVudChhKSwhYS5kZWZhdWx0UHJldmVudGVkKXRocm93IHN9cmV0dXJuIGkudGhlbihzPT57Zm9yKGNvbnN0IGEgb2Ygc3x8W10pYS5zdGF0dXM9PT0icmVqZWN0ZWQiJiZvKGEucmVhc29uKTtyZXR1cm4gdCgpLmNhdGNoKG8pfSl9O2xldCBKZT0hMTtmdW5jdGlvbiBpaShlLHQpe2NvbnN0IG49VSgpO2lmKG4pdHJ5e24uaG9va0Z1bmN0aW9uKCJDaGF0Um9vbVJ1biIsMCwocixpKT0+e2NvbnN0IG89aShyKTt0cnl7dHJ5e2RyKCl9Y2F0Y2h7fWlmKEplKXJldHVybiBvO0plPSEwLGUmJmUoKX1jYXRjaHt9cmV0dXJuIG99KSxuLmhvb2tGdW5jdGlvbigiQ2hhdFJvb21MZWF2ZSIsMCwocixpKT0+e2NvbnN0IG89aShyKTt0cnl7dCYmdCgpLEplPSExfWNhdGNoe31yZXR1cm4gb30pfWNhdGNoKHIpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g5oi/6Ze055Sf5ZG95ZGo5pyf5oyC6ZKp5aSx6LSlOiIsci5tZXNzYWdlKX19ZnVuY3Rpb24gb2koZSl7Y29uc3QgdD1VKCk7aWYodCl0cnl7dC5vblVubG9hZCgoKT0+e3RyeXtlJiZlKCl9Y2F0Y2h7fX0pfWNhdGNoe319ZnVuY3Rpb24gYWkoZSl7Y29uc3QgdD17YWN0aXZpdHlOYW1lOm51bGwsZ3JvdXBOYW1lOm51bGwsdGFyZ2V0Om51bGwsaXRlbU5hbWU6bnVsbH07dHJ5e2NvbnN0IG49QXJyYXkuaXNBcnJheShlPy5EaWN0aW9uYXJ5KT9lLkRpY3Rpb25hcnk6W107Zm9yKGNvbnN0IHIgb2Ygbikhcnx8dHlwZW9mIHIhPSJvYmplY3QifHwodC5hY3Rpdml0eU5hbWU9PW51bGwmJnR5cGVvZiByLkFjdGl2aXR5TmFtZT09InN0cmluZyImJih0LmFjdGl2aXR5TmFtZT1yLkFjdGl2aXR5TmFtZSksdC5ncm91cE5hbWU9PW51bGwmJnIuVGFnPT09IkZvY3VzQXNzZXRHcm91cCImJnIuRm9jdXNHcm91cE5hbWUmJih0Lmdyb3VwTmFtZT1yLkZvY3VzR3JvdXBOYW1lKSx0LnRhcmdldD09bnVsbCYmdHlwZW9mIHIuVGFyZ2V0Q2hhcmFjdGVyPT0ibnVtYmVyIiYmKHQudGFyZ2V0PXIuVGFyZ2V0Q2hhcmFjdGVyKSx0Lml0ZW1OYW1lPT1udWxsJiZyLlRhZz09PSJBY3Rpdml0eUFzc2V0IiYmci5Bc3NldE5hbWUmJih0Lml0ZW1OYW1lPXIuQXNzZXROYW1lKSl9Y2F0Y2h7fWlmKCF0LmFjdGl2aXR5TmFtZSl0cnl7Y29uc3Qgbj10eXBlb2YgZT8uQ29udGVudD09InN0cmluZyI/SlNPTi5wYXJzZShlLkNvbnRlbnQpOm51bGw7biYmdHlwZW9mIG49PSJvYmplY3QiJiYodC5hY3Rpdml0eU5hbWU9bi5OYW1lPz9uLkFjdGl2aXR5TmFtZT8/dC5hY3Rpdml0eU5hbWUsdC5ncm91cE5hbWU9bi5Hcm91cE5hbWU/P3QuZ3JvdXBOYW1lLHQudGFyZ2V0PW4uVGFyZ2V0TWVtYmVyTnVtYmVyPz9uLlRhcmdldENoYXJhY3Rlcj8/dC50YXJnZXQpfWNhdGNoe31yZXR1cm4gdH1jb25zdCBzaT1bIuS6uuagvOiNr+awtCIsInBlcnNvbmEiXTtmdW5jdGlvbiBlbihlKXtjb25zdCB0PXN0KGUpO3JldHVybiB0P3NpLmNvbmNhdChsLmtleXdvcmRzfHxbXSkuc29tZShuPT5HdCh0LG4pKT8icGVyc29uYSI6KGwubm9ybWFsS2V5d29yZHN8fFtdKS5zb21lKG49Pkd0KHQsbikpPyJub3JtYWwiOm51bGw6bnVsbH1mdW5jdGlvbiBSdChlLHQpe3RyeXtpZihlPT09IlNpcEl0ZW0iKXtjb25zdCBuPUVlKHQpO2lmKG4pe2lmKG4uaW52YWxpZCl7cXQodCxQbGF5ZXI/Lk1lbWJlck51bWJlcixuKSxiKCIlTkFNRSXllp3kuobkuIDlj6PvvIzku4DkuYjlkbPpgZPkuZ/msqHmnInigKYiKTtyZXR1cm59Y29uc3QgaT1uLm93bmVyTWVtYmVyTnVtYmVyPT09UGxheWVyPy5NZW1iZXJOdW1iZXI7cXQodCxQbGF5ZXI/Lk1lbWJlck51bWJlcixuKSxpJiZmLm1vZGU9PT1tLkJMQU5LP0JlKCIlTkFNRSXllp3lm57kuoboh6rlt7HnmoTkurrmoLzlh53og7bvvIzmhI/or4bkuIDkuIvlrZDlm57mnaXkuobvvIEiKToocCgi5Yed6IO26KKr5Zad5o6JOiIsbi5nZWxJZCksYigiJU5BTUUl6L+36L+357OK57OK5Zyw5oqK5omL6YeM55qE5Yed6IO25Zad5LqG5LiL5Y674oCmIikpO3JldHVybn1jb25zdCByPWVuKHQpO3ImJmwuZW5hYmxlZD8ocCgi5ZG95Lit5YWz6ZSu6K+NIOKGkiIsciksdXQocikpOnAoIuacquWRveS4reWFs+mUruivje+8jOeJqeWTgeaWh+acrDoiLHN0KHQpLnNsaWNlKDAsNjApKTtyZXR1cm59aWYoZT09PSJJbmplY3QiKXtjb25zdCBuPWVuKHQpO24mJmwuZW5hYmxlZD8ocCgi5rOo5bCE5ZG95Lit5YWz6ZSu6K+NIOKGkiIsbiksdXQobikpOnAoIuazqOWwhOacquWRveS4reWFs+mUruivje+8jOeJqeWTgeaWh+acrDoiLHN0KHQpLnNsaWNlKDAsNjApKX19Y2F0Y2gobil7cCgi5aSE55CG5rS75Yqo5byC5bi4OiIsbi5tZXNzYWdlKX19ZnVuY3Rpb24gbGkoZSl7dHJ5e2NvbnN0IG49KEFycmF5LmlzQXJyYXkoZT8uRGljdGlvbmFyeSk/ZS5EaWN0aW9uYXJ5OltdKS5maW5kKHI9PnI/LlRhZz09PSJBY3Rpdml0eUFzc2V0Iik7cmV0dXJuIG4/e0Fzc2V0Om4uQXNzZXROYW1lP3tOYW1lOm4uQXNzZXROYW1lLEdyb3VwOntOYW1lOm4uR3JvdXBOYW1lfX06bnVsbCxDcmFmdDpuLkNyYWZ0TmFtZT97TmFtZTpuLkNyYWZ0TmFtZX06bnVsbH06bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gY2koKXtpZShlPT57dHJ5e2lmKGU/LlR5cGUhPT0iQWN0aXZpdHkiKXJldHVybjtjb25zdCB0PWFpKGUpO2lmKCF0LmFjdGl2aXR5TmFtZXx8KHAoIuaUtuWIsOa0u+WKqOa2iOaBrzoiLHQuYWN0aXZpdHlOYW1lLCLnm67moIc6Iix0LnRhcmdldCwi54mp5ZOBOiIsdC5pdGVtTmFtZXx8Ij8iLCLlj5HpgIHogIU6IixlLlNlbmRlciksISh0LnRhcmdldCE9bnVsbCYmdC50YXJnZXQ9PT1QbGF5ZXI/Lk1lbWJlck51bWJlcikpKXJldHVybjtSdCh0LmFjdGl2aXR5TmFtZSxsaShlKXx8RHQoKSl9Y2F0Y2godCl7cCgi6Kem5Y+R5qOA5rWL5byC5bi4OiIsdC5tZXNzYWdlKX19KX1mdW5jdGlvbiB1aShlKXtpZihlKXRyeXtlLmhvb2tGdW5jdGlvbigiQWN0aXZpdHlSdW4iLDEsKHQsbik9Pntjb25zdCByPW4odCk7dHJ5e2NvbnN0W2ksbyxzLGFdPXQ7aWYoIWl8fCFvfHwhYT8uQWN0aXZpdHk/Lk5hbWV8fCEodHlwZW9mIGkuSXNQbGF5ZXI9PSJmdW5jdGlvbiImJmkuSXNQbGF5ZXIoKSYmdHlwZW9mIG8uSXNQbGF5ZXI9PSJmdW5jdGlvbiImJm8uSXNQbGF5ZXIoKSkpcmV0dXJuIHI7Y29uc3QgdT1hLkFjdGl2aXR5Lk5hbWU7aWYodSE9PSJTaXBJdGVtIiYmdSE9PSJJbmplY3QiKXJldHVybiByO2NvbnN0IGQ9YS5JdGVtfHxEdCgpO3AoIuacrOWcsOWKqOS9nChBY3Rpdml0eVJ1bik6Iix1LCLnianlk4E6IixkPy5Bc3NldD8uTmFtZXx8Ij8iKSxSdCh1LGQpfWNhdGNoe31yZXR1cm4gcn0pfWNhdGNoKHQpe3AoIkFjdGl2aXR5UnVuIOaMgumSqeWksei0pToiLHQubWVzc2FnZSl9fWZ1bmN0aW9uIGRpKGUpe2lmKGUpdHJ5e2UuaG9va0Z1bmN0aW9uKCJEaWFsb2dBY3Rpdml0eUNsaWNrIiwxLCh0LG4pPT57Y29uc3Qgcj1uKHQpO3RyeXtjb25zdFtpLG9dPXQ7aWYoIWl8fCFvPy5BY3Rpdml0eT8uTmFtZXx8dHlwZW9mIGkuSXNQbGF5ZXIhPSJmdW5jdGlvbiJ8fCFpLklzUGxheWVyKCkpcmV0dXJuIHI7Y29uc3Qgcz1vLkFjdGl2aXR5Lk5hbWU7aWYocyE9PSJTaXBJdGVtIiYmcyE9PSJJbmplY3QiKXJldHVybiByO2NvbnN0IGE9by5JdGVtfHxEdCgpO3AoIueCueWHu+WKqOS9nChEaWFsb2dBY3Rpdml0eUNsaWNrKToiLHMsIueJqeWTgToiLGE/LkFzc2V0Py5OYW1lfHwiPyIpLFJ0KHMsYSl9Y2F0Y2h7fXJldHVybiByfSl9Y2F0Y2godCl7cCgiRGlhbG9nQWN0aXZpdHlDbGljayDmjILpkqnlpLHotKU6Iix0Lm1lc3NhZ2UpfX1mdW5jdGlvbiBEdCgpe3RyeXtyZXR1cm4gSW52ZW50b3J5R2V0KFBsYXllciwiSXRlbUhhbmRoZWxkIil9Y2F0Y2h7cmV0dXJuIG51bGx9fWNvbnN0IFFlPSJQRVhfUGlja3VwR2VsIixaZT0iUEVYX1B1dEdlbCI7ZnVuY3Rpb24gRmUoZSl7dHJ5e2NvbnN0IHQ9ZT8uT25saW5lU2hhcmVkU2V0dGluZ3M/LlBFWD8uc3RhdGU7aWYodCYmdC5tb2RlPT09ImJsYW5rIiYmdC5nZWxJZClyZXR1cm4gdH1jYXRjaHt9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZmkoZSl7dHJ5e2lmKCFlfHxlLk1lbWJlck51bWJlcj09bnVsbHx8ZS5NZW1iZXJOdW1iZXI9PT1QbGF5ZXI/Lk1lbWJlck51bWJlcilyZXR1cm4hMTtjb25zdCB0PUZlKGUpO3JldHVybiEoIXR8fHQuZ2VsSG9sZGVyKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gcGkoZSl7dHJ5e2lmKCFlfHxlLk1lbWJlck51bWJlcj09bnVsbHx8ZS5NZW1iZXJOdW1iZXI9PT1QbGF5ZXI/Lk1lbWJlck51bWJlcilyZXR1cm4hMTtjb25zdCB0PUZlKGUpO2lmKCF0KXJldHVybiExO2NvbnN0IG49SW52ZW50b3J5R2V0KFBsYXllciwiSXRlbUhhbmRoZWxkIik7aWYoIW58fCFfbihuKSlyZXR1cm4hMTtjb25zdCByPW1pKG4pO3JldHVybiEhciYmIXIuaW52YWxpZCYmci5nZWxJZD09PXQuZ2VsSWR9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIG1pKGUpe3RyeXtjb25zdCB0PWU/LkNyYWZ0Py5EZXNjcmlwdGlvbj8/IiI7aWYoIXQuc3RhcnRzV2l0aCgiUEVYfCIpKXJldHVybiBudWxsO2NvbnN0IG49dC5zbGljZSg0KS5zcGxpdCgifCIpLFtyLGldPW47cmV0dXJue2dlbElkOnIsb3duZXJNZW1iZXJOdW1iZXI6K2ksaW52YWxpZDpuWzNdPT09IklOVkFMSUQifX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24geWkoZSx0KXt0cnl7aWYoIXQpe2IoIiVOQU1FJeivleedgOaNoei1t+WHneiDtu+8jOS9huWug+W3sue7j+S4jeingeS6huKApiIpO3JldHVybn1pZihJbnZlbnRvcnlHZXQoUGxheWVyLCJJdGVtSGFuZGhlbGQiKSl7YigiJU5BTUUl5oOz5o2h6LW35Yed6IO277yM5L2G5omL6YeM5bey57uP5ou/552A5Lic6KW/5LqG44CCIik7cmV0dXJufWNvbnN0IG49dC5nZWxJZCxyPXQub3duZXI/P2U/Lk1lbWJlck51bWJlcixpPXQuZXhwaXJlc0F0Pz9EYXRlLm5vdygpKzE4MDAqMWUzLG89QnIocixuLGksdC50eXBlPT09Im5vcm1hbCI/Im5vcm1hbCI6InBlcnNvbmEiKTtpZighbyl7YigiJU5BTUUl6K+V552A5o2h6LW35Yed6IO277yM5L2G5aSx6LSl5LqG4oCmIik7cmV0dXJufVAoIlBFWF9HZWxIZWxkIixbe1RhZzoiR2VsSWQiLFZhbHVlOlN0cmluZyhuKX0se1RhZzoiSG9sZGVyIixWYWx1ZTpTdHJpbmcoUGxheWVyPy5NZW1iZXJOdW1iZXIpfSx7VGFnOiJPd25lciIsVmFsdWU6U3RyaW5nKHIpfV0pO3RyeXtlPy5PbmxpbmVTaGFyZWRTZXR0aW5ncz8uWyJQRVgiXT8uc3RhdGUmJihlLk9ubGluZVNoYXJlZFNldHRpbmdzLlBFWC5zdGF0ZS5nZWxIb2xkZXI9UGxheWVyPy5NZW1iZXJOdW1iZXIpfWNhdGNoe31iKGAlTkFNRSXmjaHotbfkuoblnLDkuIrnmoQke28uQ3JhZnQ/Lk5hbWU/PyLlh53og7Yife+8jOWwj+W/g+WcsOerr+S6hui1t+adpeOAgmApfWNhdGNoKG4pe3AoIuaNoei1t+Wksei0pToiLG4ubWVzc2FnZSl9fWZ1bmN0aW9uIGhpKGUsdCl7dHJ5e2lmKCF0KXJldHVybjtjb25zdCBuPXQuZ2VsSWQscj10Lm93bmVyPz9lPy5NZW1iZXJOdW1iZXIsaT1JbnZlbnRvcnlHZXQoUGxheWVyLCJJdGVtSGFuZGhlbGQiKTtpZighaXx8IV9uKGkpKXtiKCIlTkFNRSXmg7PmlL7lm57lh53og7bvvIzkvYbmiYvkuIrlt7Lnu4/nqbrkuobjgIIiKTtyZXR1cm59aWYoIVNlKG4pKXJldHVybjtQKCJQRVhfR2VsQ29uc3VtZWQiLFt7VGFnOiJHZWxJZCIsVmFsdWU6U3RyaW5nKG4pfSx7VGFnOiJEcmlua2VyIixWYWx1ZTpTdHJpbmcocil9LHtUYWc6Ik93bmVyIixWYWx1ZTpTdHJpbmcocil9XSk7dHJ5e2U/Lk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdPy5zdGF0ZSYmKGUuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYLnN0YXRlPW51bGwpfWNhdGNoe31iKGAlTkFNRSXmiorlh53og7bmlL7lm57kuoYke25lKGUsIuWvueaWuSIpfeeahOi6q+S9k+mHjO+8jCR7bmUoZSwi5a+55pa5Iil95oWi5oWi5Zue6L+H56We5p2l44CCYCl9Y2F0Y2gobil7cCgi5pS+5Zue5aSx6LSlOiIsbi5tZXNzYWdlKX19ZnVuY3Rpb24gZ2koKXtjb25zdCBlPVUoKTtpZighZSlyZXR1cm47Y29uc3QgdD0obixyKT0+e2NvbnN0IGk9biYmblswXTtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZpLmluY2x1ZGVzKFFlKT8i5o2h6LW35Yed6IO2Ijp0eXBlb2YgaT09InN0cmluZyImJmkuaW5jbHVkZXMoWmUpPyLmlL7lm57lh53og7YiOnIobil9O3RyeXtlLmhvb2tGdW5jdGlvbigiQWN0aXZpdHlEaWN0aW9uYXJ5VGV4dCIsMCx0KX1jYXRjaHt9dHJ5e2UuaG9va0Z1bmN0aW9uKCJUZXh0R2V0IiwwLHQpLGUuaG9va0Z1bmN0aW9uKCJUZXh0R2V0SW5TY29wZSIsMCx0KX1jYXRjaHt9dHJ5e2UuaG9va0Z1bmN0aW9uKCJEaWFsb2dCdWlsZEFjdGl2aXRpZXMiLDEwLChuLHIpPT57Y29uc3QgaT1yKG4pO3RyeXtjb25zdCBvPW4mJm5bMF07aWYodHlwZW9mIERpYWxvZ0FjdGl2aXR5PiJ1Inx8IUFycmF5LmlzQXJyYXkoRGlhbG9nQWN0aXZpdHkpfHwhb3x8by5NZW1iZXJOdW1iZXI9PT1QbGF5ZXI/Lk1lbWJlck51bWJlcilyZXR1cm4gaTtjb25zdCBzPWM9PkRpYWxvZ0FjdGl2aXR5LnNvbWUodT0+dSYmdS5BY3Rpdml0eSYmdS5BY3Rpdml0eS5OYW1lPT09Yyk/ITE6KERpYWxvZ0FjdGl2aXR5LnB1c2goe0FjdGl2aXR5OntOYW1lOmMsTWF4UHJvZ3Jlc3M6MH0sSXRlbTpudWxsLEdyb3VwOm8uRm9jdXNHcm91cCYmby5Gb2N1c0dyb3VwLk5hbWV8fCJJdGVtSGFuZHMifSksITApO2xldCBhPSExO2lmKGZpKG8pJiYoYT1zKFFlKXx8YSkscGkobykmJihhPXMoWmUpfHxhKSwhYSlyZXR1cm4gaTt0cnl7dHlwZW9mIERpYWxvZ01lbnVNYXBwaW5nPCJ1IiYmRGlhbG9nTWVudU1hcHBpbmcuYWN0aXZpdGllcyYmdHlwZW9mIERpYWxvZ01lbnVNYXBwaW5nLmFjdGl2aXRpZXMuUmVsb2FkPT0iZnVuY3Rpb24iJiZEaWFsb2dNZW51TWFwcGluZy5hY3Rpdml0aWVzLlJlbG9hZChudWxsLHtyZXNldDohMCxyZXNldERpYWxvZ0l0ZW1zOiExfSl9Y2F0Y2h7fX1jYXRjaHt9cmV0dXJuIGl9KX1jYXRjaHt9dHJ5e2UuaG9va0Z1bmN0aW9uKCJEaWFsb2dBY3Rpdml0eUNsaWNrIiwxLChuLHIpPT57Y29uc3RbaSxvXT1uO2xldCBzPSExO3RyeXtjb25zdCBhPW8mJm8uQWN0aXZpdHkmJm8uQWN0aXZpdHkuTmFtZTtpJiZhPT09UWU/KHlpKGksRmUoaSkpLHM9ITApOmkmJmE9PT1aZSYmKGhpKGksRmUoaSkpLHM9ITApfWNhdGNoe31pZihzKXt0cnl7dHlwZW9mIERpYWxvZ0xlYXZlPT0iZnVuY3Rpb24iJiZEaWFsb2dMZWF2ZSgpfWNhdGNoe31yZXR1cm59cmV0dXJuIHIobil9KX1jYXRjaHt9fWxldCBRPW51bGwsWj1udWxsLGVlPW51bGw7ZnVuY3Rpb24geGkoe2dlbElkOmUsb3duZXI6dCxkcmlua2VyOm59KXt0cnl7aWYodD09PVBsYXllcj8uTWVtYmVyTnVtYmVyKWlmKGYubW9kZT09PW0uQkxBTkspe2NvbnN0IHI9Zi5nZWxUeXBlPT09Im5vcm1hbCI7cCgi5oiR55qE5Yed6IO26KKr5pS+5Zue6Lqr5L2TOiIsZSwiZHJpbmtlcjoiLG4pLEJlKHI/IiVOQU1FJeWWneWbnuS6huiHquW3seeahOWHneiDtu+8jOiDg+mHjOS4gOmYtee/u+iFvuKApiI6IiVOQU1FJeWWneWbnuS6huiHquW3seeahOS6uuagvOWHneiDtu+8jOaEj+ivhuS4gOS4i+WtkOWbnuadpeS6hu+8gSIsKCk9Pntjb25zdCBpPWhuKCJmZWVkIik7TnQoImZlZWQiLGkpfSl9ZWxzZSBwKCLmiJHnmoTlh53og7booqvmtojogJc6IixlKX1jYXRjaHt9fWZ1bmN0aW9uIGJpKCl7Y29uc3QgZT1VKCk7Y2koKSxlJiZ1aShlKSxlJiZkaShlKSxlJiZ2cihlKSxlJiZicihlKSxlJiZHcihlKSxIcih4aSksUHIoKSxnaSgpLFEmJmNsZWFySW50ZXJ2YWwoUSksUT1zZXRJbnRlcnZhbCgoKT0+e3RyeXtOcihEYXRlLm5vdygpKX1jYXRjaHt9fSwyNTApLFomJmNsZWFySW50ZXJ2YWwoWiksWj1zZXRJbnRlcnZhbCgoKT0+e3RyeXtrcigpfWNhdGNoe319LDFlMyksZWUmJmNsZWFySW50ZXJ2YWwoZWUpLGVlPXNldEludGVydmFsKCgpPT57aWYobC5zZWVSZW1vdGVBbmltcyl0cnl7VnIoKX1jYXRjaHt9fSwxZTMpfWZ1bmN0aW9uIHZpKCl7USYmKGNsZWFySW50ZXJ2YWwoUSksUT1udWxsKSxaJiYoY2xlYXJJbnRlcnZhbChaKSxaPW51bGwpLGVlJiYoY2xlYXJJbnRlcnZhbChlZSksZWU9bnVsbCk7dHJ5e0tyKCl9Y2F0Y2h7fX1jb25zdCB0bj0icGV4LXNldHRpbmdzLXBhbmVsIixFaT1be2tleToiYmFzaWMiLGxhYmVsOiLln7rmnKzorr7nva4ifSx7a2V5OiJleGNyZXRlIixsYWJlbDoi5o6S5Ye66K6+572uIn0se2tleToiZngiLGxhYmVsOiLnibnmlYjorr7nva4ifSx7a2V5OiJwZXJtIixsYWJlbDoi5p2D6ZmQ6K6+572uIn0se2tleToiZXhwciIsbGFiZWw6IuihqOaDheiuvue9riJ9LHtrZXk6InNvdW5kIixsYWJlbDoi6Z+z5pWI6K6+572uIn0se2tleToiYWJvdXQiLGxhYmVsOiLlhbPkuo7mj5Lku7YifV0sU2k9W1siRXllYnJvd3MiLFtbIlNvZnQiLCLmn5TlkowiXSxbIkxvd2VyZWQiLCLkvY7lnoIiXSxbIlJhaXNlZCIsIuS4iuaJrCJdLFsiRnJvd24iLCLnmrHnnIkiXV1dLFsiRXllcyIsW1siVmVyeUxld2QiLCLlpLHnpZ4iXSxbIkhlYXJ0UGluayIsIuW/g+W9oueyiSJdLFsiTGV3ZEhlYXJ0UGluayIsIua2qeW/g+eyiSJdLFsiQ2xvc2VkIiwi6Zet55y8Il0sWyJEYXplZCIsIuaBjeaDmiJdXV0sWyJNb3V0aCIsW1siRnJvd24iLCLmir/lmLQiXSxbIk1vYW4iLCLlkbvlkJ8iXSxbIkFoZWdhbyIsIumYv+m7keminCJdLFsiT3BlbiIsIuW8oOW8gCJdXV0sWyJCbHVzaCIsW1siSGlnaCIsIumrmCJdLFsiTWVkaXVtIiwi5LitIl0sWyJMb3ciLCLkvY4iXSxbIlZlcnlIaWdoIiwi5p6B6auYIl1dXV07bGV0IG5uPSExO2Z1bmN0aW9uIHdpKCl7aWYoIW5uKXtubj0hMDt0cnl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2UuaWQ9InBleC1zZXR0aW5ncy1zdHlsZXMiLGUudGV4dENvbnRlbnQ9YAojcGV4LXNldHRpbmdzLXBhbmVse3Bvc2l0aW9uOmZpeGVkO2xlZnQ6NTAlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpOwogIHdpZHRoOm1pbigxMDB2dywxODAwcHgpO2hlaWdodDptaW4oMTAwdmgsMTAwMHB4KTsKICBiYWNrZ3JvdW5kOiMxZTE5MzA7Ym9yZGVyOjJweCBzb2xpZCAjZjI3YmE4O2JvcmRlci1yYWRpdXM6MTJweDtjb2xvcjojZThlNGY1OwogIGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zaXplOjIwcHg7ei1pbmRleDoyMTQ3NDgzNjQ2O2JveC1zaGFkb3c6MCA4cHggNDBweCByZ2JhKDAsMCwwLC42NSk7CiAgZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvdmVyZmxvdzpoaWRkZW59Ci5wZXgtcy1oZWFke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzoxOHB4IDI2cHg7CiAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzM3MzA1YTtiYWNrZ3JvdW5kOiMyNDFkM2F9Ci5wZXgtcy10aXRsZXtjb2xvcjojZjI3YmE4O2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MjRweH0KLnBleC1zLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXg6MTttaW4taGVpZ2h0OjB9Ci5wZXgtcy1uYXZ7d2lkdGg6MjQwcHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMzczMDVhO3BhZGRpbmc6MTZweCAxNHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweH0KLnBleC1zZWMtYnRue2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzliOTNiZDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE1cHggMThweDsKICB0ZXh0LWFsaWduOmxlZnQ7Zm9udC1zaXplOjIwcHg7Y3Vyc29yOnBvaW50ZXJ9Ci5wZXgtc2VjLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOiMyYTI0NTA7Y29sb3I6I2U4ZTRmNX0KLnBleC1zZWMtYnRuLm9ue2JhY2tncm91bmQ6I2YyN2JhODtjb2xvcjojMjQxZDNhO2ZvbnQtd2VpZ2h0OjYwMH0KLnBleC1zLWNvbnRlbnR7ZmxleDoxO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjE4cHggMjZweH0KLnBleC1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MThweDttYXJnaW46MTFweCAwfQoucGV4LWxibHtjb2xvcjojYzljMmUwO2ZvbnQtc2l6ZToyMHB4O2ZsZXgtc2hyaW5rOjB9Ci5wZXgtY3Rse2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHh9Ci5wZXgtdGdse2JhY2tncm91bmQ6IzNhMzI3MDtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTBweCAyOHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToyMHB4fQoucGV4LXRnbC5vbntiYWNrZ3JvdW5kOiMyYTZiNjN9Ci5wZXgtc2Vse2JhY2tncm91bmQ6IzJhNmI2Mztjb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgIzM3MzA1YTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MjBweH0KLnBleC1udW17YmFja2dyb3VuZDojMmIyNDUwO2NvbG9yOiNlOGU0ZjU7Ym9yZGVyOjFweCBzb2xpZCAjYzI1NTdmO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTBweCAxNHB4O3dpZHRoOjEzMHB4O2ZvbnQtc2l6ZToyMHB4fQoucGV4LXR4dHtiYWNrZ3JvdW5kOiMyYjI0NTA7Y29sb3I6I2U4ZTRmNTtib3JkZXI6MXB4IHNvbGlkICMzNzMwNWE7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDE0cHg7CiAgd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxOS41cHg7cmVzaXplOnZlcnRpY2FsO21pbi1oZWlnaHQ6MTAwcHh9Ci5wZXgtbm90ZXtjb2xvcjojN2Q3NDllO2ZvbnQtc2l6ZToxNy41cHg7bWFyZ2luOjZweCAwIDE0cHg7bGluZS1oZWlnaHQ6MS43fQoucGV4LXNlYy10aXRsZXtjb2xvcjojZjI3YmE4O2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MjEuNXB4O21hcmdpbjoxNnB4IDAgNnB4fQoucGV4LWFjdHtiYWNrZ3JvdW5kOiMzYTMyNzA7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMjZweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MjBweH0KLnBleC1hY3Q6aG92ZXJ7YmFja2dyb3VuZDojNGE0MDdmfQoucGV4LWFjdC5kYW5nZXJ7YmFja2dyb3VuZDojODcyNjI2fQoucGV4LWFjdC5va3tiYWNrZ3JvdW5kOiMyYTZiNjN9Ci5wZXgtYWJvdXQtbGluZXtjb2xvcjojYzljMmUwO2ZvbnQtc2l6ZToyMHB4O2xpbmUtaGVpZ2h0OjEuODttYXJnaW46M3B4IDB9Ci5wZXgtYWJvdXQtaGVhZHtjb2xvcjojZjI3YmE4O2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MjEuNXB4O21hcmdpbjoxNHB4IDAgNHB4fQoucGV4LWV4cHItZGVse2JhY2tncm91bmQ6Izg3MjYyNjtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OHB4IDE4cHg7bWFyZ2luLWxlZnQ6MTJweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTdweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5wZXgtY29uZmlybS1kaWFsb2d7cG9zaXRpb246Zml4ZWQ7bGVmdDo1MCU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7d2lkdGg6NDIwcHg7CiAgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYmEoMzAsMTAsNDAsLjk4KSxyZ2JhKDUwLDE1LDYwLC45OCkpO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMTIwLDIwMCwuNDUpOwogIGJvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjIycHg7ei1pbmRleDoyMTQ3NDgzNjQ3O2NvbG9yOiNmZmRkZWU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXNpemU6MTRweDsKICBib3gtc2hhZG93OjAgOHB4IDQwcHggcmdiYSgxODAsNjAsMTYwLC40KTt0ZXh0LWFsaWduOmNlbnRlcn0KLnBleC1jb25maXJtLWRpYWxvZyAubXNne2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206MThweDtsaW5lLWhlaWdodDoxLjY7d2hpdGUtc3BhY2U6cHJlLWxpbmV9Ci5wZXgtY29uZmlybS1kaWFsb2cgYnV0dG9ue2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OXB4IDI2cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDdweH0KLnBleC1jb25maXJtLWRpYWxvZyAubm97YmFja2dyb3VuZDojNGEyMDMwO2NvbG9yOiNmZmFhYmJ9Ci5wZXgtY29uZmlybS1kaWFsb2cgLnllc3tiYWNrZ3JvdW5kOiM4NzI2MjY7Y29sb3I6I2FhZmZhYX0KLnBleC1idG4tcm93e2Rpc3BsYXk6ZmxleDtnYXA6MTBweDttYXJnaW46MTBweCAwO2ZsZXgtd3JhcDp3cmFwfQpgLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9Y2F0Y2h7fX19ZnVuY3Rpb24gRShlKXtyZXR1cm4gU3RyaW5nKGU/PyIiKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKX1mdW5jdGlvbiBldChlLHQpe3RyeXtjb25zdCByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5wZXgtY29uZmlybS1kaWFsb2ciKTtyJiZyLnJlbW92ZSgpfWNhdGNoe31jb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO24uY2xhc3NOYW1lPSJwZXgtY29uZmlybS1kaWFsb2ciLG4uaW5uZXJIVE1MPWA8ZGl2IGNsYXNzPSJtc2ciPiR7RShlKX08L2Rpdj4KICAgICAgICA8ZGl2PjxidXR0b24gY2xhc3M9Im5vIiB0eXBlPSJidXR0b24iPuWPlua2iDwvYnV0dG9uPjxidXR0b24gY2xhc3M9InllcyIgdHlwZT0iYnV0dG9uIj7noa7orqQ8L2J1dHRvbj48L2Rpdj5gLG4ucXVlcnlTZWxlY3RvcigiLm5vIikub25jbGljaz0oKT0+bi5yZW1vdmUoKSxuLnF1ZXJ5U2VsZWN0b3IoIi55ZXMiKS5vbmNsaWNrPSgpPT57bi5yZW1vdmUoKTt0cnl7dCYmdCgpfWNhdGNoe319LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobil9Y29uc3QgVj17YWN0aXZlOiJiYXNpYyIscGFuZWw6bnVsbCxfbmVlZHNSZW5kZXI6ITAsbG9hZCgpe3RyeXtsbigpfWNhdGNoe319LHJ1bigpe3RyeXt3aSgpLCghdGhpcy5wYW5lbHx8IWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRuKSkmJih0aGlzLl9idWlsZCgpLHRoaXMuX25lZWRzUmVuZGVyPSEwKSx0aGlzLl9uZWVkc1JlbmRlciYmKHRoaXMuX25lZWRzUmVuZGVyPSExLHRoaXMuX3JlbmRlcih0aGlzLmFjdGl2ZSksdGhpcy5fc3luY05hdigpKX1jYXRjaChlKXtwKCLorr7nva7pnaLmnb/muLLmn5PlvILluLg6IixlLm1lc3NhZ2UpfX0sY2xpY2soKXt9LHVubG9hZCgpe3RoaXMuX2Nsb3NlKCl9LGV4aXQoKXt0aGlzLl9jbG9zZSgpfSxfY2xvc2UoKXt0cnl7dGhpcy5wYW5lbCYmKHRoaXMucGFuZWwucmVtb3ZlKCksdGhpcy5wYW5lbD1udWxsKX1jYXRjaHt9fSxfYnVpbGQoKXtpZih0aGlzLnBhbmVsKXRyeXt0aGlzLnBhbmVsLnJlbW92ZSgpfWNhdGNoe31jb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuaWQ9dG4sZS5pbm5lckhUTUw9YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtcy1oZWFkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zLXRpdGxlIj7kurrmoLzmjpLms4Qgwrcg6K6+572uPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InBleC1hY3QiIGRhdGEtcGV4LWNsb3NlPSIxIj7inJU8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zLWJvZHkiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LXMtbmF2Ij4KICAgICAgICAgICAgICAgICAgICAke0VpLm1hcCh0PT5gPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtc2VjLWJ0biIgZGF0YS1wZXgtc2VjPSIke3Qua2V5fSIgdGl0bGU9IiR7RSh0LmxhYmVsKX0iPiR7RSh0LmxhYmVsKX08L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LXMtY29udGVudCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PmAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSx0aGlzLnBhbmVsPWUsZS5xdWVyeVNlbGVjdG9yKCJbZGF0YS1wZXgtY2xvc2VdIikub25jbGljaz0oKT0+e3RyeXt0eXBlb2YgUHJlZmVyZW5jZUV4aXQ9PSJmdW5jdGlvbiImJlByZWZlcmVuY2VFeGl0KCl9Y2F0Y2h7fXRoaXMuX2Nsb3NlKCl9LGUucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcGV4LXNlY10iKS5mb3JFYWNoKHQ9Pnt0Lm9uY2xpY2s9KCk9Pnt0aGlzLmFjdGl2ZSE9PXQuZGF0YXNldC5wZXhTZWMmJih0aGlzLmFjdGl2ZT10LmRhdGFzZXQucGV4U2VjLHRoaXMuX25lZWRzUmVuZGVyPSEwLHRoaXMucnVuKCkpfX0pfSxfc3luY05hdigpe3RyeXt0aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBleC1zZWNdIikuZm9yRWFjaChlPT57ZS5jbGFzc0xpc3QudG9nZ2xlKCJvbiIsZS5kYXRhc2V0LnBleFNlYz09PXRoaXMuYWN0aXZlKX0pfWNhdGNoe319LF9yZW5kZXIoZSl7Y29uc3QgdD10aGlzLnBhbmVsLnF1ZXJ5U2VsZWN0b3IoIi5wZXgtcy1jb250ZW50Iiksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtuLmNsYXNzTmFtZT0icGV4LXMtY29udGVudCIsdCYmdC5yZXBsYWNlV2l0aChuKTtjb25zdCByPXRoaXNbIl9zZWNfIitlXTtuLmlubmVySFRNTD10eXBlb2Ygcj09ImZ1bmN0aW9uIj9yLmNhbGwodGhpcyk6JzxkaXYgY2xhc3M9InBleC1ub3RlIj7mmoLml6DlhoXlrrk8L2Rpdj4nLHRoaXMuX2JpbmQobiksZT09PSJleHByIiYmdGhpcy5fZW5zdXJlRXhwclByZXZpZXcoKX0sX2JpbmQoZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdD0+e2NvbnN0IG49dC50YXJnZXQuY2xvc2VzdCgiW2RhdGEtcGV4LXNpZGVdIik7aWYobil7Y29uc3QgYT1uLmRhdGFzZXQucGV4U2lkZSxjPW4uZGF0YXNldC5wZXhWYWw9PT0iMSI7dGhpcy5fc2V0UGF0aChhLGMpLGUucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtcGV4LXNpZGU9IiR7YX0iXWApLmZvckVhY2godT0+e3UuY2xhc3NMaXN0LnRvZ2dsZSgib24iLHUuZGF0YXNldC5wZXhWYWw9PT1uLmRhdGFzZXQucGV4VmFsKX0pO3JldHVybn1jb25zdCByPXQudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXBleC1tb2RlXSIpO2lmKHIpe2NvbnN0IGE9ci5kYXRhc2V0LnBleE1vZGU7bC5lZGl0TW9kZXMmJihsLmVkaXRNb2Rlc1thXT1yLmRhdGFzZXQucGV4TXYpO3RyeXtfKCl9Y2F0Y2h7fWUucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtcGV4LW1vZGU9IiR7YX0iXWApLmZvckVhY2goYz0+e2MuY2xhc3NMaXN0LnRvZ2dsZSgib24iLGMuZGF0YXNldC5wZXhNdj09PXIuZGF0YXNldC5wZXhNdil9KTtyZXR1cm59Y29uc3QgaT10LnRhcmdldC5jbG9zZXN0KCJbZGF0YS1wZXgtYWN0aW9uXSIpO2lmKGkpe2NvbnN0IGE9dGhpcy5fYWN0aW9uc1tpLmRhdGFzZXQucGV4QWN0aW9uXTthJiZhKCl9aWYodC50YXJnZXQuY2xvc2VzdCgiW2RhdGEtcGV4LWFkZC1leHByXSIpKXtjb25zdCBhPWwuZXhwcmVzc2lvbnM/LndhaXQ7aWYoQXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg8MTApe2EucHVzaCh7Li4ubC5leHByZXNzaW9ucy5leGNyZXRlfHx7fX0pO3RyeXtfKCl9Y2F0Y2h7fXRoaXMuX25lZWRzUmVuZGVyPSEwLHRoaXMucnVuKCl9cmV0dXJufWNvbnN0IHM9dC50YXJnZXQuY2xvc2VzdCgiW2RhdGEtcGV4LWRlbC1leHByXSIpO2lmKHMpe2NvbnN0IGE9cGFyc2VJbnQocy5kYXRhc2V0LnBleERlbEV4cHIsMTApO2V0KCfnoa7lrprliKDpmaQi562J5b6F6KGo5oOFICcrKGErMSkrJyLlkJfvvJ8nLCgpPT57Y29uc3QgYz1sLmV4cHJlc3Npb25zPy53YWl0O2lmKEFycmF5LmlzQXJyYXkoYykmJmNbYV0pe2Muc3BsaWNlKGEsMSk7dHJ5e18oKX1jYXRjaHt9dGhpcy5fbmVlZHNSZW5kZXI9ITAsdGhpcy5ydW4oKX19KTtyZXR1cm59fSksZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHQ9Pntjb25zdCBuPXQudGFyZ2V0O2lmKG4uZGF0YXNldC5wZXhTZWxlY3Qpe3RoaXMuX3NldFBhdGgobi5kYXRhc2V0LnBleFNlbGVjdCxuLnZhbHVlKTtjb25zdCByPW4uZGF0YXNldC5wZXhTZWxlY3Q7aWYoci5zdGFydHNXaXRoKCJleHByZXNzaW9ucy53YWl0LiIpKXtjb25zdCBpPXBhcnNlSW50KHIuc3BsaXQoIi4iKS5wb3AoKSwxMCk7aXNOYU4oaSl8fCh0aGlzLl9leHByRWRpdEtleT1pKX1lbHNlIHIuc3RhcnRzV2l0aCgiZXhwcmVzc2lvbnMuIik/dGhpcy5fZXhwckVkaXRLZXk9ci5zcGxpdCgiLiIpWzFdOnIuc3RhcnRzV2l0aCgibm9ybWFsRXhwcmVzc2lvbiIpJiYodGhpcy5fZXhwckVkaXRLZXk9Im5vcm1hbCIpOyhyLnN0YXJ0c1dpdGgoImV4cHJlc3Npb25zLiIpfHxyLnN0YXJ0c1dpdGgoIm5vcm1hbEV4cHJlc3Npb24iKSkmJnRoaXMuX2Vuc3VyZUV4cHJQcmV2aWV3KCk7cmV0dXJufWlmKG4uZGF0YXNldC5wZXhOdW1iZXIpe2NvbnN0IHI9cGFyc2VJbnQobi52YWx1ZSwxMCk7aXNOYU4ocil8fHRoaXMuX3NldFBhdGgobi5kYXRhc2V0LnBleE51bWJlcixyKTtyZXR1cm59aWYobi5kYXRhc2V0LnBleFRleHQpe3RoaXMuX3NldFBhdGgobi5kYXRhc2V0LnBleFRleHQsbi52YWx1ZSk7cmV0dXJufWlmKG4uZGF0YXNldC5wZXhTb3VuZCl7Y29uc3Qgcj1uLmRhdGFzZXQucGV4U291bmQsaT1uLnZhbHVlLnNwbGl0KGAKYCkubWFwKG89Pm8udHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7bC5zb3VuZHNbcl09aTt0cnl7UmUoKX1jYXRjaHt9fX0pfSxfZ2V0UGF0aChlKXtyZXR1cm4gZS5zcGxpdCgiLiIpLnJlZHVjZSgodCxuKT0+dD09bnVsbD90OnRbbl0sbCl9LF9zZXRQYXRoKGUsdCl7aWYoZT09PSJ3aGl0ZWxpc3RUZXh0Iil7bC53aGl0ZWxpc3Q9U3RyaW5nKHQpLnNwbGl0KC9bXHMsXSsvKS5tYXAobz0+by50cmltKCkpLmZpbHRlcihCb29sZWFuKTt0cnl7XygpfWNhdGNoe31yZXR1cm59aWYoZT09PSJrZXl3b3JkcyJ8fGU9PT0ibm9ybWFsS2V5d29yZHMiKXtsW2VdPVN0cmluZyh0KS5zcGxpdChgCmApLm1hcChvPT5vLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO3RyeXtfKCl9Y2F0Y2h7fXJldHVybn1pZihlLnN0YXJ0c1dpdGgoInNvdW5kT24uIikpe2NvbnN0IG89ZS5zcGxpdCgiLiIpO2wuc291bmRPbiYmKGwuc291bmRPbltvWzFdXT0hIXQpO3RyeXtSZSgpfWNhdGNoe31yZXR1cm59Y29uc3Qgbj1lLnNwbGl0KCIuIikscj1uLnBvcCgpO2xldCBpPWw7Zm9yKGNvbnN0IG8gb2YgbilpPWlbb107aWYoaSYmciBpbiBpKXtpW3JdPXQ7dHJ5e18oKX1jYXRjaHt9fX0sX2FjdGlvbnM6e3JlY292ZXI6KCk9PntldChg56Gu5a6a6KaB5by65Yi25oGi5aSN5ZCX77yfCuatpOaTjeS9nOS8mueri+WNs+a4hemZpOWFqOmDqCBQRVgg54q25oCB77yM5YyF5ous562J5b6F44CB5aSx56We5LiO5Yed6IO244CCYCwoKT0+V2UoKSl9LHJlc2V0OigpPT57ZXQoYOehruWumuimgeaBouWkjem7mOiupOiuvue9ruWQl++8nwrmiYDmnInorr7nva7lsIbov5jljp/kuLrliJ3lp4vlgLzjgIJgLCgpPT57R2UoUigpKSxfKCEwKSxnZSghMCksVi5fbmVlZHNSZW5kZXI9ITAsVi5ydW4oKX0pfSxleHBvcnRDZmc6KCk9Pnt0cnl7dW4oKX1jYXRjaHt9fSxpbXBvcnRDZmc6KCk9Pnt0cnl7ZG4oKX1jYXRjaHt9fX0sX3JvdyhlLHQsbil7cmV0dXJuYDxkaXYgY2xhc3M9InBleC1yb3ciPjxkaXYgY2xhc3M9InBleC1sYmwiIHRpdGxlPSIke0UodCl9Ij4ke0UoZSl9PC9kaXY+PGRpdiBjbGFzcz0icGV4LWN0bCI+JHtufTwvZGl2PjwvZGl2PmB9LF90Z2woZSx0PSLlvIAgLyDlhbMiKXtjb25zdCBuPSEhdGhpcy5fZ2V0UGF0aChlKTtyZXR1cm5gPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtdGdsICR7bj8iIjoib24ifSIgZGF0YS1wZXgtc2lkZT0iJHtlfSIgZGF0YS1wZXgtdmFsPSIwIiB0aXRsZT0iJHtFKHQpfSI+5YWzPC9idXR0b24+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtdGdsICR7bj8ib24iOiIifSIgZGF0YS1wZXgtc2lkZT0iJHtlfSIgZGF0YS1wZXgtdmFsPSIxIiB0aXRsZT0iJHtFKHQpfSI+5byAPC9idXR0b24+YH0sX3NlbChlLHQsbil7Y29uc3Qgcj10aGlzLl9nZXRQYXRoKGUpO3JldHVybmA8c2VsZWN0IGNsYXNzPSJwZXgtc2VsIiBkYXRhLXBleC1zZWxlY3Q9IiR7ZX0iIHRpdGxlPSIke0Uobnx8IiIpfSI+JHt0Lm1hcCgoW2ksb10pPT5gPG9wdGlvbiB2YWx1ZT0iJHtpfSIgJHtyPT09aT8ic2VsZWN0ZWQiOiIifT4ke0Uobyl9PC9vcHRpb24+YCkuam9pbigiIil9PC9zZWxlY3Q+YH0sX251bShlLHQsbixyKXtyZXR1cm5gPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9InBleC1udW0iIGRhdGEtcGV4LW51bWJlcj0iJHtlfSIgbWluPSIke3R9IiBtYXg9IiR7bn0iIHZhbHVlPSIke3RoaXMuX2dldFBhdGgoZSl9IiB0aXRsZT0iJHtFKHJ8fCIiKX0iPmB9LF90eHQoZSx0LG4pe2NvbnN0IHI9dGhpcy5fZ2V0UGF0aChlKSxpPUFycmF5LmlzQXJyYXkocik/ci5qb2luKGAKYCk6cj8/IiI7cmV0dXJuYDx0ZXh0YXJlYSBjbGFzcz0icGV4LXR4dCIgZGF0YS1wZXgtdGV4dD0iJHtlfSIgdGl0bGU9IiR7RSh0fHwiIil9IiBwbGFjZWhvbGRlcj0iJHtFKG58fCIiKX0iPiR7RShpKX08L3RleHRhcmVhPmB9LF9zZWNfYmFzaWMoKXtyZXR1cm5gCiAgICAgICAgICAgICR7dGhpcy5fcm93KCLlkK/nlKjmj5Lku7YiLCLlhbPpl63lkI7miYDmnInop6blj5HkuI7ooajnjrDlhajpg6jlgZznlKgiLHRoaXMuX3RnbCgiZW5hYmxlZCIsIuaPkuS7tuaAu+W8gOWFsyIpKX0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LXNlYy10aXRsZSI+6Kem5Y+R5YWz6ZSu6K+NPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1ub3RlIj7lhbPplK7or43lhpnlnKjnianlk4HnmoTliLbkvZzlkI3jgIHliLbkvZzmj4/ov7DmiJbpm5XliLvmj4/ov7DkuK3vvJvllp3kuIvmiJbms6jlsITor6Xnianlk4HljbPop6blj5HjgII8L2Rpdj4KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuS6uuagvOWHneiDtuWFs+mUruivjSIsIuWRveS4reWQjui/m+WFpeWujOaVtOaOkuWHuua1geeoi++8muecqeaZleOAgeaOkuWHuuOAgeWkseelniIsIiIpfQogICAgICAgICAgICAke3RoaXMuX3R4dCgia2V5d29yZHMiLCLkurrmoLzlh53og7blhbPplK7or43vvIzmr4/ooYzkuIDkuKoiLCLlpoLvvJrkurrmoLzoja/msLQiKX0KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuaZrumAmuWHneiDtuWFs+mUruivjSIsIuWRveS4reWQjuaOkuWHuuaZrumAmuWHneiDtu+8muecqeaZleOAgeihqOaDheOAgeWHneiDtuiQveWcsO+8jOS9huayoeacieS7u+S9leWkseelnumZkOWItiIsIiIpfQogICAgICAgICAgICAke3RoaXMuX3R4dCgibm9ybWFsS2V5d29yZHMiLCLmma7pgJrlh53og7blhbPplK7or43vvIzmr4/ooYzkuIDkuKoiLCLlpoLvvJrmma7pgJrlh53og7YiKX0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LXNlYy10aXRsZSI+5a6J5YWoPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1idG4tcm93Ij4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icGV4LWFjdCBkYW5nZXIiIGRhdGEtcGV4LWFjdGlvbj0icmVjb3ZlciI+5by65Yi25oGi5aSNPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5by65Yi25oGi5aSN5Lya56uL5Y2z5riF6Zmk5YWo6YOoIFBFWCDnirbmgIHvvIzljIXmi6znrYnlvoXjgIHlpLHnpZ7kuI7lh53og7bvvIzpnIDopoHlvLnnqpfkuozmrKHnoa7orqTjgII8L2Rpdj5gfSxfc2VjX2V4Y3JldGUoKXtyZXR1cm5gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuaXtumXtDwvZGl2PgogICAgICAgICAgICAke3RoaXMuX3Jvdygi5o6S5Ye65YmN562J5b6F77yI56eS77yJIiwi5Zad5LiL5oiW5rOo5bCE5ZCO5Yiw5byA5aeL5o6S5Ye65LmL6Ze055qE562J5b6F5pe26Ze077yb562J5b6F6Z+z5pWI5oyJ5a6D6Ieq5Yqo5YiG5q6177yIMTAg56eSIDEg5q614oCmNTAg56eS5Y+K5Lul5LiKIDUg5q6177yJIix0aGlzLl9udW0oIndhaXRTZWNvbmRzIiwxMCw2MDAsIjEwIOWIsCA2MDAg56eSIikpfQogICAgICAgICAgICAke3RoaXMuX3Jvdygi6IeA6YOo6Zi75oyh5LiK6ZmQ77yI5YiG77yJIiwi6IeA6YOo6KOF5aSH5L2N5pyJ5Lic6KW/5pe2562J5b6F5aSa5LmF77yM6LaF5pe26I2v5pWI6Z2Z6buY5raI5aSxIix0aGlzLl9udW0oImJsb2NrZWRXYWl0TWludXRlcyIsMSwzMCwiMSDliLAgMzAg5YiG6ZKfIikpfQogICAgICAgICAgICAke3RoaXMuX3Jvdygi6Ieq5Yqo5Zue5b2S77yI5YiG77yJIiwi5o6S5Ye65ZCO5aSa5LmF5rKh6KKr5ZaC5Zue5bCx6Ieq5Yqo5oGi5aSNIix0aGlzLl9udW0oImF1dG9SZXZlcnRNaW51dGVzIiwxLDMwLCIxIOWIsCAzMCDliIbpkp8iKSl9CiAgICAgICAgICAgICR7dGhpcy5fcm93KCLoh6rliqjlm57lvZIiLCLotoXml7blkI7oh6rliqjmgaLlpI3lubblpITnkIblh53og7bvvJvlhbPpl63lkI7lh53og7bkuIDnm7TnrYnlloLlm54iLHRoaXMuX3RnbCgiYXV0b1JldmVydEVuYWJsZWQiLCLoh6rliqjlm57lvZLlvIDlhbMiKSl9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuWHneiDtjwvZGl2PgogICAgICAgICAgICAke3RoaXMuX3Jvdygi5Yed6IO25Yiw5pyfIiwi5Yiw5pyf5pe25Yed6IO25raI5pWj5raI5aSx77yM5oiW5Y+Y5oiQ5oyB5pyJ6ICF5omL5LiK55qE5peg5pWI5Yed6IO25rC45LmF5L+d55WZIix0aGlzLl9zZWwoImdlbEV4cGlyZU1vZGUiLFtbInZhbmlzaCIsIua2iOaVo+a2iOWksSJdLFsiaW52YWxpZCIsIuWPmOaXoOaViOWHneiDtiJdXSwi5Yiw5pyf6KGM5Li6IikpfQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtc2VjLXRpdGxlIj7lpLHnpZ7pmZDliLY8L2Rpdj4KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuWkseelnumZkOWItiIsIuWkseelnuaXtuS4jeiDveWKqOOAgeemgeiogOOAgeS4jeecqOecvOOAgeWnv+WKv+mUgeWumu+8m+WFs+mXreWQjuWkseelnuWPquS/neeVmeinhuinieihqOeOsCIsdGhpcy5fdGdsKCJyZXN0cmljdGlvbnMiLCLlpLHnpZ7pmZDliLbmgLvlvIDlhbMiKSl9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1ub3RlIj7lhbPpl63lpLHnpZ7pmZDliLblkI7vvIzmjpLlh7rogIXlpLHnpZ7mnJ/pl7Tku43lj6/ku6XooYzliqjjgIHor7Tor53lkoznprvlvIDmiL/pl7TjgII8L2Rpdj5gfSxfc2VjX2Z4KCl7cmV0dXJuYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtc2VjLXRpdGxlIj7nibnmlYjlvIDlhbM8L2Rpdj4KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuetieW+heacn+ecqeaZlSIsIuWWneS4i+WQjuetieW+heacn+eahOecqeaZleiEieWGsuaViOaenCIsdGhpcy5fdGdsKCJmeERpenp5Iiwi55yp5pmV6ISJ5YayIikpfQogICAgICAgICAgICAke3RoaXMuX3Jvdygi5aSx56We6buR55m9Iiwi5aSx56We5pe255S76Z2i6buR55m95bm25Y6L5pqX77yM5pqX6KeS5by65byx6ZqP54m55pWI5by65bqmIix0aGlzLl90Z2woImZ4QmxhbmsiLCLpu5Hnmb3nibnmlYgiKSl9CiAgICAgICAgICAgICR7dGhpcy5fcm93KCLmqKHns4rnibnmlYgiLCLnnKnmmZXjgIHmjpLlh7rkuI7lpLHnpZ7ml7bnmoTnlLvpnaLmqKHns4oiLHRoaXMuX3RnbCgiZnhCbHVyIiwi5qih57OK54m55pWIIikpfQogICAgICAgICAgICAke3RoaXMuX3Jvdygi5o6S5Ye66ZyH5YqoIiwi5o6S5Ye65Yqo55S75pyf6Ze055qE55S76Z2i6ZyH5YqoIix0aGlzLl90Z2woImZ4U2hha2UiLCLmjpLlh7rpnIfliqgiKSl9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuW8uuW6puS4juinhumHjjwvZGl2PgogICAgICAgICAgICAke3RoaXMuX3Jvdygi54m55pWI5by65bqmIiwi5pWw5a2X6LaK5aSn77yM55yp5pmV44CB5qih57OK44CB5pqX6KeS6LaK5by6Iix0aGlzLl9zZWwoImVmZmVjdExldmVsIixbWzEsIjEiXSxbMiwiMiJdLFszLCIzIl0sWzQsIjQiXSxbNSwiNSJdXSwi54m55pWI5by65bqmIDEg5YiwIDUiKSl9CiAgICAgICAgICAgICR7dGhpcy5fcm93KCLlpLHnpZ7op4bph44iLCLlpLHnpZ7ml7bnlLvpnaLmlbTkvZPlj5jmmpfnmoTnqIvluqbvvIzlhbPpl63liJnop4bph47kuI3lj5giLHRoaXMuX3NlbCgiYmxpbmRMZXZlbCIsW1swLCLml6AiXSxbMSwi6L275bqmIl0sWzIsIuS4reW6piJdLFszLCLph43luqYiXV0sIuWkseelnuinhumHjuaho+S9jSIpKX0KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuWHneiDtuWbvuWxgiIsIuWHneiDtueUu+WcqOesrOWHoOWxgu+8jOaVsOWtl+i2iuWkp+i2iumdoOS4iuWxgu+8jDI0IOWPiuS7peS4iuS4uumhtuWxgu+8iOS4jeiiq+mBruS9j++8iSIsdGhpcy5fbnVtKCJnZWxMYXllciIsMCw5OSwiMCDliLAgOTnvvIzpu5jorqQgMjQiKSl9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuS7luS6uuinhuinkjwvZGl2PgogICAgICAgICAgICAke3RoaXMuX3Jvdygi55yL5Yir5Lq65o6S5Ye65Yqo55S7Iiwi5piv5ZCm5pKt5pS+5LuW5Lq65o6S5Ye65pe255qE5Yqo55S7Iix0aGlzLl90Z2woInNlZVJlbW90ZUFuaW1zIiwi6L+c56iL5o6S5Ye65Yqo55S7IikpfQogICAgICAgICAgICAke3RoaXMuX3Jvdygi5YW25LuW546p5a626Z+z5pWIIiwi5piv5ZCm5pKt5pS+5YW25LuW546p5a625bm/5pKt55qE6Z+z5pWI77yI562J5b6FL+aOkuWHui/mlL7lm57vvInvvJvpu5jorqTlhbPpl60gPSDlj6rmnInoh6rlt7HlkKzlvpfliLAiLHRoaXMuX3RnbCgiaGVhclJlbW90ZVNvdW5kcyIsIuWFtuS7lueOqeWutumfs+aViCIpKX0KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuiuoeaXtuWZqOWPr+ingeaApyIsIuWktOmhtuWAkuiuoeaXtuiwgeiDveeci+WIsCIsdGhpcy5fc2VsKCJ0aW1lclZpc2liaWxpdHkiLFtbInNlbGYiLCLku4Xoh6rlt7EiXSxbIndoaXRlbGlzdCIsIuS7heeZveWQjeWNlSJdLFsib3RoZXJzIiwi5LuF5LuW5Lq6Il0sWyJhbGwiLCLmiYDmnInkuroiXV0sIuiuoeaXtuWZqOWPr+ingeaApyIpKX0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LW5vdGUiPuWHneiDtuWbuuWumuWcqOinkuiJsui6q+S9k+Wxgue7mOWItu+8jOS8muiiq+iho+acjemBruS9j++8m+eJueaViOS4juW8uuW6puWdh+S4uuacrOWcsOiuvue9ru+8jOS4jeS8mumAmui/h+i/nOeoi+S/ruaUueW8gOaUvue7meS7luS6uuOAgjwvZGl2PmB9LF9zZWNfcGVybSgpe2NvbnN0IGU9bCx0PVtbInRpbWUiLCLml7bpl7TnsbsiLCLmjpLlh7rliY3nrYnlvoXjgIHoh4Dpg6jpmLvmjKHkuIrpmZDjgIHoh6rliqjlm57lvZLliIbpkp8iXSxbImF1dG9SZXZlcnQiLCLlh53og7boh6rliqjlm57lvZIiLCLoh6rliqjlm57lvZLnmoTlvIDlhbMiXSxbInRpbWVyVmlzaWJpbGl0eSIsIuiuoeaXtuWZqOWPr+ingeaApyIsIuWktOmhtuWAkuiuoeaXtueahOWPr+ingeaho+S9jSJdXSxuPVtbIm9mZiIsIuS7heiHquW3sSJdLFsid2hpdGVsaXN0Iiwi55m95ZCN5Y2VIl0sWyJhbnkiLCLmiYDmnInkuroiXV07bGV0IHI9JzxkaXYgY2xhc3M9InBleC1ub3RlIj7mr4/nsbvorr7nva7lj6/ni6znq4vpgInmi6nog73lkKbooqvliKvkurrov5znqIvkv67mlLnvvIzpu5jorqTku4Xoh6rlt7HjgII8L2Rpdj4nO2Zvcihjb25zdFtpLG8sc11vZiB0KXtjb25zdCBhPWUuZWRpdE1vZGVzJiZlLmVkaXRNb2Rlc1tpXXx8Im9mZiI7cis9dGhpcy5fcm93KG8scyxuLm1hcCgoW2MsdV0pPT5gPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtdGdsICR7YT09PWM/Im9uIjoiIn0iIGRhdGEtcGV4LW1vZGU9IiR7aX0iIGRhdGEtcGV4LW12PSIke2N9IiB0aXRsZT0iJHtFKHMpfSI+JHt1fTwvYnV0dG9uPmApLmpvaW4oIiIpKX1yZXR1cm4gcis9YDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPueZveWQjeWNlTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5oiQ5ZGY5Y+36YCX5Y+35YiG6ZqU77yM5pSv5oyBICRvd25lcuOAgSRsb3ZlciDnrYnku6Plj7fvvJvov5znqIvkv67mlLnmnYPpmZDpgInnmb3lkI3ljZXml7bnlJ/mlYjjgII8L2Rpdj4KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJwZXgtdHh0IiBkYXRhLXBleC10ZXh0PSJ3aGl0ZWxpc3RUZXh0IiB0aXRsZT0i55m95ZCN5Y2V5oiQ5ZGY5Y+3IiBwbGFjZWhvbGRlcj0i5aaC77yaMTIzNDUsIDY3ODkwIj4ke0UoKGUud2hpdGVsaXN0fHxbXSkuam9pbigiLCAiKSl9PC90ZXh0YXJlYT5gLHJ9LF9zZWNfZXhwcigpe2NvbnN0IGU9bC5leHByZXNzaW9uc3x8e30sdD1BcnJheS5pc0FycmF5KGUud2FpdCk/ZS53YWl0OltdO2xldCBuPWA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjE4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydCI+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6MSI+YDtuKz1gPGRpdiBjbGFzcz0icGV4LXNlYy10aXRsZSI+562J5b6F6KGo5oOF5rGgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1ub3RlIj7mjpLlh7rliY3nrYnlvoXmnJ/pl7Tpmo/mnLrmir3lj5bmkq3mlL7vvIzkuI7nrYnlvoXpn7PmlYjlkIzmraXlh7rnjrDvvIjlkIzkuIDml7bpl7TngrnvvInvvJvlj6/oh6rooYzmt7vliqDmm7TlpJrnu4TvvIjmnIDlpJogMTAg57uE77yJ44CCPC9kaXY+YDtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyluKz1gPGRpdiBjbGFzcz0icGV4LXNlYy10aXRsZSI+562J5b6F6KGo5oOFICR7cisxfQogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtZXhwci1kZWwiIGRhdGEtcGV4LWRlbC1leHByPSIke3J9IiB0aXRsZT0i5Yig6Zmk6L+Z57uE562J5b6F6KGo5oOFIj7inJU8L2J1dHRvbj48L2Rpdj5gLG4rPXRoaXMuX2V4cHJSb3coYGV4cHJlc3Npb25zLndhaXQuJHtyfWApO3JldHVybiBuKz0nPGRpdiBjbGFzcz0icGV4LWJ0bi1yb3ciPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icGV4LWFjdCBvayIgZGF0YS1wZXgtYWRkLWV4cHI9IndhaXQiIHRpdGxlPSLmt7vliqDkuIDnu4TnrYnlvoXooajmg4XvvIjmnIDlpJogMTAg57uE77yJIj7vvIsg5paw5aKe562J5b6F6KGo5oOFPC9idXR0b24+PC9kaXY+JyxuKz1gPGRpdiBjbGFzcz0icGV4LXNlYy10aXRsZSI+5o6S5Ye66KGo5oOFPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1ub3RlIj7kuI7mjpLlh7rliqjnlLvlkIzml7bmkq3mlL7vvIjnrYnlvoXmnJ/ooajmg4XkuYvlpJbnmoTkuIvkuIDnu4TvvIk8L2Rpdj5gLG4rPXRoaXMuX2V4cHJSb3coImV4cHJlc3Npb25zLmV4Y3JldGUiKSxuKz1gPGRpdiBjbGFzcz0icGV4LXNlYy10aXRsZSI+5aSx56We5a6a5qC8PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1ub3RlIj7lh53og7bmjpLlh7rlkI7lrprmoLzvvIzmjIHnu63liLDmgaLlpI08L2Rpdj5gLG4rPXRoaXMuX2V4cHJSb3coImV4cHJlc3Npb25zLmJsYW5rIiksbis9YDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuaZrumAmuWHneiDtuihqOaDhTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5pmu6YCa5Yed6IO25o6S5Ye65ZCO55qE55+t5pqC6KGo5oOF5Y+Y5YyWPC9kaXY+YCxuKz10aGlzLl9leHByUm93KCJub3JtYWxFeHByZXNzaW9uIiksbis9YDwvZGl2PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDoyMDBweDt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpzdGlja3k7dG9wOjAiPgogICAgICAgICAgICAgICAgPGltZyBpZD0icGV4LWV4cHItcHJldmlldyIgYWx0PSIiIHN0eWxlPSJ3aWR0aDoxNzBweDtoZWlnaHQ6MTcwcHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjJweCBzb2xpZCAjZjI3YmE4O2JhY2tncm91bmQ6IzI0MWQzYTtvYmplY3QtZml0OmNvdmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1ub3RlIiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPuihqOaDhemihOiniDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj5gLG59LF9leHByUm93KGUpe2xldCB0PSIiO2Zvcihjb25zdFtuLHJdb2YgU2kpdCs9dGhpcy5fcm93KG4sbisiIOihqOaDhSIsdGhpcy5fc2VsKGUrIi4iK24scixuKyIg6KGo5oOFIikpO3JldHVybiB0fSxfZXhwclByZXZpZXdLZXk6bnVsbCxfZXhwckVkaXRLZXk6MCxfZW5zdXJlRXhwclByZXZpZXcoKXtjb25zdCBlPXRoaXMuX2V4cHJFZGl0S2V5PT09Im5vcm1hbCI/bC5ub3JtYWxFeHByZXNzaW9uOnR5cGVvZiB0aGlzLl9leHByRWRpdEtleT09Im51bWJlciI/bC5leHByZXNzaW9ucz8ud2FpdD8uW3RoaXMuX2V4cHJFZGl0S2V5XTpsLmV4cHJlc3Npb25zPy5bdGhpcy5fZXhwckVkaXRLZXldO2lmKCFlKXJldHVybjtjb25zdCB0PVN0cmluZyh0aGlzLl9leHByRWRpdEtleSkrIjoiK0pTT04uc3RyaW5naWZ5KGUpO2lmKHQ9PT10aGlzLl9leHByUHJldmlld0tleSlyZXR1cm47dGhpcy5fZXhwclByZXZpZXdLZXk9dDtjb25zdCBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwZXgtZXhwci1wcmV2aWV3Iik7aWYobil0cnl7aWYodHlwZW9mIFBsYXllcj4idSJ8fCFQbGF5ZXJ8fHR5cGVvZiBDaGFyYWN0ZXJMb2FkQ2FudmFzIT0iZnVuY3Rpb24iKXt0aGlzLl9mYWxsYmFja1ByZXZpZXcoZSxuKTtyZXR1cm59Y29uc3Qgcj10aGlzLl9leHBhbmRFeHByKGUpLGk9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihQbGF5ZXIpKSxQbGF5ZXIpO2kuTWVtYmVyTnVtYmVyPS03Nzc3NyxpLkFwcGVhcmFuY2U9KFBsYXllci5BcHBlYXJhbmNlfHxbXSkubWFwKHM9Pntjb25zdCBhPXMuQXNzZXQuR3JvdXAuTmFtZTtpZihyW2FdPT09dm9pZCAwKXJldHVybiBzO2NvbnN0IGM9T2JqZWN0LmFzc2lnbih7fSxzKTtyZXR1cm4gYy5Qcm9wZXJ0eT1PYmplY3QuYXNzaWduKHt9LHMuUHJvcGVydHkpLGMuUHJvcGVydHkuRXhwcmVzc2lvbj1yW2FdLGN9KSxpLkNhbnZhcz1udWxsLGkuQ2FudmFzQmxpbms9bnVsbCxpLk11c3REcmF3PSEwO3RyeXtDaGFyYWN0ZXJMb2FkQ2FudmFzKGkpfWNhdGNoe31jb25zdCBvPSgpPT57dHJ5e2NvbnN0IHM9aS5DYW52YXM7cyYmcy53aWR0aCYmdGhpcy5fY2FwdHVyZUZhY2UocyxuKX1jYXRjaHt9fTtvKCksc2V0VGltZW91dChvLDE2MCksc2V0VGltZW91dChvLDQyMCksc2V0VGltZW91dCgoKT0+eyghbi5zcmN8fCFuLnNyYy5zdGFydHNXaXRoKCJkYXRhOiIpKSYmdGhpcy5fZmFsbGJhY2tQcmV2aWV3KGUsbil9LDFlMyl9Y2F0Y2h7dGhpcy5fZmFsbGJhY2tQcmV2aWV3KGUsbil9fSxfZmFsbGJhY2tQcmV2aWV3KGUsdCl7dHJ5e2lmKHR5cGVvZiBQbGF5ZXI+InUifHwhUGxheWVyPy5BcHBlYXJhbmNlfHx0eXBlb2YgQ2hhcmFjdGVyUmVmcmVzaCE9ImZ1bmN0aW9uIilyZXR1cm47Y29uc3Qgbj10aGlzLl9leHBhbmRFeHByKGUpLHI9e30saT1bXTtmb3IoY29uc3RbbyxzXW9mIE9iamVjdC5lbnRyaWVzKG4pKXRyeXtpZihzPT1udWxsKWNvbnRpbnVlO2NvbnN0IGE9UGxheWVyLkFwcGVhcmFuY2UuZmluZChjPT5jLkFzc2V0Lkdyb3VwLk5hbWU9PT1vKTtpZighYSljb250aW51ZTtyW29dPWEuUHJvcGVydHk/LkV4cHJlc3Npb24/P251bGwsYS5Qcm9wZXJ0eXx8KGEuUHJvcGVydHk9e30pLGEuUHJvcGVydHkuRXhwcmVzc2lvbj1zLGkucHVzaChvKX1jYXRjaHt9aWYoIWkubGVuZ3RoKXJldHVybjt0cnl7Q2hhcmFjdGVyUmVmcmVzaChQbGF5ZXIsITEsITEpfWNhdGNoe31zZXRUaW1lb3V0KCgpPT57dHJ5e1BsYXllcj8uQ2FudmFzPy53aWR0aCYmdGhpcy5fY2FwdHVyZUZhY2UoUGxheWVyLkNhbnZhcyx0KX1jYXRjaHt9dHJ5e2Zvcihjb25zdFtvLHNdb2YgT2JqZWN0LmVudHJpZXMocikpe2NvbnN0IGE9UGxheWVyLkFwcGVhcmFuY2UuZmluZChjPT5jLkFzc2V0Lkdyb3VwLk5hbWU9PT1vKTthJiYoYS5Qcm9wZXJ0eXx8KGEuUHJvcGVydHk9e30pLGEuUHJvcGVydHkuRXhwcmVzc2lvbj1zKX1DaGFyYWN0ZXJSZWZyZXNoKFBsYXllciwhMSwhMSl9Y2F0Y2h7fX0sMzAwKX1jYXRjaHt9fSxfY2FwdHVyZUZhY2UoZSx0KXt0cnl7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyLndpZHRoPXIuaGVpZ2h0PTMyMDtjb25zdCBpPXIuZ2V0Q29udGV4dCgiMmQiKSxvPWUud2lkdGgqLjIscz1lLndpZHRoKi41LW8vMixhPWUuaGVpZ2h0Ki40My1vKi4yMjtpLmRyYXdJbWFnZShlLHMsYSxvLG8sMCwwLDMyMCwzMjApO2NvbnN0IGM9bmV3IEltYWdlO2Mub25sb2FkPSgpPT57dHJ5e3Quc3JjPWMuc3JjfWNhdGNoe319LGMuc3JjPXIudG9EYXRhVVJMKCl9Y2F0Y2h7fX0sX2V4cGFuZEV4cHIoZSl7Y29uc3QgdD1lLkV5ZXM/P251bGwsbj1lLkV5ZXMyIT09dm9pZCAwP2UuRXllczI6dDtyZXR1cm57RXllYnJvd3M6ZS5FeWVicm93cz8/bnVsbCxFeWVzOnQsRXllczI6bixNb3V0aDplLk1vdXRoPz9udWxsLEJsdXNoOmUuQmx1c2g/P251bGws5Y+z55y8X0x1emk6dCzlt6bnnLxfTHV6aTpufX0sX3NlY19zb3VuZCgpe2NvbnN0IGU9bC5zb3VuZHN8fHt3YWl0OltdLGV4Y3JldGU6W10sZmVlZDpbXX0sdD1bWyJ3YWl0Iiwi562J5b6F6Z+z5pWIIiwi5o6S5Ye65YmN562J5b6F5pyf6Ze05YiG5q615pKt5pS+77yM5LiO562J5b6F6KGo5oOF5ZCM5q2l5Ye6546w77yaMTAg56eSIDEg5q6144CBMjAg56eSIDIg5q6144CBMzAg56eSIDMg5q6144CBNDAg56eSIDQg5q6144CBNTAg56eS5Y+K5Lul5LiKIDUg5q6177yM5Z2H5YyA5YiG5biD6ZqP5py66YCJ5q6177yb5YaF572uIDUg5q6177yIQ0RO77yJ77yM6Ieq5a6a5LmJ5Zyw5Z2A5Yqg5YWl6ZqP5py65rGgIl0sWyJleGNyZXRlIiwi5o6S5Ye66Z+z5pWIIiwi5o6S5Ye65Yqo55S75pyf6Ze05pKt5pS+77yb5Yqo55S76ZW/5bqm6Ieq5Yqo5a+56b2Q6Z+z5pWI5pe26ZW/77yI6buY6K6kIDcuMzQg56eS77yJIl0sWyJmZWVkIiwi5pS+5Zue6Z+z5pWIIiwi6KKr5ZaC5Zue44CB6buR55m954m55pWI5reh5Ye657uT5p2f5ZCO5pKt5pS+77yI6buY6K6kIDMuOTYg56eS77yJIl1dO2xldCBuPSc8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5q+P57G76Z+z5pWI5pyJ54us56uL5byA5YWz77yI5YWzID0g5pys5Zyw5LiN5pKt77yM5Lmf5LiN5bm/5pKt57uZ5Yir5Lq677yJ77yb57Sg5p2Q5q+P6KGM5LiA5Liq5Zyw5Z2A77yM55WZ56m655So5YaF572u6buY6K6k44CCPC9kaXY+Jztmb3IoY29uc3RbcixpLG9db2YgdCl7Y29uc3Qgcz1BcnJheS5pc0FycmF5KGVbcl0pP2Vbcl06W107bis9YDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPiR7aX3jgIAke3RoaXMuX3RnbCgic291bmRPbi4iK3IsaSsi5byA5YWzIil9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+JHtvfTwvZGl2PgogICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJwZXgtdHh0IiBkYXRhLXBleC1zb3VuZD0iJHtyfSIgdGl0bGU9IiR7RShvKX0iIHBsYWNlaG9sZGVyPSJodHRwczovL+KApiI+JHtFKHMuam9pbihgCmApKX08L3RleHRhcmVhPmB9cmV0dXJuIG59LF9zZWNfYWJvdXQoKXtyZXR1cm5gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1oZWFkIj7njqnms5Xor7TmmI48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWxpbmUiPjEuIOWItuS9nOS4gOeTtumlruaWme+8jOWcqOWItuS9nOWQjeaIlumbleWIu+aPj+i/sOmHjOWGmeS4iuinpuWPkeWFs+mUruivjeOAgjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtbGluZSI+Mi4g5Zad5LiL5oiW5rOo5bCE5ZCO6L+b5YWl5o6S5Ye6562J5b6F77ya55yp5pmV6ISJ5Yay77yM5YmN5Lik5Liq6KGo5oOF5Zyo5LiJ5YiG5LmL5LiA5ZKM5LiJ5YiG5LmL5LqM5aSE5pKt5pS+44CCPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1saW5lIj4zLiDliLDmjpLlh7rml7bliLvmo4Dmn6Xoh4Dpg6joo4XlpIfkvY3vvJrnqbrliJnmjpLlh7rvvIzmnInkuJzopb/kvJrnrYnlvoXvvIzmi7/mjonnq4vliLvmjpLlh7rjgII8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWxpbmUiPjQuIOaOkuWHuuaXtuesrOS4ieS4quihqOaDheS4juWKqOeUu+WQjOaSre+8jOeUu+mdouWJp+eDiOmch+WKqOW5tuaooeeziuOAgjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtbGluZSI+NS4g5Lq65qC85Yed6IO25o6S5Ye65ZCO5aSx56We77ya6buR55m944CB5LiN6IO95Yqo44CB56aB6KiA44CB5LiN55yo55y844CB6KeG6YeO5Y+Y5pqX77yM5Yed6IO26JC95Zyo6ISa6L6544CCPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1saW5lIj42LiDngrnlh7vlpLHnpZ7ogIXvvIzlnKjlr7nor53moYbkuK3mjaHotbflh53og7bvvIzkuqTov5jljp/kuLvkurrlloLlm57ljbPmgaLlpI3vvJvliLDmnJ/mjInorr7nva7mtojmlaPmiJblj5jml6DmlYjlh53og7bjgII8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWxpbmUiPjcuIOaZrumAmuWHneiDtuaOkuWHuuWQjuayoeacieWkseelnumZkOWItu+8jOWHneiDtuWQjOagt+WPr+S7peaNoei1t+WSjOWWguWbnuOAgjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtbGluZSI+OC4g5a6J5YWo77ya6ZqP5pe25L2/55So5Z+65pys6K6+572u5Lit55qE5by65Yi25oGi5aSN77yM5oiW6L6T5YWlIC9wZXggcmVzZXQgeWVz44CCPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1oZWFkIj7mjIfku6Q8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWxpbmUiPi9wZXggaGVscCDluK7liqnjgIAvcGV4IGhvd3RvIOeOqeazleivtOaYjuOAgC9wZXggc3RhdHVzIOW9k+WJjeeKtuaAgTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtbGluZSI+L3BleCBzaG93IOaOp+WItuWPsOmdouadv+OAgC9wZXggc2V0dGluZ3Mg5omT5byA6K6+572u44CAL3BleCByZXNldCDlvLrliLbmgaLlpI08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWhlYWQiPueJiOacrDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWxpbmUiPlBlcnNvbmFsaXR5IEV4Y3JldGlvbiB2JHtOfTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtaGVhZCI+6LCD6K+VPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1saW5lIj7mjIkgRjEyIOaJk+W8gOa1j+iniOWZqOaOp+WItuWPsO+8jOaKiiDimpfvuI9bUEVYXSDlvIDlpLTnmoTmiqXplJnkv6Hmga/lj5Hnu5nkvZzogIXjgII8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWhlYWQiPuaVsOaNrjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYnRuLXJvdyI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InBleC1hY3QiIGRhdGEtcGV4LWFjdGlvbj0iZXhwb3J0Q2ZnIj7lr7zlh7rorr7nva48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icGV4LWFjdCIgZGF0YS1wZXgtYWN0aW9uPSJpbXBvcnRDZmciPuWvvOWFpeiuvue9rjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtYWN0IGRhbmdlciIgZGF0YS1wZXgtYWN0aW9uPSJyZXNldCI+5oGi5aSN6buY6K6kPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtaGVhZCI+6Z+z5pWI57Sg5p2QPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1saW5lIj7pu5jorqTpn7PmlYjntKDmnZDmnaXoh6ogcGluY3JlZS5qcCDnmoTlhY3otLnotYTmupDvvIhGcmVlIEFzc2V0c++8ieOAgjwvZGl2PmB9fTtmdW5jdGlvbiBQaSgpe2NvbnN0IGU9KCk9Pnt0cnl7cmV0dXJuIHR5cGVvZiBQcmVmZXJlbmNlUmVnaXN0ZXJFeHRlbnNpb25TZXR0aW5nIT0iZnVuY3Rpb24iPyExOihQcmVmZXJlbmNlUmVnaXN0ZXJFeHRlbnNpb25TZXR0aW5nKHtJZGVudGlmaWVyOmd0LEJ1dHRvblRleHQ6IuS6uuagvOaOkuazhCBQRVgiLGxvYWQ6KCk9PlYubG9hZCgpLHJ1bjooKT0+Vi5ydW4oKSxjbGljazooKT0+Vi5jbGljaygpLHVubG9hZDooKT0+Vi51bmxvYWQoKSxleGl0OigpPT5WLmV4aXQoKX0pLCEwKX1jYXRjaChyKXtyZXR1cm4gcCgi6K6+572u6aG15rOo5YaM5aSx6LSlOiIsci5tZXNzYWdlKSwhMX19O2lmKGUoKSlyZXR1cm47bGV0IHQ9MDtjb25zdCBuPXNldEludGVydmFsKCgpPT57dCsrLChlKCl8fHQ+MzApJiZjbGVhckludGVydmFsKG4pfSwxZTMpfWZ1bmN0aW9uIFJuKGUpe3RyeXtyZXR1cm4gZT8uT25saW5lU2hhcmVkU2V0dGluZ3M/LlsiUEVYIl0/LnN0YXRlfHxudWxsfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBNaShlKXt0cnl7Y29uc3QgdD1SbihlKTtpZighdHx8IXQucmVtYWluaW5nU2VjfHx0LnJlbWFpbmluZ1NlYzw9MHx8dC5tb2RlIT09IndhaXRpbmciJiZ0Lm1vZGUhPT0iYmxvY2tlZCImJnQubW9kZSE9PSJibGFuayIpcmV0dXJuITE7Y29uc3Qgbj1lPy5NZW1iZXJOdW1iZXIhPW51bGwmJlBsYXllcj8uTWVtYmVyTnVtYmVyIT1udWxsJiZlLk1lbWJlck51bWJlcj09PVBsYXllci5NZW1iZXJOdW1iZXIscj10LnRpbWVyVmlzaWJpbGl0eXx8bC50aW1lclZpc2liaWxpdHl8fCJhbGwiO2lmKHI9PT0iYWxsInx8cj09PSJib3RoIilyZXR1cm4hMDtpZihyPT09InNlbGYiKXJldHVybiBuO2lmKHI9PT0ib3RoZXJzIilyZXR1cm4hbjtpZihyPT09IndoaXRlbGlzdCIpe2lmKG4pcmV0dXJuITA7Y29uc3QgaT1lPy5PbmxpbmVTaGFyZWRTZXR0aW5ncz8uWyJQRVgiXT8ud2x8fFtdLG89UGxheWVyPy5NZW1iZXJOdW1iZXI7cmV0dXJuIGkuaW5jbHVkZXMoU3RyaW5nKG8pKX1yZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gQWkoZSl7Y29uc3QgdD1NYXRoLm1heCgwLE1hdGguY2VpbChlKSksbj1NYXRoLmZsb29yKHQvNjApO3JldHVybiBTdHJpbmcobikucGFkU3RhcnQoMiwiMCIpKyI6IitTdHJpbmcodCU2MCkucGFkU3RhcnQoMiwiMCIpfWZ1bmN0aW9uIF9pKGUsdCxuLHIsaSl7Y29uc3Qgbz1yfHwxLHM9dCsxMDAqbyxhPW4rOTUqbztsZXQgYztpLmV4cGlyZXNBdD4wP2M9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGkuZXhwaXJlc0F0LURhdGUubm93KCkpLzFlMykpOmM9TWF0aC5tYXgoMCxpLnJlbWFpbmluZ1NlY3x8MCk7Y29uc3QgdT1BaShjKTtsZXQgZD1udWxsO2NvbnN0IGg9dHlwZW9mIE1haW5DYW52YXM8InUiP01haW5DYW52YXM6bnVsbDtpZihoKXRyeXtkPWguZm9udCxoLmZvbnQ9IjYwMCAiK01hdGgubWF4KDEyLE1hdGgucm91bmQoMTUqbykpKydweCAiU2Vnb2UgVUkiLCBBcmlhbCwgc2Fucy1zZXJpZid9Y2F0Y2h7fWlmKERyYXdUZXh0KHUscysxLGErMSwiQmxhY2siLCIiKSxEcmF3VGV4dCh1LHMsYSwiI2ZmZmZmZiIsIiIpLGgmJmQhPW51bGwpdHJ5e2guZm9udD1kfWNhdGNoe319ZnVuY3Rpb24gTmkoKXtjb25zdCBlPVUoKTtpZihlKXRyeXtlLmhvb2tGdW5jdGlvbigiQ2hhdFJvb21DaGFyYWN0ZXJWaWV3RHJhd092ZXJsYXkiLDEsKHQsbik9Pntjb25zdCByPW4odCk7dHJ5e2lmKHR5cGVvZiBDaGF0Um9vbUhpZGVJY29uU3RhdGU8InUiJiZDaGF0Um9vbUhpZGVJY29uU3RhdGU+PTIpcmV0dXJuIHI7Y29uc3RbaSxvLHMsYV09dDtpZighaXx8IU1pKGkpKXJldHVybiByO2NvbnN0IGM9Um4oaSk7X2koaSxvLHMsYSxjKX1jYXRjaHt9cmV0dXJuIHJ9KX1jYXRjaCh0KXtjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIOiuoeaXtuWZqOaMgumSqeWksei0pToiLHQubWVzc2FnZSl9fWNvbnN0IEw9e3g6MTcxNSx5OjE3NSx3OjkwLGg6OTB9LHZlPSJwZXgtcmVtb3RlLXBhbmVsIixEbj1be2tleToidGltZSIsbGFiZWw6IuaXtumXtOexuyJ9LHtrZXk6ImF1dG9SZXZlcnQiLGxhYmVsOiLlh53og7boh6rliqjlm57lvZIifSx7a2V5OiJ0aW1lclZpc2liaWxpdHkiLGxhYmVsOiLorqHml7blmajlj6/op4HmgKcifV07ZnVuY3Rpb24gdHQoZSx0KXtyZXR1cm4gdD09PSJhbnkiPyEwOnQ9PT0id2hpdGVsaXN0Ij8oQXJyYXkuaXNBcnJheShlPy53bCk/ZS53bC5tYXAoTnVtYmVyKTpbXSkuaW5jbHVkZXMoTnVtYmVyKFBsYXllcj8uTWVtYmVyTnVtYmVyKSk6ITF9ZnVuY3Rpb24gTG4oZSl7Y29uc3QgdD1lPy5lZGl0TW9kZXN8fHt9O3JldHVybnt0aW1lOnR0KGUsdC50aW1lKSxhdXRvUmV2ZXJ0OnR0KGUsdC5hdXRvUmV2ZXJ0KSx0aW1lclZpc2liaWxpdHk6dHQoZSx0LnRpbWVyVmlzaWJpbGl0eSl9fWZ1bmN0aW9uIGtpKGUpe3JldHVybiEhKGUmJihlLnRpbWV8fGUuYXV0b1JldmVydHx8ZS50aW1lclZpc2liaWxpdHkpKX1jb25zdCBXPXt9LGhlPXt9LEx0PTZlNCxJaT04ZTM7ZnVuY3Rpb24gT24oZSl7Y29uc3QgdD1OdW1iZXIoZSksbj1EYXRlLm5vdygpLHI9V1t0XTtyJiZuLXIudHM8THR8fGhlW3RdJiZuLWhlW3RdPElpfHwoaGVbdF09bixQKCJQRVhfUGVybVF1ZXJ5Iixbe1RhZzoiUEVYX1Blcm1RdWVyeSIsVGFyZ2V0OnR9XSkpfWZ1bmN0aW9uIFRpKGUsdCl7Y29uc3Qgbj1XW2U/Lk1lbWJlck51bWJlcl07cmV0dXJuIG4mJkRhdGUubm93KCktbi50czxMdD9uOntwZXJtczpMbih0KSx2YWx1ZXM6bnVsbCx0czpEYXRlLm5vdygpfX1mdW5jdGlvbiB5dChlKXt0cnl7cmV0dXJuIGU/Lk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdfHxudWxsfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBybigpe3RyeXtyZXR1cm4gdHlwZW9mIEluZm9ybWF0aW9uU2hlZXRTZWxlY3Rpb248InUiP0luZm9ybWF0aW9uU2hlZXRTZWxlY3Rpb246bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19Y29uc3QgeT17b3BlbjohMSx0YXJnZXQ6bnVsbCxwZXJtczp7fSx2YWx1ZXM6e30sZGlydHk6ITF9O2Z1bmN0aW9uIENpKCl7bGV0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodmUpO2V8fChlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuaWQ9dmUsT2JqZWN0LmFzc2lnbihlLnN0eWxlLHtwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjUwJSIsdG9wOiI1MCUiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsLTUwJSkiLHdpZHRoOiIzODBweCIsYmFja2dyb3VuZDoiIzFlMTkzMCIsYm9yZGVyOiIycHggc29saWQgI2YyN2JhOCIsYm9yZGVyUmFkaXVzOiIxMnB4Iixjb2xvcjoiI2U4ZTRmNSIsZm9udEZhbWlseToic2Fucy1zZXJpZiIsZm9udFNpemU6IjEzcHgiLHBhZGRpbmc6IjE2cHgiLHpJbmRleDoiMjE0NzQ4MzY0NiIsYm94U2hhZG93OiIwIDhweCA0MHB4IHJnYmEoMCwwLDAsLjYpIixtYXhIZWlnaHQ6IjgwdmgiLG92ZXJmbG93WToiYXV0byJ9KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpKSxlLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix5Lm9wZW49ITAsJG4oZSl9ZnVuY3Rpb24gaHQoKXtjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZlKTtlJiYoZS5zdHlsZS5kaXNwbGF5PSJub25lIikseS5vcGVuPSExfWZ1bmN0aW9uIEFlKGUpe3JldHVybiBTdHJpbmcoZT8/IiIpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8iL2csIiZxdW90OyIpfWZ1bmN0aW9uICRuKGUpe2NvbnN0IHQ9eS50YXJnZXQmJm5lKHkudGFyZ2V0KXx8IuWvueaWuSI7bGV0IG49YDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxMHB4Ij4KICAgICAgICA8YiBzdHlsZT0iY29sb3I6I2YyN2JhOCI+57yW6L6RICR7QWUodCl9IOeahCBQRVgg6K6+572uPC9iPgogICAgICAgIDxidXR0b24gaWQ9InBleC1yZW1vdGUtY2xvc2UiIHN0eWxlPSJiYWNrZ3JvdW5kOiMzYTJhNGE7Y29sb3I6I2U4ZTRmNTtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjRweCAxMHB4O2N1cnNvcjpwb2ludGVyIj7inJU8L2J1dHRvbj4KICAgIDwvZGl2PmA7Y29uc3Qgcj0ocyxhLGMpPT57Y29uc3QgdT0hIXkucGVybXNbc107bis9YDxkaXYgc3R5bGU9Im1hcmdpbjo4cHggMDtvcGFjaXR5OiR7dT8xOi40NX0iPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjojOWI5M2JkO21hcmdpbi1ib3R0b206NHB4Ij4ke2F9JHt1PyIiOiIg8J+UkiJ9PC9kaXY+JHtjfTwvZGl2PmB9O3IoInRpbWUiLCLmjpLlh7rliY3nrYnlvoXvvIjnp5LvvIwwfjYwMO+8iSIsYDxpbnB1dCBpZD0icGV4LXItd2FpdCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNjAwIiB2YWx1ZT0iJHtBZSh5LnZhbHVlcy53YWl0U2Vjb25kcyl9IiAke3kucGVybXMudGltZT8iIjoiZGlzYWJsZWQifQogICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMyNDFkM2E7Y29sb3I6I2U4ZTRmNTtib3JkZXI6MXB4IHNvbGlkICMzNzMwNWE7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo2cHgiPmApLHIoInRpbWUiLCLpmLvmjKHnrYnlvoXkuIrpmZDvvIjliIbpkp/vvIwxfjMw77yJIixgPGlucHV0IGlkPSJwZXgtci1ibG9ja2VkIiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgbWF4PSIzMCIgdmFsdWU9IiR7QWUoeS52YWx1ZXMuYmxvY2tlZFdhaXRNaW51dGVzKX0iICR7eS5wZXJtcy50aW1lPyIiOiJkaXNhYmxlZCJ9CiAgICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO2JhY2tncm91bmQ6IzI0MWQzYTtjb2xvcjojZThlNGY1O2JvcmRlcjoxcHggc29saWQgIzM3MzA1YTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjZweCI+YCkscigidGltZSIsIuWHneiDtuiHquWKqOWbnuW9ku+8iOWIhumSn++8jDF+MzDvvIkiLGA8aW5wdXQgaWQ9InBleC1yLWF1dG9yZXYiIHR5cGU9Im51bWJlciIgbWluPSIxIiBtYXg9IjMwIiB2YWx1ZT0iJHtBZSh5LnZhbHVlcy5hdXRvUmV2ZXJ0TWludXRlcyl9IiAke3kucGVybXMudGltZT8iIjoiZGlzYWJsZWQifQogICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMyNDFkM2E7Y29sb3I6I2U4ZTRmNTtib3JkZXI6MXB4IHNvbGlkICMzNzMwNWE7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo2cHgiPmApLHIoInRpbWVyVmlzaWJpbGl0eSIsIuiuoeaXtuWZqOWPr+ingeaApyIsYDxzZWxlY3QgaWQ9InBleC1yLXZpcyIgJHt5LnBlcm1zLnRpbWVyVmlzaWJpbGl0eT8iIjoiZGlzYWJsZWQifQogICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMyYTZiNjM7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICMzNzMwNWE7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo2cHgiPgogICAgICAgICA8b3B0aW9uIHZhbHVlPSJzZWxmIiAke3kudmFsdWVzLnRpbWVyVmlzaWJpbGl0eT09PSJzZWxmIj8ic2VsZWN0ZWQiOiIifT7ku4Xoh6rlt7E8L29wdGlvbj4KICAgICAgICAgPG9wdGlvbiB2YWx1ZT0id2hpdGVsaXN0IiAke3kudmFsdWVzLnRpbWVyVmlzaWJpbGl0eT09PSJ3aGl0ZWxpc3QiPyJzZWxlY3RlZCI6IiJ9PuS7heeZveWQjeWNlTwvb3B0aW9uPgogICAgICAgICA8b3B0aW9uIHZhbHVlPSJvdGhlcnMiICR7eS52YWx1ZXMudGltZXJWaXNpYmlsaXR5PT09Im90aGVycyI/InNlbGVjdGVkIjoiIn0+5LuF5LuW5Lq6PC9vcHRpb24+CiAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFsbCIgJHsoeS52YWx1ZXMudGltZXJWaXNpYmlsaXR5fHwiYWxsIik9PT0iYWxsIj8ic2VsZWN0ZWQiOiIifT7miYDmnInkuro8L29wdGlvbj48L3NlbGVjdD5gKSxyKCJhdXRvUmV2ZXJ0Iiwi6Ieq5Yqo5Zue5b2S5byA5YWzIixgPHNlbGVjdCBpZD0icGV4LXItYXIiICR7eS5wZXJtcy5hdXRvUmV2ZXJ0PyIiOiJkaXNhYmxlZCJ9CiAgICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO2JhY2tncm91bmQ6IzJhNmI2Mztjb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgIzM3MzA1YTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjZweCI+CiAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiICR7eS52YWx1ZXMuYXV0b1JldmVydEVuYWJsZWQ/InNlbGVjdGVkIjoiIn0+5byA5ZCvPC9vcHRpb24+CiAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiICR7eS52YWx1ZXMuYXV0b1JldmVydEVuYWJsZWQ/IiI6InNlbGVjdGVkIn0+5YWz6ZetPC9vcHRpb24+PC9zZWxlY3Q+YCk7Y29uc3QgaT1PYmplY3QudmFsdWVzKHkucGVybXMpLnNvbWUoQm9vbGVhbik7bis9YDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6MTRweCI+CiAgICAgICAgPGJ1dHRvbiBpZD0icGV4LXJlbW90ZS1zYXZlIiBzdHlsZT0iZmxleDoxO2JhY2tncm91bmQ6JHtpPyIjMmE2YjYzIjoiIzNhMmE0YSJ9O2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzo4cHg7Y3Vyc29yOiR7aT8icG9pbnRlciI6Im5vdC1hbGxvd2VkIn0iICR7aT8iIjoiZGlzYWJsZWQifT7kv53lrZg8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGlkPSJwZXgtcmVtb3RlLXJlZnJlc2giIHN0eWxlPSJmbGV4OjE7YmFja2dyb3VuZDojM2EyYTRhO2NvbG9yOiNlOGU0ZjU7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzo4cHg7Y3Vyc29yOnBvaW50ZXIiPuWIt+aWsDwvYnV0dG9uPgogICAgPC9kaXY+YCxuKz0nPGRpdiBzdHlsZT0iY29sb3I6IzliOTNiZDtmb250LXNpemU6MTFweDttYXJnaW4tdG9wOjhweCI+5LuF5Y+v57yW6L6R5pyJ5p2D6ZmQ55qE57G75Yir77yI8J+Ukj3ml6DmnYPpmZDvvIk8L2Rpdj4nLGUuaW5uZXJIVE1MPW4sZS5xdWVyeVNlbGVjdG9yKCIjcGV4LXJlbW90ZS1jbG9zZSIpLm9uY2xpY2s9KCk9Pmh0KCksZS5xdWVyeVNlbGVjdG9yKCIjcGV4LXJlbW90ZS1yZWZyZXNoIikub25jbGljaz0oKT0+e2lmKCF5LnRhcmdldClyZXR1cm47Y29uc3Qgcz1OdW1iZXIoeS50YXJnZXQuTWVtYmVyTnVtYmVyKTtkZWxldGUgV1tzXSxkZWxldGUgaGVbc10sT24ocyksdigi5q2j5Zyo5Yi35paw5p2D6ZmQ5LiO6K6+572u4oCmIiwzZTMpfTtjb25zdCBvPWUucXVlcnlTZWxlY3RvcigiI3BleC1yZW1vdGUtc2F2ZSIpO28mJihvLm9uY2xpY2s9KCk9PkRpKCkpfWNvbnN0IG50PXt9O2xldCBPPW51bGwsSD1udWxsO2Z1bmN0aW9uIFJpKGUpe2NvbnN0IHQ9TnVtYmVyKGU/Lk1lbWJlck51bWJlcik7aWYodD09bnVsbClyZXR1cm47Y29uc3Qgbj1XW3RdO2lmKG4mJkRhdGUubm93KCktbi50czxMdCl7Qm4oZSk7cmV0dXJufU89e251bTp0LEM6ZX0saGVbdF09RGF0ZS5ub3coKSxQKCJQRVhfUGVybVF1ZXJ5Iixbe1RhZzoiUEVYX1Blcm1RdWVyeSIsVGFyZ2V0OnR9XSx7cHJpb3JpdHk6ITB9KTtjb25zdCByPW5lKGUpfHxTdHJpbmcodCk7dih4KCJyZW1vdGVFZGl0TG9hZGluZyIse25hbWU6cn0pLDRlMyksSCYmY2xlYXJUaW1lb3V0KEgpLEg9c2V0VGltZW91dCgoKT0+e0g9bnVsbCxPJiZPLm51bT09PXQmJihPPW51bGwsdih4KCJyZW1vdGVFZGl0TG9hZEZhaWwiLHtuYW1lOnJ9KSw4ZTMpKX0sNmUzKX1mdW5jdGlvbiBCbihlKXtjb25zdCB0PWUuTWVtYmVyTnVtYmVyLG49RGF0ZS5ub3coKTt0IT1udWxsJiYoIW50W3RdfHxuLW50W3RdPjE1ZTMpJiYobnRbdF09bixQKCJQRVhfQWNjZXNzIixbe1RhZzoiUEVYX0FjY2VzcyIsVGFyZ2V0OnQsTmFtZTpTdHJpbmcobmUoUGxheWVyKXx8UGxheWVyPy5NZW1iZXJOdW1iZXJ8fCIiKX1dLHtkZWR1cGVLZXk6ImFjY2VzczoiK3QsZGVkdXBlTXM6MTVlM30pKSx5LnRhcmdldD1lO2NvbnN0IHI9V1t0XTt5LnBlcm1zPXI/ci5wZXJtczpMbih5dChlKSkseS52YWx1ZXM9ciYmci52YWx1ZXM/ci52YWx1ZXM6e30sQ2koKX1mdW5jdGlvbiBEaSgpe2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodmUpO2lmKCFlfHwheS50YXJnZXQpcmV0dXJuO2NvbnN0IHQ9aT0+e3RyeXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKGkpPy52YWx1ZX1jYXRjaHtyZXR1cm59fSxuPXt3YWl0U2Vjb25kczp0KCIjcGV4LXItd2FpdCIpIT09dm9pZCAwP3BhcnNlSW50KHQoIiNwZXgtci13YWl0IiksMTApOnZvaWQgMCxibG9ja2VkV2FpdE1pbnV0ZXM6dCgiI3BleC1yLWJsb2NrZWQiKSE9PXZvaWQgMD9wYXJzZUludCh0KCIjcGV4LXItYmxvY2tlZCIpLDEwKTp2b2lkIDAsYXV0b1JldmVydE1pbnV0ZXM6dCgiI3BleC1yLWF1dG9yZXYiKSE9PXZvaWQgMD9wYXJzZUludCh0KCIjcGV4LXItYXV0b3JldiIpLDEwKTp2b2lkIDAsdGltZXJWaXNpYmlsaXR5OnQoIiNwZXgtci12aXMiKSxhdXRvUmV2ZXJ0RW5hYmxlZDp0KCIjcGV4LXItYXIiKT09PSIxIn0scj17fTtmb3IoY29uc3QgaSBvZiBEbil5LnBlcm1zW2kua2V5XSYmKGkua2V5PT09InRpbWUiPyhuLndhaXRTZWNvbmRzIT1udWxsJiYoci53YWl0U2Vjb25kcz10ZShuLndhaXRTZWNvbmRzLDAsNjAwKSksbi5ibG9ja2VkV2FpdE1pbnV0ZXMhPW51bGwmJihyLmJsb2NrZWRXYWl0TWludXRlcz10ZShuLmJsb2NrZWRXYWl0TWludXRlcywxLDMwKSksbi5hdXRvUmV2ZXJ0TWludXRlcyE9bnVsbCYmKHIuYXV0b1JldmVydE1pbnV0ZXM9dGUobi5hdXRvUmV2ZXJ0TWludXRlcywxLDMwKSkpOmkua2V5PT09InRpbWVyVmlzaWJpbGl0eSI/WyJzZWxmIiwid2hpdGVsaXN0Iiwib3RoZXJzIiwiYWxsIl0uaW5jbHVkZXMobi50aW1lclZpc2liaWxpdHkpJiYoci50aW1lclZpc2liaWxpdHk9bi50aW1lclZpc2liaWxpdHkpOmkua2V5PT09ImF1dG9SZXZlcnQiJiYoci5hdXRvUmV2ZXJ0RW5hYmxlZD0hIW4uYXV0b1JldmVydEVuYWJsZWQpKTtPYmplY3Qua2V5cyhyKS5sZW5ndGghPT0wJiYoUCgiUEVYX1JlbW90ZVNldCIsW3tUYWc6IlBFWF9SZW1vdGVTZXQiLFRhcmdldDpTdHJpbmcoeS50YXJnZXQ/Lk1lbWJlck51bWJlciksVmFsdWVzOnJ9XSksdigi5bey5Y+R6YCB6K6+572u5L+u5pS56K+35rGC77yM562J5b6F5a+55pa556Gu6K6k4oCmIiw2ZTMpKX1mdW5jdGlvbiB0ZShlLHQsbil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4obixlKSl9ZnVuY3Rpb24gTGkoKXtpZShlPT57dHJ5e2lmKGU/LlR5cGUhPT0iSGlkZGVuIilyZXR1cm47Y29uc3QgdD1BcnJheS5pc0FycmF5KGUuRGljdGlvbmFyeSk/ZS5EaWN0aW9uYXJ5OltdLG49bz0+e2NvbnN0IHM9dC5maW5kKGE9PmE/LlRhZz09PW8pO2lmKHMpcmV0dXJuIHMuVmFsdWU/P3MuTmFtZTtmb3IoY29uc3QgYSBvZiB0KWlmKGEmJnR5cGVvZiBhPT0ib2JqZWN0IiYmYS5UYWcmJm8gaW4gYSlyZXR1cm4gYVtvXX0scj1OdW1iZXIoZS5TZW5kZXIpLGk9bz0+e2NvbnN0IHM9KGwuZWRpdE1vZGVzfHx7fSlbb118fCJvZmYiO3JldHVybiBzPT09ImFueSI/ITA6cz09PSJ3aGl0ZWxpc3QiPyhsLndoaXRlbGlzdHx8W10pLm1hcChTdHJpbmcpLmluY2x1ZGVzKFN0cmluZyhyKSk6ITF9O2lmKGUuQ29udGVudD09PSJQRVhfUGVybVF1ZXJ5IiYmTnVtYmVyKG4oIlRhcmdldCIpKT09PVBsYXllcj8uTWVtYmVyTnVtYmVyKXtjb25zdCBvPXt9O0RuLmZvckVhY2gocz0+e29bcy5rZXldPWkocy5rZXkpfSksUCgiUEVYX1Blcm1SZXBseSIsW3tUYWc6IlBFWF9QZXJtUmVwbHkiLFRhcmdldDpTdHJpbmcociksUGVybXM6byxWYWx1ZXM6e3dhaXRTZWNvbmRzOmwud2FpdFNlY29uZHMsYmxvY2tlZFdhaXRNaW51dGVzOmwuYmxvY2tlZFdhaXRNaW51dGVzLGF1dG9SZXZlcnRNaW51dGVzOmwuYXV0b1JldmVydE1pbnV0ZXMsYXV0b1JldmVydEVuYWJsZWQ6bC5hdXRvUmV2ZXJ0RW5hYmxlZCx0aW1lclZpc2liaWxpdHk6bC50aW1lclZpc2liaWxpdHl9fV0se3ByaW9yaXR5OiEwLGRlZHVwZUtleToicGVybXI6IityLGRlZHVwZU1zOjUwMH0pfWVsc2UgaWYoZS5Db250ZW50PT09IlBFWF9SZW1vdGVTZXQiJiZOdW1iZXIobigiVGFyZ2V0IikpPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpe2NvbnN0IG89bigiVmFsdWVzIil8fHt9O2koInRpbWUiKSYmKG8ud2FpdFNlY29uZHMhPW51bGwmJihsLndhaXRTZWNvbmRzPXRlKCtvLndhaXRTZWNvbmRzLDAsNjAwKSksby5ibG9ja2VkV2FpdE1pbnV0ZXMhPW51bGwmJihsLmJsb2NrZWRXYWl0TWludXRlcz10ZSgrby5ibG9ja2VkV2FpdE1pbnV0ZXMsMSwzMCkpLG8uYXV0b1JldmVydE1pbnV0ZXMhPW51bGwmJihsLmF1dG9SZXZlcnRNaW51dGVzPXRlKCtvLmF1dG9SZXZlcnRNaW51dGVzLDEsMzApKSksaSgidGltZXJWaXNpYmlsaXR5IikmJlsic2VsZiIsIndoaXRlbGlzdCIsIm90aGVycyIsImFsbCJdLmluY2x1ZGVzKG8udGltZXJWaXNpYmlsaXR5KSYmKGwudGltZXJWaXNpYmlsaXR5PW8udGltZXJWaXNpYmlsaXR5KSxpKCJhdXRvUmV2ZXJ0IikmJm8uYXV0b1JldmVydEVuYWJsZWQhPT12b2lkIDAmJihsLmF1dG9SZXZlcnRFbmFibGVkPSEhby5hdXRvUmV2ZXJ0RW5hYmxlZCksXyghMCksZ2UoITApLFAoIlBFWF9SZW1vdGVBY2siLFt7VGFnOiJQRVhfUmVtb3RlQWNrIixUYXJnZXQ6U3RyaW5nKHIpfV0pO2NvbnN0IHM9bmUocil8fFN0cmluZyhyKTt2KHgoImVkaXRlZFlvdXJQRVgiLHt3aG86c30pLDhlMyl9fWNhdGNoKHQpe3AoIui/nOeoi+WNj+iuruW8guW4uDoiLHQubWVzc2FnZSl9fSl9ZnVuY3Rpb24gT2koKXtpZShlPT57dHJ5e2lmKGU/LlR5cGUhPT0iSGlkZGVuIilyZXR1cm47Y29uc3QgdD1BcnJheS5pc0FycmF5KGUuRGljdGlvbmFyeSk/ZS5EaWN0aW9uYXJ5OltdLG49cj0+e2NvbnN0IGk9dC5maW5kKG89Pm8/LlRhZz09PXIpO2lmKGkpcmV0dXJuIGkuVmFsdWU/P2kuTmFtZTtmb3IoY29uc3QgbyBvZiB0KWlmKG8mJnR5cGVvZiBvPT0ib2JqZWN0IiYmby5UYWcmJnIgaW4gbylyZXR1cm4gb1tyXX07aWYoZS5Db250ZW50PT09IlBFWF9QZXJtUmVwbHkiJiZOdW1iZXIobigiVGFyZ2V0IikpPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpe2NvbnN0IHI9TnVtYmVyKGUuU2VuZGVyKTtpZihXW3JdPXtwZXJtczpuKCJQZXJtcyIpfHx7fSx2YWx1ZXM6bigiVmFsdWVzIil8fHt9LHRzOkRhdGUubm93KCl9LE8mJk8ubnVtPT09cil7Y29uc3QgaT1PLkM7Tz1udWxsLEgmJihjbGVhclRpbWVvdXQoSCksSD1udWxsKTtsZXQgbz0hMTt0cnl7bz10eXBlb2YgQ3VycmVudFNjcmVlbjwidSImJkN1cnJlbnRTY3JlZW49PT0iSW5mb3JtYXRpb25TaGVldCImJnR5cGVvZiBJbmZvcm1hdGlvblNoZWV0U2VsZWN0aW9uPCJ1IiYmSW5mb3JtYXRpb25TaGVldFNlbGVjdGlvbiYmTnVtYmVyKEluZm9ybWF0aW9uU2hlZXRTZWxlY3Rpb24uTWVtYmVyTnVtYmVyKT09PXJ9Y2F0Y2h7fW8mJkJuKGkpfWVsc2UgaWYoeS5vcGVuJiZ5LnRhcmdldD8uTWVtYmVyTnVtYmVyPT09cil7Y29uc3QgaT1XW3JdO3kucGVybXM9aS5wZXJtcyx5LnZhbHVlcz1pLnZhbHVlcztjb25zdCBvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZlKTtvJiYkbihvKX19ZWxzZSBpZihlLkNvbnRlbnQ9PT0iUEVYX0FjY2VzcyImJk51bWJlcihuKCJUYXJnZXQiKSk9PT1QbGF5ZXI/Lk1lbWJlck51bWJlcil7Y29uc3Qgcj1uKCJOYW1lIil8fCgoKT0+e3RyeXtyZXR1cm4gQ2hhdFJvb21DaGFyYWN0ZXI/LmZpbmQoaT0+aS5NZW1iZXJOdW1iZXI9PT1OdW1iZXIoZS5TZW5kZXIpKT8uTmlja25hbWV9Y2F0Y2h7cmV0dXJuIG51bGx9fSkoKXx8ZS5TZW5kZXI7dih4KCJhY2Nlc3NlZFlvdXJQRVgiLHt3aG86cn0pLDhlMyl9ZWxzZSBlLkNvbnRlbnQ9PT0iUEVYX1JlbW90ZUFjayImJk51bWJlcihuKCJUYXJnZXQiKSk9PT1QbGF5ZXI/Lk1lbWJlck51bWJlciYmdigi5a+55pa55bey5bqU55So5L2g55qE6K6+572u5L+u5pS544CCIiw2ZTMpfWNhdGNoe319KX1mdW5jdGlvbiAkaSgpe2NvbnN0IGU9VSgpO2UmJihMaSgpLE9pKCksZS5ob29rRnVuY3Rpb24oIkluZm9ybWF0aW9uU2hlZXRSdW4iLDUsKHQsbik9Pntjb25zdCByPW4odCk7dHJ5e2NvbnN0IGk9cm4oKTt5Lm9wZW4mJnkudGFyZ2V0JiZpJiZpLk1lbWJlck51bWJlciE9PXkudGFyZ2V0Lk1lbWJlck51bWJlciYmaHQoKTtjb25zdCBvPWkmJmkuTWVtYmVyTnVtYmVyIT09UGxheWVyPy5NZW1iZXJOdW1iZXI/eXQoaSk6bnVsbDtpZighbylyZXR1cm4gcjtPbihpLk1lbWJlck51bWJlcik7Y29uc3Qgcz1UaShpLG8pLGE9a2kocy5wZXJtcyksYz1hP3goInByb2ZpbGVFZGl0QnRuIik6by5lZGl0P3goInByb2ZpbGVFZGl0Tm9QZXJtIik6eCgicHJvZmlsZUVkaXRPZmYiKTtEcmF3QnV0dG9uKEwueCxMLnksTC53LEwuaCwiUkVYIiwiV2hpdGUiLCIiLGMsIWEpfWNhdGNoe31yZXR1cm4gcn0pLGUuaG9va0Z1bmN0aW9uKCJJbmZvcm1hdGlvblNoZWV0Q2xpY2siLDUsKHQsbik9Pnt0cnl7Y29uc3Qgcj1ybigpO2lmKChyJiZyLk1lbWJlck51bWJlciE9PVBsYXllcj8uTWVtYmVyTnVtYmVyP3l0KHIpOm51bGwpJiZNb3VzZUluKEwueCxMLnksTC53LEwuaCkpe1JpKHIpO3JldHVybn19Y2F0Y2h7fXJldHVybiBuKHQpfSksZS5ob29rRnVuY3Rpb24oIkluZm9ybWF0aW9uU2hlZXRFeGl0Iiw1LCh0LG4pPT4oeS5vcGVuJiZodCgpLG4odCkpKSl9ZnVuY3Rpb24gQmkoZT0zZTQpe2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4gbmV3IFByb21pc2Uobj0+e2NvbnN0IHI9KCk9Pnt0eXBlb2YgYmNNb2RTZGs8InUiJiZiY01vZFNkaz8ucmVnaXN0ZXJNb2Q/bighMCk6RGF0ZS5ub3coKS10PmU/bighMSk6c2V0VGltZW91dChyLDEwMCl9O3IoKX0pfWZ1bmN0aW9uIFhpKGU9M2U0KXtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuIG5ldyBQcm9taXNlKG49Pntjb25zdCByPSgpPT57dHJ5e3R5cGVvZiBQbGF5ZXI8InUiJiZ0eXBlb2YgQ2hhcmFjdGVyU2V0RmFjaWFsRXhwcmVzc2lvbj09ImZ1bmN0aW9uIiYmdHlwZW9mIENoYXRSb29tQ2hhcmFjdGVyPCJ1Ij9uKCEwKTpEYXRlLm5vdygpLXQ+ZT9uKCExKTpzZXRUaW1lb3V0KHIsMTAwKX1jYXRjaHtzZXRUaW1lb3V0KHIsMTAwKX19O3IoKX0pfWZ1bmN0aW9uIEZpKCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9Pntjb25zdCB0PSgpPT57dHJ5e3R5cGVvZiBTZXJ2ZXJJc0xvZ2dlZEluPT0iZnVuY3Rpb24iJiZTZXJ2ZXJJc0xvZ2dlZEluKCl8fHR5cGVvZiBQbGF5ZXI8InUiJiZQbGF5ZXImJnR5cGVvZiBQbGF5ZXIuTWVtYmVyTnVtYmVyPT0ibnVtYmVyIiYmUGxheWVyLk1lbWJlck51bWJlcj4wJiYhIVBsYXllci5BY2NvdW50TmFtZT9lKCEwKTpzZXRUaW1lb3V0KHQsMjAwKX1jYXRjaHtzZXRUaW1lb3V0KHQsMjAwKX19O3QoKX0pfWFzeW5jIGZ1bmN0aW9uIEdpKCl7cChg5Yid5aeL5YyWIHYke059Li4uYCk7Y29uc3QgZT1hd2FpdCBCaSgpO2lmKCFhd2FpdCBYaSgpKXtPZSgi5ri45oiP5Yqg6L296LaF5pe277yM5pS+5byD5Yid5aeL5YyWIik7cmV0dXJufWlmKGF3YWl0IFluKCksYXdhaXQgRmkoKSxhd2FpdCB0cigpLGNuKCksT3IoKSxnZSghMCksZSl0cnl7VW4oYmNNb2RTZGsucmVnaXN0ZXJNb2Qoe25hbWU6IlBlcnNvbmFsaXR5IEV4Y3JldGlvbiAoUEVYKSIsZnVsbE5hbWU6IlBlcnNvbmFsaXR5IEV4Y3JldGlvbiIsdmVyc2lvbjpOfSkpfWNhdGNoKG8pe09lKCJyZWdpc3Rlck1vZCDlpLHotKXvvIzov5vlhaXlhbzlrrnmqKHlvI86IixvLm1lc3NhZ2UpfWNvbnN0IG49VSgpO24mJihvdChuKSxhbihuKSxscihuKSxpaSgoKT0+e1pyKCksc2V0VGltZW91dCgoKT0+e3RyeXtnZSghMCl9Y2F0Y2h7fX0sODAwKSxzZXRUaW1lb3V0KCgpPT57dHJ5e2YubW9kZSE9PW0uSURMRSYmZi5waGFzZUVuZHNBdD4wJiYocCgi6L+b5oi/6L+Y5Y6f54q25oCBOiIsZi5tb2RlKSxUKHttb2RlOmYubW9kZSxyZW1haW5pbmdTZWM6TWF0aC5tYXgoMCxNYXRoLnJvdW5kKChmLnBoYXNlRW5kc0F0LURhdGUubm93KCkpLzFlMykpLG93bmVyOmYub3duZXJNZW1iZXJOdW1iZXIsZ2VsSWQ6Zi5nZWxJZH0sITApKX1jYXRjaHt9fSwxNTAwKX0sKCk9Pnt9KSxvaSgoKT0+e3RyeXt2aSgpfWNhdGNoe310cnl7b3QmJlZpKCl9Y2F0Y2h7fX0pKSxlaSgpLGJpKCksUGkoKSxOaSgpLCRpKCk7dHJ5e3R5cGVvZiB3aW5kb3c8InUiJiYhd2luZG93Ll9wZXhVbmxvYWRGbHVzaCYmKHdpbmRvdy5fcGV4VW5sb2FkRmx1c2g9KCk9Pnt0cnl7dHlwZW9mIFNlcnZlckFjY291bnRVcGRhdGU/LlN5bmNUb1NlcnZlcj09ImZ1bmN0aW9uIiYmU2VydmVyQWNjb3VudFVwZGF0ZS5TeW5jVG9TZXJ2ZXIoKX1jYXRjaHt9fSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHdpbmRvdy5fcGV4VW5sb2FkRmx1c2gpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHdpbmRvdy5fcGV4VW5sb2FkRmx1c2gpKX1jYXRjaHt9cChg5Yid5aeL5YyW5a6M5oiQIHYke059YCk7bGV0IHI9ITE7Y29uc3QgaT1zZXRJbnRlcnZhbCgoKT0+e3RyeXtpZih0eXBlb2YgQ3VycmVudFNjcmVlbj4idSJ8fEN1cnJlbnRTY3JlZW4hPT0iQ2hhdFJvb20ifHwoY2xlYXJJbnRlcnZhbChpKSxyKSlyZXR1cm47cj0hMCxzZXRUaW1lb3V0KCgpPT52KHgoImxvYWRlZCIse3Y6Tn0pKSwxZTMpfWNhdGNoe2NsZWFySW50ZXJ2YWwoaSl9fSw1MDApfWZ1bmN0aW9uIFZpKCl7cmkoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlpuKSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKS50aGVuKGU9PmUuY2xlYXJNZXNzYWdlSGFuZGxlcnMoKSkuY2F0Y2goKCk9Pnt9KX1jb25zdCBLaT0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL05pY2U4OTIzL0JDLVBFWEBtYWluL0ltYWdlcy8iLEhpPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vTmljZTg5MjMvQkMtUEVYL21haW4vSW1hZ2VzLyI7ZnVuY3Rpb24gWG4oZSl7cmV0dXJuIEtpK1N0cmluZyhlKS5yZXBsYWNlKC9eXC8vLCIiKX1mdW5jdGlvbiBGbihlKXtyZXR1cm4gSGkrU3RyaW5nKGUpLnJlcGxhY2UoL15cLy8sIiIpfWZ1bmN0aW9uIGppKGUsdCl7Y29uc3Qgbj1uZXcgSW1hZ2U7bi5jcm9zc09yaWdpbj0iYW5vbnltb3VzIjtsZXQgcj0wO3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCgpPT57dHJ5e3QmJnQobil9Y2F0Y2h7fX0pLG4uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCgpPT57cj09PTA/KHI9MSxPZSgi5Zu+54mHIENETiDliqDovb3lpLHotKXvvIzlm57pgIAgcmF3OiIsZSksbi5zcmM9Rm4oZSkpOk9lKCLlm77niYfliqDovb3lpLHotKU6IixlKX0pLG4uc3JjPVhuKGUpLG59ZnVuY3Rpb24gemkoZSx0LG4scixpKXtjb25zdCBvPU1hdGgubWF4KDEsZXx8MSkscz1NYXRoLm1heCgxLHR8fDEpLGE9TWF0aC5tYXgoMCxufHwwKTtyZXR1cm57c3g6YSVvKnIsc3k6TWF0aC5mbG9vcihhL28pJXMqaSxzdzpyLHNoOml9fXdpbmRvdy5QRVg9d2luZG93LlBFWD8/e307Y29uc3QgV2k9d2luZG93LlBFWCYmdHlwZW9mIHdpbmRvdy5QRVg9PSJvYmplY3QiJiYhIXdpbmRvdy5QRVgudmVyc2lvbjtXaT9jb25zb2xlLndhcm4oYOKal++4j1tQRVhdIOajgOa1i+WIsOW3suacieWunuS+i+WcqOi/kOihjO+8iHZlcnNpb246ICR7d2luZG93LlBFWC52ZXJzaW9ufe+8ie+8jOi3s+i/h+mHjeWkjeWIneWni+WMluOAgmApOih3aW5kb3cuUEVYPXt2ZXJzaW9uOk4sY29tbWFuZDooZT0iIik9PkN0KGAvcGV4ICR7ZX1gLnRyaW0oKSkscmVzZXQ6KCk9PldlKCksc3RhdHVzOigpPT5mbigpLGdldENvbmZpZzooKT0+bCxzYXZlOigpPT5fKCEwKSxyZWxvYWQ6KCk9PmNuKCksc2V0QW5pbUR1cmF0aW9uT3ZlcnJpZGU6UnIsaW1hZ2VzOntpbWFnZVVybDpYbixpbWFnZUZhbGxiYWNrVXJsOkZuLGxvYWRQZXhJbWFnZTpqaSxzcHJpdGVGcmFtZTp6aX0sZXhwb3J0U2V0dGluZ3M6dW4saW1wb3J0U2V0dGluZ3M6ZG59LEdpKCkpOwo=';
+ const CODE = 'Y29uc3QgTj0iMC4xLjM0Ijtjb25zdCBndD0iUEVYX1NldHRpbmdzIixLbj1bIuS6uuagvOiNr+awtCIsIuS6uuagvOiNr+WJgiIsInBlcnNvbmEgcG90aW9uIiwicGVyc29uYWxpdHkgZXh0cmFjdGlvbiJdLEhuPVsi5Yed6IO26I2v5YmCIiwi5Yed6IO26I2v5rC0IiwicGxhaW4gZ2VsIiwibm9ybWFsIGdlbCJdLGpuPVt7RXllYnJvd3M6IlNvZnQiLEV5ZXM6IlZlcnlMZXdkIixNb3V0aDoiRnJvd24iLEJsdXNoOiJIaWdoIn0se0V5ZWJyb3dzOiJMb3dlcmVkIixFeWVzOiJIZWFydFBpbmsiLE1vdXRoOiJNb2FuIixCbHVzaDoiSGlnaCJ9XSx6bj17RXllYnJvd3M6IlJhaXNlZCIsRXllczoiTGV3ZEhlYXJ0UGluayIsTW91dGg6IkFoZWdhbyIsQmx1c2g6IlZlcnlIaWdoIn0sV249e0V5ZWJyb3dzOiJMb3dlcmVkIixFeWVzOiJEYXplZCIsTW91dGg6IkZyb3duIixCbHVzaDoiVmVyeUhpZ2gifSxVbj17RXllYnJvd3M6Ikxvd2VyZWQiLEV5ZXM6Ikxld2QiLE1vdXRoOiJPcGVuIixCbHVzaDoiTWVkaXVtIn0sWW49Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9OaWNlODkyMy9CQy1QRVhAbWFpbi9Tb3VuZC8iLEY9ZT0+WW4rZSxVZT17d2FpdDpbRigid2FpdF8xLm1wMyIpLEYoIndhaXRfMi5tcDMiKSxGKCJ3YWl0XzMubXAzIiksRigid2FpdF80Lm1wMyIpLEYoIndhaXRfNS5tcDMiKV0sZXhjcmV0ZTpbRigiZXhjcmV0ZS5tcDMiKV0sZmVlZDpbRigiZmVlZC5tcDMiKV19O2Z1bmN0aW9uIFIoKXtyZXR1cm57ZW5hYmxlZDohMCxrZXl3b3JkczpbLi4uS25dLG5vcm1hbEtleXdvcmRzOlsuLi5Ibl0sd2FpdFNlY29uZHM6NTAsYmxvY2tlZFdhaXRNaW51dGVzOjE1LGF1dG9SZXZlcnRFbmFibGVkOiEwLGF1dG9SZXZlcnRNaW51dGVzOjE1LGdlbEV4cGlyZU1vZGU6InZhbmlzaCIsbm9ybWFsRXhwcmVzc2lvblNlY29uZHM6NSxlZmZlY3RMZXZlbDozLHZpZXdNb2RlOiJzdXJyb3VuZCIsYmxpbmRMZXZlbDoyLHRpbWVyVmlzaWJpbGl0eToiYWxsIixmeERpenp5OiEwLGZ4Qmxhbms6ITAsZnhCbHVyOiEwLGZ4U2hha2U6ITAscmVzdHJpY3Rpb25zOiEwLHNlZVJlbW90ZUFuaW1zOiEwLGhlYXJSZW1vdGVTb3VuZHM6ITEsZXhwcmVzc2lvbnM6e3dhaXQ6am4ubWFwKGU9Pih7Li4uZX0pKSxleGNyZXRlOnsuLi56bn0sYmxhbms6ey4uLldufX0sbm9ybWFsRXhwcmVzc2lvbjp7Li4uVW59LGdlbExheWVyOjI0LHNvdW5kczp7d2FpdDpVZS53YWl0Lm1hcChlPT5lKSxleGNyZXRlOlVlLmV4Y3JldGUubWFwKGU9PmUpLGZlZWQ6VWUuZmVlZC5tYXAoZT0+ZSl9LHNvdW5kT246e3dhaXQ6ITAsZXhjcmV0ZTohMCxmZWVkOiEwfSxlZGl0TW9kZXM6e3RpbWU6Im9mZiIsYXV0b1JldmVydDoib2ZmIix0aW1lclZpc2liaWxpdHk6Im9mZiJ9LHdoaXRlbGlzdDpbXX19bGV0IGw9UigpO2Z1bmN0aW9uIEdlKGUpe2w9ZX1sZXQgc249bnVsbDtmdW5jdGlvbiBxbihlKXtzbj1lfWZ1bmN0aW9uIFUoKXtyZXR1cm4gc259Y29uc3QgJHQ9e3poOntsb2FkZWQ6IuKal++4jyBQRVggdnt2fSDlt7LliqDovb3jgILovpPlhaUgL3BleCBoZWxwIOafpeeci+aMh+S7pOOAgiIsaGVscDpbIuKal++4jyBQRVggdnt2fSDmjIfku6TvvJoiLCIvcGV4IGhlbHAgICAgIOKAlCDmnKzluK7liqkiLCIvcGV4IGhvd3RvICAgIOKAlCDnjqnms5Xor7TmmI4iLCIvcGV4IHNob3cgICAgIOKAlCDmiZPlvIAv5YWz6Zet5ri45oiP5YaF5o6n5Yi25Y+w6Z2i5p2/IiwiL3BleCBzdGF0dXMgICDigJQg5p+l55yL5b2T5YmN54q25oCBIiwiL3BleCByZXNldCAgICDigJQg5by65Yi25oGi5aSN77yI5riF6Zmk562J5b6FL+Wkseelni/lh53og7bnirbmgIHvvIkiLCIvcGV4IHNldHRpbmdzIOKAlCDmiZPlvIDorr7nva7pobUiLCIvcGV4IHNhdmUgICAgIOKAlCDnq4vljbPkv53lrZjorr7nva4iLCLosIPor5XvvJrmjIkgRjEyIOaIliBDdHJsK1NoaWZ0K0kg5omT5byA5rWP6KeI5Zmo5o6n5Yi25Y+w77yMIiwi5oqKIOKal++4j1tQRVhdIOW8gOWktOeahOaKpemUmeS/oeaBr+WPkee7meS9nOiAheOAgiJdLmpvaW4oYApgKSxjbWRVbmtub3duOiLmnKrnn6XmjIfku6TvvJovcGV4IHtzdWJ977yIL3BleCBoZWxwIOafpeeci+W4ruWKqe+8iSIsaG93dG86WyLimpfvuI8gUEVYIOeOqeazleivtOaYju+8miIsJzEuIOWItuS9nOS4gOeTtumlruaWme+8iOa4uOaIj+iHquW4pumBk+WFt++8ie+8jOWcqOWItuS9nOWQjS/mj4/ov7Dlhpnop6blj5HlhbPplK7or43vvIjlpoIi5Lq65qC86I2v5rC0Iu+8ieOAgicsIjIuIOWWneS4i+aIluazqOWwhOW4puWFs+mUruivjeeahOmlruaWmSDihpIg5LiA6Zi16Zi16LaK5p2l6LaK5pmV44CCIiwiMy4g5Yiw5o6S5Ye65pe25Yi75qOA5p+l6IeA6YOo6KOF5aSH5L2N77ya5rKh5Lic6KW/5bCx5o6S5Ye677ybIiwiICAg5pyJ5Lic6KW/5Lya562J5b6F77yI5ou/5o6J56uL5Yi75o6S77yJ77yM6LaF5LiK6ZmQ5YiZ6I2v5pWI5raI5aSx44CCIiwiNC4g5Lq65qC85Yed6IO25o6S5Ye65ZCO5aSx56We77yI6buR55m9L+S4jeiDveWKqC/op4bph47lj5jnqoQv56aB6KiA77yJ77yM5Yed6IO26JC95Zyo6ISa6L6544CCIiwnNS4g54K55Ye75aSx56We6ICFIOKGkiDlr7nor53moYYi5o2h6LW35Yed6IO2Iu+8iOaJi+imgeepuu+8ieOAgicsIjYuIOaKiuWHneiDtuS6pOi/mOWOn+S4u+S6uu+8jOS4u+S6uuWWneS4i+iHquW3seeahOWHneiDtiDihpIg5oGi5aSN77ybIiwiICAg6buY6K6kMTXliIbpkp/msqHlloLlm57oh6rliqjmgaLlpI3vvIzlh53og7bmtojmlaPvvIjlj6/lhbPpl63vvInjgIIiLCI3LiDmma7pgJrlh53og7bvvIjlj6bkuIDlpZflhbPplK7or43vvInvvJrml6DnnKnmmZXlpLHnpZ7vvIzlj6rmnInnn63mmoLooajmg4Xlj5jljJbjgIIiLCc4LiDlronlhajvvJovcGV4IHJlc2V0IOaIluiuvue9rumhtSLlvLrliLbmgaLlpI0i44CCJywi5pu05aSa77yaL3BleCBzZXR0aW5ncyDph4zmnInlrozmlbTnjqnms5Xor7TmmI7pobXjgIIiXS5qb2luKGAKYCkscmVzZXREb25lOiLlt7LlvLrliLbmgaLlpI3vvIzmiYDmnInnirbmgIHlt7LmuIXpmaTjgIIiLHJlc2V0Q29uZmlybToi56Gu5a6a6KaB5by65Yi25oGi5aSN5ZCX77yf5q2k5pON5L2c5Lya56uL5Y2z5riF6Zmk5YWo6YOoIFBFWCDnirbmgIHjgIIiLHN0YXR1c0xpbmU6IuW9k+WJjeeKtuaAge+8mntzdGF0ZX0iLHN0YXRlSWRsZToi5q2j5bi4IixzdGF0ZVdhaXRpbmc6IuetieW+heaOkuWHuu+8iOWJqeS9mSB7c2VjfSDnp5LvvIkiLHN0YXRlQmxvY2tlZDoi6IeA6YOo5pyJ54mp5ZOB6YGu5oyh77yM562J5b6F5Lit77yI5Ymp5L2ZIHttaW59IOWIhiB7c2VjfSDnp5LvvIkiLHN0YXRlRXhjcmV0aW5nOiLmjpLlh7rkuK3igKYiLHN0YXRlQmxhbms6IuWkseelnuS4re+8iOWJqeS9mSB7bWlufSDliIYge3NlY30g56eS77yJIixzdGF0ZUJsYW5rTm9ybWFsOiLlh53og7bmjpLlh7rvvIjliankvZkge21pbn0g5YiGIHtzZWN9IOenku+8iSIsY2FudE9wZW5TZXR0aW5nczoi5peg5rOV5omT5byA6K6+572u6aG177yI5b2T5YmN55S76Z2i5LiN5pSv5oyB77yJ44CCIixub0NoYXRCb3g6IuaJvuS4jeWIsOiBiuWkqeahhu+8jOivt+WFiOi/m+WFpeiBiuWkqeWupOWGjei+k+WFpSAvcGV4IHNob3fjgIIiLGdlbEV4cGlyZWQ6IiVOQU1FJeeahOS6uuagvOWHneiDtumaj+aXtumXtOa2iOaVo+S6huOAgiIsZ2VsRXhwaXJlZE5vcm1hbDoiJU5BTUUl55qE5pmu6YCa5Yed6IO26ZqP5pe26Ze05raI5pWj5LqG44CCIixnZWxJbnZhbGlkYXRlZDoiJU5BTUUl55qE5Lq65qC85Yed6IO25aSx5Y675LqG5pWI5Yqb77yM5Y+Y5oiQ5LqG5peg5pWI5Yed6IO24oCmIixnZWxJbnZhbGlkYXRlZE5vcm1hbDoiJU5BTUUl55qE5pmu6YCa5Yed6IO25aSx5Y675LqG5pWI5Yqb77yM5Y+Y5oiQ5LqG5peg5pWI5Yed6IO24oCmIixwcm9maWxlRWRpdEJ0bjoi6L+c56iL57yW6L6R5a+55pa5IFBFWCDorr7nva4iLHByb2ZpbGVFZGl0Tm9QZXJtOiLkuI3lnKjlr7nmlrnnmb3lkI3ljZXvvIzml6Dms5XnvJbovpEiLHByb2ZpbGVFZGl0T2ZmOiLlr7nmlrnkuI3lhYHorrjov5znqIvkv67mlLkiLGFjY2Vzc2VkWW91clBFWDoie3dob30g5p+l55yL5LqG5L2g55qEIFBFWCDorr7nva4iLGVkaXRlZFlvdXJQRVg6Int3aG99IOS/ruaUueS6huS9oOeahCBQRVgg6K6+572uIixyZW1vdGVFZGl0TG9hZGluZzoi5q2j5Zyo6I635Y+WIHtuYW1lfSDnmoQgUEVYIOiuvue9ruKApiIscmVtb3RlRWRpdExvYWRGYWlsOiLojrflj5blpLHotKXvvJrlr7nmlrnmnKrlronoo4UgUEVYIOaIluacquWTjeW6lO+8jOWPr+mHjeivleOAgiJ9fTtsZXQgcnQ9InpoIjthc3luYyBmdW5jdGlvbiBKbigpe3JldHVybiBydD0iemgiLHJ0fWZ1bmN0aW9uIHgoZSx0PXt9KXtsZXQgbj0kdFtydF0/LltlXT8/JHQuemhbZV0/P2U7Zm9yKGNvbnN0W3IsaV1vZiBPYmplY3QuZW50cmllcyh0KSluPW4uc3BsaXQoYHske3J9fWApLmpvaW4oU3RyaW5nKGkpKTtyZXR1cm4gbn1jb25zdCBCdD0yNTAsZGU9W10sb2U9bmV3IE1hcDtsZXQgcT1udWxsLEZ0PTA7ZnVuY3Rpb24gUW4oZSl7Y29uc3QgdD1bXTt0cnl7UGxheWVyJiZ0eXBlb2YgUGxheWVyLk1lbWJlck51bWJlcj09Im51bWJlciImJnQucHVzaCh7U291cmNlQ2hhcmFjdGVyOlBsYXllci5NZW1iZXJOdW1iZXJ9KX1jYXRjaHt9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/dC5jb25jYXQoZSk6dH1mdW5jdGlvbiBpdCgpe2lmKHE9bnVsbCwhZGUubGVuZ3RoKXJldHVybjtjb25zdCBlPURhdGUubm93KCksdD1NYXRoLm1heCgwLEJ0LShlLUZ0KSk7aWYodD4wKXtxPXNldFRpbWVvdXQoaXQsdCk7cmV0dXJufWNvbnN0IG49ZGUuc2hpZnQoKTt0cnl7dHlwZW9mIFNlcnZlclNlbmQ9PSJmdW5jdGlvbiImJlNlcnZlclNlbmQoIkNoYXRSb29tQ2hhdCIsbi5wYXlsb2FkKX1jYXRjaHt9RnQ9RGF0ZS5ub3coKSxkZS5sZW5ndGgmJiFxJiYocT1zZXRUaW1lb3V0KGl0LEJ0KSl9ZnVuY3Rpb24gUChlLHQsbj17fSl7Y29uc3R7ZGVkdXBlS2V5OnI9bnVsbCxkZWR1cGVNczppPTgwMCxwcmlvcml0eTpvPSExfT1uO2lmKHIpe2NvbnN0IGM9RGF0ZS5ub3coKSx1PW9lLmdldChyKTtpZih1JiZjLXU8aSlyZXR1cm4hMTtpZihvZS5zZXQocixjKSxvZS5zaXplPjIwMClmb3IoY29uc3RbZCxoXW9mIG9lKWMtaD42ZTQmJm9lLmRlbGV0ZShkKX1jb25zdCBhPXtwYXlsb2FkOntUeXBlOiJIaWRkZW4iLENvbnRlbnQ6ZSxEaWN0aW9uYXJ5OlFuKHQpfX07cmV0dXJuIG8/ZGUudW5zaGlmdChhKTpkZS5wdXNoKGEpLHF8fChxPXNldFRpbWVvdXQoaXQsMCkpLCEwfWZ1bmN0aW9uIGIoZSx0KXt0cnl7Y29uc3Qgbj1abihlKTtpZighbilyZXR1cm47Y29uc3Qgcj17VHlwZToiQWN0aW9uIixDb250ZW50Om59O3QhPW51bGwmJihyLlRhcmdldD10KSx0eXBlb2YgU2VydmVyU2VuZD09ImZ1bmN0aW9uIiYmU2VydmVyU2VuZCgiQ2hhdFJvb21DaGF0IixyKSxzZXRUaW1lb3V0KCgpPT57dHJ5e2NvbnN0IGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHRBcmVhQ2hhdExvZyIpO2kmJihpLnNjcm9sbFRvcD1pLnNjcm9sbEhlaWdodCl9Y2F0Y2h7fX0sNjApfWNhdGNoe319ZnVuY3Rpb24gWm4oZSl7bGV0IHQ9IiI7dHJ5e3Q9Q2hhcmFjdGVyTmlja25hbWUoUGxheWVyKXx8IiJ9Y2F0Y2h7fXJldHVybiBTdHJpbmcoZSkuc3BsaXQoIiVOQU1FJSIpLmpvaW4odCkuc3BsaXQoIiVQT1NTRVNTSVZFJSIpLmpvaW4oIuiHquW3seeahCIpLnNwbGl0KCIlT1BQX05BTUUlIikuam9pbigi5a+55pa5Iikuc3BsaXQoIiVPUFBfUE9TU0VTU0lWRSUiKS5qb2luKCLlr7nmlrnnmoQiKS5zcGxpdCgiJVBST05PVU4lIikuam9pbigi6Ieq5bexIikuc3BsaXQoIiVJTlRFTlNJVkUlIikuam9pbigi6Ieq5bexIil9Y29uc3QgeHQ9W107ZnVuY3Rpb24gaWUoZSl7dHlwZW9mIGU9PSJmdW5jdGlvbiImJnh0LnB1c2goZSl9ZnVuY3Rpb24gbG4oZSl7aWYoZSl0cnl7ZS5ob29rRnVuY3Rpb24oIlRleHRRdWVyeU11bHRpcGxlIiwwLCh0LG4pPT57Y29uc3Qgcj10JiZ0WzBdLGk9bih0KTtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZpLmluZGV4T2YoIk1JU1NJTkcgVEVYVCBJTiIpPj0wJiZ0eXBlb2Ygcj09InN0cmluZyI/cjppfSl9Y2F0Y2h7fX1mdW5jdGlvbiBvdChlKXtpZihlKXRyeXtlLmhvb2tGdW5jdGlvbigiQ2hhdFJvb21NZXNzYWdlIiwxLCh0LG4pPT57Y29uc3Qgcj1uKHQpO3RyeXtjb25zdCBpPXRbMF07aWYoIWl8fHR5cGVvZiBpIT0ib2JqZWN0IilyZXR1cm4gcjtmb3IoY29uc3QgbyBvZiB4dCl0cnl7byhpKX1jYXRjaHt9fWNhdGNoe31yZXR1cm4gcn0pfWNhdGNoKHQpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0gQ2hhdFJvb21NZXNzYWdlIOaMgumSqeWksei0pToiLHQubWVzc2FnZSl9fWZ1bmN0aW9uIGVyKCl7eHQubGVuZ3RoPTB9Y29uc3QgdHI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGNsZWFyTWVzc2FnZUhhbmRsZXJzOmVyLHBleE9uTWVzc2FnZTppZSxwZXhTZW5kQWN0aW9uOmIscGV4U2VuZEhpZGRlbjpQLHJlZ2lzdGVyTWVzc2FnZUhvb2s6b3QscmVnaXN0ZXJUZXh0UXVlcnlIb29rOmxufSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO2Z1bmN0aW9uIGJ0KGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OmU7aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QiKXtjb25zdCBuPXt9O2Zvcihjb25zdCByIG9mIE9iamVjdC5rZXlzKGUpKW5bcl09dCYmciBpbiB0P2J0KGVbcl0sdFtyXSk6ZVtyXTtyZXR1cm4gbn1yZXR1cm4gdD09PXZvaWQgMD9lOnR9ZnVuY3Rpb24gdnQoKXtjb25zdCBlPWw7cmV0dXJue3Y6MSxlbmFibGVkOmUuZW5hYmxlZCxrZXl3b3JkczplLmtleXdvcmRzLG5vcm1hbEtleXdvcmRzOmUubm9ybWFsS2V5d29yZHMsd2FpdFNlY29uZHM6ZS53YWl0U2Vjb25kcyxibG9ja2VkV2FpdE1pbnV0ZXM6ZS5ibG9ja2VkV2FpdE1pbnV0ZXMsYXV0b1JldmVydEVuYWJsZWQ6ZS5hdXRvUmV2ZXJ0RW5hYmxlZCxhdXRvUmV2ZXJ0TWludXRlczplLmF1dG9SZXZlcnRNaW51dGVzLGdlbEV4cGlyZU1vZGU6ZS5nZWxFeHBpcmVNb2RlLG5vcm1hbEV4cHJlc3Npb25TZWNvbmRzOmUubm9ybWFsRXhwcmVzc2lvblNlY29uZHMsZWZmZWN0TGV2ZWw6ZS5lZmZlY3RMZXZlbCx2aWV3TW9kZTplLnZpZXdNb2RlLGJsaW5kTGV2ZWw6ZS5ibGluZExldmVsLHRpbWVyVmlzaWJpbGl0eTplLnRpbWVyVmlzaWJpbGl0eSxmeERpenp5OmUuZnhEaXp6eSxmeEJsYW5rOmUuZnhCbGFuayxmeEJsdXI6ZS5meEJsdXIsZnhTaGFrZTplLmZ4U2hha2UscmVzdHJpY3Rpb25zOmUucmVzdHJpY3Rpb25zLHNlZVJlbW90ZUFuaW1zOmUuc2VlUmVtb3RlQW5pbXMsZXhwcmVzc2lvbnM6ZS5leHByZXNzaW9ucyxub3JtYWxFeHByZXNzaW9uOmUubm9ybWFsRXhwcmVzc2lvbixnZWxMYXllcjplLmdlbExheWVyLGVkaXRNb2RlczplLmVkaXRNb2Rlcyx3aGl0ZWxpc3Q6ZS53aGl0ZWxpc3R9fWNvbnN0IGNuPSJQRVhfc291bmRzIjtmdW5jdGlvbiB1bigpe3RyeXtjb25zdCBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKGNuKSx0PVIoKS5zb3VuZHM7aWYoZSl7Y29uc3Qgbj1KU09OLnBhcnNlKGUpLHI9biYmdHlwZW9mIG49PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShuKSYmInNvdW5kcyJpbiBuP24uc291bmRzOm4saT1BcnJheS5pc0FycmF5KHI/LmRyaW5rKT9yLmRyaW5rOltdLG89e3dhaXQ6W10sZXhjcmV0ZTpbXSxmZWVkOltdfTtmb3IoY29uc3QgcyBvZlsid2FpdCIsImV4Y3JldGUiLCJmZWVkIl0pe2NvbnN0IGE9cj8uW3NdO29bc109QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MD9hLnNsaWNlKCk6dFtzXS5zbGljZSgpfWkubGVuZ3RoJiYoby53YWl0PWkuY29uY2F0KG8ud2FpdCkpLGwuc291bmRzPW8sbiYmdHlwZW9mIG4uc291bmRPbj09Im9iamVjdCImJm4uc291bmRPbiYmKGwuc291bmRPbj1PYmplY3QuYXNzaWduKHt9LFIoKS5zb3VuZE9uLG4uc291bmRPbikpfWVsc2UgbC5zb3VuZHM9e3dhaXQ6dC53YWl0LnNsaWNlKCksZXhjcmV0ZTp0LmV4Y3JldGUuc2xpY2UoKSxmZWVkOnQuZmVlZC5zbGljZSgpfSxsLnNvdW5kT249UigpLnNvdW5kT259Y2F0Y2h7fX1mdW5jdGlvbiBSZSgpe3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShjbixKU09OLnN0cmluZ2lmeSh7c291bmRzOmwuc291bmRzLHNvdW5kT246bC5zb3VuZE9ufSkpfWNhdGNoe319ZnVuY3Rpb24gRGUoKXt0cnl7cmV0dXJuIlBFWF9zZXR0aW5nc19iYWNrdXBfIisoUGxheWVyPy5NZW1iZXJOdW1iZXJ8fFBsYXllcj8uQWNjb3VudE5hbWV8fCJhbm9uIil9Y2F0Y2h7cmV0dXJuIlBFWF9zZXR0aW5nc19iYWNrdXBfYW5vbiJ9fWxldCBMZT0hMTtmdW5jdGlvbiBhdChlKXt0cnl7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1MWlN0cmluZy5kZWNvbXByZXNzRnJvbUJhc2U2NChlKTtyZXR1cm4gdD9KU09OLnBhcnNlKHQpOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG5yKGUpe0dlKGJ0KFIoKSxlKSl9ZnVuY3Rpb24gcnIoZT0xNWUzKXtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuIG5ldyBQcm9taXNlKG49Pntjb25zdCByPSgpPT57dHJ5e1BsYXllciYmUGxheWVyLkV4dGVuc2lvblNldHRpbmdzIT09dm9pZCAwP24oITApOkRhdGUubm93KCktdD5lP24oITEpOnNldFRpbWVvdXQociwyMDApfWNhdGNoe24oITEpfX07cigpfSl9ZnVuY3Rpb24gZG4oKXtsZXQgZT1udWxsLHQ9bnVsbDt0cnl7ZT1QbGF5ZXI/LkV4dGVuc2lvblNldHRpbmdzPy5bIlBFWCJdPz9udWxsfWNhdGNoe310cnl7dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShEZSgpKX1jYXRjaHt9Y29uc3Qgbj1hdChlKSxyPWF0KHQpLGk9biYmK24udHN8fDAsbz1yJiYrci50c3x8MDtsZXQgcz1udWxsLGE9bnVsbCxjPSExO24mJmk+PW8/KHM9bixhPWUpOnI/KHM9cixhPXQsYz1pPG8pOm4mJihzPW4sYT1lKTtsZXQgdT0hMTtpZihzKXRyeXtucihzKSx1PSEwfWNhdGNoKGQpe2lyKGQpfWlmKHV8fEdlKFIoKSksbC50aW1lclZpc2liaWxpdHk9PT0iYm90aCImJihsLnRpbWVyVmlzaWJpbGl0eT0iYWxsIiksQXJyYXkuaXNBcnJheShsLmV4cHJlc3Npb25zKSl7Y29uc3QgZD1sLmV4cHJlc3Npb25zLGg9UigpLmV4cHJlc3Npb25zO2wuZXhwcmVzc2lvbnM9e3dhaXQ6W2RbMF0sZFsxXV0uZmlsdGVyKEJvb2xlYW4pLm1hcChBPT4oey4uLkF9KSksZXhjcmV0ZTpkWzJdP3suLi5kWzJdfTpoLmV4Y3JldGUsYmxhbms6ZFszXXx8ZFswXT97Li4uZFszXXx8ZFswXX06aC5ibGFua319aWYoTGU9ITAsdW4oKSx1JiZhKXt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oRGUoKSxhKX1jYXRjaHt9aWYoYyl0cnl7UGxheWVyLkV4dGVuc2lvblNldHRpbmdzfHwoUGxheWVyLkV4dGVuc2lvblNldHRpbmdzPXt9KSxQbGF5ZXIuRXh0ZW5zaW9uU2V0dGluZ3MuUEVYPWEsdHlwZW9mIFNlcnZlclBsYXllckV4dGVuc2lvblNldHRpbmdzU3luYz09ImZ1bmN0aW9uIiYmU2VydmVyUGxheWVyRXh0ZW5zaW9uU2V0dGluZ3NTeW5jKCJQRVgiKSxjb25zb2xlLmxvZygi4pqX77iPW1BFWF0g6LSm5Y+35pWw5o2u6JC95ZCOL+S4ouWkse+8jOW3suS7juacrOWcsOWkh+S7vei/mOWOn+W5tuihpeWbnui0puWPtyIpfWNhdGNoe319fWxldCBJPW51bGw7ZnVuY3Rpb24gWWUoKXt0cnl7aWYoSSYmKGNsZWFyVGltZW91dChJKSxJPW51bGwpLExlJiZQbGF5ZXIpe1BsYXllci5FeHRlbnNpb25TZXR0aW5nc3x8KFBsYXllci5FeHRlbnNpb25TZXR0aW5ncz17fSk7Y29uc3QgZT12dCgpO2UudHM9RGF0ZS5ub3coKTtjb25zdCB0PUpTT04uc3RyaW5naWZ5KGUpLG49TFpTdHJpbmcuY29tcHJlc3NUb0Jhc2U2NCh0KTtQbGF5ZXIuRXh0ZW5zaW9uU2V0dGluZ3MuUEVYPW47dHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKERlKCksbil9Y2F0Y2h7fVJlKCk7dHJ5e3R5cGVvZiBTZXJ2ZXJQbGF5ZXJFeHRlbnNpb25TZXR0aW5nc1N5bmM9PSJmdW5jdGlvbiImJlNlcnZlclBsYXllckV4dGVuc2lvblNldHRpbmdzU3luYygiUEVYIil9Y2F0Y2h7fXRyeXt0eXBlb2YgU2VydmVyU2VuZFF1ZXVlUHJvY2Vzcz09ImZ1bmN0aW9uIiYmU2VydmVyU2VuZFF1ZXVlUHJvY2VzcygpfWNhdGNoe319fWNhdGNoe319dHlwZW9mIHdpbmRvdzwidSImJiF3aW5kb3cuX3BleFNhdmVGbHVzaCYmKHdpbmRvdy5fcGV4U2F2ZUZsdXNoPVllLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsWWUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLFllKSk7ZnVuY3Rpb24gXyhlPSExKXtpZighTGUpcmV0dXJuO2NvbnN0IHQ9KCk9Pnt0cnl7aWYoIUxlfHwhUGxheWVyKXJldHVybjtQbGF5ZXIuRXh0ZW5zaW9uU2V0dGluZ3N8fChQbGF5ZXIuRXh0ZW5zaW9uU2V0dGluZ3M9e30pO2NvbnN0IG49dnQoKTtuLnRzPURhdGUubm93KCk7Y29uc3Qgcj1KU09OLnN0cmluZ2lmeShuKSxpPUxaU3RyaW5nLmNvbXByZXNzVG9CYXNlNjQociksbz1hdChpKTtpZighb3x8dHlwZW9mIG8hPSJvYmplY3QiKXtjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIOWtmOaho+agoemqjOWksei0pe+8jOi3s+i/h+acrOasoeWGmeWFpSIpO3JldHVybn1pLmxlbmd0aD5FU19CVURHRVQmJmNvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g6K6+572u6L+H5aSn77yIIitpLmxlbmd0aCsiIOWtl+iKgiA+ICIrRVNfQlVER0VUKyLvvInvvIzmnI3liqHlmajlj6/og73mi5LmlLbvvJror7flh4/lsJHooajmg4Uv5YWz6ZSu6K+NL+mfs+aViCIpLFBsYXllci5FeHRlbnNpb25TZXR0aW5ncy5QRVg9aSx0eXBlb2YgU2VydmVyUGxheWVyRXh0ZW5zaW9uU2V0dGluZ3NTeW5jPT0iZnVuY3Rpb24iJiZTZXJ2ZXJQbGF5ZXJFeHRlbnNpb25TZXR0aW5nc1N5bmMoIlBFWCIpO3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShEZSgpLGkpfWNhdGNoe31SZSgpfWNhdGNoKG4pe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g5L+d5a2Y5aSx6LSlOiIsbi5tZXNzYWdlKX19O2lmKGUpe0kmJihjbGVhclRpbWVvdXQoSSksST1udWxsKSx0KCk7cmV0dXJufUkmJmNsZWFyVGltZW91dChJKSxJPXNldFRpbWVvdXQoKCk9PntJPW51bGwsdCgpfSw2MDApfWxldCBYPW51bGwsWHQ9IiI7ZnVuY3Rpb24gVChlLHQ9ITEpe3RyeXtpZighUGxheWVyfHwhUGxheWVyLk9ubGluZVNoYXJlZFNldHRpbmdzKXJldHVybjtQbGF5ZXIuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYfHwoUGxheWVyLk9ubGluZVNoYXJlZFNldHRpbmdzLlBFWD17fSk7Y29uc3Qgbj1KU09OLnN0cmluZ2lmeShlKTtpZihuPT09WHQmJiF0KXJldHVybjtYdD1uO2NvbnN0IHI9KCk9Pntjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sZSk7aS50aW1lclZpc2liaWxpdHk9PT12b2lkIDAmJihpLnRpbWVyVmlzaWJpbGl0eT1sLnRpbWVyVmlzaWJpbGl0eXx8ImJvdGgiKSxQbGF5ZXIuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYLnN0YXRlPWksdHlwZW9mIFNlcnZlckFjY291bnRVcGRhdGU/LlF1ZXVlRGF0YT09ImZ1bmN0aW9uIiYmU2VydmVyQWNjb3VudFVwZGF0ZS5RdWV1ZURhdGEoe09ubGluZVNoYXJlZFNldHRpbmdzOlBsYXllci5PbmxpbmVTaGFyZWRTZXR0aW5nc30sITApO3RyeXtQKCJQRVhfU3RhdGVTeW5jIixbe1RhZzoiUGF5bG9hZCIsVmFsdWU6SlNPTi5zdHJpbmdpZnkoaSl9XSx7ZGVkdXBlS2V5OiJzdGF0ZToiKyhlPy5tb2RlfHwiIikrIjoiKyhlPy5yZW1haW5pbmdTZWN8fDApKyI6IisoZT8uZ2VsSG9sZGVyPz8iIiksZGVkdXBlTXM6NGUzfSl9Y2F0Y2h7fX07dD8oWCYmKGNsZWFyVGltZW91dChYKSxYPW51bGwpLHIoKSk6KFgmJmNsZWFyVGltZW91dChYKSxYPXNldFRpbWVvdXQoKCk9PntYPW51bGwscigpfSwxZTMpKX1jYXRjaHt9fWxldCBHPW51bGw7ZnVuY3Rpb24gZ2UoZT0hMSl7Y29uc3QgdD0oKT0+e3RyeXtpZighUGxheWVyfHwhUGxheWVyLk9ubGluZVNoYXJlZFNldHRpbmdzKXJldHVybjtjb25zdCBuPWwuZWRpdE1vZGVzfHx7fSxyPWE9PmE9PT0iYW55Inx8YT09PSJ3aGl0ZWxpc3QiLG89WyJ0aW1lIiwiYXV0b1JldmVydCIsInRpbWVyVmlzaWJpbGl0eSJdLnNvbWUoYT0+cihuW2FdKSkscz1QbGF5ZXIuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYPy5zdGF0ZTtQbGF5ZXIuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYPXt2Ok4sc3RhdGU6c3x8bnVsbCxlZGl0Om8sZWRpdE1vZGVzOnt0aW1lOm4udGltZXx8Im9mZiIsYXV0b1JldmVydDpuLmF1dG9SZXZlcnR8fCJvZmYiLHRpbWVyVmlzaWJpbGl0eTpuLnRpbWVyVmlzaWJpbGl0eXx8Im9mZiJ9LHdsOkFycmF5LmZyb20obC53aGl0ZWxpc3R8fFtdKX0sdHlwZW9mIFNlcnZlckFjY291bnRVcGRhdGU/LlF1ZXVlRGF0YT09ImZ1bmN0aW9uIiYmU2VydmVyQWNjb3VudFVwZGF0ZS5RdWV1ZURhdGEoe09ubGluZVNoYXJlZFNldHRpbmdzOlBsYXllci5PbmxpbmVTaGFyZWRTZXR0aW5nc30sITApO3RyeXtQKCJQRVhfU2hhcmVkU3luYyIsW3tUYWc6IlBheWxvYWQiLFZhbHVlOkpTT04uc3RyaW5naWZ5KHtlZGl0Om8sZWRpdE1vZGVzOnt0aW1lOm4udGltZXx8Im9mZiIsYXV0b1JldmVydDpuLmF1dG9SZXZlcnR8fCJvZmYiLHRpbWVyVmlzaWJpbGl0eTpuLnRpbWVyVmlzaWJpbGl0eXx8Im9mZiJ9LHdsOkFycmF5LmZyb20obC53aGl0ZWxpc3R8fFtdKX0pfV0se2RlZHVwZUtleToic2hhcmVkIixkZWR1cGVNczozZTN9KX1jYXRjaHt9fWNhdGNoe319O2lmKGUpe0cmJihjbGVhclRpbWVvdXQoRyksRz1udWxsKSx0KCk7cmV0dXJufUcmJmNsZWFyVGltZW91dChHKSxHPXNldFRpbWVvdXQoKCk9PntHPW51bGwsdCgpfSwyZTMpfWZ1bmN0aW9uIGZuKCl7dHJ5e2NvbnN0IGU9e3BsdWdpbjoiUEVYIix2Ok4scGV4OnZ0KCl9LHQ9bmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGUsbnVsbCwyKV0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb24ifSksbj1VUkwuY3JlYXRlT2JqZWN0VVJMKHQpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3IuaHJlZj1uLHIuZG93bmxvYWQ9IlBFWC1zZXR0aW5ncy5qc29uIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLHIuY2xpY2soKSxyLnJlbW92ZSgpLHNldFRpbWVvdXQoKCk9PlVSTC5yZXZva2VPYmplY3RVUkwobiksMWUzKX1jYXRjaChlKXtjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIOWvvOWHuuWksei0pToiLGUubWVzc2FnZSl9fWZ1bmN0aW9uIHBuKCl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2UudHlwZT0iZmlsZSIsZS5hY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24sLmpzb24iLGUub25jaGFuZ2U9KCk9Pntjb25zdCB0PWUuZmlsZXMmJmUuZmlsZXNbMF07aWYoIXQpcmV0dXJuO2NvbnN0IG49bmV3IEZpbGVSZWFkZXI7bi5vbmxvYWQ9KCk9Pnt0cnl7Y29uc3Qgcj1KU09OLnBhcnNlKFN0cmluZyhuLnJlc3VsdCkpLGk9ci5wZXh8fHI7R2UoYnQoUigpLGkpKSxfKCEwKSxnZSghMCksY29uc29sZS5sb2coIuKal++4j1tQRVhdIOiuvue9ruWvvOWFpeWujOaIkCIpfWNhdGNoKHIpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g5a+85YWl5aSx6LSlOiIsci5tZXNzYWdlKX19LG4ucmVhZEFzVGV4dCh0KX0sZS5jbGljaygpfWZ1bmN0aW9uIGlyKGUpe3RyeXtjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIOiuvue9ruW6lOeUqOWksei0pToiLGUubWVzc2FnZSl9Y2F0Y2h7fX1jb25zdCBtPXtJRExFOiJpZGxlIixXQUlUSU5HOiJ3YWl0aW5nIixCTE9DS0VEOiJibG9ja2VkIixFWENSRVRJTkc6ImV4Y3JldGluZyIsQkxBTks6ImJsYW5rIn0sZj17bW9kZTptLklETEUsZ2VsVHlwZToicGVyc29uYSIscGhhc2VTdGFydGVkQXQ6MCxwaGFzZUVuZHNBdDowLG93bmVyTWVtYmVyTnVtYmVyOm51bGwsZ2VsSWQ6bnVsbCxnZWxIb2xkZXI6bnVsbH07ZnVuY3Rpb24gQyhlLHQ9e30pe2YubW9kZT1lLGYucGhhc2VTdGFydGVkQXQ9RGF0ZS5ub3coKSxmLnBoYXNlRW5kc0F0PXQuZW5kc0F0Pz8wLHQub3duZXJNZW1iZXJOdW1iZXIhPT12b2lkIDAmJihmLm93bmVyTWVtYmVyTnVtYmVyPXQub3duZXJNZW1iZXJOdW1iZXIpLHQuZ2VsSWQhPT12b2lkIDAmJihmLmdlbElkPXQuZ2VsSWQpLHQuZ2VsSG9sZGVyIT09dm9pZCAwJiYoZi5nZWxIb2xkZXI9dC5nZWxIb2xkZXIpLHQuZ2VsVHlwZSE9PXZvaWQgMCYmKGYuZ2VsVHlwZT10LmdlbFR5cGUpfWZ1bmN0aW9uIG1uKCl7Y29uc3QgZT1mO3N3aXRjaChlLm1vZGUpe2Nhc2UgbS5JRExFOnJldHVybiB4KCJzdGF0ZUlkbGUiKTtjYXNlIG0uV0FJVElORzp7Y29uc3QgdD1NYXRoLm1heCgwLE1hdGgucm91bmQoKGUucGhhc2VFbmRzQXQtRGF0ZS5ub3coKSkvMWUzKSk7cmV0dXJuIHgoInN0YXRlV2FpdGluZyIse3NlYzp0fSl9Y2FzZSBtLkJMT0NLRUQ6e2NvbnN0IHQ9TWF0aC5tYXgoMCxNYXRoLnJvdW5kKChlLnBoYXNlRW5kc0F0LURhdGUubm93KCkpLzFlMykpO3JldHVybiB4KCJzdGF0ZUJsb2NrZWQiLHttaW46TWF0aC5mbG9vcih0LzYwKSxzZWM6dCU2MH0pfWNhc2UgbS5FWENSRVRJTkc6cmV0dXJuIHgoInN0YXRlRXhjcmV0aW5nIik7Y2FzZSBtLkJMQU5LOntjb25zdCB0PU1hdGgubWF4KDAsTWF0aC5yb3VuZCgoZS5waGFzZUVuZHNBdC1EYXRlLm5vdygpKS8xZTMpKTtyZXR1cm4gZS5nZWxUeXBlPT09Im5vcm1hbCI/eCgic3RhdGVCbGFua05vcm1hbCIse21pbjpNYXRoLmZsb29yKHQvNjApLHNlYzp0JTYwfSk6eCgic3RhdGVCbGFuayIse21pbjpNYXRoLmZsb29yKHQvNjApLHNlYzp0JTYwfSl9ZGVmYXVsdDpyZXR1cm4geCgic3RhdGVJZGxlIil9fWNvbnN0IGNlPVtdLEd0PTQwO2Z1bmN0aW9uIHluKGUpe3RyeXtjb25zdCB0PW5ldyBEYXRlLG49aT0+U3RyaW5nKGkpLnBhZFN0YXJ0KDIsIjAiKSxyPSJbIituKHQuZ2V0SG91cnMoKSkrIjoiK24odC5nZXRNaW51dGVzKCkpKyI6IituKHQuZ2V0U2Vjb25kcygpKSsiXSAiK2UubWFwKGk9PnR5cGVvZiBpPT0ic3RyaW5nIj9pOm9yKGkpKS5qb2luKCIgIik7Y2UucHVzaChyKSxjZS5sZW5ndGg+R3QmJmNlLnNwbGljZSgwLGNlLmxlbmd0aC1HdCl9Y2F0Y2h7fX1mdW5jdGlvbiBvcihlKXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWNhdGNoe3JldHVybiBTdHJpbmcoZSl9fWZ1bmN0aW9uIHAoLi4uZSl7eW4oZSksY29uc29sZS5sb2coIuKal++4j1tQRVhdIiwuLi5lKX1mdW5jdGlvbiBPZSguLi5lKXt5bihlKSxjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIiwuLi5lKX1mdW5jdGlvbiBWdChlLHQpe3JldHVybiFlfHwhdD8hMTpTdHJpbmcoZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gbmUoZSx0PSIiKXt0cnl7cmV0dXJuIENoYXJhY3Rlck5pY2tuYW1lKGUpfWNhdGNoe3JldHVybiB0fX1mdW5jdGlvbiBhcihlKXtpZighZXx8dHlwZW9mIGUhPSJzdHJpbmciKXJldHVybiIiO2lmKCFlLnN0YXJ0c1dpdGgoIlwwIikpcmV0dXJuIGU7dHJ5e3JldHVybiBBcnJheS5mcm9tKGUuc2xpY2UoMSwyMDApKS5mbGF0TWFwKHQ9Pntjb25zdCBuPXQuY2hhckNvZGVBdCgwKSxyPU1hdGguZmxvb3Iobi8yNTYpLGk9bi1yKjI1NjtyZXR1cm5bcixpXS5maWx0ZXIoQm9vbGVhbikubWFwKG89PlN0cmluZy5mcm9tQ2hhckNvZGUobykpfSkuam9pbigiIil9Y2F0Y2h7cmV0dXJuIiJ9fWZ1bmN0aW9uIHN0KGUpe2lmKCFlKXJldHVybiIiO2NvbnN0IHQ9W107dHJ5e3R5cGVvZiBlLkNyYWZ0Py5OYW1lPT0ic3RyaW5nIiYmdC5wdXNoKGUuQ3JhZnQuTmFtZSksdHlwZW9mIGUuQ3JhZnQ/LkRlc2NyaXB0aW9uPT0ic3RyaW5nIiYmdC5wdXNoKGFyKGUuQ3JhZnQuRGVzY3JpcHRpb24pKSx0eXBlb2YgZS5EZXNjcmlwdGlvbj09InN0cmluZyImJnQucHVzaChlLkRlc2NyaXB0aW9uKSx0eXBlb2YgZS5OYW1lPT0ic3RyaW5nIiYmdC5wdXNoKGUuTmFtZSksdHlwZW9mIGUuQXNzZXQ/Lk5hbWU9PSJzdHJpbmciJiZ0LnB1c2goZS5Bc3NldC5OYW1lKSx0eXBlb2YgZS5Bc3NldD8uRGVzY3JpcHRpb249PSJzdHJpbmciJiZ0LnB1c2goZS5Bc3NldC5EZXNjcmlwdGlvbil9Y2F0Y2h7fXJldHVybiB0LmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9bGV0IGFlPW51bGw7Y29uc3QgS3Q9bmV3IE1hcDtmdW5jdGlvbiBobigpe3RyeXtpZighYWUpe2NvbnN0IGU9d2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtpZighZSlyZXR1cm4gbnVsbDthZT1uZXcgZX1pZihhZS5zdGF0ZT09PSJzdXNwZW5kZWQiKXRyeXthZS5yZXN1bWUoKX1jYXRjaHt9cmV0dXJuIGFlfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBzcihlKXt0cnl7Y29uc3QgdD1TdHJpbmcoZSkubWF0Y2goL15odHRwczpcL1wvY2RuXC5qc2RlbGl2clwubmV0XC9naFwvKFteL10rKVwvKFteQF0rKUAoW14vXSspXC8oLispJC8pO3JldHVybiB0PyJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vIit0WzFdKyIvIit0WzJdKyIvIit0WzNdKyIvIit0WzRdOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEh0KGUsdCl7dHJ5e2NvbnN0IG49aG4oKTtpZighbnx8IWUpcmV0dXJuITE7Y29uc3Qgcj1uLmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3IuYnVmZmVyPWU7Y29uc3QgaT1uLmNyZWF0ZUdhaW4oKTtyZXR1cm4gaS5nYWluLnZhbHVlPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0fHwxKSksci5jb25uZWN0KGkpLGkuY29ubmVjdChuLmRlc3RpbmF0aW9uKSxyLnN0YXJ0KCksITB9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIEV0KGUsdD0xKXt0cnl7aWYoIWUpcmV0dXJuO2NvbnN0IG49aG4oKTtpZighbil7dHlwZW9mIEF1ZGlvUGxheVNvdW5kRWZmZWN0PT0iZnVuY3Rpb24iJiZBdWRpb1BsYXlTb3VuZEVmZmVjdChTdHJpbmcoZSkpO3JldHVybn1jb25zdCByPVN0cmluZyhlKSxpPUt0LmdldChyKTtpZihpKXtIdChpLHQpO3JldHVybn1jb25zdCBvPVtyLHNyKHIpXS5maWx0ZXIoQm9vbGVhbik7bGV0IHM9MDtjb25zdCBhPSgpPT57aWYocz49by5sZW5ndGgpcmV0dXJuO2NvbnN0IGM9b1tzKytdO2ZldGNoKGMpLnRoZW4odT0+e2lmKCF1Lm9rKXRocm93IG5ldyBFcnJvcigiSFRUUCAiK3Uuc3RhdHVzKTtyZXR1cm4gdS5hcnJheUJ1ZmZlcigpfSkudGhlbih1PT5uLmRlY29kZUF1ZGlvRGF0YSh1KSkudGhlbih1PT57S3Quc2V0KHIsdSksSHQodSx0KX0pLmNhdGNoKCgpPT5hKCkpfTthKCl9Y2F0Y2h7fX1mdW5jdGlvbiBnbigpe3JldHVybiAuNTUrTWF0aC5tYXgoMSxNYXRoLm1pbig1LGw/LmVmZmVjdExldmVsfHwzKSkqLjA5fWZ1bmN0aW9uIHhuKGUpe3RyeXtpZihsPy5zb3VuZE9uJiZsLnNvdW5kT25bZV09PT0hMSlyZXR1cm4gbnVsbDtjb25zdCB0PWw/LnNvdW5kcz8uW2VdO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIG51bGw7Y29uc3Qgbj10W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp0Lmxlbmd0aCldO3JldHVybiBuJiZFdChTdHJpbmcobiksZ24oKSksbnx8bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gUGUoZSl7dHJ5e2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYoUGxheWVyJiZQbGF5ZXIuTWVtYmVyTnVtYmVyPT09ZSlyZXR1cm4gUGxheWVyO2lmKHR5cGVvZiBDaGF0Um9vbUNoYXJhY3RlcjwidSImJkFycmF5LmlzQXJyYXkoQ2hhdFJvb21DaGFyYWN0ZXIpKXJldHVybiBDaGF0Um9vbUNoYXJhY3Rlci5maW5kKHQ9PnQmJnQuTWVtYmVyTnVtYmVyPT09ZSl8fG51bGx9Y2F0Y2h7fXJldHVybiBudWxsfWxldCAkZT0wLFN0PTA7ZnVuY3Rpb24gQihlKXskZT1NYXRoLm1heCgwLGV8fDApfWZ1bmN0aW9uIGJuKCl7JGU9MH1mdW5jdGlvbiB3dChlKXtTdD1NYXRoLm1heCgwLE1hdGgubWluKDMsZXx8MCkpfWZ1bmN0aW9uIHZuKCl7U3Q9MH1mdW5jdGlvbiBscigpe2lmKCRlPD0wKXJldHVybiAwO3RyeXtpZihQbGF5ZXI/LkdyYXBoaWNzU2V0dGluZ3M/LkFsbG93Qmx1cj09PSExKXJldHVybiAwfWNhdGNoe31yZXR1cm4gJGV9ZnVuY3Rpb24gY3IoKXtyZXR1cm4gU3R9ZnVuY3Rpb24gdXIoZSl7aWYoZSl0cnl7ZS5ob29rRnVuY3Rpb24oIlBsYXllci5HZXRCbHVyTGV2ZWwiLDQsKHQsbik9PntsZXQgcj0wO3RyeXtyPW4odCl8fDB9Y2F0Y2h7fWNvbnN0IGk9bHIoKTtyZXR1cm4gaT5yP2k6cn0pLGUuaG9va0Z1bmN0aW9uKCJQbGF5ZXIuR2V0QmxpbmRMZXZlbCIsNCwodCxuKT0+e2xldCByPTA7dHJ5e3I9bih0KXx8MH1jYXRjaHt9Y29uc3QgaT1jcigpO3JldHVybiBpPnI/aTpyfSl9Y2F0Y2godCl7Y29uc29sZS53YXJuKCLimpfvuI9bUEVYXSBHZXRCbHVyTGV2ZWwg5oyC6ZKp5aSx6LSlOiIsdC5tZXNzYWdlKX19Y29uc3QgcWU9InBleC1vdmVybGF5IjtsZXQgaj1udWxsLGZlPW51bGwseGU9ITEsanQ9Myx3PW51bGwsenQ9ITE7ZnVuY3Rpb24gWSgpe3JldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiTWFpbkNhbnZhcyIpfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJjYW52YXMiKX1mdW5jdGlvbiBQdCgpe2lmKGomJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHFlKSlyZXR1cm4gajtsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChxZSk7cmV0dXJuIGV8fChlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuaWQ9cWUsT2JqZWN0LmFzc2lnbihlLnN0eWxlLHtwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjAiLHRvcDoiMCIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIscG9pbnRlckV2ZW50czoibm9uZSIsekluZGV4OiI5OTk5OCIsb3ZlcmZsb3c6ImhpZGRlbiJ9KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpKSxqPWUsZX1mdW5jdGlvbiBFbigpe2lmKCF6dCl7enQ9ITA7dHJ5e2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLmlkPSJwZXgtYW5pbS1zdHlsZXMiLGUudGV4dENvbnRlbnQ9IkBrZXlmcmFtZXMgcGV4RGl6enlGbGFzaHswJSwxMDAle29wYWNpdHk6MC4wNH0zMCV7b3BhY2l0eTowLjE2fTYwJXtvcGFjaXR5OjAuMjR9ODUle29wYWNpdHk6MC4xMH19QGtleWZyYW1lcyBwZXhEaXp6eVB1bHNlezAlLDEwMCV7b3BhY2l0eTowLjI1fTQwJXtvcGFjaXR5OjAuODV9NzAle29wYWNpdHk6MC4zNX19Iixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfWNhdGNoe319fWZ1bmN0aW9uIFNuKGUsdD0zKXt6KCksanQ9TWF0aC5tYXgoMSxNYXRoLm1pbig1LHR8fDMpKSx4ZT0hMCxFbigpO2NvbnN0IG49UHQoKSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtwb2ludGVyLWV2ZW50czpub25lO2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNTAlLCB0cmFuc3BhcmVudCA0MiUsIHJnYmEoMjQyLDEyMywxNjgsMC41NSkpO2FuaW1hdGlvbjpwZXhEaXp6eUZsYXNoIDE0MDBtcyBlYXNlLWluLW91dCBpbmZpbml0ZTsiLG4uYXBwZW5kQ2hpbGQocik7Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChlbGxpcHNlIGF0IDUwJSA1MCUsIHRyYW5zcGFyZW50IDM1JSwgcmdiYSgxNSw4LDI4LDAuNDIpIDEwMCUpO2FuaW1hdGlvbjpwZXhEaXp6eVB1bHNlIDE0MDBtcyBlYXNlLWluLW91dCBpbmZpbml0ZTsiLG4uYXBwZW5kQ2hpbGQoaSk7Y29uc3Qgbz0xNDAwLHM9ODAwLGE9TWF0aC5tYXgoMixNYXRoLnJvdW5kKGUvbykpO2xldCBjPTAsdT0wO2NvbnN0IGQ9aD0+e2lmKHhlKXtpZihoLXU+PTEwMCl7dT1oO2NvbnN0IEE9aCVvL28saz1NYXRoLm1pbigxLGMvTWF0aC5tYXgoMSxhLTEpKSxEPWglbzxzP01hdGguc2luKEEvKHMvbykqTWF0aC5QSSk6MDtCKEQ+LjAyPzErMi4yKmsqKGp0LzMpKkQ6LjMpLEE8LjA1JiZjPGEmJmMrK31mZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCl9fTtmZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCl9ZnVuY3Rpb24gZHIoZT0xNTAwKXtpZigheGUpcmV0dXJuO2NvbnN0IHQ9cGVyZm9ybWFuY2Uubm93KCk7bGV0IG49MDtjb25zdCByPWk9PntpZigheGUpcmV0dXJuO2NvbnN0IG89TWF0aC5taW4oMSwoaS10KS9lKTtpLW4+PTEwMCYmKG49aSxCKC40KigxLW8pKSksbzwxP3JlcXVlc3RBbmltYXRpb25GcmFtZShyKTp6KCl9O3JlcXVlc3RBbmltYXRpb25GcmFtZShyKX1mdW5jdGlvbiB6KCl7eGU9ITEsZmUmJihjYW5jZWxBbmltYXRpb25GcmFtZShmZSksZmU9bnVsbCksQigwKTtjb25zdCBlPVkoKTtpZihlKXtlLnN0eWxlLnRyYW5zaXRpb249IiIsZS5zdHlsZS50cmFuc2Zvcm09IiI7Y29uc3QgdD1lLnN0eWxlLmZpbHRlcnx8IiI7ZS5zdHlsZS5maWx0ZXI9dC5yZXBsYWNlKC9ibHVyXChbXildKlwpL2csIiIpLnRyaW0oKX1qJiYoai5pbm5lckhUTUw9IiIpfWxldCBwZT1udWxsLF9lPSExO2Z1bmN0aW9uIGZyKGUsdD0zLG49ITAscj0hMCl7aWYocmUoKSwhbiYmIXIpcmV0dXJuO2lmKF9lPSEwLEVuKCksbil7Y29uc3QgYT1QdCgpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjpmaXhlZDtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA1MCUsIHRyYW5zcGFyZW50IDQwJSwgcmdiYSgyNDIsMTIzLDE2OCwwLjYyKSk7YW5pbWF0aW9uOnBleERpenp5Rmxhc2ggOTAwbXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IixhLmFwcGVuZENoaWxkKGMpfXImJkIoMysodHx8MykqLjgpO2NvbnN0IGk9WSgpLG89MysodHx8MykqMS4yLHM9KCk9PntpZihfZSl7aWYoaSYmbil7Y29uc3QgYT0oTWF0aC5yYW5kb20oKS0uNSkqbyoyLGM9KE1hdGgucmFuZG9tKCktLjUpKm8qMjtpLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7YS50b0ZpeGVkKDEpfXB4LCAke2MudG9GaXhlZCgxKX1weClgfXBlPXJlcXVlc3RBbmltYXRpb25GcmFtZShzKX19O3BlPXJlcXVlc3RBbmltYXRpb25GcmFtZShzKSxzZXRUaW1lb3V0KCgpPT57X2UmJnJlKCl9LE1hdGgubWF4KDUwMCxlKSl9ZnVuY3Rpb24gcmUoKXtfZT0hMSxwZSYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHBlKSxwZT1udWxsKTtjb25zdCBlPVkoKTtlJiYoZS5zdHlsZS50cmFuc2Zvcm09IiIpLGomJihqLmlubmVySFRNTD0iIil9bGV0IFZlPSExO2Z1bmN0aW9uIE10KGU9InN1cnJvdW5kIil7VmU9ITA7Y29uc3QgdD1ZKCk7aWYodCl7Y29uc3Qgcj10LnN0eWxlLmZpbHRlcnx8IiI7ci5pbmNsdWRlcygiZ3JheXNjYWxlIil8fCh0LnN0eWxlLmZpbHRlcj0ocj9yKyIgIjoiIikrImdyYXlzY2FsZSgxKSIpfWNvbnN0IG49UHQoKTtpZih3JiZ3LnJlbW92ZSgpLGUhPT0iYWxsIil7aWYodz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx3LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OTk3OyIsZT09PSJzdXJyb3VuZCIpe2NvbnN0IGk9LjMrLjEzKihNYXRoLm1heCgxLE1hdGgubWluKDUsbC5lZmZlY3RMZXZlbHx8MykpLTEpO3cuc3R5bGUuYmFja2dyb3VuZD1gcmFkaWFsLWdyYWRpZW50KGVsbGlwc2UgYXQgNTAlIDU1JSwgdHJhbnNwYXJlbnQgMCUsIHRyYW5zcGFyZW50IDI4JSwgcmdiYSg1LDUsMTAsJHtpLnRvRml4ZWQoMil9KSA1NSUsIHJnYmEoNSw1LDEwLCR7TWF0aC5taW4oLjk1LGkrLjI3KS50b0ZpeGVkKDIpfSkgMTAwJSlgfWVsc2Ugdy5zdHlsZS5iYWNrZ3JvdW5kPSJyYWRpYWwtZ3JhZGllbnQoZWxsaXBzZSBhdCA1MCUgNjAlLCB0cmFuc3BhcmVudCAwJSwgdHJhbnNwYXJlbnQgMTAlLCByZ2JhKDUsNSwxMCwwLjcpIDMwJSwgcmdiYSg1LDUsMTAsMC45NCkgMTAwJSkiO24uYXBwZW5kQ2hpbGQodyl9fWZ1bmN0aW9uIHByKCl7aWYoVmUpdHJ5e2NvbnN0IGU9WSgpO2lmKCFlKXJldHVybjtjb25zdCB0PWUuc3R5bGUuZmlsdGVyfHwiIjt0LmluY2x1ZGVzKCJncmF5c2NhbGUiKXx8KGUuc3R5bGUuZmlsdGVyPSh0P3QrIiAiOiIiKSsiZ3JheXNjYWxlKDEpIil9Y2F0Y2h7fX1mdW5jdGlvbiBtcigpe1ZlPSExO2NvbnN0IGU9WSgpO2lmKGUpe2NvbnN0IHQ9ZS5zdHlsZS5maWx0ZXJ8fCIiO2Uuc3R5bGUuZmlsdGVyPXQucmVwbGFjZSgvZ3JheXNjYWxlXCgxXCkvZywiIikucmVwbGFjZSgvXHMrL2csIiAiKS50cmltKCl9dyYmKHcucmVtb3ZlKCksdz1udWxsKX1mdW5jdGlvbiB5cihlPTgwMCx0KXtWZT0hMTtjb25zdCBuPU1hdGgubWF4KDEsZXx8ODAwKTt0cnl7Y29uc3Qgcj1ZKCk7aWYocil7Y29uc3QgaT1yLnN0eWxlLmZpbHRlcnx8IiI7aS5pbmNsdWRlcygiZ3JheXNjYWxlIikmJihyLnN0eWxlLnRyYW5zaXRpb249ImZpbHRlciAiK24rIm1zIGVhc2UiLHIuc3R5bGUuZmlsdGVyPWkucmVwbGFjZSgvZ3JheXNjYWxlXCgxXCkvZywiIikucmVwbGFjZSgvXHMrL2csIiAiKS50cmltKCksc2V0VGltZW91dCgoKT0+e3RyeXtyLnN0eWxlLnRyYW5zaXRpb249IiJ9Y2F0Y2h7fX0sbis1MCkpfX1jYXRjaHt9dHJ5e2lmKHcpe3cuc3R5bGUudHJhbnNpdGlvbj0ib3BhY2l0eSAiK24rIm1zIGVhc2UiLHcuc3R5bGUub3BhY2l0eT0iMCI7Y29uc3Qgcj13O3NldFRpbWVvdXQoKCk9Pnt0cnl7ci5yZW1vdmUoKX1jYXRjaHt9fSxuKzUwKSx3PW51bGx9fWNhdGNoe31zZXRUaW1lb3V0KCgpPT57dHJ5e3QmJnQoKX1jYXRjaHt9fSxuKX1mdW5jdGlvbiBocigpe3ooKSxyZSgpLG1yKCksYm4oKX1sZXQgbWU9bnVsbCx5ZT1udWxsLE5lPW51bGwsa2U9bnVsbCx3bj0hMTtmdW5jdGlvbiBQbigpe3RyeXtpZih0eXBlb2YgV2FyZHJvYmVHZXRFeHByZXNzaW9uPT0iZnVuY3Rpb24iKXJldHVybiBXYXJkcm9iZUdldEV4cHJlc3Npb24oUGxheWVyKXx8bnVsbH1jYXRjaHt9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZ3IoZSl7Y29uc3QgdD1lLkV5ZXM/P251bGwsbj1lLkV5ZXMyIT09dm9pZCAwP2UuRXllczI6dDtyZXR1cm57RXllYnJvd3M6ZS5FeWVicm93cz8/bnVsbCxFeWVzOnQsRXllczI6bixNb3V0aDplLk1vdXRoPz9udWxsLEJsdXNoOmUuQmx1c2g/P251bGws5Y+z55y8X0x1emk6dCzlt6bnnLxfTHV6aTpufX1jb25zdCB4cj1bIkV5ZXMiLCJFeWVzMiIsIkVtb3RpY29uIl07ZnVuY3Rpb24gQXQoZSx0KXt0cnl7aWYoIVBsYXllcj8uQXBwZWFyYW5jZSlyZXR1cm47Y29uc3Qgbj1bXTtmb3IoY29uc3RbcixpXW9mIE9iamVjdC5lbnRyaWVzKGUpKXRyeXtpZihpPT1udWxsKWNvbnRpbnVlO2NvbnN0IG89UGxheWVyLkFwcGVhcmFuY2UuZmluZChhPT5hLkFzc2V0Lkdyb3VwLk5hbWU9PT1yKTtpZighbyljb250aW51ZTtjb25zdCBzPW8uQXNzZXQ/Lkdyb3VwPy5BbGxvd0V4cHJlc3Npb247aWYoQXJyYXkuaXNBcnJheShzKSYmIXMuaW5jbHVkZXMoaSl8fChvLlByb3BlcnR5fHwoby5Qcm9wZXJ0eT17fSksby5Qcm9wZXJ0eS5FeHByZXNzaW9uPT09aSkpY29udGludWU7by5Qcm9wZXJ0eS5FeHByZXNzaW9uPWksbi5wdXNoKHIpfWNhdGNoe31pZighbi5sZW5ndGgpcmV0dXJuO3RyeXt0eXBlb2YgQ2hhcmFjdGVyUmVmcmVzaD09ImZ1bmN0aW9uIiYmQ2hhcmFjdGVyUmVmcmVzaChQbGF5ZXIsITEsITEpfWNhdGNoe31pZih0KXtmb3IoY29uc3QgciBvZiBuKWlmKHhyLmluY2x1ZGVzKHIpKXRyeXt0eXBlb2YgQ2hhdFJvb21DaGFyYWN0ZXJFeHByZXNzaW9uVXBkYXRlPT0iZnVuY3Rpb24iJiZDaGF0Um9vbUNoYXJhY3RlckV4cHJlc3Npb25VcGRhdGUoUGxheWVyLHIpfWNhdGNoe319fWNhdGNoe319ZnVuY3Rpb24gbHQoZSl7dHJ5e2lmKCFlKXJldHVybjttZT09PW51bGwmJihtZT1QbigpKSxBdChncihlKSwhMCl9Y2F0Y2h7fX1mdW5jdGlvbiBfdChlPW51bGwpe3RyeXtpZih5ZT09PW51bGwpe2NvbnN0IG49UG4oKTt5ZT1uPy5FeWVzPz9udWxsLE5lPW4/LkV5ZXMyPz9udWxsLGtlPW4/LkVtb3RpY29uPz9udWxsfWNvbnN0IHQ9e307aWYoZSlmb3IoY29uc3RbbixyXW9mIE9iamVjdC5lbnRyaWVzKGUpKXIhPW51bGwmJih0W25dPXIpO3QuRXllcz0iRGF6ZWQiLHQuRXllczI9IkRhemVkIixBdCh0LCEwKX1jYXRjaHt9fWZ1bmN0aW9uIEtlKCl7dHJ5e2NvbnN0IGU9e307aWYoeWUhPT1udWxsJiYoZS5FeWVzPXllKSxOZSE9PW51bGwmJihlLkV5ZXMyPU5lKSxrZSE9PW51bGwmJihlLkVtb3RpY29uPWtlKSxtZSlmb3IoY29uc3RbdCxuXW9mIE9iamVjdC5lbnRyaWVzKG1lKSluIT1udWxsJiZlW3RdPT09dm9pZCAwJiYoZVt0XT1uKTtBdChlLCEwKX1jYXRjaHt9bWU9bnVsbCx5ZT1udWxsLE5lPW51bGwsa2U9bnVsbH1sZXQgSz0hMSxzZT1udWxsO2Z1bmN0aW9uIEhlKGUpe0s9ISFlO3RyeXtLJiZQbGF5ZXI/KHNlPT09bnVsbCYmKHNlPVBsYXllci5CbGlua0ZhY3RvciksUGxheWVyLkJsaW5rRmFjdG9yPTk5OTk5OSx0eXBlb2YgUG9zZVJlZnJlc2g9PSJmdW5jdGlvbiImJlBvc2VSZWZyZXNoKFBsYXllcikpOiFLJiZQbGF5ZXImJihzZSE9PW51bGwmJihQbGF5ZXIuQmxpbmtGYWN0b3I9c2Usc2U9bnVsbCksdHlwZW9mIFBvc2VSZWZyZXNoPT0iZnVuY3Rpb24iJiZQb3NlUmVmcmVzaChQbGF5ZXIpKX1jYXRjaHt9fWxldCBJZT1udWxsO2Z1bmN0aW9uIGJyKGUpe3RyeXtjb25zdCB0PWU/Lk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdPy5zdGF0ZTtpZih0JiZ0Lm1vZGU9PT0iYmxhbmsiJiZ0LnR5cGUhPT0ibm9ybWFsIilyZXR1cm4gSWU9ZS5CbGlua0ZhY3RvcixlLkJsaW5rRmFjdG9yPTk5OTk5OSwhMH1jYXRjaHt9cmV0dXJuITF9ZnVuY3Rpb24gdnIoZSl7aWYoSWUhPT1udWxsKXt0cnl7ZS5CbGlua0ZhY3Rvcj1JZX1jYXRjaHt9SWU9bnVsbH19ZnVuY3Rpb24gRXIoZSl7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9bj0+e3RyeXtlLmhvb2tGdW5jdGlvbihuLDQsKHIsaSk9Pks/ITE6aShyKSl9Y2F0Y2h7fX07dCgiUGxheWVyLkNhbldhbGsiKSx0KCJQbGF5ZXIuQ2FuSW50ZXJhY3QiKSx0KCJQbGF5ZXIuQ2FuQ2hhbmdlT3duQ2xvdGhlcyIpLHQoIlBsYXllci5DYW5LbmVlbCIpO3RyeXtlLmhvb2tGdW5jdGlvbigiQWN0aXZpdHlDaGVja1ByZXJlcXVpc2l0ZXMiLDQsKG4scik9Pntjb25zdFtpLG9dPW47cmV0dXJuIG8mJnR5cGVvZiBvLklzUGxheWVyPT0iZnVuY3Rpb24iJiZvLklzUGxheWVyKCkmJks/ITE6cihuKX0pfWNhdGNoe310cnl7ZS5ob29rRnVuY3Rpb24oIlBvc2VSZWZyZXNoIiw0LChuLHIpPT57Y29uc3QgaT1yKG4pO3RyeXtjb25zdCBvPW4mJm5bMF07byYmdHlwZW9mIG8uSXNQbGF5ZXI9PSJmdW5jdGlvbiImJm8uSXNQbGF5ZXIoKSYmSyYmKG8uQWxsb3dlZEFjdGl2ZVBvc2VNYXBwaW5nPXtCb2R5VXBwZXI6W10sQm9keUxvd2VyOltdLEJvZHlGdWxsOltdfSl9Y2F0Y2h7fXJldHVybiBpfSl9Y2F0Y2h7fXRyeXtlLmhvb2tGdW5jdGlvbigiQ2hhcmFjdGVyU2V0RmFjaWFsRXhwcmVzc2lvbiIsNCwobixyKT0+e2NvbnN0IGk9cihuKTt0cnl7Y29uc3Qgbz1uJiZuWzBdO2lmKG8mJnR5cGVvZiBvLklzUGxheWVyPT0iZnVuY3Rpb24iJiZvLklzUGxheWVyKCkmJkspe2NvbnN0IHM9bC5leHByZXNzaW9uc3x8e307X3Qocy5ibGFua3x8cy5leGNyZXRlKX19Y2F0Y2h7fXJldHVybiBpfSl9Y2F0Y2h7fX1jb25zdCBXdD1bIiVOQU1FJeWDj+S4quacqOWktOS4gOagt+S4gOWKqOS4jeWKqOKApiIsIiVOQU1FJei6q+S9k+WDteWcqOWOn+WcsO+8jOavq+aXoOWPjeW6lOKApiIsIiVOQU1FJeWPjOebruaXoOelnu+8jOWRhuWRhuWcsOadteWcqOmCo+mHjOKApiIsIiVOQU1FJeS7v+S9m+iiq+aKvei1sOS6humtgu+8jOS4gOWKqOS4jeWKqOKApiIsIiVOQU1FJeWDj+Wdj+aOieeahOacqOWBtuS4gOagt+WDteS9j+S6huKApiIsIiVOQU1FJeWFqOi6q+WDteehrO+8jOi/nuaJi+aMh+WktOmDveS4jeWKqOS4gOS4i+KApiJdO2Z1bmN0aW9uIGplKGUpe3duPSEhZX1mdW5jdGlvbiBTcihlKXtpZihlKXRyeXtlLmhvb2tGdW5jdGlvbigiQ2hhdFJvb21TZW5kQ2hhdCIsNSwodCxuKT0+e2lmKCF3bilyZXR1cm4gbih0KTtsZXQgcj0iIjt0cnl7cj0oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIklucHV0Q2hhdCIpfHx7fSkudmFsdWV8fCIifWNhdGNoe31jb25zdCBpPXIudHJpbSgpO2lmKCFpfHwvXlsvKCouXS8udGVzdChpKSlyZXR1cm4gbih0KTt0cnl7aWYodHlwZW9mIENoYXRSb29tVGFyZ2V0TWVtYmVyTnVtYmVyPT0ibnVtYmVyIiYmQ2hhdFJvb21UYXJnZXRNZW1iZXJOdW1iZXI+PTApcmV0dXJuIG4odCl9Y2F0Y2h7fWNvbnN0IG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIklucHV0Q2hhdCIpO2lmKG8pe28udmFsdWU9IiI7dHJ5e28uZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSl9Y2F0Y2h7fX1jb25zdCBzPVd0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpXdC5sZW5ndGgpXTtzZXRUaW1lb3V0KCgpPT57dHJ5e2Iocyl9Y2F0Y2h7fX0sMmUzKX0pfWNhdGNoKHQpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g56aB6KiA5oyC6ZKp5aSx6LSlOiIsdC5tZXNzYWdlKX19bGV0IGN0PVtdO2Z1bmN0aW9uIHplKCl7Zm9yKGNvbnN0IGUgb2YgY3QpY2xlYXJUaW1lb3V0KGUpO2N0PVtdfWZ1bmN0aW9uIHdyKGUpe3JldHVybiBNYXRoLm1heCgxLE1hdGgubWluKDUsTWF0aC5mbG9vcigoZXx8MCkvMTApKSl9ZnVuY3Rpb24gUHIoZSx0KXtjb25zdCBuPVtdO2ZvcihsZXQgcj0xO3I8PXQ7cisrKW4ucHVzaChlKnIvKHQrMSkpO3JldHVybiBufWZ1bmN0aW9uIFV0KGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZSl8fGUubGVuZ3RoPT09MClyZXR1cm5bXTtjb25zdCBuPWUuc2xpY2UoKSxyPVtdO2Zvcig7ci5sZW5ndGg8dDspe24ubGVuZ3RofHxuLnB1c2goLi4uZSk7Y29uc3QgaT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbi5sZW5ndGgpO3IucHVzaChuLnNwbGljZShpLDEpWzBdKX1yZXR1cm4gcn1mdW5jdGlvbiBNcihlLHQpe2lmKHplKCksISh0PjApKXJldHVybjtjb25zdCBuPXdyKHQvMWUzKSxyPVByKHQsbiksaT1VdChsLnNvdW5kcz8ud2FpdHx8W10sbiksbz1VdChsLmV4cHJlc3Npb25zPy53YWl0fHxbXSxuKTshaS5sZW5ndGgmJiFvLmxlbmd0aHx8ci5mb3JFYWNoKChzLGEpPT57Y3QucHVzaChzZXRUaW1lb3V0KCgpPT57aWYoIWUoKSlyZXR1cm47Y29uc3QgYz1pW2FdO2MmJmw/LnNvdW5kT24/LndhaXQhPT0hMSYmKEV0KFN0cmluZyhjKSksTnQoIndhaXQiLGMpKTtjb25zdCB1PW9bYV07dSYmbHQodSl9LHMpKX0pfWZ1bmN0aW9uIE50KGUsdCl7aWYoISghdHx8IWw/LnNvdW5kT258fGwuc291bmRPbltlXT09PSExKSl0cnl7UCgiUEVYX1NvdW5kIixbe1RhZzoiS2luZCIsVmFsdWU6U3RyaW5nKGUpfSx7VGFnOiJJZCIsVmFsdWU6U3RyaW5nKHQpfV0pfWNhdGNoe319ZnVuY3Rpb24gQXIoKXtpZShlPT57dHJ5e2lmKGU/LlR5cGUhPT0iSGlkZGVuInx8ZS5Db250ZW50IT09IlBFWF9Tb3VuZCIpcmV0dXJuO2NvbnN0IHQ9TnVtYmVyKGUuU2VuZGVyKTtpZighdHx8dD09PVBsYXllcj8uTWVtYmVyTnVtYmVyfHwhbC5oZWFyUmVtb3RlU291bmRzKXJldHVybjtjb25zdCByPShBcnJheS5pc0FycmF5KGUuRGljdGlvbmFyeSk/ZS5EaWN0aW9uYXJ5OltdKS5maW5kKGk9Pmk/LlRhZz09PSJJZCIpO3ImJihyLlZhbHVlPz9yLk5hbWUpJiZFdChTdHJpbmcoci5WYWx1ZT8/ci5OYW1lKSxnbigpKX1jYXRjaHt9fSkscCgi562J5b6F6Z+z5pWIL+ihqOaDheezu+e7n+W3suWQr+eUqO+8iOauteaVsOmaj+etieW+heenkuaVsO+8jOmfs+aViOS4juihqOaDheWQjOatpe+8iSIpfWxldCAkPTAsTT1udWxsO2NvbnN0IF9yPTgwMDtmdW5jdGlvbiBNbigpe3RyeXtyZXR1cm4hIUludmVudG9yeUdldChQbGF5ZXIsIkl0ZW1CdXR0Iil9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIHV0KGUpe2lmKGYubW9kZSE9PW0uSURMRSlpZihmLm1vZGU9PT1tLkJMQU5LJiZmLmdlbFR5cGU9PT0ibm9ybWFsIilwKCLmma7pgJrlh53og7bnirbmgIHkuK3lho3mrKHllp3kuIvvvJrmuIXmjonml6flh53og7bvvIzph43mlrDlvIDlp4siKSx6ZSgpLE0mJihjbGVhclRpbWVvdXQoTSksTT1udWxsKSxmLmdlbElkJiZUdChmLmdlbElkKSxDKG0uSURMRSk7ZWxzZSByZXR1cm4gcCgi5bey5pyJ5rS75Yqo54q25oCB77yM5b+955Wl5pys5qyh6Kem5Y+RIiksITE7JCsrO2NvbnN0IHQ9JCxuPU1hdGgubWF4KDAsbC53YWl0U2Vjb25kcykqMWUzO3JldHVybiBDKG0uV0FJVElORyx7Z2VsVHlwZTplLGVuZHNBdDpEYXRlLm5vdygpK259KSxuPjAmJihsLmZ4RGl6enkmJlNuKG4sbC5lZmZlY3RMZXZlbCksTXIoKCk9PnQ9PT0kLG4pKSxUKHttb2RlOm0uV0FJVElORyx0eXBlOmUscmVtYWluaW5nU2VjOk1hdGguY2VpbChuLzFlMyksb3duZXI6UGxheWVyPy5NZW1iZXJOdW1iZXJ9LCEwKSxiKGU9PT0icGVyc29uYSI/IiVOQU1FJeWWneS4i+S6huS7gOS5iOWlh+aAqueahOS4nOilv++8jOS4gOmYteW8guagt+eahOaEn+iniea2jOS6huS4iuadpeKApiI6IiVOQU1FJeWWneS4i+S6huS7gOS5iOm7j+eziueziueahOS4nOilv+KApiIpLCEwfWZ1bmN0aW9uIE5yKCl7aWYoTW4oKSl7ZHIoMTUwMCksS2UoKTtjb25zdCBlPU1hdGgubWF4KDEsbC5ibG9ja2VkV2FpdE1pbnV0ZXMpKjYwKjFlMztDKG0uQkxPQ0tFRCx7ZW5kc0F0OkRhdGUubm93KCkrZX0pLFQoe21vZGU6bS5CTE9DS0VELHR5cGU6Zi5nZWxUeXBlLHJlbWFpbmluZ1NlYzpNYXRoLmNlaWwoZS8xZTMpLG93bmVyOlBsYXllcj8uTWVtYmVyTnVtYmVyfSwhMCksYigiJU5BTUUl55qE6IeA6YOo6KKr5LuA5LmI5Lic6KW/5oyh5L2P5LqG77yM5Yed6IO25aC15Zyo6YeM6Z2i5Ye65LiN5p2l4oCmIik7cmV0dXJufUFuKCl9YXN5bmMgZnVuY3Rpb24gQW4oKXtpZihmLm1vZGU9PT1tLkVYQ1JFVElORylyZXR1cm47Y29uc3QgZT0kO0MobS5FWENSRVRJTkcpO2NvbnN0IHQ9bC5leHByZXNzaW9uc3x8e307dC5leGNyZXRlJiZsdCh0LmV4Y3JldGUpLHooKSwobC5meFNoYWtlfHxsLmZ4Qmx1cikmJmZyKGt0KzMwMCxsLmVmZmVjdExldmVsLGwuZnhTaGFrZSxsLmZ4Qmx1cik7Y29uc3Qgbj14bigiZXhjcmV0ZSIpO050KCJleGNyZXRlIixuKTtjb25zdCByPURhdGUubm93KCk7aWYoVCh7bW9kZTptLkVYQ1JFVElORyx0eXBlOmYuZ2VsVHlwZSxvd25lcjpQbGF5ZXI/Lk1lbWJlck51bWJlcixzdGFydGVkQXQ6cn0sITApLGF3YWl0ICRyKG4pLGUhPT0kKXJldHVybjtpZihmLmdlbFR5cGU9PT0ibm9ybWFsIil7Y29uc3Qgcz1sLmF1dG9SZXZlcnRFbmFibGVkP01hdGgubWF4KDEsbC5hdXRvUmV2ZXJ0TWludXRlcykqNjAqMWUzOjAsYT1xdChQbGF5ZXI/Lk1lbWJlck51bWJlcik7cmUoKSxCKDApLEMobS5CTEFOSyx7ZW5kc0F0OnM/RGF0ZS5ub3coKStzOjAsZ2VsSWQ6YSxnZWxIb2xkZXI6bnVsbCxnZWxUeXBlOiJub3JtYWwifSksbHQobC5ub3JtYWxFeHByZXNzaW9uKSxNJiZjbGVhclRpbWVvdXQoTSksTT1zZXRUaW1lb3V0KCgpPT57TT1udWxsLGU9PT0kJiZLZSgpfSxNYXRoLm1heCgxLGwubm9ybWFsRXhwcmVzc2lvblNlY29uZHMpKjFlMyksVCh7bW9kZTptLkJMQU5LLHR5cGU6Im5vcm1hbCIscmVtYWluaW5nU2VjOnM/TWF0aC5jZWlsKHMvMWUzKTowLG93bmVyOlBsYXllcj8uTWVtYmVyTnVtYmVyLGdlbElkOmEsZ2VsSG9sZGVyOm51bGwsZXhwaXJlc0F0OnM/RGF0ZS5ub3coKStzOjB9LCEwKSxiKCIlTkFNRSXmjpLlh7rkuobkuIDlnajova/otrTotrTnmoTmma7pgJrlh53og7bvvIzokL3lnKjohJrovrnigKYiKTtyZXR1cm59Y29uc3QgaT1sLmF1dG9SZXZlcnRFbmFibGVkP01hdGgubWF4KDEsbC5hdXRvUmV2ZXJ0TWludXRlcykqNjAqMWUzOjAsbz1xdChQbGF5ZXI/Lk1lbWJlck51bWJlcik7cmUoKSx6KCksbC5meEJsdXImJkIoMS41K2wuZWZmZWN0TGV2ZWwqLjUpLHd0KGwuYmxpbmRMZXZlbCksQyhtLkJMQU5LLHtlbmRzQXQ6aT9EYXRlLm5vdygpK2k6MCxnZWxJZDpvLGdlbEhvbGRlcjpudWxsfSksZHQ9bC52aWV3TW9kZSxmdD1sLmVmZmVjdExldmVsLHB0PWwuYmxpbmRMZXZlbCxsLmZ4QmxhbmsmJk10KGwudmlld01vZGUpLF90KHQuYmxhbmt8fHQuZXhjcmV0ZSksbC5yZXN0cmljdGlvbnMmJihqZSghMCksSGUoITApKSxUKHttb2RlOm0uQkxBTkssdHlwZToicGVyc29uYSIscmVtYWluaW5nU2VjOmk/TWF0aC5jZWlsKGkvMWUzKTowLG93bmVyOlBsYXllcj8uTWVtYmVyTnVtYmVyLGdlbElkOm8sZ2VsSG9sZGVyOm51bGwsZXhwaXJlc0F0Omk/RGF0ZS5ub3coKStpOjB9LCEwKSxiKCIlTkFNRSXnmoTouqvkvZPkuIDpmLXohLHlipvvvIznmKvlnZDkuIvmnaXnnLznpZ7nqbrmtJ7igJTigJTkurrmoLzlh53og7booqvmjpLkuoblh7rmnaXvvIzokL3lnKjohJrovrnigKYiKX1mdW5jdGlvbiBfbihlPSEwKXskKyssemUoKSxNJiYoY2xlYXJUaW1lb3V0KE0pLE09bnVsbCksaHIoKSx2bigpLEtlKCksamUoITEpLEhlKCExKSxDKG0uSURMRSksVChudWxsLCEwKSxlfHxiKCIlTkFNRSXmgaLlpI3kuobmraPluLjjgIIiKX1mdW5jdGlvbiBCZShlLHQpeyQrKyx6ZSgpLE0mJihjbGVhclRpbWVvdXQoTSksTT1udWxsKSx6KCkscmUoKSxibigpLHZuKCksS2UoKSxqZSghMSksSGUoITEpLEMobS5JRExFKSxUKG51bGwsITApLHlyKF9yLHQpLGUmJmIoZSl9ZnVuY3Rpb24ga3IoKXtwKCLoh6rliqjlm57lvZLop6blj5EiKTtjb25zdCBlPWYuZ2VsVHlwZT09PSJub3JtYWwiO2lmKGYuZ2VsSWQpe2lmKGwuZ2VsRXhwaXJlTW9kZT09PSJpbnZhbGlkIil7R3IoZi5nZWxJZCxQbGF5ZXI/Lk1lbWJlck51bWJlciksQmUoeChlPyJnZWxJbnZhbGlkYXRlZE5vcm1hbCI6ImdlbEludmFsaWRhdGVkIikpO3JldHVybn1UdChmLmdlbElkKX1CZSh4KGU/ImdlbEV4cGlyZWROb3JtYWwiOiJnZWxFeHBpcmVkIikpfWxldCBkdD1udWxsLGZ0PW51bGwscHQ9bnVsbDtmdW5jdGlvbiBJcihlKXtjb25zdCB0PWY7dC5tb2RlPT09bS5XQUlUSU5HP3QucGhhc2VFbmRzQXQ+MCYmZT49dC5waGFzZUVuZHNBdCYmTnIoKTp0Lm1vZGU9PT1tLkJMT0NLRUQ/TW4oKT90LnBoYXNlRW5kc0F0PjAmJmU+PXQucGhhc2VFbmRzQXQmJihfbigpLGIoIiVOQU1FJeWlveWDj+S7gOS5iOS5n+ayoeWPkeeUn+OAgiIpKTooYigiJU5BTUUl6IeA6YOo55qE6YGu5oyh6KKr5ou/5byA5LqG77yM5Yed6IO25byA5aeL5b6A5aSW5oyk4oCmIiksQW4oKSk6dC5tb2RlPT09bS5CTEFOSyYmKHQuZ2VsVHlwZSE9PSJub3JtYWwiJiYobC5meEJsYW5rJiZkdCE9PWwudmlld01vZGUmJihkdD1sLnZpZXdNb2RlLE10KGwudmlld01vZGUpKSxsLmZ4Qmx1ciYmZnQhPT1sLmVmZmVjdExldmVsJiYoZnQ9bC5lZmZlY3RMZXZlbCxCKDEuNStsLmVmZmVjdExldmVsKi41KSkscHQhPT1sLmJsaW5kTGV2ZWwmJihwdD1sLmJsaW5kTGV2ZWwsd3QobC5ibGluZExldmVsKSkpLGwuYXV0b1JldmVydEVuYWJsZWQmJnQucGhhc2VFbmRzQXQ+MCYmZT49dC5waGFzZUVuZHNBdCYma3IoKSl9ZnVuY3Rpb24gVHIoKXt0cnl7VnIoKX1jYXRjaHt9Y29uc3QgZT1mO2lmKChlLm1vZGU9PT1tLldBSVRJTkd8fGUubW9kZT09PW0uQkxPQ0tFRHx8ZS5tb2RlPT09bS5CTEFOSykmJihlLnBoYXNlRW5kc0F0PjB8fGUubW9kZT09PW0uQkxBTkspKXtjb25zdCB0PWUucGhhc2VFbmRzQXQ+MD9NYXRoLm1heCgwLE1hdGgucm91bmQoKGUucGhhc2VFbmRzQXQtRGF0ZS5ub3coKSkvMWUzKSk6MCxuPU1hdGguY2VpbCh0LzUpKjU7VCh7bW9kZTplLm1vZGUsdHlwZTplLmdlbFR5cGUscmVtYWluaW5nU2VjOm4sb3duZXI6ZS5vd25lck1lbWJlck51bWJlcj8/UGxheWVyPy5NZW1iZXJOdW1iZXIsZ2VsSWQ6ZS5nZWxJZCxnZWxIb2xkZXI6ZS5nZWxIb2xkZXIsZXhwaXJlc0F0OmUucGhhc2VFbmRzQXR8fDB9KX19Y29uc3Qga3Q9NzM0MDtsZXQgbXQ9a3QsYmU9MDtjb25zdCBJdD1uZXcgTWFwO2Z1bmN0aW9uIENyKGUpe3JldHVybiBJdC5nZXQoZSl8fDB9ZnVuY3Rpb24gUnIoZSl7SXQuZGVsZXRlKGUpfWZ1bmN0aW9uIERyKCl7cmV0dXJuIGJlPjA/YmU6bXR9ZnVuY3Rpb24gTHIoZSl7YmU9ZT4wP2U6MH1mdW5jdGlvbiBObihlKXt0cnl7aWYoIWV8fGUuTWVtYmVyTnVtYmVyPT1udWxsKXJldHVybjtJdC5zZXQoZS5NZW1iZXJOdW1iZXIsRGF0ZS5ub3coKSl9Y2F0Y2h7fX1mdW5jdGlvbiBZdChlKXtyZXR1cm4gbmV3IFByb21pc2UodD0+c2V0VGltZW91dCh0LGUpKX1mdW5jdGlvbiBPcihlKXtyZXR1cm4gZT9uZXcgUHJvbWlzZSh0PT57dHJ5e2NvbnN0IG49bmV3IEF1ZGlvKFN0cmluZyhlKSk7bGV0IHI9ITE7Y29uc3QgaT1vPT57cnx8KHI9ITAsdChvKSl9O24uYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLCgpPT5pKG4uZHVyYXRpb24+MD9uLmR1cmF0aW9uKjFlMzowKSksbi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PmkoMCkpLHNldFRpbWVvdXQoKCk9PmkoMCksM2UzKX1jYXRjaHt0KDApfX0pOlByb21pc2UucmVzb2x2ZSgwKX1hc3luYyBmdW5jdGlvbiAkcihlKXtpZihObihQbGF5ZXIpLGJlPjApe2F3YWl0IFl0KGJlKTtyZXR1cm59Y29uc3QgdD1hd2FpdCBPcihlKTttdD1NYXRoLm1heChrdCx0KSxhd2FpdCBZdChtdCl9ZnVuY3Rpb24gQnIoKXt0cnl7Y29uc3QgZT1QbGF5ZXI/Lk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdPy5zdGF0ZTtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QifHwhZS5tb2RlKXJldHVybjtpZihlLm1vZGU9PT1tLkJMQU5LKXtjb25zdCB0PWUudHlwZT09PSJub3JtYWwiO2lmKEMobS5CTEFOSyx7ZW5kc0F0OmUuZXhwaXJlc0F0fHwwLGdlbElkOmUuZ2VsSWR8fG51bGwsZ2VsSG9sZGVyOm51bGwsZ2VsVHlwZTp0PyJub3JtYWwiOiJwZXJzb25hIn0pLHQpe3AoIueZu+W9lei/mOWOn++8muaZrumAmuWHneiDtueKtuaAge+8iOWHneiDtiAiKyhlLmdlbElkfHwi5pegIikrIu+8iSIpO3JldHVybn16KCksbC5meEJsdXImJkIoMS41K2wuZWZmZWN0TGV2ZWwqLjUpLHd0KGwuYmxpbmRMZXZlbCksbC5meEJsYW5rJiZNdChsLnZpZXdNb2RlKTtjb25zdCBuPWwuZXhwcmVzc2lvbnN8fHt9O190KG4uYmxhbmt8fG4uZXhjcmV0ZSksbC5yZXN0cmljdGlvbnMmJihqZSghMCksSGUoITApKSxwKCLnmbvlvZXov5jljp/vvJrlpLHnpZ7nirbmgIHvvIjlh53og7YgIisoZS5nZWxJZHx8IuaXoCIpKyLvvIkiKX1lbHNlIGlmKGUubW9kZT09PW0uV0FJVElOR3x8ZS5tb2RlPT09bS5CTE9DS0VEKXtjb25zdCB0PU1hdGgubWF4KDEsZS5yZW1haW5pbmdTZWN8fDMwKSoxZTM7QyhlLm1vZGUse2dlbFR5cGU6ZS50eXBlfHwicGVyc29uYSIsZW5kc0F0OkRhdGUubm93KCkrdH0pLGUubW9kZT09PW0uV0FJVElORyYmU24odCxsLmVmZmVjdExldmVsKSxwKCLnmbvlvZXov5jljp/vvJoiK2UubW9kZSsi77yI5Ymp5L2ZICIrKGUucmVtYWluaW5nU2VjfHwiPyIpKyIg56eS77yJIil9fWNhdGNoKGUpe3AoIueZu+W9lei/mOWOn+Wksei0pToiLGUubWVzc2FnZSl9fWNvbnN0IEZyPSJHbGFzc0ZpbGxlZCIsRmU9IlBFWHwiO2Z1bmN0aW9uIHF0KGUpe3JldHVybmAke2V9LSR7RGF0ZS5ub3coKX1gfWZ1bmN0aW9uIFhyKGUsdCxuLHI9InBlcnNvbmEiKXt0cnl7aWYodHlwZW9mIEludmVudG9yeUdldCE9ImZ1bmN0aW9uInx8dHlwZW9mIEludmVudG9yeVdlYXIhPSJmdW5jdGlvbiJ8fEludmVudG9yeUdldChQbGF5ZXIsIkl0ZW1IYW5kaGVsZCIpKXJldHVybiBudWxsO2NvbnN0IHM9e05hbWU6YCR7VG4oZSl8fCLmn5DkuroifeeahCR7cj09PSJub3JtYWwiPyLmma7pgJrlh53og7YiOiLkurrmoLzlh53og7YifWAsRGVzY3JpcHRpb246YCR7RmV9JHt0fXwke2V9fCR7bn1gLE1lbWJlck51bWJlcjplLFByb3BlcnR5OiJOb3JtYWwifSxhPUludmVudG9yeVdlYXIoUGxheWVyLEZyLCJJdGVtSGFuZGhlbGQiLHZvaWQgMCx2b2lkIDAsZSxzLCExKTtpZighYSlyZXR1cm4gbnVsbDt0cnl7dHlwZW9mIENoYXRSb29tQ2hhcmFjdGVyVXBkYXRlPT0iZnVuY3Rpb24iJiZDaGF0Um9vbUNoYXJhY3RlclVwZGF0ZShQbGF5ZXIpfWNhdGNoe31yZXR1cm4gcCgi5Yed6IO254mp5ZOB5bey55Sf5oiQOiIsdCksYX1jYXRjaChpKXtyZXR1cm4gcCgi55Sf5oiQ5Yed6IO25aSx6LSlOiIsaS5tZXNzYWdlKSxudWxsfX1mdW5jdGlvbiBFZShlKXt0cnl7Y29uc3QgdD1lPy5DcmFmdD8uRGVzY3JpcHRpb24/PyIiO2lmKCF0LnN0YXJ0c1dpdGgoRmUpKXJldHVybiBudWxsO2NvbnN0IG49dC5zbGljZShGZS5sZW5ndGgpLnNwbGl0KCJ8IiksW3IsaSxvXT1uO3JldHVybntnZWxJZDpyLG93bmVyTWVtYmVyTnVtYmVyOitpLGV4cGlyZXNBdDorbyxpbnZhbGlkOm5bM109PT0iSU5WQUxJRCJ9fWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBrbihlKXtyZXR1cm4hIUVlKGUpfWZ1bmN0aW9uIFNlKGUpe3RyeXtjb25zdCB0PUludmVudG9yeUdldChQbGF5ZXIsIkl0ZW1IYW5kaGVsZCIpLG49RWUodCk7aWYobiYmKCFlfHxuLmdlbElkPT09ZSkpe0ludmVudG9yeVJlbW92ZShQbGF5ZXIsIkl0ZW1IYW5kaGVsZCIsITEpO3RyeXt0eXBlb2YgQ2hhdFJvb21DaGFyYWN0ZXJVcGRhdGU9PSJmdW5jdGlvbiImJkNoYXRSb29tQ2hhcmFjdGVyVXBkYXRlKFBsYXllcil9Y2F0Y2h7fXJldHVybiBwKCLlh53og7blt7Lku47miYvkuIrnp7vpmaQ6IixuLmdlbElkKSwhMH19Y2F0Y2h7fXJldHVybiExfWZ1bmN0aW9uIEp0KGUsdCxuKXtTZShuPy5nZWxJZCksUCgiUEVYX0dlbENvbnN1bWVkIixbe1RhZzoiR2VsSWQiLFZhbHVlOlN0cmluZyhuPy5nZWxJZD8/IiIpfSx7VGFnOiJEcmlua2VyIixWYWx1ZTpTdHJpbmcodCl9LHtUYWc6Ik93bmVyIixWYWx1ZTpTdHJpbmcobj8ub3duZXJNZW1iZXJOdW1iZXIpfV0pfWZ1bmN0aW9uIFR0KGUpe1AoIlBFWF9HZWxFeHBpcmVkIixbe1RhZzoiR2VsSWQiLFZhbHVlOmV9XSx7ZGVkdXBlS2V5OiJleHBpcmUtIitlLGRlZHVwZU1zOjVlM30pfWZ1bmN0aW9uIEluKGUsdCl7dHJ5e2NvbnN0IG49SW52ZW50b3J5R2V0KFBsYXllciwiSXRlbUhhbmRoZWxkIikscj1FZShuKTtpZighcnx8ci5nZWxJZCE9PWV8fHIuaW52YWxpZClyZXR1cm4hMTtjb25zdCBpPVRuKHQpfHwi5p+Q5Lq6IjtuLkNyYWZ0fHwobi5DcmFmdD17fSksbi5DcmFmdC5OYW1lPWAke2l955qE5peg5pWI5Yed6IO2YCxuLkNyYWZ0LkRlc2NyaXB0aW9uPWAke0ZlfSR7ZX18JHt0fXwke3IuZXhwaXJlc0F0fXxJTlZBTElEYCxuLkNyYWZ0LlByb3BlcnR5PSJOb3JtYWwiO3RyeXt0eXBlb2YgQ2hhdFJvb21DaGFyYWN0ZXJVcGRhdGU9PSJmdW5jdGlvbiImJkNoYXRSb29tQ2hhcmFjdGVyVXBkYXRlKFBsYXllcil9Y2F0Y2h7fXJldHVybiBwKCLlh53og7blt7Llj5jkuLrml6DmlYjlh53og7Y6IixlKSwhMH1jYXRjaChuKXtyZXR1cm4gcCgi5peg5pWI5YyW5Yed6IO25aSx6LSlOiIsbi5tZXNzYWdlKSwhMX19ZnVuY3Rpb24gR3IoZSx0KXtQKCJQRVhfR2VsSW52YWxpZGF0ZWQiLFt7VGFnOiJHZWxJZCIsVmFsdWU6U3RyaW5nKGUpfSx7VGFnOiJPd25lciIsVmFsdWU6U3RyaW5nKHQpfV0se2RlZHVwZUtleToiaW52YWxpZGF0ZS0iK2UsZGVkdXBlTXM6NWUzfSl9ZnVuY3Rpb24gVnIoKXt0cnl7Y29uc3QgZT1JbnZlbnRvcnlHZXQoUGxheWVyLCJJdGVtSGFuZGhlbGQiKSx0PUVlKGUpO2lmKCF0fHwhKHQuZXhwaXJlc0F0PjApfHx0LmV4cGlyZXNBdD5EYXRlLm5vdygpfHx0LmludmFsaWQpcmV0dXJuO3R5cGVvZiBsPCJ1IiYmbC5nZWxFeHBpcmVNb2RlPT09ImludmFsaWQiP0luKHQuZ2VsSWQsdC5vd25lck1lbWJlck51bWJlcik6U2UodC5nZWxJZCl9Y2F0Y2h7fX1mdW5jdGlvbiBLcihlKXtpZihlKXRyeXtlLmhvb2tGdW5jdGlvbigiRHJhd0NoYXJhY3RlciIsMSwodCxuKT0+e2NvbnN0W3IsaSxvLHNdPXQsYT0hKGwuZ2VsTGF5ZXI+PTI0KTt0cnl7YSYmciYmci5NZW1iZXJOdW1iZXIhPW51bGwmJnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIG89PSJudW1iZXIiJiZRdChyLGksbyxzfHwxKX1jYXRjaHt9Y29uc3QgYz1yJiZyLk1lbWJlck51bWJlciE9bnVsbD9icihyKTohMSx1PW4odCk7YyYmdnIocik7dHJ5eyFhJiZyJiZyLk1lbWJlck51bWJlciE9bnVsbCYmdHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2Ygbz09Im51bWJlciImJlF0KHIsaSxvLHN8fDEpfWNhdGNoe31yZXR1cm4gdX0pfWNhdGNoKHQpe3AoIuWHneiDtuW6leWxgue7mOWItuaMgumSqeWksei0pToiLHQubWVzc2FnZSl9fWZ1bmN0aW9uIFF0KGUsdCxuLHIpe3RyeXtjb25zdCBpPUNyKGUuTWVtYmVyTnVtYmVyKTtpZihpKXtjb25zdCBzPURyKCl8fDczNDAsYT1EYXRlLm5vdygpLWk7aWYoYT5zKXtScihlLk1lbWJlck51bWJlcik7cmV0dXJufWlmKHR5cGVvZiBEcmF3UmVjdCE9ImZ1bmN0aW9uIilyZXR1cm47Y29uc3QgYz10KzI1MCpyLHU9bis1MjUqcixkPW4rOTUwKnIsaD1NYXRoLm1pbigxLGEvcyk7aDwuMjU/RHJhd1JlY3QoYy0xNCpyLHUtMTQqciwyOCpyLDI4KnIsIiNmZmZmZmYiKTpoPC41P0RyYXdSZWN0KGMtMTQqcix1KyhkLXUpKi40NS0xNCpyLDI4KnIsMjgqciwiI2ZmZmZmZiIpOmg8Ljc1PyhEcmF3UmVjdChjLTE0KnIsdSsoZC11KSouODItMTQqciwyOCpyLDI4KnIsIiNmZmZmZmYiKSxEcmF3UmVjdChjLTE4KnIsZC04KnIsMzYqciwxNipyLCIjZmZmZmZmIikpOkRyYXdSZWN0KGMtMjQqcixkLTExKnIsNDgqciwyMipyLCIjZmZmZmZmIik7cmV0dXJufWNvbnN0IG89ZS5PbmxpbmVTaGFyZWRTZXR0aW5ncz8uWyJQRVgiXT8uc3RhdGU7byYmby5tb2RlPT09ImJsYW5rIiYmby5nZWxJZCYmIW8uZ2VsSG9sZGVyJiZ0eXBlb2YgRHJhd0ltYWdlUmVzaXplPT0iZnVuY3Rpb24iJiZEcmF3SW1hZ2VSZXNpemUoIkFzc2V0cy9GZW1hbGUzRENHL0l0ZW1IYW5kaGVsZC9QcmV2aWV3L0dsYXNzRmlsbGVkLnBuZyIsdCsyNTAqci0yMCpyLG4rOTUwKnItMTcqciw0MCpyLDM0KnIpfWNhdGNoe319Y29uc3QgVGU9bmV3IE1hcDtmdW5jdGlvbiBIcigpe3RyeXtpZih0eXBlb2YgQ2hhdFJvb21DaGFyYWN0ZXI+InUifHwhQXJyYXkuaXNBcnJheShDaGF0Um9vbUNoYXJhY3RlcikpcmV0dXJuO2Zvcihjb25zdCBlIG9mIENoYXRSb29tQ2hhcmFjdGVyKXtpZighZXx8ZS5NZW1iZXJOdW1iZXI9PW51bGx8fGUuTWVtYmVyTnVtYmVyPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpY29udGludWU7Y29uc3QgdD1lLk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdPy5zdGF0ZSxuPVRlLmdldChlLk1lbWJlck51bWJlcik7dCYmdC5tb2RlPT09ImV4Y3JldGluZyImJnQuc3RhcnRlZEF0P24hPT10LnN0YXJ0ZWRBdCYmKFRlLnNldChlLk1lbWJlck51bWJlcix0LnN0YXJ0ZWRBdCksTm4oZSkpOm4hPT12b2lkIDAmJlRlLmRlbGV0ZShlLk1lbWJlck51bWJlcil9fWNhdGNoe319ZnVuY3Rpb24ganIoKXtUZS5jbGVhcigpfWZ1bmN0aW9uIHpyKGUpe2llKHQ9Pnt0cnl7aWYodD8uVHlwZSE9PSJIaWRkZW4iKXJldHVybjtjb25zdCBuPUFycmF5LmlzQXJyYXkodC5EaWN0aW9uYXJ5KT90LkRpY3Rpb25hcnk6W10scj1pPT57Y29uc3Qgbz1uLmZpbmQocz0+cz8uVGFnPT09aSk7cmV0dXJuIG8/by5WYWx1ZT8/by5OYW1lOnZvaWQgMH07aWYodC5Db250ZW50PT09IlBFWF9HZWxFeHBpcmVkIil7Y29uc3QgaT1yKCJHZWxJZCIpO2kmJlNlKGkpfWVsc2UgaWYodC5Db250ZW50PT09IlBFWF9HZWxJbnZhbGlkYXRlZCIpe2NvbnN0IGk9cigiR2VsSWQiKSxvPStyKCJPd25lciIpO2kmJkluKGksbyl9ZWxzZSBpZih0LkNvbnRlbnQ9PT0iUEVYX0dlbENvbnN1bWVkIil7Y29uc3QgaT0rcigiT3duZXIiKSxvPStyKCJEcmlua2VyIikscz1yKCJHZWxJZCIpO3RyeXtjb25zdCBhPVBlKGkpO2E/Lk9ubGluZVNoYXJlZFNldHRpbmdzPy5bIlBFWCJdJiYoYS5PbmxpbmVTaGFyZWRTZXR0aW5ncy5QRVguc3RhdGU9bnVsbCl9Y2F0Y2h7fXR5cGVvZiBlPT0iZnVuY3Rpb24iJiZlKHtnZWxJZDpzLG93bmVyOmksZHJpbmtlcjpvfSl9ZWxzZSBpZih0LkNvbnRlbnQ9PT0iUEVYX0dlbEhlbGQiKXtjb25zdCBpPXIoIkdlbElkIiksbz0rcigiT3duZXIiKSxzPStyKCJIb2xkZXIiKTt0cnl7Y29uc3QgYT1QZShvKTthPy5PbmxpbmVTaGFyZWRTZXR0aW5ncz8uWyJQRVgiXT8uc3RhdGUmJihhLk9ubGluZVNoYXJlZFNldHRpbmdzLlBFWC5zdGF0ZS5nZWxIb2xkZXI9cyl9Y2F0Y2h7fWlmKG89PT1QbGF5ZXI/Lk1lbWJlck51bWJlcil0cnl7Zi5nZWxIb2xkZXI9cyxUKHttb2RlOiJibGFuayIscmVtYWluaW5nU2VjOmYucGhhc2VFbmRzQXQ/TWF0aC5tYXgoMCxNYXRoLnJvdW5kKChmLnBoYXNlRW5kc0F0LURhdGUubm93KCkpLzFlMykpOjAsb3duZXI6UGxheWVyPy5NZW1iZXJOdW1iZXIsZ2VsSWQ6aSxnZWxIb2xkZXI6cyxleHBpcmVzQXQ6Zi5waGFzZUVuZHNBdHx8MH0sITApfWNhdGNoe319ZWxzZSBpZih0LkNvbnRlbnQ9PT0iUEVYX1N0YXRlU3luYyIpe2NvbnN0IGk9cigiUGF5bG9hZCIpO2lmKCFpKXJldHVybjtsZXQgbz1udWxsO3RyeXtvPUpTT04ucGFyc2UoaSl9Y2F0Y2h7cmV0dXJufWNvbnN0IHM9TnVtYmVyKHQuU2VuZGVyKTtpZighc3x8cz09PVBsYXllcj8uTWVtYmVyTnVtYmVyfHwhb3x8dHlwZW9mIG8hPSJvYmplY3QiKXJldHVybjtjb25zdCBhPVBlKHMpO2lmKCFhKXJldHVybjt0cnl7YS5PbmxpbmVTaGFyZWRTZXR0aW5nc3x8KGEuT25saW5lU2hhcmVkU2V0dGluZ3M9e30pLGEuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYfHwoYS5PbmxpbmVTaGFyZWRTZXR0aW5ncy5QRVg9e30pLGEuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYLnN0YXRlPW99Y2F0Y2h7fX1lbHNlIGlmKHQuQ29udGVudD09PSJQRVhfU2hhcmVkU3luYyIpe2NvbnN0IGk9cigiUGF5bG9hZCIpO2lmKCFpKXJldHVybjtsZXQgbz1udWxsO3RyeXtvPUpTT04ucGFyc2UoaSl9Y2F0Y2h7cmV0dXJufWNvbnN0IHM9TnVtYmVyKHQuU2VuZGVyKTtpZighc3x8cz09PVBsYXllcj8uTWVtYmVyTnVtYmVyfHwhb3x8dHlwZW9mIG8hPSJvYmplY3QiKXJldHVybjtjb25zdCBhPVBlKHMpO2lmKCFhKXJldHVybjt0cnl7YS5PbmxpbmVTaGFyZWRTZXR0aW5nc3x8KGEuT25saW5lU2hhcmVkU2V0dGluZ3M9e30pLGEuT25saW5lU2hhcmVkU2V0dGluZ3MuUEVYfHwoYS5PbmxpbmVTaGFyZWRTZXR0aW5ncy5QRVg9e30pO2NvbnN0IGM9YS5PbmxpbmVTaGFyZWRTZXR0aW5ncy5QRVg7by5lZGl0IT09dm9pZCAwJiYoYy5lZGl0PW8uZWRpdCksby5lZGl0TW9kZXMmJihjLmVkaXRNb2Rlcz1vLmVkaXRNb2Rlcyksby53bCYmKGMud2w9by53bCl9Y2F0Y2h7fX19Y2F0Y2h7fX0pfWZ1bmN0aW9uIFRuKGUpe3RyeXtpZihlPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpcmV0dXJuIENoYXJhY3Rlck5pY2tuYW1lKFBsYXllcik7Y29uc3QgdD1DaGF0Um9vbUNoYXJhY3Rlcj8uZmluZChuPT5uPy5NZW1iZXJOdW1iZXI9PT1lKTtpZih0KXJldHVybiBDaGFyYWN0ZXJOaWNrbmFtZSh0KX1jYXRjaHt9cmV0dXJuIG51bGx9ZnVuY3Rpb24gV2UoKXtwKCLlvLrliLbmgaLlpI0iKSxmLmdlbElkJiZUdChmLmdlbElkKSxTZShmLmdlbElkKSxfbighMCksYigiJU5BTUUl6KKr5by65Yi25oGi5aSN5LqG77yM5LiA5YiH5Zue5b2S5q2j5bi444CCIil9Y29uc3QgZz17YWNjZW50OiIjZjI3YmE4Iix0ZWFsOiIjM2Y5YzkyIix0ZWFsRGFyazoiIzJhNmI2MyIsdGV4dDoiI2U4ZTRmNSIsZGltOiIjOWI5M2JkIixkYW5nZXI6IiNmZjZiNmIifSxXcj17aWRsZToi56m66ZeyIix3YWl0aW5nOiLmjpLlh7rliY3nrYnlvoUiLGJsb2NrZWQ6IuiHgOmDqOiiq+aMocK3562J5b6F5LitIixleGNyZXRpbmc6IuaOkuWHuuWKqOeUu+S4rSIsYmxhbms6IuWkseelnuS4rSJ9LFVyPXthbGw6IuWFqOmDqCIsc3Vycm91bmQ6IuWRqOWbtCIsc2VsZjoi6Ieq5bexIn0sWXI9e3NlbGY6IuS7heiHquW3sSIsb3RoZXJzOiLku4Xku5bkuroiLGJvdGg6IumDveWPr+ingSJ9O2xldCBTPW51bGwsQ2U9bnVsbCx1ZT0hMSxKPW51bGw7ZnVuY3Rpb24gcXIoKXtyZXR1cm4hIVN9ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gbGUoZSx0LG4scil7Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtyZXR1cm4gaS50ZXh0Q29udGVudD1lLE9iamVjdC5hc3NpZ24oaS5zdHlsZSx7YmFja2dyb3VuZDp0LGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiLGJvcmRlclJhZGl1czoiNHB4Iixjb2xvcjpuLGN1cnNvcjoicG9pbnRlciIsZm9udFNpemU6IjExcHgiLHBhZGRpbmc6IjJweCA4cHgiLGxpbmVIZWlnaHQ6IjE2cHgiLGZvbnRXZWlnaHQ6ImJvbGQiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9KSxpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixyKSxpfWZ1bmN0aW9uIEpyKCl7Y29uc3QgZT1mO2xldCB0PSLigJQiO2lmKGUucGhhc2VFbmRzQXQ+MCl7Y29uc3QgYz1NYXRoLm1heCgwLE1hdGgucm91bmQoKGUucGhhc2VFbmRzQXQtRGF0ZS5ub3coKSkvMWUzKSk7dD1NYXRoLmZsb29yKGMvNjApKyI6IitTdHJpbmcoYyU2MCkucGFkU3RhcnQoMiwiMCIpfWNvbnN0IG49V3JbZS5tb2RlXXx8ZS5tb2RlLHI9ZS5tb2RlPT09ImlkbGUiP2cuZGltOmcuYWNjZW50LGk9ZS5nZWxJZD8iIyIrU3RyaW5nKGUuZ2VsSWQpLnNsaWNlKDAsOCk6IuKAlCIsbz1lLmdlbEhvbGRlciE9bnVsbD8iIyIrZS5nZWxIb2xkZXI6IuKAlCIscz1lLm93bmVyTWVtYmVyTnVtYmVyIT1udWxsPyIjIitlLm93bmVyTWVtYmVyTnVtYmVyOiLigJQiLGE9bDtyZXR1cm5gCiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjJweCAxNHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHgiPgogICAgICA8ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjoke2cuZGltfSI+54q25oCBPC9zcGFuPiA8YiBzdHlsZT0iY29sb3I6JHtyfSI+JHtufTwvYj4ke2UuZ2VsVHlwZT09PSJub3JtYWwiP2AgPHNwYW4gc3R5bGU9ImNvbG9yOiR7Zy50ZWFsfSI+77yI5pmu6YCa5Yed6IO277yJPC9zcGFuPmA6IiJ9PC9kaXY+CiAgICAgIDxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiR7Zy5kaW19Ij7lgJLorqHml7Y8L3NwYW4+IDxiIHN0eWxlPSJjb2xvcjoke2cudGV4dH0iPiR7dH08L2I+PC9kaXY+CiAgICAgIDxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiR7Zy5kaW19Ij7lh53og7ZJRDwvc3Bhbj4gPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHtpfTwvYj48L2Rpdj4KICAgICAgPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6JHtnLmRpbX0iPuaMgeacieiAhTwvc3Bhbj4gPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHtvfTwvYj48L2Rpdj4KICAgICAgPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6JHtnLmRpbX0iPuS4u+S6ujwvc3Bhbj4gPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHtzfTwvYj48L2Rpdj4KICAgICAgPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6JHtnLmRpbX0iPuexu+Weizwvc3Bhbj4gPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHtDbihlLmdlbFR5cGUpfTwvYj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7cGFkZGluZy10b3A6NHB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoNjMsMTU2LDE0NiwwLjM1KTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjJweCAxNHB4O2ZvbnQtc2l6ZToxMXB4O2xpbmUtaGVpZ2h0OjE3cHg7Y29sb3I6JHtnLmRpbX0iPgogICAgICA8c3Bhbj7mgLvlvIDlhbPvvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke2EuZW5hYmxlZD8i5byAIjoi5YWzIn08L2I+PC9zcGFuPgogICAgICA8c3Bhbj7mjpLlh7rnrYnlvoXvvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke2Eud2FpdFNlY29uZHN956eSPC9iPjwvc3Bhbj4KICAgICAgPHNwYW4+6Zi75oyh5LiK6ZmQ77yaPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHthLmJsb2NrZWRXYWl0TWludXRlc33liIY8L2I+PC9zcGFuPgogICAgICA8c3Bhbj7oh6rliqjlm57lvZLvvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke2EuYXV0b1JldmVydEVuYWJsZWQ/YS5hdXRvUmV2ZXJ0TWludXRlcysi5YiGIjoi5YWzIn08L2I+PC9zcGFuPgogICAgICA8c3Bhbj7mma7pgJrooajmg4XvvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke2Eubm9ybWFsRXhwcmVzc2lvblNlY29uZHN956eSPC9iPjwvc3Bhbj4KICAgICAgPHNwYW4+54m55pWI5by65bqm77yaPGIgc3R5bGU9ImNvbG9yOiR7Zy50ZXh0fSI+JHthLmVmZmVjdExldmVsfSAvIDU8L2I+PC9zcGFuPgogICAgICA8c3Bhbj7lpLHnpZ7op4bph47vvJo8YiBzdHlsZT0iY29sb3I6JHtnLnRleHR9Ij4ke1VyW2Eudmlld01vZGVdfHxhLnZpZXdNb2RlfTwvYj48L3NwYW4+CiAgICAgIDxzcGFuPuiuoeaXtuWZqO+8mjxiIHN0eWxlPSJjb2xvcjoke2cudGV4dH0iPiR7WXJbYS50aW1lclZpc2liaWxpdHldfHxhLnRpbWVyVmlzaWJpbGl0eX08L2I+PC9zcGFuPgogICAgPC9kaXY+YH1mdW5jdGlvbiBRcigpe2NvbnN0IGU9Y2Uuc2xpY2UoLTgpO3JldHVybiBlLmxlbmd0aD9lLm1hcCh0PT5gPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6JHtnLmRpbX07d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzIj4ke0NuKHQpfTwvZGl2PmApLmpvaW4oIiIpOmA8ZGl2IHN0eWxlPSJjb2xvcjoke2cuZGltfTtmb250LXNpemU6MTFweCI+77yI5pqC5peg5pel5b+X77yJPC9kaXY+YH1mdW5jdGlvbiBacihlKXtpZihTfHwhZSlyZXR1cm47Uz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxTLmlkPSJwZXgtcGFuZWwiLE9iamVjdC5hc3NpZ24oUy5zdHlsZSx7YmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyMiwxNyw0MCwwLjk3KSAwJSwgcmdiYSgyNCw0MCwzOCwwLjk3KSAxMDAlKSIsYm9yZGVyTGVmdDoiM3B4IHNvbGlkICIrZy5hY2NlbnQsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSg2MywxNTYsMTQ2LDAuNCkiLHBhZGRpbmc6IjhweCAxMHB4IDZweCIsYm94U2hhZG93OiIwIC00cHggMjBweCByZ2JhKDI0MiwxMjMsMTY4LDAuMjApIixmb250RmFtaWx5OiciTm90byBTYW5zIFNDIiwiTWljcm9zb2Z0IFlhSGVpIixzYW5zLXNlcmlmJyxmb250U2l6ZToiMTJweCIsdXNlclNlbGVjdDoibm9uZSIsbWFyZ2luVG9wOiI0cHgiLGRpc3BsYXk6ImJsb2NrIn0pO2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7T2JqZWN0LmFzc2lnbih0LnN0eWxlLHtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixtYXJnaW5Cb3R0b206IjZweCJ9KTtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtuLmlubmVySFRNTD1g4pqX77iPIDxiIHN0eWxlPSJjb2xvcjoke2cuYWNjZW50fSI+UEVYPC9iPiA8c3BhbiBzdHlsZT0iY29sb3I6JHtnLmRpbX07Zm9udC1zaXplOjEwcHgiPuaOp+WItuWPsCB2JHtOfTwvc3Bhbj5gO2NvbnN0IHI9bGUoIuKamSDorr7nva4iLGcudGVhbERhcmssIiNjOWYwZWEiLCgpPT57dHJ5e3R5cGVvZiBQcmVmZXJlbmNlU3Vic2NyZWVuRXh0ZW5zaW9uc09wZW49PSJmdW5jdGlvbiImJlByZWZlcmVuY2VTdWJzY3JlZW5FeHRlbnNpb25zT3BlbihndCl9Y2F0Y2h7fX0pLGk9bGUoIvCfp6og5rWL6K+V5rWB56iLIixnLnRlYWxEYXJrLCIjYzlmMGVhIiwoKT0+e3RyeXtpZihmLm1vZGUhPT0iaWRsZSIpe3AoIuW3suaciei/m+ihjOS4reeahOa1geeoi++8jOWFiCAvcGV4IHJlc2V0IOWGjea1iyIpO3JldHVybn1jb25zdCBoPWwud2FpdFNlY29uZHM7bC53YWl0U2Vjb25kcz0xMCx1dCgicGVyc29uYSIpLGwud2FpdFNlY29uZHM9aCxwKCLmtYvor5XmtYHnqIvlt7LlkK/liqjvvJoxMCDnp5LlkI7mjpLlh7rvvIjoh4Dpg6jmnInkuJzopb/kvJrnrYnlvoXvvIkiKX1jYXRjaChoKXtwKCLmtYvor5XmtYHnqIvlkK/liqjlpLHotKU6IixoLm1lc3NhZ2UpfX0pLG89bGUoIvCfkr4g5L+d5a2YIixnLnRlYWxEYXJrLCIjYzlmMGVhIiwoKT0+e18oITApLHAoIuiuvue9ruW3suS/neWtmCIpLE1lKCl9KSxzPWxlKCLimqAg5by65Yi25oGi5aSNIiwicmdiYSgxMjAsMzAsMzAsMC44NSkiLCIjZmY4ODk5IiwoKT0+e2lmKCF1ZSl7dWU9ITAscy50ZXh0Q29udGVudD0i4pqgIOWGjeasoeeCueWHu+ehruiupCIscy5zdHlsZS5iYWNrZ3JvdW5kPWcuZGFuZ2VyLGNsZWFyVGltZW91dChKKSxKPXNldFRpbWVvdXQoKCk9Pnt1ZT0hMSxzLnRleHRDb250ZW50PSLimqAg5by65Yi25oGi5aSNIixzLnN0eWxlLmJhY2tncm91bmQ9InJnYmEoMTIwLDMwLDMwLDAuODUpIn0sNGUzKTtyZXR1cm59dWU9ITEsY2xlYXJUaW1lb3V0KEopLHMudGV4dENvbnRlbnQ9IuKaoCDlvLrliLbmgaLlpI0iLHMuc3R5bGUuYmFja2dyb3VuZD0icmdiYSgxMjAsMzAsMzAsMC44NSkiLFdlKCksTWUoKX0pLGE9bGUoIuKclSIsInJnYmEoMTAwLDIwLDQwLDAuOCkiLCIjZmY4ODk5IiwoKT0+Um4oKSksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLnN0eWxlLmNzc1RleHQ9ImRpc3BsYXk6ZmxleDtnYXA6NHB4O2FsaWduLWl0ZW1zOmNlbnRlciIsYy5hcHBlbmQocixpLG8scyxhKSx0LmFwcGVuZChuLGMpLFMuYXBwZW5kQ2hpbGQodCk7Y29uc3QgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmlkPSJwZXgtcGFuZWwtc3RhdHVzIixTLmFwcGVuZENoaWxkKHUpO2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5pZD0icGV4LXBhbmVsLWxvZyIsT2JqZWN0LmFzc2lnbihkLnN0eWxlLHttYXJnaW5Ub3A6IjVweCIscGFkZGluZ1RvcDoiNHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI0MiwxMjMsMTY4LDAuMjUpIixtYXhIZWlnaHQ6IjExMHB4IixvdmVyZmxvd1k6ImF1dG8ifSksUy5hcHBlbmRDaGlsZChkKSxlLmFwcGVuZENoaWxkKFMpLENlPXNldEludGVydmFsKE1lLDFlMyksTWUoKX1mdW5jdGlvbiBNZSgpe2lmKCFTKXJldHVybjtjb25zdCBlPVMucXVlcnlTZWxlY3RvcigiI3BleC1wYW5lbC1zdGF0dXMiKSx0PVMucXVlcnlTZWxlY3RvcigiI3BleC1wYW5lbC1sb2ciKTtlJiYoZS5pbm5lckhUTUw9SnIoKSksdCYmKHQuaW5uZXJIVE1MPVFyKCkpfWZ1bmN0aW9uIFJuKCl7aWYoQ2UmJihjbGVhckludGVydmFsKENlKSxDZT1udWxsKSxKJiYoY2xlYXJUaW1lb3V0KEopLEo9bnVsbCksdWU9ITEsUyl7dHJ5e1MucmVtb3ZlKCl9Y2F0Y2h7fVM9bnVsbH19ZnVuY3Rpb24gdihlLHQ9MCl7dHJ5e2NvbnN0IG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRleHRBcmVhQ2hhdExvZyIpO2lmKCFuKXRocm93IG5ldyBFcnJvcigibm8gbG9nIik7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmNsYXNzTmFtZT0iQ2hhdE1lc3NhZ2UgQ2hhdE1lc3NhZ2VMb2NhbE1lc3NhZ2UiLE9iamVjdC5hc3NpZ24oci5zdHlsZSx7YmFja2dyb3VuZDoicmdiYSgxNjAsNTAsMTIwLDAuMTYpIixib3JkZXJMZWZ0OiIzcHggc29saWQgcmdiKDI0MiwxMjMsMTY4KSIscGFkZGluZzoiNHB4IDhweCIsbWFyZ2luOiIycHggMCIsY29sb3I6InJnYigyNDIsMTc1LDIwNSkiLGZvbnRTaXplOiIwLjkyZW0iLGZvbnRGYW1pbHk6ImluaGVyaXQiLHdoaXRlU3BhY2U6InByZS13cmFwIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuNXMgZWFzZSJ9KSxyLmlubmVySFRNTD0nPHNwYW4gc3R5bGU9Im9wYWNpdHk6MC42O2ZvbnQtc2l6ZTowLjg1ZW0iPuKal++4jyBQRVg8L3NwYW4+44CAJytlLnNwbGl0KGAKYCkuam9pbigiPGJyPiIpLG4uYXBwZW5kQ2hpbGQociksbi5zY3JvbGxUb3A9bi5zY3JvbGxIZWlnaHQsdD4wJiZzZXRUaW1lb3V0KCgpPT57ci5zdHlsZS5vcGFjaXR5PSIwIixzZXRUaW1lb3V0KCgpPT5yLnJlbW92ZSgpLDUwMCl9LHQpO3JldHVybn1jYXRjaHt9dHJ5e3R5cGVvZiBDaGF0Um9vbU1lc3NhZ2U9PSJmdW5jdGlvbiImJkNoYXRSb29tTWVzc2FnZSh7VHlwZToiTG9jYWxNZXNzYWdlIixTZW5kZXI6UGxheWVyPy5NZW1iZXJOdW1iZXIsQ29udGVudDpgPGZvbnQgY29sb3I9IiNmMmFmY2QiPuKal++4jyBbUEVYXSAke2V9PC9mb250PmB9KX1jYXRjaHt9fWZ1bmN0aW9uIEN0KGUpe2NvbnN0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pO2lmKCh0WzBdfHwiIikudG9Mb3dlckNhc2UoKSE9PSIvcGV4IilyZXR1cm4hMTtjb25zdCBuPSh0WzFdfHwiIikudG9Mb3dlckNhc2UoKTtpZighbnx8bj09PSJoZWxwIilyZXR1cm4gdih4KCJoZWxwIix7djpOfSkpLCEwO2lmKG49PT0iaG93dG8iKXJldHVybiB2KHgoImhvd3RvIix7djpOfSkpLCEwO2lmKG49PT0icmVzZXQiKXJldHVybiB0WzJdPT09InllcyI/KFdlKCksdih4KCJyZXNldERvbmUiKSkpOnYoeCgicmVzZXRDb25maXJtIikrIu+8iOWGjeasoei+k+WFpSAvcGV4IHJlc2V0IHllcyDnoa7orqTvvIkiKSwhMDtpZihuPT09InNob3ciKXtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUZXh0QXJlYUNoYXRMb2ciKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLkNoYXRMb2ciKTtyZXR1cm4gcj8ocXIoKT9SbigpOlpyKHIpLCEwKToodih4KCJub0NoYXRCb3giKSksITApfWlmKG49PT0ic3RhdHVzIilyZXR1cm4gdih4KCJzdGF0dXNMaW5lIix7c3RhdGU6bW4oKX0pKSwhMDtpZihuPT09InNldHRpbmdzIil7dHJ5e3R5cGVvZiBQcmVmZXJlbmNlU3Vic2NyZWVuRXh0ZW5zaW9uc09wZW49PSJmdW5jdGlvbiI/UHJlZmVyZW5jZVN1YnNjcmVlbkV4dGVuc2lvbnNPcGVuKGd0KTp2KHgoImNhbnRPcGVuU2V0dGluZ3MiKSl9Y2F0Y2gocil7digi4pqg77iPIOaJk+W8gOiuvue9rumhteWksei0pTogIityLm1lc3NhZ2UpfXJldHVybiEwfXJldHVybiBuPT09InNhdmUiPyhfKCEwKSx2KCLorr7nva7lt7Lkv53lrZjjgIIiKSwhMCk6KHYoeCgiY21kVW5rbm93biIse3N1YjpufSkpLCEwKX1mdW5jdGlvbiBlaSgpe3RyeXtpZih0eXBlb2YgQ29tbWFuZENvbWJpbmU9PSJmdW5jdGlvbiIpcmV0dXJuIENvbW1hbmRDb21iaW5lKFt7VGFnOiJwZXgiLERlc2NyaXB0aW9uOiLkurrmoLzmjpLms4Tmj5Lku7bmjIfku6TvvIgvcGV4IGhlbHAg5p+l55yL6K+05piO77yJIixBY3Rpb246ZT0+e0N0KCIvcGV4ICIrKGU/PyIiKSl9fV0pLCEwfWNhdGNoKGUpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0gQ29tbWFuZENvbWJpbmUg5rOo5YaM5aSx6LSlOiIsZS5tZXNzYWdlKX1yZXR1cm4hMX1sZXQgWnQ9ITE7ZnVuY3Rpb24gRG4oKXtadHx8KFp0PSEwLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGU9PntpZihlLmtleSE9PSJFbnRlciIpcmV0dXJuO2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIklucHV0Q2hhdCIpfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYVtpZCo9IkNoYXQiXScpO2lmKCF0KXJldHVybjtjb25zdCBuPXQudmFsdWUudHJpbSgpO24udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCIvcGV4IikmJihDdChuKSxlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0LnZhbHVlPSIiKX0sITApKX1sZXQgZW49ITE7ZnVuY3Rpb24gdGkoKXtlbnx8KGVuPSEwLCFlaSgpJiZEbigpKX1mdW5jdGlvbiBuaSgpe0RuKCl9Y29uc3Qgcmk9Im1vZHVsZXByZWxvYWQiLGlpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSx0bj17fSxvaT1mdW5jdGlvbih0LG4scil7bGV0IGk9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IHU9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKGg9PlByb21pc2UucmVzb2x2ZShoKS50aGVuKEE9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOkF9KSxBPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpBfSkpKSl9O2NvbnN0IHM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGM9YT8ubm9uY2V8fGE/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtpPXUobi5tYXAoZD0+e2lmKGQ9aWkoZCxyKSxkIGluIHRuKXJldHVybjt0bltkXT0hMDtjb25zdCBoPWQuZW5kc1dpdGgoIi5jc3MiKSxBPWg/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYocilmb3IobGV0IEQ9cy5sZW5ndGgtMTtEPj0wO0QtLSl7Y29uc3Qgd2U9c1tEXTtpZih3ZS5ocmVmPT09ZCYmKCFofHx3ZS5yZWw9PT0ic3R5bGVzaGVldCIpKXJldHVybn1lbHNlIGlmKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpbmtbaHJlZj0iJHtkfSJdJHtBfWApKXJldHVybjtjb25zdCBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtpZihrLnJlbD1oPyJzdHlsZXNoZWV0IjpyaSxofHwoay5hcz0ic2NyaXB0Iiksay5jcm9zc09yaWdpbj0iIixrLmhyZWY9ZCxjJiZrLnNldEF0dHJpYnV0ZSgibm9uY2UiLGMpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoayksaClyZXR1cm4gbmV3IFByb21pc2UoKEQsd2UpPT57ay5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixEKSxrLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+d2UobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gbyhzKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPXMsd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBzfXJldHVybiBpLnRoZW4ocz0+e2Zvcihjb25zdCBhIG9mIHN8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmbyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChvKX0pfTtsZXQgSmU9ITE7ZnVuY3Rpb24gYWkoZSx0KXtjb25zdCBuPVUoKTtpZihuKXRyeXtuLmhvb2tGdW5jdGlvbigiQ2hhdFJvb21SdW4iLDAsKHIsaSk9Pntjb25zdCBvPWkocik7dHJ5e3RyeXtwcigpfWNhdGNoe31pZihKZSlyZXR1cm4gbztKZT0hMCxlJiZlKCl9Y2F0Y2h7fXJldHVybiBvfSksbi5ob29rRnVuY3Rpb24oIkNoYXRSb29tTGVhdmUiLDAsKHIsaSk9Pntjb25zdCBvPWkocik7dHJ5e3QmJnQoKSxKZT0hMX1jYXRjaHt9cmV0dXJuIG99KX1jYXRjaChyKXtjb25zb2xlLndhcm4oIuKal++4j1tQRVhdIOaIv+mXtOeUn+WRveWRqOacn+aMgumSqeWksei0pToiLHIubWVzc2FnZSl9fWZ1bmN0aW9uIHNpKGUpe2NvbnN0IHQ9VSgpO2lmKHQpdHJ5e3Qub25VbmxvYWQoKCk9Pnt0cnl7ZSYmZSgpfWNhdGNoe319KX1jYXRjaHt9fWZ1bmN0aW9uIGxpKGUpe2NvbnN0IHQ9e2FjdGl2aXR5TmFtZTpudWxsLGdyb3VwTmFtZTpudWxsLHRhcmdldDpudWxsLGl0ZW1OYW1lOm51bGx9O3RyeXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZT8uRGljdGlvbmFyeSk/ZS5EaWN0aW9uYXJ5OltdO2Zvcihjb25zdCByIG9mIG4pIXJ8fHR5cGVvZiByIT0ib2JqZWN0Inx8KHQuYWN0aXZpdHlOYW1lPT1udWxsJiZ0eXBlb2Ygci5BY3Rpdml0eU5hbWU9PSJzdHJpbmciJiYodC5hY3Rpdml0eU5hbWU9ci5BY3Rpdml0eU5hbWUpLHQuZ3JvdXBOYW1lPT1udWxsJiZyLlRhZz09PSJGb2N1c0Fzc2V0R3JvdXAiJiZyLkZvY3VzR3JvdXBOYW1lJiYodC5ncm91cE5hbWU9ci5Gb2N1c0dyb3VwTmFtZSksdC50YXJnZXQ9PW51bGwmJnR5cGVvZiByLlRhcmdldENoYXJhY3Rlcj09Im51bWJlciImJih0LnRhcmdldD1yLlRhcmdldENoYXJhY3RlciksdC5pdGVtTmFtZT09bnVsbCYmci5UYWc9PT0iQWN0aXZpdHlBc3NldCImJnIuQXNzZXROYW1lJiYodC5pdGVtTmFtZT1yLkFzc2V0TmFtZSkpfWNhdGNoe31pZighdC5hY3Rpdml0eU5hbWUpdHJ5e2NvbnN0IG49dHlwZW9mIGU/LkNvbnRlbnQ9PSJzdHJpbmciP0pTT04ucGFyc2UoZS5Db250ZW50KTpudWxsO24mJnR5cGVvZiBuPT0ib2JqZWN0IiYmKHQuYWN0aXZpdHlOYW1lPW4uTmFtZT8/bi5BY3Rpdml0eU5hbWU/P3QuYWN0aXZpdHlOYW1lLHQuZ3JvdXBOYW1lPW4uR3JvdXBOYW1lPz90Lmdyb3VwTmFtZSx0LnRhcmdldD1uLlRhcmdldE1lbWJlck51bWJlcj8/bi5UYXJnZXRDaGFyYWN0ZXI/P3QudGFyZ2V0KX1jYXRjaHt9cmV0dXJuIHR9Y29uc3QgY2k9WyLkurrmoLzoja/msLQiLCJwZXJzb25hIl07ZnVuY3Rpb24gbm4oZSl7Y29uc3QgdD1zdChlKTtyZXR1cm4gdD9jaS5jb25jYXQobC5rZXl3b3Jkc3x8W10pLnNvbWUobj0+VnQodCxuKSk/InBlcnNvbmEiOihsLm5vcm1hbEtleXdvcmRzfHxbXSkuc29tZShuPT5WdCh0LG4pKT8ibm9ybWFsIjpudWxsOm51bGx9ZnVuY3Rpb24gUnQoZSx0KXt0cnl7aWYoZT09PSJTaXBJdGVtIil7Y29uc3Qgbj1FZSh0KTtpZihuKXtpZihuLmludmFsaWQpe0p0KHQsUGxheWVyPy5NZW1iZXJOdW1iZXIsbiksYigiJU5BTUUl5Zad5LqG5LiA5Y+j77yM5LuA5LmI5ZGz6YGT5Lmf5rKh5pyJ4oCmIik7cmV0dXJufWNvbnN0IGk9bi5vd25lck1lbWJlck51bWJlcj09PVBsYXllcj8uTWVtYmVyTnVtYmVyO0p0KHQsUGxheWVyPy5NZW1iZXJOdW1iZXIsbiksaSYmZi5tb2RlPT09bS5CTEFOSz9CZSgiJU5BTUUl5Zad5Zue5LqG6Ieq5bex55qE5Lq65qC85Yed6IO277yM5oSP6K+G5LiA5LiL5a2Q5Zue5p2l5LqG77yBIik6KHAoIuWHneiDtuiiq+WWneaOiToiLG4uZ2VsSWQpLGIoIiVOQU1FJei/t+i/t+eziueziuWcsOaKiuaJi+mHjOeahOWHneiDtuWWneS6huS4i+WOu+KApiIpKTtyZXR1cm59Y29uc3Qgcj1ubih0KTtyJiZsLmVuYWJsZWQ/KHAoIuWRveS4reWFs+mUruivjSDihpIiLHIpLHV0KHIpKTpwKCLmnKrlkb3kuK3lhbPplK7or43vvIznianlk4HmlofmnKw6IixzdCh0KS5zbGljZSgwLDYwKSk7cmV0dXJufWlmKGU9PT0iSW5qZWN0Iil7Y29uc3Qgbj1ubih0KTtuJiZsLmVuYWJsZWQ/KHAoIuazqOWwhOWRveS4reWFs+mUruivjSDihpIiLG4pLHV0KG4pKTpwKCLms6jlsITmnKrlkb3kuK3lhbPplK7or43vvIznianlk4HmlofmnKw6IixzdCh0KS5zbGljZSgwLDYwKSl9fWNhdGNoKG4pe3AoIuWkhOeQhua0u+WKqOW8guW4uDoiLG4ubWVzc2FnZSl9fWZ1bmN0aW9uIHVpKGUpe3RyeXtjb25zdCBuPShBcnJheS5pc0FycmF5KGU/LkRpY3Rpb25hcnkpP2UuRGljdGlvbmFyeTpbXSkuZmluZChyPT5yPy5UYWc9PT0iQWN0aXZpdHlBc3NldCIpO3JldHVybiBuP3tBc3NldDpuLkFzc2V0TmFtZT97TmFtZTpuLkFzc2V0TmFtZSxHcm91cDp7TmFtZTpuLkdyb3VwTmFtZX19Om51bGwsQ3JhZnQ6bi5DcmFmdE5hbWU/e05hbWU6bi5DcmFmdE5hbWV9Om51bGx9Om51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGRpKCl7aWUoZT0+e3RyeXtpZihlPy5UeXBlIT09IkFjdGl2aXR5IilyZXR1cm47Y29uc3QgdD1saShlKTtpZighdC5hY3Rpdml0eU5hbWV8fChwKCLmlLbliLDmtLvliqjmtojmga86Iix0LmFjdGl2aXR5TmFtZSwi55uu5qCHOiIsdC50YXJnZXQsIueJqeWTgToiLHQuaXRlbU5hbWV8fCI/Iiwi5Y+R6YCB6ICFOiIsZS5TZW5kZXIpLCEodC50YXJnZXQhPW51bGwmJnQudGFyZ2V0PT09UGxheWVyPy5NZW1iZXJOdW1iZXIpKSlyZXR1cm47UnQodC5hY3Rpdml0eU5hbWUsdWkoZSl8fER0KCkpfWNhdGNoKHQpe3AoIuinpuWPkeajgOa1i+W8guW4uDoiLHQubWVzc2FnZSl9fSl9ZnVuY3Rpb24gZmkoZSl7aWYoZSl0cnl7ZS5ob29rRnVuY3Rpb24oIkFjdGl2aXR5UnVuIiwxLCh0LG4pPT57Y29uc3Qgcj1uKHQpO3RyeXtjb25zdFtpLG8scyxhXT10O2lmKCFpfHwhb3x8IWE/LkFjdGl2aXR5Py5OYW1lfHwhKHR5cGVvZiBpLklzUGxheWVyPT0iZnVuY3Rpb24iJiZpLklzUGxheWVyKCkmJnR5cGVvZiBvLklzUGxheWVyPT0iZnVuY3Rpb24iJiZvLklzUGxheWVyKCkpKXJldHVybiByO2NvbnN0IHU9YS5BY3Rpdml0eS5OYW1lO2lmKHUhPT0iU2lwSXRlbSImJnUhPT0iSW5qZWN0IilyZXR1cm4gcjtjb25zdCBkPWEuSXRlbXx8RHQoKTtwKCLmnKzlnLDliqjkvZwoQWN0aXZpdHlSdW4pOiIsdSwi54mp5ZOBOiIsZD8uQXNzZXQ/Lk5hbWV8fCI/IiksUnQodSxkKX1jYXRjaHt9cmV0dXJuIHJ9KX1jYXRjaCh0KXtwKCJBY3Rpdml0eVJ1biDmjILpkqnlpLHotKU6Iix0Lm1lc3NhZ2UpfX1mdW5jdGlvbiBwaShlKXtpZihlKXRyeXtlLmhvb2tGdW5jdGlvbigiRGlhbG9nQWN0aXZpdHlDbGljayIsMSwodCxuKT0+e2NvbnN0IHI9bih0KTt0cnl7Y29uc3RbaSxvXT10O2lmKCFpfHwhbz8uQWN0aXZpdHk/Lk5hbWV8fHR5cGVvZiBpLklzUGxheWVyIT0iZnVuY3Rpb24ifHwhaS5Jc1BsYXllcigpKXJldHVybiByO2NvbnN0IHM9by5BY3Rpdml0eS5OYW1lO2lmKHMhPT0iU2lwSXRlbSImJnMhPT0iSW5qZWN0IilyZXR1cm4gcjtjb25zdCBhPW8uSXRlbXx8RHQoKTtwKCLngrnlh7vliqjkvZwoRGlhbG9nQWN0aXZpdHlDbGljayk6IixzLCLnianlk4E6IixhPy5Bc3NldD8uTmFtZXx8Ij8iKSxSdChzLGEpfWNhdGNoe31yZXR1cm4gcn0pfWNhdGNoKHQpe3AoIkRpYWxvZ0FjdGl2aXR5Q2xpY2sg5oyC6ZKp5aSx6LSlOiIsdC5tZXNzYWdlKX19ZnVuY3Rpb24gRHQoKXt0cnl7cmV0dXJuIEludmVudG9yeUdldChQbGF5ZXIsIkl0ZW1IYW5kaGVsZCIpfWNhdGNoe3JldHVybiBudWxsfX1jb25zdCBRZT0iUEVYX1BpY2t1cEdlbCIsWmU9IlBFWF9QdXRHZWwiO2Z1bmN0aW9uIFhlKGUpe3RyeXtjb25zdCB0PWU/Lk9ubGluZVNoYXJlZFNldHRpbmdzPy5QRVg/LnN0YXRlO2lmKHQmJnQubW9kZT09PSJibGFuayImJnQuZ2VsSWQpcmV0dXJuIHR9Y2F0Y2h7fXJldHVybiBudWxsfWZ1bmN0aW9uIG1pKGUpe3RyeXtpZighZXx8ZS5NZW1iZXJOdW1iZXI9PW51bGx8fGUuTWVtYmVyTnVtYmVyPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpcmV0dXJuITE7Y29uc3QgdD1YZShlKTtyZXR1cm4hKCF0fHx0LmdlbEhvbGRlcil9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIHlpKGUpe3RyeXtpZighZXx8ZS5NZW1iZXJOdW1iZXI9PW51bGx8fGUuTWVtYmVyTnVtYmVyPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpcmV0dXJuITE7Y29uc3QgdD1YZShlKTtpZighdClyZXR1cm4hMTtjb25zdCBuPUludmVudG9yeUdldChQbGF5ZXIsIkl0ZW1IYW5kaGVsZCIpO2lmKCFufHwha24obikpcmV0dXJuITE7Y29uc3Qgcj1oaShuKTtyZXR1cm4hIXImJiFyLmludmFsaWQmJnIuZ2VsSWQ9PT10LmdlbElkfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBoaShlKXt0cnl7Y29uc3QgdD1lPy5DcmFmdD8uRGVzY3JpcHRpb24/PyIiO2lmKCF0LnN0YXJ0c1dpdGgoIlBFWHwiKSlyZXR1cm4gbnVsbDtjb25zdCBuPXQuc2xpY2UoNCkuc3BsaXQoInwiKSxbcixpXT1uO3JldHVybntnZWxJZDpyLG93bmVyTWVtYmVyTnVtYmVyOitpLGludmFsaWQ6blszXT09PSJJTlZBTElEIn19Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGdpKGUsdCl7dHJ5e2lmKCF0KXtiKCIlTkFNRSXor5XnnYDmjaHotbflh53og7bvvIzkvYblroPlt7Lnu4/kuI3op4HkuobigKYiKTtyZXR1cm59aWYoSW52ZW50b3J5R2V0KFBsYXllciwiSXRlbUhhbmRoZWxkIikpe2IoIiVOQU1FJeaDs+aNoei1t+WHneiDtu+8jOS9huaJi+mHjOW3sue7j+aLv+edgOS4nOilv+S6huOAgiIpO3JldHVybn1jb25zdCBuPXQuZ2VsSWQscj10Lm93bmVyPz9lPy5NZW1iZXJOdW1iZXIsaT10LmV4cGlyZXNBdD8/RGF0ZS5ub3coKSsxODAwKjFlMyxvPVhyKHIsbixpLHQudHlwZT09PSJub3JtYWwiPyJub3JtYWwiOiJwZXJzb25hIik7aWYoIW8pe2IoIiVOQU1FJeivleedgOaNoei1t+WHneiDtu+8jOS9huWksei0peS6huKApiIpO3JldHVybn1QKCJQRVhfR2VsSGVsZCIsW3tUYWc6IkdlbElkIixWYWx1ZTpTdHJpbmcobil9LHtUYWc6IkhvbGRlciIsVmFsdWU6U3RyaW5nKFBsYXllcj8uTWVtYmVyTnVtYmVyKX0se1RhZzoiT3duZXIiLFZhbHVlOlN0cmluZyhyKX1dKTt0cnl7ZT8uT25saW5lU2hhcmVkU2V0dGluZ3M/LlsiUEVYIl0/LnN0YXRlJiYoZS5PbmxpbmVTaGFyZWRTZXR0aW5ncy5QRVguc3RhdGUuZ2VsSG9sZGVyPVBsYXllcj8uTWVtYmVyTnVtYmVyKX1jYXRjaHt9YihgJU5BTUUl5o2h6LW35LqG5Zyw5LiK55qEJHtvLkNyYWZ0Py5OYW1lPz8i5Yed6IO2In3vvIzlsI/lv4PlnLDnq6/kuobotbfmnaXjgIJgKX1jYXRjaChuKXtwKCLmjaHotbflpLHotKU6IixuLm1lc3NhZ2UpfX1mdW5jdGlvbiB4aShlLHQpe3RyeXtpZighdClyZXR1cm47Y29uc3Qgbj10LmdlbElkLHI9dC5vd25lcj8/ZT8uTWVtYmVyTnVtYmVyLGk9SW52ZW50b3J5R2V0KFBsYXllciwiSXRlbUhhbmRoZWxkIik7aWYoIWl8fCFrbihpKSl7YigiJU5BTUUl5oOz5pS+5Zue5Yed6IO277yM5L2G5omL5LiK5bey57uP56m65LqG44CCIik7cmV0dXJufWlmKCFTZShuKSlyZXR1cm47UCgiUEVYX0dlbENvbnN1bWVkIixbe1RhZzoiR2VsSWQiLFZhbHVlOlN0cmluZyhuKX0se1RhZzoiRHJpbmtlciIsVmFsdWU6U3RyaW5nKHIpfSx7VGFnOiJPd25lciIsVmFsdWU6U3RyaW5nKHIpfV0pO3RyeXtlPy5PbmxpbmVTaGFyZWRTZXR0aW5ncz8uWyJQRVgiXT8uc3RhdGUmJihlLk9ubGluZVNoYXJlZFNldHRpbmdzLlBFWC5zdGF0ZT1udWxsKX1jYXRjaHt9YihgJU5BTUUl5oqK5Yed6IO25pS+5Zue5LqGJHtuZShlLCLlr7nmlrkiKX3nmoTouqvkvZPph4zvvIwke25lKGUsIuWvueaWuSIpfeaFouaFouWbnui/h+elnuadpeOAgmApfWNhdGNoKG4pe3AoIuaUvuWbnuWksei0pToiLG4ubWVzc2FnZSl9fWZ1bmN0aW9uIGJpKCl7Y29uc3QgZT1VKCk7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9KG4scik9Pntjb25zdCBpPW4mJm5bMF07cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIiYmaS5pbmNsdWRlcyhRZSk/IuaNoei1t+WHneiDtiI6dHlwZW9mIGk9PSJzdHJpbmciJiZpLmluY2x1ZGVzKFplKT8i5pS+5Zue5Yed6IO2IjpyKG4pfTt0cnl7ZS5ob29rRnVuY3Rpb24oIkFjdGl2aXR5RGljdGlvbmFyeVRleHQiLDAsdCl9Y2F0Y2h7fXRyeXtlLmhvb2tGdW5jdGlvbigiVGV4dEdldCIsMCx0KSxlLmhvb2tGdW5jdGlvbigiVGV4dEdldEluU2NvcGUiLDAsdCl9Y2F0Y2h7fXRyeXtlLmhvb2tGdW5jdGlvbigiRGlhbG9nQnVpbGRBY3Rpdml0aWVzIiwxMCwobixyKT0+e2NvbnN0IGk9cihuKTt0cnl7Y29uc3Qgbz1uJiZuWzBdO2lmKHR5cGVvZiBEaWFsb2dBY3Rpdml0eT4idSJ8fCFBcnJheS5pc0FycmF5KERpYWxvZ0FjdGl2aXR5KXx8IW98fG8uTWVtYmVyTnVtYmVyPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpcmV0dXJuIGk7Y29uc3Qgcz1jPT5EaWFsb2dBY3Rpdml0eS5zb21lKHU9PnUmJnUuQWN0aXZpdHkmJnUuQWN0aXZpdHkuTmFtZT09PWMpPyExOihEaWFsb2dBY3Rpdml0eS5wdXNoKHtBY3Rpdml0eTp7TmFtZTpjLE1heFByb2dyZXNzOjB9LEl0ZW06bnVsbCxHcm91cDpvLkZvY3VzR3JvdXAmJm8uRm9jdXNHcm91cC5OYW1lfHwiSXRlbUhhbmRzIn0pLCEwKTtsZXQgYT0hMTtpZihtaShvKSYmKGE9cyhRZSl8fGEpLHlpKG8pJiYoYT1zKFplKXx8YSksIWEpcmV0dXJuIGk7dHJ5e3R5cGVvZiBEaWFsb2dNZW51TWFwcGluZzwidSImJkRpYWxvZ01lbnVNYXBwaW5nLmFjdGl2aXRpZXMmJnR5cGVvZiBEaWFsb2dNZW51TWFwcGluZy5hY3Rpdml0aWVzLlJlbG9hZD09ImZ1bmN0aW9uIiYmRGlhbG9nTWVudU1hcHBpbmcuYWN0aXZpdGllcy5SZWxvYWQobnVsbCx7cmVzZXQ6ITAscmVzZXREaWFsb2dJdGVtczohMX0pfWNhdGNoe319Y2F0Y2h7fXJldHVybiBpfSl9Y2F0Y2h7fXRyeXtlLmhvb2tGdW5jdGlvbigiRGlhbG9nQWN0aXZpdHlDbGljayIsMSwobixyKT0+e2NvbnN0W2ksb109bjtsZXQgcz0hMTt0cnl7Y29uc3QgYT1vJiZvLkFjdGl2aXR5JiZvLkFjdGl2aXR5Lk5hbWU7aSYmYT09PVFlPyhnaShpLFhlKGkpKSxzPSEwKTppJiZhPT09WmUmJih4aShpLFhlKGkpKSxzPSEwKX1jYXRjaHt9aWYocyl7dHJ5e3R5cGVvZiBEaWFsb2dMZWF2ZT09ImZ1bmN0aW9uIiYmRGlhbG9nTGVhdmUoKX1jYXRjaHt9cmV0dXJufXJldHVybiByKG4pfSl9Y2F0Y2h7fX1sZXQgUT1udWxsLFo9bnVsbCxlZT1udWxsO2Z1bmN0aW9uIHZpKHtnZWxJZDplLG93bmVyOnQsZHJpbmtlcjpufSl7dHJ5e2lmKHQ9PT1QbGF5ZXI/Lk1lbWJlck51bWJlcilpZihmLm1vZGU9PT1tLkJMQU5LKXtjb25zdCByPWYuZ2VsVHlwZT09PSJub3JtYWwiO3AoIuaIkeeahOWHneiDtuiiq+aUvuWbnui6q+S9kzoiLGUsImRyaW5rZXI6IixuKSxCZShyPyIlTkFNRSXllp3lm57kuoboh6rlt7HnmoTlh53og7bvvIzog4Pph4zkuIDpmLXnv7vohb7igKYiOiIlTkFNRSXllp3lm57kuoboh6rlt7HnmoTkurrmoLzlh53og7bvvIzmhI/or4bkuIDkuIvlrZDlm57mnaXkuobvvIEiLCgpPT57Y29uc3QgaT14bigiZmVlZCIpO050KCJmZWVkIixpKX0pfWVsc2UgcCgi5oiR55qE5Yed6IO26KKr5raI6ICXOiIsZSl9Y2F0Y2h7fX1mdW5jdGlvbiBFaSgpe2NvbnN0IGU9VSgpO2RpKCksZSYmZmkoZSksZSYmcGkoZSksZSYmU3IoZSksZSYmRXIoZSksZSYmS3IoZSksenIodmkpLEFyKCksYmkoKSxRJiZjbGVhckludGVydmFsKFEpLFE9c2V0SW50ZXJ2YWwoKCk9Pnt0cnl7SXIoRGF0ZS5ub3coKSl9Y2F0Y2h7fX0sMjUwKSxaJiZjbGVhckludGVydmFsKFopLFo9c2V0SW50ZXJ2YWwoKCk9Pnt0cnl7VHIoKX1jYXRjaHt9fSwxZTMpLGVlJiZjbGVhckludGVydmFsKGVlKSxlZT1zZXRJbnRlcnZhbCgoKT0+e2lmKGwuc2VlUmVtb3RlQW5pbXMpdHJ5e0hyKCl9Y2F0Y2h7fX0sMWUzKX1mdW5jdGlvbiBTaSgpe1EmJihjbGVhckludGVydmFsKFEpLFE9bnVsbCksWiYmKGNsZWFySW50ZXJ2YWwoWiksWj1udWxsKSxlZSYmKGNsZWFySW50ZXJ2YWwoZWUpLGVlPW51bGwpO3RyeXtqcigpfWNhdGNoe319Y29uc3Qgcm49InBleC1zZXR0aW5ncy1wYW5lbCIsd2k9W3trZXk6ImJhc2ljIixsYWJlbDoi5Z+65pys6K6+572uIn0se2tleToiZXhjcmV0ZSIsbGFiZWw6IuaOkuWHuuiuvue9riJ9LHtrZXk6ImZ4IixsYWJlbDoi54m55pWI6K6+572uIn0se2tleToicGVybSIsbGFiZWw6Iuadg+mZkOiuvue9riJ9LHtrZXk6ImV4cHIiLGxhYmVsOiLooajmg4Xorr7nva4ifSx7a2V5OiJzb3VuZCIsbGFiZWw6Iumfs+aViOiuvue9riJ9LHtrZXk6ImFib3V0IixsYWJlbDoi5YWz5LqO5o+S5Lu2In1dLFBpPVtbIkV5ZWJyb3dzIixbWyJTb2Z0Iiwi5p+U5ZKMIl0sWyJMb3dlcmVkIiwi5L2O5Z6CIl0sWyJSYWlzZWQiLCLkuIrmiawiXSxbIkZyb3duIiwi55qx55yJIl1dXSxbIkV5ZXMiLFtbIlZlcnlMZXdkIiwi5aSx56WeIl0sWyJIZWFydFBpbmsiLCLlv4PlvaLnsokiXSxbIkxld2RIZWFydFBpbmsiLCLmtqnlv4PnsokiXSxbIkNsb3NlZCIsIumXreecvCJdLFsiRGF6ZWQiLCLmgY3mg5oiXV1dLFsiTW91dGgiLFtbIkZyb3duIiwi5oq/5Zi0Il0sWyJNb2FuIiwi5ZG75ZCfIl0sWyJBaGVnYW8iLCLpmL/pu5HpopwiXSxbIk9wZW4iLCLlvKDlvIAiXV1dLFsiQmx1c2giLFtbIkhpZ2giLCLpq5giXSxbIk1lZGl1bSIsIuS4rSJdLFsiTG93Iiwi5L2OIl0sWyJWZXJ5SGlnaCIsIuaegemrmCJdXV1dO2xldCBvbj0hMTtmdW5jdGlvbiBNaSgpe2lmKCFvbil7b249ITA7dHJ5e2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLmlkPSJwZXgtc2V0dGluZ3Mtc3R5bGVzIixlLnRleHRDb250ZW50PWAKI3BleC1zZXR0aW5ncy1wYW5lbHtwb3NpdGlvbjpmaXhlZDtsZWZ0OjUwJTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTsKICB3aWR0aDptaW4oMTAwdncsMTgwMHB4KTtoZWlnaHQ6bWluKDEwMHZoLDEwMDBweCk7CiAgYmFja2dyb3VuZDojMWUxOTMwO2JvcmRlcjoycHggc29saWQgI2YyN2JhODtib3JkZXItcmFkaXVzOjEycHg7Y29sb3I6I2U4ZTRmNTsKICBmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc2l6ZToyMHB4O3otaW5kZXg6MjE0NzQ4MzY0Njtib3gtc2hhZG93OjAgOHB4IDQwcHggcmdiYSgwLDAsMCwuNjUpOwogIGRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufQoucGV4LXMtaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MThweCAyNnB4OwogIGJvcmRlci1ib3R0b206MXB4IHNvbGlkICMzNzMwNWE7YmFja2dyb3VuZDojMjQxZDNhfQoucGV4LXMtdGl0bGV7Y29sb3I6I2YyN2JhODtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjI0cHh9Ci5wZXgtcy1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4OjE7bWluLWhlaWdodDowfQoucGV4LXMtbmF2e3dpZHRoOjI0MHB4O2JvcmRlci1yaWdodDoxcHggc29saWQgIzM3MzA1YTtwYWRkaW5nOjE2cHggMTRweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHh9Ci5wZXgtc2VjLWJ0bntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiM5YjkzYmQ7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNXB4IDE4cHg7CiAgdGV4dC1hbGlnbjpsZWZ0O2ZvbnQtc2l6ZToyMHB4O2N1cnNvcjpwb2ludGVyfQoucGV4LXNlYy1idG46aG92ZXJ7YmFja2dyb3VuZDojMmEyNDUwO2NvbG9yOiNlOGU0ZjV9Ci5wZXgtc2VjLWJ0bi5vbntiYWNrZ3JvdW5kOiNmMjdiYTg7Y29sb3I6IzI0MWQzYTtmb250LXdlaWdodDo2MDB9Ci5wZXgtcy1jb250ZW50e2ZsZXg6MTtvdmVyZmxvdy15OmF1dG87cGFkZGluZzoxOHB4IDI2cHh9Ci5wZXgtcm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjE4cHg7bWFyZ2luOjExcHggMH0KLnBleC1sYmx7Y29sb3I6I2M5YzJlMDtmb250LXNpemU6MjBweDtmbGV4LXNocmluazowfQoucGV4LWN0bHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4fQoucGV4LXRnbHtiYWNrZ3JvdW5kOiMzYTMyNzA7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHggMjhweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MjBweH0KLnBleC10Z2wub257YmFja2dyb3VuZDojMmE2YjYzfQoucGV4LXNlbHtiYWNrZ3JvdW5kOiMyYTZiNjM7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICMzNzMwNWE7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjIwcHh9Ci5wZXgtbnVte2JhY2tncm91bmQ6IzJiMjQ1MDtjb2xvcjojZThlNGY1O2JvcmRlcjoxcHggc29saWQgI2MyNTU3Zjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHggMTRweDt3aWR0aDoxMzBweDtmb250LXNpemU6MjBweH0KLnBleC10eHR7YmFja2dyb3VuZDojMmIyNDUwO2NvbG9yOiNlOGU0ZjU7Ym9yZGVyOjFweCBzb2xpZCAjMzczMDVhO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTBweCAxNHB4OwogIHdpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTkuNXB4O3Jlc2l6ZTp2ZXJ0aWNhbDttaW4taGVpZ2h0OjEwMHB4fQoucGV4LW5vdGV7Y29sb3I6IzdkNzQ5ZTtmb250LXNpemU6MTcuNXB4O21hcmdpbjo2cHggMCAxNHB4O2xpbmUtaGVpZ2h0OjEuN30KLnBleC1zZWMtdGl0bGV7Y29sb3I6I2YyN2JhODtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjIxLjVweDttYXJnaW46MTZweCAwIDZweH0KLnBleC1hY3R7YmFja2dyb3VuZDojM2EzMjcwO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDI2cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjIwcHh9Ci5wZXgtYWN0OmhvdmVye2JhY2tncm91bmQ6IzRhNDA3Zn0KLnBleC1hY3QuZGFuZ2Vye2JhY2tncm91bmQ6Izg3MjYyNn0KLnBleC1hY3Qub2t7YmFja2dyb3VuZDojMmE2YjYzfQoucGV4LWFib3V0LWxpbmV7Y29sb3I6I2M5YzJlMDtmb250LXNpemU6MjBweDtsaW5lLWhlaWdodDoxLjg7bWFyZ2luOjNweCAwfQoucGV4LWFib3V0LWhlYWR7Y29sb3I6I2YyN2JhODtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjIxLjVweDttYXJnaW46MTRweCAwIDRweH0KLnBleC1leHByLWRlbHtiYWNrZ3JvdW5kOiM4NzI2MjY7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjhweCAxOHB4O21hcmdpbi1sZWZ0OjEycHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE3cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfQoucGV4LWNvbmZpcm0tZGlhbG9ne3Bvc2l0aW9uOmZpeGVkO2xlZnQ6NTAlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOjQyMHB4OwogIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2JhKDMwLDEwLDQwLC45OCkscmdiYSg1MCwxNSw2MCwuOTgpKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDEyMCwyMDAsLjQ1KTsKICBib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyMnB4O3otaW5kZXg6MjE0NzQ4MzY0Nztjb2xvcjojZmZkZGVlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7CiAgYm94LXNoYWRvdzowIDhweCA0MHB4IHJnYmEoMTgwLDYwLDE2MCwuNCk7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5wZXgtY29uZmlybS1kaWFsb2cgLm1zZ3tmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjE4cHg7bGluZS1oZWlnaHQ6MS42O3doaXRlLXNwYWNlOnByZS1saW5lfQoucGV4LWNvbmZpcm0tZGlhbG9nIGJ1dHRvbntib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCAyNnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjttYXJnaW46MCA3cHh9Ci5wZXgtY29uZmlybS1kaWFsb2cgLm5ve2JhY2tncm91bmQ6IzRhMjAzMDtjb2xvcjojZmZhYWJifQoucGV4LWNvbmZpcm0tZGlhbG9nIC55ZXN7YmFja2dyb3VuZDojODcyNjI2O2NvbG9yOiNhYWZmYWF9Ci5wZXgtYnRuLXJvd3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7bWFyZ2luOjEwcHggMDtmbGV4LXdyYXA6d3JhcH0KYCxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfWNhdGNoe319fWZ1bmN0aW9uIEUoZSl7cmV0dXJuIFN0cmluZyhlPz8iIikucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iil9ZnVuY3Rpb24gZXQoZSx0KXt0cnl7Y29uc3Qgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucGV4LWNvbmZpcm0tZGlhbG9nIik7ciYmci5yZW1vdmUoKX1jYXRjaHt9Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtuLmNsYXNzTmFtZT0icGV4LWNvbmZpcm0tZGlhbG9nIixuLmlubmVySFRNTD1gPGRpdiBjbGFzcz0ibXNnIj4ke0UoZSl9PC9kaXY+CiAgICAgICAgPGRpdj48YnV0dG9uIGNsYXNzPSJubyIgdHlwZT0iYnV0dG9uIj7lj5bmtog8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJ5ZXMiIHR5cGU9ImJ1dHRvbiI+56Gu6K6kPC9idXR0b24+PC9kaXY+YCxuLnF1ZXJ5U2VsZWN0b3IoIi5ubyIpLm9uY2xpY2s9KCk9Pm4ucmVtb3ZlKCksbi5xdWVyeVNlbGVjdG9yKCIueWVzIikub25jbGljaz0oKT0+e24ucmVtb3ZlKCk7dHJ5e3QmJnQoKX1jYXRjaHt9fSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pfWNvbnN0IFY9e2FjdGl2ZToiYmFzaWMiLHBhbmVsOm51bGwsX25lZWRzUmVuZGVyOiEwLGxvYWQoKXt0cnl7dW4oKX1jYXRjaHt9fSxydW4oKXt0cnl7TWkoKSwoIXRoaXMucGFuZWx8fCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChybikpJiYodGhpcy5fYnVpbGQoKSx0aGlzLl9uZWVkc1JlbmRlcj0hMCksdGhpcy5fbmVlZHNSZW5kZXImJih0aGlzLl9uZWVkc1JlbmRlcj0hMSx0aGlzLl9yZW5kZXIodGhpcy5hY3RpdmUpLHRoaXMuX3N5bmNOYXYoKSl9Y2F0Y2goZSl7cCgi6K6+572u6Z2i5p2/5riy5p+T5byC5bi4OiIsZS5tZXNzYWdlKX19LGNsaWNrKCl7fSx1bmxvYWQoKXt0aGlzLl9jbG9zZSgpfSxleGl0KCl7dGhpcy5fY2xvc2UoKX0sX2Nsb3NlKCl7dHJ5e3RoaXMucGFuZWwmJih0aGlzLnBhbmVsLnJlbW92ZSgpLHRoaXMucGFuZWw9bnVsbCl9Y2F0Y2h7fX0sX2J1aWxkKCl7aWYodGhpcy5wYW5lbCl0cnl7dGhpcy5wYW5lbC5yZW1vdmUoKX1jYXRjaHt9Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmlkPXJuLGUuaW5uZXJIVE1MPWAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LXMtaGVhZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtcy10aXRsZSI+5Lq65qC85o6S5rOEIMK3IOiuvue9rjwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtYWN0IiBkYXRhLXBleC1jbG9zZT0iMSI+4pyVPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtcy1ib2R5Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zLW5hdiI+CiAgICAgICAgICAgICAgICAgICAgJHt3aS5tYXAodD0+YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icGV4LXNlYy1idG4iIGRhdGEtcGV4LXNlYz0iJHt0LmtleX0iIHRpdGxlPSIke0UodC5sYWJlbCl9Ij4ke0UodC5sYWJlbCl9PC9idXR0b24+YCkuam9pbigiIil9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zLWNvbnRlbnQiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj5gLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksdGhpcy5wYW5lbD1lLGUucXVlcnlTZWxlY3RvcigiW2RhdGEtcGV4LWNsb3NlXSIpLm9uY2xpY2s9KCk9Pnt0cnl7dHlwZW9mIFByZWZlcmVuY2VFeGl0PT0iZnVuY3Rpb24iJiZQcmVmZXJlbmNlRXhpdCgpfWNhdGNoe310aGlzLl9jbG9zZSgpfSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBleC1zZWNdIikuZm9yRWFjaCh0PT57dC5vbmNsaWNrPSgpPT57dGhpcy5hY3RpdmUhPT10LmRhdGFzZXQucGV4U2VjJiYodGhpcy5hY3RpdmU9dC5kYXRhc2V0LnBleFNlYyx0aGlzLl9uZWVkc1JlbmRlcj0hMCx0aGlzLnJ1bigpKX19KX0sX3N5bmNOYXYoKXt0cnl7dGhpcy5wYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1wZXgtc2VjXSIpLmZvckVhY2goZT0+e2UuY2xhc3NMaXN0LnRvZ2dsZSgib24iLGUuZGF0YXNldC5wZXhTZWM9PT10aGlzLmFjdGl2ZSl9KX1jYXRjaHt9fSxfcmVuZGVyKGUpe2NvbnN0IHQ9dGhpcy5wYW5lbC5xdWVyeVNlbGVjdG9yKCIucGV4LXMtY29udGVudCIpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bi5jbGFzc05hbWU9InBleC1zLWNvbnRlbnQiLHQmJnQucmVwbGFjZVdpdGgobik7Y29uc3Qgcj10aGlzWyJfc2VjXyIrZV07bi5pbm5lckhUTUw9dHlwZW9mIHI9PSJmdW5jdGlvbiI/ci5jYWxsKHRoaXMpOic8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5pqC5peg5YaF5a65PC9kaXY+Jyx0aGlzLl9iaW5kKG4pLGU9PT0iZXhwciImJnRoaXMuX2Vuc3VyZUV4cHJQcmV2aWV3KCl9LF9iaW5kKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHQ9Pntjb25zdCBuPXQudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXBleC1zaWRlXSIpO2lmKG4pe2NvbnN0IGE9bi5kYXRhc2V0LnBleFNpZGUsYz1uLmRhdGFzZXQucGV4VmFsPT09IjEiO3RoaXMuX3NldFBhdGgoYSxjKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXBleC1zaWRlPSIke2F9Il1gKS5mb3JFYWNoKHU9Pnt1LmNsYXNzTGlzdC50b2dnbGUoIm9uIix1LmRhdGFzZXQucGV4VmFsPT09bi5kYXRhc2V0LnBleFZhbCl9KTtyZXR1cm59Y29uc3Qgcj10LnRhcmdldC5jbG9zZXN0KCJbZGF0YS1wZXgtbW9kZV0iKTtpZihyKXtjb25zdCBhPXIuZGF0YXNldC5wZXhNb2RlO2wuZWRpdE1vZGVzJiYobC5lZGl0TW9kZXNbYV09ci5kYXRhc2V0LnBleE12KTt0cnl7XygpfWNhdGNoe31lLnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXBleC1tb2RlPSIke2F9Il1gKS5mb3JFYWNoKGM9PntjLmNsYXNzTGlzdC50b2dnbGUoIm9uIixjLmRhdGFzZXQucGV4TXY9PT1yLmRhdGFzZXQucGV4TXYpfSk7cmV0dXJufWNvbnN0IGk9dC50YXJnZXQuY2xvc2VzdCgiW2RhdGEtcGV4LWFjdGlvbl0iKTtpZihpKXtjb25zdCBhPXRoaXMuX2FjdGlvbnNbaS5kYXRhc2V0LnBleEFjdGlvbl07YSYmYSgpfWlmKHQudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXBleC1hZGQtZXhwcl0iKSl7Y29uc3QgYT1sLmV4cHJlc3Npb25zPy53YWl0O2lmKEFycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoPDEwKXthLnB1c2goey4uLmwuZXhwcmVzc2lvbnMuZXhjcmV0ZXx8e319KTt0cnl7XygpfWNhdGNoe310aGlzLl9uZWVkc1JlbmRlcj0hMCx0aGlzLnJ1bigpfXJldHVybn1jb25zdCBzPXQudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXBleC1kZWwtZXhwcl0iKTtpZihzKXtjb25zdCBhPXBhcnNlSW50KHMuZGF0YXNldC5wZXhEZWxFeHByLDEwKTtldCgn56Gu5a6a5Yig6ZmkIuetieW+heihqOaDhSAnKyhhKzEpKyci5ZCX77yfJywoKT0+e2NvbnN0IGM9bC5leHByZXNzaW9ucz8ud2FpdDtpZihBcnJheS5pc0FycmF5KGMpJiZjW2FdKXtjLnNwbGljZShhLDEpO3RyeXtfKCl9Y2F0Y2h7fXRoaXMuX25lZWRzUmVuZGVyPSEwLHRoaXMucnVuKCl9fSk7cmV0dXJufX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0PT57Y29uc3Qgbj10LnRhcmdldDtpZihuLmRhdGFzZXQucGV4U2VsZWN0KXtjb25zdCByPW4udmFsdWUsaT1OdW1iZXIocik7dGhpcy5fc2V0UGF0aChuLmRhdGFzZXQucGV4U2VsZWN0LHIhPT0iIiYmL15cZCskLy50ZXN0KHIpJiYhaXNOYU4oaSk/aTpyKTtjb25zdCBvPW4uZGF0YXNldC5wZXhTZWxlY3Q7aWYoby5zdGFydHNXaXRoKCJleHByZXNzaW9ucy53YWl0LiIpKXtjb25zdCBzPXBhcnNlSW50KG8uc3BsaXQoIi4iKS5wb3AoKSwxMCk7aXNOYU4ocyl8fCh0aGlzLl9leHByRWRpdEtleT1zKX1lbHNlIG8uc3RhcnRzV2l0aCgiZXhwcmVzc2lvbnMuIik/dGhpcy5fZXhwckVkaXRLZXk9by5zcGxpdCgiLiIpWzFdOm8uc3RhcnRzV2l0aCgibm9ybWFsRXhwcmVzc2lvbiIpJiYodGhpcy5fZXhwckVkaXRLZXk9Im5vcm1hbCIpOyhvLnN0YXJ0c1dpdGgoImV4cHJlc3Npb25zLiIpfHxvLnN0YXJ0c1dpdGgoIm5vcm1hbEV4cHJlc3Npb24iKSkmJnRoaXMuX2Vuc3VyZUV4cHJQcmV2aWV3KCk7cmV0dXJufWlmKG4uZGF0YXNldC5wZXhOdW1iZXIpe2NvbnN0IHI9cGFyc2VJbnQobi52YWx1ZSwxMCk7aXNOYU4ocil8fHRoaXMuX3NldFBhdGgobi5kYXRhc2V0LnBleE51bWJlcixyKTtyZXR1cm59aWYobi5kYXRhc2V0LnBleFRleHQpe3RoaXMuX3NldFBhdGgobi5kYXRhc2V0LnBleFRleHQsbi52YWx1ZSk7cmV0dXJufWlmKG4uZGF0YXNldC5wZXhTb3VuZCl7Y29uc3Qgcj1uLmRhdGFzZXQucGV4U291bmQsaT1uLnZhbHVlLnNwbGl0KGAKYCkubWFwKG89Pm8udHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7bC5zb3VuZHNbcl09aTt0cnl7UmUoKX1jYXRjaHt9fX0pfSxfZ2V0UGF0aChlKXtyZXR1cm4gZS5zcGxpdCgiLiIpLnJlZHVjZSgodCxuKT0+dD09bnVsbD90OnRbbl0sbCl9LF9zZXRQYXRoKGUsdCl7aWYoZT09PSJ3aGl0ZWxpc3RUZXh0Iil7bC53aGl0ZWxpc3Q9U3RyaW5nKHQpLnNwbGl0KC9bXHMsXSsvKS5tYXAobz0+by50cmltKCkpLmZpbHRlcihCb29sZWFuKTt0cnl7XygpfWNhdGNoe31yZXR1cm59aWYoZT09PSJrZXl3b3JkcyJ8fGU9PT0ibm9ybWFsS2V5d29yZHMiKXtsW2VdPVN0cmluZyh0KS5zcGxpdChgCmApLm1hcChvPT5vLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO3RyeXtfKCl9Y2F0Y2h7fXJldHVybn1pZihlLnN0YXJ0c1dpdGgoInNvdW5kT24uIikpe2NvbnN0IG89ZS5zcGxpdCgiLiIpO2wuc291bmRPbiYmKGwuc291bmRPbltvWzFdXT0hIXQpO3RyeXtSZSgpfWNhdGNoe31yZXR1cm59Y29uc3Qgbj1lLnNwbGl0KCIuIikscj1uLnBvcCgpO2xldCBpPWw7Zm9yKGNvbnN0IG8gb2YgbilpPWlbb107aWYoaSYmciBpbiBpKXtpW3JdPXQ7dHJ5e18oKX1jYXRjaHt9fX0sX2FjdGlvbnM6e3JlY292ZXI6KCk9PntldChg56Gu5a6a6KaB5by65Yi25oGi5aSN5ZCX77yfCuatpOaTjeS9nOS8mueri+WNs+a4hemZpOWFqOmDqCBQRVgg54q25oCB77yM5YyF5ous562J5b6F44CB5aSx56We5LiO5Yed6IO244CCYCwoKT0+V2UoKSl9LHJlc2V0OigpPT57ZXQoYOehruWumuimgeaBouWkjem7mOiupOiuvue9ruWQl++8nwrmiYDmnInorr7nva7lsIbov5jljp/kuLrliJ3lp4vlgLzjgIJgLCgpPT57R2UoUigpKSxfKCEwKSxnZSghMCksVi5fbmVlZHNSZW5kZXI9ITAsVi5ydW4oKX0pfSxleHBvcnRDZmc6KCk9Pnt0cnl7Zm4oKX1jYXRjaHt9fSxpbXBvcnRDZmc6KCk9Pnt0cnl7cG4oKX1jYXRjaHt9fX0sX3JvdyhlLHQsbil7cmV0dXJuYDxkaXYgY2xhc3M9InBleC1yb3ciPjxkaXYgY2xhc3M9InBleC1sYmwiIHRpdGxlPSIke0UodCl9Ij4ke0UoZSl9PC9kaXY+PGRpdiBjbGFzcz0icGV4LWN0bCI+JHtufTwvZGl2PjwvZGl2PmB9LF90Z2woZSx0PSLlvIAgLyDlhbMiKXtjb25zdCBuPSEhdGhpcy5fZ2V0UGF0aChlKTtyZXR1cm5gPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtdGdsICR7bj8iIjoib24ifSIgZGF0YS1wZXgtc2lkZT0iJHtlfSIgZGF0YS1wZXgtdmFsPSIwIiB0aXRsZT0iJHtFKHQpfSI+5YWzPC9idXR0b24+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtdGdsICR7bj8ib24iOiIifSIgZGF0YS1wZXgtc2lkZT0iJHtlfSIgZGF0YS1wZXgtdmFsPSIxIiB0aXRsZT0iJHtFKHQpfSI+5byAPC9idXR0b24+YH0sX3NlbChlLHQsbil7Y29uc3Qgcj10aGlzLl9nZXRQYXRoKGUpO3JldHVybmA8c2VsZWN0IGNsYXNzPSJwZXgtc2VsIiBkYXRhLXBleC1zZWxlY3Q9IiR7ZX0iIHRpdGxlPSIke0Uobnx8IiIpfSI+JHt0Lm1hcCgoW2ksb10pPT5gPG9wdGlvbiB2YWx1ZT0iJHtpfSIgJHtTdHJpbmcocik9PT1TdHJpbmcoaSk/InNlbGVjdGVkIjoiIn0+JHtFKG8pfTwvb3B0aW9uPmApLmpvaW4oIiIpfTwvc2VsZWN0PmB9LF9udW0oZSx0LG4scil7cmV0dXJuYDxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJwZXgtbnVtIiBkYXRhLXBleC1udW1iZXI9IiR7ZX0iIG1pbj0iJHt0fSIgbWF4PSIke259IiB2YWx1ZT0iJHt0aGlzLl9nZXRQYXRoKGUpfSIgdGl0bGU9IiR7RShyfHwiIil9Ij5gfSxfdHh0KGUsdCxuKXtjb25zdCByPXRoaXMuX2dldFBhdGgoZSksaT1BcnJheS5pc0FycmF5KHIpP3Iuam9pbihgCmApOnI/PyIiO3JldHVybmA8dGV4dGFyZWEgY2xhc3M9InBleC10eHQiIGRhdGEtcGV4LXRleHQ9IiR7ZX0iIHRpdGxlPSIke0UodHx8IiIpfSIgcGxhY2Vob2xkZXI9IiR7RShufHwiIil9Ij4ke0UoaSl9PC90ZXh0YXJlYT5gfSxfc2VjX2Jhc2ljKCl7cmV0dXJuYAogICAgICAgICAgICAke3RoaXMuX3Jvdygi5ZCv55So5o+S5Lu2Iiwi5YWz6Zet5ZCO5omA5pyJ6Kem5Y+R5LiO6KGo546w5YWo6YOo5YGc55SoIix0aGlzLl90Z2woImVuYWJsZWQiLCLmj5Lku7bmgLvlvIDlhbMiKSl9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuinpuWPkeWFs+mUruivjTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5YWz6ZSu6K+N5YaZ5Zyo54mp5ZOB55qE5Yi25L2c5ZCN44CB5Yi25L2c5o+P6L+w5oiW6ZuV5Yi75o+P6L+w5Lit77yb5Zad5LiL5oiW5rOo5bCE6K+l54mp5ZOB5Y2z6Kem5Y+R44CCPC9kaXY+CiAgICAgICAgICAgICR7dGhpcy5fcm93KCLkurrmoLzlh53og7blhbPplK7or40iLCLlkb3kuK3lkI7ov5vlhaXlrozmlbTmjpLlh7rmtYHnqIvvvJrnnKnmmZXjgIHmjpLlh7rjgIHlpLHnpZ4iLCIiKX0KICAgICAgICAgICAgJHt0aGlzLl90eHQoImtleXdvcmRzIiwi5Lq65qC85Yed6IO25YWz6ZSu6K+N77yM5q+P6KGM5LiA5LiqIiwi5aaC77ya5Lq65qC86I2v5rC0Iil9CiAgICAgICAgICAgICR7dGhpcy5fcm93KCLmma7pgJrlh53og7blhbPplK7or40iLCLlkb3kuK3lkI7mjpLlh7rmma7pgJrlh53og7bvvJrnnKnmmZXjgIHooajmg4XjgIHlh53og7bokL3lnLDvvIzkvYbmsqHmnInku7vkvZXlpLHnpZ7pmZDliLYiLCIiKX0KICAgICAgICAgICAgJHt0aGlzLl90eHQoIm5vcm1hbEtleXdvcmRzIiwi5pmu6YCa5Yed6IO25YWz6ZSu6K+N77yM5q+P6KGM5LiA5LiqIiwi5aaC77ya5pmu6YCa5Yed6IO2Iil9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuWuieWFqDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYnRuLXJvdyI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InBleC1hY3QgZGFuZ2VyIiBkYXRhLXBleC1hY3Rpb249InJlY292ZXIiPuW8uuWItuaBouWkjTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LW5vdGUiPuW8uuWItuaBouWkjeS8mueri+WNs+a4hemZpOWFqOmDqCBQRVgg54q25oCB77yM5YyF5ous562J5b6F44CB5aSx56We5LiO5Yed6IO277yM6ZyA6KaB5by556qX5LqM5qyh56Gu6K6k44CCPC9kaXY+YH0sX3NlY19leGNyZXRlKCl7cmV0dXJuYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtc2VjLXRpdGxlIj7ml7bpl7Q8L2Rpdj4KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuaOkuWHuuWJjeetieW+he+8iOenku+8iSIsIuWWneS4i+aIluazqOWwhOWQjuWIsOW8gOWni+aOkuWHuuS5i+mXtOeahOetieW+heaXtumXtO+8m+etieW+hemfs+aViOaMieWug+iHquWKqOWIhuaute+8iDEwIOenkiAxIOauteKApjUwIOenkuWPiuS7peS4iiA1IOaute+8iSIsdGhpcy5fbnVtKCJ3YWl0U2Vjb25kcyIsMTAsNjAwLCIxMCDliLAgNjAwIOenkiIpKX0KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuiHgOmDqOmYu+aMoeS4iumZkO+8iOWIhu+8iSIsIuiHgOmDqOijheWkh+S9jeacieS4nOilv+aXtuetieW+heWkmuS5he+8jOi2heaXtuiNr+aViOmdmem7mOa2iOWksSIsdGhpcy5fbnVtKCJibG9ja2VkV2FpdE1pbnV0ZXMiLDEsMzAsIjEg5YiwIDMwIOWIhumSnyIpKX0KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuiHquWKqOWbnuW9ku+8iOWIhu+8iSIsIuaOkuWHuuWQjuWkmuS5heayoeiiq+WWguWbnuWwseiHquWKqOaBouWkjSIsdGhpcy5fbnVtKCJhdXRvUmV2ZXJ0TWludXRlcyIsMSwzMCwiMSDliLAgMzAg5YiG6ZKfIikpfQogICAgICAgICAgICAke3RoaXMuX3Jvdygi6Ieq5Yqo5Zue5b2SIiwi6LaF5pe25ZCO6Ieq5Yqo5oGi5aSN5bm25aSE55CG5Yed6IO277yb5YWz6Zet5ZCO5Yed6IO25LiA55u0562J5ZaC5ZueIix0aGlzLl90Z2woImF1dG9SZXZlcnRFbmFibGVkIiwi6Ieq5Yqo5Zue5b2S5byA5YWzIikpfQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtc2VjLXRpdGxlIj7lh53og7Y8L2Rpdj4KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuWHneiDtuWIsOacnyIsIuWIsOacn+aXtuWHneiDtua2iOaVo+a2iOWkse+8jOaIluWPmOaIkOaMgeacieiAheaJi+S4iueahOaXoOaViOWHneiDtuawuOS5heS/neeVmSIsdGhpcy5fc2VsKCJnZWxFeHBpcmVNb2RlIixbWyJ2YW5pc2giLCLmtojmlaPmtojlpLEiXSxbImludmFsaWQiLCLlj5jml6DmlYjlh53og7YiXV0sIuWIsOacn+ihjOS4uiIpKX0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LXNlYy10aXRsZSI+5aSx56We6ZmQ5Yi2PC9kaXY+CiAgICAgICAgICAgICR7dGhpcy5fcm93KCLlpLHnpZ7pmZDliLYiLCLlpLHnpZ7ml7bkuI3og73liqjjgIHnpoHoqIDjgIHkuI3nnKjnnLzjgIHlp7/lir/plIHlrprvvJvlhbPpl63lkI7lpLHnpZ7lj6rkv53nlZnop4bop4nooajnjrAiLHRoaXMuX3RnbCgicmVzdHJpY3Rpb25zIiwi5aSx56We6ZmQ5Yi25oC75byA5YWzIikpfQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5YWz6Zet5aSx56We6ZmQ5Yi25ZCO77yM5o6S5Ye66ICF5aSx56We5pyf6Ze05LuN5Y+v5Lul6KGM5Yqo44CB6K+06K+d5ZKM56a75byA5oi/6Ze044CCPC9kaXY+YH0sX3NlY19meCgpe3JldHVybmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LXNlYy10aXRsZSI+54m55pWI5byA5YWzPC9kaXY+CiAgICAgICAgICAgICR7dGhpcy5fcm93KCLnrYnlvoXmnJ/nnKnmmZUiLCLllp3kuIvlkI7nrYnlvoXmnJ/nmoTnnKnmmZXohInlhrLmlYjmnpwiLHRoaXMuX3RnbCgiZnhEaXp6eSIsIuecqeaZleiEieWGsiIpKX0KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuWkseelnum7keeZvSIsIuWkseelnuaXtueUu+mdoum7keeZveW5tuWOi+aal++8jOaal+inkuW8uuW8semaj+eJueaViOW8uuW6piIsdGhpcy5fdGdsKCJmeEJsYW5rIiwi6buR55m954m55pWIIikpfQogICAgICAgICAgICAke3RoaXMuX3Jvdygi5qih57OK54m55pWIIiwi55yp5pmV44CB5o6S5Ye65LiO5aSx56We5pe255qE55S76Z2i5qih57OKIix0aGlzLl90Z2woImZ4Qmx1ciIsIuaooeeziueJueaViCIpKX0KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuaOkuWHuumch+WKqCIsIuaOkuWHuuWKqOeUu+acn+mXtOeahOeUu+mdoumch+WKqCIsdGhpcy5fdGdsKCJmeFNoYWtlIiwi5o6S5Ye66ZyH5YqoIikpfQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtc2VjLXRpdGxlIj7lvLrluqbkuI7op4bph448L2Rpdj4KICAgICAgICAgICAgJHt0aGlzLl9yb3coIueJueaViOW8uuW6piIsIuaVsOWtl+i2iuWkp++8jOecqeaZleOAgeaooeeziuOAgeaal+inkui2iuW8uiIsdGhpcy5fc2VsKCJlZmZlY3RMZXZlbCIsW1sxLCIxIl0sWzIsIjIiXSxbMywiMyJdLFs0LCI0Il0sWzUsIjUiXV0sIueJueaViOW8uuW6piAxIOWIsCA1IikpfQogICAgICAgICAgICAke3RoaXMuX3Jvdygi5aSx56We6KeG6YeOIiwi5aSx56We5pe255S76Z2i5pW05L2T5Y+Y5pqX55qE56iL5bqm77yM5YWz6Zet5YiZ6KeG6YeO5LiN5Y+YIix0aGlzLl9zZWwoImJsaW5kTGV2ZWwiLFtbMCwi5pegIl0sWzEsIui9u+W6piJdLFsyLCLkuK3luqYiXSxbMywi6YeN5bqmIl1dLCLlpLHnpZ7op4bph47moaPkvY0iKSl9CiAgICAgICAgICAgICR7dGhpcy5fcm93KCLlh53og7blm77lsYIiLCLlh53og7bnlLvlnKjnrKzlh6DlsYLvvIzmlbDlrZfotorlpKfotorpnaDkuIrlsYLvvIwyNCDlj4rku6XkuIrkuLrpobblsYLvvIjkuI3ooqvpga7kvY/vvIkiLHRoaXMuX251bSgiZ2VsTGF5ZXIiLDAsOTksIjAg5YiwIDk577yM6buY6K6kIDI0IikpfQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtc2VjLXRpdGxlIj7ku5bkurrop4bop5I8L2Rpdj4KICAgICAgICAgICAgJHt0aGlzLl9yb3coIueci+WIq+S6uuaOkuWHuuWKqOeUuyIsIuaYr+WQpuaSreaUvuS7luS6uuaOkuWHuuaXtueahOWKqOeUuyIsdGhpcy5fdGdsKCJzZWVSZW1vdGVBbmltcyIsIui/nOeoi+aOkuWHuuWKqOeUuyIpKX0KICAgICAgICAgICAgJHt0aGlzLl9yb3coIuWFtuS7lueOqeWutumfs+aViCIsIuaYr+WQpuaSreaUvuWFtuS7lueOqeWutuW5v+aSreeahOmfs+aViO+8iOetieW+hS/mjpLlh7ov5pS+5Zue77yJ77yb6buY6K6k5YWz6ZetID0g5Y+q5pyJ6Ieq5bex5ZCs5b6X5YiwIix0aGlzLl90Z2woImhlYXJSZW1vdGVTb3VuZHMiLCLlhbbku5bnjqnlrrbpn7PmlYgiKSl9CiAgICAgICAgICAgICR7dGhpcy5fcm93KCLorqHml7blmajlj6/op4HmgKciLCLlpLTpobblgJLorqHml7bosIHog73nnIvliLAiLHRoaXMuX3NlbCgidGltZXJWaXNpYmlsaXR5IixbWyJzZWxmIiwi5LuF6Ieq5bexIl0sWyJ3aGl0ZWxpc3QiLCLku4Xnmb3lkI3ljZUiXSxbIm90aGVycyIsIuS7heS7luS6uiJdLFsiYWxsIiwi5omA5pyJ5Lq6Il1dLCLorqHml7blmajlj6/op4HmgKciKSl9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1ub3RlIj7lh53og7blm7rlrprlnKjop5LoibLouqvkvZPlsYLnu5jliLbvvIzkvJrooqvooaPmnI3pga7kvY/vvJvnibnmlYjkuI7lvLrluqblnYfkuLrmnKzlnLDorr7nva7vvIzkuI3kvJrpgJrov4fov5znqIvkv67mlLnlvIDmlL7nu5nku5bkurrjgII8L2Rpdj5gfSxfc2VjX3Blcm0oKXtjb25zdCBlPWwsdD1bWyJ0aW1lIiwi5pe26Ze057G7Iiwi5o6S5Ye65YmN562J5b6F44CB6IeA6YOo6Zi75oyh5LiK6ZmQ44CB6Ieq5Yqo5Zue5b2S5YiG6ZKfIl0sWyJhdXRvUmV2ZXJ0Iiwi5Yed6IO26Ieq5Yqo5Zue5b2SIiwi6Ieq5Yqo5Zue5b2S55qE5byA5YWzIl0sWyJ0aW1lclZpc2liaWxpdHkiLCLorqHml7blmajlj6/op4HmgKciLCLlpLTpobblgJLorqHml7bnmoTlj6/op4HmoaPkvY0iXV0sbj1bWyJvZmYiLCLku4Xoh6rlt7EiXSxbIndoaXRlbGlzdCIsIueZveWQjeWNlSJdLFsiYW55Iiwi5omA5pyJ5Lq6Il1dO2xldCByPSc8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5q+P57G76K6+572u5Y+v54us56uL6YCJ5oup6IO95ZCm6KKr5Yir5Lq66L+c56iL5L+u5pS577yM6buY6K6k5LuF6Ieq5bex44CCPC9kaXY+Jztmb3IoY29uc3RbaSxvLHNdb2YgdCl7Y29uc3QgYT1lLmVkaXRNb2RlcyYmZS5lZGl0TW9kZXNbaV18fCJvZmYiO3IrPXRoaXMuX3JvdyhvLHMsbi5tYXAoKFtjLHVdKT0+YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icGV4LXRnbCAke2E9PT1jPyJvbiI6IiJ9IiBkYXRhLXBleC1tb2RlPSIke2l9IiBkYXRhLXBleC1tdj0iJHtjfSIgdGl0bGU9IiR7RShzKX0iPiR7dX08L2J1dHRvbj5gKS5qb2luKCIiKSl9cmV0dXJuIHIrPWA8ZGl2IGNsYXNzPSJwZXgtc2VjLXRpdGxlIj7nmb3lkI3ljZU8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LW5vdGUiPuaIkOWRmOWPt+mAl+WPt+WIhumalO+8jOaUr+aMgSAkb3duZXLjgIEkbG92ZXIg562J5Luj5Y+377yb6L+c56iL5L+u5pS55p2D6ZmQ6YCJ55m95ZCN5Y2V5pe255Sf5pWI44CCPC9kaXY+CiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0icGV4LXR4dCIgZGF0YS1wZXgtdGV4dD0id2hpdGVsaXN0VGV4dCIgdGl0bGU9IueZveWQjeWNleaIkOWRmOWPtyIgcGxhY2Vob2xkZXI9IuWmgu+8mjEyMzQ1LCA2Nzg5MCI+JHtFKChlLndoaXRlbGlzdHx8W10pLmpvaW4oIiwgIikpfTwvdGV4dGFyZWE+YCxyfSxfc2VjX2V4cHIoKXtjb25zdCBlPWwuZXhwcmVzc2lvbnN8fHt9LHQ9QXJyYXkuaXNBcnJheShlLndhaXQpP2Uud2FpdDpbXTtsZXQgbj1gPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxOHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjEiPmA7bis9YDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuetieW+heihqOaDheaxoDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5o6S5Ye65YmN562J5b6F5pyf6Ze06ZqP5py65oq95Y+W5pKt5pS+77yM5LiO562J5b6F6Z+z5pWI5ZCM5q2l5Ye6546w77yI5ZCM5LiA5pe26Ze054K577yJ77yb5Y+v6Ieq6KGM5re75Yqg5pu05aSa57uE77yI5pyA5aSaIDEwIOe7hO+8ieOAgjwvZGl2PmA7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspbis9YDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuetieW+heihqOaDhSAke3IrMX0KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icGV4LWV4cHItZGVsIiBkYXRhLXBleC1kZWwtZXhwcj0iJHtyfSIgdGl0bGU9IuWIoOmZpOi/mee7hOetieW+heihqOaDhSI+4pyVPC9idXR0b24+PC9kaXY+YCxuKz10aGlzLl9leHByUm93KGBleHByZXNzaW9ucy53YWl0LiR7cn1gKTtyZXR1cm4gbis9JzxkaXYgY2xhc3M9InBleC1idG4tcm93Ij48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InBleC1hY3Qgb2siIGRhdGEtcGV4LWFkZC1leHByPSJ3YWl0IiB0aXRsZT0i5re75Yqg5LiA57uE562J5b6F6KGo5oOF77yI5pyA5aSaIDEwIOe7hO+8iSI+77yLIOaWsOWinuetieW+heihqOaDhTwvYnV0dG9uPjwvZGl2Picsbis9YDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuaOkuWHuuihqOaDhTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5LiO5o6S5Ye65Yqo55S75ZCM5pe25pKt5pS+77yI562J5b6F5pyf6KGo5oOF5LmL5aSW55qE5LiL5LiA57uE77yJPC9kaXY+YCxuKz10aGlzLl9leHByUm93KCJleHByZXNzaW9ucy5leGNyZXRlIiksbis9YDxkaXYgY2xhc3M9InBleC1zZWMtdGl0bGUiPuWkseelnuWumuagvDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSI+5Yed6IO25o6S5Ye65ZCO5a6a5qC877yM5oyB57ut5Yiw5oGi5aSNPC9kaXY+YCxuKz10aGlzLl9leHByUm93KCJleHByZXNzaW9ucy5ibGFuayIpLG4rPWA8ZGl2IGNsYXNzPSJwZXgtc2VjLXRpdGxlIj7mma7pgJrlh53og7booajmg4U8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LW5vdGUiPuaZrumAmuWHneiDtuaOkuWHuuWQjueahOefreaaguihqOaDheWPmOWMljwvZGl2PmAsbis9dGhpcy5fZXhwclJvdygibm9ybWFsRXhwcmVzc2lvbiIpLG4rPWA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6MjAwcHg7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246c3RpY2t5O3RvcDowIj4KICAgICAgICAgICAgICAgIDxpbWcgaWQ9InBleC1leHByLXByZXZpZXciIGFsdD0iIiBzdHlsZT0id2lkdGg6MTcwcHg7aGVpZ2h0OjE3MHB4O2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoycHggc29saWQgI2YyN2JhODtiYWNrZ3JvdW5kOiMyNDFkM2E7b2JqZWN0LWZpdDpjb3ZlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtbm90ZSIgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij7ooajmg4XpooTop4g8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+YCxufSxfZXhwclJvdyhlKXtsZXQgdD0iIjtmb3IoY29uc3RbbixyXW9mIFBpKXQrPXRoaXMuX3JvdyhuLG4rIiDooajmg4UiLHRoaXMuX3NlbChlKyIuIituLHIsbisiIOihqOaDhSIpKTtyZXR1cm4gdH0sX2V4cHJQcmV2aWV3S2V5Om51bGwsX2V4cHJFZGl0S2V5OjAsX2Vuc3VyZUV4cHJQcmV2aWV3KCl7Y29uc3QgZT10aGlzLl9leHByRWRpdEtleT09PSJub3JtYWwiP2wubm9ybWFsRXhwcmVzc2lvbjp0eXBlb2YgdGhpcy5fZXhwckVkaXRLZXk9PSJudW1iZXIiP2wuZXhwcmVzc2lvbnM/LndhaXQ/Llt0aGlzLl9leHByRWRpdEtleV06bC5leHByZXNzaW9ucz8uW3RoaXMuX2V4cHJFZGl0S2V5XTtpZighZSlyZXR1cm47Y29uc3QgdD1TdHJpbmcodGhpcy5fZXhwckVkaXRLZXkpKyI6IitKU09OLnN0cmluZ2lmeShlKTtpZih0PT09dGhpcy5fZXhwclByZXZpZXdLZXkpcmV0dXJuO3RoaXMuX2V4cHJQcmV2aWV3S2V5PXQ7Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGV4LWV4cHItcHJldmlldyIpO2lmKG4pdHJ5e2lmKHR5cGVvZiBQbGF5ZXI+InUifHwhUGxheWVyfHx0eXBlb2YgQ2hhcmFjdGVyTG9hZENhbnZhcyE9ImZ1bmN0aW9uIil7dGhpcy5fZmFsbGJhY2tQcmV2aWV3KGUsbik7cmV0dXJufWNvbnN0IHI9dGhpcy5fZXhwYW5kRXhwcihlKSxpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoUGxheWVyKSksUGxheWVyKTtpLk1lbWJlck51bWJlcj0tNzc3NzcsaS5BcHBlYXJhbmNlPShQbGF5ZXIuQXBwZWFyYW5jZXx8W10pLm1hcChzPT57Y29uc3QgYT1zLkFzc2V0Lkdyb3VwLk5hbWU7aWYoclthXT09PXZvaWQgMClyZXR1cm4gcztjb25zdCBjPU9iamVjdC5hc3NpZ24oe30scyk7cmV0dXJuIGMuUHJvcGVydHk9T2JqZWN0LmFzc2lnbih7fSxzLlByb3BlcnR5KSxjLlByb3BlcnR5LkV4cHJlc3Npb249clthXSxjfSksaS5DYW52YXM9bnVsbCxpLkNhbnZhc0JsaW5rPW51bGwsaS5NdXN0RHJhdz0hMDt0cnl7Q2hhcmFjdGVyTG9hZENhbnZhcyhpKX1jYXRjaHt9Y29uc3Qgbz0oKT0+e3RyeXtjb25zdCBzPWkuQ2FudmFzO3MmJnMud2lkdGgmJnRoaXMuX2NhcHR1cmVGYWNlKHMsbil9Y2F0Y2h7fX07bygpLHNldFRpbWVvdXQobywxNjApLHNldFRpbWVvdXQobyw0MjApLHNldFRpbWVvdXQoKCk9PnsoIW4uc3JjfHwhbi5zcmMuc3RhcnRzV2l0aCgiZGF0YToiKSkmJnRoaXMuX2ZhbGxiYWNrUHJldmlldyhlLG4pfSwxZTMpfWNhdGNoe3RoaXMuX2ZhbGxiYWNrUHJldmlldyhlLG4pfX0sX2ZhbGxiYWNrUHJldmlldyhlLHQpe3RyeXtpZih0eXBlb2YgUGxheWVyPiJ1Inx8IVBsYXllcj8uQXBwZWFyYW5jZXx8dHlwZW9mIENoYXJhY3RlclJlZnJlc2ghPSJmdW5jdGlvbiIpcmV0dXJuO2NvbnN0IG49dGhpcy5fZXhwYW5kRXhwcihlKSxyPXt9LGk9W107Zm9yKGNvbnN0W28sc11vZiBPYmplY3QuZW50cmllcyhuKSl0cnl7aWYocz09bnVsbCljb250aW51ZTtjb25zdCBhPVBsYXllci5BcHBlYXJhbmNlLmZpbmQoYz0+Yy5Bc3NldC5Hcm91cC5OYW1lPT09byk7aWYoIWEpY29udGludWU7cltvXT1hLlByb3BlcnR5Py5FeHByZXNzaW9uPz9udWxsLGEuUHJvcGVydHl8fChhLlByb3BlcnR5PXt9KSxhLlByb3BlcnR5LkV4cHJlc3Npb249cyxpLnB1c2gobyl9Y2F0Y2h7fWlmKCFpLmxlbmd0aClyZXR1cm47dHJ5e0NoYXJhY3RlclJlZnJlc2goUGxheWVyLCExLCExKX1jYXRjaHt9c2V0VGltZW91dCgoKT0+e3RyeXtQbGF5ZXI/LkNhbnZhcz8ud2lkdGgmJnRoaXMuX2NhcHR1cmVGYWNlKFBsYXllci5DYW52YXMsdCl9Y2F0Y2h7fXRyeXtmb3IoY29uc3RbbyxzXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtjb25zdCBhPVBsYXllci5BcHBlYXJhbmNlLmZpbmQoYz0+Yy5Bc3NldC5Hcm91cC5OYW1lPT09byk7YSYmKGEuUHJvcGVydHl8fChhLlByb3BlcnR5PXt9KSxhLlByb3BlcnR5LkV4cHJlc3Npb249cyl9Q2hhcmFjdGVyUmVmcmVzaChQbGF5ZXIsITEsITEpfWNhdGNoe319LDMwMCl9Y2F0Y2h7fX0sX2NhcHR1cmVGYWNlKGUsdCl7dHJ5e2NvbnN0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ci53aWR0aD1yLmhlaWdodD0zMjA7Y29uc3QgaT1yLmdldENvbnRleHQoIjJkIiksbz1lLndpZHRoKi4yLHM9ZS53aWR0aCouNS1vLzIsYT1lLmhlaWdodCouNDMtbyouMjI7aS5kcmF3SW1hZ2UoZSxzLGEsbyxvLDAsMCwzMjAsMzIwKTtjb25zdCBjPW5ldyBJbWFnZTtjLm9ubG9hZD0oKT0+e3RyeXt0LnNyYz1jLnNyY31jYXRjaHt9fSxjLnNyYz1yLnRvRGF0YVVSTCgpfWNhdGNoe319LF9leHBhbmRFeHByKGUpe2NvbnN0IHQ9ZS5FeWVzPz9udWxsLG49ZS5FeWVzMiE9PXZvaWQgMD9lLkV5ZXMyOnQ7cmV0dXJue0V5ZWJyb3dzOmUuRXllYnJvd3M/P251bGwsRXllczp0LEV5ZXMyOm4sTW91dGg6ZS5Nb3V0aD8/bnVsbCxCbHVzaDplLkJsdXNoPz9udWxsLOWPs+ecvF9MdXppOnQs5bem55y8X0x1emk6bn19LF9zZWNfc291bmQoKXtjb25zdCBlPWwuc291bmRzfHx7d2FpdDpbXSxleGNyZXRlOltdLGZlZWQ6W119LHQ9W1sid2FpdCIsIuetieW+hemfs+aViCIsIuaOkuWHuuWJjeetieW+heacn+mXtOWIhuauteaSreaUvu+8jOS4juetieW+heihqOaDheWQjOatpeWHuueOsO+8mjEwIOenkiAxIOauteOAgTIwIOenkiAyIOauteOAgTMwIOenkiAzIOauteOAgTQwIOenkiA0IOauteOAgTUwIOenkuWPiuS7peS4iiA1IOaute+8jOWdh+WMgOWIhuW4g+maj+acuumAieaute+8m+WGhee9riA1IOaute+8iENETu+8ie+8jOiHquWumuS5ieWcsOWdgOWKoOWFpemaj+acuuaxoCJdLFsiZXhjcmV0ZSIsIuaOkuWHuumfs+aViCIsIuaOkuWHuuWKqOeUu+acn+mXtOaSreaUvu+8m+WKqOeUu+mVv+W6puiHquWKqOWvuem9kOmfs+aViOaXtumVv++8iOm7mOiupCA3LjM0IOenku+8iSJdLFsiZmVlZCIsIuaUvuWbnumfs+aViCIsIuiiq+WWguWbnuOAgem7keeZveeJueaViOa3oeWHuue7k+adn+WQjuaSreaUvu+8iOm7mOiupCAzLjk2IOenku+8iSJdXTtsZXQgbj0nPGRpdiBjbGFzcz0icGV4LW5vdGUiPuavj+exu+mfs+aViOacieeLrOeri+W8gOWFs++8iOWFsyA9IOacrOWcsOS4jeaSre+8jOS5n+S4jeW5v+aSree7meWIq+S6uu+8ie+8m+e0oOadkOavj+ihjOS4gOS4quWcsOWdgO+8jOeVmeepuueUqOWGhee9rum7mOiupOOAgjwvZGl2Pic7Zm9yKGNvbnN0W3IsaSxvXW9mIHQpe2NvbnN0IHM9QXJyYXkuaXNBcnJheShlW3JdKT9lW3JdOltdO24rPWA8ZGl2IGNsYXNzPSJwZXgtc2VjLXRpdGxlIj4ke2l944CAJHt0aGlzLl90Z2woInNvdW5kT24uIityLGkrIuW8gOWFsyIpfTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LW5vdGUiPiR7b308L2Rpdj4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0icGV4LXR4dCIgZGF0YS1wZXgtc291bmQ9IiR7cn0iIHRpdGxlPSIke0Uobyl9IiBwbGFjZWhvbGRlcj0iaHR0cHM6Ly/igKYiPiR7RShzLmpvaW4oYApgKSl9PC90ZXh0YXJlYT5gfXJldHVybiBufSxfc2VjX2Fib3V0KCl7cmV0dXJuYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtaGVhZCI+546p5rOV6K+05piOPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1saW5lIj4xLiDliLbkvZzkuIDnk7bppa7mlpnvvIzlnKjliLbkvZzlkI3miJbpm5XliLvmj4/ov7Dph4zlhpnkuIrop6blj5HlhbPplK7or43jgII8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWxpbmUiPjIuIOWWneS4i+aIluazqOWwhOWQjui/m+WFpeaOkuWHuuetieW+he+8muecqeaZleiEieWGsu+8jOWJjeS4pOS4quihqOaDheWcqOS4ieWIhuS5i+S4gOWSjOS4ieWIhuS5i+S6jOWkhOaSreaUvuOAgjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtbGluZSI+My4g5Yiw5o6S5Ye65pe25Yi75qOA5p+l6IeA6YOo6KOF5aSH5L2N77ya56m65YiZ5o6S5Ye677yM5pyJ5Lic6KW/5Lya562J5b6F77yM5ou/5o6J56uL5Yi75o6S5Ye644CCPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1saW5lIj40LiDmjpLlh7rml7bnrKzkuInkuKrooajmg4XkuI7liqjnlLvlkIzmkq3vvIznlLvpnaLliafng4jpnIfliqjlubbmqKHns4rjgII8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWxpbmUiPjUuIOS6uuagvOWHneiDtuaOkuWHuuWQjuWkseelnu+8mum7keeZveOAgeS4jeiDveWKqOOAgeemgeiogOOAgeS4jeecqOecvOOAgeinhumHjuWPmOaal++8jOWHneiDtuiQveWcqOiEmui+ueOAgjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtbGluZSI+Ni4g54K55Ye75aSx56We6ICF77yM5Zyo5a+56K+d5qGG5Lit5o2h6LW35Yed6IO277yM5Lqk6L+Y5Y6f5Li75Lq65ZaC5Zue5Y2z5oGi5aSN77yb5Yiw5pyf5oyJ6K6+572u5raI5pWj5oiW5Y+Y5peg5pWI5Yed6IO244CCPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1saW5lIj43LiDmma7pgJrlh53og7bmjpLlh7rlkI7msqHmnInlpLHnpZ7pmZDliLbvvIzlh53og7blkIzmoLflj6/ku6XmjaHotbflkozlloLlm57jgII8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWxpbmUiPjguIOWuieWFqO+8mumaj+aXtuS9v+eUqOWfuuacrOiuvue9ruS4reeahOW8uuWItuaBouWkje+8jOaIlui+k+WFpSAvcGV4IHJlc2V0IHllc+OAgjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtaGVhZCI+5oyH5LukPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1saW5lIj4vcGV4IGhlbHAg5biu5Yqp44CAL3BleCBob3d0byDnjqnms5Xor7TmmI7jgIAvcGV4IHN0YXR1cyDlvZPliY3nirbmgIE8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWxpbmUiPi9wZXggc2hvdyDmjqfliLblj7DpnaLmnb/jgIAvcGV4IHNldHRpbmdzIOaJk+W8gOiuvue9ruOAgC9wZXggcmVzZXQg5by65Yi25oGi5aSNPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1oZWFkIj7niYjmnKw8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1saW5lIj5QZXJzb25hbGl0eSBFeGNyZXRpb24gdiR7Tn08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWhlYWQiPuiwg+ivlTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtbGluZSI+5oyJIEYxMiDmiZPlvIDmtY/op4jlmajmjqfliLblj7DvvIzmioog4pqX77iPW1BFWF0g5byA5aS055qE5oql6ZSZ5L+h5oGv5Y+R57uZ5L2c6ICF44CCPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBleC1hYm91dC1oZWFkIj7mlbDmja48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWJ0bi1yb3ciPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwZXgtYWN0IiBkYXRhLXBleC1hY3Rpb249ImV4cG9ydENmZyI+5a+85Ye66K6+572uPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InBleC1hY3QiIGRhdGEtcGV4LWFjdGlvbj0iaW1wb3J0Q2ZnIj7lr7zlhaXorr7nva48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icGV4LWFjdCBkYW5nZXIiIGRhdGEtcGV4LWFjdGlvbj0icmVzZXQiPuaBouWkjem7mOiupDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGV4LWFib3V0LWhlYWQiPumfs+aViOe0oOadkDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXgtYWJvdXQtbGluZSI+6buY6K6k6Z+z5pWI57Sg5p2Q5p2l6IeqIHBpbmNyZWUuanAg55qE5YWN6LS56LWE5rqQ77yIRnJlZSBBc3NldHPvvInjgII8L2Rpdj5gfX07ZnVuY3Rpb24gQWkoKXtjb25zdCBlPSgpPT57dHJ5e3JldHVybiB0eXBlb2YgUHJlZmVyZW5jZVJlZ2lzdGVyRXh0ZW5zaW9uU2V0dGluZyE9ImZ1bmN0aW9uIj8hMTooUHJlZmVyZW5jZVJlZ2lzdGVyRXh0ZW5zaW9uU2V0dGluZyh7SWRlbnRpZmllcjpndCxCdXR0b25UZXh0OiLkurrmoLzmjpLms4QgUEVYIixsb2FkOigpPT5WLmxvYWQoKSxydW46KCk9PlYucnVuKCksY2xpY2s6KCk9PlYuY2xpY2soKSx1bmxvYWQ6KCk9PlYudW5sb2FkKCksZXhpdDooKT0+Vi5leGl0KCl9KSwhMCl9Y2F0Y2gocil7cmV0dXJuIHAoIuiuvue9rumhteazqOWGjOWksei0pToiLHIubWVzc2FnZSksITF9fTtpZihlKCkpcmV0dXJuO2xldCB0PTA7Y29uc3Qgbj1zZXRJbnRlcnZhbCgoKT0+e3QrKywoZSgpfHx0PjMwKSYmY2xlYXJJbnRlcnZhbChuKX0sMWUzKX1mdW5jdGlvbiBMdChlLHQsbil7aWYodD09bnVsbClyZXR1cm4hMTtjb25zdCByPU51bWJlcih0KTtpZighTnVtYmVyLmlzRmluaXRlKHIpfHxyPD0wKXJldHVybiExO2Zvcihjb25zdCBpIG9mIGV8fFtdKXtjb25zdCBvPVN0cmluZyhpKS50cmltKCk7aWYoL15cZCskLy50ZXN0KG8pKXtpZihOdW1iZXIobyk9PT1yKXJldHVybiEwO2NvbnRpbnVlfXRyeXtpZihvPT09IiRvd25lciIpe2lmKG4mJnR5cGVvZiBuLklzT3duZWRCeU1lbWJlck51bWJlcj09ImZ1bmN0aW9uIiYmbi5Jc093bmVkQnlNZW1iZXJOdW1iZXIocikpcmV0dXJuITB9ZWxzZSBpZihvPT09IiRsb3ZlciJ8fG89PT0iJGxvdmVycyIpe2lmKG4mJnR5cGVvZiBuLklzTG92ZXJPZk1lbWJlck51bWJlcj09ImZ1bmN0aW9uIiYmbi5Jc0xvdmVyT2ZNZW1iZXJOdW1iZXIocikpcmV0dXJuITA7Y29uc3Qgcz1uJiZuLkxvdmVyc2hpcDtpZihBcnJheS5pc0FycmF5KHMpJiZzLm1hcChOdW1iZXIpLmluY2x1ZGVzKHIpKXJldHVybiEwfX1jYXRjaHt9fXJldHVybiExfWZ1bmN0aW9uIExuKGUpe3RyeXtyZXR1cm4gZT8uT25saW5lU2hhcmVkU2V0dGluZ3M/LlsiUEVYIl0/LnN0YXRlfHxudWxsfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBfaShlKXt0cnl7Y29uc3QgdD1MbihlKTtpZighdHx8IXQucmVtYWluaW5nU2VjfHx0LnJlbWFpbmluZ1NlYzw9MHx8dC5tb2RlIT09IndhaXRpbmciJiZ0Lm1vZGUhPT0iYmxvY2tlZCImJnQubW9kZSE9PSJibGFuayIpcmV0dXJuITE7Y29uc3Qgbj1lPy5NZW1iZXJOdW1iZXIhPW51bGwmJlBsYXllcj8uTWVtYmVyTnVtYmVyIT1udWxsJiZlLk1lbWJlck51bWJlcj09PVBsYXllci5NZW1iZXJOdW1iZXIscj10LnRpbWVyVmlzaWJpbGl0eXx8bC50aW1lclZpc2liaWxpdHl8fCJhbGwiO2lmKHI9PT0iYWxsInx8cj09PSJib3RoIilyZXR1cm4hMDtpZihyPT09InNlbGYiKXJldHVybiBuO2lmKHI9PT0ib3RoZXJzIilyZXR1cm4hbjtpZihyPT09IndoaXRlbGlzdCIpe2lmKG4pcmV0dXJuITA7Y29uc3QgaT1lPy5PbmxpbmVTaGFyZWRTZXR0aW5ncz8uWyJQRVgiXT8ud2x8fFtdO3JldHVybiBMdChpLFBsYXllcj8uTWVtYmVyTnVtYmVyLGUpfXJldHVybiExfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBOaShlKXtjb25zdCB0PU1hdGgubWF4KDAsTWF0aC5jZWlsKGUpKSxuPU1hdGguZmxvb3IodC82MCk7cmV0dXJuIFN0cmluZyhuKS5wYWRTdGFydCgyLCIwIikrIjoiK1N0cmluZyh0JTYwKS5wYWRTdGFydCgyLCIwIil9ZnVuY3Rpb24ga2koZSx0LG4scixpKXtjb25zdCBvPXJ8fDEscz10KzEwMCpvLGE9bis5NSpvO2xldCBjO2kuZXhwaXJlc0F0PjA/Yz1NYXRoLm1heCgwLE1hdGguY2VpbCgoaS5leHBpcmVzQXQtRGF0ZS5ub3coKSkvMWUzKSk6Yz1NYXRoLm1heCgwLGkucmVtYWluaW5nU2VjfHwwKTtjb25zdCB1PU5pKGMpO2xldCBkPW51bGw7Y29uc3QgaD10eXBlb2YgTWFpbkNhbnZhczwidSI/TWFpbkNhbnZhczpudWxsO2lmKGgpdHJ5e2Q9aC5mb250LGguZm9udD0iNjAwICIrTWF0aC5tYXgoMTIsTWF0aC5yb3VuZCgxNSpvKSkrJ3B4ICJTZWdvZSBVSSIsIEFyaWFsLCBzYW5zLXNlcmlmJ31jYXRjaHt9aWYoRHJhd1RleHQodSxzKzEsYSsxLCJCbGFjayIsIiIpLERyYXdUZXh0KHUscyxhLCIjZmZmZmZmIiwiIiksaCYmZCE9bnVsbCl0cnl7aC5mb250PWR9Y2F0Y2h7fX1mdW5jdGlvbiBJaSgpe2NvbnN0IGU9VSgpO2lmKGUpdHJ5e2UuaG9va0Z1bmN0aW9uKCJDaGF0Um9vbUNoYXJhY3RlclZpZXdEcmF3T3ZlcmxheSIsMSwodCxuKT0+e2NvbnN0IHI9bih0KTt0cnl7aWYodHlwZW9mIENoYXRSb29tSGlkZUljb25TdGF0ZTwidSImJkNoYXRSb29tSGlkZUljb25TdGF0ZT49MilyZXR1cm4gcjtjb25zdFtpLG8scyxhXT10O2lmKCFpfHwhX2koaSkpcmV0dXJuIHI7Y29uc3QgYz1MbihpKTtraShpLG8scyxhLGMpfWNhdGNoe31yZXR1cm4gcn0pfWNhdGNoKHQpe2NvbnNvbGUud2Fybigi4pqX77iPW1BFWF0g6K6h5pe25Zmo5oyC6ZKp5aSx6LSlOiIsdC5tZXNzYWdlKX19Y29uc3QgTD17eDoxNzE1LHk6MTc1LHc6OTAsaDo5MH0sdmU9InBleC1yZW1vdGUtcGFuZWwiLE9uPVt7a2V5OiJ0aW1lIixsYWJlbDoi5pe26Ze057G7In0se2tleToiYXV0b1JldmVydCIsbGFiZWw6IuWHneiDtuiHquWKqOWbnuW9kiJ9LHtrZXk6InRpbWVyVmlzaWJpbGl0eSIsbGFiZWw6IuiuoeaXtuWZqOWPr+ingeaApyJ9XTtmdW5jdGlvbiB0dChlLHQsbil7cmV0dXJuIHQ9PT0iYW55Ij8hMDp0PT09IndoaXRlbGlzdCI/THQoZT8ud2wsUGxheWVyPy5NZW1iZXJOdW1iZXIsbik6ITF9ZnVuY3Rpb24gJG4oZSx0KXtjb25zdCBuPWU/LmVkaXRNb2Rlc3x8e307cmV0dXJue3RpbWU6dHQoZSxuLnRpbWUsdCksYXV0b1JldmVydDp0dChlLG4uYXV0b1JldmVydCx0KSx0aW1lclZpc2liaWxpdHk6dHQoZSxuLnRpbWVyVmlzaWJpbGl0eSx0KX19ZnVuY3Rpb24gVGkoZSl7cmV0dXJuISEoZSYmKGUudGltZXx8ZS5hdXRvUmV2ZXJ0fHxlLnRpbWVyVmlzaWJpbGl0eSkpfWNvbnN0IFc9e30saGU9e30sT3Q9NmU0LENpPThlMztmdW5jdGlvbiBCbihlKXtjb25zdCB0PU51bWJlcihlKSxuPURhdGUubm93KCkscj1XW3RdO3ImJm4tci50czxPdHx8aGVbdF0mJm4taGVbdF08Q2l8fChoZVt0XT1uLFAoIlBFWF9QZXJtUXVlcnkiLFt7VGFnOiJQRVhfUGVybVF1ZXJ5IixUYXJnZXQ6dH1dKSl9ZnVuY3Rpb24gUmkoZSx0KXtjb25zdCBuPVdbZT8uTWVtYmVyTnVtYmVyXTtyZXR1cm4gbiYmRGF0ZS5ub3coKS1uLnRzPE90P246e3Blcm1zOiRuKHQsZSksdmFsdWVzOm51bGwsdHM6RGF0ZS5ub3coKX19ZnVuY3Rpb24geXQoZSl7dHJ5e3JldHVybiBlPy5PbmxpbmVTaGFyZWRTZXR0aW5ncz8uWyJQRVgiXXx8bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYW4oKXt0cnl7cmV0dXJuIHR5cGVvZiBJbmZvcm1hdGlvblNoZWV0U2VsZWN0aW9uPCJ1Ij9JbmZvcm1hdGlvblNoZWV0U2VsZWN0aW9uOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fWNvbnN0IHk9e29wZW46ITEsdGFyZ2V0Om51bGwscGVybXM6e30sdmFsdWVzOnt9LGRpcnR5OiExfTtmdW5jdGlvbiBEaSgpe2xldCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZlKTtlfHwoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLmlkPXZlLE9iamVjdC5hc3NpZ24oZS5zdHlsZSx7cG9zaXRpb246ImZpeGVkIixsZWZ0OiI1MCUiLHRvcDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLC01MCUpIix3aWR0aDoiMzgwcHgiLGJhY2tncm91bmQ6IiMxZTE5MzAiLGJvcmRlcjoiMnB4IHNvbGlkICNmMjdiYTgiLGJvcmRlclJhZGl1czoiMTJweCIsY29sb3I6IiNlOGU0ZjUiLGZvbnRGYW1pbHk6InNhbnMtc2VyaWYiLGZvbnRTaXplOiIxM3B4IixwYWRkaW5nOiIxNnB4Iix6SW5kZXg6IjIxNDc0ODM2NDYiLGJveFNoYWRvdzoiMCA4cHggNDBweCByZ2JhKDAsMCwwLC42KSIsbWF4SGVpZ2h0OiI4MHZoIixvdmVyZmxvd1k6ImF1dG8ifSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSksZS5zdHlsZS5kaXNwbGF5PSJibG9jayIseS5vcGVuPSEwLEZuKGUpfWZ1bmN0aW9uIGh0KCl7Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh2ZSk7ZSYmKGUuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHkub3Blbj0hMX1mdW5jdGlvbiBBZShlKXtyZXR1cm4gU3RyaW5nKGU/PyIiKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKX1mdW5jdGlvbiBGbihlKXtjb25zdCB0PXkudGFyZ2V0JiZuZSh5LnRhcmdldCl8fCLlr7nmlrkiO2xldCBuPWA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTBweCI+CiAgICAgICAgPGIgc3R5bGU9ImNvbG9yOiNmMjdiYTgiPue8lui+kSAke0FlKHQpfSDnmoQgUEVYIOiuvue9rjwvYj4KICAgICAgICA8YnV0dG9uIGlkPSJwZXgtcmVtb3RlLWNsb3NlIiBzdHlsZT0iYmFja2dyb3VuZDojM2EyYTRhO2NvbG9yOiNlOGU0ZjU7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo0cHggMTBweDtjdXJzb3I6cG9pbnRlciI+4pyVPC9idXR0b24+CiAgICA8L2Rpdj5gO2NvbnN0IHI9KHMsYSxjKT0+e2NvbnN0IHU9ISF5LnBlcm1zW3NdO24rPWA8ZGl2IHN0eWxlPSJtYXJnaW46OHB4IDA7b3BhY2l0eToke3U/MTouNDV9Ij4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6IzliOTNiZDttYXJnaW4tYm90dG9tOjRweCI+JHthfSR7dT8iIjoiIPCflJIifTwvZGl2PiR7Y308L2Rpdj5gfTtyKCJ0aW1lIiwi5o6S5Ye65YmN562J5b6F77yI56eS77yMMH42MDDvvIkiLGA8aW5wdXQgaWQ9InBleC1yLXdhaXQiIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjYwMCIgdmFsdWU9IiR7QWUoeS52YWx1ZXMud2FpdFNlY29uZHMpfSIgJHt5LnBlcm1zLnRpbWU/IiI6ImRpc2FibGVkIn0KICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7YmFja2dyb3VuZDojMjQxZDNhO2NvbG9yOiNlOGU0ZjU7Ym9yZGVyOjFweCBzb2xpZCAjMzczMDVhO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NnB4Ij5gKSxyKCJ0aW1lIiwi6Zi75oyh562J5b6F5LiK6ZmQ77yI5YiG6ZKf77yMMX4zMO+8iSIsYDxpbnB1dCBpZD0icGV4LXItYmxvY2tlZCIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIG1heD0iMzAiIHZhbHVlPSIke0FlKHkudmFsdWVzLmJsb2NrZWRXYWl0TWludXRlcyl9IiAke3kucGVybXMudGltZT8iIjoiZGlzYWJsZWQifQogICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMyNDFkM2E7Y29sb3I6I2U4ZTRmNTtib3JkZXI6MXB4IHNvbGlkICMzNzMwNWE7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo2cHgiPmApLHIoInRpbWUiLCLlh53og7boh6rliqjlm57lvZLvvIjliIbpkp/vvIwxfjMw77yJIixgPGlucHV0IGlkPSJwZXgtci1hdXRvcmV2IiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgbWF4PSIzMCIgdmFsdWU9IiR7QWUoeS52YWx1ZXMuYXV0b1JldmVydE1pbnV0ZXMpfSIgJHt5LnBlcm1zLnRpbWU/IiI6ImRpc2FibGVkIn0KICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7YmFja2dyb3VuZDojMjQxZDNhO2NvbG9yOiNlOGU0ZjU7Ym9yZGVyOjFweCBzb2xpZCAjMzczMDVhO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NnB4Ij5gKSxyKCJ0aW1lclZpc2liaWxpdHkiLCLorqHml7blmajlj6/op4HmgKciLGA8c2VsZWN0IGlkPSJwZXgtci12aXMiICR7eS5wZXJtcy50aW1lclZpc2liaWxpdHk/IiI6ImRpc2FibGVkIn0KICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7YmFja2dyb3VuZDojMmE2YjYzO2NvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjMzczMDVhO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NnB4Ij4KICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ic2VsZiIgJHt5LnZhbHVlcy50aW1lclZpc2liaWxpdHk9PT0ic2VsZiI/InNlbGVjdGVkIjoiIn0+5LuF6Ieq5bexPC9vcHRpb24+CiAgICAgICAgIDxvcHRpb24gdmFsdWU9IndoaXRlbGlzdCIgJHt5LnZhbHVlcy50aW1lclZpc2liaWxpdHk9PT0id2hpdGVsaXN0Ij8ic2VsZWN0ZWQiOiIifT7ku4Xnmb3lkI3ljZU8L29wdGlvbj4KICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ib3RoZXJzIiAke3kudmFsdWVzLnRpbWVyVmlzaWJpbGl0eT09PSJvdGhlcnMiPyJzZWxlY3RlZCI6IiJ9PuS7heS7luS6ujwvb3B0aW9uPgogICAgICAgICA8b3B0aW9uIHZhbHVlPSJhbGwiICR7KHkudmFsdWVzLnRpbWVyVmlzaWJpbGl0eXx8ImFsbCIpPT09ImFsbCI/InNlbGVjdGVkIjoiIn0+5omA5pyJ5Lq6PC9vcHRpb24+PC9zZWxlY3Q+YCkscigiYXV0b1JldmVydCIsIuiHquWKqOWbnuW9kuW8gOWFsyIsYDxzZWxlY3QgaWQ9InBleC1yLWFyIiAke3kucGVybXMuYXV0b1JldmVydD8iIjoiZGlzYWJsZWQifQogICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMyYTZiNjM7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICMzNzMwNWE7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo2cHgiPgogICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIiAke3kudmFsdWVzLmF1dG9SZXZlcnRFbmFibGVkPyJzZWxlY3RlZCI6IiJ9PuW8gOWQrzwvb3B0aW9uPgogICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIiAke3kudmFsdWVzLmF1dG9SZXZlcnRFbmFibGVkPyIiOiJzZWxlY3RlZCJ9PuWFs+mXrTwvb3B0aW9uPjwvc2VsZWN0PmApO2NvbnN0IGk9T2JqZWN0LnZhbHVlcyh5LnBlcm1zKS5zb21lKEJvb2xlYW4pO24rPWA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW4tdG9wOjE0cHgiPgogICAgICAgIDxidXR0b24gaWQ9InBleC1yZW1vdGUtc2F2ZSIgc3R5bGU9ImZsZXg6MTtiYWNrZ3JvdW5kOiR7aT8iIzJhNmI2MyI6IiMzYTJhNGEifTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OHB4O2N1cnNvcjoke2k/InBvaW50ZXIiOiJub3QtYWxsb3dlZCJ9IiAke2k/IiI6ImRpc2FibGVkIn0+5L+d5a2YPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBpZD0icGV4LXJlbW90ZS1yZWZyZXNoIiBzdHlsZT0iZmxleDoxO2JhY2tncm91bmQ6IzNhMmE0YTtjb2xvcjojZThlNGY1O2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OHB4O2N1cnNvcjpwb2ludGVyIj7liLfmlrA8L2J1dHRvbj4KICAgIDwvZGl2PmAsbis9JzxkaXYgc3R5bGU9ImNvbG9yOiM5YjkzYmQ7Zm9udC1zaXplOjExcHg7bWFyZ2luLXRvcDo4cHgiPuS7heWPr+e8lui+keacieadg+mZkOeahOexu+WIq++8iPCflJI95peg5p2D6ZmQ77yJPC9kaXY+JyxlLmlubmVySFRNTD1uLGUucXVlcnlTZWxlY3RvcigiI3BleC1yZW1vdGUtY2xvc2UiKS5vbmNsaWNrPSgpPT5odCgpLGUucXVlcnlTZWxlY3RvcigiI3BleC1yZW1vdGUtcmVmcmVzaCIpLm9uY2xpY2s9KCk9PntpZigheS50YXJnZXQpcmV0dXJuO2NvbnN0IHM9TnVtYmVyKHkudGFyZ2V0Lk1lbWJlck51bWJlcik7ZGVsZXRlIFdbc10sZGVsZXRlIGhlW3NdLEJuKHMpLHYoIuato+WcqOWIt+aWsOadg+mZkOS4juiuvue9ruKApiIsM2UzKX07Y29uc3Qgbz1lLnF1ZXJ5U2VsZWN0b3IoIiNwZXgtcmVtb3RlLXNhdmUiKTtvJiYoby5vbmNsaWNrPSgpPT5PaSgpKX1jb25zdCBudD17fTtsZXQgTz1udWxsLEg9bnVsbDtmdW5jdGlvbiBMaShlKXtjb25zdCB0PU51bWJlcihlPy5NZW1iZXJOdW1iZXIpO2lmKHQ9PW51bGwpcmV0dXJuO2NvbnN0IG49V1t0XTtpZihuJiZEYXRlLm5vdygpLW4udHM8T3Qpe1huKGUpO3JldHVybn1PPXtudW06dCxDOmV9LGhlW3RdPURhdGUubm93KCksUCgiUEVYX1Blcm1RdWVyeSIsW3tUYWc6IlBFWF9QZXJtUXVlcnkiLFRhcmdldDp0fV0se3ByaW9yaXR5OiEwfSk7Y29uc3Qgcj1uZShlKXx8U3RyaW5nKHQpO3YoeCgicmVtb3RlRWRpdExvYWRpbmciLHtuYW1lOnJ9KSw0ZTMpLEgmJmNsZWFyVGltZW91dChIKSxIPXNldFRpbWVvdXQoKCk9PntIPW51bGwsTyYmTy5udW09PT10JiYoTz1udWxsLHYoeCgicmVtb3RlRWRpdExvYWRGYWlsIix7bmFtZTpyfSksOGUzKSl9LDZlMyl9ZnVuY3Rpb24gWG4oZSl7Y29uc3QgdD1lLk1lbWJlck51bWJlcixuPURhdGUubm93KCk7dCE9bnVsbCYmKCFudFt0XXx8bi1udFt0XT4xNWUzKSYmKG50W3RdPW4sUCgiUEVYX0FjY2VzcyIsW3tUYWc6IlBFWF9BY2Nlc3MiLFRhcmdldDp0LE5hbWU6U3RyaW5nKG5lKFBsYXllcil8fFBsYXllcj8uTWVtYmVyTnVtYmVyfHwiIil9XSx7ZGVkdXBlS2V5OiJhY2Nlc3M6Iit0LGRlZHVwZU1zOjE1ZTN9KSkseS50YXJnZXQ9ZTtjb25zdCByPVdbdF07eS5wZXJtcz1yP3IucGVybXM6JG4oeXQoZSksZSkseS52YWx1ZXM9ciYmci52YWx1ZXM/ci52YWx1ZXM6e30sRGkoKX1mdW5jdGlvbiBPaSgpe2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodmUpO2lmKCFlfHwheS50YXJnZXQpcmV0dXJuO2NvbnN0IHQ9aT0+e3RyeXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKGkpPy52YWx1ZX1jYXRjaHtyZXR1cm59fSxuPXt3YWl0U2Vjb25kczp0KCIjcGV4LXItd2FpdCIpIT09dm9pZCAwP3BhcnNlSW50KHQoIiNwZXgtci13YWl0IiksMTApOnZvaWQgMCxibG9ja2VkV2FpdE1pbnV0ZXM6dCgiI3BleC1yLWJsb2NrZWQiKSE9PXZvaWQgMD9wYXJzZUludCh0KCIjcGV4LXItYmxvY2tlZCIpLDEwKTp2b2lkIDAsYXV0b1JldmVydE1pbnV0ZXM6dCgiI3BleC1yLWF1dG9yZXYiKSE9PXZvaWQgMD9wYXJzZUludCh0KCIjcGV4LXItYXV0b3JldiIpLDEwKTp2b2lkIDAsdGltZXJWaXNpYmlsaXR5OnQoIiNwZXgtci12aXMiKSxhdXRvUmV2ZXJ0RW5hYmxlZDp0KCIjcGV4LXItYXIiKT09PSIxIn0scj17fTtmb3IoY29uc3QgaSBvZiBPbil5LnBlcm1zW2kua2V5XSYmKGkua2V5PT09InRpbWUiPyhuLndhaXRTZWNvbmRzIT1udWxsJiYoci53YWl0U2Vjb25kcz10ZShuLndhaXRTZWNvbmRzLDAsNjAwKSksbi5ibG9ja2VkV2FpdE1pbnV0ZXMhPW51bGwmJihyLmJsb2NrZWRXYWl0TWludXRlcz10ZShuLmJsb2NrZWRXYWl0TWludXRlcywxLDMwKSksbi5hdXRvUmV2ZXJ0TWludXRlcyE9bnVsbCYmKHIuYXV0b1JldmVydE1pbnV0ZXM9dGUobi5hdXRvUmV2ZXJ0TWludXRlcywxLDMwKSkpOmkua2V5PT09InRpbWVyVmlzaWJpbGl0eSI/WyJzZWxmIiwid2hpdGVsaXN0Iiwib3RoZXJzIiwiYWxsIl0uaW5jbHVkZXMobi50aW1lclZpc2liaWxpdHkpJiYoci50aW1lclZpc2liaWxpdHk9bi50aW1lclZpc2liaWxpdHkpOmkua2V5PT09ImF1dG9SZXZlcnQiJiYoci5hdXRvUmV2ZXJ0RW5hYmxlZD0hIW4uYXV0b1JldmVydEVuYWJsZWQpKTtPYmplY3Qua2V5cyhyKS5sZW5ndGghPT0wJiYoUCgiUEVYX1JlbW90ZVNldCIsW3tUYWc6IlBFWF9SZW1vdGVTZXQiLFRhcmdldDpTdHJpbmcoeS50YXJnZXQ/Lk1lbWJlck51bWJlciksVmFsdWVzOnJ9XSksdigi5bey5Y+R6YCB6K6+572u5L+u5pS56K+35rGC77yM562J5b6F5a+55pa556Gu6K6k4oCmIiw2ZTMpKX1mdW5jdGlvbiB0ZShlLHQsbil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4obixlKSl9ZnVuY3Rpb24gJGkoKXtpZShlPT57dHJ5e2lmKGU/LlR5cGUhPT0iSGlkZGVuIilyZXR1cm47Y29uc3QgdD1BcnJheS5pc0FycmF5KGUuRGljdGlvbmFyeSk/ZS5EaWN0aW9uYXJ5OltdLG49bz0+e2NvbnN0IHM9dC5maW5kKGE9PmE/LlRhZz09PW8pO2lmKHMpcmV0dXJuIHMuVmFsdWU/P3MuTmFtZTtmb3IoY29uc3QgYSBvZiB0KWlmKGEmJnR5cGVvZiBhPT0ib2JqZWN0IiYmYS5UYWcmJm8gaW4gYSlyZXR1cm4gYVtvXX0scj1OdW1iZXIoZS5TZW5kZXIpLGk9bz0+e2NvbnN0IHM9KGwuZWRpdE1vZGVzfHx7fSlbb118fCJvZmYiO3JldHVybiBzPT09ImFueSI/ITA6cz09PSJ3aGl0ZWxpc3QiP0x0KGwud2hpdGVsaXN0fHxbXSxyLFBsYXllcik6ITF9O2lmKGUuQ29udGVudD09PSJQRVhfUGVybVF1ZXJ5IiYmTnVtYmVyKG4oIlRhcmdldCIpKT09PVBsYXllcj8uTWVtYmVyTnVtYmVyKXtjb25zdCBvPXt9O09uLmZvckVhY2gocz0+e29bcy5rZXldPWkocy5rZXkpfSksUCgiUEVYX1Blcm1SZXBseSIsW3tUYWc6IlBFWF9QZXJtUmVwbHkiLFRhcmdldDpTdHJpbmcociksUGVybXM6byxWYWx1ZXM6e3dhaXRTZWNvbmRzOmwud2FpdFNlY29uZHMsYmxvY2tlZFdhaXRNaW51dGVzOmwuYmxvY2tlZFdhaXRNaW51dGVzLGF1dG9SZXZlcnRNaW51dGVzOmwuYXV0b1JldmVydE1pbnV0ZXMsYXV0b1JldmVydEVuYWJsZWQ6bC5hdXRvUmV2ZXJ0RW5hYmxlZCx0aW1lclZpc2liaWxpdHk6bC50aW1lclZpc2liaWxpdHl9fV0se3ByaW9yaXR5OiEwLGRlZHVwZUtleToicGVybXI6IityLGRlZHVwZU1zOjUwMH0pfWVsc2UgaWYoZS5Db250ZW50PT09IlBFWF9SZW1vdGVTZXQiJiZOdW1iZXIobigiVGFyZ2V0IikpPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpe2NvbnN0IG89bigiVmFsdWVzIil8fHt9O2koInRpbWUiKSYmKG8ud2FpdFNlY29uZHMhPW51bGwmJihsLndhaXRTZWNvbmRzPXRlKCtvLndhaXRTZWNvbmRzLDAsNjAwKSksby5ibG9ja2VkV2FpdE1pbnV0ZXMhPW51bGwmJihsLmJsb2NrZWRXYWl0TWludXRlcz10ZSgrby5ibG9ja2VkV2FpdE1pbnV0ZXMsMSwzMCkpLG8uYXV0b1JldmVydE1pbnV0ZXMhPW51bGwmJihsLmF1dG9SZXZlcnRNaW51dGVzPXRlKCtvLmF1dG9SZXZlcnRNaW51dGVzLDEsMzApKSksaSgidGltZXJWaXNpYmlsaXR5IikmJlsic2VsZiIsIndoaXRlbGlzdCIsIm90aGVycyIsImFsbCJdLmluY2x1ZGVzKG8udGltZXJWaXNpYmlsaXR5KSYmKGwudGltZXJWaXNpYmlsaXR5PW8udGltZXJWaXNpYmlsaXR5KSxpKCJhdXRvUmV2ZXJ0IikmJm8uYXV0b1JldmVydEVuYWJsZWQhPT12b2lkIDAmJihsLmF1dG9SZXZlcnRFbmFibGVkPSEhby5hdXRvUmV2ZXJ0RW5hYmxlZCksXyghMCksZ2UoITApLFAoIlBFWF9SZW1vdGVBY2siLFt7VGFnOiJQRVhfUmVtb3RlQWNrIixUYXJnZXQ6U3RyaW5nKHIpfV0pO2NvbnN0IHM9bmUocil8fFN0cmluZyhyKTt2KHgoImVkaXRlZFlvdXJQRVgiLHt3aG86c30pLDhlMyl9fWNhdGNoKHQpe3AoIui/nOeoi+WNj+iuruW8guW4uDoiLHQubWVzc2FnZSl9fSl9ZnVuY3Rpb24gQmkoKXtpZShlPT57dHJ5e2lmKGU/LlR5cGUhPT0iSGlkZGVuIilyZXR1cm47Y29uc3QgdD1BcnJheS5pc0FycmF5KGUuRGljdGlvbmFyeSk/ZS5EaWN0aW9uYXJ5OltdLG49cj0+e2NvbnN0IGk9dC5maW5kKG89Pm8/LlRhZz09PXIpO2lmKGkpcmV0dXJuIGkuVmFsdWU/P2kuTmFtZTtmb3IoY29uc3QgbyBvZiB0KWlmKG8mJnR5cGVvZiBvPT0ib2JqZWN0IiYmby5UYWcmJnIgaW4gbylyZXR1cm4gb1tyXX07aWYoZS5Db250ZW50PT09IlBFWF9QZXJtUmVwbHkiJiZOdW1iZXIobigiVGFyZ2V0IikpPT09UGxheWVyPy5NZW1iZXJOdW1iZXIpe2NvbnN0IHI9TnVtYmVyKGUuU2VuZGVyKTtpZihXW3JdPXtwZXJtczpuKCJQZXJtcyIpfHx7fSx2YWx1ZXM6bigiVmFsdWVzIil8fHt9LHRzOkRhdGUubm93KCl9LE8mJk8ubnVtPT09cil7Y29uc3QgaT1PLkM7Tz1udWxsLEgmJihjbGVhclRpbWVvdXQoSCksSD1udWxsKTtsZXQgbz0hMTt0cnl7bz10eXBlb2YgQ3VycmVudFNjcmVlbjwidSImJkN1cnJlbnRTY3JlZW49PT0iSW5mb3JtYXRpb25TaGVldCImJnR5cGVvZiBJbmZvcm1hdGlvblNoZWV0U2VsZWN0aW9uPCJ1IiYmSW5mb3JtYXRpb25TaGVldFNlbGVjdGlvbiYmTnVtYmVyKEluZm9ybWF0aW9uU2hlZXRTZWxlY3Rpb24uTWVtYmVyTnVtYmVyKT09PXJ9Y2F0Y2h7fW8mJlhuKGkpfWVsc2UgaWYoeS5vcGVuJiZ5LnRhcmdldD8uTWVtYmVyTnVtYmVyPT09cil7Y29uc3QgaT1XW3JdO3kucGVybXM9aS5wZXJtcyx5LnZhbHVlcz1pLnZhbHVlcztjb25zdCBvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZlKTtvJiZGbihvKX19ZWxzZSBpZihlLkNvbnRlbnQ9PT0iUEVYX0FjY2VzcyImJk51bWJlcihuKCJUYXJnZXQiKSk9PT1QbGF5ZXI/Lk1lbWJlck51bWJlcil7Y29uc3Qgcj1uKCJOYW1lIil8fCgoKT0+e3RyeXtyZXR1cm4gQ2hhdFJvb21DaGFyYWN0ZXI/LmZpbmQoaT0+aS5NZW1iZXJOdW1iZXI9PT1OdW1iZXIoZS5TZW5kZXIpKT8uTmlja25hbWV9Y2F0Y2h7cmV0dXJuIG51bGx9fSkoKXx8ZS5TZW5kZXI7dih4KCJhY2Nlc3NlZFlvdXJQRVgiLHt3aG86cn0pLDhlMyl9ZWxzZSBlLkNvbnRlbnQ9PT0iUEVYX1JlbW90ZUFjayImJk51bWJlcihuKCJUYXJnZXQiKSk9PT1QbGF5ZXI/Lk1lbWJlck51bWJlciYmdigi5a+55pa55bey5bqU55So5L2g55qE6K6+572u5L+u5pS544CCIiw2ZTMpfWNhdGNoe319KX1mdW5jdGlvbiBGaSgpe2NvbnN0IGU9VSgpO2UmJigkaSgpLEJpKCksZS5ob29rRnVuY3Rpb24oIkluZm9ybWF0aW9uU2hlZXRSdW4iLDUsKHQsbik9Pntjb25zdCByPW4odCk7dHJ5e2NvbnN0IGk9YW4oKTt5Lm9wZW4mJnkudGFyZ2V0JiZpJiZpLk1lbWJlck51bWJlciE9PXkudGFyZ2V0Lk1lbWJlck51bWJlciYmaHQoKTtjb25zdCBvPWkmJmkuTWVtYmVyTnVtYmVyIT09UGxheWVyPy5NZW1iZXJOdW1iZXI/eXQoaSk6bnVsbDtpZighbylyZXR1cm4gcjtCbihpLk1lbWJlck51bWJlcik7Y29uc3Qgcz1SaShpLG8pLGE9VGkocy5wZXJtcyksYz1hP3goInByb2ZpbGVFZGl0QnRuIik6by5lZGl0P3goInByb2ZpbGVFZGl0Tm9QZXJtIik6eCgicHJvZmlsZUVkaXRPZmYiKTtEcmF3QnV0dG9uKEwueCxMLnksTC53LEwuaCwiUkVYIiwiV2hpdGUiLCIiLGMsIWEpfWNhdGNoe31yZXR1cm4gcn0pLGUuaG9va0Z1bmN0aW9uKCJJbmZvcm1hdGlvblNoZWV0Q2xpY2siLDUsKHQsbik9Pnt0cnl7Y29uc3Qgcj1hbigpO2lmKChyJiZyLk1lbWJlck51bWJlciE9PVBsYXllcj8uTWVtYmVyTnVtYmVyP3l0KHIpOm51bGwpJiZNb3VzZUluKEwueCxMLnksTC53LEwuaCkpe0xpKHIpO3JldHVybn19Y2F0Y2h7fXJldHVybiBuKHQpfSksZS5ob29rRnVuY3Rpb24oIkluZm9ybWF0aW9uU2hlZXRFeGl0Iiw1LCh0LG4pPT4oeS5vcGVuJiZodCgpLG4odCkpKSl9ZnVuY3Rpb24gWGkoZT0zZTQpe2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4gbmV3IFByb21pc2Uobj0+e2NvbnN0IHI9KCk9Pnt0eXBlb2YgYmNNb2RTZGs8InUiJiZiY01vZFNkaz8ucmVnaXN0ZXJNb2Q/bighMCk6RGF0ZS5ub3coKS10PmU/bighMSk6c2V0VGltZW91dChyLDEwMCl9O3IoKX0pfWZ1bmN0aW9uIEdpKGU9M2U0KXtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuIG5ldyBQcm9taXNlKG49Pntjb25zdCByPSgpPT57dHJ5e3R5cGVvZiBQbGF5ZXI8InUiJiZ0eXBlb2YgQ2hhcmFjdGVyU2V0RmFjaWFsRXhwcmVzc2lvbj09ImZ1bmN0aW9uIiYmdHlwZW9mIENoYXRSb29tQ2hhcmFjdGVyPCJ1Ij9uKCEwKTpEYXRlLm5vdygpLXQ+ZT9uKCExKTpzZXRUaW1lb3V0KHIsMTAwKX1jYXRjaHtzZXRUaW1lb3V0KHIsMTAwKX19O3IoKX0pfWZ1bmN0aW9uIFZpKCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9Pntjb25zdCB0PSgpPT57dHJ5e3R5cGVvZiBTZXJ2ZXJJc0xvZ2dlZEluPT0iZnVuY3Rpb24iJiZTZXJ2ZXJJc0xvZ2dlZEluKCl8fHR5cGVvZiBQbGF5ZXI8InUiJiZQbGF5ZXImJnR5cGVvZiBQbGF5ZXIuTWVtYmVyTnVtYmVyPT0ibnVtYmVyIiYmUGxheWVyLk1lbWJlck51bWJlcj4wJiYhIVBsYXllci5BY2NvdW50TmFtZT9lKCEwKTpzZXRUaW1lb3V0KHQsMjAwKX1jYXRjaHtzZXRUaW1lb3V0KHQsMjAwKX19O3QoKX0pfWFzeW5jIGZ1bmN0aW9uIEtpKCl7cChg5Yid5aeL5YyWIHYke059Li4uYCk7Y29uc3QgZT1hd2FpdCBYaSgpO2lmKCFhd2FpdCBHaSgpKXtPZSgi5ri45oiP5Yqg6L296LaF5pe277yM5pS+5byD5Yid5aeL5YyWIik7cmV0dXJufWlmKGF3YWl0IEpuKCksYXdhaXQgVmkoKSxhd2FpdCBycigpLGRuKCksQnIoKSxnZSghMCksZSl0cnl7cW4oYmNNb2RTZGsucmVnaXN0ZXJNb2Qoe25hbWU6IlBlcnNvbmFsaXR5IEV4Y3JldGlvbiAoUEVYKSIsZnVsbE5hbWU6IlBlcnNvbmFsaXR5IEV4Y3JldGlvbiIsdmVyc2lvbjpOfSkpfWNhdGNoKG8pe09lKCJyZWdpc3Rlck1vZCDlpLHotKXvvIzov5vlhaXlhbzlrrnmqKHlvI86IixvLm1lc3NhZ2UpfWNvbnN0IG49VSgpO24mJihvdChuKSxsbihuKSx1cihuKSxhaSgoKT0+e3RpKCksc2V0VGltZW91dCgoKT0+e3RyeXtnZSghMCl9Y2F0Y2h7fX0sODAwKSxzZXRUaW1lb3V0KCgpPT57dHJ5e2YubW9kZSE9PW0uSURMRSYmZi5waGFzZUVuZHNBdD4wJiYocCgi6L+b5oi/6L+Y5Y6f54q25oCBOiIsZi5tb2RlKSxUKHttb2RlOmYubW9kZSxyZW1haW5pbmdTZWM6TWF0aC5tYXgoMCxNYXRoLnJvdW5kKChmLnBoYXNlRW5kc0F0LURhdGUubm93KCkpLzFlMykpLG93bmVyOmYub3duZXJNZW1iZXJOdW1iZXIsZ2VsSWQ6Zi5nZWxJZH0sITApKX1jYXRjaHt9fSwxNTAwKX0sKCk9Pnt9KSxzaSgoKT0+e3RyeXtTaSgpfWNhdGNoe310cnl7b3QmJkhpKCl9Y2F0Y2h7fX0pKSxuaSgpLEVpKCksQWkoKSxJaSgpLEZpKCk7dHJ5e3R5cGVvZiB3aW5kb3c8InUiJiYhd2luZG93Ll9wZXhVbmxvYWRGbHVzaCYmKHdpbmRvdy5fcGV4VW5sb2FkRmx1c2g9KCk9Pnt0cnl7dHlwZW9mIFNlcnZlckFjY291bnRVcGRhdGU/LlN5bmNUb1NlcnZlcj09ImZ1bmN0aW9uIiYmU2VydmVyQWNjb3VudFVwZGF0ZS5TeW5jVG9TZXJ2ZXIoKX1jYXRjaHt9fSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHdpbmRvdy5fcGV4VW5sb2FkRmx1c2gpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHdpbmRvdy5fcGV4VW5sb2FkRmx1c2gpKX1jYXRjaHt9cChg5Yid5aeL5YyW5a6M5oiQIHYke059YCk7bGV0IHI9ITE7Y29uc3QgaT1zZXRJbnRlcnZhbCgoKT0+e3RyeXtpZih0eXBlb2YgQ3VycmVudFNjcmVlbj4idSJ8fEN1cnJlbnRTY3JlZW4hPT0iQ2hhdFJvb20ifHwoY2xlYXJJbnRlcnZhbChpKSxyKSlyZXR1cm47cj0hMCxzZXRUaW1lb3V0KCgpPT52KHgoImxvYWRlZCIse3Y6Tn0pKSwxZTMpfWNhdGNoe2NsZWFySW50ZXJ2YWwoaSl9fSw1MDApfWZ1bmN0aW9uIEhpKCl7b2koKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRyKSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKS50aGVuKGU9PmUuY2xlYXJNZXNzYWdlSGFuZGxlcnMoKSkuY2F0Y2goKCk9Pnt9KX1jb25zdCBqaT0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL05pY2U4OTIzL0JDLVBFWEBtYWluL0ltYWdlcy8iLHppPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vTmljZTg5MjMvQkMtUEVYL21haW4vSW1hZ2VzLyI7ZnVuY3Rpb24gR24oZSl7cmV0dXJuIGppK1N0cmluZyhlKS5yZXBsYWNlKC9eXC8vLCIiKX1mdW5jdGlvbiBWbihlKXtyZXR1cm4gemkrU3RyaW5nKGUpLnJlcGxhY2UoL15cLy8sIiIpfWZ1bmN0aW9uIFdpKGUsdCl7Y29uc3Qgbj1uZXcgSW1hZ2U7bi5jcm9zc09yaWdpbj0iYW5vbnltb3VzIjtsZXQgcj0wO3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCgpPT57dHJ5e3QmJnQobil9Y2F0Y2h7fX0pLG4uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCgpPT57cj09PTA/KHI9MSxPZSgi5Zu+54mHIENETiDliqDovb3lpLHotKXvvIzlm57pgIAgcmF3OiIsZSksbi5zcmM9Vm4oZSkpOk9lKCLlm77niYfliqDovb3lpLHotKU6IixlKX0pLG4uc3JjPUduKGUpLG59ZnVuY3Rpb24gVWkoZSx0LG4scixpKXtjb25zdCBvPU1hdGgubWF4KDEsZXx8MSkscz1NYXRoLm1heCgxLHR8fDEpLGE9TWF0aC5tYXgoMCxufHwwKTtyZXR1cm57c3g6YSVvKnIsc3k6TWF0aC5mbG9vcihhL28pJXMqaSxzdzpyLHNoOml9fXdpbmRvdy5QRVg9d2luZG93LlBFWD8/e307Y29uc3QgWWk9d2luZG93LlBFWCYmdHlwZW9mIHdpbmRvdy5QRVg9PSJvYmplY3QiJiYhIXdpbmRvdy5QRVgudmVyc2lvbjtZaT9jb25zb2xlLndhcm4oYOKal++4j1tQRVhdIOajgOa1i+WIsOW3suacieWunuS+i+WcqOi/kOihjO+8iHZlcnNpb246ICR7d2luZG93LlBFWC52ZXJzaW9ufe+8ie+8jOi3s+i/h+mHjeWkjeWIneWni+WMluOAgmApOih3aW5kb3cuUEVYPXt2ZXJzaW9uOk4sY29tbWFuZDooZT0iIik9PkN0KGAvcGV4ICR7ZX1gLnRyaW0oKSkscmVzZXQ6KCk9PldlKCksc3RhdHVzOigpPT5tbigpLGdldENvbmZpZzooKT0+bCxzYXZlOigpPT5fKCEwKSxyZWxvYWQ6KCk9PmRuKCksc2V0QW5pbUR1cmF0aW9uT3ZlcnJpZGU6THIsaW1hZ2VzOntpbWFnZVVybDpHbixpbWFnZUZhbGxiYWNrVXJsOlZuLGxvYWRQZXhJbWFnZTpXaSxzcHJpdGVGcmFtZTpVaX0sZXhwb3J0U2V0dGluZ3M6Zm4saW1wb3J0U2V0dGluZ3M6cG59LEtpKCkpOwo=';
const run = () => {
// 优先 data: URL 模块导入;若被 CSP 拦截时退回全局 eval
try {
diff --git a/loader.local.user.js b/loader.local.user.js
index bf97efa..7f48916 100644
--- a/loader.local.user.js
+++ b/loader.local.user.js
@@ -7,12 +7,11 @@
// @description:en PEX local-dev loader (loads the build from vite preview)
// @author PEX
// @supportURL https://github.com/Nice8923/BC-PEX
-// @include /^https:\/\/(www\.)?bondage(projects\.elementfx|-(europe|asia))\.com\/.*/
+// @include /^https?:\/\/(www\.)?(bondageprojects\.com|bondageprojects\.elementfx\.com|bondage-europe\.com|bondage-asia\.com)\/.*/
// @grant none
// @run-at document-end
// ==/UserScript==
-window.PEX = window.PEX ?? {};
if (window.PEX) {
console.warn('⚗️[PEX] 已加载,跳过重复导入。');
} else {
diff --git a/loader.template.user.js b/loader.template.user.js
index 7028a47..e42f7e7 100644
--- a/loader.template.user.js
+++ b/loader.template.user.js
@@ -7,12 +7,11 @@
// @description:en Persona excretion gameplay: dizzy → excrete → blank → gel → feed-back recovery. Built-in sounds & expressions, /pex commands.
// @author PEX
// @supportURL https://github.com/Nice8923/BC-PEX
-// @include /^https:\/\/(www\.)?bondage(projects\.elementfx|-(europe|asia))\.com\/.*/
+// @include /^https?:\/\/(www\.)?(bondageprojects\.com|bondageprojects\.elementfx\.com|bondage-europe\.com|bondage-asia\.com)\/.*/
// @grant none
// @run-at document-end
// ==/UserScript==
-window.PEX = window.PEX ?? {};
if (window.PEX) {
console.warn('⚗️[PEX] 已加载,跳过重复加载。');
} else {
diff --git a/loader.user.js b/loader.user.js
index 7c497ce..f7265d4 100644
--- a/loader.user.js
+++ b/loader.user.js
@@ -7,13 +7,12 @@
// @description:en Persona excretion gameplay: dizzy → excrete → blank → gel → feed-back recovery. Supports /pex commands.
// @author PEX
// @supportURL https://github.com/Nice8923/BC-PEX
-// @include /^https:\/\/(www\.)?bondage(projects\.elementfx|-(europe|asia))\.com\/.*/
+// @include /^https?:\/\/(www\.)?(bondageprojects\.com|bondageprojects\.elementfx\.com|bondage-europe\.com|bondage-asia\.com)\/.*/
// @grant none
// @run-at document-end
// ==/UserScript==
// 薄加载器:从发布地址拉取构建产物(assets/main.js,GitHub Pages)。
-window.PEX = window.PEX ?? {};
if (window.PEX) {
console.warn('⚗️[PEX] 已加载,跳过重复导入。');
} else {
diff --git a/src/core/commands.js b/src/core/commands.js
index 7843758..92218f8 100644
--- a/src/core/commands.js
+++ b/src/core/commands.js
@@ -134,8 +134,11 @@ function tryRegisterCommand() {
return false;
}
-// 策略3:keydown Enter 兜底
+// 策略3:keydown Enter 兜底(单例守卫:core-init 顶层 hookChatInput 与进房后 registerCommandOnce 都会调它,避免重复挂监听导致 /pex 触发两次)
+let _keyDownHooked = false;
function setupKeydownFallback() {
+ if (_keyDownHooked) return;
+ _keyDownHooked = true;
document.addEventListener('keydown', (e) => {
if (e.key !== 'Enter') return;
const input = document.getElementById('InputChat') || document.querySelector('textarea[id*="Chat"]');
diff --git a/src/core/whitelist.js b/src/core/whitelist.js
new file mode 100644
index 0000000..dc0de6a
--- /dev/null
+++ b/src/core/whitelist.js
@@ -0,0 +1,35 @@
+// ════════════════════════════════════════
+// 白名单代号解析
+// 配置里的 whitelist 可填数字成员号,或代号:
+// $owner —— 被授权方(目标本人)的主人
+// $lover —— 被授权方(目标本人)的恋人
+// 比较时 relativeTo 必须是【被授权方本人】的角色对象:
+// 查看者端 = 被看的角色 C;接收端 = Player(接收方即被授权方)。
+// 代号相对它解析。两条 BC 原生 API(Character 原型方法):
+// IsOwnedByMemberNumber(n) / IsLoverOfMemberNumber(n)
+// ════════════════════════════════════════
+
+// candidate:要判断的成员号(查看者 / 发送者)。返回是否放行。
+export function whitelistAllows(list, candidate, relativeTo) {
+ if (candidate == null) return false;
+ const c = Number(candidate);
+ if (!Number.isFinite(c) || c <= 0) return false;
+ for (const e of (list || [])) {
+ const s = String(e).trim();
+ if (/^\d+$/.test(s)) { if (Number(s) === c) return true; continue; }
+ try {
+ // 代号相对被授权方本人解析;各方法独立判断,缺哪个都不影响其它代号
+ if (s === '$owner') {
+ if (relativeTo && typeof relativeTo.IsOwnedByMemberNumber === 'function'
+ && relativeTo.IsOwnedByMemberNumber(c)) return true;
+ } else if (s === '$lover' || s === '$lovers') {
+ if (relativeTo && typeof relativeTo.IsLoverOfMemberNumber === 'function'
+ && relativeTo.IsLoverOfMemberNumber(c)) return true;
+ // 兜底:方法缺失时直接查 Lovership 数组
+ const lv = relativeTo && relativeTo.Lovership;
+ if (Array.isArray(lv) && lv.map(Number).includes(c)) return true;
+ }
+ } catch (e) {}
+ }
+ return false;
+}
diff --git a/src/ui/remote.js b/src/ui/remote.js
index 5c86d51..13c9bb8 100644
--- a/src/ui/remote.js
+++ b/src/ui/remote.js
@@ -15,6 +15,7 @@ import { saveSettings, publishSharedSettings } from '../core/storage.js';
import { printChat } from '../core/commands.js';
import { ui } from '../expansion/i18n.js';
import { pexLog, characterNicknameSafe } from '../util/util.js';
+import { whitelistAllows } from '../core/whitelist.js';
const BTN = { x: 1715, y: 175, w: 90, h: 90 }; // 资料页远程修改按钮
const PANEL_ID = 'pex-remote-panel';
@@ -27,20 +28,20 @@ const CATS = [
];
// 我方对目标是否有某类权限(对方公告快照兜底——实时回复到达前先用它)
-function _viewerCanEdit(info, mode) {
+// codeRef = 被授权方本人(被看的角色 C):白名单里的 $owner/$lover 相对它解析
+function _viewerCanEdit(info, mode, codeRef) {
if (mode === 'any') return true;
if (mode === 'whitelist') {
- const wl = Array.isArray(info?.wl) ? info.wl.map(Number) : [];
- return wl.includes(Number(Player?.MemberNumber));
+ return whitelistAllows(info?.wl, Player?.MemberNumber, codeRef);
}
return false;
}
-function _viewerPerms(info) {
+function _viewerPerms(info, codeRef) {
const em = info?.editModes || {};
return {
- time: _viewerCanEdit(info, em.time),
- autoRevert: _viewerCanEdit(info, em.autoRevert),
- timerVisibility: _viewerCanEdit(info, em.timerVisibility),
+ time: _viewerCanEdit(info, em.time, codeRef),
+ autoRevert: _viewerCanEdit(info, em.autoRevert, codeRef),
+ timerVisibility: _viewerCanEdit(info, em.timerVisibility, codeRef),
};
}
function _canEditAny(perms) {
@@ -68,7 +69,7 @@ function _ensurePerm(num) {
function _permFor(C, info) {
const pc = _permCache[C?.MemberNumber];
if (pc && Date.now() - pc.ts < PERM_TTL) return pc;
- return { perms: _viewerPerms(info), values: null, ts: Date.now() };
+ return { perms: _viewerPerms(info, C), values: null, ts: Date.now() };
}
function targetInfo(C) {
@@ -221,7 +222,7 @@ function _doOpenRemoteSettings(C) {
}
R.target = C;
const pc = _permCache[num];
- R.perms = pc ? pc.perms : _viewerPerms(targetInfo(C));
+ R.perms = pc ? pc.perms : _viewerPerms(targetInfo(C), C);
R.values = (pc && pc.values) ? pc.values : {};
showPanel();
}
@@ -281,8 +282,8 @@ function registerRemoteServer() {
const m = (CONFIG.editModes || {})[catKey] || 'off';
if (m === 'any') return true;
if (m === 'whitelist') {
- const wl = (CONFIG.whitelist || []).map(String);
- return wl.includes(String(sender));
+ // 白名单相对【被授权方本人】解析:这里是接收方自己(Player)
+ return whitelistAllows(CONFIG.whitelist || [], sender, Player);
}
return false;
};
diff --git a/src/ui/settings.js b/src/ui/settings.js
index 250ae28..a25f1b0 100644
--- a/src/ui/settings.js
+++ b/src/ui/settings.js
@@ -247,7 +247,11 @@ const EXT = {
content.addEventListener('change', (e) => {
const t = e.target;
if (t.dataset.pexSelect) {
- this._setPath(t.dataset.pexSelect, t.value);
+ // 数值型下拉(特效强度/失神视野)存数字而非字符串,保持类型一致;
+ // 纯数字值才转(其余如计时器可见性、表情名仍为字符串)
+ const raw = t.value;
+ const num = Number(raw);
+ this._setPath(t.dataset.pexSelect, (raw !== '' && /^\d+$/.test(raw) && !isNaN(num)) ? num : raw);
// 表情下拉 → 刷新预览(新结构:expressions.wait.N / expressions.excrete / blank)
const sel = t.dataset.pexSelect;
if (sel.startsWith('expressions.wait.')) {
@@ -336,7 +340,9 @@ const EXT = {
},
_sel(key, options, desc) {
const val = this._getPath(key);
- return ``;
+ // 用字符串比较判定选中:特效强度/失神视野等数值型下拉,
+ // 旧存档可能存成字符串 "3",与数字 3 严格比较会全部落空 → 下拉回退到第一项
+ return ``;
},
_num(key, min, max, desc) {
return ``;
diff --git a/src/ui/timer.js b/src/ui/timer.js
index 1504e90..329e60b 100644
--- a/src/ui/timer.js
+++ b/src/ui/timer.js
@@ -6,6 +6,7 @@
import { CONFIG, ES_KEY } from '../core/config.js';
import { getModApi } from '../core/config.js';
+import { whitelistAllows } from '../core/whitelist.js';
// 读角色的 PEX 公告状态
function readState(C) {
@@ -27,11 +28,11 @@ function shouldDraw(C) {
if (vis === 'self') return isMe;
if (vis === 'others') return !isMe;
if (vis === 'whitelist') {
- // 仅白名单:自己总能看到自己的;别人要看他在不在被观察者公告的白名单里
+ // 仅白名单:自己总能看到自己的;别人要看他在不在被观察者公告的白名单里。
+ // 白名单相对【被观察者本人】解析:$owner/$lover = 被观察者自己的主人/恋人
if (isMe) return true;
const wl = C?.OnlineSharedSettings?.[ES_KEY]?.wl || [];
- const myNo = Player?.MemberNumber;
- return wl.includes(String(myNo));
+ return whitelistAllows(wl, Player?.MemberNumber, C);
}
return false;
} catch (e) { return false; }