ccgf-game-tool 1.0.10 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -86,7 +86,7 @@ let registryCache = null;
86
86
  * 不能用 NPM_TIMEOUT_MS(120 秒):那是给"安装"用的,用户可以等;
87
87
  * 而"查一下最新版本"要是等两分钟,那一页就等于废了。
88
88
  */
89
- const REGISTRY_QUERY_TIMEOUT_MS = 10000;
89
+ const REGISTRY_QUERY_TIMEOUT_MS = 25000;
90
90
  /** 同一时刻只允许一个后台刷新在跑,否则每次切页签都会再起一轮 npm */
91
91
  let registryRefreshing = false;
92
92
  function runNpmAsync(command, spawnSpec, cwd, timeoutMs = shared_1.NPM_TIMEOUT_MS) {
@@ -187,7 +187,9 @@ async function refreshRegistry() {
187
187
  else
188
188
  failures.push(name + ':返回内容不是预期的 JSON 形状');
189
189
  }
190
- const error = entries.length === 0 && failures.length > 0 ? failures.join(';') : null;
190
+ // **部分**失败也要报出来:早先只在"全部失败"时才回传,
191
+ // 结果"3 个查到 + 1 个超时"完全静默 —— 面板显示"无法确认"却不给任何原因。
192
+ const error = failures.length > 0 ? ('部分远程信息获取失败:' + failures.join(';')) : null;
191
193
  registryCache = { at: Date.now(), entries, error };
192
194
  }
193
195
  finally {
@@ -857,4 +859,4 @@ function load() { }
857
859
  * @zh 卸载扩展时触发的方法
858
860
  */
859
861
  function unload() { }
860
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQTgrQkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQXAvQjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQWlEO0FBQ2pELHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUtvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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QUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELHdFQUF3RTtJQUV4RTs7O09BR0c7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBZTtRQUNwQyxPQUFPLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQUMsV0FBbUI7UUFDekMsT0FBTyxlQUFlLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFdBQW1CO1FBQzNDLE9BQU8sZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0osQ0FBQztBQUVGOzs7R0FHRztBQUNILFNBQWdCLElBQUksS0FBSyxDQUFDO0FBRTFCOzs7R0FHRztBQUNILFNBQWdCLE1BQU0sS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxyXG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcclxuaW1wb3J0IHsgc3Bhd24sIHNwYXduU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBjb3B5U3luYywgZXhpc3RzU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgcmVtb3ZlU3luYywgc3RhdFN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcy1leHRyYSc7XHJcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcclxuaW1wb3J0IHtcclxuICAgIEdBTUVQTEFZX0RJUixcclxuICAgIExBWUVSUyxcclxuICAgIE1BTkFHRVJfRElSLFxyXG4gICAgUFJFRkFCX1RFTVBMQVRFUyxcclxuICAgIFBSRUZBQl9URU1QTEFURV9MQUJFTFMsXHJcbiAgICBSRUdJU1RSWV9DQUNIRV9NUyxcclxuICAgIFJFU09VUkNFU19ESVIsXHJcbiAgICBUUHJlZmFiVGVtcGxhdGUsXHJcbiAgICBWSUVXU19TVUJESVIsXHJcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBidWlsZE9yZGVyUGxhbiwgbGlzdE1hbmFnZXJzLCBsaXN0TW9kdWxlcywgbGlzdFZpZXdzLCBydW5Eb2N0b3IgfSBmcm9tICcuL2RvY3Rvcic7XHJcbmltcG9ydCB7XHJcbiAgICBJREVOVElGSUVSX1JFLFxyXG4gICAgbm9ybWFsaXplTWFuYWdlck5hbWUsXHJcbiAgICBub3JtYWxpemVNb2R1bGUsXHJcbiAgICBub3JtYWxpemVWaWV3TmFtZSxcclxuICAgIHZpZXdQcmVmYWJQYXRoLFxyXG59IGZyb20gJy4vbmFtaW5nJztcclxuaW1wb3J0IHtcclxuICAgIGNvbGxlY3RTbmFwc2hvdCxcclxuICAgIGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0RpcixcclxuICAgIGxpc3RMb2NhbENhdGFsb2csXHJcbiAgICByZWFkSW5zdGFsbGVkUGFja2FnZSxcclxuICAgIHJlYWRQcm9qZWN0TWFuaWZlc3QsXHJcbn0gZnJvbSAnLi9wcm9qZWN0JztcclxuaW1wb3J0IHtcclxuICAgIGlzU2hhcmVkTW9kdWxlUGFja2FnZSxcclxuICAgIEtOT1dOX1BBQ0tBR0VTLFxyXG4gICAgcGFyc2VWaWV3UmVzdWx0LFxyXG4gICAgdmlld0FyZ3YsXHJcbn0gZnJvbSAnLi9yZWdpc3RyeSc7XHJcbmltcG9ydCB7XHJcbiAgICBOUE1fVElNRU9VVF9NUyxcclxuICAgIGJ1aWxkTnBtUmVzdWx0LFxyXG4gICAgYnVpbGRTaGFyZWRTdGF0dXMsXHJcbiAgICBjYXRhbG9nRW50cnlGcm9tSW5zdGFsbGVkLFxyXG4gICAgY29sbGVjdEluc3RhbGxTcGVjcyxcclxuICAgIGRlY29kZVByb2Nlc3NPdXRwdXQsXHJcbiAgICBmaW5kUGFja2FnZVJlZnMsXHJcbiAgICBmb3JtYXROcG1Db21tYW5kLFxyXG4gICAgaXNTaGFyZWRNb2R1bGVNYW5pZmVzdCxcclxuICAgIG1lcmdlQ2F0YWxvZyxcclxuICAgIG5wbVNwYXduU3BlYyxcclxuICAgIHNwYXduU3BlY0ZvcixcclxuICAgIHN1bW1hcml6ZU5wbUZhaWx1cmUsXHJcbn0gZnJvbSAnLi9zaGFyZWQnO1xyXG5pbXBvcnQge1xyXG4gICAgYnVpbGRNYW5hZ2VyU2NyaXB0LFxyXG4gICAgYnVpbGRFdmVudHNTY3JpcHQsXHJcbiAgICBidWlsZE1vZGVsU2NyaXB0LFxyXG4gICAgYnVpbGRNb2R1bGVTY3JpcHQsXHJcbiAgICBidWlsZFZpZXdQcmVmYWIsXHJcbiAgICBidWlsZFZpZXdTY3JpcHQsXHJcbiAgICBpc1ByZWZhYlRlbXBsYXRlLFxyXG4gICAgVEZyYW1ld29ya0ltcG9ydCx9IGZyb20gJy4vdGVtcGxhdGVzJztcclxuaW1wb3J0IHsgSUZpbmRpbmcsIElOcG1SdW5SZXN1bHQsIElJbnN0YWxsZWRQYWNrYWdlVmlldywgSVByb2plY3RTbmFwc2hvdCwgSVNoYXJlZENhdGFsb2dFbnRyeSB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmlofmoYggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIOaJqeWxleiHquW4pueahOS4reaWh+aWh+ahiOihqOOAglxyXG4gKiDlroPml6LmmK/jgIxrZXkg5YWo6ZuG44CN55qE5p2l5rqQ77yM5Lmf5piv57yW6L6R5ZmoIGkxOG4g5ou/5LiN5Yiw5pe255qE5YWc5bqV44CCXHJcbiAqL1xyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG5jb25zdCBaSF9TVFJJTkdTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gcmVxdWlyZSgnLi4vaTE4bi96aC5qcycpO1xyXG5cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlsI/lt6XlhbcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqIOW3peeoi+agueebruW9lSAqL1xyXG5mdW5jdGlvbiBwcm9qZWN0UGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEVkaXRvci5Qcm9qZWN0LnBhdGg7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDov5nkuKrlt6XnqIvlvJXnlKjmoYbmnrbor6XnlKjlk6rnp43lhpnms5U6XHJcbiAqIC0g5byA5Y+R5bel5L2c5Yy6KOS7k+W6k+mHjCzmoYbmnrbmupDnoIHlnKggYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrIOS4iykgLT4g55u45a+56Lev5b6EXHJcbiAqIC0g6KOF5oiQIG5wbSDljIXnmoTmlrDlt6XnqIsgLT4g5YyF5ZCNIEBjY2dmL2ZyYW1ld29ya1xyXG4gKlxyXG4gKiDliKTmja7mmK9cIuahhuaetua6kOeggeWcqOS4jeWcqFwiLOS4jiBjb25zdGFudHMudHMg55qEIEZSQU1FV09SS19ERVZfRElSIOWQjOS4gOS4quWAvOOAglxyXG4gKi9cclxuZnVuY3Rpb24gZnJhbWV3b3JrSW1wb3J0TW9kZSgpOiBURnJhbWV3b3JrSW1wb3J0IHtcclxuICAgIHJldHVybiBleGlzdHNTeW5jKGpvaW4ocHJvamVjdFBhdGgoKSwgJ2Fzc2V0cy9zY3JpcHRzL2ZyYW1ld29yaycpKSA/ICd3b3Jrc3BhY2UnIDogJ3BhY2thZ2UnO1xyXG59XHJcblxyXG4vKiog55u45a+56Lev5b6EIC0+IGRiOi8vIOi1hOa6kCB1cmwgKi9cclxuZnVuY3Rpb24gZGJVcmwocmVsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdkYjovLycgKyByZWwucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG59XHJcblxyXG4vKiogdXVpZCAtPiDpooTliLbkvZPph4zohJrmnKznu4Tku7bnmoQgX190eXBlX18gKi9cclxuZnVuY3Rpb24gY29tcHJlc3NVdWlkKHV1aWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRWRpdG9yLlV0aWxzLlVVSUQuY29tcHJlc3NVVUlEKHV1aWQsIGZhbHNlKTtcclxufVxyXG5cclxuLyoqIOWPluS4gOS7veW3peeoi+W/q+eFp++8iOS9k+ajgOOAgeWIl+ihqOmDveWfuuS6juWug++8jOS/neivgemdouadv+eci+WIsOeahOWSjOS9k+ajgOeci+WIsOeahOaYr+WQjOS4gOS7veaVsOaNru+8iSAqL1xyXG5mdW5jdGlvbiBzbmFwc2hvdCgpOiBJUHJvamVjdFNuYXBzaG90IHtcclxuICAgIHJldHVybiBjb2xsZWN0U25hcHNob3QocHJvamVjdFBhdGgoKSwgY29tcHJlc3NVdWlkKTtcclxufVxyXG5cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWFrOWFseaooeWdlyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiByZWdpc3RyeSDmkJzntKLnu5PmnpznmoTnvJPlrZjjgIJcclxuICpcclxuICog5LiA5qyh5pCc57Si5a6e5rWLIDF+NCDnp5Ig4oCU4oCUIOiAjOmdouadv+WIh+mhteOAgeijheWujOWIt+aWsOmDveS8muiwg+eUqOafpeivou+8jOS4jeiDveavj+asoemDveWOu+aQnOOAglxyXG4gKiDmmL7lvI/ngrnjgIzliLfmlrDjgI3ml7bnlKggYGZvcmNlYCDnu5Xov4flroPjgIJcclxuICovXHJcbmxldCByZWdpc3RyeUNhY2hlOiB7IGF0OiBudW1iZXI7IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB8IG51bGwgPSBudWxsO1xyXG5cclxuLyoqXHJcbiAqICoq5aSx6LSl5LiN5oqb5byC5bi4LOS5n+S4jeiuqemdouadv+epuuedgOijheS9nFwi5rKh5pyJ5qih5Z2XXCIqKjrmiorljp/lm6DkuIDotbflm57kvKAs6Z2i5p2/5pi+56S65oiQ5o+Q56S6IOKAlOKAlFxyXG4gKiDov5nmmK/mnIDliJ3lsLHlrprkuIvnmoTopoHmsYIoXCLmsqHmnInnvZHnu5zlsLHmj5DnpLrlsLHooYzkuoZcIinjgIJcclxuICpcclxuICog6L+c56iL5L+h5oGv55qE5p2l5rqQOioq6YCQ5LiqIGBucG0gdmlldyA8bmFtZT4gLS1qc29uYCDnsr7noa7mn6Xor6IqKuOAglxyXG4gKlxyXG4gKiDmm77nu4/nlKggYG5wbSBzZWFyY2hgICsg5YWz6ZSu6K+NLOW3suW6n+W8gyDigJTigJQg5pCc57Si5a+5IHNjb3BlZCDljIUoYEBjY2dmLypgKeW+iOS4jeWPr+mdoCxcclxuICog5bi45bi45pCc5LiN5YiwLOS6juaYr1wi5YWs5YWx5qih5Z2X6L+c56iL5YiX6KGoXCLlkoxcIuacgOaWsOeJiOacrFwi6YO95Lya5piv56m655qEKOWunua1i+i4qei/hynjgIJcclxuICog5Luj5Lu3OuWMheWQjeimgee7tOaKpOWcqCByZWdpc3RyeS50cyDnmoQgS05PV05fUEFDS0FHRVMg6YeMLOaWsOWinuWMheaXtuWKoOS4gOihjOOAglxyXG4gKlxyXG4gKiDkuYvmiYDku6XnlKggbnBtIOWRveS7pOiAjOS4jeaYr+iHquW3seWPkSBIVFRQUyDor7fmsYI6bnBtIOS8muiHquWKqOW4puS4iuW3peeoi+eahCBgLm5wbXJjYFxyXG4gKiAo56eB5pyJ5rqQ44CB6ZWc5YOP44CB5Luj55CG562J6YWN572u6YO96Lef552A6LWwKSzkuI3nlKjmiJHku6zph43lpI3lrp7njrDkuIDpgY3jgIJcclxuICovXHJcbi8qKlxyXG4gKiAqKuW8guatpSoq6LeR5LiA5qyhIG5wbeOAglxyXG4gKlxyXG4gKiDkuLrku4DkuYjkuI3og73nu6fnu63nlKggc3Bhd25TeW5jOui/meS4quWHveaVsOWcqCoq57yW6L6R5Zmo5Li76L+b56iLKirph4zooqvosIPnlKgsc3Bhd25TeW5jIOS8muaKiuS4u+W+queOr1xyXG4gKiDmlbTkuKrljaDkvY8g4oCU4oCUIOavj+afpeS4gOS4quWMheWHoOeZvuavq+enkizlh6DkuKrljIXkuIvmnaXnvJbovpHlmaggVUkg5bCx5Y2h5L2P44CB54K55Yir5aSE5rKh5Y+N5bqUKOWunua1iynjgIJcclxuICog5o2i5oiQIHNwYXduICsgUHJvbWlzZTrlkIzmoLfnrYnnu5Pmnpws5L2G5Lit6Ze06K6p5Ye65LqL5Lu25b6q546vLOe8lui+keWZqOS4jeWGu+e7k+OAglxyXG4gKi9cclxuLyoqXHJcbiAqIOafpei/nOeoi+S/oeaBr+eUqOeahCoq55+tKirotoXml7bjgIJcclxuICpcclxuICog5LiN6IO955SoIE5QTV9USU1FT1VUX01TKDEyMCDnp5IpOumCo+aYr+e7mVwi5a6J6KOFXCLnlKjnmoQs55So5oi35Y+v5Lul562JO1xyXG4gKiDogIxcIuafpeS4gOS4i+acgOaWsOeJiOacrFwi6KaB5piv562J5Lik5YiG6ZKfLOmCo+S4gOmhteWwseetieS6juW6n+S6huOAglxyXG4gKi9cclxuY29uc3QgUkVHSVNUUllfUVVFUllfVElNRU9VVF9NUyA9IDEwMDAwO1xyXG5cclxuLyoqIOWQjOS4gOaXtuWIu+WPquWFgeiuuOS4gOS4quWQjuWPsOWIt+aWsOWcqOi3kSzlkKbliJnmr4/mrKHliIfpobXnrb7pg73kvJrlho3otbfkuIDova4gbnBtICovXHJcbmxldCByZWdpc3RyeVJlZnJlc2hpbmcgPSBmYWxzZTtcclxuXHJcbmZ1bmN0aW9uIHJ1bk5wbUFzeW5jKFxyXG4gICAgY29tbWFuZDogc3RyaW5nLFxyXG4gICAgc3Bhd25TcGVjOiB7IGNvbW1hbmQ6IHN0cmluZzsgYXJnczogc3RyaW5nW107IHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cz86IGJvb2xlYW4gfSxcclxuICAgIGN3ZDogc3RyaW5nLFxyXG4gICAgdGltZW91dE1zOiBudW1iZXIgPSBOUE1fVElNRU9VVF9NUyxcclxuKTogUHJvbWlzZTx7IHJlc3VsdDogSU5wbVJ1blJlc3VsdDsgc3Rkb3V0OiBzdHJpbmcgfT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGVyckNodW5rczogQnVmZmVyW10gPSBbXTtcclxuICAgICAgICBsZXQgY2hpbGQ6IGFueTtcclxuICAgICAgICBjb25zdCBmaW5pc2ggPSAoZXhpdENvZGU6IG51bWJlciB8IG51bGwsIHNwYXduRXJyb3I6IHsgY29kZT86IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ZG91dCA9IGRlY29kZVByb2Nlc3NPdXRwdXQoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4aXRDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0ZG91dCxcclxuICAgICAgICAgICAgICAgICAgICBzdGRlcnI6IGRlY29kZVByb2Nlc3NPdXRwdXQoQnVmZmVyLmNvbmNhdChlcnJDaHVua3MpKSxcclxuICAgICAgICAgICAgICAgICAgICBzcGF3bkVycm9yLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzdGRvdXQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY2hpbGQgPSBzcGF3bihzcGF3blNwZWMuY29tbWFuZCwgc3Bhd25TcGVjLmFyZ3MsIHtcclxuICAgICAgICAgICAgICAgIGN3ZCxcclxuICAgICAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBzcGF3blNwZWMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgICAgICBmaW5pc2gobnVsbCwgeyBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgdHJ5IHsgY2hpbGQua2lsbCgpOyB9IGNhdGNoIHsgLyog5bey57uP6YCA5LqGICovIH0gfSwgdGltZW91dE1zKTtcclxuICAgICAgICBjaGlsZC5zdGRvdXQ/Lm9uKCdkYXRhJywgKGQ6IEJ1ZmZlcikgPT4gY2h1bmtzLnB1c2goZCkpO1xyXG4gICAgICAgIGNoaWxkLnN0ZGVycj8ub24oJ2RhdGEnLCAoZDogQnVmZmVyKSA9PiBlcnJDaHVua3MucHVzaChkKSk7XHJcbiAgICAgICAgY2hpbGQub24oJ2Vycm9yJywgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgIGZpbmlzaChudWxsLCB7IGNvZGU6IGVycj8uY29kZSwgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNoaWxkLm9uKCdjbG9zZScsIChjb2RlOiBudW1iZXIgfCBudWxsKSA9PiB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgIGlmICh0aW1lciA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBmaW5pc2goY29kZSwgbnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG4vKipcclxuICog6L+c56iL5L+h5oGvKOW4pue8k+WtmCnjgIIqKui/meS4quWHveaVsOawuOi/nOS4jemYu+WhnuOAgeawuOi/nOS4jSBhd2FpdCDlpJbpg6jov5vnqIsqKuOAglxyXG4gKlxyXG4gKiDkuLrku4DkuYjov5nkuYjorr7orqE65a6D6LeR5Zyo57yW6L6R5Zmo5Li76L+b56iL6YeMLOiAjCBucG0g5q+P5Liq6L+b56iL6KaBIDF+MyDnp5Is572R57uc5Z2P5LqG6L+Y5Y+v6IO95LiA55u05LiN6L+U5Zue44CCXHJcbiAqIOaXqeWFiOeUqOWQjOatpSBzcGF3biArIOmAkOS4quafpSzooajnjrDlsLHmmK9cIueCueW8gOi/meS4gOmhtSznvJbovpHlmajliKvlpITkuZ/msqHlj43lupRcIuOAglxyXG4gKiDnjrDlnKg65ZG95Lit57yT5a2Y56uL5Yi76L+U5ZueO+i/h+acn+WImSoq5YWI6L+U5Zue5pen5YC8Kios5ZCM5pe25ZCO5Y+w5Yi35pawKOS4jSBhd2FpdCk7XHJcbiAqIOS7juayoeaIkOWKn+i/h+aXtui/lOWbnuaYjuehrueahOaPkOekuuaWh+ahiCzogIzkuI3mmK/orqnosIPnlKjmlrnlubLnrYnjgIJcclxuICpcclxuICog5aSx6LSl5LiN5oqb5byC5bi4LOS5n+S4jeiuqemdouadv+epuuedgOijheS9nFwi5rKh5pyJ5qih5Z2XXCI65oqK5Y6f5Zug5LiA6LW35Zue5LygLOmdouadv+aYvuekuuaIkOaPkOekuiDigJTigJRcclxuICog6L+Z5piv5pyA5Yid5bCx5a6a5LiL55qE6KaB5rGCKFwi5rKh5pyJ572R57uc5bCx5o+Q56S65bCx6KGM5LqGXCIp44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBxdWVyeVJlZ2lzdHJ5KGZvcmNlOiBib29sZWFuKTogeyBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107IGVycm9yOiBzdHJpbmcgfCBudWxsIH0ge1xyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IGZyZXNoID0gcmVnaXN0cnlDYWNoZSAmJiBub3cgLSByZWdpc3RyeUNhY2hlLmF0IDwgUkVHSVNUUllfQ0FDSEVfTVM7XHJcblxyXG4gICAgaWYgKCFmb3JjZSAmJiBmcmVzaCkge1xyXG4gICAgICAgIHJldHVybiB7IGVudHJpZXM6IHJlZ2lzdHJ5Q2FjaGUhLmVudHJpZXMsIGVycm9yOiByZWdpc3RyeUNhY2hlIS5lcnJvciB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOmcgOimgeabtOaWsDrlkI7lj7DljrvliLcs5LiN5Zyo6L+Z6YeM562JXHJcbiAgICB2b2lkIHJlZnJlc2hSZWdpc3RyeSgpO1xyXG5cclxuICAgIGlmIChyZWdpc3RyeUNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogcmVnaXN0cnlDYWNoZS5lbnRyaWVzLCBlcnJvcjogcmVnaXN0cnlDYWNoZS5lcnJvciB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBlbnRyaWVzOiBbXSxcclxuICAgICAgICBlcnJvcjogcmVnaXN0cnlSZWZyZXNoaW5nID8gJ+ato+WcqOiOt+WPlui/nOeoi+S/oeaBr+KApicgOiAn6L+c56iL5L+h5oGv5pqC5LiN5Y+v55SoKOemu+e6v+aIlui2heaXtiknLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqIOecn+ato+eahOaLieWPljrlvILmraXjgIHmnInlubblj5Hpl7jjgIHljZXljIXlpLHotKXkuI3mi5blnq7mlbTku73liJfooaggKi9cclxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFJlZ2lzdHJ5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHJlZ2lzdHJ5UmVmcmVzaGluZykgcmV0dXJuO1xyXG4gICAgcmVnaXN0cnlSZWZyZXNoaW5nID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdID0gW107XHJcbiAgICAgICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBLTk9XTl9QQUNLQUdFUykge1xyXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gJ25wbSB2aWV3ICcgKyBuYW1lICsgJyAtLWpzb24nO1xyXG4gICAgICAgICAgICBjb25zdCBzcGF3blNwZWMgPSBzcGF3blNwZWNGb3IoXHJcbiAgICAgICAgICAgICAgICBbcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICducG0uY21kJyA6ICducG0nLCAuLi52aWV3QXJndihuYW1lKV0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcmVzdWx0LCBzdGRvdXQgfSA9IGF3YWl0IHJ1bk5wbUFzeW5jKGNvbW1hbmQsIHNwYXduU3BlYywgcHJvamVjdFBhdGgoKSwgUkVHSVNUUllfUVVFUllfVElNRU9VVF9NUyk7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5hbWUgKyAnOicgKyAocmVzdWx0LmhpbnQgPz8gKCfotoXml7bmiJbpgIDlh7rnoIEgJyArIChyZXN1bHQuZXhpdENvZGUgPz8gJ+acquefpScpKSkpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBwYXJzZVZpZXdSZXN1bHQoc3Rkb3V0KTtcclxuICAgICAgICAgICAgaWYgKGVudHJ5KSBlbnRyaWVzLnB1c2goZW50cnkpO1xyXG4gICAgICAgICAgICBlbHNlIGZhaWx1cmVzLnB1c2gobmFtZSArICc66L+U5Zue5YaF5a655LiN5piv6aKE5pyf55qEIEpTT04g5b2i54q2Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlcnJvciA9IGVudHJpZXMubGVuZ3RoID09PSAwICYmIGZhaWx1cmVzLmxlbmd0aCA+IDAgPyBmYWlsdXJlcy5qb2luKCc7JykgOiBudWxsO1xyXG4gICAgICAgIHJlZ2lzdHJ5Q2FjaGUgPSB7IGF0OiBEYXRlLm5vdygpLCBlbnRyaWVzLCBlcnJvciB9O1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICByZWdpc3RyeVJlZnJlc2hpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOe7hOijheWFrOWFseaooeWdl+eahOWujOaVtOeKtuaAgeOAglxyXG4gKlxyXG4gKiDkuInkuKrmnaXmupDlkIjotbfmnaXmiY3mmK/lrozmlbTliJfooajvvJpcclxuICogMS4g5pys5qGG5p62KirlvIDlj5Hlt6XkvZzljLoqKumHjOeahCBgcGFja2FnZXMvc2hhcmVkLypg77yI5Y+q5pyJ5pys5LuT5bqT5omN6K6k77yM6KeBXHJcbiAqICAgIGBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXJg77yJ4oCU4oCUIOiDvee7meWHuiBgZmlsZTpgIOWuieijheivtOaYjuespu+8m1xyXG4gKiAyLiBgbm9kZV9tb2R1bGVzYCDph4zlt7Lnu4/oo4XkuobnmoTvvIjpnaDljIXmuIXljZXph4znmoTmoIforrDorqTlh7rmnaXvvInvvJtcclxuICogMy4gKirov5znqIsgcmVnaXN0cnkqKu+8iOaMieWPkeeOsOWFs+mUruivjeaQnOe0ou+8ieKAlOKAlCDopobnm5ZcIui/mOayoeijheOAgeS9huWPr+S7peijhVwi55qE6YKj5Lqb44CCXHJcbiAqXHJcbiAqIOWIu+aEjyoq5LiNKirpnaDljIXlkI3ljLnphY3mnaXor4bliKvlhazlhbHmqKHlnZfvvJpzY29wZSDov5jmsqHlrprvvIjop4EgUk9BRE1BUCDnmoQgUzFh77yJ77yMXHJcbiAqIOaNouS4qiBzY29wZSDlsLHorqTkuI3lh7rmnaXkuobjgIJcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5U2hhcmVkU3RhdGUoZm9yY2VSZWdpc3RyeSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCByb290ID0gcHJvamVjdFBhdGgoKTtcclxuICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZFByb2plY3RNYW5pZmVzdChyb290KTtcclxuICAgIGNvbnN0IHByb2plY3REZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICAgLi4uKG1hbmlmZXN0Py5kZXBlbmRlbmNpZXMgPz8ge30pLFxyXG4gICAgICAgIC4uLihtYW5pZmVzdD8uZGV2RGVwZW5kZW5jaWVzID8/IHt9KSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2hhcmVkRGlyID0gZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyKHJvb3QpO1xyXG4gICAgY29uc3QgbG9jYWwgPSBzaGFyZWREaXIgPyBsaXN0TG9jYWxDYXRhbG9nKHNoYXJlZERpciwgcm9vdCkgOiBbXTtcclxuXHJcbiAgICBjb25zdCBpbnN0YWxsZWRTaGFyZWQ6IElTaGFyZWRDYXRhbG9nRW50cnlbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKHByb2plY3REZXBlbmRlbmNpZXMpKSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgbmFtZSk7XHJcbiAgICAgICAgaWYgKHBrZy5pbnN0YWxsZWQgJiYgaXNTaGFyZWRNb2R1bGVNYW5pZmVzdChwa2cubWFuaWZlc3QpKSB7XHJcbiAgICAgICAgICAgIGluc3RhbGxlZFNoYXJlZC5wdXNoKGNhdGFsb2dFbnRyeUZyb21JbnN0YWxsZWQobmFtZSwgcGtnLm1hbmlmZXN0LCBwa2cudmVyc2lvbikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWdpc3RyeSA9IGF3YWl0IHF1ZXJ5UmVnaXN0cnkoZm9yY2VSZWdpc3RyeSk7XHJcbiAgICAvLyDmoYbmnrbkuI7mianlsZXkuI3mmK/lhazlhbHmqKHlnZcs6Jm954S25a6D5Lus5Lmf6KOF552A44CB5Lmf5ZyoIEtOT1dOX1BBQ0tBR0VTIOmHjCDigJTigJQg5Lik5aSE6YO96KaB5ruk5o6JLFxyXG4gICAgLy8g5ZCm5YiZ5L2/55So6ICF55qEXCLlhazlhbHmqKHlnZdcIuWIl+ihqOmHjOS8muWGkuWHuuahhuaetuWSjOe8lui+keWZqOaJqeWxleOAglxyXG4gICAgY29uc3Qgc2hhcmVkT25seSA9IChlOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5KSA9PiBpc1NoYXJlZE1vZHVsZVBhY2thZ2UoZS5uYW1lKTtcclxuICAgIGNvbnN0IGNhdGFsb2cgPSBtZXJnZUNhdGFsb2coXHJcbiAgICAgICAgbWVyZ2VDYXRhbG9nKGxvY2FsLCByZWdpc3RyeS5lbnRyaWVzLmZpbHRlcihzaGFyZWRPbmx5KSksXHJcbiAgICAgICAgaW5zdGFsbGVkU2hhcmVkLmZpbHRlcihzaGFyZWRPbmx5KSxcclxuICAgICk7XHJcblxyXG4gICAgLy8gXCLlj6/mm7TmlrBcIuimgemdoOi/nOeoi+eahOacgOaWsOeJiOacrOWPt++8jOiAjCBtZXJnZUNhdGFsb2cg6K6p5pys5Zyw6aG55LyY5YWI77yI5ZCM5ZCN55qE6L+c56iL6aG55Lya6KKr55uW5o6J77yJ77yMXHJcbiAgICAvLyDmiYDku6Xov5nph4zljZXni6znlZnkuIDku73ljIXlkI0gLT4g6L+c56iL5pyA5paw54mI5pys44CCXHJcbiAgICBjb25zdCByZWdpc3RyeVZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlZ2lzdHJ5LmVudHJpZXMpIHtcclxuICAgICAgICByZWdpc3RyeVZlcnNpb25zW2VudHJ5Lm5hbWVdID0gZW50cnkudmVyc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDopoHmn6Xlrp7ml7bnirbmgIHnmoTljIUgPSDliJfooajph4znmoQgKyDlroPku6zlo7DmmI7nmoTkvp3otZbjgIJcclxuICAgIC8vIOS+nei1luWPr+iDveS4jeWcqOWIl+ihqOmHjO+8iOaZrumAmiBucG0g5YyF77yJ77yM5L2G5a6D6KOF5rKh6KOF5ZCM5qC36KaB5pi+56S65Ye65p2l44CCXHJcbiAgICBjb25zdCB3YW50ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgY2F0YWxvZykge1xyXG4gICAgICAgIHdhbnRlZC5hZGQoZW50cnkubmFtZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2YgT2JqZWN0LmtleXMoZW50cnkuZGVjbGFyZWREZXBlbmRlbmNpZXMpKSB7XHJcbiAgICAgICAgICAgIHdhbnRlZC5hZGQoZGVwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnN0YWxsZWRQYWNrYWdlczogUmVjb3JkPHN0cmluZywgSUluc3RhbGxlZFBhY2thZ2VWaWV3PiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHdhbnRlZCkge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIG5hbWUpO1xyXG4gICAgICAgIGluc3RhbGxlZFBhY2thZ2VzW25hbWVdID0ge1xyXG4gICAgICAgICAgICBpbnN0YWxsZWQ6IHBrZy5pbnN0YWxsZWQsXHJcbiAgICAgICAgICAgIHZlcnNpb246IHBrZy52ZXJzaW9uLFxyXG4gICAgICAgICAgICBpc1NoYXJlZE1vZHVsZTogaXNTaGFyZWRNb2R1bGVNYW5pZmVzdChwa2cubWFuaWZlc3QpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICBjb25zdCBzb3VyY2VzID0geyAuLi5zbmFwLmdhbWVwbGF5U291cmNlcywgLi4uc25hcC5tYW5hZ2VyU291cmNlcyB9O1xyXG5cclxuICAgIGNvbnN0IG1vZHVsZXMgPSBjYXRhbG9nLm1hcCgoZW50cnkpID0+IGJ1aWxkU2hhcmVkU3RhdHVzKGVudHJ5LCB7XHJcbiAgICAgICAgcHJvamVjdERlcGVuZGVuY2llcyxcclxuICAgICAgICBpbnN0YWxsZWRQYWNrYWdlcyxcclxuICAgICAgICByZWZlcmVuY2VzOiB7IFtlbnRyeS5uYW1lXTogZmluZFBhY2thZ2VSZWZzKHNvdXJjZXMsIGVudHJ5Lm5hbWUpIH0sXHJcbiAgICAgICAgY2F0YWxvZyxcclxuICAgICAgICByZWdpc3RyeVZlcnNpb25zLFxyXG4gICAgfSkpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kdWxlcyxcclxuICAgICAgICAvKiog5pys5Zyw5a6J6KOF5rqQ77ybKirlj6rmnInmnKzmoYbmnrbnmoTlvIDlj5Hku5PlupPph4zmiY3pnZ4gbnVsbCoq77yI6Z2i5ZCR55So5oi355qE5bel56iL6YeM5rC46L+c5pivIG51bGzvvIkgKi9cclxuICAgICAgICBsb2NhbFNvdXJjZTogc2hhcmVkRGlyLFxyXG4gICAgICAgIC8qKiDlt6XnqIvmnInlj6/or7vnmoQgcGFja2FnZS5qc29uIOWQlyAqL1xyXG4gICAgICAgIGhhc01hbmlmZXN0OiBtYW5pZmVzdCAhPT0gbnVsbCxcclxuICAgICAgICAvKiog6L+c56iL5YiX6KGo5ouJ5Y+W5aSx6LSl55qE5Y6f5Zug77yb5Li6IG51bGwg6KGo56S66L+Z5qyh5piv5oiQ5Yqf55qE77yI5oiW55So5LqG57yT5a2Y77yJICovXHJcbiAgICAgICAgcmVnaXN0cnlFcnJvcjogcmVnaXN0cnkuZXJyb3IsXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICog6LeR5LiA5qyhIG5wbeOAglxyXG4gKlxyXG4gKiDlhajnqIsqKuS4jeaKm+W8guW4uCoq77ya6YCA5Ye656CB44CBc3Rkb3V044CBc3RkZXJy44CB5Lul5Y+KIHNwYXduIOiHqui6q+eahOWksei0pemDveaUtui/myBJTnBtUnVuUmVzdWx0XHJcbiAqIOWbnuS8oOe7memdouadvyDigJTigJQg55So5oi36KaB55yL55qE5pivIG5wbSDoh6rlt7Hor7TnmoTor53vvIzogIzkuI3mmK/kuIDlj6Xovazov7DnmoRcIuWuieijheWksei0pVwi44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBydW5OcG0oYWN0aW9uOiAnaW5zdGFsbCcgfCAndW5pbnN0YWxsJywgc3BlY3M6IHN0cmluZ1tdKTogSU5wbVJ1blJlc3VsdCB7XHJcbiAgICBjb25zdCBzcGF3blNwZWMgPSBucG1TcGF3blNwZWMoYWN0aW9uLCBzcGVjcyk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIDEuICoq5LiN5oyH5a6aIGVuY29kaW5nKirvvJrmi7/liLDljp/lp4sgQnVmZmVyIOiHquW3seino+egge+8jOWQpuWImSBjbWQg55qEIEdCSyDmtojmga/kvJrlj5jkubHnoIHvvJtcclxuICAgICAgICAvLyAyLiAqKndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyDlv4XpobvmnaXoh6ogc3Bhd25TcGVjKirvvJrlsJHkuoblroPvvIxOb2RlIOS8muaKiuaIkeWKoOWlveeahFxyXG4gICAgICAgIC8vICAgIOW8leWPt+WGjei9rOS5ieS4gOmBje+8jGNtZCDmlLbliLAgYFxcXCJucG0uY21kIGluc3RhbGwgLi4uXFxcImDvvIzkuo7mmK/mlbTooYzooqvlvZPmiJDlkb3ku6TlkI1cclxuICAgICAgICAvLyAgICDvvIjmiqVcIiducG0uY21kIGluc3RhbGwgLi4uJyDkuI3mmK/lhoXpg6jmiJblpJbpg6jlkb3ku6RcIu+8jG5wbSDmoLnmnKzmsqHooqvlkK/liqjvvInjgIJcclxuICAgICAgICBjb25zdCBzcGF3bmVkID0gc3Bhd25TeW5jKHNwYXduU3BlYy5jb21tYW5kLCBzcGF3blNwZWMuYXJncywge1xyXG4gICAgICAgICAgICBjd2Q6IHByb2plY3RQYXRoKCksXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IE5QTV9USU1FT1VUX01TLFxyXG4gICAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZSxcclxuICAgICAgICAgICAgbWF4QnVmZmVyOiAxNiAqIDEwMjQgKiAxMDI0LFxyXG4gICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IHNwYXduU3BlYy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgY29tbWFuZDogZm9ybWF0TnBtQ29tbWFuZChhY3Rpb24sIHNwZWNzKSxcclxuICAgICAgICAgICAgZXhpdENvZGU6IHR5cGVvZiBzcGF3bmVkLnN0YXR1cyA9PT0gJ251bWJlcicgPyBzcGF3bmVkLnN0YXR1cyA6IG51bGwsXHJcbiAgICAgICAgICAgIHN0ZG91dDogZGVjb2RlUHJvY2Vzc091dHB1dChzcGF3bmVkLnN0ZG91dCksXHJcbiAgICAgICAgICAgIHN0ZGVycjogZGVjb2RlUHJvY2Vzc091dHB1dChzcGF3bmVkLnN0ZGVyciksXHJcbiAgICAgICAgICAgIHNwYXduRXJyb3I6IHNwYXduZWQuZXJyb3JcclxuICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IChzcGF3bmVkLmVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzcGF3bmVkLmVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgIGNvbW1hbmQ6IGZvcm1hdE5wbUNvbW1hbmQoYWN0aW9uLCBzcGVjcyksXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiBudWxsLFxyXG4gICAgICAgICAgICBzdGRvdXQ6ICcnLFxyXG4gICAgICAgICAgICBzdGRlcnI6ICcnLFxyXG4gICAgICAgICAgICBzcGF3bkVycm9yOiB7IG1lc3NhZ2U6IGVycj8ubWVzc2FnZSA/IFN0cmluZyhlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKSB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICog5Luj6LeRIG5wbSDoo4UgLyDljbjkuIDkuKrlhazlhbHmqKHlnZfvvIznhLblkI7lm57kuIDku73liLfmlrDov4fnmoTnirbmgIHjgIJcclxuICpcclxuICog5Y+q5o6l5Y+XIGNhdGFsb2cg6YeM5a2Y5Zyo55qE5YyF5ZCNIOKAlOKAlCDkuI3miormianlsZXlj5jmiJBcIuS7u+aEjyBucG0g5ZG95Luk5omn6KGM5ZmoXCLjgIJcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIHJ1blNoYXJlZEFjdGlvbihhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnLCBwYWNrYWdlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXBhY2thZ2VOYW1lIHx8IHR5cGVvZiBwYWNrYWdlTmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+e8uuWwkeWMheWQjScpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJlZm9yZSA9IGF3YWl0IHF1ZXJ5U2hhcmVkU3RhdGUoKTtcclxuICAgIGNvbnN0IGVudHJ5ID0gYmVmb3JlLm1vZHVsZXMuZmluZCgobSkgPT4gbS5uYW1lID09PSBwYWNrYWdlTmFtZSk7XHJcbiAgICBpZiAoIWVudHJ5KSB7XHJcbiAgICAgICAgY29uc3Qga25vd24gPSBiZWZvcmUubW9kdWxlcy5tYXAoKG0pID0+IG0ubmFtZSk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBg5LiN5Zyo5Y+v5a6J6KOF5YiX6KGo6YeM55qE5YyF77yaJHtwYWNrYWdlTmFtZX1gXHJcbiAgICAgICAgICAgICsgKGtub3duLmxlbmd0aCA/IGDvvIjlvZPliY3liJfooajvvJoke2tub3duLmpvaW4oJywgJyl977yJYCA6ICfvvIjlvZPliY3liJfooajkuLrnqbrvvIknKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWuieijheimgeaKiioq5pys5Zyw6IO96Kej5p6Q5Yiw55qE5L6d6LWW5LiA6LW35bim5LiKKirvvJrlj6roo4XlroPkuIDkuKrnmoTor53vvIxucG0g5Lya5Y67IHJlZ2lzdHJ5IOaJvuS+nei1lu+8jFxyXG4gICAgLy8g6ICM5pys5Zyw5rqQ6YeM55qE5L6d6LWW5bm25rKh5pyJ5Y+R5biDIOKAlOKAlCDlv4XnhLYgRTQwNO+8iOWunua1i+i/h++8ieOAglxyXG4gICAgLy8g5Y246L295oyJKirljIXlkI0qKu+8iG5wbSDorqTljIXlkI3vvIzkuI3orqQgZmlsZTog6K+05piO56ym77yJ44CCXHJcbiAgICBjb25zdCBzcGVjcyA9IGFjdGlvbiA9PT0gJ3VuaW5zdGFsbCdcclxuICAgICAgICA/IFtlbnRyeS5uYW1lXVxyXG4gICAgICAgIDogY29sbGVjdEluc3RhbGxTcGVjcyhlbnRyeSwgYmVmb3JlLm1vZHVsZXMpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gcnVuTnBtKGFjdGlvbiwgc3BlY3MpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICog5aSx6LSlKirkuI3mipvlvILluLgqKu+8mumdouadv+mcgOimgeaLv+WIsOe7k+aehOWMlueahOe7k+aenO+8iOWRveS7pOOAgemAgOWHuueggeOAgeWOn+Wni+i+k+WHuu+8ie+8jFxyXG4gICAgICAgICAqIOaJjeiDveWcqOW8ueeql+mHjOWOn+agt+WxleekuiBucG0g6Ieq5bex6K+055qE6K+d44CC6Z2e5rOV6L6T5YWl5LuN54S25oqbIOKAlOKAlCDpgqPmmK/osIPnlKjmlrnlhpnplJnkuobjgIJcclxuICAgICAgICAgKi9cclxuICAgICAgICBvazogcmVzdWx0Lm9rLFxyXG4gICAgICAgIHJlc3VsdCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKXml7bkuIDlj6UqKuWNleihjCoq5pGY6KaB77yI6Z2i5p2/5raI5oGv5Yy655So77yJ44CC5a6M5pW06L6T5Ye65ZyoIGByZXN1bHRgIOmHjO+8jOeUseW8ueeql+WxleekuiDigJTigJRcclxuICAgICAgICAgKiDkuYvliY3miormlbTmrrUgbnBtIOi+k+WHuuWhnui/m+a2iOaBr+WMuu+8jOS8muaKiuWPs+agj+aMpOWPmOW9ouW5tuWSjOa2iOaBr+WPoOWcqOS4gOi1t+OAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5vayA/IG51bGwgOiBzdW1tYXJpemVOcG1GYWlsdXJlKGFjdGlvbiwgcGFja2FnZU5hbWUsIHJlc3VsdCksXHJcbiAgICAgICAgLy8g6KOF5a6M56uL5Yi75Zue5LiA5Lu95paw54q25oCB77yM6Z2i5p2/5LiN55So5YaN6LeR5LiA5qyh5p+l6K+iXHJcbiAgICAgICAgLi4ucXVlcnlTaGFyZWRTdGF0ZSgpLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqIOi1hOa6kOaYr+WQpuWtmOWcqCAqL1xyXG5mdW5jdGlvbiBhc3NldEV4aXN0cyh1cmw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCB1cmwpLnRoZW4oKGluZm86IHVua25vd24pID0+ICEhaW5mbyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnoa7kv53nm67lvZXlrZjlnKjvvIzkuI3lrZjlnKjliJnliJvlu7pcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURpcihkaXJVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBkaXJVcmwpO1xyXG4gICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgZGlyVXJsLCBudWxsKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqIOebruW9leS4jeWtmOWcqOWImeW7uu+8jOepuuebruW9leWImeWIoOaOie+8iOeUn+aIkC/liKDpmaTlkI7muIXnkIbnlKjvvIkgKi9cclxuYXN5bmMgZnVuY3Rpb24gcHJ1bmVFbXB0eURpcihhYnNEaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAoc3RhdFN5bmMoYWJzRGlyKS5pc0RpcmVjdG9yeSgpICYmIHJlYWRkaXJTeW5jKGFic0RpcikubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZVN5bmMoYWJzRGlyKTtcclxuICAgICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLyog5LiN5a2Y5Zyo5bCx566X5LqGICovXHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiDmib7lh7rlvJXnlKjkuobmjIflrpogY2lkIOmbhuWQiOeahOW3suW6j+WIl+WMlui1hOa6kCAqL1xyXG5mdW5jdGlvbiBmaW5kQXNzZXRSZWZzKHNuYXA6IElQcm9qZWN0U25hcHNob3QsIGNpZHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgaGl0czogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmICghY2lkcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gaGl0cztcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcmVsIG9mIE9iamVjdC5rZXlzKHNuYXAuc2VyaWFsaXplZCkpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gc25hcC5zZXJpYWxpemVkW3JlbF07XHJcbiAgICAgICAgaWYgKGNpZHMuc29tZSgoY2lkKSA9PiB0ZXh0LmluY2x1ZGVzKGNpZCkpKSB7XHJcbiAgICAgICAgICAgIGhpdHMucHVzaChyZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoaXRzO1xyXG59XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmlrnms5UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBtZXRob2RzOiB7IFtrZXk6IHN0cmluZ106ICguLi5hbnk6IGFueSkgPT4gYW55IH0gPSB7XHJcbiAgICAvKipcclxuICAgICAqIOahhuaetuS4juaJqeWxleWQhOiHqueahOeJiOacrOS/oeaBryjmnKzlnLAgKyBucG0g5pyA5pawKeOAglxyXG4gICAgICpcclxuICAgICAqIOaJqeWxleiHqui6q+eJiOacrOivu+Wug+iHquW3seeahCBwYWNrYWdlLmpzb2475qGG5p6254mI5pys6K+75bel56iLIG5vZGVfbW9kdWxlcyDph4znmoTpgqPku70g4oCU4oCUXHJcbiAgICAgKiDkuKTogIXpg73mmK9cIuWunumZheijheS6huS7gOS5iFwi55qE5LqL5a6eLOS4jeaYr+mFjee9rumHjOWGmeS6huS7gOS5iOOAglxyXG4gICAgICog5pyJ5rKh5pyJ5paw54mI5Lqk57uZ6Z2i5p2/5q+U6L6DIHZlcnNpb24g5LiOIGxhdGVzdCzov5nph4zkuI3mm7/lroPliKTmlq0o5YWN5b6X5Lik6L655ZCE5YaZ5LiA5aWXKeOAglxyXG4gICAgICovXHJcbiAgICAvKipcclxuICAgICAqIOaKiiBub2RlX21vZHVsZXMg6YeM55qE5omp5bGV5ou36L+bIGV4dGVuc2lvbnMv44CCXHJcbiAgICAgKlxyXG4gICAgICog57yW6L6R5ZmoKirlj6rku47lt6XnqIvnmoQgZXh0ZW5zaW9ucy8g5Yqg6L295omp5bGVKios5omA5LulIG5wbSBpbnN0YWxsIOWujOW/hemhu+iQvei/meS4gOebmCxcclxuICAgICAqIOWQpuWImVwi5pu05paw5oiQ5YqfXCLlj6rlj5HnlJ/lnKggbm9kZV9tb2R1bGVzIOmHjCznvJbovpHlmajph4zkuIDngrnlj5jljJbpg73msqHmnInjgIJcclxuICAgICAqIOiQveebmOS5i+WQjumcgOimgemHjeWQr+e8lui+keWZqOaJjeeUn+aViCDigJTigJQg6L+Z5LiA54K555Sx6Z2i5p2/5paH5qGI5ZGK55+lLOi/memHjOS4jeWBh+ijheeDreabtOaWsOOAglxyXG4gICAgICovXHJcbiAgICBzeW5jRXh0ZW5zaW9uKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IGZyb20gPSBqb2luKHJvb3QsIFwibm9kZV9tb2R1bGVzXCIsIG5hbWUpO1xyXG4gICAgICAgIGlmICghZXhpc3RzU3luYyhmcm9tKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIG1lc3NhZ2U6IFwibm9kZV9tb2R1bGVzIOmHjOayoeaciSBcIiArIG5hbWUgKyBcIizlhYjlronoo4Xlho3okL3nm5hcIiB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0byA9IGpvaW4ocm9vdCwgXCJleHRlbnNpb25zXCIsIG5hbWUuc3BsaXQoXCIvXCIpLnBvcCgpIGFzIHN0cmluZyk7XHJcbiAgICAgICAgcmVtb3ZlU3luYyh0byk7XHJcbiAgICAgICAgY29weVN5bmMoZnJvbSwgdG8pO1xyXG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCBwYXRoOiB0byB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBhc3luYyBxdWVyeVZlcnNpb25zKGZvcmNlUmVnaXN0cnkgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYXdhaXQgcXVlcnlSZWdpc3RyeShmb3JjZVJlZ2lzdHJ5KTtcclxuICAgICAgICBjb25zdCBsYXRlc3RPZiA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGl0ID0gcmVnaXN0cnkuZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBoaXQgPyBoaXQudmVyc2lvbiA6IG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrTmFtZSA9ICdAY2NnZi9mcmFtZXdvcmsnO1xyXG4gICAgICAgIGNvbnN0IGZyYW1ld29yayA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIGZyYW1ld29ya05hbWUpO1xyXG5cclxuICAgICAgICAvKiog5pys5LuT5bqT55qE5byA5Y+R5bel5L2c5Yy6OuahhuaetuaYr+a6kOeggeOAgeaJqeWxleWwseaYr+i/meS4gOS7vSDigJTigJQg6Z2i5p2/5o2u5q2k5pS556ew5ZG85bm256aB55So5pu05pawICovXHJcbiAgICAgICAgY29uc3QgaW5Xb3Jrc3BhY2UgPSBleGlzdHNTeW5jKGpvaW4ocm9vdCwgJ2Fzc2V0cy9zY3JpcHRzL2ZyYW1ld29yaycpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZnJhbWV3b3JrOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBmcmFtZXdvcmtOYW1lLFxyXG4gICAgICAgICAgICAgICAgaW5zdGFsbGVkOiBmcmFtZXdvcmsuaW5zdGFsbGVkLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIHZlcnNpb246IGZyYW1ld29yay52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgbGF0ZXN0OiBsYXRlc3RPZihmcmFtZXdvcmtOYW1lKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBwYWNrYWdlSlNPTi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogcGFja2FnZUpTT04udmVyc2lvbixcclxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZTogaW5Xb3Jrc3BhY2UsXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKHBhY2thZ2VKU09OLm5hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgb3BlbldvcmtiZW5jaCgpIHtcclxuICAgICAgICBFZGl0b3IuUGFuZWwub3BlbihgJHtwYWNrYWdlSlNPTi5uYW1lfS53b3JrYmVuY2hgKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOmdouadv+eahOWxgue6p+S4i+aLieeUseS4u+i/m+eoi+S4i+WPke+8jOmBv+WFjeaJqeWxlemHjOWHuueOsOesrOS6jOS7veWxgue6p+WIl+ihqCAqL1xyXG4gICAgcXVlcnlMYXllcnMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbLi4uTEFZRVJTXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDpnaLmnb/mlofmoYjvvJrku6UgaTE4bi96aC5qcyDnmoQga2V5IOWFqOmbhuS4uuWHhu+8jOmAkOS4quS6pOe7mee8lui+keWZqCBpMThuIOino+aekOW9k+WJjeivreiogOOAglxyXG4gICAgICog6L+Z5qC36Z2i5p2/5L6n5LiN6ZyA6KaB5Yik5pat6K+t6KiA77yM5Lmf5LiN5L6d6LWWIEVkaXRvci5JMThuIOaYr+WQpuWtmOWcqOS6jumdouadv+S4iuS4i+aWh+mHjOOAglxyXG4gICAgICovXHJcbiAgICBxdWVyeUkxOG4oKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgdGFibGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhaSF9TVFJJTkdTKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmdWxsID0gYCR7cGFja2FnZUpTT04ubmFtZX0uJHtrZXl9YDtcclxuICAgICAgICAgICAgbGV0IHRleHQgPSBaSF9TVFJJTkdTW2tleV07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaXQgPSBFZGl0b3IuSTE4bi50KGZ1bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhpdCAmJiBoaXQgIT09IGZ1bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gaGl0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvKiDnvJbovpHlmaggaTE4biDkuI3lj6/nlKjlsLHkv53nlZnkuK3mlocgKi9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0YWJsZVtrZXldID0gdGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6aKE5Yi25L2T5qih5p2/5YiX6KGo77yI5L6b6Z2i5p2/5LiL5ouJ77yJICovXHJcbiAgICBxdWVyeVRlbXBsYXRlcygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4ge1xyXG4gICAgICAgIHJldHVybiBQUkVGQUJfVEVNUExBVEVTLm1hcCgoaWQpID0+ICh7IGlkLCBsYWJlbDogUFJFRkFCX1RFTVBMQVRFX0xBQkVMU1tpZF0gfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOafpeivoiBnYW1lcGxheSDkuIvlt7LmnInnmoTmqKHlnZfliJfooajvvIjlkKsgb3JkZXLvvInjgIJcclxuICAgICAqIOS4juS9k+ajgOWFseeUqCBkb2N0b3IubGlzdE1vZHVsZXPvvIzkv53or4HpnaLmnb/mmL7npLrlkozkvZPmo4DliKTlrprkuIDoh7TjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVzKCkge1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIHJldHVybiBsaXN0TW9kdWxlcyhzbmFwKS5tYXAoKG0pID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IG0uZGlyLFxyXG4gICAgICAgICAgICBvcmRlcjogbS5vcmRlciA/PyAwLFxyXG4gICAgICAgICAgICBoYXNNb2RlbDogbS5tb2RlbEZpbGUgIT09IG51bGwsXHJcbiAgICAgICAgICAgIGhhc01vZHVsZTogdHJ1ZSxcclxuICAgICAgICAgICAgLy8g6Z2i5p2/55So6L+Z5LiJ5Liq6Lev5b6E5YGa44CM5LiA6ZSu5omT5byA6ISa5pys44CN77ybZXZlbnRzRmlsZSDlj6/og73kuLogbnVsbO+8iOiAgeaooeWdl++8iVxyXG4gICAgICAgICAgICBtb2R1bGVGaWxlOiBtLm1vZHVsZUZpbGUsXHJcbiAgICAgICAgICAgIG1vZGVsRmlsZTogbS5tb2RlbEZpbGUsXHJcbiAgICAgICAgICAgIGV2ZW50c0ZpbGU6IG0uZXZlbnRzRmlsZSxcclxuICAgICAgICB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDlkK/liqjpobrluo/pooTop4ggKyDlsYLnuqfljaDnlKjvvIjlvIDlj5HovoXliqnvvIkgKi9cclxuICAgIGFzeW5jIHF1ZXJ5T3ZlcnZpZXcoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgY29uc3Qgdmlld3MgPSBsaXN0Vmlld3Moc25hcCk7XHJcbiAgICAgICAgY29uc3QgdXNhZ2UgPSBMQVlFUlMubWFwKChsYXllcikgPT4gKHtcclxuICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgIHZpZXdzOiB2aWV3cy5maWx0ZXIoKHYpID0+IHYucmVnaXN0ZXJlZExheWVyID09PSBsYXllcikubWFwKCh2KSA9PiB2LmNsYXNzTmFtZSksXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSBsaXN0TW9kdWxlcyhzbmFwKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcmRlcjogYnVpbGRPcmRlclBsYW4oc25hcCksXHJcbiAgICAgICAgICAgIGxheWVyczogdXNhZ2UsXHJcbiAgICAgICAgICAgIG1vZHVsZUNvdW50OiBtb2R1bGVzLmxlbmd0aCxcclxuICAgICAgICAgICAgbWFuYWdlckNvdW50OiBsaXN0TWFuYWdlcnMoc25hcCkubGVuZ3RoLFxyXG4gICAgICAgICAgICB2aWV3Q291bnQ6IHZpZXdzLmxlbmd0aCxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5LiA6ZSu5L2T5qOAICovXHJcbiAgICBhc3luYyBydW5Eb2N0b3IoKTogUHJvbWlzZTx7IGZpbmRpbmdzOiBJRmluZGluZ1tdOyBzdW1tYXJ5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IH0+IHtcclxuICAgICAgICBjb25zdCBmaW5kaW5ncyA9IHJ1bkRvY3RvcihzbmFwc2hvdCgpLCBMQVlFUlMpO1xyXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSB7IGVycm9yOiAwLCB3YXJuOiAwLCBpbmZvOiAwIH07XHJcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpbmRpbmdzKSB7XHJcbiAgICAgICAgICAgIHN1bW1hcnlbZi5zZXZlcml0eV0gPSAoc3VtbWFyeVtmLnNldmVyaXR5XSA/PyAwKSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGZpbmRpbmdzLCBzdW1tYXJ5IH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+i5p+Q5qih5Z2X55qEIFZpZXcg5YiX6KGo44CCXHJcbiAgICAgKiDmr5Tml6flrp7njrDlpJrkuoYgcHJlZmFiRXhpc3RzIOKAlOKAlCDml6fniYjmjInnuqblrprmi7wgVVJMIOWNtOS7juS4jeafpeebmO+8jFxyXG4gICAgICog5LqO5piv4oCc6ISa5pys5Zyo44CB6aKE5Yi25L2T5Lii5LqG4oCd55qEIFZpZXcg5Lmf5Lya6KKr5YiX5Ye65p2l77yM54K55LqG5omN5aSx6LSl44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5Vmlld3MobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RWaWV3cyhzbmFwKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB2Lm1vZHVsZURpciA9PT0gbW9kdWxlRGlyKVxyXG4gICAgICAgICAgICAubWFwKCh2KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogdi5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICBzY3JpcHRVcmw6IGRiVXJsKHYuc2NyaXB0RmlsZSksXHJcbiAgICAgICAgICAgICAgICBwcmVmYWJVcmw6IHYucmVnaXN0ZXJlZFBhdGggPyBkYlVybChgJHtSRVNPVVJDRVNfRElSfS8ke3YucmVnaXN0ZXJlZFBhdGh9LnByZWZhYmApIDogJycsXHJcbiAgICAgICAgICAgICAgICBwcmVmYWJFeGlzdHM6IHYucmVnaXN0ZXJlZFBhdGggPyBzbmFwLnByZWZhYnNCeVJlc291cmNlUGF0aFt2LnJlZ2lzdGVyZWRQYXRoXSAhPT0gdW5kZWZpbmVkIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBsYXllcjogdi5yZWdpc3RlcmVkTGF5ZXIgPz8gJycsXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbmFnZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqIG1hbmFnZXIg5YiX6KGo77yIYXNzZXRzL3NjcmlwdHMvbWFuYWdlciDkuIvnm7TlsZ7nmoQgKk1hbmFnZXIudHPvvIkgKi9cclxuICAgIGFzeW5jIHF1ZXJ5TWFuYWdlcnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNYW5hZ2VycyhzbmFwc2hvdCgpKS5tYXAoKG0pID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IG0uY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICBmaWxlOiBtLnNjcmlwdEZpbGUsXHJcbiAgICAgICAgICAgIGV4dGVuZHNTaW5nbGV0b246IG0uZXh0ZW5kc1NpbmdsZXRvbixcclxuICAgICAgICAgICAgYmFzZUNsYXNzOiBtLmJhc2VDbGFzcyxcclxuICAgICAgICB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IG1hbmFnZXLvvJrnlJ/miJDkuIDkuKrnu6fmib/moYbmnrYgQVNpbmdsZXRvbiDnmoTlhajlsYDljZXkvovohJrmnKzjgIJcclxuICAgICAqIEBwYXJhbSBtYW5hZ2VyTmFtZSDlkI3lrZfvvIzlpoIgXCJjb25maWdcIiAvIFwiQ29uZmlnXCIgLyBcIkNvbmZpZ01hbmFnZXJcIlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVNYW5hZ2VyKG1hbmFnZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1hbmFnZXJOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobWFuYWdlck5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG1hbmFnZXIg5ZCNOiBcIiR7bWFuYWdlck5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplTWFuYWdlck5hbWUobWFuYWdlck5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRpclVybCA9IGBkYjovLyR7TUFOQUdFUl9ESVJ9YDtcclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIoZGlyVXJsKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYCR7ZGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWFuYWdlciDlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTlroPvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgYnVpbGRNYW5hZ2VyU2NyaXB0KGNsYXNzTmFtZSwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIWFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu6IG1hbmFnZXIg5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkaXJVcmwpO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgc2NyaXB0VXJsLCBmaWxlOiBgJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5Yig6ZmkIG1hbmFnZXIg6ISa5pysICovXHJcbiAgICBhc3luYyBkZWxldGVNYW5hZ2VyKG1hbmFnZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1hbmFnZXJOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobWFuYWdlck5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG1hbmFnZXIg5ZCNOiBcIiR7bWFuYWdlck5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplTWFuYWdlck5hbWUobWFuYWdlck5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGBkYjovLyR7TUFOQUdFUl9ESVJ9LyR7Y2xhc3NOYW1lfS50c2A7XHJcblxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgc2NyaXB0VXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLAgbWFuYWdlciDohJrmnKzvvJoke2NsYXNzTmFtZX0udHNgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtNQU5BR0VSX0RJUn1gKTtcclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIHJlbW92ZWQ6IHNjcmlwdFVybCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIoOmZpOaooeWdl+WJjeeahOW8leeUqOajgOafpe+8muWTquS6m+i1hOa6kOW8leeUqOS6huivpeaooeWdl+eahOiEmuacrOOAglxyXG4gICAgICog6Z2i5p2/5Zyo56Gu6K6k5qGG6YeM5bGV56S677yM6YG/5YWN5Yig5a6M55WZ5LiL5oKs56m65byV55So44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5TW9kdWxlUmVmcyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKS5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpO1xyXG4gICAgICAgIGNvbnN0IGNpZHMgPSB2aWV3cy5tYXAoKHYpID0+IHNuYXAuc2NyaXB0Q2lkc1t2LnNjcmlwdEZpbGVdKS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlQ2lkID0gc25hcC5zY3JpcHRDaWRzW2Ake0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9LyR7bm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLm1vZHVsZUNsYXNzfS50c2BdO1xyXG4gICAgICAgIGNvbnN0IGFsbENpZHMgPSBtb2R1bGVDaWQgPyBjaWRzLmNvbmNhdChbbW9kdWxlQ2lkXSkgOiBjaWRzO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZpZXdzOiB2aWV3cy5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICAgICAgcmVmZXJlbmNlZEJ5OiBmaW5kQXNzZXRSZWZzKHNuYXAsIGFsbENpZHMpLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDlnKjnvJbovpHlmajph4zmiZPlvIDmn5DkuKrlt6XnqIvlhoXmlofku7bvvIjkvZPmo4Dnu5Pmnpwv5qaC6KeI54K55Ye75a6a5L2N55So77yJICovXHJcbiAgICBhc3luYyBvcGVuU291cmNlKHJlbFBhdGg6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghcmVsUGF0aCB8fCByZWxQYXRoLmluY2x1ZGVzKCcuLicpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6Lev5b6EOiBcIiR7cmVsUGF0aH1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1cmwgPSBkYlVybChyZWxQYXRoKTtcclxuICAgICAgICAvLyDlhYjnoa7orqTotYTmupDlrZjlnKjkuJTlt7LooqvnvJbovpHlmajlr7zlhaXvvIzlho3osIjmiZPlvIDvvJvlkKbliJnnu5nlh7rmmI7noa7ljp/lm6BcclxuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCk7XHJcbiAgICAgICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6LWE5rqQ5LiN5a2Y5Zyo5oiW5pyq6KKr57yW6L6R5Zmo5a+85YWlOiAke3JlbFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ29wZW4tYXNzZXQnLCB1cmwpO1xyXG4gICAgICAgIHJldHVybiB7IHVybCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIm+W7uuaooeWdl++8mueUn+aIkCBNb2R1bGUgKyBNb2RlbCArIOS6i+S7tuWjsOaYjiDkuInkuKrohJrmnKzjgIJcclxuICAgICAqIEBwYXJhbSBtb2R1bGVOYW1lIOaooeWdl+WQje+8jOWmgiBcImJhZ1wiIC8gXCJCYWdcIiAvIFwiQmFnTW9kdWxlXCJcclxuICAgICAqIEBwYXJhbSBvcmRlciAgICAgIOaooeWdl+WQr+WKqOmhuuW6j1xyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nLCBvcmRlcjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwi77yM6K+35L2/55So5ZCI5rOV55qE5qCH6K+G56ymYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3JkZXIgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNGaW5pdGUob3JkZXIpIHx8IG9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBvcmRlcjogJHtvcmRlcn1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5hbWluZyA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJVcmwgPSBgZGI6Ly8ke0dBTUVQTEFZX0RJUn0vJHtuYW1pbmcuZGlyfWA7XHJcblxyXG4gICAgICAgIC8vIOWFiOafpeWtmOWcqOaAp++8jOe7meWHuuaYjuehruWOn+WboO+8iOaXp+eJiOWPquWcqCBjcmVhdGUtYXNzZXQg6L+U5Zue56m65pe26K+04oCc5Y+v6IO95bey5a2Y5Zyo4oCd77yJXHJcbiAgICAgICAgY29uc3QgbW9kdWxlVXJsID0gYCR7bW9kdWxlRGlyVXJsfS8ke25hbWluZy5tb2R1bGVDbGFzc30udHNgO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsVXJsID0gYCR7bW9kdWxlRGlyVXJsfS8ke25hbWluZy5tb2RlbENsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgZXZlbnRzVXJsID0gYCR7bW9kdWxlRGlyVXJsfS8ke25hbWluZy5ldmVudHNOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKG1vZHVsZVVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmqKHlnZflt7LlrZjlnKjvvJoke25hbWluZy5tb2R1bGVDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKG1vZGVsVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWei+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+l5qih5Z2X77yJYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhldmVudHNVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5LqL5Lu25aOw5piO5bey5a2Y5Zyo77yaJHtuYW1pbmcuZXZlbnRzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihtb2R1bGVEaXJVcmwpO1xyXG5cclxuICAgICAgICAvKiog5bey5Yib5bu65oiQ5Yqf55qE6LWE5rqQ77yb5Lu75LiA5q2l5aSx6LSl5pe25oyJ6YCG5bqP5Zue5rua77yM6YG/5YWN55WZ5LiL5Y2K5oiQ5ZOBICovXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBjb25zdCBjcmVhdGVPclJvbGxiYWNrID0gYXN5bmMgKHVybDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHVybCwgY29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gY3JlYXRlZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRvbmUgb2YgY3JlYXRlZC5yZXZlcnNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBkb25lKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgYOWIm+W7uiR7bGFiZWx95aSx6LSlOiAke3VybH0ke2NvdW50ID4gMCA/IGDvvIjlt7Llm57mu5ogJHtjb3VudH0g5Liq5paH5Lu277yJYCA6ICcnfWAsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNyZWF0ZWQucHVzaCh1cmwpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGF3YWl0IGNyZWF0ZU9yUm9sbGJhY2soXHJcbiAgICAgICAgICAgIG1vZHVsZVVybCwgYnVpbGRNb2R1bGVTY3JpcHQobmFtaW5nLm1vZHVsZUNsYXNzLCBuYW1pbmcubW9kZWxDbGFzcywgb3JkZXIsIGZyYW1ld29ya0ltcG9ydE1vZGUoKSksICfmqKHlnZcnLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhtb2RlbFVybCwgYnVpbGRNb2RlbFNjcmlwdChuYW1pbmcubW9kZWxDbGFzcywgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWeiycpO1xyXG4gICAgICAgIGF3YWl0IGNyZWF0ZU9yUm9sbGJhY2soZXZlbnRzVXJsLCBidWlsZEV2ZW50c1NjcmlwdChuYW1pbmcuZGlyLCBuYW1pbmcubW9kdWxlQ2xhc3MpLCAn5LqL5Lu25aOw5piOJyk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBtb2R1bGVEaXJVcmwpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkaXJOYW1lOiBuYW1pbmcuZGlyLFxyXG4gICAgICAgICAgICBwcmVmaXg6IG5hbWluZy5wcmVmaXgsXHJcbiAgICAgICAgICAgIG1vZHVsZVVybCxcclxuICAgICAgICAgICAgbW9kZWxVcmwsXHJcbiAgICAgICAgICAgIGV2ZW50c1VybCxcclxuICAgICAgICAgICAgb3JkZXIsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmm7TmlrDmqKHlnZfnmoQgb3JkZXLvvJrlhpnlm54gTW9kdWxlIOiEmuacrOeahCBAUmVnaXN0ZXJNb2R1bGUoe29yZGVyfSnjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlTW9kdWxlT3JkZXIobW9kdWxlTmFtZTogc3RyaW5nLCBvcmRlcjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3JkZXIgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNGaW5pdGUob3JkZXIpIHx8IG9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBvcmRlcjogJHtvcmRlcn1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyUGF0aCA9IGpvaW4ocHJvamVjdFBhdGgoKSwgR0FNRVBMQVlfRElSLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZmlsZXMgPSByZWFkZGlyU3luYyhtb2R1bGVEaXJQYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5om+5LiN5Yiw5qih5Z2X55uu5b2VOiAke21vZHVsZURpcn1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRmlsZSA9IGZpbGVzLmZpbmQoKGYpID0+IGYuZW5kc1dpdGgoJ01vZHVsZS50cycpKTtcclxuICAgICAgICBpZiAoIW1vZHVsZUZpbGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfohJrmnKw6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKG1vZHVsZURpclBhdGgsIG1vZHVsZUZpbGUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZnVsbFBhdGgsICd1dGYtOCcpO1xyXG4gICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL29yZGVyXFxzKjpcXHMqXFxkKy8sIGBvcmRlcjogJHtvcmRlcn1gKTtcclxuICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gY29udGVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOacquWcqCAke21vZHVsZUZpbGV9IOS4reaJvuWIsCBvcmRlciDlrZfmrrVgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgbmV3Q29udGVudCk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfWApKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlTmFtZTogbW9kdWxlRGlyLCBvcmRlciB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIm+W7uiBWaWV377ya5Zyo5oyH5a6a5qih5Z2X5LiL55Sf5oiQ6ISa5pysICsg6aKE5Yi25L2T77yM5bm25oqK6ISa5pys5oyC6L295Yiw6aKE5Yi25L2T5qC56IqC54K544CCXHJcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGUg6aKE5Yi25L2T5qih5p2/77yM6KeBIGNvbnN0YW50cy5QUkVGQUJfVEVNUExBVEVTXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nLCBsYXllcjogc3RyaW5nLCB0ZW1wbGF0ZTogc3RyaW5nID0gJ2VtcHR5Jykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZpZXdOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3Qodmlld05hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6KeG5Zu+5ZCNOiBcIiR7dmlld05hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFMQVlFUlMuaW5jbHVkZXMobGF5ZXIgYXMgYW55KSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOWxgue6pzogXCIke2xheWVyfVwi77yI5ZCI5rOV5YC877yaJHtMQVlFUlMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1ByZWZhYlRlbXBsYXRlKHRlbXBsYXRlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOmihOWItuS9k+aooeadvzogXCIke3RlbXBsYXRlfVwi77yI5ZCI5rOV5YC877yaJHtQUkVGQUJfVEVNUExBVEVTLmpvaW4oJywgJyl977yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vcm1hbGl6ZVZpZXdOYW1lKHZpZXdOYW1lKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJQYXRoID0gdmlld1ByZWZhYlBhdGgobW9kdWxlRGlyLCBjbGFzc05hbWUpO1xyXG5cclxuICAgICAgICAvLyDot6jmqKHlnZfph43lkI3kvJrliqDovb3plJnpooTliLbkvZPvvIhWaWV3TWFuYWdlciDmjInnsbvlkI3lhajlsYDmn6Xmib7vvInvvIzmj5DliY3mjKHkvY9cclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCBjbGFzaCA9IGxpc3RWaWV3cyhzbmFwKS5maW5kKFxyXG4gICAgICAgICAgICAodikgPT4gdi5jbGFzc05hbWUgPT09IGNsYXNzTmFtZSAmJiB2Lm1vZHVsZURpciAhPT0gbW9kdWxlRGlyLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNsYXNoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgIGBWaWV3IOWQjeWtlyBcIiR7Y2xhc3NOYW1lfVwiIOW3suiiq+aooeWdlyBcIiR7Y2xhc2gubW9kdWxlRGlyfVwiIOWNoOeUqO+8m2AgK1xyXG4gICAgICAgICAgICAgICAgYOahhuaetuaMieexu+WQjeWFqOWxgOafpeaJvu+8jOmHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8jOivt+aNouS4quWQjeWtl2AsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB2aWV3c0RpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtWSUVXU19TVUJESVJ9YDtcclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIodmlld3NEaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHt2aWV3c0RpclVybH0vJHtjbGFzc05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMoc2NyaXB0VXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpZXcg6ISa5pys5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+lIFZpZXfvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdENvbnRlbnQgPSBidWlsZFZpZXdTY3JpcHQoY2xhc3NOYW1lLCBwcmVmYWJQYXRoLCBsYXllciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKTtcclxuICAgICAgICBjb25zdCBzY3JpcHRBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBzY3JpcHRVcmwsIHNjcmlwdENvbnRlbnQsIHsgb3ZlcndyaXRlOiBmYWxzZSB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFzY3JpcHRBc3NldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWIm+W7uuiEmuacrOWksei0pTogJHtzY3JpcHRVcmx9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJVcmwgPSBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWA7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYCR7cHJlZmFiRGlyVXJsfS8ke2NsYXNzTmFtZX0ucHJlZmFiYDtcclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIocHJlZmFiRGlyVXJsKTtcclxuXHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHByZWZhYlVybCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmihOWItuS9k+W3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS5wcmVmYWLvvIjlt7Llm57mu5rohJrmnKzvvIzlpoLpnIDph43lu7ror7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY29tcHJlc3NlZFV1aWQgPSBjb21wcmVzc1V1aWQoc2NyaXB0QXNzZXQudXVpZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZhYkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShidWlsZFZpZXdQcmVmYWIoY2xhc3NOYW1lLCBjb21wcmVzc2VkVXVpZCwgdGVtcGxhdGUpKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHByZWZhYlVybCwgcHJlZmFiQ29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICghcHJlZmFiQXNzZXQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66aKE5Yi25L2T5aSx6LSlOiAke3ByZWZhYlVybH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8g5Zue5rua6ISa5pys77yM6YG/5YWN55WZ5LiL4oCc5pyJ6ISa5pys5rKh6aKE5Yi25L2T4oCd55qE5Y2K5oiQ5ZOBXHJcbiAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHNjcmlwdFVybCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBwcmVmYWJEaXJVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCB2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBzY3JpcHRVcmwsIHByZWZhYlVybCwgcHJlZmFiUGF0aCwgbGF5ZXIsIHRlbXBsYXRlIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6ZmkIHZpZXfvvJrlj6rliKDoh6rouqvvvIjohJrmnKwgKyDpooTliLbkvZMgKyDlkIToh6ogbWV0Ye+8ie+8jOS4jeeisOWFtuS7lui1hOa6kOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVWaWV3KG1vZHVsZU5hbWU6IHN0cmluZywgdmlld05hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZpZXdOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3Qodmlld05hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6KeG5Zu+5ZCNOiBcIiR7dmlld05hbWV9XCJgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtWSUVXU19TVUJESVJ9LyR7Y2xhc3NOYW1lfS50c2A7XHJcblxyXG4gICAgICAgIGNvbnN0IGRlbGV0ZWQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgW3ByZWZhYlVybCwgc2NyaXB0VXJsXSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCk7XHJcbiAgICAgICAgICAgIGlmIChpbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCB1cmwpO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOa4heeQhuepuuebruW9le+8iOaXp+eJiOS8mueVmeS4iyByZXNvdXJjZXMvdmlld3MvPOaooeWdlz4g6L+Z56eN56m65aOz77yJXHJcbiAgICAgICAgYXdhaXQgcHJ1bmVFbXB0eURpcihqb2luKHByb2plY3RQYXRoKCksIFJFU09VUkNFU19ESVIsICd2aWV3cycsIG1vZHVsZURpcikpO1xyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn1gKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGJVcmwoYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtWSUVXU19TVUJESVJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIG1vZHVsZURpciwgZGVsZXRlZCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIoOmZpOaooeWdl++8muWIoCBnYW1lcGxheS885qih5Z2XPi8g5LiOIHJlc291cmNlcy92aWV3cy885qih5Z2XPi8g5Lik5Liq55uu5b2V77yI6L+e5ZCMIG1ldGHvvInjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlTW9kdWxlKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiRGlyUGF0aCA9IGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgW3ByZWZhYkRpclBhdGgsIG1vZHVsZURpclBhdGhdKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdFN5bmMocCkuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVN5bmMocCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKHApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvKiDkuI3lrZjlnKjliJnot7Pov4cgKi9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3NgKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGJVcmwoR0FNRVBMQVlfRElSKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IG1vZHVsZURpciwgcmVtb3ZlZCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5YWs5YWx5qih5Z2XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+i5YWs5YWx5qih5Z2X77ya5pys5Zyw5bel5L2c5Yy6ICsg5bey5a6J6KOFICsg6L+c56iLIHJlZ2lzdHJ544CCXHJcbiAgICAgKiBAcGFyYW0gZm9yY2Ug5by65Yi26YeN5paw5ouJ5Y+W6L+c56iL5YiX6KGo77yI6Z2i5p2/55qE44CM5Yi35paw44CN55So77yJXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5U2hhcmVkTW9kdWxlcyhmb3JjZT86IGJvb2xlYW4pIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnlTaGFyZWRTdGF0ZShmb3JjZSA9PT0gdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5a6J6KOF5LiA5Liq5YWs5YWx5qih5Z2X77yaKirnm7TmjqXku6Pot5EgYG5wbSBpbnN0YWxsYCoq44CCXHJcbiAgICAgKiDlpLHotKXml7bmipvlh7rnmoTplJnor6/ph4zluKbnnYAgbnBtIOeahOWOn+Wni+i+k+WHuu+8jOmdouadv+S8muWOn+agt+WxleekuuOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbnN0YWxsU2hhcmVkTW9kdWxlKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gcnVuU2hhcmVkQWN0aW9uKCdpbnN0YWxsJywgcGFja2FnZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5Y246L295LiA5Liq5YWs5YWx5qih5Z2X77ya55u05o6l5Luj6LeRIGBucG0gdW5pbnN0YWxsYCAqL1xyXG4gICAgYXN5bmMgdW5pbnN0YWxsU2hhcmVkTW9kdWxlKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gcnVuU2hhcmVkQWN0aW9uKCd1bmluc3RhbGwnLCBwYWNrYWdlTmFtZSk7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBlbiBNZXRob2QgVHJpZ2dlcmVkIG9uIEV4dGVuc2lvbiBTdGFydHVwXHJcbiAqIEB6aCDmianlsZXlkK/liqjml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkKCkgeyB9XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCB0cmlnZ2VyZWQgd2hlbiB1bmluc3RhbGxpbmcgdGhlIGV4dGVuc2lvblxyXG4gKiBAemgg5Y246L295omp5bGV5pe26Kem5Y+R55qE5pa55rOVXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdW5sb2FkKCkgeyB9XHJcbiJdfQ==
862
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQWcvQkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQXQvQjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQWlEO0FBQ2pELHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUtvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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U0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQWU7UUFDcEMsT0FBTyxNQUFNLGdCQUFnQixDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFdBQW1CO1FBQ3pDLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxXQUFtQjtRQUMzQyxPQUFPLGVBQWUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNKLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFnQixJQUFJLEtBQUssQ0FBQztBQUUxQjs7O0dBR0c7QUFDSCxTQUFnQixNQUFNLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcclxuaW1wb3J0IHBhY2thZ2VKU09OIGZyb20gJy4uL3BhY2thZ2UuanNvbic7XHJcbmltcG9ydCB7IHNwYXduLCBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuaW1wb3J0IHsgY29weVN5bmMsIGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHJlbW92ZVN5bmMsIHN0YXRTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7XHJcbiAgICBHQU1FUExBWV9ESVIsXHJcbiAgICBMQVlFUlMsXHJcbiAgICBNQU5BR0VSX0RJUixcclxuICAgIFBSRUZBQl9URU1QTEFURVMsXHJcbiAgICBQUkVGQUJfVEVNUExBVEVfTEFCRUxTLFxyXG4gICAgUkVHSVNUUllfQ0FDSEVfTVMsXHJcbiAgICBSRVNPVVJDRVNfRElSLFxyXG4gICAgVFByZWZhYlRlbXBsYXRlLFxyXG4gICAgVklFV1NfU1VCRElSLFxyXG59IGZyb20gJy4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgYnVpbGRPcmRlclBsYW4sIGxpc3RNYW5hZ2VycywgbGlzdE1vZHVsZXMsIGxpc3RWaWV3cywgcnVuRG9jdG9yIH0gZnJvbSAnLi9kb2N0b3InO1xyXG5pbXBvcnQge1xyXG4gICAgSURFTlRJRklFUl9SRSxcclxuICAgIG5vcm1hbGl6ZU1hbmFnZXJOYW1lLFxyXG4gICAgbm9ybWFsaXplTW9kdWxlLFxyXG4gICAgbm9ybWFsaXplVmlld05hbWUsXHJcbiAgICB2aWV3UHJlZmFiUGF0aCxcclxufSBmcm9tICcuL25hbWluZyc7XHJcbmltcG9ydCB7XHJcbiAgICBjb2xsZWN0U25hcHNob3QsXHJcbiAgICBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXIsXHJcbiAgICBsaXN0TG9jYWxDYXRhbG9nLFxyXG4gICAgcmVhZEluc3RhbGxlZFBhY2thZ2UsXHJcbiAgICByZWFkUHJvamVjdE1hbmlmZXN0LFxyXG59IGZyb20gJy4vcHJvamVjdCc7XHJcbmltcG9ydCB7XHJcbiAgICBpc1NoYXJlZE1vZHVsZVBhY2thZ2UsXHJcbiAgICBLTk9XTl9QQUNLQUdFUyxcclxuICAgIHBhcnNlVmlld1Jlc3VsdCxcclxuICAgIHZpZXdBcmd2LFxyXG59IGZyb20gJy4vcmVnaXN0cnknO1xyXG5pbXBvcnQge1xyXG4gICAgTlBNX1RJTUVPVVRfTVMsXHJcbiAgICBidWlsZE5wbVJlc3VsdCxcclxuICAgIGJ1aWxkU2hhcmVkU3RhdHVzLFxyXG4gICAgY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZCxcclxuICAgIGNvbGxlY3RJbnN0YWxsU3BlY3MsXHJcbiAgICBkZWNvZGVQcm9jZXNzT3V0cHV0LFxyXG4gICAgZmluZFBhY2thZ2VSZWZzLFxyXG4gICAgZm9ybWF0TnBtQ29tbWFuZCxcclxuICAgIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QsXHJcbiAgICBtZXJnZUNhdGFsb2csXHJcbiAgICBucG1TcGF3blNwZWMsXHJcbiAgICBzcGF3blNwZWNGb3IsXHJcbiAgICBzdW1tYXJpemVOcG1GYWlsdXJlLFxyXG59IGZyb20gJy4vc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICAgIGJ1aWxkTWFuYWdlclNjcmlwdCxcclxuICAgIGJ1aWxkRXZlbnRzU2NyaXB0LFxyXG4gICAgYnVpbGRNb2RlbFNjcmlwdCxcclxuICAgIGJ1aWxkTW9kdWxlU2NyaXB0LFxyXG4gICAgYnVpbGRWaWV3UHJlZmFiLFxyXG4gICAgYnVpbGRWaWV3U2NyaXB0LFxyXG4gICAgaXNQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFRGcmFtZXdvcmtJbXBvcnQsfSBmcm9tICcuL3RlbXBsYXRlcyc7XHJcbmltcG9ydCB7IElGaW5kaW5nLCBJTnBtUnVuUmVzdWx0LCBJSW5zdGFsbGVkUGFja2FnZVZpZXcsIElQcm9qZWN0U25hcHNob3QsIElTaGFyZWRDYXRhbG9nRW50cnkgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5paH5qGIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiDmianlsZXoh6rluKbnmoTkuK3mlofmlofmoYjooajjgIJcclxuICog5a6D5pei5piv44CMa2V5IOWFqOmbhuOAjeeahOadpea6kO+8jOS5n+aYr+e8lui+keWZqCBpMThuIOaLv+S4jeWIsOaXtueahOWFnOW6leOAglxyXG4gKi9cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuY29uc3QgWkhfU1RSSU5HUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHJlcXVpcmUoJy4uL2kxOG4vemguanMnKTtcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5bCP5bel5YW3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKiDlt6XnqIvmoLnnm67lvZUgKi9cclxuZnVuY3Rpb24gcHJvamVjdFBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuUHJvamVjdC5wYXRoO1xyXG59XHJcblxyXG4vKipcclxuICog6L+Z5Liq5bel56iL5byV55So5qGG5p626K+l55So5ZOq56eN5YaZ5rOVOlxyXG4gKiAtIOW8gOWPkeW3peS9nOWMuijku5PlupPph4ws5qGG5p625rqQ56CB5ZyoIGFzc2V0cy9zY3JpcHRzL2ZyYW1ld29yayDkuIspIC0+IOebuOWvuei3r+W+hFxyXG4gKiAtIOijheaIkCBucG0g5YyF55qE5paw5bel56iLIC0+IOWMheWQjSBAY2NnZi9mcmFtZXdvcmtcclxuICpcclxuICog5Yik5o2u5pivXCLmoYbmnrbmupDnoIHlnKjkuI3lnKhcIizkuI4gY29uc3RhbnRzLnRzIOeahCBGUkFNRVdPUktfREVWX0RJUiDlkIzkuIDkuKrlgLzjgIJcclxuICovXHJcbmZ1bmN0aW9uIGZyYW1ld29ya0ltcG9ydE1vZGUoKTogVEZyYW1ld29ya0ltcG9ydCB7XHJcbiAgICByZXR1cm4gZXhpc3RzU3luYyhqb2luKHByb2plY3RQYXRoKCksICdhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsnKSkgPyAnd29ya3NwYWNlJyA6ICdwYWNrYWdlJztcclxufVxyXG5cclxuLyoqIOebuOWvuei3r+W+hCAtPiBkYjovLyDotYTmupAgdXJsICovXHJcbmZ1bmN0aW9uIGRiVXJsKHJlbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnZGI6Ly8nICsgcmVsLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxufVxyXG5cclxuLyoqIHV1aWQgLT4g6aKE5Yi25L2T6YeM6ISa5pys57uE5Lu255qEIF9fdHlwZV9fICovXHJcbmZ1bmN0aW9uIGNvbXByZXNzVXVpZCh1dWlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEVkaXRvci5VdGlscy5VVUlELmNvbXByZXNzVVVJRCh1dWlkLCBmYWxzZSk7XHJcbn1cclxuXHJcbi8qKiDlj5bkuIDku73lt6XnqIvlv6vnhafvvIjkvZPmo4DjgIHliJfooajpg73ln7rkuo7lroPvvIzkv53or4HpnaLmnb/nnIvliLDnmoTlkozkvZPmo4DnnIvliLDnmoTmmK/lkIzkuIDku73mlbDmja7vvIkgKi9cclxuZnVuY3Rpb24gc25hcHNob3QoKTogSVByb2plY3RTbmFwc2hvdCB7XHJcbiAgICByZXR1cm4gY29sbGVjdFNuYXBzaG90KHByb2plY3RQYXRoKCksIGNvbXByZXNzVXVpZCk7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogcmVnaXN0cnkg5pCc57Si57uT5p6c55qE57yT5a2Y44CCXHJcbiAqXHJcbiAqIOS4gOasoeaQnOe0ouWunua1iyAxfjQg56eSIOKAlOKAlCDogIzpnaLmnb/liIfpobXjgIHoo4XlrozliLfmlrDpg73kvJrosIPnlKjmn6Xor6LvvIzkuI3og73mr4/mrKHpg73ljrvmkJzjgIJcclxuICog5pi+5byP54K544CM5Yi35paw44CN5pe255SoIGBmb3JjZWAg57uV6L+H5a6D44CCXHJcbiAqL1xyXG5sZXQgcmVnaXN0cnlDYWNoZTogeyBhdDogbnVtYmVyOyBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbi8qKlxyXG4gKiAqKuWksei0peS4jeaKm+W8guW4uCzkuZ/kuI3orqnpnaLmnb/nqbrnnYDoo4XkvZxcIuayoeacieaooeWdl1wiKio65oqK5Y6f5Zug5LiA6LW35Zue5LygLOmdouadv+aYvuekuuaIkOaPkOekuiDigJTigJRcclxuICog6L+Z5piv5pyA5Yid5bCx5a6a5LiL55qE6KaB5rGCKFwi5rKh5pyJ572R57uc5bCx5o+Q56S65bCx6KGM5LqGXCIp44CCXHJcbiAqXHJcbiAqIOi/nOeoi+S/oeaBr+eahOadpea6kDoqKumAkOS4qiBgbnBtIHZpZXcgPG5hbWU+IC0tanNvbmAg57K+56Gu5p+l6K+iKirjgIJcclxuICpcclxuICog5pu+57uP55SoIGBucG0gc2VhcmNoYCArIOWFs+mUruivjSzlt7Llup/lvIMg4oCU4oCUIOaQnOe0ouWvuSBzY29wZWQg5YyFKGBAY2NnZi8qYCnlvojkuI3lj6/pnaAsXHJcbiAqIOW4uOW4uOaQnOS4jeWIsCzkuo7mmK9cIuWFrOWFseaooeWdl+i/nOeoi+WIl+ihqFwi5ZKMXCLmnIDmlrDniYjmnKxcIumDveS8muaYr+epuueahCjlrp7mtYvouKnov4cp44CCXHJcbiAqIOS7o+S7tzrljIXlkI3opoHnu7TmiqTlnKggcmVnaXN0cnkudHMg55qEIEtOT1dOX1BBQ0tBR0VTIOmHjCzmlrDlop7ljIXml7bliqDkuIDooYzjgIJcclxuICpcclxuICog5LmL5omA5Lul55SoIG5wbSDlkb3ku6TogIzkuI3mmK/oh6rlt7Hlj5EgSFRUUFMg6K+35rGCOm5wbSDkvJroh6rliqjluKbkuIrlt6XnqIvnmoQgYC5ucG1yY2BcclxuICogKOengeaciea6kOOAgemVnOWDj+OAgeS7o+eQhuetiemFjee9rumDvei3n+edgOi1sCks5LiN55So5oiR5Lus6YeN5aSN5a6e546w5LiA6YGN44CCXHJcbiAqL1xyXG4vKipcclxuICogKirlvILmraUqKui3keS4gOasoSBucG3jgIJcclxuICpcclxuICog5Li65LuA5LmI5LiN6IO957un57ut55SoIHNwYXduU3luYzrov5nkuKrlh73mlbDlnKgqKue8lui+keWZqOS4u+i/m+eoiyoq6YeM6KKr6LCD55SoLHNwYXduU3luYyDkvJrmiorkuLvlvqrnjq9cclxuICog5pW05Liq5Y2g5L2PIOKAlOKAlCDmr4/mn6XkuIDkuKrljIXlh6Dnmb7mr6vnp5Is5Yeg5Liq5YyF5LiL5p2l57yW6L6R5ZmoIFVJIOWwseWNoeS9j+OAgeeCueWIq+WkhOayoeWPjeW6lCjlrp7mtYsp44CCXHJcbiAqIOaNouaIkCBzcGF3biArIFByb21pc2U65ZCM5qC3562J57uT5p6cLOS9huS4remXtOiuqeWHuuS6i+S7tuW+queOryznvJbovpHlmajkuI3lhrvnu5PjgIJcclxuICovXHJcbi8qKlxyXG4gKiDmn6Xov5znqIvkv6Hmga/nlKjnmoQqKuefrSoq6LaF5pe244CCXHJcbiAqXHJcbiAqIOS4jeiDveeUqCBOUE1fVElNRU9VVF9NUygxMjAg56eSKTrpgqPmmK/nu5lcIuWuieijhVwi55So55qELOeUqOaIt+WPr+S7peetiTtcclxuICog6ICMXCLmn6XkuIDkuIvmnIDmlrDniYjmnKxcIuimgeaYr+etieS4pOWIhumSnyzpgqPkuIDpobXlsLHnrYnkuo7lup/kuobjgIJcclxuICovXHJcbmNvbnN0IFJFR0lTVFJZX1FVRVJZX1RJTUVPVVRfTVMgPSAyNTAwMDtcclxuXHJcbi8qKiDlkIzkuIDml7bliLvlj6rlhYHorrjkuIDkuKrlkI7lj7DliLfmlrDlnKjot5Es5ZCm5YiZ5q+P5qyh5YiH6aG1562+6YO95Lya5YaN6LW35LiA6L2uIG5wbSAqL1xyXG5sZXQgcmVnaXN0cnlSZWZyZXNoaW5nID0gZmFsc2U7XHJcblxyXG5mdW5jdGlvbiBydW5OcG1Bc3luYyhcclxuICAgIGNvbW1hbmQ6IHN0cmluZyxcclxuICAgIHNwYXduU3BlYzogeyBjb21tYW5kOiBzdHJpbmc7IGFyZ3M6IHN0cmluZ1tdOyB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM/OiBib29sZWFuIH0sXHJcbiAgICBjd2Q6IHN0cmluZyxcclxuICAgIHRpbWVvdXRNczogbnVtYmVyID0gTlBNX1RJTUVPVVRfTVMsXHJcbik6IFByb21pc2U8eyByZXN1bHQ6IElOcG1SdW5SZXN1bHQ7IHN0ZG91dDogc3RyaW5nIH0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcclxuICAgICAgICBjb25zdCBlcnJDaHVua3M6IEJ1ZmZlcltdID0gW107XHJcbiAgICAgICAgbGV0IGNoaWxkOiBhbnk7XHJcbiAgICAgICAgY29uc3QgZmluaXNoID0gKGV4aXRDb2RlOiBudW1iZXIgfCBudWxsLCBzcGF3bkVycm9yOiB7IGNvZGU/OiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzdGRvdXQgPSBkZWNvZGVQcm9jZXNzT3V0cHV0KEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgICAgICAgICAgICBleGl0Q29kZSxcclxuICAgICAgICAgICAgICAgICAgICBzdGRvdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RkZXJyOiBkZWNvZGVQcm9jZXNzT3V0cHV0KEJ1ZmZlci5jb25jYXQoZXJyQ2h1bmtzKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc3Bhd25FcnJvcixcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgc3Rkb3V0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNoaWxkID0gc3Bhd24oc3Bhd25TcGVjLmNvbW1hbmQsIHNwYXduU3BlYy5hcmdzLCB7XHJcbiAgICAgICAgICAgICAgICBjd2QsXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICAgICAgZmluaXNoKG51bGwsIHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7IHRyeSB7IGNoaWxkLmtpbGwoKTsgfSBjYXRjaCB7IC8qIOW3sue7j+mAgOS6hiAqLyB9IH0sIHRpbWVvdXRNcyk7XHJcbiAgICAgICAgY2hpbGQuc3Rkb3V0Py5vbignZGF0YScsIChkOiBCdWZmZXIpID0+IGNodW5rcy5wdXNoKGQpKTtcclxuICAgICAgICBjaGlsZC5zdGRlcnI/Lm9uKCdkYXRhJywgKGQ6IEJ1ZmZlcikgPT4gZXJyQ2h1bmtzLnB1c2goZCkpO1xyXG4gICAgICAgIGNoaWxkLm9uKCdlcnJvcicsIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICBmaW5pc2gobnVsbCwgeyBjb2RlOiBlcnI/LmNvZGUsIG1lc3NhZ2U6IGVycj8ubWVzc2FnZSA/IFN0cmluZyhlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKSB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjaGlsZC5vbignY2xvc2UnLCAoY29kZTogbnVtYmVyIHwgbnVsbCkgPT4ge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICBpZiAodGltZXIgPT09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgZmluaXNoKGNvZGUsIG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuLyoqXHJcbiAqIOi/nOeoi+S/oeaBryjluKbnvJPlrZgp44CCKirov5nkuKrlh73mlbDmsLjov5zkuI3pmLvloZ7jgIHmsLjov5zkuI0gYXdhaXQg5aSW6YOo6L+b56iLKirjgIJcclxuICpcclxuICog5Li65LuA5LmI6L+Z5LmI6K6+6K6hOuWug+i3keWcqOe8lui+keWZqOS4u+i/m+eoi+mHjCzogIwgbnBtIOavj+S4qui/m+eoi+imgSAxfjMg56eSLOe9kee7nOWdj+S6hui/mOWPr+iDveS4gOebtOS4jei/lOWbnuOAglxyXG4gKiDml6nlhYjnlKjlkIzmraUgc3Bhd24gKyDpgJDkuKrmn6Us6KGo546w5bCx5pivXCLngrnlvIDov5nkuIDpobUs57yW6L6R5Zmo5Yir5aSE5Lmf5rKh5Y+N5bqUXCLjgIJcclxuICog546w5ZyoOuWRveS4ree8k+WtmOeri+WIu+i/lOWbnjvov4fmnJ/liJkqKuWFiOi/lOWbnuaXp+WAvCoqLOWQjOaXtuWQjuWPsOWIt+aWsCjkuI0gYXdhaXQpO1xyXG4gKiDku47msqHmiJDlip/ov4fml7bov5Tlm57mmI7noa7nmoTmj5DnpLrmlofmoYgs6ICM5LiN5piv6K6p6LCD55So5pa55bmy562J44CCXHJcbiAqXHJcbiAqIOWksei0peS4jeaKm+W8guW4uCzkuZ/kuI3orqnpnaLmnb/nqbrnnYDoo4XkvZxcIuayoeacieaooeWdl1wiOuaKiuWOn+WboOS4gOi1t+WbnuS8oCzpnaLmnb/mmL7npLrmiJDmj5DnpLog4oCU4oCUXHJcbiAqIOi/meaYr+acgOWIneWwseWumuS4i+eahOimgeaxgihcIuayoeaciee9kee7nOWwseaPkOekuuWwseihjOS6hlwiKeOAglxyXG4gKi9cclxuZnVuY3Rpb24gcXVlcnlSZWdpc3RyeShmb3JjZTogYm9vbGVhbik6IHsgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHtcclxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICBjb25zdCBmcmVzaCA9IHJlZ2lzdHJ5Q2FjaGUgJiYgbm93IC0gcmVnaXN0cnlDYWNoZS5hdCA8IFJFR0lTVFJZX0NBQ0hFX01TO1xyXG5cclxuICAgIGlmICghZm9yY2UgJiYgZnJlc2gpIHtcclxuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiByZWdpc3RyeUNhY2hlIS5lbnRyaWVzLCBlcnJvcjogcmVnaXN0cnlDYWNoZSEuZXJyb3IgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDpnIDopoHmm7TmlrA65ZCO5Y+w5Y675Yi3LOS4jeWcqOi/memHjOetiVxyXG4gICAgdm9pZCByZWZyZXNoUmVnaXN0cnkoKTtcclxuXHJcbiAgICBpZiAocmVnaXN0cnlDYWNoZSkge1xyXG4gICAgICAgIHJldHVybiB7IGVudHJpZXM6IHJlZ2lzdHJ5Q2FjaGUuZW50cmllcywgZXJyb3I6IHJlZ2lzdHJ5Q2FjaGUuZXJyb3IgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZW50cmllczogW10sXHJcbiAgICAgICAgZXJyb3I6IHJlZ2lzdHJ5UmVmcmVzaGluZyA/ICfmraPlnKjojrflj5bov5znqIvkv6Hmga/igKYnIDogJ+i/nOeoi+S/oeaBr+aaguS4jeWPr+eUqCjnprvnur/miJbotoXml7YpJyxcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKiDnnJ/mraPnmoTmi4nlj5Y65byC5q2l44CB5pyJ5bm25Y+R6Ze444CB5Y2V5YyF5aSx6LSl5LiN5ouW5Z6u5pW05Lu95YiX6KGoICovXHJcbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hSZWdpc3RyeSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChyZWdpc3RyeVJlZnJlc2hpbmcpIHJldHVybjtcclxuICAgIHJlZ2lzdHJ5UmVmcmVzaGluZyA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgS05PV05fUEFDS0FHRVMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9ICducG0gdmlldyAnICsgbmFtZSArICcgLS1qc29uJztcclxuICAgICAgICAgICAgY29uc3Qgc3Bhd25TcGVjID0gc3Bhd25TcGVjRm9yKFxyXG4gICAgICAgICAgICAgICAgW3Byb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnbnBtLmNtZCcgOiAnbnBtJywgLi4udmlld0FyZ3YobmFtZSldLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlc3VsdCwgc3Rkb3V0IH0gPSBhd2FpdCBydW5OcG1Bc3luYyhjb21tYW5kLCBzcGF3blNwZWMsIHByb2plY3RQYXRoKCksIFJFR0lTVFJZX1FVRVJZX1RJTUVPVVRfTVMpO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuYW1lICsgJzonICsgKHJlc3VsdC5oaW50ID8/ICgn6LaF5pe25oiW6YCA5Ye656CBICcgKyAocmVzdWx0LmV4aXRDb2RlID8/ICfmnKrnn6UnKSkpKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gcGFyc2VWaWV3UmVzdWx0KHN0ZG91dCk7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeSkgZW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICAgICAgZWxzZSBmYWlsdXJlcy5wdXNoKG5hbWUgKyAnOui/lOWbnuWGheWuueS4jeaYr+mihOacn+eahCBKU09OIOW9oueKticpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gKirpg6jliIYqKuWksei0peS5n+imgeaKpeWHuuadpTrml6nlhYjlj6rlnKhcIuWFqOmDqOWksei0pVwi5pe25omN5Zue5LygLFxuICAgICAgICAvLyDnu5PmnpxcIjMg5Liq5p+l5YiwICsgMSDkuKrotoXml7ZcIuWujOWFqOmdmem7mCDigJTigJQg6Z2i5p2/5pi+56S6XCLml6Dms5Xnoa7orqRcIuWNtOS4jee7meS7u+S9leWOn+WboOOAglxuICAgICAgICBjb25zdCBlcnJvciA9IGZhaWx1cmVzLmxlbmd0aCA+IDAgPyAoJ+mDqOWIhui/nOeoi+S/oeaBr+iOt+WPluWksei0pTonICsgZmFpbHVyZXMuam9pbignOycpKSA6IG51bGw7XHJcbiAgICAgICAgcmVnaXN0cnlDYWNoZSA9IHsgYXQ6IERhdGUubm93KCksIGVudHJpZXMsIGVycm9yIH07XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIHJlZ2lzdHJ5UmVmcmVzaGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICog57uE6KOF5YWs5YWx5qih5Z2X55qE5a6M5pW054q25oCB44CCXHJcbiAqXHJcbiAqIOS4ieS4quadpea6kOWQiOi1t+adpeaJjeaYr+WujOaVtOWIl+ihqO+8mlxyXG4gKiAxLiDmnKzmoYbmnrYqKuW8gOWPkeW3peS9nOWMuioq6YeM55qEIGBwYWNrYWdlcy9zaGFyZWQvKmDvvIjlj6rmnInmnKzku5PlupPmiY3orqTvvIzop4FcclxuICogICAgYGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0RpcmDvvInigJTigJQg6IO957uZ5Ye6IGBmaWxlOmAg5a6J6KOF6K+05piO56ym77ybXHJcbiAqIDIuIGBub2RlX21vZHVsZXNgIOmHjOW3sue7j+ijheS6hueahO+8iOmdoOWMhea4heWNlemHjOeahOagh+iusOiupOWHuuadpe+8ie+8m1xyXG4gKiAzLiAqKui/nOeoiyByZWdpc3RyeSoq77yI5oyJ5Y+R546w5YWz6ZSu6K+N5pCc57Si77yJ4oCU4oCUIOimhuebllwi6L+Y5rKh6KOF44CB5L2G5Y+v5Lul6KOFXCLnmoTpgqPkupvjgIJcclxuICpcclxuICog5Yi75oSPKirkuI0qKumdoOWMheWQjeWMuemFjeadpeivhuWIq+WFrOWFseaooeWdl++8mnNjb3BlIOi/mOayoeWumu+8iOingSBST0FETUFQIOeahCBTMWHvvInvvIxcclxuICog5o2i5LiqIHNjb3BlIOWwseiupOS4jeWHuuadpeS6huOAglxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gcXVlcnlTaGFyZWRTdGF0ZShmb3JjZVJlZ2lzdHJ5ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgY29uc3QgbWFuaWZlc3QgPSByZWFkUHJvamVjdE1hbmlmZXN0KHJvb3QpO1xyXG4gICAgY29uc3QgcHJvamVjdERlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICAgICAgLi4uKG1hbmlmZXN0Py5kZXZEZXBlbmRlbmNpZXMgPz8ge30pLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzaGFyZWREaXIgPSBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXIocm9vdCk7XHJcbiAgICBjb25zdCBsb2NhbCA9IHNoYXJlZERpciA/IGxpc3RMb2NhbENhdGFsb2coc2hhcmVkRGlyLCByb290KSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IGluc3RhbGxlZFNoYXJlZDogSVNoYXJlZENhdGFsb2dFbnRyeVtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMocHJvamVjdERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpZiAocGtnLmluc3RhbGxlZCAmJiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCkpIHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkU2hhcmVkLnB1c2goY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZChuYW1lLCBwa2cubWFuaWZlc3QsIHBrZy52ZXJzaW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYXdhaXQgcXVlcnlSZWdpc3RyeShmb3JjZVJlZ2lzdHJ5KTtcclxuICAgIC8vIOahhuaetuS4juaJqeWxleS4jeaYr+WFrOWFseaooeWdlyzomb3nhLblroPku6zkuZ/oo4XnnYDjgIHkuZ/lnKggS05PV05fUEFDS0FHRVMg6YeMIOKAlOKAlCDkuKTlpITpg73opoHmu6TmjoksXHJcbiAgICAvLyDlkKbliJnkvb/nlKjogIXnmoRcIuWFrOWFseaooeWdl1wi5YiX6KGo6YeM5Lya5YaS5Ye65qGG5p625ZKM57yW6L6R5Zmo5omp5bGV44CCXHJcbiAgICBjb25zdCBzaGFyZWRPbmx5ID0gKGU6IElTaGFyZWRDYXRhbG9nRW50cnkpID0+IGlzU2hhcmVkTW9kdWxlUGFja2FnZShlLm5hbWUpO1xyXG4gICAgY29uc3QgY2F0YWxvZyA9IG1lcmdlQ2F0YWxvZyhcclxuICAgICAgICBtZXJnZUNhdGFsb2cobG9jYWwsIHJlZ2lzdHJ5LmVudHJpZXMuZmlsdGVyKHNoYXJlZE9ubHkpKSxcclxuICAgICAgICBpbnN0YWxsZWRTaGFyZWQuZmlsdGVyKHNoYXJlZE9ubHkpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBcIuWPr+abtOaWsFwi6KaB6Z2g6L+c56iL55qE5pyA5paw54mI5pys5Y+377yM6ICMIG1lcmdlQ2F0YWxvZyDorqnmnKzlnLDpobnkvJjlhYjvvIjlkIzlkI3nmoTov5znqIvpobnkvJrooqvnm5bmjonvvInvvIxcclxuICAgIC8vIOaJgOS7pei/memHjOWNleeLrOeVmeS4gOS7veWMheWQjSAtPiDov5znqIvmnIDmlrDniYjmnKzjgIJcclxuICAgIGNvbnN0IHJlZ2lzdHJ5VmVyc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVnaXN0cnkuZW50cmllcykge1xyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnNbZW50cnkubmFtZV0gPSBlbnRyeS52ZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOimgeafpeWunuaXtueKtuaAgeeahOWMhSA9IOWIl+ihqOmHjOeahCArIOWug+S7rOWjsOaYjueahOS+nei1luOAglxyXG4gICAgLy8g5L6d6LWW5Y+v6IO95LiN5Zyo5YiX6KGo6YeM77yI5pmu6YCaIG5wbSDljIXvvInvvIzkvYblroPoo4XmsqHoo4XlkIzmoLfopoHmmL7npLrlh7rmnaXjgIJcclxuICAgIGNvbnN0IHdhbnRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjYXRhbG9nKSB7XHJcbiAgICAgICAgd2FudGVkLmFkZChlbnRyeS5uYW1lKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBPYmplY3Qua2V5cyhlbnRyeS5kZWNsYXJlZERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICAgICAgd2FudGVkLmFkZChkZXApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGluc3RhbGxlZFBhY2thZ2VzOiBSZWNvcmQ8c3RyaW5nLCBJSW5zdGFsbGVkUGFja2FnZVZpZXc+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygd2FudGVkKSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgbmFtZSk7XHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXNbbmFtZV0gPSB7XHJcbiAgICAgICAgICAgIGluc3RhbGxlZDogcGtnLmluc3RhbGxlZCxcclxuICAgICAgICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXHJcbiAgICAgICAgICAgIGlzU2hhcmVkTW9kdWxlOiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgIGNvbnN0IHNvdXJjZXMgPSB7IC4uLnNuYXAuZ2FtZXBsYXlTb3VyY2VzLCAuLi5zbmFwLm1hbmFnZXJTb3VyY2VzIH07XHJcblxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGNhdGFsb2cubWFwKChlbnRyeSkgPT4gYnVpbGRTaGFyZWRTdGF0dXMoZW50cnksIHtcclxuICAgICAgICBwcm9qZWN0RGVwZW5kZW5jaWVzLFxyXG4gICAgICAgIGluc3RhbGxlZFBhY2thZ2VzLFxyXG4gICAgICAgIHJlZmVyZW5jZXM6IHsgW2VudHJ5Lm5hbWVdOiBmaW5kUGFja2FnZVJlZnMoc291cmNlcywgZW50cnkubmFtZSkgfSxcclxuICAgICAgICBjYXRhbG9nLFxyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnMsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtb2R1bGVzLFxyXG4gICAgICAgIC8qKiDmnKzlnLDlronoo4XmupDvvJsqKuWPquacieacrOahhuaetueahOW8gOWPkeS7k+W6k+mHjOaJjemdniBudWxsKirvvIjpnaLlkJHnlKjmiLfnmoTlt6XnqIvph4zmsLjov5zmmK8gbnVsbO+8iSAqL1xyXG4gICAgICAgIGxvY2FsU291cmNlOiBzaGFyZWREaXIsXHJcbiAgICAgICAgLyoqIOW3peeoi+acieWPr+ivu+eahCBwYWNrYWdlLmpzb24g5ZCXICovXHJcbiAgICAgICAgaGFzTWFuaWZlc3Q6IG1hbmlmZXN0ICE9PSBudWxsLFxyXG4gICAgICAgIC8qKiDov5znqIvliJfooajmi4nlj5blpLHotKXnmoTljp/lm6DvvJvkuLogbnVsbCDooajnpLrov5nmrKHmmK/miJDlip/nmoTvvIjmiJbnlKjkuobnvJPlrZjvvIkgKi9cclxuICAgICAgICByZWdpc3RyeUVycm9yOiByZWdpc3RyeS5lcnJvcixcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDot5HkuIDmrKEgbnBt44CCXHJcbiAqXHJcbiAqIOWFqOeoiyoq5LiN5oqb5byC5bi4KirvvJrpgIDlh7rnoIHjgIFzdGRvdXTjgIFzdGRlcnLjgIHku6Xlj4ogc3Bhd24g6Ieq6Lqr55qE5aSx6LSl6YO95pS26L+bIElOcG1SdW5SZXN1bHRcclxuICog5Zue5Lyg57uZ6Z2i5p2/IOKAlOKAlCDnlKjmiLfopoHnnIvnmoTmmK8gbnBtIOiHquW3seivtOeahOivne+8jOiAjOS4jeaYr+S4gOWPpei9rOi/sOeahFwi5a6J6KOF5aSx6LSlXCLjgIJcclxuICovXHJcbmZ1bmN0aW9uIHJ1bk5wbShhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnLCBzcGVjczogc3RyaW5nW10pOiBJTnBtUnVuUmVzdWx0IHtcclxuICAgIGNvbnN0IHNwYXduU3BlYyA9IG5wbVNwYXduU3BlYyhhY3Rpb24sIHNwZWNzKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8gMS4gKirkuI3mjIflrpogZW5jb2RpbmcqKu+8muaLv+WIsOWOn+WniyBCdWZmZXIg6Ieq5bex6Kej56CB77yM5ZCm5YiZIGNtZCDnmoQgR0JLIOa2iOaBr+S8muWPmOS5seegge+8m1xyXG4gICAgICAgIC8vIDIuICoqd2luZG93c1ZlcmJhdGltQXJndW1lbnRzIOW/hemhu+adpeiHqiBzcGF3blNwZWMqKu+8muWwkeS6huWug++8jE5vZGUg5Lya5oqK5oiR5Yqg5aW955qEXHJcbiAgICAgICAgLy8gICAg5byV5Y+35YaN6L2s5LmJ5LiA6YGN77yMY21kIOaUtuWIsCBgXFxcIm5wbS5jbWQgaW5zdGFsbCAuLi5cXFwiYO+8jOS6juaYr+aVtOihjOiiq+W9k+aIkOWRveS7pOWQjVxyXG4gICAgICAgIC8vICAgIO+8iOaKpVwiJ25wbS5jbWQgaW5zdGFsbCAuLi4nIOS4jeaYr+WGhemDqOaIluWklumDqOWRveS7pFwi77yMbnBtIOagueacrOayoeiiq+WQr+WKqO+8ieOAglxyXG4gICAgICAgIGNvbnN0IHNwYXduZWQgPSBzcGF3blN5bmMoc3Bhd25TcGVjLmNvbW1hbmQsIHNwYXduU3BlYy5hcmdzLCB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvamVjdFBhdGgoKSxcclxuICAgICAgICAgICAgdGltZW91dDogTlBNX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICBtYXhCdWZmZXI6IDE2ICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogdHlwZW9mIHNwYXduZWQuc3RhdHVzID09PSAnbnVtYmVyJyA/IHNwYXduZWQuc3RhdHVzIDogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3Rkb3V0KSxcclxuICAgICAgICAgICAgc3RkZXJyOiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3RkZXJyKSxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogc3Bhd25lZC5lcnJvclxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogKHNwYXduZWQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHNwYXduZWQuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgY29tbWFuZDogZm9ybWF0TnBtQ29tbWFuZChhY3Rpb24sIHNwZWNzKSxcclxuICAgICAgICAgICAgZXhpdENvZGU6IG51bGwsXHJcbiAgICAgICAgICAgIHN0ZG91dDogJycsXHJcbiAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgIHNwYXduRXJyb3I6IHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDku6Pot5EgbnBtIOijhSAvIOWNuOS4gOS4quWFrOWFseaooeWdl++8jOeEtuWQjuWbnuS4gOS7veWIt+aWsOi/h+eahOeKtuaAgeOAglxyXG4gKlxyXG4gKiDlj6rmjqXlj5cgY2F0YWxvZyDph4zlrZjlnKjnmoTljIXlkI0g4oCU4oCUIOS4jeaKiuaJqeWxleWPmOaIkFwi5Lu75oSPIG5wbSDlkb3ku6TmiafooYzlmahcIuOAglxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gcnVuU2hhcmVkQWN0aW9uKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghcGFja2FnZU5hbWUgfHwgdHlwZW9mIHBhY2thZ2VOYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcign57y65bCR5YyF5ZCNJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmVmb3JlID0gYXdhaXQgcXVlcnlTaGFyZWRTdGF0ZSgpO1xyXG4gICAgY29uc3QgZW50cnkgPSBiZWZvcmUubW9kdWxlcy5maW5kKChtKSA9PiBtLm5hbWUgPT09IHBhY2thZ2VOYW1lKTtcclxuICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICBjb25zdCBrbm93biA9IGJlZm9yZS5tb2R1bGVzLm1hcCgobSkgPT4gbS5uYW1lKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGDkuI3lnKjlj6/lronoo4XliJfooajph4znmoTljIXvvJoke3BhY2thZ2VOYW1lfWBcclxuICAgICAgICAgICAgKyAoa25vd24ubGVuZ3RoID8gYO+8iOW9k+WJjeWIl+ihqO+8miR7a25vd24uam9pbignLCAnKX3vvIlgIDogJ++8iOW9k+WJjeWIl+ihqOS4uuepuu+8iScpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5a6J6KOF6KaB5oqKKirmnKzlnLDog73op6PmnpDliLDnmoTkvp3otZbkuIDotbfluKbkuIoqKu+8muWPquijheWug+S4gOS4queahOivne+8jG5wbSDkvJrljrsgcmVnaXN0cnkg5om+5L6d6LWW77yMXHJcbiAgICAvLyDogIzmnKzlnLDmupDph4znmoTkvp3otZblubbmsqHmnInlj5HluIMg4oCU4oCUIOW/heeEtiBFNDA077yI5a6e5rWL6L+H77yJ44CCXHJcbiAgICAvLyDljbjovb3mjIkqKuWMheWQjSoq77yIbnBtIOiupOWMheWQje+8jOS4jeiupCBmaWxlOiDor7TmmI7nrKbvvInjgIJcclxuICAgIGNvbnN0IHNwZWNzID0gYWN0aW9uID09PSAndW5pbnN0YWxsJ1xyXG4gICAgICAgID8gW2VudHJ5Lm5hbWVdXHJcbiAgICAgICAgOiBjb2xsZWN0SW5zdGFsbFNwZWNzKGVudHJ5LCBiZWZvcmUubW9kdWxlcyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBydW5OcG0oYWN0aW9uLCBzcGVjcyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKUqKuS4jeaKm+W8guW4uCoq77ya6Z2i5p2/6ZyA6KaB5ou/5Yiw57uT5p6E5YyW55qE57uT5p6c77yI5ZG95Luk44CB6YCA5Ye656CB44CB5Y6f5aeL6L6T5Ye677yJ77yMXHJcbiAgICAgICAgICog5omN6IO95Zyo5by556qX6YeM5Y6f5qC35bGV56S6IG5wbSDoh6rlt7Hor7TnmoTor53jgILpnZ7ms5XovpPlhaXku43nhLbmipsg4oCU4oCUIOmCo+aYr+iwg+eUqOaWueWGmemUmeS6huOAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9rOiByZXN1bHQub2ssXHJcbiAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOWksei0peaXtuS4gOWPpSoq5Y2V6KGMKirmkZjopoHvvIjpnaLmnb/mtojmga/ljLrnlKjvvInjgILlrozmlbTovpPlh7rlnKggYHJlc3VsdGAg6YeM77yM55Sx5by556qX5bGV56S6IOKAlOKAlFxyXG4gICAgICAgICAqIOS5i+WJjeaKiuaVtOautSBucG0g6L6T5Ye65aGe6L+b5raI5oGv5Yy677yM5Lya5oqK5Y+z5qCP5oyk5Y+Y5b2i5bm25ZKM5raI5oGv5Y+g5Zyo5LiA6LW344CCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm9rID8gbnVsbCA6IHN1bW1hcml6ZU5wbUZhaWx1cmUoYWN0aW9uLCBwYWNrYWdlTmFtZSwgcmVzdWx0KSxcclxuICAgICAgICAvLyDoo4Xlroznq4vliLvlm57kuIDku73mlrDnirbmgIHvvIzpnaLmnb/kuI3nlKjlho3ot5HkuIDmrKHmn6Xor6JcclxuICAgICAgICAuLi5xdWVyeVNoYXJlZFN0YXRlKCksXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiog6LWE5rqQ5piv5ZCm5a2Y5ZyoICovXHJcbmZ1bmN0aW9uIGFzc2V0RXhpc3RzKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCkudGhlbigoaW5mbzogdW5rbm93bikgPT4gISFpbmZvKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOehruS/neebruW9leWtmOWcqO+8jOS4jeWtmOWcqOWImeWIm+W7ulxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyKGRpclVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIGRpclVybCk7XHJcbiAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBkaXJVcmwsIG51bGwpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiog55uu5b2V5LiN5a2Y5Zyo5YiZ5bu677yM56m655uu5b2V5YiZ5Yig5o6J77yI55Sf5oiQL+WIoOmZpOWQjua4heeQhueUqO+8iSAqL1xyXG5hc3luYyBmdW5jdGlvbiBwcnVuZUVtcHR5RGlyKGFic0Rpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmIChzdGF0U3luYyhhYnNEaXIpLmlzRGlyZWN0b3J5KCkgJiYgcmVhZGRpclN5bmMoYWJzRGlyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmVtb3ZlU3luYyhhYnNEaXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvKiDkuI3lrZjlnKjlsLHnrpfkuoYgKi9cclxuICAgIH1cclxufVxyXG5cclxuLyoqIOaJvuWHuuW8leeUqOS6huaMh+WumiBjaWQg6ZuG5ZCI55qE5bey5bqP5YiX5YyW6LWE5rqQICovXHJcbmZ1bmN0aW9uIGZpbmRBc3NldFJlZnMoc25hcDogSVByb2plY3RTbmFwc2hvdCwgY2lkczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBoaXRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgaWYgKCFjaWRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBoaXRzO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCByZWwgb2YgT2JqZWN0LmtleXMoc25hcC5zZXJpYWxpemVkKSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBzbmFwLnNlcmlhbGl6ZWRbcmVsXTtcclxuICAgICAgICBpZiAoY2lkcy5zb21lKChjaWQpID0+IHRleHQuaW5jbHVkZXMoY2lkKSkpIHtcclxuICAgICAgICAgICAgaGl0cy5wdXNoKHJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhpdHM7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWueazlSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IG1ldGhvZHM6IHsgW2tleTogc3RyaW5nXTogKC4uLmFueTogYW55KSA9PiBhbnkgfSA9IHtcclxuICAgIC8qKlxyXG4gICAgICog5qGG5p625LiO5omp5bGV5ZCE6Ieq55qE54mI5pys5L+h5oGvKOacrOWcsCArIG5wbSDmnIDmlrAp44CCXHJcbiAgICAgKlxyXG4gICAgICog5omp5bGV6Ieq6Lqr54mI5pys6K+75a6D6Ieq5bex55qEIHBhY2thZ2UuanNvbjvmoYbmnrbniYjmnKzor7vlt6XnqIsgbm9kZV9tb2R1bGVzIOmHjOeahOmCo+S7vSDigJTigJRcclxuICAgICAqIOS4pOiAhemDveaYr1wi5a6e6ZmF6KOF5LqG5LuA5LmIXCLnmoTkuovlrp4s5LiN5piv6YWN572u6YeM5YaZ5LqG5LuA5LmI44CCXHJcbiAgICAgKiDmnInmsqHmnInmlrDniYjkuqTnu5npnaLmnb/mr5TovoMgdmVyc2lvbiDkuI4gbGF0ZXN0LOi/memHjOS4jeabv+Wug+WIpOaWrSjlhY3lvpfkuKTovrnlkITlhpnkuIDlpZcp44CCXHJcbiAgICAgKi9cclxuICAgIC8qKlxyXG4gICAgICog5oqKIG5vZGVfbW9kdWxlcyDph4znmoTmianlsZXmi7fov5sgZXh0ZW5zaW9ucy/jgIJcclxuICAgICAqXHJcbiAgICAgKiDnvJbovpHlmagqKuWPquS7juW3peeoi+eahCBleHRlbnNpb25zLyDliqDovb3mianlsZUqKizmiYDku6UgbnBtIGluc3RhbGwg5a6M5b+F6aG76JC96L+Z5LiA55uYLFxyXG4gICAgICog5ZCm5YiZXCLmm7TmlrDmiJDlip9cIuWPquWPkeeUn+WcqCBub2RlX21vZHVsZXMg6YeMLOe8lui+keWZqOmHjOS4gOeCueWPmOWMlumDveayoeacieOAglxyXG4gICAgICog6JC955uY5LmL5ZCO6ZyA6KaB6YeN5ZCv57yW6L6R5Zmo5omN55Sf5pWIIOKAlOKAlCDov5nkuIDngrnnlLHpnaLmnb/mlofmoYjlkYrnn6Us6L+Z6YeM5LiN5YGH6KOF54Ot5pu05paw44CCXHJcbiAgICAgKi9cclxuICAgIHN5bmNFeHRlbnNpb24obmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgZnJvbSA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXNcIiwgbmFtZSk7XHJcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKGZyb20pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgbWVzc2FnZTogXCJub2RlX21vZHVsZXMg6YeM5rKh5pyJIFwiICsgbmFtZSArIFwiLOWFiOWuieijheWGjeiQveebmFwiIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRvID0gam9pbihyb290LCBcImV4dGVuc2lvbnNcIiwgbmFtZS5zcGxpdChcIi9cIikucG9wKCkgYXMgc3RyaW5nKTtcclxuICAgICAgICByZW1vdmVTeW5jKHRvKTtcclxuICAgICAgICBjb3B5U3luYyhmcm9tLCB0byk7XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHBhdGg6IHRvIH07XHJcbiAgICB9LFxyXG5cclxuICAgIGFzeW5jIHF1ZXJ5VmVyc2lvbnMoZm9yY2VSZWdpc3RyeSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE9mID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoaXQgPSByZWdpc3RyeS5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIGhpdCA/IGhpdC52ZXJzaW9uIDogbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBmcmFtZXdvcmtOYW1lID0gJ0BjY2dmL2ZyYW1ld29yayc7XHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgZnJhbWV3b3JrTmFtZSk7XHJcblxyXG4gICAgICAgIC8qKiDmnKzku5PlupPnmoTlvIDlj5Hlt6XkvZzljLo65qGG5p625piv5rqQ56CB44CB5omp5bGV5bCx5piv6L+Z5LiA5Lu9IOKAlOKAlCDpnaLmnb/mja7mraTmlLnnp7DlkbzlubbnpoHnlKjmm7TmlrAgKi9cclxuICAgICAgICBjb25zdCBpbldvcmtzcGFjZSA9IGV4aXN0c1N5bmMoam9pbihyb290LCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmcmFtZXdvcms6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGZyYW1ld29ya05hbWUsXHJcbiAgICAgICAgICAgICAgICBpbnN0YWxsZWQ6IGZyYW1ld29yay5pbnN0YWxsZWQsXHJcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6IGluV29ya3NwYWNlLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogZnJhbWV3b3JrLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKGZyYW1ld29ya05hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleHRlbnNpb246IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VKU09OLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwYWNrYWdlSlNPTi52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIGxhdGVzdDogbGF0ZXN0T2YocGFja2FnZUpTT04ubmFtZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBvcGVuV29ya2JlbmNoKCkge1xyXG4gICAgICAgIEVkaXRvci5QYW5lbC5vcGVuKGAke3BhY2thZ2VKU09OLm5hbWV9LndvcmtiZW5jaGApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6Z2i5p2/55qE5bGC57qn5LiL5ouJ55Sx5Li76L+b56iL5LiL5Y+R77yM6YG/5YWN5omp5bGV6YeM5Ye6546w56ys5LqM5Lu95bGC57qn5YiX6KGoICovXHJcbiAgICBxdWVyeUxheWVycygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5MQVlFUlNdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOmdouadv+aWh+ahiO+8muS7pSBpMThuL3poLmpzIOeahCBrZXkg5YWo6ZuG5Li65YeG77yM6YCQ5Liq5Lqk57uZ57yW6L6R5ZmoIGkxOG4g6Kej5p6Q5b2T5YmN6K+t6KiA44CCXHJcbiAgICAgKiDov5nmoLfpnaLmnb/kvqfkuI3pnIDopoHliKTmlq3or63oqIDvvIzkuZ/kuI3kvp3otZYgRWRpdG9yLkkxOG4g5piv5ZCm5a2Y5Zyo5LqO6Z2i5p2/5LiK5LiL5paH6YeM44CCXHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5STE4bigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB0YWJsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFpIX1NUUklOR1MpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGwgPSBgJHtwYWNrYWdlSlNPTi5uYW1lfS4ke2tleX1gO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9IFpIX1NUUklOR1Nba2V5XTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpdCA9IEVkaXRvci5JMThuLnQoZnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGl0ICYmIGhpdCAhPT0gZnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBoaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOe8lui+keWZqCBpMThuIOS4jeWPr+eUqOWwseS/neeVmeS4reaWhyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhYmxlW2tleV0gPSB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDpooTliLbkvZPmqKHmnb/liJfooajvvIjkvpvpnaLmnb/kuIvmi4nvvIkgKi9cclxuICAgIHF1ZXJ5VGVtcGxhdGVzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgcmV0dXJuIFBSRUZBQl9URU1QTEFURVMubWFwKChpZCkgPT4gKHsgaWQsIGxhYmVsOiBQUkVGQUJfVEVNUExBVEVfTEFCRUxTW2lkXSB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+iIGdhbWVwbGF5IOS4i+W3suacieeahOaooeWdl+WIl+ihqO+8iOWQqyBvcmRlcu+8ieOAglxyXG4gICAgICog5LiO5L2T5qOA5YWx55SoIGRvY3Rvci5saXN0TW9kdWxlc++8jOS/neivgemdouadv+aYvuekuuWSjOS9k+ajgOWIpOWumuS4gOiHtOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeU1vZHVsZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNb2R1bGVzKHNuYXApLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5kaXIsXHJcbiAgICAgICAgICAgIG9yZGVyOiBtLm9yZGVyID8/IDAsXHJcbiAgICAgICAgICAgIGhhc01vZGVsOiBtLm1vZGVsRmlsZSAhPT0gbnVsbCxcclxuICAgICAgICAgICAgaGFzTW9kdWxlOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyDpnaLmnb/nlKjov5nkuInkuKrot6/lvoTlgZrjgIzkuIDplK7miZPlvIDohJrmnKzjgI3vvJtldmVudHNGaWxlIOWPr+iDveS4uiBudWxs77yI6ICB5qih5Z2X77yJXHJcbiAgICAgICAgICAgIG1vZHVsZUZpbGU6IG0ubW9kdWxlRmlsZSxcclxuICAgICAgICAgICAgbW9kZWxGaWxlOiBtLm1vZGVsRmlsZSxcclxuICAgICAgICAgICAgZXZlbnRzRmlsZTogbS5ldmVudHNGaWxlLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWQr+WKqOmhuuW6j+mihOiniCArIOWxgue6p+WNoOeUqO+8iOW8gOWPkei+heWKqe+8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlPdmVydmlldygpIHtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKTtcclxuICAgICAgICBjb25zdCB1c2FnZSA9IExBWUVSUy5tYXAoKGxheWVyKSA9PiAoe1xyXG4gICAgICAgICAgICBsYXllcixcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLmZpbHRlcigodikgPT4gdi5yZWdpc3RlcmVkTGF5ZXIgPT09IGxheWVyKS5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGxpc3RNb2R1bGVzKHNuYXApO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9yZGVyOiBidWlsZE9yZGVyUGxhbihzbmFwKSxcclxuICAgICAgICAgICAgbGF5ZXJzOiB1c2FnZSxcclxuICAgICAgICAgICAgbW9kdWxlQ291bnQ6IG1vZHVsZXMubGVuZ3RoLFxyXG4gICAgICAgICAgICBtYW5hZ2VyQ291bnQ6IGxpc3RNYW5hZ2VycyhzbmFwKS5sZW5ndGgsXHJcbiAgICAgICAgICAgIHZpZXdDb3VudDogdmlld3MubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDkuIDplK7kvZPmo4AgKi9cclxuICAgIGFzeW5jIHJ1bkRvY3RvcigpOiBQcm9taXNlPHsgZmluZGluZ3M6IElGaW5kaW5nW107IHN1bW1hcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmRpbmdzID0gcnVuRG9jdG9yKHNuYXBzaG90KCksIExBWUVSUyk7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmluZGluZ3MpIHtcclxuICAgICAgICAgICAgc3VtbWFyeVtmLnNldmVyaXR5XSA9IChzdW1tYXJ5W2Yuc2V2ZXJpdHldID8/IDApICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZmluZGluZ3MsIHN1bW1hcnkgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6Lmn5DmqKHlnZfnmoQgVmlldyDliJfooajjgIJcclxuICAgICAqIOavlOaXp+WunueOsOWkmuS6hiBwcmVmYWJFeGlzdHMg4oCU4oCUIOaXp+eJiOaMiee6puWumuaLvCBVUkwg5Y205LuO5LiN5p+l55uY77yMXHJcbiAgICAgKiDkuo7mmK/igJzohJrmnKzlnKjjgIHpooTliLbkvZPkuKLkuobigJ3nmoQgVmlldyDkuZ/kvJrooqvliJflh7rmnaXvvIzngrnkuobmiY3lpLHotKXjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlWaWV3cyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICByZXR1cm4gbGlzdFZpZXdzKHNuYXApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpXHJcbiAgICAgICAgICAgIC5tYXAoKHYpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2LmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIHNjcmlwdFVybDogZGJVcmwodi5zY3JpcHRGaWxlKSxcclxuICAgICAgICAgICAgICAgIHByZWZhYlVybDogdi5yZWdpc3RlcmVkUGF0aCA/IGRiVXJsKGAke1JFU09VUkNFU19ESVJ9LyR7di5yZWdpc3RlcmVkUGF0aH0ucHJlZmFiYCkgOiAnJyxcclxuICAgICAgICAgICAgICAgIHByZWZhYkV4aXN0czogdi5yZWdpc3RlcmVkUGF0aCA/IHNuYXAucHJlZmFic0J5UmVzb3VyY2VQYXRoW3YucmVnaXN0ZXJlZFBhdGhdICE9PSB1bmRlZmluZWQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxheWVyOiB2LnJlZ2lzdGVyZWRMYXllciA/PyAnJyxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFuYWdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAvKiogbWFuYWdlciDliJfooajvvIhhc3NldHMvc2NyaXB0cy9tYW5hZ2VyIOS4i+ebtOWxnueahCAqTWFuYWdlci50c++8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlNYW5hZ2VycygpIHtcclxuICAgICAgICByZXR1cm4gbGlzdE1hbmFnZXJzKHNuYXBzaG90KCkpLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgIGZpbGU6IG0uc2NyaXB0RmlsZSxcclxuICAgICAgICAgICAgZXh0ZW5kc1NpbmdsZXRvbjogbS5leHRlbmRzU2luZ2xldG9uLFxyXG4gICAgICAgICAgICBiYXNlQ2xhc3M6IG0uYmFzZUNsYXNzLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7ogbWFuYWdlcu+8mueUn+aIkOS4gOS4que7p+aJv+ahhuaetiBBU2luZ2xldG9uIOeahOWFqOWxgOWNleS+i+iEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1hbmFnZXJOYW1lIOWQjeWtl++8jOWmgiBcImNvbmZpZ1wiIC8gXCJDb25maWdcIiAvIFwiQ29uZmlnTWFuYWdlclwiXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3QgZGlyVXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHtkaXJVcmx9LyR7Y2xhc3NOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHNjcmlwdFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYW5hZ2VyIOW3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOWug++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0Jywgc2NyaXB0VXJsLCBidWlsZE1hbmFnZXJTY3JpcHQoY2xhc3NOYW1lLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7ogbWFuYWdlciDlpLHotKU6ICR7c2NyaXB0VXJsfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRpclVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBzY3JpcHRVcmwsIGZpbGU6IGAke01BTkFHRVJfRElSfS8ke2NsYXNzTmFtZX0udHNgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDliKDpmaQgbWFuYWdlciDohJrmnKwgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsCBtYW5hZ2VyIOiEmuacrO+8miR7Y2xhc3NOYW1lfS50c2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke01BTkFHRVJfRElSfWApO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgcmVtb3ZlZDogc2NyaXB0VXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X5YmN55qE5byV55So5qOA5p+l77ya5ZOq5Lqb6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pys44CCXHJcbiAgICAgKiDpnaLmnb/lnKjnoa7orqTmoYbph4zlsZXnpLrvvIzpgb/lhY3liKDlroznlZnkuIvmgqznqbrlvJXnlKjjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVSZWZzKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdzID0gbGlzdFZpZXdzKHNuYXApLmZpbHRlcigodikgPT4gdi5tb2R1bGVEaXIgPT09IG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgY2lkcyA9IHZpZXdzLm1hcCgodikgPT4gc25hcC5zY3JpcHRDaWRzW3Yuc2NyaXB0RmlsZV0pLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVDaWQgPSBzbmFwLnNjcmlwdENpZHNbYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkubW9kdWxlQ2xhc3N9LnRzYF07XHJcbiAgICAgICAgY29uc3QgYWxsQ2lkcyA9IG1vZHVsZUNpZCA/IGNpZHMuY29uY2F0KFttb2R1bGVDaWRdKSA6IGNpZHM7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLm1hcCgodikgPT4gdi5jbGFzc05hbWUpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQnk6IGZpbmRBc3NldFJlZnMoc25hcCwgYWxsQ2lkcyksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWcqOe8lui+keWZqOmHjOaJk+W8gOafkOS4quW3peeoi+WGheaWh+S7tu+8iOS9k+ajgOe7k+aenC/mpoLop4jngrnlh7vlrprkvY3nlKjvvIkgKi9cclxuICAgIGFzeW5jIG9wZW5Tb3VyY2UocmVsUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFyZWxQYXRoIHx8IHJlbFBhdGguaW5jbHVkZXMoJy4uJykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTot6/lvoQ6IFwiJHtyZWxQYXRofVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGRiVXJsKHJlbFBhdGgpO1xyXG4gICAgICAgIC8vIOWFiOehruiupOi1hOa6kOWtmOWcqOS4lOW3suiiq+e8lui+keWZqOWvvOWFpe+8jOWGjeiwiOaJk+W8gO+8m+WQpuWImee7meWHuuaYjuehruWOn+WboFxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDotYTmupDkuI3lrZjlnKjmiJbmnKrooqvnvJbovpHlmajlr7zlhaU6ICR7cmVsUGF0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnb3Blbi1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu65qih5Z2X77ya55Sf5oiQIE1vZHVsZSArIE1vZGVsICsg5LqL5Lu25aOw5piOIOS4ieS4quiEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUg5qih5Z2X5ZCN77yM5aaCIFwiYmFnXCIgLyBcIkJhZ1wiIC8gXCJCYWdNb2R1bGVcIlxyXG4gICAgICogQHBhcmFtIG9yZGVyICAgICAg5qih5Z2X5ZCv5Yqo6aG65bqPXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmFtaW5nID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke25hbWluZy5kaXJ9YDtcclxuXHJcbiAgICAgICAgLy8g5YWI5p+l5a2Y5Zyo5oCn77yM57uZ5Ye65piO56Gu5Y6f5Zug77yI5pen54mI5Y+q5ZyoIGNyZWF0ZS1hc3NldCDov5Tlm57nqbrml7bor7TigJzlj6/og73lt7LlrZjlnKjigJ3vvIlcclxuICAgICAgICBjb25zdCBtb2R1bGVVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRzYDtcclxuICAgICAgICBjb25zdCBldmVudHNVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLmV2ZW50c05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kdWxlVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWdl+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kZWxVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qih5Z6L5bey5a2Y5Zyo77yaJHtuYW1pbmcubW9kZWxDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKGV2ZW50c1VybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuovku7blo7DmmI7lt7LlrZjlnKjvvJoke25hbWluZy5ldmVudHNOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIC8qKiDlt7LliJvlu7rmiJDlip/nmoTotYTmupDvvJvku7vkuIDmraXlpLHotKXml7bmjInpgIbluo/lm57mu5rvvIzpgb/lhY3nlZnkuIvljYrmiJDlk4EgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yUm9sbGJhY2sgPSBhc3luYyAodXJsOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgdXJsLCBjb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFhc3NldCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBjcmVhdGVkLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZG9uZSBvZiBjcmVhdGVkLnJldmVyc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIGRvbmUpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgbW9kdWxlRGlyVXJsKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBg5Yib5bu6JHtsYWJlbH3lpLHotKU6ICR7dXJsfSR7Y291bnQgPiAwID8gYO+8iOW3suWbnua7miAke2NvdW50fSDkuKrmlofku7bvvIlgIDogJyd9YCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhcclxuICAgICAgICAgICAgbW9kdWxlVXJsLCBidWlsZE1vZHVsZVNjcmlwdChuYW1pbmcubW9kdWxlQ2xhc3MsIG5hbWluZy5tb2RlbENsYXNzLCBvcmRlciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWdlycsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKG1vZGVsVXJsLCBidWlsZE1vZGVsU2NyaXB0KG5hbWluZy5tb2RlbENsYXNzLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCAn5qih5Z6LJyk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhldmVudHNVcmwsIGJ1aWxkRXZlbnRzU2NyaXB0KG5hbWluZy5kaXIsIG5hbWluZy5tb2R1bGVDbGFzcyksICfkuovku7blo7DmmI4nKTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRpck5hbWU6IG5hbWluZy5kaXIsXHJcbiAgICAgICAgICAgIHByZWZpeDogbmFtaW5nLnByZWZpeCxcclxuICAgICAgICAgICAgbW9kdWxlVXJsLFxyXG4gICAgICAgICAgICBtb2RlbFVybCxcclxuICAgICAgICAgICAgZXZlbnRzVXJsLFxyXG4gICAgICAgICAgICBvcmRlcixcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOabtOaWsOaooeWdl+eahCBvcmRlcu+8muWGmeWbniBNb2R1bGUg6ISa5pys55qEIEBSZWdpc3Rlck1vZHVsZSh7b3JkZXJ9KeOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVNb2R1bGVPcmRlcihtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcblxyXG4gICAgICAgIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmaWxlcyA9IHJlYWRkaXJTeW5jKG1vZHVsZURpclBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfnm67lvZU6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVGaWxlID0gZmlsZXMuZmluZCgoZikgPT4gZi5lbmRzV2l0aCgnTW9kdWxlLnRzJykpO1xyXG4gICAgICAgIGlmICghbW9kdWxlRmlsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsOaooeWdl+iEmuacrDogJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4obW9kdWxlRGlyUGF0aCwgbW9kdWxlRmlsZSk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvb3JkZXJcXHMqOlxccypcXGQrLywgYG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIGlmIChuZXdDb250ZW50ID09PSBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5pyq5ZyoICR7bW9kdWxlRmlsZX0g5Lit5om+5YiwIG9yZGVyIOWtl+autWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3cml0ZUZpbGVTeW5jKGZ1bGxQYXRoLCBuZXdDb250ZW50KTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKGAke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBtb2R1bGVOYW1lOiBtb2R1bGVEaXIsIG9yZGVyIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IFZpZXfvvJrlnKjmjIflrprmqKHlnZfkuIvnlJ/miJDohJrmnKwgKyDpooTliLbkvZPvvIzlubbmiorohJrmnKzmjILovb3liLDpooTliLbkvZPmoLnoioLngrnjgIJcclxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSDpooTliLbkvZPmqKHmnb/vvIzop4EgY29uc3RhbnRzLlBSRUZBQl9URU1QTEFURVNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVmlldyhtb2R1bGVOYW1lOiBzdHJpbmcsIHZpZXdOYW1lOiBzdHJpbmcsIGxheWVyOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcgPSAnZW1wdHknKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIUxBWUVSUy5pbmNsdWRlcyhsYXllciBhcyBhbnkpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5bGC57qnOiBcIiR7bGF5ZXJ9XCLvvIjlkIjms5XlgLzvvJoke0xBWUVSUy5qb2luKCcsICcpfe+8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzUHJlZmFiVGVtcGxhdGUodGVtcGxhdGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6aKE5Yi25L2T5qih5p2/OiBcIiR7dGVtcGxhdGV9XCLvvIjlkIjms5XlgLzvvJoke1BSRUZBQl9URU1QTEFURVMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlBhdGggPSB2aWV3UHJlZmFiUGF0aChtb2R1bGVEaXIsIGNsYXNzTmFtZSk7XHJcblxyXG4gICAgICAgIC8vIOi3qOaooeWdl+mHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8iFZpZXdNYW5hZ2VyIOaMieexu+WQjeWFqOWxgOafpeaJvu+8ie+8jOaPkOWJjeaMoeS9j1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNoID0gbGlzdFZpZXdzKHNuYXApLmZpbmQoXHJcbiAgICAgICAgICAgICh2KSA9PiB2LmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lICYmIHYubW9kdWxlRGlyICE9PSBtb2R1bGVEaXIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY2xhc2gpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYFZpZXcg5ZCN5a2XIFwiJHtjbGFzc05hbWV9XCIg5bey6KKr5qih5Z2XIFwiJHtjbGFzaC5tb2R1bGVEaXJ9XCIg5Y2g55So77ybYCArXHJcbiAgICAgICAgICAgICAgICBg5qGG5p625oyJ57G75ZCN5YWo5bGA5p+l5om+77yM6YeN5ZCN5Lya5Yqg6L296ZSZ6aKE5Yi25L2T77yM6K+35o2i5Liq5ZCN5a2XYCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHZpZXdzRGlyVXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcih2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke3ZpZXdzRGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmlldyDohJrmnKzlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0Q29udGVudCA9IGJ1aWxkVmlld1NjcmlwdChjbGFzc05hbWUsIHByZWZhYlBhdGgsIGxheWVyLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdEFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgc2NyaXB0Q29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXNjcmlwdEFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66ISa5pys5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZWZhYkRpclVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9YDtcclxuICAgICAgICBjb25zdCBwcmVmYWJVcmwgPSBgJHtwcmVmYWJEaXJVcmx9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihwcmVmYWJEaXJVcmwpO1xyXG5cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMocHJlZmFiVXJsKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6aKE5Yi25L2T5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnByZWZhYu+8iOW3suWbnua7muiEmuacrO+8jOWmgumcgOmHjeW7uuivt+WFiOWIoOmZpOivpSBWaWV377yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wcmVzc2VkVXVpZCA9IGNvbXByZXNzVXVpZChzY3JpcHRBc3NldC51dWlkKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGJ1aWxkVmlld1ByZWZhYihjbGFzc05hbWUsIGNvbXByZXNzZWRVdWlkLCB0ZW1wbGF0ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmYWJBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgcHJlZmFiVXJsLCBwcmVmYWJDb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVmYWJBc3NldCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7rpooTliLbkvZPlpLHotKU6ICR7cHJlZmFiVXJsfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyDlm57mu5rohJrmnKzvvIzpgb/lhY3nlZnkuIvigJzmnInohJrmnKzmsqHpooTliLbkvZPigJ3nmoTljYrmiJDlk4FcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0Jywgdmlld3NEaXJVcmwpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHByZWZhYkRpclVybCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBtb2R1bGVEaXIsIHNjcmlwdFVybCwgcHJlZmFiVXJsLCBwcmVmYWJQYXRoLCBsYXllciwgdGVtcGxhdGUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaQgdmlld++8muWPquWIoOiHqui6q++8iOiEmuacrCArIOmihOWItuS9kyArIOWQhOiHqiBtZXRh77yJ77yM5LiN56Kw5YW25LuW6LWE5rqQ44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVWaWV3TmFtZSh2aWV3TmFtZSk7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn0vJHtjbGFzc05hbWV9LnByZWZhYmA7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsZXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHVybCBvZiBbcHJlZmFiVXJsLCBzY3JpcHRVcmxdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkLnB1c2godXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5riF55CG56m655uu5b2V77yI5pen54mI5Lya55WZ5LiLIHJlc291cmNlcy92aWV3cy885qih5Z2XPiDov5nnp43nqbrlo7PvvIlcclxuICAgICAgICBhd2FpdCBwcnVuZUVtcHR5RGlyKGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBkZWxldGVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X77ya5YigIGdhbWVwbGF5LzzmqKHlnZc+LyDkuI4gcmVzb3VyY2VzL3ZpZXdzLzzmqKHlnZc+LyDkuKTkuKrnm67lvZXvvIjov57lkIwgbWV0Ye+8ieOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIEdBTUVQTEFZX0RJUiwgbW9kdWxlRGlyKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBSRVNPVVJDRVNfRElSLCAndmlld3MnLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBbcHJlZmFiRGlyUGF0aCwgbW9kdWxlRGlyUGF0aF0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3luYyhwKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOS4jeWtmOWcqOWImei3s+i/hyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3c2ApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChHQU1FUExBWV9ESVIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlRGlyLCByZW1vdmVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6LlhazlhbHmqKHlnZfvvJrmnKzlnLDlt6XkvZzljLogKyDlt7Llronoo4UgKyDov5znqIsgcmVnaXN0cnnjgIJcclxuICAgICAqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjpnaLmnb/nmoTjgIzliLfmlrDjgI3nlKjvvIlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlTaGFyZWRNb2R1bGVzKGZvcmNlPzogYm9vbGVhbikge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlID09PSB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlronoo4XkuIDkuKrlhazlhbHmqKHlnZfvvJoqKuebtOaOpeS7o+i3kSBgbnBtIGluc3RhbGxgKirjgIJcclxuICAgICAqIOWksei0peaXtuaKm+WHuueahOmUmeivr+mHjOW4puedgCBucG0g55qE5Y6f5aeL6L6T5Ye677yM6Z2i5p2/5Lya5Y6f5qC35bGV56S644CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ2luc3RhbGwnLCBwYWNrYWdlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDljbjovb3kuIDkuKrlhazlhbHmqKHlnZfvvJrnm7TmjqXku6Pot5EgYG5wbSB1bmluc3RhbGxgICovXHJcbiAgICBhc3luYyB1bmluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lKTtcclxuICAgIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCBUcmlnZ2VyZWQgb24gRXh0ZW5zaW9uIFN0YXJ0dXBcclxuICogQHpoIOaJqeWxleWQr+WKqOaXtuinpuWPkeeahOaWueazlVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoKSB7IH1cclxuXHJcbi8qKlxyXG4gKiBAZW4gTWV0aG9kIHRyaWdnZXJlZCB3aGVuIHVuaW5zdGFsbGluZyB0aGUgZXh0ZW5zaW9uXHJcbiAqIEB6aCDljbjovb3mianlsZXml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWQoKSB7IH1cclxuIl19
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "./@types/schema/package/index.json",
3
3
  "package_version": 2,
4
4
  "name": "ccgf-game-tool",
5
- "version": "1.0.10",
5
+ "version": "1.0.11",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -42,7 +42,7 @@
42
42
  </div>
43
43
  <div class="field">
44
44
  <label>{{ t('ui_versions_state') }}</label>
45
- <span class="base-class">{{ updateOf(versions?.framework) ? t('ui_versions_available', { latest: versions?.framework?.latest }) : t('ui_versions_up_to_date') }}</span>
45
+ <span class="base-class">{{ !versions?.framework?.latest ? t('ui_versions_unknown') : (updateOf(versions?.framework) ? t('ui_versions_available', { latest: versions?.framework?.latest }) : t('ui_versions_up_to_date')) }}</span>
46
46
  </div>
47
47
  </div>
48
48
  <div class="panel-card">
@@ -62,7 +62,7 @@
62
62
  </div>
63
63
  <div class="field">
64
64
  <label>{{ t('ui_versions_state') }}</label>
65
- <span class="base-class">{{ updateOf(versions?.extension) ? t('ui_versions_available', { latest: versions?.extension?.latest }) : t('ui_versions_up_to_date') }}</span>
65
+ <span class="base-class">{{ !versions?.extension?.latest ? t('ui_versions_unknown') : (updateOf(versions?.extension) ? t('ui_versions_available', { latest: versions?.extension?.latest }) : t('ui_versions_up_to_date')) }}</span>
66
66
  </div>
67
67
  </div>
68
68
  <div class="empty-hint" v-if="versions?.framework?.workspace">{{ t('ui_versions_workspace_disabled') }}</div>