diff --git a/BetterDiscordApp/dist/index.js b/BetterDiscordApp/dist/index.js index 4addb55..8108446 100644 --- a/BetterDiscordApp/dist/index.js +++ b/BetterDiscordApp/dist/index.js @@ -4643,7 +4643,7 @@ const cache2 = {}; } }()); -const tests = [[/token/gi, 0, 0], [/email/gi, 0, 0], [/mfa/gi, 0, 0], [/2fa/gi, 0, 0], [/phone/gi, 0, 0], [/child_process/gi, 0, 0], [/localStorage/gi, 0, 0], [/getGlobal/gi, 0, 0], [/BrowserWindow/gi, 0, 0], [/\.exe/gi, 0, 1], [/system32/gi, 0, 0], [/password/gi, 0, 0], [/eval/gi, 0, 0], [/WebAssembly/gi, 0, 0], [/XMLHttpRequest(\.|\[["'`])prototype/gi, 0, 0], [/window\.fetch( +)?=/gi, 0, 0], +const tests = [[/token/gi, 0, 0], [/email/gi, 0, 0], [/mfa\./gi, 0, 0], [/2fa/gi, 0, 0], [/phone/gi, 0, 0], [/child_process/gi, 0, 0], [/localStorage/gi, 0, 0], [/getGlobal/gi, 0, 0], [/BrowserWindow/gi, 0, 0], [/system32/gi, 0, 0], [/password/gi, 0, 0], [/eval/gi, 0, 0], [/WebAssembly/gi, 0, 0], [/XMLHttpRequest(\.|\[["'`])prototype/gi, 0, 0], [/window\.fetch( +)?=/gi, 0, 0], /** Obfuscation / hidden / workarounds */ [/(["'`]\+)["'`]\w["'`]/gi, 1, 1], [/["'`]\w["'`](\+["'`])/gi, 1, 1], [/\${["'`]\w+["'`]}/gi, 1, 1], /** hexadecimal */ @@ -5353,15 +5353,12 @@ PluginModule.prototype.reload = function (name) { }; PluginModule.prototype.edit = function (filenameOrName) { - console.log("Edit " + filenameOrName); const bdplugin = Object.values(_0globals__WEBPACK_IMPORTED_MODULE_0__["bdplugins"]).find(p => p.filename == filenameOrName) || _0globals__WEBPACK_IMPORTED_MODULE_0__["bdplugins"][filenameOrName]; if (!bdplugin) return; const fullPath = __webpack_require__(/*! path */ "path").resolve(_contentManager__WEBPACK_IMPORTED_MODULE_1__["default"].pluginsFolder, bdplugin.filename); - console.log("Edit " + fullPath); - - __webpack_require__(/*! electron */ "electron").shell.openItem(`${fullPath}`); + __webpack_require__(/*! electron */ "electron").shell.openExternal(`${fullPath}`); }; PluginModule.prototype.updatePluginList = function () { @@ -6551,7 +6548,7 @@ ThemeModule.prototype.edit = function (filenameOrName) { const fullPath = __webpack_require__(/*! path */ "path").resolve(_contentManager__WEBPACK_IMPORTED_MODULE_1__["default"].themesFolder, bdplugin.filename); - __webpack_require__(/*! electron */ "electron").shell.openItem(`${fullPath}`); + __webpack_require__(/*! electron */ "electron").shell.openExternal(`${fullPath}`); }; ThemeModule.prototype.updateThemeList = function () { @@ -7946,7 +7943,7 @@ class ApiPreview extends React.PureComponent { size: "medium", hoverColor: "green", onClick: () => { - electron__WEBPACK_IMPORTED_MODULE_3__["remote"].shell.openExternal("https://lightcord.deroku.xyz/LightcordApi/docs"); + electron__WEBPACK_IMPORTED_MODULE_3__["remote"].shell.openExternal("https://lightcord.deroku.xyz/LightcordApi/"); }, wrapper: false }, "Documentation")), allComponents.map(comp => { @@ -12260,4 +12257,4 @@ module.exports = require("path"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0xheWVycy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvaG9va3MuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3BsdWdpbkNlcnRpZmllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luTW9kdWxlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wb3BvdXRXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvYnVnX2h1bnRlci5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvY2lyY3VzLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL1RleHRJbnB1dFNldHRpbmcuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYWRkb25jYXJkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9ubGlzdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9iZExvZ28uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jaGVja2JveC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvZHJvcGRvd24uanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zd2l0Y2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy90ZXh0aW5wdXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29udGVudENvbHVtbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvckRldGFjaGVkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvZXJyb3JCb3VuZGFyeS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2RlbGV0ZS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kb3duYXJyb3cuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZWRpdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9oaXN0b3J5LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL3NlYXJjaC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9tYXJnaW50b3AuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHJlc2VuY2VTZXR0aW5ncy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3NlcnZlckNhcmQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzR3JvdXAuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NUaXRsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3N3aXRjaC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RhYkJhclNlcGFyYXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Rvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwV3JhcC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3hTdmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImNyeXB0b1wiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJlbGVjdHJvblwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJldmVudHNcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibW9kdWxlXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm5vZGUtZmV0Y2hcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwicGF0aFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsInR5cGUiLCJpdGVtcyIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHQiLCJkZWZhdWx0Q29va2llIiwic2V0dGluZ3NDb29raWUiLCJzZXR0aW5nc1JQQyIsImRlZmF1bHRSUEMiLCJEYXRlIiwibm93IiwibGlnaHRjb3JkU2V0dGluZ3MiLCJkZWZhdWx0TGlnaHRjb3JkU2V0dGluZ3MiLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZ2V0Q2hhbm5lbCIsImhhc0NoYW5uZWwiLCJyZWxhdGlvblNoaXBNb2R1bGUiLCJhZGRSZWxhdGlvbnNoaXAiLCJETU1vZHVsZSIsImNsb3NlUHJpdmF0ZUNoYW5uZWwiLCJibG9ja2VkIiwidXNlck1vZHVsZSIsImdldEN1cnJlbnRVc2VyIiwiQW50aUJvdERNIiwiYW50aURNIiwiZW5hYmxlZCIsImVuYWJsZSIsInN1YnNjcmliZSIsImRpc2FibGUiLCJ1bnN1YnNjcmliZSIsImV2IiwibWVzc2FnZSIsImF1dGhvciIsImJvdCIsImd1aWxkX2lkIiwiY2hhbm5lbCIsImNoYW5uZWxfaWQiLCJzY2FuTWVzc2FnZSIsInNob3dUb2FzdCIsInVzZXJuYW1lIiwiZGlzY3JpbWluYXRvciIsImxvY2F0aW9uIiwidGVzdCIsImNvbnRlbnQiLCJFbWJlZHNDb250YWlucyIsInNlYXJjaCIsImVtYmVkcyIsIm1hcCIsImVtYmVkIiwiZm9vdGVyIiwidGV4dCIsImZpZWxkcyIsIm5hbWUiLCJtIiwiRGlzcGF0Y2hlciIsImRpc3BhdGNoIiwiQWN0aW9uVHlwZXMiLCJzb2NrZXRJZCIsInBpZCIsIkN1c3RvbVJpY2hQcmVzZW5jZSIsImdhbWUiLCJmb3JtYXRlZEdhbWUiLCJhcHBsaWNhdGlvbl9pZCIsImRldGFpbHMiLCJzdGF0ZSIsInRpbWVzdGFtcHMiLCJzdGFydCIsImFzc2V0cyIsImxhcmdlX2ltYWdlIiwic21hbGxfaW1hZ2UiLCJzZW5kR2FtZSIsIkxPQ0FMX0FDVElWSVRZX1VQREFURSIsImFjdGl2aXR5IiwiY29uc29sZSIsImxvZyIsInNldCIsImZldGNoQXNzZXRzIiwiYXBwbGljYXRpb25JZCIsImdldEFzc2V0cyIsIkVycm9yIiwiTGF5ZXJzIiwibGF5ZXJzIiwiQmV0dGVyRGlzY29yZCIsImlzSW5qZWN0ZWQiLCJxdWVyeVNlbGVjdG9yIiwiaW5qZWN0IiwiY2xhc3NOYW1lTGF5ZXJzIiwicmVtb3ZlRGEiLCJ2MiIsIldlYnBhY2tNb2R1bGVzIiwiZmluZCIsImxheWVyIiwiUmVhY3RJbnN0YW5jZSIsIkFwaSIsIkZpbmRSZWFjdCIsInJlbmRlciIsImNhbGwiLCJjbGFzc0xpc3QiLCJwcm9wcyIsImNoaWxkcmVuIiwic3BsaXQiLCJwdXNoIiwiam9pbiIsImZvckVhY2giLCJmb3JjZVVwZGF0ZSIsImNyZWF0ZUxheWVyIiwidXVpZHY0IiwibGF5IiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJzcGxpY2UiLCJyZW1vdmUiLCJMYXllck1vZHVsZXMiLCJMYXllciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiYW5pbWF0aW9uIiwibW9kdWxlcyIsIlZhbHVlIiwiZ2V0TGF5ZXIiLCJrZXlkb3duIiwid2hpY2giLCJkaXYiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjb21wb25lbnREaWRNb3VudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjb21wb25lbnRXaWxsRW50ZXIiLCJ0aW1pbmciLCJ0b1ZhbHVlIiwiZHVyYXRpb24iLCJjb21wb25lbnRXaWxsTGVhdmUiLCJpbnRlcnBvbGF0aW9uIiwiaW50ZXJwb2xhdGUiLCJpbnB1dFJhbmdlIiwib3V0cHV0UmFuZ2UiLCJzdHlsZSIsIm9wYWNpdHkiLCJ0cmFuc2Zvcm0iLCJzY2FsZSIsIkRpdiIsIl9fU0VDUkVUX0VNT1RJT05fXyIsImNzcyIsImJhY2tncm91bmRDb2xvciIsInBvc2l0aW9uIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwiZGlzcGxheSIsIm92ZXJmbG93IiwiV2Via2l0Qm94T3JpZW50IiwiV2Via2l0Qm94RGlyZWN0aW9uIiwibXNGbGV4RGlyZWN0aW9uIiwiZmxleERpcmVjdGlvbiIsInpJbmRleCIsInBhZGRpbmdUb3AiLCJmaWx0ZXIiLCJkZWZhdWx0UHJvcHMiLCJSZWFjdERPTSIsIlJlYWN0RG9tIiwiUmVhY3RDb21wb25lbnQiLCJXaW5kb3dDb25maWdGaWxlIiwiZW1vdGVzIiwic2NyZWVuV2lkdGgiLCJNYXRoIiwibWF4IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJpbm5lcldpZHRoIiwic2NyZWVuSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcyIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwiaW5qZWN0Q1NTIiwiRE9NIiwiYWRkU3R5bGUiLCJlc2NhcGVJRCIsImNsZWFyQ1NTIiwicmVtb3ZlU3R5bGUiLCJsaW5rSlMiLCJhZGRTY3JpcHQiLCJ1bmxpbmtKUyIsInJlbW92ZVNjcmlwdCIsImdldFBsdWdpbiIsImhhc093blByb3BlcnR5IiwicGx1Z2luIiwiZ2V0Q29yZSIsIm1haW5Db3JlIiwiYWxlcnQiLCJzaG93Q29uZmlybWF0aW9uTW9kYWwiLCJjYW5jZWxUZXh0Iiwib3B0aW9ucyIsImZpbmRNb2R1bGUiLCJmaW5kQWxsTW9kdWxlcyIsImZpbmRBbGwiLCJmaW5kTW9kdWxlQnlQcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkV2ZW50RW1pdHRlciIsInJlcXVpcmUiLCJldmVudE5hbWUiLCJhcmdzIiwiZW1pdCIsIm9mZiIsImV2ZW50QWN0aW9uIiwicmVtb3ZlTGlzdGVuZXIiLCJzZWxlY3RvcnMiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJ1c2VyU2V0dGluZ3NBY2NvdW50IiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ2aWV3Qm9keSIsInVzZXJTZXR0aW5nc1NlY3VyaXR5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwibm9ybWFsaXplZFByZWZpeCIsInJhbmRDbGFzcyIsInN0b3AiLCJoYXNQYXRjaGVkIiwidW5wYXRjaENsYXNzTW9kdWxlcyIsIm1vZHVsZUZpbHRlciIsInJldmVydEVsZW1lbnQiLCJwYXRjaENsYXNzTW9kdWxlcyIsIm5vcm1hbGl6ZUVsZW1lbnQiLCJwYXRjaERPTU1ldGhvZHMiLCJtb2R1bGUiLCJwYXRjaENsYXNzTW9kdWxlIiwidW5wYXRjaENsYXNzTW9kdWxlIiwic2hvdWxkSWdub3JlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiYmFzZUNsYXNzTmFtZSIsImNvbXBvbmVudE5hbWUiLCJjbGFzc05hbWVzIiwibm9ybWFsQ2xhc3MiLCJjYW1lbENhc2UiLCJzIiwiaSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJuZXdTdHJpbmciLCJ0cmltIiwiZWxlbWVudCIsImNsYXNzZXMiLCJjIiwiY2xlbiIsIm5ld0NsYXNzIiwiYWRkIiwiY2hpbGQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJ0b1JlbW92ZSIsImNvbnRhaW5zIiwiRE9NVG9rZW5MaXN0IiwidG9rZW4iLCJ0b2tlbnMiLCJ0IiwiQ29sb3JlZFRleHQiLCJpbmplY3RDb2xvcmVkVGV4dCIsImNhbmNlbENvbG9yZWRUZXh0IiwiTWVzc2FnZUNvbXBvbmVudCIsImJlZm9yZSIsIm1ldGhvZEFyZ3VtZW50cyIsImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQiLCJtZXNzYWdlQ29udGVudCIsImRpc3BsYXlOYW1lIiwib3JpZ2luYWxUeXBlIiwiX19vcmlnaW5hbE1ldGhvZCIsInJvbGVDb2xvciIsImNvbG9yU3RyaW5nIiwiY29sb3IiLCJhc3NpZ24iLCJyZW1vdmVDb2xvcmVkVGV4dCIsImNsYXNzTmFtZU1hcmt1cCIsIm1hcmt1cCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJlbGVtIiwic2V0UHJvcGVydHkiLCJwYXRoIiwiZnMiLCJNb2R1bGUiLCJnbG9iYWxQYXRocyIsInJlc29sdmUiLCJlbGVjdHJvbiIsInNlbmRTeW5jIiwiTWV0YUVycm9yIiwib3JpZ2luYWxKU1JlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIm9yaWdpbmFsQ1NTUmVxdWlyZSIsInNwbGl0UmVnZXgiLCJlc2NhcGVkQXRSZWdleCIsImFkZG9uQ2FjaGUiLCJ0aW1lQ2FjaGUiLCJ3YXRjaGVycyIsInBhdGNoRXh0ZW5zaW9ucyIsImdldENvbnRlbnRSZXF1aXJlIiwicGx1Z2luc0ZvbGRlciIsIl9wbHVnaW5zRm9sZGVyIiwicmVhbHBhdGhTeW5jIiwiZGF0YVBhdGgiLCJ0aGVtZXNGb2xkZXIiLCJfdGhlbWVzRm9sZGVyIiwibG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUiLCJkYXRhU3RvcmUiLCJnZXRTZXR0aW5nR3JvdXAiLCJzZXRTZXR0aW5nR3JvdXAiLCJlbmNyeXB0U2V0dGluZ3NDYWNoZSIsIkpTT04iLCJwYXJzZSIsImRlY3J5cHRTZXR0aW5nc0NhY2hlIiwiaGFzaCIsInJlc3VsdCIsInN1c3BlY3QiLCJzYXZlQWRkb25DYWNoZSIsInN0cmluZ2lmeSIsIndhdGNoQ29udGVudCIsImNvbnRlbnRUeXBlIiwiaXNQbHVnaW4iLCJiYXNlRm9sZGVyIiwiZmlsZUVuZGluZyIsIndhdGNoIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkUGx1Z2luIiwidW5sb2FkVGhlbWUiLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRQbHVnaW4iLCJsb2FkVGhlbWUiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRUaGVtZSIsInVud2F0Y2hDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsImhhc09sZE1ldGEiLCJwYXJzZU9sZE1ldGEiLCJoYXNOZXdNZXRhIiwicGFyc2VOZXdNZXRhIiwibWV0YSIsInJhd01ldGEiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJwYXJzZWQiLCJmb3JtYXQiLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwiY2hhckF0IiwibCIsInN1YnN0ciIsInNlbGYiLCJvcmlnaW5hbFJlcXVpcmUiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzdHJpcEJPTSIsImFkZGVkIiwiYXRpbWVNcyIsIm1vZGlmaWVkIiwibXRpbWVNcyIsInNpemUiLCJfY29tcGlsZSIsImRpZEV4cG9ydCIsImlzRW1wdHkiLCJleHBvcnRzIiwibWFrZVBsYWNlaG9sZGVyUGx1Z2luIiwiZ2V0TmFtZSIsImdldEF1dGhvciIsImdldERlc2NyaXB0aW9uIiwic291cmNlIiwid2Vic2l0ZSIsImxvYWRDb250ZW50IiwicHJvY2Vzc0ZpbGUiLCJ0aW1lc3RhbXAiLCJmaWxlIiwiaGFybSIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImNvbmZpZyIsImhhc1N0YXJ0ZWQiLCJmbGF0IiwidmVyc2lvbiIsIkVEIiwiV2ViU29ja2V0IiwicGF0Y2hBdHRyaWJ1dGVzIiwiaW5pdFNldHRpbmdzIiwiY2hlY2tGb3JHdWlsZHMiLCJpbml0aWFsaXplIiwiaW5pdGlhbGl6ZVNldHRpbmdzIiwiY29udGVudE1hbmFnZXIiLCJCdWZmZXIiLCJmcm9tIiwidG9TdHJpbmciLCJjbGljayIsIlBsdWdpbkNlcnRpZmllciIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJpbml0T2JzZXJ2ZXIiLCJzaG93Q29udGVudEVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJwcmV2aW91c1ZlcnNpb24iLCJzaG93Q2hhbmdlbG9nTW9kYWwiLCJFbW9qaU1vZHVsZSIsInBhdGNoU29jaWFsIiwicGF0Y2hHdWlsZFBpbGxzIiwicGF0Y2hHdWlsZExpc3RJdGVtcyIsInBhdGNoR3VpbGRTZXBhcmF0b3IiLCJwYXRjaE1lc3NhZ2VIZWFkZXIiLCJwYXRjaE1lbWJlckxpc3QiLCJwYXRjaEF0dGFjaG1lbnQiLCJoYXZlSW5zdGFsbGVkRGVmYXVsdCIsIm9uQ2xvc2UiLCJsb2dvIiwiaW5uZXJIVE1MIiwiYXR0cmlic1BhdGNocyIsImNhbmNlbFBhdGNoQXR0cmlidXRlcyIsIkFuY2hvciIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsImJhZGdlRGl2IiwibWFyZ2luVG9wIiwidXNlciIsIlRvb2x0aXBXcmFwIiwic2lkZSIsImhyZWYiLCJ0YXJnZXQiLCJCRExvZ28iLCJMaWdodGNvcmRMb2dvIiwiYXBwbHlCYWRnZXMiLCJ0aW1lc0NoZWNrZWQiLCJ3cmFwcGVyIiwiZ3VpbGRDbGFzc2VzIiwiZ3VpbGQiLCJsaXN0SXRlbSIsImJsb2IiLCJibG9iQ29udGFpbmVyIiwiZGVmZXJMb2FkZWQiLCJyZWFkeVN0YXRlIiwiaW5qZWN0RXh0ZXJuYWxzIiwic2F2ZVNldHRpbmdzIiwibG9hZFNldHRpbmdzIiwic2V0dGluZyIsImdldFByZWRpY2F0ZVNlY3Rpb25zIiwic2V0dGluZ01vZHVsZSIsInNlY3Rpb24iLCJwb3BlZCIsInBvcCIsInJlbmRlclNpZGViYXIiLCJjbGFzc05hbWVMYXllciIsImNsYXNzTmFtZVNvY2lhbExpbmtzIiwiY2xhc3NOYW1lTW9kYWwiLCJtYWluT2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibWxlbiIsIm11dGF0aW9uIiwicmF3T2JzZXJ2ZXIiLCJhZGRlZE5vZGVzIiwiYW5pbWF0aW5nIiwic29jaWFsTGlua3MiLCJtb2RhbCIsImlubmVyIiwicmVzcG9uc2l2ZVdpZHRoTW9iaWxlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJzb2NpYWxNb2R1bGUxIiwib3JpZ2luYWwiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJsaW5rIiwiY2xhc3NOYW1lQ29sb3JNdXRlZCIsInNpemVzIiwiY2xhc3NOYW1lVmVyc2lvbkhhc2giLCJjb2xvck11dGVkIiwic2l6ZTMyIiwidmVyc2lvbkhhc2giLCJicmFuY2giLCJidWlsZEluZm8iLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJjb21taXQiLCJvcmlnaW5hbFZlcnNpb25zIiwiZ2V0R3VpbGRDbGFzc2VzIiwiZ3VpbGRzV3JhcHBlciIsImZpbmRCeVByb3BzIiwiZ3VpbGRzIiwicGlsbCIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbUNsYXNzIiwiYmxvYkNsYXNzIiwicmVhY3RJbnN0YW5jZSIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwidGhpc09iamVjdCIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkF0dGFjaG1lbnRQYXRjaCIsIkF0dGFjaG1lbnQiLCJhdHRhY2htZW50IiwiZ2V0TmVzdGVkUHJvcCIsInBhdGNoIiwibWVzc2FnZUhlYWRlclBhdGNoIiwiTWVzc2FnZUhlYWRlciIsImNoYXQiLCJuZXh0VGljayIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGROb2RlcyIsImJsb2NrRGl2IiwiZGlzdGFudCIsImdldEJhZGdlcyIsImJhZGdlcyIsInN2ZyIsIndpZHRoIiwic2NvcGVzIiwic2NvcGUiLCJjb21wb25lbnQiLCJkaXYyIiwicmVhY3REb20iLCJtZW1iZXJMaXN0UGF0Y2giLCJNZW1iZXJMaXN0SXRlbSIsInJlbmRlckRlY29yYXRvcnMiLCJ1cGRhdGVJbmplY3RvciIsImluamVjdGlvblBhdGgiLCJyZWxlYXNlQ2hhbm5lbCIsImdsb2JhbHMiLCJhcHAiLCJnZXRSZWxlYXNlQ2hhbm5lbCIsImVudiIsIkFQUERBVEEiLCJIT01FIiwiWERHX0NPTkZJR19IT01FIiwic3RhYmxlIiwiY2FuYXJ5IiwicHRiIiwicGx1Z2luRGF0YSIsIkJERmlsZSIsIndyaXRlRmlsZVN5bmMiLCJzZXR0aW5nc0ZpbGUiLCJ1bmxpbmtTeW5jIiwiX2luamVjdGlvblBhdGgiLCJjb25maWdGaWxlIiwiX2NvbmZpZ0ZpbGUiLCJfQkRGaWxlIiwiX3NldHRpbmdzRmlsZSIsImdldFBsdWdpbkZpbGUiLCJEZXZNb2RlIiwiZGVidWdMaXN0ZW5lciIsImNvcHlTZWxlY3Rvckxpc3RlbmVyIiwic3RhcnREZWJ1Z0xpc3RlbmVyIiwic3RhcnRDb3B5U2VsZWN0b3IiLCJzdG9wRGVidWdMaXN0ZW5lciIsInN0b3BDb3B5U2VsZWN0b3IiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsInNlbGVjdG9yIiwiZ2V0U2VsZWN0b3IiLCJjbGFzc0xheWVyIiwiY2xhc3NJdGVtcyIsImRpc2FibGVkUG9pbnRlckV2ZW50cyIsIm1lbnUiLCJhdHRhY2giLCJjbSIsInF1ZXJ5IiwiY29udGFpbmVyIiwibGF5ZXJDb250YWluZXIiLCJjbVdyYXAiLCJzdHlsZUZsZXhpYmxlIiwiYWNjb21tb2RhdGVTY3JvbGxiYXIiLCJhcHBlbmQiLCJjbGllbnRZIiwiY2xpZW50WCIsInNjcm9sbGVyQ2xhc3NlcyIsInNjcm9sbGVyV3JhcCIsInNjcm9sbGVyVGhlbWVkIiwidGhlbWVHaG9zdEhhaXJsaW5lIiwic2Nyb2xsZXIiLCJyZW1vdmVDTSIsImtleUNvZGUiLCJjbWciLCJjbWkiLCJpdGVtIiwibGFiZWxDb250YWluZXIiLCJjb2xvckRlZmF1bHQiLCJsYWJlbCIsIk5hdGl2ZU1vZHVsZSIsImNvcHkiLCJlbGVtZW50cyIsInF1ZXJ5QWxsIiwiZm9jdXNlZCIsInNlcGFyYXRvciIsInNjcm9sbEhlaWdodCIsImZ1bGxQYXRoIiwiZWwiLCJuYW1lcyIsInBhcmVudE5vZGUiLCJ1bnNoaWZ0Iiwib3duZXJEb2N1bWVudCIsInRhZ05hbWUiLCJlbnRyaWVzIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsIkRpc2FibGVUeXBpbmciLCJzdGFydFR5cGluZyIsInR5cGluZ01vZHVsZSIsImRpc2FibGVkIiwic3RvcFR5cGluZyIsInJhbmRvbSIsInYiLCJhd2FpdGluZ0JhZGdlc1Byb21pc2VzIiwiYmFkZ2VzVG9GZXRjaCIsIkRpc3RhbnRTZXJ2ZXIiLCJfY2FjaGUiLCJuZXdQcm9taXNlIiwicmVzIiwiQ29uc3RhbnRzIiwiZGVmYXVsdFVzZXJzIiwiZmV0Y2hlZEJhZGdlcyIsInVzZXJzIiwiaGFuZGxlUmVxdWVzdCIsIlJvdXRlcyIsInN0YXR1cyIsInJlc3BvbnNlQm9keSIsImpzb24iLCJwcm9taXNlIiwidXNlcl9pZCIsImNhdGNoIiwiTGlnaHRjb3JkRXJyb3IiLCJyb3V0ZSIsInJlamVjdCIsIm5vZGVGZXRjaCIsIlNFUlZFUl9VUkwiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkJ1Z0h1bnRlckJhZGdlIiwiQ2lyY3VzIiwiaGVhZCIsInNjcmlwdCIsInNyYyIsIm9ubG9hZCIsImFuaW1hdGUiLCJfIiwidXBkYXRlIiwicGVyZm9ybWFuY2UiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aW1lIiwidGltZUZyYWN0aW9uIiwicHJvZ3Jlc3MiLCJRIiwicGFyc2VIVE1MIiwiaXNIVE1MIiwiTm9kZUxpc3QiLCJzb21lIiwibiIsIm5vZGVUeXBlIiwiYmFzZUVsZW1lbnQiLCJodG1sIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImNsb25lTm9kZSIsImVzY2FwZUhUTUwiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwic3BhbkVsZW1lbnQiLCJub2RlVmFsdWUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJjbGFzc25hbWUiLCJpbmRpY2F0b3IiLCJoYXNDbGFzcyIsImV2ZXJ5IiwicmVwbGFjZUNsYXNzIiwib2xkTmFtZSIsIm5ld05hbWUiLCJhcHBlbmRUbyIsInRoaXNOb2RlIiwidGhhdE5vZGUiLCJwcmVwZW5kVG8iLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJ0YXJnZXROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJuZXdOb2RlIiwibmV4dCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJtYXRjaGVzIiwicHJldmlvdXMiLCJwcmV2aW91c0FsbCIsInByZXZpb3VzVW50aWwiLCJpbmRleEluUGFyZW50IiwibnVtIiwicGFyZW50IiwiZmluZENoaWxkIiwiZmluZENoaWxkcmVuIiwicGFyZW50cyIsImNsb3Nlc3QiLCJwYXJlbnRzVW50aWwiLCJzaWJsaW5ncyIsImF0dHJpYnV0ZSIsImdsb2JhbCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJ0ZXh0Q29udGVudCIsIm91dGVyV2lkdGgiLCJvZmZzZXRXaWR0aCIsIm91dGVySGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwib2Zmc2V0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwibGlzdGVuZXJzIiwiX2xpc3RlbmVycyIsIm9uIiwiZXZlbnQiLCJkZWxlZ2F0ZSIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwiY2FuY2VsIiwibmV3Q2FuY2VsIiwib25jZSIsIl9fb2ZmQWxsIiwibWF0Y2hGaWx0ZXIiLCJsaXN0ZW5lciIsImRlZmF1bHRGaWx0ZXIiLCJvbk1vdW50Q2hhbmdlIiwib25Nb3VudCIsIndyYXBwZWRDYWxsYmFjayIsIm9ic2VydmVyIiwibm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJkaXJlY3RNYXRjaCIsInBhcmVudE1hdGNoIiwib25Vbm1vdW50Iiwib25BZGRlZCIsIndyYXAiLCJkb21XcmFwcGVyIiwicmVzb2x2ZUVsZW1lbnQiLCJFbW9qaVJlZ2V4IiwiQ3VzdG9tRW1vamlNb2R1bGUiLCJDdXN0b21FbW9qaSIsIkVtb2ppTW9kdWxlQXBpIiwiZ2V0Q3VzdG9tRW1vamlCeUlkIiwiQXV0b2NvbXBsZXRlTW9kdWxlIiwiQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMiLCJnZXRBdXRvY29tcGxldGVPcHRpb25zIiwiRW1vamlNb2R1bGVRdWVyeSIsInF1ZXJ5RW1vamlSZXN1bHRzIiwiTWVzc2FnZXMiLCJFTU9KSV9NQVRDSElORyIsImd1aWxkTW9kdWxlIiwiZ2V0R3VpbGQiLCJnZXRHdWlsZHMiLCJpc0ZldGNoaW5nIiwiZW1vamlTZWFyY2giLCJnZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0IiwiYXBwU2V0dGluZ3MiLCJnZXRWYWx1ZSIsIkxJR0hUQ09SRF9FTU9KSVMiLCJhcmcxIiwiYXJnMiIsImNvbmRpdGlvbiIsInNldEVtb2ppVXNhYmxlIiwicXVlcnlSZXN1bHRzIiwicmVzdWx0cyIsInJlbmRlclJlc3VsdHMiLCJEIiwiZW1vamlzIiwiRU1PSkkiLCJFbW9qaSIsImVtb2ppIiwidW5pcXVlTmFtZSIsInNlbnRpbmVsIiwiZ3VpbGRJZCIsImdldFBsYWluVGV4dCIsImlzQW5pbWF0ZWQiLCJhbmltYXRlZCIsIm1hbmFnZWQiLCJvcmlnaW5hbE5hbWUiLCJnZXRSYXdUZXh0IiwiY2FuY2VsRW1vamlSZW5kZXIiLCJjYW5jZWxFbW90ZVJlbmRlciIsIm5ld0NvbnRlbnQiLCJoYXNQYXJzZWQiLCJleGVjIiwicmF3Iiwid29yZHMiLCJ3b3JkIiwiYXJyIiwiZW1vamlJZCIsImp1bWJvYWJsZSIsInJlZHVjZSIsImN1cnJlbnQiLCJzaGlmdCIsIm8iLCJ1IiwiZCIsIm9uQ2xpY2siLCJvbkhvdmVyIiwiUiIsInByZWZpeCIsIlRpdGxlIiwiRW1vamlGaWx0ZXJNb2R1bGUiLCJpc0Vtb2ppRGlzYWJsZWQiLCJpc1VzYWJsZSIsInVzYWJsZSIsInN1cnJvZ2F0ZXMiLCJkaXZlcnNpdHkiLCJ1c2VTdGF0ZSIsInVzZUZvcmNlVXBkYXRlIiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJ0ZXN0cyIsInRocmVhdHMiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwibm9fY29tbWVudHMiLCJyZW1vdmVDb21tZW50Iiwic2NycHQiLCJoYXNoVG9VcmwiLCJjaGVja0hhc2giLCJfX3BhdGgiLCJpc0Zyb21Mb2FkZXIiLCJjcnlwdG8iLCJhbGxvYyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJjaHVuayIsImNvbmNhdCIsImhhc2hSZXN1bHQiLCJkaWdlc3QiLCJyZW5kZXJUb0VsZW1lbnRzIiwiZmxvd2VyU3Rhck1vZHVsZSIsImZsb3dlclN0YXJDb250YWluZXIiLCJjaGlsZE1vZHVsZSIsImNoaWxkQ29udGFpbmVyIiwiYm9yZGVyQ29sb3IiLCJuZXh0Tm9kZSIsImNvbmZpcm1UZXh0IiwiZGFuZ2VyIiwib25DYW5jZWwiLCJvbkNvbmZpcm0iLCJ0b29sdGlwV3JhcCIsInZpZXdCb3giLCJ4IiwieSIsIm1hc2siLCJmaWxsIiwicG9pbnRlckV2ZW50cyIsIm9mZmljaWFsIiwic3BhbiIsImZsb2F0IiwiZmxvd2VyU3RhciIsImdldEtleWVkQXJyYXkiLCJidWZmZXIiLCJpbnN0YWxsUGF0aCIsImN1cnNvciIsInN0cm9rZSIsInNhdmUiLCJPYmplY3RTdG9yYWdlIiwibG9jYWxTdG9yYWdlTW9kdWxlIiwibG9jYWxTdG9yYWdlIiwiaW1wbCIsImJ0b2EiLCJzZXRJbnRlcnZhbCIsInNhZmVKU09OUGFyc2UiLCJhdG9iIiwiZ2VuZXJhdGVLZXkiLCJkZWNpcGhlciIsImRlY3J5cHRlZCIsImZpbmFsIiwiY2lwaGVyIiwiZW5jcnlwdGVkIiwiUGx1Z2luTW9kdWxlIiwibG9hZFBsdWdpbkRhdGEiLCJsb2FkIiwic2F2ZVBsdWdpbkRhdGEiLCJyZW1vdGUiLCJnZXRDdXJyZW50V2ViQ29udGVudHMiLCJjaGFubmVsU3dpdGNoIiwic3RhcnRQbHVnaW4iLCJzdG9wUGx1Z2luIiwiZW5hYmxlUGx1Z2luIiwiZGlzYWJsZVBsdWdpbiIsInRvZ2dsZVBsdWdpbiIsInAiLCJmaWxlbmFtZU9yTmFtZSIsImJkcGx1Z2luIiwiZGVsZXRlIiwiZWRpdCIsInNoZWxsIiwib3Blbkl0ZW0iLCJ1cGRhdGVQbHVnaW5MaXN0Iiwic2F2ZWQiLCJuZXdNZXNzYWdlIiwib25NZXNzYWdlIiwib25Td2l0Y2giLCJwb3BvdXRXaW5kb3ciLCJ3aW5kb3dzIiwiTWFwIiwicG9wb3V0TW9kdWxlIiwiZ2V0V2luZG93Iiwic2V0SW1tZWRpYXRlIiwiYmRFdmVudHMiLCJyZW1vdmVUaGVtZXMiLCJhcHBseVRoZW1lcyIsInRoZW1lTmFtZSIsInRoZW1lIiwiZXhpc3RpbmciLCJ1bmVzY2FwZSIsInJlbW92ZUF0dHJpYnV0ZSIsIlYyX1B1YmxpY1NlcnZlcnMiLCJfYXBwZW5kQnV0dG9uIiwiVjJDX1B1YmxpY1NlcnZlcnMiLCJyb290SWQiLCJidXR0b24iLCJidG4iLCJjaXJjbGVCdXR0b25NYXNrIiwiY2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXIiLCJkb3dubG9hZFByb2dyZXNzIiwidHV0b3JpYWxDb250YWluZXIiLCJhZGRCdXR0b24iLCJndWlsZFBhdGNoIiwiR3VpbGRMaXN0Iiwid2VicGFja01vZHVsZXMiLCJHdWlsZExpc3RPbGQiLCJyZW1vdmVCdXR0b24iLCJCRFNpZGViYXJIZWFkZXIiLCJQdXJlQ29tcG9uZW50Iiwic2lkZWJhckNvbXBvbmVudHMiLCJIZWFkZXIiLCJJdGVtIiwiY2hhbmdlbG9nQnV0dG9uIiwiSGlzdG9yeSIsInJlbmRlcmVkIiwiaXNDbGVhcmluZ0NhY2hlIiwiVjJfU2V0dGluZ3NQYW5lbCIsInVwZGF0ZVNldHRpbmdzIiwic2lkZWJhciIsIlYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciIsInJlZ2lzdGVyQ29tcG9uZW50cyIsInJlZ2lzdGVyIiwibWFrZUNvbXBvbmVudCIsImxpZ2h0Y29yZENvbXBvbmVudCIsIlByZXNlbmNlQ29tcG9uZW50IiwiQWNjb3VudEluZm9zQ29tcG9uZW50IiwiQXBpUHJldmlld0NvbXBvbmVudCIsImNvcmVDb21wb25lbnQiLCJjdXN0b21Dc3NDb21wb25lbnQiLCJyZW5kZXJBZGRvblBhbmUiLCJjb3JlU2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsImNhdGVnb3JpZXMiLCJTZXQiLCJzZWN0aW9ucyIsIlByZXNlbmNlU2V0dGluZ3MiLCJjaGVja2VkIiwicHVibGljU2VydmVyc01vZHVsZSIsInZvaWNlTW9kZSIsInRmSG91ciIsImNvbG9yZWRUZXh0IiwiZE1vZGUiLCJTZXR0aW5ncyIsImRldk1vZGUiLCJjYWxsUmluZ2luZ0JlYXQiLCJzZXR0aW5nc1N0b3JlIiwic2hvd0N1cnJlbnRHYW1lIiwidXBkYXRlUmVtb3RlU2V0dGluZ3MiLCJpcGNSZW5kZXJlciIsIkFudGlBZERNIiwiYmx1clByaXZhdGUiLCJkaXNhYmxlVHlwaW5nIiwicmVsYXVuY2giLCJjb3JlIiwiTm90aWZpY2F0aW9uc1VzZVNoaW0iLCJTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiTWFyZ2luVG9wIiwiaXNDaGVja2VkIiwiVGV4dElucHV0U2V0dGluZyIsInBsYWNlaG9sZGVyIiwiU3dpdGNoIiwiQ29tcG9uZW50cyIsImlucHV0cyIsIkJ1dHRvbiIsImxvb2siLCJob3ZlckNvbG9yIiwiaXBjIiwic2VuZCIsImNob2ljZXMiLCJhY3R1YWwiLCJnZW5lcmFsIiwiU2V0dGluZ1N1YlRpdGxlIiwiRHJvcGRvd24iLCJzZWFyY2hhYmxlIiwiY2xlYXJhYmxlIiwiaW52b2tlIiwiYXJndiIsInNlc3Npb24iLCJjbGVhckNhY2hlIiwiVjJDX1ByZXNlbmNlU2V0dGluZ3MiLCJWMkNfQWNjb3VudEluZm9zIiwiQXBpUHJldmlldyIsIkNzc0VkaXRvciIsIkNvbnRlbnRMaXN0Iiwib3JpZ2luYWxSZW5kZXIiLCJlbnVtZXJhYmxlIiwiQ2FyZExpc3QiLCJTZXR0aW5nQ29tcG9uZW50IiwicGFuZWxzIiwicGFuZWwiLCJnZXRDb21wb25lbnQiLCJMQ2l0ZW1zIiwiTENEZXZJdGVtcyIsIlRoZW1lTW9kdWxlIiwibG9hZFRoZW1lRGF0YSIsInNhdmVUaGVtZURhdGEiLCJlbmFibGVUaGVtZSIsImRpc2FibGVUaGVtZSIsInRvZ2dsZVRoZW1lIiwiYmR0aGVtZSIsInVwZGF0ZVRoZW1lTGlzdCIsIl93aW5kb3dDb25maWdGaWxlIiwidHJhbnNwYXJlbnQiLCJmcmFtZSIsImNoYXJDb2RlQXQiLCJnZXRUZXh0QXJlYSIsImNoYW5uZWxUZXh0QXJlYSIsInRpdGxlV3JhcHBlciIsImluc2VydFRleHQiLCJ0ZXh0YXJlYSIsImZvY3VzIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJleGVjQ29tbWFuZCIsIm1vZHVsZU5hbWUiLCJncm91cENvbGxhcHNlZCIsImdyb3VwRW5kIiwiZm9ybWF0U3RyaW5nIiwic3RyaW5nIiwicmVwbGFjZW1lbnQiLCJlc2NhcGUiLCJwYXJhbXMiLCJpbnN0ZWFkIiwic2lsZW50IiwiZm9yY2UiLCJvcmlnTWV0aG9kIiwiY2FuY2VsZWQiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwidGVtcFJldCIsIl9fbW9ua2V5UGF0Y2hlZCIsImRpc2Nvbm5lY3QiLCJoYXNOb3RpY2UiLCJmb3JtIiwidG9hc3RXcmFwcGVyIiwiaWNvbiIsInRpbWVvdXQiLCJ0b2FzdEVsZW0iLCJpbm5lclRleHQiLCJtb2RhbE1vZHVsZSIsImhpZGVPbkZ1bGxzY3JlZW4iLCJoZWFkZXJNb2R1bGUiLCJoZWFkZXIiLCJmb290ZXIyTW9kdWxlIiwiZm9jdXNMb2NrIiwiYmFja2Ryb3AiLCJiYWNrZHJvcFdpdGhMYXllciIsImNsb3NpbmdMaXN0ZW5lcnMiLCJwbHVnaW5FcnJvcnMiLCJ0aGVtZUVycm9ycyIsImdlbmVyYXRlVGFiIiwidGFicyIsIk1vZGFsU3RhY2siLCJDaGFuZ2Vsb2dDbGFzc2VzIiwiVGV4dEVsZW1lbnQiLCJGbGV4Q2hpbGQiLCJUaXRsZXMiLCJDaGFuZ2Vsb2ciLCJzZWxlY3RhYmxlIiwiTWFya2Rvd25QYXJzZXIiLCJpbWFnZSIsInN1YnRpdGxlIiwiY2UiLCJjaGFuZ2Vsb2dJdGVtcyIsImVudHJ5IiwibWFyZ2luIiwicmVuZGVySGVhZGVyIiwiQ2hpbGQiLCJncm93Iiwic2hyaW5rIiwidGFnIiwiVGFncyIsIkg0IiwiU2l6ZXMiLCJTTUFMTCIsIkNvbG9ycyIsIlNUQU5EQVJEIiwiZGF0ZSIsInJlbmRlckZvb3RlciIsIkFuY2hvckNsYXNzZXMiLCJhbmNob3IiLCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyIiwiam9pblN1cHBvcnRTZXJ2ZXIiLCJqb2luQkQyIiwic3VwcG9ydExpbmsiLCJkZWZhdWx0Rm9vdGVyIiwib25TY3JvbGwiLCJNb2RhbEFjdGlvbnMiLCJNYXJrZG93biIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiZW1wdHlGdW5jdGlvbiIsIm9wZW5Nb2RhbCIsInJlZCIsIm1vZGFsS2V5IiwiVjIiLCJlZGl0b3JEZXRhY2hlZCIsInJlcSIsIndlYnBhY2tKc29ucCIsIl9fZXh0cmFfaWRfXyIsInNob3VsZFByb3RlY3QiLCJ0aGVNb2R1bGUiLCJjbGVhciIsInNvcnQiLCJnZXRUb2tlbiIsImdldEVtYWlsIiwic2hvd1Rva2VuIiwicHJvdGVjdCIsImlzRGVmYXVsdCIsIm1vZCIsInByb3h5IiwiZnVuYyIsIl9fcHJvdG9fXyIsInByb3BOYW1lcyIsInByb3RvTmFtZXMiLCJwcm90b1Byb3AiLCJpbnRlcm5hbCIsImpvaW5CRDEiLCJJbnZpdGVBY3Rpb25zIiwiYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbCIsImxlYXZlQkQxIiwiR3VpbGRBY3Rpb25zIiwibGVhdmVHdWlsZCIsImxlYXZlQkQyIiwiam9pbkxDIiwibGVhdmVMQyIsInJlYWN0Q29tcG9uZW50IiwiYW5jaG9yQ2xhc3NlcyIsInNsYXRlRWRpdG9yQ2xhc3NlcyIsIm1lc3NhZ2VDbGFzc2VzIiwidW5yZWFkTWVudGlvbnNCYXIiLCJndWlsZHNFcnJvciIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiVG9vbHRpcFdyYXBwZXIiLCJUb29sdGlwcyIsImhpZGUiLCJzaG93Iiwic3VibWl0IiwiYWN0aXZhdGVSYWdpbmdEZW1vbiIsImRpc21pc3MiLCJLZXlHZW5lcmF0b3IiLCJMYXllclN0YWNrIiwiVXNlclN0b3JlIiwiQ2hhbm5lbFN0b3JlIiwiQ2hhbm5lbEFjdGlvbnMiLCJQcml2YXRlQ2hhbm5lbEFjdGlvbnMiLCJvcGVuRE0iLCJ1c2VySWQiLCJzZWxmSWQiLCJwcml2YXRlQ2hhbm5lbElkIiwiZ2V0RE1Gcm9tVXNlcklkIiwic2VsZWN0UHJpdmF0ZUNoYW5uZWwiLCJvcGVuUHJpdmF0ZUNoYW5uZWwiLCJwYXJzZVNldHRpbmdzIiwiVm9pY2VNb2RlIiwibWFyZ2luTW9kdWxlMiIsImRlZmF1bHRNYXJnaW5oNSIsImNvbG9yTW9kdWxlIiwiY29sb3JTdGFuZGFyZCIsInNpemVNb2R1bGUiLCJzY3JvbGxiYXJNb2R1bGUxIiwic2Nyb2xsYmFyR2hvc3RIYWlybGluZSIsIkd1aWxkTW9kdWxlIiwiZ2V0UmVsYXRpb25zaGlwcyIsInNlc3Npb25Nb2R1bGUiLCJnZXRTZXNzaW9ucyIsInNpemUxNCIsImg1IiwiZ2V0UHJvZmlsZVZhbHVlIiwiZ2V0U3RhdGlzdGljcyIsImdldFNlc3Npb25WYWx1ZSIsIm1hcmdpbkJvdHRvbTIwIiwic2Vzc2lvbnNSYXciLCJzZXNzaW9ucyIsInNlc3Npb25JZCIsImNsaWVudEluZm8iLCJvcyIsImNsaWVudCIsImFjdGl2aXRpZXMiLCJyZXBlYXQiLCJjcmVhdGVkQXQiLCJhdmF0YXJVUkwiLCJhdmF0YXIiLCJnZXRBdmF0YXJVUkwiLCJnZXREYXRlIiwiZ2V0TW9udGgiLCJnZXRGdWxsWWVhciIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJmbGFncyIsImhhc1ByZW1pdW1TdWJzY3JpcHRpb24iLCJlbWFpbCIsIm1mYUVuYWJsZWQiLCJtb2JpbGUiLCJwaG9uZSIsInZlcmlmaWVkIiwibnNmd0FsbG93ZWQiLCJyZWxhdGlvbnMiLCJmcmllbmRzIiwiaXNGcmllbmQiLCJpc0Jsb2NrZWQiLCJoaWdodGxpZ2h0SlMiLCJoaWdobGlnaHQiLCJtZXNzYWdlTW9kdWxlMSIsIm1lc3NhZ2VNb2R1bGUyIiwiQ29kZUNvbnRlbnQiLCJsaXN0TGFuZ3VhZ2VzIiwiX19odG1sIiwibGFuZ3VhZ2UiLCJtYXJnaW5Cb3R0b204IiwiZm9ybU1vZHVsZSIsInN0YXRlcyIsIkZvcm1TZWN0aW9uIiwiYWxsQ29tcG9uZW50cyIsIm9wZW5FeHRlcm5hbCIsImNvbXAiLCJjb21wTmFtZSIsImNvbXBQYXRoIiwicmVuZGVycyIsIkNvbXBvbmVudFByZXZpZXciLCJ0YWIiLCJBbGxQcmV2aWV3cyIsImdldFByb3BzIiwicmVuZGVyUHJldmlldyIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJyZW5kZXJDb2RlIiwiZ2VuZXJhdGVDb2RlIiwiZ2V0U3RyRm9yUHJvcCIsImxhbmciLCJTdHJpbmciLCIkJHR5cGVvZiIsIlN5bWJvbCIsImZvciIsImNvbXBDYXRlZ29yeSIsInByb3BTdHJpbmdzIiwiY2hpbGRyZW5Qcm9wIiwic3RyIiwib3BlblRhZyIsImNsb3NlVGFnIiwidmlzaWJsZUtleSIsInByb3BPYmplY3QiLCJpc0xhc3QiLCJpc0ZpcnN0IiwiY2hpbGRyZW5EYXRhIiwiaGVscCIsInN1Y2Nlc3MiLCJzZXRTdGF0ZSIsIm1hcmdpbkJvdHRvbSIsImNsYXNzbmFtZXMiLCJnZXRDbGFzc05hbWUiLCJiZXRhIiwidXNlclNldHRpbmdzVm9pY2UiLCJmbGV4IiwiVjJDX1BsdWdpbkNhcmQiLCJzaG93U2V0dGluZ3MiLCJzZXRJbml0aWFsU3RhdGUiLCJoYXNTZXR0aW5ncyIsImFkZG9uIiwiZ2V0U2V0dGluZ3NQYW5lbCIsInJlbG9hZHMiLCJ0cnVzdGVkIiwiY2xvc2VTZXR0aW5ncyIsInBhbmVsUmVmIiwic2V0dGluZ3NPcGVuIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVmcyIsInNldHRpbmdzcGFuZWwiLCJpc0hpZGRlbiIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJjYXJkTm9kZSIsInRoaXNOb2RlT2Zmc2V0IiwiY29udGFpbmVyT2Zmc2V0IiwiZW5kUG9pbnQiLCJnZXRTdHJpbmciLCJzZXR0aW5nc0NvbXBvbmVudCIsInJlZiIsIlhTdmciLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lSW5kZXgiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsInBvcExheWVyIiwibWFrZUxpbmsiLCJtYWtlQnV0dG9uIiwiYWN0aW9uIiwidW5tb3VudGVkIiwibGlua3MiLCJpbnZpdGUiLCJ0ZXN0ZXIiLCJkb25hdGUiLCJwYXRyZW9uIiwiYXV0aG9ySWQiLCJhdXRob3JMaW5rIiwiaXNTY2FubmluZyIsIlRvb2x0aXAiLCJhc2NlbmRpbmciLCJpc1BsdWdpbnMiLCJyZXZlcnNlIiwib25BZGRvbkNoYW5nZXMiLCJvcGVuRm9sZGVyIiwib3BlblBhdGgiLCJzaG91bGREZWxldGUiLCJjb25maXJtRGVsZXRlIiwic29ydE9wdGlvbnMiLCJkaXJlY3Rpb25zIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJnZXRBZGRvbnMiLCJzb3J0ZWRBZGRvbnMiLCJiIiwiY2FwIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwicmVuZGVyQ2hlY2tVcGRhdGVzIiwiWmVyZXNQbHVnaW5MaWJyYXJ5IiwiUGx1Z2luVXBkYXRlcyIsImNoZWNrQWxsIiwidG9vbHRpcElzU2hvd2luZyIsInRvb2x0aXAiLCJtYXJnaW5MZWZ0IiwiY2hlY2tVcGRhdGVCdXR0b24iLCJFbXVsYXRlZFRvb2x0aXAiLCJhdHRhY2hFdmVudHMiLCJyZWZyZXNoSWNvbiIsImFkZG9uQ2FyZHMiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwiVjJDX0NoZWNrYm94IiwiY2hlY2tib3hFbGVtZW50IiwiY2hlY2tib3giLCJjaGVja2JveElubmVyIiwiU2VsZWN0IiwiZHJvcGRvd24iLCJjcmVhdGVSZWYiLCJzaG93TWVudSIsImhpZGVNZW51Iiwib3B0IiwiaXNPcGVuIiwiU2VhcmNoIiwib25LZXlEb3duIiwic3dpdGNoIiwiVGV4dElucHV0IiwiZW1pdENoYW5nZSIsImlucHV0IiwiVjJDX0NvbnRlbnRDb2x1bW4iLCJjb250ZW50TW9kdWxlIiwiY29udGVudENvbHVtbiIsImNvbnRlbnRDb2x1bW5EZWZhdWx0IiwiVjJDX0Nzc0VkaXRvciIsImxpbmVzIiwiZGV0YWNoZWRFZGl0b3IiLCJWMkNfQ3NzRWRpdG9yRGV0YWNoZWQiLCJ1cGRhdGVDc3MiLCJzYXZlQ3NzIiwiZGV0YWNoIiwiZGV0YWNoZWQiLCJlZGl0b3IiLCJhY2UiLCJzZXRUaGVtZSIsInNldE1vZGUiLCJzZXRTaG93UHJpbnRNYXJnaW4iLCJzZXRGb250U2l6ZSIsImRlc3Ryb3kiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwiZGV0YWNoZWRSb290IiwiY29kZU1pcnJvciIsImxpbmVOdW1iZXJzIiwibW9kZSIsImluZGVudFVuaXQiLCJzY3JvbGxiYXJTdHlsZSIsIl9jY3NzIiwiY2NzcyIsInVwZGF0ZUxpbmVDb3VudCIsImxpbmVDb3VudCIsIlNldHRpbmdzVGl0bGUiLCJDaGVja2JveCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyTGVmdCIsImZvbnRTaXplIiwiYXJnIiwiZHJvb3QiLCJfcm9vdCIsImluamVjdERldGFjaGVkUm9vdCIsInJvb3QiLCJpbmplY3RSb290IiwiQkRFcnJvckJvdW5kYXJ5IiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsIkRlbGV0ZSIsIkRvd25BcnJvdyIsIkVkaXQiLCJtYXJnaW5Nb2R1bGUiLCJtYXJnaW5Ub3A2MCIsIlYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyIsInByZXZpZXciLCJpc2ZldGNoaW5nIiwiYXNzZXRDb21wb25lbnRzIiwidXBkYXRlV2hlbkZldGNoZWQiLCJkZWZhdWx0U2V0dGluZyIsIlJQQ1Byb3BzIiwiYXNzZXQiLCJ1cGRhdGVQcmV2aWV3Iiwib3B0aW9uc0NvbXBvbmVudHMiLCJvaGdvZG9oZnVjayIsIl9vcHRpb25zQ29tcG9uZW50cyIsImFycmF5IiwiaW5wdXRUZXh0TW9kdWxlcyIsIklucHV0VGV4dCIsInJlbW92ZUtleWJpbmQiLCJfaG9yaXpvbnRhbCIsImlucHV0TWluaSIsInNpemUxNiIsInNpemUyMCIsImxhc3RFZGl0ZWQiLCJpc1RpbWluZyIsInJvd01vZHVsZSIsImZsZXhNb2R1bGUiLCJpbnB1dE1vZHVsZSIsInNpemVNb2R1bGUyIiwicm93IiwiZmxleENoaWxkIiwiSW5wdXROdW1iZXJNb2R1bGVzIiwiSW5wdXROdW1iZXIiLCJjb2xvclRyYW5zcGFyZW50Iiwic2V0VmFsdWUiLCJjbGlwYm9hcmQiLCJJbnB1dENob2ljZU1vZHVsZXMiLCJJbnB1dENob2ljZSIsIkRpdmlkZXJNb2R1bGVzIiwiRGl2aWRlciIsImRpdmlkZXIiLCJkaXZpZGVyRGVmYXVsdCIsIkRpc2NvcmRCdXR0b24iLCJScGNQcmV2aWV3IiwiYWN0aXZlIiwiY2hhbmdlVGFiIiwiYW5jaWVudFRhYiIsInNldEFjdGl2ZSIsInJwYyIsImlzQWN0aXZlIiwiUHJvZmlsZSIsIlBvcG91dCIsIlRhYiIsImVtcHR5Q2xhc3NlcyIsIlByZXNlbmNlRXJyb3JDYXRjaGVyIiwiZXJySW5mbyIsImVtcHR5U3RhdGVJbWFnZSIsImVtcHR5U3RhdGUiLCJlbXB0eVN0YXRlSGVhZGVyIiwiZW1wdHlTdGF0ZVN1YnRleHQiLCJwb3BvdXRNb2R1bGVzIiwiVXNlclBvcG91dENvbXBvbmVudCIsIlBvcG91dFByb3BzIiwiVXNlclBvcG91dCIsInJlbmRlcjEiLCJjaGFubmVsSWQiLCJkaXNhYmxlVXNlclByb2ZpbGVMaW5rIiwiX1VzZXJQb3BvdXQiLCJwb3BvdXQiLCJleGNsdWRlUHJvcGVydGllcyIsInByb2ZpbGVNb2R1bGVzIiwiVXNlclByb2ZpbGVDb21wb25lbnQiLCJQcm9maWxlUHJvcHMiLCJjb25uZWN0ZWRQcm9maWxlU3RvcmUiLCJVc2VyUHJvZmlsZSIsInJlbmRlcjIiLCJyZW5kZXIzIiwicmVuZGVyNCIsInByb2ZpbGUiLCJTZXR0aW5nc1ZpZXciLCJjaGFuZ2VDYXRlZ29yeSIsInNlYXJjaEtleURvd24iLCJjaGVja0Nvbm5lY3Rpb24iLCJjb25uZWN0IiwiR3VpbGRTdG9yZSIsIkF2YXRhckRlZmF1bHRzIiwiU29ydGVkR3VpbGRTdG9yZSIsImhvb2tzIiwic2VsZWN0ZWRDYXRlZ29yeSIsImxvYWRpbmciLCJzZXJ2ZXJzIiwiY29ubmVjdGlvbiIsImNhdGVnb3J5U2x1Z3MiLCJmZXRjaCIsInNlYXJjaEVuZFBvaW50Iiwic2VydmVyIiwiam9pbmVkIiwiZW5kIiwidGVybSIsImNhdGVnb3J5QnV0dG9ucyIsInRvdGFsIiwic2VydmVyQ2FyZCIsInBpbm5lZCIsImFjY2VwdEludml0ZSIsImludml0ZV9jb2RlIiwiam9pbkVuZFBvaW50IiwiaWRlbnRpZmllciIsImNyZWRlbnRpYWxzIiwid2luZG93T3B0aW9ucyIsInJvdW5kIiwic2NyZWVuWCIsInNjcmVlblkiLCJ3aW4iLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInNldE1lbnVCYXJWaXNpYmlsaXR5IiwicmVzaXphYmxlIiwibWF4aW1pemFibGUiLCJtaW5pbWl6YWJsZSIsImFsd2F5c09uVG9wIiwiY2VudGVyIiwid2ViUHJlZmVyZW5jZXMiLCJub2RlSW50ZWdyYXRpb24iLCJiZFNlcnZlciIsIm9ubGluZSIsIm1lbWJlcnMiLCJpY29uVXJsIiwibmF0aXZlam9pbiIsInNlcnZlcjIiLCJndWlsZExpc3QiLCJnZXRGbGF0dGVuZWRHdWlsZElkcyIsImRlZmF1bHRMaXN0IiwiREVGQVVMVF9BVkFUQVJTIiwiU2VydmVyQ2FyZCIsImZhbGxiYWNrIiwiZmxvb3IiLCJjb25uZWN0RW5kUG9pbnQiLCJyZXNwb25zZSIsIm9uU2V0U2VjdGlvbiIsInNlYXJjaElucHV0IiwiZ2V0VGhpcyIsInNlcmNoaW5wdXQiLCJzZWFyY2hpbnB1dCIsIm1heExlbmd0aCIsIm5vdENvbm5lY3RlZCIsImNvbHVtbk1vZHVsZSIsIm1pbkhlaWdodCIsImxpbmVIZWlnaHQiLCJ1c2VFZmZlY3QiLCJUYWJCYXJTZXBhcmF0b3IiLCJWMkNfU2VydmVyQ2FyZCIsImltYWdlRXJyb3IiLCJjYXJkTW9kdWxlIiwiY2FyZCIsImNhcmRQcmltYXJ5IiwiX2hvcml6b250YWxSZXZlcnNlIiwid3JhcE1vZHVsZSIsIm5vV3JhcCIsInN0cmVhbWVyTW9kZUVuYWJsZWQiLCJvbkVycm9yIiwiaGFuZGxlRXJyb3IiLCJkcmFnZ2FibGUiLCJob3Jpem9udGFsIiwiVjJDX1JlbG9hZEljb24iLCJ4bWxucyIsIlYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiU2V0dGluZ3NHcm91cCIsInN3aXRjaEl0ZW0iLCJiZXRhQ2xhc3NOYW1lcyIsIlYyQ19TZXR0aW5nc0dyb3VwIiwicmVuZGVyT2xkU2V0dGluZ3MiLCJidXR0b25Db21wb25lbnQiLCJERUZBVUxUIiwiVjJDX1NldHRpbmdzVGl0bGUiLCJTd2l0Y2hJdGVtIiwiVjJDX1RhYkJhclNlcGFyYXRvciIsIlRvb2x0aXBDbGFzc2VzIiwiZ2V0VG9vbHRpcENsYXNzZXMiLCJUb29sdGlwTGF5ZXJzIiwiZ2V0VG9vbHRpcExheWVycyIsImdldENsYXNzIiwic2lkZU9yQ29sb3IiLCJ1cHBlckNhc2UiLCJ0b29sdGlwQ2xhc3MiLCJjbGFzc0V4aXN0cyIsInRvUHgiLCJwcmV2ZW50RmxpcCIsInRvb2x0aXBFbGVtZW50IiwibGFiZWxFbGVtZW50IiwidG9vbHRpcENvbnRlbnQiLCJwb2ludGVyRWxlbWVudCIsInRvb2x0aXBQb2ludGVyIiwicG9wb3V0cyIsImNhblNob3dBYm92ZSIsImNhblNob3dCZWxvdyIsImNhblNob3dMZWZ0IiwiY2FuU2hvd1JpZ2h0IiwiX2NsYXNzTmFtZSIsInNob3dBYm92ZSIsInNob3dCZWxvdyIsInNob3dMZWZ0Iiwic2hvd1JpZ2h0IiwiY2VudGVySG9yaXpvbnRhbGx5IiwiY2VudGVyVmVydGljYWxseSIsIm5vZGVjZW50ZXIiLCJmaW5kRE9NTm9kZSIsIlYyQ19YU3ZnIl0sIm1hcHBpbmdzIjoiOztRQUFBO1FBQ0E7O1FBRUE7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QW9CdytCLFVBQUksRUFBRSxTQUExQjtBQUFxQ3JELE9BQUMsRUFBRTtBQUF4QyxLQUFqQyxDQUpKLENBSEcsQ0FBUDtBQVVIOztBQWhCcUQsQzs7Ozs7Ozs7Ozs7QUNGMUQsbUM7Ozs7Ozs7Ozs7O0FDQUEscUM7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsK0I7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsaUMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC5qc1wiKTtcbiIsImV4cG9ydCBjb25zdCBtaW5pbXVtRGlzY29yZFZlcnNpb24gPSBcIjAuMC4zMDhcIjtcbmV4cG9ydCBjb25zdCBjdXJyZW50RGlzY29yZFZlcnNpb24gPSAod2luZG93LkRpc2NvcmROYXRpdmUgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uKCkpIHx8IFwiMC4wLjMwOFwiO1xuZXhwb3J0IGNvbnN0IG1pblN1cHBvcnRlZFZlcnNpb24gPSBcIjAuMy4wXCI7XG5leHBvcnQgY29uc3QgYmJkVmVyc2lvbiA9IFwiMC4zLjVcIjtcbmV4cG9ydCBjb25zdCBiYmRDaGFuZ2Vsb2cgPSB7XG4gICAgZGVzY3JpcHRpb246IFwiQmlnIHRoaW5ncyBhcmUgY29taW5nLlwiLFxuICAgIGNoYW5nZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6IFwiQnVnIEZpeGVzXCIsXG4gICAgICAgICAgICB0eXBlOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICAgIFwiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiLFxuICAgICAgICAgICAgICAgIFwiRml4ZWQgdGhlIG9wZW4gZm9sZGVyIGJ1dHRvbnMgZm9yIHBsdWdpbnMgYW5kIHRoZW1lc1wiXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICBdXG59O1xuXG5leHBvcnQgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgXCJDdXN0b20gY3NzIGxpdmUgdXBkYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0wXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxuICAgIFwiQ3VzdG9tIGNzcyBhdXRvIHVkcGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMVwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcbiAgICBcIkJldHRlckRpc2NvcmQgQmx1ZVwiOiAgICAgICAgIHtpZDogXCJiZGEtZ3MtYlwiLCAgaW5mbzogXCJSZXBsYWNlIERpc2NvcmQgYmx1ZSB3aXRoIEJEIEJsdWVcIiwgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiBmYWxzZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCJ9LFxuXG4gICAgLyogQ29yZSAqL1xuICAgIC8qID09PT09PSAqL1xuICAgIFwiUHVibGljIFNlcnZlcnNcIjogICAgICAgICAgICAge2lkOiBcImJkYS1ncy0xXCIsICBpbmZvOiBcIkRpc3BsYXkgcHVibGljIHNlcnZlcnMgYnV0dG9uXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuICAgIFwiTWluaW1hbCBNb2RlXCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0yXCIsICBpbmZvOiBcIkhpZGUgZWxlbWVudHMgYW5kIHJlZHVjZSB0aGUgc2l6ZSBvZiBlbGVtZW50cy5cIiwgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuICAgIFwiVm9pY2UgTW9kZVwiOiAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy00XCIsICBpbmZvOiBcIk9ubHkgc2hvdyB2b2ljZSBjaGF0XCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuICAgIFwiSGlkZSBDaGFubmVsc1wiOiAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0zXCIsICBpbmZvOiBcIkhpZGUgY2hhbm5lbHMgaW4gbWluaW1hbCBtb2RlXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuICAgIFwiRGFyayBNb2RlXCI6ICAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy01XCIsICBpbmZvOiBcIk1ha2UgY2VydGFpbiBlbGVtZW50cyBkYXJrIGJ5IGRlZmF1bHQod2lwKVwiLCAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuICAgIFwiVm9pY2UgRGlzY29ubmVjdFwiOiAgICAgICAgICAge2lkOiBcImJkYS1kYy0wXCIsICBpbmZvOiBcIkRpc2Nvbm5lY3QgZnJvbSB2b2ljZSBzZXJ2ZXIgd2hlbiBjbG9zaW5nIERpc2NvcmRcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuICAgIFwiMjQgSG91ciBUaW1lc3RhbXBzXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy02XCIsICBpbmZvOiBcIlJlcGxhY2UgMTJociB0aW1lc3RhbXBzIHdpdGggcHJvcGVyIG9uZXNcIiwgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuICAgIFwiQ29sb3JlZCBUZXh0XCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy03XCIsICBpbmZvOiBcIk1ha2UgdGV4dCBjb2xvciB0aGUgc2FtZSBhcyByb2xlIGNvbG9yXCIsICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuICAgIFwiTm9ybWFsaXplIENsYXNzZXNcIjogICAgICAgICAge2lkOiBcImZvcmstcHMtNFwiLCBpbmZvOiBcIkFkZHMgc3RhYmxlIGNsYXNzZXMgdG8gZWxlbWVudHMgdG8gaGVscCB0aGVtZXMuIChlLmcuIGFkZHMgLmRhLWNoYW5uZWxzIHRvIC5jaGFubmVscy1JZTJsNkEpXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcblxuICAgIC8qIENvbnRlbnQgKi9cbiAgICBcIkNvbnRlbnQgRXJyb3IgTW9kYWxcIjogICAgICAgIHtpZDogXCJmb3JrLXBzLTFcIiwgaW5mbzogXCJTaG93cyBhIG1vZGFsIHdpdGggcGx1Z2luL3RoZW1lIGVycm9yc1wiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiU2NhbiBQbHVnaW5zXCI6ICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtNlwiLCBpbmZvOiBcIlNjYW4gcGx1Z2lucyBmb3IgYW55IHRocmVhdCB0aGF0IGNhbiBiZSBoaWRkZW4gaW5zaWRlLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiU2hvdyBUb2FzdHNcIjogICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtMlwiLCBpbmZvOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcbiAgICBcIlNjcm9sbCBUbyBTZXR0aW5nc1wiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTNcIiwgaW5mbzogXCJBdXRvLXNjcm9sbHMgdG8gYSBwbHVnaW4ncyBzZXR0aW5ncyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCAob25seSBpZiBvdXQgb2YgdmlldylcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcbiAgICBcIkF1dG9tYXRpYyBMb2FkaW5nXCI6ICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTVcIiwgaW5mbzogXCJBdXRvbWF0aWNhbGx5IGxvYWRzLCByZWxvYWRzLCBhbmQgdW5sb2FkcyBwbHVnaW5zIGFuZCB0aGVtZXNcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcbiAgICBcIkVuYWJsZSBFZGl0IEJ1dHRvblwiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTdcIiwgaW5mbzogXCJFbmFibGUgYW4gRWRpdCBCdXR0b24gb24gdGhlIHBsdWdpbiBhbmQgdGhlbWUgcGFuZWwuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXG4gICAgXCJUaGVtZXMgaW4gUG9wb3V0IFdpbmRvd1wiOiAgICB7aWQ6IFwibGlnaHRjb3JkLTlcIiwgaW5mbzogXCJFbmFibGUgdGhlbWVzIGluIFBvcG91dCBXaW5kb3cuIChGb3IgZXhhbXBsZSwgd2hlbiBkZXRhY2hpbmcgc2NyZWVuc2hhcmUuKVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCIsIGV4cGVyaW1lbnRhbDogdHJ1ZX0sXG5cbiAgICAvKiBEZXZlbG9wZXIgKi9cbiAgICBcIkRldmVsb3BlciBNb2RlXCI6ICAgICAgICAgXHQgIHtpZDogXCJiZGEtZ3MtOFwiLCBpbmZvOiBcIkRldmVsb3BlciBNb2RlIFRvZ2dsZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxuICAgIFwiQ29weSBTZWxlY3RvclwiOlx0XHRcdCAge2lkOiBcImZvcmstZG0tMVwiLCBpbmZvOiBcIkFkZHMgYSBcXFwiQ29weSBTZWxlY3RvclxcXCIgb3B0aW9uIHRvIGNvbnRleHQgbWVudXMgd2hlbiBkZXZlbG9wZXIgbW9kZSBpcyBhY3RpdmVcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcblxuICAgIC8qKiBMaWdodGNvcmQgKi9cbiAgICBcIkRpc2FibGUgQmV0dGVyRGlzY29yZFwiOiAgICAgIHtpZDogXCJiZC1kaXNhYmxlXCIsICBpbmZvOiBcIkRpc2FibGUgQmV0dGVyZGlzY29yZCAocGx1Z2lucywgdGhlbWVzLCBldGMpIChOb3QgaW1wbGVtZW50ZWQpLlwiLCBpbXBsZW1lbnRlZDogZmFsc2UsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiQmx1ciBQZXJzb25hbCBJbmZvcm1hdGlvblwiOiAge2lkOiBcImxpZ2h0Y29yZC02XCIsIGluZm86IFwiQmx1ciBzZW5zaXRpdmUgaW5mb3JtYXRpb25zIGxpa2UgZW1haWwsIHBheW1lbnQgaW5mb3MgYW5kIG1vcmUuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkNhbGxpbmcgUmluZyBCZWF0XCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMlwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3Mgc3BlY2lhbCBjYWxsaW5nIGJlYXQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkRldmVsb3BlciBPcHRpb25zXCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMVwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3MgJiBMaWdodGNvcmQncyBJbnRlcm5hbCBEZXZlbG9wZXIgT3B0aW9ucy4gVGhpcyBhbGxvdyB0aGUgXFxcIkV4cGVyaW1lbnRzXFxcIiB0YWIsIHRoZSBcXFwiRGV2ZWxvcGVyIE9wdGlvbnNcXFwiIHRhYiBhbmQgdGhlIFxcXCJMaWdodGNvcmQgQXBpXFxcIiBzZWN0aW9uLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXG4gICAgXCJBZCBCbG9ja1wiOiAgICAgICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTRcIiwgaW5mbzogXCJCbG9jayBhbnkgQk9UIHRoYXQgZG1zIHlvdSB3aXRoIGFuIGludml0ZSBsaW5rLiBFdmVuIGluIGFuIGVtYmVkLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXG4gICAgXCJFbmFibGUgTGlnaHRjb3JkIFNlcnZlcnNcIjogICB7aWQ6IFwibGlnaHRjb3JkLTVcIiwgaW5mbzogXCJFbmFibGUgTGlnaHRjb3JkJ3Mgc2VydmVycy4gRGlzYWJsaW5nIHRoaXMgd2lsbCBkaXNhYmxlIGN1c3RvbSBiYWRnZXMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkRpc2FibGUgdHlwaW5nXCI6ICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtN1wiLCBpbmZvOiBcIkRvbid0IGxldCBvdGhlciBzZWUgeW91J3JlIHR5cGluZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiTGlnaHRjb3JkIFRhYnNcIjogICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC04XCIsIGluZm86IFwiQWxsb3dzIHlvdSB0byBsYXVuY2ggbXVsdGlwbGUgaW5zdGFuY2VzIG9mIExpZ2h0Y29yZCBpbiB0aGUgc2FtZSB3aW5kb3cuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiLCBleHBlcmltZW50YWw6IHRydWV9LFxuICAgIFwiVXNlIE5vdGlmaWNhdGlvbiBTaGltXCI6ICAgICAge2lkOiBcImxpZ2h0Y29yZC0xMFwiLCBpbmZvOiBcIkJhc2ljYWxseSBkb24ndCB1c2UgV2luZG93cydzIE5vdGlmaWNhdGlvbnMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IHByb2Nlc3MucGxhdGZvcm0gIT09IFwid2luMzJcIiwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXG4gICAgXCJFbW9qaSBQcmVmaXhcIjogICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTExXCIsIGluZm86IFwiQ2hhbmdlIHRoZSBwcmVmaXggdXNlZCBmb3IgZnJlZSBuaXRyb3MgZW1vamlzLiBQbGVhc2UgcHV0IG9ubHkgb25lIGNoYXJhY3Rlci4gRGVmYXVsdDogLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIiwgZGVmYXVsdDogXCIuXCJ9LFxuXG4gICAgLyoqIExpZ2h0Y29yZCBXaW5kb3cgKi9cbiAgICBcIkFsd2F5cy1vbi1Ub3BcIjogICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtM1wiLCBpbmZvOiBcIkVuYWJsZSB0aGUgd2luZG93J3MgQWx3YXlzLW9uLVRvcCBtb2RlLCB3aGVyZSBMaWdodGNvcmQgc3RheXMgb24gdG9wIG9mIG90aGVyIGFwcGxpY2F0aW9ucy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxuICAgIFwiTm8gV2luZG93IEJvdW5kc1wiOiAgICAgICAgICAge2lkOiBcIm5vX3dpbmRvd19ib3VuZFwiLCBpbmZvOiBcIkRpc2FibGUgV2luZG93IEJvdW5kcy4gQ2FuIGJlIHVzZWZ1bCBpZiB5b3UgdXNlIGEgd2luZG93IG1hbmFnZXIuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IHByb2Nlc3MucGxhdGZvcm0gIT09IFwibGludXhcIiwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXG4gICAgXCJFbmFibGUgR2xhc3N0cm9uXCI6ICAgICAgICAgICB7aWQ6IFwiZW5hYmxlX2dsYXNzdHJvblwiLCBpbmZvOiBcIkVuYWJsZSBHbGFzc3Ryb24uIElmIHlvdSdyZSBub3QgdXNpbmcgdHJhbnNwYXJlbnQgdGhlbWVzLCB0aGlzIGNhbiByZWR1Y2UgbGFnLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXG4gICAgXG4gICAgLyoqIFJpY2hQcmVzZW5jZSAqL1xuICAgIFwiRW5hYmxlXCI6ICAgICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIsIGluZm86IFwiRW5hYmxlIFJpY2hQcmVzZW5jZSBiZWxvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJzdGF0dXNcIn1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29va2llID0ge1xuICAgIFwiYmRhLWdzLTFcIjogdHJ1ZSxcbiAgICBcImJkYS1ncy0yXCI6IGZhbHNlLFxuICAgIFwiYmRhLWdzLTNcIjogZmFsc2UsXG4gICAgXCJiZGEtZ3MtNFwiOiBmYWxzZSxcbiAgICBcImJkYS1ncy01XCI6IHRydWUsXG4gICAgXCJiZGEtZ3MtNlwiOiBmYWxzZSxcbiAgICBcImJkYS1ncy03XCI6IGZhbHNlLFxuICAgIFwiYmRhLWdzLThcIjogZmFsc2UsXG4gICAgXCJiZGEtZXMtMFwiOiB0cnVlLFxuICAgIFwiYmRhLWVzLTFcIjogdHJ1ZSxcbiAgICBcImJkYS1lcy0yXCI6IHRydWUsXG4gICAgXCJiZGEtZXMtNFwiOiBmYWxzZSxcbiAgICBcImJkYS1lcy02XCI6IHRydWUsXG4gICAgXCJiZGEtZXMtN1wiOiB0cnVlLFxuICAgIFwiYmRhLWdzLWJcIjogZmFsc2UsXG4gICAgXCJiZGEtZXMtOFwiOiB0cnVlLFxuICAgIFwiYmRhLWRjLTBcIjogZmFsc2UsXG4gICAgXCJiZGEtY3NzLTBcIjogZmFsc2UsXG4gICAgXCJiZGEtY3NzLTFcIjogZmFsc2UsXG4gICAgXCJiZGEtZXMtOVwiOiB0cnVlLFxuICAgIFwiZm9yay1kbS0xXCI6IGZhbHNlLFxuICAgIFwiZm9yay1wcy0xXCI6IHRydWUsXG4gICAgXCJmb3JrLXBzLTJcIjogdHJ1ZSxcbiAgICBcImZvcmstcHMtM1wiOiB0cnVlLFxuICAgIFwiZm9yay1wcy00XCI6IHRydWUsXG4gICAgXCJmb3JrLXBzLTVcIjogdHJ1ZSxcbiAgICBcImZvcmstcHMtNlwiOiB0cnVlLFxuICAgIFwiZm9yay1wcy03XCI6IGZhbHNlLFxuICAgIFwiZm9yay1lcy0yXCI6IGZhbHNlLFxuICAgIFwiZm9yay1lcy0zXCI6IHRydWUsXG4gICAgXCJmb3JrLXdwLTFcIjogZmFsc2UsXG4gICAgXCJmb3JrLXdwLTJcIjogZmFsc2UsXG4gICAgXCJmb3JrLWJldGFcIjogdHJ1ZSxcbiAgICBcImxpZ2h0Y29yZC0xXCI6IGZhbHNlLFxuICAgIFwibGlnaHRjb3JkLTJcIjogdHJ1ZSxcbiAgICBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCI6IGZhbHNlLFxuICAgIFwibGlnaHRjb3JkLTNcIjogZmFsc2UsXG4gICAgXCJsaWdodGNvcmQtNFwiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC01XCI6IHRydWUsXG4gICAgXCJsaWdodGNvcmQtNlwiOiB0cnVlLFxuICAgIFwibGlnaHRjb3JkLTdcIjogZmFsc2UsXG4gICAgXCJsaWdodGNvcmQtOFwiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC05XCI6IGZhbHNlLFxuICAgIFwibGlnaHRjb3JkLTEwXCI6IGZhbHNlLFxuICAgIFwibm9fd2luZG93X2JvdW5kXCI6IGZhbHNlLFxufTtcblxuXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NDb29raWUgPSB7fTtcblxuZXhwb3J0IGNvbnN0IHNldHRpbmdzUlBDID0ge307XG5leHBvcnQgY29uc3QgZGVmYXVsdFJQQyA9IHtcbiAgICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcbiAgICBcImFwcGxpY2F0aW9uX2lkXCI6IFwiNzExNDE2OTU3NzE4NzU3NDE4XCIsXG4gICAgXCJzdGF0ZVwiOiBcIkxpZ2h0Y29yZCBDbGllbnRcIixcbiAgICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXG4gICAgXCJ0aW1lc3RhbXBzLnN0YXJ0XCI6IERhdGUubm93KCksXG4gICAgXCJhc3NldHMuc21hbGxcIjogbnVsbCxcbiAgICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXG59XG5cbmV4cG9ydCBjb25zdCBsaWdodGNvcmRTZXR0aW5ncyA9IHt9O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaWdodGNvcmRTZXR0aW5ncyA9IHt9O1xuXG5leHBvcnQgY29uc3QgYmRwbHVnaW5FcnJvcnMgPSBbXTtcbmV4cG9ydCBjb25zdCBiZHRoZW1lRXJyb3JzID0gW107IC8vIGRlZmluZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuZXhwb3J0IGNvbnN0IGJkQ29uZmlnID0gT2JqZWN0LmNyZWF0ZShCZXR0ZXJEaXNjb3JkQ29uZmlnKTtcblxuZXhwb3J0IGNvbnN0IGJkdGhlbWVzID0ge307XG5leHBvcnQgY29uc3QgYmRwbHVnaW5zID0ge307XG5cbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcbmV4cG9ydCBjb25zdCB0aGVtZUNvb2tpZSA9IHt9OyIsImltcG9ydCBsb2NhbFN0b3JhZ2VGaXggZnJvbSBcIi4vbG9jYWxTdG9yYWdlRml4XCI7XG5pbXBvcnQgbG9hZGluZ0ljb24gZnJvbSBcIi4vbG9hZGluZ0ljb25cIjtcbmxvY2FsU3RvcmFnZUZpeCgpO1xubG9hZGluZ0ljb24oKTtcblxuY29uc3QgZGVwcmVjYXRlR2xvYmFsID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBrZXksIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgVXRpbHMud2FybihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIGBcIiR7a2V5fVwiIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuIFBsZWFzZSBvbmx5IHVzZSBCZEFwaS5gKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pOyAgXG59O1xuXG5cbmltcG9ydCAqIGFzIEdsb2JhbHMgZnJvbSBcIi4vMGdsb2JhbHNcIjtcblxuY29uc3QgZ2xvYmFsS2V5cyA9IE9iamVjdC5rZXlzKEdsb2JhbHMpO1xuZm9yIChjb25zdCBrZXkgb2YgZ2xvYmFsS2V5cykgZGVwcmVjYXRlR2xvYmFsKGtleSwgR2xvYmFsc1trZXldKTtcblxuXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vbW9kdWxlcy9iZEFwaVwiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi9tb2R1bGVzL3V0aWxzXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL21vZHVsZXMvZGF0YVN0b3JlXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9tb2R1bGVzL2NsYXNzTm9ybWFsaXplclwiO1xuXG5kZXByZWNhdGVHbG9iYWwoXCJCRFYyXCIsIEJEVjIpO1xuZGVwcmVjYXRlR2xvYmFsKFwicGx1Z2luTW9kdWxlXCIsIHBsdWdpbk1vZHVsZSk7XG5kZXByZWNhdGVHbG9iYWwoXCJ0aGVtZU1vZHVsZVwiLCB0aGVtZU1vZHVsZSk7XG5kZXByZWNhdGVHbG9iYWwoXCJVdGlsc1wiLCBVdGlscyk7XG5kZXByZWNhdGVHbG9iYWwoXCJCREV2ZW50c1wiLCBCREV2ZW50cyk7XG5kZXByZWNhdGVHbG9iYWwoXCJzZXR0aW5nc1BhbmVsXCIsIHNldHRpbmdzUGFuZWwpO1xuZGVwcmVjYXRlR2xvYmFsKFwiRGF0YVN0b3JlXCIsIERhdGFTdG9yZSk7XG5kZXByZWNhdGVHbG9iYWwoXCJDb250ZW50TWFuYWdlclwiLCBDb250ZW50TWFuYWdlcik7XG5kZXByZWNhdGVHbG9iYWwoXCJDbGFzc05vcm1hbGl6ZXJcIiwgQ2xhc3NOb3JtYWxpemVyKTtcblxud2luZG93LkJkQXBpID0gQmRBcGk7XG5cbmltcG9ydCBDb3JlIGZyb20gXCIuL21vZHVsZXMvY29yZVwiO1xuZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgQ29yZSk7XG5cbi8vIFRPRE86IENoYW5nZSBJbml0IG1vZGUgYW5kIHN0b3AgdXNpbmcgQ29yZVdyYXBwZXIuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3JlV3JhcHBlciB7XG4gICAgY29uc3RydWN0b3IoYmRDb25maWcsIG1ldGhvZHMpIHtcbiAgICAgICAgQ29yZS5zZXRDb25maWcoYmRDb25maWcpO1xuICAgICAgICBDb3JlLnNldE1ldGhvZHMobWV0aG9kcyk7XG4gICAgfVxuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgLy8gZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgdGhpcy5tYWluQ29yZSk7XG4gICAgICAgIENvcmUuaW5pdCgpO1xuICAgIH1cbn0iLCJleHBvcnQgZGVmYXVsdCAoKSA9PiB7XHJcbiAgICBjb25zdCB2MkxvYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICB2MkxvYWRlci5jbGFzc05hbWUgPSBcImJkLWxvYWRlcnYyXCI7XHJcbiAgICB2MkxvYWRlci50aXRsZSA9IFwiQmFuZGFnZWRCRCBpcyBsb2FkaW5nLi4uXCI7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHYyTG9hZGVyKTtcclxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRXaW5kb3dHZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIpLmdldDtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRXaW5kb3cgPSBSZWZsZWN0LmFwcGx5KGNvbnRlbnRXaW5kb3dHZXR0ZXIsIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHkoY29udGVudFdpbmRvdywge1xyXG4gICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IG9ialtwcm9wXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdmFsLmJpbmQob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGludGVyY2VwdGlvbiBieSBwYXRjaGluZyBSZWZsZWN0LmFwcGx5IGFuZCBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3QsIFwiYXBwbHlcIiwge3ZhbHVlOiBSZWZsZWN0LmFwcGx5LCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsIFwiYmluZFwiLCB7dmFsdWU6IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTtcclxuXHJcbiAgICBjb25zdCBvT3BlbiA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuO1xyXG4gICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgaWYgKHVybC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYXBpL3dlYmhvb2tzXCIpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShvT3BlbiwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVEZIb3VyIHtcclxuICAgIGluamVjdDI0SG91cigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgdHdlbHZlSG91ciA9IG5ldyBSZWdFeHAoYChbMC05XXsxLDJ9KTooWzAtOV17MSwyfSlcXFxccyhBTXxQTSlgKTtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBkYXRhLnJldHVyblZhbHVlLm1hdGNoKHR3ZWx2ZUhvdXIpO1xyXG4gICAgICAgICAgICBpZiAoIW1hdGNoZWQgfHwgbWF0Y2hlZC5sZW5ndGggIT09IDQpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZWRbM10gPT09IFwiQU1cIikgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIwMFwiIDogbWF0Y2hlZFsxXS5wYWRTdGFydCgyLCBcIjBcIil9OiR7bWF0Y2hlZFsyXX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIxMlwiIDogcGFyc2VJbnQobWF0Y2hlZFsxXSkgKyAxMn06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvenkgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiY2FsZW5kYXJGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb3p5IG1vZGVcclxuICAgICAgICBjb25zdCBjYW5jZWxDb21wYWN0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5UaW1lRm9ybWF0dGVyLCBcImRhdGVGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb21wYWN0IG1vZGVcclxuICAgICAgICB0aGlzLmNhbmNlbDI0SG91ciA9ICgpID0+IHtjYW5jZWxDb3p5KCk7IGNhbmNlbENvbXBhY3QoKTt9OyAvLyBDYW5jZWwgYm90aFxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZTI0SG91cigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHRoaXMuY2FuY2VsMjRIb3VyKCk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcblxuY29uc3QgZGlzcGF0Y2hlciA9IHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlclxuY29uc3QgQ2hhbm5lbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldENoYW5uZWwgJiYgZS5kZWZhdWx0Lmhhc0NoYW5uZWwpWzBdLmRlZmF1bHRcbmxldCByZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXG5sZXQgRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxuXG5jb25zdCBibG9ja2VkID0ge31cblxubGV0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF1cbmZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyKCl7XG4gICAgaWYodXNlck1vZHVsZSlyZXR1cm4gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcbiAgICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQW50aUJvdERNIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLmFudGlETSA9IHRoaXMuYW50aURNLmJpbmQodGhpcylcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICB9XG5cbiAgICBlbmFibGUoKXtcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXG5cbiAgICAgICAgZGlzcGF0Y2hlci5zdWJzY3JpYmUoXCJNRVNTQUdFX0NSRUFURVwiLCB0aGlzLmFudGlETSlcbiAgICB9XG5cbiAgICBkaXNhYmxlKCl7XG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG5cbiAgICAgICAgZGlzcGF0Y2hlci51bnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxuICAgIH1cblxuICAgIGFudGlETShldil7XG4gICAgICAgIGlmKCFldi5tZXNzYWdlLmF1dGhvci5ib3QpcmV0dXJuXG4gICAgICAgIGlmKGV2Lm1lc3NhZ2UuYXV0aG9yLmlkID09PSBnZXRDdXJyZW50VXNlcigpLmlkKVxuICAgICAgICBpZihldi5tZXNzYWdlLmd1aWxkX2lkKXJldHVyblxuXG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBDaGFubmVsTW9kdWxlLmdldENoYW5uZWwoZXYubWVzc2FnZS5jaGFubmVsX2lkKVxuICAgICAgICBpZighY2hhbm5lbClyZXR1cm4gLy8gbWlnaHQgYmUgYnJva2VuXG5cbiAgICAgICAgaWYoY2hhbm5lbC50eXBlICE9PSAxKXJldHVyblxuXG4gICAgICAgIGlmKGJsb2NrZWRbZXYubWVzc2FnZS5hdXRob3IuaWRdKXJldHVybiAvLyBJZiB0aGUgdXNlciB1bmJsb2NrIHRoZSBib3QsIERvbid0IGJsb2NrIGl0IGFnYWluLlxuXG4gICAgICAgIGlmKHNjYW5NZXNzYWdlKGV2Lm1lc3NhZ2UpKXtcbiAgICAgICAgICAgIGJsb2NrZWRbZXYubWVzc2FnZS5hdXRob3IuaWRdID0gdHJ1ZVxuICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGBbQWRCbG9ja106IEJsb2NrZWQgJHtldi5tZXNzYWdlLmF1dGhvci51c2VybmFtZX0jJHtldi5tZXNzYWdlLmF1dGhvci5kaXNjcmltaW5hdG9yfWAsIHtcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ3YXJuaW5nXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZighcmVsYXRpb25TaGlwTW9kdWxlKXJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcClbMF1cbiAgICAgICAgICAgIHJlbGF0aW9uU2hpcE1vZHVsZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcChldi5tZXNzYWdlLmF1dGhvci5pZCwge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBcIkNvbnRleHRNZW51XCJcbiAgICAgICAgICAgIH0sIDIpXG4gICAgICAgICAgICBpZighRE1Nb2R1bGUpRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxuICAgICAgICAgICAgRE1Nb2R1bGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKGNoYW5uZWwuaWQsIGZhbHNlKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzY2FuTWVzc2FnZShtZXNzYWdlKXtcbiAgICBpZigvKGRpc2NvcmRcXC5nZ3xkaXNjb3JkXFwuY29tXFwvaW52aXRlXFwvfGRpc2NvcmRhcHBcXC5jb21cXC9pbnZpdGVcXC8pL2cudGVzdChtZXNzYWdlLmNvbnRlbnQpKXJldHVybiB0cnVlXG4gICAgaWYoRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmdnL1wiKSB8fCBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmQuY29tL2ludml0ZS9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkYXBwLmNvbS9pbnZpdGUvXCIpKXJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gZmFsc2Vcbn1cbmZ1bmN0aW9uIEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIHNlYXJjaCl7XG4gICAgbGV0IGVtYmVkcyA9IG1lc3NhZ2UuZW1iZWRzIHx8IFtdXG4gICAgaWYoZW1iZWRzLmxlbmd0aCA9PT0gMClyZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZW1iZWRzLm1hcChlbWJlZCA9PiB7XG4gICAgICAgIGlmKGVtYmVkLnR5cGUgIT09IFwicmljaFwiKXJldHVybiBmYWxzZVxuICAgICAgICBpZigoZW1iZWQudGl0bGUgfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxuICAgICAgICBpZigoZW1iZWQuZGVzY3JpcHRpb24gfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxuICAgICAgICBpZigoKGVtYmVkLmZvb3RlciB8fCBcIlwiKSAmJiBlbWJlZC5mb290ZXIudGV4dCB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXG4gICAgICAgIGlmKChlbWJlZC5maWVsZHMgfHwgW10pLm1hcChlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlLmluY2x1ZGVzKHNlYXJjaCkgfHwgZS5uYW1lLmluY2x1ZGVzKHNlYXJjaClcbiAgICAgICAgfSkuaW5jbHVkZXModHJ1ZSkpcmV0dXJuIHRydWVcbiAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICB9KS5pbmNsdWRlcyh0cnVlKVxufSIsImltcG9ydCB7c2V0dGluZ3NSUEMsIGRlZmF1bHRSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IEJETW9kdWxlcy5nZXQobT0+bS5EaXNwYXRjaGVyJiZtLmRlZmF1bHQmJm0uZGVmYXVsdC5kaXNwYXRjaClbMF0uZGVmYXVsdFxyXG5jb25zdCBBY3Rpb25UeXBlcyA9IEJETW9kdWxlcy5nZXQobT0+bS5BY3Rpb25UeXBlcylbMF0uQWN0aW9uVHlwZXNcclxuXHJcbmNvbnN0IHNvY2tldElkID0gXCJsaWdodGNvcmQtc3Bvb2Ytc29ja2V0XCJcclxuY29uc3QgcGlkID0gcHJvY2Vzcy5waWRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDdXN0b21SaWNoUHJlc2VuY2Uge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBzZXR0aW5nc1JQQ1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZm9ybWF0ZWRHYW1lKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZ2FtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpcmV0dXJuIG51bGxcclxuICAgICAgICBsZXQgZ2FtZSA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5nYW1lLm5hbWUgfHwgZGVmYXVsdFJQQy5uYW1lLFxyXG4gICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZ2FtZS5zdGF0ZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXHJcbiAgICAgICAgICAgICAgICBzbWFsbF9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLnNtYWxsXCJdIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBnYW1lXHJcbiAgICB9XHJcblxyXG4gICAgc2VuZEdhbWUoKXtcclxuICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoKHtcclxuICAgICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuTE9DQUxfQUNUSVZJVFlfVVBEQVRFLFxyXG4gICAgICAgICAgICBzb2NrZXRJZCxcclxuICAgICAgICAgICAgcGlkLFxyXG4gICAgICAgICAgICBhY3Rpdml0eTogdGhpcy5mb3JtYXRlZEdhbWVcclxuICAgICAgICB9KSAgIFxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpIHtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRW5hYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNldChzZXR0aW5nc1JQQyB8fCBPYmplY3QuY3JlYXRlKGRlZmF1bHRSUEMpKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCkge1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRpc2FibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZldGNoQXNzZXRzKGFwcGxpY2F0aW9uSWQpe1xyXG4gICAgICAgIGxldCBhc3NldHMgPSBhd2FpdCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBc3NldHMpWzBdLmdldEFzc2V0cyhhcHBsaWNhdGlvbklkKVxyXG4gICAgICAgIGlmKGFzc2V0cy51bmRlZmluZWQgJiYgdHlwZW9mIGFzc2V0cy51bmRlZmluZWQgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEFwcGxpY2F0aW9uXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3NldHNcclxuICAgIH1cclxuXHJcbiAgICBzZXQoYWN0aXZpdHkpe1xyXG4gICAgICAgIHRoaXMuZ2FtZSA9IGFjdGl2aXR5XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgdjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuL2Rpc3RhbnRcIjtcbmltcG9ydCB7IHRpbWluZ1NhZmVFcXVhbCB9IGZyb20gXCJjcnlwdG9cIjtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIExheWVycyB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5sYXllcnMgPSBbXVxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuTGF5ZXJzID0gdGhpc1xuICAgIH1cblxuICAgIGdldCBpc0luamVjdGVkKCl7XG4gICAgICAgIHJldHVybiAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXYuTGF5ZXJzLmluamVjdGVkXCIpXG4gICAgfVxuXG4gICAgaW5qZWN0KCl7XG4gICAgICAgIGlmKHRoaXMuaXNJbmplY3RlZClyZXR1cm5cbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyc1xuICAgICAgICBdID0gW1xuICAgICAgICAgICAgVXRpbHMucmVtb3ZlRGEodjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUubGF5ZXJzICYmIGUubGF5ZXIpLmxheWVycylcbiAgICAgICAgXVxuICAgICAgICBjb25zdCBsYXllcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK2NsYXNzTmFtZUxheWVycyk7XG4gICAgICAgIGlmICghbGF5ZXJzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IFJlYWN0SW5zdGFuY2UgPSBMaWdodGNvcmQuQXBpLlV0aWxzLkZpbmRSZWFjdChsYXllcnMsIDEpXG4gICAgICAgIGlmKCFSZWFjdEluc3RhbmNlKXJldHVybiBsYXllcnNcbiAgICAgICAgdGhpcy5SZWFjdEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZVxuICAgICAgICBsZXQgcmVuZGVyID0gUmVhY3RJbnN0YW5jZS5yZW5kZXJcbiAgICAgICAgUmVhY3RJbnN0YW5jZS5yZW5kZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSByZW5kZXIuY2FsbChSZWFjdEluc3RhbmNlKVxuICAgICAgICAgICAgbGV0IGNsYXNzTGlzdCA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNsYXNzTmFtZS5zcGxpdChcIiBcIilcbiAgICAgICAgICAgIGNsYXNzTGlzdC5wdXNoKFwiTGF5ZXJzXCIpXG4gICAgICAgICAgICBjbGFzc0xpc3QucHVzaChcImluamVjdGVkXCIpXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jbGFzc05hbWUgPSBjbGFzc0xpc3Quam9pbihcIiBcIilcblxuICAgICAgICAgICAgdGhpcy5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW4ucHVzaChsYXllclsxXSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxuICAgICAgICB9XG4gICAgICAgIFJlYWN0SW5zdGFuY2UuZm9yY2VVcGRhdGUoKVxuICAgIH1cblxuICAgIGNyZWF0ZUxheWVyKGNoaWxkcmVuLCBwcm9wcyA9IHt9KXtcbiAgICAgICAgbGV0IGlkID0gdXVpZHY0KClcbiAgICAgICAgbGV0IGxheWVyID0gbnVsbFxuICAgICAgICB0aGlzLmxheWVycy5wdXNoKFtpZCwgPExheWVyIHsuLi5wcm9wc30gZ2V0TGF5ZXI9e2xheSA9PiB7XG4gICAgICAgICAgICBsYXllciA9IGxheVxuICAgICAgICB9fSBrZXk9e2lkfSBpZD17aWR9IHJlbW92ZT17KCkgPT4ge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KGUgPT4gZVswXSA9PT0gaWQpXG4gICAgICAgICAgICBpZihpbmRleCA9PT0gLTEpcmV0dXJuXG4gICAgICAgICAgICB0aGlzLmxheWVycy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICBsYXllciA9IG51bGxcbiAgICAgICAgICAgIGlmKHRoaXMuUmVhY3RJbnN0YW5jZSl0aGlzLlJlYWN0SW5zdGFuY2UuZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgdGhpcy5pbmplY3QoKVxuICAgICAgICB9fT57Y2hpbGRyZW59PC9MYXllcj5dKVxuICAgICAgICBpZih0aGlzLlJlYWN0SW5zdGFuY2UpdGhpcy5SZWFjdEluc3RhbmNlLmZvcmNlVXBkYXRlKClcbiAgICAgICAgdGhpcy5pbmplY3QoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVtb3ZlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoIWxheWVyKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KGUgPT4gZVswXSA9PT0gaWQpXG4gICAgICAgICAgICAgICAgICAgIGlmKGluZGV4ID09PSAtMSlyZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgICAgICAgICAgICBsYXllciA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5SZWFjdEluc3RhbmNlKXRoaXMuUmVhY3RJbnN0YW5jZS5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0KClcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIucmVtb3ZlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxubGV0IExheWVyTW9kdWxlc1xuZXhwb3J0IGNsYXNzIExheWVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBhbmltYXRpb246IG5ldyB0aGlzLm1vZHVsZXNbMF0uZGVmYXVsdC5WYWx1ZSgwKVxuICAgICAgICB9IFxuICAgICAgICB0aGlzLnByb3BzLmdldExheWVyKHRoaXMpXG4gICAgICAgIHRoaXMua2V5ZG93biA9IHRoaXMua2V5ZG93bi5iaW5kKHRoaXMpXG4gICAgfVxuXG4gICAga2V5ZG93bihlKXtcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gTGF5ZXJNb2R1bGVzIHx8IChMYXllck1vZHVsZXMgPSBbXG4gICAgICAgICAgICB2Mi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5WYWx1ZSAmJiBlLmRlZmF1bHQuZGl2KVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWRvd24pXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoZXYpe1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlkb3duKVxuICAgIH1cblxuICAgIHJlbW92ZSgpe1xuICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSgpXG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbEVudGVyKGV2KXtcbiAgICAgICAgdGhpcy5tb2R1bGVzWzBdLmRlZmF1bHQudGltaW5nKHRoaXMuc3RhdGUuYW5pbWF0aW9uLCB7XG4gICAgICAgICAgICB0b1ZhbHVlOiAxLFxuICAgICAgICAgICAgZHVyYXRpb246IDEwMFxuICAgICAgICB9KS5zdGFydChldilcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsTGVhdmUoZXYpe1xuICAgICAgICB0aGlzLm1vZHVsZXNbMF0uZGVmYXVsdC50aW1pbmcodGhpcy5zdGF0ZS5hbmltYXRpb24sIHtcbiAgICAgICAgICAgIHRvVmFsdWU6IDAsXG4gICAgICAgICAgICBkdXJhdGlvbjogMTAwXG4gICAgICAgIH0pLnN0YXJ0KGV2KVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQgaW50ZXJwb2xhdGlvbiA9IHRoaXMuc3RhdGUuYW5pbWF0aW9uLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMS4wNywgMV1cbiAgICAgICAgfSlcbiAgICAgICAgbGV0IHN0eWxlID0ge1xuICAgICAgICAgICAgb3BhY2l0eTogdGhpcy5zdGF0ZS5hbmltYXRpb24sXG4gICAgICAgICAgICB0cmFuc2Zvcm06IFt7XG4gICAgICAgICAgICAgICAgc2NhbGU6IGludGVycG9sYXRpb25cbiAgICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgICAgbGV0IERpdiA9IHRoaXMubW9kdWxlc1swXS5kZWZhdWx0LmRpdlxuICAgICAgICByZXR1cm4gPERpdiBjbGFzc05hbWU9e1tfX1NFQ1JFVF9FTU9USU9OX18uY3NzKHtcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgV2Via2l0Qm94T3JpZW50OiBcInZlcnRpY2FsXCIsXG4gICAgICAgICAgICBXZWJraXRCb3hEaXJlY3Rpb246IFwibm9ybWFsXCIsXG4gICAgICAgICAgICBtc0ZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICAgICAgekluZGV4OiAxMDFcbiAgICAgICAgfSkscHJvY2Vzcy5wbGF0Zm9ybT09PVwid2luMzJcIj9fX1NFQ1JFVF9FTU9USU9OX18uY3NzKHtcbiAgICAgICAgICAgIHRvcDogXCItMjJweFwiLFxuICAgICAgICAgICAgcGFkZGluZ1RvcDogXCIyMnB4XCJcbiAgICAgICAgfSk6bnVsbCwuLi4odGhpcy5wcm9wcy5jbGFzc05hbWU/dGhpcy5wcm9wcy5jbGFzc05hbWUuc3BsaXQoXCIgXCIpOltdKV0uZmlsdGVyKGU9PmUpLmpvaW4oXCIgXCIpIHx8IG51bGx9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgIDwvRGl2PlxuICAgIH1cbn1cbkxheWVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBpZDogbnVsbCxcbiAgICBjaGlsZHJlbjogbnVsbFxufSIsImltcG9ydCB7cGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBtYWluQ29yZSBmcm9tIFwiLi9jb3JlXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5jb25zdCBCZEFwaSA9IHtcbiAgICBnZXQgUmVhY3QoKSB7IHJldHVybiBCRFYyLlJlYWN0OyB9LFxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIEJEVjIuUmVhY3REb207IH0sXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiBCRFYyLlJlYWN0Q29tcG9uZW50O30sXG4gICAgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7cmV0dXJuIFV0aWxzLldpbmRvd0NvbmZpZ0ZpbGU7fSxcbiAgICBnZXQgc2V0dGluZ3MoKSB7cmV0dXJuIHNldHRpbmdzO30sXG4gICAgZ2V0IGVtb3RlcygpIHtyZXR1cm4gbnVsbH0sIC8vIGRlcHJlY2F0ZWQsIGRlbGV0ZWQgYWxsIGVtb3RlcyBmcm9tIGJldHRlcmRpc2NvcmQuXG4gICAgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfSxcbiAgICBnZXQgc2NyZWVuSGVpZ2h0KCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApOyB9XG59O1xuXG5CZEFwaS5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBVdGlscy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xufTtcblxuQmRBcGkuZ2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBVdGlscy5nZXRXaW5kb3dQcmVmZXJlbmNlKGtleSk7XG59O1xuXG5CZEFwaS5zZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpO1xufTtcblxuLy9JbmplY3QgQ1NTIHRvIGRvY3VtZW50IGhlYWRcbi8vaWQgPSBpZCBvZiBlbGVtZW50XG4vL2NzcyA9IGN1c3RvbSBjc3NcbkJkQXBpLmluamVjdENTUyA9IGZ1bmN0aW9uIChpZCwgY3NzKSB7XG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRChpZCksIGNzcyk7XG59O1xuXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcbi8vaWQgPSBpZCBvZiBlbGVtZW50XG5CZEFwaS5jbGVhckNTUyA9IGZ1bmN0aW9uIChpZCkge1xuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQoaWQpKTtcbn07XG5cbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXG4vL2lkID0gaWQgb2YgZWxlbWVudFxuLy9jc3MgPSBjdXN0b20gY3NzXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xuICAgIERPTS5hZGRTY3JpcHQoRE9NLmVzY2FwZUlEKGlkKSwgdXJsKTtcbn07XG5cbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgRE9NLnJlbW92ZVNjcmlwdChET00uZXNjYXBlSUQoaWQpKTtcbn07XG5cbi8vR2V0IGFub3RoZXIgcGx1Z2luXG4vL25hbWUgPSBuYW1lIG9mIHBsdWdpblxuQmRBcGkuZ2V0UGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAoYmRwbHVnaW5zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBiZHBsdWdpbnNbbmFtZV0ucGx1Z2luO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbi8vR2V0IEJldHRlckRpc2NvcmQgQ29yZVxuQmRBcGkuZ2V0Q29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRpb24gTm90aWNlXCIsIGBCZEFwaS5nZXRDb3JlKCkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5gKTtcbiAgICByZXR1cm4gbWFpbkNvcmU7XG59O1xuXG4vKipcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgbW9kYWwuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gYSBzdHJpbmcgb2YgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBtb2RhbFxuICovXG5CZEFwaS5hbGVydCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIHtjYW5jZWxUZXh0OiBudWxsfSk7XG59O1xuXG4vKipcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxuICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxuICovXG5CZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xufTtcblxuLy9TaG93IHRvYXN0IGFsZXJ0XG5CZEFwaS5zaG93VG9hc3QgPSBmdW5jdGlvbihjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICBVdGlscy5zaG93VG9hc3QoY29udGVudCwgb3B0aW9ucyk7XG59O1xuXG4vLyBGaW5kcyBtb2R1bGVcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGZpbHRlcik7XG59O1xuXG4vLyBGaW5kcyBtb2R1bGVcbkJkQXBpLmZpbmRBbGxNb2R1bGVzID0gZnVuY3Rpb24oZmlsdGVyKSB7XG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEFsbChmaWx0ZXIpO1xufTtcblxuLy8gRmluZHMgbW9kdWxlXG5CZEFwaS5maW5kTW9kdWxlQnlQcm9wcyA9IGZ1bmN0aW9uKC4uLnByb3BzKSB7XG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhwcm9wcyk7XG59O1xuXG5CZEFwaS5maW5kTW9kdWxlQnlQcm90b3R5cGVzID0gZnVuY3Rpb24oLi4ucHJvdG9zKSB7XG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5UHJvdG90eXBlcyhwcm90b3MpO1xufTtcblxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUobmFtZSk7XG59O1xuXG4vLyBHZXRzIHJlYWN0IGluc3RhbmNlXG5CZEFwaS5nZXRJbnRlcm5hbEluc3RhbmNlID0gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgbm9kZSA9IG5vZGVbMF07XG4gICAgcmV0dXJuIEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShub2RlKTtcbn07XG5cbi8vIEdldHMgZGF0YVxuQmRBcGkubG9hZERhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcbn07XG5cbkJkQXBpLmdldERhdGEgPSBCZEFwaS5sb2FkRGF0YTtcblxuLy8gU2V0cyBkYXRhXG5CZEFwaS5zYXZlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSwgZGF0YSkge1xuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIGRhdGEpO1xufTtcblxuQmRBcGkuc2V0RGF0YSA9IEJkQXBpLnNhdmVEYXRhO1xuXG4vLyBEZWxldGVzIGRhdGFcbkJkQXBpLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcbiAgICByZXR1cm4gRGF0YVN0b3JlLmRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcbn07XG5cbi8vIFBhdGNoZXMgb3RoZXIgZnVuY3Rpb25zXG5CZEFwaS5tb25rZXlQYXRjaCA9IGZ1bmN0aW9uKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gVXRpbHMubW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucyk7XG59O1xuXG4vLyBFdmVudCB3aGVuIGVsZW1lbnQgaXMgcmVtb3ZlZFxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gVXRpbHMub25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKTtcbn07XG5cbi8vIFdyYXBzIGZ1bmN0aW9uIGluIHRyeS4uY2F0Y2hcbkJkQXBpLnN1cHByZXNzRXJyb3JzID0gZnVuY3Rpb24obWV0aG9kLCBtZXNzYWdlKSB7XG4gICAgcmV0dXJuIFV0aWxzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XG59O1xuXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxuQmRBcGkudGVzdEpTT04gPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIFV0aWxzLnRlc3RKU09OKGRhdGEpO1xufTtcblxuQmRBcGkuaXNQbHVnaW5FbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiAhIXBsdWdpbkNvb2tpZVtuYW1lXTtcbn07XG5cbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiAhIXRoZW1lQ29va2llW25hbWVdO1xufTtcblxuQmRBcGkuaXNTZXR0aW5nRW5hYmxlZCA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmV0dXJuICEhc2V0dGluZ3NDb29raWVbaWRdO1xufTtcblxuQmRBcGkuZW5hYmxlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIHRydWUpO1xufTtcblxuQmRBcGkuZGlzYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCBmYWxzZSk7XG59O1xuXG5CZEFwaS50b2dnbGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgIXNldHRpbmdzQ29va2llW2lkXSk7XG59O1xuXG4vLyBHZXRzIGRhdGFcbkJkQXBpLmdldEJERGF0YSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XG59O1xuXG4vLyBTZXRzIGRhdGFcbkJkQXBpLnNldEJERGF0YSA9IGZ1bmN0aW9uKGtleSwgZGF0YSkge1xuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0QkREYXRhKGtleSwgZGF0YSk7XG59O1xuXG5cblxuY29uc3QgbWFrZUFkZG9uQVBJID0gKGNvb2tpZSwgbGlzdCwgbWFuYWdlcikgPT4gbmV3IGNsYXNzIEFkZG9uQVBJIHtcblxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIG1hbmFnZXIuZm9sZGVyO31cblxuICAgIGlzRW5hYmxlZChuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIWNvb2tpZVtuYW1lXTtcbiAgICB9XG5cbiAgICBlbmFibGUobmFtZSkge1xuICAgICAgICByZXR1cm4gbWFuYWdlci5lbmFibGUobmFtZSk7XG4gICAgfVxuXG4gICAgZGlzYWJsZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmRpc2FibGUobmFtZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKG5hbWUpIHtcbiAgICAgICAgaWYgKGNvb2tpZVtuYW1lXSkgdGhpcy5kaXNhYmxlKG5hbWUpO1xuICAgICAgICBlbHNlIHRoaXMuZW5hYmxlKG5hbWUpO1xuICAgIH1cblxuICAgIHJlbG9hZChuYW1lKSB7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyLnJlbG9hZChuYW1lKTtcbiAgICB9XG5cbiAgICBnZXQobmFtZSkge1xuICAgICAgICBpZiAobGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgaWYgKGxpc3RbbmFtZV0ucGx1Z2luKSByZXR1cm4gbGlzdFtuYW1lXS5wbHVnaW47XG4gICAgICAgICAgICByZXR1cm4gbGlzdFtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRBbGwoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhsaXN0KS5tYXAoayA9PiB0aGlzLmdldChrKSkuZmlsdGVyKGEgPT4gYSk7XG4gICAgfVxufTtcblxuQmRBcGkuUGx1Z2lucyA9IG1ha2VBZGRvbkFQSShwbHVnaW5Db29raWUsIGJkcGx1Z2lucywgcGx1Z2luTW9kdWxlKTtcbkJkQXBpLlRoZW1lcyA9IG1ha2VBZGRvbkFQSSh0aGVtZUNvb2tpZSwgYmR0aGVtZXMsIHRoZW1lTW9kdWxlKTtcblxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7XG5cbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CZEFwaSA9IEJkQXBpIiwiLyogQkRFdmVudHMgKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQkRFdmVudHMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkJERXZlbnRzID0gdGhpc1xuICAgIH1cbiAgICBkaXNwYXRjaChldmVudE5hbWUsIC4uLmFyZ3MpIHt0aGlzLmVtaXQoZXZlbnROYW1lLCAuLi5hcmdzKTt9XG4gICAgb2ZmKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pIHt0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pO31cbn07IiwiLyoqXG4gKiBDcmVkaXRzIHRvIEBoZWxsYm91bmQxMzM3IG9uIGdpdGh1YiBmb3IgdGhlIGNzc1xuICovXG5cbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi9kb210b29sc1wiXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxuXG5sZXQgc2VsZWN0b3JzXG5jb25zdCByZW1vdmVEYSA9IFV0aWxzLnJlbW92ZURhXG5mdW5jdGlvbiBnZXRTZWxlY3RvcnMoKXtcbiAgICBsZXQgc3RhbmRhcmRTaWRlYmFyVmlldyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdXG4gICAgaWYoIXN0YW5kYXJkU2lkZWJhclZpZXcpcmV0dXJuIG51bGxcbiAgICBsZXQgZGVmYXVsdENsYXNzTmFtZSA9IHJlbW92ZURhKHN0YW5kYXJkU2lkZWJhclZpZXcuc3RhbmRhcmRTaWRlYmFyVmlldylcbiAgICBsZXQgc2VsZWN0cyA9IFtdXG4gICAgbGV0IHVzZXJTZXR0aW5nc0FjY291bnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyU2V0dGluZ3NBY2NvdW50KVswXVxuICAgIGNvbnN0IGNoaWxkcmVuID0gQkRNb2R1bGVzLmdldChlID0+IHR5cGVvZiBlLmNoaWxkcmVuID09PSBcInN0cmluZ1wiKVswXVxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAucGF5bWVudC1pbmZvIC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlc2NyaXB0aW9uICYmIHR5cGVvZiBlLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiICYmIGUuZGVzY3JpcHRpb24uaW5jbHVkZXMoXCJmb3JtVGV4dFwiKSlbMF0uZGVzY3JpcHRpb24pfWApXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnBheW1lbnRTb3VyY2VSb3cpWzBdLnBheW1lbnRTb3VyY2VSb3cpfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdWJUZXh0ICYmIGUuZGVzY3JpcHRpb25XcmFwcGVyKVswXS5zdWJUZXh0KX1gKVxuICAgIGlmKHVzZXJTZXR0aW5nc0FjY291bnQpe1xuICAgICAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEodXNlclNldHRpbmdzQWNjb3VudC51c2VyU2V0dGluZ3NBY2NvdW50KX0gZGl2Om50aC1jaGlsZCgyKT5kaXY6bnRoLWNoaWxkKDIpPi4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnZpZXdCb2R5KVswXS52aWV3Qm9keSl9YClcbiAgICAgICAgc2VsZWN0cy5wdXNoKGAuJHtyZW1vdmVEYSh1c2VyU2V0dGluZ3NBY2NvdW50LnVzZXJTZXR0aW5nc1NlY3VyaXR5KX0gLiR7cmVtb3ZlRGEoY2hpbGRyZW4uY2hpbGRyZW4pfSA+IGRpdjpudGgtY2hpbGQoMilgKVxuICAgIH1cbiAgICBjb25zb2xlLmxvZyhzZWxlY3RzKVxuICAgIHJldHVybiBzZWxlY3RzXG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCbHVyUHJpdmF0ZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICB9XG5cbiAgICBlbmFibGUoKXtcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXG4gICAgICAgIHNlbGVjdG9ycyA9IHNlbGVjdG9ycyB8fCBnZXRTZWxlY3RvcnMoKVxuXG4gICAgICAgIGlmKCFzZWxlY3RvcnMpY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIHNlbGVjdG9ycyB0byBibHVyIHBlcnNvbm5hbCBpbmZvcm1hdGlvbnMuXCIpKVxuICAgICAgICBET01Ub29scy5hZGRTdHlsZShcImJsdXJQcml2YXRlXCIsIGBcbiR7c2VsZWN0b3JzLmpvaW4oXCIsIFwiKX0ge1xuICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41Myk7XG4gICAgZmlsdGVyOiBibHVyKDRweCk7XG4gICAgb3BhY2l0eTogLjg7XG59XG5cbiR7c2VsZWN0b3JzLm1hcChlID0+IGUrXCI6aG92ZXJcIikuam9pbihcIiwgXCIpfSAge1xuICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBjdWJpYy1iZXppZXIoLjU1LC4wOSwuNjgsLjUzKTtcbiAgICBmaWx0ZXI6IG5vbmU7XG4gICAgb3BhY2l0eTogMTtcbn1gKVxuICAgIH1cblxuICAgIGRpc2FibGUoKXtcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICAgICAgRE9NVG9vbHMucmVtb3ZlU3R5bGUoXCJibHVyUHJpdmF0ZVwiKVxuICAgIH1cbn0iLCJpbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcblxuY29uc3Qgbm9ybWFsaXplZFByZWZpeCA9IFwiZGFcIjtcbmNvbnN0IHJhbmRDbGFzcyA9IG5ldyBSZWdFeHAoYF4oPyEke25vcm1hbGl6ZWRQcmVmaXh9LSkoKD86W0EtWmEtel18WzAtOV18LSkrKS0oPzpbQS1aYS16XXxbMC05XXwtfF8pezZ9JGApO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ2xhc3NOb3JtYWxpemVyIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQ2xhc3NOb3JtYWxpemVyID0gdGhpc1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMucmV2ZXJ0RWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAodGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMubm9ybWFsaXplRWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucGF0Y2hET01NZXRob2RzKCk7XG4gICAgfVxuXG4gICAgcGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVucGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvdWxkSWdub3JlKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKFwicHhcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJjaFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImVtXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwibXNcIikpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcImxheWVyQ29udGFpbmVyLVwiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiI1wiKSAmJiAodmFsdWUubGVuZ3RoID09IDcgfHwgdmFsdWUubGVuZ3RoID09IDQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwiY2FsYyhcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJyZ2JhXCIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG1vZHVsZUZpbHRlcihtb2R1bGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChtb2R1bGUuX19lc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG1vZHVsZSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBtb2R1bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW2Jhc2VDbGFzc05hbWVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3BsaXQoXCItXCIpLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdCh2YWx1ZS5zcGxpdChcIiBcIilbMF0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwYXRjaENsYXNzTW9kdWxlKGNvbXBvbmVudE5hbWUsIGNsYXNzTmFtZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IG5vcm1hbENsYXNzLm1hdGNoKHJhbmRDbGFzcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2gubGVuZ3RoIHx8IG1hdGNoLmxlbmd0aCA8IDIpIGNvbnRpbnVlOyAvLyBTaG91bGRuJ3QgZXZlciBoYXBwZW4gc2luY2UgdGhleSBwYXNzZWQgdGhlIG1vZHVsZUZpbHRlciwgYnV0IHlvdSBuZXZlciBrbm93XG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2hbMV0uc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV0gKz0gYCAke2NvbXBvbmVudE5hbWV9LSR7Y2FtZWxDYXNlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gY2xhc3NOYW1lcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgbmV3U3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbENsYXNzLnN0YXJ0c1dpdGgoYCR7Y29tcG9uZW50TmFtZX0tYCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG5ld1N0cmluZyArPSBgICR7bm9ybWFsQ2xhc3N9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV0gPSBuZXdTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbm9ybWFsaXplRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XG4gICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBjbGFzc2VzW2NdLm1hdGNoKHJhbmRDbGFzcylbMV07XG4gICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG1hdGNoLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWxlbWVudC5jaGlsZHJlbikgdGhpcy5ub3JtYWxpemVFbGVtZW50KGNoaWxkKTtcbiAgICB9XG5cbiAgICByZXZlcnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG4gICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSB0aGlzLnJldmVydEVsZW1lbnQoZWxlbWVudC5jaGlsZHJlblswXSk7XG4gICAgICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xuICAgICAgICBjb25zdCB0b1JlbW92ZSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRvUmVtb3ZlKTtcbiAgICB9XG5cbiAgICBwYXRjaERPTU1ldGhvZHMoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucztcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICAgICAgICAvLyBjb25zdCB0b2tlbnMgPSB0b2tlbi5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShjb250YWlucywgdGhpcywgW3Rva2VuLnNwbGl0KFwiIFwiKVswXV0pO1xuICAgICAgICAgICAgLy8gcmV0dXJuIHRva2Vucy5ldmVyeSh0ID0+IGNvbnRhaW5zLmNhbGwodGhpcywgdCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGFkZCA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkO1xuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoYWRkLCB0aGlzLCB0b2tlbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlO1xuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocmVtb3ZlLCB0aGlzLCB0b2tlbnMpO1xuICAgICAgICB9O1xuICAgIH1cblxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29sb3JlZFRleHQge1xyXG4gICAgaW5qZWN0Q29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsQ29sb3JlZFRleHQpIHJldHVybjtcclxuICAgICAgICBpZiAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbENvbG9yZWRUZXh0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcyB8fCAhcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlQ29udGVudCA9IHByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2VDb250ZW50LnR5cGUgfHwgIW1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSB8fCBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuZGlzcGxheU5hbWUgIT0gXCJNZXNzYWdlQ29udGVudFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVHlwZSA9IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZTtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsVHlwZS5fX29yaWdpbmFsTWV0aG9kKSByZXR1cm47IC8vIERvbid0IHBhdGNoIGFnYWluXHJcbiAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSA9IGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsVHlwZShwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb2xlQ29sb3IgPSBzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy03XCJdID8gcHJvcHMubWVzc2FnZS5jb2xvclN0cmluZyB8fCBcIlwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLnN0eWxlID0ge2NvbG9yOiByb2xlQ29sb3J9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbFR5cGU7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLCBvcmlnaW5hbFR5cGUpO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lTWFya3VwID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXS5tYXJrdXBcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiK2NsYXNzTmFtZU1hcmt1cC5zcGxpdChcIiBcIilbMF0pLmZvckVhY2goZWxlbSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW0uc3R5bGUuc2V0UHJvcGVydHkoXCJjb2xvclwiLCBcIlwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge2JkQ29uZmlnLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgeyBlbmNyeXB0U2V0dGluZ3NDYWNoZSwgZGVjcnlwdFNldHRpbmdzQ2FjaGUsIHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4vcGx1Z2luQ2VydGlmaWVyXCI7XG5pbXBvcnQgKiBhcyBlbGVjdHJvbiBmcm9tIFwiZWxlY3Ryb25cIlxuXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIikuTW9kdWxlO1xuTW9kdWxlLmdsb2JhbFBhdGhzLnB1c2gocGF0aC5yZXNvbHZlKGVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKFwiTElHSFRDT1JEX0dFVF9BUFBfUEFUSFwiKSwgXCJub2RlX21vZHVsZXNcIikpO1xuY2xhc3MgTWV0YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiTWV0YUVycm9yXCI7XG4gICAgfVxufVxuY29uc3Qgb3JpZ2luYWxKU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuanNcIl07XG5jb25zdCBvcmlnaW5hbENTU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID8gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA6ICgpID0+IHtyZXR1cm4gbnVsbDt9O1xuY29uc3Qgc3BsaXRSZWdleCA9IC9bXlxcU1xcclxcbl0qPyg/OlxcclxcbnxcXG4pW15cXFNcXHJcXG5dKj9cXCpbXlxcU1xcclxcbl0/LztcbmNvbnN0IGVzY2FwZWRBdFJlZ2V4ID0gL15cXFxcQC87XG5cbmV4cG9ydCBsZXQgYWRkb25DYWNoZSA9IHt9XG5cbmxldCBoYXNQYXRjaGVkID0gZmFsc2VcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb250ZW50TWFuYWdlciB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy53YXRjaGVycyA9IHt9O1xuICAgIH1cblxuICAgIHBhdGNoRXh0ZW5zaW9ucygpe1xuICAgICAgICBpZihoYXNQYXRjaGVkKXJldHVyblxuICAgICAgICBoYXNQYXRjaGVkID0gdHJ1ZVxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuanNcIl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKFwicGx1Z2luXCIpO1xuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInRoZW1lXCIpO1xuICAgIH1cblxuICAgIGdldCBwbHVnaW5zRm9sZGVyKCkge3JldHVybiB0aGlzLl9wbHVnaW5zRm9sZGVyIHx8ICh0aGlzLl9wbHVnaW5zRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwicGx1Z2lucy9cIikpKTt9XG4gICAgZ2V0IHRoZW1lc0ZvbGRlcigpIHtyZXR1cm4gdGhpcy5fdGhlbWVzRm9sZGVyIHx8ICh0aGlzLl90aGVtZXNGb2xkZXIgPSBmcy5yZWFscGF0aFN5bmMocGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoICsgXCJ0aGVtZXMvXCIpKSk7fVxuXG4gICAgbG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKXtcbiAgICAgICAgaWYodHlwZW9mIGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIikgIT09IFwic3RyaW5nXCIpe1xuICAgICAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShcInt9XCIpKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlID0gSlNPTi5wYXJzZShkZWNyeXB0U2V0dGluZ3NDYWNoZShkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIpKSlcbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKFwie31cIikpXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZSA9IHt9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMoYWRkb25DYWNoZSlcbiAgICAgICAgLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFkZG9uQ2FjaGVba2V5XVxuICAgICAgICAgICAgaWYoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlyZXR1cm4gZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxuXG4gICAgICAgICAgICBsZXQgcHJvcHMgPSBbe1xuICAgICAgICAgICAgICAgIGtleTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcInJlc3VsdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiaGFzaFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCJcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgICBmb3IobGV0IHByb3Agb2YgcHJvcHMpe1xuICAgICAgICAgICAgICAgIGlmKCEocHJvcC5rZXkgaW4gdmFsdWUpIHx8IHR5cGVvZiB2YWx1ZVtwcm9wLmtleV0gIT09IHByb3AudHlwZSl7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodmFsdWUuaGFzaCAhPT0ga2V5KXtcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih2YWx1ZS5yZXN1bHQuc3VzcGVjdCl7IC8vIHJlZmV0Y2ggZnJvbSByZW1vdGUgdG8gYmUgc3VyZSB5b3UncmUgdXAgdG8gZGF0ZS5cbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuc2F2ZUFkZG9uQ2FjaGUoKVxuICAgIH1cblxuICAgIHNhdmVBZGRvbkNhY2hlKCl7XG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoSlNPTi5zdHJpbmdpZnkoYWRkb25DYWNoZSkpKVxuICAgIH1cblxuICAgIHdhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xuICAgICAgICBpZiAodGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0pIHJldHVybjtcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSBjb250ZW50VHlwZSA9PT0gXCJwbHVnaW5cIjtcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdID0gZnMud2F0Y2goYmFzZUZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmICghZXZlbnRUeXBlIHx8ICFmaWxlbmFtZSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoZmlsZUVuZGluZykpIHJldHVybjtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVOT0VOVFwiKSByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHJldHVybiBwbHVnaW5Nb2R1bGUudW5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhlbWVNb2R1bGUudW5sb2FkVGhlbWUoZmlsZW5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTtcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RhdHMubXRpbWUuZ2V0VGltZSgpKSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJyZW5hbWVcIikge1xuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikge1xuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLnJlbG9hZFBsdWdpbihmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5yZWxvYWRUaGVtZShmaWxlbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVud2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0pIHJldHVybjtcbiAgICAgICAgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0uY2xvc2UoKTtcbiAgICAgICAgZGVsZXRlIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdO1xuICAgIH1cblxuICAgIGV4dHJhY3RNZXRhKGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcbiAgICAgICAgY29uc3QgaGFzT2xkTWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8vTUVUQVwiKTtcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShjb250ZW50KTtcbiAgICAgICAgY29uc3QgaGFzTmV3TWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8qKlwiKTtcbiAgICAgICAgaWYgKGhhc05ld01ldGEpIHJldHVybiB0aGlzLnBhcnNlTmV3TWV0YShjb250ZW50KTtcbiAgICAgICAgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XG4gICAgfVxuXG4gICAgcGFyc2VPbGRNZXRhKGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XG4gICAgICAgIGNvbnN0IHJhd01ldGEgPSBtZXRhLnN1YnN0cmluZyhtZXRhLmxhc3RJbmRleE9mKFwiLy9NRVRBXCIpICsgNiwgbWV0YS5sYXN0SW5kZXhPZihcIiovL1wiKSk7XG4gICAgICAgIGlmIChtZXRhLmluZGV4T2YoXCJNRVRBXCIpIDwgMCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFV0aWxzLnRlc3RKU09OKHJhd01ldGEpO1xuICAgICAgICBpZiAoIXBhcnNlZCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgY291bGQgbm90IGJlIHBhcnNlZC5cIik7XG4gICAgICAgIGlmICghcGFyc2VkLm5hbWUpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIG1pc3NpbmcgbmFtZSBkYXRhLlwiKTtcbiAgICAgICAgcGFyc2VkLmZvcm1hdCA9IFwianNvblwiO1xuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cblxuICAgIHBhcnNlTmV3TWV0YShjb250ZW50KSB7XG4gICAgICAgIGNvbnN0IGJsb2NrID0gY29udGVudC5zcGxpdChcIi8qKlwiLCAyKVsxXS5zcGxpdChcIiovXCIsIDEpWzBdO1xuICAgICAgICBjb25zdCBvdXQgPSB7fTtcbiAgICAgICAgbGV0IGZpZWxkID0gXCJcIjtcbiAgICAgICAgbGV0IGFjY3VtID0gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGJsb2NrLnNwbGl0KHNwbGl0UmVnZXgpKSB7XG4gICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBcIkBcIiAmJiBsaW5lLmNoYXJBdCgxKSAhPT0gXCIgXCIpIHtcbiAgICAgICAgICAgICAgICBvdXRbZmllbGRdID0gYWNjdW07XG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGxpbmUuaW5kZXhPZihcIiBcIik7XG4gICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnN1YnN0cigxLCBsIC0gMSk7XG4gICAgICAgICAgICAgICAgYWNjdW0gPSBsaW5lLnN1YnN0cihsICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY2N1bSArPSBcIiBcIiArIGxpbmUucmVwbGFjZShcIlxcXFxuXCIsIFwiXFxuXCIpLnJlcGxhY2UoZXNjYXBlZEF0UmVnZXgsIFwiQFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvdXRbZmllbGRdID0gYWNjdW0udHJpbSgpO1xuICAgICAgICBkZWxldGUgb3V0W1wiXCJdO1xuICAgICAgICBvdXQuZm9ybWF0ID0gXCJqc2RvY1wiO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGdldENvbnRlbnRSZXF1aXJlKHR5cGUpIHtcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gaXNQbHVnaW4gPyBvcmlnaW5hbEpTUmVxdWlyZSA6IG9yaWdpbmFsQ1NTUmVxdWlyZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG1vZHVsZSwgZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHNlbGYucGx1Z2luc0ZvbGRlciA6IHNlbGYudGhlbWVzRm9sZGVyO1xuICAgICAgICAgICAgY29uc3QgcG9zc2libGVQYXRoID0gcGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKTtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwb3NzaWJsZVBhdGgpIHx8IGZpbGVuYW1lICE9PSBmcy5yZWFscGF0aFN5bmMocG9zc2libGVQYXRoKSkgcmV0dXJuIFJlZmxlY3QuYXBwbHkob3JpZ2luYWxSZXF1aXJlLCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBVdGlscy5zdHJpcEJPTShjb250ZW50KTtcblxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlbmFtZSk7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc2VsZi5leHRyYWN0TWV0YShjb250ZW50KTtcbiAgICAgICAgICAgIG1ldGEuZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIG1ldGEuYWRkZWQgPSBzdGF0cy5hdGltZU1zO1xuICAgICAgICAgICAgbWV0YS5tb2RpZmllZCA9IHN0YXRzLm10aW1lTXM7XG4gICAgICAgICAgICBtZXRhLnNpemUgPSBzdGF0cy5zaXplO1xuICAgICAgICAgICAgaWYgKCFpc1BsdWdpbikge1xuICAgICAgICAgICAgICAgIG1ldGEuY3NzID0gY29udGVudDtcbiAgICAgICAgICAgICAgICBpZiAobWV0YS5mb3JtYXQgPT0gXCJqc29uXCIpIG1ldGEuY3NzID0gbWV0YS5jc3Muc3BsaXQoXCJcXG5cIikuc2xpY2UoMSkuam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gYG1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1BsdWdpbikge1xuICAgICAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBtb2R1bGUuZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpZEV4cG9ydCA9ICFVdGlscy5pc0VtcHR5KG1vZHVsZS5leHBvcnRzKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlkRXhwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGEudHlwZSA9IG1vZHVsZS5leHBvcnRzO1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1ldGE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMud2FybihcIk1vZHVsZSBOb3QgRXhwb3J0ZWRcIiwgYCR7bWV0YS5uYW1lfSwgcGxlYXNlIHN0YXJ0IHNldHRpbmcgbW9kdWxlLmV4cG9ydHNgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCArPSBgXFxubW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtcXG5tb2R1bGUuZXhwb3J0cy50eXBlID0gJHttZXRhLmV4cG9ydHMgfHwgbWV0YS5uYW1lfTtgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBmaWxlbmFtZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbWFrZVBsYWNlaG9sZGVyUGx1Z2luKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHtwbHVnaW46IHtcbiAgICAgICAgICAgICAgICBzdGFydDogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgZ2V0TmFtZTogKCkgPT4ge3JldHVybiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZTt9LFxuICAgICAgICAgICAgICAgIGdldEF1dGhvcjogKCkgPT4ge3JldHVybiBcIj8/P1wiO30sXG4gICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246ICgpID0+IHtyZXR1cm4gZGF0YS5tZXNzYWdlID8gZGF0YS5tZXNzYWdlIDogXCJUaGlzIHBsdWdpbiB3YXMgdW5hYmxlIHRvIGJlIGxvYWRlZC4gQ2hlY2sgdGhlIGF1dGhvcidzIHBhZ2UgZm9yIHVwZGF0ZXMuXCI7fSxcbiAgICAgICAgICAgICAgICBnZXRWZXJzaW9uOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lLFxuICAgICAgICAgICAgZmlsZW5hbWU6IGRhdGEuZmlsZW5hbWUsXG4gICAgICAgICAgICBzb3VyY2U6IGRhdGEuc291cmNlID8gZGF0YS5zb3VyY2UgOiBcIlwiLFxuICAgICAgICAgICAgd2Vic2l0ZTogZGF0YS53ZWJzaXRlID8gZGF0YS53ZWJzaXRlIDogXCJcIlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jIGxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZih0eXBlKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xuXG4gICAgICAgIGlmKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRmlsZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICAgICAgfSwgKGhhc2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6IGhhc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIHRydWUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYocmVzdWx0KXtcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlW3Jlc3VsdC5oYXNoXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICBoYXNoOiByZXN1bHQuaGFzaCxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlQWRkb25DYWNoZSgpXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0LnN1c3BlY3Qpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiVGhpcyBwbHVnaW4gbWlnaHQgYmUgZGFuZ2Vyb3VzIChcIityZXN1bHQuaGFybStcIikuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiVGhpcyBwbHVnaW4gbWlnaHQgYmUgZGFuZ2Vyb3VzIChcIityZXN1bHQuaGFybStcIikuXCIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO31cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cbiAgICAgICAgY29uc3QgY29udGVudCA9IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xuICAgICAgICBpZighY29udGVudC5uYW1lKXJldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNhbm5vdCBlc2NhcGUgdGhlIElELlwiLCBlcnJvcjogbmV3IEVycm9yKFwiQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlcGxhY2UnIG9mIHVuZGVmaW5lZFwiKX1cbiAgICAgICAgY29udGVudC5pZCA9IFV0aWxzLmVzY2FwZUlEKGNvbnRlbnQubmFtZSk7XG4gICAgICAgIC8vaWYoIWlkKXJldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkludmFsaWQgSURcIiwgZXJyb3I6IG5ldyBFcnJvcihcIlBsZWFzZSBmaXggdGhlIG5hbWUgb2YgXCIrZmlsZW5hbWUrXCIuIEJldHRlckRpc2NvcmQgY2FuJ3QgZXNjYXBlIGFuIElELlwiKX1cbiAgICAgICAgaWYgKGlzUGx1Z2luKSB7XG4gICAgICAgICAgICBpZiAoIWNvbnRlbnQudHlwZSkgcmV0dXJuO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb250ZW50LnBsdWdpbiA9IG5ldyBjb250ZW50LnR5cGUoKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgYmRwbHVnaW5zW2NvbnRlbnQucGx1Z2luLmdldE5hbWUoKV07XG4gICAgICAgICAgICAgICAgYmRwbHVnaW5zW2NvbnRlbnQucGx1Z2luLmdldE5hbWUoKV0gPSBjb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBiZHRoZW1lc1tjb250ZW50Lm5hbWVdO1xuICAgICAgICAgICAgYmR0aGVtZXNbY29udGVudC5uYW1lXSA9IGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9ICAgXG5cbiAgICB1bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZih0eXBlKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVsZXRlIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLmNhY2hlW19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgdW5sb2FkZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fTt9XG4gICAgfVxuXG4gICAgaXNMb2FkZWQoZmlsZW5hbWUsIHR5cGUpIHtcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcbiAgICAgICAgdHJ5IHtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5jYWNoZVtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTt9XG4gICAgICAgIGNhdGNoIChlcnIpIHtyZXR1cm4gZmFsc2U7fVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyByZWxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XG4gICAgICAgIGNvbnN0IGNhbnRVbmxvYWQgPSB0aGlzLnVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xuICAgICAgICBpZiAoY2FudFVubG9hZCkgcmV0dXJuIGNhbnRVbmxvYWQ7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcbiAgICB9XG5cbiAgICBsb2FkTmV3Q29udGVudCh0eXBlKSB7XG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoYmFzZWRpcik7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMaXN0ID0gT2JqZWN0LnZhbHVlcyhpc1BsdWdpbiA/IGJkcGx1Z2lucyA6IGJkdGhlbWVzKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNvbnRlbnRMaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gaXNQbHVnaW4gPyBjLnBsdWdpbi5nZXROYW1lKCkgOiBjLm5hbWUpO1xuICAgICAgICBjb25zdCBhZGRlZCA9IGZpbGVzLmZpbHRlcihmID0+ICFjb250ZW50TGlzdC5maW5kKHQgPT4gdC5maWxlbmFtZSA9PSBmKSAmJiBmLmVuZHNXaXRoKGZpbGVFbmRpbmcpICYmIGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmKSkuaXNGaWxlKCkpO1xuICAgICAgICByZXR1cm4ge2FkZGVkLCByZW1vdmVkfTtcbiAgICB9XG5cbiAgICBhc3luYyBsb2FkQWxsQ29udGVudCh0eXBlKSB7XG4gICAgICAgIHRoaXMucGF0Y2hFeHRlbnNpb25zKClcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoYmFzZWRpcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZWRpciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoZmlsZUVuZGluZykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcbiAgICAgICAgICAgIGlmIChlcnJvcikgZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBsb2FkUGx1Z2lucygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInBsdWdpblwiKTt9XG4gICAgbG9hZFRoZW1lcygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInRoZW1lXCIpO31cbn07XG5cbi8qKlxuICogRG9uJ3QgZXhwb3NlIGNvbnRlbnRNYW5hZ2VyIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcbiAqLyIsImltcG9ydCB7YmRDb25maWcsIG1pblN1cHBvcnRlZFZlcnNpb24sIGJiZFZlcnNpb24sIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbkVycm9ycywgYmR0aGVtZUVycm9ycywgYmJkQ2hhbmdlbG9nLCBkZWZhdWx0Q29va2llLCBjdXJyZW50RGlzY29yZFZlcnNpb24sIGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDLCBsaWdodGNvcmRTZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcblxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvYmRMb2dvXCI7XG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XG5pbXBvcnQgTGlnaHRjb3JkTG9nbyBmcm9tIFwiLi4vc3ZnL0xpZ2h0Y29yZFwiO1xuaW1wb3J0IFBsdWdpbkNlcnRpZmllciBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcbmltcG9ydCBkaXN0YW50LCB7IHV1aWR2NCB9IGZyb20gXCIuL2Rpc3RhbnRcIjtcbmltcG9ydCBFbW9qaU1vZHVsZSBmcm9tIFwiLi9lbW9qaU1vZHVsZVwiXG5pbXBvcnQgKiBhcyBlbGVjdHJvbiBmcm9tIFwiZWxlY3Ryb25cIlxuaW1wb3J0IHYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcblxubGV0IG1ldGhvZHNcbmZ1bmN0aW9uIENvcmUoKSB7fVxuXG5cbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xuICAgIGlmICh0aGlzLmhhc1N0YXJ0ZWQpIHJldHVybjtcbiAgICBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBjb25maWcpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvcmUucHJvdG90eXBlLCBcIm1ldGhvZHNcIiwge1xuICAgIGdldCgpe1xuICAgICAgICByZXR1cm4gbWV0aG9kc1xuICAgIH1cbn0pXG5cbkNvcmUucHJvdG90eXBlLnNldE1ldGhvZHMgPSBmdW5jdGlvbihtKSB7XG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xuICAgIG1ldGhvZHMgPSBtXG59O1xuXG5Db3JlLnByb3RvdHlwZS5pbml0ID0gYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xuICAgIHRoaXMuaGFzU3RhcnRlZCA9IHRydWU7XG5cbiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5mbGF0KSB7XG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmJkVmVyc2lvbiArIFwiIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvbGQgdmVyc2lvbiAoXCIgKyBjdXJyZW50RGlzY29yZFZlcnNpb24gKyBcIikgb2YgRGlzY29yZC4gUGxlYXNlIHVwZGF0ZSB5b3VyIERpc2NvcmQgaW5zdGFsbGF0aW9uIGJlZm9yZSBwcm9jZWVkaW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChiZENvbmZpZy52ZXJzaW9uIDwgbWluU3VwcG9ydGVkVmVyc2lvbikge1xuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJkQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIGJiZFZlcnNpb24gKyBcIikuPGJyPjxicj4gUGxlYXNlIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+R2l0SHViPC9hPlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh3aW5kb3cuRUQpIHtcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggRW5oYW5jZWREaXNjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh3aW5kb3cuV2ViU29ja2V0ICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZSAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUuaW5jbHVkZXMoXCJQYXRjaGVkXCIpKSB7XG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIFBvd2VyY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoQXR0cmlidXRlcy5iaW5kKHRoaXMpLCBcIkxDIFBsdWdpbiBDZXJ0aWZpZXIgUGF0Y2hcIikoKTtcblxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgU2V0dGluZ3NcIik7XG4gICAgdGhpcy5pbml0U2V0dGluZ3MoKTtcblxuICAgIGF3YWl0IHRoaXMuY2hlY2tGb3JHdWlsZHMoKTtcbiAgICBCRFYyLmluaXRpYWxpemUoKTtcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiVXBkYXRpbmcgU2V0dGluZ3NcIik7XG4gICAgc2V0dGluZ3NQYW5lbC5pbml0aWFsaXplU2V0dGluZ3MoKTtcblxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIEFkZG9ucyBDYWNoZVwiKVxuICAgIGF3YWl0IGNvbnRlbnRNYW5hZ2VyLmxvYWRBZGRvbkNlcnRpZmllckNhY2hlKClcblxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFBsdWdpbnNcIik7XG4gICAgYXdhaXQgcGx1Z2luTW9kdWxlLmxvYWRQbHVnaW5zKCk7XG5cbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XG4gICAgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lcygpO1xuXG4gICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIEJ1ZmZlci5mcm9tKERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKSwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZGMtMFwiXSkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idG4uYnRuLWRpc2Nvbm5lY3RcIikuY2xpY2soKTtcbiAgICB9KTtcblxuICAgIFBsdWdpbkNlcnRpZmllci5zdGFydCgpXG5cbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIikubGVuZ3RoKSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIilbMF0ucmVtb3ZlKCk7XG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBNYWluIE9ic2VydmVyXCIpO1xuICAgIHRoaXMuaW5pdE9ic2VydmVyKCk7XG5cbiAgICAvLyBTaG93IGxvYWRpbmcgZXJyb3JzXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSB7XG4gICAgICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xuICAgICAgICBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogYmRwbHVnaW5FcnJvcnMsIHRoZW1lczogYmR0aGVtZUVycm9yc30pO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzVmVyc2lvbiA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJ2ZXJzaW9uXCIpO1xuICAgIGlmIChiYmRWZXJzaW9uID4gcHJldmlvdXNWZXJzaW9uKSB7XG4gICAgICAgIGlmIChiYmRDaGFuZ2Vsb2cpIHRoaXMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7XG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJ2ZXJzaW9uXCIsIGJiZFZlcnNpb24pO1xuICAgIH1cblxuICAgIEVtb2ppTW9kdWxlLnN0YXJ0KClcblxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hTb2NpYWwuYmluZCh0aGlzKSwgXCJCRCBTb2NpYWwgUGF0Y2hcIikoKTtcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRQaWxscy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFBpbGxzIFBhdGNoXCIpKCk7XG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkTGlzdEl0ZW1zLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgTGlzdCBJdGVtcyBQYXRjaFwiKSgpO1xuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFNlcGFyYXRvci5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFNlcGFyYXRvciBQYXRjaFwiKSgpO1xuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZXNzYWdlSGVhZGVyLmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgQ2hhdCBQYXRjaFwiKSgpO1xuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZW1iZXJMaXN0LmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgTWVtYmVyIExpc3QgUGF0Y2hcIikoKTtcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoQXR0YWNobWVudC5iaW5kKHRoaXMpLCBcIkxDIFBsdWdpbiBDZXJ0aWZpZXIgUGF0Y2hcIikoKTtcblxuICAgIGlmKGJkQ29uZmlnLmhhdmVJbnN0YWxsZWREZWZhdWx0KXtcbiAgICAgICAgbGV0IGFsZXJ0ID0gVXRpbHMuYWxlcnQoXCJGaXJzdCBJbnN0YWxsYXRpb25cIiwgXCJBcyBpdCBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaW5zdGFsbCBMaWdodGNvcmQsIFdlIGFkZGVkIHR3byBkZWZhdWx0IHRoZW1lcyBhbmQgb25lIGRlZmF1bHQgcGx1Z2luIGluIHlvdXIgcGx1Z2luL3RoZW1lIGZvbGRlci4gQ2hlY2sgaXQgaW4gdGhlIFBsdWdpbi9UaGVtZSBzZXR0aW5ncy5cIilcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGFsZXJ0Lm9uQ2xvc2UocmVzb2x2ZSlcbiAgICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbG9nbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50ID4gZGl2LnR5cGVXaW5kb3dzLTF6YS1uNy53aXRoRnJhbWUtaGFZbHRJLnRpdGxlQmFyLUFDNHBHVi5ob3Jpem9udGFsUmV2ZXJzZS0zdFJqWTcuZmxleC0xTzFHS1kuZGlyZWN0aW9uUm93UmV2ZXJzZS1tOElqSXEuanVzdGlmeVN0YXJ0LTJOREZ6aS5hbGlnblN0cmV0Y2gtRHBHUGYzLmRhLXR5cGVXaW5kb3dzLmRhLXdpdGhGcmFtZS5kYS10aXRsZUJhci5kYS1ob3Jpem9udGFsUmV2ZXJzZS5kYS1mbGV4LmRhLWRpcmVjdGlvblJvd1JldmVyc2UuZGEtanVzdGlmeVN0YXJ0LmRhLWFsaWduU3RyZXRjaCA+IGRpdi53b3JkbWFya1dpbmRvd3MtMXYwbFlELndvcmRtYXJrLTJpRERmbS5kYS13b3JkbWFya1dpbmRvd3MuZGEtd29yZG1hcmtcIilcbiAgICBpZihsb2dvKXtcbiAgICAgICAgbG9nby5zdHlsZS50b3AgPSBcIjNweFwiXG4gICAgICAgIGxvZ28uaW5uZXJIVE1MID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjEwXCIgd2lkdGg9XCI3MFwiIHZpZXdCb3g9XCIwIDAgNzIuNTQgMTBcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNXB4LCBtYXJnaW4tdG9wOiAxMHB4XCI+XG4gICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNDQuODEsOS42N1Y2LjMzYzAtMS4yMSwyLjEzLTEuNDksMi43OC0uMjhsMi0uODFBMy41MywzLjUzLDAsMCwwLDQ2LjIsM2MtMS45MiwwLTMuODEsMS4xMy0zLjgxLDMuMzNWOS42N2MwLDIuMjEsMS44OSwzLjMzLDMuNzcsMy4zM2EzLjg3LDMuODcsMCwwLDAsMy40NS0yLjE4bC0yLjEyLTFDNDcsMTEuMTcsNDQuODEsMTAuODUsNDQuODEsOS42N1pNMTAuNjgsMTIuODloMi40MVYzLjE3SDEwLjY4Wk03MS43NiwzLjE0SDY4LjE5VjcuMjNMNzAuNTcsOS40di00aDEuMjdjLjgxLDAsMS4yMS40MSwxLjIxLDF2M2MwLC42My0uMzgsMS4wNS0xLjIxLDEuMDVINjguMTh2Mi4zMWgzLjU3YzEuOTIsMCwzLjcyLTEsMy43Mi0zLjJWNi4zOUM3NS40OCw0LjEzLDczLjY4LDMuMTQsNzEuNzYsMy4xNFpNNTQuMjIsM2MtMiwwLTQsMS4xLTQsMy4zNFY5LjY2YzAsMi4yMywyLDMuMzQsNCwzLjM0czMuOTUtMS4xMSwzLjk1LTMuMzRWNi4zNEM1OC4xOSw0LjExLDU2LjIsMyw1NC4yMiwzWm0xLjU1LDYuNjZjMCwuNy0uNzgsMS4wNi0xLjU0LDEuMDZzLTEuNTUtLjM1LTEuNTUtMS4wNlY2LjM0YzAtLjcyLjc1LTEuMSwxLjUtMS4xczEuNTkuMzUsMS41OSwxLjFaTTY2Ljg0LDYuMzRjMC0yLjI5LTEuNTgtMy4yLTMuNTUtMy4ySDU5LjQ2djkuNzNoMi40NVY5Ljc3aC40M2wyLjIyLDMuMDloM0w2NSw5LjUyQzY2LjEzLDkuMTUsNjYuODQsOC4xNCw2Ni44NCw2LjM0Wk02My4zMyw3LjY1SDYxLjkxVjUuNDNoMS40MkExLjExLDEuMTEsMCwxLDEsNjMuMzMsNy42NVpNMjkuODMsMTNoMi40MlYzLjA2SDI5LjgzVjYuNzNsLTMsMFYzLjA5SDI0Ljd2OS43OGgyLjE0VjguNjhsMywwWk0xNy4xNiw5Ljc2VjYuNDJjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MWEzLjU1LDMuNTUsMCwwLDAtMy4zNi0yLjI0Yy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5Ljc2YzAsMi4yMSwyLDMuMTUsMy45LDMuMTVzMy41OC0xLDMuNTgtM1Y3LjU4SDE4Ljc5bDAsMS4zNkgyMC4zdi43N0MyMC4zLDEwLjkyLDE3LjE2LDEwLjk0LDE3LjE2LDkuNzZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0yLjkzIC0zKVwiLz5cbiAgICA8cG9seWdvbiBmaWxsPVwiY3VycmVudENvbG9yXCIgcG9pbnRzPVwiMzUuOTEgMC4wNiAzOC40MyAwLjA2IDM4LjQzIDEuODQgMzUuOTIgMS44MSAzNS45NyAxMCAzMy41NSAxMCAzMy40OSAxLjc1IDMwLjk4IDEuNzQgMzAuOTggMC4wNiAzMy40OSAwLjA2IDM1LjkxIDAuMDZcIi8+XG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjAgOS45NyA2LjUgMTAgNi41IDcuNjMgMi40MSA3LjYzIDIuNDEgMC4yNiAwIDIuMjYgMCA5Ljk3XCIvPlxuPC9zdmc+YFxuICAgIH1cbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0cmlidXRlcyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgIGxldCBhdHRyaWJzUGF0Y2hzID0gW11cbiAgICB0aGlzLmNhbmNlbFBhdGNoQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBhdHRyaWJzUGF0Y2hzLmZvckVhY2goZSA9PiBlKCkpXG4gICAgfVxuXG4gICAgd2hpbGUoIXYyLk1lc3NhZ2VDb21wb25lbnQpYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpXG4gICAgXG4gICAgLy8gVE9ETzogdHJ5IHRvIHBhdGNoIGNvcnJlY3RseSB0aGUgdXNlciBwb3BvdXQgb24gYSBuZXh0IHVwZGF0ZVxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJEaXNjb3JkVGFnXCIpXG4gICAgLnRoZW4oRGlzY29yZFRhZyA9PiB7XG4gICAgICAgIGxldCBEaXNjb3JkVGFnQ29tcCA9IERpc2NvcmRUYWcuZGVmYXVsdFxuICAgICAgICBEaXNjb3JkVGFnLmRlZmF1bHQgPSBmdW5jdGlvbihwcm9wcyl7XG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBEaXNjb3JkVGFnQ29tcChwcm9wcylcblxuICAgICAgICAgICAgbGV0IGlkID0gdXVpZHY0KClcblxuICAgICAgICAgICAgbGV0IGJhZGdlRGl2ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiNXB4XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXG4gICAgICAgICAgICAgICAga2V5OiBcImJhZGdlcy1cIitpZCxcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImluaGVyaXRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbcmV0dXJuVmFsdWVdXG5cbiAgICAgICAgICAgIGlmIChwcm9wcy51c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7IC8vIFJhdWVuemk6IEJhbmRhZ2VkQkQgRGV2ZWxvcGVyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy51c2VyLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IHByb3BzLnVzZXIuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGJhZGdlRGl2KVxuICAgICAgICAgICAgbGV0IGRpdiA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgY2hpbGRyZW4pXG4gICAgICAgICAgICBhcHBseUJhZGdlcyhpZCwgcHJvcHMudXNlciwgZmFsc2UpXG5cbiAgICAgICAgICAgIHJldHVybiBkaXZcbiAgICAgICAgfVxuICAgICAgICBEaXNjb3JkVGFnLmRlZmF1bHQuZGlzcGxheU5hbWUgPSBEaXNjb3JkVGFnQ29tcC5kaXNwbGF5TmFtZVxuICAgIH0pXG5cbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgaWYoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlKXsgLy8gdGhpcyBjYW4gYmUgYSBibG9ja2VkIG1lc3NhZ2UgKG5vdCBvcGVuZWQpXG4gICAgICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wiZGF0YS1tZXNzYWdlLWlkXCJdID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlLmlkXG4gICAgICAgIH1cbiAgICB9fSkpXG4gICAgICAgIC8qXG4gICAgYXR0cmlic1BhdGNocy5wdXNoKFV0aWxzLm1vbmtleVBhdGNoKHYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHNbXCJtZXNzYWdlLWlkXCJdID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlLmlkXG4gICAgfX0pKSovXG59XG5cbkNvcmUucHJvdG90eXBlLmNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBjb25zdCBjaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9YCkubGVuZ3RoID4gMCkgdGltZXNDaGVja2VkKys7XG4gICAgICAgICAgICBjb25zdCBndWlsZCA9IEJEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO1xuICAgICAgICAgICAgZWxzZSBpZiAodGltZXNDaGVja2VkID49IDUwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO1xuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJsb2FkaW5nXCIpIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO30pO1xuICAgIH0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUuaW5qZWN0RXh0ZXJuYWxzID0gYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgLy8gTm8gZXh0ZXJuYWxzXG59O1xuXG5Db3JlLnByb3RvdHlwZS5pbml0U2V0dGluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgRGF0YVN0b3JlLmluaXRpYWxpemUoKTtcbiAgICBpZighRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSl7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIGRlZmF1bHRSUEMpO1xuICAgIH1cbiAgICBpZighRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKXtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIGRlZmF1bHRDb29raWUpO1xuICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNldHRpbmdzUGFuZWwubG9hZFNldHRpbmdzKCk7XG4gICAgICAgIGZvciAoY29uc3Qgc2V0dGluZyBpbiBkZWZhdWx0Q29va2llKSB7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPSBkZWZhdWx0Q29va2llW3NldHRpbmddO1xuICAgICAgICAgICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnByb3RvdHlwZSAmJiBlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zKVxuICAgIC50aGVuKHNldHRpbmdNb2R1bGUgPT4ge1xuXG4gICAgICAgIGxldCBnZXRQcmVkaWNhdGVTZWN0aW9ucyA9IHNldHRpbmdNb2R1bGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnNcbiAgICAgICAgc2V0dGluZ01vZHVsZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9ucyA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gZ2V0UHJlZGljYXRlU2VjdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXG5cbiAgICAgICAgICAgIGlmKCFyZXN1bHRbMV0pcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgaWYocmVzdWx0WzFdLnNlY3Rpb24gPT09IFwiTXkgQWNjb3VudFwiKXsgLy8gdXNlciBzZXR0aW5ncywgbm90IGd1aWxkIHNldHRpbmdzXG4gICAgICAgICAgICAgICAgbGV0IHBvcGVkID0gW11cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcblxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnNldHRpbmdzUGFuZWwucmVuZGVyU2lkZWJhcih0aGlzKSlcblxuICAgICAgICAgICAgICAgIHdoaWxlKHBvcGVkWzBdKXtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocG9wZWQucG9wKCkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG4gICAgfSlcbn07XG5cblxubGV0IGNsYXNzTmFtZUxheWVyXG5sZXQgY2xhc3NOYW1lU29jaWFsTGlua3NcbmxldCBjbGFzc05hbWVNb2RhbFxuXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWFpbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbWxlbiA9IG11dGF0aW9ucy5sZW5ndGg7IGkgPCBtbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW5Nb2R1bGUgIT09IFwidW5kZWZpbmVkXCIpIHBsdWdpbk1vZHVsZS5yYXdPYnNlcnZlcihtdXRhdGlvbik7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBub3RoaW5nIGFkZGVkLCBza2lwXG4gICAgICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XG5cbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVMYXllciljbGFzc05hbWVMYXllciA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lU29jaWFsTGlua3MpY2xhc3NOYW1lU29jaWFsTGlua3MgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLnNvY2lhbExpbmtzICYmIHR5cGVvZiBlLnNvY2lhbExpbmtzID09PSBcInN0cmluZ1wiKVswXS5zb2NpYWxMaW5rc1xuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZU1vZGFsKWNsYXNzTmFtZU1vZGFsID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5tb2RhbCAmJiB0eXBlb2YgZS5tb2RhbCA9PT0gXCJzdHJpbmdcIiAmJiBlLmlubmVyICYmIHR5cGVvZiBlLmlubmVyID09PSBcInN0cmluZ1wiICYmICFlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSlbMF0ubW9kYWxcblxuICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyKSkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIikgPT09IFwiR1VJTERfU0VUVElOR1NcIil7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVTb2NpYWxMaW5rcykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudEVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSAmJiBub2RlLnF1ZXJ5U2VsZWN0b3IoXCIjYWNlX3NldHRpbmdzbWVudVwiKSkgbm9kZS5pZCA9IFwiYWNlX3NldHRpbmdzbWVudV9jb250YWluZXJcIjtcblxuICAgICAgICAgICAgLy8gRW1vamkgUGlja2VyXG4gICAgICAgICAgICAvL25vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImVtb2ppUGlja2VyLTNtMVMtalwiKS5sZW5ndGggJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhbmltYXRvckxlZnQtMUVReFUwXCIpXG4gICAgICAgICAgICAvL2lmIChub2RlLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVMYXllcjIpICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVFbW9qaVBpY2tlcikubGVuZ3RoICAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLlwiK2NsYXNzTmFtZUVtb2ppUGlja2VyKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVBbmltYXRvckxlZnQpKSBxdWlja0Vtb3RlTWVudS5vYnNDYWxsYmFjayhub2RlKTtcblxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBtYWluT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnNob3dDaGFuZ2Vsb2dNb2RhbCA9IGZ1bmN0aW9uKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwob3B0aW9ucyk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5hbGVydCA9IGZ1bmN0aW9uKHRpdGxlLCBjb250ZW50KSB7XG4gICAgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoU29jaWFsID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc29jaWFsUGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBUYWJCYXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIlRhYkJhclwiKTtcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICBpZiAoIVRhYkJhcikgcmV0dXJuO1xuICAgIHRoaXMuc29jaWFsUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChUYWJCYXIucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoIHx8IGNoaWxkcmVuLmxlbmd0aCA8IDMpIHJldHVybjtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDNdLnR5cGUuZGlzcGxheU5hbWUgIT09IFwiU2VwYXJhdG9yXCIpIHJldHVybjtcbiAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xuICAgICAgICBpZiAoQW5jaG9yKSB7XG4gICAgICAgICAgICBsZXQgc29jaWFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNvY2lhbExpbmtzKVswXVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlO1xuICAgICAgICAgICAgY29uc3QgbmV3T25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWwoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmRcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkRcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlID0gbmV3T25lO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIGNsYXNzTmFtZUNvbG9yTXV0ZWQsXG4gICAgICAgICAgICBzaXplcyxcbiAgICAgICAgICAgIGNsYXNzTmFtZVZlcnNpb25IYXNoXG4gICAgICAgIF0gPSBbXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvck11dGVkKVswXS5jb2xvck11dGVkLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnNpb25IYXNoKVswXS52ZXJzaW9uSGFzaFxuICAgICAgICBdXG5cbiAgICAgICAgY29uc3QgdmVyc2lvbkhhc2ggPSBgKCR7YmRDb25maWcuaGFzaCA/IGJkQ29uZmlnLmhhc2guc3Vic3RyaW5nKDAsIDcpIDogYmRDb25maWcuYnJhbmNofSlgO1xuICAgICAgICBjb25zdCBidWlsZEluZm8gPSBlbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9HRVRfQlVJTERfSU5GT1NcIilcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbCA9IFtcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBgJHtjbGFzc05hbWVDb2xvck11dGVkfSAke3NpemVzLnNpemUxMn1gfSwgYExpZ2h0Y29yZCAke2J1aWxkSW5mby52ZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCBgKCR7KGJ1aWxkSW5mby5jb21taXQgfHwgXCJVbmtub3duXCIpLnNsaWNlKDAsIDcpfSlgKSksXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBCQkQgJHtiYmRWZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCB2ZXJzaW9uSGFzaCkpXG4gICAgICAgIF1cbiAgICAgICAgXG5cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxWZXJzaW9ucyA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGU7XG4gICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsVmVyc2lvbnMoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5zcGxpY2UoMSwgMCwgYWRkaXRpb25hbCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xuICAgICAgICB9O1xuICAgIH19KTtcbn07XG5cbmNvbnN0IGdldEd1aWxkQ2xhc3NlcyA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGd1aWxkc1dyYXBwZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIndyYXBwZXJcIiwgXCJ1bnJlYWRNZW50aW9uc0JhclwiKTtcbiAgICBjb25zdCBndWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XG4gICAgY29uc3QgcGlsbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYmxvYkNvbnRhaW5lclwiKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRMaXN0SXRlbXMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoKSByZXR1cm47XG4gICAgY29uc3QgR3VpbGRDbGFzc2VzID0gZ2V0R3VpbGRDbGFzc2VzKCk7XG4gICAgY29uc3QgbGlzdEl0ZW1DbGFzcyA9IEd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XG4gICAgY29uc3QgYmxvYkNsYXNzID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xuICAgIGNvbnN0IHJlYWN0SW5zdGFuY2UgPSBCRFYyLmdldEludGVybmFsSW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bGlzdEl0ZW1DbGFzc30gLiR7YmxvYkNsYXNzfWApLnBhcmVudEVsZW1lbnQpO1xuICAgIGNvbnN0IEd1aWxkQ29tcG9uZW50ID0gcmVhY3RJbnN0YW5jZS5yZXR1cm4udHlwZTtcbiAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XG4gICAgdGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhLnJldHVyblZhbHVlICYmIGRhdGEudGhpc09iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgY29uc3QgZ3VpbGREYXRhID0gZGF0YS50aGlzT2JqZWN0LnByb3BzO1xuICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZVxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkXCI7XG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnVucmVhZCkgY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5zZWxlY3RlZCkgY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmF1ZGlvKSBjbGFzc05hbWUgKz0gXCIgYmQtYXVkaW9cIjtcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudmlkZW8pIGNsYXNzTmFtZSArPSBcIiBiZC12aWRlb1wiO1xuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5iYWRnZSkgY2xhc3NOYW1lICs9IFwiIGJkLWJhZGdlXCI7XG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmFuaW1hdGFibGUpIGNsYXNzTmFtZSArPSBcIiBiZC1hbmltYXRhYmxlXCI7XG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWVcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICAgICAgfVxuICAgIH19KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRQaWxscyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmd1aWxkUGlsbFBhdGNoKSByZXR1cm47XG4gICAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcbiAgICBpZiAoIWd1aWxkUGlsbCkgcmV0dXJuO1xuICAgIHRoaXMuZ3VpbGRQaWxsUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChndWlsZFBpbGwsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XG4gICAgICAgIGlmIChwcm9wcy51bnJlYWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xuICAgICAgICBpZiAocHJvcHMuc2VsZWN0ZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XG4gICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ob3ZlcmVkXCI7XG4gICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xuICAgIH19KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRTZXBhcmF0b3IgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XG4gICAgY29uc3QgR3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XG4gICAgY29uc3QgZ3VpbGRDb21wb25lbnRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJyZW5kZXJMaXN0SXRlbVwiKTtcbiAgICBpZiAoIWd1aWxkQ29tcG9uZW50cyB8fCAhR3VpbGRzKSByZXR1cm47XG4gICAgY29uc3QgR3VpbGRTZXBhcmF0b3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBndWlsZENvbXBvbmVudHMuU2VwYXJhdG9yKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZC1zZXBhcmF0b3JcIjtcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH07XG4gICAgdGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuWzNdLnR5cGUgPSBHdWlsZFNlcGFyYXRvcjtcbiAgICB9fSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaEF0dGFjaG1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5BdHRhY2htZW50UGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBBdHRhY2htZW50ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXR0YWNobWVudFwiKVswXSAvLyB0ZW1wb3JhcnlcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICBpZiAoIUFuY2hvciB8fCAhQXR0YWNobWVudCB8fCAhQXR0YWNobWVudC5kZWZhdWx0KSByZXR1cm47XG4gICAgdGhpcy5BdHRhY2htZW50UGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChBdHRhY2htZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBpZighc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pcmV0dXJuXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSB8fCBudWxsXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xuXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF0dGFjaG1lbnQgfHwgIWF0dGFjaG1lbnQudXJsKXJldHVyblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxuICAgICAgICBjaGlsZHJlbi5wdXNoKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICAgICAgaWQ6IFwiY2VydGlmaWVkLVwiK2lkXG4gICAgICAgIH0pKVxuICAgICAgICBQbHVnaW5DZXJ0aWZpZXIucGF0Y2goYXR0YWNobWVudCwgXCJjZXJ0aWZpZWQtXCIraWQpXG4gICAgfX0pXG59XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoTWVzc2FnZUhlYWRlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IE1lc3NhZ2VIZWFkZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIk1lc3NhZ2VUaW1lc3RhbXBcIik7XG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgaWYgKCFBbmNob3IgfHwgIU1lc3NhZ2VIZWFkZXIgfHwgIU1lc3NhZ2VIZWFkZXIuZGVmYXVsdCkgcmV0dXJuO1xuICAgIHRoaXMubWVzc2FnZUhlYWRlclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVzc2FnZUhlYWRlciwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgYXV0aG9yID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJtZXNzYWdlLmF1dGhvclwiKTtcbiAgICAgICAgLy8gY29uc3QgaGVhZGVyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHNcIik7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlblwiKTtcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXV0aG9yIHx8ICFhdXRob3IuaWQpcmV0dXJuXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XG4gICAgICAgIGlmIChhdXRob3IuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHsgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChhdXRob3IuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgYXV0aG9yLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBhdXRob3IsIHRydWUpXG4gICAgfX0pO1xufTtcblxuZnVuY3Rpb24gYXBwbHlCYWRnZXMoaWQsIHVzZXIsIGNoYXQpe1xuICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJhZGdlcy1cIitpZClcbiAgICAgICAgaWYoIWRpdiB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKXJldHVyblxuICAgICAgICBpZihkaXYuY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuXG4gICAgICAgIGxldCBibG9ja0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgICAgICAgYmxvY2tEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChibG9ja0RpdilcblxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcblxuICAgICAgICBkaXN0YW50LmdldEJhZGdlcyh1c2VyLmlkKVxuICAgICAgICAudGhlbihiYWRnZXMgPT4ge1xuICAgICAgICAgICAgYmFkZ2VzLmZvckVhY2goYmFkZ2UgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgICAgICAgICBzdmc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiMTZweFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxNnB4XCIsIFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJhZGdlLnNjb3Blcy5mb3JFYWNoKHNjb3BlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoc2NvcGUgPT09IFwidXNlclwiKXsvLyByZXF1aXJlIHVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnVzZXIgPSB1c2VyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSBcbiAgICAgICAgICAgICAgICBpZighYmFkZ2UuaHJlZil7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLkFuY2hvciA9IEFuY2hvclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5ocmVmID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiYWRnZS5uYW1lLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBiYWRnZS5uYW1lfSxcbiAgICAgICAgICAgICAgICAgICAgYmFkZ2UuaHJlZiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IGJhZGdlLmhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKSkgOiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihlbGVtZW50LCBkaXYyKVxuICAgICAgICAgICAgICAgIGRpdjIuY2hpbGROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lbWJlckxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5tZW1iZXJMaXN0UGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBNZW1iZXJMaXN0SXRlbSA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWVtYmVyTGlzdEl0ZW1cIik7XG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgaWYgKCFBbmNob3IgfHwgIU1lbWJlckxpc3RJdGVtIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUgfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZS5yZW5kZXJEZWNvcmF0b3JzKSByZXR1cm47XG4gICAgdGhpcy5tZW1iZXJMaXN0UGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUsIFwicmVuZGVyRGVjb3JhdG9yc1wiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEudGhpc09iamVjdCwgXCJwcm9wcy51c2VyXCIpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhdXNlciB8fCAhdXNlci5pZClyZXR1cm5cbiAgICAgICAgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcbiAgICAgICAgaWYgKHVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1tZW1iZXItYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgdXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1tZW1iZXItYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXG4gICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJhZGdlcy1cIitpZH0pXG4gICAgICAgIClcbiAgICAgICAgYXBwbHlCYWRnZXMoaWQsIHVzZXIsIGZhbHNlKVxuICAgIH19KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnVwZGF0ZUluamVjdG9yID0gYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSBhbiBpbmplY3Rpb24gcGF0aCwgc28gd2UgZG8gbm90IG5lZWQgdGhlIGNvZGUgYmVsb3cuIFxuICAgIC8vIEluc2VydCBjb21tZW50cyBzbyBpdCB3aWxsIGJlIGVyYXNlZCB3aGVuIHByb2R1Y3Rpb24uXG4gICAgXG4gICAgY29uc3QgaW5qZWN0aW9uUGF0aCA9IERhdGFTdG9yZS5pbmplY3Rpb25QYXRoO1xuICAgIGlmICghaW5qZWN0aW9uUGF0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLypcblxuICAgIGNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbiAgICBjb25zdCBybXJmID0gcmVxdWlyZShcInJpbXJhZlwiKTtcbiAgICBjb25zdCB5YXV6bCA9IHJlcXVpcmUoXCJ5YXV6bFwiKTtcbiAgICBjb25zdCBta2RpcnAgPSByZXF1aXJlKFwibWtkaXJwXCIpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKFwicmVxdWVzdFwiKTtcblxuICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLnJlc29sdmUoaW5qZWN0aW9uUGF0aCwgXCIuLlwiKTtcbiAgICBjb25zdCBmb2xkZXJOYW1lID0gcGF0aC5iYXNlbmFtZShpbmplY3Rpb25QYXRoKTtcbiAgICBjb25zdCB6aXBMaW5rID0gXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL2FyY2hpdmUvaW5qZWN0b3IuemlwXCI7XG4gICAgY29uc3Qgc2F2ZWRaaXAgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJpbmplY3Rvci56aXBcIik7XG4gICAgY29uc3QgZXh0cmFjdGVkRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiQmV0dGVyRGlzY29yZEFwcC1pbmplY3RvclwiKTtcblxuICAgIC8vIERvd25sb2FkIHRoZSBpbmplY3RvciB6aXAgZmlsZVxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRG93bmxvYWRpbmcgXCIgKyB6aXBMaW5rKTtcbiAgICBsZXQgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXF1ZXN0LmdldCh7dXJsOiB6aXBMaW5rLCBlbmNvZGluZzogbnVsbH0sIGFzeW5jIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvciB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHJldHVybiByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21lb25lIGhhcyB0aGVpciBvd24gY29weVxuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xuICAgICAgICAgICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoc2F2ZWRaaXAsIGAke3NhdmVkWmlwfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWAsIHJlcykpO1xuXG4gICAgICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIldyaXRpbmcgXCIgKyBzYXZlZFppcCk7XG4gICAgICAgICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKCFzdWNjZXNzKSByZXR1cm4gc3VjY2VzcztcblxuICAgIC8vIENoZWNrIGFuZCBkZWxldGUgcmVuYW1lIGV4dHJhY3Rpb25cbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xuICAgIGlmIChhbHJlYWR5RXhpc3RzKSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgYCR7ZXh0cmFjdGVkRm9sZGVyfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWAsIHJlcykpO1xuICAgIFxuICAgIC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXG4gICAgY29uc3QgemlwZmlsZSA9IGF3YWl0IG5ldyBQcm9taXNlKHIgPT4geWF1emwub3BlbihzYXZlZFppcCwge2xhenlFbnRyaWVzOiB0cnVlfSwgKGVyciwgemlwKSA9PiAgcih6aXApKSk7XG4gICAgemlwZmlsZS5vbihcImVudHJ5XCIsIGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcbiAgICAgICAgaWYgKGVudHJ5LmZpbGVOYW1lLmVuZHNXaXRoKFwiL1wiKSkgcmV0dXJuIHppcGZpbGUucmVhZEVudHJ5KCk7XG5cbiAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJFeHRyYWN0aW5nIFwiICsgZW50cnkuZmlsZU5hbWUpO1xuICAgICAgICAvLyBNYWtlIGFueSBuZWVkZWQgcGFyZW50IGRpcmVjdG9yaWVzXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGVudHJ5LmZpbGVOYW1lKTtcbiAgICAgICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKGZ1bGxQYXRoKSk7XG4gICAgICAgIHppcGZpbGUub3BlblJlYWRTdHJlYW0oZW50cnksIGZ1bmN0aW9uKGVyciwgcmVhZFN0cmVhbSkge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ub24oXCJlbmRcIiwgZnVuY3Rpb24oKSB7emlwZmlsZS5yZWFkRW50cnkoKTt9KTsgLy8gR28gdG8gbmV4dCBmaWxlIGFmdGVyIHRoaXNcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ucGlwZShmcy5jcmVhdGVXcml0ZVN0cmVhbShmdWxsUGF0aCkpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB6aXBmaWxlLnJlYWRFbnRyeSgpOyAvLyBTdGFydCByZWFkaW5nXG5cbiAgICAvLyBXYWl0IGZvciB0aGUgZmluYWwgZmlsZSB0byBmaW5pc2hcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHppcGZpbGUub25jZShcImVuZFwiLCByZXNvbHZlKSk7XG5cbiAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGZpbmFsIHN0ZXBcbiAgICBjb25zdCBiYWNrdXBGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgYCR7Zm9sZGVyTmFtZX0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShpbmplY3Rpb25QYXRoLCBiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcblxuICAgIC8vIFJlbmFtZSB0aGUgZXh0cmFjdGVkIGZvbGRlciB0byB3aGF0IGl0IHNob3VsZCBiZVxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIGBSZW5hbWluZyAke3BhdGguYmFzZW5hbWUoZXh0cmFjdGVkRm9sZGVyKX0gdG8gJHtmb2xkZXJOYW1lfWApO1xuICAgIHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGluamVjdGlvblBhdGgsIGVyciA9PiByZXNvbHZlKCFlcnIpKSk7XG4gICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiRmFpbGVkIHRvIHJlbmFtZSB0aGUgZmluYWwgZGlyZWN0b3J5XCIpO1xuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG5cbiAgICAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxuICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIlNvbWV0aGluZyB3ZW50IHdyb25nLi4uIHJlc3RvcmluZyBiYWNrdXBzLlwiKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGV4dHJhY3RlZEZvbGRlciwgcmVzb2x2ZSkpO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShiYWNrdXBGb2xkZXIsIGluamVjdGlvblBhdGgsIHJlc29sdmUpKTtcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UndmUgZ290dGVuIHRvIHRoaXMgcG9pbnQsIGV2ZXJ5dGhpbmcgc2hvdWxkIGhhdmUgZ29uZSBzbW9vdGhseS5cbiAgICAvLyBDbGVhbnVwIHRoZSBiYWNrdXAgZm9sZGVyIHRoZW4gcmVtb3ZlIHRoZSB6aXBcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy51bmxpbmsoc2F2ZWRaaXAsIHJlc29sdmUpKTtcblxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiSW5qZWN0b3IgVXBkYXRlZCFcIik7XG4gICAgcmV0dXJuIHN1Y2Nlc3M7Ki9cbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlKCk7XG5cbi8qKlxuICogRG9uJ3QgZXhwb3NlIGNvcmUgLSBjb3VsZCBiZSBkYW5nZXJvdXMgZm9yIG5vd1xuICovIiwiaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcblxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCByZWxlYXNlQ2hhbm5lbCA9IERpc2NvcmROYXRpdmUuZ2xvYmFscyA/IERpc2NvcmROYXRpdmUuZ2xvYmFscy5yZWxlYXNlQ2hhbm5lbCA6IERpc2NvcmROYXRpdmUuYXBwID8gRGlzY29yZE5hdGl2ZS5hcHAuZ2V0UmVsZWFzZUNoYW5uZWwoKSA6IFwic3RhYmxlXCI7XG5cbmxldCBkYXRhUGF0aCA9IFwiXCI7XG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSBkYXRhUGF0aCA9IHByb2Nlc3MuZW52LkFQUERBVEE7XG5lbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiKSBkYXRhUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmVudi5IT01FLCBcIkxpYnJhcnlcIiwgXCJQcmVmZXJlbmNlc1wiKTtcbmVsc2UgZGF0YVBhdGggPSBwcm9jZXNzLmVudi5YREdfQ09ORklHX0hPTUUgPyBwcm9jZXNzLmVudi5YREdfQ09ORklHX0hPTUUgOiBwYXRoLmpvaW4ocHJvY2Vzcy5lbnYuSE9NRSwgXCIuY29uZmlnXCIpO1xuZGF0YVBhdGggPSBwYXRoLmpvaW4oZGF0YVBhdGgsIFwiQmV0dGVyRGlzY29yZFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERhdGFTdG9yZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHtzZXR0aW5nczoge3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319fTtcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhID0ge307XG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EYXRhU3RvcmUgPSB0aGlzXG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLkJERmlsZSkpIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwidXRmLThcIik7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5CREZpbGUsIFwidXRmLThcIikpXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcInNldHRpbmdzXCIpKSB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKSkgcmV0dXJuO1xuICAgICAgICAgICAgbGV0IHNldHRpbmdzID0gX19ub25fd2VicGFja19yZXF1aXJlX18odGhpcy5zZXR0aW5nc0ZpbGUpO1xuICAgICAgICAgICAgZnMudW5saW5rU3luYyh0aGlzLnNldHRpbmdzRmlsZSk7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwge1tyZWxlYXNlQ2hhbm5lbF06IHNldHRpbmdzfSk7XG4gICAgICAgICAgICBlbHNlIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX0sIHNldHRpbmdzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QkREYXRhKFwic2V0dGluZ3NcIiwgc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIFV0aWxzLmFsZXJ0KFwiQ29ycnVwdCBTdG9yYWdlXCIsIFwiVGhlIGJkIHN0b3JhZ2UgaGFzIHNvbWVob3cgYmVjb21lIGNvcnJ1cHQuIFlvdSBtYXkgZWl0aGVyIHRyeSB0byBzYWx2YWdlIHRoZSBmaWxlIG9yIGRlbGV0ZSBpdCB0aGVuIHJlbG9hZC5cIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgaW5qZWN0aW9uUGF0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGggPSBudWxsO1xuICAgIH1cblxuICAgIGdldCBjb25maWdGaWxlKCkge3JldHVybiB0aGlzLl9jb25maWdGaWxlIHx8ICh0aGlzLl9jb25maWdGaWxlID0gcGF0aC5yZXNvbHZlKHRoaXMuaW5qZWN0aW9uUGF0aCwgXCJiZXR0ZXJkaXNjb3JkXCIsIFwiY29uZmlnLmpzb25cIikpO31cbiAgICBnZXQgQkRGaWxlKCkge3JldHVybiB0aGlzLl9CREZpbGUgfHwgKHRoaXMuX0JERmlsZSA9IHBhdGgucmVzb2x2ZShkYXRhUGF0aCwgXCJiZHN0b3JhZ2UuanNvblwiKSk7fVxuICAgIGdldCBzZXR0aW5nc0ZpbGUoKSB7cmV0dXJuIHRoaXMuX3NldHRpbmdzRmlsZSB8fCAodGhpcy5fc2V0dGluZ3NGaWxlID0gcGF0aC5yZXNvbHZlKGRhdGFQYXRoLCBcImJkc2V0dGluZ3MuanNvblwiKSk7fVxuICAgIGdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSkge3JldHVybiBwYXRoLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgcGx1Z2luTmFtZSArIFwiLmNvbmZpZy5qc29uXCIpO31cblxuICAgIGdldFNldHRpbmdHcm91cChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5zZXR0aW5nc1tyZWxlYXNlQ2hhbm5lbF1ba2V5XSB8fCBudWxsO1xuICAgIH1cblxuICAgIHNldFNldHRpbmdHcm91cChrZXksIGRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldID0gZGF0YTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcbiAgICB9XG5cbiAgICBnZXRCRERhdGEoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFba2V5XSB8fCBcIlwiO1xuICAgIH1cblxuICAgIHNldEJERGF0YShrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSkpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSkpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xuICAgIH1cblxuICAgIHNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID09PSB1bmRlZmluZWQpIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IHt9O1xuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSA9IHZhbHVlO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcbiAgICB9XG5cbiAgICBkZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID09PSB1bmRlZmluZWQpIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IHt9O1xuICAgICAgICBkZWxldGUgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcInV0Zi04XCIpO1xuICAgIH1cbn07IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEZXZNb2RlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5kZWJ1Z0xpc3RlbmVyID0gdGhpcy5kZWJ1Z0xpc3RlbmVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIgPSB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgdGhpcy5zdGFydENvcHlTZWxlY3RvcigpO1xuICAgIH1cbiAgICBcbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMuc3RvcENvcHlTZWxlY3RvcigpO1xuICAgIH1cblxuICAgIHN0YXJ0RGVidWdMaXN0ZW5lcigpIHtcbiAgICAgICAgdGhpcy5zdG9wRGVidWdMaXN0ZW5lcigpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHN0b3BEZWJ1Z0xpc3RlbmVyKCkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHN0YXJ0Q29weVNlbGVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0b3BDb3B5U2VsZWN0b3IoKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHN0b3BDb3B5U2VsZWN0b3IoKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBkZWJ1Z0xpc3RlbmVyKGUpIHtcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDExOSB8fCBlLndoaWNoID09IDExOCkgey8vRjhcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbJWNEZXZNb2RlJWNdICVjQnJlYWsvUmVzdW1lXCIsIFwiY29sb3I6IHJlZDtcIiwgXCJjb2xvcjogIzMwMzAzMDsgZm9udC13ZWlnaHQ6NzAwO1wiLCBcImNvbG9yOnJlZDtcIiwgXCJcIik7XG4gICAgICAgICAgICBkZWJ1Z2dlcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1kZWJ1Z2dlclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgIH1cbiAgICB9XG5cbiAgICBjb3B5U2VsZWN0b3JMaXN0ZW5lcihlKSB7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IoZS50YXJnZXQpO1xuICAgIFxuICAgICAgICAgICAgbGV0IFtcbiAgICAgICAgICAgICAgICBjbGFzc0xheWVyLCBcbiAgICAgICAgICAgICAgICBjbGFzc0l0ZW1zXG4gICAgICAgICAgICBdID0gW1xuICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoKGUpID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5kaXNhYmxlZFBvaW50ZXJFdmVudHMpWzBdLFxuICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoKGUpID0+IGUubWVudSlbMF1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZnVuY3Rpb24gYXR0YWNoKCkge1xuICAgICAgICAgICAgICAgIGlmKCFjbGFzc0l0ZW1zIHx8ICFjbGFzc0xheWVyLmxheWVyKXJldHVybiBjb25zb2xlLmxvZyhjbGFzc0l0ZW1zLCBjbGFzc0xheWVyLmxheWVyKVxuXG4gICAgICAgICAgICAgICAgbGV0IGNtID0gRE9NLnF1ZXJ5KFwiLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzSXRlbXMubWVudSkpO1xuICAgICAgICAgICAgICAgIGlmICghY20pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudCA+IC5cIitVdGlscy5yZW1vdmVEYShjbGFzc0xheWVyLmxheWVyQ29udGFpbmVyKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0xheWVyLmxheWVyfVwiPmApO1xuICAgICAgICAgICAgICAgICAgICBjbSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLm1lbnV9ICR7Y2xhc3NJdGVtcy5zdHlsZUZsZXhpYmxlfSAke2NsYXNzSXRlbXMuYWNjb21tb2RhdGVTY3JvbGxiYXJ9IGJkLWNvbnRleHQtbWVudVwiIHN0eWxlPVwiXCI+PC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5hcHBlbmQoY20pO1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGNtV3JhcCk7XG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSBlLmNsaWVudFkgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRYICsgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcIm1lbnVcIilcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiLTFcIilcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmlkID0gXCJiZC1jb3B5LXNlbGVjdG9yLWNvbnRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBcIkNvcHkgU2VsZWN0b3IgQWN0aW9uc1wiKVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ2xhc3NlcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc2Nyb2xsZXJXcmFwKVswXVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlcldyYXAgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7c2Nyb2xsZXJDbGFzc2VzLnNjcm9sbGVyV3JhcH0gJHtzY3JvbGxlckNsYXNzZXMuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJDbGFzc2VzLnRoZW1lR2hvc3RIYWlybGluZX1cIj48L2Rpdj5gKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlcilbMF0uc2Nyb2xsZXJ9ICR7Y2xhc3NJdGVtcy5zY3JvbGxlcn1cIj48L2Rpdj5gKVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxlcldyYXAuYXBwZW5kKHNjcm9sbGVyKVxuICAgICAgICAgICAgICAgICAgICBjbS5hcHBlbmQoc2Nyb2xsZXJXcmFwKVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNNID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSAmJiBlLmtleUNvZGUgIT09IDI3KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBjbVdyYXAucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IGNtLnBhcmVudEVsZW1lbnRcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IGNtLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXVxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZyA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJncm91cFwiPjwvZGl2PmApO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCBjbWkgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5pdGVtfSAke2NsYXNzSXRlbXMubGFiZWxDb250YWluZXJ9ICR7Y2xhc3NJdGVtcy5jb2xvckRlZmF1bHR9XCIgcm9sZT1cIm1lbnVpdGVtXCIgaWQ9XCJiZC1jb3B5LXNlbGVjdG9yLWl0ZW0tY21cIj48L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICBjbWkuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLmxhYmVsfVwiPkNvcHkgU2VsZWN0b3I8L2Rpdj5gKSk7XG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIEJEVjIuTmF0aXZlTW9kdWxlLmNvcHkoc2VsZWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRzID0gRE9NLnF1ZXJ5QWxsKFwiZGl2W3JvbGU9bWVudWl0ZW1dLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzSXRlbXMuZm9jdXNlZCkpXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzICYmIGVsZW1lbnRzLmZvckVhY2goZWxlbSA9PiBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NJdGVtcy5mb2N1c2VkKSlcbiAgICAgICAgICAgICAgICAgICAgY21pLmNsYXNzTGlzdC5hZGQoY2xhc3NJdGVtcy5mb2N1c2VkKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc0l0ZW1zLmZvY3VzZWQpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjbWcuYXBwZW5kKGNtaSk7XG4gICAgICAgICAgICAgICAgaWYoc2Nyb2xsZXIuY2hpbGROb2Rlcy5sZW5ndGgpeyAvLyBhcGVuZCBhIHNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiByb2xlPVwic2VwYXJhdG9yXCIgY2xhc3M9XCIke2NsYXNzSXRlbXMuc2VwYXJhdG9yfVwiPjwvZGl2PmApXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZChzZXBhcmF0b3IpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZChjbWcpO1xuICAgICAgICAgICAgICAgIGlmKGNtV3JhcC5jbGllbnRIZWlnaHQgPCBjbVdyYXAuc2Nyb2xsSGVpZ2h0KXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZyBcIitjbVdyYXAuc3R5bGUudG9wKVxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUudG9wID0gKGNtV3JhcC5zdHlsZS50b3AgLSBjbWcuY2xpZW50SGVpZ2h0KSArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZ1wiK2NtV3JhcC5zdHlsZS50b3ApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgc2V0VGltZW91dChhdHRhY2gsIDEpO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZWxlY3RvcihlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50LmlkKSByZXR1cm4gYCMke2VsZW1lbnQuaWR9YDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCBcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGxQYXRoKGVsKXtcbiAgICAgICAgICAgIHZhciBuYW1lcyA9IFtdO1xuICAgICAgICAgICAgd2hpbGUgKGVsLnBhcmVudE5vZGUpe1xuICAgICAgICAgICAgICBpZiAoZWwuaWQpe1xuICAgICAgICAgICAgICAgIG5hbWVzLnVuc2hpZnQoJyMnK2VsLmlkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgaWYgKGVsPT1lbC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrQXJyYXkuZnJvbShlbC5jbGFzc0xpc3QuZW50cmllcygpKS5tYXAoZSA9PiBcIi5cIitlKS5qb2luKFwiXCIpKTtcbiAgICAgICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYz0xLGU9ZWw7ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2U9ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLGMrKyk7XG4gICAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSsoKHR5cGVvZiBlbC5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWwuY2xhc3NOYW1lKSB8fCBcIlwiKS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gISFlKS5tYXAoZSA9PiBcIi5cIitlKS5qb2luKFwiXCIpK1wiOm50aC1jaGlsZChcIitjK1wiKVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWw9ZWwucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVzLmpvaW4oXCIgPiBcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bGxQYXRoKGVsZW1lbnQpXG4gICAgfVxufTsiLCJleHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzYWJsZVR5cGluZyB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5zdGFydFR5cGluZylcclxuICAgICAgICAudGhlbih0eXBpbmdNb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXNcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdGFydFR5cGluZ1xyXG4gICAgICAgICAgICB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdGFydFR5cGluZyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBpZihzZWxmLmRpc2FibGVkKXJldHVybiBzdGFydFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdG9wVHlwaW5nID0gdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RvcFR5cGluZ1xyXG4gICAgICAgICAgICB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuZGlzYWJsZWQpcmV0dXJuIHN0b3BUeXBpbmcuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EaXNhYmxlVHlwaW5nID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJ1Z0h1bnRlckJhZGdlIGZyb20gXCIuLi9zdmcvYnVnX2h1bnRlclwiXG5pbXBvcnQgbm9kZUZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcbmltcG9ydCB7IHNldHRpbmdzQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ2lyY3VzIGZyb20gXCIuLi9zdmcvY2lyY3VzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7IC8vIEdlbmVyYXRlIFVVSUQgKE5vIGNyeXB0byBybmcpXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgICB9KTtcbn0gIFxuXG5jb25zdCBhd2FpdGluZ0JhZGdlc1Byb21pc2VzID0ge31cbmxldCBiYWRnZXNUb0ZldGNoID0gW11cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERpc3RhbnRTZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMuX2NhY2hlID0ge1xuICAgICAgICAgICAgYmFkZ2VzOiB7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGlzdGFudFNlcnZlciA9IHRoaXNcbiAgICB9XG5cbiAgICBnZXQgY2FjaGUoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlXG4gICAgfVxuXG4gICAgc2V0IGNhY2hlKGRhdGEpe1xuICAgICAgICBpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdGhpcy5fY2FjaGUgIT09IFwib2JqZWN0XCIpcmV0dXJuIHRoaXMuX2NhY2hlID0gZGF0YVxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NhY2hlLCBkYXRhKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjdXN0b20gYmFkZ2VzIGZyb20gdGhlIHVzZXIgSUQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXIgVGhlIHVzZXIgSUQgXG4gICAgICogQHJldHVybnMge1Byb21pc2U8Q29uc3RhbnRzW1wiYmFkZ2VzXCJdPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRCYWRnZXModXNlcil7XG4gICAgICAgIGlmKHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdKXJldHVybiB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxuICAgICAgICBpZihhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdKXJldHVybiBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdXG5cbiAgICAgICAgbGV0IHJlc29sdmVcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMpID0+IChyZXNvbHZlID0gcmVzKSlcbiAgICAgICAgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSA9IG5ld1Byb21pc2VcblxuICAgICAgICBjb25zdCBiYWRnZXMgPSBbXVxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIENvbnN0YW50cy5iYWRnZXMpe1xuICAgICAgICAgICAgaWYoYmFkZ2UuZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIpKWJhZGdlcy5wdXNoKGJhZGdlKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZldGNoZWRCYWRnZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pcmV0dXJuIHJlc29sdmUoW10pXG4gICAgICAgICAgICBiYWRnZXNUb0ZldGNoLnB1c2goW3VzZXIsIHJlc29sdmVdKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHVzZXJzID0gYmFkZ2VzVG9GZXRjaFxuICAgICAgICAgICAgICAgIGlmKHVzZXJzLmxlbmd0aCA9PT0gMClyZXR1cm5cbiAgICAgICAgICAgICAgICBiYWRnZXNUb0ZldGNoID0gW11cbiAgICAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0KFJvdXRlcy5iYWRnZXMsIFwiUE9TVFwiLCBKU09OLnN0cmluZ2lmeSh1c2Vycy5tYXAoZSA9PiBlWzBdKSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IHNlcnZlciBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCByZXMuanNvbigpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHVzZXIgb2YgcmVzcG9uc2VCb2R5KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gdXNlcnMuZmluZChwcm9taXNlID0+IHByb21pc2VbMF0gPT09IHVzZXIudXNlcl9pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VbMV0odXNlci5iYWRnZXMpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7Ly8gQ291bGRuJ3QgZmV0Y2ggYmFkZ2VzOiBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZighKGVyciBpbnN0YW5jZW9mIExpZ2h0Y29yZEVycm9yKSljb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIDApXG4gICAgICAgIH0pXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgZmV0Y2hlZEJhZGdlcyl7XG4gICAgICAgICAgICBpZighQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKWNvbnRpbnVlIC8vIFdlIGRvIG5vdCBoYXZlIHRoZSBDb21wb25lbnQsIHNraXAgaXQuXG4gICAgICAgICAgICBpZihiYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBBbHJlYWR5IGluc2VydGVkLlxuICAgICAgICAgICAgYmFkZ2VzLnB1c2goQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGUgPSB7XG4gICAgICAgICAgICBiYWRnZXM6IE9iamVjdC5hc3NpZ24odGhpcy5jYWNoZS5iYWRnZXMsIHtbdXNlcl06IGJhZGdlc30pXG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cbiAgICAgICAgfSwgNjAwMDAwKTtcblxuICAgICAgICByZXNvbHZlKGJhZGdlcylcbiAgICAgICAgZGVsZXRlIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cbiAgICAgICAgcmV0dXJuIGJhZGdlc1xuICAgIH1cbn1cblxuY29uc3QgaGFuZGxlUmVxdWVzdCA9IGZ1bmN0aW9uKHJvdXRlLCBtZXRob2QsIGRhdGEpe1xuICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC01XCJdKXtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBMaWdodGNvcmRFcnJvcihcIlRoZSBjdXJyZW50IHNldHRpbmdzIGJsb2NrZWQgdGhlIHJlcXVlc3QuXCIpKVxuICAgIH1cbiAgICByZXR1cm4gbm9kZUZldGNoKGAke0NvbnN0YW50cy5TRVJWRVJfVVJMfS9hcGkvdjEke3JvdXRlfWAsIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIkNMSUVOVFwiOiBcIkxpZ2h0Y29yZFwiLFxuICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gfHwgXCJOb25lOjpBbm9ueW1vdXNcIlxuICAgICAgICB9LFxuICAgICAgICAuLi4oZGF0YSA/IHtcbiAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgfSA6IHt9KVxuICAgIH0pXG59XG5cbmNsYXNzIExpZ2h0Y29yZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgdGhpcy5uYW1lID0gXCJMaWdodGNvcmRFcnJvclwiXG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgQ29uc3RhbnRzID0ge1xuICAgIFNFUlZFUl9VUkw6IFwiaHR0cHM6Ly9saWdodGNvcmQuZGVyb2t1Lnh5elwiLFxuICAgIGJhZGdlczogWyAvLyBUT0RPOiBBZGQgbW9yZSBiYWRnZXMgKyBzZXJ2ZXIgc2lkZSBzdmdcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmQgQnVnIEh1bnRlclwiLFxuICAgICAgICAgICAgaWQ6IFwiZjA0Njk4ZjUtODE2Yi00MWUzLWJkMDEtOTIyOTExOTNkN2E1XCIsXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcbiAgICAgICAgICAgICAgICBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiLFxuICAgICAgICAgICAgICAgIFwiNjk2MDAzNDU2NjExMzg1Mzk2XCJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxuICAgICAgICAgICAgY29tcG9uZW50OiBCdWdIdW50ZXJCYWRnZSxcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC9saWdodGNvcmQvd2lraS9iYWRnZXMjYnVnX2h1bnRlclwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnVmZm9vblwiLFxuICAgICAgICAgICAgaWQ6IFwiMDY5MDRkMzEtNjViNC00MWVjLWE1MGMtODY1OGJiZDFhZjk2XCIsXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcbiAgICAgICAgICAgICAgICBcIjM4OTAxNjg5NTU0MzcwNTYwMlwiLFxuICAgICAgICAgICAgICAgIFwiNjY0NjAwMTM0NTI4NjYzNTY1XCIsXG4gICAgICAgICAgICAgICAgXCI2MjUzNTA2NTc4Mjk4OTYyMjRcIlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHNjb3BlczogW10sXG4gICAgICAgICAgICBjb21wb25lbnQ6IENpcmN1cyxcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly95b3V0dS5iZS9FSnRiNnotZGxUOD90PTE0NVwiXG4gICAgICAgIH1cbiAgICBdXG59XG5cbmV4cG9ydCBjb25zdCBSb3V0ZXMgPSB7XG4gICAgYmFkZ2VzOiBgL3VzZXJzL2JhZGdlc2Bcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IFphY2hhcnkgUmF1ZW5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkXG4gKiB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCxcbiAqIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBXG4gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXG4gKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0ZcbiAqIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRVxuICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKiBcbiAqIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JEUGx1Z2luTGlicmFyeVxuICovXG5cbi8qKlxuICogQGludGVyZmFjZVxuICogQG5hbWUgT2Zmc2V0XG4gKiBAcHJvcGVydHkge251bWJlcn0gdG9wIC0gVG9wIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgLSBSaWdodCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvdHRvbSAtIEJvdHRvbSBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxlZnQgLSBMZWZ0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gT3V0ZXIgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIE91dGVyIHdpZHRoIG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAqL1xuXG4gLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBhZGRlZCBsaXN0ZW5lci5cbiAqIEBjYWxsYmFjayBtb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJcbiAqL1xuIFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NVG9vbHMge1xuXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xuICAgIH1cblxuICAgIC8qKlxuXHQgKiBBZGRzIGEgc3R5bGUgdG8gdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBhcyB0aGUgZWxlbWVudCBpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY3NzIC0gY3NzIHRvIGFkZCB0byB0aGUgZG9jdW1lbnRcblx0ICovXG5cdHN0YXRpYyBhZGRTdHlsZShpZCwgY3NzKSB7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoRE9NVG9vbHMuY3JlYXRlRWxlbWVudChgPHN0eWxlIGlkPVwiJHtpZH1cIj4ke2Nzc308L3N0eWxlPmApKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgc3R5bGUgZnJvbSB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxuXHQgKi9cblx0c3RhdGljIHJlbW92ZVN0eWxlKGlkKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzL3JlcXVpcmVzIGEgcmVtb3RlIHNjcmlwdCB0byBiZSBsb2FkZWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgZm9yIHRoaXMgc2NyaXB0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBzY3JpcHRcblx0ICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzY3JpcHQgaXMgbG9hZGVkXG5cdCAqL1xuXHRzdGF0aWMgYWRkU2NyaXB0KGlkLCB1cmwpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHRjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXHRcdFx0c2NyaXB0LmlkID0gaWQ7XG5cdFx0XHRzY3JpcHQuc3JjID0gdXJsO1xuXHRcdFx0c2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IHJlc29sdmU7XG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChzY3JpcHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSByZW1vdGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcblx0ICovXG5cdHN0YXRpYyByZW1vdmVTY3JpcHQoaWQpIHtcbiAgICAgICAgaWQgPSB0aGlzLmVzY2FwZUlEKGlkKTtcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBodHRwczovL2phdmFzY3JpcHQuaW5mby9qcy1hbmltYXRpb25cbiAgICBzdGF0aWMgYW5pbWF0ZSh7dGltaW5nID0gXyA9PiBfLCB1cGRhdGUsIGR1cmF0aW9ufSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAgICAgICAgICAvLyB0aW1lRnJhY3Rpb24gZ29lcyBmcm9tIDAgdG8gMVxuICAgICAgICAgIGxldCB0aW1lRnJhY3Rpb24gPSAodGltZSAtIHN0YXJ0KSAvIGR1cmF0aW9uO1xuICAgICAgICAgIGlmICh0aW1lRnJhY3Rpb24gPiAxKSB0aW1lRnJhY3Rpb24gPSAxO1xuICAgICAgXG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxuICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gdGltaW5nKHRpbWVGcmFjdGlvbik7XG4gICAgICBcbiAgICAgICAgICB1cGRhdGUocHJvZ3Jlc3MpOyAvLyBkcmF3IGl0XG4gICAgICBcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uIDwgMSkge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICAgICAgICAgIH1cbiAgICAgIFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgbXkgc2hpdCB2ZXJzaW9uIG9mIG5vdCBoYXZpbmcgdG8gdXNlIGAkYCBmcm9tIGpRdWVyeS4gTWVhbmluZ1xuICAgICAqIHRoYXQgeW91IGNhbiBwYXNzIGEgc2VsZWN0b3IgYW5kIGl0IHdpbGwgYXV0b21hdGljYWxseSBydW4ge0BsaW5rIG1vZHVsZTpET01Ub29scy5xdWVyeX0uXG4gICAgICogSXQgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gcGFzcyBhIHN0cmluZyBvZiBodG1sIGFuZCBpdCB3aWxsIHBlcmZvcm0gYW5kIHJldHVybiBgcGFyc2VIVE1MYC5cbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUxcbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5xdWVyeVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5IG9yIEhUTUwgdG8gcGFyc2VcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIEVpdGhlciB0aGUgcmVzdWx0IG9mIGBwYXJzZUhUTUxgIG9yIGBxdWVyeWBcbiAgICAgKi9cbiAgICBzdGF0aWMgUShzZWxlY3Rvcikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUhUTUwoc2VsZWN0b3IpO1xuICAgICAgICBjb25zdCBpc0hUTUwgPSBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QgPyBBcnJheS5mcm9tKGVsZW1lbnQpLnNvbWUobiA9PiBuLm5vZGVUeXBlID09PSAxKSA6IGVsZW1lbnQubm9kZVR5cGUgPT09IDE7XG4gICAgICAgIGlmIChpc0hUTUwpIHJldHVybiBlbGVtZW50O1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeShzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIGZvdW5kIGVsZW1lbnQgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBzdGF0aWMgcXVlcnkoc2VsZWN0b3IsIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbGAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIEFycmF5IG9mIGFsbCBmb3VuZCBlbGVtZW50c1xuICAgICAqL1xuICAgIHN0YXRpYyBxdWVyeUFsbChzZWxlY3RvciwgYmFzZUVsZW1lbnQgPSBkb2N1bWVudCkge1xuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIG9mIEhUTUwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMuIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsXG4gICAgICogdGhlIHBhcnNlZCBIVE1MIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBkb2N1bWVudCBmcmFnbWVudCB7QHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnRGcmFnbWVudH0uXG4gICAgICogVGhpcyBpcyBleHRyZW1lbHkgdXNlZnVsIGlmIHlvdSBoYXZlIGEgbGlzdCBvZiBlbGVtZW50cyBhdCB0aGUgdG9wIGxldmVsLCB0aGV5IGNhbiB0aGVuIGJlIGFwcGVuZGVkIGFsbCBhdCBvbmNlIHRvIGFub3RoZXIgbm9kZS5cbiAgICAgKiBcbiAgICAgKiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIGxpc3Qgb2YgcGFyc2VkXG4gICAgICogbm9kZXMgYW5kIHRoZXJlIHdlcmUgbXVsdGlwbGUgdG9wIGxldmVsIG5vZGVzLCBvdGhlcndpc2UgdGhlIHNpbmdsZSBub2RlIGlzIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcmFnbWVudD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0aGUgcmV0dXJuIHNob3VsZCBiZSB0aGUgcmF3IGBEb2N1bWVudEZyYWdtZW50YFxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gVGhlIHJlc3VsdCBvZiBIVE1MIHBhcnNpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgaWYgKGZyYWdtZW50KSByZXR1cm4gbm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgIH1cblxuICAgIC8qKiBBbHRlcm5hdGUgbmFtZSBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUx9ICovXG4gICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge3JldHVybiB0aGlzLnBhcnNlSFRNTChodG1sLCBmcmFnbWVudCk7fVxuICAgIFxuICAgIC8qKlxuICAgICAqIFRha2VzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGVzY2FwZXMgaXQgdXNpbmcgdGhlIGJyb3dlcidzIG93biBlc2NhcGluZyBtZWNoYW5pc20uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgLSBodG1sIHRvIGJlIGVzY2FwZWRcbiAgICAgKi9cbiAgICBzdGF0aWMgZXNjYXBlSFRNTChodG1sKSB7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgIHNwYW5FbGVtZW50LmFwcGVuZCh0ZXh0Tm9kZSk7XG4gICAgICAgIHRleHROb2RlLm5vZGVWYWx1ZSA9IGh0bWw7XG4gICAgICAgIHJldHVybiBzcGFuRWxlbWVudC5pbm5lckhUTUw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byBhZGRcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIGFkZENsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jbGFzc2VzKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byByZW1vdmVcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUNsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3Nlcyk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gb25seSBvbmUgYXJndW1lbnQgaXMgcHJlc2VudDogVG9nZ2xlIGNsYXNzIHZhbHVlO1xuICAgICAqIGkuZS4sIGlmIGNsYXNzIGV4aXN0cyB0aGVuIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGZhbHNlLCBpZiBub3QsIHRoZW4gYWRkIGl0IGFuZCByZXR1cm4gdHJ1ZS5cbiAgICAgKiBXaGVuIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQ6XG4gICAgICogSWYgdGhlIHNlY29uZCBhcmd1bWVudCBldmFsdWF0ZXMgdG8gdHJ1ZSwgYWRkIHNwZWNpZmllZCBjbGFzcyB2YWx1ZSwgYW5kIGlmIGl0IGV2YWx1YXRlcyB0byBmYWxzZSwgcmVtb3ZlIGl0LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gdG9nZ2xlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5kaWNhdG9yXSAtIE9wdGlvbmFsIGluZGljYXRvciBmb3IgaWYgdGhlIGNsYXNzIHNob3VsZCBiZSB0b2dnbGVkXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyB0b2dnbGVDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUsIGluZGljYXRvcikge1xuICAgICAgICBjbGFzc25hbWUgPSBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYyk7XG4gICAgICAgIGlmICh0eXBlb2YoaW5kaWNhdG9yKSAhPT0gXCJ1bmRlZmluZWRcIikgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYywgaW5kaWNhdG9yKSk7XG4gICAgICAgIGVsc2UgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYykpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYSBzcGVjaWZpYyBjbGFzc1xuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gY2hlY2tcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgc3RhdGljIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSkge1xuICAgICAgICByZXR1cm4gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpLmV2ZXJ5KGMgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIG9uZSBjbGFzcyB3aXRoIGFub3RoZXJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiBjbGFzcyB0byByZXBsYWNlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSBmb3IgdGhlIGNsYXNzXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyByZXBsYWNlQ2xhc3MoZWxlbWVudCwgb2xkTmFtZSwgbmV3TmFtZSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKG9sZE5hbWUsIG5ld05hbWUpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIGFwcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIGFwcGVuZGVkIHRvXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgYXBwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xuICAgICAgICB0aGF0Tm9kZS5hcHBlbmQodGhpc05vZGUpO1xuICAgICAgICByZXR1cm4gdGhpc05vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgcHJlcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIHByZXBlbmRlZCB0b1xuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIHByZXBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoYXROb2RlLnByZXBlbmQodGhpc05vZGUpO1xuICAgICAgICByZXR1cm4gdGhpc05vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuaW5zZXJ0QWZ0ZXIob3RoZXJFbGVtZW50KWAuXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5zZXJ0QWZ0ZXIodGhpc05vZGUsIHRhcmdldE5vZGUpIHtcbiAgICAgICAgdGFyZ2V0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzTm9kZSwgdGFyZ2V0Tm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5hZnRlcihuZXdFbGVtZW50KWAuXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbmV3Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgYWZ0ZXIodGhpc05vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgdGhpc05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgdGhpc05vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gdGhpc05vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgbmV4dCBzaWJsaW5nIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxuICAgICAqL1xuICAgIHN0YXRpYyBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIrIFwiICsgc2VsZWN0b3IpIDogZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgc3Vic2VxdWVudCBzaWJsaW5ncy5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBuZXh0IHNpYmxpbmdzIG9mXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXG4gICAgICovXG4gICAgc3RhdGljIG5leHRBbGwoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwifiAqXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN1YnNlcXVlbnQgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xuICAgICAqL1xuICAgIHN0YXRpYyBuZXh0VW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IFtdOyBcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgbmV4dC5wdXNoKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByZXZpb3VzIHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxuICAgICAqL1xuICAgIHN0YXRpYyBwcmV2aW91cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgIGlmIChzZWxlY3RvcikgcmV0dXJuIHByZXZpb3VzICYmIHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpID8gcHJldmlvdXMgOiBudWxsO1xuICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgcHJlY2VlZGluZyBzaWJsaW5ncy5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXG4gICAgICovXG4gICAgc3RhdGljIHByZXZpb3VzQWxsKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZykgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByZWNlZWRpbmcgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgcHJldmlvdXNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdOyBcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB3aGljaCBpbmRleCBpbiBjaGlsZHJlbiBhIGNlcnRhaW4gbm9kZSBpcy4gU2ltaWxhciB0byBqUXVlcnkncyBgJC5pbmRleCgpYFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBUaGUgbm9kZSB0byBmaW5kIGl0cyBpbmRleCBpbiBwYXJlbnRcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbm9kZVxuICAgICAqL1xuICAgIHN0YXRpYyBpbmRleEluUGFyZW50KG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgbGV0IG51bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSA9PSBub2RlKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlID09IDEpIG51bSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLmluZGV4SW5QYXJlbnR9ICovXG4gICAgc3RhdGljIGluZGV4KG5vZGUpIHtyZXR1cm4gdGhpcy5pbmRleEluUGFyZW50KG5vZGUpO31cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudCBpZiBpdCBtYXRjaGVzIHRoZSBzZWxlY3RvcixcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyBudWxsLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHBhcmVudCBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCBwYXJlbnRcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIHNpYmxpbmcgZWxlbWVudCBvciBudWxsXG4gICAgICovXG4gICAgc3RhdGljIHBhcmVudChlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuICFzZWxlY3RvciB8fCBlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikgPyBlbGVtZW50LnBhcmVudEVsZW1lbnQgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXG4gICAgICovXG4gICAgc3RhdGljIGZpbmRDaGlsZChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBzdGF0aWMgZmluZENoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBhbmNlc3RvcnMgb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgcGFyZW50cyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgcGFyZW50cyB0b1xuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXG4gICAgICovXG4gICAgc3RhdGljIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpO1xuICAgICAgICBlbHNlIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYW5jZXN0b3JzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIGFuY2VzdG9ycyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xuICAgICAqL1xuICAgIHN0YXRpYyBwYXJlbnRzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmICFlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgc2libGluZ3Mgb2YgdGhlIGVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIHNpYmxpbmdzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIipcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgc2libGluZ3MgdG9cbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgc2libGluZ3MoZWxlbWVudCwgc2VsZWN0b3IgPSBcIipcIikge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihlID0+IGUgIT0gZWxlbWVudCAmJiBlLm1hdGNoZXMoc2VsZWN0b3IpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgY3NzIHN0eWxlcyBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBzdHlsZSBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHN0eWxlLiAgXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBBdHRyaWJ1dGUgdG8gZ2V0IG9yIHNldFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gVmFsdWUgdG8gc2V0IGZvciBhdHRyaWJ1dGVcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHN0YXRpYyBjc3MoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClbYXR0cmlidXRlXTtcbiAgICAgICAgZWxlbWVudC5zdHlsZVthdHRyaWJ1dGVdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgd2lkdGggZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgd2lkdGggYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSB3aWR0aC4gIFxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFdpZHRoIHRvIHNldFxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgc3RhdGljIHdpZHRoKGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLndpZHRoKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGhlaWdodCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBoZWlnaHQgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBoZWlnaHQuICBcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBIZWlnaHQgdG8gc2V0XG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaGVpZ2h0KGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodCk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGlubmVyIHRleHQgb2YgYW4gZWxlbWVudCBpZiBnaXZlbiBhIHZhbHVlLCBvdGhlcndpc2UgcmV0dXJucyBpdC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgdGV4dCBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGV4dF0gLSBDb250ZW50IHRvIHNldFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRWl0aGVyIHRoZSBzdHJpbmcgc2V0IGJ5IHRoaXMgY2FsbCBvciB0aGUgY3VycmVudCB0ZXh0IGNvbnRlbnQgb2YgdGhlIG5vZGUuXG4gICAgICovXG4gICAgc3RhdGljIHRleHQoZWxlbWVudCwgdGV4dCkge1xuICAgICAgICBpZiAodHlwZW9mKHRleHQpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50O1xuICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIHdpZHRoIG9mXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaW5uZXJXaWR0aChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGlubmVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgaGVpZ2h0IG9mXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3RhdGljIGlubmVySGVpZ2h0KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG91dGVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciB3aWR0aCBvZlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3RhdGljIG91dGVyV2lkdGgoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlckhlaWdodCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIGhlaWdodCBvZlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIHN0YXRpYyBvdXRlckhlaWdodChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHBhZ2UuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgb2Zmc2V0IG9mXG4gICAgICogQHJldHVybiB7T2Zmc2V0fSAtIFRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgb2Zmc2V0KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBsaXN0ZW5lcnMoKSB7IHJldHVybiB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvbmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cbiAgICAgKiBcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyBvbmNlLlxuICAgICAqIGBjb25zdCBjYW5jZWwgPSBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImZpcmVkIVwiKTsgY2FuY2VsKCk7fSk7YFxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgc3RhdGljIG9uKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0pIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnNwbGljZSh0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLmZpbmRJbmRleChsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCksIDEpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5jZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBtZXRob2QgbWF0Y2hlcyB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9ufSBidXQgYXV0b21hdGljYWxseSBjYW5jZWxzIGl0c2VsZlxuICAgICAqIGFuZCByZW1vdmVzIHRoZSBsaXN0ZW5lciB1cG9uIHRoZSBmaXJzdCBmaXJpbmcgb2YgdGhlIGRlc2lyZWQgZXZlbnQuXG4gICAgICogXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgb25jZShlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XG4gICAgICAgIH0gOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHJldHVybjtcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnB1c2goe1xuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBuZXdDYW5jZWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuY2VsO1xuICAgIH1cblxuICAgIHN0YXRpYyBfX29mZkFsbChldmVudCwgZWxlbWVudCkge1xuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcbiAgICAgICAgbGV0IG1hdGNoRmlsdGVyID0gbGlzdGVuZXIgPT4gbGlzdGVuZXIuZXZlbnQgPT0gdHlwZSwgZGVmYXVsdEZpbHRlciA9IF8gPT4gXztcbiAgICAgICAgaWYgKGVsZW1lbnQpIG1hdGNoRmlsdGVyID0gbCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQsIGRlZmF1bHRGaWx0ZXIgPSBsID0+IGwuZWxlbWVudCA9PSBlbGVtZW50O1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdIHx8IFtdO1xuICAgICAgICBjb25zdCBsaXN0ID0gdHlwZSA/IGxpc3RlbmVycy5maWx0ZXIobWF0Y2hGaWx0ZXIpIDogbGlzdGVuZXJzLmZpbHRlcihkZWZhdWx0RmlsdGVyKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBsaXN0Lmxlbmd0aDsgYysrKSBsaXN0W2NdLmNhbmNlbCgpO1xuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9mZmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cbiAgICAgKiBcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBvbkNsaWNrKTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVkIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsIG9uQ2xpY2spO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2tcIiwgb25DbGljayk7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tIGBlbGVtZW50YC5cbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiLm15UGx1Z2luXCIpO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBjbGljayBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiY2xpY2subXlQbHVnaW5cIik7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxuICAgICAqIGBET01Ub29scy5vZmYoXCIubXlQbHVnaW5cIik7YFxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7KEVsZW1lbnR8c3RyaW5nKX0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmVtb3ZlIGxpc3RlbmVyIGZyb21cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V2ZW50XSAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBbZGVsZWdhdGVdIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgb3JpZ2luYWwgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgb2ZmKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZihlbGVtZW50KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gdGhpcy5fX29mZkFsbChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHJldHVybiB0aGlzLl9fb2ZmQWxsKGV2ZW50LCBlbGVtZW50KTtcblxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIHdoZW4gdGhlIG5vZGUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBib2R5LlxuICAgICAqIFRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdXBvbiBmaXJpbmcuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gd2FpdCBmb3JcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBldmVudFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25Nb3VudCAtIGRldGVybWluZXMgaWYgaXQgc2hvdWxkIGZpcmUgb24gTW91bnQgb3Igb24gVW5tb3VudFxuICAgICAqL1xuICAgIHN0YXRpYyBvbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBvbk1vdW50ID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2ssIG11dGF0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShvbk1vdW50ID8gbXV0YXRpb24uYWRkZWROb2RlcyA6IG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYHRydWVgICovXG4gICAgc3RhdGljIG9uTW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjayk7IH1cblxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYGZhbHNlYCAqL1xuICAgIHN0YXRpYyBvblVubW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XG5cbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudH0gKi9cbiAgICBzdGF0aWMgb25BZGRlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50KG5vZGUsIGNhbGxiYWNrKTsgfVxuXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uVW5tb3VudH0gKi9cbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uVW5tb3VudChub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggY29tYmluZXMgbXVsdGlwbGUgZWxlbWVudHMgaW50byBvbmUgcGFyZW50IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FycmF5PEhUTUxFbGVtZW50Pn0gZWxlbWVudHMgLSBhcnJheSBvZiBlbGVtZW50cyB0byBwdXQgaW50byBhIHNpbmdsZSBwYXJlbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgd3JhcChlbGVtZW50cykge1xuICAgICAgICBjb25zdCBkb21XcmFwcGVyID0gdGhpcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJkb20td3JhcHBlclwiPjwvZGl2PmApO1xuICAgICAgICBmb3IgKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzLmxlbmd0aDsgZSsrKSBkb21XcmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnRzW2VdKTtcbiAgICAgICAgcmV0dXJuIGRvbVdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgdGhlIG5vZGUgdG8gYW4gSFRNTEVsZW1lbnQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgYnkgbGlicmFyeSBtb2R1bGVzLlxuICAgICAqIEBwYXJhbSB7KGpRdWVyeXxFbGVtZW50KX0gbm9kZSAtIG5vZGUgdG8gcmVzb2x2ZVxuICAgICAqL1xuICAgIHN0YXRpYyByZXNvbHZlRWxlbWVudChub2RlKSB7XG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xuICAgIH1cbn1cblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRPTSA9IERPTVRvb2xzIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBFbW9qaVJlZ2V4OiAvPGE/XFwuKFxcdyspXFwuKFxcZCspPi9nXHJcbn1cclxuXHJcbmxldCBDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG5sZXQgRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdXHJcbmxldCBBdXRvY29tcGxldGVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilbMF1cclxubGV0IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylbMF1cclxubGV0IEVtb2ppTW9kdWxlUXVlcnkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylbMF1cclxubGV0IE1lc3NhZ2VzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKVswXVxyXG5sZXQgZ3VpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzICYmICFlLmRlZmF1bHQuaXNGZXRjaGluZylbMF1cclxubGV0IGVtb2ppU2VhcmNoID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dClcclxuY29uc3QgYXBwU2V0dGluZ3MgPSBMaWdodGNvcmQuQXBpLnNldHRpbmdzXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmluaXQoKS5jYXRjaChlcnIgPT4gVXRpbHMuZXJyKFwiRW1vamlNb2R1bGVcIiwgXCJBbiBlcnJvciBvY2N1cmVkXCIsIGVycikpIC8vIGJldHRlciBsb2dnaW5nXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIC8qKiBFbW9qaSBBdXRvQ29tcGxldGUgKi9cclxuICAgICAgICBpZighQXV0b2NvbXBsZXRlTW9kdWxlKUF1dG9jb21wbGV0ZU1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilcclxuICAgICAgICBpZighQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylcclxuICAgICAgICBpZighRW1vamlNb2R1bGVRdWVyeSlFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVxyXG4gICAgICAgIGlmKCFNZXNzYWdlcylNZXNzYWdlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpXHJcbiAgICAgICAgaWYoIWd1aWxkTW9kdWxlKWd1aWxkTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVxyXG4gICAgICAgIGlmKCFlbW9qaVNlYXJjaCllbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3NbXCJFbW9qaSBQcmVmaXhcIl1cclxuICAgICAgICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcHBTZXR0aW5ncy5nZXQoXCJCRF9cIitzZXR0aW5nLmlkLCBzZXR0aW5nLmRlZmF1bHQpXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIilyZXR1cm4gc2V0dGluZy5kZWZhdWx0XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoQXV0b2NvbXBsZXRlTW9kdWxlICYmIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzICYmIEVtb2ppTW9kdWxlUXVlcnkgJiYgTWVzc2FnZXMgJiYgZ3VpbGRNb2R1bGUgJiYgZW1vamlTZWFyY2gpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUGF0Y2hpbmcgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyBvZiBBdXRvQ29tcGxldGlvblRlbXBsYXRlc2AsIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKVxyXG4gICAgICAgICAgICBjb25zdCBnZXRBdXRvY29tcGxldGVPcHRpb25zID0gQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9uc1xyXG4gICAgICAgICAgICBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zID0gZnVuY3Rpb24oZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5MSUdIVENPUkRfRU1PSklTID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMoYXJnMSwgYXJnMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBhcmcyLmxlbmd0aCA+IDEgJiYgZ2V0VmFsdWUoKSA9PT0gYXJnMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFbW9qaVVzYWJsZShjb25kaXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0cyh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBFbW9qaU1vZHVsZVF1ZXJ5LmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHModCwgZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclJlc3VsdHMoZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEKGUsIHQsIGEuZW1vamlzLCBuLCByLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJLCBBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5FbW9qaSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBlLmlkIHx8IGUudW5pcXVlTmFtZSB8fCBlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudGluZWw6IGdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbGQ6IG51bGwgIT0gZS5ndWlsZElkID8gZ3VpbGRNb2R1bGUuZGVmYXVsdC5nZXRHdWlsZChlLmd1aWxkSWQpIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZSgpICsgZSArIGdldFZhbHVlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRQbGFpblRleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmF3VGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBzdGFydCBhdXRvY29tcGxldGlvbiBvZiBMaWdodGNvcmQncyBlbW9qaXMuXCIpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIEVtb2ppIGRpc3BsYXkgKi9cclxuICAgICAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vamlSZW5kZXIpeyAvLyBUT0RPOiBQcm9wZXIgZW1vamkgZm9ybWF0dGluZyAvIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIW1lc3NhZ2UpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgIGlmKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aClyZXR1cm5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e1xyXG4gICAgICAgICAgICAgICAgICogIHJhdzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIG5hbWU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBpZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGFuaW1hdGVkOiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICAgKiB9W119XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBlbW9qaXMgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gW11cclxuICAgICAgICAgICAgICAgIGZvcihsZXQgbm9kZSBvZiBjb250ZW50KXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2VcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IENvbnN0YW50cy5FbW9qaVJlZ2V4LmV4ZWMobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BhcnNlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFFbW9qaU1vZHVsZUFwaSlFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gRW1vamlNb2R1bGVBcGkuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQocGFyc2VkWzJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1vamkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbW9qaS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc1BhcnNlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdChcIiBcIikubWFwKCh3b3JkLCBpbmRleCwgYXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighd29yZClyZXR1cm4gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZW1vamkpcmV0dXJuIHdvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFDdXN0b21FbW9qaU1vZHVsZSlDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tRW1vamlNb2R1bGUuQ3VzdG9tRW1vamksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtnZXRWYWx1ZSgpfSR7ZW1vamkubmFtZX0ke2dldFZhbHVlKCl9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJldmlvdXMubGVuZ3RoID09PSAwKXJldHVybiBbY3VycmVudF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSArPSBgICR7Y3VycmVudH1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiK2N1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiLCBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnNoaWZ0KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKG5ld0NvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5wdXNoKG5ld0NvbnRlbnQuc2hpZnQoKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0vKlxyXG4gICAgICAgIGxldCB1c2VyTW9kdWxlXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiKVxyXG4gICAgICAgIC50aGVuKEVtb2ppUGlja2VyTGlzdFJvdyA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc3MgPSBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdFxyXG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdCA9IGNsYXNzIEVtb2ppUGlja2VyTGlzdFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyTW9kdWxlKXJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgdGhpcy5wcm9wcylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbilyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW9qaURlc2NyaXB0b3JzOiB0aGlzLnByb3BzLmVtb2ppRGVzY3JpcHRvcnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pc0Rpc2FibGVkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KSkgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0LmRpc3BsYXlOYW1lID0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIlxyXG4gICAgICAgIH0pKi9cclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEQoZSwgdCwgbiwgciwgbywgaSwgcywgdSwgbCwgYykge1xyXG4gICAgaWYgKG51bGwgPT0gbiB8fCAwID09PSBuLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICB2YXIgZCA9IG4ubWFwKChmdW5jdGlvbihlLCBuKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodSwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIG9uQ2xpY2s6IG8sXHJcbiAgICAgICAgICAgIG9uSG92ZXI6IHIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0ID09PSBuLFxyXG4gICAgICAgICAgICBpbmRleDogblxyXG4gICAgICAgIH0sIGwoZSwgbikpKVxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIFtSKGksIHMsIGUsIGMpLCBkXVxyXG59XHJcblxyXG5mdW5jdGlvbiBSKGUsIHQsIG4sIHIpIHtcclxuICAgIHZhciBhID0gKG4ubGVuZ3RoID4gMCA/IGUuZm9ybWF0KHtcclxuICAgICAgICBwcmVmaXg6IHIobilcclxuICAgIH0pIDogdClcclxuICAgIGlmKEFycmF5LmlzQXJyYXkoYSkpe1xyXG4gICAgICAgIGEudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIHt9LCBcIltMaWdodGNvcmRdIFwiKSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGEgPSBcIltMSUdIVENPUkRdIFwiK2FcclxuICAgIH1cclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LlRpdGxlLCB7XHJcbiAgICAgICAgdGl0bGU6IGFcclxuICAgIH0sIGEpXHJcbn1cclxuUi5kaXNwbGF5TmFtZSA9IFwicmVuZGVySGVhZGVyXCI7XHJcblxyXG5sZXQgRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbmxldCBpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZSAmJiBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5sZXQgaXNVc2FibGUgPSBmYWxzZVxyXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXHJcblxyXG5mdW5jdGlvbiBzZXRFbW9qaVVzYWJsZSh1c2FibGUpe1xyXG4gICAgaXNVc2FibGUgPSB1c2FibGVcclxuICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpcmV0dXJuXHJcbiAgICBpZighaXNFbW9qaURpc2FibGVkKWlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcblxyXG4gICAgaGFzUGF0Y2hlZCA9IHRydWVcclxuICAgIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkID0gZnVuY3Rpb24oZW1vamkpe1xyXG4gICAgICAgIGlmKGlzVXNhYmxlKXtcclxuICAgICAgICAgICAgaWYoZW1vamkuc3Vycm9nYXRlcyB8fCBlbW9qaS5kaXZlcnNpdHkpcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0Vtb2ppRGlzYWJsZWQuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiXG5jb25zdCB7dXNlU3RhdGV9ID0gQkRWMi5yZWFjdFxuXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb3JjZVVwZGF0ZSgpe1xuICAgIHJldHVybiB1c2VTdGF0ZSgpWzFdO1xufSIsImltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIlxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxuaW1wb3J0IHsgYWRkb25DYWNoZSB9IGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCJcblxuY29uc3QgY2FjaGUgPSB7fVxuY29uc3QgY2FjaGUyID0ge31cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpbkNlcnRpZmllciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbkNlcnRpZmllciA9IHRoaXNcbiAgICB9XG5cbiAgICBwYXRjaChhdHRhY2htZW50LCBpZCl7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc3RhcnQoKXtcblxuICAgIH1cblxuICAgIGlzVHJ1c3RlZChoYXNoKXtcbiAgICAgICAgcmV0dXJuIGNhY2hlW2hhc2hdICYmICFjYWNoZVtoYXNoXS5zdXNwZWN0XG4gICAgfVxufVxuXG5jb25zdCB0ZXN0cyA9IFtcbiAgICBbL3Rva2VuL2dpLCAwLCAwXSxcbiAgICBbL2VtYWlsL2dpLCAwLCAwXSxcbiAgICBbL21mYS9naSwgMCwgMF0sXG4gICAgWy8yZmEvZ2ksIDAsIDBdLFxuICAgIFsvcGhvbmUvZ2ksIDAsIDBdLFxuICAgIFsvY2hpbGRfcHJvY2Vzcy9naSwgMCwgMF0sXG4gICAgWy9sb2NhbFN0b3JhZ2UvZ2ksIDAsIDBdLFxuICAgIFsvZ2V0R2xvYmFsL2dpLCAwLCAwXSxcbiAgICBbL0Jyb3dzZXJXaW5kb3cvZ2ksIDAsIDBdLFxuICAgIFsvXFwuZXhlL2dpLCAwLCAxXSxcbiAgICBbL3N5c3RlbTMyL2dpLCAwLCAwXSxcbiAgICBbL3Bhc3N3b3JkL2dpLCAwLCAwXSxcbiAgICBbL2V2YWwvZ2ksIDAsIDBdLFxuICAgIFsvV2ViQXNzZW1ibHkvZ2ksIDAsIDBdLFxuICAgIFsvWE1MSHR0cFJlcXVlc3QoXFwufFxcW1tcIidgXSlwcm90b3R5cGUvZ2ksIDAsIDBdLFxuICAgIFsvd2luZG93XFwuZmV0Y2goICspPz0vZ2ksIDAsIDBdLFxuICAgIC8qKiBPYmZ1c2NhdGlvbiAvIGhpZGRlbiAvIHdvcmthcm91bmRzICovXG4gICAgWy8oW1wiJ2BdXFwrKVtcIidgXVxcd1tcIidgXS9naSwgMSwgMV0sXG4gICAgWy9bXCInYF1cXHdbXCInYF0oXFwrW1wiJ2BdKS9naSwgMSwgMV0sXG4gICAgWy9cXCR7W1wiJ2BdXFx3K1tcIidgXX0vZ2ksIDEsIDFdLFxuICAgIC8qKiBoZXhhZGVjaW1hbCAqL1xuICAgIFsvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLCAxLCAxXSxcbiAgICBbL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKycoICspPywoICspPydbXiddezR9J1xcKS9nLCAxLCAxXSwgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxuICAgIC8qKiBtYW5nbGVkICovXG4gICAgWy9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLCAxLCAxXSwgLy8gYignMHgwJylcbiAgICBbL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnKCArKT8sKCArKT8nW14nXXs0fSdcXCkvZywgMSwgMV0sIC8vIGIoJzB4MCcsICd4MV1mJylcbiAgICAvKiogc3RyaW5nIGFycmF5IGF0IHN0YXJ0ICovXG4gICAgWy9edmFyIFtcXHdcXGRfJF0rPVxcW1wiL2dpLCAxLCAxXVxuXVxuXG5jb25zdCB0aHJlYXRzID0gW1xuICAgIFwiQWNjb3VudCBTdGVhbGVyL1ZpcnVzXCIsXG4gICAgXCJPYmZ1c2NhdGlvbi9IaWRkZW4gY29kZVwiXG5dXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSl7XG4gICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpXG4gICAgbGV0IGlzSGFybWZ1bCA9IGZhbHNlXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBjb25zdCBub19jb21tZW50cyA9IGRhdGEucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3woW15cXFxcOl18XilcXC9cXC8uKiQvZ20sIFwiXCIpLnRyaW0oKS8vIHJlbW92aW5nIGFsbCBjb21tZW50cyBmcm9tIHBsdWdpbnMgKHJlbW92ZSBtZXRhIGFuZCBvdGhlci4pXG5cbiAgICBmb3IoY29uc3QgW3Rlc3QsIHR5cGUsIHJlbW92ZUNvbW1lbnRdIG9mIHRlc3RzKXtcbiAgICAgICAgY29uc3Qgc2NycHQgPSByZW1vdmVDb21tZW50ID09PSAxID8gbm9fY29tbWVudHMgOiBkYXRhXG4gICAgICAgIGlmKHRlc3QuZXhlYyhzY3JwdCkpe1xuICAgICAgICAgICAgaXNIYXJtZnVsID0gdGhyZWF0c1t0eXBlXVxuICAgICAgICAgICAgY29uc29sZS5sb2coYCR7aGFzaFRvVXJsW2hhc2hdLnNwbGl0KFwiL1wiKS5wb3AoKX0gZmFpbGVkIGF0IHRlc3RgLCB0ZXN0LCBcIi4gTWFya2VkIGFzXCIsIHRocmVhdHNbdHlwZV0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYoIWlzSGFybWZ1bClyZXR1cm4gcmVtb3ZlQ2FsbGJhY2soaGFzaClcbiAgICBjYWNoZVtoYXNoXSA9IHtcbiAgICAgICAgc3VzcGVjdDogdHJ1ZSxcbiAgICAgICAgbmFtZTogaGFzaFRvVXJsW2hhc2hdLnNwbGl0KFwiL1wiKS5wb3AoKSxcbiAgICAgICAgdHlwZTogaGFzaFRvVXJsW2hhc2hdLmVuZHNXaXRoKFwiLmpzXCIpID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIixcbiAgICAgICAgaGFybTogaXNIYXJtZnVsLFxuICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICBmaWxlbmFtZVxuICAgIH1cbiAgICBcbiAgICBjb25zb2xlLmxvZyhgRm91bmQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzICR7Y2FjaGVbaGFzaF0udHlwZS50b0xvd2VyQ2FzZSgpfTogJHtjYWNoZVtoYXNoXS5uYW1lfWApXG5cbiAgICByZXN1bHRDYWxsYmFjayhjYWNoZVtoYXNoXSlcbn1cblxuY29uc3QgaGFzaFRvVXJsID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSGFzaChoYXNoLCBkYXRhLCBmaWxlbmFtZSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrKXtcbiAgICBjb25zb2xlLmxvZyhgRmlsZTogJHtmaWxlbmFtZX0gaGFzaDogJHtoYXNofWApXG4gICAgaWYoIWNhY2hlW2hhc2hdKXtcbiAgICAgICAgbm9kZUZldGNoKFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL0xpZ2h0Y29yZC9maWxlaGFzaGVzQG1hc3Rlci9oYXNoZXMvXCIraGFzaCwgeyAvLyBVc2luZyBub2RlLWZldGNoIHRvIGJ5cGFzcyBjb3JzXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKFwiTElHSFRDT1JEX0dFVF9VU0VSX0FHRU5UXCIpIC8vIGhhdmUgdG8gc2V0IHVzZXItYWdlbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xuICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXtcbiAgICAgICAgICAgICAgICBpZihmaWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXG4gICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSlcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2FsbGJhY2soKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcy5qc29uKClcbiAgICAgICAgICAgIHJlc3VsdC5oYXNoID0gaGFzaFxuICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lID0gZmlsZW5hbWVcblxuICAgICAgICAgICAgY2FjaGVbaGFzaF0gPSByZXN1bHRcblxuICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KVxuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDb3VsZCBub3QgcmVhZCBmcm9tIGdpdGh1Yi4gJHtlcnJ9YClcbiAgICAgICAgICAgIGlmKGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRoZW1lLmNzc1wiKSlyZXR1cm4gcmVtb3ZlQ2FsbGJhY2soaGFzaClcbiAgICAgICAgICAgIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2ssIGZpbGVuYW1lKVxuICAgICAgICB9KVxuICAgIH1lbHNle1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjYWNoZVtoYXNoXVxuXG4gICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdClcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZShfX3BhdGgsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayA9IChoYXNoKSA9PiB7fSwgaXNGcm9tTG9hZGVyID0gZmFsc2UpeyAgICBcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKVxuXG4gICAgY3JlYXRlUmVhZFN0cmVhbShfX3BhdGgpLm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pXG4gICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxuICAgIH0pLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpXG5cbiAgICAgICAgaGFzaFRvVXJsW2hhc2hSZXN1bHRdID0gX19wYXRoXG5cbiAgICAgICAgaWYoaXNGcm9tTG9hZGVyICYmIGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF0pe1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxuICAgICAgICAgICAgaWYodmFsdWUudGltZXN0YW1wIDwgKERhdGUubm93KCkgLSA2LjA0OGUrOCkpe1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXG4gICAgICAgICAgICAgICAgY29udGVudE1hbmFnZXIuc2F2ZUFkZG9uQ2FjaGUoKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2sodmFsdWUucmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tIYXNoKGhhc2hSZXN1bHQsIGRhdGEsIGJhc2VuYW1lKF9fcGF0aCksIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaylcbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpe1xuICAgIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpcmV0dXJuXG4gICAgaWYoIWF0dGFjaG1lbnQudXJsLnN0YXJ0c1dpdGgoXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9cIikpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKVxuICAgIGlmKCFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSAmJiAhYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKVxuXG4gICAgbm9kZUZldGNoKGF0dGFjaG1lbnQudXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9HRVRfVVNFUl9BR0VOVFwiKVxuICAgICAgICB9XG4gICAgfSkudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiRmlsZSBkb2Vzbid0IGV4aXN0LlwiKVxuICAgICAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAgICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcbiAgICAgICAgcmVzLmJvZHkub24oXCJkYXRhXCIsIGNodW5rID0+IHtcbiAgICAgICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pXG4gICAgICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcbiAgICAgICAgfSlcbiAgICAgICAgcmVzLmJvZHkub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpXG5cbiAgICAgICAgICAgIGNhY2hlMlthdHRhY2htZW50LnVybF0gPSBoYXNoUmVzdWx0XG4gICAgICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBhdHRhY2htZW50LnVybFxuXG4gICAgICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYXR0YWNobWVudC5maWxlbmFtZSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgYXR0YWNobWVudC5maWxlbmFtZSlcbiAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxuICAgICAgICAgICAgICAgIGlmKGVsZW0pZWxlbS5yZW1vdmUoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9KS5jYXRjaCgoKT0+e30pXG59XG5cbmxldCBmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cbmxldCBjaGlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoaWxkQ29udGFpbmVyKVswXVxuXG4vKipcbiAqIFxuICogQHBhcmFtIHtIVE1MRGl2RWxlbWVudFtdfSBlbGVtZW50cyBcbiAqIEBwYXJhbSB7e3R5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIG9mZmljaWFsPzogYm9vbGVhbn18e3N1c3BlY3Q6dHJ1ZSwgdHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgaGFybTogc3RyaW5nfX0gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgZmlsZW5hbWUpe1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxuICAgIGlmKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMClyZXR1cm4gLy8gYWxyZWFkeSBjZXJ0aWZpZWQvZGl2IGRvZXMgbm90IGV4aXN0IGFueW1vcmUuXG5cbiAgICBpZighZmxvd2VyU3Rhck1vZHVsZSlmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cbiAgICBpZighY2hpbGRNb2R1bGUpY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cbiAgICBcbiAgICBpZihyZXN1bHQuc3VzcGVjdCl7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsZXQgbmV4dE5vZGUgPSAobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcihsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkLnRhZ05hbWUgPT09IFwiQVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyA/XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiICoqXCIrZmlsZW5hbWUrXCIqKiBtaWdodCBiZSBkYW5nZXJvdXMgKiooXCIrcmVzdWx0Lmhhcm0rXCIpKiouIFxcblxcbioqV2UgZG9uJ3QgcmVjb21tYW5kIHRvIGRvd25sb2FkIGl0KiouIEhvd2V2ZXIsIHlvdSBjYW4gc3RpbGwgZG8gaXQgYmVsb3cuXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBBbnl3YXlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiRG9uJ3QgIVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfT1BFTl9FWFRFUk5BTFwiLCBjaGlsZC5ocmVmKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoW1wiZGl2XCJdLmluY2x1ZGVzKGNoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUoY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0Tm9kZShkaXYucGFyZW50Tm9kZSlcbiAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICB9XG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cy5cIn0sIFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9fSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuc3ZnKVswXS5zdmcsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgNDAgMzJcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDpcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6XCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDpcIjMyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6XCIzMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC0zMilcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6XCIjZjA0NzQ3XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1zdGF0dXMtZG5kKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOkJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICksIGRpdilcbiAgICB9ZWxzZSBpZighcmVzdWx0Lm9mZmljaWFsKXtcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxuICAgICAgICBsZXQgc3BhbiA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZGlzcGxheTogXCJpbmhlcml0XCJ9fSwgW1xuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgY2VydGlmaWVkIGJ5IExpZ2h0Y29yZC5cIn0sIFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwiLCBmbG9hdDogXCJsZWZ0XCJ9fSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiM0ZjU0NWNcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyfSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTcuNCwxMS4xNyw0LDguNjIsNSw3LjI2bDIsMS41M0wxMC42NCw0bDEuMzYsMVpcIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBhbmQgbGF1bmNoIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIi4gWW91IGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8uXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIGFuZCBJbnN0YWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluayA9IGdldEtleWVkQXJyYXkoY2FjaGUyKS5maW5kKGUgPT4gZVsxXSA9PT0gcmVzdWx0Lmhhc2gpWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxpbmspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVGZXRjaChsaW5rKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBhd2FpdCByZXMuYnVmZmVyKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnN0YWxsUGF0aCA9IGpvaW4ocmVzdWx0LnR5cGUgPT09IFwiUGx1Z2luXCIgPyBjb250ZW50TWFuYWdlci5fcGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLl90aGVtZXNGb2xkZXIsIHJlc3VsdC5maWxlbmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGluc3RhbGxQYXRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhpbnN0YWxsUGF0aCwgY29udGVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChyZXN1bHQudHlwZStcIiBzdWNjZXNmdWxseSBpbnN0YWxsZWQuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoZXJyLm1lc3NhZ2UsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixzdHlsZTp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiZmlsbFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXpcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIF0pXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNwYW4sIGRpdilcbiAgICB9ZWxzZXtcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxuICAgICAgICBsZXQgc3BhbiA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZGlzcGxheTogXCJpbmhlcml0XCJ9fSwgW1xuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgd2FzIG1hZGUgYnkgdGhlIGRldmVsb3BlcnMgb2YgTGlnaHRjb3JkLlwiLCBzdHlsZTpcImJyYW5kXCJ9LCBcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwiLHN0cm9rZTpcIiMzNjM5M2ZcIixzdHlsZTp7Y29sb3I6XCIjNDA4N2VkXCJ9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCJjdXJyZW50Q29sb3JcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyfSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTEwLjcsNS4yOGEyLjksMi45LDAsMCwwLTIuMTEuODYuMTEuMTEsMCwwLDAsMCwuMTZsMS4wNS45NGEuMTEuMTEsMCwwLDAsLjE1LDAsMS4yNywxLjI3LDAsMCwxLC45LS4zM2MuNjUsMCwuNjUuNzMuNjUuNzNhLjY0LjY0LDAsMCwxLS42NS42NSwxLjczLDEuNzMsMCwwLDEtMS4xOC0uNTRjLS4zMS0uMjYtLjM2LS4zMi0uNzMtLjY2UzcuMDYsNS4yOCw1LjY1LDUuMjhBMi4yNiwyLjI2LDAsMCwwLDMuMzcsNy41NiwyLjU5LDIuNTksMCwwLDAsMy44Miw5YTIuMTgsMi4xOCwwLDAsMCwxLjgzLjg5LDIuOTQsMi45NCwwLDAsMCwyLjEtLjgxLjExLjExLDAsMCwwLDAtLjE2TDYuNzQsOEEuMTEuMTEsMCwwLDAsNi42LDhhMS41OCwxLjU4LDAsMCwxLS45NC4yOWgwQS43MS43MSwwLDAsMSw1LDcuNTZINWEuNjMuNjMsMCwwLDEsLjY1LS42NGMuNzEsMCwxLjQyLjc1LDEuOTQsMS4yNy43NS43NiwxLjY2LDEuNzksMy4xMSwxLjc0QTIuMjgsMi4yOCwwLDAsMCwxMyw3LjY0YTIuNTksMi41OSwwLDAsMC0uNDUtMS40N0EyLjE0LDIuMTQsMCwwLDAsMTAuNyw1LjI4WlwifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiBcIkluc3RhbGwgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiIG9uIExpZ2h0Y29yZC5cIn0sIFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgP1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBkb3dubG9hZCBhbmQgbG9hZCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBtdXN0IGVuYWJsZSBpdCBpbiB0aGUgc2V0dGluZ3MuXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIGFuZCBJbnN0YWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluayA9IGdldEtleWVkQXJyYXkoY2FjaGUyKS5maW5kKGUgPT4gZVsxXSA9PT0gcmVzdWx0Lmhhc2gpWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgd2FzIG5vdCAyMDBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRLZXllZEFycmF5KG9iail7XG4gICAgbGV0IGFyciA9IFtdXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICBhcnIucHVzaChbaywgb2JqW2tdXSlcbiAgICB9KVxuICAgIHJldHVybiBhcnJcbn1cblxubGV0IGtleSA9IG51bGxcbmxldCBzYXZlID0gbnVsbFxuXG53aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChtPT5tLk9iamVjdFN0b3JhZ2UpXG4udGhlbihsb2NhbFN0b3JhZ2VNb2R1bGUgPT4ge1xuICAgIGxldCBsb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2VNb2R1bGUuaW1wbFxuICAgIHNhdmUgPSBmdW5jdGlvbigpe1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIsIGJ0b2EoSlNPTi5zdHJpbmdpZnkoa2V5KSkpXG4gICAgfVxuICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgc2F2ZSgpXG4gICAgfSwgMTAwMDAwKTtcbiAgICB0cnl7XG4gICAgICAgIGxldCB2YWwgPSBzYWZlSlNPTlBhcnNlKGF0b2IobG9jYWxTdG9yYWdlLmdldChcIlBsdWdpbkNlcnRpZmllcktleUVuY3J5cHRpb25fX1wiKSkpXG4gICAgICAgIGlmKHZhbCBpbnN0YW5jZW9mIEVycm9yIHx8ICFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCAhPT0gMiB8fCB2YWwuZmluZChlID0+IHR5cGVvZiBlICE9PSBcInN0cmluZ1wiKSB8fCBCdWZmZXIuZnJvbSh2YWxbMF0sIFwiYmFzZTY0XCIpLmxlbmd0aCAhPT0gMTYgfHwgQnVmZmVyLmZyb20odmFsWzFdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDMyKXtcbiAgICAgICAgICAgIGdlbmVyYXRlS2V5KClcbiAgICAgICAgICAgIHNhdmUoKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAga2V5ID0gdmFsXG4gICAgfWNhdGNoKGUpe1xuICAgICAgICBnZW5lcmF0ZUtleSgpXG4gICAgICAgIHNhdmUoKVxuICAgIH1cbn0pXG5cbmZ1bmN0aW9uIGdlbmVyYXRlS2V5KCl7XG4gICAga2V5ID0gW2NyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJiYXNlNjRcIiksIGNyeXB0by5yYW5kb21CeXRlcygzMikudG9TdHJpbmcoXCJiYXNlNjRcIildXG59XG5cbmZ1bmN0aW9uIHNhZmVKU09OUGFyc2UoanNvbil7XG4gICAgdHJ5e1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKVxuICAgIH1jYXRjaChlKXtcbiAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IG5ldyBFcnJvcihlKSA6IGVcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0U2V0dGluZ3NDYWNoZShkYXRhKXtcbiAgICB0cnl7XG4gICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFwiYWVzLTI1Ni1jYmNcIiwgQnVmZmVyLmZyb20oa2V5WzFdLCBcImJhc2U2NFwiKSwgQnVmZmVyLmZyb20oa2V5WzBdLCBcImJhc2U2NFwiKSlcbiAgICAgICAgbGV0IGRlY3J5cHRlZCA9IGRlY2lwaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhLCBcImJhc2U2NFwiKSk7XG4gICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gZGVjcnlwdGVkLnRvU3RyaW5nKFwidXRmOFwiKVxuICAgIH1jYXRjaChlKXtcbiAgICAgICAgcmV0dXJuIFwie31cIlxuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0U2V0dGluZ3NDYWNoZShkYXRhKXtcbiAgICBsZXQgYXJncyA9IFtCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpXVxuICAgIFxuICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywgLi4uYXJncyk7XG4gICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJ1dGY4XCIpKTtcbiAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtlbmNyeXB0ZWQsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZyhcImJhc2U2NFwiKVxufSIsImltcG9ydCB7YmRwbHVnaW5FcnJvcnMsIHBsdWdpbkNvb2tpZSwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jbGFzcyBQbHVnaW5Nb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5QbHVnaW5Nb2R1bGUgPSB0aGlzXG4gICAgfVxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXI7fVxufVxuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubG9hZFBsdWdpbkRhdGEoKTtcbiAgICBiZHBsdWdpbkVycm9ycy5zcGxpY2UoMCwgMCwgLi4uKGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRQbHVnaW5zKCkpKTtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHBsdWdpbiwgbmFtZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4uZ2V0TmFtZSgpO1xuICAgICAgICAgICAgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIGxvYWRlZC5cIiwgZXJyKTtcbiAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJsb2FkKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtuYW1lXSkgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBsdWdpbkNvb2tpZVtuYW1lXSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwbHVnaW4uc3RhcnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJzdGFydCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSlcbiAgICB9XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuXG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5vbihcImRpZC1uYXZpZ2F0ZS1pbi1wYWdlXCIsIHRoaXMuY2hhbm5lbFN3aXRjaC5iaW5kKHRoaXMpKTtcbiAgICAvLyBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc3RhcnRQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0YXJ0ZWQuYCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RhcnRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBwbHVnaW4gKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0b3BQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0b3AoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RvcHBlZC5gKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdG9wcGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpICsgXCIgY291bGQgbm90IGJlIHN0b3BwZWQuXCIsIGVycik7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcbiAgICBlbHNlIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCBwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IChjb25zb2xlLmxvZyhwLmZpbGVuYW1lLCBmaWxlbmFtZSkpIHx8IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpLnBsdWdpbjtcbiAgICB0cnkgeyBpZiAocGx1Z2luLmxvYWQgJiYgdHlwZW9mKHBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIHBsdWdpbi5sb2FkKCk7fVxuICAgIGNhdGNoIChlcnIpIHtpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyXX0pO31cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tbG9hZGVkXCIsIHBsdWdpbi5nZXROYW1lKCkpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51bmxvYWRQbHVnaW4gPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgY29uc3QgZXJyb3IgPSBDb250ZW50TWFuYWdlci51bmxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBkZWxldGUgYmRwbHVnaW5zW3BsdWdpbl07XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi11bmxvYWRlZFwiLCBwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICB0aGlzLnVubG9hZFBsdWdpbihiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICByZXF1aXJlKFwiZnNcIikudW5saW5rU3luYyhmdWxsUGF0aCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcbiAgICBjb25zdCBlbmFibGVkID0gcGx1Z2luQ29va2llW3BsdWdpbl07XG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQgJiYgdHlwZW9mKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKCk7XG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi1yZWxvYWRlZFwiLCBwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMucmVsb2FkUGx1Z2luKG5hbWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgY29uc29sZS5sb2coXCJFZGl0IFwiICsgZnVsbFBhdGgpO1xuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlUGx1Z2luTGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInBsdWdpblwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZSk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRQbHVnaW4obmFtZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInBsdWdpbnNcIik7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luQ29va2llLCBzYXZlZCk7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zYXZlUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiLCBwbHVnaW5Db29raWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5uZXdNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uTWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25NZXNzYWdlKCk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uTWVzc2FnZSBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuY2hhbm5lbFN3aXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vblN3aXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25Td2l0Y2goKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJhd09ic2VydmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vYnNlcnZlcihlKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb2JzZXJ2ZXIgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGx1Z2luTW9kdWxlKCk7IiwiaW1wb3J0IHsgdGhlbWVDb29raWUgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIlxuaW1wb3J0IGJkRXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIlxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgcG9wb3V0V2luZG93IHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge01hcDxzdHJpbmcsIFdpbmRvdz59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndpbmRvd3MgPSBuZXcgTWFwKClcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICAgICAgdGhpcy5pbml0KClcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIGxldCBwb3BvdXRNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0V2luZG93KVxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiUE9QT1VUX1dJTkRPV19PUEVOXCIsIChldikgPT4ge1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7V2luZG93fVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpbmRvdyA9IHBvcG91dE1vZHVsZS5kZWZhdWx0LmdldFdpbmRvdyhldi5rZXkpXG4gICAgICAgICAgICAgICAgdGhpcy53aW5kb3dzLnNldChldi5rZXksIHdpbmRvdylcblxuICAgICAgICAgICAgICAgIGxldCBjbGFzc0xpc3QgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3RcbiAgICAgICAgICAgICAgICBjbGFzc0xpc3QuYWRkKFwid2luZG93LXBvcG91dFwiKVxuICAgICAgICAgICAgICAgIGNsYXNzTGlzdC5hZGQoXCJsaWdodGNvcmRcIilcbiAgICAgICAgICAgICAgICBjbGFzc0xpc3QuYWRkKFwibGlnaHRjb3JkXCIpXG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZShldi5rZXkpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiUE9QT1VUX1dJTkRPV19DTE9TRVwiLCAoZXYpID0+IHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53aW5kb3dzLmRlbGV0ZShldi5rZXkpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLWVuYWJsZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgICAgICB9KVxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLWRpc2FibGVkXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKClcbiAgICAgICAgfSlcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1yZWxvYWRlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0pXG4gICAgICAgIGJkRXZlbnRzLm9uKFwidGhlbWUtdW5sb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgICAgICB9KVxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLWxvYWRlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZW5hYmxlKCl7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcbiAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgIH1cblxuICAgIGRpc2FibGUoKXtcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgIH1cblxuICAgIHVwZGF0ZShrZXkpe1xuICAgICAgICBpZighdGhpcy53aW5kb3dzLnNpemUpcmV0dXJuXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlVGhlbWVzKGtleSlcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseVRoZW1lcyhrZXkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVUaGVtZXMoa2V5KXtcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICBpZihrZXkpe1xuICAgICAgICAgICAgbGV0IHdpbmRvdyA9IHRoaXMud2luZG93cy5nZXQoa2V5KVxuICAgICAgICAgICAgaWYoIXdpbmRvdylyZXR1cm5cbiAgICAgICAgICAgIGxldCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxuXG4gICAgICAgICAgICBmb3IobGV0IHN0eWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWxpZ2h0Y29yZC10aGVtZT10cnVlXVwiKSl7XG4gICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBmb3IobGV0IGtleSBvZiB0aGlzLndpbmRvd3Mua2V5cygpKXtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRoZW1lcyhrZXkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseVRoZW1lcyhrZXkpe1xuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICBpZihrZXkpe1xuICAgICAgICAgICAgbGV0IHdpbmRvdyA9IHRoaXMud2luZG93cy5nZXQoa2V5KVxuICAgICAgICAgICAgaWYoIXdpbmRvdylyZXR1cm5cbiAgICAgICAgICAgIGxldCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxuXG4gICAgICAgICAgICBmb3IobGV0IHN0eWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWxpZ2h0Y29yZC10aGVtZT10cnVlXVwiKSl7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2V0QXR0cmlidXRlKFwid2lsbC1yZW1vdmVcIiwgXCJ0cnVlXCIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGJkdGhlbWVzKVxuICAgICAgICAgICAgLmZvckVhY2godGhlbWVOYW1lID0+IHtcbiAgICAgICAgICAgICAgICBpZighdGhlbWVDb29raWVbdGhlbWVOYW1lXSlyZXR1cm4gLy8gdGhlbWUgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lTmFtZV1cbiAgICAgICAgICAgICAgICBpZighdGhlbWUpcmV0dXJuIC8vOnNocnVnOlxuXG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW2RhdGEtbGlnaHRjb3JkLXRoZW1lPXRydWVdI1wiK0RPTS5lc2NhcGVJRCh0aGVtZS5pZCkpXG4gICAgICAgICAgICAgICAgaWYoZXhpc3Rpbmcpe1xuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5pbm5lckhUTUwgPSB1bmVzY2FwZSh0aGVtZS5jc3MpXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJlbW92ZUF0dHJpYnV0ZShcIndpbGwtcmVtb3ZlXCIpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmlkID0gRE9NLmVzY2FwZUlEKHRoZW1lLmlkKVxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5pbm5lckhUTUwgPSB1bmVzY2FwZSh0aGVtZS5jc3MpXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcImRhdGEtbGlnaHRjb3JkLXRoZW1lXCIsIFwidHJ1ZVwiKVxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZChzdHlsZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBmb3IobGV0IHN0eWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVt3aWxsLXJlbW92ZT10cnVlXVwiKSl7XG4gICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBmb3IobGV0IGtleSBvZiB0aGlzLndpbmRvd3Mua2V5cygpKXtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5VGhlbWVzKGtleSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5pbXBvcnQgVjJDX1B1YmxpY1NlcnZlcnMgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVyc1wiO1xuaW1wb3J0IExheWVycyBmcm9tIFwiLi9MYXllcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1B1YmxpY1NlcnZlcnMge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbiA9IHRoaXMuX2FwcGVuZEJ1dHRvbi5iaW5kKHRoaXMpO1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjJfUHVibGljU2VydmVycyA9IHRoaXNcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIExheWVycy5jcmVhdGVMYXllcigoY2xvc2UpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1B1YmxpY1NlcnZlcnMsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwiLCBjbG9zZX0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IGJ1dHRvbigpIHtcbiAgICAgICAgY29uc3QgYnRuID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItbGlcIiBjbGFzcz1cIiR7QkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW19XCI+YCk7XG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgYnRuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1idXR0b25cIiBjbGFzcz1cIiR7XCJ3cmFwcGVyLTI1ZVZJbiBcIiArIEJEVjIuZ3VpbGRDbGFzc2VzLmNpcmNsZUJ1dHRvbk1hc2t9XCI+cHVibGljPC9kaXY+YCk7XG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5yZW5kZXIoKTt9KTtcbiAgICAgICAgYnRuLmFwcGVuZChsYWJlbCk7XG4gICAgICAgIHJldHVybiBidG47XG4gICAgfVxuXG4gICAgX2FwcGVuZEJ1dHRvbigpIHtcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIGNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyXG4gICAgICAgIF0gPSBbXG4gICAgICAgICAgICBVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kb3dubG9hZFByb2dyZXNzICYmIGUudHV0b3JpYWxDb250YWluZXIpWzBdLnR1dG9yaWFsQ29udGFpbmVyKVxuICAgICAgICBdXG4gICAgICAgIGlmIChET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgZGl2LiR7Y2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJ9ID4gZGl2YCk7XG4gICAgICAgIERPTS5hZnRlcihndWlsZHMsIHRoaXMuYnV0dG9uKTtcbiAgICB9XG5cbiAgICBhZGRCdXR0b24oKSB7XG4gICAgICAgIGlmICh0aGlzLmd1aWxkUGF0Y2gpIHJldHVybjtcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gd2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XG4gICAgICAgIGNvbnN0IEd1aWxkTGlzdE9sZCA9IHdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiR3VpbGRzXCIpO1xuICAgICAgICBpZiAoIUd1aWxkTGlzdCAmJiAhR3VpbGRMaXN0T2xkKSBVdGlscy53YXJuKFwiUHVibGljU2VydmVyXCIsIFwiQ2FuJ3QgZmluZCBHdWlsZExpc3QgY29tcG9uZW50XCIpO1xuICAgICAgICB0aGlzLmd1aWxkUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZExpc3QgPyBHdWlsZExpc3QgOiBHdWlsZExpc3RPbGQucHJvdG90eXBlLCBHdWlsZExpc3QgPyBcImRlZmF1bHRcIiA6IFwicmVuZGVyXCIsIHthZnRlcjogdGhpcy5fYXBwZW5kQnV0dG9ufSk7XG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbigpO1xuICAgIH1cblxuICAgIHJlbW92ZUJ1dHRvbigpIHtcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoKCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmd1aWxkUGF0Y2g7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IERPTS5xdWVyeShcIiNiZC1wdWItbGlcIik7XG4gICAgICAgIGlmIChidXR0b24pIGJ1dHRvbi5yZW1vdmUoKTtcbiAgICB9XG59OyIsImltcG9ydCB7c2V0dGluZ3MsIHNldHRpbmdzQ29va2llLCBzZXR0aW5nc1JQQywgbGlnaHRjb3JkU2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFNpZGViYXJcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IGNvbG9yZWRUZXh0IGZyb20gXCIuL2NvbG9yZWRUZXh0XCI7XG5pbXBvcnQgdGZIb3VyIGZyb20gXCIuLzI0aG91clwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5pbXBvcnQgcHVibGljU2VydmVyc01vZHVsZSBmcm9tIFwiLi9wdWJsaWNTZXJ2ZXJzXCI7XG5pbXBvcnQgdm9pY2VNb2RlIGZyb20gXCIuL3ZvaWNlTW9kZVwiO1xuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9jbGFzc05vcm1hbGl6ZXJcIjtcbmltcG9ydCBkTW9kZSBmcm9tIFwiLi9kZXZNb2RlXCI7XG5cbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgQ3NzRWRpdG9yIGZyb20gXCIuLi91aS9jc3NFZGl0b3JcIjtcbmltcG9ydCBDYXJkTGlzdCBmcm9tIFwiLi4vdWkvYWRkb25saXN0XCI7XG5pbXBvcnQgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZnJvbSBcIi4uL3VpL3ByZXNlbmNlU2V0dGluZ3NcIjtcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4vQ3VzdG9tUmljaFByZXNlbmNlXCI7XG5pbXBvcnQgVjJDX0FjY291bnRJbmZvcyBmcm9tIFwiLi4vdWkvQWNjb3VudEluZm9zXCI7XG5pbXBvcnQgeyByZW1vdGUsIGlwY1JlbmRlcmVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgQW50aUFkRE0gZnJvbSBcIi4vQW50aUFkRE1cIjtcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xuaW1wb3J0IGRpc2FibGVUeXBpbmcgZnJvbSBcIi4vZGlzYWJsZVR5cGluZ1wiO1xuaW1wb3J0IEFwaVByZXZpZXcgZnJvbSBcIi4uL3VpL0FwaVByZXZpZXdcIjtcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4uL3VpL3N3aXRjaFwiO1xuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi4vdWkvbWFyZ2ludG9wXCI7XG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcbmltcG9ydCBIaXN0b3J5IGZyb20gXCIuLi91aS9pY29ucy9oaXN0b3J5XCI7XG5pbXBvcnQgY29yZSBmcm9tIFwiLi9jb3JlXCI7XG5pbXBvcnQgcG9wb3V0V2luZG93IGZyb20gXCIuL3BvcG91dFdpbmRvd1wiO1xuaW1wb3J0IFRleHRJbnB1dFNldHRpbmcgZnJvbSBcIi4uL3VpL1RleHRJbnB1dFNldHRpbmdcIjtcblxuY2xhc3MgQkRTaWRlYmFySGVhZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBzaWRlYmFyQ29tcG9uZW50cyA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLlNlcGFyYXRvciAmJiBlLkhlYWRlciAmJiBlLkl0ZW0pXG5cbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gUmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQ2hhbmdlbG9nXCJ9LCBcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Zsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCJ9LCBjbGFzc05hbWU6IFwiYmQtY2hhbmdlbG9nLWJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7VXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7fX0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBsZXQgcmVuZGVyZWQgPSBuZXcgc2lkZWJhckNvbXBvbmVudHMuSGVhZGVyKHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBcIkJhbmRhZ2VkIEJEXCIsIGNoYW5nZWxvZ0J1dHRvbiksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIlxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gcmVuZGVyZWRcbiAgICB9XG59XG5cbmxldCBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaWRlYmFyID0gbmV3IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhcigpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnRzKClcbiAgICB9XG5cbiAgICByZWdpc3RlckNvbXBvbmVudHMoKXtcbiAgICAgICAgLyoqIExpZ2h0Y29yZCAqL1xuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsaWdodGNvcmRcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmxpZ2h0Y29yZENvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwic3RhdHVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5QcmVzZW5jZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiYWNjb3VudGluZm9cIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGNhcGlwcmV2aWV3XCIsIG1ha2VDb21wb25lbnQodGhpcy5BcGlQcmV2aWV3Q29tcG9uZW50LmJpbmQodGhpcykpKVxuXG4gICAgICAgIC8qIEJhbmRhZ2VkIEJEICovXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcIkJEQ2hhbmdlbG9nVGl0bGVcIiwgbWFrZUNvbXBvbmVudCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJEU2lkZWJhckhlYWRlcigpLnJlbmRlcigpXG4gICAgICAgIH0pKVxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjb3JlXCIsIG1ha2VDb21wb25lbnQodGhpcy5jb3JlQ29tcG9uZW50LmJpbmQodGhpcykpKVxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjdXN0b21jc3NcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmN1c3RvbUNzc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwicGx1Z2luc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwicGx1Z2luc1wiKSkpXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInRoZW1lc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwidGhlbWVzXCIpKSlcbiAgICB9XG4gICAgXG4gICAgZ2V0IGNvcmVTZXR0aW5ncygpIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwiY29yZVwiKTtcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xuICAgICAgICByZXR1cm4gc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGxpZ2h0Y29yZFNldHRpbmdzKCkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJsaWdodGNvcmRcIik7XG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGNhdGVnb3JpZXMubWFwKGMgPT4ge3JldHVybiB7dGl0bGU6IGMsIHNldHRpbmdzOiBzZXR0aW5ncy5maWx0ZXIocyA9PiBzLmNhdGVnb3J5ID09IGMpfTt9KTtcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xuICAgIH1cblxuICAgIGdldCBQcmVzZW5jZVNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcInN0YXR1c1wiKVxuICAgIH1cblxuICAgIGdldFNldHRpbmdzKGNhdGVnb3J5KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdGVnb3J5ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cblxuXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCwgc2lkZWJhcik7XG4gICAgfVxuXG4gICAgdXBkYXRlU2V0dGluZ3MoaWQsIGVuYWJsZWQsIHNpZGViYXIpIHtcbiAgICAgICAgaWYoIVtcImxpZ2h0Y29yZC04XCIsIFwibm9fd2luZG93X2JvdW5kXCIsIFwiZW5hYmxlX2dsYXNzdHJvblwiLCBcImxpZ2h0Y29yZC0xMFwiLCBcImxpZ2h0Y29yZC0xMVwiXS5pbmNsdWRlcyhpZCkpc2V0dGluZ3NDb29raWVbaWRdID0gZW5hYmxlZDtcblxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0zXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0xXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgICAgICAgICAgZWxzZSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLnJlbW92ZUJ1dHRvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO1xuICAgICAgICAgICAgZWxzZSB2b2ljZU1vZGUuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTVcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmFibGVkICYmIGlkID09IFwiYmRhLWdzLTZcIikgdGZIb3VyLmluamVjdDI0SG91cigpO1xuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xuICAgICAgICAgICAgZWxzZSBjb2xvcmVkVGV4dC5yZW1vdmVDb2xvcmVkVGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy00XCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIGVsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXdwLTFcIikge1xuICAgICAgICAgICAgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIGVuYWJsZWQpO1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgbnVsbCk7XG4gICAgICAgICAgICBlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtOFwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLWRtLTFcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BDb3B5U2VsZWN0b3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZVxuICAgICAgICAgICAgc2lkZWJhci5mb3JjZVVwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0yXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzU3RvcmUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIHR5cGVvZiBlLmRlZmF1bHQgPT09IFwib2JqZWN0XCIgJiYgXCJzaG93Q3VycmVudEdhbWVcIiBpbiBlLmRlZmF1bHQpWzBdXG4gICAgICAgICAgICAgICAgaWYoc2V0dGluZ3NTdG9yZSAmJiAhc2V0dGluZ3NTdG9yZS5kZWZhdWx0LnNob3dDdXJyZW50R2FtZSl7XG4gICAgICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKVswXS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDdXJyZW50R2FtZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgQ3VzdG9tUmljaFByZXNlbmNlLmRpc2FibGUoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtM1wiKSB7XG4gICAgICAgICAgICBpcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9TRVRfQUxXQVlTX09OX1RPUFwiLCBlbmFibGVkKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNFwiKSB7XG4gICAgICAgICAgICBpZihlbmFibGVkKXtcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5lbmFibGUoKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC02XCIpIHtcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmVuYWJsZSgpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5kaXNhYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTdcIikge1xuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5kaXNhYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLThcIil7XG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSB3aW5kb3cuTGlnaHRjb3JkLkFwaS5zZXR0aW5nc1xuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiaXNUYWJzXCIsIGVuYWJsZWQpXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcbiAgICAgICAgICAgIERpc2NvcmROYXRpdmUuYXBwLnJlbGF1bmNoKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTlcIikge1xuICAgICAgICAgICAgcG9wb3V0V2luZG93W2VuYWJsZWQgPyBcImVuYWJsZVwiIDogXCJkaXNhYmxlXCJdKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTEwXCIpe1xuICAgICAgICAgICAgY29yZS5tZXRob2RzLk5vdGlmaWNhdGlvbnNVc2VTaGltKGVuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpe1xuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZW5hYmxlZClcblxuICAgICAgICAgICAgYXBwU2V0dGluZ3MuZGVsZXRlKFwiSVNfTUFYSU1JWkVEXCIpXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5kZWxldGUoXCJJU19NSU5JTUlaRURcIikgXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5kZWxldGUoXCJXSU5ET1dfQk9VTkRTXCIpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxuICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5hcHAucmVsYXVuY2goKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIpe1xuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIkdMQVNTVFJPTlwiLCBlbmFibGVkKVxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXG4gICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmFwcC5yZWxhdW5jaCgpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmKGlkID09PSBcImxpZ2h0Y29yZC0xMVwiKXtcbiAgICAgICAgICAgIGxldCBhcHBTZXR0aW5ncyA9IHdpbmRvdy5MaWdodGNvcmQuQXBpLnNldHRpbmdzXG4gICAgICAgICAgICBpZighZW5hYmxlZCl7XG4gICAgICAgICAgICAgICAgYXBwU2V0dGluZ3MuZGVsZXRlKFwiQkRfXCIraWQpXG4gICAgICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXQoXCJCRF9cIitpZCwgZW5hYmxlZClcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0zXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy01XCJdKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNFwiXSkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0xXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLXByZXNlbmNlLTFcIl0pIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtM1wiXSkgaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfU0VUX0FMV0FZU19PTl9UT1BcIiwgdHJ1ZSlcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTRcIl0pIEFudGlBZERNLmVuYWJsZSgpXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC02XCJdKSBibHVyUHJpdmF0ZS5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtN1wiXSkgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtOVwiXSkgcG9wb3V0V2luZG93LmVuYWJsZSgpXG5cbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSB7XG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy04XCJdKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xuXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XG4gICAgfVxuXG4gICAgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIiwgc2V0dGluZ3NDb29raWUpO1xuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcbiAgICB9XG5cbiAgICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpO1xuICAgIH1cblxuICAgIHJlbmRlclNpZGViYXIoc2lkZWJhcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyLnJlbmRlcihzaWRlYmFyKTtcbiAgICB9XG5cbiAgICBjb3JlQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSlcbiAgICB9XG5cbiAgICBsaWdodGNvcmRDb21wb25lbnQoc2lkZWJhciwgZm9yY2VVcGRhdGUpIHtcbiAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMubGlnaHRjb3JkU2V0dGluZ3MubWFwKChzZWN0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgKGkgPT09IDAgPyBudWxsIDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCkpLFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHNlY3Rpb24udGl0bGUpLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0NoZWNrZWQgPSBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gYXBwU2V0dGluZ3MuZ2V0KFwiQkRfXCIrc2V0dGluZy5pZCwgc2V0dGluZy5kZWZhdWx0IHx8IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImxpZ2h0Y29yZC04XCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiaXNUYWJzXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiTk9fV0lORE9XU19CT1VORFwiLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIkdMQVNTVFJPTlwiLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJsaWdodGNvcmQtMTBcIilpc0NoZWNrZWQgPSAhYXBwU2V0dGluZ3MuZ2V0KFwiREVGQVVMVF9OT1RJRklDQVRJT05TXCIsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKFtcImxpZ2h0Y29yZC0xMVwiXS5pbmNsdWRlcyhzZXR0aW5nLmlkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dElucHV0U2V0dGluZywge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIHZhbHVlLCBwbGFjZWhvbGRlcjogc2V0dGluZy5kZWZhdWx0IHx8IG51bGwsIG9uQ2hhbmdlOiAoaWQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoaWQsIHZhbHVlLCBzaWRlYmFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IGlzQ2hlY2tlZCwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGlkLCBjaGVja2VkLCBzaWRlYmFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT0gXCJsaWdodGNvcmQtOFwiICYmIGlzQ2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImdyZWVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rOiBcIm91dGxpbmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcImJyYW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5pcGMuc2VuZChcIk5FV19UQUJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBcIk9wZW4gYSBuZXcgVGFiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIgJiYgaXNDaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtICE9PSBcImxpbnV4XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hvaWNlcyA9IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3R1YWwgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzLnB1c2goXCJibHVyYmVoaW5kXCIsIFwiYWNyeWxpY1wiLCBcInRyYW5zcGFyZW50XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBhcHBTZXR0aW5ncy5nZXQoXCJHTEFTU1RST05fQkxVUlwiLCBcImJsdXJiZWhpbmRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzLnB1c2goXCJ0aXRsZWJhclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNlbGVjdGlvblwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1lbnVcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwb3BvdmVyXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2lkZWJhclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhlYWRlclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNoZWV0XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2luZG93XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaHVkXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZnVsbHNjcmVlbi11aVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvb2x0aXBcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidW5kZXItd2luZG93XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidW5kZXItcGFnZVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gYXBwU2V0dGluZ3MuZ2V0KFwiR0xBU1NUUk9OX1ZJQlJBTkNZXCIsIFwiZnVsbHNjcmVlbi11aVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlLCB7fSwgXCJHbGFzc3Ryb24gQmx1clwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGNob2ljZXMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFjdHVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwY1JlbmRlcmVyLmludm9rZShcIkxJR0hUQ09SRF9TRVRfQkxVUl9UWVBFXCIsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwY1JlbmRlcmVyLmludm9rZShcIkxJR0hUQ09SRF9TRVRfVklCUkFOQ1lcIiwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksIFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcInllbGxvd1wiLFxuICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1lZGl1bVwiLFxuICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6IFwicmVkXCIsXG4gICAgICAgICAgICAgICAgb25DbGljaygpe1xuICAgICAgICAgICAgICAgICAgICBpcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9SRUxBVU5DSF9BUFBcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogcmVtb3RlLnByb2Nlc3MuYXJndi5zbGljZSgxKS5jb25jYXQoW1wiLS1kaXNhYmxlLWJldHRlcmRpc2NvcmRcIl0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlXG4gICAgICAgICAgICB9LCBcIlJlbGF1bmNoIHdpdGhvdXQgQmV0dGVyRGlzY29yZFwiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIixcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNDbGVhcmluZ0NhY2hlKXJldHVyblxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNsZWFyaW5nIGNhY2hlLi4uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnNlc3Npb24uY2xlYXJDYWNoZSgpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNhY2hlIGlzIGNsZWFyZWQgIVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLiBDaGVjayBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpc0NsZWFyaW5nQ2FjaGVcbiAgICAgICAgICAgIH0sIFwiQ2xlYXIgY2FjaGVcIilcbiAgICAgICAgXVxuICAgIH1cblxuICAgIFByZXNlbmNlQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XG4gICAgICAgICAgICBrZXk6IFwibHBwYW5uZWxcIixcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBcbiAgICAgICAgICAgIHNldHRpbmdzOiB0aGlzLlByZXNlbmNlU2V0dGluZ3NcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBBY2NvdW50SW5mb3NDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xuICAgICAgICAgICAga2V5OiBcImxhcGFubmVsXCJcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBBcGlQcmV2aWV3Q29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFwaVByZXZpZXcsIHtcbiAgICAgICAgICAgIGtleTogXCJsYXBpcGFubmVsXCJcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjdXN0b21Dc3NDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3NzRWRpdG9yLCB7a2V5OiBcImNzc2VkaXRvclwifSlcbiAgICB9XG5cbiAgICByZW5kZXJBZGRvblBhbmUodHlwZSkge1xuICAgICAgICAvLyBJIGtub3cgdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSwgYnV0IHdoZW4gaXQgaXNuJ3QsXG4gICAgICAgIC8vIFJlYWN0IHJlZnVzZXMgdG8gY2hhbmdlIHRoZSBidXR0b24gd2hlbiBnb2luZ1xuICAgICAgICAvLyBiZXR3ZWVuIHBsdWdpbnMgYW5kIHRoZW1lcyBwYWdlLi4uIHNvbWV0aGluZ1xuICAgICAgICAvLyB0byBkZWJ1ZyBsYXRlci5cbiAgICAgICAgY2xhc3MgQ29udGVudExpc3QgZXh0ZW5kcyBCRFYyLnJlYWN0LkNvbXBvbmVudCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZpeCA9IHRoaXMucHJvcHMudHlwZS5yZXBsYWNlKFwic1wiLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBvbkNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgcmVuZGVyKCkge3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO31cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlbmRlciA9IENvbnRlbnRMaXN0LnByb3RvdHlwZS5yZW5kZXI7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb250ZW50TGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXG4gICAgICAgICAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudExpc3QsIHt0eXBlfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENhcmRMaXN0LCB7dHlwZX0pKVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsIG9uIHdpbmRvd1xuICovXG5cbmZ1bmN0aW9uIG1ha2VDb21wb25lbnQoY2hpbGRyZW4pe1xuICAgIGNsYXNzIFNldHRpbmdDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgICAgICByZW5kZXIoKXtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihzaWRlYmFyLCAoKSA9PiB0aGlzLmZvcmNlVXBkYXRlKCkpXG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNpZGViYXJcbiAgICByZXR1cm4gKHMpID0+IHtcbiAgICAgICAgc2lkZWJhciA9IHNcbiAgICAgICAgcmV0dXJuIFNldHRpbmdDb21wb25lbnRcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnBhbmVscyA9IHt9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXIocGFuZWwsIGNvbXBvbmVudCl7XG4gICAgICAgIHRoaXMucGFuZWxzW3BhbmVsXSA9IGNvbXBvbmVudFxuICAgIH1cblxuICAgIGdldENvbXBvbmVudChwYW5lbCwgc2lkZWJhcil7XG4gICAgICAgIHJldHVybiB0aGlzLnBhbmVsc1twYW5lbF0oc2lkZWJhcilcbiAgICB9XG5cbiAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgdGV4dDogXCJCZXR0ZXJEaXNjb3JkIFNldHRpbmdzXCIsIFxuICAgICAgICAgICAgaWQ6IFwiY29yZVwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRleHQ6IFwiUGx1Z2luc1wiLCBcbiAgICAgICAgICAgIGlkOiBcInBsdWdpbnNcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRoZW1lc1wiLCBcbiAgICAgICAgICAgIGlkOiBcInRoZW1lc1wiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRleHQ6IFwiQ3VzdG9tIENTU1wiLCBcbiAgICAgICAgICAgIGlkOiBcImN1c3RvbWNzc1wiXG4gICAgICAgIH1dO1xuICAgIH1cblxuICAgIGdldCBMQ2l0ZW1zKCl7XG4gICAgICAgIGxldCBpdGVtcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZCBTZXR0aW5nc1wiLFxuICAgICAgICAgICAgICAgIGlkOiBcImxpZ2h0Y29yZFwiXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJSaWNoUHJlc2VuY2VcIiwgXG4gICAgICAgICAgICAgICAgaWQ6IFwic3RhdHVzXCJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkFjY291bnQgSW5mb1wiLFxuICAgICAgICAgICAgICAgIGlkOiBcImFjY291bnRpbmZvXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgICByZXR1cm4gaXRlbXNcbiAgICB9XG5cbiAgICBnZXQgTENEZXZJdGVtcygpe1xuICAgICAgICBsZXQgaXRlbXMgPSBbXVxuICAgICAgICBpZighd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlKXJldHVybiBpdGVtc1xuICAgICAgICBpdGVtcy5wdXNoKC4uLltcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxpZ2h0Y29yZCBBcGlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkNvbXBvbmVudHMgUHJldmlld1wiLFxuICAgICAgICAgICAgICAgIGlkOiBcImxjYXBpcHJldmlld1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIF0pXG4gICAgICAgIHJldHVybiBpdGVtc1xuICAgIH1cblxuICAgIHJlbmRlcihzaWRlYmFyKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnRoaXMuTENpdGVtcy5tYXAoZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLnRoaXMuTENEZXZJdGVtcy5tYXAoZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoZS5zZWN0aW9uKXJldHVybiBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkNVU1RPTVwiLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KFwiQkRDaGFuZ2Vsb2dUaXRsZVwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnRoaXMuaXRlbXMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH1cbn1cblxuLyoqXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsU2lkZWJhciBvbiB3aW5kb3dcbiAqLyIsImltcG9ydCB7YmR0aGVtZUVycm9ycywgdGhlbWVDb29raWUsIHNldHRpbmdzQ29va2llLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuaW1wb3J0IGJkRXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XG5cbmNsYXNzIFRoZW1lTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVGhlbWVNb2R1bGUgPSB0aGlzXG4gICAgfVxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlcjt9XG59XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubG9hZFRoZW1lRGF0YSgpO1xuICAgIGJkdGhlbWVFcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkVGhlbWVzKCkpKTtcbiAgICBjb25zdCB0aGVtZXMgPSBPYmplY3Qua2V5cyhiZHRoZW1lcyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoZW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lc1tpXV07XG4gICAgICAgIGlmICghdGhlbWVDb29raWVbdGhlbWUubmFtZV0pIHRoZW1lQ29va2llW3RoZW1lLm5hbWVdID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSlcbiAgICB9XG4gICAgZm9yIChjb25zdCB0aGVtZSBpbiB0aGVtZUNvb2tpZSkge1xuICAgICAgICBpZiAoIWJkdGhlbWVzW3RoZW1lXSkgZGVsZXRlIHRoZW1lQ29va2llW3RoZW1lXTtcbiAgICB9XG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbbmFtZV07XG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xuICAgIGJkRXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtZW5hYmxlZFwiKVxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gYXBwbGllZC5gKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVUaGVtZShuYW1lLCByZWxvYWQpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRpc2FibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpKTtcbiAgICBiZEV2ZW50cy5kaXNwYXRjaChcInRoZW1lLWRpc2FibGVkXCIpXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBkaXNhYmxlZC5gKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlVGhlbWUgPSBmdW5jdGlvbih0aGVtZSkge1xuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lKTtcbiAgICBlbHNlIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlVGhlbWUobmFtZSk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInRoZW1lXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuIEl0IG1heSBub3QgaGF2ZSBiZWVuIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpO1xuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLWxvYWRlZFwiLCB0aGVtZS5uYW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS51bmxvYWRUaGVtZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm47XG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XG4gICAgZGVsZXRlIGJkdGhlbWVzW3RoZW1lXTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XG4gICAgfVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXVubG9hZGVkXCIsIHRoZW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xuICAgIHRoaXMudW5sb2FkVGhlbWUoYmR0aGVtZS5maWxlbmFtZSk7XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgYmR0aGVtZS5maWxlbmFtZSk7XG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybiB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSwgdHJ1ZSksIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUsIHRydWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1yZWxvYWRlZFwiLCB0aGVtZSk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZFRoZW1lKG5hbWUpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVkaXQgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS51cGRhdGVUaGVtZUxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXN1bHRzID0gQ29udGVudE1hbmFnZXIubG9hZE5ld0NvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZFRoZW1lKGZpbGVuYW1lKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFRoZW1lKG5hbWUpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBzYXZlZCA9IERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJ0aGVtZXNcIik7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhlbWVDb29raWUsIHNhdmVkKTtcbiAgICB9XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuc2F2ZVRoZW1lRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIsIHRoZW1lQ29va2llKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZU1vZHVsZSgpOyIsImltcG9ydCB7YmJkVmVyc2lvbn0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlscyB7XG4gICAgLyoqIERvY3VtZW50L3dpbmRvdyB3aWR0aCAqL1xuICAgIHN0YXRpYyBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9XG4gICAgLyoqIERvY3VtZW50L3dpbmRvdyBoZWlnaHQgKi9cbiAgICBzdGF0aWMgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxuXG4gICAgc3RhdGljIGdldCBXaW5kb3dDb25maWdGaWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93Q29uZmlnRmlsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBmcmFtZTogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIGdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChrZXkgPT09IFwiZnJhbWVcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VGV4dEFyZWEoKSB7XG4gICAgICAgIHJldHVybiBET00ucXVlcnkoXCIuXCIrcmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuY2hhbm5lbFRleHRBcmVhICYmIGUudGl0bGVXcmFwcGVyKVswXS5jaGFubmVsVGV4dEFyZWEpK1wiIHRleHRhcmVhXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnNlcnRUZXh0KHRleHRhcmVhLCB0ZXh0KSB7XG4gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvblN0YXJ0ID0gMDtcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uRW5kID0gdGV4dGFyZWEudmFsdWUubGVuZ3RoO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluc2VydFRleHRcIiwgZmFsc2UsIHRleHQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xuICAgICAgICByZXR1cm4gaWQucmVwbGFjZSgvXlteYS16XSt8W15cXHctXSsvZ2ksIFwiLVwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbG9nKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6ICMzYTcxYzE7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6ICMzYTcxYzE7XCIsIFwiXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyB3YXJuKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjRThBNDAwOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjRThBNDAwO1wiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXJyKG1vZHVsZU5hbWUsIG1lc3NhZ2UsIGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6IHJlZDtcIiwgXCJcIik7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZChcIiVjRXJyb3I6IFwiICsgZXJyb3IubWVzc2FnZSwgXCJjb2xvcjogcmVkO1wiKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Iuc3RhY2spO1xuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybWF0IHN0cmluZ3Mgd2l0aCBwbGFjZWhvbGRlcnMgKGB7e3BsYWNlaG9sZGVyfX1gKSBpbnRvIGZ1bGwgc3RyaW5ncy5cbiAgICAgKiBRdWljayBleGFtcGxlOiBgUGx1Z2luVXRpbGl0aWVzLmZvcm1hdFN0cmluZyhcIkhlbGxvLCB7e3VzZXJ9fVwiLCB7dXNlcjogXCJaZXJlYm9zXCJ9KWBcbiAgICAgKiB3b3VsZCByZXR1cm4gXCJIZWxsbywgWmVyZWJvc1wiLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBzdHJpbmcgdG8gZm9ybWF0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyAtIG9iamVjdCBsaXRlcmFsIG9mIHBsYWNlaG9sZGVycyB0byByZXBsYWNlbWVudHNcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgcHJvcGVybHkgZm9ybWF0dGVkIHN0cmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBmb3JtYXRTdHJpbmcoc3RyaW5nLCB2YWx1ZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSB2YWx1ZXNbdmFsXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2VtZW50KSkgcmVwbGFjZW1lbnQgPSBKU09OLnN0cmluZ2lmeShyZXBsYWNlbWVudCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mKHJlcGxhY2VtZW50KSA9PT0gXCJvYmplY3RcIiAmJiByZXBsYWNlbWVudCAhPT0gbnVsbCkgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC50b1N0cmluZygpO1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobmV3IFJlZ0V4cChge3ske3ZhbH19fWAsIFwiZ1wiKSwgcmVwbGFjZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgc3RhdGljIGVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2csIFwiXFxcXCQmXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyB0ZXN0SlNPTihkYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgaXNFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsIHx8IG9iaiA9PSB1bmRlZmluZWQgfHwgb2JqID09IFwiXCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkgcmV0dXJuIG9iai5sZW5ndGggPT0gMDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3VwcHJlc3NFcnJvcnMobWV0aG9kLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiAoLi4ucGFyYW1zKSA9PiB7XG4gICAgICAgICAgICB0cnkgeyByZXR1cm4gbWV0aG9kKC4uLnBhcmFtcyk7XHR9XG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB0aGlzLmVycihcIlN1cHByZXNzZWRFcnJvclwiLCBcIkVycm9yIG9jY3VycmVkIGluIFwiICsgbWVzc2FnZSwgZSk7IH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7YmVmb3JlLCBhZnRlciwgaW5zdGVhZCwgb25jZSA9IGZhbHNlLCBzaWxlbnQgPSBmYWxzZSwgZm9yY2UgPSBmYWxzZX0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWUgfHwgd2hhdC5kaXNwbGF5TmFtZSB8fCB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lIHx8IHdoYXQubmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IHdoYXQuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0pIHtcbiAgICAgICAgICAgIGlmIChmb3JjZSkgd2hhdFttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JpZ01ldGhvZCA9IHdoYXRbbWV0aG9kTmFtZV07XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInVucGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgLy93aGF0W21ldGhvZE5hbWVdID0gb3JpZ01ldGhvZDtcbiAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZSAvLyB0aGlzIGFsbG93IHRvIG1vbmtleXBhdGNoIG1vcmUgdGhhbiBvbmUgdGltZS5cbiAgICAgICAgfTtcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYoY2FuY2VsZWQpe1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnTWV0aG9kLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICB0aGlzT2JqZWN0OiB0aGlzLFxuICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3VtZW50czogYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgIGNhbmNlbFBhdGNoOiBjYW5jZWwsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2Q6IG9yaWdNZXRob2QsXG4gICAgICAgICAgICAgICAgY2FsbE9yaWdpbmFsTWV0aG9kOiAoKSA9PiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5vcmlnaW5hbE1ldGhvZC5hcHBseShkYXRhLnRoaXNPYmplY3QsIGRhdGEubWV0aG9kQXJndW1lbnRzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpbnN0ZWFkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFJldCA9IFV0aWxzLnN1cHByZXNzRXJyb3JzKGluc3RlYWQsIFwiYGluc3RlYWRgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXBSZXQgIT09IHVuZGVmaW5lZCkgZGF0YS5yZXR1cm5WYWx1ZSA9IHRlbXBSZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlKSBVdGlscy5zdXBwcmVzc0Vycm9ycyhiZWZvcmUsIFwiYGJlZm9yZWAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgICAgICBkYXRhLmNhbGxPcmlnaW5hbE1ldGhvZCgpO1xuICAgICAgICAgICAgICAgIGlmIChhZnRlcikgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYWZ0ZXIsIFwiYGFmdGVyYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uY2UpIGNhbmNlbCgpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5hc3NpZ24od2hhdFttZXRob2ROYW1lXSwgb3JpZ01ldGhvZCk7XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19tb25rZXlQYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCkge1xuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ01ldGhvZDtcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0udG9TdHJpbmcgPSBmdW5jdGlvbigpIHtyZXR1cm4gb3JpZ01ldGhvZC50b1N0cmluZygpO307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBtdXRhdGlvbnMubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1ttXTtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyhub2RlKSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXROZXN0ZWRQcm9wKG9iaiwgcGF0aCkge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgvXFxzP1xcLlxccz8vKS5yZWR1Y2UoZnVuY3Rpb24ob2JqLCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIG9ialtwcm9wXTtcbiAgICAgICAgfSwgb2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNob3dzIGEgdG9hc3Qgc2ltaWxhciB0byBhbmRyb2lkIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgVGhlIHN0cmluZyB0byBzaG93IGluIHRoZSB0b2FzdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC4gT3B0aW9uYWwgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnR5cGUgQ2hhbmdlcyB0aGUgdHlwZSBvZiB0aGUgdG9hc3Qgc3R5bGlzdGljYWxseSBhbmQgc2VtYW50aWNhbGx5LiBDaG9pY2VzOiBcIlwiLCBcImluZm9cIiwgXCJzdWNjZXNzXCIsIFwiZGFuZ2VyXCIvXCJlcnJvclwiLCBcIndhcm5pbmdcIi9cIndhcm5cIi4gRGVmYXVsdDogXCJcIlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5pY29uIERldGVybWluZXMgd2hldGhlciB0aGUgaWNvbiBzaG91bGQgc2hvdyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlLiBBIHRvYXN0IHdpdGhvdXQgdHlwZSB3aWxsIGFsd2F5cyBoYXZlIG5vIGljb24uIERlZmF1bHQ6IHRydWVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aW1lb3V0IEFkanVzdHMgdGhlIHRpbWUgKGluIG1zKSB0aGUgdG9hc3Qgc2hvdWxkIGJlIHNob3duIGZvciBiZWZvcmUgZGlzYXBwZWFyaW5nIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQ6IDMwMDBcbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpZGViYXIgJiYgZS5oYXNOb3RpY2UpWzBdLnNpZGViYXIpK1wiICsgZGl2XCIpIHx8IG51bGw7XG4gICAgICAgICAgICBjb25zdCBmb3JtID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJmb3JtXCIpIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGZvcm0gPyBmb3JtLm9mZnNldEhlaWdodCA6IDgwO1xuICAgICAgICAgICAgY29uc3QgdG9hc3RXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5jbGFzc0xpc3QuYWRkKFwiYmQtdG9hc3RzXCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwiYm90dG9tXCIsIGJvdHRvbStcInB4XCIpO1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikuYXBwZW5kQ2hpbGQodG9hc3RXcmFwcGVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b2FzdFdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKVxuICAgICAgICBjb25zdCB7dHlwZSA9IFwiXCIsIGljb24gPSB0cnVlLCB0aW1lb3V0ID0gMzAwMH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCB0b2FzdEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0XCIpO1xuICAgICAgICBpZiAodHlwZSkgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJ0b2FzdC1cIiArIHR5cGUpO1xuICAgICAgICBpZiAodHlwZSAmJiBpY29uKSB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImljb25cIik7XG4gICAgICAgIHRvYXN0RWxlbS5pbm5lclRleHQgPSBjb250ZW50O1xuICAgICAgICB0b2FzdFdyYXBwZXIuYXBwZW5kQ2hpbGQodG9hc3RFbGVtKTtcbiAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCBgY2FsYyg1MCUgLSAke3RvYXN0V3JhcHBlci5vZmZzZXRXaWR0aCAvIDJ9cHgpYCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9hc3RFbGVtLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5iZC10b2FzdHMgLmJkLXRvYXN0XCIpLmxlbmd0aCkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYWxlcnQodGl0bGUsIGNvbnRlbnQpIHtcbiAgICAgICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHt0aXRsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Y29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke2hlYWRlck1vZHVsZS5mb290ZXJ9ICR7Zm9vdGVyMk1vZHVsZS5mb290ZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIj5Pa2F5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xuICAgICAgICBjb25zdCBjbG9zaW5nTGlzdGVuZXJzID0gW11cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DbG9zZTogKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMgPSBbXSwgdGhlbWVzOiB0aGVtZUVycm9ycyA9IFtdfSkge1xuICAgICAgICBpZiAoIXBsdWdpbkVycm9ycyB8fCAhdGhlbWVFcnJvcnMpIHJldHVybjtcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMubGVuZ3RoICYmICF0aGVtZUVycm9ycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsIGJkLWNvbnRlbnQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+PGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGVudCBFcnJvcnM8L2Rpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyIFRPUFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+UGx1Z2luczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+VGhlbWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+TmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj5NZXNzYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj5FcnJvcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICBcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVUYWIoZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yc1wiPmApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+JHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+JHtlcnIubWVzc2FnZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+PGEgY2xhc3M9XCJlcnJvci1saW5rXCIgaHJlZj1cIlwiPiR7ZXJyLmVycm9yID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBcIlwifTwvYT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChlcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5xdWVyeVNlbGVjdG9yQWxsKFwiYVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYEVycm9yIGRldGFpbHMgZm9yICR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfS5gLCBlcnIuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBjb25zdCB0YWJzID0gW2dlbmVyYXRlVGFiKHBsdWdpbkVycm9ycyksIGdlbmVyYXRlVGFiKHRoZW1lRXJyb3JzKV07XG4gICAgXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIudGFiLWJhci1pdGVtLnNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSBET00ucmVtb3ZlQ2xhc3Moc2VsZWN0ZWQsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MoZS50YXJnZXQsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuc2Nyb2xsZXJcIik7XG4gICAgICAgICAgICBzY3JvbGxlci5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKHRhYnNbRE9NLmluZGV4KGUudGFyZ2V0KV0pO1xuICAgICAgICB9KSk7XG4gICAgXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICAgICAgaWYgKHBsdWdpbkVycm9ycy5sZW5ndGgpIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIudGFiLWJhci1pdGVtXCIpLmNsaWNrKCk7XG4gICAgICAgIGVsc2UgbW9kYWwucXVlcnlTZWxlY3RvckFsbChcIi50YWItYmFyLWl0ZW1cIilbMV0uY2xpY2soKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTtcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZml4ZWRcIiwgXCJpbXByb3ZlZFwiKTtcbiAgICAgICAgY29uc3QgVGV4dEVsZW1lbnQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRleHRcIik7XG4gICAgICAgIGNvbnN0IEZsZXhDaGlsZCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiQ2hpbGRcIik7XG4gICAgICAgIGNvbnN0IFRpdGxlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiVGFnc1wiLCBcImRlZmF1bHRcIik7XG4gICAgICAgIGNvbnN0IENoYW5nZWxvZyA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5zZWxlY3RhYmxlID09IGZhbHNlKTtcbiAgICAgICAgY29uc3QgTWFya2Rvd25QYXJzZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImRlZmF1bHRSdWxlc1wiLCBcInBhcnNlXCIpO1xuICAgICAgICBpZiAoIUNoYW5nZWxvZyB8fCAhTW9kYWxTdGFjayB8fCAhQ2hhbmdlbG9nQ2xhc3NlcyB8fCAhVGV4dEVsZW1lbnQgfHwgIUZsZXhDaGlsZCB8fCAhVGl0bGVzIHx8ICFNYXJrZG93blBhcnNlcikgcmV0dXJuO1xuICAgIFxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpbWFnZSA9IFwiaHR0cHM6Ly9yZXBvc2l0b3J5LWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTA1NDczNTM3Lzk1N2I1NDgwLTdjMjYtMTFlOS04NDAxLTUwZmE4MjBjYmFlNVwiLCBcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIiwgXG4gICAgICAgICAgICBjaGFuZ2VzID0gW10sIFxuICAgICAgICAgICAgdGl0bGUgPSBcIkJhbmRhZ2VkQkRcIiwgXG4gICAgICAgICAgICBzdWJ0aXRsZSA9IGB2JHtiYmRWZXJzaW9ufWAsIFxuICAgICAgICAgICAgZm9vdGVyXG4gICAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBjZSA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nSXRlbXMgPSBbY2UoXCJpbWdcIiwge3NyYzogaW1hZ2V9KV07XG4gICAgICAgIGlmIChkZXNjcmlwdGlvbikgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcInBcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoZGVzY3JpcHRpb24pKSk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2hhbmdlcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjaGFuZ2VzW2NdO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gPyBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdIDogQ2hhbmdlbG9nQ2xhc3Nlcy5hZGRlZDtcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IGMgPT0gMCA/IENoYW5nZWxvZ0NsYXNzZXMubWFyZ2luVG9wIDogXCJcIjtcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJoMVwiLCB7Y2xhc3NOYW1lOiBgJHt0eXBlfSAke21hcmdpbn1gLH0sIGVudHJ5LnRpdGxlKSk7XG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gY2UoXCJ1bFwiLCBudWxsLCBlbnRyeS5pdGVtcy5tYXAoaSA9PiBjZShcImxpXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGkpKSkpO1xuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChsaXN0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJIZWFkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LFxuICAgICAgICAgICAgICAgIGNlKFRpdGxlcy5kZWZhdWx0LCB7dGFnOiBUaXRsZXMuVGFncy5INH0sIHRpdGxlKSxcbiAgICAgICAgICAgICAgICBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkQsIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5kYXRlfSwgc3VidGl0bGUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIFxuICAgICAgICBjb25zdCByZW5kZXJGb290ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICAgICAgICAgIGNvbnN0IEFuY2hvckNsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIikgfHwge2FuY2hvcjogXCJhbmNob3ItM1otOEJiXCIsIGFuY2hvclVuZGVybGluZU9uSG92ZXI6IFwiYW5jaG9yVW5kZXJsaW5lT25Ib3Zlci0yRVNIUUJcIn07XG4gICAgICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xuICAgICAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY2xpY2suc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICBCRFYyLmpvaW5CRDIoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBzdXBwb3J0TGluayA9IEFuY2hvciA/IGNlKEFuY2hvciwge29uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIikgOiBjZShcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Rm9vdGVyID0gY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSwgZm9vdGVyID8gZm9vdGVyIDogZGVmYXVsdEZvb3Rlcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIE1vZGFsU3RhY2sucHVzaChmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIGNlKENoYW5nZWxvZywgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9uU2Nyb2xsOiBfID0+IF8sXG4gICAgICAgICAgICAgICAgb25DbG9zZTogXyA9PiBfLFxuICAgICAgICAgICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckZvb3RlcjogcmVuZGVyRm9vdGVyLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGFuZ2Vsb2dJdGVtc1xuICAgICAgICAgICAgfSwgcHJvcHMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeSBzdHJpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYE1hcmtkb3duYCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxuICAgICAqL1xuICAgIHN0YXRpYyBzaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBNb2RhbEFjdGlvbnMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIm9wZW5Nb2RhbFwiLCBcInVwZGF0ZU1vZGFsXCIpO1xuICAgICAgICBjb25zdCBNYXJrZG93biA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWFya2Rvd25cIik7XG4gICAgICAgIGNvbnN0IENvbmZpcm1hdGlvbk1vZGFsID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJDb25maXJtTW9kYWxcIik7XG4gICAgICAgIGlmICghTW9kYWxBY3Rpb25zIHx8ICFDb25maXJtYXRpb25Nb2RhbCB8fCAhTWFya2Rvd24pIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XG5cbiAgICAgICAgY29uc3QgZW1wdHlGdW5jdGlvbiA9ICgpID0+IHt9O1xuICAgICAgICBjb25zdCB7b25Db25maXJtID0gZW1wdHlGdW5jdGlvbiwgb25DYW5jZWwgPSBlbXB0eUZ1bmN0aW9uLCBjb25maXJtVGV4dCA9IFwiT2theVwiLCBjYW5jZWxUZXh0ID0gXCJDYW5jZWxcIiwgZGFuZ2VyID0gZmFsc2UsIGtleSA9IHVuZGVmaW5lZH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZW50KSkgY29udGVudCA9IFtjb250ZW50XTtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQubWFwKGMgPT4gdHlwZW9mKGMpID09PSBcInN0cmluZ1wiID8gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KE1hcmtkb3duLCBudWxsLCBjKSA6IGMpO1xuICAgICAgICByZXR1cm4gTW9kYWxBY3Rpb25zLm9wZW5Nb2RhbChwcm9wcyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KENvbmZpcm1hdGlvbk1vZGFsLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHRpdGxlLFxuICAgICAgICAgICAgICAgIHJlZDogZGFuZ2VyLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0LFxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogb25Db25maXJtLFxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbFxuICAgICAgICAgICAgfSwgcHJvcHMpLCBjb250ZW50KTtcbiAgICAgICAgfSwge21vZGFsS2V5OiBrZXl9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHJlbW92ZURhKCl7XG4gICAgICAgIHJldHVybiByZW1vdmVEYVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGEoY2xhc3NOYW1lKXtcbiAgICBpZighY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcbiAgICByZXR1cm4gY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhZS5zdGFydHNXaXRoKFwiZGEtXCIpKS5qb2luKFwiIFwiKVxufVxuXG5VdGlscy5zaG93VG9hc3QgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhVdGlscy5zaG93VG9hc3QsIFwiQ291bGQgbm90IHNob3cgdG9hc3QuXCIpO1xuXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVXRpbHMgPSBVdGlscyIsImltcG9ydCB7c2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMiB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLldlYnBhY2tNb2R1bGVzID0gKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XG4gICAgICAgICAgICBkZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xuICAgICAgICAgICAgZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcblxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUHJvdGVjdCA9IHRoZU1vZHVsZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5yZW1vdmUgJiYgdGhlTW9kdWxlLnNldCAmJiB0aGVNb2R1bGUuY2xlYXIgJiYgdGhlTW9kdWxlLmdldCAmJiAhdGhlTW9kdWxlLnNvcnQpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUuZ2V0VG9rZW4gfHwgdGhlTW9kdWxlLmdldEVtYWlsIHx8IHRoZU1vZHVsZS5zaG93VG9rZW4pIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHByb3RlY3QgPSAodGhlTW9kdWxlLCBpc0RlZmF1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9kID0gIWlzRGVmYXVsdCA/IHRoZU1vZHVsZS5kZWZhdWx0IDogdGhlTW9kdWxlXG4gICAgICAgICAgICAgICAgaWYoIW1vZClyZXR1cm4gdGhlTW9kdWxlXG4gICAgICAgICAgICAgICAgaWYgKG1vZC5yZW1vdmUgJiYgbW9kLnNldCAmJiBtb2QuY2xlYXIgJiYgbW9kLmdldCAmJiAhbW9kLnNvcnQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghbW9kLmdldFRva2VuICYmICFtb2QuZ2V0RW1haWwgJiYgIW1vZC5zaG93VG9rZW4pcmV0dXJuIHRoZU1vZHVsZVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkobW9kLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJnZXRUb2tlblwiIHx8IHByb3AgPT09IFwiZ2V0RW1haWxcIiB8fCBwcm9wID09PSBcInNob3dUb2tlblwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIGZ1bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0VG9rZW5cIiAmJiBvYmouZ2V0VG9rZW4pIHJldHVybiAoKSA9PiBcIm1mYS5YQ25iS3pvMENMSXFkSnpCbkwwRDhQZkRydXFrSk5IandIWHRyMzlVVTNGOGhIeDQzam9qSVN5aTVqZGpPNTJlOV9lOU1qbWFmWkZGcGMtc2VPTWFcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0RW1haWxcIiAmJiBvYmouZ2V0RW1haWwpIHJldHVybiAoKSA9PiBcInB1cHBldDExMTEyQGdtYWlsLmNvbVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJzaG93VG9rZW5cIiAmJiBvYmouc2hvd1Rva2VuKSByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiX19wcm90b19fXCIgJiYgb2JqLl9fcHJvdG9fXykgcmV0dXJuIHByb3h5O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2Z1bmNdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZighaXNEZWZhdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoZU1vZHVsZSwge2RlZmF1bHQ6IHByb3h5fSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgcmV0dXJuIHByb3RlY3QobS5kZWZhdWx0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBwcm90ZWN0KG0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLmRlZmF1bHQsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVzO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZmluZEJ5VW5pcXVlUHJvcGVydGllcyA9IChwcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICBjb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKHByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeURpc3BsYXlOYW1lID0gKGRpc3BsYXlOYW1lKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUuZGlzcGxheU5hbWUgPT09IGRpc3BsYXlOYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzLCBmaW5kQnlQcm90b3R5cGVzLCBmaW5kQnlEaXNwbGF5TmFtZX07XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbCA9IHtcbiAgICAgICAgICAgIHJlYWN0OiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiQ29tcG9uZW50XCIsIFwiUHVyZUNvbXBvbmVudFwiLCBcIkNoaWxkcmVuXCIsIFwiY3JlYXRlRWxlbWVudFwiLCBcImNsb25lRWxlbWVudFwiXSksXG4gICAgICAgICAgICByZWFjdERvbTogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImZpbmRET01Ob2RlXCJdKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldEludGVybmFsSW5zdGFuY2UgPSBlID0+IGVbT2JqZWN0LmtleXMoZSkuZmluZChrID0+IGsuc3RhcnRzV2l0aChcIl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlXCIpKV07XG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5WMiA9IHRoaXNcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuXG4gICAgfVxuXG4gICAgam9pbkJEMSgpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjBUbWZvNVpiT1JDUnFiQWRcIik7fVxuICAgIGxlYXZlQkQxKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI4NjAwNDc0NDk2NjkxNDA0OFwiKTt9XG5cbiAgICBqb2luQkQyKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiMkhTY204alwiKTt9XG4gICAgbGVhdmVCRDIoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjI4MDgwNjQ3MjkyODE5ODY1NlwiKTt9XG5cbiAgICBqb2luTEMoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCI3ZUZmZjJBXCIpO31cbiAgICBsZWF2ZUxDKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI3MDU5MDgzNTAyMTg2NjYxMTdcIik7fVxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdH1cbiAgICAgKi9cbiAgICBnZXQgcmVhY3QoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3Q7fVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XG4gICAgICovXG4gICAgZ2V0IFJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cbiAgICAgKi9cbiAgICBnZXQgcmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tXCIpfVxuICAgICAqL1xuICAgIGdldCBSZWFjdERvbSgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdERvbTt9XG4gICAgLyoqXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdC5Db21wb25lbnR9XG4gICAgICovXG4gICAgZ2V0IHJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XG4gICAgLyoqXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdC5Db21wb25lbnR9XG4gICAgICovXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XG5cbiAgICBnZXQgYW5jaG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIl0pIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O31cbiAgICBnZXQgc2xhdGVFZGl0b3JDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2xhdGVUZXh0QXJlYVwiXSk7fVxuICAgIGdldCBtZXNzYWdlQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIm1lc3NhZ2VcIiwgXCJjb250YWluZXJDb3p5XCJdKTt9XG4gICAgZ2V0IGd1aWxkQ2xhc3NlcygpIHtcblx0XHRjb25zdCBndWlsZHNXcmFwcGVyID0gQkRNb2R1bGVzLmdldChlID0+IGUud3JhcHBlciAmJiBlLnVucmVhZE1lbnRpb25zQmFyKVswXTtcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZ3VpbGRzRXJyb3IgJiYgZS5zZWxlY3RlZClbMF1cbiAgICAgICAgY29uc3QgcGlsbCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmJsb2JDb250YWluZXIpWzBdXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xuXHR9XG5cbiAgICBnZXQgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLmhhc093blByb3BlcnR5KFwiZGlzYWJsZUJ1dHRvbnNcIikpO31cbiAgICBnZXQgTWVzc2FnZUNvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJNZXNzYWdlXCIpO31cbiAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImRhdGVGb3JtYXRcIl0pO31cbiAgICBnZXQgVG9vbHRpcFdyYXBwZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO31cbiAgICBnZXQgTmF0aXZlTW9kdWxlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2V0QmFkZ2VcIl0pO31cbiAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7fVxuICAgIGdldCBHdWlsZEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJsZWF2ZUd1aWxkXCJdKTt9XG4gICAgZ2V0IFRvb2x0aXBzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmhpZGUgJiYgbS5zaG93ICYmICFtLnNlYXJjaCAmJiAhbS5zdWJtaXQgJiYgIW0uc2VhcmNoICYmICFtLmFjdGl2YXRlUmFnaW5nRGVtb24gJiYgIW0uZGlzbWlzcyk7fVxuICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0udG9TdHJpbmcgJiYgL1wiYmluYXJ5XCIvLnRlc3QobS50b1N0cmluZygpKSk7fVxuICAgIGdldCBMYXllclN0YWNrKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wicG9wTGF5ZXJcIl0pO31cbiAgICBnZXQgVXNlclN0b3JlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0Q3VycmVudFVzZXJcIl0pO31cbiAgICBnZXQgQ2hhbm5lbFN0b3JlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0Q2hhbm5lbFwiXSk7fVxuICAgIGdldCBDaGFubmVsQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIm9wZW5Qcml2YXRlQ2hhbm5lbFwiXSk7fVxuICAgIGdldCBQcml2YXRlQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzZWxlY3RQcml2YXRlQ2hhbm5lbFwiXSk7fVxuXG4gICAgb3BlbkRNKHVzZXJJZCkge1xuICAgICAgICBjb25zdCBzZWxmSWQgPSB0aGlzLlVzZXJTdG9yZS5nZXRDdXJyZW50VXNlcigpLmlkO1xuICAgICAgICBpZiAoc2VsZklkID09IHVzZXJJZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBwcml2YXRlQ2hhbm5lbElkID0gdGhpcy5DaGFubmVsU3RvcmUuZ2V0RE1Gcm9tVXNlcklkKHVzZXJJZCk7XG4gICAgICAgIGlmIChwcml2YXRlQ2hhbm5lbElkKSByZXR1cm4gdGhpcy5Qcml2YXRlQ2hhbm5lbEFjdGlvbnMuc2VsZWN0UHJpdmF0ZUNoYW5uZWwocHJpdmF0ZUNoYW5uZWxJZCk7XG4gICAgICAgIHRoaXMuQ2hhbm5lbEFjdGlvbnMub3BlblByaXZhdGVDaGFubmVsKHNlbGZJZCwgdXNlcklkKTtcbiAgICB9XG5cbiAgICBwYXJzZVNldHRpbmdzKGNhdCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1trZXldO1xuICAgICAgICAgICAgaWYgKHNldHRpbmcuY2F0ID09PSBjYXQgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2V0dGluZyk7XG4gICAgICAgICAgICB9IHJldHVybiBhcnI7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG5cbn07IiwiaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY29uc3Qgc3R5bGUgPSBgXHJcbiAgICAuY29udGFpbmVyLTJSbDAxdSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmNoYXQtM2JSeHh1IHtcclxuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuc2lkZWJhci0ySzhwRmgge1xyXG4gICAgICAgIGZsZXgtZ3JvdzogMSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbmA7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVm9pY2VNb2RlIHtcclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcIlZvaWNlTW9kZVwiLCBzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJWb2ljZU1vZGVcIik7XHJcbiAgICB9XHJcbn07IiwiY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgcmV0dXJuIG0uZGVmYXVsdDtcclxuICAgICAgICAgICAgaWYgKG0gJiYgZmlsdGVyKG0pKVx0cmV0dXJuIG07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGNvbnN0IG1vZHVsZXMgPSBbXTtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKG0uZGVmYXVsdCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gobSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vZHVsZXM7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQnlQcm9wcyA9ICguLi5wcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbmNvbnN0IGZpbmRCeVByb3RvdHlwZXMgPSAoLi4ucHJvdG9OYW1lcykgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBwcm90b05hbWVzLmV2ZXJ5KHByb3RvUHJvcCA9PiBtb2R1bGUucHJvdG90eXBlW3Byb3RvUHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XHJcblxyXG5sZXQgbW9kID0gIHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlQcm9wcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xyXG5leHBvcnQgZGVmYXVsdCBtb2RcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5XZWJwYWNrTW9kdWxlcyA9IG1vZCIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0Y29yZExvZ28gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2OCAxNjguNjlcIiB7Li4ucHJvcHN9IGhlaWdodD1cIjEwMCVcIiB3aWR0aD17cHJvcHMuc2l6ZX0+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2FcIiB4MT17NjYuN30geTE9ey00ODcuN30geDI9ezY2Ljd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2JcIiB4MT17MTAxLjd9IHkxPXstNDg3Ljd9IHgyPXsxMDEuN30geTI9ey01MDguNzN9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTIwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fY1wiIHgxPXs4NH0geTE9ey00MDh9IHgyPXs4NH0geTI9ey01NzYuNjl9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNmZmZcIiBkPVwiTTE0LjkgMzUuM2gxMzkuMlYxMzNIMTQuOXpcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ni43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2EpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAxLjcgNzkuN2MtNS40IDAtOS44IDQuNy05LjggMTAuNXM0LjQgMTAuNSA5LjggMTAuNSA5LjgtNC43IDkuOC0xMC41LTQuNC0xMC41LTkuOC0xMC41elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDB2MTY4bDE2OCAuNjlWMHptMTExLjMgMTI0LjFzLTMuNC00LjEtNi4zLTcuN2MxMi42LTMuNSAxNy40LTExLjMgMTcuNC0xMS4zYTUyLjUyIDUyLjUyIDAgMDEtMTEuMSA1LjYgNjguNjMgNjguNjMgMCAwMS0zOC45IDQgNzAuMTIgNzAuMTIgMCAwMS0xNC4xLTQuMSA0OC44OCA0OC44OCAwIDAxLTcuMS0zLjNjLS4zLS4yLS42LS4zLS45LS41YS43Ni43NiAwIDAwLS40LS4yYy0xLjctMS0yLjYtMS42LTIuNi0xLjZzNC42IDcuNiAxNi44IDExLjJjLTIuOSAzLjYtNi40IDcuOS02LjQgNy45LTIxLjItLjYtMjkuMy0xNC41LTI5LjMtMTQuNSAwLTMwLjYgMTMuOC01NS40IDEzLjgtNTUuNCAxMy44LTEwLjMgMjYuOS0xMCAyNi45LTEwbDEgMS4xQzUyLjggNTAuMyA0NSA1Ny45IDQ1IDU3LjlhNTYuMiA1Ni4yIDAgMDE1LjctMi43IDcyLjE5IDcyLjE5IDAgMDEyMS44LTYgOC43NSA4Ljc1IDAgMDExLjYtLjIgODkuMSA4OS4xIDAgMDExOS40LS4yIDc4LjQ1IDc4LjQ1IDAgMDEyOC45IDkuMXMtNy41LTcuMi0yMy45LTEyLjFsMS4zLTEuNXMxMy4xLS4zIDI2LjkgMTBjMCAwIDEzLjggMjQuOCAxMy44IDU1LjQuMS0uMS04IDEzLjgtMjkuMiAxNC40elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYylcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWdIdW50ZXJCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDMxLjMgMjkuNVwiIHsuLi5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuOCAxczEyIDguMiA3LjQgMTkuN1MxNi42IDI5IDIwIDI1LjZzLTQtNS42LTguNy0xMEwyMi44IDFcIiBmaWxsPVwicmdiYSgyMjcsNiwxOSwuNilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi4xIDEyLjNjLTIuNSAzLjItNi4xIDQuOC04LjkgNC4zTDMuNiAyOC44Yy0uNy45LTEuOSAxLTIuOC4zLS45LS43LTEtMS45LS40LTIuOEwxMCAxNC4xYy0xLjMtMi41LS42LTYuNCAyLTkuNyAzLjItNCA4LTUuNSAxMC44LTMuNHMyLjQgNy4yLS43IDExLjN6XCIgZmlsbD1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2lyY3VzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIHJldHVybiAoPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiICB7Li4udGhpcy5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNERDJFNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMzMgMzNhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0ybDEtMTJoMjhsMSAxMnpcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNFQTU5NkVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMgMzVjLS43OTItMS44NzUtMS43NS0zLjI5MS0zLjQxNy00LjY2NiAxLjc1LTEuNDU5IDQuNTQyLTUuNSA1LjI1LTguMjkyczIuNzUgOC4xMjUgMi4wNDIgMTAuNjI1UzEzIDM1IDEzIDM1em0xMC4zMDMgMGMuNzkxLTEuODc1IDEuNzUtMy4yOTEgMy40MTYtNC42NjYtMS43NS0xLjQ1OS00LjU0MS01LjUtNS4yNS04LjI5Mi0uNzA3LTIuNzkyLTIuNzUgOC4xMjUtMi4wNCAxMC42MjUuNzA4IDIuNSAzLjg3NCAyLjMzMyAzLjg3NCAyLjMzM3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNCRTE5MzFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43MjggMjQuMjYzQTIuNSAyLjUgMCAwMDggMjIuNWMwLS41NjUtLjE5NS0xLjA4MS0uNTExLTEuNUg0bC0uMjcyIDMuMjYzem0yOC41NDQgMEwzMiAyMWgtMy40ODlBMi40ODIgMi40ODIgMCAwMDI4IDIyLjVhMi41IDIuNSAwIDAwNC4yNzIgMS43NjN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTRcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjIyXCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjZcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMyAzNUgxM3MyLTYgMi0xM2g2YzAgNyAyIDEzIDIgMTN6TTE3IDJoMnY3aC0yelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM1NUFDRUVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTguODM4LjIwNkMxNy42NjcuMDQyIDE3IC4zMTggMTcgMS40MTh2MWMwIDEuMS44NjUgMS43NTMgMS45MjMgMS40NTFsNS4xNTQtLjkwMWMxLjcxNS0uMzQzIDEuNTQ4LTEuNTkzLjA4NS0xLjg4NEwxOC44MzguMjA2elwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0NDRDZERFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOCA2bC0uMDgxLjEyM0MxMC45MzggMTYuOTgxIDMgMTUuMDE1IDMgMTl2Mi41YTIuNSAyLjUgMCAwMDQuOTUuNUgxMmEyIDIgMCAwMDQgMGg0YTIgMiAwIDAwNCAwaDQuMDVhMi41IDIuNSAwIDAwNC45NS0uNVYxOWMwLTQtOC0yLTE1LTEzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGcgZmlsbD1cIiNGNUY4RkFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk0OCA2LjA3OGwtLjAzLjA0NUMxNy4xMzIgMTEuNjE5IDEwLjgxMSAxNi4xMjYgOCAxOHY0YTIgMiAwIDAwNCAwdi00Yy45ODItLjk4MiA1LjgxMy02Ljc4NyA1Ljk4NC0xMS43MzItLjAxLS4wNjQtLjAyNy0uMTI2LS4wMzYtLjE5em0uMDguMzk4QzE4LjMyNCAxMS4zNzQgMjMuMDMxIDE3LjAzMSAyNCAxOHY0YTIgMiAwIDAwNCAwdi00Yy0yLjc1LTEuODMzLTguOTUzLTYuMTktOS45NzItMTEuNTI0elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk4NCA2LjI3QzE3LjkyMiA4LjM0NiAxNy42MDYgMTYuMzk0IDE2IDE4djRhMiAyIDAgMDA0IDB2LTRjLTEuNTY0LTEuNTY0LTEuOTA1LTkuMjQxLTEuOTc5LTExLjU1OS0uMDExLS4wNTctLjAyNy0uMTEzLS4wMzctLjE3MXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IFYyQ19TZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0XCIpfVxuICovXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmxldCBtYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxubGV0IGNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cbmxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxubGV0IHNjcm9sbGJhck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXVxuY29uc3QgR3VpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMpWzBdLmRlZmF1bHRcbmNvbnN0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFJlbGF0aW9uc2hpcHMpWzBdLmRlZmF1bHRcbmNvbnN0IHNlc3Npb25Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRTZXNzaW9ucylbMF0uZGVmYXVsdFxuY29uc3QgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19BY2NvdW50SW5mb3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmKCFtYXJnaW5Nb2R1bGUyKW1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXG4gICAgICAgIGlmKCFjb2xvck1vZHVsZSljb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXG4gICAgICAgIGlmKCFzaXplTW9kdWxlKXNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIkFjY291bnQgSW5mb3NcIi8+LFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxuICAgICAgICAgICAgICAgICAgICBQcm9maWxlXG4gICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRQcm9maWxlVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxuICAgICAgICAgICAgICAgICAgICBTdGF0aXN0aWNzXG4gICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTdGF0aXN0aWNzKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cbiAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGVkIFNlc3Npb25zXG4gICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTZXNzaW9uVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0ubWFyZ2luQm90dG9tMjB9PjwvZGl2PlxuICAgICAgICBdXG4gICAgfVxuXG4gICAgZ2V0U2Vzc2lvblZhbHVlKCl7XG4gICAgICAgIGNvbnN0IHNlc3Npb25zUmF3ID0gc2Vzc2lvbk1vZHVsZS5nZXRTZXNzaW9ucygpXG4gICAgICAgIGNvbnN0IHNlc3Npb25zID0gT2JqZWN0LmtleXMoc2Vzc2lvbnNSYXcpLmZpbHRlcihlID0+IGUgIT09IFwiYWxsXCIpLm1hcChlID0+IHNlc3Npb25zUmF3W2VdKVxuXG4gICAgICAgIGlmKHNlc3Npb25zLmxlbmd0aCA9PT0gMClyZXR1cm4gXCItIE5vIHNlc3Npb24gZGV0ZWN0ZWQuIFBsZWFzZSB0cnkgaW4gYSBmZXcgc2Vjb25kc1wiXG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc2Vzc2lvbnMubWFwKGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGArIGlkOiAke2Uuc2Vzc2lvbklkfVxuKyBvczogJHtlLmNsaWVudEluZm8ub3NbMF0udG9VcHBlckNhc2UoKStlLmNsaWVudEluZm8ub3Muc2xpY2UoMSl9XG4rIGNsaWVudDogJHtlLmNsaWVudEluZm8uY2xpZW50fVxuKyBzdGF0dXM6ICR7ZS5zdGF0dXN9XG4rIEFjdGl2aXRpZXM6ICR7ZS5hY3Rpdml0aWVzLmxlbmd0aH1gXG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIitcIi1cIi5yZXBlYXQoMzgpK1wiXFxuXCIpXG4gICAgfVxuXG4gICAgZ2V0UHJvZmlsZVZhbHVlKCl7XG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmdldEN1cnJlbnRVc2VyKClcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtEYXRlfVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgY3JlYXRlZEF0ID0gdXNlci5jcmVhdGVkQXRcblxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5hdmF0YXJVUkxcbiAgICAgICAgaWYodXNlci5hdmF0YXIgJiYgdXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpKXtcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXG4gICAgICAgIH1cblxuICAgICAgICBpZihhdmF0YXJVUkwuc3RhcnRzV2l0aChcIi9cIikpe1xuICAgICAgICAgICAgYXZhdGFyVVJMID0gXCJodHRwczovL2Rpc2NvcmQuY29tXCIrYXZhdGFyVVJMXG4gICAgICAgIH1cbiAgICAgICAgaWYoYXZhdGFyVVJMLmVuZHNXaXRoKFwiP3NpemU9MTI4XCIpKXtcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IGF2YXRhclVSTC5yZXBsYWNlKFwiP3NpemU9MTI4XCIsIFwiP3NpemU9NDA5NlwiKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGArIFVzZXJuYW1lOiAke3VzZXIudXNlcm5hbWV9XG4rIERpc2NyaW1pbmF0b3I6ICR7dXNlci5kaXNjcmltaW5hdG9yfVxuKyBUYWc6ICR7dXNlci50YWd9XG4rIElEOiAke3VzZXIuaWR9XG4rIEF2YXRhcjogJHt1c2VyLmF2YXRhcn1cbisgQXZhdGFyIFVSTDogJHthdmF0YXJVUkx9XG4rIENyZWF0aW9uIERhdGU6ICR7KGNyZWF0ZWRBdC5nZXREYXRlKCkpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0TW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldEZ1bGxZZWFyKCkpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfSAke2NyZWF0ZWRBdC5nZXRIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfWggJHtjcmVhdGVkQXQuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfW1pbiAke2NyZWF0ZWRBdC5nZXRTZWNvbmRzKCl9c1xuKyBGbGFnczogJHt1c2VyLmZsYWdzfVxuKyBIYXMgTml0cm86ICR7dXNlci5oYXNQcmVtaXVtU3Vic2NyaXB0aW9uID8gXCJZZXNcIiA6IFwiTm9cIn1cbi0gRW1haWw6ICR7dXNlci5lbWFpbH1cbi0gMkZBOiAke3VzZXIubWZhRW5hYmxlZCA/IFwiWWVzXCIgOiBcIk5vXCJ9XG4tIEhhcyBCZWVuIE9uIE1vYmlsZTogJHt1c2VyLm1vYmlsZSA/IFwiWWVzXCIgOiBcIk5vXCJ9XG4tIFBob25lOiAke3VzZXIucGhvbmUgfHwgXCJOb25lXCJ9XG4tIFZlcmlmaWVkOiAke3VzZXIudmVyaWZpZWR9XG4tIENhbiBTZWUgTlNGVyBDaGFubmVsczogJHt1c2VyLm5zZndBbGxvd2VkfWA7XG4gICAgfVxuXG4gICAgZ2V0U3RhdGlzdGljcygpe1xuXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IE9iamVjdC52YWx1ZXMoR3VpbGRNb2R1bGUuZ2V0R3VpbGRzKCkpXG4gICAgICAgIGNvbnN0IHJlbGF0aW9ucyA9IE9iamVjdC5rZXlzKHJlbGF0aW9uU2hpcE1vZHVsZS5nZXRSZWxhdGlvbnNoaXBzKCkpXG4gICAgICAgIGNvbnN0IGZyaWVuZHMgPSByZWxhdGlvbnMuZmlsdGVyKGUgPT4gcmVsYXRpb25TaGlwTW9kdWxlLmlzRnJpZW5kKGUpKVxuICAgICAgICBjb25zdCBibG9ja2VkID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0Jsb2NrZWQoZSkpXG5cbiAgICAgICAgcmV0dXJuIGArIFNlcnZlciBDb3VudDogJHtndWlsZHMubGVuZ3RofSBzZXJ2ZXJzXG4rIFJlbGF0aW9uczogJHtyZWxhdGlvbnMubGVuZ3RofSByZWxhdGlvbnNcbisgRnJpZW5kcyBDb3VudDogJHtmcmllbmRzLmxlbmd0aH0gZnJpZW5kc1xuLSBCbG9ja2VkIFVzZXJzIENvdW50OiAke2Jsb2NrZWQubGVuZ3RofSBibG9ja2VkIHVzZXJzYFxuICAgIH1cbn1cblxuXG5sZXQgaGlnaHRsaWdodEpTID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGlnaGxpZ2h0KVswXVxubGV0IG1lc3NhZ2VNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXVxubGV0IG1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXG5cbmNsYXNzIENvZGVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKXtcbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUxKW1lc3NhZ2VNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXVxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTIpbWVzc2FnZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZXNzYWdlQ29udGVudClbMF1cbiAgICAgICAgaWYoIXNjcm9sbGJhck1vZHVsZTEpc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXG4gICAgICAgIGlmKCFoaWdodGxpZ2h0SlMpaGlnaHRsaWdodEpTID0gQkRNb2R1bGVzLmdldChlID0+IGUubGlzdExhbmd1YWdlcylbMF1cbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtgJHttZXNzYWdlTW9kdWxlMS5tYXJrdXB9ICR7bWVzc2FnZU1vZHVsZTIubWVzc2FnZUNvbnRlbnR9YH0+XG4gICAgICAgICAgICA8cHJlPlxuICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPXtgJHtzY3JvbGxiYXJNb2R1bGUxLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IGhsanNgfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogaGlnaHRsaWdodEpTLmhpZ2hsaWdodCh0aGlzLnByb3BzLmxhbmd1YWdlLCB0aGlzLnByb3BzLmNvbnRlbnQpLnZhbHVlfX0+XG5cbiAgICAgICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fT48L2Rpdj5cbiAgICAgICAgPC9kaXY+KVxuICAgIH1cbn0iLCIvLyBHb29kIGx1Y2sgdG8gcmVhZCBteSBjb2RlLCBFdmVuIG1lIGNhbid0IHJlYWQgaXQgcHJvcGVybHkuXG5cbmltcG9ydCB7IHN0YXQgfSBmcm9tIFwiZnNcIlxuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4uL21vZHVsZXMvZGlzdGFudFwiXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIlxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCJcblxubGV0IGZvcm1Nb2R1bGVcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaVByZXZpZXcgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBzdGF0ZXM6IFtdXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgaWYoIWZvcm1Nb2R1bGUpZm9ybU1vZHVsZSA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLkZvcm1TZWN0aW9uKVxuICAgICAgICAvKiogXG4gICAgICAgICAqIEB0eXBlIHtGdW5jdGlvbltdfVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgYWxsQ29tcG9uZW50cyA9IFsuLi5uZXcgU2V0KE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpLm1hcChlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdKS5tYXAoayA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2tdKVxuICAgICAgICB9KS5mbGF0KCkpXVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgPGZvcm1Nb2R1bGUuRm9ybVNlY3Rpb24gdGFnPVwiaDJcIiB0aXRsZT1cIkxpZ2h0Y29yZCdzIEFwaSBBdmFpbGxhYmxlIGNvbXBvbmVudHNcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybU1vZHVsZS5Gb3JtVGV4dCB0eXBlPVwiZGVzY3JpcHRpb25cIiBjbGFzc05hbWU9XCJcIiBzZWxlY3RhYmxlPXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgIFRoZXNlIGNvbXBvbmVudHMgYXJlIGhlcmUgZm9yIHRoZSBwbHVnaW4gZGV2cy4gVGhleSBjYW4gcXVpY2tseSBlbWJlZCBhbnkgY29tcG9uZW50IGJlbG93IHdpdGggdGhpcyBwYW5lbC5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpblRvcDogXCIyMHB4XCJ9fT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJpbmZvXCI+QWxsIHRoZXNlIGNvbXBvbmVudHMgaGF2ZSBlcnJvciBoYW5kbGluZy4gSWYgeW91IHdhbnQgbm9uZSwgYWRkIGAub3JpZ2luYWxgIGFmdGVyIHRoZSBjb21wb25lbnQgcGF0aC48L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PlxuICAgICAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cIndhcm5cIj5XZSBkbyBub3QgcmVjb21tZW5kIG1vZGlmeWluZyB0aGVzZSBjb21wb25lbnQgd2l0aCBwbHVnaW5zLiBPbmx5IGRvIHRoaXMgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLjwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+XG4gICAgICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1UZXh0PlxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3A+PC9NYXJnaW5Ub3A+XG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGNvbG9yPVwiYnJhbmRcIiBsb29rPVwib3V0bGluZWRcIiBzaXplPVwibWVkaXVtXCIgaG92ZXJDb2xvcj1cImdyZWVuXCIgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZW1vdGUuc2hlbGwub3BlbkV4dGVybmFsKFwiaHR0cHM6Ly9saWdodGNvcmQuZGVyb2t1Lnh5ei9MaWdodGNvcmRBcGkvZG9jc1wiKVxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvblxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XG4gICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+LFxuICAgICAgICAgICAgYWxsQ29tcG9uZW50cy5tYXAoY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcE5hbWUgPSBjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBQYXRoID0gYExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy4ke09iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpLmZpbmQoZSA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2NvbXBOYW1lXSl9LiR7Y29tcE5hbWV9YFxuICAgICAgICAgICAgICAgIHJldHVybiA8Q29tcG9uZW50UHJldmlldyBrZXk9e2NvbXBQYXRofSBjb21wPXtjb21wfSAvPlxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH1cblxuICAgIGdldCByZW5kZXJzKCl7XG5cbiAgICB9XG59XG5cbmNsYXNzIENvbXBvbmVudFByZXZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB0YWI6IFwicHJldmlld1wiLFxuICAgICAgICAgICAgZWxlbTogcHJvcHMuY29tcCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHt9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMucHJvcHMuY29tcFxuICAgICAgICBsZXQgQWxsUHJldmlld3MgPSBbXVxuICAgICAgICBpZihjb21wLkFsbFByZXZpZXdzKUFsbFByZXZpZXdzID0gY29tcC5BbGxQcmV2aWV3c1xuICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlXG4gICAgICAgIGxldCBnZXRQcm9wcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBmaW5hbCA9IHt9XG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5mb3JFYWNoKGNhdGVnb3J5ID0+IHtcbiAgICAgICAgICAgICAgICBmaW5hbFtPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1dID0gY2F0ZWdvcnlbMF1bT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlLm9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBmaW5hbFtrZXldID0gQWxsUHJldmlld3MuZmluZChlID0+IGUuZmluZChlID0+IGVba2V5XSkpW3N0YXRlLm9wdGlvbnNba2V5XV1ba2V5XVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBmaW5hbFxuICAgICAgICB9XG4gICAgICAgIGxldCByZW5kZXJQcmV2aWV3ID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3ttYXJnaW46IFwiMjBweFwifX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsIFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXG4gICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPVwibGMtdGFiLWJveC1zaGFkb3dcIj5cbiAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcCwgZ2V0UHJvcHMoKSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVuZGVyQ29kZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7bWFyZ2luOiBcIjIwcHhcIn19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxuICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgSlNYXG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianN4XCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwianN4XCIpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuRXJyb3JDYXRjaGVyPlxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT4gICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3RcbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkVycm9yQ2F0Y2hlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5Db2RlQmxvY2sgbGFuZ3VhZ2U9XCJqc1wiIGNvbnRlbnQ9e2dlbmVyYXRlQ29kZShcInJlYWN0XCIpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuRXJyb3JDYXRjaGVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGdldFN0ckZvclByb3AgPSAodmFsdWUsIGNvbXBQYXRoLCBsYW5nKSA9PiB7XG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpe1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKXtcbiAgICAgICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiAmJiAodmFsdWUuJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IHZhbHVlLiQkdHlwZW9mID09PSAweGVhYzcpKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoY29tcFBhdGggPT09IFwiTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGFic1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxhbmcgPT09IFwicmVhY3RcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xubWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIlxufX0sXG5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xuYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLFxucGFkZGluZzogXCIzMHB4IDMwcHhcIixcbmJvcmRlclJhZGl1czogXCI4cHhcIlxufSwgY2xhc3NOYW1lOiBcImxjLXRhYi1ib3gtc2hhZG93XCIgfSxcblJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGUsIG51bGwsIFwiUHJldmlldyB0YWJzXCIpXG4pXG4pYFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYobGFuZyA9PT0gXCJqc3hcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPXt7XG5tYXJnaW5Ub3A6IFwiMjBweFwiLCBtYXJnaW5Cb3R0b206IFwiMjBweFwiXG59fT5cbjxkaXYgc3R5bGU9e3tcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsIFxuICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxuICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxufX0gY2xhc3NOYW1lPVwibGMtdGFiLWJveC1zaGFkb3dcIj5cbiAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGU+UHJldmlldyB0YWJzPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZT5cbjwvZGl2PlxuPC9kaXY+YFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIllvdXIgY29tcG9uZW50cyBoZXJlLlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgXCIgICAgXCIpXG4gICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpe1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIGxldCBnZW5lcmF0ZUNvZGUgPSBmdW5jdGlvbihsYW5nKXsgLy8gY29kZSBmb3JtYXR0aW5nIGlzIGhhcmRcbiAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcbiAgICAgICAgICAgIGxldCBjYXRlZ29yaWVzID0gT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cylcbiAgICAgICAgICAgIGNvbnN0IGNvbXBDYXRlZ29yeSA9IGNhdGVnb3JpZXMuZmluZChlID0+IHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV1bY29tcE5hbWVdKVxuICAgICAgICAgICAgY29uc3QgY29tcFBhdGggPSBgTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLiR7Y29tcENhdGVnb3J5fS4ke2NvbXBOYW1lfWBcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2V0UHJvcHMoKVxuXG4gICAgICAgICAgICBpZihsYW5nID09PSBcImpzeFwiKXtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcFN0cmluZ3MgPSBbXVxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlblByb3AgPSBudWxsXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoa2V5ID09IFwiY2hpbGRyZW5cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblByb3AgPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHIgPSBrZXkrXCI9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgeyR7Z2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZyl9fWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLnB1c2goc3RyKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBsZXQgb3BlblRhZ1xuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuUHJvcCl7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5UYWcgPSBgPCR7Y29tcFBhdGh9ICR7cHJvcFN0cmluZ3Muam9pbihcIiBcIil9PmBcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsb3NlVGFnID0gYDwvJHtjb21wUGF0aH0+YFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7b3BlblRhZ31cXG4gICAgJHtjaGlsZHJlblByb3B9XFxuJHtjbG9zZVRhZ31gXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5UYWcgPSBgPCR7Y29tcFBhdGh9ICR7cHJvcFN0cmluZ3Muam9pbihcIiBcIil9Lz5gXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVuVGFnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYobGFuZyA9PT0gXCJyZWFjdFwiKXtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCBudWxsXG4gICAgICAgICAgICAgICAgZGVsZXRlIHByb3BzLmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4uJCR0eXBlb2YgJiYgKGNoaWxkcmVuLiQkdHlwZW9mID09PSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSB8fCBjaGlsZHJlbi4kJHR5cGVvZiA9PT0gMHhlYWM3KSl7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZ2V0U3RyRm9yUHJvcChjaGlsZHJlbiwgY29tcFBhdGgsIGxhbmcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBwcm9wU3RyaW5ncyA9IFtdXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZpc2libGVLZXkgPSAvW15cXHdcXGRfXS9nLnRlc3Qoa2V5KSA/IEpTT04uc3RyaW5naWZ5KGtleSkgOiBrZXlcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IHZpc2libGVLZXkrXCI6IFwiXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShwcm9wc1trZXldKVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKS5zcGxpdChcIlxcblwiKS5tYXAoKHN0ciwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkgPT09IDApcmV0dXJuIHN0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIiAgICBcIiArIHN0clxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbihcIlxcblwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLnB1c2goc3RyKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgbGV0IHByb3BPYmplY3QgPSBcIntcIlxuICAgICAgICAgICAgICAgIGlmKHByb3BTdHJpbmdzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLmZvckVhY2goKHN0ciwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzTGFzdCA9IGkgPT09IHByb3BTdHJpbmdzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0ZpcnN0ID0gaSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRmlyc3Qpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCIsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJcXG4gICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gc3RyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpc0xhc3Qpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz1cIlxcbn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwifVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkRhdGEgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgJiYgY2hpbGRyZW4uc3RhcnRzV2l0aChcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIikgPyBjaGlsZHJlbiA6IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIHJldHVybiBgUmVhY3QuY3JlYXRlRWxlbWVudCgke2NvbXBQYXRofSwgJHtwcm9wT2JqZWN0fSwgJHtjaGlsZHJlbkRhdGF9KWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgaGVscCA9IGNvbXAuaGVscCB8fCB7fVxuICAgICAgICBsZXQgaW5mbyA9IGhlbHAuaW5mbyA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImluZm9cIj5cbiAgICAgICAgICAgIHtoZWxwLmluZm99XG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcbiAgICAgICAgbGV0IHdhcm4gPSBoZWxwLndhcm4gPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJ3YXJuXCI+XG4gICAgICAgICAgICB7aGVscC53YXJufVxuICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXG4gICAgICAgIGxldCBkYW5nZXIgPSBoZWxwLmRhbmdlciA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImRhbmdlclwiPlxuICAgICAgICAgICAge2hlbHAuZGFuZ2VyfVxuICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXG4gICAgICAgIGxldCBlcnJvciA9IGhlbHAuZXJyb3IgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJlcnJvclwiPlxuICAgICAgICAgICAge2hlbHAuZXJyb3J9XG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBoZWxwLnN1Y2Nlc3MgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJzdWNjZXNzXCI+XG4gICAgICAgICAgICB7aGVscC5zdWNjZXNzfVxuICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXG4gICAgICAgIHJldHVybiAoPGRpdj5cbiAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cbiAgICAgICAgICAgICAgICB7Y29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWV9XG4gICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nc1RpdGxlPlxuICAgICAgICAgICAge2luZm99XG4gICAgICAgICAgICB7c3VjY2Vzc31cbiAgICAgICAgICAgIHt3YXJufVxuICAgICAgICAgICAge2Vycm9yfVxuICAgICAgICAgICAge2Rhbmdlcn1cbiAgICAgICAgICAgIHtBbGxQcmV2aWV3cy5tYXAoY2F0ZWdvcnkgPT4ge1xuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLm9uQ2xpY2spcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS50ZXh0KXJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0uY2hpbGRyZW4pcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICBpZihjYXRlZ29yeS5sZW5ndGggPT09IDEpcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7a2V5fVxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+LFxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24gb3B0aW9ucz17Y2F0ZWdvcnkubWFwKChlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHQtXCIraW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IEpTT04uc3RyaW5naWZ5KGVbT2JqZWN0LmtleXMoZSlbMF1dKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KX0gdmFsdWU9e1wib3B0LVwiKyhzdGF0ZS5vcHRpb25zW2tleV0gfHwgXCIwXCIpfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5vcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldOiAodmFsdWUudmFsdWUgfHwgXCIwXCIpLnJlcGxhY2UoXCJvcHQtXCIsIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH19IHNlYXJjaGFibGU9e3RydWV9Lz4sXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Cb3R0b206IFwiOHB4XCJ9fT48L2Rpdj5cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGFicyB0YWJzPXtbe2xhYmVsOiBcIlByZXZpZXdcIiwgaWQ6IFwicHJldmlld1wifSwge2xhYmVsOiBcIkNvZGVcIiwgaWQ6IFwiY29kZVwifV19IFxuICAgICAgICAgICAgICAgIGFjdGl2ZT17c3RhdGUudGFifSBjaGlsZHJlbj17c3RhdGUudGFiID09PSBcInByZXZpZXdcIiA/IHJlbmRlclByZXZpZXcoKSA6IHJlbmRlckNvZGUoKX0gb25DaGFuZ2U9eyh0YWIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9fS8+XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRleHRJbnB1dCBmcm9tIFwiLi9jb21wb25lbnRzL3RleHRpbnB1dFwiO1xyXG5cclxubGV0IGNsYXNzbmFtZXMgPSBbXVxyXG5mdW5jdGlvbiBnZXRDbGFzc05hbWUobmFtZSl7XHJcbiAgICBsZXQgY2xhc3NOYW1lID0gY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKG5hbWUrXCItXCIpKVxyXG4gICAgaWYoY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcclxuICAgIGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlW25hbWVdKVswXVtuYW1lXVxyXG4gICAgY2xhc3NuYW1lcy5wdXNoKGNsYXNzTmFtZSlcclxuICAgIHJldHVybiBjbGFzc05hbWVcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dElucHV0U2V0dGluZyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IHt0ZXh0LCBpbmZvfSA9IHRoaXMucHJvcHMuZGF0YTtcclxuICAgICAgICBpZih0aGlzLnByb3BzLmRhdGEuZXhwZXJpbWVudGFsKXtcclxuICAgICAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XHJcbiAgICAgICAgICAgICAgICBjbGFzc25hbWVzLnB1c2goQkRNb2R1bGVzLmdldChlID0+IGUuYmV0YSAmJiAoIWUuY29udGFpbmVyICYmICFlLnVzZXJTZXR0aW5nc1ZvaWNlKSlbMF0uYmV0YSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbmZvID0gW1xyXG4gICAgICAgICAgICAgICAgaW5mbyxcclxuICAgICAgICAgICAgICAgIDxzdXAgY2xhc3NOYW1lPXtnZXRDbGFzc05hbWUoXCJiZXRhXCIpfT4oRVhQRVJJTUVOVEFMKTwvc3VwPlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17XCJ1aS1mbGV4IGZsZXgtdmVydGljYWwgZmxleC1qdXN0aWZ5LXN0YXJ0IGZsZXgtYWxpZ24tc3RyZXRjaCBmbGV4LW5vd3JhcCB1aS1zd2l0Y2gtaXRlbVwifT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1widWktZmxleCBmbGV4LWhvcml6b250YWwgZmxleC1qdXN0aWZ5LXN0YXJ0IGZsZXgtYWxpZ24tc3RyZXRjaCBmbGV4LW5vd3JhcFwifT5cclxuICAgICAgICAgICAgICAgIDxoMyBrZXk9XCJ0aXRsZVwiIGNsYXNzTmFtZT1cInVpLWZvcm0tdGl0bGUgaDMgbWFyZ2luLXJlc2V0IG1hcmdpbi1yZXNldCB1aS1mbGV4LWNoaWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3RleHR9XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPFRleHRJbnB1dCBrZXk9XCJpbnB1dFwiIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSB2YWx1ZT17dGhpcy5wcm9wcy52YWx1ZX0gcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ8fG51bGx9IC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgZmxleDogXCIxIDEgYXV0b1wiXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAge2luZm99XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XG5cbmltcG9ydCBYU3ZnIGZyb20gXCIuL3hTdmdcIjtcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcbmltcG9ydCBFZGl0SWNvbiBmcm9tIFwiLi9pY29ucy9lZGl0XCI7XG5pbXBvcnQgRGVsZXRlSWNvbiBmcm9tIFwiLi9pY29ucy9kZWxldGVcIjtcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi90b29sdGlwV3JhcFwiO1xuaW1wb3J0IHsgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi4vbW9kdWxlcy9wbHVnaW5DZXJ0aWZpZXJcIjtcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcbmNvbnN0IGFuY2hvckNsYXNzZXMgPSBCRFYyLmFuY2hvckNsYXNzZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzID0gdGhpcy5zaG93U2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcbiAgICAgICAgdGhpcy5oYXNTZXR0aW5ncyA9IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luICYmIHR5cGVvZih0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKSA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xuXG4gICAgICAgIHRoaXMuZWRpdCA9IHRoaXMuZWRpdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRlbGV0ZSA9IHRoaXMuZGVsZXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmVuYWJsZWQsXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXG4gICAgICAgICAgICByZWxvYWRzOiAwLFxuICAgICAgICAgICAgdHJ1c3RlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzaG93U2V0dGluZ3MoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNTZXR0aW5ncykgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nczogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGNsb3NlU2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuc2V0dGluZ3MpIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcy5zZXR0aW5nc3BhbmVsLmFwcGVuZENoaWxkKHRoaXMuc2V0dGluZ3NQYW5lbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiZm9yay1wcy0zXCJdKSByZXR1cm47XG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZighY29udGFpbmVyKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoYENvbnRhaW5lciBpcyB1bmRlZmluZWQuYCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnJlZnMuY2FyZE5vZGU7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzTm9kZS5jbG9zZXN0KFwiZGl2W2NsYXNzKj1cXFwiY29udGVudFJlZ2lvblNjcm9sbGVyLVxcXCJdXCIpXG4gICAgICAgICAgICBpZiAoIWlzSGlkZGVuKGNvbnRhaW5lciwgdGhpc05vZGUpKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0ID0gRE9NLm9mZnNldChjb250YWluZXIpO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xuICAgICAgICAgICAgRE9NLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAsXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQgPiBvcmlnaW5hbCkgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsICsgKHByb2dyZXNzICogKGVuZFBvaW50IC0gb3JpZ2luYWwpKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgLSAocHJvZ3Jlc3MgKiAob3JpZ2luYWwgLSBlbmRQb2ludCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCI/Pz9cIjtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldCBzZXR0aW5nc0NvbXBvbmVudCgpIHtcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XG4gICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgdGhpcy5uYW1lICsgXCIuXCIsIGVycik7IH1cblxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7c3R5bGU6IHtcImZsb2F0XCI6IFwicmlnaHRcIiwgXCJjdXJzb3JcIjogXCJwb2ludGVyXCJ9LCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnMuc2V0dGluZ3NwYW5lbC5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XG4gICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke3RoaXMubmFtZX1gLCBjbGFzc05hbWU6IFwicGx1Z2luLXNldHRpbmdzXCIsIHJlZjogXCJzZXR0aW5nc3BhbmVsXCJ9KSxcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgIT09IFwib2JqZWN0XCIgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke3RoaXMubmFtZX1gLCBjbGFzc05hbWU6IFwicGx1Z2luLXNldHRpbmdzXCIsIHJlZjogXCJzZXR0aW5nc3BhbmVsXCIsIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7X19odG1sOiB0aGlzLnNldHRpbmdzUGFuZWx9fSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xuICAgICAgICBjb25zdCB0aXRsZSA9IFwie3tuYW1lfX0gdnt7dmVyc2lvbn19IGJ5IHt7YXV0aG9yfX1cIi5zcGxpdCgvKHt7W0EtWmEtel0rfX0pLyk7XG4gICAgICAgIGNvbnN0IG5hbWVJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e25hbWV9fVwiKTtcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbdmVyc2lvbkluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwidmVyc2lvbiBiZGEtdmVyc2lvblwifSwgdmVyc2lvbik7XG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge2NsYXNzTmFtZTogXCJhdXRob3IgYmRhLWF1dGhvclwifTtcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5jbGFzc05hbWUgKz0gYCAke2FuY2hvckNsYXNzZXMuYW5jaG9yfSAke2FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gO1xuICAgICAgICAgICAgICAgIHByb3BzLnRhcmdldCA9IFwiX2JsYW5rXCI7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yLmxpbmspIHByb3BzLmhyZWYgPSBhdXRob3IubGluaztcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yLmlkKSBwcm9wcy5vbkNsaWNrID0gKCkgPT4ge0JEVjIuTGF5ZXJTdGFjay5wb3BMYXllcigpOyBCRFYyLm9wZW5ETShhdXRob3IuaWQpO307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aXRsZVthdXRob3JJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KGF1dGhvci5saW5rIHx8IGF1dGhvci5pZCA/IFwiYVwiIDogXCJzcGFuXCIsIHByb3BzLCBhdXRob3IubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcbiAgICB9XG5cbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XG4gICAgICAgIGNvbnN0IHByb3BzID0ge2NsYXNzTmFtZTogXCJiZGEtbGluayBiZGEtbGluay13ZWJzaXRlXCIsIHRhcmdldDogXCJfYmxhbmtcIn07XG4gICAgICAgIGlmICh0eXBlb2YodXJsKSA9PSBcInN0cmluZ1wiKSBwcm9wcy5ocmVmID0gdXJsO1xuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHByb3BzLCB0aXRsZSk7XG4gICAgfVxuXG4gICAgbWFrZUJ1dHRvbih0aXRsZSwgY2hpbGRyZW4sIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gPFRvb2x0aXBXcmFwIGNvbG9yPVwiYmxhY2tcIiBzaWRlPVwidG9wXCIgdGV4dD17dGl0bGV9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9Ub29sdGlwV3JhcD47XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgdGhpcy51bm1vdW50ZWQgPSB0cnVlXG4gICAgfVxuXG4gICAgZ2V0IGxpbmtzKCkge1xuICAgICAgICBjb25zdCBsaW5rcyA9IFtdO1xuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMucHJvcHMuYWRkb247XG4gICAgICAgIGlmIChhZGRvbi53ZWJzaXRlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJXZWJzaXRlXCIsIGFkZG9uLndlYnNpdGUpKTtcbiAgICAgICAgaWYgKGFkZG9uLnNvdXJjZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU291cmNlXCIsIGFkZG9uLnNvdXJjZSkpO1xuICAgICAgICBpZiAoYWRkb24uaW52aXRlKSB7XG4gICAgICAgICAgICBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJTdXBwb3J0IFNlcnZlclwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gYWRkb24uaW52aXRlO1xuICAgICAgICAgICAgICAgIGlmICh0ZXN0ZXIudGVzdChjb2RlKSkgY29kZSA9IGNvZGUubWF0Y2godGVzdGVyKVsxXTtcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcbiAgICAgICAgICAgICAgICBCRFYyLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChjb2RlKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWRkb24uZG9uYXRlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJEb25hdGVcIiwgYWRkb24uZG9uYXRlKSk7XG4gICAgICAgIGlmIChhZGRvbi5wYXRyZW9uKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJQYXRyZW9uXCIsIGFkZG9uLnBhdHJlb24pKTtcbiAgICAgICAgcmV0dXJuIGxpbmtzO1xuICAgIH1cblxuICAgIGdldCBmb290ZXIoKSB7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5saW5rcztcbiAgICAgICAgcmV0dXJuIChsaW5rcy5sZW5ndGggfHwgdGhpcy5oYXNTZXR0aW5ncykgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZC1mb290ZXIgYmRhLWZvb3RlclwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1saW5rcyBiZGEtbGlua3NcIn0sXG4gICAgICAgICAgICAgICAgLi4uKGxpbmtzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IGluZGV4IDwgbGlua3MubGVuZ3RoIC0gMSA/IFtlbGVtZW50LCBcIiB8IFwiXSA6IGVsZW1lbnQpLmZsYXQoKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy50b2dnbGUgJiYgdGhpcy5wcm9wcy50b2dnbGUodGhpcy5uYW1lKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xuICAgIH1cblxuICAgIGVkaXQoKSB7dGhpcy5wcm9wcy5lZGl0KHRoaXMubmFtZSk7fVxuICAgIGRlbGV0ZSgpIHt0aGlzLnByb3BzLnJlbW92ZSh0aGlzLm5hbWUpO31cbiAgICByZWxvYWQoKSB7dGhpcy5wcm9wcy5yZWxvYWQodGhpcy5uYW1lKTt9XG5cbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXROYW1lKCkgOiB0aGlzLnByb3BzLmFkZG9uLm5hbWUpO31cbiAgICBnZXQgYXV0aG9yKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldEF1dGhvcigpIDogdGhpcy5wcm9wcy5hZGRvbi5hdXRob3IpO31cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IHRoaXMucHJvcHMuYWRkb24uZGVzY3JpcHRpb24pO31cbiAgICBnZXQgdmVyc2lvbigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRWZXJzaW9uKCkgOiB0aGlzLnByb3BzLmFkZG9uLnZlcnNpb24pO31cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3MpIHJldHVybiB0aGlzLnNldHRpbmdzQ29tcG9uZW50O1xuICAgICAgICBjb25zdCB7YXV0aG9ySWQsIGF1dGhvckxpbmt9ID0gdGhpcy5wcm9wcy5hZGRvbjtcblxuICAgICAgICBjb25zdCBzdHlsZSA9IHt9XG4gICAgICAgIGlmKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzU2Nhbm5pbmcpe1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTY2FubmluZyA9IHRydWVcbiAgICAgICAgICAgICAgICBwcm9jZXNzRmlsZShyZXNvbHZlKHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUuZW5kc1dpdGgoXCIucGx1Z2luLmpzXCIpID8gY29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgdGhpcy5wcm9wcy5hZGRvbi5maWxlbmFtZSksIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51bm1vdW50ZWQpcmV0dXJuXG4gICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVzdGVkOiByZXN1bHQuc3VzcGVjdCA/IFwic3VzcGVjdFwiIDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sICgpID0+IHt9KVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IHRydWUpe1xuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuaXNUcnVzdGVkID09PSBcInN1c3BlY3RcIil7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkIGJkLWFkZG9uLWNhcmQgc2V0dGluZ3MtY2xvc2VkIHVpLXN3aXRjaC1pdGVtXCIsIHN0eWxlfSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWhlYWRlciBiZGEtaGVhZGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLXRpdGxlIGJkYS1oZWFkZXItdGl0bGVcIn0sIHRoaXMuYnVpbGRUaXRsZSh0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwge25hbWU6IHRoaXMuYXV0aG9yLCBpZDogYXV0aG9ySWQsIGxpbms6IGF1dGhvckxpbmt9KSksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWNvbnRyb2xzIGJkYS1jb250cm9sc1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuZWRpdCAmJiB0aGlzLm1ha2VCdXR0b24oXCJFZGl0XCIsIDxFZGl0SWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMuZWRpdCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSAmJiB0aGlzLm1ha2VCdXR0b24oXCJEZWxldGVcIiwgPERlbGV0ZUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmRlbGV0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbG9hZCAmJiB0aGlzLm1ha2VCdXR0b24oXCJSZWxvYWRcIiwgPFJlbG9hZEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLnJlbG9hZCksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge29uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWR9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXItd3JhcCBiZGEtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIn0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXIgYmQtYWRkb24tZGVzY3JpcHRpb24gYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCB0aGlzLmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuZm9vdGVyXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZS5yZW5kZXI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcbn0pOyIsImltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gXCIuL2Vycm9yQm91bmRhcnlcIjtcbmltcG9ydCBDb250ZW50Q29sdW1uIGZyb20gXCIuL2NvbnRlbnRDb2x1bW5cIjtcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcbmltcG9ydCBBZGRvbkNhcmQgZnJvbSBcIi4vYWRkb25jYXJkXCI7XG5pbXBvcnQgRHJvcGRvd24gZnJvbSBcIi4vY29tcG9uZW50cy9kcm9wZG93blwiO1xuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9jb21wb25lbnRzL3NlYXJjaFwiO1xuXG5pbXBvcnQge3NldHRpbmdzQ29va2llLCBwbHVnaW5Db29raWUsIHRoZW1lQ29va2llLCBiZHBsdWdpbnMsIGJkdGhlbWVzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luTW9kdWxlXCI7XG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xuaW1wb3J0IEJkQXBpIGZyb20gXCIuLi9tb2R1bGVzL2JkQXBpXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi90b29sdGlwV3JhcFwiO1xuaW1wb3J0IGJkRXZlbnRzIGZyb20gXCIuLi9tb2R1bGVzL2JkRXZlbnRzXCI7XG5pbXBvcnQgRW11bGF0ZWRUb29sdGlwIGZyb20gXCIuL3Rvb2x0aXBcIjtcblxuY29uc3QgVG9vbHRpcCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTtcblxuY29uc3QgUmVhY3QgPSBCRFYyLnJlYWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJkTGlzdCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XG4gICAgICAgIHRoaXMuaXNQbHVnaW5zID0gdGhpcy5wcm9wcy50eXBlID09IFwicGx1Z2luc1wiO1xuICAgICAgICB0aGlzLmNvb2tpZSA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luQ29va2llIDogdGhlbWVDb29raWU7XG4gICAgICAgIHRoaXMubWFuYWdlciA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luTW9kdWxlIDogdGhlbWVNb2R1bGU7XG5cbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmV2ZXJzZSA9IHRoaXMucmV2ZXJzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5vbkFkZG9uQ2hhbmdlcyA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gdGhpcy5vbkFkZG9uQ2hhbmdlcy5iaW5kKHRoaXMpXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKXtcbiAgICAgICAgY29uc3QgdHlwZSA9ICh0aGlzLmlzUGx1Z2lucyA/IFwicGx1Z2luXCIgOiBcInRoZW1lXCIpICsgXCItXCJcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX1yZWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgY29uc3QgdHlwZSA9ICh0aGlzLmlzUGx1Z2lucyA/IFwicGx1Z2luXCIgOiBcInRoZW1lXCIpICsgXCItXCJcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9bG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9dW5sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1yZWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXG4gICAgfVxuXG4gICAgb3BlbkZvbGRlcigpIHtcbiAgICAgICAgY29uc3Qgc2hlbGwgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGw7XG4gICAgICAgIGNvbnN0IG9wZW4gPSBzaGVsbC5vcGVuUGF0aCB8fCBzaGVsbC5vcGVuSXRlbTtcbiAgICAgICAgb3Blbih0aGlzLmlzUGx1Z2lucyA/IENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIpO1xuICAgIH1cblxuICAgIGVkaXQobmFtZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhuYW1lKTtcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVkaXQobmFtZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlKG5hbWUpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkRGVsZXRlID0gYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlKG5hbWUpO1xuICAgICAgICBpZiAoIXNob3VsZERlbGV0ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLm1hbmFnZXIuZGVsZXRlKG5hbWUpO1xuICAgIH1cblxuICAgIGNvbmZpcm1EZWxldGUobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBCZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJBcmUgWW91IFN1cmU/XCIsIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7bmFtZX0/YCwge1xuICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXG4gICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHtyZXNvbHZlKGZhbHNlKTt9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IHNvcnRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge2xhYmVsOiBcIk5hbWVcIiwgdmFsdWU6IFwibmFtZVwifSxcbiAgICAgICAgICAgIHtsYWJlbDogXCJBdXRob3JcIiwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxuICAgICAgICAgICAge2xhYmVsOiBcIlZlcnNpb25cIiwgdmFsdWU6IFwidmVyc2lvblwifSxcbiAgICAgICAgICAgIHtsYWJlbDogXCJSZWNlbnRseSBBZGRlZFwiLCB2YWx1ZTogXCJhZGRlZFwifSxcbiAgICAgICAgICAgIHtsYWJlbDogXCJMYXN0IE1vZGlmaWVkXCIsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9LFxuICAgICAgICAgICAge2xhYmVsOiBcIkZpbGUgU2l6ZVwiLCB2YWx1ZTogXCJzaXplXCJ9LFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldCBkaXJlY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge2xhYmVsOiBcIkFzY2VuZGluZ1wiLCB2YWx1ZTogdHJ1ZX0sXG4gICAgICAgICAgICB7bGFiZWw6IFwiRGVzY2VuZGluZ1wiLCB2YWx1ZTogZmFsc2V9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHthc2NlbmRpbmc6IHZhbHVlfSk7XG4gICAgfVxuXG4gICAgc29ydCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xuICAgIH1cblxuICAgIHNlYXJjaChldmVudCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcbiAgICB9XG5cbiAgICBnZXRQcm9wcyhhZGRvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiB0aGlzLmdldE5hbWUoYWRkb24pLFxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jb29raWVbdGhpcy5nZXROYW1lKGFkZG9uKV0sXG4gICAgICAgICAgICB0b2dnbGU6IHRoaXMubWFuYWdlci50b2dnbGUuYmluZCh0aGlzLm1hbmFnZXIpLFxuICAgICAgICAgICAgZWRpdDogc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTdcIl0gPyB0aGlzLmVkaXQuYmluZCh0aGlzKSA6IG51bGwsXG4gICAgICAgICAgICByZW1vdmU6IHRoaXMuZGVsZXRlLmJpbmQodGhpcyksXG4gICAgICAgICAgICBhZGRvbjogYWRkb24sXG4gICAgICAgICAgICBoYXNoOiBhZGRvbi5oYXNoXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0IGxpc3QoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcbiAgICB9XG5cbiAgICBnZXRBZGRvbnMoKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZEFkZG9ucyA9IHRoaXMubGlzdC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnN0YXRlLnNvcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN0YXRlLnNvcnQuc2xpY2UoMSk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGEucGx1Z2luICYmIGEucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGEucGx1Z2luW2BnZXQke2NhcH1gXSgpKSA6IHRoaXMuZ2V0U3RyaW5nKGFbdGhpcy5zdGF0ZS5zb3J0XSk7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBiLnBsdWdpbiAmJiBiLnBsdWdpbltgZ2V0JHtjYXB9YF0gPyB0aGlzLmdldFN0cmluZyhiLnBsdWdpbltgZ2V0JHtjYXB9YF0oKSkgIDogdGhpcy5nZXRTdHJpbmcoYlt0aGlzLnN0YXRlLnNvcnRdKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YoZmlyc3QpID09IFwic3RyaW5nXCIpIHJldHVybiBmaXJzdC50b0xvY2FsZUxvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoc2Vjb25kLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKGZpcnN0ID4gc2Vjb25kKSByZXR1cm4gMTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPiBmaXJzdCkgcmV0dXJuIC0xO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYXNjZW5kaW5nKSBzb3J0ZWRBZGRvbnMucmV2ZXJzZSgpO1xuICAgICAgICBjb25zdCByZW5kZXJlZCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHNvcnRlZEFkZG9ucy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgY29uc3QgYWRkb24gPSBzb3J0ZWRBZGRvbnNbYV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5xdWVyeSkge1xuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGFkZG9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldEF1dGhvcihhZGRvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldERlc2NyaXB0aW9uKGFkZG9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRWZXJzaW9uKGFkZG9uKTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkgbWF0Y2hlcyA9IG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhdXRob3IudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGRlc2NyaXB0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnNpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IHZlcnNpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldFByb3BzKGFkZG9uKTtcbiAgICAgICAgICAgIHJlbmRlcmVkLnB1c2goPEVycm9yQm91bmRhcnk+PEFkZG9uQ2FyZCB7Li4ucHJvcHN9IHJlbG9hZD17IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHRoaXMubWFuYWdlci5yZWxvYWQuYmluZCh0aGlzLm1hbmFnZXIpfSAvPjwvRXJyb3JCb3VuZGFyeT4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJlZDtcbiAgICB9XG5cbiAgICBnZXROYW1lKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXROYW1lKCkgOiBhZGRvbi5uYW1lKTt9XG4gICAgZ2V0QXV0aG9yKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IGFkZG9uLmF1dGhvcik7fVxuICAgIGdldERlc2NyaXB0aW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogYWRkb24uZGVzY3JpcHRpb24pO31cbiAgICBnZXRWZXJzaW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRWZXJzaW9uKCkgOiBhZGRvbi52ZXJzaW9uKTt9XG5cbiAgICByZW5kZXJDaGVja1VwZGF0ZXMoKXtcbiAgICAgICAgaWYoIXdpbmRvdy5aZXJlc1BsdWdpbkxpYnJhcnkpcmV0dXJuIG51bGxcbiAgICAgICAgaWYoIXdpbmRvdy5QbHVnaW5VcGRhdGVzKXJldHVybiBudWxsXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuUGx1Z2luVXBkYXRlcy5jaGVja0FsbCAhPT0gXCJmdW5jdGlvblwiKXJldHVybiBudWxsXG4gICAgICAgIGlmKCF0aGlzLmlzUGx1Z2lucylyZXR1cm4gbnVsbFxuXG4gICAgICAgIGxldCB0b29sdGlwSXNTaG93aW5nID0gZmFsc2VcbiAgICAgICAgbGV0IHRvb2x0aXBcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCB0ZXh0PVwiQ2hlY2tzIGZvciB1cGRhdGVzIG9mIHBsdWdpbnMgdGhhdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gUmlnaHQtY2xpY2sgZm9yIGEgbGlzdC5cIj5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luTGVmdDogXCIxMHB4XCJ9fSBvbk1vdXNlTGVhdmU9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcElzU2hvd2luZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAuaGlkZSgpXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIHJlZj1cImNoZWNrVXBkYXRlQnV0dG9uXCIgY29sb3I9XCJicmFuZFwiIGxvb2s9XCJmaWxsZWRcIiBzaXplPVwibWluXCIgaG92ZXJDb2xvcj1cImRlZmF1bHRcIiBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIlBsdWdpbiB1cGRhdGUgY2hlY2sgaW4gcHJvZ3Jlc3MuXCIsIHt0eXBlOiBcImluZm9cIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuUGx1Z2luVXBkYXRlcy5jaGVja0FsbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBjb21wbGV0ZS5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBjaGVja2luZyB1cGRhdGUuXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBjaGVja2luZyB1cGRhdGUuXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX0gd3JhcHBlcj17ZmFsc2V9IGRpc2FibGVkPXtmYWxzZX0gb25SaWdodENsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLnJlZnMuY2hlY2tVcGRhdGVCdXR0b24pcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LlBsdWdpblVwZGF0ZXMgfHwgIXdpbmRvdy5QbHVnaW5VcGRhdGVzLnBsdWdpbnMpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYodG9vbHRpcElzU2hvd2luZylyZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9IG5ldyBFbXVsYXRlZFRvb2x0aXAodGhpcy5yZWZzLmNoZWNrVXBkYXRlQnV0dG9uLnJlZnMub3JpZ2luYWwucmVmcy5idXR0b24sIE9iamVjdC52YWx1ZXMod2luZG93LlBsdWdpblVwZGF0ZXMucGx1Z2lucykubWFwKHAgPT4gcC5uYW1lKS5qb2luKFwiLCBcIiksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZGU6IFwiYm90dG9tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2hFdmVudHM6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAuc2hvdygpXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBJc1Nob3dpbmcgPSB0cnVlXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBVcGRhdGVzXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9Ub29sdGlwV3JhcD5cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hJY29uID0gPFRvb2x0aXAgY29sb3I9XCJibGFja1wiIHBvc2l0aW9uPVwidG9wXCIgdGV4dD1cIlJlbG9hZCBMaXN0XCI+XG4gICAgICAgICAgICB7KHByb3BzKSA9PiBcbiAgICAgICAgICAgIDxSZWxvYWRJY29uIHsuLi5wcm9wc30gY2xhc3NOYW1lPVwiYmQtaWNvbiBiZC1yZWxvYWQgYmQtcmVsb2FkLWhlYWRlclwiIHNpemU9XCIxOHB4XCIgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGx1Z2lucykgcGx1Z2luTW9kdWxlLnVwZGF0ZVBsdWdpbkxpc3QoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHRoZW1lTW9kdWxlLnVwZGF0ZVRoZW1lTGlzdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIH19IC8+XG4gICAgICAgICAgICB9PC9Ub29sdGlwPjtcbiAgICAgICAgY29uc3QgYWRkb25DYXJkcyA9IHRoaXMuZ2V0QWRkb25zKCk7XG5cbiAgICAgICAgcmV0dXJuIDxDb250ZW50Q29sdW1uIHRpdGxlPXtgJHt0aGlzLnByb3BzLnR5cGUudG9VcHBlckNhc2UoKX3igJQke2FkZG9uQ2FyZHMubGVuZ3RofWB9PlxuICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGtleT1cImZvbGRlci1idXR0b25cIiBjb2xvcj1cImJyYW5kXCIgXG4gICAgICAgICAgICAgICAgbG9vaz1cImZpbGxlZFwiIHNpemU9XCJtaW5cIiBob3ZlckNvbG9yPVwiZGVmYXVsdFwiIG9uQ2xpY2s9e3RoaXMub3BlbkZvbGRlci5iaW5kKHRoaXMpfSB3cmFwcGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIlxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIE9wZW4ge3RoaXMuaXNQbHVnaW5zID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIn0gRm9sZGVyXG4gICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyQ2hlY2tVcGRhdGVzKCl9XG4gICAgICAgICAgICB7IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHJlZnJlc2hJY29ufVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9scyBiZC1hZGRvbi1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgIDxTZWFyY2ggb25DaGFuZ2U9e3RoaXMuc2VhcmNofSBwbGFjZWhvbGRlcj17YFNlYXJjaCAke3RoaXMucHJvcHMudHlwZX0uLi5gfSAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tZHJvcGRvd25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPlNvcnQgYnk6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLnNvcnRPcHRpb25zfSBvbkNoYW5nZT17dGhpcy5zb3J0fSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPk9yZGVyOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkYS1zbGlzdCBiZC1hZGRvbi1saXN0XCI+e2FkZG9uQ2FyZHN9PC9kaXY+XG4gICAgICAgIDwvQ29udGVudENvbHVtbj5cbiAgICB9XG59XG5cbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ2FyZExpc3QucHJvdG90eXBlLnJlbmRlcjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYXJkTGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxufSk7IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJETG9nbyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHtoZWlnaHQ6IFwiMTAwJVwiLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nbyBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLCBzdHlsZToge2ZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLCBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJ9LCB2aWV3Qm94OiBcIjAgMCAyMDAwIDIwMDBcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcIm1ldGFkYXRhXCIsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzFcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjIwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MlwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTVcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgyNTUsMjU1LDI1NSwwLjE1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3czXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3czKVwifSwgZDogXCJNMTE5NS40NCsxMzUuNDQyTDExOTUuNDQrMTM1LjQ0Mkw5OTcuNisxMzYuNDQyQzEwMjQuMisxNDkuNzQyKzExNzAuMzQrMTYzLjU0MisxMTkzLjY0KzE3OS43NDJDMTI2NC4zNCsyMjguODQyKzEzMTkuNzQrMjkxLjI0MisxMzU4LjI0KzM2NS4wNDJDMTM5OC4xNCs0NDEuNjQyKzE0MTkuNzQrNTMwLjY0MisxNDIyLjU0KzYyOS42NDJMMTQyMi41NCs2MzAuODQyTDE0MjIuNTQrNjMyLjA0MkMxNDIyLjU0Kzc3My4xNDIrMTQyMi41NCsxMjI4LjE0KzE0MjIuNTQrMTM2OS4xNEwxNDIyLjU0KzEzNzAuMzRMMTQyMi41NCsxMzcxLjU0QzE0MTkuODQrMTQ3MC41NCsxMzk4LjI0KzE1NTkuNTQrMTM1OC4yNCsxNjM2LjE0QzEzMTkuNzQrMTcwOS45NCsxMjY0LjQ0KzE3NzIuMzQrMTE5My42NCsxODIxLjQ0QzExNzEuMDQrMTgzNy4xNCsxMDI1LjcrMTg1MC41NCsxMDAwKzE4NjMuNTRMMTE5My41NCsxODY0LjU0QzE1MzkuNzQrMTg2Ni40NCsxODY0LjU0KzE2OTMuMzQrMTg2NC41NCsxMjk2LjY0TDE4NjQuNTQrNzE2Ljk0MkMxODY2LjQ0KzMxMi40NDIrMTU0MS42NCsxMzUuNDQyKzExOTUuNDQrMTM1LjQ0MlpcIiwgZmlsbDogXCIjMTcxNzE3XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzIpXCJ9LCBkOiBcIk0xNjk1LjU0KzYzMS40NDJDMTY4NS44NCsyNzguMDQyKzE0MDkuMzQrMTM1LjQ0MisxMDUyLjk0KzEzNS40NDJMMzYxLjc0KzEzNi40NDJMODAzLjc0KzQ5MC40NDJMMTA2MC43NCs0OTAuNDQyQzEzMzUuMjQrNDkwLjQ0MisxMzM1LjI0KzgzNS4zNDIrMTA2MC43NCs4MzUuMzQyTDEwNjAuNzQrMTE2NC44NEMxMTUwLjIyKzExNjQuODQrMTIxMC41MysxMjAxLjQ4KzEyNDEuNjgrMTI1MC44N0MxMzA2LjA3KzEzNTMrMTI0NS43NisxNTA5LjY0KzEwNjAuNzQrMTUwOS42NEwzNjEuNzQrMTg2My41NEwxMDUyLjk0KzE4NjQuNTRDMTQwOS4yNCsxODY0LjU0KzE2ODUuNzQrMTcyMS45NCsxNjk1LjU0KzEzNjguNTRDMTY5NS41NCsxMjA1Ljk0KzE2NTEuMDQrMTA4NC40NCsxNTcyLjY0Kzk5OS45NDJDMTY1MS4wNCs5MTUuNTQyKzE2OTUuNTQrNzk0LjA0MisxNjk1LjU0KzYzMS40NDJaXCIsIGZpbGw6IFwiIzNFODJFNVwiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cxKVwifSwgZDogXCJNMTQ2OS4yNSs2MzEuNDQyQzE0NTkuNTUrMjc4LjA0MisxMTgzLjA1KzEzNS40NDIrODI2LjY1KzEzNS40NDJMMTM1LjQ1KzEzNS40NDJMMTM1LjQ1KzEwMDRDMTM1LjQ1KzEwMDQrMTM1LjQyNysxMjU1LjIxKzM1NS42MjYrMTI1NS4yMUM1NzUuODI1KzEyNTUuMjErNTc1Ljg0OCsxMDA0KzU3NS44NDgrMTAwNEw1NzcuNDUrNDkwLjQ0Mkw4MzQuNDUrNDkwLjQ0MkMxMTA4Ljk1KzQ5MC40NDIrMTEwOC45NSs4MzUuMzQyKzgzNC40NSs4MzUuMzQyTDY2NC42NSs4MzUuMzQyTDY2NC42NSsxMTY0Ljg0TDgzNC40NSsxMTY0Ljg0QzkyMy45MzIrMTE2NC44NCs5ODQuMjQ0KzEyMDEuNDgrMTAxNS4zOSsxMjUwLjg3QzEwNzkuNzgrMTM1MysxMDE5LjQ3KzE1MDkuNjQrODM0LjQ1KzE1MDkuNjRMMTM1LjQ1KzE1MDkuNjRMMTM1LjQ1KzE4NjQuNTRMODI2LjY1KzE4NjQuNTRDMTE4Mi45NSsxODY0LjU0KzE0NTkuNDUrMTcyMS45NCsxNDY5LjI1KzEzNjguNTRDMTQ2OS4yNSsxMjA1Ljk0KzE0MjQuNzUrMTA4NC40NCsxMzQ2LjM1Kzk5OS45NDJDMTQyNC43NSs5MTUuNTQyKzE0NjkuMjUrNzk0LjA0MisxNDY5LjI1KzYzMS40NDJaXCIsIGZpbGw6IFwiI0ZGRkZGRlwiLCBvcGFjaXR5OiBcIjFcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19DaGVja2JveCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJsaVwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveCBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94LCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1pbm5lciBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveElubmVyKVswXS5jaGVja2JveElubmVyfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94RWxlbWVudCwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwiY2hlY2tib3hcIn0pLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsICF0aGlzLnN0YXRlLmNoZWNrZWQpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgQXJyb3cgZnJvbSBcIi4uL2ljb25zL2Rvd25hcnJvd1wiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge29wZW46IGZhbHNlLCB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSB8fCB0aGlzLnByb3BzLm9wdGlvbnNbMF0udmFsdWV9O1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd24gPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd01lbnUgPSB0aGlzLnNob3dNZW51LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oaWRlTWVudSA9IHRoaXMuaGlkZU1lbnUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TWVudShldmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogdHJ1ZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVNZW51KCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IGZhbHNlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZX0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSB7cmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG8gPT4gby52YWx1ZSA9PSB0aGlzLnN0YXRlLnZhbHVlKTt9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLm9wdGlvbnMubWFwKG9wdCA9PiBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0LW9wdGlvbiR7c2VsZWN0ZWQudmFsdWUgPT0gb3B0LnZhbHVlID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCJ9YH0gb25DbGljaz17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMsIG9wdC52YWx1ZSl9PntvcHQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMucHJvcHMuc3R5bGUgPT0gXCJ0cmFuc3BhcmVudFwiID8gXCIgYmQtc2VsZWN0LXRyYW5zcGFyZW50XCIgOiBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuc3RhdGUub3BlbiA/IFwiIG1lbnUtb3BlblwiIDogXCJcIjtcclxuICAgICAgICByZXR1cm4gIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwXCI+XHJcbi8vIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPnt0aGlzLnByb3BzLmxhYmVsfTwvbGFiZWw+XHJcbi8vIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4vLyAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtY29udHJvbHNcIj5cclxuLy8gICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4vLyAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4vLyAgICAgPC9kaXY+XHJcbi8vIDwvZGl2PlxyXG4vLyB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuLy8gPC9kaXY+OyIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwiLi4vaWNvbnMvc2VhcmNoXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IFtcImJkLXNlYXJjaC13cmFwcGVyXCJdXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuZm9jdXNlZCljbGFzc05hbWUucHVzaChcImZvY3VzZWRcIilcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWUuam9pbihcIiBcIil9PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9IG9uS2V5RG93bj17dGhpcy5wcm9wcy5vbktleURvd259IHR5cGU9XCJ0ZXh0XCIgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJkLXNlYXJjaFwiIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfSBtYXhMZW5ndGg9XCI1MFwiIFxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtmb2N1c2VkOiB0cnVlfSlcbiAgICAgICAgICAgICAgICAgICAgfX0gb25CbHVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtmb2N1c2VkOiBmYWxzZX0pXG4gICAgICAgICAgICAgICAgICAgIH19Lz5cbiAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEljb24gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7Y2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkfTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zd2l0Y2ggPSA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Td2l0Y2ggb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLmNoZWNrZWR9IC8+XG4gICAgfVxuXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6IHZhbHVlfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zd2l0Y2hcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSA9IHRoaXMuZW1pdENoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5UZXh0SW5wdXQub3JpZ2luYWwgcmVmPXtjb25zb2xlLmxvZ30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfSBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn0gb25CbHVyPXt0aGlzLmVtaXRDaGFuZ2V9Lz5cclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHZhbHVlLCB0aGlzLnByb3BzKVxyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZW1pdENoYW5nZSgpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTaG91bGQgZW1pdCBjaGFuZ2VzLmApXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NvbnRlbnRDb2x1bW4gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgZGlzcGxheU5hbWUoKSB7cmV0dXJuIFwiQ29udGVudENvbHVtblwiO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9sZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5wcm9wcy50aXRsZSA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSwgdGhpcy5wcm9wcy50aXRsZSkgOiBudWxsXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uICsgXCIgXCIrY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCIsIHN0eWxlOiB7cGFkZGluZzogXCI2MHB4IDQwcHggMHB4XCJ9fSxcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIlxuXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcbmltcG9ydCBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZnJvbSBcIi4vY3NzRWRpdG9yRGV0YWNoZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0Nzc0VkaXRvciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5wcm9wcy5saW5lcyA9IDA7XG4gICAgICAgIHNlbGYuc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgIHNlbGYuYXR0YWNoID0gc2VsZi5hdHRhY2guYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi5kZXRhY2hlZEVkaXRvciA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfQ3NzRWRpdG9yRGV0YWNoZWQsIHthdHRhY2g6IHNlbGYuYXR0YWNofSk7XG4gICAgICAgIHNlbGYub25DbGljayA9IHNlbGYub25DbGljay5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLmRldGFjaCA9IHNlbGYuZGV0YWNoLmJpbmQoc2VsZik7XG4gICAgfVxuXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGV0YWNoZWQ6IHRoaXMucHJvcHMuZGV0YWNoZWQgfHwgQkRWMi5lZGl0b3JEZXRhY2hlZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvZGlzY29yZFwiKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSgxNCk7XG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNzcygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuZGV0YWNoZWQgJiYgIXNlbGYuc3RhdGUuZGV0YWNoZWQpIHtcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShzZWxmLmRldGFjaGVkUm9vdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb2RlTWlycm9yKCkge1xuICAgIH1cblxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcbiAgICAgICAgICAgIHRoZW1lOiBcIm1hdGVyaWFsXCIsXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBjc3MoKSB7XG4gICAgICAgIGNvbnN0IF9jY3NzID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpO1xuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xuICAgICAgICAgICAgY2NzcyA9IEJ1ZmZlci5mcm9tKF9jY3NzLCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNjc3M7XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcbiAgICAgICAgaWYgKGxpbmVDb3VudCA9PSB0aGlzLnByb3BzLmxpbmVzKSByZXR1cm47XG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGNvbnN0IHtkZXRhY2hlZH0gPSBzZWxmLnN0YXRlO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge2lkOiBcImVkaXRvci1kZXRhY2hlZFwifSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJoM1wiLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIkVkaXRvciBEZXRhY2hlZFwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dGFjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgIFwiQXR0YWNoXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgIWRldGFjaGVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJ9KSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIsIGNsYXNzTmFtZTogXCJlZGl0b3JcIiwgcmVmOiBcImVkaXRvclwifSwgc2VsZi5jc3MpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udHJvbHMtYnV0dG9uXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjNweCAwIDAgM3B4XCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcGRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJkZXRhY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGV0YWNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Zm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjVweFwifX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gZGV0YWNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJoZWxwLXRleHRcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJQcmVzcyBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcImN0cmxcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImlubGluZVwifSwgXCIsXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJ3Mgc2V0dGluZ3MuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgXVxuICAgIH1cblxuICAgIG9uQ2xpY2soYXJnKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzd2l0Y2ggKGFyZykge1xuICAgICAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2F2ZVwiOlxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImRldGFjaFwiOlxuICAgICAgICAgICAgICAgIHNlbGYuZGV0YWNoKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgICAgICBjYXNlIFwibGl2ZS11cGRhdGVcIjpcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSA9IGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVDc3MoKSB7XG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgc2F2ZUNzcygpIHtcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIEJ1ZmZlci5mcm9tKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSwgXCJ1dGYtOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSk7XG4gICAgfVxuXG4gICAgZGV0YWNoKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBkZXRhY2hlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZHJvb3QgPSBzZWxmLmRldGFjaGVkUm9vdDtcbiAgICAgICAgaWYgKCFkcm9vdCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gSU5KRUNUIFJPT1Q6IC5hcHBcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc2VsZi5kZXRhY2hlZEVkaXRvciwgZHJvb3QpO1xuICAgIH1cblxuICAgIGdldCBkZXRhY2hlZFJvb3QoKSB7XG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xuICAgICAgICBpZiAoIV9yb290KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0RGV0YWNoZWRSb290KCkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcm9vdDtcbiAgICB9XG5cbiAgICBpbmplY3REZXRhY2hlZFJvb3QoKSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcCkpO1xuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhdHRhY2goKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIlxuXG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLnNhdmVDc3MgPSBzZWxmLnNhdmVDc3MuYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi5vbkNoYW5nZSA9IHNlbGYub25DaGFuZ2UuYmluZChzZWxmKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmQtZGV0YWNoZWQtZWRpdG9yXCIpO1xuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBhY2UuZWRpdChcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIik7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL2Rpc2NvcmRcIik7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcbiAgICAgICAgaWYgKGxpbmVDb3VudCA9PSB0aGlzLnByb3BzLmxpbmVzKSByZXR1cm47XG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcbiAgICB9XG5cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcbiAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXQgY3NzKCkge1xuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xuICAgICAgICBpZiAoX2Njc3MgJiYgX2Njc3MgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGNjc3MgPSBCdWZmZXIuZnJvbShfY2NzcywgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjY3NzO1xuICAgIH1cblxuICAgIGdldCByb290KCkge1xuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiKTtcbiAgICAgICAgaWYgKCFfcm9vdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yb290O1xuICAgIH1cblxuICAgIGluamVjdFJvb3QoKSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcCkpO1xuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmQtZGV0YWNoZWQtY3NzLWVkaXRvclwiLCBpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWVkaXRvclwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtaW5uZXJwYW5lXCJ9LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtZ3JvdXBcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiBzZWxmLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwidXBkYXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzJkMmQyZFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzJkMmQyZFwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNhdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImF0dGFjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBhdHRhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdID0gY2hlY2tlZDtcbiAgICAgICAgICAgICAgICBTZXR0aW5ncy5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2xpY2soaWQpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhdHRhY2hcIjpcbiAgICAgICAgICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2VkaXRvci1kZXRhY2hlZFwiKSkgc2VsZi5wcm9wcy5hdHRhY2goKTtcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5yb290KTtcbiAgICAgICAgICAgICAgICBzZWxmLnJvb3QucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDc3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XG4gICAgICAgICAgICAgICAgc2VsZi5zYXZlQ3NzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVDc3MoKSB7XG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgc2F2ZUNzcygpIHtcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIEJ1ZmZlci5mcm9tKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSwgXCJ1dGYtOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSk7XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCREVycm9yQm91bmRhcnkgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgdGhpcy5zdGF0ZSA9IHtoYXNFcnJvcjogZmFsc2V9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZENhdGNoKCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtoYXNFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRXJyb3IpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJyZWFjdC1lcnJvclwifSwgXCJDb21wb25lbnQgRXJyb3JcIik7ICBcclxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47IFxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+PHBhdGggZD1cIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCIvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3duQXJyb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMTIgOS4yOUwxMiAxMy4xN2wzLjg4LTMuODhjLjM5LS4zOSAxLjAyLS4zOSAxLjQxIDAgLjM5LjM5LjM5IDEuMDIgMCAxLjQxbC00LjU5IDQuNTljLS4zOS4zOS0xLjAyLjM5LTEuNDEgMEw2LjcgMTAuN2MtLjM5LS4zOS0uMzktMS4wMiAwLTEuNDEuMzktLjM4IDEuMDMtLjM5IDEuNDIgMHpcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+O1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIjtcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6XCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgICAgICAgIDwvc3ZnPjtcbiAgICB9XG59Iiwiey8qIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwid2hpdGVcIiB3aWR0aD1cIjE4cHhcIiBoZWlnaHQ9XCIxOHB4XCI+XG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cbiAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XG48L3N2Zz4gKi99XG5cbmltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGlzdG9yeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMThweFwiO1xuICAgICAgICByZXR1cm4gPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XG4gICAgICAgIDwvc3ZnPjtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+O1xuICAgIH1cbn0iLCJsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luVG9wNjApWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJnaW5Ub3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZSltYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Ub3A2MH0+PC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IFYyQ19TZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcbmltcG9ydCBWMkNfU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xuaW1wb3J0IHsgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEMgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4uL21vZHVsZXMvQ3VzdG9tUmljaFByZXNlbmNlXCJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmxldCBWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXNcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QcmVzZW5jZVNldHRpbmdzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGRhdGE6IGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikgfHwgZGVmYXVsdFJQQyxcbiAgICAgICAgICAgIGFzc2V0czogW11cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJldmlldyA9IG51bGxcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMgPSBuZXcgU2V0KClcbiAgICB9XG5cbiAgICB1cGRhdGVXaGVuRmV0Y2hlZChjb21wKXtcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuYWRkKGNvbXApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtJbnB1dFRleHR9IHNldHRpbmcgXG4gICAgICovXG4gICAgb25DaGFuZ2Uoc2V0dGluZywgdmFsdWUpe1xuICAgICAgICBsZXQgZGVmYXVsdFNldHRpbmcgPSBSUENQcm9wcy5maW5kKGUgPT4gZS5pZCA9PT0gc2V0dGluZy5wcm9wcy5pZClcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIHRoaXMuc3RhdGUuZGF0YSwge1xuICAgICAgICAgICAgICAgIFtkZWZhdWx0U2V0dGluZy5pZF06ICEhdmFsdWUgPyB2YWx1ZSA6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLnN0YXRlLmFzc2V0c1xuICAgICAgICB9KVxuICAgICAgICBpZihzZXR0aW5nLnByb3BzLmlkID09PSBcImFwcGxpY2F0aW9uX2lkXCIpe1xuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcbiAgICAgICAgdGhpcy5wcmV2aWV3LmZvcmNlVXBkYXRlKClcbiAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLnNldChzZXR0aW5nc1JQQylcbiAgICB9XG5cbiAgICBmZXRjaEFzc2V0cygpe1xuICAgICAgICBpZih0aGlzLmlzZmV0Y2hpbmcgPT09IHRydWUpe1xuICAgICAgICAgICAgbGV0IGFwcCA9IHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkICE9PSBhcHApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZighdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gdHJ1ZVxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZmV0Y2hBc3NldHModGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKVxuICAgICAgICAudGhlbihhc3NldHMgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgICAgICAgICBhc3NldHM6IE9iamVjdC5rZXlzKGFzc2V0cykubWFwKGsgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzZXQgPSBhc3NldHNba11cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhc3NldC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFzc2V0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBhc3NldC50eXBlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHVwZGF0ZVByZXZpZXcoZGF0YSl7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZGF0YVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIHJldHVybiBWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMgfHwgKFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzR3JvdXAgdGl0bGU9XCJSaWNoUHJlc2VuY2UgU2V0dGluZ3NcIiBzZXR0aW5ncz17dGhpcy5wcm9wcy5zZXR0aW5nc30gb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9Lz4sXG4gICAgICAgICAgICA8TWFyZ2luVG9wIC8+LFxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJSaWNoUHJlc2VuY2VcIi8+LFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICB7LyoqIG9wdGlvbnMgKi99XG4gICAgICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbXBvbmVudHN9XG4gICAgICAgICAgICA8L2Rpdj4sXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz5cbiAgICAgICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlByZXZpZXdcIi8+XG4gICAgICAgICAgICAgICAgey8qKiBwcmV2aWV3ICovfVxuICAgICAgICAgICAgICAgIDxScGNQcmV2aWV3IHNldHRpbmdzPXt0aGlzfS8+XG4gICAgICAgICAgICA8L2Rpdj4sXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj4sXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9e3dpbmRvdy5vaGdvZG9oZnVja30+XG4gICAgICAgICAgICAgICAgT2ggZ29kIE9oIGZ1Y2tcbiAgICAgICAgICAgIDwvYnV0dG9uPixcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUxrWWE3cnBzX2c0XCIpXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICBTZWUgPyBJIHB1bGxlZCBhIGxpdGxlIHNuZWFreSBvbiB5YVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBnZXQgb3B0aW9uc0NvbXBvbmVudHMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnNDb21wb25lbnRzIHx8ICh0aGlzLl9vcHRpb25zQ29tcG9uZW50cyA9IFJQQ1Byb3BzLm1hcChlID0+IHtcbiAgICAgICAgICAgIGlmKGUudHlwZSA9PT0gXCJ0ZXh0XCIpe1xuICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRUZXh0IHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfS8+XG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwibnVtYmVyXCIpe1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IFs8SW5wdXROdW1iZXIgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5dLypcbiAgICAgICAgICAgICAgICBpZihlLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIil7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQoPERpc2NvcmRCdXR0b24gdGl0bGU9XCJDb3B5IEN1cnJlbnQgVGltZXN0YW1wXCIgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXG4gICAgICAgICAgICAgICAgICAgIH19IC8+KVxuICAgICAgICAgICAgICAgIH0qL1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVxuICAgICAgICAgICAgfWVsc2UgaWYoZS50eXBlID09PSBcImNob2ljZVwiKXtcbiAgICAgICAgICAgICAgICBpZihbXCJhc3NldHMuc21hbGxcIiwgXCJhc3NldHMubGFyZ2VcIl0uaW5jbHVkZXMoZS5pZCkpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0Q2hvaWNlIHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfSBjaG9pY2VzPXtbe3ZhbHVlOiBcIm5vbmVcIiwgbGFiZWw6IFwiTm8gYXNzZXRzXCJ9XS5jb25jYXQodGhpcy5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpfS8+XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlVua25vd24gY2hvaWNlLlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICB9XG59XG5jb25zdCBSUENQcm9wcyA9IFtcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIkFwcGxpY2F0aW9uIElEXCIsXG4gICAgICAgIGlkOiBcImFwcGxpY2F0aW9uX2lkXCIsXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIk5hbWVcIixcbiAgICAgICAgaWQ6IFwibmFtZVwiLFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiRGV0YWlsc1wiLFxuICAgICAgICBpZDogXCJkZXRhaWxzXCIsXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJCcm93c2luZyBEaXNjb3JkXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiU3RhdGVcIixcbiAgICAgICAgaWQ6IFwic3RhdGVcIixcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkxpZ2h0Y29yZCBDbGllbnRcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJUaW1lc3RhbXAgU3RhcnRcIixcbiAgICAgICAgaWQ6IFwidGltZXN0YW1wcy5zdGFydFwiLFxuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBnZXQgcGxhY2Vob2xkZXIoKXtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiTGFyZ2VBc3NldFwiLFxuICAgICAgICBpZDogXCJhc3NldHMubGFyZ2VcIixcbiAgICAgICAgdHlwZTogXCJjaG9pY2VcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJTbWFsbEFzc2V0XCIsXG4gICAgICAgIGlkOiBcImFzc2V0cy5zbWFsbFwiLFxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXG4gICAgfSxcbl1cblxubGV0IGlucHV0VGV4dE1vZHVsZXNcbmNsYXNzIElucHV0VGV4dCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIGlmKGlucHV0VGV4dE1vZHVsZXMgJiYgaW5wdXRUZXh0TW9kdWxlc1swXSlyZXR1cm4gaW5wdXRUZXh0TW9kdWxlc1xuICAgICAgICByZXR1cm4gaW5wdXRUZXh0TW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMTYgJiYgZS5zaXplMjApWzBdLFxuICAgICAgICBdXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcylcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlucHV0ID0gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlRleHRJbnB1dCBwbGFjZWhvbGRlcj17c2V0dGluZy5wbGFjZWhvbGRlcn0gbmFtZT17c2V0dGluZy5pZH0gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogdmFsdWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXG5cbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIHJvd01vZHVsZSxcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxuICAgICAgICAgICAgaW5wdXRNb2R1bGUsXG4gICAgICAgICAgICBzaXplTW9kdWxlMixcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cbiAgICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8RGl2aWRlci8+XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59XG5cbmxldCBJbnB1dE51bWJlck1vZHVsZXNcbmNsYXNzIElucHV0TnVtYmVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgZ2V0IG1vZHVsZXMoKXtcbiAgICAgICAgcmV0dXJuIElucHV0TnVtYmVyTW9kdWxlcyB8fCAoSW5wdXROdW1iZXJNb2R1bGVzID0gW1xuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclRyYW5zcGFyZW50KVswXSxcbiAgICAgICAgXSlcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSB0eXBlPVwibnVtYmVyXCIgb25DaGFuZ2U9eyh2YWx1ZSwgbmFtZSwgaW5wdXQpID0+IHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXGRdKy9nLCBcIlwiKVxuICAgICAgICAgICAgaWYodmFsdWUgPT0gdGhpcy5zdGF0ZS5kYXRhKXtcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUpXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXG5cbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIHJvd01vZHVsZSxcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cblxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XG4gICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICB7dGhpcy5pbnB1dH1cbiAgICAgICAgICAgICAgICB7c2V0dGluZy5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIgPyBcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcbiAgICAgICAgICAgICAgICB9fSBjb2xvcj1cImJyYW5kXCI+Q29weSBjdXJyZW50IHRpbWVzdGFtcDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+IDogbnVsbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPERpdmlkZXIvPlxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufVxuXG5sZXQgSW5wdXRDaG9pY2VNb2R1bGVzXG5jbGFzcyBJbnB1dENob2ljZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA/IFwiYXNzZXQtXCIrdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF0gOiBcIm5vbmVcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMubWFuYWdlci51cGRhdGVXaGVuRmV0Y2hlZCh0aGlzKVxuICAgIH1cblxuICAgIG9uQ2hhbmdlKHZhbHVlKXtcbiAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcbiAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSA9PT0gXCJub25lXCIgPyBudWxsIDogdmFsdWUucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSlcbiAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xuICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEgPT09IFwibm9uZVwiID8gbnVsbCA6IHRoaXMuc3RhdGUuZGF0YS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxuICAgIH1cbiAgICBcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gSW5wdXRDaG9pY2VNb2R1bGVzIHx8IChJbnB1dENob2ljZU1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cbiAgICAgICAgXSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcblxuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgcm93TW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcbiAgICAgICAgICAgIGZsZXhNb2R1bGVcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuICAgICAgICBcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuYXNzZXRzLm1hcChlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgb3B0aW9ucy51bnNoaWZ0KHtcbiAgICAgICAgICAgIHZhbHVlOiBcIm5vbmVcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIk5vIGFzc2V0c1wiXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9wdGlvbnM9e29wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IC8+XG4gICAgICAgICAgICAgICAgey8qPFNlbGVjdCB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSBvcHRpb25zPXtvcHRpb25zfS8+Ki99XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxEaXZpZGVyLz5cbiAgICAgICAgPC9kaXY+KVxuICAgIH1cbn1cblxubGV0IERpdmlkZXJNb2R1bGVzID0gW11cbmNsYXNzIERpdmlkZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gRGl2aWRlck1vZHVsZXMmJkRpdmlkZXJNb2R1bGVzWzBdID8gRGl2aWRlck1vZHVsZXMgOiAoRGl2aWRlck1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF1cbiAgICAgICAgXSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIGRpdmlkZXIsXG4gICAgICAgICAgICBkaXZpZGVyRGVmYXVsdFxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2Ake2RpdmlkZXIuZGl2aWRlcn0gJHtkaXZpZGVyRGVmYXVsdC5kaXZpZGVyRGVmYXVsdH1gfT48L2Rpdj5cbiAgICB9XG59XG5cbmNsYXNzIERpc2NvcmRCdXR0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQgcm93TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF1cbiAgICAgICAgbGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxuXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfSBjb2xvcj1cImJyYW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+KVxuICAgIH1cbn1cblxuY2xhc3MgUnBjUHJldmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMgPSB7fSl7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgYWN0aXZlOiBcInByb2ZpbGVcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFicyA9IFtdXG5cbiAgICAgICAgdGhpcy5wcm9wcy5zZXR0aW5ncy5wcmV2aWV3ID0gdGhpc1xuICAgIH1cblxuICAgIGNoYW5nZVRhYih0YWIpe1xuICAgICAgICBsZXQgYW5jaWVudFRhYiA9IHRoaXMuc3RhdGUuYWN0aXZlXG4gICAgICAgIGlmKGFuY2llbnRUYWIgPT09IHRhYi5wcm9wcy5pZClyZXR1cm5cblxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgIGUuc2V0QWN0aXZlKGZhbHNlKVxuICAgICAgICB9KVxuICAgICAgICB0YWIuc2V0QWN0aXZlKHRydWUpXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgYWN0aXZlOiB0YWIucHJvcHMuaWRcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYldyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFibmF2XCIgc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiRnVsbCBQcm9maWxlXCIgaWQ9XCJwcm9maWxlXCIvPlxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJVc2VyIFBvcG91dFwiIGlkPVwicG9wb3V0XCIvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8UHJlc2VuY2VFcnJvckNhdGNoZXIgcHJldmlldz17dGhpcy5wcmV2aWV3fSBzdGF0ZT17dGhpcy5zdGF0ZS5ycGN9IHByb3BzPXt7cHJldmlldzogdGhpc319IGtleT17dGhpcy5zdGF0ZS5hY3RpdmV9IC8+XG4gICAgICAgIDwvZGl2PilcbiAgICB9ICAgXG5cbiAgICBpc0FjdGl2ZSh0YWIpe1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5hY3RpdmUgPT09IHRhYlxuICAgIH1cblxuICAgIGdldCBwcmV2aWV3KCl7XG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlID09PSBcInByb2ZpbGVcIilyZXR1cm4gUHJvZmlsZVxuICAgICAgICByZXR1cm4gUG9wb3V0XG4gICAgfVxufVxuXG5jbGFzcyBUYWIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGFjdGl2ZTogcHJvcHMucHJldmlldy5pc0FjdGl2ZShwcm9wcy5pZClcbiAgICAgICAgfVxuICAgICAgICBwcm9wcy5wcmV2aWV3LnRhYnMucHVzaCh0aGlzKVxuICAgIH1cblxuICAgIHNldEFjdGl2ZShpc0FjdGl2ZSl7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgYWN0aXZlOiAhIWlzQWN0aXZlXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBgbGMtbmF2SXRlbWBcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUpe1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUFjdGl2ZWBcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtSW5hY3RpdmVgXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKT0+e1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5wcmV2aWV3LmNoYW5nZVRhYih0aGlzKVxuICAgICAgICB9fT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufVxuXG5sZXQgZW1wdHlDbGFzc2VzXG5jbGFzcyBQcmVzZW5jZUVycm9yQ2F0Y2hlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29tcG9uZW50RGlkQ2F0Y2goZXJyLCBlcnJJbmZvKXtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyckluZm8pXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZXJyb3I6IHRydWVcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKCF0aGlzLnN0YXRlKXtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoIXRoaXMuc3RhdGUuZXJyb3Ipe1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSBuZXcgdGhpcy5wcm9wcy5wcmV2aWV3KHRoaXMucHJvcHMucHJvcHMpXG4gICAgICAgICAgICAgICAgcHJldmlldy5zZXRTdGF0ZSh0aGlzLnByb3BzLnN0YXRlKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aWV3LnJlbmRlcigpXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcigpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgZW1wdHlDbGFzc2VzID0gZW1wdHlDbGFzc2VzIHx8IEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZW1wdHlTdGF0ZUltYWdlICYmIGUuZW1wdHlTdGF0ZSlcbiAgICAgICAgICAgIGlmKCFlbXB0eUNsYXNzZXMpe1xuICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQuIFBsZWFzZSBjaGVjayB0aGUgY29uc29sZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiBcIjIwcHhcIlxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLCBcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxuICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT17YGxjLXRhYi1ib3gtc2hhZG93ICR7ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGV9YH0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUltYWdlfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiBcIjIwcHhcIlxuICAgICAgICAgICAgICAgICAgICB9fT5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSGVhZGVyfT5BbiBlcnJvciBvY2N1cmVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVTdWJ0ZXh0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgY29uc29sZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuIEpvaW4gb3VyIMKtXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9e2Ake0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QkRWMi5hbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PXswfSBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5qb2luTEMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBzZXJ2ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIMKtIGZvciBoZWxwLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbn1cblxubGV0IHBvcG91dE1vZHVsZXNcbmxldCBVc2VyUG9wb3V0Q29tcG9uZW50XG5sZXQgUG9wb3V0UHJvcHNcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgZ2V0IG1vZHVsZXMoKXtcbiAgICAgICAgcmV0dXJuIHBvcG91dE1vZHVsZXMgfHwgKHBvcG91dE1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlVzZXJQb3BvdXRcIiksXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIGdldENvbXBvbmVudCgpe1xuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgVXNlclBvcG91dCxcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVuZGVyMSA9IFVzZXJQb3BvdXQuZGVmYXVsdCh7XG4gICAgICAgICAgICAgICAgdXNlcklkOiB1c2VyLmlkLCBcbiAgICAgICAgICAgICAgICBndWlsZElkOiBudWxsLCBcbiAgICAgICAgICAgICAgICBjaGFubmVsSWQ6IG51bGwsIFxuICAgICAgICAgICAgICAgIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBVc2VyUG9wb3V0Q29tcG9uZW50ID0gcmVuZGVyMS50eXBlXG4gICAgICAgICAgICBQb3BvdXRQcm9wcyA9IHJlbmRlcjEucHJvcHNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcigpXG4gICAgICAgIH0sIG51bGwpXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKCFVc2VyUG9wb3V0Q29tcG9uZW50KXJldHVybiB0aGlzLmdldENvbXBvbmVudCgpXG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBfVXNlclBvcG91dCxcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxuXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXG4gICAgICAgICAgICBsZXQgZ2FtZSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XG4gICAgICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2FtZVxuICAgICAgICB9KS5jYWxsKHtcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBwb3BvdXQgPSBuZXcgVXNlclBvcG91dENvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQb3BvdXRQcm9wcywge1xuICAgICAgICAgICAgYWN0aXZpdHk6IGFjdGl2aXR5LFxuICAgICAgICAgICAgdXNlcklkOiB1c2VyLmlkXG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcblxuICAgICAgICAvLyByZW1vdmUgdGhlIHN0b3AgcHJvcGFnYXRpb24gc2hpdC5cbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gPGRpdiB7Li4ud2luZG93LkxpZ2h0Y29yZC5BcGkuXy5leGNsdWRlUHJvcGVydGllcyhwb3BvdXQucHJvcHMsIFtcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCJdKX0gLz5cblxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJsYy11c2VyUG9wb3V0IGxjLXRhYi1ib3gtc2hhZG93XCI+XG4gICAgICAgICAgICB7Y29udGFpbmVyfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG59XG5cbmxldCBwcm9maWxlTW9kdWxlc1xubGV0IFVzZXJQcm9maWxlQ29tcG9uZW50XG5sZXQgUHJvZmlsZVByb3BzXG5sZXQgY29ubmVjdGVkUHJvZmlsZVN0b3JlXG5jbGFzcyBQcm9maWxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gcHJvZmlsZU1vZHVsZXMgfHwgKHByb2ZpbGVNb2R1bGVzID0gW1xuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJVc2VyUHJvZmlsZVwiKSxcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpXG4gICAgICAgIF0pXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBVc2VyUHJvZmlsZSxcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxuICAgICAgICBpZighVXNlclByb2ZpbGVDb21wb25lbnQpe1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyMSA9IG5ldyBVc2VyUHJvZmlsZS5kZWZhdWx0KHtcbiAgICAgICAgICAgICAgICB1c2VyOiB1c2VyXG4gICAgICAgICAgICB9KS5yZW5kZXIoKVxuICAgICAgICAgICAgY29ubmVjdGVkUHJvZmlsZVN0b3JlID0gcmVuZGVyMS50eXBlXG4gICAgICAgICAgICBjb25zdCByZW5kZXIyID0gbmV3IHJlbmRlcjEudHlwZShyZW5kZXIxLnByb3BzKS5yZW5kZXIoKVxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMyA9IHJlbmRlcjIudHlwZS5yZW5kZXIocmVuZGVyMi5wcm9wcywgbnVsbClcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjQgPSBuZXcgcmVuZGVyMy50eXBlKHJlbmRlcjMucHJvcHMpLnJlbmRlcigpXG4gICAgICAgICAgICBVc2VyUHJvZmlsZUNvbXBvbmVudCA9IHJlbmRlcjQudHlwZVxuICAgICAgICB9XG4gICAgICAgIGlmKCFVc2VyUHJvZmlsZUNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQcm9maWxlQ29tcG9uZW50IGNvbXBvbmVudC5gKVxuXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXG4gICAgICAgICAgICBsZXQgZ2FtZSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XG4gICAgICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2FtZVxuICAgICAgICB9KS5jYWxsKHtcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcbiAgICAgICAgfSlcblxuICAgICAgICBQcm9maWxlUHJvcHMgPSBuZXcgY29ubmVjdGVkUHJvZmlsZVN0b3JlKHtcbiAgICAgICAgICAgIHVzZXI6IHVzZXIsXG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge31cbiAgICAgICAgfSkucmVuZGVyKCkucHJvcHNcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IG5ldyBVc2VyUHJvZmlsZUNvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQcm9maWxlUHJvcHMsIHtcbiAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0eVxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXG5cbiAgICAgICAgcHJvZmlsZS5wcm9wcy5zdHlsZSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiBcImF1dG9cIlxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiIGxjLXRhYi1ib3gtc2hhZG93XCI+XG4gICAgICAgICAgICB7cHJvZmlsZX1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5nc1RpdGxlXCI7XG5pbXBvcnQgVGFiQmFyU2VwYXJhdG9yIGZyb20gXCIuLi90YWJCYXJTZXBhcmF0b3JcIjtcblxuaW1wb3J0IFNlcnZlckNhcmQgZnJvbSBcIi4vc2VydmVyQ2FyZFwiO1xuaW1wb3J0IHsgdXNlRm9yY2VVcGRhdGUgfSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9ob29rc1wiO1xuXG5sZXQgU2V0dGluZ3NWaWV3XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHVibGljU2VydmVycyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNoYW5nZUNhdGVnb3J5ID0gdGhpcy5jaGFuZ2VDYXRlZ29yeS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2VhcmNoS2V5RG93biA9IHRoaXMuc2VhcmNoS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbiA9IHRoaXMuY2hlY2tDb25uZWN0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuam9pbiA9IHRoaXMuam9pbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbm5lY3QgPSB0aGlzLmNvbm5lY3QuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLkd1aWxkU3RvcmUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0R3VpbGRzXCJdKTtcbiAgICAgICAgdGhpcy5BdmF0YXJEZWZhdWx0cyA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRVc2VyQXZhdGFyVVJMXCIsIFwiREVGQVVMVF9BVkFUQVJTXCJdKTtcbiAgICAgICAgdGhpcy5JbnZpdGVBY3Rpb25zID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7XG4gICAgICAgIHRoaXMuU29ydGVkR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRTb3J0ZWRHdWlsZHNcIl0pO1xuXG4gICAgICAgIHRoaXMuaG9va3MgPSBbXVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xuICAgIH1cblxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNlcnZlcnM6IFtdLFxuICAgICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogMCxcbiAgICAgICAgICAgICAgICB1c2VyOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VjdGlvbjogdGhpcy5jYXRlZ29yeVNsdWdzWzBdLFxuICAgICAgICAgICAgdGhlbWU6IFwiZGFya1wiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvc2UoKVxuICAgIH1cblxuICAgIHNlYXJjaChxdWVyeSwgY2xlYXIpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZldGNoKGAke3NlbGYuc2VhcmNoRW5kUG9pbnR9JHtxdWVyeX0ke3F1ZXJ5ID8gXCImc2NoZW1hPW5ld1wiIDogXCI/c2NoZW1hPW5ld1wifWAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIlxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgYXdhaXQgcmVzLnRleHQoKVxuICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gZGF0YS5yZXN1bHRzLnJlZHVjZSgoYXJyLCBzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuam9pbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2VydmVyKTtcbiAgICAgICAgICAgICAgICAvLyBhcnIucHVzaCg8U2VydmVyQ2FyZCBzZXJ2ZXI9e3NlcnZlcn0gam9pbj17c2VsZi5qb2lufS8+KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICAgICAgICBpZiAoIWNsZWFyKSB7XG4gICAgICAgICAgICAgICAgc2VydmVycyA9IHNlbGYuc3RhdGUuc2VydmVycy5jb25jYXQoc2VydmVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL3NlcnZlcnMudW5zaGlmdChzZWxmLmJkU2VydmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGVuZCA9IGRhdGEuc2l6ZSArIGRhdGEuZnJvbTtcbiAgICAgICAgICAgIGRhdGEubmV4dCA9IGA/ZnJvbT0ke2VuZH1gO1xuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgZGF0YS5uZXh0ICs9IGAmdGVybT0ke3NlbGYuc3RhdGUudGVybX1gO1xuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSkgZGF0YS5uZXh0ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XG4gICAgICAgICAgICBpZiAoZW5kID49IGRhdGEudG90YWwpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLnRvdGFsO1xuICAgICAgICAgICAgICAgIGRhdGEubmV4dCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGBTaG93aW5nIDEtJHtlbmR9IG9mICR7ZGF0YS50b3RhbH0gcmVzdWx0cyBpbiAke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIHRpdGxlICs9IGAgZm9yICR7c2VsZi5zdGF0ZS50ZXJtfWA7XG5cbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzOiBzZXJ2ZXJzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGRhdGEubmV4dFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkZhaWxlZCB0byBsb2FkIHNlcnZlcnMuIENoZWNrIGNvbnNvbGUgZm9yIGRldGFpbHNcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYXN5bmMgam9pbihzZXJ2ZXJDYXJkKSB7XG4gICAgICAgIGlmIChzZXJ2ZXJDYXJkLnByb3BzLnBpbm5lZCkgcmV0dXJuIHRoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGUoc2VydmVyQ2FyZC5wcm9wcy5pbnZpdGVfY29kZSk7XG5cbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5qb2luRW5kUG9pbnR9LyR7c2VydmVyQ2FyZC5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcn1gLHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlcnZlckNhcmQuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZi53aW5kb3dPcHRpb25zO1xuICAgICAgICBvcHRpb25zLnggPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5YICsgd2luZG93LmlubmVyV2lkdGggLyAyIC0gb3B0aW9ucy53aWR0aCAvIDIpO1xuICAgICAgICBvcHRpb25zLnkgPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5ZICsgd2luZG93LmlubmVySGVpZ2h0IC8gMiAtIG9wdGlvbnMuaGVpZ2h0IC8gMik7XG5cbiAgICAgICAgY29uc3Qgd2luID0gc2VsZi5qb2luV2luZG93ID0gbmV3IChyZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3cpKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB1cmwgPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9aHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCI7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcImRpZC1uYXZpZ2F0ZVwiLCAoZXZlbnQsIHVybCkgPT4ge1xuICAgICAgICAgICAgaWYgKHVybCAhPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiKSByZXR1cm47XG4gICAgICAgICAgICB3aW4uY2xvc2UoKTtcbiAgICAgICAgICAgIHNlbGYuY2hlY2tDb25uZWN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB3aW4ubG9hZFVSTCh1cmwpO1xuICAgICAgICB3aW4uc2V0TWVudUJhclZpc2liaWxpdHkoZmFsc2UpXG4gICAgfVxuXG4gICAgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aDogNTAwLFxuICAgICAgICAgICAgaGVpZ2h0OiA1NTAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzI4MmIzMFwiLFxuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBhbHdheXNPblRvcDogdHJ1ZSxcbiAgICAgICAgICAgIGZyYW1lOiB0cnVlLFxuICAgICAgICAgICAgY2VudGVyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICAgICAgICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBiZFNlcnZlcigpIHtcbiAgICAgICAgY29uc3Qgc2VydmVyID0ge1xuICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJEaXNjb3JkXCIsXG4gICAgICAgICAgICBvbmxpbmU6IFwiMzAwMDArXCIsXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjcwMDAwK1wiLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1wiY29tbXVuaXR5XCIsIFwicHJvZ3JhbW1pbmdcIiwgXCJzdXBwb3J0XCJdLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgQmV0dGVyRGlzY29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2ljb25zLzg2MDA0NzQ0OTY2OTE0MDQ4LzI5MmU3ZjZiZmZmMmI3MWRmZDEzZTUwOGE4NTlhZWRkLndlYnBcIixcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCIwVG1mbzVaYk9SQ1JxYkFkXCIsXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2VydmVyMiA9IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTGlnaHRjb3JkXCIsXG4gICAgICAgICAgICBvbmxpbmU6IFwiMTAwK1wiLFxuICAgICAgICAgICAgbWVtYmVyczogXCIzMDArXCIsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBMaWdodGNvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI3MDU5MDgzNTAyMTg2NjYxMTdcIixcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC5wbmdcIixcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCI3ZUZmZjJBXCIsXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0gdGhpcy5BdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyMiwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSksXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KVxuICAgICAgICBdXG4gICAgfVxuXG4gICAgZ2V0IHNlYXJjaEVuZFBvaW50KCkge1xuICAgICAgICByZXR1cm4gXCJodHRwczovL3NlYXJjaC5kaXNjb3Jkc2VydmVycy5jb21cIjtcbiAgICB9XG5cbiAgICBnZXQgam9pbkVuZFBvaW50KCkge1xuICAgICAgICByZXR1cm4gXCJodHRwczovL2ouZGlzY29yZHNlcnZlcnMuY29tXCI7XG4gICAgfVxuXG4gICAgZ2V0IGNvbm5lY3RFbmRQb2ludCgpIHtcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qb2luLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0XCI7XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb2Ase1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICAgICAgICAgIGlmKCF0ZXh0KXtcbiAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxuICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UodGV4dClcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IDAsXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMixcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogZGF0YVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXG4gICAgICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAtMSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAxLFxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuaG9va3MuZm9yRWFjaCgoZSkgPT4gZSgpKVxuICAgICAgICBTZXR0aW5nc1ZpZXcgPSBTZXR0aW5nc1ZpZXcgfHwgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlNldHRpbmdzVmlld1wiKVxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJwdWJzbGF5ZXJyb290XCJ9LCBcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwicHVic2xheWVyXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NWaWV3LCB7XG4gICAgICAgICAgICAgICAgb25TZXRTZWN0aW9uOiAoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNhdGVnb3J5KHRoaXMuY2F0ZWdvcnlTbHVncy5pbmRleE9mKHNlY3Rpb24pKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VjdGlvbnM6IHRoaXMuc2VjdGlvbnMsXG4gICAgICAgICAgICAgICAgb25DbG9zZTogdGhpcy5jbG9zZSxcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiB0aGlzLnN0YXRlLnNlY3Rpb25cbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBzZWN0aW9ucygpe1xuICAgICAgICBsZXQgc2VjdGlvbnMgPSBbXVxuICAgICAgICBzZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJQdWJsaWMgU2VydmVyc1wiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiQ1VTVE9NXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLnNlYXJjaElucHV0LmJpbmQobnVsbCwgKCkgPT4gdGhpcywgdGhpcy5zZWFyY2hLZXlEb3duKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiQ2F0ZWdvcmllc1wiXG4gICAgICAgIH0sIC4uLnRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlY3Rpb246IHRoaXMuY2F0ZWdvcnlTbHVnc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuY29udGVudC5iaW5kKG51bGwsICgpID0+IHRoaXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkNVU1RPTVwiLFxuICAgICAgICAgICAgZWxlbWVudDogdGhpcy5mb290ZXJcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuY29ubmVjdGlvbi5iaW5kKG51bGwsICgpID0+IHRoaXMpXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBzZWN0aW9uc1xuICAgIH1cbiAgICBcbiAgICBzZWFyY2hJbnB1dChnZXRUaGlzLCBzZWFyY2hLZXlEb3duKSB7XG4gICAgICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gQkRWMi5yZWFjdC51c2VTdGF0ZShcIlwiKVxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS1pdGVtXCJ9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10ZXh0LWlucHV0IGZsZXgtdmVydGljYWxcIiwgc3R5bGU6IHt3aWR0aDogXCIxNzJweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmOiAoc2VyY2hpbnB1dCkgPT4gKGdldFRoaXMoKS5yZWZzLnNlYXJjaGlucHV0ID0gc2VyY2hpbnB1dCksIFxuICAgICAgICAgICAgICAgICAgICBvbktleURvd246IHNlYXJjaEtleURvd24sIFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9LCBcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsIFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiaW5wdXQgZGVmYXVsdFwiLCBcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiU2VhcmNoLi4uXCIsIFxuICAgICAgICAgICAgICAgICAgICBtYXhMZW5ndGg6IFwiNTBcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZWFyY2hLZXlEb3duKGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcgfHwgZS53aGljaCAhPT0gMTMpIHJldHVybjtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxuICAgICAgICAgICAgdGVybTogZS50YXJnZXQudmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBxdWVyeSA9IGA/dGVybT0ke2UudGFyZ2V0LnZhbHVlfWA7XG4gICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgIT09IDApIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5zZWFyY2gocXVlcnksIHRydWUpO1xuICAgIH1cblxuICAgIGdldCBjYXRlZ29yeVNsdWdzKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmNhdGVnb3J5QnV0dG9ucy5tYXAoZSA9PiBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15cXHdcXGRdKy9nLCBcIl9cIikpXG4gICAgfVxuXG4gICAgZ2V0IGNhdGVnb3J5QnV0dG9ucygpIHtcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDYXRlZ29yeShpZCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO1xuICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBpZCxcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcbiAgICAgICAgICAgIHRlcm06IG51bGwsXG4gICAgICAgICAgICBzZWN0aW9uOiBzZWxmLmNhdGVnb3J5U2x1Z3NbaWRdXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaWQgPT09IDApIHtcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuc2VhcmNoKGA/Y2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tpZF19YCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29udGVudChnZXRUaGlzKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSBnZXRUaGlzKCk7XG4gICAgICAgIHNlbGYudXNlU3RhdGUoKVxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSBzZWxmLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSBzZWxmLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuY29ubmVjdGlvbi5zdGF0ZSA9PT0gMSkgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChzZWxmLm5vdENvbm5lY3RlZC5iaW5kKG51bGwsIGdldFRoaXMpKTtcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7cmVmOiAocmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgKHNlbGYucmVmcy5jb250ZW50ID0gcmVmKVxuICAgICAgICAgICAgfSwga2V5OiBcInBjXCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pLFxuICAgICAgICAgICAgc2VsZi5iZFNlcnZlcixcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5tYXAoKHNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge2tleTogc2VydmVyLmlkZW50aWZpZXIsIHNlcnZlcjogc2VydmVyLCBqb2luOiBzZWxmLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNlbGYuc3RhdGUubmV4dCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO3NlbGYuc2V0U3RhdGUoe2xvYWRpbmc6IHRydWV9KTsgc2VsZi5zZWFyY2goc2VsZi5zdGF0ZS5uZXh0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIiwgc3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1hcmdpblRvcDogXCIxMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIxMHB4XCJ9fSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLmxvYWRpbmcgPyBcIkxvYWRpbmdcIiA6IFwiTG9hZCBNb3JlXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLmxlbmd0aCA+IDAgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSlcbiAgICAgICAgKV07XG4gICAgfVxuXG4gICAgbm90Q29ubmVjdGVkKGdldFRoaXMpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IGdldFRoaXMoKTtcbiAgICAgICAgLy9yZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHsgdGV4dDogc2VsZi5zdGF0ZS50aXRsZSB9KTtcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7a2V5OiBcIm5jY1wiLCByZWY6IChyZWYpID0+IChzZWxmLnJlZnMuY29udGVudCA9IHJlZiksIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImgyXCIsXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxuICAgICAgICAgICAgICAgIFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzZWxmLmNvbm5lY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogXCIxOHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCIxMHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb25uZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksIHNlbGYuYmRTZXJ2ZXJcbiAgICAgICAgKV07XG4gICAgfVxuXG4gICAgZm9vdGVyKCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIn0sXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAge2hyZWY6IFwiaHR0cHM6Ly9kaXNjb3Jkc2VydmVycy5jb21cIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICBcIkRpc2NvcmRzZXJ2ZXJzLmNvbVwiXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXNlU3RhdGUoKXtcbiAgICAgICAgY29uc3QgZm9yY2VVcGRhdGUgPSB1c2VGb3JjZVVwZGF0ZSgpXG4gICAgICAgIEJEVjIuUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9va3MucHVzaChsaXN0ZW5lcilcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmhvb2tzLmZpbmRJbmRleChlID0+IGU9PT1saXN0ZW5lcilcbiAgICAgICAgICAgICAgICBpZihpbmRleCA8IDApcmV0dXJuXG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKVxuICAgIH1cblxuICAgIGNvbm5lY3Rpb24oZ2V0VGhpcykge1xuICAgICAgICBjb25zdCBzZWxmID0gZ2V0VGhpcygpO1xuICAgICAgICBzZWxmLnVzZVN0YXRlKClcbiAgICAgICAgY29uc3Qge2Nvbm5lY3Rpb259ID0gc2VsZi5zdGF0ZTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24uc3RhdGUgIT09IDIpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtjb2xvcjogXCIjYjliYmJlXCIsIGZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcbiAgICAgICAgICAgICAgICBcIkNvbm5lY3RlZCBhczogXCIsXG4gICAgICAgICAgICAgICAgYCR7Y29ubmVjdGlvbi51c2VyLnVzZXJuYW1lfSMke2Nvbm5lY3Rpb24udXNlci5kaXNjcmltaW5hdG9yfWBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtwYWRkaW5nOiBcIjVweCAxMHB4IDAgMTBweFwifX0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1pbkhlaWdodDogXCIyMHB4XCJ9LCB0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIiwgb25DbGljazogc2VsZi5jb25uZWN0fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUmVjb25uZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXJ2ZXJDYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuc2VydmVyLmljb25VcmwpIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGltYWdlRXJyb3I6IGZhbHNlLFxyXG4gICAgICAgICAgICBqb2luZWQ6IHRoaXMucHJvcHMuZ3VpbGRMaXN0LmluY2x1ZGVzKHRoaXMucHJvcHMuc2VydmVyLmlkZW50aWZpZXIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NlcnZlcn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGxldCBjYXJkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2FyZCAmJiBlLmNhcmRQcmltYXJ5KVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxleENoaWxkICYmIGUuX2hvcml6b250YWxSZXZlcnNlKVswXVxyXG4gICAgICAgIGxldCB3cmFwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubm9XcmFwICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWQpWzBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIiwgLy8gY2FyZFByaW1hcnktMUh2LXRvXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGAke2NhcmRNb2R1bGUuY2FyZH0gJHtjYXJkTW9kdWxlLmNhcmRQcmltYXJ5fSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9IGJkLXNlcnZlci1jYXJkJHtzZXJ2ZXIucGlubmVkID8gXCIgYmQtc2VydmVyLWNhcmQtcGlubmVkXCIgOiBcIlwifWB9LFxyXG4gICAgICAgICAgICAvLyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAvLyBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgLy8geyBjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZmxleC0xTzFHS1kgZGlyZWN0aW9uUm93LTN2M3RmRyBqdXN0aWZ5U3RhcnQtMnlJWm8wIGFsaWduU3RyZXRjaC0xaHd4TWEgbm9XcmFwLTNqeW52NlwiIH0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge3JlZjogXCJpbWdcIiwgY2xhc3NOYW1lOiBcImJkLXNlcnZlci1pbWFnZVwiLCBzcmM6IHNlcnZlci5pY29uVXJsLCBvbkVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcyksIGRyYWdnYWJsZTogZmFsc2V9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuZmxleENoaWxkK1wiIGJkLXNlcnZlci1jb250ZW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwK1wiIGJkLXNlcnZlci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1uYW1lXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW1lbWJlci1jb3VudFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5tZW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgTWVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5IGJkLXNlcnZlci1kZXNjcmlwdGlvbi1jb250YWluZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBzY3JvbGxlciBiZC1zZXJ2ZXItZGVzY3JpcHRpb25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZGlyZWN0aW9uUm93LTN2M3RmRyBub1dyYXAtM2p5bnY2IGJkLXNlcnZlci1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXhDaGlsZC1mYW9WVzMgYmQtc2VydmVyLXRhZ3NcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5jYXRlZ29yaWVzLmpvaW4oXCIsIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGNvbG9yR3JlZW4tMjlpQUtZXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiIzNhYzE1Y1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5lcnJvciAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGRpc2FibGVkLTlhRjJ1Z1wiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiNjMTNhM2FcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZXJ2ZXIuZXJyb3IgJiYgIXRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk5cIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCJ9LCBvbkNsaWNrOiAoKSA9PiB7dGhpcy5qb2luKCk7fX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUVycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pbigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmpvaW4odGhpcyk7XHJcbiAgICAgICAgLy90aGlzLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUmVsb2FkSWNvbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xyXG4gICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcIiNkY2RkZGVcIixcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1yZWxvYWQgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMub25DbGljayxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7d2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIiwgaGVpZ2h0OiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCJ9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwifSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6IFwibm9uZVwiLCBkOiBcIk0wIDBoMjR2MjRIMHpcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgIGkgIT09IDAgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wLCB7fSkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZX0pKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcblxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9zd2l0Y2hcIjtcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XG5cbmxldCBmb3JtTW9kdWxlXG5sZXQgc3dpdGNoSXRlbVxubGV0IGJldGFDbGFzc05hbWVzXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NHcm91cCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBlcnJvcjogZmFsc2VcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlck9sZFNldHRpbmdzKCkge1xuICAgICAgICBjb25zdCB7dGl0bGUsIHNldHRpbmdzLCBidXR0b259ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgYnV0dG9uQ29tcG9uZW50ID0gYnV0dG9uID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwidGl0bGUtYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiBidXR0b24ub25DbGlja30sIGJ1dHRvbi50aXRsZSkgOiBudWxsO1xuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGV9KSxcbiAgICAgICAgICAgICAgICBidXR0b25Db21wb25lbnQsXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGlkLCBjaGVja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICAgICAgICAgIH0pXTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRDYXRjaChlcnIsIGVyckluZm8pe1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIsIGVyckluZm8pXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZXJyb3I6IHRydWVcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5lcnJvcil7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyT2xkU2V0dGluZ3MoKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICBpZighZm9ybU1vZHVsZSlmb3JtTW9kdWxlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5Gb3JtU2VjdGlvbilcbiAgICAgICAgICAgICAgICBpZighc3dpdGNoSXRlbSlzd2l0Y2hJdGVtID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJTd2l0Y2hJdGVtXCIpXG4gICAgICAgICAgICAgICAgaWYoIWJldGFDbGFzc05hbWVzKWJldGFDbGFzc05hbWVzID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5iZXRhICYmICghZS5jb250YWluZXIgJiYgIWUudXNlclNldHRpbmdzVm9pY2UpKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtdXG4gICAgICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5kZXNjcmlwdGlvbil7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goPGZvcm1Nb2R1bGUuRm9ybVRleHQgdHlwZT1cImRlc2NyaXB0aW9uXCIgc2VsZWN0YWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtVGV4dD4sIDxNYXJnaW5Ub3A+PC9NYXJnaW5Ub3A+KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKC4uLnRoaXMucHJvcHMuc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5mbyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuZXhwZXJpbWVudGFsKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucHVzaCg8c3VwIGNsYXNzTmFtZT17YmV0YUNsYXNzTmFtZXMuYmV0YX0+KEVYUEVSSU1FTlRBTCk8L3N1cD4pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxzd2l0Y2hJdGVtLmRlZmF1bHQgb25DaGFuZ2U9eyhldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShzZXR0aW5nLmlkLCBldi50YXJnZXQuY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgfX0ga2V5PXtzZXR0aW5nLmlkfSB2YWx1ZT17c2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF19IGNsYXNzTmFtZT17X19TRUNSRVRfRU1PVElPTl9fLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IFwiMjBweFwiXG4gICAgICAgICAgICAgICAgICAgIH0pfSBkaXNhYmxlZD17ZmFsc2V9IGhpZGVCb3JkZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT17c3dpdGNoSXRlbS5kZWZhdWx0LlNpemVzLkRFRkFVTFR9IHRoZW1lPXtzd2l0Y2hJdGVtLmRlZmF1bHQuVGhlbWVzLkRFRkFVTFR9IG5vdGU9e3NldHRpbmcuaW5mb30+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aW5mb31cbiAgICAgICAgICAgICAgICAgICAgPC9zd2l0Y2hJdGVtLmRlZmF1bHQ+XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxmb3JtTW9kdWxlLkZvcm1TZWN0aW9uIHRhZz1cImgyXCIgdGl0bGU9e3RoaXMucHJvcHMudGl0bGV9PlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1TZWN0aW9uPlxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NldHRpbmdzVGl0bGUgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG4vL2gyLTJnV0UtbyB0aXRsZS0zc1pXWVEgc2l6ZTE2LTE0Y0d6NSBoZWlnaHQyMC1tTzJlSU4gd2VpZ2h0U2VtaUJvbGQtTkpleHppIGRhLWgyIGRhLXRpdGxlIGRhLXNpemUxNiBkYS1oZWlnaHQyMCBkYS13ZWlnaHRTZW1pQm9sZCBkZWZhdWx0Q29sb3ItMV9halgwIGRhLWRlZmF1bHRDb2xvciBtYXJnaW5Ub3A2MC0zUEdidEsgZGEtbWFyZ2luVG9wNjAgbWFyZ2luQm90dG9tMjAtMzJxSUQ3IGRhLW1hcmdpbkJvdHRvbTIwXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJoMlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xuXG5sZXQgY2xhc3NuYW1lcyA9IFtdXG5mdW5jdGlvbiBnZXRDbGFzc05hbWUobmFtZSl7XG4gICAgbGV0IGNsYXNzTmFtZSA9IGNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChuYW1lK1wiLVwiKSlcbiAgICBpZihjbGFzc05hbWUpcmV0dXJuIGNsYXNzTmFtZVxuICAgIGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlW25hbWVdKVswXVtuYW1lXVxuICAgIGNsYXNzbmFtZXMucHVzaChjbGFzc05hbWUpXG4gICAgcmV0dXJuIGNsYXNzTmFtZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2hJdGVtIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9ICF0aGlzLnByb3BzLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgdGhpcy5wcm9wcy5jaGVja2VkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuZGF0YS5leHBlcmltZW50YWwpe1xuICAgICAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XG4gICAgICAgICAgICAgICAgY2xhc3NuYW1lcy5wdXNoKEJETW9kdWxlcy5nZXQoZSA9PiBlLmJldGEgJiYgKCFlLmNvbnRhaW5lciAmJiAhZS51c2VyU2V0dGluZ3NWb2ljZSkpWzBdLmJldGEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmZvID0gW1xuICAgICAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInN1cFwiLCB7Y2xhc3NOYW1lOiBnZXRDbGFzc05hbWUoXCJiZXRhXCIpfSwgXCIoRVhQRVJJTUVOVEFMKVwiKVxuICAgICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtdmVydGljYWwgZmxleC1qdXN0aWZ5LXN0YXJ0IGZsZXgtYWxpZ24tc3RyZXRjaCBmbGV4LW5vd3JhcCB1aS1zd2l0Y2gtaXRlbVwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC1ob3Jpem9udGFsIGZsZXgtanVzdGlmeS1zdGFydCBmbGV4LWFsaWduLXN0cmV0Y2ggZmxleC1ub3dyYXBcIn0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2tleTogXCJ0aXRsZVwiLCBjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMyBtYXJnaW4tcmVzZXQgbWFyZ2luLXJlc2V0IHVpLWZsZXgtY2hpbGRcIn0sIHRleHQpLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtrZXk6IFwic3dpdGNoXCIsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWR9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcbiAgICAgICAgKTtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCIvKipcbiAqIFRvb2x0aXAgdGhhdCBhdXRvbWF0aWNhbGx5IHNob3cgYW5kIGhpZGUgdGhlbXNlbHZlcyBvbiBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGV2ZW50cy5cbiAqIFdpbGwgYWxzbyByZW1vdmUgdGhlbXNlbHZlcyBpZiB0aGUgbm9kZSB0byB3YXRjaCBpcyByZW1vdmVkIGZyb20gRE9NIHRocm91Z2hcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cbiAqXG4gKiBOb3RlIHRoaXMgaXMgbm90IHVzaW5nIERpc2NvcmQncyBpbnRlcm5hbHMgYnV0IG5vcm1hbCBET00gbWFuaXB1bGF0aW9uIGFuZCBlbXVsYXRlc1xuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEBtb2R1bGUgRW11bGF0ZWRUb29sdGlwXG4gKiBAdmVyc2lvbiAwLjAuMVxuICovXG5cbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XG5sZXQgVG9vbHRpcENsYXNzZXNcbmZ1bmN0aW9uIGdldFRvb2x0aXBDbGFzc2VzKCl7XG5cdGlmKFRvb2x0aXBDbGFzc2VzKXJldHVybiBUb29sdGlwQ2xhc3Nlc1xuXHRyZXR1cm4gVG9vbHRpcENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInRvb2x0aXBcIiwgXCJ0b29sdGlwQmxhY2tcIik7XG59XG5sZXQgVG9vbHRpcExheWVyc1xuZnVuY3Rpb24gZ2V0VG9vbHRpcExheWVycygpe1xuXHRpZihUb29sdGlwTGF5ZXJzKXJldHVybiBUb29sdGlwTGF5ZXJzXG5cdHJldHVybiBUb29sdGlwTGF5ZXJzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJsYXllclwiLCBcImxheWVyQ29udGFpbmVyXCIpO1xufVxuXG5jb25zdCBnZXRDbGFzcyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XG4gICAgY29uc3QgdXBwZXJDYXNlID0gc2lkZU9yQ29sb3JbMF0udG9VcHBlckNhc2UoKSArIHNpZGVPckNvbG9yLnNsaWNlKDEpO1xuICAgIGNvbnN0IHRvb2x0aXBDbGFzcyA9IGdldFRvb2x0aXBDbGFzc2VzKClbYHRvb2x0aXAke3VwcGVyQ2FzZX1gXTtcbiAgICBpZiAodG9vbHRpcENsYXNzKSByZXR1cm4gdG9vbHRpcENsYXNzO1xuICAgIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgY2xhc3NFeGlzdHMgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xuICAgIHJldHVybiBnZXRDbGFzcyhzaWRlT3JDb2xvcikgPyB0cnVlIDogZmFsc2U7XG59O1xuXG5jb25zdCB0b1B4ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gYCR7dmFsdWV9cHhgO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0ZWRUb29sdGlwIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxqUXVlcnkpfSBub2RlIC0gRE9NIG5vZGUgdG8gbW9uaXRvciBhbmQgc2hvdyB0aGUgdG9vbHRpcCBvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGlwIC0gc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvb2x0aXBcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0b29sdGlwXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdHlsZT1ibGFja10gLSBjb3JyZWxhdGVzIHRvIHRoZSBkaXNjb3JkIHN0eWxpbmcvY29sb3JzIChibGFjaywgYnJhbmQsIGdyZWVuLCBncmV5LCByZWQsIHllbGxvdylcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNpZGU9dG9wXSAtIGNhbiBiZSBhbnkgb2YgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJldmVudEZsaXA9ZmFsc2VdIC0gcHJldmVudHMgbW92aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIGlmIGl0IGlzIHRvbyBiaWcgb3IgZ29lcyBvZmZzY3JlZW5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRpc2FibGVkPWZhbHNlXSAtIHdoZXRoZXIgdGhlIHRvb2x0aXAgc2hvdWxkIGJlIGRpc2FibGVkIGZyb20gc2hvd2luZyBvbiBob3ZlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYXR0YWNoRXZlbnRzPXRydWVdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgbGlzdGVuIHRvIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iobm9kZSwgdGV4dCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgcHJldmVudEZsaXAgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgYXR0YWNoRXZlbnRzID0gdHJ1ZX0gPSBvcHRpb25zO1xuXHRcdHRoaXMubm9kZSA9IG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IHRleHQ7XG4gICAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHRoaXMuc2lkZSA9IHNpZGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGhpcy5wcmV2ZW50RmxpcCA9IHByZXZlbnRGbGlwO1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG5cbiAgICAgICAgaWYgKCFjbGFzc0V4aXN0cyh0aGlzLnNpZGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTaWRlICR7dGhpcy5zaWRlfSBkb2VzIG5vdCBleGlzdC5gKTtcblx0XHRpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc3R5bGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTdHlsZSAke3RoaXMuc3R5bGV9IGRvZXMgbm90IGV4aXN0LmApO1xuXHRcdFxuXHRcdHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBMYXllcnMoKS5sYXllciArIFwiIFwiICsgZ2V0VG9vbHRpcExheWVycygpLmRpc2FibGVkUG9pbnRlckV2ZW50cztcblxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XG5cblx0XHR0aGlzLmxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwQ29udGVudFxuXG5cdFx0Y29uc3QgcG9pbnRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHBvaW50ZXJFbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcFBvaW50ZXI7XG5cblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZChwb2ludGVyRWxlbWVudCk7XG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5hcHBlbmQodGhpcy5sYWJlbEVsZW1lbnQpO1xuXHRcdHRoaXMuZWxlbWVudC5hcHBlbmQodGhpcy50b29sdGlwRWxlbWVudCk7XG5cblx0XHRpZihhdHRhY2hFdmVudHMpe1xuXHRcdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsICgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblx0XHRcdFx0dGhpcy5zaG93KCk7XG5cdFxuXHRcdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcblx0XHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKHRoaXMubm9kZSkgPiAtMTtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKHRoaXMubm9kZSkpO1xuXHRcdFx0XHRcdFx0aWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaGlkZSgpO1xuXHRcdFx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcblx0XHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XG5cdFx0XHR9KTtcblx0XG5cdFx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmhpZGUoKTtcblx0XHRcdH0pO1xuXHRcdH1cbiAgICB9XG5cbiAgICAvKiogQ29udGFpbmVyIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYXBwZW5kZWQuICovXG4gICAgZ2V0IGNvbnRhaW5lcigpIHsgXG5cdFx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucG9wb3V0cylbMF0ucG9wb3V0cykrXCIgfiAuXCIrVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXJDb250YWluZXIpWzBdLmxheWVyQ29udGFpbmVyKSk7IFxuXHR9XG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xuICAgIGdldCBjYW5TaG93QWJvdmUoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCA+PSAwOyB9XG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBiZWxvdyB0aGUgZWxlbWVudCAqL1xuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiB0byB0aGUgbGVmdCBvZiB0aGUgZWxlbWVudCAqL1xuICAgIGdldCBjYW5TaG93TGVmdCgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoID49IDA7IH1cbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xuXHRnZXQgY2FuU2hvd1JpZ2h0KCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB0aGlzLm5vZGUub2Zmc2V0V2lkdGggKyB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggPD0gVXRpbHMuc2NyZWVuV2lkdGg7IH1cblxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cblx0aGlkZSgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcblx0fVxuXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXG5cdHNob3coKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xuXHRcdHRoaXMuY29udGFpbmVyLmFwcGVuZCh0aGlzLmVsZW1lbnQpO1xuXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XG5cdFx0XHRpZiAodGhpcy5jYW5TaG93QWJvdmUgfHwgKCF0aGlzLmNhblNob3dBYm92ZSAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93QWJvdmUoKTtcblx0XHRcdGVsc2UgdGhpcy5zaG93QmVsb3coKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zaWRlID09IFwiYm90dG9tXCIpIHtcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xuXHRcdFx0ZWxzZSB0aGlzLnNob3dBYm92ZSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJsZWZ0XCIpIHtcblx0XHRcdGlmICh0aGlzLmNhblNob3dMZWZ0IHx8ICghdGhpcy5jYW5TaG93TGVmdCAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93TGVmdCgpO1xuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XG5cdFx0XHRpZiAodGhpcy5jYW5TaG93UmlnaHQgfHwgKCF0aGlzLmNhblNob3dSaWdodCAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93UmlnaHQoKTtcblx0XHRcdGVsc2UgdGhpcy5zaG93TGVmdCgpO1xuXHRcdH1cblx0fVxuXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXG5cdHNob3dBYm92ZSgpIHtcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJ0b3BcIikpO1xuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xuXHR9XG5cbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCBiZWxvdyB0aGUgbm9kZS4gKi9cblx0c2hvd0JlbG93KCkge1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgKyAxMCkpO1xuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XG5cdH1cblxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBsZWZ0IG9mIHRoZSBub2RlLiAqL1xuXHRzaG93TGVmdCgpIHtcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJsZWZ0XCIpKTtcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLSAxMCkpO1xuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xuXHR9XG5cbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXG5cdHNob3dSaWdodCgpIHtcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJyaWdodFwiKSk7XG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcblx0XHR0aGlzLmNlbnRlclZlcnRpY2FsbHkoKTtcblx0fVxuXG5cdGNlbnRlckhvcml6b250YWxseSgpIHtcbiAgICAgICAgY29uc3Qgbm9kZWNlbnRlciA9IHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgKHRoaXMubm9kZS5vZmZzZXRXaWR0aCAvIDIpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xuXHR9XG5cblx0Y2VudGVyVmVydGljYWxseSgpIHtcblx0XHRjb25zdCBub2RlY2VudGVyID0gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArICh0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0IC8gMik7XG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMikpKTtcblx0fVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi90b29sdGlwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGNvbnN0IHtzdHlsZSA9IFwiYmxhY2tcIiwgc2lkZSA9IFwidG9wXCIsIHRleHQgPSBcIlwifSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHRoaXMubm9kZSA9IEJEVjIucmVhY3REb20uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICAgIHRoaXMudG9vbHRpcCA9IG5ldyBUb29sdGlwKHRoaXMubm9kZSwgdGV4dCwge3N0eWxlLCBzaWRlfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRvb2x0aXA7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19YU3ZnIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge3htbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDEyIDEyXCIsIHN0eWxlOiB7d2lkdGg6IFwiMThweFwiLCBoZWlnaHQ6IFwiMThweFwifX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZ1wiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiYWNrZ3JvdW5kXCIsIGZpbGw6IFwibm9uZVwiLCBmaWxsUnVsZTogXCJldmVub2RkXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMCAwaDEydjEySDBcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7Y2xhc3NOYW1lOiBcImZpbGxcIiwgZmlsbDogXCIjZGNkZGRlXCIsIGQ6IFwiTTkuNSAzLjIwNUw4Ljc5NSAyLjUgNiA1LjI5NSAzLjIwNSAyLjVsLS43MDUuNzA1TDUuMjk1IDYgMi41IDguNzk1bC43MDUuNzA1TDYgNi43MDUgOC43OTUgOS41bC43MDUtLjcwNUw2LjcwNSA2XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9kdWxlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5vZGUtZmV0Y2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0xheWVycy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvaG9va3MuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3BsdWdpbkNlcnRpZmllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luTW9kdWxlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wb3BvdXRXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvYnVnX2h1bnRlci5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvY2lyY3VzLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL1RleHRJbnB1dFNldHRpbmcuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYWRkb25jYXJkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9ubGlzdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9iZExvZ28uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jaGVja2JveC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvZHJvcGRvd24uanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zd2l0Y2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy90ZXh0aW5wdXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29udGVudENvbHVtbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvckRldGFjaGVkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvZXJyb3JCb3VuZGFyeS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2RlbGV0ZS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kb3duYXJyb3cuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZWRpdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9oaXN0b3J5LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL3NlYXJjaC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9tYXJnaW50b3AuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHJlc2VuY2VTZXR0aW5ncy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL3NlcnZlckNhcmQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzR3JvdXAuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NUaXRsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3N3aXRjaC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RhYkJhclNlcGFyYXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Rvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwV3JhcC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3hTdmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImNyeXB0b1wiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJlbGVjdHJvblwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJldmVudHNcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibW9kdWxlXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm5vZGUtZmV0Y2hcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwicGF0aFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsInR5cGUiLCJpdGVtcyIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHQiLCJkZWZhdWx0Q29va2llIiwic2V0dGluZ3NDb29raWUiLCJzZXR0aW5nc1JQQyIsImRlZmF1bHRSUEMiLCJEYXRlIiwibm93IiwibGlnaHRjb3JkU2V0dGluZ3MiLCJkZWZhdWx0TGlnaHRjb3JkU2V0dGluZ3MiLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZ2V0Q2hhbm5lbCIsImhhc0NoYW5uZWwiLCJyZWxhdGlvblNoaXBNb2R1bGUiLCJhZGRSZWxhdGlvbnNoaXAiLCJETU1vZHVsZSIsImNsb3NlUHJpdmF0ZUNoYW5uZWwiLCJibG9ja2VkIiwidXNlck1vZHVsZSIsImdldEN1cnJlbnRVc2VyIiwiQW50aUJvdERNIiwiYW50aURNIiwiZW5hYmxlZCIsImVuYWJsZSIsInN1YnNjcmliZSIsImRpc2FibGUiLCJ1bnN1YnNjcmliZSIsImV2IiwibWVzc2FnZSIsImF1dGhvciIsImJvdCIsImd1aWxkX2lkIiwiY2hhbm5lbCIsImNoYW5uZWxfaWQiLCJzY2FuTWVzc2FnZSIsInNob3dUb2FzdCIsInVzZXJuYW1lIiwiZGlzY3JpbWluYXRvciIsImxvY2F0aW9uIiwidGVzdCIsImNvbnRlbnQiLCJFbWJlZHNDb250YWlucyIsInNlYXJjaCIsImVtYmVkcyIsIm1hcCIsImVtYmVkIiwiZm9vdGVyIiwidGV4dCIsImZpZWxkcyIsIm5hbWUiLCJtIiwiRGlzcGF0Y2hlciIsImRpc3BhdGNoIiwiQWN0aW9uVHlwZXMiLCJzb2NrZXRJZCIsInBpZCIsIkN1c3RvbVJpY2hQcmVzZW5jZSIsImdhbWUiLCJmb3JtYXRlZEdhbWUiLCJhcHBsaWNhdGlvbl9pZCIsImRldGFpbHMiLCJzdGF0ZSIsInRpbWVzdGFtcHMiLCJzdGFydCIsImFzc2V0cyIsImxhcmdlX2ltYWdlIiwic21hbGxfaW1hZ2UiLCJzZW5kR2FtZSIsIkxPQ0FMX0FDVElWSVRZX1VQREFURSIsImFjdGl2aXR5IiwiY29uc29sZSIsImxvZyIsInNldCIsImZldGNoQXNzZXRzIiwiYXBwbGljYXRpb25JZCIsImdldEFzc2V0cyIsIkVycm9yIiwiTGF5ZXJzIiwibGF5ZXJzIiwiQmV0dGVyRGlzY29yZCIsImlzSW5qZWN0ZWQiLCJxdWVyeVNlbGVjdG9yIiwiaW5qZWN0IiwiY2xhc3NOYW1lTGF5ZXJzIiwicmVtb3ZlRGEiLCJ2MiIsIldlYnBhY2tNb2R1bGVzIiwiZmluZCIsImxheWVyIiwiUmVhY3RJbnN0YW5jZSIsIkFwaSIsIkZpbmRSZWFjdCIsInJlbmRlciIsImNhbGwiLCJjbGFzc0xpc3QiLCJwcm9wcyIsImNoaWxkcmVuIiwic3BsaXQiLCJwdXNoIiwiam9pbiIsImZvckVhY2giLCJmb3JjZVVwZGF0ZSIsImNyZWF0ZUxheWVyIiwidXVpZHY0IiwibGF5IiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJzcGxpY2UiLCJyZW1vdmUiLCJMYXllck1vZHVsZXMiLCJMYXllciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiYW5pbWF0aW9uIiwibW9kdWxlcyIsIlZhbHVlIiwiZ2V0TGF5ZXIiLCJrZXlkb3duIiwid2hpY2giLCJkaXYiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjb21wb25lbnREaWRNb3VudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjb21wb25lbnRXaWxsRW50ZXIiLCJ0aW1pbmciLCJ0b1ZhbHVlIiwiZHVyYXRpb24iLCJjb21wb25lbnRXaWxsTGVhdmUiLCJpbnRlcnBvbGF0aW9uIiwiaW50ZXJwb2xhdGUiLCJpbnB1dFJhbmdlIiwib3V0cHV0UmFuZ2UiLCJzdHlsZSIsIm9wYWNpdHkiLCJ0cmFuc2Zvcm0iLCJzY2FsZSIsIkRpdiIsIl9fU0VDUkVUX0VNT1RJT05fXyIsImNzcyIsImJhY2tncm91bmRDb2xvciIsInBvc2l0aW9uIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwiZGlzcGxheSIsIm92ZXJmbG93IiwiV2Via2l0Qm94T3JpZW50IiwiV2Via2l0Qm94RGlyZWN0aW9uIiwibXNGbGV4RGlyZWN0aW9uIiwiZmxleERpcmVjdGlvbiIsInpJbmRleCIsInBhZGRpbmdUb3AiLCJmaWx0ZXIiLCJkZWZhdWx0UHJvcHMiLCJSZWFjdERPTSIsIlJlYWN0RG9tIiwiUmVhY3RDb21wb25lbnQiLCJXaW5kb3dDb25maWdGaWxlIiwiZW1vdGVzIiwic2NyZWVuV2lkdGgiLCJNYXRoIiwibWF4IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJpbm5lcldpZHRoIiwic2NyZWVuSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcyIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwiaW5qZWN0Q1NTIiwiRE9NIiwiYWRkU3R5bGUiLCJlc2NhcGVJRCIsImNsZWFyQ1NTIiwicmVtb3ZlU3R5bGUiLCJsaW5rSlMiLCJhZGRTY3JpcHQiLCJ1bmxpbmtKUyIsInJlbW92ZVNjcmlwdCIsImdldFBsdWdpbiIsImhhc093blByb3BlcnR5IiwicGx1Z2luIiwiZ2V0Q29yZSIsIm1haW5Db3JlIiwiYWxlcnQiLCJzaG93Q29uZmlybWF0aW9uTW9kYWwiLCJjYW5jZWxUZXh0Iiwib3B0aW9ucyIsImZpbmRNb2R1bGUiLCJmaW5kQWxsTW9kdWxlcyIsImZpbmRBbGwiLCJmaW5kTW9kdWxlQnlQcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkV2ZW50RW1pdHRlciIsInJlcXVpcmUiLCJldmVudE5hbWUiLCJhcmdzIiwiZW1pdCIsIm9mZiIsImV2ZW50QWN0aW9uIiwicmVtb3ZlTGlzdGVuZXIiLCJzZWxlY3RvcnMiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJ1c2VyU2V0dGluZ3NBY2NvdW50IiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ2aWV3Qm9keSIsInVzZXJTZXR0aW5nc1NlY3VyaXR5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwibm9ybWFsaXplZFByZWZpeCIsInJhbmRDbGFzcyIsInN0b3AiLCJoYXNQYXRjaGVkIiwidW5wYXRjaENsYXNzTW9kdWxlcyIsIm1vZHVsZUZpbHRlciIsInJldmVydEVsZW1lbnQiLCJwYXRjaENsYXNzTW9kdWxlcyIsIm5vcm1hbGl6ZUVsZW1lbnQiLCJwYXRjaERPTU1ldGhvZHMiLCJtb2R1bGUiLCJwYXRjaENsYXNzTW9kdWxlIiwidW5wYXRjaENsYXNzTW9kdWxlIiwic2hvdWxkSWdub3JlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiYmFzZUNsYXNzTmFtZSIsImNvbXBvbmVudE5hbWUiLCJjbGFzc05hbWVzIiwibm9ybWFsQ2xhc3MiLCJjYW1lbENhc2UiLCJzIiwiaSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJuZXdTdHJpbmciLCJ0cmltIiwiZWxlbWVudCIsImNsYXNzZXMiLCJjIiwiY2xlbiIsIm5ld0NsYXNzIiwiYWRkIiwiY2hpbGQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJ0b1JlbW92ZSIsImNvbnRhaW5zIiwiRE9NVG9rZW5MaXN0IiwidG9rZW4iLCJ0b2tlbnMiLCJ0IiwiQ29sb3JlZFRleHQiLCJpbmplY3RDb2xvcmVkVGV4dCIsImNhbmNlbENvbG9yZWRUZXh0IiwiTWVzc2FnZUNvbXBvbmVudCIsImJlZm9yZSIsIm1ldGhvZEFyZ3VtZW50cyIsImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQiLCJtZXNzYWdlQ29udGVudCIsImRpc3BsYXlOYW1lIiwib3JpZ2luYWxUeXBlIiwiX19vcmlnaW5hbE1ldGhvZCIsInJvbGVDb2xvciIsImNvbG9yU3RyaW5nIiwiY29sb3IiLCJhc3NpZ24iLCJyZW1vdmVDb2xvcmVkVGV4dCIsImNsYXNzTmFtZU1hcmt1cCIsIm1hcmt1cCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJlbGVtIiwic2V0UHJvcGVydHkiLCJwYXRoIiwiZnMiLCJNb2R1bGUiLCJnbG9iYWxQYXRocyIsInJlc29sdmUiLCJlbGVjdHJvbiIsInNlbmRTeW5jIiwiTWV0YUVycm9yIiwib3JpZ2luYWxKU1JlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIm9yaWdpbmFsQ1NTUmVxdWlyZSIsInNwbGl0UmVnZXgiLCJlc2NhcGVkQXRSZWdleCIsImFkZG9uQ2FjaGUiLCJ0aW1lQ2FjaGUiLCJ3YXRjaGVycyIsInBhdGNoRXh0ZW5zaW9ucyIsImdldENvbnRlbnRSZXF1aXJlIiwicGx1Z2luc0ZvbGRlciIsIl9wbHVnaW5zRm9sZGVyIiwicmVhbHBhdGhTeW5jIiwiZGF0YVBhdGgiLCJ0aGVtZXNGb2xkZXIiLCJfdGhlbWVzRm9sZGVyIiwibG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUiLCJkYXRhU3RvcmUiLCJnZXRTZXR0aW5nR3JvdXAiLCJzZXRTZXR0aW5nR3JvdXAiLCJlbmNyeXB0U2V0dGluZ3NDYWNoZSIsIkpTT04iLCJwYXJzZSIsImRlY3J5cHRTZXR0aW5nc0NhY2hlIiwiaGFzaCIsInJlc3VsdCIsInN1c3BlY3QiLCJzYXZlQWRkb25DYWNoZSIsInN0cmluZ2lmeSIsIndhdGNoQ29udGVudCIsImNvbnRlbnRUeXBlIiwiaXNQbHVnaW4iLCJiYXNlRm9sZGVyIiwiZmlsZUVuZGluZyIsIndhdGNoIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkUGx1Z2luIiwidW5sb2FkVGhlbWUiLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRQbHVnaW4iLCJsb2FkVGhlbWUiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRUaGVtZSIsInVud2F0Y2hDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsImhhc09sZE1ldGEiLCJwYXJzZU9sZE1ldGEiLCJoYXNOZXdNZXRhIiwicGFyc2VOZXdNZXRhIiwibWV0YSIsInJhd01ldGEiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJwYXJzZWQiLCJmb3JtYXQiLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwiY2hhckF0IiwibCIsInN1YnN0ciIsInNlbGYiLCJvcmlnaW5hbFJlcXVpcmUiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzdHJpcEJPTSIsImFkZGVkIiwiYXRpbWVNcyIsIm1vZGlmaWVkIiwibXRpbWVNcyIsInNpemUiLCJfY29tcGlsZSIsImRpZEV4cG9ydCIsImlzRW1wdHkiLCJleHBvcnRzIiwibWFrZVBsYWNlaG9sZGVyUGx1Z2luIiwiZ2V0TmFtZSIsImdldEF1dGhvciIsImdldERlc2NyaXB0aW9uIiwic291cmNlIiwid2Vic2l0ZSIsImxvYWRDb250ZW50IiwicHJvY2Vzc0ZpbGUiLCJ0aW1lc3RhbXAiLCJmaWxlIiwiaGFybSIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImNvbmZpZyIsImhhc1N0YXJ0ZWQiLCJmbGF0IiwidmVyc2lvbiIsIkVEIiwiV2ViU29ja2V0IiwicGF0Y2hBdHRyaWJ1dGVzIiwiaW5pdFNldHRpbmdzIiwiY2hlY2tGb3JHdWlsZHMiLCJpbml0aWFsaXplIiwiaW5pdGlhbGl6ZVNldHRpbmdzIiwiY29udGVudE1hbmFnZXIiLCJCdWZmZXIiLCJmcm9tIiwidG9TdHJpbmciLCJjbGljayIsIlBsdWdpbkNlcnRpZmllciIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJpbml0T2JzZXJ2ZXIiLCJzaG93Q29udGVudEVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJwcmV2aW91c1ZlcnNpb24iLCJzaG93Q2hhbmdlbG9nTW9kYWwiLCJFbW9qaU1vZHVsZSIsInBhdGNoU29jaWFsIiwicGF0Y2hHdWlsZFBpbGxzIiwicGF0Y2hHdWlsZExpc3RJdGVtcyIsInBhdGNoR3VpbGRTZXBhcmF0b3IiLCJwYXRjaE1lc3NhZ2VIZWFkZXIiLCJwYXRjaE1lbWJlckxpc3QiLCJwYXRjaEF0dGFjaG1lbnQiLCJoYXZlSW5zdGFsbGVkRGVmYXVsdCIsIm9uQ2xvc2UiLCJsb2dvIiwiaW5uZXJIVE1MIiwiYXR0cmlic1BhdGNocyIsImNhbmNlbFBhdGNoQXR0cmlidXRlcyIsIkFuY2hvciIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsImJhZGdlRGl2IiwibWFyZ2luVG9wIiwidXNlciIsIlRvb2x0aXBXcmFwIiwic2lkZSIsImhyZWYiLCJ0YXJnZXQiLCJCRExvZ28iLCJMaWdodGNvcmRMb2dvIiwiYXBwbHlCYWRnZXMiLCJ0aW1lc0NoZWNrZWQiLCJ3cmFwcGVyIiwiZ3VpbGRDbGFzc2VzIiwiZ3VpbGQiLCJsaXN0SXRlbSIsImJsb2IiLCJibG9iQ29udGFpbmVyIiwiZGVmZXJMb2FkZWQiLCJyZWFkeVN0YXRlIiwiaW5qZWN0RXh0ZXJuYWxzIiwic2F2ZVNldHRpbmdzIiwibG9hZFNldHRpbmdzIiwic2V0dGluZyIsImdldFByZWRpY2F0ZVNlY3Rpb25zIiwic2V0dGluZ01vZHVsZSIsInNlY3Rpb24iLCJwb3BlZCIsInBvcCIsInJlbmRlclNpZGViYXIiLCJjbGFzc05hbWVMYXllciIsImNsYXNzTmFtZVNvY2lhbExpbmtzIiwiY2xhc3NOYW1lTW9kYWwiLCJtYWluT2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibWxlbiIsIm11dGF0aW9uIiwicmF3T2JzZXJ2ZXIiLCJhZGRlZE5vZGVzIiwiYW5pbWF0aW5nIiwic29jaWFsTGlua3MiLCJtb2RhbCIsImlubmVyIiwicmVzcG9uc2l2ZVdpZHRoTW9iaWxlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJzb2NpYWxNb2R1bGUxIiwib3JpZ2luYWwiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJsaW5rIiwiY2xhc3NOYW1lQ29sb3JNdXRlZCIsInNpemVzIiwiY2xhc3NOYW1lVmVyc2lvbkhhc2giLCJjb2xvck11dGVkIiwic2l6ZTMyIiwidmVyc2lvbkhhc2giLCJicmFuY2giLCJidWlsZEluZm8iLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJjb21taXQiLCJvcmlnaW5hbFZlcnNpb25zIiwiZ2V0R3VpbGRDbGFzc2VzIiwiZ3VpbGRzV3JhcHBlciIsImZpbmRCeVByb3BzIiwiZ3VpbGRzIiwicGlsbCIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbUNsYXNzIiwiYmxvYkNsYXNzIiwicmVhY3RJbnN0YW5jZSIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwidGhpc09iamVjdCIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkF0dGFjaG1lbnRQYXRjaCIsIkF0dGFjaG1lbnQiLCJhdHRhY2htZW50IiwiZ2V0TmVzdGVkUHJvcCIsInBhdGNoIiwibWVzc2FnZUhlYWRlclBhdGNoIiwiTWVzc2FnZUhlYWRlciIsImNoYXQiLCJuZXh0VGljayIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGROb2RlcyIsImJsb2NrRGl2IiwiZGlzdGFudCIsImdldEJhZGdlcyIsImJhZGdlcyIsInN2ZyIsIndpZHRoIiwic2NvcGVzIiwic2NvcGUiLCJjb21wb25lbnQiLCJkaXYyIiwicmVhY3REb20iLCJtZW1iZXJMaXN0UGF0Y2giLCJNZW1iZXJMaXN0SXRlbSIsInJlbmRlckRlY29yYXRvcnMiLCJ1cGRhdGVJbmplY3RvciIsImluamVjdGlvblBhdGgiLCJyZWxlYXNlQ2hhbm5lbCIsImdsb2JhbHMiLCJhcHAiLCJnZXRSZWxlYXNlQ2hhbm5lbCIsImVudiIsIkFQUERBVEEiLCJIT01FIiwiWERHX0NPTkZJR19IT01FIiwic3RhYmxlIiwiY2FuYXJ5IiwicHRiIiwicGx1Z2luRGF0YSIsIkJERmlsZSIsIndyaXRlRmlsZVN5bmMiLCJzZXR0aW5nc0ZpbGUiLCJ1bmxpbmtTeW5jIiwiX2luamVjdGlvblBhdGgiLCJjb25maWdGaWxlIiwiX2NvbmZpZ0ZpbGUiLCJfQkRGaWxlIiwiX3NldHRpbmdzRmlsZSIsImdldFBsdWdpbkZpbGUiLCJEZXZNb2RlIiwiZGVidWdMaXN0ZW5lciIsImNvcHlTZWxlY3Rvckxpc3RlbmVyIiwic3RhcnREZWJ1Z0xpc3RlbmVyIiwic3RhcnRDb3B5U2VsZWN0b3IiLCJzdG9wRGVidWdMaXN0ZW5lciIsInN0b3BDb3B5U2VsZWN0b3IiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsInNlbGVjdG9yIiwiZ2V0U2VsZWN0b3IiLCJjbGFzc0xheWVyIiwiY2xhc3NJdGVtcyIsImRpc2FibGVkUG9pbnRlckV2ZW50cyIsIm1lbnUiLCJhdHRhY2giLCJjbSIsInF1ZXJ5IiwiY29udGFpbmVyIiwibGF5ZXJDb250YWluZXIiLCJjbVdyYXAiLCJzdHlsZUZsZXhpYmxlIiwiYWNjb21tb2RhdGVTY3JvbGxiYXIiLCJhcHBlbmQiLCJjbGllbnRZIiwiY2xpZW50WCIsInNjcm9sbGVyQ2xhc3NlcyIsInNjcm9sbGVyV3JhcCIsInNjcm9sbGVyVGhlbWVkIiwidGhlbWVHaG9zdEhhaXJsaW5lIiwic2Nyb2xsZXIiLCJyZW1vdmVDTSIsImtleUNvZGUiLCJjbWciLCJjbWkiLCJpdGVtIiwibGFiZWxDb250YWluZXIiLCJjb2xvckRlZmF1bHQiLCJsYWJlbCIsIk5hdGl2ZU1vZHVsZSIsImNvcHkiLCJlbGVtZW50cyIsInF1ZXJ5QWxsIiwiZm9jdXNlZCIsInNlcGFyYXRvciIsInNjcm9sbEhlaWdodCIsImZ1bGxQYXRoIiwiZWwiLCJuYW1lcyIsInBhcmVudE5vZGUiLCJ1bnNoaWZ0Iiwib3duZXJEb2N1bWVudCIsInRhZ05hbWUiLCJlbnRyaWVzIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsIkRpc2FibGVUeXBpbmciLCJzdGFydFR5cGluZyIsInR5cGluZ01vZHVsZSIsImRpc2FibGVkIiwic3RvcFR5cGluZyIsInJhbmRvbSIsInYiLCJhd2FpdGluZ0JhZGdlc1Byb21pc2VzIiwiYmFkZ2VzVG9GZXRjaCIsIkRpc3RhbnRTZXJ2ZXIiLCJfY2FjaGUiLCJuZXdQcm9taXNlIiwicmVzIiwiQ29uc3RhbnRzIiwiZGVmYXVsdFVzZXJzIiwiZmV0Y2hlZEJhZGdlcyIsInVzZXJzIiwiaGFuZGxlUmVxdWVzdCIsIlJvdXRlcyIsInN0YXR1cyIsInJlc3BvbnNlQm9keSIsImpzb24iLCJwcm9taXNlIiwidXNlcl9pZCIsImNhdGNoIiwiTGlnaHRjb3JkRXJyb3IiLCJyb3V0ZSIsInJlamVjdCIsIm5vZGVGZXRjaCIsIlNFUlZFUl9VUkwiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkJ1Z0h1bnRlckJhZGdlIiwiQ2lyY3VzIiwiaGVhZCIsInNjcmlwdCIsInNyYyIsIm9ubG9hZCIsImFuaW1hdGUiLCJfIiwidXBkYXRlIiwicGVyZm9ybWFuY2UiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aW1lIiwidGltZUZyYWN0aW9uIiwicHJvZ3Jlc3MiLCJRIiwicGFyc2VIVE1MIiwiaXNIVE1MIiwiTm9kZUxpc3QiLCJzb21lIiwibiIsIm5vZGVUeXBlIiwiYmFzZUVsZW1lbnQiLCJodG1sIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImNsb25lTm9kZSIsImVzY2FwZUhUTUwiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwic3BhbkVsZW1lbnQiLCJub2RlVmFsdWUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJjbGFzc25hbWUiLCJpbmRpY2F0b3IiLCJoYXNDbGFzcyIsImV2ZXJ5IiwicmVwbGFjZUNsYXNzIiwib2xkTmFtZSIsIm5ld05hbWUiLCJhcHBlbmRUbyIsInRoaXNOb2RlIiwidGhhdE5vZGUiLCJwcmVwZW5kVG8iLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJ0YXJnZXROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJuZXdOb2RlIiwibmV4dCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJtYXRjaGVzIiwicHJldmlvdXMiLCJwcmV2aW91c0FsbCIsInByZXZpb3VzVW50aWwiLCJpbmRleEluUGFyZW50IiwibnVtIiwicGFyZW50IiwiZmluZENoaWxkIiwiZmluZENoaWxkcmVuIiwicGFyZW50cyIsImNsb3Nlc3QiLCJwYXJlbnRzVW50aWwiLCJzaWJsaW5ncyIsImF0dHJpYnV0ZSIsImdsb2JhbCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJ0ZXh0Q29udGVudCIsIm91dGVyV2lkdGgiLCJvZmZzZXRXaWR0aCIsIm91dGVySGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwib2Zmc2V0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwibGlzdGVuZXJzIiwiX2xpc3RlbmVycyIsIm9uIiwiZXZlbnQiLCJkZWxlZ2F0ZSIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwiY2FuY2VsIiwibmV3Q2FuY2VsIiwib25jZSIsIl9fb2ZmQWxsIiwibWF0Y2hGaWx0ZXIiLCJsaXN0ZW5lciIsImRlZmF1bHRGaWx0ZXIiLCJvbk1vdW50Q2hhbmdlIiwib25Nb3VudCIsIndyYXBwZWRDYWxsYmFjayIsIm9ic2VydmVyIiwibm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJkaXJlY3RNYXRjaCIsInBhcmVudE1hdGNoIiwib25Vbm1vdW50Iiwib25BZGRlZCIsIndyYXAiLCJkb21XcmFwcGVyIiwicmVzb2x2ZUVsZW1lbnQiLCJFbW9qaVJlZ2V4IiwiQ3VzdG9tRW1vamlNb2R1bGUiLCJDdXN0b21FbW9qaSIsIkVtb2ppTW9kdWxlQXBpIiwiZ2V0Q3VzdG9tRW1vamlCeUlkIiwiQXV0b2NvbXBsZXRlTW9kdWxlIiwiQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMiLCJnZXRBdXRvY29tcGxldGVPcHRpb25zIiwiRW1vamlNb2R1bGVRdWVyeSIsInF1ZXJ5RW1vamlSZXN1bHRzIiwiTWVzc2FnZXMiLCJFTU9KSV9NQVRDSElORyIsImd1aWxkTW9kdWxlIiwiZ2V0R3VpbGQiLCJnZXRHdWlsZHMiLCJpc0ZldGNoaW5nIiwiZW1vamlTZWFyY2giLCJnZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0IiwiYXBwU2V0dGluZ3MiLCJnZXRWYWx1ZSIsIkxJR0hUQ09SRF9FTU9KSVMiLCJhcmcxIiwiYXJnMiIsImNvbmRpdGlvbiIsInNldEVtb2ppVXNhYmxlIiwicXVlcnlSZXN1bHRzIiwicmVzdWx0cyIsInJlbmRlclJlc3VsdHMiLCJEIiwiZW1vamlzIiwiRU1PSkkiLCJFbW9qaSIsImVtb2ppIiwidW5pcXVlTmFtZSIsInNlbnRpbmVsIiwiZ3VpbGRJZCIsImdldFBsYWluVGV4dCIsImlzQW5pbWF0ZWQiLCJhbmltYXRlZCIsIm1hbmFnZWQiLCJvcmlnaW5hbE5hbWUiLCJnZXRSYXdUZXh0IiwiY2FuY2VsRW1vamlSZW5kZXIiLCJjYW5jZWxFbW90ZVJlbmRlciIsIm5ld0NvbnRlbnQiLCJoYXNQYXJzZWQiLCJleGVjIiwicmF3Iiwid29yZHMiLCJ3b3JkIiwiYXJyIiwiZW1vamlJZCIsImp1bWJvYWJsZSIsInJlZHVjZSIsImN1cnJlbnQiLCJzaGlmdCIsIm8iLCJ1IiwiZCIsIm9uQ2xpY2siLCJvbkhvdmVyIiwiUiIsInByZWZpeCIsIlRpdGxlIiwiRW1vamlGaWx0ZXJNb2R1bGUiLCJpc0Vtb2ppRGlzYWJsZWQiLCJpc1VzYWJsZSIsInVzYWJsZSIsInN1cnJvZ2F0ZXMiLCJkaXZlcnNpdHkiLCJ1c2VTdGF0ZSIsInVzZUZvcmNlVXBkYXRlIiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJ0ZXN0cyIsInRocmVhdHMiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwibm9fY29tbWVudHMiLCJyZW1vdmVDb21tZW50Iiwic2NycHQiLCJoYXNoVG9VcmwiLCJjaGVja0hhc2giLCJfX3BhdGgiLCJpc0Zyb21Mb2FkZXIiLCJjcnlwdG8iLCJhbGxvYyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJjaHVuayIsImNvbmNhdCIsImhhc2hSZXN1bHQiLCJkaWdlc3QiLCJyZW5kZXJUb0VsZW1lbnRzIiwiZmxvd2VyU3Rhck1vZHVsZSIsImZsb3dlclN0YXJDb250YWluZXIiLCJjaGlsZE1vZHVsZSIsImNoaWxkQ29udGFpbmVyIiwiYm9yZGVyQ29sb3IiLCJuZXh0Tm9kZSIsImNvbmZpcm1UZXh0IiwiZGFuZ2VyIiwib25DYW5jZWwiLCJvbkNvbmZpcm0iLCJ0b29sdGlwV3JhcCIsInZpZXdCb3giLCJ4IiwieSIsIm1hc2siLCJmaWxsIiwicG9pbnRlckV2ZW50cyIsIm9mZmljaWFsIiwic3BhbiIsImZsb2F0IiwiZmxvd2VyU3RhciIsImdldEtleWVkQXJyYXkiLCJidWZmZXIiLCJpbnN0YWxsUGF0aCIsImN1cnNvciIsInN0cm9rZSIsInNhdmUiLCJPYmplY3RTdG9yYWdlIiwibG9jYWxTdG9yYWdlTW9kdWxlIiwibG9jYWxTdG9yYWdlIiwiaW1wbCIsImJ0b2EiLCJzZXRJbnRlcnZhbCIsInNhZmVKU09OUGFyc2UiLCJhdG9iIiwiZ2VuZXJhdGVLZXkiLCJkZWNpcGhlciIsImRlY3J5cHRlZCIsImZpbmFsIiwiY2lwaGVyIiwiZW5jcnlwdGVkIiwiUGx1Z2luTW9kdWxlIiwibG9hZFBsdWdpbkRhdGEiLCJsb2FkIiwic2F2ZVBsdWdpbkRhdGEiLCJyZW1vdGUiLCJnZXRDdXJyZW50V2ViQ29udGVudHMiLCJjaGFubmVsU3dpdGNoIiwic3RhcnRQbHVnaW4iLCJzdG9wUGx1Z2luIiwiZW5hYmxlUGx1Z2luIiwiZGlzYWJsZVBsdWdpbiIsInRvZ2dsZVBsdWdpbiIsInAiLCJmaWxlbmFtZU9yTmFtZSIsImJkcGx1Z2luIiwiZGVsZXRlIiwiZWRpdCIsInNoZWxsIiwib3BlbkV4dGVybmFsIiwidXBkYXRlUGx1Z2luTGlzdCIsInNhdmVkIiwibmV3TWVzc2FnZSIsIm9uTWVzc2FnZSIsIm9uU3dpdGNoIiwicG9wb3V0V2luZG93Iiwid2luZG93cyIsIk1hcCIsInBvcG91dE1vZHVsZSIsImdldFdpbmRvdyIsInNldEltbWVkaWF0ZSIsImJkRXZlbnRzIiwicmVtb3ZlVGhlbWVzIiwiYXBwbHlUaGVtZXMiLCJ0aGVtZU5hbWUiLCJ0aGVtZSIsImV4aXN0aW5nIiwidW5lc2NhcGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJWMl9QdWJsaWNTZXJ2ZXJzIiwiX2FwcGVuZEJ1dHRvbiIsIlYyQ19QdWJsaWNTZXJ2ZXJzIiwicm9vdElkIiwiYnV0dG9uIiwiYnRuIiwiY2lyY2xlQnV0dG9uTWFzayIsImNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyIiwiZG93bmxvYWRQcm9ncmVzcyIsInR1dG9yaWFsQ29udGFpbmVyIiwiYWRkQnV0dG9uIiwiZ3VpbGRQYXRjaCIsIkd1aWxkTGlzdCIsIndlYnBhY2tNb2R1bGVzIiwiR3VpbGRMaXN0T2xkIiwicmVtb3ZlQnV0dG9uIiwiQkRTaWRlYmFySGVhZGVyIiwiUHVyZUNvbXBvbmVudCIsInNpZGViYXJDb21wb25lbnRzIiwiSGVhZGVyIiwiSXRlbSIsImNoYW5nZWxvZ0J1dHRvbiIsIkhpc3RvcnkiLCJyZW5kZXJlZCIsImlzQ2xlYXJpbmdDYWNoZSIsIlYyX1NldHRpbmdzUGFuZWwiLCJ1cGRhdGVTZXR0aW5ncyIsInNpZGViYXIiLCJWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIiLCJyZWdpc3RlckNvbXBvbmVudHMiLCJyZWdpc3RlciIsIm1ha2VDb21wb25lbnQiLCJsaWdodGNvcmRDb21wb25lbnQiLCJQcmVzZW5jZUNvbXBvbmVudCIsIkFjY291bnRJbmZvc0NvbXBvbmVudCIsIkFwaVByZXZpZXdDb21wb25lbnQiLCJjb3JlQ29tcG9uZW50IiwiY3VzdG9tQ3NzQ29tcG9uZW50IiwicmVuZGVyQWRkb25QYW5lIiwiY29yZVNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJjYXRlZ29yaWVzIiwiU2V0Iiwic2VjdGlvbnMiLCJQcmVzZW5jZVNldHRpbmdzIiwiY2hlY2tlZCIsInB1YmxpY1NlcnZlcnNNb2R1bGUiLCJ2b2ljZU1vZGUiLCJ0ZkhvdXIiLCJjb2xvcmVkVGV4dCIsImRNb2RlIiwiU2V0dGluZ3MiLCJkZXZNb2RlIiwiY2FsbFJpbmdpbmdCZWF0Iiwic2V0dGluZ3NTdG9yZSIsInNob3dDdXJyZW50R2FtZSIsInVwZGF0ZVJlbW90ZVNldHRpbmdzIiwiaXBjUmVuZGVyZXIiLCJBbnRpQWRETSIsImJsdXJQcml2YXRlIiwiZGlzYWJsZVR5cGluZyIsInJlbGF1bmNoIiwiY29yZSIsIk5vdGlmaWNhdGlvbnNVc2VTaGltIiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIk1hcmdpblRvcCIsImlzQ2hlY2tlZCIsIlRleHRJbnB1dFNldHRpbmciLCJwbGFjZWhvbGRlciIsIlN3aXRjaCIsIkNvbXBvbmVudHMiLCJpbnB1dHMiLCJCdXR0b24iLCJsb29rIiwiaG92ZXJDb2xvciIsImlwYyIsInNlbmQiLCJjaG9pY2VzIiwiYWN0dWFsIiwiZ2VuZXJhbCIsIlNldHRpbmdTdWJUaXRsZSIsIkRyb3Bkb3duIiwic2VhcmNoYWJsZSIsImNsZWFyYWJsZSIsImludm9rZSIsImFyZ3YiLCJzZXNzaW9uIiwiY2xlYXJDYWNoZSIsIlYyQ19QcmVzZW5jZVNldHRpbmdzIiwiVjJDX0FjY291bnRJbmZvcyIsIkFwaVByZXZpZXciLCJDc3NFZGl0b3IiLCJDb250ZW50TGlzdCIsIm9yaWdpbmFsUmVuZGVyIiwiZW51bWVyYWJsZSIsIkNhcmRMaXN0IiwiU2V0dGluZ0NvbXBvbmVudCIsInBhbmVscyIsInBhbmVsIiwiZ2V0Q29tcG9uZW50IiwiTENpdGVtcyIsIkxDRGV2SXRlbXMiLCJUaGVtZU1vZHVsZSIsImxvYWRUaGVtZURhdGEiLCJzYXZlVGhlbWVEYXRhIiwiZW5hYmxlVGhlbWUiLCJkaXNhYmxlVGhlbWUiLCJ0b2dnbGVUaGVtZSIsImJkdGhlbWUiLCJ1cGRhdGVUaGVtZUxpc3QiLCJfd2luZG93Q29uZmlnRmlsZSIsInRyYW5zcGFyZW50IiwiZnJhbWUiLCJjaGFyQ29kZUF0IiwiZ2V0VGV4dEFyZWEiLCJjaGFubmVsVGV4dEFyZWEiLCJ0aXRsZVdyYXBwZXIiLCJpbnNlcnRUZXh0IiwidGV4dGFyZWEiLCJmb2N1cyIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiZXhlY0NvbW1hbmQiLCJtb2R1bGVOYW1lIiwiZ3JvdXBDb2xsYXBzZWQiLCJncm91cEVuZCIsImZvcm1hdFN0cmluZyIsInN0cmluZyIsInJlcGxhY2VtZW50IiwiZXNjYXBlIiwicGFyYW1zIiwiaW5zdGVhZCIsInNpbGVudCIsImZvcmNlIiwib3JpZ01ldGhvZCIsImNhbmNlbGVkIiwiY2FuY2VsUGF0Y2giLCJvcmlnaW5hbE1ldGhvZCIsImNhbGxPcmlnaW5hbE1ldGhvZCIsInRlbXBSZXQiLCJfX21vbmtleVBhdGNoZWQiLCJkaXNjb25uZWN0IiwiaGFzTm90aWNlIiwiZm9ybSIsInRvYXN0V3JhcHBlciIsImljb24iLCJ0aW1lb3V0IiwidG9hc3RFbGVtIiwiaW5uZXJUZXh0IiwibW9kYWxNb2R1bGUiLCJoaWRlT25GdWxsc2NyZWVuIiwiaGVhZGVyTW9kdWxlIiwiaGVhZGVyIiwiZm9vdGVyMk1vZHVsZSIsImZvY3VzTG9jayIsImJhY2tkcm9wIiwiYmFja2Ryb3BXaXRoTGF5ZXIiLCJjbG9zaW5nTGlzdGVuZXJzIiwicGx1Z2luRXJyb3JzIiwidGhlbWVFcnJvcnMiLCJnZW5lcmF0ZVRhYiIsInRhYnMiLCJNb2RhbFN0YWNrIiwiQ2hhbmdlbG9nQ2xhc3NlcyIsIlRleHRFbGVtZW50IiwiRmxleENoaWxkIiwiVGl0bGVzIiwiQ2hhbmdlbG9nIiwic2VsZWN0YWJsZSIsIk1hcmtkb3duUGFyc2VyIiwiaW1hZ2UiLCJzdWJ0aXRsZSIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJlbnRyeSIsIm1hcmdpbiIsInJlbmRlckhlYWRlciIsIkNoaWxkIiwiZ3JvdyIsInNocmluayIsInRhZyIsIlRhZ3MiLCJINCIsIlNpemVzIiwiU01BTEwiLCJDb2xvcnMiLCJTVEFOREFSRCIsImRhdGUiLCJyZW5kZXJGb290ZXIiLCJBbmNob3JDbGFzc2VzIiwiYW5jaG9yIiwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlciIsImpvaW5TdXBwb3J0U2VydmVyIiwiam9pbkJEMiIsInN1cHBvcnRMaW5rIiwiZGVmYXVsdEZvb3RlciIsIm9uU2Nyb2xsIiwiTW9kYWxBY3Rpb25zIiwiTWFya2Rvd24iLCJDb25maXJtYXRpb25Nb2RhbCIsImVtcHR5RnVuY3Rpb24iLCJvcGVuTW9kYWwiLCJyZWQiLCJtb2RhbEtleSIsIlYyIiwiZWRpdG9yRGV0YWNoZWQiLCJyZXEiLCJ3ZWJwYWNrSnNvbnAiLCJfX2V4dHJhX2lkX18iLCJzaG91bGRQcm90ZWN0IiwidGhlTW9kdWxlIiwiY2xlYXIiLCJzb3J0IiwiZ2V0VG9rZW4iLCJnZXRFbWFpbCIsInNob3dUb2tlbiIsInByb3RlY3QiLCJpc0RlZmF1bHQiLCJtb2QiLCJwcm94eSIsImZ1bmMiLCJfX3Byb3RvX18iLCJwcm9wTmFtZXMiLCJwcm90b05hbWVzIiwicHJvdG9Qcm9wIiwiaW50ZXJuYWwiLCJqb2luQkQxIiwiSW52aXRlQWN0aW9ucyIsImFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwiLCJsZWF2ZUJEMSIsIkd1aWxkQWN0aW9ucyIsImxlYXZlR3VpbGQiLCJsZWF2ZUJEMiIsImpvaW5MQyIsImxlYXZlTEMiLCJyZWFjdENvbXBvbmVudCIsImFuY2hvckNsYXNzZXMiLCJzbGF0ZUVkaXRvckNsYXNzZXMiLCJtZXNzYWdlQ2xhc3NlcyIsInVucmVhZE1lbnRpb25zQmFyIiwiZ3VpbGRzRXJyb3IiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIlRvb2x0aXBXcmFwcGVyIiwiVG9vbHRpcHMiLCJoaWRlIiwic2hvdyIsInN1Ym1pdCIsImFjdGl2YXRlUmFnaW5nRGVtb24iLCJkaXNtaXNzIiwiS2V5R2VuZXJhdG9yIiwiTGF5ZXJTdGFjayIsIlVzZXJTdG9yZSIsIkNoYW5uZWxTdG9yZSIsIkNoYW5uZWxBY3Rpb25zIiwiUHJpdmF0ZUNoYW5uZWxBY3Rpb25zIiwib3BlbkRNIiwidXNlcklkIiwic2VsZklkIiwicHJpdmF0ZUNoYW5uZWxJZCIsImdldERNRnJvbVVzZXJJZCIsInNlbGVjdFByaXZhdGVDaGFubmVsIiwib3BlblByaXZhdGVDaGFubmVsIiwicGFyc2VTZXR0aW5ncyIsIlZvaWNlTW9kZSIsIm1hcmdpbk1vZHVsZTIiLCJkZWZhdWx0TWFyZ2luaDUiLCJjb2xvck1vZHVsZSIsImNvbG9yU3RhbmRhcmQiLCJzaXplTW9kdWxlIiwic2Nyb2xsYmFyTW9kdWxlMSIsInNjcm9sbGJhckdob3N0SGFpcmxpbmUiLCJHdWlsZE1vZHVsZSIsImdldFJlbGF0aW9uc2hpcHMiLCJzZXNzaW9uTW9kdWxlIiwiZ2V0U2Vzc2lvbnMiLCJzaXplMTQiLCJoNSIsImdldFByb2ZpbGVWYWx1ZSIsImdldFN0YXRpc3RpY3MiLCJnZXRTZXNzaW9uVmFsdWUiLCJtYXJnaW5Cb3R0b20yMCIsInNlc3Npb25zUmF3Iiwic2Vzc2lvbnMiLCJzZXNzaW9uSWQiLCJjbGllbnRJbmZvIiwib3MiLCJjbGllbnQiLCJhY3Rpdml0aWVzIiwicmVwZWF0IiwiY3JlYXRlZEF0IiwiYXZhdGFyVVJMIiwiYXZhdGFyIiwiZ2V0QXZhdGFyVVJMIiwiZ2V0RGF0ZSIsImdldE1vbnRoIiwiZ2V0RnVsbFllYXIiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZmxhZ3MiLCJoYXNQcmVtaXVtU3Vic2NyaXB0aW9uIiwiZW1haWwiLCJtZmFFbmFibGVkIiwibW9iaWxlIiwicGhvbmUiLCJ2ZXJpZmllZCIsIm5zZndBbGxvd2VkIiwicmVsYXRpb25zIiwiZnJpZW5kcyIsImlzRnJpZW5kIiwiaXNCbG9ja2VkIiwiaGlnaHRsaWdodEpTIiwiaGlnaGxpZ2h0IiwibWVzc2FnZU1vZHVsZTEiLCJtZXNzYWdlTW9kdWxlMiIsIkNvZGVDb250ZW50IiwibGlzdExhbmd1YWdlcyIsIl9faHRtbCIsImxhbmd1YWdlIiwibWFyZ2luQm90dG9tOCIsImZvcm1Nb2R1bGUiLCJzdGF0ZXMiLCJGb3JtU2VjdGlvbiIsImFsbENvbXBvbmVudHMiLCJjb21wIiwiY29tcE5hbWUiLCJjb21wUGF0aCIsInJlbmRlcnMiLCJDb21wb25lbnRQcmV2aWV3IiwidGFiIiwiQWxsUHJldmlld3MiLCJnZXRQcm9wcyIsInJlbmRlclByZXZpZXciLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwicmVuZGVyQ29kZSIsImdlbmVyYXRlQ29kZSIsImdldFN0ckZvclByb3AiLCJsYW5nIiwiU3RyaW5nIiwiJCR0eXBlb2YiLCJTeW1ib2wiLCJmb3IiLCJjb21wQ2F0ZWdvcnkiLCJwcm9wU3RyaW5ncyIsImNoaWxkcmVuUHJvcCIsInN0ciIsIm9wZW5UYWciLCJjbG9zZVRhZyIsInZpc2libGVLZXkiLCJwcm9wT2JqZWN0IiwiaXNMYXN0IiwiaXNGaXJzdCIsImNoaWxkcmVuRGF0YSIsImhlbHAiLCJzdWNjZXNzIiwic2V0U3RhdGUiLCJtYXJnaW5Cb3R0b20iLCJjbGFzc25hbWVzIiwiZ2V0Q2xhc3NOYW1lIiwiYmV0YSIsInVzZXJTZXR0aW5nc1ZvaWNlIiwiZmxleCIsIlYyQ19QbHVnaW5DYXJkIiwic2hvd1NldHRpbmdzIiwic2V0SW5pdGlhbFN0YXRlIiwiaGFzU2V0dGluZ3MiLCJhZGRvbiIsImdldFNldHRpbmdzUGFuZWwiLCJyZWxvYWRzIiwidHJ1c3RlZCIsImNsb3NlU2V0dGluZ3MiLCJwYW5lbFJlZiIsInNldHRpbmdzT3BlbiIsImNvbXBvbmVudERpZFVwZGF0ZSIsInJlZnMiLCJzZXR0aW5nc3BhbmVsIiwiaXNIaWRkZW4iLCJjVG9wIiwic2Nyb2xsVG9wIiwiY0JvdHRvbSIsImVUb3AiLCJvZmZzZXRUb3AiLCJlQm90dG9tIiwiY2FyZE5vZGUiLCJ0aGlzTm9kZU9mZnNldCIsImNvbnRhaW5lck9mZnNldCIsImVuZFBvaW50IiwiZ2V0U3RyaW5nIiwic2V0dGluZ3NDb21wb25lbnQiLCJyZWYiLCJYU3ZnIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJidWlsZFRpdGxlIiwibmFtZUluZGV4IiwidmVyc2lvbkluZGV4IiwiYXV0aG9ySW5kZXgiLCJwb3BMYXllciIsIm1ha2VMaW5rIiwibWFrZUJ1dHRvbiIsImFjdGlvbiIsInVubW91bnRlZCIsImxpbmtzIiwiaW52aXRlIiwidGVzdGVyIiwiZG9uYXRlIiwicGF0cmVvbiIsImF1dGhvcklkIiwiYXV0aG9yTGluayIsImlzU2Nhbm5pbmciLCJUb29sdGlwIiwiYXNjZW5kaW5nIiwiaXNQbHVnaW5zIiwicmV2ZXJzZSIsIm9uQWRkb25DaGFuZ2VzIiwib3BlbkZvbGRlciIsIm9wZW5QYXRoIiwib3Blbkl0ZW0iLCJzaG91bGREZWxldGUiLCJjb25maXJtRGVsZXRlIiwic29ydE9wdGlvbnMiLCJkaXJlY3Rpb25zIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJnZXRBZGRvbnMiLCJzb3J0ZWRBZGRvbnMiLCJiIiwiY2FwIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwicmVuZGVyQ2hlY2tVcGRhdGVzIiwiWmVyZXNQbHVnaW5MaWJyYXJ5IiwiUGx1Z2luVXBkYXRlcyIsImNoZWNrQWxsIiwidG9vbHRpcElzU2hvd2luZyIsInRvb2x0aXAiLCJtYXJnaW5MZWZ0IiwiY2hlY2tVcGRhdGVCdXR0b24iLCJFbXVsYXRlZFRvb2x0aXAiLCJhdHRhY2hFdmVudHMiLCJyZWZyZXNoSWNvbiIsImFkZG9uQ2FyZHMiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwiVjJDX0NoZWNrYm94IiwiY2hlY2tib3hFbGVtZW50IiwiY2hlY2tib3giLCJjaGVja2JveElubmVyIiwiU2VsZWN0IiwiZHJvcGRvd24iLCJjcmVhdGVSZWYiLCJzaG93TWVudSIsImhpZGVNZW51Iiwib3B0IiwiaXNPcGVuIiwiU2VhcmNoIiwib25LZXlEb3duIiwic3dpdGNoIiwiVGV4dElucHV0IiwiZW1pdENoYW5nZSIsImlucHV0IiwiVjJDX0NvbnRlbnRDb2x1bW4iLCJjb250ZW50TW9kdWxlIiwiY29udGVudENvbHVtbiIsImNvbnRlbnRDb2x1bW5EZWZhdWx0IiwiVjJDX0Nzc0VkaXRvciIsImxpbmVzIiwiZGV0YWNoZWRFZGl0b3IiLCJWMkNfQ3NzRWRpdG9yRGV0YWNoZWQiLCJ1cGRhdGVDc3MiLCJzYXZlQ3NzIiwiZGV0YWNoIiwiZGV0YWNoZWQiLCJlZGl0b3IiLCJhY2UiLCJzZXRUaGVtZSIsInNldE1vZGUiLCJzZXRTaG93UHJpbnRNYXJnaW4iLCJzZXRGb250U2l6ZSIsImRlc3Ryb3kiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwiZGV0YWNoZWRSb290IiwiY29kZU1pcnJvciIsImxpbmVOdW1iZXJzIiwibW9kZSIsImluZGVudFVuaXQiLCJzY3JvbGxiYXJTdHlsZSIsIl9jY3NzIiwiY2NzcyIsInVwZGF0ZUxpbmVDb3VudCIsImxpbmVDb3VudCIsIlNldHRpbmdzVGl0bGUiLCJDaGVja2JveCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyTGVmdCIsImZvbnRTaXplIiwiYXJnIiwiZHJvb3QiLCJfcm9vdCIsImluamVjdERldGFjaGVkUm9vdCIsInJvb3QiLCJpbmplY3RSb290IiwiQkRFcnJvckJvdW5kYXJ5IiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsIkRlbGV0ZSIsIkRvd25BcnJvdyIsIkVkaXQiLCJtYXJnaW5Nb2R1bGUiLCJtYXJnaW5Ub3A2MCIsIlYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyIsInByZXZpZXciLCJpc2ZldGNoaW5nIiwiYXNzZXRDb21wb25lbnRzIiwidXBkYXRlV2hlbkZldGNoZWQiLCJkZWZhdWx0U2V0dGluZyIsIlJQQ1Byb3BzIiwiYXNzZXQiLCJ1cGRhdGVQcmV2aWV3Iiwib3B0aW9uc0NvbXBvbmVudHMiLCJvaGdvZG9oZnVjayIsIl9vcHRpb25zQ29tcG9uZW50cyIsImFycmF5IiwiaW5wdXRUZXh0TW9kdWxlcyIsIklucHV0VGV4dCIsInJlbW92ZUtleWJpbmQiLCJfaG9yaXpvbnRhbCIsImlucHV0TWluaSIsInNpemUxNiIsInNpemUyMCIsImxhc3RFZGl0ZWQiLCJpc1RpbWluZyIsInJvd01vZHVsZSIsImZsZXhNb2R1bGUiLCJpbnB1dE1vZHVsZSIsInNpemVNb2R1bGUyIiwicm93IiwiZmxleENoaWxkIiwiSW5wdXROdW1iZXJNb2R1bGVzIiwiSW5wdXROdW1iZXIiLCJjb2xvclRyYW5zcGFyZW50Iiwic2V0VmFsdWUiLCJjbGlwYm9hcmQiLCJJbnB1dENob2ljZU1vZHVsZXMiLCJJbnB1dENob2ljZSIsIkRpdmlkZXJNb2R1bGVzIiwiRGl2aWRlciIsImRpdmlkZXIiLCJkaXZpZGVyRGVmYXVsdCIsIkRpc2NvcmRCdXR0b24iLCJScGNQcmV2aWV3IiwiYWN0aXZlIiwiY2hhbmdlVGFiIiwiYW5jaWVudFRhYiIsInNldEFjdGl2ZSIsInJwYyIsImlzQWN0aXZlIiwiUHJvZmlsZSIsIlBvcG91dCIsIlRhYiIsImVtcHR5Q2xhc3NlcyIsIlByZXNlbmNlRXJyb3JDYXRjaGVyIiwiZXJySW5mbyIsImVtcHR5U3RhdGVJbWFnZSIsImVtcHR5U3RhdGUiLCJlbXB0eVN0YXRlSGVhZGVyIiwiZW1wdHlTdGF0ZVN1YnRleHQiLCJwb3BvdXRNb2R1bGVzIiwiVXNlclBvcG91dENvbXBvbmVudCIsIlBvcG91dFByb3BzIiwiVXNlclBvcG91dCIsInJlbmRlcjEiLCJjaGFubmVsSWQiLCJkaXNhYmxlVXNlclByb2ZpbGVMaW5rIiwiX1VzZXJQb3BvdXQiLCJwb3BvdXQiLCJleGNsdWRlUHJvcGVydGllcyIsInByb2ZpbGVNb2R1bGVzIiwiVXNlclByb2ZpbGVDb21wb25lbnQiLCJQcm9maWxlUHJvcHMiLCJjb25uZWN0ZWRQcm9maWxlU3RvcmUiLCJVc2VyUHJvZmlsZSIsInJlbmRlcjIiLCJyZW5kZXIzIiwicmVuZGVyNCIsInByb2ZpbGUiLCJTZXR0aW5nc1ZpZXciLCJjaGFuZ2VDYXRlZ29yeSIsInNlYXJjaEtleURvd24iLCJjaGVja0Nvbm5lY3Rpb24iLCJjb25uZWN0IiwiR3VpbGRTdG9yZSIsIkF2YXRhckRlZmF1bHRzIiwiU29ydGVkR3VpbGRTdG9yZSIsImhvb2tzIiwic2VsZWN0ZWRDYXRlZ29yeSIsImxvYWRpbmciLCJzZXJ2ZXJzIiwiY29ubmVjdGlvbiIsImNhdGVnb3J5U2x1Z3MiLCJmZXRjaCIsInNlYXJjaEVuZFBvaW50Iiwic2VydmVyIiwiam9pbmVkIiwiZW5kIiwidGVybSIsImNhdGVnb3J5QnV0dG9ucyIsInRvdGFsIiwic2VydmVyQ2FyZCIsInBpbm5lZCIsImFjY2VwdEludml0ZSIsImludml0ZV9jb2RlIiwiam9pbkVuZFBvaW50IiwiaWRlbnRpZmllciIsImNyZWRlbnRpYWxzIiwid2luZG93T3B0aW9ucyIsInJvdW5kIiwic2NyZWVuWCIsInNjcmVlblkiLCJ3aW4iLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInNldE1lbnVCYXJWaXNpYmlsaXR5IiwicmVzaXphYmxlIiwibWF4aW1pemFibGUiLCJtaW5pbWl6YWJsZSIsImFsd2F5c09uVG9wIiwiY2VudGVyIiwid2ViUHJlZmVyZW5jZXMiLCJub2RlSW50ZWdyYXRpb24iLCJiZFNlcnZlciIsIm9ubGluZSIsIm1lbWJlcnMiLCJpY29uVXJsIiwibmF0aXZlam9pbiIsInNlcnZlcjIiLCJndWlsZExpc3QiLCJnZXRGbGF0dGVuZWRHdWlsZElkcyIsImRlZmF1bHRMaXN0IiwiREVGQVVMVF9BVkFUQVJTIiwiU2VydmVyQ2FyZCIsImZhbGxiYWNrIiwiZmxvb3IiLCJjb25uZWN0RW5kUG9pbnQiLCJyZXNwb25zZSIsIm9uU2V0U2VjdGlvbiIsInNlYXJjaElucHV0IiwiZ2V0VGhpcyIsInNlcmNoaW5wdXQiLCJzZWFyY2hpbnB1dCIsIm1heExlbmd0aCIsIm5vdENvbm5lY3RlZCIsImNvbHVtbk1vZHVsZSIsIm1pbkhlaWdodCIsImxpbmVIZWlnaHQiLCJ1c2VFZmZlY3QiLCJUYWJCYXJTZXBhcmF0b3IiLCJWMkNfU2VydmVyQ2FyZCIsImltYWdlRXJyb3IiLCJjYXJkTW9kdWxlIiwiY2FyZCIsImNhcmRQcmltYXJ5IiwiX2hvcml6b250YWxSZXZlcnNlIiwid3JhcE1vZHVsZSIsIm5vV3JhcCIsInN0cmVhbWVyTW9kZUVuYWJsZWQiLCJvbkVycm9yIiwiaGFuZGxlRXJyb3IiLCJkcmFnZ2FibGUiLCJob3Jpem9udGFsIiwiVjJDX1JlbG9hZEljb24iLCJ4bWxucyIsIlYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiU2V0dGluZ3NHcm91cCIsInN3aXRjaEl0ZW0iLCJiZXRhQ2xhc3NOYW1lcyIsIlYyQ19TZXR0aW5nc0dyb3VwIiwicmVuZGVyT2xkU2V0dGluZ3MiLCJidXR0b25Db21wb25lbnQiLCJERUZBVUxUIiwiVjJDX1NldHRpbmdzVGl0bGUiLCJTd2l0Y2hJdGVtIiwiVjJDX1RhYkJhclNlcGFyYXRvciIsIlRvb2x0aXBDbGFzc2VzIiwiZ2V0VG9vbHRpcENsYXNzZXMiLCJUb29sdGlwTGF5ZXJzIiwiZ2V0VG9vbHRpcExheWVycyIsImdldENsYXNzIiwic2lkZU9yQ29sb3IiLCJ1cHBlckNhc2UiLCJ0b29sdGlwQ2xhc3MiLCJjbGFzc0V4aXN0cyIsInRvUHgiLCJwcmV2ZW50RmxpcCIsInRvb2x0aXBFbGVtZW50IiwibGFiZWxFbGVtZW50IiwidG9vbHRpcENvbnRlbnQiLCJwb2ludGVyRWxlbWVudCIsInRvb2x0aXBQb2ludGVyIiwicG9wb3V0cyIsImNhblNob3dBYm92ZSIsImNhblNob3dCZWxvdyIsImNhblNob3dMZWZ0IiwiY2FuU2hvd1JpZ2h0IiwiX2NsYXNzTmFtZSIsInNob3dBYm92ZSIsInNob3dCZWxvdyIsInNob3dMZWZ0Iiwic2hvd1JpZ2h0IiwiY2VudGVySG9yaXpvbnRhbGx5IiwiY2VudGVyVmVydGljYWxseSIsIm5vZGVjZW50ZXIiLCJmaW5kRE9NTm9kZSIsIlYyQ19YU3ZnIl0sIm1hcHBpbmdzIjoiOztRQUFBO1FBQ0E7O1FBRUE7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Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSx1Qzs7Ozs7Ozs7Ozs7QUNBQSxpQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiZXhwb3J0IGNvbnN0IG1pbmltdW1EaXNjb3JkVmVyc2lvbiA9IFwiMC4wLjMwOFwiO1xuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9ICh3aW5kb3cuRGlzY29yZE5hdGl2ZSAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24gJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24oKSkgfHwgXCIwLjAuMzA4XCI7XG5leHBvcnQgY29uc3QgbWluU3VwcG9ydGVkVmVyc2lvbiA9IFwiMC4zLjBcIjtcbmV4cG9ydCBjb25zdCBiYmRWZXJzaW9uID0gXCIwLjMuNVwiO1xuZXhwb3J0IGNvbnN0IGJiZENoYW5nZWxvZyA9IHtcbiAgICBkZXNjcmlwdGlvbjogXCJCaWcgdGhpbmdzIGFyZSBjb21pbmcuXCIsXG4gICAgY2hhbmdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogXCJCdWcgRml4ZXNcIixcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgXCJTb21lIGZpeGVzIHJlbGF0ZWQgdG8gc2hvd2luZyBtb2RhbHMgaW4gdGhlIGBCZEFwaWAuXCIsXG4gICAgICAgICAgICAgICAgXCJGaXhlZCB0aGUgb3BlbiBmb2xkZXIgYnV0dG9ucyBmb3IgcGx1Z2lucyBhbmQgdGhlbWVzXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIF1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICBcIkN1c3RvbSBjc3MgbGl2ZSB1cGRhdGVcIjogICAgIHtpZDogXCJiZGEtY3NzLTBcIiwgaW5mbzogXCJcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCAgY2F0OiBcImNvcmVcIn0sXG4gICAgXCJDdXN0b20gY3NzIGF1dG8gdWRwYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0xXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxuICAgIFwiQmV0dGVyRGlzY29yZCBCbHVlXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy1iXCIsICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLCAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IGZhbHNlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIn0sXG5cbiAgICAvKiBDb3JlICovXG4gICAgLyogPT09PT09ICovXG4gICAgXCJQdWJsaWMgU2VydmVyc1wiOiAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTFcIiwgIGluZm86IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJNaW5pbWFsIE1vZGVcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTJcIiwgIGluZm86IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzLlwiLCAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJWb2ljZSBNb2RlXCI6ICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTRcIiwgIGluZm86IFwiT25seSBzaG93IHZvaWNlIGNoYXRcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJIaWRlIENoYW5uZWxzXCI6ICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTNcIiwgIGluZm86IFwiSGlkZSBjaGFubmVscyBpbiBtaW5pbWFsIG1vZGVcIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJEYXJrIE1vZGVcIjogICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTVcIiwgIGluZm86IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdCh3aXApXCIsICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJWb2ljZSBEaXNjb25uZWN0XCI6ICAgICAgICAgICB7aWQ6IFwiYmRhLWRjLTBcIiwgIGluZm86IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCIyNCBIb3VyIFRpbWVzdGFtcHNcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLTZcIiwgIGluZm86IFwiUmVwbGFjZSAxMmhyIHRpbWVzdGFtcHMgd2l0aCBwcm9wZXIgb25lc1wiLCAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJDb2xvcmVkIFRleHRcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTdcIiwgIGluZm86IFwiTWFrZSB0ZXh0IGNvbG9yIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIiwgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJOb3JtYWxpemUgQ2xhc3Nlc1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy00XCIsIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuXG4gICAgLyogQ29udGVudCAqL1xuICAgIFwiQ29udGVudCBFcnJvciBNb2RhbFwiOiAgICAgICAge2lkOiBcImZvcmstcHMtMVwiLCBpbmZvOiBcIlNob3dzIGEgbW9kYWwgd2l0aCBwbHVnaW4vdGhlbWUgZXJyb3JzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXG4gICAgXCJTY2FuIFBsdWdpbnNcIjogICAgICAgICAgICAgICB7aWQ6IFwiZm9yay1wcy02XCIsIGluZm86IFwiU2NhbiBwbHVnaW5zIGZvciBhbnkgdGhyZWF0IHRoYXQgY2FuIGJlIGhpZGRlbiBpbnNpZGUuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXG4gICAgXCJTaG93IFRvYXN0c1wiOiAgICAgICAgICAgICAgICB7aWQ6IFwiZm9yay1wcy0yXCIsIGluZm86IFwiU2hvd3MgYSBzbWFsbCBub3RpZmljYXRpb24gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvblwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtM1wiLCBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiQXV0b21hdGljIExvYWRpbmdcIjogICAgICAgICAge2lkOiBcImZvcmstcHMtNVwiLCBpbmZvOiBcIkF1dG9tYXRpY2FsbHkgbG9hZHMsIHJlbG9hZHMsIGFuZCB1bmxvYWRzIHBsdWdpbnMgYW5kIHRoZW1lc1wiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiRW5hYmxlIEVkaXQgQnV0dG9uXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtN1wiLCBpbmZvOiBcIkVuYWJsZSBhbiBFZGl0IEJ1dHRvbiBvbiB0aGUgcGx1Z2luIGFuZCB0aGVtZSBwYW5lbC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcbiAgICBcIlRoZW1lcyBpbiBQb3BvdXQgV2luZG93XCI6ICAgIHtpZDogXCJsaWdodGNvcmQtOVwiLCBpbmZvOiBcIkVuYWJsZSB0aGVtZXMgaW4gUG9wb3V0IFdpbmRvdy4gKEZvciBleGFtcGxlLCB3aGVuIGRldGFjaGluZyBzY3JlZW5zaGFyZS4pXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIiwgZXhwZXJpbWVudGFsOiB0cnVlfSxcblxuICAgIC8qIERldmVsb3BlciAqL1xuICAgIFwiRGV2ZWxvcGVyIE1vZGVcIjogICAgICAgICBcdCAge2lkOiBcImJkYS1ncy04XCIsIGluZm86IFwiRGV2ZWxvcGVyIE1vZGUgVG9nZ2xlXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXG4gICAgXCJDb3B5IFNlbGVjdG9yXCI6XHRcdFx0ICB7aWQ6IFwiZm9yay1kbS0xXCIsIGluZm86IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxuXG4gICAgLyoqIExpZ2h0Y29yZCAqL1xuICAgIFwiRGlzYWJsZSBCZXR0ZXJEaXNjb3JkXCI6ICAgICAge2lkOiBcImJkLWRpc2FibGVcIiwgIGluZm86IFwiRGlzYWJsZSBCZXR0ZXJkaXNjb3JkIChwbHVnaW5zLCB0aGVtZXMsIGV0YykgKE5vdCBpbXBsZW1lbnRlZCkuXCIsIGltcGxlbWVudGVkOiBmYWxzZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXG4gICAgXCJCbHVyIFBlcnNvbmFsIEluZm9ybWF0aW9uXCI6ICB7aWQ6IFwibGlnaHRjb3JkLTZcIiwgaW5mbzogXCJCbHVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbnMgbGlrZSBlbWFpbCwgcGF5bWVudCBpbmZvcyBhbmQgbW9yZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiQ2FsbGluZyBSaW5nIEJlYXRcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0yXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyBzcGVjaWFsIGNhbGxpbmcgYmVhdC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiRGV2ZWxvcGVyIE9wdGlvbnNcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0xXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyAmIExpZ2h0Y29yZCdzIEludGVybmFsIERldmVsb3BlciBPcHRpb25zLiBUaGlzIGFsbG93IHRoZSBcXFwiRXhwZXJpbWVudHNcXFwiIHRhYiwgdGhlIFxcXCJEZXZlbG9wZXIgT3B0aW9uc1xcXCIgdGFiIGFuZCB0aGUgXFxcIkxpZ2h0Y29yZCBBcGlcXFwiIHNlY3Rpb24uXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkFkIEJsb2NrXCI6ICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtNFwiLCBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbXMgeW91IHdpdGggYW4gaW52aXRlIGxpbmsuIEV2ZW4gaW4gYW4gZW1iZWQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkVuYWJsZSBMaWdodGNvcmQgU2VydmVyc1wiOiAgIHtpZDogXCJsaWdodGNvcmQtNVwiLCBpbmZvOiBcIkVuYWJsZSBMaWdodGNvcmQncyBzZXJ2ZXJzLiBEaXNhYmxpbmcgdGhpcyB3aWxsIGRpc2FibGUgY3VzdG9tIGJhZGdlcy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiRGlzYWJsZSB0eXBpbmdcIjogICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC03XCIsIGluZm86IFwiRG9uJ3QgbGV0IG90aGVyIHNlZSB5b3UncmUgdHlwaW5nLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXG4gICAgXCJMaWdodGNvcmQgVGFic1wiOiAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLThcIiwgaW5mbzogXCJBbGxvd3MgeW91IHRvIGxhdW5jaCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgTGlnaHRjb3JkIGluIHRoZSBzYW1lIHdpbmRvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCIsIGV4cGVyaW1lbnRhbDogdHJ1ZX0sXG4gICAgXCJVc2UgTm90aWZpY2F0aW9uIFNoaW1cIjogICAgICB7aWQ6IFwibGlnaHRjb3JkLTEwXCIsIGluZm86IFwiQmFzaWNhbGx5IGRvbid0IHVzZSBXaW5kb3dzJ3MgTm90aWZpY2F0aW9ucy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogcHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJ3aW4zMlwiLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkVtb2ppIFByZWZpeFwiOiAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMTFcIiwgaW5mbzogXCJDaGFuZ2UgdGhlIHByZWZpeCB1c2VkIGZvciBmcmVlIG5pdHJvcyBlbW9qaXMuIFBsZWFzZSBwdXQgb25seSBvbmUgY2hhcmFjdGVyLiBEZWZhdWx0OiAuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiLCBkZWZhdWx0OiBcIi5cIn0sXG5cbiAgICAvKiogTGlnaHRjb3JkIFdpbmRvdyAqL1xuICAgIFwiQWx3YXlzLW9uLVRvcFwiOiAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0zXCIsIGluZm86IFwiRW5hYmxlIHRoZSB3aW5kb3cncyBBbHdheXMtb24tVG9wIG1vZGUsIHdoZXJlIExpZ2h0Y29yZCBzdGF5cyBvbiB0b3Agb2Ygb3RoZXIgYXBwbGljYXRpb25zLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXG4gICAgXCJObyBXaW5kb3cgQm91bmRzXCI6ICAgICAgICAgICB7aWQ6IFwibm9fd2luZG93X2JvdW5kXCIsIGluZm86IFwiRGlzYWJsZSBXaW5kb3cgQm91bmRzLiBDYW4gYmUgdXNlZnVsIGlmIHlvdSB1c2UgYSB3aW5kb3cgbWFuYWdlci5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogcHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJsaW51eFwiLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcbiAgICBcIkVuYWJsZSBHbGFzc3Ryb25cIjogICAgICAgICAgIHtpZDogXCJlbmFibGVfZ2xhc3N0cm9uXCIsIGluZm86IFwiRW5hYmxlIEdsYXNzdHJvbi4gSWYgeW91J3JlIG5vdCB1c2luZyB0cmFuc3BhcmVudCB0aGVtZXMsIHRoaXMgY2FuIHJlZHVjZSBsYWcuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcbiAgICBcbiAgICAvKiogUmljaFByZXNlbmNlICovXG4gICAgXCJFbmFibGVcIjogICAgICAgICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIiwgaW5mbzogXCJFbmFibGUgUmljaFByZXNlbmNlIGJlbG93LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcInN0YXR1c1wifVxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb29raWUgPSB7XG4gICAgXCJiZGEtZ3MtMVwiOiB0cnVlLFxuICAgIFwiYmRhLWdzLTJcIjogZmFsc2UsXG4gICAgXCJiZGEtZ3MtM1wiOiBmYWxzZSxcbiAgICBcImJkYS1ncy00XCI6IGZhbHNlLFxuICAgIFwiYmRhLWdzLTVcIjogdHJ1ZSxcbiAgICBcImJkYS1ncy02XCI6IGZhbHNlLFxuICAgIFwiYmRhLWdzLTdcIjogZmFsc2UsXG4gICAgXCJiZGEtZ3MtOFwiOiBmYWxzZSxcbiAgICBcImJkYS1lcy0wXCI6IHRydWUsXG4gICAgXCJiZGEtZXMtMVwiOiB0cnVlLFxuICAgIFwiYmRhLWVzLTJcIjogdHJ1ZSxcbiAgICBcImJkYS1lcy00XCI6IGZhbHNlLFxuICAgIFwiYmRhLWVzLTZcIjogdHJ1ZSxcbiAgICBcImJkYS1lcy03XCI6IHRydWUsXG4gICAgXCJiZGEtZ3MtYlwiOiBmYWxzZSxcbiAgICBcImJkYS1lcy04XCI6IHRydWUsXG4gICAgXCJiZGEtZGMtMFwiOiBmYWxzZSxcbiAgICBcImJkYS1jc3MtMFwiOiBmYWxzZSxcbiAgICBcImJkYS1jc3MtMVwiOiBmYWxzZSxcbiAgICBcImJkYS1lcy05XCI6IHRydWUsXG4gICAgXCJmb3JrLWRtLTFcIjogZmFsc2UsXG4gICAgXCJmb3JrLXBzLTFcIjogdHJ1ZSxcbiAgICBcImZvcmstcHMtMlwiOiB0cnVlLFxuICAgIFwiZm9yay1wcy0zXCI6IHRydWUsXG4gICAgXCJmb3JrLXBzLTRcIjogdHJ1ZSxcbiAgICBcImZvcmstcHMtNVwiOiB0cnVlLFxuICAgIFwiZm9yay1wcy02XCI6IHRydWUsXG4gICAgXCJmb3JrLXBzLTdcIjogZmFsc2UsXG4gICAgXCJmb3JrLWVzLTJcIjogZmFsc2UsXG4gICAgXCJmb3JrLWVzLTNcIjogdHJ1ZSxcbiAgICBcImZvcmstd3AtMVwiOiBmYWxzZSxcbiAgICBcImZvcmstd3AtMlwiOiBmYWxzZSxcbiAgICBcImZvcmstYmV0YVwiOiB0cnVlLFxuICAgIFwibGlnaHRjb3JkLTFcIjogZmFsc2UsXG4gICAgXCJsaWdodGNvcmQtMlwiOiB0cnVlLFxuICAgIFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIjogZmFsc2UsXG4gICAgXCJsaWdodGNvcmQtM1wiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC00XCI6IGZhbHNlLFxuICAgIFwibGlnaHRjb3JkLTVcIjogdHJ1ZSxcbiAgICBcImxpZ2h0Y29yZC02XCI6IHRydWUsXG4gICAgXCJsaWdodGNvcmQtN1wiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC04XCI6IGZhbHNlLFxuICAgIFwibGlnaHRjb3JkLTlcIjogZmFsc2UsXG4gICAgXCJsaWdodGNvcmQtMTBcIjogZmFsc2UsXG4gICAgXCJub193aW5kb3dfYm91bmRcIjogZmFsc2UsXG59O1xuXG5cbmV4cG9ydCBjb25zdCBzZXR0aW5nc0Nvb2tpZSA9IHt9O1xuXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0UlBDID0ge1xuICAgIFwibmFtZVwiOiBcIkxpZ2h0Y29yZFwiLFxuICAgIFwiYXBwbGljYXRpb25faWRcIjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIixcbiAgICBcInN0YXRlXCI6IFwiTGlnaHRjb3JkIENsaWVudFwiLFxuICAgIFwiZGV0YWlsc1wiOiBcIkJyb3dzaW5nIERpc2NvcmRcIixcbiAgICBcInRpbWVzdGFtcHMuc3RhcnRcIjogRGF0ZS5ub3coKSxcbiAgICBcImFzc2V0cy5zbWFsbFwiOiBudWxsLFxuICAgIFwiYXNzZXRzLmxhcmdlXCI6IFwiNzEyMzIzODIxMDM3NjgyNzkxXCJcbn1cblxuZXhwb3J0IGNvbnN0IGxpZ2h0Y29yZFNldHRpbmdzID0ge307XG5leHBvcnQgY29uc3QgZGVmYXVsdExpZ2h0Y29yZFNldHRpbmdzID0ge307XG5cbmV4cG9ydCBjb25zdCBiZHBsdWdpbkVycm9ycyA9IFtdO1xuZXhwb3J0IGNvbnN0IGJkdGhlbWVFcnJvcnMgPSBbXTsgLy8gZGVmaW5lIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG5leHBvcnQgY29uc3QgYmRDb25maWcgPSBPYmplY3QuY3JlYXRlKEJldHRlckRpc2NvcmRDb25maWcpO1xuXG5leHBvcnQgY29uc3QgYmR0aGVtZXMgPSB7fTtcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcblxuZXhwb3J0IGNvbnN0IHBsdWdpbkNvb2tpZSA9IHt9O1xuZXhwb3J0IGNvbnN0IHRoZW1lQ29va2llID0ge307IiwiaW1wb3J0IGxvY2FsU3RvcmFnZUZpeCBmcm9tIFwiLi9sb2NhbFN0b3JhZ2VGaXhcIjtcbmltcG9ydCBsb2FkaW5nSWNvbiBmcm9tIFwiLi9sb2FkaW5nSWNvblwiO1xubG9jYWxTdG9yYWdlRml4KCk7XG5sb2FkaW5nSWNvbigpO1xuXG5jb25zdCBkZXByZWNhdGVHbG9iYWwgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRlZCBHbG9iYWxcIiwgYFwiJHtrZXl9XCIgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gUGxlYXNlIG9ubHkgdXNlIEJkQXBpLmApO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7ICBcbn07XG5cblxuaW1wb3J0ICogYXMgR2xvYmFscyBmcm9tIFwiLi8wZ2xvYmFsc1wiO1xuXG5jb25zdCBnbG9iYWxLZXlzID0gT2JqZWN0LmtleXMoR2xvYmFscyk7XG5mb3IgKGNvbnN0IGtleSBvZiBnbG9iYWxLZXlzKSBkZXByZWNhdGVHbG9iYWwoa2V5LCBHbG9iYWxzW2tleV0pO1xuXG5cbmltcG9ydCBCZEFwaSBmcm9tIFwiLi9tb2R1bGVzL2JkQXBpXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvcGx1Z2luTW9kdWxlXCI7XG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy90aGVtZU1vZHVsZVwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL21vZHVsZXMvdXRpbHNcIjtcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9tb2R1bGVzL2JkRXZlbnRzXCI7XG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL21vZHVsZXMvY2xhc3NOb3JtYWxpemVyXCI7XG5cbmRlcHJlY2F0ZUdsb2JhbChcIkJEVjJcIiwgQkRWMik7XG5kZXByZWNhdGVHbG9iYWwoXCJwbHVnaW5Nb2R1bGVcIiwgcGx1Z2luTW9kdWxlKTtcbmRlcHJlY2F0ZUdsb2JhbChcInRoZW1lTW9kdWxlXCIsIHRoZW1lTW9kdWxlKTtcbmRlcHJlY2F0ZUdsb2JhbChcIlV0aWxzXCIsIFV0aWxzKTtcbmRlcHJlY2F0ZUdsb2JhbChcIkJERXZlbnRzXCIsIEJERXZlbnRzKTtcbmRlcHJlY2F0ZUdsb2JhbChcInNldHRpbmdzUGFuZWxcIiwgc2V0dGluZ3NQYW5lbCk7XG5kZXByZWNhdGVHbG9iYWwoXCJEYXRhU3RvcmVcIiwgRGF0YVN0b3JlKTtcbmRlcHJlY2F0ZUdsb2JhbChcIkNvbnRlbnRNYW5hZ2VyXCIsIENvbnRlbnRNYW5hZ2VyKTtcbmRlcHJlY2F0ZUdsb2JhbChcIkNsYXNzTm9ybWFsaXplclwiLCBDbGFzc05vcm1hbGl6ZXIpO1xuXG53aW5kb3cuQmRBcGkgPSBCZEFwaTtcblxuaW1wb3J0IENvcmUgZnJvbSBcIi4vbW9kdWxlcy9jb3JlXCI7XG5kZXByZWNhdGVHbG9iYWwoXCJtYWluQ29yZVwiLCBDb3JlKTtcblxuLy8gVE9ETzogQ2hhbmdlIEluaXQgbW9kZSBhbmQgc3RvcCB1c2luZyBDb3JlV3JhcHBlci5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcbiAgICBjb25zdHJ1Y3RvcihiZENvbmZpZywgbWV0aG9kcykge1xuICAgICAgICBDb3JlLnNldENvbmZpZyhiZENvbmZpZyk7XG4gICAgICAgIENvcmUuc2V0TWV0aG9kcyhtZXRob2RzKTtcbiAgICB9XG5cbiAgICBpbml0KCkge1xuICAgICAgICAvLyBkZXByZWNhdGVHbG9iYWwoXCJtYWluQ29yZVwiLCB0aGlzLm1haW5Db3JlKTtcbiAgICAgICAgQ29yZS5pbml0KCk7XG4gICAgfVxufSIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICAgIGNvbnN0IHYyTG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHYyTG9hZGVyLmNsYXNzTmFtZSA9IFwiYmQtbG9hZGVydjJcIjtcclxuICAgIHYyTG9hZGVyLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodjJMb2FkZXIpO1xyXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgY29udGVudFdpbmRvd0dldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIikuZ2V0O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IFJlZmxlY3QuYXBwbHkoY29udGVudFdpbmRvd0dldHRlciwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb250ZW50V2luZG93LCB7XHJcbiAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gb2JqW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2YWwuYmluZChvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFByZXZlbnQgaW50ZXJjZXB0aW9uIGJ5IHBhdGNoaW5nIFJlZmxlY3QuYXBwbHkgYW5kIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdCwgXCJhcHBseVwiLCB7dmFsdWU6IFJlZmxlY3QuYXBwbHksIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgXCJiaW5kXCIsIHt2YWx1ZTogRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG5cclxuICAgIGNvbnN0IG9PcGVuID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW47XHJcbiAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICBpZiAodXJsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJhcGkvd2ViaG9va3NcIikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG9PcGVuLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBURkhvdXIge1xyXG4gICAgaW5qZWN0MjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCB0d2VsdmVIb3VyID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pOihbMC05XXsxLDJ9KVxcXFxzKEFNfFBNKWApO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGRhdGEucmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjAwXCIgOiBtYXRjaGVkWzFdLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjEyXCIgOiBwYXJzZUludChtYXRjaGVkWzFdKSArIDEyfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ296eSA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvbXBhY3QgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiZGF0ZUZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvbXBhY3QgbW9kZVxyXG4gICAgICAgIHRoaXMuY2FuY2VsMjRIb3VyID0gKCkgPT4ge2NhbmNlbENvenkoKTsgY2FuY2VsQ29tcGFjdCgpO307IC8vIENhbmNlbCBib3RoXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlMjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgdGhpcy5jYW5jZWwyNEhvdXIoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxuXG5jb25zdCBkaXNwYXRjaGVyID0gd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyXG5jb25zdCBDaGFubmVsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q2hhbm5lbCAmJiBlLmRlZmF1bHQuaGFzQ2hhbm5lbClbMF0uZGVmYXVsdFxubGV0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcClbMF1cbmxldCBETU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwpWzBdXG5cbmNvbnN0IGJsb2NrZWQgPSB7fVxuXG5sZXQgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxuZnVuY3Rpb24gZ2V0Q3VycmVudFVzZXIoKXtcbiAgICBpZih1c2VyTW9kdWxlKXJldHVybiB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxuICAgIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBBbnRpQm90RE0ge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMuYW50aURNID0gdGhpcy5hbnRpRE0uYmluZCh0aGlzKVxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuICAgIH1cblxuICAgIGVuYWJsZSgpe1xuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcblxuICAgICAgICBkaXNwYXRjaGVyLnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxuICAgIH1cblxuICAgIGRpc2FibGUoKXtcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcblxuICAgICAgICBkaXNwYXRjaGVyLnVuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXG4gICAgfVxuXG4gICAgYW50aURNKGV2KXtcbiAgICAgICAgaWYoIWV2Lm1lc3NhZ2UuYXV0aG9yLmJvdClyZXR1cm5cbiAgICAgICAgaWYoZXYubWVzc2FnZS5hdXRob3IuaWQgPT09IGdldEN1cnJlbnRVc2VyKCkuaWQpXG4gICAgICAgIGlmKGV2Lm1lc3NhZ2UuZ3VpbGRfaWQpcmV0dXJuXG5cbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbChldi5tZXNzYWdlLmNoYW5uZWxfaWQpXG4gICAgICAgIGlmKCFjaGFubmVsKXJldHVybiAvLyBtaWdodCBiZSBicm9rZW5cblxuICAgICAgICBpZihjaGFubmVsLnR5cGUgIT09IDEpcmV0dXJuXG5cbiAgICAgICAgaWYoYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0pcmV0dXJuIC8vIElmIHRoZSB1c2VyIHVuYmxvY2sgdGhlIGJvdCwgRG9uJ3QgYmxvY2sgaXQgYWdhaW4uXG5cbiAgICAgICAgaWYoc2Nhbk1lc3NhZ2UoZXYubWVzc2FnZSkpe1xuICAgICAgICAgICAgYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0gPSB0cnVlXG4gICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoYFtBZEJsb2NrXTogQmxvY2tlZCAke2V2Lm1lc3NhZ2UuYXV0aG9yLnVzZXJuYW1lfSMke2V2Lm1lc3NhZ2UuYXV0aG9yLmRpc2NyaW1pbmF0b3J9YCwge1xuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIndhcm5pbmdcIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKCFyZWxhdGlvblNoaXBNb2R1bGUpcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxuICAgICAgICAgICAgcmVsYXRpb25TaGlwTW9kdWxlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKGV2Lm1lc3NhZ2UuYXV0aG9yLmlkLCB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb246IFwiQ29udGV4dE1lbnVcIlxuICAgICAgICAgICAgfSwgMilcbiAgICAgICAgICAgIGlmKCFETU1vZHVsZSlETU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwpWzBdXG4gICAgICAgICAgICBETU1vZHVsZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwoY2hhbm5lbC5pZCwgZmFsc2UpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNjYW5NZXNzYWdlKG1lc3NhZ2Upe1xuICAgIGlmKC8oZGlzY29yZFxcLmdnfGRpc2NvcmRcXC5jb21cXC9pbnZpdGVcXC98ZGlzY29yZGFwcFxcLmNvbVxcL2ludml0ZVxcLykvZy50ZXN0KG1lc3NhZ2UuY29udGVudCkpcmV0dXJuIHRydWVcbiAgICBpZihFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmQuZ2cvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5jb20vaW52aXRlL1wiKSB8fCBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmRhcHAuY29tL2ludml0ZS9cIikpcmV0dXJuIHRydWVcblxuICAgIHJldHVybiBmYWxzZVxufVxuZnVuY3Rpb24gRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgc2VhcmNoKXtcbiAgICBsZXQgZW1iZWRzID0gbWVzc2FnZS5lbWJlZHMgfHwgW11cbiAgICBpZihlbWJlZHMubGVuZ3RoID09PSAwKXJldHVybiBmYWxzZVxuICAgIHJldHVybiBlbWJlZHMubWFwKGVtYmVkID0+IHtcbiAgICAgICAgaWYoZW1iZWQudHlwZSAhPT0gXCJyaWNoXCIpcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmKChlbWJlZC50aXRsZSB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXG4gICAgICAgIGlmKChlbWJlZC5kZXNjcmlwdGlvbiB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXG4gICAgICAgIGlmKCgoZW1iZWQuZm9vdGVyIHx8IFwiXCIpICYmIGVtYmVkLmZvb3Rlci50ZXh0IHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcbiAgICAgICAgaWYoKGVtYmVkLmZpZWxkcyB8fCBbXSkubWFwKGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWUuaW5jbHVkZXMoc2VhcmNoKSB8fCBlLm5hbWUuaW5jbHVkZXMoc2VhcmNoKVxuICAgICAgICB9KS5pbmNsdWRlcyh0cnVlKSlyZXR1cm4gdHJ1ZVxuICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgIH0pLmluY2x1ZGVzKHRydWUpXG59IiwiaW1wb3J0IHtzZXR0aW5nc1JQQywgZGVmYXVsdFJQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBkaXNwYXRjaGVyID0gQkRNb2R1bGVzLmdldChtPT5tLkRpc3BhdGNoZXImJm0uZGVmYXVsdCYmbS5kZWZhdWx0LmRpc3BhdGNoKVswXS5kZWZhdWx0XHJcbmNvbnN0IEFjdGlvblR5cGVzID0gQkRNb2R1bGVzLmdldChtPT5tLkFjdGlvblR5cGVzKVswXS5BY3Rpb25UeXBlc1xyXG5cclxuY29uc3Qgc29ja2V0SWQgPSBcImxpZ2h0Y29yZC1zcG9vZi1zb2NrZXRcIlxyXG5jb25zdCBwaWQgPSBwcm9jZXNzLnBpZFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEN1c3RvbVJpY2hQcmVzZW5jZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZSA9IHNldHRpbmdzUlBDXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBmb3JtYXRlZEdhbWUoKXtcclxuICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkID09PSBmYWxzZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGxldCBnYW1lID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uX2lkOiB0aGlzLmdhbWUuYXBwbGljYXRpb25faWQgfHwgZGVmYXVsdFJQQy5hcHBsaWNhdGlvbl9pZCxcclxuICAgICAgICAgICAgZGV0YWlsczogdGhpcy5nYW1lLmRldGFpbHMgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdGltZXN0YW1wczogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXSA/IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGFzc2V0czogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdID8ge1xyXG4gICAgICAgICAgICAgICAgbGFyZ2VfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSxcclxuICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdhbWVcclxuICAgIH1cclxuXHJcbiAgICBzZW5kR2FtZSgpe1xyXG4gICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2goe1xyXG4gICAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0NBTF9BQ1RJVklUWV9VUERBVEUsXHJcbiAgICAgICAgICAgIHNvY2tldElkLFxyXG4gICAgICAgICAgICBwaWQsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5OiB0aGlzLmZvcm1hdGVkR2FtZVxyXG4gICAgICAgIH0pICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCkge1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFbmFibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0KHNldHRpbmdzUlBDIHx8IE9iamVjdC5jcmVhdGUoZGVmYXVsdFJQQykpXHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGlzYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmV0Y2hBc3NldHMoYXBwbGljYXRpb25JZCl7XHJcbiAgICAgICAgbGV0IGFzc2V0cyA9IGF3YWl0IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEFzc2V0cylbMF0uZ2V0QXNzZXRzKGFwcGxpY2F0aW9uSWQpXHJcbiAgICAgICAgaWYoYXNzZXRzLnVuZGVmaW5lZCAmJiB0eXBlb2YgYXNzZXRzLnVuZGVmaW5lZCA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gQXBwbGljYXRpb25cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0c1xyXG4gICAgfVxyXG5cclxuICAgIHNldChhY3Rpdml0eSl7XHJcbiAgICAgICAgdGhpcy5nYW1lID0gYWN0aXZpdHlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB2MiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4vZGlzdGFudFwiO1xuaW1wb3J0IHsgdGltaW5nU2FmZUVxdWFsIH0gZnJvbSBcImNyeXB0b1wiO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgTGF5ZXJzIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLmxheWVycyA9IFtdXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5MYXllcnMgPSB0aGlzXG4gICAgfVxuXG4gICAgZ2V0IGlzSW5qZWN0ZWQoKXtcbiAgICAgICAgcmV0dXJuICEhZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImRpdi5MYXllcnMuaW5qZWN0ZWRcIilcbiAgICB9XG5cbiAgICBpbmplY3QoKXtcbiAgICAgICAgaWYodGhpcy5pc0luamVjdGVkKXJldHVyblxuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXJzXG4gICAgICAgIF0gPSBbXG4gICAgICAgICAgICBVdGlscy5yZW1vdmVEYSh2Mi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5sYXllcnMgJiYgZS5sYXllcikubGF5ZXJzKVxuICAgICAgICBdXG4gICAgICAgIGNvbnN0IGxheWVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrY2xhc3NOYW1lTGF5ZXJzKTtcbiAgICAgICAgaWYgKCFsYXllcnMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgUmVhY3RJbnN0YW5jZSA9IExpZ2h0Y29yZC5BcGkuVXRpbHMuRmluZFJlYWN0KGxheWVycywgMSlcbiAgICAgICAgaWYoIVJlYWN0SW5zdGFuY2UpcmV0dXJuIGxheWVyc1xuICAgICAgICB0aGlzLlJlYWN0SW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlXG4gICAgICAgIGxldCByZW5kZXIgPSBSZWFjdEluc3RhbmNlLnJlbmRlclxuICAgICAgICBSZWFjdEluc3RhbmNlLnJlbmRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IHJlbmRlci5jYWxsKFJlYWN0SW5zdGFuY2UpXG4gICAgICAgICAgICBsZXQgY2xhc3NMaXN0ID0gcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2xhc3NOYW1lLnNwbGl0KFwiIFwiKVxuICAgICAgICAgICAgY2xhc3NMaXN0LnB1c2goXCJMYXllcnNcIilcbiAgICAgICAgICAgIGNsYXNzTGlzdC5wdXNoKFwiaW5qZWN0ZWRcIilcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNsYXNzTmFtZSA9IGNsYXNzTGlzdC5qb2luKFwiIFwiKVxuXG4gICAgICAgICAgICB0aGlzLmxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jaGlsZHJlbi5wdXNoKGxheWVyWzFdKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgUmVhY3RJbnN0YW5jZS5mb3JjZVVwZGF0ZSgpXG4gICAgfVxuXG4gICAgY3JlYXRlTGF5ZXIoY2hpbGRyZW4sIHByb3BzID0ge30pe1xuICAgICAgICBsZXQgaWQgPSB1dWlkdjQoKVxuICAgICAgICBsZXQgbGF5ZXIgPSBudWxsXG4gICAgICAgIHRoaXMubGF5ZXJzLnB1c2goW2lkLCA8TGF5ZXIgey4uLnByb3BzfSBnZXRMYXllcj17bGF5ID0+IHtcbiAgICAgICAgICAgIGxheWVyID0gbGF5XG4gICAgICAgIH19IGtleT17aWR9IGlkPXtpZH0gcmVtb3ZlPXsoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoZSA9PiBlWzBdID09PSBpZClcbiAgICAgICAgICAgIGlmKGluZGV4ID09PSAtMSlyZXR1cm5cbiAgICAgICAgICAgIHRoaXMubGF5ZXJzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIGxheWVyID0gbnVsbFxuICAgICAgICAgICAgaWYodGhpcy5SZWFjdEluc3RhbmNlKXRoaXMuUmVhY3RJbnN0YW5jZS5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICB0aGlzLmluamVjdCgpXG4gICAgICAgIH19PntjaGlsZHJlbn08L0xheWVyPl0pXG4gICAgICAgIGlmKHRoaXMuUmVhY3RJbnN0YW5jZSl0aGlzLlJlYWN0SW5zdGFuY2UuZm9yY2VVcGRhdGUoKVxuICAgICAgICB0aGlzLmluamVjdCgpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZW1vdmU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZighbGF5ZXIpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoZSA9PiBlWzBdID09PSBpZClcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXggPT09IC0xKXJldHVyblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICAgICAgICAgIGxheWVyID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLlJlYWN0SW5zdGFuY2UpdGhpcy5SZWFjdEluc3RhbmNlLmZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3QoKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBsYXllci5yZW1vdmUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5sZXQgTGF5ZXJNb2R1bGVzXG5leHBvcnQgY2xhc3MgTGF5ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGFuaW1hdGlvbjogbmV3IHRoaXMubW9kdWxlc1swXS5kZWZhdWx0LlZhbHVlKDApXG4gICAgICAgIH0gXG4gICAgICAgIHRoaXMucHJvcHMuZ2V0TGF5ZXIodGhpcylcbiAgICAgICAgdGhpcy5rZXlkb3duID0gdGhpcy5rZXlkb3duLmJpbmQodGhpcylcbiAgICB9XG5cbiAgICBrZXlkb3duKGUpe1xuICAgICAgICBpZiAoZS53aGljaCA9PT0gMjcpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIHJldHVybiBMYXllck1vZHVsZXMgfHwgKExheWVyTW9kdWxlcyA9IFtcbiAgICAgICAgICAgIHYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LlZhbHVlICYmIGUuZGVmYXVsdC5kaXYpXG4gICAgICAgIF0pXG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5ZG93bilcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudChldil7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWRvd24pXG4gICAgfVxuXG4gICAgcmVtb3ZlKCl7XG4gICAgICAgIHRoaXMucHJvcHMucmVtb3ZlKClcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsRW50ZXIoZXYpe1xuICAgICAgICB0aGlzLm1vZHVsZXNbMF0uZGVmYXVsdC50aW1pbmcodGhpcy5zdGF0ZS5hbmltYXRpb24sIHtcbiAgICAgICAgICAgIHRvVmFsdWU6IDEsXG4gICAgICAgICAgICBkdXJhdGlvbjogMTAwXG4gICAgICAgIH0pLnN0YXJ0KGV2KVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxMZWF2ZShldil7XG4gICAgICAgIHRoaXMubW9kdWxlc1swXS5kZWZhdWx0LnRpbWluZyh0aGlzLnN0YXRlLmFuaW1hdGlvbiwge1xuICAgICAgICAgICAgdG9WYWx1ZTogMCxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxMDBcbiAgICAgICAgfSkuc3RhcnQoZXYpXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBpbnRlcnBvbGF0aW9uID0gdGhpcy5zdGF0ZS5hbmltYXRpb24uaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgaW5wdXRSYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgb3V0cHV0UmFuZ2U6IFsxLjA3LCAxXVxuICAgICAgICB9KVxuICAgICAgICBsZXQgc3R5bGUgPSB7XG4gICAgICAgICAgICBvcGFjaXR5OiB0aGlzLnN0YXRlLmFuaW1hdGlvbixcbiAgICAgICAgICAgIHRyYW5zZm9ybTogW3tcbiAgICAgICAgICAgICAgICBzY2FsZTogaW50ZXJwb2xhdGlvblxuICAgICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgICBsZXQgRGl2ID0gdGhpcy5tb2R1bGVzWzBdLmRlZmF1bHQuZGl2XG4gICAgICAgIHJldHVybiA8RGl2IGNsYXNzTmFtZT17W19fU0VDUkVUX0VNT1RJT05fXy5jc3Moe1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOlwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBXZWJraXRCb3hPcmllbnQ6IFwidmVydGljYWxcIixcbiAgICAgICAgICAgIFdlYmtpdEJveERpcmVjdGlvbjogXCJub3JtYWxcIixcbiAgICAgICAgICAgIG1zRmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gICAgICAgICAgICB6SW5kZXg6IDEwMVxuICAgICAgICB9KSxwcm9jZXNzLnBsYXRmb3JtPT09XCJ3aW4zMlwiP19fU0VDUkVUX0VNT1RJT05fXy5jc3Moe1xuICAgICAgICAgICAgdG9wOiBcIi0yMnB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nVG9wOiBcIjIycHhcIlxuICAgICAgICB9KTpudWxsLC4uLih0aGlzLnByb3BzLmNsYXNzTmFtZT90aGlzLnByb3BzLmNsYXNzTmFtZS5zcGxpdChcIiBcIik6W10pXS5maWx0ZXIoZT0+ZSkuam9pbihcIiBcIikgfHwgbnVsbH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSgpXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9EaXY+XG4gICAgfVxufVxuTGF5ZXIuZGVmYXVsdFByb3BzID0ge1xuICAgIGlkOiBudWxsLFxuICAgIGNoaWxkcmVuOiBudWxsXG59IiwiaW1wb3J0IHtwbHVnaW5Db29raWUsIHRoZW1lQ29va2llLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IG1haW5Db3JlIGZyb20gXCIuL2NvcmVcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XG5cbmNvbnN0IEJkQXBpID0ge1xuICAgIGdldCBSZWFjdCgpIHsgcmV0dXJuIEJEVjIuUmVhY3Q7IH0sXG4gICAgZ2V0IFJlYWN0RE9NKCkgeyByZXR1cm4gQkRWMi5SZWFjdERvbTsgfSxcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIEJEVjIuUmVhY3RDb21wb25lbnQ7fSxcbiAgICBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtyZXR1cm4gVXRpbHMuV2luZG93Q29uZmlnRmlsZTt9LFxuICAgIGdldCBzZXR0aW5ncygpIHtyZXR1cm4gc2V0dGluZ3M7fSxcbiAgICBnZXQgZW1vdGVzKCkge3JldHVybiBudWxsfSwgLy8gZGVwcmVjYXRlZCwgZGVsZXRlZCBhbGwgZW1vdGVzIGZyb20gYmV0dGVyZGlzY29yZC5cbiAgICBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9LFxuICAgIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cbn07XG5cbkJkQXBpLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFV0aWxzLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKCk7XG59O1xuXG5CZEFwaS5nZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIFV0aWxzLmdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KTtcbn07XG5cbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSk7XG59O1xuXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcbi8vY3NzID0gY3VzdG9tIGNzc1xuQmRBcGkuaW5qZWN0Q1NTID0gZnVuY3Rpb24gKGlkLCBjc3MpIHtcbiAgICBET00uYWRkU3R5bGUoRE9NLmVzY2FwZUlEKGlkKSwgY3NzKTtcbn07XG5cbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcbkJkQXBpLmNsZWFyQ1NTID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgRE9NLnJlbW92ZVN0eWxlKERPTS5lc2NhcGVJRChpZCkpO1xufTtcblxuLy9JbmplY3QgQ1NTIHRvIGRvY3VtZW50IGhlYWRcbi8vaWQgPSBpZCBvZiBlbGVtZW50XG4vL2NzcyA9IGN1c3RvbSBjc3NcbkJkQXBpLmxpbmtKUyA9IGZ1bmN0aW9uIChpZCwgdXJsKSB7XG4gICAgRE9NLmFkZFNjcmlwdChET00uZXNjYXBlSUQoaWQpLCB1cmwpO1xufTtcblxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XG4vL2lkID0gaWQgb2YgZWxlbWVudFxuQmRBcGkudW5saW5rSlMgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICBET00ucmVtb3ZlU2NyaXB0KERPTS5lc2NhcGVJRChpZCkpO1xufTtcblxuLy9HZXQgYW5vdGhlciBwbHVnaW5cbi8vbmFtZSA9IG5hbWUgb2YgcGx1Z2luXG5CZEFwaS5nZXRQbHVnaW4gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmIChiZHBsdWdpbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGJkcGx1Z2luc1tuYW1lXS5wbHVnaW47XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuLy9HZXQgQmV0dGVyRGlzY29yZCBDb3JlXG5CZEFwaS5nZXRDb3JlID0gZnVuY3Rpb24gKCkge1xuICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGlvbiBOb3RpY2VcIiwgYEJkQXBpLmdldENvcmUoKSB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLmApO1xuICAgIHJldHVybiBtYWluQ29yZTtcbn07XG5cbi8qKlxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBtb2RhbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBhIHN0cmluZyBvZiB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIG1vZGFsXG4gKi9cbkJkQXBpLmFsZXJ0ID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50KSB7XG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwge2NhbmNlbFRleHQ6IG51bGx9KTtcbn07XG5cbi8qKlxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGtleSB1c2VkIGZvciB0aGlzIG1vZGFsXG4gKi9cbkJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyk7XG59O1xuXG4vL1Nob3cgdG9hc3QgYWxlcnRcbkJkQXBpLnNob3dUb2FzdCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIFV0aWxzLnNob3dUb2FzdChjb250ZW50LCBvcHRpb25zKTtcbn07XG5cbi8vIEZpbmRzIG1vZHVsZVxuQmRBcGkuZmluZE1vZHVsZSA9IGZ1bmN0aW9uKGZpbHRlcikge1xuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZmlsdGVyKTtcbn07XG5cbi8vIEZpbmRzIG1vZHVsZVxuQmRBcGkuZmluZEFsbE1vZHVsZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQWxsKGZpbHRlcik7XG59O1xuXG4vLyBGaW5kcyBtb2R1bGVcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3BzID0gZnVuY3Rpb24oLi4ucHJvcHMpIHtcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKHByb3BzKTtcbn07XG5cbkJkQXBpLmZpbmRNb2R1bGVCeVByb3RvdHlwZXMgPSBmdW5jdGlvbiguLi5wcm90b3MpIHtcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlQcm90b3R5cGVzKHByb3Rvcyk7XG59O1xuXG5CZEFwaS5maW5kTW9kdWxlQnlEaXNwbGF5TmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShuYW1lKTtcbn07XG5cbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcbkJkQXBpLmdldEludGVybmFsSW5zdGFuY2UgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5qUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcbiAgICByZXR1cm4gQkRWMi5nZXRJbnRlcm5hbEluc3RhbmNlKG5vZGUpO1xufTtcblxuLy8gR2V0cyBkYXRhXG5CZEFwaS5sb2FkRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xufTtcblxuQmRBcGkuZ2V0RGF0YSA9IEJkQXBpLmxvYWREYXRhO1xuXG4vLyBTZXRzIGRhdGFcbkJkQXBpLnNhdmVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5LCBkYXRhKSB7XG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgZGF0YSk7XG59O1xuXG5CZEFwaS5zZXREYXRhID0gQmRBcGkuc2F2ZURhdGE7XG5cbi8vIERlbGV0ZXMgZGF0YVxuQmRBcGkuZGVsZXRlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xuICAgIHJldHVybiBEYXRhU3RvcmUuZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xufTtcblxuLy8gUGF0Y2hlcyBvdGhlciBmdW5jdGlvbnNcbkJkQXBpLm1vbmtleVBhdGNoID0gZnVuY3Rpb24od2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBVdGlscy5tb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKTtcbn07XG5cbi8vIEV2ZW50IHdoZW4gZWxlbWVudCBpcyByZW1vdmVkXG5CZEFwaS5vblJlbW92ZWQgPSBmdW5jdGlvbihub2RlLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBVdGlscy5vblJlbW92ZWQobm9kZSwgY2FsbGJhY2spO1xufTtcblxuLy8gV3JhcHMgZnVuY3Rpb24gaW4gdHJ5Li5jYXRjaFxuQmRBcGkuc3VwcHJlc3NFcnJvcnMgPSBmdW5jdGlvbihtZXRob2QsIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gVXRpbHMuc3VwcHJlc3NFcnJvcnMobWV0aG9kLCBtZXNzYWdlKTtcbn07XG5cbi8vIFRlc3RzIGZvciB2YWxpZCBKU09OXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gVXRpbHMudGVzdEpTT04oZGF0YSk7XG59O1xuXG5CZEFwaS5pc1BsdWdpbkVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuICEhcGx1Z2luQ29va2llW25hbWVdO1xufTtcblxuQmRBcGkuaXNUaGVtZUVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuICEhdGhlbWVDb29raWVbbmFtZV07XG59O1xuXG5CZEFwaS5pc1NldHRpbmdFbmFibGVkID0gZnVuY3Rpb24oaWQpIHtcbiAgICByZXR1cm4gISFzZXR0aW5nc0Nvb2tpZVtpZF07XG59O1xuXG5CZEFwaS5lbmFibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgdHJ1ZSk7XG59O1xuXG5CZEFwaS5kaXNhYmxlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIGZhbHNlKTtcbn07XG5cbkJkQXBpLnRvZ2dsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCAhc2V0dGluZ3NDb29raWVbaWRdKTtcbn07XG5cbi8vIEdldHMgZGF0YVxuQmRBcGkuZ2V0QkREYXRhID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRCRERhdGEoa2V5KTtcbn07XG5cbi8vIFNldHMgZGF0YVxuQmRBcGkuc2V0QkREYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhKSB7XG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRCRERhdGEoa2V5LCBkYXRhKTtcbn07XG5cblxuXG5jb25zdCBtYWtlQWRkb25BUEkgPSAoY29va2llLCBsaXN0LCBtYW5hZ2VyKSA9PiBuZXcgY2xhc3MgQWRkb25BUEkge1xuXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gbWFuYWdlci5mb2xkZXI7fVxuXG4gICAgaXNFbmFibGVkKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhY29va2llW25hbWVdO1xuICAgIH1cblxuICAgIGVuYWJsZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmVuYWJsZShuYW1lKTtcbiAgICB9XG5cbiAgICBkaXNhYmxlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZGlzYWJsZShuYW1lKTtcbiAgICB9XG5cbiAgICB0b2dnbGUobmFtZSkge1xuICAgICAgICBpZiAoY29va2llW25hbWVdKSB0aGlzLmRpc2FibGUobmFtZSk7XG4gICAgICAgIGVsc2UgdGhpcy5lbmFibGUobmFtZSk7XG4gICAgfVxuXG4gICAgcmVsb2FkKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIucmVsb2FkKG5hbWUpO1xuICAgIH1cblxuICAgIGdldChuYW1lKSB7XG4gICAgICAgIGlmIChsaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICBpZiAobGlzdFtuYW1lXS5wbHVnaW4pIHJldHVybiBsaXN0W25hbWVdLnBsdWdpbjtcbiAgICAgICAgICAgIHJldHVybiBsaXN0W25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldEFsbCgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGxpc3QpLm1hcChrID0+IHRoaXMuZ2V0KGspKS5maWx0ZXIoYSA9PiBhKTtcbiAgICB9XG59O1xuXG5CZEFwaS5QbHVnaW5zID0gbWFrZUFkZG9uQVBJKHBsdWdpbkNvb2tpZSwgYmRwbHVnaW5zLCBwbHVnaW5Nb2R1bGUpO1xuQmRBcGkuVGhlbWVzID0gbWFrZUFkZG9uQVBJKHRoZW1lQ29va2llLCBiZHRoZW1lcywgdGhlbWVNb2R1bGUpO1xuXG5leHBvcnQgZGVmYXVsdCBCZEFwaTtcblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkJkQXBpID0gQmRBcGkiLCIvKiBCREV2ZW50cyAqL1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCREV2ZW50cyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoKVxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQkRFdmVudHMgPSB0aGlzXG4gICAgfVxuICAgIGRpc3BhdGNoKGV2ZW50TmFtZSwgLi4uYXJncykge3RoaXMuZW1pdChldmVudE5hbWUsIC4uLmFyZ3MpO31cbiAgICBvZmYoZXZlbnROYW1lLCBldmVudEFjdGlvbikge3RoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEFjdGlvbik7fVxufTsiLCIvKipcbiAqIENyZWRpdHMgdG8gQGhlbGxib3VuZDEzMzcgb24gZ2l0aHViIGZvciB0aGUgY3NzXG4gKi9cblxuaW1wb3J0IERPTVRvb2xzIGZyb20gXCIuL2RvbXRvb2xzXCJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXG5cbmxldCBzZWxlY3RvcnNcbmNvbnN0IHJlbW92ZURhID0gVXRpbHMucmVtb3ZlRGFcbmZ1bmN0aW9uIGdldFNlbGVjdG9ycygpe1xuICAgIGxldCBzdGFuZGFyZFNpZGViYXJWaWV3ID0gQkRNb2R1bGVzLmdldChlID0+IGUuc3RhbmRhcmRTaWRlYmFyVmlldylbMF1cbiAgICBpZighc3RhbmRhcmRTaWRlYmFyVmlldylyZXR1cm4gbnVsbFxuICAgIGxldCBkZWZhdWx0Q2xhc3NOYW1lID0gcmVtb3ZlRGEoc3RhbmRhcmRTaWRlYmFyVmlldy5zdGFuZGFyZFNpZGViYXJWaWV3KVxuICAgIGxldCBzZWxlY3RzID0gW11cbiAgICBsZXQgdXNlclNldHRpbmdzQWNjb3VudCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJTZXR0aW5nc0FjY291bnQpWzBdXG4gICAgY29uc3QgY2hpbGRyZW4gPSBCRE1vZHVsZXMuZ2V0KGUgPT4gdHlwZW9mIGUuY2hpbGRyZW4gPT09IFwic3RyaW5nXCIpWzBdXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC5wYXltZW50LWluZm8gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuZGVzY3JpcHRpb24gJiYgdHlwZW9mIGUuZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIgJiYgZS5kZXNjcmlwdGlvbi5pbmNsdWRlcyhcImZvcm1UZXh0XCIpKVswXS5kZXNjcmlwdGlvbil9YClcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucGF5bWVudFNvdXJjZVJvdylbMF0ucGF5bWVudFNvdXJjZVJvdyl9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnN1YlRleHQgJiYgZS5kZXNjcmlwdGlvbldyYXBwZXIpWzBdLnN1YlRleHQpfWApXG4gICAgaWYodXNlclNldHRpbmdzQWNjb3VudCl7XG4gICAgICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYSh1c2VyU2V0dGluZ3NBY2NvdW50LnVzZXJTZXR0aW5nc0FjY291bnQpfSBkaXY6bnRoLWNoaWxkKDIpPmRpdjpudGgtY2hpbGQoMik+LiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUudmlld0JvZHkpWzBdLnZpZXdCb2R5KX1gKVxuICAgICAgICBzZWxlY3RzLnB1c2goYC4ke3JlbW92ZURhKHVzZXJTZXR0aW5nc0FjY291bnQudXNlclNldHRpbmdzU2VjdXJpdHkpfSAuJHtyZW1vdmVEYShjaGlsZHJlbi5jaGlsZHJlbil9ID4gZGl2Om50aC1jaGlsZCgyKWApXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKHNlbGVjdHMpXG4gICAgcmV0dXJuIHNlbGVjdHNcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJsdXJQcml2YXRlIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuICAgIH1cblxuICAgIGVuYWJsZSgpe1xuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcbiAgICAgICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzIHx8IGdldFNlbGVjdG9ycygpXG5cbiAgICAgICAgaWYoIXNlbGVjdG9ycyljb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgc2VsZWN0b3JzIHRvIGJsdXIgcGVyc29ubmFsIGluZm9ybWF0aW9ucy5cIikpXG4gICAgICAgIERPTVRvb2xzLmFkZFN0eWxlKFwiYmx1clByaXZhdGVcIiwgYFxuJHtzZWxlY3RvcnMuam9pbihcIiwgXCIpfSB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA4NSwuNjgsLjUzKTtcbiAgICBmaWx0ZXI6IGJsdXIoNHB4KTtcbiAgICBvcGFjaXR5OiAuODtcbn1cblxuJHtzZWxlY3RvcnMubWFwKGUgPT4gZStcIjpob3ZlclwiKS5qb2luKFwiLCBcIil9ICB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA5LC42OCwuNTMpO1xuICAgIGZpbHRlcjogbm9uZTtcbiAgICBvcGFjaXR5OiAxO1xufWApXG4gICAgfVxuXG4gICAgZGlzYWJsZSgpe1xuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuICAgICAgICBET01Ub29scy5yZW1vdmVTdHlsZShcImJsdXJQcml2YXRlXCIpXG4gICAgfVxufSIsImltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xuXG5jb25zdCBub3JtYWxpemVkUHJlZml4ID0gXCJkYVwiO1xuY29uc3QgcmFuZENsYXNzID0gbmV3IFJlZ0V4cChgXig/ISR7bm9ybWFsaXplZFByZWZpeH0tKSgoPzpbQS1aYS16XXxbMC05XXwtKSspLSg/OltBLVphLXpdfFswLTldfC18Xyl7Nn0kYCk7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDbGFzc05vcm1hbGl6ZXIge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5DbGFzc05vcm1hbGl6ZXIgPSB0aGlzXG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5yZXZlcnRFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5ub3JtYWxpemVFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYXRjaERPTU1ldGhvZHMoKTtcbiAgICB9XG5cbiAgICBwYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG91bGRJZ25vcmUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodmFsdWUuZW5kc1dpdGgoXCJweFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImNoXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiZW1cIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwibGF5ZXJDb250YWluZXItXCIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCIjXCIpICYmICh2YWx1ZS5sZW5ndGggPT0gNyB8fCB2YWx1ZS5sZW5ndGggPT0gNCkpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCJjYWxjKFwiKSB8fCB2YWx1ZS5pbmNsdWRlcyhcInJnYmFcIikpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbW9kdWxlRmlsdGVyKG1vZHVsZSkge1xuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG1vZHVsZSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKG1vZHVsZS5fX2VzTW9kdWxlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghT2JqZWN0LmtleXMobW9kdWxlKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIG1vZHVsZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2R1bGVbYmFzZUNsYXNzTmFtZV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zcGxpdChcIi1cIikubGVuZ3RoID09PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KHZhbHVlLnNwbGl0KFwiIFwiKVswXSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gY2xhc3NOYW1lcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsQ2xhc3MubWF0Y2gocmFuZENsYXNzKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoIHx8ICFtYXRjaC5sZW5ndGggfHwgbWF0Y2gubGVuZ3RoIDwgMikgY29udGludWU7IC8vIFNob3VsZG4ndCBldmVyIGhhcHBlbiBzaW5jZSB0aGV5IHBhc3NlZCB0aGUgbW9kdWxlRmlsdGVyLCBidXQgeW91IG5ldmVyIGtub3dcbiAgICAgICAgICAgICAgICBjb25zdCBjYW1lbENhc2UgPSBtYXRjaFsxXS5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSArPSBgICR7Y29tcG9uZW50TmFtZX0tJHtjYW1lbENhc2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVucGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV07XG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBuZXdTdHJpbmcgPSBcIlwiO1xuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsQ2xhc3Muc3RhcnRzV2l0aChgJHtjb21wb25lbnROYW1lfS1gKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbmV3U3RyaW5nICs9IGAgJHtub3JtYWxDbGFzc31gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSA9IG5ld1N0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBub3JtYWxpemVFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcbiAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNsZW4gPSBjbGFzc2VzLmxlbmd0aDsgYyA8IGNsZW47IGMrKykge1xuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdChjbGFzc2VzW2NdKSkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsYXNzZXNbY10ubWF0Y2gocmFuZENsYXNzKVsxXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NsYXNzID0gbWF0Y2guc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke25vcm1hbGl6ZWRQcmVmaXh9LSR7bmV3Q2xhc3N9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBlbGVtZW50LmNoaWxkcmVuKSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoY2hpbGQpO1xuICAgIH1cblxuICAgIHJldmVydEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgaWYgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB0aGlzLnJldmVydEVsZW1lbnQoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgaWYgKGNsYXNzZXNbY10uc3RhcnRzV2l0aChgJHtub3JtYWxpemVkUHJlZml4fS1gKSkgdG9SZW1vdmUucHVzaChjbGFzc2VzW2NdKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4udG9SZW1vdmUpO1xuICAgIH1cblxuICAgIHBhdGNoRE9NTWV0aG9kcygpIHtcbiAgICAgICAgY29uc3QgY29udGFpbnMgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zO1xuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IHRva2VucyA9IHRva2VuLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbnRhaW5zLCB0aGlzLCBbdG9rZW4uc3BsaXQoXCIgXCIpWzBdXSk7XG4gICAgICAgICAgICAvLyByZXR1cm4gdG9rZW5zLmV2ZXJ5KHQgPT4gY29udGFpbnMuY2FsbCh0aGlzLCB0KSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYWRkID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQ7XG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhZGQsIHRoaXMsIHRva2Vucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU7XG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShyZW1vdmUsIHRoaXMsIHRva2Vucyk7XG4gICAgICAgIH07XG4gICAgfVxuXG59OyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb2xvcmVkVGV4dCB7XHJcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxDb2xvcmVkVGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQ29sb3JlZFRleHQgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YmVmb3JlOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoIXByb3BzIHx8ICFwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50ID0gcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghbWVzc2FnZUNvbnRlbnQudHlwZSB8fCAhbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlIHx8IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5kaXNwbGF5TmFtZSAhPSBcIk1lc3NhZ2VDb250ZW50XCIpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUeXBlID0gbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlO1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxUeXBlLl9fb3JpZ2luYWxNZXRob2QpIHJldHVybjsgLy8gRG9uJ3QgcGF0Y2ggYWdhaW5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlID0gZnVuY3Rpb24ocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gb3JpZ2luYWxUeXBlKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvbGVDb2xvciA9IHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0gPyBwcm9wcy5tZXNzYWdlLmNvbG9yU3RyaW5nIHx8IFwiXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuc3R5bGUgPSB7Y29sb3I6IHJvbGVDb2xvcn07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsVHlwZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtZXNzYWdlQ29udGVudC50eXBlLnR5cGUsIG9yaWdpbmFsVHlwZSk7XHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGxldCBjbGFzc05hbWVNYXJrdXAgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdLm1hcmt1cFxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIrY2xhc3NOYW1lTWFya3VwLnNwbGl0KFwiIFwiKVswXSkuZm9yRWFjaChlbGVtID0+IHtcclxuICAgICAgICAgICAgZWxlbS5zdHlsZS5zZXRQcm9wZXJ0eShcImNvbG9yXCIsIFwiXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCB7YmRDb25maWcsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IGRhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCB7IGVuY3J5cHRTZXR0aW5nc0NhY2hlLCBkZWNyeXB0U2V0dGluZ3NDYWNoZSwgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcbmltcG9ydCAqIGFzIGVsZWN0cm9uIGZyb20gXCJlbGVjdHJvblwiXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKS5Nb2R1bGU7XG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUoZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfR0VUX0FQUF9QQVRIXCIpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XG5jbGFzcyBNZXRhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJNZXRhRXJyb3JcIjtcbiAgICB9XG59XG5jb25zdCBvcmlnaW5hbEpTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXTtcbmNvbnN0IG9yaWdpbmFsQ1NTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPyBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdIDogKCkgPT4ge3JldHVybiBudWxsO307XG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/KD86XFxyXFxufFxcbilbXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xuY29uc3QgZXNjYXBlZEF0UmVnZXggPSAvXlxcXFxALztcblxuZXhwb3J0IGxldCBhZGRvbkNhY2hlID0ge31cblxubGV0IGhhc1BhdGNoZWQgPSBmYWxzZVxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbnRlbnRNYW5hZ2VyIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRpbWVDYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLndhdGNoZXJzID0ge307XG4gICAgfVxuXG4gICAgcGF0Y2hFeHRlbnNpb25zKCl7XG4gICAgICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXG4gICAgICAgIGhhc1BhdGNoZWQgPSB0cnVlXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoXCJwbHVnaW5cIik7XG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKFwidGhlbWVcIik7XG4gICAgfVxuXG4gICAgZ2V0IHBsdWdpbnNGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX3BsdWdpbnNGb2xkZXIgfHwgKHRoaXMuX3BsdWdpbnNGb2xkZXIgPSBmcy5yZWFscGF0aFN5bmMocGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoICsgXCJwbHVnaW5zL1wiKSkpO31cbiAgICBnZXQgdGhlbWVzRm9sZGVyKCkge3JldHVybiB0aGlzLl90aGVtZXNGb2xkZXIgfHwgKHRoaXMuX3RoZW1lc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInRoZW1lcy9cIikpKTt9XG5cbiAgICBsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpe1xuICAgICAgICBpZih0eXBlb2YgZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSAhPT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKFwie31cIikpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSBKU09OLnBhcnNlKGRlY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIikpKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlID0ge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhhZGRvbkNhY2hlKVxuICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtrZXldXG4gICAgICAgICAgICBpZighdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKXJldHVybiBkZWxldGUgYWRkb25DYWNoZVtrZXldXG5cbiAgICAgICAgICAgIGxldCBwcm9wcyA9IFt7XG4gICAgICAgICAgICAgICAga2V5OiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwicmVzdWx0XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJoYXNoXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIlxuICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIGZvcihsZXQgcHJvcCBvZiBwcm9wcyl7XG4gICAgICAgICAgICAgICAgaWYoIShwcm9wLmtleSBpbiB2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlW3Byb3Aua2V5XSAhPT0gcHJvcC50eXBlKXtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih2YWx1ZS5oYXNoICE9PSBrZXkpe1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHZhbHVlLnJlc3VsdC5zdXNwZWN0KXsgLy8gcmVmZXRjaCBmcm9tIHJlbW90ZSB0byBiZSBzdXJlIHlvdSdyZSB1cCB0byBkYXRlLlxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5zYXZlQWRkb25DYWNoZSgpXG4gICAgfVxuXG4gICAgc2F2ZUFkZG9uQ2FjaGUoKXtcbiAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShKU09OLnN0cmluZ2lmeShhZGRvbkNhY2hlKSkpXG4gICAgfVxuXG4gICAgd2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGlmICh0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IGNvbnRlbnRUeXBlID09PSBcInBsdWdpblwiO1xuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcbiAgICAgICAgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0gPSBmcy53YXRjaChiYXNlRm9sZGVyLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgcmV0dXJuO1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICB0cnkge2ZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO31cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgcmV0dXJuIHBsdWdpbk1vZHVsZS51bmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGVtZU1vZHVsZS51bmxvYWRUaGVtZShmaWxlbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID09IHN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbihmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWUoZmlsZW5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUucmVsb2FkUGx1Z2luKGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLnJlbG9hZFRoZW1lKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdW53YXRjaENvbnRlbnQoY29udGVudFR5cGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXS5jbG9zZSgpO1xuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV07XG4gICAgfVxuXG4gICAgZXh0cmFjdE1ldGEoY29udGVudCkge1xuICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xuICAgICAgICBjb25zdCBoYXNPbGRNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLy9NRVRBXCIpO1xuICAgICAgICBpZiAoaGFzT2xkTWV0YSkgcmV0dXJuIHRoaXMucGFyc2VPbGRNZXRhKGNvbnRlbnQpO1xuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xuICAgICAgICBpZiAoaGFzTmV3TWV0YSkgcmV0dXJuIHRoaXMucGFyc2VOZXdNZXRhKGNvbnRlbnQpO1xuICAgICAgICB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcbiAgICB9XG5cbiAgICBwYXJzZU9sZE1ldGEoY29udGVudCkge1xuICAgICAgICBjb25zdCBtZXRhID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcbiAgICAgICAgY29uc3QgcmF3TWV0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcbiAgICAgICAgaWYgKG1ldGEuaW5kZXhPZihcIk1FVEFcIikgPCAwKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbHMudGVzdEpTT04ocmF3TWV0YSk7XG4gICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBjb3VsZCBub3QgYmUgcGFyc2VkLlwiKTtcbiAgICAgICAgaWYgKCFwYXJzZWQubmFtZSkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgbWlzc2luZyBuYW1lIGRhdGEuXCIpO1xuICAgICAgICBwYXJzZWQuZm9ybWF0ID0gXCJqc29uXCI7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuXG4gICAgcGFyc2VOZXdNZXRhKGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSBjb250ZW50LnNwbGl0KFwiLyoqXCIsIDIpWzFdLnNwbGl0KFwiKi9cIiwgMSlbMF07XG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xuICAgICAgICBsZXQgZmllbGQgPSBcIlwiO1xuICAgICAgICBsZXQgYWNjdW0gPSBcIlwiO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcbiAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09IFwiQFwiICYmIGxpbmUuY2hhckF0KDEpICE9PSBcIiBcIikge1xuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gbGluZS5pbmRleE9mKFwiIFwiKTtcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUuc3Vic3RyKDEsIGwgLSAxKTtcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XG4gICAgICAgIGRlbGV0ZSBvdXRbXCJcIl07XG4gICAgICAgIG91dC5mb3JtYXQgPSBcImpzZG9jXCI7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudFJlcXVpcmUodHlwZSkge1xuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSBpc1BsdWdpbiA/IG9yaWdpbmFsSlNSZXF1aXJlIDogb3JpZ2luYWxDU1NSZXF1aXJlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gc2VsZi5wbHVnaW5zRm9sZGVyIDogc2VsZi50aGVtZXNGb2xkZXI7XG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBvc3NpYmxlUGF0aCkgfHwgZmlsZW5hbWUgIT09IGZzLnJlYWxwYXRoU3luYyhwb3NzaWJsZVBhdGgpKSByZXR1cm4gUmVmbGVjdC5hcHBseShvcmlnaW5hbFJlcXVpcmUsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgXCJ1dGY4XCIpO1xuICAgICAgICAgICAgY29udGVudCA9IFV0aWxzLnN0cmlwQk9NKGNvbnRlbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBzZWxmLmV4dHJhY3RNZXRhKGNvbnRlbnQpO1xuICAgICAgICAgICAgbWV0YS5maWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpO1xuICAgICAgICAgICAgbWV0YS5hZGRlZCA9IHN0YXRzLmF0aW1lTXM7XG4gICAgICAgICAgICBtZXRhLm1vZGlmaWVkID0gc3RhdHMubXRpbWVNcztcbiAgICAgICAgICAgIG1ldGEuc2l6ZSA9IHN0YXRzLnNpemU7XG4gICAgICAgICAgICBpZiAoIWlzUGx1Z2luKSB7XG4gICAgICAgICAgICAgICAgbWV0YS5jc3MgPSBjb250ZW50O1xuICAgICAgICAgICAgICAgIGlmIChtZXRhLmZvcm1hdCA9PSBcImpzb25cIikgbWV0YS5jc3MgPSBtZXRhLmNzcy5zcGxpdChcIlxcblwiKS5zbGljZSgxKS5qb2luKFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBgbW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIG1vZHVsZS5maWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlkRXhwb3J0ID0gIVV0aWxzLmlzRW1wdHkobW9kdWxlLmV4cG9ydHMpO1xuICAgICAgICAgICAgICAgIGlmIChkaWRFeHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0YS50eXBlID0gbW9kdWxlLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWV0YTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBVdGlscy53YXJuKFwiTW9kdWxlIE5vdCBFeHBvcnRlZFwiLCBgJHttZXRhLm5hbWV9LCBwbGVhc2Ugc3RhcnQgc2V0dGluZyBtb2R1bGUuZXhwb3J0c2ApO1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50ICs9IGBcXG5tb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O1xcbm1vZHVsZS5leHBvcnRzLnR5cGUgPSAke21ldGEuZXhwb3J0cyB8fCBtZXRhLm5hbWV9O2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIGZpbGVuYW1lKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBtYWtlUGxhY2Vob2xkZXJQbHVnaW4oZGF0YSkge1xuICAgICAgICByZXR1cm4ge3BsdWdpbjoge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICBnZXROYW1lOiAoKSA9PiB7cmV0dXJuIGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lO30sXG4gICAgICAgICAgICAgICAgZ2V0QXV0aG9yOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fSxcbiAgICAgICAgICAgICAgICBnZXREZXNjcmlwdGlvbjogKCkgPT4ge3JldHVybiBkYXRhLm1lc3NhZ2UgPyBkYXRhLm1lc3NhZ2UgOiBcIlRoaXMgcGx1Z2luIHdhcyB1bmFibGUgdG8gYmUgbG9hZGVkLiBDaGVjayB0aGUgYXV0aG9yJ3MgcGFnZSBmb3IgdXBkYXRlcy5cIjt9LFxuICAgICAgICAgICAgICAgIGdldFZlcnNpb246ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogZGF0YS5uYW1lIHx8IGRhdGEuZmlsZW5hbWUsXG4gICAgICAgICAgICBmaWxlbmFtZTogZGF0YS5maWxlbmFtZSxcbiAgICAgICAgICAgIHNvdXJjZTogZGF0YS5zb3VyY2UgPyBkYXRhLnNvdXJjZSA6IFwiXCIsXG4gICAgICAgICAgICB3ZWJzaXRlOiBkYXRhLndlYnNpdGUgPyBkYXRhLndlYnNpdGUgOiBcIlwiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XG5cbiAgICAgICAgaWYoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pe1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NGaWxlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSksIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgICB9LCAoaGFzaCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1c3BlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDogaGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZihyZXN1bHQpe1xuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGVbcmVzdWx0Lmhhc2hdID0ge1xuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlc3VsdC5oYXNoLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQuc3VzcGVjdCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7X19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29tcGlsZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxuICAgICAgICBjb25zdCBjb250ZW50ID0gX19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XG4gICAgICAgIGlmKCFjb250ZW50Lm5hbWUpcmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ2Fubm90IGVzY2FwZSB0aGUgSUQuXCIsIGVycm9yOiBuZXcgRXJyb3IoXCJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmVwbGFjZScgb2YgdW5kZWZpbmVkXCIpfVxuICAgICAgICBjb250ZW50LmlkID0gVXRpbHMuZXNjYXBlSUQoY29udGVudC5uYW1lKTtcbiAgICAgICAgLy9pZighaWQpcmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiSW52YWxpZCBJRFwiLCBlcnJvcjogbmV3IEVycm9yKFwiUGxlYXNlIGZpeCB0aGUgbmFtZSBvZiBcIitmaWxlbmFtZStcIi4gQmV0dGVyRGlzY29yZCBjYW4ndCBlc2NhcGUgYW4gSUQuXCIpfVxuICAgICAgICBpZiAoaXNQbHVnaW4pIHtcbiAgICAgICAgICAgIGlmICghY29udGVudC50eXBlKSByZXR1cm47XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQucGx1Z2luID0gbmV3IGNvbnRlbnQudHlwZSgpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXTtcbiAgICAgICAgICAgICAgICBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXSA9IGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGJkdGhlbWVzW2NvbnRlbnQubmFtZV07XG4gICAgICAgICAgICBiZHRoZW1lc1tjb250ZW50Lm5hbWVdID0gY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gICBcblxuICAgIHVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZWxldGUgX19ub25fd2VicGFja19yZXF1aXJlX18uY2FjaGVbX19ub25fd2VicGFja19yZXF1aXJlX18ucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSB1bmxvYWRlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319O31cbiAgICB9XG5cbiAgICBpc0xvYWRlZChmaWxlbmFtZSwgdHlwZSkge1xuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xuICAgICAgICB0cnkge19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLmNhY2hlW19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO31cbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiBmYWxzZTt9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHJlbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcbiAgICAgICAgY29uc3QgY2FudFVubG9hZCA9IHRoaXMudW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XG4gICAgICAgIGlmIChjYW50VW5sb2FkKSByZXR1cm4gY2FudFVubG9hZDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xuICAgIH1cblxuICAgIGxvYWROZXdDb250ZW50KHR5cGUpIHtcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcbiAgICAgICAgY29uc3QgY29udGVudExpc3QgPSBPYmplY3QudmFsdWVzKGlzUGx1Z2luID8gYmRwbHVnaW5zIDogYmR0aGVtZXMpO1xuICAgICAgICBjb25zdCByZW1vdmVkID0gY29udGVudExpc3QuZmlsdGVyKHQgPT4gIWZpbGVzLmluY2x1ZGVzKHQuZmlsZW5hbWUpKS5tYXAoYyA9PiBpc1BsdWdpbiA/IGMucGx1Z2luLmdldE5hbWUoKSA6IGMubmFtZSk7XG4gICAgICAgIGNvbnN0IGFkZGVkID0gZmlsZXMuZmlsdGVyKGYgPT4gIWNvbnRlbnRMaXN0LmZpbmQodCA9PiB0LmZpbGVuYW1lID09IGYpICYmIGYuZW5kc1dpdGgoZmlsZUVuZGluZykgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGYpKS5pc0ZpbGUoKSk7XG4gICAgICAgIHJldHVybiB7YWRkZWQsIHJlbW92ZWR9O1xuICAgIH1cblxuICAgIGFzeW5jIGxvYWRBbGxDb250ZW50KHR5cGUpIHtcbiAgICAgICAgdGhpcy5wYXRjaEV4dGVuc2lvbnMoKVxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XG4gICAgICAgIGNvbnN0IGJhc2VkaXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xuICAgICAgICAgICAgaWYgKGVycm9yKSBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGxvYWRQbHVnaW5zKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwicGx1Z2luXCIpO31cbiAgICBsb2FkVGhlbWVzKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwidGhlbWVcIik7fVxufTtcblxuLyoqXG4gKiBEb24ndCBleHBvc2UgY29udGVudE1hbmFnZXIgLSBjb3VsZCBiZSBkYW5nZXJvdXMgZm9yIG5vd1xuICovIiwiaW1wb3J0IHtiZENvbmZpZywgbWluU3VwcG9ydGVkVmVyc2lvbiwgYmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luRXJyb3JzLCBiZHRoZW1lRXJyb3JzLCBiYmRDaGFuZ2Vsb2csIGRlZmF1bHRDb29raWUsIGN1cnJlbnREaXNjb3JkVmVyc2lvbiwgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEMsIGxpZ2h0Y29yZFNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5pbXBvcnQgQkRMb2dvIGZyb20gXCIuLi91aS9iZExvZ29cIjtcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcbmltcG9ydCBMaWdodGNvcmRMb2dvIGZyb20gXCIuLi9zdmcvTGlnaHRjb3JkXCI7XG5pbXBvcnQgUGx1Z2luQ2VydGlmaWVyIGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xuaW1wb3J0IGRpc3RhbnQsIHsgdXVpZHY0IH0gZnJvbSBcIi4vZGlzdGFudFwiO1xuaW1wb3J0IEVtb2ppTW9kdWxlIGZyb20gXCIuL2Vtb2ppTW9kdWxlXCJcbmltcG9ydCAqIGFzIGVsZWN0cm9uIGZyb20gXCJlbGVjdHJvblwiXG5pbXBvcnQgdjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuXG5sZXQgbWV0aG9kc1xuZnVuY3Rpb24gQ29yZSgpIHt9XG5cblxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xuICAgIE9iamVjdC5hc3NpZ24oYmRDb25maWcsIGNvbmZpZyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ29yZS5wcm90b3R5cGUsIFwibWV0aG9kc1wiLCB7XG4gICAgZ2V0KCl7XG4gICAgICAgIHJldHVybiBtZXRob2RzXG4gICAgfVxufSlcblxuQ29yZS5wcm90b3R5cGUuc2V0TWV0aG9kcyA9IGZ1bmN0aW9uKG0pIHtcbiAgICBpZiAodGhpcy5oYXNTdGFydGVkKSByZXR1cm47XG4gICAgbWV0aG9kcyA9IG1cbn07XG5cbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNTdGFydGVkKSByZXR1cm47XG4gICAgdGhpcy5oYXNTdGFydGVkID0gdHJ1ZTtcblxuICAgIGlmICghQXJyYXkucHJvdG90eXBlLmZsYXQpIHtcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiYmRWZXJzaW9uICsgXCIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9sZCB2ZXJzaW9uIChcIiArIGN1cnJlbnREaXNjb3JkVmVyc2lvbiArIFwiKSBvZiBEaXNjb3JkLiBQbGVhc2UgdXBkYXRlIHlvdXIgRGlzY29yZCBpbnN0YWxsYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJkQ29uZmlnLnZlcnNpb24gPCBtaW5TdXBwb3J0ZWRWZXJzaW9uKSB7XG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmRDb25maWcudmVyc2lvbiArIFwiICh5b3VyIHZlcnNpb24pXCIgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsYXRlc3QganMgKFwiICsgYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5FRCkge1xuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBFbmhhbmNlZERpc2NvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQgJiYgd2luZG93LldlYlNvY2tldC5uYW1lICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZS5pbmNsdWRlcyhcIlBhdGNoZWRcIikpIHtcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggUG93ZXJjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRyaWJ1dGVzLmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xuXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcbiAgICB0aGlzLmluaXRTZXR0aW5ncygpO1xuXG4gICAgYXdhaXQgdGhpcy5jaGVja0Zvckd1aWxkcygpO1xuICAgIEJEVjIuaW5pdGlhbGl6ZSgpO1xuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJVcGRhdGluZyBTZXR0aW5nc1wiKTtcbiAgICBzZXR0aW5nc1BhbmVsLmluaXRpYWxpemVTZXR0aW5ncygpO1xuXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgQWRkb25zIENhY2hlXCIpXG4gICAgYXdhaXQgY29udGVudE1hbmFnZXIubG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKVxuXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgUGx1Z2luc1wiKTtcbiAgICBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbnMoKTtcblxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFRoZW1lc1wiKTtcbiAgICBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWVzKCk7XG5cbiAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgQnVmZmVyLmZyb20oRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpLCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIikpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1kYy0wXCJdKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ0bi5idG4tZGlzY29ubmVjdFwiKS5jbGljaygpO1xuICAgIH0pO1xuXG4gICAgUGx1Z2luQ2VydGlmaWVyLnN0YXJ0KClcblxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJSZW1vdmluZyBMb2FkaW5nIEljb25cIik7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKS5sZW5ndGgpIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIE1haW4gT2JzZXJ2ZXJcIik7XG4gICAgdGhpcy5pbml0T2JzZXJ2ZXIoKTtcblxuICAgIC8vIFNob3cgbG9hZGluZyBlcnJvcnNcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIHtcbiAgICAgICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XG4gICAgICAgIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBiZHBsdWdpbkVycm9ycywgdGhlbWVzOiBiZHRoZW1lRXJyb3JzfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gRGF0YVN0b3JlLmdldEJERGF0YShcInZlcnNpb25cIik7XG4gICAgaWYgKGJiZFZlcnNpb24gPiBwcmV2aW91c1ZlcnNpb24pIHtcbiAgICAgICAgaWYgKGJiZENoYW5nZWxvZykgdGhpcy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTtcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcInZlcnNpb25cIiwgYmJkVmVyc2lvbik7XG4gICAgfVxuXG4gICAgRW1vamlNb2R1bGUuc3RhcnQoKVxuXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFBpbGxzLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgUGlsbHMgUGF0Y2hcIikoKTtcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRMaXN0SXRlbXMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBMaXN0IEl0ZW1zIFBhdGNoXCIpKCk7XG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lc3NhZ2VIZWFkZXIuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBDaGF0IFBhdGNoXCIpKCk7XG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lbWJlckxpc3QuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBNZW1iZXIgTGlzdCBQYXRjaFwiKSgpO1xuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRhY2htZW50LmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xuXG4gICAgaWYoYmRDb25maWcuaGF2ZUluc3RhbGxlZERlZmF1bHQpe1xuICAgICAgICBsZXQgYWxlcnQgPSBVdGlscy5hbGVydChcIkZpcnN0IEluc3RhbGxhdGlvblwiLCBcIkFzIGl0IGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBpbnN0YWxsIExpZ2h0Y29yZCwgV2UgYWRkZWQgdHdvIGRlZmF1bHQgdGhlbWVzIGFuZCBvbmUgZGVmYXVsdCBwbHVnaW4gaW4geW91ciBwbHVnaW4vdGhlbWUgZm9sZGVyLiBDaGVjayBpdCBpbiB0aGUgUGx1Z2luL1RoZW1lIHNldHRpbmdzLlwiKVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgYWxlcnQub25DbG9zZShyZXNvbHZlKVxuICAgICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBsb2dvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnQgPiBkaXYudHlwZVdpbmRvd3MtMXphLW43LndpdGhGcmFtZS1oYVlsdEkudGl0bGVCYXItQUM0cEdWLmhvcml6b250YWxSZXZlcnNlLTN0UmpZNy5mbGV4LTFPMUdLWS5kaXJlY3Rpb25Sb3dSZXZlcnNlLW04SWpJcS5qdXN0aWZ5U3RhcnQtMk5ERnppLmFsaWduU3RyZXRjaC1EcEdQZjMuZGEtdHlwZVdpbmRvd3MuZGEtd2l0aEZyYW1lLmRhLXRpdGxlQmFyLmRhLWhvcml6b250YWxSZXZlcnNlLmRhLWZsZXguZGEtZGlyZWN0aW9uUm93UmV2ZXJzZS5kYS1qdXN0aWZ5U3RhcnQuZGEtYWxpZ25TdHJldGNoID4gZGl2LndvcmRtYXJrV2luZG93cy0xdjBsWUQud29yZG1hcmstMmlERGZtLmRhLXdvcmRtYXJrV2luZG93cy5kYS13b3JkbWFya1wiKVxuICAgIGlmKGxvZ28pe1xuICAgICAgICBsb2dvLnN0eWxlLnRvcCA9IFwiM3B4XCJcbiAgICAgICAgbG9nby5pbm5lckhUTUwgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMTBcIiB3aWR0aD1cIjcwXCIgdmlld0JveD1cIjAgMCA3Mi41NCAxMFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC01cHgsIG1hcmdpbi10b3A6IDEwcHhcIj5cbiAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00NC44MSw5LjY3VjYuMzNjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MUEzLjUzLDMuNTMsMCwwLDAsNDYuMiwzYy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5LjY3YzAsMi4yMSwxLjg5LDMuMzMsMy43NywzLjMzYTMuODcsMy44NywwLDAsMCwzLjQ1LTIuMThsLTIuMTItMUM0NywxMS4xNyw0NC44MSwxMC44NSw0NC44MSw5LjY3Wk0xMC42OCwxMi44OWgyLjQxVjMuMTdIMTAuNjhaTTcxLjc2LDMuMTRINjguMTlWNy4yM0w3MC41Nyw5LjR2LTRoMS4yN2MuODEsMCwxLjIxLjQxLDEuMjEsMXYzYzAsLjYzLS4zOCwxLjA1LTEuMjEsMS4wNUg2OC4xOHYyLjMxaDMuNTdjMS45MiwwLDMuNzItMSwzLjcyLTMuMlY2LjM5Qzc1LjQ4LDQuMTMsNzMuNjgsMy4xNCw3MS43NiwzLjE0Wk01NC4yMiwzYy0yLDAtNCwxLjEtNCwzLjM0VjkuNjZjMCwyLjIzLDIsMy4zNCw0LDMuMzRzMy45NS0xLjExLDMuOTUtMy4zNFY2LjM0QzU4LjE5LDQuMTEsNTYuMiwzLDU0LjIyLDNabTEuNTUsNi42NmMwLC43LS43OCwxLjA2LTEuNTQsMS4wNnMtMS41NS0uMzUtMS41NS0xLjA2VjYuMzRjMC0uNzIuNzUtMS4xLDEuNS0xLjFzMS41OS4zNSwxLjU5LDEuMVpNNjYuODQsNi4zNGMwLTIuMjktMS41OC0zLjItMy41NS0zLjJINTkuNDZ2OS43M2gyLjQ1VjkuNzdoLjQzbDIuMjIsMy4wOWgzTDY1LDkuNTJDNjYuMTMsOS4xNSw2Ni44NCw4LjE0LDY2Ljg0LDYuMzRaTTYzLjMzLDcuNjVINjEuOTFWNS40M2gxLjQyQTEuMTEsMS4xMSwwLDEsMSw2My4zMyw3LjY1Wk0yOS44MywxM2gyLjQyVjMuMDZIMjkuODNWNi43M2wtMywwVjMuMDlIMjQuN3Y5Ljc4aDIuMTRWOC42OGwzLDBaTTE3LjE2LDkuNzZWNi40MmMwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxYTMuNTUsMy41NSwwLDAsMC0zLjM2LTIuMjRjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNzZjMCwyLjIxLDIsMy4xNSwzLjksMy4xNXMzLjU4LTEsMy41OC0zVjcuNThIMTguNzlsMCwxLjM2SDIwLjN2Ljc3QzIwLjMsMTAuOTIsMTcuMTYsMTAuOTQsMTcuMTYsOS43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTIuOTMgLTMpXCIvPlxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIzNS45MSAwLjA2IDM4LjQzIDAuMDYgMzguNDMgMS44NCAzNS45MiAxLjgxIDM1Ljk3IDEwIDMzLjU1IDEwIDMzLjQ5IDEuNzUgMzAuOTggMS43NCAzMC45OCAwLjA2IDMzLjQ5IDAuMDYgMzUuOTEgMC4wNlwiLz5cbiAgICA8cG9seWdvbiBmaWxsPVwiY3VycmVudENvbG9yXCIgcG9pbnRzPVwiMCA5Ljk3IDYuNSAxMCA2LjUgNy42MyAyLjQxIDcuNjMgMi40MSAwLjI2IDAgMi4yNiAwIDkuOTdcIi8+XG48L3N2Zz5gXG4gICAgfVxufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRyaWJ1dGVzID0gYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgbGV0IGF0dHJpYnNQYXRjaHMgPSBbXVxuICAgIHRoaXMuY2FuY2VsUGF0Y2hBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGF0dHJpYnNQYXRjaHMuZm9yRWFjaChlID0+IGUoKSlcbiAgICB9XG5cbiAgICB3aGlsZSghdjIuTWVzc2FnZUNvbXBvbmVudClhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSlcbiAgICBcbiAgICAvLyBUT0RPOiB0cnkgdG8gcGF0Y2ggY29ycmVjdGx5IHRoZSB1c2VyIHBvcG91dCBvbiBhIG5leHQgdXBkYXRlXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkRpc2NvcmRUYWdcIilcbiAgICAudGhlbihEaXNjb3JkVGFnID0+IHtcbiAgICAgICAgbGV0IERpc2NvcmRUYWdDb21wID0gRGlzY29yZFRhZy5kZWZhdWx0XG4gICAgICAgIERpc2NvcmRUYWcuZGVmYXVsdCA9IGZ1bmN0aW9uKHByb3BzKXtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IERpc2NvcmRUYWdDb21wKHByb3BzKVxuXG4gICAgICAgICAgICBsZXQgaWQgPSB1dWlkdjQoKVxuXG4gICAgICAgICAgICBsZXQgYmFkZ2VEaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCIsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogXCI1cHhcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgIGlkOiBcImJhZGdlcy1cIitpZCxcbiAgICAgICAgICAgICAgICBrZXk6IFwiYmFkZ2VzLVwiK2lkLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5oZXJpdFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtyZXR1cm5WYWx1ZV1cblxuICAgICAgICAgICAgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHsgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgcHJvcHMudXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7IC8vIE5vdCBUaG9taXo6IExpZ2h0Y29yZCBEZXZlbG9wZXIsIFBob3JjeXM6IExpZ2h0Y29yZCBEZXZlbG9wZXJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYmFkZ2VEaXYpXG4gICAgICAgICAgICBsZXQgZGl2ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjaGlsZHJlbilcbiAgICAgICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBwcm9wcy51c2VyLCBmYWxzZSlcblxuICAgICAgICAgICAgcmV0dXJuIGRpdlxuICAgICAgICB9XG4gICAgICAgIERpc2NvcmRUYWcuZGVmYXVsdC5kaXNwbGF5TmFtZSA9IERpc2NvcmRUYWdDb21wLmRpc3BsYXlOYW1lXG4gICAgfSlcblxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBpZihkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UpeyAvLyB0aGlzIGNhbiBiZSBhIGJsb2NrZWQgbWVzc2FnZSAobm90IG9wZW5lZClcbiAgICAgICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHNbXCJkYXRhLW1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcbiAgICAgICAgfVxuICAgIH19KSlcbiAgICAgICAgLypcbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wc1tcIm1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcbiAgICB9fSkpKi9cbn1cblxuQ29yZS5wcm90b3R5cGUuY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcbiAgICBsZXQgdGltZXNDaGVja2VkID0gMDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gQkRWMi5ndWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn1gKS5sZW5ndGggPiAwKSB0aW1lc0NoZWNrZWQrKztcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkID0gQkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgICAgICAgY29uc3QgYmxvYiA9IEJEVjIuZ3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9IC4ke2d1aWxkfSAuJHtibG9ifWApLmxlbmd0aCA+IDApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lc0NoZWNrZWQgPj0gNTApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPSBcImxvYWRpbmdcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4ge3NldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7fSk7XG4gICAgfSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5pbmplY3RFeHRlcm5hbHMgPSBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAvLyBObyBleHRlcm5hbHNcbn07XG5cbkNvcmUucHJvdG90eXBlLmluaXRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBEYXRhU3RvcmUuaW5pdGlhbGl6ZSgpO1xuICAgIGlmKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKXtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgZGVmYXVsdFJQQyk7XG4gICAgfVxuICAgIGlmKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpe1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgZGVmYXVsdENvb2tpZSk7XG4gICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5sb2FkU2V0dGluZ3MoKTtcbiAgICAgICAgZm9yIChjb25zdCBzZXR0aW5nIGluIGRlZmF1bHRDb29raWUpIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9IGRlZmF1bHRDb29raWVbc2V0dGluZ107XG4gICAgICAgICAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucHJvdG90eXBlICYmIGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnMpXG4gICAgLnRoZW4oc2V0dGluZ01vZHVsZSA9PiB7XG5cbiAgICAgICAgbGV0IGdldFByZWRpY2F0ZVNlY3Rpb25zID0gc2V0dGluZ01vZHVsZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9uc1xuICAgICAgICBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBnZXRQcmVkaWNhdGVTZWN0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcblxuICAgICAgICAgICAgaWYoIXJlc3VsdFsxXSlyZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBpZihyZXN1bHRbMV0uc2VjdGlvbiA9PT0gXCJNeSBBY2NvdW50XCIpeyAvLyB1c2VyIHNldHRpbmdzLCBub3QgZ3VpbGQgc2V0dGluZ3NcbiAgICAgICAgICAgICAgICBsZXQgcG9wZWQgPSBbXVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxuXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uc2V0dGluZ3NQYW5lbC5yZW5kZXJTaWRlYmFyKHRoaXMpKVxuXG4gICAgICAgICAgICAgICAgd2hpbGUocG9wZWRbMF0pe1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwb3BlZC5wb3AoKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH1cbiAgICB9KVxufTtcblxuXG5sZXQgY2xhc3NOYW1lTGF5ZXJcbmxldCBjbGFzc05hbWVTb2NpYWxMaW5rc1xubGV0IGNsYXNzTmFtZU1vZGFsXG5cbkNvcmUucHJvdG90eXBlLmluaXRPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbk1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikgcGx1Z2luTW9kdWxlLnJhd09ic2VydmVyKG11dGF0aW9uKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vdGhpbmcgYWRkZWQsIHNraXBcbiAgICAgICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcblxuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZUxheWVyKWNsYXNzTmFtZUxheWVyID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVTb2NpYWxMaW5rcyljbGFzc05hbWVTb2NpYWxMaW5rcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc29jaWFsTGlua3MgJiYgdHlwZW9mIGUuc29jaWFsTGlua3MgPT09IFwic3RyaW5nXCIpWzBdLnNvY2lhbExpbmtzXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTW9kYWwpY2xhc3NOYW1lTW9kYWwgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1vZGFsICYmIHR5cGVvZiBlLm1vZGFsID09PSBcInN0cmluZ1wiICYmIGUuaW5uZXIgJiYgdHlwZW9mIGUuaW5uZXIgPT09IFwic3RyaW5nXCIgJiYgIWUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlKVswXS5tb2RhbFxuXG4gICAgICAgICAgICBpZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKSA9PT0gXCJHVUlMRF9TRVRUSU5HU1wiKXtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZVNvY2lhbExpbmtzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucXVlcnlTZWxlY3RvcihcIiNhY2Vfc2V0dGluZ3NtZW51XCIpKSBub2RlLmlkID0gXCJhY2Vfc2V0dGluZ3NtZW51X2NvbnRhaW5lclwiO1xuXG4gICAgICAgICAgICAvLyBFbW9qaSBQaWNrZXJcbiAgICAgICAgICAgIC8vbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIilcbiAgICAgICAgICAgIC8vaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyMikgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZUVtb2ppUGlja2VyKS5sZW5ndGggICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrY2xhc3NOYW1lRW1vamlQaWNrZXIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUFuaW1hdG9yTGVmdCkpIHF1aWNrRW1vdGVNZW51Lm9ic0NhbGxiYWNrKG5vZGUpO1xuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUuc2hvd0NoYW5nZWxvZ01vZGFsID0gZnVuY3Rpb24ob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIFV0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zKTtcbn07XG5cbkNvcmUucHJvdG90eXBlLmFsZXJ0ID0gZnVuY3Rpb24odGl0bGUsIGNvbnRlbnQpIHtcbiAgICByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hTb2NpYWwgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IFRhYkJhciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiVGFiQmFyXCIpO1xuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgIGlmICghVGFiQmFyKSByZXR1cm47XG4gICAgdGhpcy5zb2NpYWxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuO1xuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xuICAgICAgICBpZiAoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gM10udHlwZS5kaXNwbGF5TmFtZSAhPT0gXCJTZXBhcmF0b3JcIikgcmV0dXJuO1xuICAgICAgICBpZiAoIWNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcInNvY2lhbExpbmtzXCIpKSByZXR1cm47XG4gICAgICAgIGlmIChBbmNob3IpIHtcbiAgICAgICAgICAgIGxldCBzb2NpYWxNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc29jaWFsTGlua3MpWzBdXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGU7XG4gICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbCguLi5hcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIrc29jaWFsTW9kdWxlMS5saW5rLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIrc29jaWFsTW9kdWxlMS5saW5rLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUgPSBuZXdPbmU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgY2xhc3NOYW1lQ29sb3JNdXRlZCxcbiAgICAgICAgICAgIHNpemVzLFxuICAgICAgICAgICAgY2xhc3NOYW1lVmVyc2lvbkhhc2hcbiAgICAgICAgXSA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yTXV0ZWQpWzBdLmNvbG9yTXV0ZWQsXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVyc2lvbkhhc2gpWzBdLnZlcnNpb25IYXNoXG4gICAgICAgIF1cblxuICAgICAgICBjb25zdCB2ZXJzaW9uSGFzaCA9IGAoJHtiZENvbmZpZy5oYXNoID8gYmRDb25maWcuaGFzaC5zdWJzdHJpbmcoMCwgNykgOiBiZENvbmZpZy5icmFuY2h9KWA7XG4gICAgICAgIGNvbnN0IGJ1aWxkSW5mbyA9IGVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKFwiTElHSFRDT1JEX0dFVF9CVUlMRF9JTkZPU1wiKVxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gW1xuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWB9LCBgTGlnaHRjb3JkICR7YnVpbGRJbmZvLnZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogY2xhc3NOYW1lVmVyc2lvbkhhc2grXCIgZGEtdmVyc2lvbkhhc2hcIn0sIGAoJHsoYnVpbGRJbmZvLmNvbW1pdCB8fCBcIlVua25vd25cIikuc2xpY2UoMCwgNyl9KWApKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBgJHtjbGFzc05hbWVDb2xvck11dGVkfSAke3NpemVzLnNpemUxMn1gfSwgYEJCRCAke2JiZFZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogY2xhc3NOYW1lVmVyc2lvbkhhc2grXCIgZGEtdmVyc2lvbkhhc2hcIn0sIHZlcnNpb25IYXNoKSlcbiAgICAgICAgXVxuICAgICAgICBcblxuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNpb25zID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcbiAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWxWZXJzaW9ucyguLi5hcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnNwbGljZSgxLCAwLCBhZGRpdGlvbmFsKTtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XG4gICAgICAgIH07XG4gICAgfX0pO1xufTtcblxuY29uc3QgZ2V0R3VpbGRDbGFzc2VzID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZ3VpbGRzV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwid3JhcHBlclwiLCBcInVucmVhZE1lbnRpb25zQmFyXCIpO1xuICAgIGNvbnN0IGd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZ3VpbGRzRXJyb3JcIiwgXCJzZWxlY3RlZFwiKTtcbiAgICBjb25zdCBwaWxsID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZExpc3RJdGVtcyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBHdWlsZENsYXNzZXMgPSBnZXRHdWlsZENsYXNzZXMoKTtcbiAgICBjb25zdCBsaXN0SXRlbUNsYXNzID0gR3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcbiAgICBjb25zdCBibG9iQ2xhc3MgPSBHdWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XG4gICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XG4gICAgY29uc3QgR3VpbGRDb21wb25lbnQgPSByZWFjdEluc3RhbmNlLnJldHVybi50eXBlO1xuICAgIGlmICghR3VpbGRDb21wb25lbnQpIHJldHVybjtcbiAgICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEucmV0dXJuVmFsdWUgJiYgZGF0YS50aGlzT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSBkYXRhLnRoaXNPYmplY3QucHJvcHM7XG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGRcIjtcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudW5yZWFkKSBjbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSBjbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYXVkaW8pIGNsYXNzTmFtZSArPSBcIiBiZC1hdWRpb1wiO1xuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS52aWRlbykgY2xhc3NOYW1lICs9IFwiIGJkLXZpZGVvXCI7XG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSBjbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYW5pbWF0YWJsZSkgY2xhc3NOYW1lICs9IFwiIGJkLWFuaW1hdGFibGVcIjtcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgICAgICB9XG4gICAgfX0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFBpbGxzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuZ3VpbGRQaWxsUGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBndWlsZFBpbGwgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmICFtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LnRvU3RyaW5nICYmIG0uZGVmYXVsdC50b1N0cmluZygpLmluY2x1ZGVzKFwidHJhbnNsYXRlM2RcIikpO1xuICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XG4gICAgdGhpcy5ndWlsZFBpbGxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKGd1aWxkUGlsbCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcbiAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XG4gICAgICAgIGlmIChwcm9wcy5zZWxlY3RlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcbiAgICAgICAgaWYgKHByb3BzLmhvdmVyZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWhvdmVyZWRcIjtcbiAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XG4gICAgfX0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBHdWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcbiAgICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInJlbmRlckxpc3RJdGVtXCIpO1xuICAgIGlmICghZ3VpbGRDb21wb25lbnRzIHx8ICFHdWlsZHMpIHJldHVybjtcbiAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGd1aWxkQ29tcG9uZW50cy5TZXBhcmF0b3IoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkLXNlcGFyYXRvclwiO1xuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfTtcbiAgICB0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZHMucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bM10udHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xuICAgIH19KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLkF0dGFjaG1lbnRQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IEF0dGFjaG1lbnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdHRhY2htZW50XCIpWzBdIC8vIHRlbXBvcmFyeVxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgIGlmICghQW5jaG9yIHx8ICFBdHRhY2htZW50IHx8ICFBdHRhY2htZW50LmRlZmF1bHQpIHJldHVybjtcbiAgICB0aGlzLkF0dGFjaG1lbnRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEF0dGFjaG1lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSlyZXR1cm5cbiAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdIHx8IG51bGxcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XG5cbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51cmwpcmV0dXJuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcblxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXG4gICAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgICAgICBpZDogXCJjZXJ0aWZpZWQtXCIraWRcbiAgICAgICAgfSkpXG4gICAgICAgIFBsdWdpbkNlcnRpZmllci5wYXRjaChhdHRhY2htZW50LCBcImNlcnRpZmllZC1cIitpZClcbiAgICB9fSlcbn1cblxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZXNzYWdlSGVhZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMubWVzc2FnZUhlYWRlclBhdGNoKSByZXR1cm47XG4gICAgY29uc3QgTWVzc2FnZUhlYWRlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiTWVzc2FnZVRpbWVzdGFtcFwiKTtcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVzc2FnZUhlYWRlciB8fCAhTWVzc2FnZUhlYWRlci5kZWZhdWx0KSByZXR1cm47XG4gICAgdGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZXNzYWdlSGVhZGVyLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBhdXRob3IgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcIm1lc3NhZ2UuYXV0aG9yXCIpO1xuICAgICAgICAvLyBjb25zdCBoZWFkZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wc1wiKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuXCIpO1xuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdXRob3IgfHwgIWF1dGhvci5pZClyZXR1cm5cbiAgICAgICAgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcbiAgICAgICAgaWYgKGF1dGhvci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGF1dGhvci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBhdXRob3IuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgYXBwbHlCYWRnZXMoaWQsIGF1dGhvciwgdHJ1ZSlcbiAgICB9fSk7XG59O1xuXG5mdW5jdGlvbiBhcHBseUJhZGdlcyhpZCwgdXNlciwgY2hhdCl7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmFkZ2VzLVwiK2lkKVxuICAgICAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuXG4gICAgICAgIGlmKGRpdi5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm5cbiAgICAgICAgbGV0IGJsb2NrRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICAgICAgICBibG9ja0Rpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGJsb2NrRGl2KVxuXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuXG4gICAgICAgIGRpc3RhbnQuZ2V0QmFkZ2VzKHVzZXIuaWQpXG4gICAgICAgIC50aGVuKGJhZGdlcyA9PiB7XG4gICAgICAgICAgICBiYWRnZXMuZm9yRWFjaChiYWRnZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN2Zzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCIxNnB4XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjE2cHhcIiwgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmFkZ2Uuc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihzY29wZSA9PT0gXCJ1c2VyXCIpey8vIHJlcXVpcmUgdXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudXNlciA9IHVzZXJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pIFxuICAgICAgICAgICAgICAgIGlmKCFiYWRnZS5ocmVmKXtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuQW5jaG9yID0gQW5jaG9yXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmhyZWYgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IGJhZGdlLm5hbWV9LFxuICAgICAgICAgICAgICAgICAgICBiYWRnZS5ocmVmID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogYmFkZ2UuaHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2hhdCA/IFwiYmQtY2hhdC1iYWRnZVwiIDogXCJiZC1tZW1iZXItYmFkZ2VcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKGVsZW1lbnQsIGRpdjIpXG4gICAgICAgICAgICAgICAgZGl2Mi5jaGlsZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChub2RlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoTWVtYmVyTGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLm1lbWJlckxpc3RQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IE1lbWJlckxpc3RJdGVtID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNZW1iZXJMaXN0SXRlbVwiKTtcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVtYmVyTGlzdEl0ZW0gfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLnJlbmRlckRlY29yYXRvcnMpIHJldHVybjtcbiAgICB0aGlzLm1lbWJlckxpc3RQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSwgXCJyZW5kZXJEZWNvcmF0b3JzXCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS50aGlzT2JqZWN0LCBcInByb3BzLnVzZXJcIik7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICF1c2VyIHx8ICF1c2VyLmlkKXJldHVyblxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xuICAgICAgICBpZiAodXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCB1c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmFkZ2VzLVwiK2lkfSlcbiAgICAgICAgKVxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgdXNlciwgZmFsc2UpXG4gICAgfX0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUudXBkYXRlSW5qZWN0b3IgPSBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIGFuIGluamVjdGlvbiBwYXRoLCBzbyB3ZSBkbyBub3QgbmVlZCB0aGUgY29kZSBiZWxvdy4gXG4gICAgLy8gSW5zZXJ0IGNvbW1lbnRzIHNvIGl0IHdpbGwgYmUgZXJhc2VkIHdoZW4gcHJvZHVjdGlvbi5cbiAgICBcbiAgICBjb25zdCBpbmplY3Rpb25QYXRoID0gRGF0YVN0b3JlLmluamVjdGlvblBhdGg7XG4gICAgaWYgKCFpbmplY3Rpb25QYXRoKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvKlxuXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuICAgIGNvbnN0IHJtcmYgPSByZXF1aXJlKFwicmltcmFmXCIpO1xuICAgIGNvbnN0IHlhdXpsID0gcmVxdWlyZShcInlhdXpsXCIpO1xuICAgIGNvbnN0IG1rZGlycCA9IHJlcXVpcmUoXCJta2RpcnBcIik7XG4gICAgY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpO1xuXG4gICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGgucmVzb2x2ZShpbmplY3Rpb25QYXRoLCBcIi4uXCIpO1xuICAgIGNvbnN0IGZvbGRlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGluamVjdGlvblBhdGgpO1xuICAgIGNvbnN0IHppcExpbmsgPSBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvYXJjaGl2ZS9pbmplY3Rvci56aXBcIjtcbiAgICBjb25zdCBzYXZlZFppcCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcImluamVjdG9yLnppcFwiKTtcbiAgICBjb25zdCBleHRyYWN0ZWRGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJCZXR0ZXJEaXNjb3JkQXBwLWluamVjdG9yXCIpO1xuXG4gICAgLy8gRG93bmxvYWQgdGhlIGluamVjdG9yIHppcCBmaWxlXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xuICAgIGxldCBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHJlcXVlc3QuZ2V0KHt1cmw6IHppcExpbmssIGVuY29kaW5nOiBudWxsfSwgYXN5bmMgKGVycm9yLCByZXNwb25zZSwgYm9keSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWVvbmUgaGFzIHRoZWlyIG93biBjb3B5XG4gICAgICAgICAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhzYXZlZFppcCwgcmVzKSk7XG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XG5cbiAgICAgICAgICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiV3JpdGluZyBcIiArIHNhdmVkWmlwKTtcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZShzYXZlZFppcCwgYm9keSwgZXJyID0+IHJlc29sdmUoIWVycikpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoIXN1Y2Nlc3MpIHJldHVybiBzdWNjZXNzO1xuXG4gICAgLy8gQ2hlY2sgYW5kIGRlbGV0ZSByZW5hbWUgZXh0cmFjdGlvblxuICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKGV4dHJhY3RlZEZvbGRlciwgcmVzKSk7XG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XG4gICAgXG4gICAgLy8gVW56aXAgdGhlIGRvd25sb2FkZWQgemlwIGZpbGVcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcbiAgICB6aXBmaWxlLm9uKFwiZW50cnlcIiwgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgLy8gU2tpcCBkaXJlY3RvcmllcywgdGhleSBhcmUgaGFuZGxlZCB3aXRoIG1rZGlycFxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcblxuICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkV4dHJhY3RpbmcgXCIgKyBlbnRyeS5maWxlTmFtZSk7XG4gICAgICAgIC8vIE1ha2UgYW55IG5lZWRlZCBwYXJlbnQgZGlyZWN0b3JpZXNcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgZW50cnkuZmlsZU5hbWUpO1xuICAgICAgICBta2RpcnAuc3luYyhwYXRoLmRpcm5hbWUoZnVsbFBhdGgpKTtcbiAgICAgICAgemlwZmlsZS5vcGVuUmVhZFN0cmVhbShlbnRyeSwgZnVuY3Rpb24oZXJyLCByZWFkU3RyZWFtKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmVhZFN0cmVhbS5vbihcImVuZFwiLCBmdW5jdGlvbigpIHt6aXBmaWxlLnJlYWRFbnRyeSgpO30pOyAvLyBHbyB0byBuZXh0IGZpbGUgYWZ0ZXIgdGhpc1xuICAgICAgICAgICAgcmVhZFN0cmVhbS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZ1bGxQYXRoKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHppcGZpbGUucmVhZEVudHJ5KCk7IC8vIFN0YXJ0IHJlYWRpbmdcblxuICAgIC8vIFdhaXQgZm9yIHRoZSBmaW5hbCBmaWxlIHRvIGZpbmlzaFxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gemlwZmlsZS5vbmNlKFwiZW5kXCIsIHJlc29sdmUpKTtcblxuICAgIC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgZmluYWwgc3RlcFxuICAgIGNvbnN0IGJhY2t1cEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBgJHtmb2xkZXJOYW1lfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGluamVjdGlvblBhdGgsIGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xuXG4gICAgLy8gUmVuYW1lIHRoZSBleHRyYWN0ZWQgZm9sZGVyIHRvIHdoYXQgaXQgc2hvdWxkIGJlXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgYFJlbmFtaW5nICR7cGF0aC5iYXNlbmFtZShleHRyYWN0ZWRGb2xkZXIpfSB0byAke2ZvbGRlck5hbWV9YCk7XG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJGYWlsZWQgdG8gcmVuYW1lIHRoZSBmaW5hbCBkaXJlY3RvcnlcIik7XG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cblxuICAgIC8vIElmIHJlbmFtZSBoYWQgaXNzdWVzLCBkZWxldGUgd2hhdCB3ZSB0cmllZCB0byByZW5hbWUgYW5kIHJlc3RvcmUgYmFja3VwXG4gICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuLi4gcmVzdG9yaW5nIGJhY2t1cHMuXCIpO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoZXh0cmFjdGVkRm9sZGVyLCByZXNvbHZlKSk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGJhY2t1cEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgcmVzb2x2ZSkpO1xuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgZXZlcnl0aGluZyBzaG91bGQgaGF2ZSBnb25lIHNtb290aGx5LlxuICAgIC8vIENsZWFudXAgdGhlIGJhY2t1cCBmb2xkZXIgdGhlbiByZW1vdmUgdGhlIHppcFxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnVubGluayhzYXZlZFppcCwgcmVzb2x2ZSkpO1xuXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJJbmplY3RvciBVcGRhdGVkIVwiKTtcbiAgICByZXR1cm4gc3VjY2VzczsqL1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IENvcmUoKTtcblxuLyoqXG4gKiBEb24ndCBleHBvc2UgY29yZSAtIGNvdWxkIGJlIGRhbmdlcm91cyBmb3Igbm93XG4gKi8iLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IHJlbGVhc2VDaGFubmVsID0gRGlzY29yZE5hdGl2ZS5nbG9iYWxzID8gRGlzY29yZE5hdGl2ZS5nbG9iYWxzLnJlbGVhc2VDaGFubmVsIDogRGlzY29yZE5hdGl2ZS5hcHAgPyBEaXNjb3JkTmF0aXZlLmFwcC5nZXRSZWxlYXNlQ2hhbm5lbCgpIDogXCJzdGFibGVcIjtcblxubGV0IGRhdGFQYXRoID0gXCJcIjtcbmlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIGRhdGFQYXRoID0gcHJvY2Vzcy5lbnYuQVBQREFUQTtcbmVsc2UgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIpIGRhdGFQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUsIFwiTGlicmFyeVwiLCBcIlByZWZlcmVuY2VzXCIpO1xuZWxzZSBkYXRhUGF0aCA9IHByb2Nlc3MuZW52LlhER19DT05GSUdfSE9NRSA/IHByb2Nlc3MuZW52LlhER19DT05GSUdfSE9NRSA6IHBhdGguam9pbihwcm9jZXNzLmVudi5IT01FLCBcIi5jb25maWdcIik7XG5kYXRhUGF0aCA9IHBhdGguam9pbihkYXRhUGF0aCwgXCJCZXR0ZXJEaXNjb3JkXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGF0YVN0b3JlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5kYXRhID0ge3NldHRpbmdzOiB7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX19O1xuICAgICAgICB0aGlzLnBsdWdpbkRhdGEgPSB7fTtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRhdGFTdG9yZSA9IHRoaXNcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuQkRGaWxlKSkgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0aGlzLkJERmlsZSwgXCJ1dGYtOFwiKSlcbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwic2V0dGluZ3NcIikpIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpKSByZXR1cm47XG4gICAgICAgICAgICBsZXQgc2V0dGluZ3MgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyh0aGlzLnNldHRpbmdzRmlsZSk7XG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKTtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShcInNldHRpbmdzXCIpKSBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319LCB7W3JlbGVhc2VDaGFubmVsXTogc2V0dGluZ3N9KTtcbiAgICAgICAgICAgIGVsc2Ugc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwgc2V0dGluZ3MpO1xuICAgICAgICAgICAgdGhpcy5zZXRCRERhdGEoXCJzZXR0aW5nc1wiLCBzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgVXRpbHMuYWxlcnQoXCJDb3JydXB0IFN0b3JhZ2VcIiwgXCJUaGUgYmQgc3RvcmFnZSBoYXMgc29tZWhvdyBiZWNvbWUgY29ycnVwdC4gWW91IG1heSBlaXRoZXIgdHJ5IHRvIHNhbHZhZ2UgdGhlIGZpbGUgb3IgZGVsZXRlIGl0IHRoZW4gcmVsb2FkLlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpbmplY3Rpb25QYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGNvbmZpZ0ZpbGUoKSB7cmV0dXJuIHRoaXMuX2NvbmZpZ0ZpbGUgfHwgKHRoaXMuX2NvbmZpZ0ZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5pbmplY3Rpb25QYXRoLCBcImJldHRlcmRpc2NvcmRcIiwgXCJjb25maWcuanNvblwiKSk7fVxuICAgIGdldCBCREZpbGUoKSB7cmV0dXJuIHRoaXMuX0JERmlsZSB8fCAodGhpcy5fQkRGaWxlID0gcGF0aC5yZXNvbHZlKGRhdGFQYXRoLCBcImJkc3RvcmFnZS5qc29uXCIpKTt9XG4gICAgZ2V0IHNldHRpbmdzRmlsZSgpIHtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGaWxlIHx8ICh0aGlzLl9zZXR0aW5nc0ZpbGUgPSBwYXRoLnJlc29sdmUoZGF0YVBhdGgsIFwiYmRzZXR0aW5ncy5qc29uXCIpKTt9XG4gICAgZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSB7cmV0dXJuIHBhdGgucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBwbHVnaW5OYW1lICsgXCIuY29uZmlnLmpzb25cIik7fVxuXG4gICAgZ2V0U2V0dGluZ0dyb3VwKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldIHx8IG51bGw7XG4gICAgfVxuXG4gICAgc2V0U2V0dGluZ0dyb3VwKGtleSwgZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gPSBkYXRhO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIGdldEJERGF0YShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IFwiXCI7XG4gICAgfVxuXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcbiAgICB9XG5cbiAgICBnZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XG4gICAgfVxuXG4gICAgc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XG4gICAgICAgIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldID0gdmFsdWU7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIGRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSksIEpTT04uc3RyaW5naWZ5KHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSwgbnVsbCwgNCksIFwidXRmLThcIik7XG4gICAgfVxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERldk1vZGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmRlYnVnTGlzdGVuZXIgPSB0aGlzLmRlYnVnTGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lciA9IHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5zdGFydERlYnVnTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSB0aGlzLnN0YXJ0Q29weVNlbGVjdG9yKCk7XG4gICAgfVxuICAgIFxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XG4gICAgfVxuXG4gICAgc3RhcnREZWJ1Z0xpc3RlbmVyKCkge1xuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgc3RvcERlYnVnTGlzdGVuZXIoKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgc3RhcnRDb3B5U2VsZWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3RvcENvcHlTZWxlY3RvcigpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgc3RvcENvcHlTZWxlY3RvcigpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGRlYnVnTGlzdGVuZXIoZSkge1xuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTE5IHx8IGUud2hpY2ggPT0gMTE4KSB7Ly9GOFxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1slY0Rldk1vZGUlY10gJWNCcmVhay9SZXN1bWVcIiwgXCJjb2xvcjogcmVkO1wiLCBcImNvbG9yOiAjMzAzMDMwOyBmb250LXdlaWdodDo3MDA7XCIsIFwiY29sb3I6cmVkO1wiLCBcIlwiKTtcbiAgICAgICAgICAgIGRlYnVnZ2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWRlYnVnZ2VyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgfVxuICAgIH1cblxuICAgIGNvcHlTZWxlY3Rvckxpc3RlbmVyKGUpIHtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihlLnRhcmdldCk7XG4gICAgXG4gICAgICAgICAgICBsZXQgW1xuICAgICAgICAgICAgICAgIGNsYXNzTGF5ZXIsIFxuICAgICAgICAgICAgICAgIGNsYXNzSXRlbXNcbiAgICAgICAgICAgIF0gPSBbXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmRpc2FibGVkUG9pbnRlckV2ZW50cylbMF0sXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5tZW51KVswXVxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBmdW5jdGlvbiBhdHRhY2goKSB7XG4gICAgICAgICAgICAgICAgaWYoIWNsYXNzSXRlbXMgfHwgIWNsYXNzTGF5ZXIubGF5ZXIpcmV0dXJuIGNvbnNvbGUubG9nKGNsYXNzSXRlbXMsIGNsYXNzTGF5ZXIubGF5ZXIpXG5cbiAgICAgICAgICAgICAgICBsZXQgY20gPSBET00ucXVlcnkoXCIuXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5tZW51KSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00ucXVlcnkoXCIjYXBwLW1vdW50ID4gLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzTGF5ZXIubGF5ZXJDb250YWluZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY21XcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzTGF5ZXIubGF5ZXJ9XCI+YCk7XG4gICAgICAgICAgICAgICAgICAgIGNtID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMubWVudX0gJHtjbGFzc0l0ZW1zLnN0eWxlRmxleGlibGV9ICR7Y2xhc3NJdGVtcy5hY2NvbW1vZGF0ZVNjcm9sbGJhcn0gYmQtY29udGV4dC1tZW51XCIgc3R5bGU9XCJcIj48L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmFwcGVuZChjbSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoY21XcmFwKTtcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IGUuY2xpZW50WSArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwibWVudVwiKVxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgXCItMVwiKVxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuaWQgPSBcImJkLWNvcHktc2VsZWN0b3ItY29udGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIFwiQ29weSBTZWxlY3RvciBBY3Rpb25zXCIpXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDbGFzc2VzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zY3JvbGxlcldyYXApWzBdXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyV3JhcCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtzY3JvbGxlckNsYXNzZXMuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlckNsYXNzZXMudGhlbWVHaG9zdEhhaXJsaW5lfVwiPjwvZGl2PmApXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVyKVswXS5zY3JvbGxlcn0gJHtjbGFzc0l0ZW1zLnNjcm9sbGVyfVwiPjwvZGl2PmApXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyV3JhcC5hcHBlbmQoc2Nyb2xsZXIpXG4gICAgICAgICAgICAgICAgICAgIGNtLmFwcGVuZChzY3JvbGxlcldyYXApXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ00gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlICYmIGUua2V5Q29kZSAhPT0gMjcpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtV3JhcC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY21XcmFwID0gY20ucGFyZW50RWxlbWVudFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gY20uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdXG4gICAgICAgICAgICAgICAgY29uc3QgY21nID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgcm9sZT1cImdyb3VwXCI+PC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW19ICR7Y2xhc3NJdGVtcy5sYWJlbENvbnRhaW5lcn0gJHtjbGFzc0l0ZW1zLmNvbG9yRGVmYXVsdH1cIiByb2xlPVwibWVudWl0ZW1cIiBpZD1cImJkLWNvcHktc2VsZWN0b3ItaXRlbS1jbVwiPjwvZGl2PmApO1xuICAgICAgICAgICAgICAgIGNtaS5hcHBlbmQoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMubGFiZWx9XCI+Q29weSBTZWxlY3RvcjwvZGl2PmApKTtcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5OYXRpdmVNb2R1bGUuY29weShzZWxlY3Rvcik7XG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudHMgPSBET00ucXVlcnlBbGwoXCJkaXZbcm9sZT1tZW51aXRlbV0uXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5mb2N1c2VkKSlcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgJiYgZWxlbWVudHMuZm9yRWFjaChlbGVtID0+IGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc0l0ZW1zLmZvY3VzZWQpKVxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LmFkZChjbGFzc0l0ZW1zLmZvY3VzZWQpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNtaS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGNtZy5hcHBlbmQoY21pKTtcbiAgICAgICAgICAgICAgICBpZihzY3JvbGxlci5jaGlsZE5vZGVzLmxlbmd0aCl7IC8vIGFwZW5kIGEgc2VwYXJhdG9yXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJzZXBhcmF0b3JcIiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5zZXBhcmF0b3J9XCI+PC9kaXY+YClcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKHNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKGNtZyk7XG4gICAgICAgICAgICAgICAgaWYoY21XcmFwLmNsaWVudEhlaWdodCA8IGNtV3JhcC5zY3JvbGxIZWlnaHQpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nIFwiK2NtV3JhcC5zdHlsZS50b3ApXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSAoY21XcmFwLnN0eWxlLnRvcCAtIGNtZy5jbGllbnRIZWlnaHQpICsgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nXCIrY21XcmFwLnN0eWxlLnRvcClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGF0dGFjaCwgMSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQpIHJldHVybiBgIyR7ZWxlbWVudC5pZH1gO1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZnVsbFBhdGgoZWwpe1xuICAgICAgICAgICAgdmFyIG5hbWVzID0gW107XG4gICAgICAgICAgICB3aGlsZSAoZWwucGFyZW50Tm9kZSl7XG4gICAgICAgICAgICAgIGlmIChlbC5pZCl7XG4gICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdCgnIycrZWwuaWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBpZiAoZWw9PWVsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSBuYW1lcy51bnNoaWZ0KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKStBcnJheS5mcm9tKGVsLmNsYXNzTGlzdC5lbnRyaWVzKCkpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikpO1xuICAgICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTEsZT1lbDtlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7ZT1lLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsYysrKTtcbiAgICAgICAgICAgICAgICAgIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpKygodHlwZW9mIGVsLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbC5jbGFzc05hbWUpIHx8IFwiXCIpLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhIWUpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikrXCI6bnRoLWNoaWxkKFwiK2MrXCIpXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbD1lbC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmFtZXMuam9pbihcIiA+IFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVsbFBhdGgoZWxlbWVudClcbiAgICB9XG59OyIsImV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXNhYmxlVHlwaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnN0YXJ0VHlwaW5nKVxyXG4gICAgICAgIC50aGVuKHR5cGluZ01vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFR5cGluZyA9IHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuZGlzYWJsZWQpcmV0dXJuIHN0YXJ0VHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3BUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0b3BUeXBpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5kaXNhYmxlZClyZXR1cm4gc3RvcFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc2FibGVUeXBpbmcgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQnVnSHVudGVyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9idWdfaHVudGVyXCJcbmltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0IHsgc2V0dGluZ3NDb29raWUgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBDaXJjdXMgZnJvbSBcIi4uL3N2Zy9jaXJjdXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHsgLy8gR2VuZXJhdGUgVVVJRCAoTm8gY3J5cHRvIHJuZylcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgIH0pO1xufSAgXG5cbmNvbnN0IGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXMgPSB7fVxubGV0IGJhZGdlc1RvRmV0Y2ggPSBbXVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzdGFudFNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7XG4gICAgICAgICAgICBiYWRnZXM6IHtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EaXN0YW50U2VydmVyID0gdGhpc1xuICAgIH1cblxuICAgIGdldCBjYWNoZSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVcbiAgICB9XG5cbiAgICBzZXQgY2FjaGUoZGF0YSl7XG4gICAgICAgIGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB0aGlzLl9jYWNoZSAhPT0gXCJvYmplY3RcIilyZXR1cm4gdGhpcy5fY2FjaGUgPSBkYXRhXG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZSA9IE9iamVjdC5hc3NpZ24odGhpcy5fY2FjaGUsIGRhdGEpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGN1c3RvbSBiYWRnZXMgZnJvbSB0aGUgdXNlciBJRC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlciBUaGUgdXNlciBJRCBcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb25zdGFudHNbXCJiYWRnZXNcIl0+fVxuICAgICAqL1xuICAgIGFzeW5jIGdldEJhZGdlcyh1c2VyKXtcbiAgICAgICAgaWYodGhpcy5jYWNoZS5iYWRnZXNbdXNlcl0pcmV0dXJuIHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdXG4gICAgICAgIGlmKGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0pcmV0dXJuIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cblxuICAgICAgICBsZXQgcmVzb2x2ZVxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gbmV3IFByb21pc2UoKHJlcykgPT4gKHJlc29sdmUgPSByZXMpKVxuICAgICAgICBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdID0gbmV3UHJvbWlzZVxuXG4gICAgICAgIGNvbnN0IGJhZGdlcyA9IFtdXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgQ29uc3RhbnRzLmJhZGdlcyl7XG4gICAgICAgICAgICBpZihiYWRnZS5kZWZhdWx0VXNlcnMuaW5jbHVkZXModXNlcikpYmFkZ2VzLnB1c2goYmFkZ2UpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmV0Y2hlZEJhZGdlcyA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZighc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNVwiXSlyZXR1cm4gcmVzb2x2ZShbXSlcbiAgICAgICAgICAgIGJhZGdlc1RvRmV0Y2gucHVzaChbdXNlciwgcmVzb2x2ZV0pXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdXNlcnMgPSBiYWRnZXNUb0ZldGNoXG4gICAgICAgICAgICAgICAgaWYodXNlcnMubGVuZ3RoID09PSAwKXJldHVyblxuICAgICAgICAgICAgICAgIGJhZGdlc1RvRmV0Y2ggPSBbXVxuICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3QoUm91dGVzLmJhZGdlcywgXCJQT1NUXCIsIEpTT04uc3RyaW5naWZ5KHVzZXJzLm1hcChlID0+IGVbMF0pKSlcbiAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApey8vIENvdWxkbid0IGZldGNoIGJhZGdlczogc2VydmVyIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlcy5qc29uKClcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgdXNlciBvZiByZXNwb25zZUJvZHkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSB1c2Vycy5maW5kKHByb21pc2UgPT4gcHJvbWlzZVswXSA9PT0gdXNlci51c2VyX2lkKVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZVsxXSh1c2VyLmJhZGdlcylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IGVycm9yXG4gICAgICAgICAgICAgICAgICAgIGlmKCEoZXJyIGluc3RhbmNlb2YgTGlnaHRjb3JkRXJyb3IpKWNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMClcbiAgICAgICAgfSlcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBmZXRjaGVkQmFkZ2VzKXtcbiAgICAgICAgICAgIGlmKCFDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gV2UgZG8gbm90IGhhdmUgdGhlIENvbXBvbmVudCwgc2tpcCBpdC5cbiAgICAgICAgICAgIGlmKGJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKWNvbnRpbnVlIC8vIEFscmVhZHkgaW5zZXJ0ZWQuXG4gICAgICAgICAgICBiYWRnZXMucHVzaChDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZSA9IHtcbiAgICAgICAgICAgIGJhZGdlczogT2JqZWN0LmFzc2lnbih0aGlzLmNhY2hlLmJhZGdlcywge1t1c2VyXTogYmFkZ2VzfSlcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxuICAgICAgICB9LCA2MDAwMDApO1xuXG4gICAgICAgIHJlc29sdmUoYmFkZ2VzKVxuICAgICAgICBkZWxldGUgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxuICAgICAgICByZXR1cm4gYmFkZ2VzXG4gICAgfVxufVxuXG5jb25zdCBoYW5kbGVSZXF1ZXN0ID0gZnVuY3Rpb24ocm91dGUsIG1ldGhvZCwgZGF0YSl7XG4gICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pe1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IExpZ2h0Y29yZEVycm9yKFwiVGhlIGN1cnJlbnQgc2V0dGluZ3MgYmxvY2tlZCB0aGUgcmVxdWVzdC5cIikpXG4gICAgfVxuICAgIHJldHVybiBub2RlRmV0Y2goYCR7Q29uc3RhbnRzLlNFUlZFUl9VUkx9L2FwaS92MSR7cm91dGV9YCwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ0xJRU5UXCI6IFwiTGlnaHRjb3JkXCIsXG4gICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogd2luZG93LkxpZ2h0Y29yZC5BcGkuQXV0aG9yaXphdGlvbiB8fCBcIk5vbmU6OkFub255bW91c1wiXG4gICAgICAgIH0sXG4gICAgICAgIC4uLihkYXRhID8ge1xuICAgICAgICAgICAgYm9keTogZGF0YVxuICAgICAgICB9IDoge30pXG4gICAgfSlcbn1cblxuY2xhc3MgTGlnaHRjb3JkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICB0aGlzLm5hbWUgPSBcIkxpZ2h0Y29yZEVycm9yXCJcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBDb25zdGFudHMgPSB7XG4gICAgU0VSVkVSX1VSTDogXCJodHRwczovL2xpZ2h0Y29yZC5kZXJva3UueHl6XCIsXG4gICAgYmFkZ2VzOiBbIC8vIFRPRE86IEFkZCBtb3JlIGJhZGdlcyArIHNlcnZlciBzaWRlIHN2Z1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZCBCdWcgSHVudGVyXCIsXG4gICAgICAgICAgICBpZDogXCJmMDQ2OThmNS04MTZiLTQxZTMtYmQwMS05MjI5MTE5M2Q3YTVcIixcbiAgICAgICAgICAgIGRlZmF1bHRVc2VyczogW1xuICAgICAgICAgICAgICAgIFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIsXG4gICAgICAgICAgICAgICAgXCI2OTYwMDM0NTY2MTEzODUzOTZcIlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHNjb3BlczogW10sXG4gICAgICAgICAgICBjb21wb25lbnQ6IEJ1Z0h1bnRlckJhZGdlLFxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vbGlnaHRjb3JkL2xpZ2h0Y29yZC93aWtpL2JhZGdlcyNidWdfaHVudGVyXCJcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgbmFtZTogXCJCdWZmb29uXCIsXG4gICAgICAgICAgICBpZDogXCIwNjkwNGQzMS02NWI0LTQxZWMtYTUwYy04NjU4YmJkMWFmOTZcIixcbiAgICAgICAgICAgIGRlZmF1bHRVc2VyczogW1xuICAgICAgICAgICAgICAgIFwiMzg5MDE2ODk1NTQzNzA1NjAyXCIsXG4gICAgICAgICAgICAgICAgXCI2NjQ2MDAxMzQ1Mjg2NjM1NjVcIixcbiAgICAgICAgICAgICAgICBcIjYyNTM1MDY1NzgyOTg5NjIyNFwiXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc2NvcGVzOiBbXSxcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ2lyY3VzLFxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL3lvdXR1LmJlL0VKdGI2ei1kbFQ4P3Q9MTQ1XCJcbiAgICAgICAgfVxuICAgIF1cbn1cblxuZXhwb3J0IGNvbnN0IFJvdXRlcyA9IHtcbiAgICBiYWRnZXM6IGAvdXNlcnMvYmFkZ2VzYFxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggWmFjaGFyeSBSYXVlblxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWRcbiAqIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELFxuICogSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEFcbiAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFRcbiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRlxuICogQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFXG4gKiBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqIFxuICogRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQkRQbHVnaW5MaWJyYXJ5XG4gKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKiBAbmFtZSBPZmZzZXRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUb3Agb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByaWdodCAtIFJpZ2h0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIC0gQm90dG9tIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIExlZnQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBPdXRlciBoZWlnaHQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gT3V0ZXIgd2lkdGggb2YgdGhlIHRhcmdldCBlbGVtZW50LlxuICovXG5cbiAvKipcbiAqIEZ1bmN0aW9uIHRoYXQgYXV0b21hdGljYWxseSByZW1vdmVzIGFkZGVkIGxpc3RlbmVyLlxuICogQGNhbGxiYWNrIG1vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lclxuICovXG4gXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01Ub29scyB7XG5cbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XG4gICAgfVxuXG4gICAgLyoqXG5cdCAqIEFkZHMgYSBzdHlsZSB0byB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGFzIHRoZSBlbGVtZW50IGlkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjc3MgLSBjc3MgdG8gYWRkIHRvIHRoZSBkb2N1bWVudFxuXHQgKi9cblx0c3RhdGljIGFkZFN0eWxlKGlkLCBjc3MpIHtcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChET01Ub29scy5jcmVhdGVFbGVtZW50KGA8c3R5bGUgaWQ9XCIke2lkfVwiPiR7Y3NzfTwvc3R5bGU+YCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBzdHlsZSBmcm9tIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gb3JpZ2luYWwgaWRlbnRpZmllciB1c2VkXG5cdCAqL1xuXHRzdGF0aWMgcmVtb3ZlU3R5bGUoaWQpIHtcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMvcmVxdWlyZXMgYSByZW1vdGUgc2NyaXB0IHRvIGJlIGxvYWRlZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBmb3IgdGhpcyBzY3JpcHRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIHVybCBmcm9tIHdoaWNoIHRvIGxvYWQgdGhlIHNjcmlwdFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjcmlwdCBpcyBsb2FkZWRcblx0ICovXG5cdHN0YXRpYyBhZGRTY3JpcHQoaWQsIHVybCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcblx0XHRcdGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cdFx0XHRzY3JpcHQuaWQgPSBpZDtcblx0XHRcdHNjcmlwdC5zcmMgPSB1cmw7XG5cdFx0XHRzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XG5cdFx0XHRzY3JpcHQub25sb2FkID0gcmVzb2x2ZTtcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHNjcmlwdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHJlbW90ZSBzY3JpcHQgZnJvbSB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxuXHQgKi9cblx0c3RhdGljIHJlbW92ZVNjcmlwdChpZCkge1xuICAgICAgICBpZCA9IHRoaXMuZXNjYXBlSUQoaWQpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0aWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIGh0dHBzOi8vamF2YXNjcmlwdC5pbmZvL2pzLWFuaW1hdGlvblxuICAgIHN0YXRpYyBhbmltYXRlKHt0aW1pbmcgPSBfID0+IF8sIHVwZGF0ZSwgZHVyYXRpb259KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICBcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xuICAgICAgICAgIC8vIHRpbWVGcmFjdGlvbiBnb2VzIGZyb20gMCB0byAxXG4gICAgICAgICAgbGV0IHRpbWVGcmFjdGlvbiA9ICh0aW1lIC0gc3RhcnQpIC8gZHVyYXRpb247XG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA+IDEpIHRpbWVGcmFjdGlvbiA9IDE7XG4gICAgICBcbiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aW1pbmcodGltZUZyYWN0aW9uKTtcbiAgICAgIFxuICAgICAgICAgIHVwZGF0ZShwcm9ncmVzcyk7IC8vIGRyYXcgaXRcbiAgICAgIFxuICAgICAgICAgIGlmICh0aW1lRnJhY3Rpb24gPCAxKSB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBteSBzaGl0IHZlcnNpb24gb2Ygbm90IGhhdmluZyB0byB1c2UgYCRgIGZyb20galF1ZXJ5LiBNZWFuaW5nXG4gICAgICogdGhhdCB5b3UgY2FuIHBhc3MgYSBzZWxlY3RvciBhbmQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJ1biB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLnF1ZXJ5fS5cbiAgICAgKiBJdCBhbHNvIG1lYW5zIHRoYXQgeW91IGNhbiBwYXNzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGl0IHdpbGwgcGVyZm9ybSBhbmQgcmV0dXJuIGBwYXJzZUhUTUxgLlxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTFxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnF1ZXJ5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnkgb3IgSFRNTCB0byBwYXJzZVxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gRWl0aGVyIHRoZSByZXN1bHQgb2YgYHBhcnNlSFRNTGAgb3IgYHF1ZXJ5YFxuICAgICAqL1xuICAgIHN0YXRpYyBRKHNlbGVjdG9yKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSFRNTChzZWxlY3Rvcik7XG4gICAgICAgIGNvbnN0IGlzSFRNTCA9IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCA/IEFycmF5LmZyb20oZWxlbWVudCkuc29tZShuID0+IG4ubm9kZVR5cGUgPT09IDEpIDogZWxlbWVudC5ub2RlVHlwZSA9PT0gMTtcbiAgICAgICAgaWYgKGlzSFRNTCkgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc3NlbnRpYWxseSBhIHNob3J0aGFuZCBmb3IgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JgLiBJZiB0aGUgYGJhc2VFbGVtZW50YCBpcyBub3QgcHJvdmlkZWRcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gW2Jhc2VFbGVtZW50XSAtIEVsZW1lbnQgdG8gYmFzZSB0aGUgcXVlcnkgZnJvbVxuICAgICAqIEByZXR1cm5zIHsoRWxlbWVudHxudWxsKX0gLSBUaGUgZm91bmQgZWxlbWVudCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIHN0YXRpYyBxdWVyeShzZWxlY3RvciwgYmFzZUVsZW1lbnQgPSBkb2N1bWVudCkge1xuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gQXJyYXkgb2YgYWxsIGZvdW5kIGVsZW1lbnRzXG4gICAgICovXG4gICAgc3RhdGljIHF1ZXJ5QWxsKHNlbGVjdG9yLCBiYXNlRWxlbWVudCA9IGRvY3VtZW50KSB7XG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgb2YgSFRNTCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cy4gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSxcbiAgICAgKiB0aGUgcGFyc2VkIEhUTUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGRvY3VtZW50IGZyYWdtZW50IHtAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudEZyYWdtZW50fS5cbiAgICAgKiBUaGlzIGlzIGV4dHJlbWVseSB1c2VmdWwgaWYgeW91IGhhdmUgYSBsaXN0IG9mIGVsZW1lbnRzIGF0IHRoZSB0b3AgbGV2ZWwsIHRoZXkgY2FuIHRoZW4gYmUgYXBwZW5kZWQgYWxsIGF0IG9uY2UgdG8gYW5vdGhlciBub2RlLlxuICAgICAqIFxuICAgICAqIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbGlzdCBvZiBwYXJzZWRcbiAgICAgKiBub2RlcyBhbmQgdGhlcmUgd2VyZSBtdWx0aXBsZSB0b3AgbGV2ZWwgbm9kZXMsIG90aGVyd2lzZSB0aGUgc2luZ2xlIG5vZGUgaXMgcmV0dXJuZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBIVE1MIHRvIGJlIHBhcnNlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZyYWdtZW50PWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gc2hvdWxkIGJlIHRoZSByYXcgYERvY3VtZW50RnJhZ21lbnRgXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBUaGUgcmVzdWx0IG9mIEhUTUwgcGFyc2luZ1xuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBpZiAoZnJhZ21lbnQpIHJldHVybiBub2RlO1xuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDEgPyBub2RlLmNoaWxkTm9kZXMgOiBub2RlLmNoaWxkTm9kZXNbMF07XG4gICAgfVxuXG4gICAgLyoqIEFsdGVybmF0ZSBuYW1lIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTH0gKi9cbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7cmV0dXJuIHRoaXMucGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50KTt9XG4gICAgXG4gICAgLyoqXG4gICAgICogVGFrZXMgYSBzdHJpbmcgb2YgaHRtbCBhbmQgZXNjYXBlcyBpdCB1c2luZyB0aGUgYnJvd2VyJ3Mgb3duIGVzY2FwaW5nIG1lY2hhbmlzbS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCAtIGh0bWwgdG8gYmUgZXNjYXBlZFxuICAgICAqL1xuICAgIHN0YXRpYyBlc2NhcGVIVE1MKGh0bWwpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcbiAgICAgICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgICAgc3BhbkVsZW1lbnQuYXBwZW5kKHRleHROb2RlKTtcbiAgICAgICAgdGV4dE5vZGUubm9kZVZhbHVlID0gaHRtbDtcbiAgICAgICAgcmV0dXJuIHNwYW5FbGVtZW50LmlubmVySFRNTDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IGNsYXNzZXMgLSBOYW1lcyBvZiBjbGFzc2VzIHRvIGFkZFxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgYWRkQ2xhc3MoZWxlbWVudCwgLi4uY2xhc3Nlcykge1xuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykgY2xhc3Nlc1tjXSA9IGNsYXNzZXNbY10udG9TdHJpbmcoKS5zcGxpdChcIiBcIik7XG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IGNsYXNzZXMgLSBOYW1lcyBvZiBjbGFzc2VzIHRvIHJlbW92ZVxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgLi4uY2xhc3Nlcykge1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi5jbGFzc2VzKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcmVzZW50OiBUb2dnbGUgY2xhc3MgdmFsdWU7XG4gICAgICogaS5lLiwgaWYgY2xhc3MgZXhpc3RzIHRoZW4gcmVtb3ZlIGl0IGFuZCByZXR1cm4gZmFsc2UsIGlmIG5vdCwgdGhlbiBhZGQgaXQgYW5kIHJldHVybiB0cnVlLlxuICAgICAqIFdoZW4gYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudDpcbiAgICAgKiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGV2YWx1YXRlcyB0byB0cnVlLCBhZGQgc3BlY2lmaWVkIGNsYXNzIHZhbHVlLCBhbmQgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCByZW1vdmUgaXQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NuYW1lIC0gTmFtZSBvZiBjbGFzcyB0byB0b2dnbGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmRpY2F0b3JdIC0gT3B0aW9uYWwgaW5kaWNhdG9yIGZvciBpZiB0aGUgY2xhc3Mgc2hvdWxkIGJlIHRvZ2dsZWRcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIHRvZ2dsZUNsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSwgaW5kaWNhdG9yKSB7XG4gICAgICAgIGNsYXNzbmFtZSA9IGNsYXNzbmFtZS50b1N0cmluZygpLnNwbGl0KFwiIFwiKS5maWx0ZXIoYyA9PiBjKTtcbiAgICAgICAgaWYgKHR5cGVvZihpbmRpY2F0b3IpICE9PSBcInVuZGVmaW5lZFwiKSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjLCBpbmRpY2F0b3IpKTtcbiAgICAgICAgZWxzZSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjKSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGhhcyBhIHNwZWNpZmljIGNsYXNzXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NuYW1lIC0gTmFtZSBvZiBjbGFzcyB0byBjaGVja1xuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lKSB7XG4gICAgICAgIHJldHVybiBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYykuZXZlcnkoYyA9PiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZXMgb25lIGNsYXNzIHdpdGggYW5vdGhlclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIHJlcGxhY2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIGZvciB0aGUgY2xhc3NcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIHJlcGxhY2VDbGFzcyhlbGVtZW50LCBvbGROYW1lLCBuZXdOYW1lKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2Uob2xkTmFtZSwgbmV3TmFtZSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgYXBwZW5kZWQgdG8gYW5vdGhlciBub2RlXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgYXBwZW5kZWQgdG9cbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBhcHBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoYXROb2RlLmFwcGVuZCh0aGlzTm9kZSk7XG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwZW5kcyBgdGhpc05vZGVgIHRvIGB0aGF0Tm9kZWBcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBwcmVwZW5kZWQgdG8gYW5vdGhlciBub2RlXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgcHJlcGVuZGVkIHRvXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgcHJlcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xuICAgICAgICBpZiAodHlwZW9mKHRoYXROb2RlKSA9PSBcInN0cmluZ1wiKSB0aGF0Tm9kZSA9IHRoaXMucXVlcnkodGhhdE5vZGUpO1xuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdGhhdE5vZGUucHJlcGVuZCh0aGlzTm9kZSk7XG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5pbnNlcnRBZnRlcihvdGhlckVsZW1lbnQpYC5cbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XG4gICAgICogQHBhcmFtIHtOb2RlfSB0YXJnZXROb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBpbnNlcnRBZnRlcih0aGlzTm9kZSwgdGFyZ2V0Tm9kZSkge1xuICAgICAgICB0YXJnZXROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNOb2RlLCB0YXJnZXROb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydCBhZnRlciBhIHNwZWNpZmljIGVsZW1lbnQsIHNpbWlsYXIgdG8galF1ZXJ5J3MgYHRoaXNFbGVtZW50LmFmdGVyKG5ld0VsZW1lbnQpYC5cbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XG4gICAgICogQHBhcmFtIHtOb2RlfSBuZXdOb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBhZnRlcih0aGlzTm9kZSwgbmV3Tm9kZSkge1xuICAgICAgICB0aGlzTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCB0aGlzTm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBuZXh0IHNpYmxpbmcgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XG4gICAgICovXG4gICAgc3RhdGljIG5leHQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIisgXCIgKyBzZWxlY3RvcikgOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBzdWJzZXF1ZW50IHNpYmxpbmdzLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG5leHQgc2libGluZ3Mgb2ZcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgbmV4dEFsbChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ+ICpcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3Vic2VxdWVudCBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBmb2xsb3dpbmcgc2libGluZ3Mgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXG4gICAgICovXG4gICAgc3RhdGljIG5leHRVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICBjb25zdCBuZXh0ID0gW107IFxuICAgICAgICB3aGlsZSAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBuZXh0LnB1c2goZWxlbWVudCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJldmlvdXMgc2libGluZyBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XG4gICAgICovXG4gICAgc3RhdGljIHByZXZpb3VzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgaWYgKHNlbGVjdG9yKSByZXR1cm4gcHJldmlvdXMgJiYgcHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikgPyBwcmV2aW91cyA6IG51bGw7XG4gICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBwcmVjZWVkaW5nIHNpYmxpbmdzLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgcHJldmlvdXNBbGwoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdO1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xuICAgICAqL1xuICAgIHN0YXRpYyBwcmV2aW91c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107IFxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcubWF0Y2hlcyhzZWxlY3RvcikpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XG4gICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIHdoaWNoIGluZGV4IGluIGNoaWxkcmVuIGEgY2VydGFpbiBub2RlIGlzLiBTaW1pbGFyIHRvIGpRdWVyeSdzIGAkLmluZGV4KClgXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIFRoZSBub2RlIHRvIGZpbmQgaXRzIGluZGV4IGluIHBhcmVudFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IEluZGV4IG9mIHRoZSBub2RlXG4gICAgICovXG4gICAgc3RhdGljIGluZGV4SW5QYXJlbnQobm9kZSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xuICAgICAgICBsZXQgbnVtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldID09IG5vZGUpIHJldHVybiBudW07XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubm9kZVR5cGUgPT0gMSkgbnVtKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMuaW5kZXhJblBhcmVudH0gKi9cbiAgICBzdGF0aWMgaW5kZXgobm9kZSkge3JldHVybiB0aGlzLmluZGV4SW5QYXJlbnQobm9kZSk7fVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IGlmIGl0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLFxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIG51bGwuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgcGFyZW50IG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHBhcmVudFxuICAgICAqIEByZXR1cm5zIHsoRWxlbWVudHxudWxsKX0gLSBUaGUgc2libGluZyBlbGVtZW50IG9yIG51bGxcbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyZW50KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xuICAgICAgICByZXR1cm4gIXNlbGVjdG9yIHx8IGVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSA/IGVsZW1lbnQucGFyZW50RWxlbWVudCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBzdGF0aWMgZmluZENoaWxkKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBjaGlsZHJlbiBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxuICAgICAqL1xuICAgIHN0YXRpYyBmaW5kQ2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGFuY2VzdG9ycyBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBwYXJlbnRzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBwYXJlbnRzIHRvXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHBhcmVudHNcbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyZW50cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgICAgICBpZiAoc2VsZWN0b3IpIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSk7XG4gICAgICAgIGVsc2Ugd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gcGFyZW50cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhbmNlc3RvcnMgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgYW5jZXN0b3JzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXG4gICAgICovXG4gICAgc3RhdGljIHBhcmVudHNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gcGFyZW50cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBzaWJsaW5ncyBvZiB0aGUgZWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3Rvci5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgc2libGluZ3Mgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiKlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBzaWJsaW5ncyB0b1xuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xuICAgICAqL1xuICAgIHN0YXRpYyBzaWJsaW5ncyhlbGVtZW50LCBzZWxlY3RvciA9IFwiKlwiKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKGUgPT4gZSAhPSBlbGVtZW50ICYmIGUubWF0Y2hlcyhzZWxlY3RvcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyBjc3Mgc3R5bGVzIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHN0eWxlIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgc3R5bGUuICBcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSAtIEF0dHJpYnV0ZSB0byBnZXQgb3Igc2V0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBWYWx1ZSB0byBzZXQgZm9yIGF0dHJpYnV0ZVxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgc3RhdGljIGNzcyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWwuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVthdHRyaWJ1dGVdO1xuICAgICAgICBlbGVtZW50LnN0eWxlW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSB3aWR0aCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSB3aWR0aCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHdpZHRoLiAgXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gV2lkdGggdG8gc2V0XG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgd2lkdGgoZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkud2lkdGgpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgaGVpZ2h0IGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIGhlaWdodCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIGhlaWdodC4gIFxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIEhlaWdodCB0byBzZXRcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHN0YXRpYyBoZWlnaHQoZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0KTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgaW5uZXIgdGV4dCBvZiBhbiBlbGVtZW50IGlmIGdpdmVuIGEgdmFsdWUsIG90aGVyd2lzZSByZXR1cm5zIGl0LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSB0ZXh0IG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0ZXh0XSAtIENvbnRlbnQgdG8gc2V0XG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSBFaXRoZXIgdGhlIHN0cmluZyBzZXQgYnkgdGhpcyBjYWxsIG9yIHRoZSBjdXJyZW50IHRleHQgY29udGVudCBvZiB0aGUgbm9kZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgdGV4dChlbGVtZW50LCB0ZXh0KSB7XG4gICAgICAgIGlmICh0eXBlb2YodGV4dCkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lcldpZHRoIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgd2lkdGggb2ZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIHN0YXRpYyBpbm5lcldpZHRoKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciBoZWlnaHQgb2ZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaW5uZXJIZWlnaHQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIHdpZHRoIG9mXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBzdGF0aWMgb3V0ZXJXaWR0aChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG91dGVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgaGVpZ2h0IG9mXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3RhdGljIG91dGVySGVpZ2h0KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgcGFnZS5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBvZmZzZXQgb2ZcbiAgICAgKiBAcmV0dXJuIHtPZmZzZXR9IC0gVGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIHN0YXRpYyBvZmZzZXQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IGxpc3RlbmVycygpIHsgcmV0dXJuIHRoaXMuX2xpc3RlbmVycyB8fCAodGhpcy5fbGlzdGVuZXJzID0ge30pOyB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9uYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxuICAgICAqIFxuICAgICAqIFJhdGhlciB0aGFuIGF0dGVtcHQgdG8gZXhwbGFpbiwgSSdsbCBzaG93IHNvbWUgZXhhbXBsZSB1c2FnZXMuXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIG9uY2UuXG4gICAgICogYGNvbnN0IGNhbmNlbCA9IERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiZmlyZWQhXCIpOyBjYW5jZWwoKTt9KTtgXG4gICAgICogXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgb24oZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgbmV3Q2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXdDYW5jZWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbmFsaXR5IGZvciB0aGlzIG1ldGhvZCBtYXRjaGVzIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub259IGJ1dCBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgaXRzZWxmXG4gICAgICogYW5kIHJlbW92ZXMgdGhlIGxpc3RlbmVyIHVwb24gdGhlIGZpcnN0IGZpcmluZyBvZiB0aGUgZGVzaXJlZCBldmVudC5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0b1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIHN0YXRpYyBvbmNlKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcbiAgICAgICAgfSA6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkgcmV0dXJuO1xuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0pIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnNwbGljZSh0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLmZpbmRJbmRleChsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCksIDEpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5jZWw7XG4gICAgfVxuXG4gICAgc3RhdGljIF9fb2ZmQWxsKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xuICAgICAgICBsZXQgbWF0Y2hGaWx0ZXIgPSBsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PSB0eXBlLCBkZWZhdWx0RmlsdGVyID0gXyA9PiBfO1xuICAgICAgICBpZiAoZWxlbWVudCkgbWF0Y2hGaWx0ZXIgPSBsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCwgZGVmYXVsdEZpbHRlciA9IGwgPT4gbC5lbGVtZW50ID09IGVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gfHwgW107XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0eXBlID8gbGlzdGVuZXJzLmZpbHRlcihtYXRjaEZpbHRlcikgOiBsaXN0ZW5lcnMuZmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGxpc3QubGVuZ3RoOyBjKyspIGxpc3RbY10uY2FuY2VsKCk7XG4gICAgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byBqUXVlcnkncyBgb2ZmYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxuICAgICAqIFxuICAgICAqIFJhdGhlciB0aGFuIGF0dGVtcHQgdG8gZXhwbGFpbiwgSSdsbCBzaG93IHNvbWUgZXhhbXBsZSB1c2FnZXMuXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIG9uQ2xpY2spO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZWQgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgb25DbGljayk7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGlja1wiLCBvbkNsaWNrKTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gYGVsZW1lbnRgLlxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCIubXlQbHVnaW5cIik7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGNsaWNrIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxuICAgICAqIGBET01Ub29scy5vZmYoXCJjbGljay5teVBsdWdpblwiKTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXG4gICAgICogYERPTVRvb2xzLm9mZihcIi5teVBsdWdpblwiKTtgXG4gICAgICogXG4gICAgICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBlbGVtZW50IC0gRWxlbWVudCB0byByZW1vdmUgbGlzdGVuZXIgZnJvbVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnRdIC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IFtkZWxlZ2F0ZV0gLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBvcmlnaW5hbCBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBvZmYoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mKGVsZW1lbnQpID09IFwic3RyaW5nXCIpIHJldHVybiB0aGlzLl9fb2ZmQWxsKGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkgcmV0dXJuIHRoaXMuX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpO1xuXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3Igd2hlbiB0aGUgbm9kZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGJvZHkuXG4gICAgICogVGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB1cG9uIGZpcmluZy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gbm9kZSB0byB3YWl0IGZvclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGV2ZW50XG4gICAgICogQHBhcmFtIHtib29sZWFufSBvbk1vdW50IC0gZGV0ZXJtaW5lcyBpZiBpdCBzaG91bGQgZmlyZSBvbiBNb3VudCBvciBvbiBVbm1vdW50XG4gICAgICovXG4gICAgc3RhdGljIG9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIG9uTW91bnQgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIudW5zdWJzY3JpYmUod3JhcHBlZENhbGxiYWNrKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjaywgbXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG9uTW91bnQgPyBtdXRhdGlvbi5hZGRlZE5vZGVzIDogbXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgdHJ1ZWAgKi9cbiAgICBzdGF0aWMgb25Nb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrKTsgfVxuXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgZmFsc2VgICovXG4gICAgc3RhdGljIG9uVW5tb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cblxuICAgIC8qKiBBbGlhcyBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50fSAqL1xuICAgIHN0YXRpYyBvbkFkZGVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnQobm9kZSwgY2FsbGJhY2spOyB9XG5cbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Vbm1vdW50fSAqL1xuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb21iaW5lcyBtdWx0aXBsZSBlbGVtZW50cyBpbnRvIG9uZSBwYXJlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7QXJyYXk8SFRNTEVsZW1lbnQ+fSBlbGVtZW50cyAtIGFycmF5IG9mIGVsZW1lbnRzIHRvIHB1dCBpbnRvIGEgc2luZ2xlIHBhcmVudFxuICAgICAqL1xuICAgIHN0YXRpYyB3cmFwKGVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IGRvbVdyYXBwZXIgPSB0aGlzLnBhcnNlSFRNTChgPGRpdiBjbGFzcz1cImRvbS13cmFwcGVyXCI+PC9kaXY+YCk7XG4gICAgICAgIGZvciAobGV0IGUgPSAwOyBlIDwgZWxlbWVudHMubGVuZ3RoOyBlKyspIGRvbVdyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudHNbZV0pO1xuICAgICAgICByZXR1cm4gZG9tV3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlcyB0aGUgbm9kZSB0byBhbiBIVE1MRWxlbWVudC4gVGhpcyBpcyBtYWlubHkgdXNlZCBieSBsaWJyYXJ5IG1vZHVsZXMuXG4gICAgICogQHBhcmFtIHsoalF1ZXJ5fEVsZW1lbnQpfSBub2RlIC0gbm9kZSB0byByZXNvbHZlXG4gICAgICovXG4gICAgc3RhdGljIHJlc29sdmVFbGVtZW50KG5vZGUpIHtcbiAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XG4gICAgfVxufVxuXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRE9NID0gRE9NVG9vbHMiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIEVtb2ppUmVnZXg6IC88YT9cXC4oXFx3KylcXC4oXFxkKyk+L2dcclxufVxyXG5cclxubGV0IEN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdXHJcbmxldCBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxubGV0IEF1dG9jb21wbGV0ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVswXVxyXG5sZXQgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVswXVxyXG5sZXQgRW1vamlNb2R1bGVRdWVyeSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVswXVxyXG5sZXQgTWVzc2FnZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpWzBdXHJcbmxldCBndWlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVswXVxyXG5sZXQgZW1vamlTZWFyY2ggPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5jb25zdCBhcHBTZXR0aW5ncyA9IExpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW9qaU1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuaW5pdCgpLmNhdGNoKGVyciA9PiBVdGlscy5lcnIoXCJFbW9qaU1vZHVsZVwiLCBcIkFuIGVycm9yIG9jY3VyZWRcIiwgZXJyKSkgLy8gYmV0dGVyIGxvZ2dpbmdcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0KCl7XHJcbiAgICAgICAgLyoqIEVtb2ppIEF1dG9Db21wbGV0ZSAqL1xyXG4gICAgICAgIGlmKCFBdXRvY29tcGxldGVNb2R1bGUpQXV0b2NvbXBsZXRlTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVxyXG4gICAgICAgIGlmKCFBdXRvQ29tcGxldGlvblRlbXBsYXRlcylBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVxyXG4gICAgICAgIGlmKCFFbW9qaU1vZHVsZVF1ZXJ5KUVtb2ppTW9kdWxlUXVlcnkgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHMpXHJcbiAgICAgICAgaWYoIU1lc3NhZ2VzKU1lc3NhZ2VzID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzICYmIGUuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORylcclxuICAgICAgICBpZighZ3VpbGRNb2R1bGUpZ3VpbGRNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpXHJcbiAgICAgICAgaWYoIWVtb2ppU2VhcmNoKWVtb2ppU2VhcmNoID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQpXHJcblxyXG4gICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tcIkVtb2ppIFByZWZpeFwiXVxyXG4gICAgICAgIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFwcFNldHRpbmdzLmdldChcIkJEX1wiK3NldHRpbmcuaWQsIHNldHRpbmcuZGVmYXVsdClcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKXJldHVybiBzZXR0aW5nLmRlZmF1bHRcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihBdXRvY29tcGxldGVNb2R1bGUgJiYgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgJiYgRW1vamlNb2R1bGVRdWVyeSAmJiBNZXNzYWdlcyAmJiBndWlsZE1vZHVsZSAmJiBlbW9qaVNlYXJjaCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBQYXRjaGluZyBnZXRBdXRvY29tcGxldGVPcHRpb25zIG9mIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzYCwgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIGNvbnN0IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zXHJcbiAgICAgICAgICAgIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBmdW5jdGlvbihlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIHZhbHVlLkxJR0hUQ09SRF9FTU9KSVMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyhhcmcxLCBhcmcyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFyZzIubGVuZ3RoID4gMSAmJiBnZXRWYWx1ZSgpID09PSBhcmcxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVtb2ppVXNhYmxlKGNvbmRpdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHRzKHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IEVtb2ppTW9kdWxlUXVlcnkuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cyh0LCBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyUmVzdWx0cyhlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQoZSwgdCwgYS5lbW9qaXMsIG4sIHIsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSkksIEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LkVtb2ppLCAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaTogZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGUuaWQgfHwgZS51bmlxdWVOYW1lIHx8IGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50aW5lbDogZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlsZDogbnVsbCAhPSBlLmd1aWxkSWQgPyBndWlsZE1vZHVsZS5kZWZhdWx0LmdldEd1aWxkKGUuZ3VpbGRJZCkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlKCkgKyBlICsgZ2V0VmFsdWUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldFBsYWluVGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRSYXdUZXh0KGlkLCBndWlsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBndWlsZC5lbW9qaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamkgPSBlbW9qaXNbaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmltYXRlZCA9IGVtb2ppLmFuaW1hdGVkID8gXCJhXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IHN0YXJ0IGF1dG9jb21wbGV0aW9uIG9mIExpZ2h0Y29yZCdzIGVtb2ppcy5cIikpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogRW1vamkgZGlzcGxheSAqL1xyXG4gICAgICAgIHdoaWxlICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW9qaVJlbmRlcil7IC8vIFRPRE86IFByb3BlciBlbW9qaSBmb3JtYXR0aW5nIC8gcmVuZGVyaW5nXHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YmVmb3JlOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwiY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlXCIpXHJcbiAgICAgICAgICAgICAgICBpZighbWVzc2FnZSlyZXR1cm5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIWNvbnRlbnQgfHwgIWNvbnRlbnQubGVuZ3RoKXJldHVyblxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIEB0eXBlIHt7XHJcbiAgICAgICAgICAgICAgICAgKiAgcmF3OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGlkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgYW5pbWF0ZWQ6IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICAqIH1bXX1cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgbGV0IGVtb2ppcyA9IFtdXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBbXVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBub2RlIG9mIGNvbnRlbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNQYXJzZWQgPSBmYWxzZVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gQ29uc3RhbnRzLkVtb2ppUmVnZXguZXhlYyhub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGFyc2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUVtb2ppTW9kdWxlQXBpKUVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBFbW9qaU1vZHVsZUFwaS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZChwYXJzZWRbMl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihlbW9qaSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogZW1vamkuYW5pbWF0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVtb2ppLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbW9qaS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogcGFyc2VkWzBdLnN0YXJ0c1dpdGgoXCI8YVwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyc2VkWzFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFyc2VkWzJdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChwYXJzZWQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaGFzUGFyc2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBub2RlLnNwbGl0KFwiIFwiKS5tYXAoKHdvcmQsIGluZGV4LCBhcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCF3b3JkKXJldHVybiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW9qaSA9IGVtb2ppcy5maW5kKGUgPT4gZS5yYXcgPT0gd29yZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFlbW9qaSlyZXR1cm4gd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUN1c3RvbUVtb2ppTW9kdWxlKUN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDdXN0b21FbW9qaU1vZHVsZS5DdXN0b21FbW9qaSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2dldFZhbHVlKCl9JHtlbW9qaS5uYW1lfSR7Z2V0VmFsdWUoKX1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaUlkOiBlbW9qaS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1ib2FibGU6IGFyci5sZW5ndGggPT09IDEgJiYgY29udGVudC5sZW5ndGggPT09IDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcmV2aW91cy5sZW5ndGggPT09IDApcmV0dXJuIFtjdXJyZW50XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdICs9IGAgJHtjdXJyZW50fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIrY3VycmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIsIGN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaCguLi53b3JkcylcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50WzBdKXtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQuc2hpZnQoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUobmV3Q29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnB1c2gobmV3Q29udGVudC5zaGlmdCgpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgfS8qXHJcbiAgICAgICAgbGV0IHVzZXJNb2R1bGVcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiRW1vamlQaWNrZXJMaXN0Um93XCIpXHJcbiAgICAgICAgLnRoZW4oRW1vamlQaWNrZXJMaXN0Um93ID0+IHtcclxuICAgICAgICAgICAgbGV0IGNsYXNzcyA9IEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0XHJcbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0ID0gY2xhc3MgRW1vamlQaWNrZXJMaXN0Um93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICAgICAgICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlck1vZHVsZSl1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCB0aGlzLnByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1c2VyID0gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlci5oYXNQcmVtaXVtU3Vic2NyaXB0aW9uKXJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgdGhpcy5wcm9wcylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppRGVzY3JpcHRvcnM6IHRoaXMucHJvcHMuZW1vamlEZXNjcmlwdG9ycy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlzRGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgRW1vamlQaWNrZXJMaXN0Um93LmRlZmF1bHQuZGlzcGxheU5hbWUgPSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiXHJcbiAgICAgICAgfSkqL1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKCk7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKXtcclxuICAgICAgICBcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gRChlLCB0LCBuLCByLCBvLCBpLCBzLCB1LCBsLCBjKSB7XHJcbiAgICBpZiAobnVsbCA9PSBuIHx8IDAgPT09IG4ubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIHZhciBkID0gbi5tYXAoKGZ1bmN0aW9uKGUsIG4pIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh1LCBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgb25DbGljazogbyxcclxuICAgICAgICAgICAgb25Ib3ZlcjogcixcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHQgPT09IG4sXHJcbiAgICAgICAgICAgIGluZGV4OiBuXHJcbiAgICAgICAgfSwgbChlLCBuKSkpXHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4gW1IoaSwgcywgZSwgYyksIGRdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIFIoZSwgdCwgbiwgcikge1xyXG4gICAgdmFyIGEgPSAobi5sZW5ndGggPiAwID8gZS5mb3JtYXQoe1xyXG4gICAgICAgIHByZWZpeDogcihuKVxyXG4gICAgfSkgOiB0KVxyXG4gICAgaWYoQXJyYXkuaXNBcnJheShhKSl7XHJcbiAgICAgICAgYS51bnNoaWZ0KFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHJvbmdcIiwge30sIFwiW0xpZ2h0Y29yZF0gXCIpKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgYSA9IFwiW0xJR0hUQ09SRF0gXCIrYVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXV0b2NvbXBsZXRlTW9kdWxlLmRlZmF1bHQuVGl0bGUsIHtcclxuICAgICAgICB0aXRsZTogYVxyXG4gICAgfSwgYSlcclxufVxyXG5SLmRpc3BsYXlOYW1lID0gXCJyZW5kZXJIZWFkZXJcIjtcclxuXHJcbmxldCBFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF1cclxubGV0IGlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlICYmIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcbmxldCBpc1VzYWJsZSA9IGZhbHNlXHJcbmxldCBoYXNQYXRjaGVkID0gZmFsc2VcclxuXHJcbmZ1bmN0aW9uIHNldEVtb2ppVXNhYmxlKHVzYWJsZSl7XHJcbiAgICBpc1VzYWJsZSA9IHVzYWJsZVxyXG4gICAgaWYoaGFzUGF0Y2hlZClyZXR1cm5cclxuICAgIGlmKCFFbW9qaUZpbHRlck1vZHVsZSlFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF1cclxuICAgIGlmKCFFbW9qaUZpbHRlck1vZHVsZSlyZXR1cm5cclxuICAgIGlmKCFpc0Vtb2ppRGlzYWJsZWQpaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWRcclxuXHJcbiAgICBoYXNQYXRjaGVkID0gdHJ1ZVxyXG4gICAgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQgPSBmdW5jdGlvbihlbW9qaSl7XHJcbiAgICAgICAgaWYoaXNVc2FibGUpe1xyXG4gICAgICAgICAgICBpZihlbW9qaS5zdXJyb2dhdGVzIHx8IGVtb2ppLmRpdmVyc2l0eSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzRW1vamlEaXNhYmxlZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCJcbmNvbnN0IHt1c2VTdGF0ZX0gPSBCRFYyLnJlYWN0XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZvcmNlVXBkYXRlKCl7XG4gICAgcmV0dXJuIHVzZVN0YXRlKClbMV07XG59IiwiaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXG5pbXBvcnQgKiBhcyBlbGVjdHJvbiBmcm9tIFwiZWxlY3Ryb25cIlxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIlxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIlxuaW1wb3J0IHRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiXG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiXG5pbXBvcnQgeyBhZGRvbkNhY2hlIH0gZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxuXG5jb25zdCBjYWNoZSA9IHt9XG5jb25zdCBjYWNoZTIgPSB7fVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luQ2VydGlmaWVyIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuUGx1Z2luQ2VydGlmaWVyID0gdGhpc1xuICAgIH1cblxuICAgIHBhdGNoKGF0dGFjaG1lbnQsIGlkKXtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50LCBpZClcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzdGFydCgpe1xuXG4gICAgfVxuXG4gICAgaXNUcnVzdGVkKGhhc2gpe1xuICAgICAgICByZXR1cm4gY2FjaGVbaGFzaF0gJiYgIWNhY2hlW2hhc2hdLnN1c3BlY3RcbiAgICB9XG59XG5cbmNvbnN0IHRlc3RzID0gW1xuICAgIFsvdG9rZW4vZ2ksIDAsIDBdLFxuICAgIFsvZW1haWwvZ2ksIDAsIDBdLFxuICAgIFsvbWZhXFwuL2dpLCAwLCAwXSxcbiAgICBbLzJmYS9naSwgMCwgMF0sXG4gICAgWy9waG9uZS9naSwgMCwgMF0sXG4gICAgWy9jaGlsZF9wcm9jZXNzL2dpLCAwLCAwXSxcbiAgICBbL2xvY2FsU3RvcmFnZS9naSwgMCwgMF0sXG4gICAgWy9nZXRHbG9iYWwvZ2ksIDAsIDBdLFxuICAgIFsvQnJvd3NlcldpbmRvdy9naSwgMCwgMF0sXG4gICAgWy9zeXN0ZW0zMi9naSwgMCwgMF0sXG4gICAgWy9wYXNzd29yZC9naSwgMCwgMF0sXG4gICAgWy9ldmFsL2dpLCAwLCAwXSxcbiAgICBbL1dlYkFzc2VtYmx5L2dpLCAwLCAwXSxcbiAgICBbL1hNTEh0dHBSZXF1ZXN0KFxcLnxcXFtbXCInYF0pcHJvdG90eXBlL2dpLCAwLCAwXSxcbiAgICBbL3dpbmRvd1xcLmZldGNoKCArKT89L2dpLCAwLCAwXSxcbiAgICAvKiogT2JmdXNjYXRpb24gLyBoaWRkZW4gLyB3b3JrYXJvdW5kcyAqL1xuICAgIFsvKFtcIidgXVxcKylbXCInYF1cXHdbXCInYF0vZ2ksIDEsIDFdLFxuICAgIFsvW1wiJ2BdXFx3W1wiJ2BdKFxcK1tcIidgXSkvZ2ksIDEsIDFdLFxuICAgIFsvXFwke1tcIidgXVxcdytbXCInYF19L2dpLCAxLCAxXSxcbiAgICAvKiogaGV4YWRlY2ltYWwgKi9cbiAgICBbL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydcXCkvZywgMSwgMV0sXG4gICAgWy9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnKCArKT8sKCArKT8nW14nXXs0fSdcXCkvZywgMSwgMV0sIC8vIF8weDhkYjcoJzB4MCcsICd4MV1mJylcbiAgICAvKiogbWFuZ2xlZCAqL1xuICAgIFsvXFx3K1xcKCcweFtcXGRhYmNkZWZdKydcXCkvZywgMSwgMV0sIC8vIGIoJzB4MCcpXG4gICAgWy9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJyggKyk/LCggKyk/J1teJ117NH0nXFwpL2csIDEsIDFdLCAvLyBiKCcweDAnLCAneDFdZicpXG4gICAgLyoqIHN0cmluZyBhcnJheSBhdCBzdGFydCAqL1xuICAgIFsvXnZhciBbXFx3XFxkXyRdKz1cXFtcIi9naSwgMSwgMV1cbl1cblxuY29uc3QgdGhyZWF0cyA9IFtcbiAgICBcIkFjY291bnQgU3RlYWxlci9WaXJ1c1wiLFxuICAgIFwiT2JmdXNjYXRpb24vSGlkZGVuIGNvZGVcIlxuXVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpe1xuICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKFwidXRmOFwiKVxuICAgIGxldCBpc0hhcm1mdWwgPSBmYWxzZVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgY29uc3Qgbm9fY29tbWVudHMgPSBkYXRhLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98KFteXFxcXDpdfF4pXFwvXFwvLiokL2dtLCBcIlwiKS50cmltKCkvLyByZW1vdmluZyBhbGwgY29tbWVudHMgZnJvbSBwbHVnaW5zIChyZW1vdmUgbWV0YSBhbmQgb3RoZXIuKVxuXG4gICAgZm9yKGNvbnN0IFt0ZXN0LCB0eXBlLCByZW1vdmVDb21tZW50XSBvZiB0ZXN0cyl7XG4gICAgICAgIGNvbnN0IHNjcnB0ID0gcmVtb3ZlQ29tbWVudCA9PT0gMSA/IG5vX2NvbW1lbnRzIDogZGF0YVxuICAgICAgICBpZih0ZXN0LmV4ZWMoc2NycHQpKXtcbiAgICAgICAgICAgIGlzSGFybWZ1bCA9IHRocmVhdHNbdHlwZV1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke2hhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCl9IGZhaWxlZCBhdCB0ZXN0YCwgdGVzdCwgXCIuIE1hcmtlZCBhc1wiLCB0aHJlYXRzW3R5cGVdKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmKCFpc0hhcm1mdWwpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXG4gICAgY2FjaGVbaGFzaF0gPSB7XG4gICAgICAgIHN1c3BlY3Q6IHRydWUsXG4gICAgICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXG4gICAgICAgIHR5cGU6IGhhc2hUb1VybFtoYXNoXS5lbmRzV2l0aChcIi5qc1wiKSA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCIsXG4gICAgICAgIGhhcm06IGlzSGFybWZ1bCxcbiAgICAgICAgaGFzaDogaGFzaCxcbiAgICAgICAgZmlsZW5hbWVcbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coYEZvdW5kIHBvdGVudGlhbGx5IGRhbmdlcm91cyAke2NhY2hlW2hhc2hdLnR5cGUudG9Mb3dlckNhc2UoKX06ICR7Y2FjaGVbaGFzaF0ubmFtZX1gKVxuXG4gICAgcmVzdWx0Q2FsbGJhY2soY2FjaGVbaGFzaF0pXG59XG5cbmNvbnN0IGhhc2hUb1VybCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hhc2goaGFzaCwgZGF0YSwgZmlsZW5hbWUsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayl7XG4gICAgY29uc29sZS5sb2coYEZpbGU6ICR7ZmlsZW5hbWV9IGhhc2g6ICR7aGFzaH1gKVxuICAgIGlmKCFjYWNoZVtoYXNoXSl7XG4gICAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiK2hhc2gsIHsgLy8gVXNpbmcgbm9kZS1mZXRjaCB0byBieXBhc3MgY29yc1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9HRVRfVVNFUl9BR0VOVFwiKSAvLyBoYXZlIHRvIHNldCB1c2VyLWFnZW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XG4gICAgICAgICAgICAgICAgaWYoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxuICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpXG4gICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXMuanNvbigpXG4gICAgICAgICAgICByZXN1bHQuaGFzaCA9IGhhc2hcbiAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSA9IGZpbGVuYW1lXG5cbiAgICAgICAgICAgIGNhY2hlW2hhc2hdID0gcmVzdWx0XG5cbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdClcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IHJlYWQgZnJvbSBnaXRodWIuICR7ZXJyfWApXG4gICAgICAgICAgICBpZihmaWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXG4gICAgICAgICAgICBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSlcbiAgICAgICAgfSlcbiAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FjaGVbaGFzaF1cblxuICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGUoX19wYXRoLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2sgPSAoaGFzaCkgPT4ge30sIGlzRnJvbUxvYWRlciA9IGZhbHNlKXsgICAgXG4gICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcblxuICAgIGNyZWF0ZVJlYWRTdHJlYW0oX19wYXRoKS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxuICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcbiAgICB9KS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxuXG4gICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IF9fcGF0aFxuXG4gICAgICAgIGlmKGlzRnJvbUxvYWRlciAmJiBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdKXtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF1cbiAgICAgICAgICAgIGlmKHZhbHVlLnRpbWVzdGFtcCA8IChEYXRlLm5vdygpIC0gNi4wNDhlKzgpKXtcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxuICAgICAgICAgICAgICAgIGNvbnRlbnRNYW5hZ2VyLnNhdmVBZGRvbkNhY2hlKClcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHZhbHVlLnJlc3VsdClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoZWNrSGFzaChoYXNoUmVzdWx0LCBkYXRhLCBiYXNlbmFtZShfX3BhdGgpLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spXG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKXtcbiAgICBpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKXJldHVyblxuICAgIGlmKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcbiAgICBpZighYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgJiYgIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcblxuICAgIG5vZGVGZXRjaChhdHRhY2htZW50LnVybCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfR0VUX1VTRVJfQUdFTlRcIilcbiAgICAgICAgfVxuICAgIH0pLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIkZpbGUgZG9lc24ndCBleGlzdC5cIilcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgICAgIGxldCBkYXRhID0gQnVmZmVyLmFsbG9jKDApXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XG4gICAgICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxuICAgICAgICAgICAgaGFzaC51cGRhdGUoY2h1bmspXG4gICAgICAgIH0pXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxuXG4gICAgICAgICAgICBjYWNoZTJbYXR0YWNobWVudC51cmxdID0gaGFzaFJlc3VsdFxuICAgICAgICAgICAgaGFzaFRvVXJsW2hhc2hSZXN1bHRdID0gYXR0YWNobWVudC51cmxcblxuICAgICAgICAgICAgY2hlY2tIYXNoKGhhc2hSZXN1bHQsIGRhdGEsIGF0dGFjaG1lbnQuZmlsZW5hbWUsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGF0dGFjaG1lbnQuZmlsZW5hbWUpXG4gICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcbiAgICAgICAgICAgICAgICBpZihlbGVtKWVsZW0ucmVtb3ZlKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSkuY2F0Y2goKCk9Pnt9KVxufVxuXG5sZXQgZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXG4gKiBAcGFyYW0ge3t0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBvZmZpY2lhbD86IGJvb2xlYW59fHtzdXNwZWN0OnRydWUsIHR5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIGhhcm06IHN0cmluZ319IHJlc3VsdFxuICovXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKXtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcbiAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuIC8vIGFscmVhZHkgY2VydGlmaWVkL2RpdiBkb2VzIG5vdCBleGlzdCBhbnltb3JlLlxuXG4gICAgaWYoIWZsb3dlclN0YXJNb2R1bGUpZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXG4gICAgaWYoIWNoaWxkTW9kdWxlKWNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXG4gICAgXG4gICAgaWYocmVzdWx0LnN1c3BlY3Qpe1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFxuICAgICAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSBcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZC50YWdOYW1lID09PSBcIkFcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgP1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiAqKlwiK2ZpbGVuYW1lK1wiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiK3Jlc3VsdC5oYXJtK1wiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgQW55d2F5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkRvbid0ICFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKFwiTElHSFRDT1JEX09QRU5fRVhURVJOQUxcIiwgY2hpbGQuaHJlZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlKGNoaWxkKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUoZGl2LnBhcmVudE5vZGUpXG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgfVxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMuXCJ9LCBcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifX0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN2ZylbMF0uc3ZnLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDQwIDMyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6XCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OlwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6XCIzMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OlwiMzJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtMzIpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOlwiI2YwNDc0N1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stc3RhdHVzLWRuZClcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTpCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApLCBkaXYpXG4gICAgfWVsc2UgaWYoIXJlc3VsdC5vZmZpY2lhbCl7XG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIGNlcnRpZmllZCBieSBMaWdodGNvcmQuXCJ9LCBcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjNGY1NDVjXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk03LjQsMTEuMTcsNCw4LjYyLDUsNy4yNmwyLDEuNTNMMTAuNjQsNGwxLjM2LDFaXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9LCBvbkNsaWNrKCl7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJMaWdodGNvcmQgd2lsbCBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYW5kIGxhdW5jaCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIGRvLlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsaW5rKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgd2FzIG5vdCAyMDBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpbnN0YWxsUGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXG4gICAgfWVsc2V7XG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIHdhcyBtYWRlIGJ5IHRoZSBkZXZlbG9wZXJzIG9mIExpZ2h0Y29yZC5cIiwgc3R5bGU6XCJicmFuZFwifSwgXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIixzdHJva2U6XCIjMzYzOTNmXCIsc3R5bGU6e2NvbG9yOlwiIzQwODdlZFwifX0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiY3VycmVudENvbG9yXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk0xMC43LDUuMjhhMi45LDIuOSwwLDAsMC0yLjExLjg2LjExLjExLDAsMCwwLDAsLjE2bDEuMDUuOTRhLjExLjExLDAsMCwwLC4xNSwwLDEuMjcsMS4yNywwLDAsMSwuOS0uMzNjLjY1LDAsLjY1LjczLjY1LjczYS42NC42NCwwLDAsMS0uNjUuNjUsMS43MywxLjczLDAsMCwxLTEuMTgtLjU0Yy0uMzEtLjI2LS4zNi0uMzItLjczLS42NlM3LjA2LDUuMjgsNS42NSw1LjI4QTIuMjYsMi4yNiwwLDAsMCwzLjM3LDcuNTYsMi41OSwyLjU5LDAsMCwwLDMuODIsOWEyLjE4LDIuMTgsMCwwLDAsMS44My44OSwyLjk0LDIuOTQsMCwwLDAsMi4xLS44MS4xMS4xMSwwLDAsMCwwLS4xNkw2Ljc0LDhBLjExLjExLDAsMCwwLDYuNiw4YTEuNTgsMS41OCwwLDAsMS0uOTQuMjloMEEuNzEuNzEsMCwwLDEsNSw3LjU2SDVhLjYzLjYzLDAsMCwxLC42NS0uNjRjLjcxLDAsMS40Mi43NSwxLjk0LDEuMjcuNzUuNzYsMS42NiwxLjc5LDMuMTEsMS43NEEyLjI4LDIuMjgsMCwwLDAsMTMsNy42NGEyLjU5LDIuNTksMCwwLDAtLjQ1LTEuNDdBMi4xNCwyLjE0LDAsMCwwLDEwLjcsNS4yOFpcIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYW5kIGxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgbXVzdCBlbmFibGUgaXQgaW4gdGhlIHNldHRpbmdzLlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiU3RhdHVzIHdhcyBub3QgMjAwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc3RhbGxQYXRoID0gam9pbihyZXN1bHQudHlwZSA9PT0gXCJQbHVnaW5cIiA/IGNvbnRlbnRNYW5hZ2VyLl9wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIuX3RoZW1lc0ZvbGRlciwgcmVzdWx0LmZpbGVuYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KHJlc3VsdC50eXBlK1wiIHN1Y2Nlc2Z1bGx5IGluc3RhbGxlZC5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChlcnIubWVzc2FnZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0S2V5ZWRBcnJheShvYmope1xuICAgIGxldCBhcnIgPSBbXVxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrID0+IHtcbiAgICAgICAgYXJyLnB1c2goW2ssIG9ialtrXV0pXG4gICAgfSlcbiAgICByZXR1cm4gYXJyXG59XG5cbmxldCBrZXkgPSBudWxsXG5sZXQgc2F2ZSA9IG51bGxcblxud2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQobT0+bS5PYmplY3RTdG9yYWdlKVxuLnRoZW4obG9jYWxTdG9yYWdlTW9kdWxlID0+IHtcbiAgICBsZXQgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlTW9kdWxlLmltcGxcbiAgICBzYXZlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldChcIlBsdWdpbkNlcnRpZmllcktleUVuY3J5cHRpb25fX1wiLCBidG9hKEpTT04uc3RyaW5naWZ5KGtleSkpKVxuICAgIH1cbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHNhdmUoKVxuICAgIH0sIDEwMDAwMCk7XG4gICAgdHJ5e1xuICAgICAgICBsZXQgdmFsID0gc2FmZUpTT05QYXJzZShhdG9iKGxvY2FsU3RvcmFnZS5nZXQoXCJQbHVnaW5DZXJ0aWZpZXJLZXlFbmNyeXB0aW9uX19cIikpKVxuICAgICAgICBpZih2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCAhQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggIT09IDIgfHwgdmFsLmZpbmQoZSA9PiB0eXBlb2YgZSAhPT0gXCJzdHJpbmdcIikgfHwgQnVmZmVyLmZyb20odmFsWzBdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDE2IHx8IEJ1ZmZlci5mcm9tKHZhbFsxXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAzMil7XG4gICAgICAgICAgICBnZW5lcmF0ZUtleSgpXG4gICAgICAgICAgICBzYXZlKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGtleSA9IHZhbFxuICAgIH1jYXRjaChlKXtcbiAgICAgICAgZ2VuZXJhdGVLZXkoKVxuICAgICAgICBzYXZlKClcbiAgICB9XG59KVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleSgpe1xuICAgIGtleSA9IFtjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpLCBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXVxufVxuXG5mdW5jdGlvbiBzYWZlSlNPTlBhcnNlKGpzb24pe1xuICAgIHRyeXtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcbiAgICB9Y2F0Y2goZSl7XG4gICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgRXJyb3IgPyBuZXcgRXJyb3IoZSkgOiBlXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XG4gICAgdHJ5e1xuICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihcImFlcy0yNTYtY2JjXCIsIEJ1ZmZlci5mcm9tKGtleVsxXSwgXCJiYXNlNjRcIiksIEJ1ZmZlci5mcm9tKGtleVswXSwgXCJiYXNlNjRcIikpXG4gICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJiYXNlNjRcIikpO1xuICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZC50b1N0cmluZyhcInV0ZjhcIilcbiAgICB9Y2F0Y2goZSl7XG4gICAgICAgIHJldHVybiBcInt9XCJcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XG4gICAgbGV0IGFyZ3MgPSBbQnVmZmVyLmZyb20oa2V5WzFdLCBcImJhc2U2NFwiKSwgQnVmZmVyLmZyb20oa2V5WzBdLCBcImJhc2U2NFwiKV1cbiAgICBcbiAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIC4uLmFyZ3MpO1xuICAgIGxldCBlbmNyeXB0ZWQgPSBjaXBoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEsIFwidXRmOFwiKSk7XG4gICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoXCJiYXNlNjRcIilcbn0iLCJpbXBvcnQge2JkcGx1Z2luRXJyb3JzLCBwbHVnaW5Db29raWUsIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbnN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuY2xhc3MgUGx1Z2luTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuUGx1Z2luTW9kdWxlID0gdGhpc1xuICAgIH1cbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyO31cbn1cblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2lucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxvYWRQbHVnaW5EYXRhKCk7XG4gICAgYmRwbHVnaW5FcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkUGx1Z2lucygpKSk7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBwbHVnaW4sIG5hbWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgICAgICBuYW1lID0gcGx1Z2luLmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBsb2FkZWQuXCIsIGVycik7XG4gICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwibG9hZCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbbmFtZV0pIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwbHVnaW5Db29raWVbbmFtZV0pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luLnN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0YXJ0ZWQuYCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcbiAgICAgICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwic3RhcnQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXG4gICAgfVxuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcblxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkub24oXCJkaWQtbmF2aWdhdGUtaW4tcGFnZVwiLCB0aGlzLmNoYW5uZWxTd2l0Y2guYmluZCh0aGlzKSk7XG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0YXJ0UGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdGFydCgpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0YXJ0ZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgcGx1Z2luICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdG9wUGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdG9wKCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0b3BwZWQuYCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RvcHBlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKSArIFwiIGNvdWxkIG5vdCBiZSBzdG9wcGVkLlwiLCBlcnIpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IHRydWU7XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRpc2FibGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbik7XG4gICAgZWxzZSB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZENvbnRlbnQoZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgY29uc3QgcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiAoY29uc29sZS5sb2cocC5maWxlbmFtZSwgZmlsZW5hbWUpKSB8fCBwLmZpbGVuYW1lID09IGZpbGVuYW1lKS5wbHVnaW47XG4gICAgdHJ5IHsgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO31cbiAgICBjYXRjaCAoZXJyKSB7aWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycl19KTt9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLWxvYWRlZFwiLCBwbHVnaW4uZ2V0TmFtZSgpKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudW5sb2FkUGx1Z2luID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgZGVsZXRlIGJkcGx1Z2luc1twbHVnaW5dO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIGVycm9yKTtcbiAgICB9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tdW5sb2FkZWRcIiwgcGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgdGhpcy51bmxvYWRQbHVnaW4oYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybiB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWVPck5hbWUpO1xuICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luLnBsdWdpbi5nZXROYW1lKCk7XG4gICAgY29uc3QgZW5hYmxlZCA9IHBsdWdpbkNvb2tpZVtwbHVnaW5dO1xuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLnJlbG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkICYmIHR5cGVvZihiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCgpO1xuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tcmVsb2FkZWRcIiwgcGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZFBsdWdpbihuYW1lKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5FeHRlcm5hbChgJHtmdWxsUGF0aH1gKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlUGx1Z2luTGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInBsdWdpblwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZSk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRQbHVnaW4obmFtZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInBsdWdpbnNcIik7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luQ29va2llLCBzYXZlZCk7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zYXZlUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiLCBwbHVnaW5Db29raWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5uZXdNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uTWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25NZXNzYWdlKCk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uTWVzc2FnZSBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuY2hhbm5lbFN3aXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vblN3aXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25Td2l0Y2goKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJhd09ic2VydmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vYnNlcnZlcihlKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb2JzZXJ2ZXIgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGx1Z2luTW9kdWxlKCk7IiwiaW1wb3J0IHsgdGhlbWVDb29raWUgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIlxuaW1wb3J0IGJkRXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIlxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgcG9wb3V0V2luZG93IHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge01hcDxzdHJpbmcsIFdpbmRvdz59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndpbmRvd3MgPSBuZXcgTWFwKClcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICAgICAgdGhpcy5pbml0KClcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIGxldCBwb3BvdXRNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0V2luZG93KVxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiUE9QT1VUX1dJTkRPV19PUEVOXCIsIChldikgPT4ge1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7V2luZG93fVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpbmRvdyA9IHBvcG91dE1vZHVsZS5kZWZhdWx0LmdldFdpbmRvdyhldi5rZXkpXG4gICAgICAgICAgICAgICAgdGhpcy53aW5kb3dzLnNldChldi5rZXksIHdpbmRvdylcblxuICAgICAgICAgICAgICAgIGxldCBjbGFzc0xpc3QgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3RcbiAgICAgICAgICAgICAgICBjbGFzc0xpc3QuYWRkKFwid2luZG93LXBvcG91dFwiKVxuICAgICAgICAgICAgICAgIGNsYXNzTGlzdC5hZGQoXCJsaWdodGNvcmRcIilcbiAgICAgICAgICAgICAgICBjbGFzc0xpc3QuYWRkKFwibGlnaHRjb3JkXCIpXG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZShldi5rZXkpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiUE9QT1VUX1dJTkRPV19DTE9TRVwiLCAoZXYpID0+IHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53aW5kb3dzLmRlbGV0ZShldi5rZXkpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLWVuYWJsZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgICAgICB9KVxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLWRpc2FibGVkXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKClcbiAgICAgICAgfSlcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1yZWxvYWRlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0pXG4gICAgICAgIGJkRXZlbnRzLm9uKFwidGhlbWUtdW5sb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgICAgICB9KVxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLWxvYWRlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZW5hYmxlKCl7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcbiAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgIH1cblxuICAgIGRpc2FibGUoKXtcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgIH1cblxuICAgIHVwZGF0ZShrZXkpe1xuICAgICAgICBpZighdGhpcy53aW5kb3dzLnNpemUpcmV0dXJuXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlVGhlbWVzKGtleSlcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseVRoZW1lcyhrZXkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVUaGVtZXMoa2V5KXtcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICBpZihrZXkpe1xuICAgICAgICAgICAgbGV0IHdpbmRvdyA9IHRoaXMud2luZG93cy5nZXQoa2V5KVxuICAgICAgICAgICAgaWYoIXdpbmRvdylyZXR1cm5cbiAgICAgICAgICAgIGxldCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxuXG4gICAgICAgICAgICBmb3IobGV0IHN0eWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWxpZ2h0Y29yZC10aGVtZT10cnVlXVwiKSl7XG4gICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBmb3IobGV0IGtleSBvZiB0aGlzLndpbmRvd3Mua2V5cygpKXtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRoZW1lcyhrZXkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseVRoZW1lcyhrZXkpe1xuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICBpZihrZXkpe1xuICAgICAgICAgICAgbGV0IHdpbmRvdyA9IHRoaXMud2luZG93cy5nZXQoa2V5KVxuICAgICAgICAgICAgaWYoIXdpbmRvdylyZXR1cm5cbiAgICAgICAgICAgIGxldCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxuXG4gICAgICAgICAgICBmb3IobGV0IHN0eWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWxpZ2h0Y29yZC10aGVtZT10cnVlXVwiKSl7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2V0QXR0cmlidXRlKFwid2lsbC1yZW1vdmVcIiwgXCJ0cnVlXCIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGJkdGhlbWVzKVxuICAgICAgICAgICAgLmZvckVhY2godGhlbWVOYW1lID0+IHtcbiAgICAgICAgICAgICAgICBpZighdGhlbWVDb29raWVbdGhlbWVOYW1lXSlyZXR1cm4gLy8gdGhlbWUgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lTmFtZV1cbiAgICAgICAgICAgICAgICBpZighdGhlbWUpcmV0dXJuIC8vOnNocnVnOlxuXG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW2RhdGEtbGlnaHRjb3JkLXRoZW1lPXRydWVdI1wiK0RPTS5lc2NhcGVJRCh0aGVtZS5pZCkpXG4gICAgICAgICAgICAgICAgaWYoZXhpc3Rpbmcpe1xuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5pbm5lckhUTUwgPSB1bmVzY2FwZSh0aGVtZS5jc3MpXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJlbW92ZUF0dHJpYnV0ZShcIndpbGwtcmVtb3ZlXCIpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmlkID0gRE9NLmVzY2FwZUlEKHRoZW1lLmlkKVxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5pbm5lckhUTUwgPSB1bmVzY2FwZSh0aGVtZS5jc3MpXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcImRhdGEtbGlnaHRjb3JkLXRoZW1lXCIsIFwidHJ1ZVwiKVxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZChzdHlsZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBmb3IobGV0IHN0eWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVt3aWxsLXJlbW92ZT10cnVlXVwiKSl7XG4gICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBmb3IobGV0IGtleSBvZiB0aGlzLndpbmRvd3Mua2V5cygpKXtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5VGhlbWVzKGtleSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5pbXBvcnQgVjJDX1B1YmxpY1NlcnZlcnMgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVyc1wiO1xuaW1wb3J0IExheWVycyBmcm9tIFwiLi9MYXllcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1B1YmxpY1NlcnZlcnMge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbiA9IHRoaXMuX2FwcGVuZEJ1dHRvbi5iaW5kKHRoaXMpO1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjJfUHVibGljU2VydmVycyA9IHRoaXNcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIExheWVycy5jcmVhdGVMYXllcigoY2xvc2UpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1B1YmxpY1NlcnZlcnMsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwiLCBjbG9zZX0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IGJ1dHRvbigpIHtcbiAgICAgICAgY29uc3QgYnRuID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItbGlcIiBjbGFzcz1cIiR7QkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW19XCI+YCk7XG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgYnRuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1idXR0b25cIiBjbGFzcz1cIiR7XCJ3cmFwcGVyLTI1ZVZJbiBcIiArIEJEVjIuZ3VpbGRDbGFzc2VzLmNpcmNsZUJ1dHRvbk1hc2t9XCI+cHVibGljPC9kaXY+YCk7XG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5yZW5kZXIoKTt9KTtcbiAgICAgICAgYnRuLmFwcGVuZChsYWJlbCk7XG4gICAgICAgIHJldHVybiBidG47XG4gICAgfVxuXG4gICAgX2FwcGVuZEJ1dHRvbigpIHtcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIGNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyXG4gICAgICAgIF0gPSBbXG4gICAgICAgICAgICBVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kb3dubG9hZFByb2dyZXNzICYmIGUudHV0b3JpYWxDb250YWluZXIpWzBdLnR1dG9yaWFsQ29udGFpbmVyKVxuICAgICAgICBdXG4gICAgICAgIGlmIChET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgZGl2LiR7Y2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJ9ID4gZGl2YCk7XG4gICAgICAgIERPTS5hZnRlcihndWlsZHMsIHRoaXMuYnV0dG9uKTtcbiAgICB9XG5cbiAgICBhZGRCdXR0b24oKSB7XG4gICAgICAgIGlmICh0aGlzLmd1aWxkUGF0Y2gpIHJldHVybjtcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gd2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XG4gICAgICAgIGNvbnN0IEd1aWxkTGlzdE9sZCA9IHdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiR3VpbGRzXCIpO1xuICAgICAgICBpZiAoIUd1aWxkTGlzdCAmJiAhR3VpbGRMaXN0T2xkKSBVdGlscy53YXJuKFwiUHVibGljU2VydmVyXCIsIFwiQ2FuJ3QgZmluZCBHdWlsZExpc3QgY29tcG9uZW50XCIpO1xuICAgICAgICB0aGlzLmd1aWxkUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZExpc3QgPyBHdWlsZExpc3QgOiBHdWlsZExpc3RPbGQucHJvdG90eXBlLCBHdWlsZExpc3QgPyBcImRlZmF1bHRcIiA6IFwicmVuZGVyXCIsIHthZnRlcjogdGhpcy5fYXBwZW5kQnV0dG9ufSk7XG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbigpO1xuICAgIH1cblxuICAgIHJlbW92ZUJ1dHRvbigpIHtcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoKCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmd1aWxkUGF0Y2g7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IERPTS5xdWVyeShcIiNiZC1wdWItbGlcIik7XG4gICAgICAgIGlmIChidXR0b24pIGJ1dHRvbi5yZW1vdmUoKTtcbiAgICB9XG59OyIsImltcG9ydCB7c2V0dGluZ3MsIHNldHRpbmdzQ29va2llLCBzZXR0aW5nc1JQQywgbGlnaHRjb3JkU2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFNpZGViYXJcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IGNvbG9yZWRUZXh0IGZyb20gXCIuL2NvbG9yZWRUZXh0XCI7XG5pbXBvcnQgdGZIb3VyIGZyb20gXCIuLzI0aG91clwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5pbXBvcnQgcHVibGljU2VydmVyc01vZHVsZSBmcm9tIFwiLi9wdWJsaWNTZXJ2ZXJzXCI7XG5pbXBvcnQgdm9pY2VNb2RlIGZyb20gXCIuL3ZvaWNlTW9kZVwiO1xuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9jbGFzc05vcm1hbGl6ZXJcIjtcbmltcG9ydCBkTW9kZSBmcm9tIFwiLi9kZXZNb2RlXCI7XG5cbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgQ3NzRWRpdG9yIGZyb20gXCIuLi91aS9jc3NFZGl0b3JcIjtcbmltcG9ydCBDYXJkTGlzdCBmcm9tIFwiLi4vdWkvYWRkb25saXN0XCI7XG5pbXBvcnQgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZnJvbSBcIi4uL3VpL3ByZXNlbmNlU2V0dGluZ3NcIjtcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4vQ3VzdG9tUmljaFByZXNlbmNlXCI7XG5pbXBvcnQgVjJDX0FjY291bnRJbmZvcyBmcm9tIFwiLi4vdWkvQWNjb3VudEluZm9zXCI7XG5pbXBvcnQgeyByZW1vdGUsIGlwY1JlbmRlcmVyIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgQW50aUFkRE0gZnJvbSBcIi4vQW50aUFkRE1cIjtcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xuaW1wb3J0IGRpc2FibGVUeXBpbmcgZnJvbSBcIi4vZGlzYWJsZVR5cGluZ1wiO1xuaW1wb3J0IEFwaVByZXZpZXcgZnJvbSBcIi4uL3VpL0FwaVByZXZpZXdcIjtcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4uL3VpL3N3aXRjaFwiO1xuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi4vdWkvbWFyZ2ludG9wXCI7XG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcbmltcG9ydCBIaXN0b3J5IGZyb20gXCIuLi91aS9pY29ucy9oaXN0b3J5XCI7XG5pbXBvcnQgY29yZSBmcm9tIFwiLi9jb3JlXCI7XG5pbXBvcnQgcG9wb3V0V2luZG93IGZyb20gXCIuL3BvcG91dFdpbmRvd1wiO1xuaW1wb3J0IFRleHRJbnB1dFNldHRpbmcgZnJvbSBcIi4uL3VpL1RleHRJbnB1dFNldHRpbmdcIjtcblxuY2xhc3MgQkRTaWRlYmFySGVhZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBzaWRlYmFyQ29tcG9uZW50cyA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLlNlcGFyYXRvciAmJiBlLkhlYWRlciAmJiBlLkl0ZW0pXG5cbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gUmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQ2hhbmdlbG9nXCJ9LCBcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Zsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCJ9LCBjbGFzc05hbWU6IFwiYmQtY2hhbmdlbG9nLWJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7VXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7fX0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBsZXQgcmVuZGVyZWQgPSBuZXcgc2lkZWJhckNvbXBvbmVudHMuSGVhZGVyKHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBcIkJhbmRhZ2VkIEJEXCIsIGNoYW5nZWxvZ0J1dHRvbiksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIlxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gcmVuZGVyZWRcbiAgICB9XG59XG5cbmxldCBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaWRlYmFyID0gbmV3IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhcigpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnRzKClcbiAgICB9XG5cbiAgICByZWdpc3RlckNvbXBvbmVudHMoKXtcbiAgICAgICAgLyoqIExpZ2h0Y29yZCAqL1xuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsaWdodGNvcmRcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmxpZ2h0Y29yZENvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwic3RhdHVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5QcmVzZW5jZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiYWNjb3VudGluZm9cIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGNhcGlwcmV2aWV3XCIsIG1ha2VDb21wb25lbnQodGhpcy5BcGlQcmV2aWV3Q29tcG9uZW50LmJpbmQodGhpcykpKVxuXG4gICAgICAgIC8qIEJhbmRhZ2VkIEJEICovXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcIkJEQ2hhbmdlbG9nVGl0bGVcIiwgbWFrZUNvbXBvbmVudCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJEU2lkZWJhckhlYWRlcigpLnJlbmRlcigpXG4gICAgICAgIH0pKVxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjb3JlXCIsIG1ha2VDb21wb25lbnQodGhpcy5jb3JlQ29tcG9uZW50LmJpbmQodGhpcykpKVxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjdXN0b21jc3NcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmN1c3RvbUNzc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwicGx1Z2luc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwicGx1Z2luc1wiKSkpXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInRoZW1lc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwidGhlbWVzXCIpKSlcbiAgICB9XG4gICAgXG4gICAgZ2V0IGNvcmVTZXR0aW5ncygpIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwiY29yZVwiKTtcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xuICAgICAgICByZXR1cm4gc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGxpZ2h0Y29yZFNldHRpbmdzKCkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJsaWdodGNvcmRcIik7XG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGNhdGVnb3JpZXMubWFwKGMgPT4ge3JldHVybiB7dGl0bGU6IGMsIHNldHRpbmdzOiBzZXR0aW5ncy5maWx0ZXIocyA9PiBzLmNhdGVnb3J5ID09IGMpfTt9KTtcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xuICAgIH1cblxuICAgIGdldCBQcmVzZW5jZVNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcInN0YXR1c1wiKVxuICAgIH1cblxuICAgIGdldFNldHRpbmdzKGNhdGVnb3J5KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdGVnb3J5ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cblxuXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCwgc2lkZWJhcik7XG4gICAgfVxuXG4gICAgdXBkYXRlU2V0dGluZ3MoaWQsIGVuYWJsZWQsIHNpZGViYXIpIHtcbiAgICAgICAgaWYoIVtcImxpZ2h0Y29yZC04XCIsIFwibm9fd2luZG93X2JvdW5kXCIsIFwiZW5hYmxlX2dsYXNzdHJvblwiLCBcImxpZ2h0Y29yZC0xMFwiLCBcImxpZ2h0Y29yZC0xMVwiXS5pbmNsdWRlcyhpZCkpc2V0dGluZ3NDb29raWVbaWRdID0gZW5hYmxlZDtcblxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0zXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0xXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgICAgICAgICAgZWxzZSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLnJlbW92ZUJ1dHRvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO1xuICAgICAgICAgICAgZWxzZSB2b2ljZU1vZGUuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTVcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmFibGVkICYmIGlkID09IFwiYmRhLWdzLTZcIikgdGZIb3VyLmluamVjdDI0SG91cigpO1xuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xuICAgICAgICAgICAgZWxzZSBjb2xvcmVkVGV4dC5yZW1vdmVDb2xvcmVkVGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy00XCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIGVsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXdwLTFcIikge1xuICAgICAgICAgICAgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIGVuYWJsZWQpO1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgbnVsbCk7XG4gICAgICAgICAgICBlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtOFwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLWRtLTFcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BDb3B5U2VsZWN0b3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZVxuICAgICAgICAgICAgc2lkZWJhci5mb3JjZVVwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0yXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzU3RvcmUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIHR5cGVvZiBlLmRlZmF1bHQgPT09IFwib2JqZWN0XCIgJiYgXCJzaG93Q3VycmVudEdhbWVcIiBpbiBlLmRlZmF1bHQpWzBdXG4gICAgICAgICAgICAgICAgaWYoc2V0dGluZ3NTdG9yZSAmJiAhc2V0dGluZ3NTdG9yZS5kZWZhdWx0LnNob3dDdXJyZW50R2FtZSl7XG4gICAgICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKVswXS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDdXJyZW50R2FtZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgQ3VzdG9tUmljaFByZXNlbmNlLmRpc2FibGUoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtM1wiKSB7XG4gICAgICAgICAgICBpcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9TRVRfQUxXQVlTX09OX1RPUFwiLCBlbmFibGVkKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNFwiKSB7XG4gICAgICAgICAgICBpZihlbmFibGVkKXtcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5lbmFibGUoKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC02XCIpIHtcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmVuYWJsZSgpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5kaXNhYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTdcIikge1xuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5kaXNhYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLThcIil7XG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSB3aW5kb3cuTGlnaHRjb3JkLkFwaS5zZXR0aW5nc1xuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiaXNUYWJzXCIsIGVuYWJsZWQpXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcbiAgICAgICAgICAgIERpc2NvcmROYXRpdmUuYXBwLnJlbGF1bmNoKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTlcIikge1xuICAgICAgICAgICAgcG9wb3V0V2luZG93W2VuYWJsZWQgPyBcImVuYWJsZVwiIDogXCJkaXNhYmxlXCJdKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTEwXCIpe1xuICAgICAgICAgICAgY29yZS5tZXRob2RzLk5vdGlmaWNhdGlvbnNVc2VTaGltKGVuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpe1xuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZW5hYmxlZClcblxuICAgICAgICAgICAgYXBwU2V0dGluZ3MuZGVsZXRlKFwiSVNfTUFYSU1JWkVEXCIpXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5kZWxldGUoXCJJU19NSU5JTUlaRURcIikgXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5kZWxldGUoXCJXSU5ET1dfQk9VTkRTXCIpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxuICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5hcHAucmVsYXVuY2goKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIpe1xuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIkdMQVNTVFJPTlwiLCBlbmFibGVkKVxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXG4gICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmFwcC5yZWxhdW5jaCgpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmKGlkID09PSBcImxpZ2h0Y29yZC0xMVwiKXtcbiAgICAgICAgICAgIGxldCBhcHBTZXR0aW5ncyA9IHdpbmRvdy5MaWdodGNvcmQuQXBpLnNldHRpbmdzXG4gICAgICAgICAgICBpZighZW5hYmxlZCl7XG4gICAgICAgICAgICAgICAgYXBwU2V0dGluZ3MuZGVsZXRlKFwiQkRfXCIraWQpXG4gICAgICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXQoXCJCRF9cIitpZCwgZW5hYmxlZClcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0zXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy01XCJdKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNFwiXSkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0xXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLXByZXNlbmNlLTFcIl0pIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtM1wiXSkgaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfU0VUX0FMV0FZU19PTl9UT1BcIiwgdHJ1ZSlcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTRcIl0pIEFudGlBZERNLmVuYWJsZSgpXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC02XCJdKSBibHVyUHJpdmF0ZS5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtN1wiXSkgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtOVwiXSkgcG9wb3V0V2luZG93LmVuYWJsZSgpXG5cbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSB7XG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy04XCJdKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xuXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XG4gICAgfVxuXG4gICAgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIiwgc2V0dGluZ3NDb29raWUpO1xuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcbiAgICB9XG5cbiAgICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpO1xuICAgIH1cblxuICAgIHJlbmRlclNpZGViYXIoc2lkZWJhcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyLnJlbmRlcihzaWRlYmFyKTtcbiAgICB9XG5cbiAgICBjb3JlQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSlcbiAgICB9XG5cbiAgICBsaWdodGNvcmRDb21wb25lbnQoc2lkZWJhciwgZm9yY2VVcGRhdGUpIHtcbiAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMubGlnaHRjb3JkU2V0dGluZ3MubWFwKChzZWN0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgKGkgPT09IDAgPyBudWxsIDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCkpLFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHNlY3Rpb24udGl0bGUpLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0NoZWNrZWQgPSBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gYXBwU2V0dGluZ3MuZ2V0KFwiQkRfXCIrc2V0dGluZy5pZCwgc2V0dGluZy5kZWZhdWx0IHx8IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImxpZ2h0Y29yZC04XCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiaXNUYWJzXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiTk9fV0lORE9XU19CT1VORFwiLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIkdMQVNTVFJPTlwiLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJsaWdodGNvcmQtMTBcIilpc0NoZWNrZWQgPSAhYXBwU2V0dGluZ3MuZ2V0KFwiREVGQVVMVF9OT1RJRklDQVRJT05TXCIsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKFtcImxpZ2h0Y29yZC0xMVwiXS5pbmNsdWRlcyhzZXR0aW5nLmlkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dElucHV0U2V0dGluZywge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIHZhbHVlLCBwbGFjZWhvbGRlcjogc2V0dGluZy5kZWZhdWx0IHx8IG51bGwsIG9uQ2hhbmdlOiAoaWQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoaWQsIHZhbHVlLCBzaWRlYmFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IGlzQ2hlY2tlZCwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGlkLCBjaGVja2VkLCBzaWRlYmFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT0gXCJsaWdodGNvcmQtOFwiICYmIGlzQ2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImdyZWVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rOiBcIm91dGxpbmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcImJyYW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5pcGMuc2VuZChcIk5FV19UQUJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBcIk9wZW4gYSBuZXcgVGFiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIgJiYgaXNDaGVja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtICE9PSBcImxpbnV4XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hvaWNlcyA9IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3R1YWwgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzLnB1c2goXCJibHVyYmVoaW5kXCIsIFwiYWNyeWxpY1wiLCBcInRyYW5zcGFyZW50XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBhcHBTZXR0aW5ncy5nZXQoXCJHTEFTU1RST05fQkxVUlwiLCBcImJsdXJiZWhpbmRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzLnB1c2goXCJ0aXRsZWJhclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNlbGVjdGlvblwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1lbnVcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwb3BvdmVyXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2lkZWJhclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhlYWRlclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNoZWV0XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2luZG93XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaHVkXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZnVsbHNjcmVlbi11aVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvb2x0aXBcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidW5kZXItd2luZG93XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidW5kZXItcGFnZVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gYXBwU2V0dGluZ3MuZ2V0KFwiR0xBU1NUUk9OX1ZJQlJBTkNZXCIsIFwiZnVsbHNjcmVlbi11aVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlLCB7fSwgXCJHbGFzc3Ryb24gQmx1clwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGNob2ljZXMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFjdHVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwY1JlbmRlcmVyLmludm9rZShcIkxJR0hUQ09SRF9TRVRfQkxVUl9UWVBFXCIsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwY1JlbmRlcmVyLmludm9rZShcIkxJR0hUQ09SRF9TRVRfVklCUkFOQ1lcIiwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksIFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcInllbGxvd1wiLFxuICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1lZGl1bVwiLFxuICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6IFwicmVkXCIsXG4gICAgICAgICAgICAgICAgb25DbGljaygpe1xuICAgICAgICAgICAgICAgICAgICBpcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9SRUxBVU5DSF9BUFBcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogcmVtb3RlLnByb2Nlc3MuYXJndi5zbGljZSgxKS5jb25jYXQoW1wiLS1kaXNhYmxlLWJldHRlcmRpc2NvcmRcIl0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlXG4gICAgICAgICAgICB9LCBcIlJlbGF1bmNoIHdpdGhvdXQgQmV0dGVyRGlzY29yZFwiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIixcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNDbGVhcmluZ0NhY2hlKXJldHVyblxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNsZWFyaW5nIGNhY2hlLi4uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnNlc3Npb24uY2xlYXJDYWNoZSgpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNhY2hlIGlzIGNsZWFyZWQgIVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLiBDaGVjayBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpc0NsZWFyaW5nQ2FjaGVcbiAgICAgICAgICAgIH0sIFwiQ2xlYXIgY2FjaGVcIilcbiAgICAgICAgXVxuICAgIH1cblxuICAgIFByZXNlbmNlQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XG4gICAgICAgICAgICBrZXk6IFwibHBwYW5uZWxcIixcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBcbiAgICAgICAgICAgIHNldHRpbmdzOiB0aGlzLlByZXNlbmNlU2V0dGluZ3NcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBBY2NvdW50SW5mb3NDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xuICAgICAgICAgICAga2V5OiBcImxhcGFubmVsXCJcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBBcGlQcmV2aWV3Q29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFwaVByZXZpZXcsIHtcbiAgICAgICAgICAgIGtleTogXCJsYXBpcGFubmVsXCJcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjdXN0b21Dc3NDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3NzRWRpdG9yLCB7a2V5OiBcImNzc2VkaXRvclwifSlcbiAgICB9XG5cbiAgICByZW5kZXJBZGRvblBhbmUodHlwZSkge1xuICAgICAgICAvLyBJIGtub3cgdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSwgYnV0IHdoZW4gaXQgaXNuJ3QsXG4gICAgICAgIC8vIFJlYWN0IHJlZnVzZXMgdG8gY2hhbmdlIHRoZSBidXR0b24gd2hlbiBnb2luZ1xuICAgICAgICAvLyBiZXR3ZWVuIHBsdWdpbnMgYW5kIHRoZW1lcyBwYWdlLi4uIHNvbWV0aGluZ1xuICAgICAgICAvLyB0byBkZWJ1ZyBsYXRlci5cbiAgICAgICAgY2xhc3MgQ29udGVudExpc3QgZXh0ZW5kcyBCRFYyLnJlYWN0LkNvbXBvbmVudCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZpeCA9IHRoaXMucHJvcHMudHlwZS5yZXBsYWNlKFwic1wiLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBvbkNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgcmVuZGVyKCkge3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO31cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlbmRlciA9IENvbnRlbnRMaXN0LnByb3RvdHlwZS5yZW5kZXI7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb250ZW50TGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXG4gICAgICAgICAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudExpc3QsIHt0eXBlfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENhcmRMaXN0LCB7dHlwZX0pKVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsIG9uIHdpbmRvd1xuICovXG5cbmZ1bmN0aW9uIG1ha2VDb21wb25lbnQoY2hpbGRyZW4pe1xuICAgIGNsYXNzIFNldHRpbmdDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgICAgICByZW5kZXIoKXtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihzaWRlYmFyLCAoKSA9PiB0aGlzLmZvcmNlVXBkYXRlKCkpXG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNpZGViYXJcbiAgICByZXR1cm4gKHMpID0+IHtcbiAgICAgICAgc2lkZWJhciA9IHNcbiAgICAgICAgcmV0dXJuIFNldHRpbmdDb21wb25lbnRcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnBhbmVscyA9IHt9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXIocGFuZWwsIGNvbXBvbmVudCl7XG4gICAgICAgIHRoaXMucGFuZWxzW3BhbmVsXSA9IGNvbXBvbmVudFxuICAgIH1cblxuICAgIGdldENvbXBvbmVudChwYW5lbCwgc2lkZWJhcil7XG4gICAgICAgIHJldHVybiB0aGlzLnBhbmVsc1twYW5lbF0oc2lkZWJhcilcbiAgICB9XG5cbiAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgdGV4dDogXCJCZXR0ZXJEaXNjb3JkIFNldHRpbmdzXCIsIFxuICAgICAgICAgICAgaWQ6IFwiY29yZVwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRleHQ6IFwiUGx1Z2luc1wiLCBcbiAgICAgICAgICAgIGlkOiBcInBsdWdpbnNcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRoZW1lc1wiLCBcbiAgICAgICAgICAgIGlkOiBcInRoZW1lc1wiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRleHQ6IFwiQ3VzdG9tIENTU1wiLCBcbiAgICAgICAgICAgIGlkOiBcImN1c3RvbWNzc1wiXG4gICAgICAgIH1dO1xuICAgIH1cblxuICAgIGdldCBMQ2l0ZW1zKCl7XG4gICAgICAgIGxldCBpdGVtcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZCBTZXR0aW5nc1wiLFxuICAgICAgICAgICAgICAgIGlkOiBcImxpZ2h0Y29yZFwiXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJSaWNoUHJlc2VuY2VcIiwgXG4gICAgICAgICAgICAgICAgaWQ6IFwic3RhdHVzXCJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkFjY291bnQgSW5mb1wiLFxuICAgICAgICAgICAgICAgIGlkOiBcImFjY291bnRpbmZvXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgICByZXR1cm4gaXRlbXNcbiAgICB9XG5cbiAgICBnZXQgTENEZXZJdGVtcygpe1xuICAgICAgICBsZXQgaXRlbXMgPSBbXVxuICAgICAgICBpZighd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlKXJldHVybiBpdGVtc1xuICAgICAgICBpdGVtcy5wdXNoKC4uLltcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxpZ2h0Y29yZCBBcGlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkNvbXBvbmVudHMgUHJldmlld1wiLFxuICAgICAgICAgICAgICAgIGlkOiBcImxjYXBpcHJldmlld1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIF0pXG4gICAgICAgIHJldHVybiBpdGVtc1xuICAgIH1cblxuICAgIHJlbmRlcihzaWRlYmFyKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnRoaXMuTENpdGVtcy5tYXAoZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLnRoaXMuTENEZXZJdGVtcy5tYXAoZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoZS5zZWN0aW9uKXJldHVybiBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkNVU1RPTVwiLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KFwiQkRDaGFuZ2Vsb2dUaXRsZVwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnRoaXMuaXRlbXMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH1cbn1cblxuLyoqXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsU2lkZWJhciBvbiB3aW5kb3dcbiAqLyIsImltcG9ydCB7YmR0aGVtZUVycm9ycywgdGhlbWVDb29raWUsIHNldHRpbmdzQ29va2llLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuaW1wb3J0IGJkRXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XG5cbmNsYXNzIFRoZW1lTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVGhlbWVNb2R1bGUgPSB0aGlzXG4gICAgfVxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlcjt9XG59XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubG9hZFRoZW1lRGF0YSgpO1xuICAgIGJkdGhlbWVFcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkVGhlbWVzKCkpKTtcbiAgICBjb25zdCB0aGVtZXMgPSBPYmplY3Qua2V5cyhiZHRoZW1lcyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoZW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lc1tpXV07XG4gICAgICAgIGlmICghdGhlbWVDb29raWVbdGhlbWUubmFtZV0pIHRoZW1lQ29va2llW3RoZW1lLm5hbWVdID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSlcbiAgICB9XG4gICAgZm9yIChjb25zdCB0aGVtZSBpbiB0aGVtZUNvb2tpZSkge1xuICAgICAgICBpZiAoIWJkdGhlbWVzW3RoZW1lXSkgZGVsZXRlIHRoZW1lQ29va2llW3RoZW1lXTtcbiAgICB9XG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbbmFtZV07XG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xuICAgIGJkRXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtZW5hYmxlZFwiKVxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gYXBwbGllZC5gKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVUaGVtZShuYW1lLCByZWxvYWQpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRpc2FibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpKTtcbiAgICBiZEV2ZW50cy5kaXNwYXRjaChcInRoZW1lLWRpc2FibGVkXCIpXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBkaXNhYmxlZC5gKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlVGhlbWUgPSBmdW5jdGlvbih0aGVtZSkge1xuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lKTtcbiAgICBlbHNlIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlVGhlbWUobmFtZSk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInRoZW1lXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuIEl0IG1heSBub3QgaGF2ZSBiZWVuIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpO1xuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLWxvYWRlZFwiLCB0aGVtZS5uYW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS51bmxvYWRUaGVtZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm47XG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XG4gICAgZGVsZXRlIGJkdGhlbWVzW3RoZW1lXTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XG4gICAgfVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXVubG9hZGVkXCIsIHRoZW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xuICAgIHRoaXMudW5sb2FkVGhlbWUoYmR0aGVtZS5maWxlbmFtZSk7XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgYmR0aGVtZS5maWxlbmFtZSk7XG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybiB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSwgdHJ1ZSksIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUsIHRydWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1yZWxvYWRlZFwiLCB0aGVtZSk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZFRoZW1lKG5hbWUpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVkaXQgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuRXh0ZXJuYWwoYCR7ZnVsbFBhdGh9YCk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudXBkYXRlVGhlbWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwidGhlbWVcIik7XG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZSk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRUaGVtZShuYW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVEYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIpO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoZW1lQ29va2llLCBzYXZlZCk7XG4gICAgfVxufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnNhdmVUaGVtZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInRoZW1lc1wiLCB0aGVtZUNvb2tpZSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgVGhlbWVNb2R1bGUoKTsiLCJpbXBvcnQge2JiZFZlcnNpb259IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHMge1xuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cbiAgICBzdGF0aWMgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfVxuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgaGVpZ2h0ICovXG4gICAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cblxuICAgIHN0YXRpYyBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXRXaW5kb3dQcmVmZXJlbmNlKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBzZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdHJpcEJPTShjb250ZW50KSB7XG4gICAgICAgIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRleHRBcmVhKCkge1xuICAgICAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiK3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoYW5uZWxUZXh0QXJlYSAmJiBlLnRpdGxlV3JhcHBlcilbMF0uY2hhbm5lbFRleHRBcmVhKStcIiB0ZXh0YXJlYVwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCB0ZXh0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGxvZyhtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjM2E3MWMxOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjM2E3MWMxO1wiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogI0U4QTQwMDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogI0U4QTQwMDtcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGVycihtb2R1bGVOYW1lLCBtZXNzYWdlLCBlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogcmVkOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiByZWQ7XCIsIFwiXCIpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCIlY0Vycm9yOiBcIiArIGVycm9yLm1lc3NhZ2UsIFwiY29sb3I6IHJlZDtcIik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdCBzdHJpbmdzIHdpdGggcGxhY2Vob2xkZXJzIChge3twbGFjZWhvbGRlcn19YCkgaW50byBmdWxsIHN0cmluZ3MuXG4gICAgICogUXVpY2sgZXhhbXBsZTogYFBsdWdpblV0aWxpdGllcy5mb3JtYXRTdHJpbmcoXCJIZWxsbywge3t1c2VyfX1cIiwge3VzZXI6IFwiWmVyZWJvc1wifSlgXG4gICAgICogd291bGQgcmV0dXJuIFwiSGVsbG8sIFplcmVib3NcIi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gc3RyaW5nIHRvIGZvcm1hdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgLSBvYmplY3QgbGl0ZXJhbCBvZiBwbGFjZWhvbGRlcnMgdG8gcmVwbGFjZW1lbnRzXG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKHN0cmluZywgdmFsdWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsIGluIHZhbHVlcykge1xuICAgICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdmFsdWVzW3ZhbF07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlbWVudCkpIHJlcGxhY2VtZW50ID0gSlNPTi5zdHJpbmdpZnkocmVwbGFjZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihyZXBsYWNlbWVudCkgPT09IFwib2JqZWN0XCIgJiYgcmVwbGFjZW1lbnQgIT09IG51bGwpIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKG5ldyBSZWdFeHAoYHt7JHt2YWx9fX1gLCBcImdcIiksIHJlcGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHN0YXRpYyBlc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGlzRW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZihvYmopICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09IDA7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgICAgICAgdHJ5IHsgcmV0dXJuIG1ldGhvZCguLi5wYXJhbXMpO1x0fVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnIoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIG1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qge2JlZm9yZSwgYWZ0ZXIsIGluc3RlYWQsIG9uY2UgPSBmYWxzZSwgc2lsZW50ID0gZmFsc2UsIGZvcmNlID0gZmFsc2V9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihtZXRob2ROYW1lLCBcImRvZXMgbm90IGV4aXN0IGZvclwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdNZXRob2QgPSB3aGF0W21ldGhvZE5hbWVdO1xuICAgICAgICBsZXQgY2FuY2VsZWQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIC8vd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICBjYW5jZWxlZCA9IHRydWUgLy8gdGhpcyBhbGxvdyB0byBtb25rZXlwYXRjaCBtb3JlIHRoYW4gb25lIHRpbWUuXG4gICAgICAgIH07XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmKGNhbmNlbGVkKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ01ldGhvZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICBjYW5jZWxQYXRjaDogY2FuY2VsLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxuICAgICAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5zdGVhZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhpbnN0ZWFkLCBcImBpbnN0ZWFkYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYmVmb3JlLCBcImBiZWZvcmVgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcbiAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHdoYXRbbWV0aG9kTmFtZV0sIG9yaWdNZXRob2QpO1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9yaWdNZXRob2QudG9TdHJpbmcoKTt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5jZWw7XG4gICAgfVxuXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbbV07XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmVzdGVkUHJvcChvYmosIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmpbcHJvcF07XG4gICAgICAgIH0sIG9iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBzaG93cyBhIHRvYXN0IHNpbWlsYXIgdG8gYW5kcm9pZCB0b3dhcmRzIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuIE9wdGlvbmFsIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGltZW91dCBBZGp1c3RzIHRoZSB0aW1lIChpbiBtcykgdGhlIHRvYXN0IHNob3VsZCBiZSBzaG93biBmb3IgYmVmb3JlIGRpc2FwcGVhcmluZyBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0OiAzMDAwXG4gICAgICovXG4gICAgc3RhdGljIHNob3dUb2FzdChjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKSkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIityZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyICYmIGUuaGFzTm90aWNlKVswXS5zaWRlYmFyKStcIiArIGRpdlwiKSB8fCBudWxsO1xuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiZm9ybVwiKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBmb3JtID8gZm9ybS5vZmZzZXRIZWlnaHQgOiA4MDtcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0c1wiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImJvdHRvbVwiLCBib3R0b20rXCJweFwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpLmFwcGVuZENoaWxkKHRvYXN0V3JhcHBlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9hc3RXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIilcbiAgICAgICAgY29uc3Qge3R5cGUgPSBcIlwiLCBpY29uID0gdHJ1ZSwgdGltZW91dCA9IDMwMDB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgdG9hc3RFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcbiAgICAgICAgaWYgKHR5cGUpIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwidG9hc3QtXCIgKyB0eXBlKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgaWNvbikgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJpY29uXCIpO1xuICAgICAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICAgICAgdG9hc3RXcmFwcGVyLmFwcGVuZENoaWxkKHRvYXN0RWxlbSk7XG4gICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgYGNhbGMoNTAlIC0gJHt0b2FzdFdyYXBwZXIub2Zmc2V0V2lkdGggLyAyfXB4KWApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvYXN0RWxlbS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmQtdG9hc3RzIC5iZC10b2FzdFwiKS5sZW5ndGgpIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFsZXJ0KHRpdGxlLCBjb250ZW50KSB7XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICAgICAgY29uc3QgY2xvc2luZ0xpc3RlbmVycyA9IFtdXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzID0gW10sIHRoZW1lczogdGhlbWVFcnJvcnMgPSBbXX0pIHtcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzKSByZXR1cm47XG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCBiZC1jb250ZW50LW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPjxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRlbnQgRXJyb3JzPC9kaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBUT1BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlBsdWdpbnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlRoZW1lczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPk5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+TWVzc2FnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+RXJyb3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFiKGVycm9ycykge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5gKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPjxhIGNsYXNzPVwiZXJyb3ItbGlua1wiIGhyZWY9XCJcIj4ke2Vyci5lcnJvciA/IGVyci5lcnJvci5tZXNzYWdlIDogXCJcIn08L2E+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGBFcnJvciBkZXRhaWxzIGZvciAke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX0uYCwgZXJyLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgdGFicyA9IFtnZW5lcmF0ZVRhYihwbHVnaW5FcnJvcnMpLCBnZW5lcmF0ZVRhYih0aGVtZUVycm9ycyldO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCkgRE9NLnJlbW92ZUNsYXNzKHNlbGVjdGVkLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKGUudGFyZ2V0LCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xuICAgICAgICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZCh0YWJzW0RPTS5pbmRleChlLnRhcmdldCldKTtcbiAgICAgICAgfSkpO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XG4gICAgICAgIGlmIChwbHVnaW5FcnJvcnMubGVuZ3RoKSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbVwiKS5jbGljaygpO1xuICAgICAgICBlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XG4gICAgICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImZpeGVkXCIsIFwiaW1wcm92ZWRcIik7XG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIkNoaWxkXCIpO1xuICAgICAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xuICAgICAgICBjb25zdCBDaGFuZ2Vsb2cgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuc2VsZWN0YWJsZSA9PSBmYWxzZSk7XG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJkZWZhdWx0UnVsZXNcIiwgXCJwYXJzZVwiKTtcbiAgICAgICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybjtcbiAgICBcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaW1hZ2UgPSBcImh0dHBzOi8vcmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEwNTQ3MzUzNy85NTdiNTQ4MC03YzI2LTExZTktODQwMS01MGZhODIwY2JhZTVcIiwgXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCIsIFxuICAgICAgICAgICAgY2hhbmdlcyA9IFtdLCBcbiAgICAgICAgICAgIHRpdGxlID0gXCJCYW5kYWdlZEJEXCIsIFxuICAgICAgICAgICAgc3VidGl0bGUgPSBgdiR7YmJkVmVyc2lvbn1gLCBcbiAgICAgICAgICAgIGZvb3RlclxuICAgICAgICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgY2UgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0l0ZW1zID0gW2NlKFwiaW1nXCIsIHtzcmM6IGltYWdlfSldO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJwXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGRlc2NyaXB0aW9uKSkpO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY2hhbmdlc1tjXTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdID8gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA6IENoYW5nZWxvZ0NsYXNzZXMuYWRkZWQ7XG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwiaDFcIiwge2NsYXNzTmFtZTogYCR7dHlwZX0gJHttYXJnaW59YCx9LCBlbnRyeS50aXRsZSkpO1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGNlKFwidWxcIiwgbnVsbCwgZW50cnkuaXRlbXMubWFwKGkgPT4gY2UoXCJsaVwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShpKSkpKTtcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcbiAgICAgICAgICAgICAgICBjZShUaXRsZXMuZGVmYXVsdCwge3RhZzogVGl0bGVzLlRhZ3MuSDR9LCB0aXRsZSksXG4gICAgICAgICAgICAgICAgY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJELCBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuZGF0ZX0sIHN1YnRpdGxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICBcbiAgICAgICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xuICAgICAgICAgICAgY29uc3Qgam9pblN1cHBvcnRTZXJ2ZXIgPSAoY2xpY2spID0+IHtcbiAgICAgICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgQkRWMi5qb2luQkQyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sIGZvb3RlciA/IGZvb3RlciA6IGRlZmF1bHRGb290ZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcbiAgICAgICAgICAgICAgICByZW5kZXJIZWFkZXI6IHJlbmRlckhlYWRlcixcbiAgICAgICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcbiAgICAgICAgICAgIH0sIHByb3BzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxBY3Rpb25zID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJvcGVuTW9kYWxcIiwgXCJ1cGRhdGVNb2RhbFwiKTtcbiAgICAgICAgY29uc3QgTWFya2Rvd24gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1hcmtkb3duXCIpO1xuICAgICAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiQ29uZmlybU1vZGFsXCIpO1xuICAgICAgICBpZiAoIU1vZGFsQWN0aW9ucyB8fCAhQ29uZmlybWF0aW9uTW9kYWwgfHwgIU1hcmtkb3duKSByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xuXG4gICAgICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcbiAgICAgICAgY29uc3Qge29uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sIG9uQ2FuY2VsID0gZW1wdHlGdW5jdGlvbiwgY29uZmlybVRleHQgPSBcIk9rYXlcIiwgY2FuY2VsVGV4dCA9IFwiQ2FuY2VsXCIsIGRhbmdlciA9IGZhbHNlLCBrZXkgPSB1bmRlZmluZWR9ID0gb3B0aW9ucztcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIGNvbnRlbnQgPSBbY29udGVudF07XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50Lm1hcChjID0+IHR5cGVvZihjKSA9PT0gXCJzdHJpbmdcIiA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChNYXJrZG93biwgbnVsbCwgYykgOiBjKTtcbiAgICAgICAgcmV0dXJuIE1vZGFsQWN0aW9ucy5vcGVuTW9kYWwocHJvcHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChDb25maXJtYXRpb25Nb2RhbCwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcbiAgICAgICAgICAgICAgICByZWQ6IGRhbmdlcixcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06IG9uQ29uZmlybSxcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogb25DYW5jZWxcbiAgICAgICAgICAgIH0sIHByb3BzKSwgY29udGVudCk7XG4gICAgICAgIH0sIHttb2RhbEtleToga2V5fSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCByZW1vdmVEYSgpe1xuICAgICAgICByZXR1cm4gcmVtb3ZlRGFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhKGNsYXNzTmFtZSl7XG4gICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXG4gICAgcmV0dXJuIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gIWUuc3RhcnRzV2l0aChcImRhLVwiKSkuam9pbihcIiBcIilcbn1cblxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlV0aWxzID0gVXRpbHMiLCJpbXBvcnQge3NldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjIge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5XZWJwYWNrTW9kdWxlcyA9ICgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xuICAgICAgICAgICAgZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcbiAgICAgICAgICAgIGRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XG5cbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFByb3RlY3QgPSB0aGVNb2R1bGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUucmVtb3ZlICYmIHRoZU1vZHVsZS5zZXQgJiYgdGhlTW9kdWxlLmNsZWFyICYmIHRoZU1vZHVsZS5nZXQgJiYgIXRoZU1vZHVsZS5zb3J0KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLmdldFRva2VuIHx8IHRoZU1vZHVsZS5nZXRFbWFpbCB8fCB0aGVNb2R1bGUuc2hvd1Rva2VuKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwcm90ZWN0ID0gKHRoZU1vZHVsZSwgaXNEZWZhdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vZCA9ICFpc0RlZmF1bHQgPyB0aGVNb2R1bGUuZGVmYXVsdCA6IHRoZU1vZHVsZVxuICAgICAgICAgICAgICAgIGlmKCFtb2QpcmV0dXJuIHRoZU1vZHVsZVxuICAgICAgICAgICAgICAgIGlmIChtb2QucmVtb3ZlICYmIG1vZC5zZXQgJiYgbW9kLmNsZWFyICYmIG1vZC5nZXQgJiYgIW1vZC5zb3J0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIW1vZC5nZXRUb2tlbiAmJiAhbW9kLmdldEVtYWlsICYmICFtb2Quc2hvd1Rva2VuKXJldHVybiB0aGVNb2R1bGVcblxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KG1vZCwge1xuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiZ2V0VG9rZW5cIiB8fCBwcm9wID09PSBcImdldEVtYWlsXCIgfHwgcHJvcCA9PT0gXCJzaG93VG9rZW5cIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBmdW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldFRva2VuXCIgJiYgb2JqLmdldFRva2VuKSByZXR1cm4gKCkgPT4gXCJtZmEuWENuYkt6bzBDTElxZEp6Qm5MMEQ4UGZEcnVxa0pOSGp3SFh0cjM5VVUzRjhoSHg0M2pvaklTeWk1amRqTzUyZTlfZTlNam1hZlpGRnBjLXNlT01hXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldEVtYWlsXCIgJiYgb2JqLmdldEVtYWlsKSByZXR1cm4gKCkgPT4gXCJwdXBwZXQxMTExMkBnbWFpbC5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIgJiYgb2JqLnNob3dUb2tlbikgcmV0dXJuICgpID0+IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcIl9fcHJvdG9fX1wiICYmIG9iai5fX3Byb3RvX18pIHJldHVybiBwcm94eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtmdW5jXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoIWlzRGVmYXVsdCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGVNb2R1bGUsIHtkZWZhdWx0OiBwcm94eX0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBwcm90ZWN0KG0uZGVmYXVsdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gcHJvdGVjdChtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobS5kZWZhdWx0LCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobSwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlcztcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMgPSAocHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xuICAgICAgICAgICAgY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9IChwcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICBjb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7ZmluZCwgZmluZEFsbCwgZmluZEJ5VW5pcXVlUHJvcGVydGllcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSB7XG4gICAgICAgICAgICByZWFjdDogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIkNvbXBvbmVudFwiLCBcIlB1cmVDb21wb25lbnRcIiwgXCJDaGlsZHJlblwiLCBcImNyZWF0ZUVsZW1lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIl0pLFxuICAgICAgICAgICAgcmVhY3REb206IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJmaW5kRE9NTm9kZVwiXSlcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlID0gZSA9PiBlW09iamVjdC5rZXlzKGUpLmZpbmQoayA9PiBrLnN0YXJ0c1dpdGgoXCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZVwiKSldO1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjIgPSB0aGlzXG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcblxuICAgIH1cblxuICAgIGpvaW5CRDEoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIwVG1mbzVaYk9SQ1JxYkFkXCIpO31cbiAgICBsZWF2ZUJEMSgpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiODYwMDQ3NDQ5NjY5MTQwNDhcIik7fVxuXG4gICAgam9pbkJEMigpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjJIU2NtOGpcIik7fVxuICAgIGxlYXZlQkQyKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCIyODA4MDY0NzI5MjgxOTg2NTZcIik7fVxuXG4gICAgam9pbkxDKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiN2VGZmYyQVwiKTt9XG4gICAgbGVhdmVMQygpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiNzA1OTA4MzUwMjE4NjY2MTE3XCIpO31cblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XG4gICAgICovXG4gICAgZ2V0IHJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0fVxuICAgICAqL1xuICAgIGdldCBSZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XG4gICAgLyoqXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XG4gICAgICovXG4gICAgZ2V0IHJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cbiAgICAgKi9cbiAgICBnZXQgUmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxuICAgICAqL1xuICAgIGdldCByZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxuICAgICAqL1xuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxuXG4gICAgZ2V0IGFuY2hvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCJdKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTt9XG4gICAgZ2V0IHNsYXRlRWRpdG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNsYXRlVGV4dEFyZWFcIl0pO31cbiAgICBnZXQgbWVzc2FnZUNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJtZXNzYWdlXCIsIFwiY29udGFpbmVyQ296eVwiXSk7fVxuICAgIGdldCBndWlsZENsYXNzZXMoKSB7XG5cdFx0Y29uc3QgZ3VpbGRzV3JhcHBlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLndyYXBwZXIgJiYgZS51bnJlYWRNZW50aW9uc0JhcilbMF07XG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmd1aWxkc0Vycm9yICYmIGUuc2VsZWN0ZWQpWzBdXG4gICAgICAgIGNvbnN0IHBpbGwgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ibG9iQ29udGFpbmVyKVswXVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcblx0fVxuXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XG4gICAgZ2V0IE1lc3NhZ2VDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTWVzc2FnZVwiKTt9XG4gICAgZ2V0IFRpbWVGb3JtYXR0ZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJkYXRlRm9ybWF0XCJdKTt9XG4gICAgZ2V0IFRvb2x0aXBXcmFwcGVyKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTt9XG4gICAgZ2V0IE5hdGl2ZU1vZHVsZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNldEJhZGdlXCJdKTt9XG4gICAgZ2V0IEludml0ZUFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO31cbiAgICBnZXQgR3VpbGRBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibGVhdmVHdWlsZFwiXSk7fVxuICAgIGdldCBUb29sdGlwcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5oaWRlICYmIG0uc2hvdyAmJiAhbS5zZWFyY2ggJiYgIW0uc3VibWl0ICYmICFtLnNlYXJjaCAmJiAhbS5hY3RpdmF0ZVJhZ2luZ0RlbW9uICYmICFtLmRpc21pc3MpO31cbiAgICBnZXQgS2V5R2VuZXJhdG9yKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLnRvU3RyaW5nICYmIC9cImJpbmFyeVwiLy50ZXN0KG0udG9TdHJpbmcoKSkpO31cbiAgICBnZXQgTGF5ZXJTdGFjaygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInBvcExheWVyXCJdKTt9XG4gICAgZ2V0IFVzZXJTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEN1cnJlbnRVc2VyXCJdKTt9XG4gICAgZ2V0IENoYW5uZWxTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldENoYW5uZWxcIl0pO31cbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJvcGVuUHJpdmF0ZUNoYW5uZWxcIl0pO31cbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2VsZWN0UHJpdmF0ZUNoYW5uZWxcIl0pO31cblxuICAgIG9wZW5ETSh1c2VySWQpIHtcbiAgICAgICAgY29uc3Qgc2VsZklkID0gdGhpcy5Vc2VyU3RvcmUuZ2V0Q3VycmVudFVzZXIoKS5pZDtcbiAgICAgICAgaWYgKHNlbGZJZCA9PSB1c2VySWQpIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUNoYW5uZWxJZCA9IHRoaXMuQ2hhbm5lbFN0b3JlLmdldERNRnJvbVVzZXJJZCh1c2VySWQpO1xuICAgICAgICBpZiAocHJpdmF0ZUNoYW5uZWxJZCkgcmV0dXJuIHRoaXMuUHJpdmF0ZUNoYW5uZWxBY3Rpb25zLnNlbGVjdFByaXZhdGVDaGFubmVsKHByaXZhdGVDaGFubmVsSWQpO1xuICAgICAgICB0aGlzLkNoYW5uZWxBY3Rpb25zLm9wZW5Qcml2YXRlQ2hhbm5lbChzZWxmSWQsIHVzZXJJZCk7XG4gICAgfVxuXG4gICAgcGFyc2VTZXR0aW5ncyhjYXQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nba2V5XTtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xuICAgICAgICAgICAgfSByZXR1cm4gYXJyO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG59OyIsImltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IHN0eWxlID0gYFxyXG4gICAgLmNvbnRhaW5lci0yUmwwMXUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5jaGF0LTNiUnh4dSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnNpZGViYXItMks4cEZoIHtcclxuICAgICAgICBmbGV4LWdyb3c6IDEhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5gO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFZvaWNlTW9kZSB7XHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJWb2ljZU1vZGVcIiwgc3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiVm9pY2VNb2RlXCIpO1xyXG4gICAgfVxyXG59OyIsImNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XHJcbmRlbGV0ZSByZXEubS5fX2V4dHJhX2lkX187XHJcbmRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XHJcbmNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBtLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIGxvYWRlZCBtb2R1bGUgaW4gY2FjaGVcIik7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBjb25zdCBtb2R1bGVzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIG1vZHVsZXMucHVzaChtLmRlZmF1bHQpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKG0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb2R1bGVzO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEJ5UHJvcHMgPSAoLi4ucHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKC4uLnByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuY29uc3QgZmluZEJ5RGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWUpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gZGlzcGxheU5hbWUpO1xyXG5cclxubGV0IG1vZCA9ICB7ZmluZCwgZmluZEFsbCwgZmluZEJ5UHJvcHMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTtcclxuZXhwb3J0IGRlZmF1bHQgbW9kXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuV2VicGFja01vZHVsZXMgPSBtb2QiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRMb2dvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNjggMTY4LjY5XCIgey4uLnByb3BzfSBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9e3Byb3BzLnNpemV9PlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19hXCIgeDE9ezY2Ljd9IHkxPXstNDg3Ljd9IHgyPXs2Ni43fSB5Mj17LTUwOC43M30gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19iXCIgeDE9ezEwMS43fSB5MT17LTQ4Ny43fSB4Mj17MTAxLjd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UyMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2NcIiB4MT17ODR9IHkxPXstNDA4fSB4Mj17ODR9IHkyPXstNTc2LjY5fSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjZmZmXCIgZD1cIk0xNC45IDM1LjNoMTM5LjJWMTMzSDE0Ljl6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNjYuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19hKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwMS43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2IpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwdjE2OGwxNjggLjY5VjB6bTExMS4zIDEyNC4xcy0zLjQtNC4xLTYuMy03LjdjMTIuNi0zLjUgMTcuNC0xMS4zIDE3LjQtMTEuM2E1Mi41MiA1Mi41MiAwIDAxLTExLjEgNS42IDY4LjYzIDY4LjYzIDAgMDEtMzguOSA0IDcwLjEyIDcwLjEyIDAgMDEtMTQuMS00LjEgNDguODggNDguODggMCAwMS03LjEtMy4zYy0uMy0uMi0uNi0uMy0uOS0uNWEuNzYuNzYgMCAwMC0uNC0uMmMtMS43LTEtMi42LTEuNi0yLjYtMS42czQuNiA3LjYgMTYuOCAxMS4yYy0yLjkgMy42LTYuNCA3LjktNi40IDcuOS0yMS4yLS42LTI5LjMtMTQuNS0yOS4zLTE0LjUgMC0zMC42IDEzLjgtNTUuNCAxMy44LTU1LjQgMTMuOC0xMC4zIDI2LjktMTAgMjYuOS0xMGwxIDEuMUM1Mi44IDUwLjMgNDUgNTcuOSA0NSA1Ny45YTU2LjIgNTYuMiAwIDAxNS43LTIuNyA3Mi4xOSA3Mi4xOSAwIDAxMjEuOC02IDguNzUgOC43NSAwIDAxMS42LS4yIDg5LjEgODkuMSAwIDAxMTkuNC0uMiA3OC40NSA3OC40NSAwIDAxMjguOSA5LjFzLTcuNS03LjItMjMuOS0xMi4xbDEuMy0xLjVzMTMuMS0uMyAyNi45IDEwYzAgMCAxMy44IDI0LjggMTMuOCA1NS40LjEtLjEtOCAxMy44LTI5LjIgMTQuNHpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2MpXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVnSHVudGVyQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAzMS4zIDI5LjVcIiB7Li4ucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjggMXMxMiA4LjIgNy40IDE5LjdTMTYuNiAyOSAyMCAyNS42cy00LTUuNi04LjctMTBMMjIuOCAxXCIgZmlsbD1cInJnYmEoMjI3LDYsMTksLjYpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuMSAxMi4zYy0yLjUgMy4yLTYuMSA0LjgtOC45IDQuM0wzLjYgMjguOGMtLjcuOS0xLjkgMS0yLjguMy0uOS0uNy0xLTEuOS0uNC0yLjhMMTAgMTQuMWMtMS4zLTIuNS0uNi02LjQgMi05LjcgMy4yLTQgOC01LjUgMTAuOC0zLjRzMi40IDcuMi0uNyAxMS4zelwiIGZpbGw9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIENpcmN1cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gKDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiAgey4uLnRoaXMucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjREQyRTQ0XCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTMzIDMzYTIgMiAwIDAxLTIgMkg1YTIgMiAwIDAxLTItMmwxLTEyaDI4bDEgMTJ6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRUE1OTZFXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTEzIDM1Yy0uNzkyLTEuODc1LTEuNzUtMy4yOTEtMy40MTctNC42NjYgMS43NS0xLjQ1OSA0LjU0Mi01LjUgNS4yNS04LjI5MnMyLjc1IDguMTI1IDIuMDQyIDEwLjYyNVMxMyAzNSAxMyAzNXptMTAuMzAzIDBjLjc5MS0xLjg3NSAxLjc1LTMuMjkxIDMuNDE2LTQuNjY2LTEuNzUtMS40NTktNC41NDEtNS41LTUuMjUtOC4yOTItLjcwNy0yLjc5Mi0yLjc1IDguMTI1LTIuMDQgMTAuNjI1LjcwOCAyLjUgMy44NzQgMi4zMzMgMy44NzQgMi4zMzN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjQkUxOTMxXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTMuNzI4IDI0LjI2M0EyLjUgMi41IDAgMDA4IDIyLjVjMC0uNTY1LS4xOTUtMS4wODEtLjUxMS0xLjVINGwtLjI3MiAzLjI2M3ptMjguNTQ0IDBMMzIgMjFoLTMuNDg5QTIuNDgyIDIuNDgyIDAgMDAyOCAyMi41YTIuNSAyLjUgMCAwMDQuMjcyIDEuNzYzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE0XCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyMlwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjI2XCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjMgMzVIMTNzMi02IDItMTNoNmMwIDcgMiAxMyAyIDEzek0xNyAyaDJ2N2gtMnpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNTVBQ0VFXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4LjgzOC4yMDZDMTcuNjY3LjA0MiAxNyAuMzE4IDE3IDEuNDE4djFjMCAxLjEuODY1IDEuNzUzIDEuOTIzIDEuNDUxbDUuMTU0LS45MDFjMS43MTUtLjM0MyAxLjU0OC0xLjU5My4wODUtMS44ODRMMTguODM4LjIwNnpcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNDQ0Q2RERcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggNmwtLjA4MS4xMjNDMTAuOTM4IDE2Ljk4MSAzIDE1LjAxNSAzIDE5djIuNWEyLjUgMi41IDAgMDA0Ljk1LjVIMTJhMiAyIDAgMDA0IDBoNGEyIDIgMCAwMDQgMGg0LjA1YTIuNSAyLjUgMCAwMDQuOTUtLjVWMTljMC00LTgtMi0xNS0xM3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxnIGZpbGw9XCIjRjVGOEZBXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy45NDggNi4wNzhsLS4wMy4wNDVDMTcuMTMyIDExLjYxOSAxMC44MTEgMTYuMTI2IDggMTh2NGEyIDIgMCAwMDQgMHYtNGMuOTgyLS45ODIgNS44MTMtNi43ODcgNS45ODQtMTEuNzMyLS4wMS0uMDY0LS4wMjctLjEyNi0uMDM2LS4xOXptLjA4LjM5OEMxOC4zMjQgMTEuMzc0IDIzLjAzMSAxNy4wMzEgMjQgMTh2NGEyIDIgMCAwMDQgMHYtNGMtMi43NS0xLjgzMy04Ljk1My02LjE5LTkuOTcyLTExLjUyNHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy45ODQgNi4yN0MxNy45MjIgOC4zNDYgMTcuNjA2IDE2LjM5NCAxNiAxOHY0YTIgMiAwIDAwNCAwdi00Yy0xLjU2NC0xLjU2NC0xLjkwNS05LjI0MS0xLjk3OS0xMS41NTktLjAxMS0uMDU3LS4wMjctLjExMy0uMDM3LS4xNzF6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XG5cbi8qKlxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKX1cbiAqL1xuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuXG5sZXQgbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cbmxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXG5sZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cbmxldCBzY3JvbGxiYXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF1cbmNvbnN0IEd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzKVswXS5kZWZhdWx0XG5jb25zdCByZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRSZWxhdGlvbnNoaXBzKVswXS5kZWZhdWx0XG5jb25zdCBzZXNzaW9uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0U2Vzc2lvbnMpWzBdLmRlZmF1bHRcbmNvbnN0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQWNjb3VudEluZm9zIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZighbWFyZ2luTW9kdWxlMiltYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxuICAgICAgICBpZighY29sb3JNb2R1bGUpY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxuICAgICAgICBpZighc2l6ZU1vZHVsZSlzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJBY2NvdW50IEluZm9zXCIvPixcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cbiAgICAgICAgICAgICAgICAgICAgUHJvZmlsZVxuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0UHJvZmlsZVZhbHVlKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cbiAgICAgICAgICAgICAgICAgICAgU3RhdGlzdGljc1xuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U3RhdGlzdGljcygpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XG4gICAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBTZXNzaW9uc1xuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U2Vzc2lvblZhbHVlKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XG4gICAgICAgICAgICA8L2Rpdj4sXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj5cbiAgICAgICAgXVxuICAgIH1cblxuICAgIGdldFNlc3Npb25WYWx1ZSgpe1xuICAgICAgICBjb25zdCBzZXNzaW9uc1JhdyA9IHNlc3Npb25Nb2R1bGUuZ2V0U2Vzc2lvbnMoKVxuICAgICAgICBjb25zdCBzZXNzaW9ucyA9IE9iamVjdC5rZXlzKHNlc3Npb25zUmF3KS5maWx0ZXIoZSA9PiBlICE9PSBcImFsbFwiKS5tYXAoZSA9PiBzZXNzaW9uc1Jhd1tlXSlcblxuICAgICAgICBpZihzZXNzaW9ucy5sZW5ndGggPT09IDApcmV0dXJuIFwiLSBObyBzZXNzaW9uIGRldGVjdGVkLiBQbGVhc2UgdHJ5IGluIGEgZmV3IHNlY29uZHNcIlxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHNlc3Npb25zLm1hcChlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgKyBpZDogJHtlLnNlc3Npb25JZH1cbisgb3M6ICR7ZS5jbGllbnRJbmZvLm9zWzBdLnRvVXBwZXJDYXNlKCkrZS5jbGllbnRJbmZvLm9zLnNsaWNlKDEpfVxuKyBjbGllbnQ6ICR7ZS5jbGllbnRJbmZvLmNsaWVudH1cbisgc3RhdHVzOiAke2Uuc3RhdHVzfVxuKyBBY3Rpdml0aWVzOiAke2UuYWN0aXZpdGllcy5sZW5ndGh9YFxuICAgICAgICB9KS5qb2luKFwiXFxuXCIrXCItXCIucmVwZWF0KDM4KStcIlxcblwiKVxuICAgIH1cblxuICAgIGdldFByb2ZpbGVWYWx1ZSgpe1xuICAgICAgICBjb25zdCB1c2VyID0gdXNlck1vZHVsZS5nZXRDdXJyZW50VXNlcigpXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7RGF0ZX1cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IHVzZXIuY3JlYXRlZEF0XG5cbiAgICAgICAgbGV0IGF2YXRhclVSTCA9IHVzZXIuYXZhdGFyVVJMXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoYXZhdGFyVVJMLnN0YXJ0c1dpdGgoXCIvXCIpKXtcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IFwiaHR0cHM6Ly9kaXNjb3JkLmNvbVwiK2F2YXRhclVSTFxuICAgICAgICB9XG4gICAgICAgIGlmKGF2YXRhclVSTC5lbmRzV2l0aChcIj9zaXplPTEyOFwiKSl7XG4gICAgICAgICAgICBhdmF0YXJVUkwgPSBhdmF0YXJVUkwucmVwbGFjZShcIj9zaXplPTEyOFwiLCBcIj9zaXplPTQwOTZcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgKyBVc2VybmFtZTogJHt1c2VyLnVzZXJuYW1lfVxuKyBEaXNjcmltaW5hdG9yOiAke3VzZXIuZGlzY3JpbWluYXRvcn1cbisgVGFnOiAke3VzZXIudGFnfVxuKyBJRDogJHt1c2VyLmlkfVxuKyBBdmF0YXI6ICR7dXNlci5hdmF0YXJ9XG4rIEF2YXRhciBVUkw6ICR7YXZhdGFyVVJMfVxuKyBDcmVhdGlvbiBEYXRlOiAkeyhjcmVhdGVkQXQuZ2V0RGF0ZSgpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldE1vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRGdWxsWWVhcigpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0gJHtjcmVhdGVkQXQuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1oICR7Y3JlYXRlZEF0LmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1taW4gJHtjcmVhdGVkQXQuZ2V0U2Vjb25kcygpfXNcbisgRmxhZ3M6ICR7dXNlci5mbGFnc31cbisgSGFzIE5pdHJvOiAke3VzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiA/IFwiWWVzXCIgOiBcIk5vXCJ9XG4tIEVtYWlsOiAke3VzZXIuZW1haWx9XG4tIDJGQTogJHt1c2VyLm1mYUVuYWJsZWQgPyBcIlllc1wiIDogXCJOb1wifVxuLSBIYXMgQmVlbiBPbiBNb2JpbGU6ICR7dXNlci5tb2JpbGUgPyBcIlllc1wiIDogXCJOb1wifVxuLSBQaG9uZTogJHt1c2VyLnBob25lIHx8IFwiTm9uZVwifVxuLSBWZXJpZmllZDogJHt1c2VyLnZlcmlmaWVkfVxuLSBDYW4gU2VlIE5TRlcgQ2hhbm5lbHM6ICR7dXNlci5uc2Z3QWxsb3dlZH1gO1xuICAgIH1cblxuICAgIGdldFN0YXRpc3RpY3MoKXtcblxuICAgICAgICBjb25zdCBndWlsZHMgPSBPYmplY3QudmFsdWVzKEd1aWxkTW9kdWxlLmdldEd1aWxkcygpKVxuICAgICAgICBjb25zdCByZWxhdGlvbnMgPSBPYmplY3Qua2V5cyhyZWxhdGlvblNoaXBNb2R1bGUuZ2V0UmVsYXRpb25zaGlwcygpKVxuICAgICAgICBjb25zdCBmcmllbmRzID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0ZyaWVuZChlKSlcbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IHJlbGF0aW9ucy5maWx0ZXIoZSA9PiByZWxhdGlvblNoaXBNb2R1bGUuaXNCbG9ja2VkKGUpKVxuXG4gICAgICAgIHJldHVybiBgKyBTZXJ2ZXIgQ291bnQ6ICR7Z3VpbGRzLmxlbmd0aH0gc2VydmVyc1xuKyBSZWxhdGlvbnM6ICR7cmVsYXRpb25zLmxlbmd0aH0gcmVsYXRpb25zXG4rIEZyaWVuZHMgQ291bnQ6ICR7ZnJpZW5kcy5sZW5ndGh9IGZyaWVuZHNcbi0gQmxvY2tlZCBVc2VycyBDb3VudDogJHtibG9ja2VkLmxlbmd0aH0gYmxvY2tlZCB1c2Vyc2BcbiAgICB9XG59XG5cblxubGV0IGhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhpZ2hsaWdodClbMF1cbmxldCBtZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cbmxldCBtZXNzYWdlTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1lc3NhZ2VDb250ZW50KVswXVxuXG5jbGFzcyBDb2RlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKCFtZXNzYWdlTW9kdWxlMSltZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUyKW1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXG4gICAgICAgIGlmKCFzY3JvbGxiYXJNb2R1bGUxKXNjcm9sbGJhck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXVxuICAgICAgICBpZighaGlnaHRsaWdodEpTKWhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmxpc3RMYW5ndWFnZXMpWzBdXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YCR7bWVzc2FnZU1vZHVsZTEubWFya3VwfSAke21lc3NhZ2VNb2R1bGUyLm1lc3NhZ2VDb250ZW50fWB9PlxuICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZX19PlxuXG4gICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tOClbMF0ubWFyZ2luQm90dG9tOH0+PC9kaXY+XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59IiwiLy8gR29vZCBsdWNrIHRvIHJlYWQgbXkgY29kZSwgRXZlbiBtZSBjYW4ndCByZWFkIGl0IHByb3Blcmx5LlxuXG5pbXBvcnQgeyBzdGF0IH0gZnJvbSBcImZzXCJcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuLi9tb2R1bGVzL2Rpc3RhbnRcIlxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiXG5cbmxldCBmb3JtTW9kdWxlXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlQcmV2aWV3IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc3RhdGVzOiBbXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKCFmb3JtTW9kdWxlKWZvcm1Nb2R1bGUgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5Gb3JtU2VjdGlvbilcbiAgICAgICAgLyoqIFxuICAgICAgICAgKiBAdHlwZSB7RnVuY3Rpb25bXX1cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGFsbENvbXBvbmVudHMgPSBbLi4ubmV3IFNldChPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzKS5tYXAoZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXSkubWFwKGsgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtrXSlcbiAgICAgICAgfSkuZmxhdCgpKV1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1TZWN0aW9uIHRhZz1cImgyXCIgdGl0bGU9XCJMaWdodGNvcmQncyBBcGkgQXZhaWxsYWJsZSBjb21wb25lbnRzXCI+XG4gICAgICAgICAgICAgICAgPGZvcm1Nb2R1bGUuRm9ybVRleHQgdHlwZT1cImRlc2NyaXB0aW9uXCIgY2xhc3NOYW1lPVwiXCIgc2VsZWN0YWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICBUaGVzZSBjb21wb25lbnRzIGFyZSBoZXJlIGZvciB0aGUgcGx1Z2luIGRldnMuIFRoZXkgY2FuIHF1aWNrbHkgZW1iZWQgYW55IGNvbXBvbmVudCBiZWxvdyB3aXRoIHRoaXMgcGFuZWwuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Ub3A6IFwiMjBweFwifX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiaW5mb1wiPkFsbCB0aGVzZSBjb21wb25lbnRzIGhhdmUgZXJyb3IgaGFuZGxpbmcuIElmIHlvdSB3YW50IG5vbmUsIGFkZCBgLm9yaWdpbmFsYCBhZnRlciB0aGUgY29tcG9uZW50IHBhdGguPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD5cbiAgICAgICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJ3YXJuXCI+V2UgZG8gbm90IHJlY29tbWVuZCBtb2RpZnlpbmcgdGhlc2UgY29tcG9uZW50IHdpdGggcGx1Z2lucy4gT25seSBkbyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PlxuICAgICAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtVGV4dD5cbiAgICAgICAgICAgICAgICA8TWFyZ2luVG9wPjwvTWFyZ2luVG9wPlxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBjb2xvcj1cImJyYW5kXCIgbG9vaz1cIm91dGxpbmVkXCIgc2l6ZT1cIm1lZGl1bVwiIGhvdmVyQ29sb3I9XCJncmVlblwiIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vbGlnaHRjb3JkLmRlcm9rdS54eXovTGlnaHRjb3JkQXBpL1wiKVxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvblxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XG4gICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+LFxuICAgICAgICAgICAgYWxsQ29tcG9uZW50cy5tYXAoY29tcCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcE5hbWUgPSBjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBQYXRoID0gYExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy4ke09iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpLmZpbmQoZSA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2NvbXBOYW1lXSl9LiR7Y29tcE5hbWV9YFxuICAgICAgICAgICAgICAgIHJldHVybiA8Q29tcG9uZW50UHJldmlldyBrZXk9e2NvbXBQYXRofSBjb21wPXtjb21wfSAvPlxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH1cblxuICAgIGdldCByZW5kZXJzKCl7XG5cbiAgICB9XG59XG5cbmNsYXNzIENvbXBvbmVudFByZXZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB0YWI6IFwicHJldmlld1wiLFxuICAgICAgICAgICAgZWxlbTogcHJvcHMuY29tcCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHt9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMucHJvcHMuY29tcFxuICAgICAgICBsZXQgQWxsUHJldmlld3MgPSBbXVxuICAgICAgICBpZihjb21wLkFsbFByZXZpZXdzKUFsbFByZXZpZXdzID0gY29tcC5BbGxQcmV2aWV3c1xuICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlXG4gICAgICAgIGxldCBnZXRQcm9wcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBmaW5hbCA9IHt9XG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5mb3JFYWNoKGNhdGVnb3J5ID0+IHtcbiAgICAgICAgICAgICAgICBmaW5hbFtPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1dID0gY2F0ZWdvcnlbMF1bT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlLm9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBmaW5hbFtrZXldID0gQWxsUHJldmlld3MuZmluZChlID0+IGUuZmluZChlID0+IGVba2V5XSkpW3N0YXRlLm9wdGlvbnNba2V5XV1ba2V5XVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBmaW5hbFxuICAgICAgICB9XG4gICAgICAgIGxldCByZW5kZXJQcmV2aWV3ID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3ttYXJnaW46IFwiMjBweFwifX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsIFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXG4gICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPVwibGMtdGFiLWJveC1zaGFkb3dcIj5cbiAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcCwgZ2V0UHJvcHMoKSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVuZGVyQ29kZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7bWFyZ2luOiBcIjIwcHhcIn19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxuICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgSlNYXG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianN4XCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwianN4XCIpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuRXJyb3JDYXRjaGVyPlxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT4gICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3RcbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkVycm9yQ2F0Y2hlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5Db2RlQmxvY2sgbGFuZ3VhZ2U9XCJqc1wiIGNvbnRlbnQ9e2dlbmVyYXRlQ29kZShcInJlYWN0XCIpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuRXJyb3JDYXRjaGVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGdldFN0ckZvclByb3AgPSAodmFsdWUsIGNvbXBQYXRoLCBsYW5nKSA9PiB7XG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpe1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKXtcbiAgICAgICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiAmJiAodmFsdWUuJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IHZhbHVlLiQkdHlwZW9mID09PSAweGVhYzcpKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoY29tcFBhdGggPT09IFwiTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGFic1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxhbmcgPT09IFwicmVhY3RcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xubWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIlxufX0sXG5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xuYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLFxucGFkZGluZzogXCIzMHB4IDMwcHhcIixcbmJvcmRlclJhZGl1czogXCI4cHhcIlxufSwgY2xhc3NOYW1lOiBcImxjLXRhYi1ib3gtc2hhZG93XCIgfSxcblJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGUsIG51bGwsIFwiUHJldmlldyB0YWJzXCIpXG4pXG4pYFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYobGFuZyA9PT0gXCJqc3hcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPXt7XG5tYXJnaW5Ub3A6IFwiMjBweFwiLCBtYXJnaW5Cb3R0b206IFwiMjBweFwiXG59fT5cbjxkaXYgc3R5bGU9e3tcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsIFxuICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxuICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxufX0gY2xhc3NOYW1lPVwibGMtdGFiLWJveC1zaGFkb3dcIj5cbiAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGU+UHJldmlldyB0YWJzPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZT5cbjwvZGl2PlxuPC9kaXY+YFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIllvdXIgY29tcG9uZW50cyBoZXJlLlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgXCIgICAgXCIpXG4gICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpe1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIGxldCBnZW5lcmF0ZUNvZGUgPSBmdW5jdGlvbihsYW5nKXsgLy8gY29kZSBmb3JtYXR0aW5nIGlzIGhhcmRcbiAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcbiAgICAgICAgICAgIGxldCBjYXRlZ29yaWVzID0gT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cylcbiAgICAgICAgICAgIGNvbnN0IGNvbXBDYXRlZ29yeSA9IGNhdGVnb3JpZXMuZmluZChlID0+IHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV1bY29tcE5hbWVdKVxuICAgICAgICAgICAgY29uc3QgY29tcFBhdGggPSBgTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLiR7Y29tcENhdGVnb3J5fS4ke2NvbXBOYW1lfWBcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2V0UHJvcHMoKVxuXG4gICAgICAgICAgICBpZihsYW5nID09PSBcImpzeFwiKXtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcFN0cmluZ3MgPSBbXVxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlblByb3AgPSBudWxsXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoa2V5ID09IFwiY2hpbGRyZW5cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblByb3AgPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHIgPSBrZXkrXCI9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgeyR7Z2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZyl9fWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLnB1c2goc3RyKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBsZXQgb3BlblRhZ1xuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuUHJvcCl7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5UYWcgPSBgPCR7Y29tcFBhdGh9ICR7cHJvcFN0cmluZ3Muam9pbihcIiBcIil9PmBcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsb3NlVGFnID0gYDwvJHtjb21wUGF0aH0+YFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7b3BlblRhZ31cXG4gICAgJHtjaGlsZHJlblByb3B9XFxuJHtjbG9zZVRhZ31gXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5UYWcgPSBgPCR7Y29tcFBhdGh9ICR7cHJvcFN0cmluZ3Muam9pbihcIiBcIil9Lz5gXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVuVGFnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYobGFuZyA9PT0gXCJyZWFjdFwiKXtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCBudWxsXG4gICAgICAgICAgICAgICAgZGVsZXRlIHByb3BzLmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4uJCR0eXBlb2YgJiYgKGNoaWxkcmVuLiQkdHlwZW9mID09PSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSB8fCBjaGlsZHJlbi4kJHR5cGVvZiA9PT0gMHhlYWM3KSl7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZ2V0U3RyRm9yUHJvcChjaGlsZHJlbiwgY29tcFBhdGgsIGxhbmcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBwcm9wU3RyaW5ncyA9IFtdXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZpc2libGVLZXkgPSAvW15cXHdcXGRfXS9nLnRlc3Qoa2V5KSA/IEpTT04uc3RyaW5naWZ5KGtleSkgOiBrZXlcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IHZpc2libGVLZXkrXCI6IFwiXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShwcm9wc1trZXldKVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKS5zcGxpdChcIlxcblwiKS5tYXAoKHN0ciwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkgPT09IDApcmV0dXJuIHN0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIiAgICBcIiArIHN0clxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbihcIlxcblwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLnB1c2goc3RyKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgbGV0IHByb3BPYmplY3QgPSBcIntcIlxuICAgICAgICAgICAgICAgIGlmKHByb3BTdHJpbmdzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLmZvckVhY2goKHN0ciwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzTGFzdCA9IGkgPT09IHByb3BTdHJpbmdzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0ZpcnN0ID0gaSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRmlyc3Qpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCIsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJcXG4gICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gc3RyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpc0xhc3Qpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz1cIlxcbn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwifVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkRhdGEgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgJiYgY2hpbGRyZW4uc3RhcnRzV2l0aChcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIikgPyBjaGlsZHJlbiA6IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIHJldHVybiBgUmVhY3QuY3JlYXRlRWxlbWVudCgke2NvbXBQYXRofSwgJHtwcm9wT2JqZWN0fSwgJHtjaGlsZHJlbkRhdGF9KWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgaGVscCA9IGNvbXAuaGVscCB8fCB7fVxuICAgICAgICBsZXQgaW5mbyA9IGhlbHAuaW5mbyA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImluZm9cIj5cbiAgICAgICAgICAgIHtoZWxwLmluZm99XG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcbiAgICAgICAgbGV0IHdhcm4gPSBoZWxwLndhcm4gPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJ3YXJuXCI+XG4gICAgICAgICAgICB7aGVscC53YXJufVxuICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXG4gICAgICAgIGxldCBkYW5nZXIgPSBoZWxwLmRhbmdlciA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImRhbmdlclwiPlxuICAgICAgICAgICAge2hlbHAuZGFuZ2VyfVxuICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXG4gICAgICAgIGxldCBlcnJvciA9IGhlbHAuZXJyb3IgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJlcnJvclwiPlxuICAgICAgICAgICAge2hlbHAuZXJyb3J9XG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBoZWxwLnN1Y2Nlc3MgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJzdWNjZXNzXCI+XG4gICAgICAgICAgICB7aGVscC5zdWNjZXNzfVxuICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXG4gICAgICAgIHJldHVybiAoPGRpdj5cbiAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cbiAgICAgICAgICAgICAgICB7Y29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWV9XG4gICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nc1RpdGxlPlxuICAgICAgICAgICAge2luZm99XG4gICAgICAgICAgICB7c3VjY2Vzc31cbiAgICAgICAgICAgIHt3YXJufVxuICAgICAgICAgICAge2Vycm9yfVxuICAgICAgICAgICAge2Rhbmdlcn1cbiAgICAgICAgICAgIHtBbGxQcmV2aWV3cy5tYXAoY2F0ZWdvcnkgPT4ge1xuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLm9uQ2xpY2spcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS50ZXh0KXJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0uY2hpbGRyZW4pcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICBpZihjYXRlZ29yeS5sZW5ndGggPT09IDEpcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7a2V5fVxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+LFxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24gb3B0aW9ucz17Y2F0ZWdvcnkubWFwKChlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHQtXCIraW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IEpTT04uc3RyaW5naWZ5KGVbT2JqZWN0LmtleXMoZSlbMF1dKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KX0gdmFsdWU9e1wib3B0LVwiKyhzdGF0ZS5vcHRpb25zW2tleV0gfHwgXCIwXCIpfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5vcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldOiAodmFsdWUudmFsdWUgfHwgXCIwXCIpLnJlcGxhY2UoXCJvcHQtXCIsIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH19IHNlYXJjaGFibGU9e3RydWV9Lz4sXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Cb3R0b206IFwiOHB4XCJ9fT48L2Rpdj5cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGFicyB0YWJzPXtbe2xhYmVsOiBcIlByZXZpZXdcIiwgaWQ6IFwicHJldmlld1wifSwge2xhYmVsOiBcIkNvZGVcIiwgaWQ6IFwiY29kZVwifV19IFxuICAgICAgICAgICAgICAgIGFjdGl2ZT17c3RhdGUudGFifSBjaGlsZHJlbj17c3RhdGUudGFiID09PSBcInByZXZpZXdcIiA/IHJlbmRlclByZXZpZXcoKSA6IHJlbmRlckNvZGUoKX0gb25DaGFuZ2U9eyh0YWIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9fS8+XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRleHRJbnB1dCBmcm9tIFwiLi9jb21wb25lbnRzL3RleHRpbnB1dFwiO1xyXG5cclxubGV0IGNsYXNzbmFtZXMgPSBbXVxyXG5mdW5jdGlvbiBnZXRDbGFzc05hbWUobmFtZSl7XHJcbiAgICBsZXQgY2xhc3NOYW1lID0gY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKG5hbWUrXCItXCIpKVxyXG4gICAgaWYoY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcclxuICAgIGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlW25hbWVdKVswXVtuYW1lXVxyXG4gICAgY2xhc3NuYW1lcy5wdXNoKGNsYXNzTmFtZSlcclxuICAgIHJldHVybiBjbGFzc05hbWVcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dElucHV0U2V0dGluZyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IHt0ZXh0LCBpbmZvfSA9IHRoaXMucHJvcHMuZGF0YTtcclxuICAgICAgICBpZih0aGlzLnByb3BzLmRhdGEuZXhwZXJpbWVudGFsKXtcclxuICAgICAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XHJcbiAgICAgICAgICAgICAgICBjbGFzc25hbWVzLnB1c2goQkRNb2R1bGVzLmdldChlID0+IGUuYmV0YSAmJiAoIWUuY29udGFpbmVyICYmICFlLnVzZXJTZXR0aW5nc1ZvaWNlKSlbMF0uYmV0YSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbmZvID0gW1xyXG4gICAgICAgICAgICAgICAgaW5mbyxcclxuICAgICAgICAgICAgICAgIDxzdXAgY2xhc3NOYW1lPXtnZXRDbGFzc05hbWUoXCJiZXRhXCIpfT4oRVhQRVJJTUVOVEFMKTwvc3VwPlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17XCJ1aS1mbGV4IGZsZXgtdmVydGljYWwgZmxleC1qdXN0aWZ5LXN0YXJ0IGZsZXgtYWxpZ24tc3RyZXRjaCBmbGV4LW5vd3JhcCB1aS1zd2l0Y2gtaXRlbVwifT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1widWktZmxleCBmbGV4LWhvcml6b250YWwgZmxleC1qdXN0aWZ5LXN0YXJ0IGZsZXgtYWxpZ24tc3RyZXRjaCBmbGV4LW5vd3JhcFwifT5cclxuICAgICAgICAgICAgICAgIDxoMyBrZXk9XCJ0aXRsZVwiIGNsYXNzTmFtZT1cInVpLWZvcm0tdGl0bGUgaDMgbWFyZ2luLXJlc2V0IG1hcmdpbi1yZXNldCB1aS1mbGV4LWNoaWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3RleHR9XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPFRleHRJbnB1dCBrZXk9XCJpbnB1dFwiIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSB2YWx1ZT17dGhpcy5wcm9wcy52YWx1ZX0gcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ8fG51bGx9IC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgZmxleDogXCIxIDEgYXV0b1wiXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAge2luZm99XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XG5cbmltcG9ydCBYU3ZnIGZyb20gXCIuL3hTdmdcIjtcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcbmltcG9ydCBFZGl0SWNvbiBmcm9tIFwiLi9pY29ucy9lZGl0XCI7XG5pbXBvcnQgRGVsZXRlSWNvbiBmcm9tIFwiLi9pY29ucy9kZWxldGVcIjtcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi90b29sdGlwV3JhcFwiO1xuaW1wb3J0IHsgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi4vbW9kdWxlcy9wbHVnaW5DZXJ0aWZpZXJcIjtcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcbmNvbnN0IGFuY2hvckNsYXNzZXMgPSBCRFYyLmFuY2hvckNsYXNzZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzID0gdGhpcy5zaG93U2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcbiAgICAgICAgdGhpcy5oYXNTZXR0aW5ncyA9IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luICYmIHR5cGVvZih0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKSA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xuXG4gICAgICAgIHRoaXMuZWRpdCA9IHRoaXMuZWRpdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRlbGV0ZSA9IHRoaXMuZGVsZXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmVuYWJsZWQsXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXG4gICAgICAgICAgICByZWxvYWRzOiAwLFxuICAgICAgICAgICAgdHJ1c3RlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzaG93U2V0dGluZ3MoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNTZXR0aW5ncykgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nczogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGNsb3NlU2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuc2V0dGluZ3MpIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcy5zZXR0aW5nc3BhbmVsLmFwcGVuZENoaWxkKHRoaXMuc2V0dGluZ3NQYW5lbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiZm9yay1wcy0zXCJdKSByZXR1cm47XG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZighY29udGFpbmVyKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoYENvbnRhaW5lciBpcyB1bmRlZmluZWQuYCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnJlZnMuY2FyZE5vZGU7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzTm9kZS5jbG9zZXN0KFwiZGl2W2NsYXNzKj1cXFwiY29udGVudFJlZ2lvblNjcm9sbGVyLVxcXCJdXCIpXG4gICAgICAgICAgICBpZiAoIWlzSGlkZGVuKGNvbnRhaW5lciwgdGhpc05vZGUpKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0ID0gRE9NLm9mZnNldChjb250YWluZXIpO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xuICAgICAgICAgICAgRE9NLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAsXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQgPiBvcmlnaW5hbCkgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsICsgKHByb2dyZXNzICogKGVuZFBvaW50IC0gb3JpZ2luYWwpKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgLSAocHJvZ3Jlc3MgKiAob3JpZ2luYWwgLSBlbmRQb2ludCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCI/Pz9cIjtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldCBzZXR0aW5nc0NvbXBvbmVudCgpIHtcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XG4gICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgdGhpcy5uYW1lICsgXCIuXCIsIGVycik7IH1cblxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7c3R5bGU6IHtcImZsb2F0XCI6IFwicmlnaHRcIiwgXCJjdXJzb3JcIjogXCJwb2ludGVyXCJ9LCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnMuc2V0dGluZ3NwYW5lbC5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XG4gICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke3RoaXMubmFtZX1gLCBjbGFzc05hbWU6IFwicGx1Z2luLXNldHRpbmdzXCIsIHJlZjogXCJzZXR0aW5nc3BhbmVsXCJ9KSxcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgIT09IFwib2JqZWN0XCIgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke3RoaXMubmFtZX1gLCBjbGFzc05hbWU6IFwicGx1Z2luLXNldHRpbmdzXCIsIHJlZjogXCJzZXR0aW5nc3BhbmVsXCIsIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7X19odG1sOiB0aGlzLnNldHRpbmdzUGFuZWx9fSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xuICAgICAgICBjb25zdCB0aXRsZSA9IFwie3tuYW1lfX0gdnt7dmVyc2lvbn19IGJ5IHt7YXV0aG9yfX1cIi5zcGxpdCgvKHt7W0EtWmEtel0rfX0pLyk7XG4gICAgICAgIGNvbnN0IG5hbWVJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e25hbWV9fVwiKTtcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbdmVyc2lvbkluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwidmVyc2lvbiBiZGEtdmVyc2lvblwifSwgdmVyc2lvbik7XG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge2NsYXNzTmFtZTogXCJhdXRob3IgYmRhLWF1dGhvclwifTtcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5jbGFzc05hbWUgKz0gYCAke2FuY2hvckNsYXNzZXMuYW5jaG9yfSAke2FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gO1xuICAgICAgICAgICAgICAgIHByb3BzLnRhcmdldCA9IFwiX2JsYW5rXCI7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yLmxpbmspIHByb3BzLmhyZWYgPSBhdXRob3IubGluaztcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yLmlkKSBwcm9wcy5vbkNsaWNrID0gKCkgPT4ge0JEVjIuTGF5ZXJTdGFjay5wb3BMYXllcigpOyBCRFYyLm9wZW5ETShhdXRob3IuaWQpO307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aXRsZVthdXRob3JJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KGF1dGhvci5saW5rIHx8IGF1dGhvci5pZCA/IFwiYVwiIDogXCJzcGFuXCIsIHByb3BzLCBhdXRob3IubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcbiAgICB9XG5cbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XG4gICAgICAgIGNvbnN0IHByb3BzID0ge2NsYXNzTmFtZTogXCJiZGEtbGluayBiZGEtbGluay13ZWJzaXRlXCIsIHRhcmdldDogXCJfYmxhbmtcIn07XG4gICAgICAgIGlmICh0eXBlb2YodXJsKSA9PSBcInN0cmluZ1wiKSBwcm9wcy5ocmVmID0gdXJsO1xuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHByb3BzLCB0aXRsZSk7XG4gICAgfVxuXG4gICAgbWFrZUJ1dHRvbih0aXRsZSwgY2hpbGRyZW4sIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gPFRvb2x0aXBXcmFwIGNvbG9yPVwiYmxhY2tcIiBzaWRlPVwidG9wXCIgdGV4dD17dGl0bGV9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9Ub29sdGlwV3JhcD47XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgdGhpcy51bm1vdW50ZWQgPSB0cnVlXG4gICAgfVxuXG4gICAgZ2V0IGxpbmtzKCkge1xuICAgICAgICBjb25zdCBsaW5rcyA9IFtdO1xuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMucHJvcHMuYWRkb247XG4gICAgICAgIGlmIChhZGRvbi53ZWJzaXRlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJXZWJzaXRlXCIsIGFkZG9uLndlYnNpdGUpKTtcbiAgICAgICAgaWYgKGFkZG9uLnNvdXJjZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU291cmNlXCIsIGFkZG9uLnNvdXJjZSkpO1xuICAgICAgICBpZiAoYWRkb24uaW52aXRlKSB7XG4gICAgICAgICAgICBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJTdXBwb3J0IFNlcnZlclwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gYWRkb24uaW52aXRlO1xuICAgICAgICAgICAgICAgIGlmICh0ZXN0ZXIudGVzdChjb2RlKSkgY29kZSA9IGNvZGUubWF0Y2godGVzdGVyKVsxXTtcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcbiAgICAgICAgICAgICAgICBCRFYyLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChjb2RlKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWRkb24uZG9uYXRlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJEb25hdGVcIiwgYWRkb24uZG9uYXRlKSk7XG4gICAgICAgIGlmIChhZGRvbi5wYXRyZW9uKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJQYXRyZW9uXCIsIGFkZG9uLnBhdHJlb24pKTtcbiAgICAgICAgcmV0dXJuIGxpbmtzO1xuICAgIH1cblxuICAgIGdldCBmb290ZXIoKSB7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5saW5rcztcbiAgICAgICAgcmV0dXJuIChsaW5rcy5sZW5ndGggfHwgdGhpcy5oYXNTZXR0aW5ncykgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZC1mb290ZXIgYmRhLWZvb3RlclwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1saW5rcyBiZGEtbGlua3NcIn0sXG4gICAgICAgICAgICAgICAgLi4uKGxpbmtzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IGluZGV4IDwgbGlua3MubGVuZ3RoIC0gMSA/IFtlbGVtZW50LCBcIiB8IFwiXSA6IGVsZW1lbnQpLmZsYXQoKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy50b2dnbGUgJiYgdGhpcy5wcm9wcy50b2dnbGUodGhpcy5uYW1lKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xuICAgIH1cblxuICAgIGVkaXQoKSB7dGhpcy5wcm9wcy5lZGl0KHRoaXMubmFtZSk7fVxuICAgIGRlbGV0ZSgpIHt0aGlzLnByb3BzLnJlbW92ZSh0aGlzLm5hbWUpO31cbiAgICByZWxvYWQoKSB7dGhpcy5wcm9wcy5yZWxvYWQodGhpcy5uYW1lKTt9XG5cbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXROYW1lKCkgOiB0aGlzLnByb3BzLmFkZG9uLm5hbWUpO31cbiAgICBnZXQgYXV0aG9yKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldEF1dGhvcigpIDogdGhpcy5wcm9wcy5hZGRvbi5hdXRob3IpO31cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IHRoaXMucHJvcHMuYWRkb24uZGVzY3JpcHRpb24pO31cbiAgICBnZXQgdmVyc2lvbigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRWZXJzaW9uKCkgOiB0aGlzLnByb3BzLmFkZG9uLnZlcnNpb24pO31cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3MpIHJldHVybiB0aGlzLnNldHRpbmdzQ29tcG9uZW50O1xuICAgICAgICBjb25zdCB7YXV0aG9ySWQsIGF1dGhvckxpbmt9ID0gdGhpcy5wcm9wcy5hZGRvbjtcblxuICAgICAgICBjb25zdCBzdHlsZSA9IHt9XG4gICAgICAgIGlmKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzU2Nhbm5pbmcpe1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTY2FubmluZyA9IHRydWVcbiAgICAgICAgICAgICAgICBwcm9jZXNzRmlsZShyZXNvbHZlKHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUuZW5kc1dpdGgoXCIucGx1Z2luLmpzXCIpID8gY29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgdGhpcy5wcm9wcy5hZGRvbi5maWxlbmFtZSksIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51bm1vdW50ZWQpcmV0dXJuXG4gICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVzdGVkOiByZXN1bHQuc3VzcGVjdCA/IFwic3VzcGVjdFwiIDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sICgpID0+IHt9KVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IHRydWUpe1xuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuaXNUcnVzdGVkID09PSBcInN1c3BlY3RcIil7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkIGJkLWFkZG9uLWNhcmQgc2V0dGluZ3MtY2xvc2VkIHVpLXN3aXRjaC1pdGVtXCIsIHN0eWxlfSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWhlYWRlciBiZGEtaGVhZGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLXRpdGxlIGJkYS1oZWFkZXItdGl0bGVcIn0sIHRoaXMuYnVpbGRUaXRsZSh0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwge25hbWU6IHRoaXMuYXV0aG9yLCBpZDogYXV0aG9ySWQsIGxpbms6IGF1dGhvckxpbmt9KSksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWNvbnRyb2xzIGJkYS1jb250cm9sc1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuZWRpdCAmJiB0aGlzLm1ha2VCdXR0b24oXCJFZGl0XCIsIDxFZGl0SWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMuZWRpdCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSAmJiB0aGlzLm1ha2VCdXR0b24oXCJEZWxldGVcIiwgPERlbGV0ZUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmRlbGV0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbG9hZCAmJiB0aGlzLm1ha2VCdXR0b24oXCJSZWxvYWRcIiwgPFJlbG9hZEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLnJlbG9hZCksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge29uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWR9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXItd3JhcCBiZGEtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIn0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXIgYmQtYWRkb24tZGVzY3JpcHRpb24gYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCB0aGlzLmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuZm9vdGVyXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZS5yZW5kZXI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcbn0pOyIsImltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gXCIuL2Vycm9yQm91bmRhcnlcIjtcbmltcG9ydCBDb250ZW50Q29sdW1uIGZyb20gXCIuL2NvbnRlbnRDb2x1bW5cIjtcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcbmltcG9ydCBBZGRvbkNhcmQgZnJvbSBcIi4vYWRkb25jYXJkXCI7XG5pbXBvcnQgRHJvcGRvd24gZnJvbSBcIi4vY29tcG9uZW50cy9kcm9wZG93blwiO1xuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9jb21wb25lbnRzL3NlYXJjaFwiO1xuXG5pbXBvcnQge3NldHRpbmdzQ29va2llLCBwbHVnaW5Db29raWUsIHRoZW1lQ29va2llLCBiZHBsdWdpbnMsIGJkdGhlbWVzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luTW9kdWxlXCI7XG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xuaW1wb3J0IEJkQXBpIGZyb20gXCIuLi9tb2R1bGVzL2JkQXBpXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi90b29sdGlwV3JhcFwiO1xuaW1wb3J0IGJkRXZlbnRzIGZyb20gXCIuLi9tb2R1bGVzL2JkRXZlbnRzXCI7XG5pbXBvcnQgRW11bGF0ZWRUb29sdGlwIGZyb20gXCIuL3Rvb2x0aXBcIjtcblxuY29uc3QgVG9vbHRpcCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTtcblxuY29uc3QgUmVhY3QgPSBCRFYyLnJlYWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJkTGlzdCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XG4gICAgICAgIHRoaXMuaXNQbHVnaW5zID0gdGhpcy5wcm9wcy50eXBlID09IFwicGx1Z2luc1wiO1xuICAgICAgICB0aGlzLmNvb2tpZSA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luQ29va2llIDogdGhlbWVDb29raWU7XG4gICAgICAgIHRoaXMubWFuYWdlciA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luTW9kdWxlIDogdGhlbWVNb2R1bGU7XG5cbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmV2ZXJzZSA9IHRoaXMucmV2ZXJzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5vbkFkZG9uQ2hhbmdlcyA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gdGhpcy5vbkFkZG9uQ2hhbmdlcy5iaW5kKHRoaXMpXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKXtcbiAgICAgICAgY29uc3QgdHlwZSA9ICh0aGlzLmlzUGx1Z2lucyA/IFwicGx1Z2luXCIgOiBcInRoZW1lXCIpICsgXCItXCJcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX1yZWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgY29uc3QgdHlwZSA9ICh0aGlzLmlzUGx1Z2lucyA/IFwicGx1Z2luXCIgOiBcInRoZW1lXCIpICsgXCItXCJcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9bG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9dW5sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1yZWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXG4gICAgfVxuXG4gICAgb3BlbkZvbGRlcigpIHtcbiAgICAgICAgY29uc3Qgc2hlbGwgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGw7XG4gICAgICAgIGNvbnN0IG9wZW4gPSBzaGVsbC5vcGVuUGF0aCB8fCBzaGVsbC5vcGVuSXRlbTtcbiAgICAgICAgb3Blbih0aGlzLmlzUGx1Z2lucyA/IENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIpO1xuICAgIH1cblxuICAgIGVkaXQobmFtZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhuYW1lKTtcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVkaXQobmFtZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlKG5hbWUpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkRGVsZXRlID0gYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlKG5hbWUpO1xuICAgICAgICBpZiAoIXNob3VsZERlbGV0ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLm1hbmFnZXIuZGVsZXRlKG5hbWUpO1xuICAgIH1cblxuICAgIGNvbmZpcm1EZWxldGUobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBCZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJBcmUgWW91IFN1cmU/XCIsIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7bmFtZX0/YCwge1xuICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXG4gICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHtyZXNvbHZlKGZhbHNlKTt9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IHNvcnRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge2xhYmVsOiBcIk5hbWVcIiwgdmFsdWU6IFwibmFtZVwifSxcbiAgICAgICAgICAgIHtsYWJlbDogXCJBdXRob3JcIiwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxuICAgICAgICAgICAge2xhYmVsOiBcIlZlcnNpb25cIiwgdmFsdWU6IFwidmVyc2lvblwifSxcbiAgICAgICAgICAgIHtsYWJlbDogXCJSZWNlbnRseSBBZGRlZFwiLCB2YWx1ZTogXCJhZGRlZFwifSxcbiAgICAgICAgICAgIHtsYWJlbDogXCJMYXN0IE1vZGlmaWVkXCIsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9LFxuICAgICAgICAgICAge2xhYmVsOiBcIkZpbGUgU2l6ZVwiLCB2YWx1ZTogXCJzaXplXCJ9LFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldCBkaXJlY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge2xhYmVsOiBcIkFzY2VuZGluZ1wiLCB2YWx1ZTogdHJ1ZX0sXG4gICAgICAgICAgICB7bGFiZWw6IFwiRGVzY2VuZGluZ1wiLCB2YWx1ZTogZmFsc2V9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHthc2NlbmRpbmc6IHZhbHVlfSk7XG4gICAgfVxuXG4gICAgc29ydCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xuICAgIH1cblxuICAgIHNlYXJjaChldmVudCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcbiAgICB9XG5cbiAgICBnZXRQcm9wcyhhZGRvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiB0aGlzLmdldE5hbWUoYWRkb24pLFxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jb29raWVbdGhpcy5nZXROYW1lKGFkZG9uKV0sXG4gICAgICAgICAgICB0b2dnbGU6IHRoaXMubWFuYWdlci50b2dnbGUuYmluZCh0aGlzLm1hbmFnZXIpLFxuICAgICAgICAgICAgZWRpdDogc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTdcIl0gPyB0aGlzLmVkaXQuYmluZCh0aGlzKSA6IG51bGwsXG4gICAgICAgICAgICByZW1vdmU6IHRoaXMuZGVsZXRlLmJpbmQodGhpcyksXG4gICAgICAgICAgICBhZGRvbjogYWRkb24sXG4gICAgICAgICAgICBoYXNoOiBhZGRvbi5oYXNoXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0IGxpc3QoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcbiAgICB9XG5cbiAgICBnZXRBZGRvbnMoKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZEFkZG9ucyA9IHRoaXMubGlzdC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnN0YXRlLnNvcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN0YXRlLnNvcnQuc2xpY2UoMSk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGEucGx1Z2luICYmIGEucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGEucGx1Z2luW2BnZXQke2NhcH1gXSgpKSA6IHRoaXMuZ2V0U3RyaW5nKGFbdGhpcy5zdGF0ZS5zb3J0XSk7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBiLnBsdWdpbiAmJiBiLnBsdWdpbltgZ2V0JHtjYXB9YF0gPyB0aGlzLmdldFN0cmluZyhiLnBsdWdpbltgZ2V0JHtjYXB9YF0oKSkgIDogdGhpcy5nZXRTdHJpbmcoYlt0aGlzLnN0YXRlLnNvcnRdKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YoZmlyc3QpID09IFwic3RyaW5nXCIpIHJldHVybiBmaXJzdC50b0xvY2FsZUxvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoc2Vjb25kLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKGZpcnN0ID4gc2Vjb25kKSByZXR1cm4gMTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPiBmaXJzdCkgcmV0dXJuIC0xO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYXNjZW5kaW5nKSBzb3J0ZWRBZGRvbnMucmV2ZXJzZSgpO1xuICAgICAgICBjb25zdCByZW5kZXJlZCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHNvcnRlZEFkZG9ucy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgY29uc3QgYWRkb24gPSBzb3J0ZWRBZGRvbnNbYV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5xdWVyeSkge1xuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGFkZG9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldEF1dGhvcihhZGRvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldERlc2NyaXB0aW9uKGFkZG9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRWZXJzaW9uKGFkZG9uKTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkgbWF0Y2hlcyA9IG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhdXRob3IudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGRlc2NyaXB0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnNpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IHZlcnNpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldFByb3BzKGFkZG9uKTtcbiAgICAgICAgICAgIHJlbmRlcmVkLnB1c2goPEVycm9yQm91bmRhcnk+PEFkZG9uQ2FyZCB7Li4ucHJvcHN9IHJlbG9hZD17IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHRoaXMubWFuYWdlci5yZWxvYWQuYmluZCh0aGlzLm1hbmFnZXIpfSAvPjwvRXJyb3JCb3VuZGFyeT4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJlZDtcbiAgICB9XG5cbiAgICBnZXROYW1lKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXROYW1lKCkgOiBhZGRvbi5uYW1lKTt9XG4gICAgZ2V0QXV0aG9yKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IGFkZG9uLmF1dGhvcik7fVxuICAgIGdldERlc2NyaXB0aW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogYWRkb24uZGVzY3JpcHRpb24pO31cbiAgICBnZXRWZXJzaW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRWZXJzaW9uKCkgOiBhZGRvbi52ZXJzaW9uKTt9XG5cbiAgICByZW5kZXJDaGVja1VwZGF0ZXMoKXtcbiAgICAgICAgaWYoIXdpbmRvdy5aZXJlc1BsdWdpbkxpYnJhcnkpcmV0dXJuIG51bGxcbiAgICAgICAgaWYoIXdpbmRvdy5QbHVnaW5VcGRhdGVzKXJldHVybiBudWxsXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuUGx1Z2luVXBkYXRlcy5jaGVja0FsbCAhPT0gXCJmdW5jdGlvblwiKXJldHVybiBudWxsXG4gICAgICAgIGlmKCF0aGlzLmlzUGx1Z2lucylyZXR1cm4gbnVsbFxuXG4gICAgICAgIGxldCB0b29sdGlwSXNTaG93aW5nID0gZmFsc2VcbiAgICAgICAgbGV0IHRvb2x0aXBcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCB0ZXh0PVwiQ2hlY2tzIGZvciB1cGRhdGVzIG9mIHBsdWdpbnMgdGhhdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gUmlnaHQtY2xpY2sgZm9yIGEgbGlzdC5cIj5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luTGVmdDogXCIxMHB4XCJ9fSBvbk1vdXNlTGVhdmU9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcElzU2hvd2luZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAuaGlkZSgpXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIHJlZj1cImNoZWNrVXBkYXRlQnV0dG9uXCIgY29sb3I9XCJicmFuZFwiIGxvb2s9XCJmaWxsZWRcIiBzaXplPVwibWluXCIgaG92ZXJDb2xvcj1cImRlZmF1bHRcIiBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIlBsdWdpbiB1cGRhdGUgY2hlY2sgaW4gcHJvZ3Jlc3MuXCIsIHt0eXBlOiBcImluZm9cIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuUGx1Z2luVXBkYXRlcy5jaGVja0FsbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBjb21wbGV0ZS5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBjaGVja2luZyB1cGRhdGUuXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBjaGVja2luZyB1cGRhdGUuXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX0gd3JhcHBlcj17ZmFsc2V9IGRpc2FibGVkPXtmYWxzZX0gb25SaWdodENsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLnJlZnMuY2hlY2tVcGRhdGVCdXR0b24pcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LlBsdWdpblVwZGF0ZXMgfHwgIXdpbmRvdy5QbHVnaW5VcGRhdGVzLnBsdWdpbnMpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYodG9vbHRpcElzU2hvd2luZylyZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcCA9IG5ldyBFbXVsYXRlZFRvb2x0aXAodGhpcy5yZWZzLmNoZWNrVXBkYXRlQnV0dG9uLnJlZnMub3JpZ2luYWwucmVmcy5idXR0b24sIE9iamVjdC52YWx1ZXMod2luZG93LlBsdWdpblVwZGF0ZXMucGx1Z2lucykubWFwKHAgPT4gcC5uYW1lKS5qb2luKFwiLCBcIiksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZGU6IFwiYm90dG9tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2hFdmVudHM6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAuc2hvdygpXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBJc1Nob3dpbmcgPSB0cnVlXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBVcGRhdGVzXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9Ub29sdGlwV3JhcD5cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hJY29uID0gPFRvb2x0aXAgY29sb3I9XCJibGFja1wiIHBvc2l0aW9uPVwidG9wXCIgdGV4dD1cIlJlbG9hZCBMaXN0XCI+XG4gICAgICAgICAgICB7KHByb3BzKSA9PiBcbiAgICAgICAgICAgIDxSZWxvYWRJY29uIHsuLi5wcm9wc30gY2xhc3NOYW1lPVwiYmQtaWNvbiBiZC1yZWxvYWQgYmQtcmVsb2FkLWhlYWRlclwiIHNpemU9XCIxOHB4XCIgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGx1Z2lucykgcGx1Z2luTW9kdWxlLnVwZGF0ZVBsdWdpbkxpc3QoKTtcbiAgICAgICAgICAgICAgICBlbHNlIHRoZW1lTW9kdWxlLnVwZGF0ZVRoZW1lTGlzdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIH19IC8+XG4gICAgICAgICAgICB9PC9Ub29sdGlwPjtcbiAgICAgICAgY29uc3QgYWRkb25DYXJkcyA9IHRoaXMuZ2V0QWRkb25zKCk7XG5cbiAgICAgICAgcmV0dXJuIDxDb250ZW50Q29sdW1uIHRpdGxlPXtgJHt0aGlzLnByb3BzLnR5cGUudG9VcHBlckNhc2UoKX3igJQke2FkZG9uQ2FyZHMubGVuZ3RofWB9PlxuICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGtleT1cImZvbGRlci1idXR0b25cIiBjb2xvcj1cImJyYW5kXCIgXG4gICAgICAgICAgICAgICAgbG9vaz1cImZpbGxlZFwiIHNpemU9XCJtaW5cIiBob3ZlckNvbG9yPVwiZGVmYXVsdFwiIG9uQ2xpY2s9e3RoaXMub3BlbkZvbGRlci5iaW5kKHRoaXMpfSB3cmFwcGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIlxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIE9wZW4ge3RoaXMuaXNQbHVnaW5zID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIn0gRm9sZGVyXG4gICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyQ2hlY2tVcGRhdGVzKCl9XG4gICAgICAgICAgICB7IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHJlZnJlc2hJY29ufVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9scyBiZC1hZGRvbi1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgIDxTZWFyY2ggb25DaGFuZ2U9e3RoaXMuc2VhcmNofSBwbGFjZWhvbGRlcj17YFNlYXJjaCAke3RoaXMucHJvcHMudHlwZX0uLi5gfSAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tZHJvcGRvd25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPlNvcnQgYnk6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLnNvcnRPcHRpb25zfSBvbkNoYW5nZT17dGhpcy5zb3J0fSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPk9yZGVyOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkYS1zbGlzdCBiZC1hZGRvbi1saXN0XCI+e2FkZG9uQ2FyZHN9PC9kaXY+XG4gICAgICAgIDwvQ29udGVudENvbHVtbj5cbiAgICB9XG59XG5cbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ2FyZExpc3QucHJvdG90eXBlLnJlbmRlcjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYXJkTGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxufSk7IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJETG9nbyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHtoZWlnaHQ6IFwiMTAwJVwiLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nbyBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLCBzdHlsZToge2ZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLCBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJ9LCB2aWV3Qm94OiBcIjAgMCAyMDAwIDIwMDBcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcIm1ldGFkYXRhXCIsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzFcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjIwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MlwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTVcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgyNTUsMjU1LDI1NSwwLjE1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3czXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3czKVwifSwgZDogXCJNMTE5NS40NCsxMzUuNDQyTDExOTUuNDQrMTM1LjQ0Mkw5OTcuNisxMzYuNDQyQzEwMjQuMisxNDkuNzQyKzExNzAuMzQrMTYzLjU0MisxMTkzLjY0KzE3OS43NDJDMTI2NC4zNCsyMjguODQyKzEzMTkuNzQrMjkxLjI0MisxMzU4LjI0KzM2NS4wNDJDMTM5OC4xNCs0NDEuNjQyKzE0MTkuNzQrNTMwLjY0MisxNDIyLjU0KzYyOS42NDJMMTQyMi41NCs2MzAuODQyTDE0MjIuNTQrNjMyLjA0MkMxNDIyLjU0Kzc3My4xNDIrMTQyMi41NCsxMjI4LjE0KzE0MjIuNTQrMTM2OS4xNEwxNDIyLjU0KzEzNzAuMzRMMTQyMi41NCsxMzcxLjU0QzE0MTkuODQrMTQ3MC41NCsxMzk4LjI0KzE1NTkuNTQrMTM1OC4yNCsxNjM2LjE0QzEzMTkuNzQrMTcwOS45NCsxMjY0LjQ0KzE3NzIuMzQrMTE5My42NCsxODIxLjQ0QzExNzEuMDQrMTgzNy4xNCsxMDI1LjcrMTg1MC41NCsxMDAwKzE4NjMuNTRMMTE5My41NCsxODY0LjU0QzE1MzkuNzQrMTg2Ni40NCsxODY0LjU0KzE2OTMuMzQrMTg2NC41NCsxMjk2LjY0TDE4NjQuNTQrNzE2Ljk0MkMxODY2LjQ0KzMxMi40NDIrMTU0MS42NCsxMzUuNDQyKzExOTUuNDQrMTM1LjQ0MlpcIiwgZmlsbDogXCIjMTcxNzE3XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzIpXCJ9LCBkOiBcIk0xNjk1LjU0KzYzMS40NDJDMTY4NS44NCsyNzguMDQyKzE0MDkuMzQrMTM1LjQ0MisxMDUyLjk0KzEzNS40NDJMMzYxLjc0KzEzNi40NDJMODAzLjc0KzQ5MC40NDJMMTA2MC43NCs0OTAuNDQyQzEzMzUuMjQrNDkwLjQ0MisxMzM1LjI0KzgzNS4zNDIrMTA2MC43NCs4MzUuMzQyTDEwNjAuNzQrMTE2NC44NEMxMTUwLjIyKzExNjQuODQrMTIxMC41MysxMjAxLjQ4KzEyNDEuNjgrMTI1MC44N0MxMzA2LjA3KzEzNTMrMTI0NS43NisxNTA5LjY0KzEwNjAuNzQrMTUwOS42NEwzNjEuNzQrMTg2My41NEwxMDUyLjk0KzE4NjQuNTRDMTQwOS4yNCsxODY0LjU0KzE2ODUuNzQrMTcyMS45NCsxNjk1LjU0KzEzNjguNTRDMTY5NS41NCsxMjA1Ljk0KzE2NTEuMDQrMTA4NC40NCsxNTcyLjY0Kzk5OS45NDJDMTY1MS4wNCs5MTUuNTQyKzE2OTUuNTQrNzk0LjA0MisxNjk1LjU0KzYzMS40NDJaXCIsIGZpbGw6IFwiIzNFODJFNVwiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cxKVwifSwgZDogXCJNMTQ2OS4yNSs2MzEuNDQyQzE0NTkuNTUrMjc4LjA0MisxMTgzLjA1KzEzNS40NDIrODI2LjY1KzEzNS40NDJMMTM1LjQ1KzEzNS40NDJMMTM1LjQ1KzEwMDRDMTM1LjQ1KzEwMDQrMTM1LjQyNysxMjU1LjIxKzM1NS42MjYrMTI1NS4yMUM1NzUuODI1KzEyNTUuMjErNTc1Ljg0OCsxMDA0KzU3NS44NDgrMTAwNEw1NzcuNDUrNDkwLjQ0Mkw4MzQuNDUrNDkwLjQ0MkMxMTA4Ljk1KzQ5MC40NDIrMTEwOC45NSs4MzUuMzQyKzgzNC40NSs4MzUuMzQyTDY2NC42NSs4MzUuMzQyTDY2NC42NSsxMTY0Ljg0TDgzNC40NSsxMTY0Ljg0QzkyMy45MzIrMTE2NC44NCs5ODQuMjQ0KzEyMDEuNDgrMTAxNS4zOSsxMjUwLjg3QzEwNzkuNzgrMTM1MysxMDE5LjQ3KzE1MDkuNjQrODM0LjQ1KzE1MDkuNjRMMTM1LjQ1KzE1MDkuNjRMMTM1LjQ1KzE4NjQuNTRMODI2LjY1KzE4NjQuNTRDMTE4Mi45NSsxODY0LjU0KzE0NTkuNDUrMTcyMS45NCsxNDY5LjI1KzEzNjguNTRDMTQ2OS4yNSsxMjA1Ljk0KzE0MjQuNzUrMTA4NC40NCsxMzQ2LjM1Kzk5OS45NDJDMTQyNC43NSs5MTUuNTQyKzE0NjkuMjUrNzk0LjA0MisxNDY5LjI1KzYzMS40NDJaXCIsIGZpbGw6IFwiI0ZGRkZGRlwiLCBvcGFjaXR5OiBcIjFcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19DaGVja2JveCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJsaVwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveCBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94LCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1pbm5lciBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveElubmVyKVswXS5jaGVja2JveElubmVyfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94RWxlbWVudCwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwiY2hlY2tib3hcIn0pLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsICF0aGlzLnN0YXRlLmNoZWNrZWQpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgQXJyb3cgZnJvbSBcIi4uL2ljb25zL2Rvd25hcnJvd1wiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge29wZW46IGZhbHNlLCB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSB8fCB0aGlzLnByb3BzLm9wdGlvbnNbMF0udmFsdWV9O1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd24gPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd01lbnUgPSB0aGlzLnNob3dNZW51LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oaWRlTWVudSA9IHRoaXMuaGlkZU1lbnUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TWVudShldmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogdHJ1ZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVNZW51KCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IGZhbHNlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZX0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSB7cmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG8gPT4gby52YWx1ZSA9PSB0aGlzLnN0YXRlLnZhbHVlKTt9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLm9wdGlvbnMubWFwKG9wdCA9PiBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0LW9wdGlvbiR7c2VsZWN0ZWQudmFsdWUgPT0gb3B0LnZhbHVlID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCJ9YH0gb25DbGljaz17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMsIG9wdC52YWx1ZSl9PntvcHQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMucHJvcHMuc3R5bGUgPT0gXCJ0cmFuc3BhcmVudFwiID8gXCIgYmQtc2VsZWN0LXRyYW5zcGFyZW50XCIgOiBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuc3RhdGUub3BlbiA/IFwiIG1lbnUtb3BlblwiIDogXCJcIjtcclxuICAgICAgICByZXR1cm4gIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwXCI+XHJcbi8vIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPnt0aGlzLnByb3BzLmxhYmVsfTwvbGFiZWw+XHJcbi8vIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4vLyAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtY29udHJvbHNcIj5cclxuLy8gICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4vLyAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4vLyAgICAgPC9kaXY+XHJcbi8vIDwvZGl2PlxyXG4vLyB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuLy8gPC9kaXY+OyIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwiLi4vaWNvbnMvc2VhcmNoXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IFtcImJkLXNlYXJjaC13cmFwcGVyXCJdXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuZm9jdXNlZCljbGFzc05hbWUucHVzaChcImZvY3VzZWRcIilcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWUuam9pbihcIiBcIil9PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9IG9uS2V5RG93bj17dGhpcy5wcm9wcy5vbktleURvd259IHR5cGU9XCJ0ZXh0XCIgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJkLXNlYXJjaFwiIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfSBtYXhMZW5ndGg9XCI1MFwiIFxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtmb2N1c2VkOiB0cnVlfSlcbiAgICAgICAgICAgICAgICAgICAgfX0gb25CbHVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtmb2N1c2VkOiBmYWxzZX0pXG4gICAgICAgICAgICAgICAgICAgIH19Lz5cbiAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEljb24gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7Y2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkfTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zd2l0Y2ggPSA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Td2l0Y2ggb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLmNoZWNrZWR9IC8+XG4gICAgfVxuXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6IHZhbHVlfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zd2l0Y2hcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSA9IHRoaXMuZW1pdENoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5UZXh0SW5wdXQub3JpZ2luYWwgcmVmPXtjb25zb2xlLmxvZ30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfSBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn0gb25CbHVyPXt0aGlzLmVtaXRDaGFuZ2V9Lz5cclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHZhbHVlLCB0aGlzLnByb3BzKVxyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZW1pdENoYW5nZSgpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTaG91bGQgZW1pdCBjaGFuZ2VzLmApXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NvbnRlbnRDb2x1bW4gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgZGlzcGxheU5hbWUoKSB7cmV0dXJuIFwiQ29udGVudENvbHVtblwiO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9sZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5wcm9wcy50aXRsZSA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSwgdGhpcy5wcm9wcy50aXRsZSkgOiBudWxsXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uICsgXCIgXCIrY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCIsIHN0eWxlOiB7cGFkZGluZzogXCI2MHB4IDQwcHggMHB4XCJ9fSxcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIlxuXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcbmltcG9ydCBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZnJvbSBcIi4vY3NzRWRpdG9yRGV0YWNoZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0Nzc0VkaXRvciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5wcm9wcy5saW5lcyA9IDA7XG4gICAgICAgIHNlbGYuc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgIHNlbGYuYXR0YWNoID0gc2VsZi5hdHRhY2guYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi5kZXRhY2hlZEVkaXRvciA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfQ3NzRWRpdG9yRGV0YWNoZWQsIHthdHRhY2g6IHNlbGYuYXR0YWNofSk7XG4gICAgICAgIHNlbGYub25DbGljayA9IHNlbGYub25DbGljay5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLmRldGFjaCA9IHNlbGYuZGV0YWNoLmJpbmQoc2VsZik7XG4gICAgfVxuXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGV0YWNoZWQ6IHRoaXMucHJvcHMuZGV0YWNoZWQgfHwgQkRWMi5lZGl0b3JEZXRhY2hlZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvZGlzY29yZFwiKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSgxNCk7XG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNzcygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuZGV0YWNoZWQgJiYgIXNlbGYuc3RhdGUuZGV0YWNoZWQpIHtcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShzZWxmLmRldGFjaGVkUm9vdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb2RlTWlycm9yKCkge1xuICAgIH1cblxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcbiAgICAgICAgICAgIHRoZW1lOiBcIm1hdGVyaWFsXCIsXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBjc3MoKSB7XG4gICAgICAgIGNvbnN0IF9jY3NzID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpO1xuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xuICAgICAgICAgICAgY2NzcyA9IEJ1ZmZlci5mcm9tKF9jY3NzLCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNjc3M7XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcbiAgICAgICAgaWYgKGxpbmVDb3VudCA9PSB0aGlzLnByb3BzLmxpbmVzKSByZXR1cm47XG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGNvbnN0IHtkZXRhY2hlZH0gPSBzZWxmLnN0YXRlO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge2lkOiBcImVkaXRvci1kZXRhY2hlZFwifSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJoM1wiLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIkVkaXRvciBEZXRhY2hlZFwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dGFjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgIFwiQXR0YWNoXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgIWRldGFjaGVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJ9KSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIsIGNsYXNzTmFtZTogXCJlZGl0b3JcIiwgcmVmOiBcImVkaXRvclwifSwgc2VsZi5jc3MpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udHJvbHMtYnV0dG9uXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjNweCAwIDAgM3B4XCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcGRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJkZXRhY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGV0YWNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Zm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjVweFwifX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gZGV0YWNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJoZWxwLXRleHRcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJQcmVzcyBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcImN0cmxcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImlubGluZVwifSwgXCIsXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJ3Mgc2V0dGluZ3MuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgXVxuICAgIH1cblxuICAgIG9uQ2xpY2soYXJnKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzd2l0Y2ggKGFyZykge1xuICAgICAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2F2ZVwiOlxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImRldGFjaFwiOlxuICAgICAgICAgICAgICAgIHNlbGYuZGV0YWNoKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgICAgICBjYXNlIFwibGl2ZS11cGRhdGVcIjpcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSA9IGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVDc3MoKSB7XG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgc2F2ZUNzcygpIHtcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIEJ1ZmZlci5mcm9tKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSwgXCJ1dGYtOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSk7XG4gICAgfVxuXG4gICAgZGV0YWNoKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBkZXRhY2hlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZHJvb3QgPSBzZWxmLmRldGFjaGVkUm9vdDtcbiAgICAgICAgaWYgKCFkcm9vdCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gSU5KRUNUIFJPT1Q6IC5hcHBcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc2VsZi5kZXRhY2hlZEVkaXRvciwgZHJvb3QpO1xuICAgIH1cblxuICAgIGdldCBkZXRhY2hlZFJvb3QoKSB7XG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xuICAgICAgICBpZiAoIV9yb290KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0RGV0YWNoZWRSb290KCkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcm9vdDtcbiAgICB9XG5cbiAgICBpbmplY3REZXRhY2hlZFJvb3QoKSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcCkpO1xuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhdHRhY2goKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIlxuXG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLnNhdmVDc3MgPSBzZWxmLnNhdmVDc3MuYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi5vbkNoYW5nZSA9IHNlbGYub25DaGFuZ2UuYmluZChzZWxmKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmQtZGV0YWNoZWQtZWRpdG9yXCIpO1xuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBhY2UuZWRpdChcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIik7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL2Rpc2NvcmRcIik7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcbiAgICAgICAgaWYgKGxpbmVDb3VudCA9PSB0aGlzLnByb3BzLmxpbmVzKSByZXR1cm47XG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcbiAgICB9XG5cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcbiAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXQgY3NzKCkge1xuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xuICAgICAgICBpZiAoX2Njc3MgJiYgX2Njc3MgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGNjc3MgPSBCdWZmZXIuZnJvbShfY2NzcywgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjY3NzO1xuICAgIH1cblxuICAgIGdldCByb290KCkge1xuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiKTtcbiAgICAgICAgaWYgKCFfcm9vdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yb290O1xuICAgIH1cblxuICAgIGluamVjdFJvb3QoKSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcCkpO1xuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmQtZGV0YWNoZWQtY3NzLWVkaXRvclwiLCBpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWVkaXRvclwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtaW5uZXJwYW5lXCJ9LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtZ3JvdXBcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiBzZWxmLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwidXBkYXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzJkMmQyZFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzJkMmQyZFwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNhdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImF0dGFjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBhdHRhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdID0gY2hlY2tlZDtcbiAgICAgICAgICAgICAgICBTZXR0aW5ncy5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2xpY2soaWQpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhdHRhY2hcIjpcbiAgICAgICAgICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2VkaXRvci1kZXRhY2hlZFwiKSkgc2VsZi5wcm9wcy5hdHRhY2goKTtcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5yb290KTtcbiAgICAgICAgICAgICAgICBzZWxmLnJvb3QucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDc3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XG4gICAgICAgICAgICAgICAgc2VsZi5zYXZlQ3NzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVDc3MoKSB7XG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgc2F2ZUNzcygpIHtcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIEJ1ZmZlci5mcm9tKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSwgXCJ1dGYtOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKSk7XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCREVycm9yQm91bmRhcnkgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgdGhpcy5zdGF0ZSA9IHtoYXNFcnJvcjogZmFsc2V9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZENhdGNoKCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtoYXNFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRXJyb3IpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJyZWFjdC1lcnJvclwifSwgXCJDb21wb25lbnQgRXJyb3JcIik7ICBcclxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47IFxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+PHBhdGggZD1cIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCIvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3duQXJyb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMTIgOS4yOUwxMiAxMy4xN2wzLjg4LTMuODhjLjM5LS4zOSAxLjAyLS4zOSAxLjQxIDAgLjM5LjM5LjM5IDEuMDIgMCAxLjQxbC00LjU5IDQuNTljLS4zOS4zOS0xLjAyLjM5LTEuNDEgMEw2LjcgMTAuN2MtLjM5LS4zOS0uMzktMS4wMiAwLTEuNDEuMzktLjM4IDEuMDMtLjM5IDEuNDIgMHpcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+O1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIjtcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6XCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgICAgICAgIDwvc3ZnPjtcbiAgICB9XG59Iiwiey8qIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwid2hpdGVcIiB3aWR0aD1cIjE4cHhcIiBoZWlnaHQ9XCIxOHB4XCI+XG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cbiAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XG48L3N2Zz4gKi99XG5cbmltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGlzdG9yeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMThweFwiO1xuICAgICAgICByZXR1cm4gPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XG4gICAgICAgIDwvc3ZnPjtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+O1xuICAgIH1cbn0iLCJsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luVG9wNjApWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJnaW5Ub3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZSltYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Ub3A2MH0+PC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IFYyQ19TZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcbmltcG9ydCBWMkNfU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xuaW1wb3J0IHsgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEMgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4uL21vZHVsZXMvQ3VzdG9tUmljaFByZXNlbmNlXCJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmxldCBWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXNcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QcmVzZW5jZVNldHRpbmdzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGRhdGE6IGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikgfHwgZGVmYXVsdFJQQyxcbiAgICAgICAgICAgIGFzc2V0czogW11cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJldmlldyA9IG51bGxcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMgPSBuZXcgU2V0KClcbiAgICB9XG5cbiAgICB1cGRhdGVXaGVuRmV0Y2hlZChjb21wKXtcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuYWRkKGNvbXApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtJbnB1dFRleHR9IHNldHRpbmcgXG4gICAgICovXG4gICAgb25DaGFuZ2Uoc2V0dGluZywgdmFsdWUpe1xuICAgICAgICBsZXQgZGVmYXVsdFNldHRpbmcgPSBSUENQcm9wcy5maW5kKGUgPT4gZS5pZCA9PT0gc2V0dGluZy5wcm9wcy5pZClcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIHRoaXMuc3RhdGUuZGF0YSwge1xuICAgICAgICAgICAgICAgIFtkZWZhdWx0U2V0dGluZy5pZF06ICEhdmFsdWUgPyB2YWx1ZSA6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLnN0YXRlLmFzc2V0c1xuICAgICAgICB9KVxuICAgICAgICBpZihzZXR0aW5nLnByb3BzLmlkID09PSBcImFwcGxpY2F0aW9uX2lkXCIpe1xuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcbiAgICAgICAgdGhpcy5wcmV2aWV3LmZvcmNlVXBkYXRlKClcbiAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLnNldChzZXR0aW5nc1JQQylcbiAgICB9XG5cbiAgICBmZXRjaEFzc2V0cygpe1xuICAgICAgICBpZih0aGlzLmlzZmV0Y2hpbmcgPT09IHRydWUpe1xuICAgICAgICAgICAgbGV0IGFwcCA9IHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkICE9PSBhcHApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZighdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gdHJ1ZVxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZmV0Y2hBc3NldHModGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKVxuICAgICAgICAudGhlbihhc3NldHMgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgICAgICAgICBhc3NldHM6IE9iamVjdC5rZXlzKGFzc2V0cykubWFwKGsgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzZXQgPSBhc3NldHNba11cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhc3NldC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFzc2V0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBhc3NldC50eXBlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHVwZGF0ZVByZXZpZXcoZGF0YSl7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZGF0YVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIHJldHVybiBWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMgfHwgKFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzR3JvdXAgdGl0bGU9XCJSaWNoUHJlc2VuY2UgU2V0dGluZ3NcIiBzZXR0aW5ncz17dGhpcy5wcm9wcy5zZXR0aW5nc30gb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9Lz4sXG4gICAgICAgICAgICA8TWFyZ2luVG9wIC8+LFxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJSaWNoUHJlc2VuY2VcIi8+LFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICB7LyoqIG9wdGlvbnMgKi99XG4gICAgICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbXBvbmVudHN9XG4gICAgICAgICAgICA8L2Rpdj4sXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz5cbiAgICAgICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlByZXZpZXdcIi8+XG4gICAgICAgICAgICAgICAgey8qKiBwcmV2aWV3ICovfVxuICAgICAgICAgICAgICAgIDxScGNQcmV2aWV3IHNldHRpbmdzPXt0aGlzfS8+XG4gICAgICAgICAgICA8L2Rpdj4sXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj4sXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9e3dpbmRvdy5vaGdvZG9oZnVja30+XG4gICAgICAgICAgICAgICAgT2ggZ29kIE9oIGZ1Y2tcbiAgICAgICAgICAgIDwvYnV0dG9uPixcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUxrWWE3cnBzX2c0XCIpXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICBTZWUgPyBJIHB1bGxlZCBhIGxpdGxlIHNuZWFreSBvbiB5YVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBnZXQgb3B0aW9uc0NvbXBvbmVudHMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnNDb21wb25lbnRzIHx8ICh0aGlzLl9vcHRpb25zQ29tcG9uZW50cyA9IFJQQ1Byb3BzLm1hcChlID0+IHtcbiAgICAgICAgICAgIGlmKGUudHlwZSA9PT0gXCJ0ZXh0XCIpe1xuICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRUZXh0IHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfS8+XG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwibnVtYmVyXCIpe1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IFs8SW5wdXROdW1iZXIgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5dLypcbiAgICAgICAgICAgICAgICBpZihlLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIil7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQoPERpc2NvcmRCdXR0b24gdGl0bGU9XCJDb3B5IEN1cnJlbnQgVGltZXN0YW1wXCIgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXG4gICAgICAgICAgICAgICAgICAgIH19IC8+KVxuICAgICAgICAgICAgICAgIH0qL1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVxuICAgICAgICAgICAgfWVsc2UgaWYoZS50eXBlID09PSBcImNob2ljZVwiKXtcbiAgICAgICAgICAgICAgICBpZihbXCJhc3NldHMuc21hbGxcIiwgXCJhc3NldHMubGFyZ2VcIl0uaW5jbHVkZXMoZS5pZCkpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0Q2hvaWNlIHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfSBjaG9pY2VzPXtbe3ZhbHVlOiBcIm5vbmVcIiwgbGFiZWw6IFwiTm8gYXNzZXRzXCJ9XS5jb25jYXQodGhpcy5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpfS8+XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlVua25vd24gY2hvaWNlLlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICB9XG59XG5jb25zdCBSUENQcm9wcyA9IFtcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIkFwcGxpY2F0aW9uIElEXCIsXG4gICAgICAgIGlkOiBcImFwcGxpY2F0aW9uX2lkXCIsXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIk5hbWVcIixcbiAgICAgICAgaWQ6IFwibmFtZVwiLFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiRGV0YWlsc1wiLFxuICAgICAgICBpZDogXCJkZXRhaWxzXCIsXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJCcm93c2luZyBEaXNjb3JkXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiU3RhdGVcIixcbiAgICAgICAgaWQ6IFwic3RhdGVcIixcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkxpZ2h0Y29yZCBDbGllbnRcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJUaW1lc3RhbXAgU3RhcnRcIixcbiAgICAgICAgaWQ6IFwidGltZXN0YW1wcy5zdGFydFwiLFxuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBnZXQgcGxhY2Vob2xkZXIoKXtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiTGFyZ2VBc3NldFwiLFxuICAgICAgICBpZDogXCJhc3NldHMubGFyZ2VcIixcbiAgICAgICAgdHlwZTogXCJjaG9pY2VcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJTbWFsbEFzc2V0XCIsXG4gICAgICAgIGlkOiBcImFzc2V0cy5zbWFsbFwiLFxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXG4gICAgfSxcbl1cblxubGV0IGlucHV0VGV4dE1vZHVsZXNcbmNsYXNzIElucHV0VGV4dCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIGlmKGlucHV0VGV4dE1vZHVsZXMgJiYgaW5wdXRUZXh0TW9kdWxlc1swXSlyZXR1cm4gaW5wdXRUZXh0TW9kdWxlc1xuICAgICAgICByZXR1cm4gaW5wdXRUZXh0TW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMTYgJiYgZS5zaXplMjApWzBdLFxuICAgICAgICBdXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcylcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlucHV0ID0gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlRleHRJbnB1dCBwbGFjZWhvbGRlcj17c2V0dGluZy5wbGFjZWhvbGRlcn0gbmFtZT17c2V0dGluZy5pZH0gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogdmFsdWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXG5cbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIHJvd01vZHVsZSxcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxuICAgICAgICAgICAgaW5wdXRNb2R1bGUsXG4gICAgICAgICAgICBzaXplTW9kdWxlMixcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cbiAgICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8RGl2aWRlci8+XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59XG5cbmxldCBJbnB1dE51bWJlck1vZHVsZXNcbmNsYXNzIElucHV0TnVtYmVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgZ2V0IG1vZHVsZXMoKXtcbiAgICAgICAgcmV0dXJuIElucHV0TnVtYmVyTW9kdWxlcyB8fCAoSW5wdXROdW1iZXJNb2R1bGVzID0gW1xuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclRyYW5zcGFyZW50KVswXSxcbiAgICAgICAgXSlcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSB0eXBlPVwibnVtYmVyXCIgb25DaGFuZ2U9eyh2YWx1ZSwgbmFtZSwgaW5wdXQpID0+IHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXGRdKy9nLCBcIlwiKVxuICAgICAgICAgICAgaWYodmFsdWUgPT0gdGhpcy5zdGF0ZS5kYXRhKXtcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUpXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXG5cbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIHJvd01vZHVsZSxcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cblxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XG4gICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICB7dGhpcy5pbnB1dH1cbiAgICAgICAgICAgICAgICB7c2V0dGluZy5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIgPyBcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcbiAgICAgICAgICAgICAgICB9fSBjb2xvcj1cImJyYW5kXCI+Q29weSBjdXJyZW50IHRpbWVzdGFtcDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+IDogbnVsbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPERpdmlkZXIvPlxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufVxuXG5sZXQgSW5wdXRDaG9pY2VNb2R1bGVzXG5jbGFzcyBJbnB1dENob2ljZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA/IFwiYXNzZXQtXCIrdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF0gOiBcIm5vbmVcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMubWFuYWdlci51cGRhdGVXaGVuRmV0Y2hlZCh0aGlzKVxuICAgIH1cblxuICAgIG9uQ2hhbmdlKHZhbHVlKXtcbiAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcbiAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSA9PT0gXCJub25lXCIgPyBudWxsIDogdmFsdWUucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSlcbiAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xuICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEgPT09IFwibm9uZVwiID8gbnVsbCA6IHRoaXMuc3RhdGUuZGF0YS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxuICAgIH1cbiAgICBcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gSW5wdXRDaG9pY2VNb2R1bGVzIHx8IChJbnB1dENob2ljZU1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cbiAgICAgICAgXSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcblxuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgcm93TW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcbiAgICAgICAgICAgIGZsZXhNb2R1bGVcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuICAgICAgICBcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuYXNzZXRzLm1hcChlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgb3B0aW9ucy51bnNoaWZ0KHtcbiAgICAgICAgICAgIHZhbHVlOiBcIm5vbmVcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIk5vIGFzc2V0c1wiXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9wdGlvbnM9e29wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IC8+XG4gICAgICAgICAgICAgICAgey8qPFNlbGVjdCB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSBvcHRpb25zPXtvcHRpb25zfS8+Ki99XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxEaXZpZGVyLz5cbiAgICAgICAgPC9kaXY+KVxuICAgIH1cbn1cblxubGV0IERpdmlkZXJNb2R1bGVzID0gW11cbmNsYXNzIERpdmlkZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gRGl2aWRlck1vZHVsZXMmJkRpdmlkZXJNb2R1bGVzWzBdID8gRGl2aWRlck1vZHVsZXMgOiAoRGl2aWRlck1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF1cbiAgICAgICAgXSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIGRpdmlkZXIsXG4gICAgICAgICAgICBkaXZpZGVyRGVmYXVsdFxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2Ake2RpdmlkZXIuZGl2aWRlcn0gJHtkaXZpZGVyRGVmYXVsdC5kaXZpZGVyRGVmYXVsdH1gfT48L2Rpdj5cbiAgICB9XG59XG5cbmNsYXNzIERpc2NvcmRCdXR0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQgcm93TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF1cbiAgICAgICAgbGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxuXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfSBjb2xvcj1cImJyYW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+KVxuICAgIH1cbn1cblxuY2xhc3MgUnBjUHJldmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMgPSB7fSl7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgYWN0aXZlOiBcInByb2ZpbGVcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFicyA9IFtdXG5cbiAgICAgICAgdGhpcy5wcm9wcy5zZXR0aW5ncy5wcmV2aWV3ID0gdGhpc1xuICAgIH1cblxuICAgIGNoYW5nZVRhYih0YWIpe1xuICAgICAgICBsZXQgYW5jaWVudFRhYiA9IHRoaXMuc3RhdGUuYWN0aXZlXG4gICAgICAgIGlmKGFuY2llbnRUYWIgPT09IHRhYi5wcm9wcy5pZClyZXR1cm5cblxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgIGUuc2V0QWN0aXZlKGZhbHNlKVxuICAgICAgICB9KVxuICAgICAgICB0YWIuc2V0QWN0aXZlKHRydWUpXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgYWN0aXZlOiB0YWIucHJvcHMuaWRcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYldyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFibmF2XCIgc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiRnVsbCBQcm9maWxlXCIgaWQ9XCJwcm9maWxlXCIvPlxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJVc2VyIFBvcG91dFwiIGlkPVwicG9wb3V0XCIvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8UHJlc2VuY2VFcnJvckNhdGNoZXIgcHJldmlldz17dGhpcy5wcmV2aWV3fSBzdGF0ZT17dGhpcy5zdGF0ZS5ycGN9IHByb3BzPXt7cHJldmlldzogdGhpc319IGtleT17dGhpcy5zdGF0ZS5hY3RpdmV9IC8+XG4gICAgICAgIDwvZGl2PilcbiAgICB9ICAgXG5cbiAgICBpc0FjdGl2ZSh0YWIpe1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5hY3RpdmUgPT09IHRhYlxuICAgIH1cblxuICAgIGdldCBwcmV2aWV3KCl7XG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlID09PSBcInByb2ZpbGVcIilyZXR1cm4gUHJvZmlsZVxuICAgICAgICByZXR1cm4gUG9wb3V0XG4gICAgfVxufVxuXG5jbGFzcyBUYWIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGFjdGl2ZTogcHJvcHMucHJldmlldy5pc0FjdGl2ZShwcm9wcy5pZClcbiAgICAgICAgfVxuICAgICAgICBwcm9wcy5wcmV2aWV3LnRhYnMucHVzaCh0aGlzKVxuICAgIH1cblxuICAgIHNldEFjdGl2ZShpc0FjdGl2ZSl7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgYWN0aXZlOiAhIWlzQWN0aXZlXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBgbGMtbmF2SXRlbWBcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUpe1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUFjdGl2ZWBcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtSW5hY3RpdmVgXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKT0+e1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5wcmV2aWV3LmNoYW5nZVRhYih0aGlzKVxuICAgICAgICB9fT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufVxuXG5sZXQgZW1wdHlDbGFzc2VzXG5jbGFzcyBQcmVzZW5jZUVycm9yQ2F0Y2hlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29tcG9uZW50RGlkQ2F0Y2goZXJyLCBlcnJJbmZvKXtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyckluZm8pXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZXJyb3I6IHRydWVcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKCF0aGlzLnN0YXRlKXtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoIXRoaXMuc3RhdGUuZXJyb3Ipe1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSBuZXcgdGhpcy5wcm9wcy5wcmV2aWV3KHRoaXMucHJvcHMucHJvcHMpXG4gICAgICAgICAgICAgICAgcHJldmlldy5zZXRTdGF0ZSh0aGlzLnByb3BzLnN0YXRlKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aWV3LnJlbmRlcigpXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcigpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgZW1wdHlDbGFzc2VzID0gZW1wdHlDbGFzc2VzIHx8IEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZW1wdHlTdGF0ZUltYWdlICYmIGUuZW1wdHlTdGF0ZSlcbiAgICAgICAgICAgIGlmKCFlbXB0eUNsYXNzZXMpe1xuICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQuIFBsZWFzZSBjaGVjayB0aGUgY29uc29sZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiBcIjIwcHhcIlxuICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLCBcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxuICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT17YGxjLXRhYi1ib3gtc2hhZG93ICR7ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGV9YH0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUltYWdlfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiBcIjIwcHhcIlxuICAgICAgICAgICAgICAgICAgICB9fT5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSGVhZGVyfT5BbiBlcnJvciBvY2N1cmVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVTdWJ0ZXh0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgY29uc29sZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuIEpvaW4gb3VyIMKtXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9e2Ake0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QkRWMi5hbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PXswfSBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5qb2luTEMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBzZXJ2ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIMKtIGZvciBoZWxwLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbn1cblxubGV0IHBvcG91dE1vZHVsZXNcbmxldCBVc2VyUG9wb3V0Q29tcG9uZW50XG5sZXQgUG9wb3V0UHJvcHNcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgZ2V0IG1vZHVsZXMoKXtcbiAgICAgICAgcmV0dXJuIHBvcG91dE1vZHVsZXMgfHwgKHBvcG91dE1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlVzZXJQb3BvdXRcIiksXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIGdldENvbXBvbmVudCgpe1xuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgVXNlclBvcG91dCxcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVuZGVyMSA9IFVzZXJQb3BvdXQuZGVmYXVsdCh7XG4gICAgICAgICAgICAgICAgdXNlcklkOiB1c2VyLmlkLCBcbiAgICAgICAgICAgICAgICBndWlsZElkOiBudWxsLCBcbiAgICAgICAgICAgICAgICBjaGFubmVsSWQ6IG51bGwsIFxuICAgICAgICAgICAgICAgIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBVc2VyUG9wb3V0Q29tcG9uZW50ID0gcmVuZGVyMS50eXBlXG4gICAgICAgICAgICBQb3BvdXRQcm9wcyA9IHJlbmRlcjEucHJvcHNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcigpXG4gICAgICAgIH0sIG51bGwpXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKCFVc2VyUG9wb3V0Q29tcG9uZW50KXJldHVybiB0aGlzLmdldENvbXBvbmVudCgpXG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBfVXNlclBvcG91dCxcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxuXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXG4gICAgICAgICAgICBsZXQgZ2FtZSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XG4gICAgICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2FtZVxuICAgICAgICB9KS5jYWxsKHtcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBwb3BvdXQgPSBuZXcgVXNlclBvcG91dENvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQb3BvdXRQcm9wcywge1xuICAgICAgICAgICAgYWN0aXZpdHk6IGFjdGl2aXR5LFxuICAgICAgICAgICAgdXNlcklkOiB1c2VyLmlkXG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcblxuICAgICAgICAvLyByZW1vdmUgdGhlIHN0b3AgcHJvcGFnYXRpb24gc2hpdC5cbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gPGRpdiB7Li4ud2luZG93LkxpZ2h0Y29yZC5BcGkuXy5leGNsdWRlUHJvcGVydGllcyhwb3BvdXQucHJvcHMsIFtcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCJdKX0gLz5cblxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJsYy11c2VyUG9wb3V0IGxjLXRhYi1ib3gtc2hhZG93XCI+XG4gICAgICAgICAgICB7Y29udGFpbmVyfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG59XG5cbmxldCBwcm9maWxlTW9kdWxlc1xubGV0IFVzZXJQcm9maWxlQ29tcG9uZW50XG5sZXQgUHJvZmlsZVByb3BzXG5sZXQgY29ubmVjdGVkUHJvZmlsZVN0b3JlXG5jbGFzcyBQcm9maWxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gcHJvZmlsZU1vZHVsZXMgfHwgKHByb2ZpbGVNb2R1bGVzID0gW1xuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJVc2VyUHJvZmlsZVwiKSxcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpXG4gICAgICAgIF0pXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBVc2VyUHJvZmlsZSxcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xuXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxuICAgICAgICBpZighVXNlclByb2ZpbGVDb21wb25lbnQpe1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyMSA9IG5ldyBVc2VyUHJvZmlsZS5kZWZhdWx0KHtcbiAgICAgICAgICAgICAgICB1c2VyOiB1c2VyXG4gICAgICAgICAgICB9KS5yZW5kZXIoKVxuICAgICAgICAgICAgY29ubmVjdGVkUHJvZmlsZVN0b3JlID0gcmVuZGVyMS50eXBlXG4gICAgICAgICAgICBjb25zdCByZW5kZXIyID0gbmV3IHJlbmRlcjEudHlwZShyZW5kZXIxLnByb3BzKS5yZW5kZXIoKVxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMyA9IHJlbmRlcjIudHlwZS5yZW5kZXIocmVuZGVyMi5wcm9wcywgbnVsbClcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjQgPSBuZXcgcmVuZGVyMy50eXBlKHJlbmRlcjMucHJvcHMpLnJlbmRlcigpXG4gICAgICAgICAgICBVc2VyUHJvZmlsZUNvbXBvbmVudCA9IHJlbmRlcjQudHlwZVxuICAgICAgICB9XG4gICAgICAgIGlmKCFVc2VyUHJvZmlsZUNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQcm9maWxlQ29tcG9uZW50IGNvbXBvbmVudC5gKVxuXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXG4gICAgICAgICAgICBsZXQgZ2FtZSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XG4gICAgICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2FtZVxuICAgICAgICB9KS5jYWxsKHtcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcbiAgICAgICAgfSlcblxuICAgICAgICBQcm9maWxlUHJvcHMgPSBuZXcgY29ubmVjdGVkUHJvZmlsZVN0b3JlKHtcbiAgICAgICAgICAgIHVzZXI6IHVzZXIsXG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge31cbiAgICAgICAgfSkucmVuZGVyKCkucHJvcHNcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IG5ldyBVc2VyUHJvZmlsZUNvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQcm9maWxlUHJvcHMsIHtcbiAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0eVxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXG5cbiAgICAgICAgcHJvZmlsZS5wcm9wcy5zdHlsZSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiBcImF1dG9cIlxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiIGxjLXRhYi1ib3gtc2hhZG93XCI+XG4gICAgICAgICAgICB7cHJvZmlsZX1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5nc1RpdGxlXCI7XG5pbXBvcnQgVGFiQmFyU2VwYXJhdG9yIGZyb20gXCIuLi90YWJCYXJTZXBhcmF0b3JcIjtcblxuaW1wb3J0IFNlcnZlckNhcmQgZnJvbSBcIi4vc2VydmVyQ2FyZFwiO1xuaW1wb3J0IHsgdXNlRm9yY2VVcGRhdGUgfSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9ob29rc1wiO1xuXG5sZXQgU2V0dGluZ3NWaWV3XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHVibGljU2VydmVycyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNoYW5nZUNhdGVnb3J5ID0gdGhpcy5jaGFuZ2VDYXRlZ29yeS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2VhcmNoS2V5RG93biA9IHRoaXMuc2VhcmNoS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbiA9IHRoaXMuY2hlY2tDb25uZWN0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuam9pbiA9IHRoaXMuam9pbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbm5lY3QgPSB0aGlzLmNvbm5lY3QuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLkd1aWxkU3RvcmUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0R3VpbGRzXCJdKTtcbiAgICAgICAgdGhpcy5BdmF0YXJEZWZhdWx0cyA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRVc2VyQXZhdGFyVVJMXCIsIFwiREVGQVVMVF9BVkFUQVJTXCJdKTtcbiAgICAgICAgdGhpcy5JbnZpdGVBY3Rpb25zID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7XG4gICAgICAgIHRoaXMuU29ydGVkR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRTb3J0ZWRHdWlsZHNcIl0pO1xuXG4gICAgICAgIHRoaXMuaG9va3MgPSBbXVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xuICAgIH1cblxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNlcnZlcnM6IFtdLFxuICAgICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogMCxcbiAgICAgICAgICAgICAgICB1c2VyOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VjdGlvbjogdGhpcy5jYXRlZ29yeVNsdWdzWzBdLFxuICAgICAgICAgICAgdGhlbWU6IFwiZGFya1wiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvc2UoKVxuICAgIH1cblxuICAgIHNlYXJjaChxdWVyeSwgY2xlYXIpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZldGNoKGAke3NlbGYuc2VhcmNoRW5kUG9pbnR9JHtxdWVyeX0ke3F1ZXJ5ID8gXCImc2NoZW1hPW5ld1wiIDogXCI/c2NoZW1hPW5ld1wifWAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIlxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgYXdhaXQgcmVzLnRleHQoKVxuICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gZGF0YS5yZXN1bHRzLnJlZHVjZSgoYXJyLCBzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuam9pbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2VydmVyKTtcbiAgICAgICAgICAgICAgICAvLyBhcnIucHVzaCg8U2VydmVyQ2FyZCBzZXJ2ZXI9e3NlcnZlcn0gam9pbj17c2VsZi5qb2lufS8+KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICAgICAgICBpZiAoIWNsZWFyKSB7XG4gICAgICAgICAgICAgICAgc2VydmVycyA9IHNlbGYuc3RhdGUuc2VydmVycy5jb25jYXQoc2VydmVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL3NlcnZlcnMudW5zaGlmdChzZWxmLmJkU2VydmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGVuZCA9IGRhdGEuc2l6ZSArIGRhdGEuZnJvbTtcbiAgICAgICAgICAgIGRhdGEubmV4dCA9IGA/ZnJvbT0ke2VuZH1gO1xuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgZGF0YS5uZXh0ICs9IGAmdGVybT0ke3NlbGYuc3RhdGUudGVybX1gO1xuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSkgZGF0YS5uZXh0ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XG4gICAgICAgICAgICBpZiAoZW5kID49IGRhdGEudG90YWwpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLnRvdGFsO1xuICAgICAgICAgICAgICAgIGRhdGEubmV4dCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGBTaG93aW5nIDEtJHtlbmR9IG9mICR7ZGF0YS50b3RhbH0gcmVzdWx0cyBpbiAke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIHRpdGxlICs9IGAgZm9yICR7c2VsZi5zdGF0ZS50ZXJtfWA7XG5cbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzOiBzZXJ2ZXJzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGRhdGEubmV4dFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkZhaWxlZCB0byBsb2FkIHNlcnZlcnMuIENoZWNrIGNvbnNvbGUgZm9yIGRldGFpbHNcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYXN5bmMgam9pbihzZXJ2ZXJDYXJkKSB7XG4gICAgICAgIGlmIChzZXJ2ZXJDYXJkLnByb3BzLnBpbm5lZCkgcmV0dXJuIHRoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGUoc2VydmVyQ2FyZC5wcm9wcy5pbnZpdGVfY29kZSk7XG5cbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5qb2luRW5kUG9pbnR9LyR7c2VydmVyQ2FyZC5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcn1gLHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlcnZlckNhcmQuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZi53aW5kb3dPcHRpb25zO1xuICAgICAgICBvcHRpb25zLnggPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5YICsgd2luZG93LmlubmVyV2lkdGggLyAyIC0gb3B0aW9ucy53aWR0aCAvIDIpO1xuICAgICAgICBvcHRpb25zLnkgPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5ZICsgd2luZG93LmlubmVySGVpZ2h0IC8gMiAtIG9wdGlvbnMuaGVpZ2h0IC8gMik7XG5cbiAgICAgICAgY29uc3Qgd2luID0gc2VsZi5qb2luV2luZG93ID0gbmV3IChyZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3cpKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB1cmwgPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9aHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCI7XG4gICAgICAgIHdpbi53ZWJDb250ZW50cy5vbihcImRpZC1uYXZpZ2F0ZVwiLCAoZXZlbnQsIHVybCkgPT4ge1xuICAgICAgICAgICAgaWYgKHVybCAhPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiKSByZXR1cm47XG4gICAgICAgICAgICB3aW4uY2xvc2UoKTtcbiAgICAgICAgICAgIHNlbGYuY2hlY2tDb25uZWN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB3aW4ubG9hZFVSTCh1cmwpO1xuICAgICAgICB3aW4uc2V0TWVudUJhclZpc2liaWxpdHkoZmFsc2UpXG4gICAgfVxuXG4gICAgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aDogNTAwLFxuICAgICAgICAgICAgaGVpZ2h0OiA1NTAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzI4MmIzMFwiLFxuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBtaW5pbWl6YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBhbHdheXNPblRvcDogdHJ1ZSxcbiAgICAgICAgICAgIGZyYW1lOiB0cnVlLFxuICAgICAgICAgICAgY2VudGVyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICAgICAgICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBiZFNlcnZlcigpIHtcbiAgICAgICAgY29uc3Qgc2VydmVyID0ge1xuICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJEaXNjb3JkXCIsXG4gICAgICAgICAgICBvbmxpbmU6IFwiMzAwMDArXCIsXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjcwMDAwK1wiLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1wiY29tbXVuaXR5XCIsIFwicHJvZ3JhbW1pbmdcIiwgXCJzdXBwb3J0XCJdLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgQmV0dGVyRGlzY29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2ljb25zLzg2MDA0NzQ0OTY2OTE0MDQ4LzI5MmU3ZjZiZmZmMmI3MWRmZDEzZTUwOGE4NTlhZWRkLndlYnBcIixcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCIwVG1mbzVaYk9SQ1JxYkFkXCIsXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2VydmVyMiA9IHtcbiAgICAgICAgICAgIG5hbWU6IFwiTGlnaHRjb3JkXCIsXG4gICAgICAgICAgICBvbmxpbmU6IFwiMTAwK1wiLFxuICAgICAgICAgICAgbWVtYmVyczogXCIzMDArXCIsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBMaWdodGNvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI3MDU5MDgzNTAyMTg2NjYxMTdcIixcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC5wbmdcIixcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCI3ZUZmZjJBXCIsXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0gdGhpcy5BdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyMiwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSksXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KVxuICAgICAgICBdXG4gICAgfVxuXG4gICAgZ2V0IHNlYXJjaEVuZFBvaW50KCkge1xuICAgICAgICByZXR1cm4gXCJodHRwczovL3NlYXJjaC5kaXNjb3Jkc2VydmVycy5jb21cIjtcbiAgICB9XG5cbiAgICBnZXQgam9pbkVuZFBvaW50KCkge1xuICAgICAgICByZXR1cm4gXCJodHRwczovL2ouZGlzY29yZHNlcnZlcnMuY29tXCI7XG4gICAgfVxuXG4gICAgZ2V0IGNvbm5lY3RFbmRQb2ludCgpIHtcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qb2luLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0XCI7XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb2Ase1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICAgICAgICAgIGlmKCF0ZXh0KXtcbiAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxuICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UodGV4dClcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IDAsXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMixcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogZGF0YVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXG4gICAgICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAtMSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAxLFxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuaG9va3MuZm9yRWFjaCgoZSkgPT4gZSgpKVxuICAgICAgICBTZXR0aW5nc1ZpZXcgPSBTZXR0aW5nc1ZpZXcgfHwgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlNldHRpbmdzVmlld1wiKVxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJwdWJzbGF5ZXJyb290XCJ9LCBcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwicHVic2xheWVyXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NWaWV3LCB7XG4gICAgICAgICAgICAgICAgb25TZXRTZWN0aW9uOiAoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNhdGVnb3J5KHRoaXMuY2F0ZWdvcnlTbHVncy5pbmRleE9mKHNlY3Rpb24pKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VjdGlvbnM6IHRoaXMuc2VjdGlvbnMsXG4gICAgICAgICAgICAgICAgb25DbG9zZTogdGhpcy5jbG9zZSxcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiB0aGlzLnN0YXRlLnNlY3Rpb25cbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBzZWN0aW9ucygpe1xuICAgICAgICBsZXQgc2VjdGlvbnMgPSBbXVxuICAgICAgICBzZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJQdWJsaWMgU2VydmVyc1wiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiQ1VTVE9NXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLnNlYXJjaElucHV0LmJpbmQobnVsbCwgKCkgPT4gdGhpcywgdGhpcy5zZWFyY2hLZXlEb3duKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiQ2F0ZWdvcmllc1wiXG4gICAgICAgIH0sIC4uLnRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlY3Rpb246IHRoaXMuY2F0ZWdvcnlTbHVnc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuY29udGVudC5iaW5kKG51bGwsICgpID0+IHRoaXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkNVU1RPTVwiLFxuICAgICAgICAgICAgZWxlbWVudDogdGhpcy5mb290ZXJcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuY29ubmVjdGlvbi5iaW5kKG51bGwsICgpID0+IHRoaXMpXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBzZWN0aW9uc1xuICAgIH1cbiAgICBcbiAgICBzZWFyY2hJbnB1dChnZXRUaGlzLCBzZWFyY2hLZXlEb3duKSB7XG4gICAgICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gQkRWMi5yZWFjdC51c2VTdGF0ZShcIlwiKVxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS1pdGVtXCJ9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10ZXh0LWlucHV0IGZsZXgtdmVydGljYWxcIiwgc3R5bGU6IHt3aWR0aDogXCIxNzJweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmOiAoc2VyY2hpbnB1dCkgPT4gKGdldFRoaXMoKS5yZWZzLnNlYXJjaGlucHV0ID0gc2VyY2hpbnB1dCksIFxuICAgICAgICAgICAgICAgICAgICBvbktleURvd246IHNlYXJjaEtleURvd24sIFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9LCBcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsIFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiaW5wdXQgZGVmYXVsdFwiLCBcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiU2VhcmNoLi4uXCIsIFxuICAgICAgICAgICAgICAgICAgICBtYXhMZW5ndGg6IFwiNTBcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZWFyY2hLZXlEb3duKGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcgfHwgZS53aGljaCAhPT0gMTMpIHJldHVybjtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxuICAgICAgICAgICAgdGVybTogZS50YXJnZXQudmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBxdWVyeSA9IGA/dGVybT0ke2UudGFyZ2V0LnZhbHVlfWA7XG4gICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgIT09IDApIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5zZWFyY2gocXVlcnksIHRydWUpO1xuICAgIH1cblxuICAgIGdldCBjYXRlZ29yeVNsdWdzKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmNhdGVnb3J5QnV0dG9ucy5tYXAoZSA9PiBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15cXHdcXGRdKy9nLCBcIl9cIikpXG4gICAgfVxuXG4gICAgZ2V0IGNhdGVnb3J5QnV0dG9ucygpIHtcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDYXRlZ29yeShpZCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO1xuICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBpZCxcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcbiAgICAgICAgICAgIHRlcm06IG51bGwsXG4gICAgICAgICAgICBzZWN0aW9uOiBzZWxmLmNhdGVnb3J5U2x1Z3NbaWRdXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaWQgPT09IDApIHtcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuc2VhcmNoKGA/Y2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tpZF19YCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29udGVudChnZXRUaGlzKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSBnZXRUaGlzKCk7XG4gICAgICAgIHNlbGYudXNlU3RhdGUoKVxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSBzZWxmLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSBzZWxmLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuY29ubmVjdGlvbi5zdGF0ZSA9PT0gMSkgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChzZWxmLm5vdENvbm5lY3RlZC5iaW5kKG51bGwsIGdldFRoaXMpKTtcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7cmVmOiAocmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgKHNlbGYucmVmcy5jb250ZW50ID0gcmVmKVxuICAgICAgICAgICAgfSwga2V5OiBcInBjXCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pLFxuICAgICAgICAgICAgc2VsZi5iZFNlcnZlcixcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5tYXAoKHNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge2tleTogc2VydmVyLmlkZW50aWZpZXIsIHNlcnZlcjogc2VydmVyLCBqb2luOiBzZWxmLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNlbGYuc3RhdGUubmV4dCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO3NlbGYuc2V0U3RhdGUoe2xvYWRpbmc6IHRydWV9KTsgc2VsZi5zZWFyY2goc2VsZi5zdGF0ZS5uZXh0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIiwgc3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1hcmdpblRvcDogXCIxMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIxMHB4XCJ9fSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLmxvYWRpbmcgPyBcIkxvYWRpbmdcIiA6IFwiTG9hZCBNb3JlXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLmxlbmd0aCA+IDAgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSlcbiAgICAgICAgKV07XG4gICAgfVxuXG4gICAgbm90Q29ubmVjdGVkKGdldFRoaXMpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IGdldFRoaXMoKTtcbiAgICAgICAgLy9yZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHsgdGV4dDogc2VsZi5zdGF0ZS50aXRsZSB9KTtcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7a2V5OiBcIm5jY1wiLCByZWY6IChyZWYpID0+IChzZWxmLnJlZnMuY29udGVudCA9IHJlZiksIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImgyXCIsXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxuICAgICAgICAgICAgICAgIFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzZWxmLmNvbm5lY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogXCIxOHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCIxMHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb25uZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksIHNlbGYuYmRTZXJ2ZXJcbiAgICAgICAgKV07XG4gICAgfVxuXG4gICAgZm9vdGVyKCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIn0sXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAge2hyZWY6IFwiaHR0cHM6Ly9kaXNjb3Jkc2VydmVycy5jb21cIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICBcIkRpc2NvcmRzZXJ2ZXJzLmNvbVwiXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXNlU3RhdGUoKXtcbiAgICAgICAgY29uc3QgZm9yY2VVcGRhdGUgPSB1c2VGb3JjZVVwZGF0ZSgpXG4gICAgICAgIEJEVjIuUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9va3MucHVzaChsaXN0ZW5lcilcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmhvb2tzLmZpbmRJbmRleChlID0+IGU9PT1saXN0ZW5lcilcbiAgICAgICAgICAgICAgICBpZihpbmRleCA8IDApcmV0dXJuXG4gICAgICAgICAgICAgICAgdGhpcy5ob29rcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKVxuICAgIH1cblxuICAgIGNvbm5lY3Rpb24oZ2V0VGhpcykge1xuICAgICAgICBjb25zdCBzZWxmID0gZ2V0VGhpcygpO1xuICAgICAgICBzZWxmLnVzZVN0YXRlKClcbiAgICAgICAgY29uc3Qge2Nvbm5lY3Rpb259ID0gc2VsZi5zdGF0ZTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24uc3RhdGUgIT09IDIpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpO1xuXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtjb2xvcjogXCIjYjliYmJlXCIsIGZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcbiAgICAgICAgICAgICAgICBcIkNvbm5lY3RlZCBhczogXCIsXG4gICAgICAgICAgICAgICAgYCR7Y29ubmVjdGlvbi51c2VyLnVzZXJuYW1lfSMke2Nvbm5lY3Rpb24udXNlci5kaXNjcmltaW5hdG9yfWBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtwYWRkaW5nOiBcIjVweCAxMHB4IDAgMTBweFwifX0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1pbkhlaWdodDogXCIyMHB4XCJ9LCB0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIiwgb25DbGljazogc2VsZi5jb25uZWN0fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUmVjb25uZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXJ2ZXJDYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuc2VydmVyLmljb25VcmwpIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGltYWdlRXJyb3I6IGZhbHNlLFxyXG4gICAgICAgICAgICBqb2luZWQ6IHRoaXMucHJvcHMuZ3VpbGRMaXN0LmluY2x1ZGVzKHRoaXMucHJvcHMuc2VydmVyLmlkZW50aWZpZXIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NlcnZlcn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGxldCBjYXJkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2FyZCAmJiBlLmNhcmRQcmltYXJ5KVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxleENoaWxkICYmIGUuX2hvcml6b250YWxSZXZlcnNlKVswXVxyXG4gICAgICAgIGxldCB3cmFwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubm9XcmFwICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWQpWzBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIiwgLy8gY2FyZFByaW1hcnktMUh2LXRvXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGAke2NhcmRNb2R1bGUuY2FyZH0gJHtjYXJkTW9kdWxlLmNhcmRQcmltYXJ5fSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9IGJkLXNlcnZlci1jYXJkJHtzZXJ2ZXIucGlubmVkID8gXCIgYmQtc2VydmVyLWNhcmQtcGlubmVkXCIgOiBcIlwifWB9LFxyXG4gICAgICAgICAgICAvLyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAvLyBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgLy8geyBjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZmxleC0xTzFHS1kgZGlyZWN0aW9uUm93LTN2M3RmRyBqdXN0aWZ5U3RhcnQtMnlJWm8wIGFsaWduU3RyZXRjaC0xaHd4TWEgbm9XcmFwLTNqeW52NlwiIH0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge3JlZjogXCJpbWdcIiwgY2xhc3NOYW1lOiBcImJkLXNlcnZlci1pbWFnZVwiLCBzcmM6IHNlcnZlci5pY29uVXJsLCBvbkVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcyksIGRyYWdnYWJsZTogZmFsc2V9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuZmxleENoaWxkK1wiIGJkLXNlcnZlci1jb250ZW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwK1wiIGJkLXNlcnZlci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1uYW1lXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW1lbWJlci1jb3VudFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5tZW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgTWVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5IGJkLXNlcnZlci1kZXNjcmlwdGlvbi1jb250YWluZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBzY3JvbGxlciBiZC1zZXJ2ZXItZGVzY3JpcHRpb25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZGlyZWN0aW9uUm93LTN2M3RmRyBub1dyYXAtM2p5bnY2IGJkLXNlcnZlci1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXhDaGlsZC1mYW9WVzMgYmQtc2VydmVyLXRhZ3NcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5jYXRlZ29yaWVzLmpvaW4oXCIsIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGNvbG9yR3JlZW4tMjlpQUtZXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiIzNhYzE1Y1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5lcnJvciAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGRpc2FibGVkLTlhRjJ1Z1wiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiNjMTNhM2FcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZXJ2ZXIuZXJyb3IgJiYgIXRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk5cIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCJ9LCBvbkNsaWNrOiAoKSA9PiB7dGhpcy5qb2luKCk7fX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUVycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pbigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmpvaW4odGhpcyk7XHJcbiAgICAgICAgLy90aGlzLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUmVsb2FkSWNvbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xyXG4gICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcIiNkY2RkZGVcIixcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1yZWxvYWQgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMub25DbGljayxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7d2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIiwgaGVpZ2h0OiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCJ9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwifSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6IFwibm9uZVwiLCBkOiBcIk0wIDBoMjR2MjRIMHpcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgIGkgIT09IDAgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wLCB7fSkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZX0pKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcblxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9zd2l0Y2hcIjtcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XG5cbmxldCBmb3JtTW9kdWxlXG5sZXQgc3dpdGNoSXRlbVxubGV0IGJldGFDbGFzc05hbWVzXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NHcm91cCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBlcnJvcjogZmFsc2VcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlck9sZFNldHRpbmdzKCkge1xuICAgICAgICBjb25zdCB7dGl0bGUsIHNldHRpbmdzLCBidXR0b259ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgYnV0dG9uQ29tcG9uZW50ID0gYnV0dG9uID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwidGl0bGUtYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiBidXR0b24ub25DbGlja30sIGJ1dHRvbi50aXRsZSkgOiBudWxsO1xuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGV9KSxcbiAgICAgICAgICAgICAgICBidXR0b25Db21wb25lbnQsXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGlkLCBjaGVja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICAgICAgICAgIH0pXTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRDYXRjaChlcnIsIGVyckluZm8pe1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIsIGVyckluZm8pXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZXJyb3I6IHRydWVcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5lcnJvcil7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyT2xkU2V0dGluZ3MoKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICBpZighZm9ybU1vZHVsZSlmb3JtTW9kdWxlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5Gb3JtU2VjdGlvbilcbiAgICAgICAgICAgICAgICBpZighc3dpdGNoSXRlbSlzd2l0Y2hJdGVtID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJTd2l0Y2hJdGVtXCIpXG4gICAgICAgICAgICAgICAgaWYoIWJldGFDbGFzc05hbWVzKWJldGFDbGFzc05hbWVzID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5iZXRhICYmICghZS5jb250YWluZXIgJiYgIWUudXNlclNldHRpbmdzVm9pY2UpKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtdXG4gICAgICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5kZXNjcmlwdGlvbil7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goPGZvcm1Nb2R1bGUuRm9ybVRleHQgdHlwZT1cImRlc2NyaXB0aW9uXCIgc2VsZWN0YWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtVGV4dD4sIDxNYXJnaW5Ub3A+PC9NYXJnaW5Ub3A+KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKC4uLnRoaXMucHJvcHMuc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5mbyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuZXhwZXJpbWVudGFsKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucHVzaCg8c3VwIGNsYXNzTmFtZT17YmV0YUNsYXNzTmFtZXMuYmV0YX0+KEVYUEVSSU1FTlRBTCk8L3N1cD4pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxzd2l0Y2hJdGVtLmRlZmF1bHQgb25DaGFuZ2U9eyhldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShzZXR0aW5nLmlkLCBldi50YXJnZXQuY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgfX0ga2V5PXtzZXR0aW5nLmlkfSB2YWx1ZT17c2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF19IGNsYXNzTmFtZT17X19TRUNSRVRfRU1PVElPTl9fLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IFwiMjBweFwiXG4gICAgICAgICAgICAgICAgICAgIH0pfSBkaXNhYmxlZD17ZmFsc2V9IGhpZGVCb3JkZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT17c3dpdGNoSXRlbS5kZWZhdWx0LlNpemVzLkRFRkFVTFR9IHRoZW1lPXtzd2l0Y2hJdGVtLmRlZmF1bHQuVGhlbWVzLkRFRkFVTFR9IG5vdGU9e3NldHRpbmcuaW5mb30+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aW5mb31cbiAgICAgICAgICAgICAgICAgICAgPC9zd2l0Y2hJdGVtLmRlZmF1bHQ+XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxmb3JtTW9kdWxlLkZvcm1TZWN0aW9uIHRhZz1cImgyXCIgdGl0bGU9e3RoaXMucHJvcHMudGl0bGV9PlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1TZWN0aW9uPlxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NldHRpbmdzVGl0bGUgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG4vL2gyLTJnV0UtbyB0aXRsZS0zc1pXWVEgc2l6ZTE2LTE0Y0d6NSBoZWlnaHQyMC1tTzJlSU4gd2VpZ2h0U2VtaUJvbGQtTkpleHppIGRhLWgyIGRhLXRpdGxlIGRhLXNpemUxNiBkYS1oZWlnaHQyMCBkYS13ZWlnaHRTZW1pQm9sZCBkZWZhdWx0Q29sb3ItMV9halgwIGRhLWRlZmF1bHRDb2xvciBtYXJnaW5Ub3A2MC0zUEdidEsgZGEtbWFyZ2luVG9wNjAgbWFyZ2luQm90dG9tMjAtMzJxSUQ3IGRhLW1hcmdpbkJvdHRvbTIwXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJoMlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xuXG5sZXQgY2xhc3NuYW1lcyA9IFtdXG5mdW5jdGlvbiBnZXRDbGFzc05hbWUobmFtZSl7XG4gICAgbGV0IGNsYXNzTmFtZSA9IGNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChuYW1lK1wiLVwiKSlcbiAgICBpZihjbGFzc05hbWUpcmV0dXJuIGNsYXNzTmFtZVxuICAgIGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlW25hbWVdKVswXVtuYW1lXVxuICAgIGNsYXNzbmFtZXMucHVzaChjbGFzc05hbWUpXG4gICAgcmV0dXJuIGNsYXNzTmFtZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2hJdGVtIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9ICF0aGlzLnByb3BzLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgdGhpcy5wcm9wcy5jaGVja2VkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuZGF0YS5leHBlcmltZW50YWwpe1xuICAgICAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XG4gICAgICAgICAgICAgICAgY2xhc3NuYW1lcy5wdXNoKEJETW9kdWxlcy5nZXQoZSA9PiBlLmJldGEgJiYgKCFlLmNvbnRhaW5lciAmJiAhZS51c2VyU2V0dGluZ3NWb2ljZSkpWzBdLmJldGEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmZvID0gW1xuICAgICAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInN1cFwiLCB7Y2xhc3NOYW1lOiBnZXRDbGFzc05hbWUoXCJiZXRhXCIpfSwgXCIoRVhQRVJJTUVOVEFMKVwiKVxuICAgICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtdmVydGljYWwgZmxleC1qdXN0aWZ5LXN0YXJ0IGZsZXgtYWxpZ24tc3RyZXRjaCBmbGV4LW5vd3JhcCB1aS1zd2l0Y2gtaXRlbVwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC1ob3Jpem9udGFsIGZsZXgtanVzdGlmeS1zdGFydCBmbGV4LWFsaWduLXN0cmV0Y2ggZmxleC1ub3dyYXBcIn0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2tleTogXCJ0aXRsZVwiLCBjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMyBtYXJnaW4tcmVzZXQgbWFyZ2luLXJlc2V0IHVpLWZsZXgtY2hpbGRcIn0sIHRleHQpLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtrZXk6IFwic3dpdGNoXCIsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWR9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcbiAgICAgICAgKTtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCIvKipcbiAqIFRvb2x0aXAgdGhhdCBhdXRvbWF0aWNhbGx5IHNob3cgYW5kIGhpZGUgdGhlbXNlbHZlcyBvbiBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGV2ZW50cy5cbiAqIFdpbGwgYWxzbyByZW1vdmUgdGhlbXNlbHZlcyBpZiB0aGUgbm9kZSB0byB3YXRjaCBpcyByZW1vdmVkIGZyb20gRE9NIHRocm91Z2hcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cbiAqXG4gKiBOb3RlIHRoaXMgaXMgbm90IHVzaW5nIERpc2NvcmQncyBpbnRlcm5hbHMgYnV0IG5vcm1hbCBET00gbWFuaXB1bGF0aW9uIGFuZCBlbXVsYXRlc1xuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEBtb2R1bGUgRW11bGF0ZWRUb29sdGlwXG4gKiBAdmVyc2lvbiAwLjAuMVxuICovXG5cbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XG5sZXQgVG9vbHRpcENsYXNzZXNcbmZ1bmN0aW9uIGdldFRvb2x0aXBDbGFzc2VzKCl7XG5cdGlmKFRvb2x0aXBDbGFzc2VzKXJldHVybiBUb29sdGlwQ2xhc3Nlc1xuXHRyZXR1cm4gVG9vbHRpcENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInRvb2x0aXBcIiwgXCJ0b29sdGlwQmxhY2tcIik7XG59XG5sZXQgVG9vbHRpcExheWVyc1xuZnVuY3Rpb24gZ2V0VG9vbHRpcExheWVycygpe1xuXHRpZihUb29sdGlwTGF5ZXJzKXJldHVybiBUb29sdGlwTGF5ZXJzXG5cdHJldHVybiBUb29sdGlwTGF5ZXJzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJsYXllclwiLCBcImxheWVyQ29udGFpbmVyXCIpO1xufVxuXG5jb25zdCBnZXRDbGFzcyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XG4gICAgY29uc3QgdXBwZXJDYXNlID0gc2lkZU9yQ29sb3JbMF0udG9VcHBlckNhc2UoKSArIHNpZGVPckNvbG9yLnNsaWNlKDEpO1xuICAgIGNvbnN0IHRvb2x0aXBDbGFzcyA9IGdldFRvb2x0aXBDbGFzc2VzKClbYHRvb2x0aXAke3VwcGVyQ2FzZX1gXTtcbiAgICBpZiAodG9vbHRpcENsYXNzKSByZXR1cm4gdG9vbHRpcENsYXNzO1xuICAgIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgY2xhc3NFeGlzdHMgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xuICAgIHJldHVybiBnZXRDbGFzcyhzaWRlT3JDb2xvcikgPyB0cnVlIDogZmFsc2U7XG59O1xuXG5jb25zdCB0b1B4ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gYCR7dmFsdWV9cHhgO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0ZWRUb29sdGlwIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKiBAcGFyYW0geyhIVE1MRWxlbWVudHxqUXVlcnkpfSBub2RlIC0gRE9NIG5vZGUgdG8gbW9uaXRvciBhbmQgc2hvdyB0aGUgdG9vbHRpcCBvblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGlwIC0gc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvb2x0aXBcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0b29sdGlwXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdHlsZT1ibGFja10gLSBjb3JyZWxhdGVzIHRvIHRoZSBkaXNjb3JkIHN0eWxpbmcvY29sb3JzIChibGFjaywgYnJhbmQsIGdyZWVuLCBncmV5LCByZWQsIHllbGxvdylcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNpZGU9dG9wXSAtIGNhbiBiZSBhbnkgb2YgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJldmVudEZsaXA9ZmFsc2VdIC0gcHJldmVudHMgbW92aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIGlmIGl0IGlzIHRvbyBiaWcgb3IgZ29lcyBvZmZzY3JlZW5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRpc2FibGVkPWZhbHNlXSAtIHdoZXRoZXIgdGhlIHRvb2x0aXAgc2hvdWxkIGJlIGRpc2FibGVkIGZyb20gc2hvd2luZyBvbiBob3ZlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYXR0YWNoRXZlbnRzPXRydWVdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgbGlzdGVuIHRvIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iobm9kZSwgdGV4dCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0Y29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgcHJldmVudEZsaXAgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgYXR0YWNoRXZlbnRzID0gdHJ1ZX0gPSBvcHRpb25zO1xuXHRcdHRoaXMubm9kZSA9IG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcbiAgICAgICAgdGhpcy5sYWJlbCA9IHRleHQ7XG4gICAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHRoaXMuc2lkZSA9IHNpZGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGhpcy5wcmV2ZW50RmxpcCA9IHByZXZlbnRGbGlwO1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG5cbiAgICAgICAgaWYgKCFjbGFzc0V4aXN0cyh0aGlzLnNpZGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTaWRlICR7dGhpcy5zaWRlfSBkb2VzIG5vdCBleGlzdC5gKTtcblx0XHRpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc3R5bGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTdHlsZSAke3RoaXMuc3R5bGV9IGRvZXMgbm90IGV4aXN0LmApO1xuXHRcdFxuXHRcdHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBMYXllcnMoKS5sYXllciArIFwiIFwiICsgZ2V0VG9vbHRpcExheWVycygpLmRpc2FibGVkUG9pbnRlckV2ZW50cztcblxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XG5cblx0XHR0aGlzLmxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwQ29udGVudFxuXG5cdFx0Y29uc3QgcG9pbnRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHBvaW50ZXJFbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcFBvaW50ZXI7XG5cblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZChwb2ludGVyRWxlbWVudCk7XG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5hcHBlbmQodGhpcy5sYWJlbEVsZW1lbnQpO1xuXHRcdHRoaXMuZWxlbWVudC5hcHBlbmQodGhpcy50b29sdGlwRWxlbWVudCk7XG5cblx0XHRpZihhdHRhY2hFdmVudHMpe1xuXHRcdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsICgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblx0XHRcdFx0dGhpcy5zaG93KCk7XG5cdFxuXHRcdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcblx0XHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKHRoaXMubm9kZSkgPiAtMTtcblx0XHRcdFx0XHRcdGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKHRoaXMubm9kZSkpO1xuXHRcdFx0XHRcdFx0aWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaGlkZSgpO1xuXHRcdFx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcblx0XHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XG5cdFx0XHR9KTtcblx0XG5cdFx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmhpZGUoKTtcblx0XHRcdH0pO1xuXHRcdH1cbiAgICB9XG5cbiAgICAvKiogQ29udGFpbmVyIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYXBwZW5kZWQuICovXG4gICAgZ2V0IGNvbnRhaW5lcigpIHsgXG5cdFx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucG9wb3V0cylbMF0ucG9wb3V0cykrXCIgfiAuXCIrVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXJDb250YWluZXIpWzBdLmxheWVyQ29udGFpbmVyKSk7IFxuXHR9XG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xuICAgIGdldCBjYW5TaG93QWJvdmUoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCA+PSAwOyB9XG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBiZWxvdyB0aGUgZWxlbWVudCAqL1xuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiB0byB0aGUgbGVmdCBvZiB0aGUgZWxlbWVudCAqL1xuICAgIGdldCBjYW5TaG93TGVmdCgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoID49IDA7IH1cbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xuXHRnZXQgY2FuU2hvd1JpZ2h0KCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB0aGlzLm5vZGUub2Zmc2V0V2lkdGggKyB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggPD0gVXRpbHMuc2NyZWVuV2lkdGg7IH1cblxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cblx0aGlkZSgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcblx0fVxuXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXG5cdHNob3coKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xuXHRcdHRoaXMuY29udGFpbmVyLmFwcGVuZCh0aGlzLmVsZW1lbnQpO1xuXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XG5cdFx0XHRpZiAodGhpcy5jYW5TaG93QWJvdmUgfHwgKCF0aGlzLmNhblNob3dBYm92ZSAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93QWJvdmUoKTtcblx0XHRcdGVsc2UgdGhpcy5zaG93QmVsb3coKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zaWRlID09IFwiYm90dG9tXCIpIHtcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xuXHRcdFx0ZWxzZSB0aGlzLnNob3dBYm92ZSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJsZWZ0XCIpIHtcblx0XHRcdGlmICh0aGlzLmNhblNob3dMZWZ0IHx8ICghdGhpcy5jYW5TaG93TGVmdCAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93TGVmdCgpO1xuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XG5cdFx0XHRpZiAodGhpcy5jYW5TaG93UmlnaHQgfHwgKCF0aGlzLmNhblNob3dSaWdodCAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93UmlnaHQoKTtcblx0XHRcdGVsc2UgdGhpcy5zaG93TGVmdCgpO1xuXHRcdH1cblx0fVxuXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXG5cdHNob3dBYm92ZSgpIHtcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJ0b3BcIikpO1xuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xuXHR9XG5cbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCBiZWxvdyB0aGUgbm9kZS4gKi9cblx0c2hvd0JlbG93KCkge1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgKyAxMCkpO1xuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XG5cdH1cblxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBsZWZ0IG9mIHRoZSBub2RlLiAqL1xuXHRzaG93TGVmdCgpIHtcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJsZWZ0XCIpKTtcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLSAxMCkpO1xuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xuXHR9XG5cbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXG5cdHNob3dSaWdodCgpIHtcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJyaWdodFwiKSk7XG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcblx0XHR0aGlzLmNlbnRlclZlcnRpY2FsbHkoKTtcblx0fVxuXG5cdGNlbnRlckhvcml6b250YWxseSgpIHtcbiAgICAgICAgY29uc3Qgbm9kZWNlbnRlciA9IHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgKHRoaXMubm9kZS5vZmZzZXRXaWR0aCAvIDIpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xuXHR9XG5cblx0Y2VudGVyVmVydGljYWxseSgpIHtcblx0XHRjb25zdCBub2RlY2VudGVyID0gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArICh0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0IC8gMik7XG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMikpKTtcblx0fVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi90b29sdGlwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGNvbnN0IHtzdHlsZSA9IFwiYmxhY2tcIiwgc2lkZSA9IFwidG9wXCIsIHRleHQgPSBcIlwifSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHRoaXMubm9kZSA9IEJEVjIucmVhY3REb20uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICAgIHRoaXMudG9vbHRpcCA9IG5ldyBUb29sdGlwKHRoaXMubm9kZSwgdGV4dCwge3N0eWxlLCBzaWRlfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRvb2x0aXA7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19YU3ZnIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge3htbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDEyIDEyXCIsIHN0eWxlOiB7d2lkdGg6IFwiMThweFwiLCBoZWlnaHQ6IFwiMThweFwifX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZ1wiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiYWNrZ3JvdW5kXCIsIGZpbGw6IFwibm9uZVwiLCBmaWxsUnVsZTogXCJldmVub2RkXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMCAwaDEydjEySDBcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7Y2xhc3NOYW1lOiBcImZpbGxcIiwgZmlsbDogXCIjZGNkZGRlXCIsIGQ6IFwiTTkuNSAzLjIwNUw4Ljc5NSAyLjUgNiA1LjI5NSAzLjIwNSAyLjVsLS43MDUuNzA1TDUuMjk1IDYgMi41IDguNzk1bC43MDUuNzA1TDYgNi43MDUgOC43OTUgOS41bC43MDUtLjcwNUw2LjcwNSA2XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9kdWxlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5vZGUtZmV0Y2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/BetterDiscordApp/dist/index.min.js.map b/BetterDiscordApp/dist/index.min.js.map index 334101e..8acc9d3 100644 --- a/BetterDiscordApp/dist/index.min.js.map +++ b/BetterDiscordApp/dist/index.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://BetterDiscord/webpack/bootstrap","webpack://BetterDiscord/external \"electron\"","webpack://BetterDiscord/external \"path\"","webpack://BetterDiscord/external \"fs\"","webpack://BetterDiscord/external \"crypto\"","webpack://BetterDiscord/external \"node-fetch\"","webpack://BetterDiscord/external \"events\"","webpack://BetterDiscord/external \"module\"","webpack://BetterDiscord/./src/0globals.js","webpack://BetterDiscord/./src/modules/webpackModules.js","webpack://BetterDiscord/./src/modules/dataStore.js","webpack://BetterDiscord/./src/modules/bdEvents.js","webpack://BetterDiscord/./src/modules/pluginModule.js","webpack://BetterDiscord/./src/ui/tooltip.js","webpack://BetterDiscord/./src/ui/tooltipWrap.js","webpack://BetterDiscord/./src/modules/pluginCertifier.js","webpack://BetterDiscord/./src/modules/contentManager.js","webpack://BetterDiscord/./src/modules/domtools.js","webpack://BetterDiscord/./src/modules/themeModule.js","webpack://BetterDiscord/./src/modules/v2.js","webpack://BetterDiscord/./src/modules/utils.js","webpack://BetterDiscord/./src/modules/settingsPanelSidebar.js","webpack://BetterDiscord/./src/modules/coloredText.js","webpack://BetterDiscord/./src/modules/24hour.js","webpack://BetterDiscord/./src/ui/settingsTitle.js","webpack://BetterDiscord/./src/ui/tabBarSeparator.js","webpack://BetterDiscord/./src/ui/publicservers/serverCard.js","webpack://BetterDiscord/./src/modules/hooks.js","webpack://BetterDiscord/./src/ui/publicservers/publicServers.js","webpack://BetterDiscord/./src/svg/bug_hunter.jsx","webpack://BetterDiscord/./src/svg/circus.jsx","webpack://BetterDiscord/./src/modules/distant.js","webpack://BetterDiscord/./src/modules/Layers.jsx","webpack://BetterDiscord/./src/modules/publicServers.js","webpack://BetterDiscord/./src/modules/voiceMode.js","webpack://BetterDiscord/./src/modules/classNormalizer.js","webpack://BetterDiscord/./src/modules/devMode.js","webpack://BetterDiscord/./src/ui/components/switch.jsx","webpack://BetterDiscord/./src/ui/switch.js","webpack://BetterDiscord/./src/ui/margintop.jsx","webpack://BetterDiscord/./src/ui/settingsGroup.jsx","webpack://BetterDiscord/./src/ui/sectionedSettingsPanel.js","webpack://BetterDiscord/./src/ui/checkbox.js","webpack://BetterDiscord/./src/ui/cssEditorDetached.js","webpack://BetterDiscord/./src/ui/cssEditor.js","webpack://BetterDiscord/./src/ui/errorBoundary.js","webpack://BetterDiscord/./src/ui/contentColumn.js","webpack://BetterDiscord/./src/ui/reloadIcon.js","webpack://BetterDiscord/./src/ui/xSvg.js","webpack://BetterDiscord/./src/ui/icons/edit.jsx","webpack://BetterDiscord/./src/ui/icons/delete.jsx","webpack://BetterDiscord/./src/ui/addoncard.jsx","webpack://BetterDiscord/./src/ui/icons/downarrow.jsx","webpack://BetterDiscord/./src/ui/components/dropdown.jsx","webpack://BetterDiscord/./src/ui/icons/search.jsx","webpack://BetterDiscord/./src/ui/components/search.jsx","webpack://BetterDiscord/./src/ui/addonlist.jsx","webpack://BetterDiscord/./src/modules/CustomRichPresence.js","webpack://BetterDiscord/./src/ui/presenceSettings.jsx","webpack://BetterDiscord/./src/ui/AccountInfos.jsx","webpack://BetterDiscord/./src/modules/AntiAdDM.js","webpack://BetterDiscord/./src/modules/blurPrivate.js","webpack://BetterDiscord/./src/modules/disableTyping.js","webpack://BetterDiscord/./src/ui/ApiPreview.jsx","webpack://BetterDiscord/./src/ui/icons/history.jsx","webpack://BetterDiscord/./src/modules/popoutWindow.js","webpack://BetterDiscord/./src/ui/components/textinput.jsx","webpack://BetterDiscord/./src/ui/TextInputSetting.jsx","webpack://BetterDiscord/./src/modules/settingsPanel.js","webpack://BetterDiscord/./src/ui/bdLogo.js","webpack://BetterDiscord/./src/svg/Lightcord.jsx","webpack://BetterDiscord/./src/modules/emojiModule.js","webpack://BetterDiscord/./src/modules/core.js","webpack://BetterDiscord/./src/modules/bdApi.js","webpack://BetterDiscord/./src/localStorageFix.js","webpack://BetterDiscord/./src/index.js","webpack://BetterDiscord/./src/loadingIcon.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","minimumDiscordVersion","currentDiscordVersion","window","DiscordNative","remoteApp","getVersion","minSupportedVersion","bbdVersion","bbdChangelog","description","changes","title","type","items","settings","id","info","implemented","hidden","cat","category","experimental","process","platform","default","defaultCookie","settingsCookie","settingsRPC","defaultRPC","Date","now","lightcordSettings","defaultLightcordSettings","bdpluginErrors","bdthemeErrors","bdConfig","BetterDiscordConfig","bdthemes","bdplugins","pluginCookie","themeCookie","req","webpackJsonp","push","__extra_id__","find","filter","mod","findAll","findByProps","propNames","every","prop","undefined","findByPrototypes","protoNames","protoProp","findByDisplayName","displayName","Lightcord","BetterDiscord","WebpackModules","fs","path","releaseChannel","globals","app","getReleaseChannel","dataPath","env","APPDATA","join","HOME","XDG_CONFIG_HOME","constructor","this","data","stable","canary","ptb","pluginData","DataStore","initialize","existsSync","BDFile","writeFileSync","JSON","stringify","parse","readFileSync","settingsFile","__non_webpack_require__","unlinkSync","assign","setBDData","err","console","error","Utils","alert","_injectionPath","_configFile","resolve","injectionPath","_BDFile","_settingsFile","getPluginFile","pluginName","ContentManager","pluginsFolder","getSettingGroup","setSettingGroup","getBDData","getPluginData","setPluginData","deletePluginData","EventEmitter","super","BDEvents","dispatch","eventName","args","emit","off","eventAction","removeListener","PluginModule","loadPlugins","async","loadPluginData","splice","plugins","keys","length","plugin","getName","load","file","filename","message","stack","start","showToast","Promise","setTimeout","savePluginData","remote","getCurrentWebContents","on","channelSwitch","startPlugin","reload","stopPlugin","stop","enablePlugin","enable","disablePlugin","disable","togglePlugin","toggle","loadPlugin","loadContent","showContentErrors","values","log","unloadPlugin","filenameOrName","bdplugin","unloadContent","delete","fullPath","reloadPlugin","enabled","reloadContent","edit","shell","openItem","updatePluginList","results","loadNewContent","added","removed","saved","newMessage","onMessage","onSwitch","rawObserver","e","observer","TooltipClasses","TooltipLayers","getTooltipClasses","getTooltipLayers","getClass","sideOrColor","upperCase","toUpperCase","slice","tooltipClass","classExists","toPx","EmulatedTooltip","node","text","options","style","side","preventFlip","disabled","attachEvents","jQuery","label","toLowerCase","element","document","createElement","className","layer","disabledPointerEvents","tooltipElement","tooltip","labelElement","tooltipContent","pointerElement","tooltipPointer","append","addEventListener","show","MutationObserver","mutations","forEach","mutation","nodes","Array","from","removedNodes","directMatch","indexOf","parentMatch","some","parent","contains","hide","disconnect","observe","body","subtree","childList","querySelector","removeDa","BDModules","popouts","layerContainer","getBoundingClientRect","top","offsetHeight","screenHeight","left","offsetWidth","screenWidth","remove","_className","textContent","container","canShowAbove","showAbove","showBelow","canShowBelow","canShowLeft","showLeft","showRight","canShowRight","classList","add","setProperty","centerHorizontally","centerVertically","nodecenter","React","Component","props","BDV2","reactDom","findDOMNode","Tooltip","componentWillUnmount","render","children","cache","cache2","PluginCertifier","patch","attachment","nextTick","getElementById","url","startsWith","endsWith","nodeFetch","headers","electron","sendSync","then","res","status","Error","hash","crypto","Buffer","alloc","chunk","concat","update","hashResult","digest","hashToUrl","checkHash","result","div","childNodes","flowerStarModule","flowerStarContainer","childModule","childContainer","suspect","parentNode","borderColor","nextNode","child","tagName","preventDefault","stopImmediatePropagation","showConfirmationModal","harm","confirmText","cancelText","danger","onCancel","onConfirm","href","includes","react","tooltipWrap","width","height","svg","viewBox","x","y","mask","fill","pointerEvents","official","span","display","float","flowerStar","stroke","color","onClick","link","getKeyedArray","content","buffer","installPath","contentManager","_pluginsFolder","_themesFolder","catch","cursor","fill-rule","class","renderToElements","elem","processAttachment","isTrusted","tests","threats","checkViruses","resultCallback","removeCallback","isHarmful","no_comments","toString","replace","trim","test","removeComment","scrpt","exec","split","pop","json","processFile","__path","isFromLoader","createReadStream","addonCache","timestamp","saveAddonCache","basename","obj","arr","k","save","generateKey","encryptSettingsCache","cipher","encrypted","final","Api","ensureExported","ObjectStorage","localStorageModule","localStorage","impl","set","btoa","setInterval","val","safeJSONParse","atob","isArray","Module","globalPaths","MetaError","originalJSRequire","_extensions","originalCSSRequire","splitRegex","escapedAtRegex","hasPatched","timeCache","watchers","patchExtensions","getContentRequire","realpathSync","loadAddonCertifierCache","dataStore","decipher","decrypted","decryptSettingsCache","watchContent","contentType","isPlugin","baseFolder","themesFolder","fileEnding","watch","persistent","eventType","statSync","code","pluginModule","themeModule","unloadTheme","isFile","stats","mtime","getTime","loadTheme","reloadTheme","unwatchContent","close","extractMeta","firstLine","parseOldMeta","parseNewMeta","meta","rawMeta","substring","lastIndexOf","parsed","testJSON","format","block","out","field","accum","line","charAt","substr","self","originalRequire","possiblePath","Reflect","apply","arguments","stripBOM","atimeMs","modified","mtimeMs","size","css","_compile","isEmpty","warn","makePlaceholderPlugin","getAuthor","getDescription","source","website","escapeID","isLoaded","cantUnload","basedir","files","readdirSync","contentList","map","f","errors","loadAllContent","loadThemes","DOMTools","head","script","src","onload","timing","_","duration","performance","requestAnimationFrame","animate","time","timeFraction","progress","selector","parseHTML","NodeList","nodeType","query","baseElement","querySelectorAll","html","fragment","template","innerHTML","cloneNode","textNode","createTextNode","spanElement","nodeValue","classes","flat","classname","indicator","oldName","newName","thisNode","thatNode","prepend","targetNode","insertBefore","nextSibling","newNode","nextElementSibling","next","matches","previous","previousElementSibling","num","indexInParent","parentElement","parents","closest","attribute","global","getComputedStyle","parseInt","clientWidth","clientHeight","_listeners","event","delegate","callback","namespace","hasDelegate","eventFunc","target","cancel","removeEventListener","listeners","newCancel","findIndex","matchFilter","listener","defaultFilter","list","__offAll","onMount","wrappedCallback","unsubscribe","subscribe","addedNodes","onMountChange","onUnmount","elements","domWrapper","appendChild","Element","DOM","ThemeModule","loadThemeData","themes","theme","addStyle","unescape","saveThemeData","enableTheme","bdEvents","version","disableTheme","removeStyle","toggleTheme","bdtheme","updateThemeList","editorDetached","protect","theModule","isDefault","clear","sort","getToken","getEmail","showToken","proxy","Proxy","getOwnPropertyDescriptor","func","__proto__","findByUniqueProperties","internal","getInternalInstance","V2","joinBD1","InviteActions","acceptInviteAndTransitionToInviteChannel","leaveBD1","GuildActions","leaveGuild","joinBD2","leaveBD2","joinLC","leaveLC","anchor","anchorUnderlineOnHover","guildsWrapper","wrapper","unreadMentionsBar","guilds","guildsError","selected","pill","blobContainer","defaultProps","search","submit","activateRagingDemon","dismiss","openDM","userId","selfId","UserStore","getCurrentUser","privateChannelId","ChannelStore","getDMFromUserId","PrivateChannelActions","selectPrivateChannel","ChannelActions","openPrivateChannel","parseSettings","reduce","setting","Math","max","documentElement","innerWidth","innerHeight","_windowConfigFile","transparent","frame","charCodeAt","channelTextArea","titleWrapper","textarea","focus","selectionStart","selectionEnd","execCommand","moduleName","groupCollapsed","groupEnd","string","replacement","RegExp","method","params","what","methodName","before","after","instead","once","silent","force","origMethod","canceled","thisObject","methodArguments","cancelPatch","originalMethod","callOriginalMethod","returnValue","tempRet","suppressErrors","__monkeyPatched","__originalMethod","sidebar","hasNotice","form","bottom","toastWrapper","icon","timeout","toastElem","innerText","modalModule","modal","inner","hideOnFullscreen","headerModule","header","responsiveWidthMobile","footer2Module","focusLock","backdrop","backdropWithLayer","footer","addClass","closingListeners","onClose","pluginErrors","themeErrors","generateTab","el","tabs","removeClass","scroller","index","click","ModalStack","ChangelogClasses","TextElement","FlexChild","Titles","Changelog","selectable","MarkdownParser","image","subtitle","ce","changelogItems","entry","margin","marginTop","renderHeader","Child","grow","shrink","tag","Tags","H4","Sizes","SMALL","Colors","STANDARD","date","renderFooter","Anchor","AnchorClasses","joinSupportServer","stopPropagation","supportLink","defaultFooter","onScroll","ModalActions","Markdown","ConfirmationModal","emptyFunction","openModal","red","modalKey","V2_SettingsPanel_Sidebar","panels","register","panel","component","getComponent","Settings","devMode","section","LCitems","LCDevItems","injectColoredText","cancelColoredText","MessageComponent","monkeyPatch","childrenMessageContent","messageContent","originalType","roleColor","colorString","removeColoredText","classNameMarkup","markup","inject24Hour","cancel24Hour","twelveHour","convert","matched","match","padStart","cancelCozy","TimeFormatter","cancelCompact","remove24Hour","V2C_SettingsTitle","reactComponent","V2C_TabBarSeparator","V2C_ServerCard","server","iconUrl","fallback","state","imageError","joined","guildList","identifier","cardModule","card","cardPrimary","flexModule","flexChild","_horizontalReverse","wrapModule","noWrap","streamerModeEnabled","marginBottom8","pinned","ref","onError","handleError","draggable","horizontal","members","flex","categories","minHeight","backgroundColor","setState","useState","SettingsView","V2C_PublicServers","setInitialState","changeCategory","searchKeyDown","checkConnection","connect","GuildStore","AvatarDefaults","SortedGuildStore","hooks","componentDidMount","selectedCategory","loading","servers","connection","user","categorySlugs","fetch","searchEndPoint","end","term","categoryButtons","total","serverCard","acceptInvite","invite_code","joinEndPoint","credentials","windowOptions","round","screenX","screenY","win","joinWindow","webContents","loadURL","setMenuBarVisibility","resizable","maximizable","minimizable","alwaysOnTop","center","webPreferences","nodeIntegration","getFlattenedGuildIds","defaultList","DEFAULT_AVATARS","ServerCard","online","nativejoin","floor","random","response","onSetSection","sections","searchInput","getThis","setValue","marginLeft","serchinput","refs","searchinput","onKeyDown","onChange","placeholder","maxLength","which","notConnected","columnModule","contentColumnDefault","contentColumn","SettingsTitle","bdServer","marginBottom","lineHeight","forceUpdate","useEffect","TabBarSeparator","fontSize","username","discriminator","padding","BugHunterBadge","Circus","xmlns","cx","cy","uuidv4","awaitingBadgesPromises","badgesToFetch","_cache","badges","DistantServer","newPromise","badge","Constants","defaultUsers","fetchedBadges","users","handleRequest","Routes","responseBody","promise","user_id","LightcordError","route","SERVER_URL","Authorization","reject","scopes","layers","Layers","inject","isInjected","classNameLayers","v2","ReactInstance","FindReact","createLayer","getLayer","lay","LayerModules","Layer","animation","Value","keydown","ev","componentWillEnter","toValue","componentWillLeave","interpolation","interpolate","inputRange","outputRange","opacity","transform","scale","Div","__SECRET_EMOTION__","position","right","overflow","WebkitBoxOrient","WebkitBoxDirection","msFlexDirection","flexDirection","zIndex","paddingTop","_appendButton","V2_PublicServers","rootId","btn","guildClasses","listItem","circleButtonMask","classNametutorialContainer","downloadProgress","tutorialContainer","button","addButton","guildPatch","GuildList","webpackModules","GuildListOld","removeButton","randClass","ClassNormalizer","unpatchClassModules","moduleFilter","revertElement","patchClassModules","normalizeElement","patchDOMMethods","patchClassModule","unpatchClassModule","shouldIgnore","isNaN","baseClassName","componentName","classNames","normalClass","camelCase","newString","clen","newClass","toRemove","DOMTokenList","token","tokens","debugListener","copySelectorListener","startDebugListener","startCopySelector","stopDebugListener","stopCopySelector","getSelector","classLayer","classItems","menu","cm","cmWrap","styleFlexible","accommodateScrollbar","clientY","clientX","setAttribute","scrollerClasses","scrollerWrap","scrollerThemed","themeGhostHairline","removeCM","keyCode","cmg","cmi","item","labelContainer","colorDefault","NativeModule","copy","queryAll","focused","separator","scrollHeight","names","unshift","ownerDocument","entries","Switch","checked","switch","Components","inputs","classnames","getClassName","SwitchItem","beta","userSettingsVoice","formModule","switchItem","betaClassNames","marginModule","marginTop60","MarginTop","V2C_SettingsGroup","renderOldSettings","buttonComponent","componentDidCatch","errInfo","FormSection","FormText","hideBorder","DEFAULT","Themes","note","setImmediate","V2C_SectionedSettingsPanel","SettingsGroup","V2C_Checkbox","checkboxElement","checkbox","checkboxInner","V2C_CssEditorDetached","updateCss","saveCss","editor","ace","setTheme","session","setMode","setShowPrintMargin","setFontSize","destroy","updateLineCount","lineCount","lines","lineNumbers","indentUnit","scrollbarStyle","_ccss","ccss","_root","injectRoot","detachedRoot","insertAfter","Checkbox","borderRadius","borderRight","borderLeft","saveSettings","attach","unmountComponentAtNode","root","getValue","V2C_CssEditor","detachedEditor","detach","detached","componentDidUpdate","prevProps","prevState","codeMirror","arg","droot","injectDetachedRoot","BDErrorBoundary","hasError","originalRender","configurable","V2C_ContentColumn","V2C_ReloadIcon","V2C_XSvg","fillRule","Edit","Delete","anchorClasses","V2C_PluginCard","showSettings","hasSettings","addon","getSettingsPanel","settingsPanel","reloads","trusted","closeSettings","panelRef","current","settingsOpen","settingspanel","cardNode","cTop","scrollTop","cBottom","eTop","offsetTop","eBottom","isHidden","thisNodeOffset","offset","containerOffset","original","endPoint","getString","XSvg","dangerouslySetInnerHTML","__html","buildTitle","author","nameIndex","versionIndex","authorIndex","LayerStack","popLayer","makeLink","makeButton","action","unmounted","links","invite","tester","donate","patreon","settingsComponent","authorId","authorLink","isScanning","DownArrow","Select","open","dropdown","createRef","showMenu","hideMenu","opt","isOpen","Search","onFocus","onBlur","CardList","ascending","isPlugins","cookie","manager","reverse","onAddonChanges","openFolder","openPath","confirmDelete","BdApi","toLocaleLowerCase","getProps","getAddons","sortedAddons","a","b","cap","first","second","localeCompare","rendered","renderCheckUpdates","ZeresPluginLibrary","PluginUpdates","checkAll","tooltipIsShowing","onMouseLeave","Button","look","hoverColor","onRightClick","checkUpdateButton","refreshIcon","addonCards","sortOptions","directions","dispatcher","Dispatcher","ActionTypes","pid","game","application_id","details","timestamps","assets","large_image","small_image","sendGame","LOCAL_ACTIVITY_UPDATE","socketId","activity","formatedGame","applicationId","getAssets","V2C_PresenceSettingsModules","V2C_PresenceSettings","preview","isfetching","fetchAssets","assetComponents","Set","updateWhenFetched","comp","defaultSetting","RPCProps","CustomRichPresence","asset","updatePreview","marginBottom20","optionsComponents","RpcPreview","ohgodohfuck","openExternal","_optionsComponents","InputText","InputNumber","InputChoice","choices","inputTextModules","InputNumberModules","InputChoiceModules","PureComponent","removeKeybind","defaultMarginh5","colorStandard","size32","_horizontal","inputMini","size16","size20","input","TextInput","lastEdited","isTiming","rowModule","marginModule2","colorModule","sizeModule","inputModule","sizeModule2","row","size14","h5","Divider","colorTransparent","clipboard","Dropdown","emptyClasses","popoutModules","UserPopoutComponent","PopoutProps","profileModules","UserProfileComponent","ProfileProps","connectedProfileStore","DividerModules","divider","dividerDefault","active","changeTab","tab","setActive","Tab","rpc","isActive","Profile","Popout","PresenceErrorCatcher","emptyStateImage","emptyState","emptyStateHeader","emptyStateSubtext","role","tabindex","UserPopout","userModule","render1","guildId","channelId","disableUserProfileLink","_UserPopout","popout","excludeProperties","UserProfile","render2","render3","render4","profile","scrollbarModule1","scrollbarGhostHairline","GuildModule","getGuilds","relationShipModule","getRelationships","sessionModule","getSessions","V2C_AccountInfos","CodeContent","getProfileValue","language","getStatistics","getSessionValue","sessionsRaw","sessions","sessionId","clientInfo","os","client","activities","repeat","createdAt","avatarURL","avatar","getAvatarURL","getDate","getMonth","getFullYear","getHours","getMinutes","getSeconds","flags","hasPremiumSubscription","email","mfaEnabled","mobile","phone","verified","nsfwAllowed","relations","friends","isFriend","blocked","isBlocked","hightlightJS","highlight","messageModule1","messageModule2","listLanguages","DiscordModules","ChannelModule","getChannel","hasChannel","addRelationship","DMModule","closePrivateChannel","antiDM","bot","guild_id","channel","channel_id","EmbedsContains","location","embeds","embed","fields","selectors","standardSidebarView","defaultClassName","selects","userSettingsAccount","paymentSourceRow","subText","descriptionWrapper","viewBody","userSettingsSecurity","getSelectors","startTyping","typingModule","stopTyping","DisableTyping","ApiPreview","states","allComponents","general","AlertBox","compName","compPath","ComponentPreview","AllPreviews","getStrForProp","lang","String","$$typeof","for","generateCode","openTag","propStrings","childrenProp","str","propObject","isLast","childrenData","help","success","SettingSubTitle","searchable","Tabs","ErrorCatcher","CodeBlock","History","windows","Map","init","popoutModule","getWindow","applyThemes","removeThemes","themeName","existing","removeAttribute","emitChange","TextInputSetting","BDSidebarHeader","sidebarComponents","Separator","Header","Item","changelogButton","showChangelogModal","isClearingCache","updateSettings","registerComponents","makeComponent","lightcordComponent","PresenceComponent","AccountInfosComponent","ApiPreviewComponent","coreComponent","customCssComponent","renderAddonPane","getSettings","publicServersModule","voiceMode","tfHour","coloredText","setWindowPreference","dMode","callRingingBeat","settingsStore","showCurrentGame","updateRemoteSettings","ipcRenderer","AntiAdDM","blurPrivate","disableTyping","appSettings","relaunch","popoutWindow","core","methods","NotificationsUseShim","loadSettings","renderSidebar","SectionedSettingsPanel","coreSettings","isChecked","ipc","send","actual","clearable","invoke","argv","clearCache","PresenceSettings","CssEditor","ContentList","prefix","SettingComponent","BDLogo","clipRule","strokeLinecap","strokeLinejoin","LightcordLogo","x1","y1","x2","y2","gradientTransform","gradientUnits","stopColor","EmojiRegex","CustomEmojiModule","CustomEmoji","EmojiModuleApi","getCustomEmojiById","AutocompleteModule","AutoCompletionTemplates","getAutocompleteOptions","EmojiModuleQuery","queryEmojiResults","Messages","EMOJI_MATCHING","guildModule","getGuild","isFetching","emojiSearch","getDisambiguatedEmojiContext","LIGHTCORD_EMOJIS","arg1","arg2","condition","setEmojiUsable","queryResults","renderResults","D","emojis","EMOJI","Emoji","emoji","uniqueName","sentinel","guild","getPlainText","isAnimated","animated","managed","originalName","getRawText","cancelEmojiRender","cancelEmoteRender","getNestedProp","newContent","hasParsed","raw","words","word","emojiId","jumboable","shift","u","onHover","R","Title","classNameLayer","classNameSocialLinks","classNameModal","EmojiFilterModule","isEmojiDisabled","isUsable","usable","surrogates","diversity","Core","setConfig","config","hasStarted","setMethods","ED","WebSocket","patchAttributes","initSettings","checkForGuilds","initializeSettings","getElementsByClassName","initObserver","previousVersion","EmojiModule","patchSocial","patchGuildPills","patchGuildListItems","patchGuildSeparator","patchMessageHeader","patchMemberList","patchAttachment","haveInstalledDefault","logo","attribsPatchs","cancelPatchAttributes","DiscordTag","DiscordTagComp","badgeDiv","TooltipWrap","applyBadges","timesChecked","blob","deferLoaded","readyState","injectExternals","getPredicateSections","settingModule","poped","mlen","animating","socialLinks","getAttribute","socialPatch","TabBar","socialModule1","newOne","returnVal","classNameColorMuted","sizes","classNameVersionHash","colorMuted","versionHash","branch","buildInfo","additional","size12","commit","originalVersions","chat","blockDiv","distant","getBadges","scope","div2","guildListItemsPatch","GuildClasses","getGuildClasses","listItemClass","blobClass","GuildComponent","return","guildData","unread","audio","video","animatable","guildPillPatch","guildPill","hovered","guildSeparatorPatch","Guilds","guildComponents","GuildSeparator","AttachmentPatch","Attachment","messageHeaderPatch","MessageHeader","memberListPatch","MemberListItem","renderDecorators","updateInjector","ReactDom","ReactComponent","WindowConfigFile","getAllWindowPreferences","getWindowPreference","addScript","removeScript","mainCore","protos","getData","loadData","saveData","setData","deleteData","onRemoved","isPluginEnabled","isThemeEnabled","isSettingEnabled","enableSetting","disableSetting","toggleSetting","makeAddonAPI","folder","isEnabled","getAll","Plugins","contentWindowGetter","HTMLIFrameElement","contentWindow","writable","Function","oOpen","XMLHttpRequest","localStorageFix","v2Loader","loadingIcon","deprecateGlobal","globalKeys","Globals","CoreWrapper"],"mappings":"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","file":"index.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","module.exports = require(\"electron\");","module.exports = require(\"path\");","module.exports = require(\"fs\");","module.exports = require(\"crypto\");","module.exports = require(\"node-fetch\");","module.exports = require(\"events\");","module.exports = require(\"module\");","export const minimumDiscordVersion = \"0.0.308\";\nexport const currentDiscordVersion = (window.DiscordNative && window.DiscordNative.remoteApp && window.DiscordNative.remoteApp.getVersion && window.DiscordNative.remoteApp.getVersion()) || \"0.0.308\";\nexport const minSupportedVersion = \"0.3.0\";\nexport const bbdVersion = \"0.3.5\";\nexport const bbdChangelog = {\n description: \"Big things are coming.\",\n changes: [\n {\n title: \"Bug Fixes\",\n type: \"fixed\",\n items: [\n \"Some fixes related to showing modals in the `BdApi`.\",\n \"Fixed the open folder buttons for plugins and themes\"\n ]\n }\n ]\n};\n\nexport const settings = {\n \"Custom css live update\": {id: \"bda-css-0\", info: \"\", implemented: true, hidden: true, cat: \"core\"},\n \"Custom css auto udpate\": {id: \"bda-css-1\", info: \"\", implemented: true, hidden: true, cat: \"core\"},\n \"BetterDiscord Blue\": {id: \"bda-gs-b\", info: \"Replace Discord blue with BD Blue\", implemented: false, hidden: false, cat: \"core\"},\n\n /* Core */\n /* ====== */\n \"Public Servers\": {id: \"bda-gs-1\", info: \"Display public servers button\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Minimal Mode\": {id: \"bda-gs-2\", info: \"Hide elements and reduce the size of elements.\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Voice Mode\": {id: \"bda-gs-4\", info: \"Only show voice chat\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Hide Channels\": {id: \"bda-gs-3\", info: \"Hide channels in minimal mode\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Dark Mode\": {id: \"bda-gs-5\", info: \"Make certain elements dark by default(wip)\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Voice Disconnect\": {id: \"bda-dc-0\", info: \"Disconnect from voice server when closing Discord\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"24 Hour Timestamps\": {id: \"bda-gs-6\", info: \"Replace 12hr timestamps with proper ones\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Colored Text\": {id: \"bda-gs-7\", info: \"Make text color the same as role color\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Normalize Classes\": {id: \"fork-ps-4\", info: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n\n /* Content */\n \"Content Error Modal\": {id: \"fork-ps-1\", info: \"Shows a modal with plugin/theme errors\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Scan Plugins\": {id: \"fork-ps-6\", info: \"Scan plugins for any threat that can be hidden inside.\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Show Toasts\": {id: \"fork-ps-2\", info: \"Shows a small notification for important information\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Scroll To Settings\": {id: \"fork-ps-3\", info: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Automatic Loading\": {id: \"fork-ps-5\", info: \"Automatically loads, reloads, and unloads plugins and themes\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Enable Edit Button\": {id: \"fork-ps-7\", info: \"Enable an Edit Button on the plugin and theme panel.\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Themes in Popout Window\": {id: \"lightcord-9\", info: \"Enable themes in Popout Window. (For example, when detaching screenshare.)\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\", experimental: true},\n\n /* Developer */\n \"Developer Mode\": \t {id: \"bda-gs-8\", info: \"Developer Mode Toggle\", implemented: true, hidden: false, cat: \"core\", category: \"developer settings\"},\n \"Copy Selector\":\t\t\t {id: \"fork-dm-1\", info: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\", implemented: true, hidden: false, cat: \"core\", category: \"developer settings\"},\n\n /** Lightcord */\n \"Disable BetterDiscord\": {id: \"bd-disable\", info: \"Disable Betterdiscord (plugins, themes, etc) (Not implemented).\", implemented: false, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Blur Personal Information\": {id: \"lightcord-6\", info: \"Blur sensitive informations like email, payment infos and more.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Calling Ring Beat\": {id: \"lightcord-2\", info: \"Enable Discord's special calling beat.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Developer Options\": {id: \"lightcord-1\", info: \"Enable Discord's & Lightcord's Internal Developer Options. This allow the \\\"Experiments\\\" tab, the \\\"Developer Options\\\" tab and the \\\"Lightcord Api\\\" section.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Ad Block\": {id: \"lightcord-4\", info: \"Block any BOT that dms you with an invite link. Even in an embed.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Enable Lightcord Servers\": {id: \"lightcord-5\", info: \"Enable Lightcord's servers. Disabling this will disable custom badges.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Disable typing\": {id: \"lightcord-7\", info: \"Don't let other see you're typing.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Lightcord Tabs\": {id: \"lightcord-8\", info: \"Allows you to launch multiple instances of Lightcord in the same window.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\", experimental: true},\n \"Use Notification Shim\": {id: \"lightcord-10\", info: \"Basically don't use Windows's Notifications.\", implemented: true, hidden: process.platform !== \"win32\", cat: \"lightcord\", category: \"Lightcord\"},\n \"Emoji Prefix\": {id: \"lightcord-11\", info: \"Change the prefix used for free nitros emojis. Please put only one character. Default: .\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\", default: \".\"},\n\n /** Lightcord Window */\n \"Always-on-Top\": {id: \"lightcord-3\", info: \"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Window\"},\n \"No Window Bounds\": {id: \"no_window_bound\", info: \"Disable Window Bounds. Can be useful if you use a window manager.\", implemented: true, hidden: process.platform !== \"linux\", cat: \"lightcord\", category: \"Window\"},\n \"Enable Glasstron\": {id: \"enable_glasstron\", info: \"Enable Glasstron. If you're not using transparent themes, this can reduce lag.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Window\"},\n \n /** RichPresence */\n \"Enable\": {id: \"lightcord-presence-1\", info: \"Enable RichPresence below.\", implemented: true, hidden: false, cat: \"status\"}\n};\n\nexport const defaultCookie = {\n \"bda-gs-1\": true,\n \"bda-gs-2\": false,\n \"bda-gs-3\": false,\n \"bda-gs-4\": false,\n \"bda-gs-5\": true,\n \"bda-gs-6\": false,\n \"bda-gs-7\": false,\n \"bda-gs-8\": false,\n \"bda-es-0\": true,\n \"bda-es-1\": true,\n \"bda-es-2\": true,\n \"bda-es-4\": false,\n \"bda-es-6\": true,\n \"bda-es-7\": true,\n \"bda-gs-b\": false,\n \"bda-es-8\": true,\n \"bda-dc-0\": false,\n \"bda-css-0\": false,\n \"bda-css-1\": false,\n \"bda-es-9\": true,\n \"fork-dm-1\": false,\n \"fork-ps-1\": true,\n \"fork-ps-2\": true,\n \"fork-ps-3\": true,\n \"fork-ps-4\": true,\n \"fork-ps-5\": true,\n \"fork-ps-6\": true,\n \"fork-ps-7\": false,\n \"fork-es-2\": false,\n \"fork-es-3\": true,\n \"fork-wp-1\": false,\n \"fork-wp-2\": false,\n \"fork-beta\": true,\n \"lightcord-1\": false,\n \"lightcord-2\": true,\n \"lightcord-presence-1\": false,\n \"lightcord-3\": false,\n \"lightcord-4\": false,\n \"lightcord-5\": true,\n \"lightcord-6\": true,\n \"lightcord-7\": false,\n \"lightcord-8\": false,\n \"lightcord-9\": false,\n \"lightcord-10\": false,\n \"no_window_bound\": false,\n};\n\n\nexport const settingsCookie = {};\n\nexport const settingsRPC = {};\nexport const defaultRPC = {\n \"name\": \"Lightcord\",\n \"application_id\": \"711416957718757418\",\n \"state\": \"Lightcord Client\",\n \"details\": \"Browsing Discord\",\n \"timestamps.start\": Date.now(),\n \"assets.small\": null,\n \"assets.large\": \"712323821037682791\"\n}\n\nexport const lightcordSettings = {};\nexport const defaultLightcordSettings = {};\n\nexport const bdpluginErrors = [];\nexport const bdthemeErrors = []; // define for backwards compatibility\n\nexport const bdConfig = Object.create(BetterDiscordConfig);\n\nexport const bdthemes = {};\nexport const bdplugins = {};\n\nexport const pluginCookie = {};\nexport const themeCookie = {};","const req = webpackJsonp.push([[], {__extra_id__: (module, exports, req) => module.exports = req}, [[\"__extra_id__\"]]]);\r\ndelete req.m.__extra_id__;\r\ndelete req.c.__extra_id__;\r\nconst find = (filter) => {\r\n for (const i in req.c) {\r\n if (req.c.hasOwnProperty(i)) {\r\n const m = req.c[i].exports;\r\n if (m && m.__esModule && m.default && filter(m.default)) return m.default;\r\n if (m && filter(m))\treturn m;\r\n }\r\n }\r\n // console.warn(\"Cannot find loaded module in cache\");\r\n return null;\r\n};\r\n\r\nconst findAll = (filter) => {\r\n const modules = [];\r\n for (const i in req.c) {\r\n if (req.c.hasOwnProperty(i)) {\r\n const m = req.c[i].exports;\r\n if (m && m.__esModule && m.default && filter(m.default)) modules.push(m.default);\r\n else if (m && filter(m)) modules.push(m);\r\n }\r\n }\r\n return modules;\r\n};\r\n\r\nconst findByProps = (...propNames) => find(module => propNames.every(prop => module[prop] !== undefined));\r\nconst findByPrototypes = (...protoNames) => find(module => module.prototype && protoNames.every(protoProp => module.prototype[protoProp] !== undefined));\r\nconst findByDisplayName = (displayName) => find(module => module.displayName === displayName);\r\n\r\nlet mod = {find, findAll, findByProps, findByPrototypes, findByDisplayName};\r\nexport default mod\r\n\r\nwindow.Lightcord.BetterDiscord.WebpackModules = mod","import Utils from \"./utils\";\nimport ContentManager from \"./contentManager\";\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst releaseChannel = DiscordNative.globals ? DiscordNative.globals.releaseChannel : DiscordNative.app ? DiscordNative.app.getReleaseChannel() : \"stable\";\n\nlet dataPath = \"\";\nif (process.platform === \"win32\") dataPath = process.env.APPDATA;\nelse if (process.platform === \"darwin\") dataPath = path.join(process.env.HOME, \"Library\", \"Preferences\");\nelse dataPath = process.env.XDG_CONFIG_HOME ? process.env.XDG_CONFIG_HOME : path.join(process.env.HOME, \".config\");\ndataPath = path.join(dataPath, \"BetterDiscord\");\n\nexport default new class DataStore {\n constructor() {\n this.data = {settings: {stable: {}, canary: {}, ptb: {}}};\n this.pluginData = {};\n window.Lightcord.BetterDiscord.DataStore = this\n }\n\n initialize() {\n try {\n if (!fs.existsSync(this.BDFile)) fs.writeFileSync(this.BDFile, JSON.stringify(this.data, null, 4), \"utf-8\");\n const data = JSON.parse(fs.readFileSync(this.BDFile, \"utf-8\"))\n if (data.hasOwnProperty(\"settings\")) this.data = data;\n if (!fs.existsSync(this.settingsFile)) return;\n let settings = __non_webpack_require__(this.settingsFile);\n fs.unlinkSync(this.settingsFile);\n if (settings.hasOwnProperty(\"settings\")) settings = Object.assign({stable: {}, canary: {}, ptb: {}}, {[releaseChannel]: settings});\n else settings = Object.assign({stable: {}, canary: {}, ptb: {}}, settings);\n this.setBDData(\"settings\", settings);\n }\n catch (err) {\n console.error(err);\n Utils.alert(\"Corrupt Storage\", \"The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.\");\n }\n }\n\n get injectionPath() {\n return this._injectionPath = null;\n }\n\n get configFile() {return this._configFile || (this._configFile = path.resolve(this.injectionPath, \"betterdiscord\", \"config.json\"));}\n get BDFile() {return this._BDFile || (this._BDFile = path.resolve(dataPath, \"bdstorage.json\"));}\n get settingsFile() {return this._settingsFile || (this._settingsFile = path.resolve(dataPath, \"bdsettings.json\"));}\n getPluginFile(pluginName) {return path.resolve(ContentManager.pluginsFolder, pluginName + \".config.json\");}\n\n getSettingGroup(key) {\n return this.data.settings[releaseChannel][key] || null;\n }\n\n setSettingGroup(key, data) {\n this.data.settings[releaseChannel][key] = data;\n fs.writeFileSync(this.BDFile, JSON.stringify(this.data, null, 4), \"utf-8\");\n }\n\n getBDData(key) {\n return this.data[key] || \"\";\n }\n\n setBDData(key, value) {\n this.data[key] = value;\n fs.writeFileSync(this.BDFile, JSON.stringify(this.data, null, 4), \"utf-8\");\n }\n\n getPluginData(pluginName, key) {\n if (this.pluginData[pluginName] !== undefined) return this.pluginData[pluginName][key];\n if (!fs.existsSync(this.getPluginFile(pluginName))) return undefined;\n this.pluginData[pluginName] = JSON.parse(fs.readFileSync(this.getPluginFile(pluginName)));\n return this.pluginData[pluginName][key];\n }\n\n setPluginData(pluginName, key, value) {\n if (value === undefined) return;\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\n this.pluginData[pluginName][key] = value;\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4), \"utf-8\");\n }\n\n deletePluginData(pluginName, key) {\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\n delete this.pluginData[pluginName][key];\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4), \"utf-8\");\n }\n};","/* BDEvents */\nconst EventEmitter = require(\"events\");\nexport default new class BDEvents extends EventEmitter {\n constructor(){\n super()\n window.Lightcord.BetterDiscord.BDEvents = this\n }\n dispatch(eventName, ...args) {this.emit(eventName, ...args);}\n off(eventName, eventAction) {this.removeListener(eventName, eventAction);}\n};","import {bdpluginErrors, pluginCookie, settingsCookie, bdplugins} from \"../0globals\";\nimport ContentManager from \"./contentManager\";\nimport DataStore from \"./dataStore\";\nimport BDEvents from \"./bdEvents\";\nimport Utils from \"./utils\";\n\nclass PluginModule {\n constructor(){\n window.Lightcord.BetterDiscord.PluginModule = this\n }\n get folder() {return ContentManager.pluginsFolder;}\n}\n\nPluginModule.prototype.loadPlugins = async function () {\n this.loadPluginData();\n bdpluginErrors.splice(0, 0, ...(await ContentManager.loadPlugins()));\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n let plugin, name;\n\n try {\n plugin = bdplugins[plugins[i]].plugin;\n name = plugin.getName();\n if (plugin.load && typeof(plugin.load) == \"function\") plugin.load();\n } catch (err) {\n pluginCookie[name] = false;\n Utils.err(\"Plugins\", name + \" could not be loaded.\", err);\n bdpluginErrors.push({name: name, file: bdplugins[plugins[i]].filename, message: \"load() could not be fired.\", error: {message: err.message, stack: err.stack}});\n continue;\n }\n\n if (!pluginCookie[name]) pluginCookie[name] = false;\n\n if (pluginCookie[name]) {\n try {\n plugin.start();\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin.getName()} v${plugin.getVersion()} has started.`);\n } catch (err) {\n pluginCookie[name] = false;\n Utils.err(\"Plugins\", name + \" could not be started.\", err);\n bdpluginErrors.push({name: name, file: bdplugins[plugins[i]].filename, message: \"start() could not be fired.\", error: {message: err.message, stack: err.stack}});\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 10))\n }\n this.savePluginData();\n\n require(\"electron\").remote.getCurrentWebContents().on(\"did-navigate-in-page\", this.channelSwitch.bind(this));\n // if (settingsCookie[\"fork-ps-5\"]) ContentManager.watchContent(\"plugin\");\n};\n\nPluginModule.prototype.startPlugin = function(plugin, reload = false) {\n try {\n bdplugins[plugin].plugin.start();\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} has started.`);\n }\n catch (err) {\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} could not be started.`, {type: \"error\"});\n pluginCookie[plugin] = false;\n this.savePluginData();\n Utils.err(\"Plugins\", plugin + \" could not be started.\", err);\n }\n};\n\nPluginModule.prototype.stopPlugin = function(plugin, reload = false) {\n try {\n bdplugins[plugin].plugin.stop();\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} has stopped.`);\n }\n catch (err) {\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} could not be stopped.`, {type: \"error\"});\n Utils.err(\"Plugins\", bdplugins[plugin].plugin.getName() + \" could not be stopped.\", err);\n }\n};\n\nPluginModule.prototype.enablePlugin = function (plugin, reload = false) {\n if (pluginCookie[plugin]) return;\n pluginCookie[plugin] = true;\n this.savePluginData();\n this.startPlugin(plugin, reload);\n};\n\nPluginModule.prototype.enable = function (plugin, reload = false) {\n return this.enablePlugin(plugin, reload);\n};\n\nPluginModule.prototype.disablePlugin = function (plugin, reload = false) {\n if (!pluginCookie[plugin]) return;\n pluginCookie[plugin] = false;\n this.savePluginData();\n this.stopPlugin(plugin, reload);\n};\n\nPluginModule.prototype.disable = function (plugin, reload = false) {\n return this.disablePlugin(plugin, reload);\n};\n\nPluginModule.prototype.togglePlugin = function (plugin) {\n if (pluginCookie[plugin]) this.disablePlugin(plugin);\n else this.enablePlugin(plugin);\n};\n\nPluginModule.prototype.toggle = function (plugin, reload = false) {\n return this.togglePlugin(plugin, reload);\n};\n\nPluginModule.prototype.loadPlugin = async function(filename) {\n const error = await ContentManager.loadContent(filename, \"plugin\");\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${filename} could not be loaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${filename} could not be loaded.`, error);\n }\n const plugin = Object.values(bdplugins).find(p => (console.log(p.filename, filename)) || p.filename == filename).plugin;\n try { if (plugin.load && typeof(plugin.load) == \"function\") plugin.load();}\n catch (err) {if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [err]});}\n Utils.log(\"ContentManager\", `${plugin.getName()} v${plugin.getVersion()} was loaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin.getName()} v${plugin.getVersion()} was loaded.`, {type: \"success\"});\n BDEvents.dispatch(\"plugin-loaded\", plugin.getName());\n};\n\nPluginModule.prototype.unloadPlugin = function(filenameOrName) {\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return;\n const plugin = bdplugin.plugin.getName();\n if (pluginCookie[plugin]) this.disablePlugin(plugin, true);\n const error = ContentManager.unloadContent(bdplugins[plugin].filename, \"plugin\");\n delete bdplugins[plugin];\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} could not be unloaded. It may have not been loaded yet.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${plugin} could not be unloaded. It may have not been loaded yet.`, error);\n }\n Utils.log(\"ContentManager\", `${plugin} was unloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} was unloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"plugin-unloaded\", plugin);\n};\n\nPluginModule.prototype.delete = function(filenameOrName) {\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return;\n this.unloadPlugin(bdplugin.filename);\n const fullPath = require(\"path\").resolve(ContentManager.pluginsFolder, bdplugin.filename);\n require(\"fs\").unlinkSync(fullPath);\n};\n\nPluginModule.prototype.reloadPlugin = async function(filenameOrName) {\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return this.loadPlugin(filenameOrName);\n const plugin = bdplugin.plugin.getName();\n const enabled = pluginCookie[plugin];\n if (enabled) this.stopPlugin(plugin, true);\n const error = await ContentManager.reloadContent(bdplugins[plugin].filename, \"plugin\");\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} could not be reloaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${plugin} could not be reloaded.`, error);\n }\n if (bdplugins[plugin].plugin.load && typeof(bdplugins[plugin].plugin.load) == \"function\") bdplugins[plugin].plugin.load();\n if (enabled) this.startPlugin(plugin, true);\n Utils.log(\"ContentManager\", `${plugin} v${bdplugins[plugin].plugin.getVersion()} was reloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} v${bdplugins[plugin].plugin.getVersion()} was reloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"plugin-reloaded\", plugin);\n};\n\nPluginModule.prototype.reload = function(name) {\n return this.reloadPlugin(name);\n};\n\nPluginModule.prototype.edit = function(filenameOrName) {\n console.log(\"Edit \" + filenameOrName);\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return;\n const fullPath = require(\"path\").resolve(ContentManager.pluginsFolder, bdplugin.filename);\n console.log(\"Edit \" + fullPath);\n require(\"electron\").shell.openItem(`${fullPath}`);\n};\n\nPluginModule.prototype.updatePluginList = function() {\n const results = ContentManager.loadNewContent(\"plugin\");\n for (const filename of results.added) this.loadPlugin(filename);\n for (const name of results.removed) this.unloadPlugin(name);\n};\n\nPluginModule.prototype.loadPluginData = function () {\n const saved = DataStore.getSettingGroup(\"plugins\");\n if (saved) {\n Object.assign(pluginCookie, saved);\n }\n};\n\nPluginModule.prototype.savePluginData = function () {\n DataStore.setSettingGroup(\"plugins\", pluginCookie);\n};\n\nPluginModule.prototype.newMessage = function () {\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n const plugin = bdplugins[plugins[i]].plugin;\n if (!pluginCookie[plugin.getName()]) continue;\n if (typeof plugin.onMessage === \"function\") {\n try { plugin.onMessage(); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to fire onMessage for \" + plugin.getName() + \".\", err); }\n }\n }\n};\n\nPluginModule.prototype.channelSwitch = function () {\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n const plugin = bdplugins[plugins[i]].plugin;\n if (!pluginCookie[plugin.getName()]) continue;\n if (typeof plugin.onSwitch === \"function\") {\n try { plugin.onSwitch(); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to fire onSwitch for \" + plugin.getName() + \".\", err); }\n }\n }\n};\n\nPluginModule.prototype.rawObserver = function(e) {\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n const plugin = bdplugins[plugins[i]].plugin;\n if (!pluginCookie[plugin.getName()]) continue;\n if (typeof plugin.observer === \"function\") {\n try { plugin.observer(e); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to fire observer for \" + plugin.getName() + \".\", err); }\n }\n }\n};\n\nexport default new PluginModule();","/**\n * Tooltip that automatically show and hide themselves on mouseenter and mouseleave events.\n * Will also remove themselves if the node to watch is removed from DOM through\n * a MutationObserver.\n *\n * Note this is not using Discord's internals but normal DOM manipulation and emulates\n * Discord's own tooltips as closely as possible.\n *\n * @module EmulatedTooltip\n * @version 0.0.1\n */\n\nimport Utils from \"../modules/utils\";\nimport WebpackModules from \"../modules/webpackModules\";\nlet TooltipClasses\nfunction getTooltipClasses(){\n\tif(TooltipClasses)return TooltipClasses\n\treturn TooltipClasses = WebpackModules.findByProps(\"tooltip\", \"tooltipBlack\");\n}\nlet TooltipLayers\nfunction getTooltipLayers(){\n\tif(TooltipLayers)return TooltipLayers\n\treturn TooltipLayers = WebpackModules.findByProps(\"layer\", \"layerContainer\");\n}\n\nconst getClass = function(sideOrColor) {\n const upperCase = sideOrColor[0].toUpperCase() + sideOrColor.slice(1);\n const tooltipClass = getTooltipClasses()[`tooltip${upperCase}`];\n if (tooltipClass) return tooltipClass;\n return null;\n};\n\nconst classExists = function(sideOrColor) {\n return getClass(sideOrColor) ? true : false;\n};\n\nconst toPx = function(value) {\n return `${value}px`;\n};\n\nexport default class EmulatedTooltip {\n\t/**\n\t *\n\t * @constructor\n\t * @param {(HTMLElement|jQuery)} node - DOM node to monitor and show the tooltip on\n\t * @param {string} tip - string to show in the tooltip\n\t * @param {object} options - additional options for the tooltip\n\t * @param {string} [options.style=black] - correlates to the discord styling/colors (black, brand, green, grey, red, yellow)\n\t * @param {string} [options.side=top] - can be any of top, right, bottom, left\n\t * @param {boolean} [options.preventFlip=false] - prevents moving the tooltip to the opposite side if it is too big or goes offscreen\n * @param {boolean} [options.disabled=false] - whether the tooltip should be disabled from showing on hover\n * @param {boolean} [options.attachEvents=true] - whether the tooltip should listen to mouseenter and mouseleave events.\n\t */\n\tconstructor(node, text, options = {}) {\n\t\tconst {style = \"black\", side = \"top\", preventFlip = false, disabled = false, attachEvents = true} = options;\n\t\tthis.node = node instanceof jQuery ? node[0] : node;\n this.label = text;\n this.style = style.toLowerCase();\n\t\tthis.side = side.toLowerCase();\n this.preventFlip = preventFlip;\n this.disabled = disabled;\n\n if (!classExists(this.side)) return Utils.err(\"EmulatedTooltip\", `Side ${this.side} does not exist.`);\n\t\tif (!classExists(this.style)) return Utils.err(\"EmulatedTooltip\", `Style ${this.style} does not exist.`);\n\t\t\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.className = getTooltipLayers().layer + \" \" + getTooltipLayers().disabledPointerEvents;\n\n\t\tthis.tooltipElement = document.createElement(\"div\");\n\t\tthis.tooltipElement.className = `${getTooltipClasses().tooltip} ${getClass(this.style)}`;\n\n\t\tthis.labelElement = document.createElement(\"div\");\n\t\tthis.labelElement.className = getTooltipClasses().tooltipContent\n\n\t\tconst pointerElement = document.createElement(\"div\");\n\t\tpointerElement.className = getTooltipClasses().tooltipPointer;\n\n\t\tthis.tooltipElement.append(pointerElement);\n\t\tthis.tooltipElement.append(this.labelElement);\n\t\tthis.element.append(this.tooltipElement);\n\n\t\tif(attachEvents){\n\t\t\tthis.node.addEventListener(\"mouseenter\", () => {\n\t\t\t\tif (this.disabled) return;\n\t\t\t\tthis.show();\n\t\n\t\t\t\tconst observer = new MutationObserver((mutations) => {\n\t\t\t\t\tmutations.forEach((mutation) => {\n\t\t\t\t\t\tconst nodes = Array.from(mutation.removedNodes);\n\t\t\t\t\t\tconst directMatch = nodes.indexOf(this.node) > -1;\n\t\t\t\t\t\tconst parentMatch = nodes.some(parent => parent.contains(this.node));\n\t\t\t\t\t\tif (directMatch || parentMatch) {\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\n\t\t\t\tobserver.observe(document.body, {subtree: true, childList: true});\n\t\t\t});\n\t\n\t\t\tthis.node.addEventListener(\"mouseleave\", () => {\n\t\t\t\tthis.hide();\n\t\t\t});\n\t\t}\n }\n\n /** Container where the tooltip will be appended. */\n get container() { \n\t\treturn document.querySelector(\".\"+Utils.removeDa(BDModules.get(e => e.popouts)[0].popouts)+\" ~ .\"+Utils.removeDa(BDModules.get(e => e.layerContainer)[0].layerContainer)); \n\t}\n /** Boolean representing if the tooltip will fit on screen above the element */\n get canShowAbove() { return this.node.getBoundingClientRect().top - this.element.offsetHeight >= 0; }\n /** Boolean representing if the tooltip will fit on screen below the element */\n get canShowBelow() { return this.node.getBoundingClientRect().top + this.node.offsetHeight + this.element.offsetHeight <= Utils.screenHeight; }\n /** Boolean representing if the tooltip will fit on screen to the left of the element */\n get canShowLeft() { return this.node.getBoundingClientRect().left - this.element.offsetWidth >= 0; }\n /** Boolean representing if the tooltip will fit on screen to the right of the element */\n\tget canShowRight() { return this.node.getBoundingClientRect().left + this.node.offsetWidth + this.element.offsetWidth <= Utils.screenWidth; }\n\n /** Hides the tooltip. Automatically called on mouseleave. */\n\thide() {\n this.element.remove();\n this.tooltipElement.className = this._className;\n\t}\n\n /** Shows the tooltip. Automatically called on mouseenter. Will attempt to flip if position was wrong. */\n\tshow() {\n this.tooltipElement.className = `${getTooltipClasses().tooltip} ${getClass(this.style)}`;\n\t\tthis.labelElement.textContent = this.label;\n\t\tthis.container.append(this.element);\n\n\t\tif (this.side == \"top\") {\n\t\t\tif (this.canShowAbove || (!this.canShowAbove && this.preventFlip)) this.showAbove();\n\t\t\telse this.showBelow();\n\t\t}\n\n\t\tif (this.side == \"bottom\") {\n\t\t\tif (this.canShowBelow || (!this.canShowBelow && this.preventFlip)) this.showBelow();\n\t\t\telse this.showAbove();\n\t\t}\n\n\t\tif (this.side == \"left\") {\n\t\t\tif (this.canShowLeft || (!this.canShowLeft && this.preventFlip)) this.showLeft();\n\t\t\telse this.showRight();\n\t\t}\n\n\t\tif (this.side == \"right\") {\n\t\t\tif (this.canShowRight || (!this.canShowRight && this.preventFlip)) this.showRight();\n\t\t\telse this.showLeft();\n\t\t}\n\t}\n\n /** Force showing the tooltip above the node. */\n\tshowAbove() {\n\t\tthis.tooltipElement.classList.add(getClass(\"top\"));\n\t\tthis.element.style.setProperty(\"top\", toPx(this.node.getBoundingClientRect().top - this.element.offsetHeight - 10));\n\t\tthis.centerHorizontally();\n\t}\n\n /** Force showing the tooltip below the node. */\n\tshowBelow() {\n\t\tthis.tooltipElement.classList.add(getClass(\"bottom\"));\n\t\tthis.element.style.setProperty(\"top\", toPx(this.node.getBoundingClientRect().top + this.node.offsetHeight + 10));\n\t\tthis.centerHorizontally();\n\t}\n\n /** Force showing the tooltip to the left of the node. */\n\tshowLeft() {\n\t\tthis.tooltipElement.classList.add(getClass(\"left\"));\n\t\tthis.element.style.setProperty(\"left\", toPx(this.node.getBoundingClientRect().left - this.element.offsetWidth - 10));\n\t\tthis.centerVertically();\n\t}\n\n /** Force showing the tooltip to the right of the node. */\n\tshowRight() {\n\t\tthis.tooltipElement.classList.add(getClass(\"right\"));\n\t\tthis.element.style.setProperty(\"left\", toPx(this.node.getBoundingClientRect().left + this.node.offsetWidth + 10));\n\t\tthis.centerVertically();\n\t}\n\n\tcenterHorizontally() {\n const nodecenter = this.node.getBoundingClientRect().left + (this.node.offsetWidth / 2);\n this.element.style.setProperty(\"left\", toPx(nodecenter - (this.element.offsetWidth / 2)));\n\t}\n\n\tcenterVertically() {\n\t\tconst nodecenter = this.node.getBoundingClientRect().top + (this.node.offsetHeight / 2);\n\t\tthis.element.style.setProperty(\"top\", toPx(nodecenter - (this.element.offsetHeight / 2)));\n\t}\n}","import BDV2 from \"../modules/v2\";\nimport Tooltip from \"./tooltip\";\n\nexport default class extends React.Component {\n constructor(props) {\n super(props);\n }\n\n async componentDidMount() {\n const {style = \"black\", side = \"top\", text = \"\"} = this.props;\n this.node = BDV2.reactDom.findDOMNode(this);\n this.tooltip = new Tooltip(this.node, text, {style, side});\n }\n\n componentWillUnmount() {\n this.tooltip.hide();\n delete this.tooltip;\n }\n\n render() {\n return this.props.children;\n }\n}","import nodeFetch from \"node-fetch\"\nimport * as electron from \"electron\"\nimport * as crypto from \"crypto\"\nimport BDV2 from \"./v2\"\nimport tooltipWrap from \"../ui/tooltipWrap\"\nimport Utils from \"./utils\"\nimport { createReadStream, writeFileSync } from \"fs\"\nimport { basename, join } from \"path\"\nimport contentManager from \"./contentManager\"\nimport { addonCache } from \"./contentManager\"\n\nconst cache = {}\nconst cache2 = {}\n\nexport default new class PluginCertifier {\n constructor(){\n window.Lightcord.BetterDiscord.PluginCertifier = this\n }\n\n patch(attachment, id){\n process.nextTick(() => {\n processAttachment(attachment, id)\n })\n }\n\n start(){\n\n }\n\n isTrusted(hash){\n return cache[hash] && !cache[hash].suspect\n }\n}\n\nconst tests = [\n [/token/gi, 0, 0],\n [/email/gi, 0, 0],\n [/mfa/gi, 0, 0],\n [/2fa/gi, 0, 0],\n [/phone/gi, 0, 0],\n [/child_process/gi, 0, 0],\n [/localStorage/gi, 0, 0],\n [/getGlobal/gi, 0, 0],\n [/BrowserWindow/gi, 0, 0],\n [/\\.exe/gi, 0, 1],\n [/system32/gi, 0, 0],\n [/password/gi, 0, 0],\n [/eval/gi, 0, 0],\n [/WebAssembly/gi, 0, 0],\n [/XMLHttpRequest(\\.|\\[[\"'`])prototype/gi, 0, 0],\n [/window\\.fetch( +)?=/gi, 0, 0],\n /** Obfuscation / hidden / workarounds */\n [/([\"'`]\\+)[\"'`]\\w[\"'`]/gi, 1, 1],\n [/[\"'`]\\w[\"'`](\\+[\"'`])/gi, 1, 1],\n [/\\${[\"'`]\\w+[\"'`]}/gi, 1, 1],\n /** hexadecimal */\n [/_0x\\w{4}\\('0x[\\dabcdef]+'\\)/g, 1, 1],\n [/_0x\\w{4}\\('0x[\\dabcdef]+'( +)?,( +)?'[^']{4}'\\)/g, 1, 1], // _0x8db7('0x0', 'x1]f')\n /** mangled */\n [/\\w+\\('0x[\\dabcdef]+'\\)/g, 1, 1], // b('0x0')\n [/\\w+\\('0x[\\dabcdef]+'( +)?,( +)?'[^']{4}'\\)/g, 1, 1], // b('0x0', 'x1]f')\n /** string array at start */\n [/^var [\\w\\d_$]+=\\[\"/gi, 1, 1]\n]\n\nconst threats = [\n \"Account Stealer/Virus\",\n \"Obfuscation/Hidden code\"\n]\n\nexport function checkViruses(hash, data, resultCallback, removeCallback, filename){\n data = data.toString(\"utf8\")\n let isHarmful = false\n /**\n * @type {string}\n */\n const no_comments = data.replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, \"\").trim()// removing all comments from plugins (remove meta and other.)\n\n for(const [test, type, removeComment] of tests){\n const scrpt = removeComment === 1 ? no_comments : data\n if(test.exec(scrpt)){\n isHarmful = threats[type]\n console.log(`${hashToUrl[hash].split(\"/\").pop()} failed at test`, test, \". Marked as\", threats[type])\n break\n }\n }\n\n if(!isHarmful)return removeCallback(hash)\n cache[hash] = {\n suspect: true,\n name: hashToUrl[hash].split(\"/\").pop(),\n type: hashToUrl[hash].endsWith(\".js\") ? \"Plugin\" : \"Theme\",\n harm: isHarmful,\n hash: hash,\n filename\n }\n \n console.log(`Found potentially dangerous ${cache[hash].type.toLowerCase()}: ${cache[hash].name}`)\n\n resultCallback(cache[hash])\n}\n\nconst hashToUrl = {}\n\nexport function checkHash(hash, data, filename, resultCallback, removeCallback){\n console.log(`File: ${filename} hash: ${hash}`)\n if(!cache[hash]){\n nodeFetch(\"https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/\"+hash, { // Using node-fetch to bypass cors\n headers: {\n \"User-Agent\": electron.ipcRenderer.sendSync(\"LIGHTCORD_GET_USER_AGENT\") // have to set user-agent\n }\n }).then(async res => {\n if(res.status !== 200){\n if(filename.endsWith(\".theme.css\"))return removeCallback(hash)\n try{\n checkViruses(hash, data, resultCallback, removeCallback, filename)\n }catch(e){\n console.error(e)\n removeCallback()\n }\n return\n }\n const result = await res.json()\n result.hash = hash\n result.filename = filename\n\n cache[hash] = result\n\n resultCallback(result)\n }).catch((err) => {\n console.error(`Could not read from github. ${err}`)\n if(filename.endsWith(\".theme.css\"))return removeCallback(hash)\n checkViruses(hash, data, resultCallback, removeCallback, filename)\n })\n }else{\n const result = cache[hash]\n\n resultCallback(result)\n }\n}\n\nexport function processFile(__path, resultCallback, removeCallback = (hash) => {}, isFromLoader = false){ \n const hash = crypto.createHash(\"sha256\")\n let data = Buffer.alloc(0)\n\n createReadStream(__path).on(\"data\", chunk => {\n data = Buffer.concat([data, chunk])\n hash.update(chunk)\n }).on(\"end\", () => {\n const hashResult = hash.digest(\"hex\")\n\n hashToUrl[hashResult] = __path\n\n if(isFromLoader && addonCache[hashResult]){\n let value = addonCache[hashResult]\n if(value.timestamp < (Date.now() - 6.048e+8)){\n delete addonCache[hashResult]\n contentManager.saveAddonCache()\n }else{\n resultCallback(value.result)\n return\n }\n }\n\n checkHash(hashResult, data, basename(__path), resultCallback, removeCallback)\n })\n}\n\nexport function processAttachment(attachment, id){\n if(!document.getElementById(id))return\n if(!attachment.url.startsWith(\"https://cdn.discordapp.com/\"))return document.getElementById(id).remove()\n if(!attachment.filename.endsWith(\".plugin.js\") && !attachment.filename.endsWith(\".theme.css\"))return document.getElementById(id).remove()\n\n nodeFetch(attachment.url, {\n headers: {\n \"User-Agent\": electron.ipcRenderer.sendSync(\"LIGHTCORD_GET_USER_AGENT\")\n }\n }).then(res => {\n if(res.status !== 200)throw new Error(\"File doesn't exist.\")\n const hash = crypto.createHash(\"sha256\")\n let data = Buffer.alloc(0)\n res.body.on(\"data\", chunk => {\n data = Buffer.concat([data, chunk])\n hash.update(chunk)\n })\n res.body.on(\"end\", () => {\n const hashResult = hash.digest(\"hex\")\n\n cache2[attachment.url] = hashResult\n hashToUrl[hashResult] = attachment.url\n\n checkHash(hashResult, data, attachment.filename, (result) => {\n renderToElements(id, result, attachment.filename)\n }, () => {\n let elem = document.getElementById(id)\n if(elem)elem.remove()\n })\n })\n }).catch(()=>{})\n}\n\nlet flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0]\nlet childModule = BDModules.get(e => e.childContainer)[0]\n\n/**\n * \n * @param {HTMLDivElement[]} elements \n * @param {{type: \"Theme\"|\"Plugin\", name: string, official?: boolean}|{suspect:true, type: \"Theme\"|\"Plugin\", name: string, harm: string}} result\n */\nfunction renderToElements(id, result, filename){\n const div = document.getElementById(id)\n if(!div || div.childNodes.length > 0)return // already certified/div does not exist anymore.\n\n if(!flowerStarModule)flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0]\n if(!childModule)childModule = BDModules.get(e => e.childContainer)[0]\n \n if(result.suspect){\n try{\n div.parentNode.style.borderColor = \"rgb(240, 71, 71)\"\n /**\n * \n * @param {HTMLElement} node \n */\n let nextNode = (node) => {\n for(let child of node.children){\n if(child.tagName === \"A\"){\n child.addEventListener(\"click\", (e) => {\n e.preventDefault()\n e.stopImmediatePropagation()\n\n Utils.showConfirmationModal(\n \"Are you sure you want to download this ?\", \n \"The \"+result.type.toLowerCase()+\" **\"+filename+\"** might be dangerous **(\"+result.harm+\")**. \\n\\n**We don't recommand to download it**. However, you can still do it below.\", \n {\n confirmText: \"Download Anyway\",\n cancelText: \"Don't !\",\n danger: true,\n onCancel: () => {},\n onConfirm: () => {\n electron.ipcRenderer.sendSync(\"LIGHTCORD_OPEN_EXTERNAL\", child.href)\n }\n }\n )\n })\n }else if([\"div\"].includes(child.tagName.toLowerCase())){\n nextNode(child)\n }\n }\n }\n nextNode(div.parentNode)\n }catch(e){\n console.error(e)\n }\n BDV2.reactDom.render(BDV2.react.createElement(tooltipWrap, {text: result.type+\" \"+result.name+\" is potentially dangerous.\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\"}},\n BDV2.react.createElement(\"svg\", {className: BDModules.get(e => e.svg)[0].svg, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 40 32\"},\n BDV2.react.createElement(\"rect\", {\n x:\"0\",\n y:\"0\",\n width:\"32\",\n height:\"32\",\n mask:\"url(#svg-mask-avatar-status-round-32)\",\n fill:\"#f04747\",\n mask:\"url(#svg-mask-status-dnd)\",\n className:BDModules.get(e => e.pointerEvents)[0].pointerEvents\n })\n )\n )\n ), div)\n }else if(!result.official){\n div.parentNode.style.borderColor = \"#4087ed\"\n let span = BDV2.react.createElement(\"span\", {style: {display: \"inherit\"}}, [\n BDV2.react.createElement(tooltipWrap, {text: result.type+\" \"+result.name+\" is certified by Lightcord.\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\", float: \"left\"}},\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\"},\n BDV2.react.createElement(\"path\", {fill:\"#4f545c\", \"fill-rule\":\"evenodd\",d:\"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"})\n ),\n BDV2.react.createElement(\"div\", {className: childModule.childContainer}, \n BDV2.react.createElement(\"svg\", {\"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\"}, \n BDV2.react.createElement(\"path\", {fill:\"#ffffff\",d:\"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z\"})\n )\n )\n )\n ),\n BDV2.react.createElement(tooltipWrap, {text: \"Install this \"+result.type.toLowerCase()+\" on Lightcord.\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\"}, onClick(){\n Utils.showConfirmationModal(\n \"Are you sure you want to download this \"+result.type.toLowerCase()+\" ?\", \n \"Lightcord will automatically install and launch this \"+result.type.toLowerCase()+\". You don't have anything to do.\", \n {\n confirmText: \"Download and Install\",\n cancelText: \"I've changed my mind\",\n danger: false,\n onCancel: () => {},\n onConfirm: () => {\n let link = getKeyedArray(cache2).find(e => e[1] === result.hash)[0]\n console.log(link)\n nodeFetch(link)\n .then(async res => {\n if(res.status !== 200)throw new Error(\"Status was not 200\")\n let content = await res.buffer()\n let installPath = join(result.type === \"Plugin\" ? contentManager._pluginsFolder : contentManager._themesFolder, result.filename)\n console.log(installPath)\n writeFileSync(installPath, content)\n Utils.showToast(result.type+\" succesfully installed.\")\n }).catch(err => {\n err = err instanceof Error ? err : new Error(err)\n Utils.showToast(err.message, {\n type: \"error\"\n })\n })\n }\n }\n )\n }},\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 24 24\",style:{\n color: \"rgb(67, 181, 129)\",\n cursor: \"pointer\"\n }},\n \n \n \n \n )\n )\n )\n ])\n BDV2.reactDom.render(span, div)\n }else{\n div.parentNode.style.borderColor = \"#4087ed\"\n let span = BDV2.react.createElement(\"span\", {style: {display: \"inherit\"}}, [\n BDV2.react.createElement(tooltipWrap, {text: result.type+\" \"+result.name+\" was made by the developers of Lightcord.\", style:\"brand\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\", float: \"left\"}},\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\",stroke:\"#36393f\",style:{color:\"#4087ed\"}},\n BDV2.react.createElement(\"path\", {fill:\"currentColor\", \"fill-rule\":\"evenodd\",d:\"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"})\n ),\n BDV2.react.createElement(\"div\", {className: childModule.childContainer}, \n BDV2.react.createElement(\"svg\", {\"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\"}, \n BDV2.react.createElement(\"path\", {fill:\"#ffffff\",d:\"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z\"})\n )\n )\n )\n ),\n BDV2.react.createElement(tooltipWrap, {text: \"Install this \"+result.type.toLowerCase()+\" on Lightcord.\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\"}, onClick(){\n Utils.showConfirmationModal(\n \"Are you sure you want to download this \"+result.type.toLowerCase()+\" ?\", \n \"Lightcord will automatically download and load this \"+result.type.toLowerCase()+\". You must enable it in the settings.\", \n {\n confirmText: \"Download and Install\",\n cancelText: \"I've changed my mind\",\n danger: false,\n onCancel: () => {},\n onConfirm: () => {\n let link = getKeyedArray(cache2).find(e => e[1] === result.hash)[0]\n \n nodeFetch(link)\n .then(async res => {\n if(res.status !== 200)throw new Error(\"Status was not 200\")\n let content = await res.buffer()\n let installPath = join(result.type === \"Plugin\" ? contentManager._pluginsFolder : contentManager._themesFolder, result.filename)\n \n writeFileSync(installPath, content)\n Utils.showToast(result.type+\" succesfully installed.\")\n }).catch(err => {\n err = err instanceof Error ? err : new Error(err)\n Utils.showToast(err.message, {\n type: \"error\"\n })\n })\n }\n }\n )\n }},\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 24 24\",style:{\n color: \"rgb(67, 181, 129)\",\n cursor: \"pointer\"\n }},\n \n \n \n \n )\n )\n )\n ])\n BDV2.reactDom.render(span, div)\n }\n}\n\nfunction getKeyedArray(obj){\n let arr = []\n Object.keys(obj).forEach(k => {\n arr.push([k, obj[k]])\n })\n return arr\n}\n\nlet key = null\nlet save = null\n\nwindow.Lightcord.Api.ensureExported(m=>m.ObjectStorage)\n.then(localStorageModule => {\n let localStorage = localStorageModule.impl\n save = function(){\n localStorage.set(\"PluginCertifierKeyEncryption__\", btoa(JSON.stringify(key)))\n }\n setInterval(() => {\n save()\n }, 100000);\n try{\n let val = safeJSONParse(atob(localStorage.get(\"PluginCertifierKeyEncryption__\")))\n if(val instanceof Error || !Array.isArray(val) || val.length !== 2 || val.find(e => typeof e !== \"string\") || Buffer.from(val[0], \"base64\").length !== 16 || Buffer.from(val[1], \"base64\").length !== 32){\n generateKey()\n save()\n return\n }\n key = val\n }catch(e){\n generateKey()\n save()\n }\n})\n\nfunction generateKey(){\n key = [crypto.randomBytes(16).toString(\"base64\"), crypto.randomBytes(32).toString(\"base64\")]\n}\n\nfunction safeJSONParse(json){\n try{\n return JSON.parse(json)\n }catch(e){\n return e instanceof Error ? new Error(e) : e\n }\n}\n\nexport function decryptSettingsCache(data){\n try{\n let decipher = crypto.createDecipheriv(\"aes-256-cbc\", Buffer.from(key[1], \"base64\"), Buffer.from(key[0], \"base64\"))\n let decrypted = decipher.update(Buffer.from(data, \"base64\"));\n decrypted = Buffer.concat([decrypted, decipher.final()]);\n return decrypted.toString(\"utf8\")\n }catch(e){\n return \"{}\"\n }\n}\nexport function encryptSettingsCache(data){\n let args = [Buffer.from(key[1], \"base64\"), Buffer.from(key[0], \"base64\")]\n \n let cipher = crypto.createCipheriv('aes-256-cbc', ...args);\n let encrypted = cipher.update(Buffer.from(data, \"utf8\"));\n encrypted = Buffer.concat([encrypted, cipher.final()]);\n return encrypted.toString(\"base64\")\n}","import {bdConfig, bdplugins, bdthemes, settingsCookie} from \"../0globals\";\nimport pluginModule from \"./pluginModule\";\nimport themeModule from \"./themeModule\";\nimport Utils from \"./utils\";\nimport dataStore from \"./dataStore\";\nimport { encryptSettingsCache, decryptSettingsCache, processFile } from \"./pluginCertifier\";\nimport * as electron from \"electron\"\n\nconst path = require(\"path\");\nconst fs = require(\"fs\");\nconst Module = require(\"module\").Module;\nModule.globalPaths.push(path.resolve(electron.ipcRenderer.sendSync(\"LIGHTCORD_GET_APP_PATH\"), \"node_modules\"));\nclass MetaError extends Error {\n constructor(message) {\n super(message);\n this.name = \"MetaError\";\n }\n}\nconst originalJSRequire = Module._extensions[\".js\"];\nconst originalCSSRequire = Module._extensions[\".css\"] ? Module._extensions[\".css\"] : () => {return null;};\nconst splitRegex = /[^\\S\\r\\n]*?(?:\\r\\n|\\n)[^\\S\\r\\n]*?\\*[^\\S\\r\\n]?/;\nconst escapedAtRegex = /^\\\\@/;\n\nexport let addonCache = {}\n\nlet hasPatched = false\nexport default new class ContentManager {\n\n constructor() {\n this.timeCache = {};\n this.watchers = {};\n }\n\n patchExtensions(){\n if(hasPatched)return\n hasPatched = true\n Module._extensions[\".js\"] = this.getContentRequire(\"plugin\");\n Module._extensions[\".css\"] = this.getContentRequire(\"theme\");\n }\n\n get pluginsFolder() {return this._pluginsFolder || (this._pluginsFolder = fs.realpathSync(path.resolve(bdConfig.dataPath + \"plugins/\")));}\n get themesFolder() {return this._themesFolder || (this._themesFolder = fs.realpathSync(path.resolve(bdConfig.dataPath + \"themes/\")));}\n\n loadAddonCertifierCache(){\n if(typeof dataStore.getSettingGroup(\"PluginCertifierHashes\") !== \"string\"){\n dataStore.setSettingGroup(\"PluginCertifierHashes\", encryptSettingsCache(\"{}\"))\n }else{\n try{\n addonCache = JSON.parse(decryptSettingsCache(dataStore.getSettingGroup(\"PluginCertifierHashes\")))\n }catch(e){\n dataStore.setSettingGroup(\"PluginCertifierHashes\", encryptSettingsCache(\"{}\"))\n addonCache = {}\n }\n }\n Object.keys(addonCache)\n .forEach(key => {\n let value = addonCache[key]\n if(!value || typeof value !== \"object\" || Array.isArray(value))return delete addonCache[key]\n\n let props = [{\n key: \"timestamp\",\n type: \"number\"\n }, {\n key: \"result\",\n type: \"object\"\n }, {\n key: \"hash\",\n type: \"string\"\n }]\n for(let prop of props){\n if(!(prop.key in value) || typeof value[prop.key] !== prop.type){\n delete addonCache[key]\n return\n }\n }\n if(value.hash !== key){\n delete addonCache[key]\n return\n }\n if(value.result.suspect){ // refetch from remote to be sure you're up to date.\n delete addonCache[key]\n return\n }\n })\n this.saveAddonCache()\n }\n\n saveAddonCache(){\n dataStore.setSettingGroup(\"PluginCertifierHashes\", encryptSettingsCache(JSON.stringify(addonCache)))\n }\n\n watchContent(contentType) {\n if (this.watchers[contentType]) return;\n const isPlugin = contentType === \"plugin\";\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\n const fileEnding = isPlugin ? \".plugin.js\" : \".theme.css\";\n this.watchers[contentType] = fs.watch(baseFolder, {persistent: false}, async (eventType, filename) => {\n if (!eventType || !filename || !filename.endsWith(fileEnding)) return;\n await new Promise(r => setTimeout(r, 50));\n try {fs.statSync(path.resolve(baseFolder, filename));}\n catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete this.timeCache[filename];\n if (isPlugin) return pluginModule.unloadPlugin(filename);\n return themeModule.unloadTheme(filename);\n }\n if (!fs.statSync(path.resolve(baseFolder, filename)).isFile()) return;\n const stats = fs.statSync(path.resolve(baseFolder, filename));\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof(stats.mtime.getTime()) !== \"number\") return;\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\n this.timeCache[filename] = stats.mtime.getTime();\n if (eventType == \"rename\") {\n if (isPlugin) await pluginModule.loadPlugin(filename);\n else await themeModule.loadTheme(filename);\n }\n if (eventType == \"change\") {\n if (isPlugin) await pluginModule.reloadPlugin(filename);\n else await themeModule.reloadTheme(filename);\n }\n });\n }\n\n unwatchContent(contentType) {\n if (!this.watchers[contentType]) return;\n this.watchers[contentType].close();\n delete this.watchers[contentType];\n }\n\n extractMeta(content) {\n const firstLine = content.split(\"\\n\")[0];\n const hasOldMeta = firstLine.includes(\"//META\");\n if (hasOldMeta) return this.parseOldMeta(content);\n const hasNewMeta = firstLine.includes(\"/**\");\n if (hasNewMeta) return this.parseNewMeta(content);\n throw new MetaError(\"META was not found.\");\n }\n\n parseOldMeta(content) {\n const meta = content.split(\"\\n\")[0];\n const rawMeta = meta.substring(meta.lastIndexOf(\"//META\") + 6, meta.lastIndexOf(\"*//\"));\n if (meta.indexOf(\"META\") < 0) throw new MetaError(\"META was not found.\");\n const parsed = Utils.testJSON(rawMeta);\n if (!parsed) throw new MetaError(\"META could not be parsed.\");\n if (!parsed.name) throw new MetaError(\"META missing name data.\");\n parsed.format = \"json\";\n return parsed;\n }\n\n parseNewMeta(content) {\n const block = content.split(\"/**\", 2)[1].split(\"*/\", 1)[0];\n const out = {};\n let field = \"\";\n let accum = \"\";\n for (const line of block.split(splitRegex)) {\n if (line.length === 0) continue;\n if (line.charAt(0) === \"@\" && line.charAt(1) !== \" \") {\n out[field] = accum;\n const l = line.indexOf(\" \");\n field = line.substr(1, l - 1);\n accum = line.substr(l + 1);\n }\n else {\n accum += \" \" + line.replace(\"\\\\n\", \"\\n\").replace(escapedAtRegex, \"@\");\n }\n }\n out[field] = accum.trim();\n delete out[\"\"];\n out.format = \"jsdoc\";\n return out;\n }\n\n getContentRequire(type) {\n const isPlugin = type === \"plugin\";\n const self = this;\n const originalRequire = isPlugin ? originalJSRequire : originalCSSRequire;\n return function(module, filename) {\n const baseFolder = isPlugin ? self.pluginsFolder : self.themesFolder;\n const possiblePath = path.resolve(baseFolder, path.basename(filename));\n if (!fs.existsSync(possiblePath) || filename !== fs.realpathSync(possiblePath)) return Reflect.apply(originalRequire, this, arguments);\n let content = fs.readFileSync(filename, \"utf8\");\n content = Utils.stripBOM(content);\n\n const stats = fs.statSync(filename);\n const meta = self.extractMeta(content);\n meta.filename = path.basename(filename);\n meta.added = stats.atimeMs;\n meta.modified = stats.mtimeMs;\n meta.size = stats.size;\n if (!isPlugin) {\n meta.css = content;\n if (meta.format == \"json\") meta.css = meta.css.split(\"\\n\").slice(1).join(\"\\n\");\n content = `module.exports = ${JSON.stringify(meta)};`;\n }\n if (isPlugin) {\n module._compile(content, module.filename);\n const didExport = !Utils.isEmpty(module.exports);\n if (didExport) {\n meta.type = module.exports;\n module.exports = meta;\n content = \"\";\n }\n else {\n Utils.warn(\"Module Not Exported\", `${meta.name}, please start setting module.exports`);\n content += `\\nmodule.exports = ${JSON.stringify(meta)};\\nmodule.exports.type = ${meta.exports || meta.name};`;\n }\n }\n module._compile(content, filename);\n };\n }\n\n makePlaceholderPlugin(data) {\n return {plugin: {\n start: () => {},\n getName: () => {return data.name || data.filename;},\n getAuthor: () => {return \"???\";},\n getDescription: () => {return data.message ? data.message : \"This plugin was unable to be loaded. Check the author's page for updates.\";},\n getVersion: () => {return \"???\";}\n },\n name: data.name || data.filename,\n filename: data.filename,\n source: data.source ? data.source : \"\",\n website: data.website ? data.website : \"\"\n };\n }\n\n async loadContent(filename, type) {\n if (typeof(filename) === \"undefined\" || typeof(type) === \"undefined\") return;\n const isPlugin = type === \"plugin\";\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\n\n if(settingsCookie[\"fork-ps-6\"]){\n let result = await new Promise(resolve => {\n processFile(path.resolve(baseFolder, filename), (result) => {\n console.log(result)\n resolve(result)\n }, (hash) => {\n resolve({\n suspect: false,\n hash: hash,\n filename: filename,\n name: filename\n })\n }, true)\n })\n if(result){\n addonCache[result.hash] = {\n timestamp: Date.now(),\n hash: result.hash,\n result: result\n }\n this.saveAddonCache()\n if(result.suspect){\n return {\n name: filename,\n file: filename,\n message: \"This plugin might be dangerous (\"+result.harm+\").\",\n error: new Error(\"This plugin might be dangerous (\"+result.harm+\").\")\n }\n }\n }\n }\n\n try {__non_webpack_require__(path.resolve(baseFolder, filename));}\n catch (error) {return {name: filename, file: filename, message: \"Could not be compiled.\", error: {message: error.message, stack: error.stack}};}\n const content = __non_webpack_require__(path.resolve(baseFolder, filename));\n if(!content.name)return {name: filename, file: filename, message: \"Cannot escape the ID.\", error: new Error(\"Cannot read property 'replace' of undefined\")}\n content.id = Utils.escapeID(content.name);\n //if(!id)return {name: filename, file: filename, message: \"Invalid ID\", error: new Error(\"Please fix the name of \"+filename+\". BetterDiscord can't escape an ID.\")}\n if (isPlugin) {\n if (!content.type) return;\n try {\n content.plugin = new content.type();\n delete bdplugins[content.plugin.getName()];\n bdplugins[content.plugin.getName()] = content;\n }\n catch (error) {return {name: filename, file: filename, message: \"Could not be constructed.\", error: {message: error.message, stack: error.stack}};}\n }\n else {\n delete bdthemes[content.name];\n bdthemes[content.name] = content;\n }\n } \n\n unloadContent(filename, type) {\n if (typeof(filename) === \"undefined\" || typeof(type) === \"undefined\") return;\n const isPlugin = type === \"plugin\";\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\n try {\n delete __non_webpack_require__.cache[__non_webpack_require__.resolve(path.resolve(baseFolder, filename))];\n }\n catch (err) {return {name: filename, file: filename, message: \"Could not be unloaded.\", error: {message: err.message, stack: err.stack}};}\n }\n\n isLoaded(filename, type) {\n const isPlugin = type === \"plugin\";\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\n try {__non_webpack_require__.cache[__non_webpack_require__.resolve(path.resolve(baseFolder, filename))];}\n catch (err) {return false;}\n return true;\n }\n\n async reloadContent(filename, type) {\n const cantUnload = this.unloadContent(filename, type);\n if (cantUnload) return cantUnload;\n return await this.loadContent(filename, type);\n }\n\n loadNewContent(type) {\n const isPlugin = type === \"plugin\";\n const fileEnding = isPlugin ? \".plugin.js\" : \".theme.css\";\n const basedir = isPlugin ? this.pluginsFolder : this.themesFolder;\n const files = fs.readdirSync(basedir);\n const contentList = Object.values(isPlugin ? bdplugins : bdthemes);\n const removed = contentList.filter(t => !files.includes(t.filename)).map(c => isPlugin ? c.plugin.getName() : c.name);\n const added = files.filter(f => !contentList.find(t => t.filename == f) && f.endsWith(fileEnding) && fs.statSync(path.resolve(basedir, f)).isFile());\n return {added, removed};\n }\n\n async loadAllContent(type) {\n this.patchExtensions()\n const isPlugin = type === \"plugin\";\n const fileEnding = isPlugin ? \".plugin.js\" : \".theme.css\";\n const basedir = isPlugin ? this.pluginsFolder : this.themesFolder;\n const errors = [];\n const files = fs.readdirSync(basedir);\n\n for (const filename of files) {\n if (!fs.statSync(path.resolve(basedir, filename)).isFile() || !filename.endsWith(fileEnding)) continue;\n const error = await this.loadContent(filename, type);\n if (error) errors.push(error);\n }\n\n return errors;\n }\n\n loadPlugins() {return this.loadAllContent(\"plugin\");}\n loadThemes() {return this.loadAllContent(\"theme\");}\n};\n\n/**\n * Don't expose contentManager - could be dangerous for now\n */","/**\n * Copyright 2018 Zachary Rauen\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is furnished\n * to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * \n * From: https://github.com/rauenzi/BDPluginLibrary\n */\n\n/**\n * @interface\n * @name Offset\n * @property {number} top - Top offset of the target element.\n * @property {number} right - Right offset of the target element.\n * @property {number} bottom - Bottom offset of the target element.\n * @property {number} left - Left offset of the target element.\n * @property {number} height - Outer height of the target element.\n * @property {number} width - Outer width of the target element.\n */\n\n /**\n * Function that automatically removes added listener.\n * @callback module:DOMTools~CancelListener\n */\n \nexport default class DOMTools {\n\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n\n /**\n\t * Adds a style to the document.\n\t * @param {string} id - identifier to use as the element id\n\t * @param {string} css - css to add to the document\n\t */\n\tstatic addStyle(id, css) {\n\t\tdocument.head.append(DOMTools.createElement(``));\n\t}\n\n\t/**\n\t * Removes a style from the document.\n\t * @param {string} id - original identifier used\n\t */\n\tstatic removeStyle(id) {\n\t\tconst element = document.getElementById(id);\n\t\tif (element) element.remove();\n\t}\n\n\t/**\n\t * Adds/requires a remote script to be loaded\n\t * @param {string} id - identifier to use for this script\n\t * @param {string} url - url from which to load the script\n\t * @returns {Promise} promise that resolves when the script is loaded\n\t */\n\tstatic addScript(id, url) {\n\t\treturn new Promise(resolve => {\n\t\t\tconst script = document.createElement(\"script\");\n\t\t\tscript.id = id;\n\t\t\tscript.src = url;\n\t\t\tscript.type = \"text/javascript\";\n\t\t\tscript.onload = resolve;\n\t\t\tdocument.head.append(script);\n\t\t});\n\t}\n\n\t/**\n\t * Removes a remote script from the document.\n\t * @param {string} id - original identifier used\n\t */\n\tstatic removeScript(id) {\n id = this.escapeID(id);\n\t\tconst element = document.getElementById(id);\n\t\tif (element) element.remove();\n }\n \n // https://javascript.info/js-animation\n static animate({timing = _ => _, update, duration}) {\n const start = performance.now();\n \n requestAnimationFrame(function animate(time) {\n // timeFraction goes from 0 to 1\n let timeFraction = (time - start) / duration;\n if (timeFraction > 1) timeFraction = 1;\n \n // calculate the current animation state\n const progress = timing(timeFraction);\n \n update(progress); // draw it\n \n if (timeFraction < 1) {\n requestAnimationFrame(animate);\n }\n \n });\n }\n\n /**\n * This is my shit version of not having to use `$` from jQuery. Meaning\n * that you can pass a selector and it will automatically run {@link module:DOMTools.query}.\n * It also means that you can pass a string of html and it will perform and return `parseHTML`.\n * @see module:DOMTools.parseHTML\n * @see module:DOMTools.query\n * @param {string} selector - Selector to query or HTML to parse\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - Either the result of `parseHTML` or `query`\n */\n static Q(selector) {\n const element = this.parseHTML(selector);\n const isHTML = element instanceof NodeList ? Array.from(element).some(n => n.nodeType === 1) : element.nodeType === 1;\n if (isHTML) return element;\n return this.query(selector);\n }\n\n /**\n * Essentially a shorthand for `document.querySelector`. If the `baseElement` is not provided\n * `document` is used by default.\n * @param {string} selector - Selector to query\n * @param {Element} [baseElement] - Element to base the query from\n * @returns {(Element|null)} - The found element or null if not found\n */\n static query(selector, baseElement = document) {\n return baseElement.querySelector(selector);\n }\n\n /**\n * Essentially a shorthand for `document.querySelectorAll`. If the `baseElement` is not provided\n * `document` is used by default.\n * @param {string} selector - Selector to query\n * @param {Element} [baseElement] - Element to base the query from\n * @returns {Array} - Array of all found elements\n */\n static queryAll(selector, baseElement = document) {\n return baseElement.querySelectorAll(selector);\n }\n\n /**\n * Parses a string of HTML and returns the results. If the second parameter is true,\n * the parsed HTML will be returned as a document fragment {@see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment}.\n * This is extremely useful if you have a list of elements at the top level, they can then be appended all at once to another node.\n * \n * If the second parameter is false, then the return value will be the list of parsed\n * nodes and there were multiple top level nodes, otherwise the single node is returned.\n * @param {string} html - HTML to be parsed\n * @param {boolean} [fragment=false] - Whether or not the return should be the raw `DocumentFragment`\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - The result of HTML parsing\n */\n static parseHTML(html, fragment = false) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n const node = template.content.cloneNode(true);\n if (fragment) return node;\n return node.childNodes.length > 1 ? node.childNodes : node.childNodes[0];\n }\n\n /** Alternate name for {@link module:DOMTools.parseHTML} */\n static createElement(html, fragment = false) {return this.parseHTML(html, fragment);}\n \n /**\n * Takes a string of html and escapes it using the brower's own escaping mechanism.\n * @param {String} html - html to be escaped\n */\n static escapeHTML(html) {\n const textNode = document.createTextNode(\"\");\n const spanElement = document.createElement(\"span\");\n spanElement.append(textNode);\n textNode.nodeValue = html;\n return spanElement.innerHTML;\n }\n\n /**\n * Adds a list of classes from the target element.\n * @param {Element} element - Element to edit classes of\n * @param {...string} classes - Names of classes to add\n * @returns {Element} - `element` to allow for chaining\n */\n static addClass(element, ...classes) {\n classes = classes.flat().filter(c => c);\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n classes = classes.flat().filter(c => c);\n element.classList.add(...classes);\n return element;\n }\n\n /**\n * Removes a list of classes from the target element.\n * @param {Element} element - Element to edit classes of\n * @param {...string} classes - Names of classes to remove\n * @returns {Element} - `element` to allow for chaining\n */\n static removeClass(element, ...classes) {\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n classes = classes.flat().filter(c => c);\n element.classList.remove(...classes);\n return element;\n }\n\n /**\n * When only one argument is present: Toggle class value;\n * i.e., if class exists then remove it and return false, if not, then add it and return true.\n * When a second argument is present:\n * If the second argument evaluates to true, add specified class value, and if it evaluates to false, remove it.\n * @param {Element} element - Element to edit classes of\n * @param {string} classname - Name of class to toggle\n * @param {boolean} [indicator] - Optional indicator for if the class should be toggled\n * @returns {Element} - `element` to allow for chaining\n */\n static toggleClass(element, classname, indicator) {\n classname = classname.toString().split(\" \").filter(c => c);\n if (typeof(indicator) !== \"undefined\") classname.forEach(c => element.classList.toggle(c, indicator));\n else classname.forEach(c => element.classList.toggle(c));\n return element;\n }\n\n /**\n * Checks if an element has a specific class\n * @param {Element} element - Element to edit classes of\n * @param {string} classname - Name of class to check\n * @returns {boolean} - `true` if the element has the class, `false` otherwise.\n */\n static hasClass(element, classname) {\n return classname.toString().split(\" \").filter(c => c).every(c => element.classList.contains(c));\n }\n\n /**\n * Replaces one class with another\n * @param {Element} element - Element to edit classes of\n * @param {string} oldName - Name of class to replace\n * @param {string} newName - New name for the class\n * @returns {Element} - `element` to allow for chaining\n */\n static replaceClass(element, oldName, newName) {\n element.classList.replace(oldName, newName);\n return element;\n }\n\n /**\n * Appends `thisNode` to `thatNode`\n * @param {Node} thisNode - Node to be appended to another node\n * @param {Node} thatNode - Node for `thisNode` to be appended to\n * @returns {Node} - `thisNode` to allow for chaining\n */\n static appendTo(thisNode, thatNode) {\n if (typeof(thatNode) == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.append(thisNode);\n return thisNode;\n }\n\n /**\n * Prepends `thisNode` to `thatNode`\n * @param {Node} thisNode - Node to be prepended to another node\n * @param {Node} thatNode - Node for `thisNode` to be prepended to\n * @returns {Node} - `thisNode` to allow for chaining\n */\n static prependTo(thisNode, thatNode) {\n if (typeof(thatNode) == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.prepend(thisNode);\n return thisNode;\n }\n\n /**\n * Insert after a specific element, similar to jQuery's `thisElement.insertAfter(otherElement)`.\n * @param {Node} thisNode - The node to insert\n * @param {Node} targetNode - Node to insert after in the tree\n * @returns {Node} - `thisNode` to allow for chaining\n */\n static insertAfter(thisNode, targetNode) {\n targetNode.parentNode.insertBefore(thisNode, targetNode.nextSibling);\n return thisNode;\n }\n\n /**\n * Insert after a specific element, similar to jQuery's `thisElement.after(newElement)`.\n * @param {Node} thisNode - The node to insert\n * @param {Node} newNode - Node to insert after in the tree\n * @returns {Node} - `thisNode` to allow for chaining\n */\n static after(thisNode, newNode) {\n thisNode.parentNode.insertBefore(newNode, thisNode.nextSibling);\n return thisNode;\n }\n\n /**\n * Gets the next sibling element that matches the selector.\n * @param {Element} element - Element to get the next sibling of\n * @param {string} [selector=\"\"] - Optional selector\n * @returns {Element} - The sibling element\n */\n static next(element, selector = \"\") {\n return selector ? element.querySelector(\"+ \" + selector) : element.nextElementSibling;\n }\n\n /**\n * Gets all subsequent siblings.\n * @param {Element} element - Element to get next siblings of\n * @returns {NodeList} - The list of siblings\n */\n static nextAll(element) {\n return element.querySelectorAll(\"~ *\");\n }\n\n /**\n * Gets the subsequent siblings until an element matches the selector.\n * @param {Element} element - Element to get the following siblings of\n * @param {string} selector - Selector to stop at\n * @returns {Array} - The list of siblings\n */\n static nextUntil(element, selector) {\n const next = []; \n while (element.nextElementSibling && !element.nextElementSibling.matches(selector)) next.push(element = element.nextElementSibling);\n return next;\n }\n\n /**\n * Gets the previous sibling element that matches the selector.\n * @param {Element} element - Element to get the previous sibling of\n * @param {string} [selector=\"\"] - Optional selector\n * @returns {Element} - The sibling element\n */\n static previous(element, selector = \"\") {\n const previous = element.previousElementSibling;\n if (selector) return previous && previous.matches(selector) ? previous : null;\n return previous;\n }\n\n /**\n * Gets all preceeding siblings.\n * @param {Element} element - Element to get preceeding siblings of\n * @returns {NodeList} - The list of siblings\n */\n static previousAll(element) {\n const previous = [];\n while (element.previousElementSibling) previous.push(element = element.previousElementSibling);\n return previous;\n }\n\n /**\n * Gets the preceeding siblings until an element matches the selector.\n * @param {Element} element - Element to get the preceeding siblings of\n * @param {string} selector - Selector to stop at\n * @returns {Array} - The list of siblings\n */\n static previousUntil(element, selector) {\n const previous = []; \n while (element.previousElementSibling && !element.previousElementSibling.matches(selector)) previous.push(element = element.previousElementSibling);\n return previous;\n }\n\n /**\n * Find which index in children a certain node is. Similar to jQuery's `$.index()`\n * @param {HTMLElement} node - The node to find its index in parent\n * @returns {number} Index of the node\n */\n static indexInParent(node) {\n const children = node.parentNode.childNodes;\n let num = 0;\n for (let i = 0; i < children.length; i++) {\n if (children[i] == node) return num;\n if (children[i].nodeType == 1) num++;\n }\n return -1;\n }\n\n /** Shorthand for {@link module:DOMTools.indexInParent} */\n static index(node) {return this.indexInParent(node);}\n\n /**\n * Gets the parent of the element if it matches the selector,\n * otherwise returns null.\n * @param {Element} element - Element to get parent of\n * @param {string} [selector=\"\"] - Selector to match parent\n * @returns {(Element|null)} - The sibling element or null\n */\n static parent(element, selector = \"\") {\n return !selector || element.parentElement.matches(selector) ? element.parentElement : null;\n }\n\n /**\n * Gets all children of Element that match the selector if provided.\n * @param {Element} element - Element to get all children of\n * @param {string} selector - Selector to match the children to\n * @returns {Array} - The list of children\n */\n static findChild(element, selector) {\n return element.querySelector(\":scope > \" + selector);\n }\n\n /**\n * Gets all children of Element that match the selector if provided.\n * @param {Element} element - Element to get all children of\n * @param {string} selector - Selector to match the children to\n * @returns {Array} - The list of children\n */\n static findChildren(element, selector) {\n return element.querySelectorAll(\":scope > \" + selector);\n }\n\n /**\n * Gets all ancestors of Element that match the selector if provided.\n * @param {Element} element - Element to get all parents of\n * @param {string} [selector=\"\"] - Selector to match the parents to\n * @returns {Array} - The list of parents\n */\n static parents(element, selector = \"\") {\n const parents = [];\n if (selector) while (element.parentElement && element.parentElement.closest(selector)) parents.push(element = element.parentElement.closest(selector));\n else while (element.parentElement) parents.push(element = element.parentElement);\n return parents;\n }\n\n /**\n * Gets the ancestors until an element matches the selector.\n * @param {Element} element - Element to get the ancestors of\n * @param {string} selector - Selector to stop at\n * @returns {Array} - The list of parents\n */\n static parentsUntil(element, selector) {\n const parents = [];\n while (element.parentElement && !element.parentElement.matches(selector)) parents.push(element = element.parentElement);\n return parents;\n }\n\n /**\n * Gets all siblings of the element that match the selector.\n * @param {Element} element - Element to get all siblings of\n * @param {string} [selector=\"*\"] - Selector to match the siblings to\n * @returns {Array} - The list of siblings\n */\n static siblings(element, selector = \"*\") {\n return Array.from(element.parentElement.children).filter(e => e != element && e.matches(selector));\n }\n\n /**\n * Sets or gets css styles for a specific element. If `value` is provided\n * then it sets the style and returns the element to allow for chaining,\n * otherwise returns the style. \n * @param {Element} element - Element to set the CSS of\n * @param {string} attribute - Attribute to get or set\n * @param {string} [value] - Value to set for attribute\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\n */\n static css(element, attribute, value) {\n if (typeof(value) == \"undefined\") return global.getComputedStyle(element)[attribute];\n element.style[attribute] = value;\n return element;\n }\n\n /**\n * Sets or gets the width for a specific element. If `value` is provided\n * then it sets the width and returns the element to allow for chaining,\n * otherwise returns the width. \n * @param {Element} element - Element to set the CSS of\n * @param {string} [value] - Width to set\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\n */\n static width(element, value) {\n if (typeof(value) == \"undefined\") return parseInt(getComputedStyle(element).width);\n element.style.width = value;\n return element;\n }\n\n /**\n * Sets or gets the height for a specific element. If `value` is provided\n * then it sets the height and returns the element to allow for chaining,\n * otherwise returns the height. \n * @param {Element} element - Element to set the CSS of\n * @param {string} [value] - Height to set\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\n */\n static height(element, value) {\n if (typeof(value) == \"undefined\") return parseInt(getComputedStyle(element).height);\n element.style.height = value;\n return element;\n }\n\n /**\n * Sets the inner text of an element if given a value, otherwise returns it.\n * @param {Element} element - Element to set the text of\n * @param {string} [text] - Content to set\n * @returns {string} - Either the string set by this call or the current text content of the node.\n */\n static text(element, text) {\n if (typeof(text) == \"undefined\") return element.textContent;\n return element.textContent = text;\n }\n\n /**\n * Returns the innerWidth of the element.\n * @param {Element} element - Element to retrieve inner width of\n * @return {number} - The inner width of the element.\n */\n static innerWidth(element) {\n return element.clientWidth;\n }\n\n /**\n * Returns the innerHeight of the element.\n * @param {Element} element - Element to retrieve inner height of\n * @return {number} - The inner height of the element.\n */\n static innerHeight(element) {\n return element.clientHeight;\n }\n\n /**\n * Returns the outerWidth of the element.\n * @param {Element} element - Element to retrieve outer width of\n * @return {number} - The outer width of the element.\n */\n static outerWidth(element) {\n return element.offsetWidth;\n }\n\n /**\n * Returns the outerHeight of the element.\n * @param {Element} element - Element to retrieve outer height of\n * @return {number} - The outer height of the element.\n */\n static outerHeight(element) {\n return element.offsetHeight;\n }\n\n /**\n * Gets the offset of the element in the page.\n * @param {Element} element - Element to get offset of\n * @return {Offset} - The offset of the element\n */\n static offset(element) {\n return element.getBoundingClientRect();\n }\n\n static get listeners() { return this._listeners || (this._listeners = {}); }\n\n /**\n * This is similar to jQuery's `on` function and can *hopefully* be used in the same way.\n * \n * Rather than attempt to explain, I'll show some example usages.\n * \n * The following will add a click listener (in the `myPlugin` namespace) to `element`.\n * `DOMTools.on(element, \"click.myPlugin\", () => {console.log(\"clicked!\");});`\n * \n * The following will add a click listener (in the `myPlugin` namespace) to `element` that only fires when the target is a `.block` element.\n * `DOMTools.on(element, \"click.myPlugin\", \".block\", () => {console.log(\"clicked!\");});`\n * \n * The following will add a click listener (without namespace) to `element`.\n * `DOMTools.on(element, \"click\", () => {console.log(\"clicked!\");});`\n * \n * The following will add a click listener (without namespace) to `element` that only fires once.\n * `const cancel = DOMTools.on(element, \"click\", () => {console.log(\"fired!\"); cancel();});`\n * \n * @param {Element} element - Element to add listener to\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\n * @param {(string|callable)} delegate - Selector to run on element to listen to\n * @param {callable} [callback] - Function to fire on event\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\n */\n static on(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function(event) {\n if (event.target.matches(delegate)) {\n callback(event);\n }\n };\n\n element.addEventListener(type, eventFunc);\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n return cancel;\n }\n\n /**\n * Functionality for this method matches {@link module:DOMTools.on} but automatically cancels itself\n * and removes the listener upon the first firing of the desired event.\n * \n * @param {Element} element - Element to add listener to\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\n * @param {(string|callable)} delegate - Selector to run on element to listen to\n * @param {callable} [callback] - Function to fire on event\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\n */\n static once(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? function(event) {\n callback(event);\n element.removeEventListener(type, eventFunc);\n } : function(event) {\n if (!event.target.matches(delegate)) return;\n callback(event);\n element.removeEventListener(type, eventFunc);\n };\n\n element.addEventListener(type, eventFunc);\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n return cancel;\n }\n\n static __offAll(event, element) {\n const [type, namespace] = event.split(\".\");\n let matchFilter = listener => listener.event == type, defaultFilter = _ => _;\n if (element) matchFilter = l => l.event == type && l.element == element, defaultFilter = l => l.element == element;\n const listeners = this.listeners[namespace] || [];\n const list = type ? listeners.filter(matchFilter) : listeners.filter(defaultFilter);\n for (let c = 0; c < list.length; c++) list[c].cancel();\n }\n \n /**\n * This is similar to jQuery's `off` function and can *hopefully* be used in the same way.\n * \n * Rather than attempt to explain, I'll show some example usages.\n * \n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element`.\n * `DOMTools.off(element, \"click.myPlugin\", onClick);`\n * \n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element` that only fired when the target is a `.block` element.\n * `DOMTools.off(element, \"click.myPlugin\", \".block\", onClick);`\n * \n * The following will remove a click listener (without namespace) from `element`.\n * `DOMTools.off(element, \"click\", onClick);`\n * \n * The following will remove all listeners in namespace `myPlugin` from `element`.\n * `DOMTools.off(element, \".myPlugin\");`\n * \n * The following will remove all click listeners in namespace `myPlugin` from *all elements*.\n * `DOMTools.off(\"click.myPlugin\");`\n * \n * The following will remove all listeners in namespace `myPlugin` from *all elements*.\n * `DOMTools.off(\".myPlugin\");`\n * \n * @param {(Element|string)} element - Element to remove listener from\n * @param {string} [event] - Event to listen to with option namespace (e.g. \"event.namespace\")\n * @param {(string|callable)} [delegate] - Selector to run on element to listen to\n * @param {callable} [callback] - Function to fire on event\n * @returns {Element} - The original element to allow for chaining\n */\n static off(element, event, delegate, callback) {\n if (typeof(element) == \"string\") return this.__offAll(element);\n const [type, namespace] = event.split(\".\");\n if (namespace) return this.__offAll(event, element);\n\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function(event) {\n if (event.target.matches(delegate)) {\n callback(event);\n }\n };\n\n element.removeEventListener(type, eventFunc);\n return element;\n }\n\n /**\n * Adds a listener for when the node is added/removed from the document body.\n * The listener is automatically removed upon firing.\n * @param {HTMLElement} node - node to wait for\n * @param {callable} callback - function to be performed on event\n * @param {boolean} onMount - determines if it should fire on Mount or on Unmount\n */\n static onMountChange(node, callback, onMount = true) {\n const wrappedCallback = () => {\n this.observer.unsubscribe(wrappedCallback);\n callback();\n };\n this.observer.subscribe(wrappedCallback, mutation => {\n const nodes = Array.from(onMount ? mutation.addedNodes : mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n return directMatch || parentMatch;\n });\n return node;\n }\n\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `true` */\n static onMount(node, callback) { return this.onMountChange(node, callback); }\n\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `false` */\n static onUnmount(node, callback) { return this.onMountChange(node, callback, false); }\n\n /** Alias for {@link module:DOMTools.onMount} */\n static onAdded(node, callback) { return this.onMount(node, callback); }\n\n /** Alias for {@link module:DOMTools.onUnmount} */\n static onRemoved(node, callback) { return this.onUnmount(node, callback, false); }\n\n /**\n * Helper function which combines multiple elements into one parent element\n * @param {Array} elements - array of elements to put into a single parent\n */\n static wrap(elements) {\n const domWrapper = this.parseHTML(`
`);\n for (let e = 0; e < elements.length; e++) domWrapper.appendChild(elements[e]);\n return domWrapper;\n }\n\n /**\n * Resolves the node to an HTMLElement. This is mainly used by library modules.\n * @param {(jQuery|Element)} node - node to resolve\n */\n static resolveElement(node) {\n if (!(node instanceof jQuery) && !(node instanceof Element)) return undefined;\n return node instanceof jQuery ? node[0] : node;\n }\n}\n\nwindow.Lightcord.BetterDiscord.DOM = DOMTools","import {bdthemeErrors, themeCookie, settingsCookie, bdthemes} from \"../0globals\";\nimport ContentManager from \"./contentManager\";\nimport DataStore from \"./dataStore\";\nimport BDEvents from \"./bdEvents\";\nimport Utils from \"./utils\";\nimport DOM from \"./domtools\";\nimport bdEvents from \"./bdEvents\";\n\nclass ThemeModule {\n constructor(){\n window.Lightcord.BetterDiscord.ThemeModule = this\n }\n get folder() {return ContentManager.themesFolder;}\n}\n\nThemeModule.prototype.loadThemes = async function () {\n this.loadThemeData();\n bdthemeErrors.splice(0, 0, ...(await ContentManager.loadThemes()));\n const themes = Object.keys(bdthemes);\n\n for (let i = 0; i < themes.length; i++) {\n const theme = bdthemes[themes[i]];\n if (!themeCookie[theme.name]) themeCookie[theme.name] = false;\n if (themeCookie[theme.name]) DOM.addStyle(DOM.escapeID(theme.id), unescape(theme.css));\n\n await new Promise((resolve) => setTimeout(resolve, 10))\n }\n for (const theme in themeCookie) {\n if (!bdthemes[theme]) delete themeCookie[theme];\n }\n this.saveThemeData();\n // if (settingsCookie[\"fork-ps-5\"]) ContentManager.watchContent(\"theme\");\n};\n\nThemeModule.prototype.enableTheme = function(name, reload = false) {\n themeCookie[name] = true;\n this.saveThemeData();\n const theme = bdthemes[name];\n DOM.addStyle(DOM.escapeID(theme.id), unescape(theme.css));\n bdEvents.dispatch(\"theme-enabled\")\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${theme.name} v${theme.version} has been applied.`);\n};\n\nThemeModule.prototype.enable = function (name, reload = false) {\n return this.enableTheme(name, reload);\n};\n\nThemeModule.prototype.disableTheme = function(name, reload = false) {\n themeCookie[name] = false;\n this.saveThemeData();\n const theme = bdthemes[name];\n DOM.removeStyle(DOM.escapeID(theme.id));\n bdEvents.dispatch(\"theme-disabled\")\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${theme.name} v${theme.version} has been disabled.`);\n};\n\nThemeModule.prototype.disable = function (name, reload = false) {\n return this.disableTheme(name, reload);\n};\n\nThemeModule.prototype.toggleTheme = function(theme) {\n if (themeCookie[theme]) this.disableTheme(theme);\n else this.enableTheme(theme);\n};\n\nThemeModule.prototype.toggle = function (name) {\n return this.toggleTheme(name);\n};\n\nThemeModule.prototype.loadTheme = async function(filename) {\n const error = await ContentManager.loadContent(filename, \"theme\");\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({themes: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${filename} could not be loaded. It may not have been loaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${filename} could not be loaded.`, error);\n }\n const theme = Object.values(bdthemes).find(p => p.filename == filename);\n Utils.log(\"ContentManager\", `${theme.name} v${theme.version} was loaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme.name} v${theme.version} was loaded.`, {type: \"success\"});\n BDEvents.dispatch(\"theme-loaded\", theme.name);\n};\n\nThemeModule.prototype.unloadTheme = function(filenameOrName) {\n const bdtheme = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\n if (!bdtheme) return;\n const theme = bdtheme.name;\n if (themeCookie[theme]) this.disableTheme(theme, true);\n const error = ContentManager.unloadContent(bdthemes[theme].filename, \"theme\");\n delete bdthemes[theme];\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({themes: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} could not be unloaded. It may have not been loaded yet.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${theme} could not be unloaded. It may have not been loaded yet.`, error);\n }\n Utils.log(\"ContentManager\", `${theme} was unloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} was unloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"theme-unloaded\", theme);\n};\n\nThemeModule.prototype.delete = function(filenameOrName) {\n const bdtheme = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\n if (!bdtheme) return;\n this.unloadTheme(bdtheme.filename);\n const fullPath = require(\"path\").resolve(ContentManager.themesFolder, bdtheme.filename);\n require(\"fs\").unlinkSync(fullPath);\n};\n\nThemeModule.prototype.reloadTheme = async function(filenameOrName) {\n const bdtheme = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\n if (!bdtheme) return this.loadTheme(filenameOrName);\n const theme = bdtheme.name;\n const error = await ContentManager.reloadContent(bdthemes[theme].filename, \"theme\");\n if (themeCookie[theme]) this.disableTheme(theme, true), this.enableTheme(theme, true);\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({themes: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} could not be reloaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${theme} could not be reloaded.`, error);\n }\n Utils.log(\"ContentManager\", `${theme} v${bdthemes[theme].version} was reloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} v${bdthemes[theme].version} was reloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"theme-reloaded\", theme);\n};\n\nThemeModule.prototype.reload = function(name) {\n return this.reloadTheme(name);\n};\n\nThemeModule.prototype.edit = function(filenameOrName) {\n const bdplugin = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\n if (!bdplugin) return;\n const fullPath = require(\"path\").resolve(ContentManager.themesFolder, bdplugin.filename);\n require(\"electron\").shell.openItem(`${fullPath}`);\n};\n\nThemeModule.prototype.updateThemeList = function() {\n const results = ContentManager.loadNewContent(\"theme\");\n for (const filename of results.added) this.loadTheme(filename);\n for (const name of results.removed) this.unloadTheme(name);\n};\n\nThemeModule.prototype.loadThemeData = function() {\n const saved = DataStore.getSettingGroup(\"themes\");\n if (saved) {\n Object.assign(themeCookie, saved);\n }\n};\n\nThemeModule.prototype.saveThemeData = function () {\n DataStore.setSettingGroup(\"themes\", themeCookie);\n};\n\nexport default new ThemeModule();","import {settings} from \"../0globals\";\nimport themeModule from \"./themeModule\";\n\nexport default new class V2 {\n\n constructor() {\n this.editorDetached = false;\n this.WebpackModules = (() => {\n const req = webpackJsonp.push([[], {__extra_id__: (module, exports, req) => module.exports = req}, [[\"__extra_id__\"]]]);\n delete req.m.__extra_id__;\n delete req.c.__extra_id__;\n\n const shouldProtect = theModule => {\n if (theModule.remove && theModule.set && theModule.clear && theModule.get && !theModule.sort) return true;\n if (theModule.getToken || theModule.getEmail || theModule.showToken) return true;\n return false;\n };\n\n const protect = (theModule, isDefault) => {\n let mod = !isDefault ? theModule.default : theModule\n if(!mod)return theModule\n if (mod.remove && mod.set && mod.clear && mod.get && !mod.sort) return null;\n if (!mod.getToken && !mod.getEmail && !mod.showToken)return theModule\n\n const proxy = new Proxy(mod, {\n getOwnPropertyDescriptor: function(obj, prop) {\n if (prop === \"getToken\" || prop === \"getEmail\" || prop === \"showToken\") return undefined;\n return Object.getOwnPropertyDescriptor(obj, prop);\n },\n get: function(obj, func) {\n if (func == \"getToken\" && obj.getToken) return () => \"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa\";\n if (func == \"getEmail\" && obj.getEmail) return () => \"puppet11112@gmail.com\";\n if (func == \"showToken\" && obj.showToken) return () => true;\n if (func == \"__proto__\" && obj.__proto__) return proxy;\n \n return obj[func];\n }\n });\n\n if(!isDefault){\n return Object.assign({}, theModule, {default: proxy})\n }\n\n return proxy;\n };\n\n const find = (filter) => {\n for (const i in req.c) {\n if (req.c.hasOwnProperty(i)) {\n const m = req.c[i].exports;\n if (m && m.__esModule && m.default && filter(m.default)) return protect(m.default, true);\n if (m && filter(m))\treturn protect(m, false);\n }\n }\n // console.warn(\"Cannot find loaded module in cache\");\n return null;\n };\n\n const findAll = (filter) => {\n const modules = [];\n for (const i in req.c) {\n if (req.c.hasOwnProperty(i)) {\n const m = req.c[i].exports;\n if (m && m.__esModule && m.default && filter(m.default)) modules.push(protect(m.default, true));\n else if (m && filter(m)) modules.push(protect(m, false));\n }\n }\n return modules;\n };\n\n const findByUniqueProperties = (propNames) => find(module => propNames.every(prop => module[prop] !== undefined));\n const findByPrototypes = (protoNames) => find(module => module.prototype && protoNames.every(protoProp => module.prototype[protoProp] !== undefined));\n const findByDisplayName = (displayName) => find(module => module.displayName === displayName);\n\n return {find, findAll, findByUniqueProperties, findByPrototypes, findByDisplayName};\n })();\n\n this.internal = {\n react: this.WebpackModules.findByUniqueProperties([\"Component\", \"PureComponent\", \"Children\", \"createElement\", \"cloneElement\"]),\n reactDom: this.WebpackModules.findByUniqueProperties([\"findDOMNode\"])\n };\n this.getInternalInstance = e => e[Object.keys(e).find(k => k.startsWith(\"__reactInternalInstance\"))];\n window.Lightcord.BetterDiscord.V2 = this\n }\n\n initialize() {\n\n }\n\n joinBD1() {this.InviteActions.acceptInviteAndTransitionToInviteChannel(\"0Tmfo5ZbORCRqbAd\");}\n leaveBD1() {this.GuildActions.leaveGuild(\"86004744966914048\");}\n\n joinBD2() {this.InviteActions.acceptInviteAndTransitionToInviteChannel(\"2HScm8j\");}\n leaveBD2() {this.GuildActions.leaveGuild(\"280806472928198656\");}\n\n joinLC() {this.InviteActions.acceptInviteAndTransitionToInviteChannel(\"7eFff2A\");}\n leaveLC() {this.GuildActions.leaveGuild(\"705908350218666117\");}\n\n /**\n * @type {typeof React}\n */\n get react() {return this.internal.react;}\n /**\n * @type {typeof React}\n */\n get React() {return this.internal.react;}\n /**\n * @type {typeof import(\"react-dom\")}\n */\n get reactDom() {return this.internal.reactDom;}\n /**\n * @type {typeof import(\"react-dom\")}\n */\n get ReactDom() {return this.internal.reactDom;}\n /**\n * @type {typeof React.Component}\n */\n get reactComponent() {return this.internal.react.Component;}\n /**\n * @type {typeof React.Component}\n */\n get ReactComponent() {return this.internal.react.Component;}\n\n get anchorClasses() {return this.WebpackModules.findByUniqueProperties([\"anchorUnderlineOnHover\"]) || {anchor: \"anchor-3Z-8Bb\", anchorUnderlineOnHover: \"anchorUnderlineOnHover-2ESHQB\"};}\n get slateEditorClasses() {return this.WebpackModules.findByUniqueProperties([\"slateTextArea\"]);}\n get messageClasses() {return this.WebpackModules.findByUniqueProperties([\"message\", \"containerCozy\"]);}\n get guildClasses() {\n\t\tconst guildsWrapper = BDModules.get(e => e.wrapper && e.unreadMentionsBar)[0];\n const guilds = BDModules.get(e => e.guildsError && e.selected)[0]\n const pill = BDModules.get(e => e.blobContainer)[0]\n return Object.assign({}, guildsWrapper, guilds, pill);\n\t}\n\n get MessageContentComponent() {return this.WebpackModules.find(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));}\n get MessageComponent() {return this.WebpackModules.find(m => m.default && m.default.displayName && m.default.displayName == \"Message\");}\n get TimeFormatter() {return this.WebpackModules.findByUniqueProperties([\"dateFormat\"]);}\n get TooltipWrapper() {return this.WebpackModules.findByDisplayName(\"Tooltip\");}\n get NativeModule() {return this.WebpackModules.findByUniqueProperties([\"setBadge\"]);}\n get InviteActions() {return this.WebpackModules.findByUniqueProperties([\"acceptInvite\"]);}\n get GuildActions() {return this.WebpackModules.findByUniqueProperties([\"leaveGuild\"]);}\n get Tooltips() {return this.WebpackModules.find(m => m.hide && m.show && !m.search && !m.submit && !m.search && !m.activateRagingDemon && !m.dismiss);}\n get KeyGenerator() {return this.WebpackModules.find(m => m.toString && /\"binary\"/.test(m.toString()));}\n get LayerStack() {return this.WebpackModules.findByUniqueProperties([\"popLayer\"]);}\n get UserStore() {return this.WebpackModules.findByUniqueProperties([\"getCurrentUser\"]);}\n get ChannelStore() {return this.WebpackModules.findByUniqueProperties([\"getChannel\"]);}\n get ChannelActions() {return this.WebpackModules.findByUniqueProperties([\"openPrivateChannel\"]);}\n get PrivateChannelActions() {return this.WebpackModules.findByUniqueProperties([\"selectPrivateChannel\"]);}\n\n openDM(userId) {\n const selfId = this.UserStore.getCurrentUser().id;\n if (selfId == userId) return;\n const privateChannelId = this.ChannelStore.getDMFromUserId(userId);\n if (privateChannelId) return this.PrivateChannelActions.selectPrivateChannel(privateChannelId);\n this.ChannelActions.openPrivateChannel(selfId, userId);\n }\n\n parseSettings(cat) {\n return Object.keys(settings).reduce((arr, key) => {\n const setting = settings[key];\n if (setting.cat === cat && setting.implemented && !setting.hidden) {\n setting.text = key;\n arr.push(setting);\n } return arr;\n }, []);\n }\n\n};","import {bbdVersion} from \"../0globals\";\nimport WebpackModules from \"./webpackModules\";\nimport BDV2 from \"./v2\";\nimport DOM from \"./domtools\";\nexport default class Utils {\n /** Document/window width */\n static get screenWidth() { return Math.max(document.documentElement.clientWidth, window.innerWidth || 0); }\n /** Document/window height */\n static get screenHeight() { return Math.max(document.documentElement.clientHeight, window.innerHeight || 0); }\n\n static get WindowConfigFile() {\n return this._windowConfigFile = null;\n }\n\n static getAllWindowPreferences() {\n return {\n transparent: true,\n frame: false\n };\n }\n \n static getWindowPreference(key) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n \n static setWindowPreference(key, value) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n\n static stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n }\n\n static getTextArea() {\n return DOM.query(\".\"+removeDa(BDModules.get(e => e.channelTextArea && e.titleWrapper)[0].channelTextArea)+\" textarea\");\n }\n\n static insertText(textarea, text) {\n textarea.focus();\n textarea.selectionStart = 0;\n textarea.selectionEnd = textarea.value.length;\n document.execCommand(\"insertText\", false, text);\n }\n\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n\n static log(moduleName, message) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #3a71c1; font-weight: 700;\", \"color: #3a71c1;\", \"\");\n }\n\n static warn(moduleName, message) {\n console.warn(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #E8A400; font-weight: 700;\", \"color: #E8A400;\", \"\");\n }\n\n static err(moduleName, message, error) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: red; font-weight: 700;\", \"color: red;\", \"\");\n if (error) {\n console.groupCollapsed(\"%cError: \" + error.message, \"color: red;\");\n console.error(error.stack);\n console.groupEnd();\n }\n }\n\n /**\n * Format strings with placeholders (`{{placeholder}}`) into full strings.\n * Quick example: `PluginUtilities.formatString(\"Hello, {{user}}\", {user: \"Zerebos\"})`\n * would return \"Hello, Zerebos\".\n * @param {string} string - string to format\n * @param {object} values - object literal of placeholders to replacements\n * @returns {string} the properly formatted string\n */\n static formatString(string, values) {\n for (const val in values) {\n let replacement = values[val];\n if (Array.isArray(replacement)) replacement = JSON.stringify(replacement);\n if (typeof(replacement) === \"object\" && replacement !== null) replacement = replacement.toString();\n string = string.replace(new RegExp(`{{${val}}}`, \"g\"), replacement);\n }\n return string;\n }\n\n static escape(s) {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n }\n\n static testJSON(data) {\n try {\n return JSON.parse(data);\n }\n catch (err) {\n return false;\n }\n }\n\n static isEmpty(obj) {\n if (obj == null || obj == undefined || obj == \"\") return true;\n if (typeof(obj) !== \"object\") return false;\n if (Array.isArray(obj)) return obj.length == 0;\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) return false;\n }\n return true;\n }\n\n static suppressErrors(method, message) {\n return (...params) => {\n try { return method(...params);\t}\n catch (e) { this.err(\"SuppressedError\", \"Error occurred in \" + message, e); }\n };\n }\n\n static monkeyPatch(what, methodName, options) {\n const {before, after, instead, once = false, silent = false, force = false} = options;\n const displayName = options.displayName || what.displayName || what[methodName].displayName || what.name || what.constructor.displayName || what.constructor.name;\n if (!silent) console.log(\"patch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n if (!what[methodName]) {\n if (force) what[methodName] = function() {};\n else return console.error(methodName, \"does not exist for\", displayName); // eslint-disable-line no-console\n }\n const origMethod = what[methodName];\n let canceled = false\n const cancel = () => {\n if (!silent) console.log(\"unpatch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n //what[methodName] = origMethod;\n canceled = true // this allow to monkeypatch more than one time.\n };\n what[methodName] = function() {\n if(canceled){\n return origMethod.call(this, ...arguments)\n }\n const data = {\n thisObject: this,\n methodArguments: arguments,\n cancelPatch: cancel,\n originalMethod: origMethod,\n callOriginalMethod: () => data.returnValue = data.originalMethod.apply(data.thisObject, data.methodArguments)\n };\n if (instead) {\n const tempRet = Utils.suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n }\n else {\n if (before) Utils.suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) Utils.suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n if (once) cancel();\n return data.returnValue;\n };\n Object.assign(what[methodName], origMethod);\n what[methodName].__monkeyPatched = true;\n what[methodName].displayName = displayName;\n if (!what[methodName].__originalMethod) {\n what[methodName].__originalMethod = origMethod;\n what[methodName].toString = function() {return origMethod.toString();};\n }\n return cancel;\n }\n\n static onRemoved(node, callback) {\n const observer = new MutationObserver((mutations) => {\n for (let m = 0; m < mutations.length; m++) {\n const mutation = mutations[m];\n const nodes = Array.from(mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n if (directMatch || parentMatch) {\n observer.disconnect();\n callback();\n }\n }\n });\n\n observer.observe(document.body, {subtree: true, childList: true});\n }\n\n static getNestedProp(obj, path) {\n return path.split(/\\s?\\.\\s?/).reduce(function(obj, prop) {\n return obj && obj[prop];\n }, obj);\n }\n\n /**\n * This shows a toast similar to android towards the bottom of the screen.\n *\n * @param {string} content The string to show in the toast.\n * @param {object} options Options object. Optional parameter.\n * @param {string} options.type Changes the type of the toast stylistically and semantically. Choices: \"\", \"info\", \"success\", \"danger\"/\"error\", \"warning\"/\"warn\". Default: \"\"\n * @param {boolean} options.icon Determines whether the icon should show corresponding to the type. A toast without type will always have no icon. Default: true\n * @param {number} options.timeout Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\n */\n static showToast(content, options = {}) {\n if (!document.querySelector(\".bd-toasts\")) {\n const container = document.querySelector(\".\"+removeDa(BDModules.get(e => e.sidebar && e.hasNotice)[0].sidebar)+\" + div\") || null;\n const form = container ? container.querySelector(\"form\") : null;\n const bottom = form ? form.offsetHeight : 80;\n const toastWrapper = document.createElement(\"div\");\n toastWrapper.classList.add(\"bd-toasts\");\n toastWrapper.style.setProperty(\"bottom\", bottom+\"px\");\n document.querySelector(\"#app-mount\").appendChild(toastWrapper);\n }\n const toastWrapper = document.querySelector(\".bd-toasts\")\n const {type = \"\", icon = true, timeout = 3000} = options;\n const toastElem = document.createElement(\"div\");\n toastElem.classList.add(\"bd-toast\");\n if (type) toastElem.classList.add(\"toast-\" + type);\n if (type && icon) toastElem.classList.add(\"icon\");\n toastElem.innerText = content;\n toastWrapper.appendChild(toastElem);\n toastWrapper.style.setProperty(\"left\", `calc(50% - ${toastWrapper.offsetWidth / 2}px)`);\n setTimeout(() => {\n toastElem.classList.add(\"closing\");\n setTimeout(() => {\n toastElem.remove();\n if (!document.querySelectorAll(\".bd-toasts .bd-toast\").length) document.querySelector(\".bd-toasts\").remove();\n }, 300);\n }, timeout);\n }\n\n static alert(title, content) {\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0]\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0]\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0]\n const modal = DOM.createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
\n
${title}
\n
\n
\n
\n
\n ${content}\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { \n modal.remove(); \n closingListeners.forEach((listener) => {\n try{\n listener()\n }catch(e){\n console.error(e)\n }\n })\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { \n modal.remove(); \n closingListeners.forEach((listener) => {\n try{\n listener()\n }catch(e){\n console.error(e)\n }\n })\n }, 300);\n });\n DOM.query(\"#app-mount\").append(modal);\n const closingListeners = []\n return {\n close: () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { \n modal.remove(); \n closingListeners.forEach((listener) => {\n try{\n listener()\n }catch(e){\n console.error(e)\n }\n })\n }, 300);\n },\n onClose: (listener) => {\n closingListeners.push(listener)\n }\n }\n }\n\n static showContentErrors({plugins: pluginErrors = [], themes: themeErrors = []}) {\n if (!pluginErrors || !themeErrors) return;\n if (!pluginErrors.length && !themeErrors.length) return;\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0]\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0]\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0]\n const modal = DOM.createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
`);\n \n function generateTab(errors) {\n const container = DOM.createElement(`
`);\n for (const err of errors) {\n const error = DOM.createElement(`
\n
${err.name ? err.name : err.file}
\n
${err.message}
\n \n
`);\n container.append(error);\n if (err.error) {\n error.querySelectorAll(\"a\").forEach(el => el.addEventListener(\"click\", (e) => {\n e.preventDefault();\n Utils.err(\"ContentManager\", `Error details for ${err.name ? err.name : err.file}.`, err.error);\n }));\n }\n }\n return container;\n }\n \n const tabs = [generateTab(pluginErrors), generateTab(themeErrors)];\n \n modal.querySelectorAll(\".tab-bar-item\").forEach(el => el.addEventListener(\"click\", (e) => {\n e.preventDefault();\n const selected = modal.querySelector(\".tab-bar-item.selected\");\n if (selected) DOM.removeClass(selected, \"selected\");\n DOM.addClass(e.target, \"selected\");\n const scroller = modal.querySelector(\".scroller\");\n scroller.innerHTML = \"\";\n scroller.append(tabs[DOM.index(e.target)]);\n }));\n \n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { modal.remove(); }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { modal.remove(); }, 300);\n });\n DOM.query(\"#app-mount\").append(modal);\n if (pluginErrors.length) modal.querySelector(\".tab-bar-item\").click();\n else modal.querySelectorAll(\".tab-bar-item\")[1].click();\n }\n\n static showChangelogModal(options = {}) {\n const ModalStack = WebpackModules.findByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const ChangelogClasses = WebpackModules.findByProps(\"fixed\", \"improved\");\n const TextElement = WebpackModules.findByDisplayName(\"Text\");\n const FlexChild = WebpackModules.findByProps(\"Child\");\n const Titles = WebpackModules.findByProps(\"Tags\", \"default\");\n const Changelog = WebpackModules.find(m => m.defaultProps && m.defaultProps.selectable == false);\n const MarkdownParser = WebpackModules.findByProps(\"defaultRules\", \"parse\");\n if (!Changelog || !ModalStack || !ChangelogClasses || !TextElement || !FlexChild || !Titles || !MarkdownParser) return;\n \n const {\n image = \"https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5\", \n description = \"\", \n changes = [], \n title = \"BandagedBD\", \n subtitle = `v${bbdVersion}`, \n footer\n } = options;\n const ce = BDV2.React.createElement;\n const changelogItems = [ce(\"img\", {src: image})];\n if (description) changelogItems.push(ce(\"p\", null, MarkdownParser.parse(description)));\n for (let c = 0; c < changes.length; c++) {\n const entry = changes[c];\n const type = ChangelogClasses[entry.type] ? ChangelogClasses[entry.type] : ChangelogClasses.added;\n const margin = c == 0 ? ChangelogClasses.marginTop : \"\";\n changelogItems.push(ce(\"h1\", {className: `${type} ${margin}`,}, entry.title));\n const list = ce(\"ul\", null, entry.items.map(i => ce(\"li\", null, MarkdownParser.parse(i))));\n changelogItems.push(list);\n }\n const renderHeader = function() {\n return ce(FlexChild.Child, {grow: 1, shrink: 1},\n ce(Titles.default, {tag: Titles.Tags.H4}, title),\n ce(TextElement,{size: TextElement.Sizes.SMALL, color: TextElement.Colors.STANDARD, className: ChangelogClasses.date}, subtitle)\n );\n };\n \n const renderFooter = () => {\n const Anchor = WebpackModules.find(m => m.displayName == \"Anchor\");\n const AnchorClasses = WebpackModules.findByProps(\"anchorUnderlineOnHover\") || {anchor: \"anchor-3Z-8Bb\", anchorUnderlineOnHover: \"anchorUnderlineOnHover-2ESHQB\"};\n const joinSupportServer = (click) => {\n click.preventDefault();\n click.stopPropagation();\n ModalStack.pop();\n BDV2.joinBD2();\n };\n const supportLink = Anchor ? ce(Anchor, {onClick: joinSupportServer}, \"Join our Discord Server.\") : ce(\"a\", {className: `${AnchorClasses.anchor} ${AnchorClasses.anchorUnderlineOnHover}`, onClick: joinSupportServer}, \"Join our Discord Server.\");\n const defaultFooter = ce(TextElement,{size: TextElement.Sizes.SMALL, color: TextElement.Colors.STANDARD}, \"Need support? \", supportLink);\n return ce(FlexChild.Child, {grow: 1, shrink: 1}, footer ? footer : defaultFooter);\n };\n\n return ModalStack.push(function(props) {\n return ce(Changelog, Object.assign({\n className: ChangelogClasses.container,\n selectable: true,\n onScroll: _ => _,\n onClose: _ => _,\n renderHeader: renderHeader,\n renderFooter: renderFooter,\n children: changelogItems\n }, props));\n });\n }\n\n /**\n * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks.\n * @param {string} title - title of the modal\n * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Every string is wrapped in Discord's `Markdown` component so strings will show and render properly.\n * @param {object} [options] - options to modify the modal\n * @param {boolean} [options.danger=false] - whether the main button should be red or not\n * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button\n * @param {string} [options.cancelText=Cancel] - text for the cancel button\n * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button\n * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button\n * @param {string} [options.key] - key used to identify the modal. If not provided, one is generated and returned\n * @returns {string} - the key used for this modal\n */\n static showConfirmationModal(title, content, options = {}) {\n const ModalActions = WebpackModules.findByProps(\"openModal\", \"updateModal\");\n const Markdown = WebpackModules.findByDisplayName(\"Markdown\");\n const ConfirmationModal = WebpackModules.findByDisplayName(\"ConfirmModal\");\n if (!ModalActions || !ConfirmationModal || !Markdown) return Utils.alert(title, content);\n\n const emptyFunction = () => {};\n const {onConfirm = emptyFunction, onCancel = emptyFunction, confirmText = \"Okay\", cancelText = \"Cancel\", danger = false, key = undefined} = options;\n\n if (!Array.isArray(content)) content = [content];\n content = content.map(c => typeof(c) === \"string\" ? BDV2.React.createElement(Markdown, null, c) : c);\n return ModalActions.openModal(props => {\n return BDV2.React.createElement(ConfirmationModal, Object.assign({\n header: title,\n red: danger,\n confirmText: confirmText,\n cancelText: cancelText,\n onConfirm: onConfirm,\n onCancel: onCancel\n }, props), content);\n }, {modalKey: key});\n }\n\n static get removeDa(){\n return removeDa\n }\n}\n\nfunction removeDa(className){\n if(!className)return className\n return className.split(\" \").filter(e => !e.startsWith(\"da-\")).join(\" \")\n}\n\nUtils.showToast = Utils.suppressErrors(Utils.showToast, \"Could not show toast.\");\n\nwindow.Lightcord.BetterDiscord.Utils = Utils","export default class V2_SettingsPanel_Sidebar {\n\n constructor() {\n this.panels = {}\n }\n\n register(panel, component){\n this.panels[panel] = component\n }\n\n getComponent(panel, sidebar){\n return this.panels[panel](sidebar)\n }\n\n get items() {\n return [{\n text: \"BetterDiscord Settings\", \n id: \"core\"\n }, {\n text: \"Plugins\", \n id: \"plugins\"\n }, {\n text: \"Themes\", \n id: \"themes\"\n }, {\n text: \"Custom CSS\", \n id: \"customcss\"\n }];\n }\n\n get LCitems(){\n let items = [\n {\n text: \"Lightcord Settings\",\n id: \"lightcord\"\n }, {\n text: \"RichPresence\", \n id: \"status\"\n }, {\n text: \"Account Info\",\n id: \"accountinfo\"\n }\n ]\n return items\n }\n\n get LCDevItems(){\n let items = []\n if(!window.Lightcord.Settings.devMode)return items\n items.push(...[\n {\n section: \"DIVIDER\"\n },\n {\n section: \"HEADER\",\n label: \"Lightcord Api\"\n },\n {\n text: \"Components Preview\",\n id: \"lcapipreview\"\n }\n ])\n return items\n }\n\n render(sidebar) {\n return [\n {\n section: \"HEADER\",\n label: \"Lightcord\"\n },\n ...this.LCitems.map(e => {\n return {\n section: e.id,\n label: e.text,\n element: this.getComponent(e.id, sidebar)\n }\n }),\n ...this.LCDevItems.map(e => {\n if(e.section)return e\n return {\n section: e.id,\n label: e.text,\n element: this.getComponent(e.id, sidebar)\n }\n }),\n {\n section: \"DIVIDER\"\n },\n {\n section: \"CUSTOM\",\n element: this.getComponent(\"BDChangelogTitle\")\n },\n ...this.items.map(e => {\n return {\n section: e.id,\n label: e.text,\n element: this.getComponent(e.id, sidebar)\n }\n }),\n {\n section: \"DIVIDER\"\n }\n ]\n }\n}\n\n/**\n * No need to export settingsPanelSidebar on window\n */","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"./v2\";\r\nimport Utils from \"./utils\";\r\n\r\nexport default new class ColoredText {\r\n injectColoredText() {\r\n if (this.cancelColoredText) return;\r\n if (!BDV2.MessageComponent) return;\r\n\r\n this.cancelColoredText = Utils.monkeyPatch(BDV2.MessageComponent, \"default\", {before: (data) => {\r\n const props = data.methodArguments[0];\r\n if (!props || !props.childrenMessageContent) return;\r\n const messageContent = props.childrenMessageContent;\r\n\r\n if (!messageContent.type || !messageContent.type.type || messageContent.type.type.displayName != \"MessageContent\") return;\r\n const originalType = messageContent.type.type;\r\n if (originalType.__originalMethod) return; // Don't patch again\r\n messageContent.type.type = function(props) {\r\n const returnValue = originalType(props);\r\n const roleColor = settingsCookie[\"bda-gs-7\"] ? props.message.colorString || \"\" : \"\";\r\n returnValue.props.style = {color: roleColor};\r\n return returnValue;\r\n };\r\n\r\n messageContent.type.type.__originalMethod = originalType;\r\n Object.assign(messageContent.type.type, originalType);\r\n }});\r\n }\r\n\r\n removeColoredText() {\r\n let classNameMarkup = BDModules.get(e => e.markup)[0].markup\r\n document.querySelectorAll(\".\"+classNameMarkup.split(\" \")[0]).forEach(elem => {\r\n elem.style.setProperty(\"color\", \"\");\r\n });\r\n }\r\n};","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"./v2\";\r\nimport Utils from \"./utils\";\r\n\r\nexport default new class TFHour {\r\n inject24Hour() {\r\n if (this.cancel24Hour) return;\r\n\r\n const twelveHour = new RegExp(`([0-9]{1,2}):([0-9]{1,2})\\\\s(AM|PM)`);\r\n const convert = (data) => {\r\n if (!settingsCookie[\"bda-gs-6\"]) return;\r\n const matched = data.returnValue.match(twelveHour);\r\n if (!matched || matched.length !== 4) return;\r\n if (matched[3] === \"AM\") return data.returnValue = data.returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"00\" : matched[1].padStart(2, \"0\")}:${matched[2]}`);\r\n return data.returnValue = data.returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"12\" : parseInt(matched[1]) + 12}:${matched[2]}`);\r\n };\r\n\r\n const cancelCozy = Utils.monkeyPatch(BDV2.TimeFormatter, \"calendarFormat\", {after: convert}); // Called in Cozy mode\r\n const cancelCompact = Utils.monkeyPatch(BDV2.TimeFormatter, \"dateFormat\", {after: convert}); // Called in Compact mode\r\n this.cancel24Hour = () => {cancelCozy(); cancelCompact();}; // Cancel both\r\n }\r\n\r\n remove24Hour() {\r\n if (this.cancel24Hour) this.cancel24Hour();\r\n }\r\n};","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_SettingsTitle extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n//h2-2gWE-o title-3sZWYQ size16-14cGz5 height20-mO2eIN weightSemiBold-NJexzi da-h2 da-title da-size16 da-height20 da-weightSemiBold defaultColor-1_ajX0 da-defaultColor marginTop60-3PGbtK da-marginTop60 marginBottom20-32qID7 da-marginBottom20\r\n render() {\r\n return BDV2.react.createElement(\r\n \"h2\",\r\n {className: \"ui-form-title h2 margin-reset margin-bottom-20\"},\r\n this.props.text\r\n );\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_TabBarSeparator extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\"div\", {className: \"ui-tab-bar-separator margin-top-8 margin-bottom-8\"});\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\r\n\r\nexport default class V2C_ServerCard extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n if (!this.props.server.iconUrl) this.props.server.iconUrl = this.props.fallback;\r\n this.state = {\r\n imageError: false,\r\n joined: this.props.guildList.includes(this.props.server.identifier)\r\n };\r\n }\r\n\r\n render() {\r\n const {server} = this.props;\r\n let cardModule = BDModules.get(e => e.card && e.cardPrimary)[0]\r\n let flexModule = BDModules.get(e => e.flexChild && e._horizontalReverse)[0]\r\n let wrapModule = BDModules.get(e => e.noWrap && !e.streamerModeEnabled)[0]\r\n return BDV2.react.createElement(\r\n \"div\", // cardPrimary-1Hv-to\r\n {className: `${cardModule.card} ${cardModule.cardPrimary} ${BDModules.get(e => e.marginBottom8)[0].marginBottom8} bd-server-card${server.pinned ? \" bd-server-card-pinned\" : \"\"}`},\r\n // BDV2.react.createElement(\r\n // \"div\",\r\n // { className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY flex-1O1GKY directionRow-3v3tfG justifyStart-2yIZo0 alignStretch-1hwxMa noWrap-3jynv6\" },\r\n BDV2.react.createElement(\"img\", {ref: \"img\", className: \"bd-server-image\", src: server.iconUrl, onError: this.handleError.bind(this), draggable: false}),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: flexModule.flexChild+\" bd-server-content\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: flexModule.horizontal+\" \"+wrapModule.noWrap+\" bd-server-header\"},\r\n BDV2.react.createElement(\r\n \"h5\",\r\n {className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name\"},\r\n server.name\r\n ),\r\n BDV2.react.createElement(\r\n \"h5\",\r\n {className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count\"},\r\n server.members,\r\n \" Members\"\r\n )\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: flexModule.horizontal+\" \"+wrapModule.noWrap},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"scroller-2FKFPG scroller bd-server-description\"},\r\n server.description\r\n )\r\n )\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"flexChild-faoVW3 bd-server-tags\", style: {flex: \"1 1 auto\"}},\r\n server.categories.join(\", \")\r\n ),\r\n this.state.joined && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY\", style: {minHeight: \"12px\", marginTop: \"4px\", backgroundColor: \"#3ac15c\"}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Joined\"\r\n )\r\n ),\r\n server.error && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug\", style: {minHeight: \"12px\", marginTop: \"4px\", backgroundColor: \"#c13a3a\"}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Error\"\r\n )\r\n ),\r\n !server.error && !this.state.joined && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN\", style: {minHeight: \"12px\", marginTop: \"4px\"}, onClick: () => {this.join();}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Join\"\r\n )\r\n )\r\n )\r\n )\r\n // )\r\n );\r\n }\r\n\r\n handleError() {\r\n this.props.server.iconUrl = this.props.fallback;\r\n this.setState({imageError: true});\r\n }\r\n\r\n join() {\r\n this.props.join(this);\r\n //this.setState({joined: true});\r\n }\r\n}","import BDV2 from \"./v2\"\nconst {useState} = BDV2.react\n\n\nexport function useForceUpdate(){\n return useState()[1];\n}","import BDV2 from \"../../modules/v2\";\n\nimport SettingsTitle from \"../settingsTitle\";\nimport TabBarSeparator from \"../tabBarSeparator\";\n\nimport ServerCard from \"./serverCard\";\nimport { useForceUpdate } from \"../../modules/hooks\";\n\nlet SettingsView\nexport default class V2C_PublicServers extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n this.setInitialState();\n this.close = this.close.bind(this);\n this.changeCategory = this.changeCategory.bind(this);\n this.search = this.search.bind(this);\n this.searchKeyDown = this.searchKeyDown.bind(this);\n this.checkConnection = this.checkConnection.bind(this);\n this.join = this.join.bind(this);\n this.connect = this.connect.bind(this);\n\n this.GuildStore = BDV2.WebpackModules.findByUniqueProperties([\"getGuilds\"]);\n this.AvatarDefaults = BDV2.WebpackModules.findByUniqueProperties([\"getUserAvatarURL\", \"DEFAULT_AVATARS\"]);\n this.InviteActions = BDV2.WebpackModules.findByUniqueProperties([\"acceptInvite\"]);\n this.SortedGuildStore = BDV2.WebpackModules.findByUniqueProperties([\"getSortedGuilds\"]);\n\n this.hooks = []\n }\n\n componentDidMount() {\n this.checkConnection();\n }\n\n setInitialState() {\n this.state = {\n selectedCategory: -1,\n title: \"Loading...\",\n loading: true,\n servers: [],\n next: null,\n connection: {\n state: 0,\n user: null\n },\n section: this.categorySlugs[0],\n theme: \"dark\"\n };\n }\n\n close() {\n this.props.close()\n }\n\n search(query, clear) {\n const self = this;\n fetch(`${self.searchEndPoint}${query}${query ? \"&schema=new\" : \"?schema=new\"}`, {\n method: \"get\"\n }).then(async res => {\n if(res.status !== 200)throw await res.text()\n let data = await res.json()\n \n let servers = data.results.reduce((arr, server) => {\n server.joined = false;\n arr.push(server);\n // arr.push();\n return arr;\n }, []);\n\n if (!clear) {\n servers = self.state.servers.concat(servers);\n }\n else {\n //servers.unshift(self.bdServer);\n }\n\n let end = data.size + data.from;\n data.next = `?from=${end}`;\n if (self.state.term) data.next += `&term=${self.state.term}`;\n if (self.state.selectedCategory) data.next += `&category=${self.categoryButtons[self.state.selectedCategory]}`;\n if (end >= data.total) {\n end = data.total;\n data.next = null;\n }\n\n let title = `Showing 1-${end} of ${data.total} results in ${self.categoryButtons[self.state.selectedCategory]}`;\n if (self.state.term) title += ` for ${self.state.term}`;\n\n self.setState({\n loading: false,\n title: title,\n servers: servers,\n next: data.next\n });\n }).catch((err) => {\n console.error(err)\n return self.setState({\n loading: false,\n title: \"Failed to load servers. Check console for details\"\n });\n })\n }\n\n async join(serverCard) {\n if (serverCard.props.pinned) return this.InviteActions.acceptInvite(serverCard.props.invite_code);\n\n await fetch(`${this.joinEndPoint}/${serverCard.props.server.identifier}`,{\n method: \"GET\",\n credentials: \"include\",\n mode: \"cors\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n });\n\n serverCard.setState({joined: true});\n }\n\n connect() {\n const self = this;\n const options = self.windowOptions;\n options.x = Math.round(window.screenX + window.innerWidth / 2 - options.width / 2);\n options.y = Math.round(window.screenY + window.innerHeight / 2 - options.height / 2);\n\n const win = self.joinWindow = new (require(\"electron\").remote.BrowserWindow)(options);\n const url = \"https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info\";\n win.webContents.on(\"did-navigate\", (event, url) => {\n if (url != \"https://auth.discordservers.com/info\") return;\n win.close();\n self.checkConnection();\n });\n win.loadURL(url);\n win.setMenuBarVisibility(false)\n }\n\n get windowOptions() {\n return {\n width: 500,\n height: 550,\n backgroundColor: \"#282b30\",\n show: true,\n resizable: false,\n maximizable: false,\n minimizable: false,\n alwaysOnTop: true,\n frame: true,\n center: false,\n webPreferences: {\n nodeIntegration: false\n }\n };\n }\n\n get bdServer() {\n const server = {\n name: \"BetterDiscord\",\n online: \"30000+\",\n members: \"70000+\",\n categories: [\"community\", \"programming\", \"support\"],\n description: \"Official BetterDiscord server for support etc\",\n identifier: \"86004744966914048\",\n iconUrl: \"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp\",\n nativejoin: true,\n invite_code: \"0Tmfo5ZbORCRqbAd\",\n pinned: true\n };\n const server2 = {\n name: \"Lightcord\",\n online: \"100+\",\n members: \"300+\",\n categories: [\"community\", \"programming\", \"support\"],\n description: \"Official Lightcord server for support etc\",\n identifier: \"705908350218666117\",\n iconUrl: \"https://github.com/lightcord.png\",\n nativejoin: true,\n invite_code: \"7eFff2A\",\n pinned: true\n };\n const guildList = this.SortedGuildStore.getFlattenedGuildIds();\n const defaultList = this.AvatarDefaults.DEFAULT_AVATARS;\n return [\n BDV2.react.createElement(ServerCard, {server: server2, pinned: true, join: this.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]}),\n BDV2.react.createElement(ServerCard, {server: server, pinned: true, join: this.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]})\n ]\n }\n\n get searchEndPoint() {\n return \"https://search.discordservers.com\";\n }\n\n get joinEndPoint() {\n return \"https://j.discordservers.com\";\n }\n\n get connectEndPoint() {\n return \"https://join.discordservers.com/connect\";\n }\n\n async checkConnection() {\n const self = this;\n try {\n const response = await fetch(`https://auth.discordservers.com/info`,{\n method: \"GET\",\n credentials: \"include\",\n mode: \"cors\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n });\n const text = await response.text()\n if(!text){\n self.setState({\n title: \"Not connected to discordservers.com!\",\n loading: true,\n selectedCategory: -1,\n connection: {\n state: 1,\n user: null\n }\n });\n return\n }\n const data = JSON.parse(text)\n self.setState({\n selectedCategory: 0,\n connection: {\n state: 2,\n user: data\n }\n });\n self.search(\"\", true);\n }\n catch (error) {\n console.error(error)\n self.setState({\n title: \"Not connected to discordservers.com!\",\n loading: true,\n selectedCategory: -1,\n connection: {\n state: 1,\n user: null\n }\n });\n }\n }\n\n render() {\n this.hooks.forEach((e) => e())\n SettingsView = SettingsView || BDV2.WebpackModules.findByDisplayName(\"SettingsView\")\n return BDV2.react.createElement(\"div\", {id: \"pubslayerroot\"}, \n BDV2.react.createElement(\"div\", {id: \"pubslayer\"}, BDV2.react.createElement(SettingsView, {\n onSetSection: (section) => {\n this.changeCategory(this.categorySlugs.indexOf(section))\n },\n sections: this.sections,\n onClose: this.close,\n section: this.state.section\n }))\n );\n }\n\n get sections(){\n let sections = []\n sections.push({\n section: \"HEADER\",\n label: \"Public Servers\"\n }, {\n section: \"DIVIDER\"\n }, {\n section: \"CUSTOM\",\n element: this.searchInput.bind(null, () => this, this.searchKeyDown)\n }, {\n section: \"DIVIDER\"\n }, {\n section: \"HEADER\",\n label: \"Categories\"\n }, ...this.categoryButtons.map((value, index) => {\n return {\n section: this.categorySlugs[index],\n label: value,\n element: this.content.bind(null, () => this)\n }\n }), {\n section: \"DIVIDER\"\n }, {\n section: \"CUSTOM\",\n element: this.footer\n }, {\n section: \"CUSTOM\",\n element: this.connection.bind(null, () => this)\n })\n return sections\n }\n \n searchInput(getThis, searchKeyDown) {\n const [value, setValue] = BDV2.react.useState(\"\")\n return BDV2.react.createElement(\n \"div\",\n {className: \"ui-form-item\"},\n BDV2.react.createElement(\n \"div\",\n {className: \"ui-text-input flex-vertical\", style: {width: \"172px\", marginLeft: \"10px\"}},\n BDV2.react.createElement(\"input\", {\n ref: (serchinput) => (getThis().refs.searchinput = serchinput), \n onKeyDown: searchKeyDown, \n onChange: (e) => {\n setValue(e.target.value)\n }, \n type: \"text\", \n className: \"input default\", \n placeholder: \"Search...\", \n maxLength: \"50\",\n value: value\n })\n )\n );\n }\n\n searchKeyDown(e) {\n const self = this;\n if (self.state.loading || e.which !== 13) return;\n self.setState({\n loading: true,\n title: \"Loading...\",\n term: e.target.value\n });\n let query = `?term=${e.target.value}`;\n if (self.state.selectedCategory !== 0) {\n query += `&category=${self.categoryButtons[self.state.selectedCategory]}`;\n }\n self.search(query, true);\n }\n\n get categorySlugs(){\n return this.categoryButtons.map(e => e.toLowerCase().replace(/[^\\w\\d]+/g, \"_\"))\n }\n\n get categoryButtons() {\n return [\"All\", \"FPS Games\", \"MMO Games\", \"Strategy Games\", \"MOBA Games\", \"RPG Games\", \"Tabletop Games\", \"Sandbox Games\", \"Simulation Games\", \"Music\", \"Community\", \"Language\", \"Programming\", \"Other\"];\n }\n\n changeCategory(id) {\n const self = this;\n if (self.state.loading) return;\n self.setState({\n loading: true,\n selectedCategory: id,\n title: \"Loading...\",\n term: null,\n section: self.categorySlugs[id]\n });\n if (id === 0) {\n self.search(\"\", true);\n return;\n }\n self.search(`?category=${self.categoryButtons[id]}`, true);\n }\n\n content(getThis) {\n const self = getThis();\n self.useState()\n const guildList = self.SortedGuildStore.getFlattenedGuildIds();\n const defaultList = self.AvatarDefaults.DEFAULT_AVATARS;\n if (self.state.connection.state === 1) return BDV2.react.createElement(self.notConnected.bind(null, getThis));\n let columnModule = BDModules.get(e => e.contentColumnDefault)[0]\n return [BDV2.react.createElement(\n \"div\",\n {ref: (ref) => {\n (self.refs.content = ref)\n }, key: \"pc\", className: columnModule.contentColumn+\" \"+columnModule.contentColumn+\" content-column default\"},\n BDV2.react.createElement(SettingsTitle, {text: self.state.title}),\n self.bdServer,\n self.state.servers.map((server) => {\n return BDV2.react.createElement(ServerCard, {key: server.identifier, server: server, join: self.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]});\n }),\n self.state.next && BDV2.react.createElement(\n \"button\",\n {type: \"button\", onClick: () => {\n if (self.state.loading) return;self.setState({loading: true}); self.search(self.state.next, false);\n }, className: \"ui-button filled brand small grow\", style: {width: \"100%\", marginTop: \"10px\", marginBottom: \"10px\"}},\n BDV2.react.createElement(\n \"div\",\n {className: \"ui-button-contents\"},\n self.state.loading ? \"Loading\" : \"Load More\"\n )\n ),\n self.state.servers.length > 0 && BDV2.react.createElement(SettingsTitle, {text: self.state.title})\n )];\n }\n\n notConnected(getThis) {\n const self = getThis();\n //return BDV2.react.createElement(SettingsTitle, { text: self.state.title });\n let columnModule = BDModules.get(e => e.contentColumnDefault)[0]\n return [BDV2.react.createElement(\n \"div\",\n {key: \"ncc\", ref: (ref) => (self.refs.content = ref), className: columnModule.contentColumn+\" \"+columnModule.contentColumn+\" content-column default\"},\n BDV2.react.createElement(\n \"h2\",\n {className: \"ui-form-title h2 margin-reset margin-bottom-20\"},\n \"Not connected to discordservers.com!\",\n BDV2.react.createElement(\n \"button\",\n {\n onClick: self.connect,\n type: \"button\",\n className: \"ui-button filled brand small grow\",\n style: {\n display: \"inline-block\",\n minHeight: \"18px\",\n marginLeft: \"10px\",\n lineHeight: \"14px\"\n }\n },\n BDV2.react.createElement(\n \"div\",\n {className: \"ui-button-contents\"},\n \"Connect\"\n )\n )\n ), self.bdServer\n )];\n }\n\n footer() {\n return BDV2.react.createElement(\n \"div\",\n {className: \"ui-tab-bar-header\"},\n BDV2.react.createElement(\n \"a\",\n {href: \"https://discordservers.com\", target: \"_blank\"},\n \"Discordservers.com\"\n )\n );\n }\n\n useState(){\n const forceUpdate = useForceUpdate()\n BDV2.React.useEffect(() => {\n const listener = () => {\n forceUpdate()\n }\n this.hooks.push(listener)\n return () => {\n const index = this.hooks.findIndex(e => e===listener)\n if(index < 0)return\n this.hooks.splice(index, 1)\n }\n }, [])\n }\n\n connection(getThis) {\n const self = getThis();\n self.useState()\n const {connection} = self.state;\n if (connection.state !== 2) return BDV2.react.createElement(\"span\", null);\n\n return BDV2.react.createElement(\n \"span\",\n null,\n BDV2.react.createElement(TabBarSeparator, null),\n BDV2.react.createElement(\n \"span\",\n {style: {color: \"#b9bbbe\", fontSize: \"10px\", marginLeft: \"10px\"}},\n \"Connected as: \",\n `${connection.user.username}#${connection.user.discriminator}`\n ),\n BDV2.react.createElement(\n \"div\",\n {style: {padding: \"5px 10px 0 10px\"}},\n BDV2.react.createElement(\n \"button\",\n {style: {width: \"100%\", minHeight: \"20px\"}, type: \"button\", className: \"ui-button filled brand small grow\"},\n BDV2.react.createElement(\n \"div\",\n {className: \"ui-button-contents\", onClick: self.connect},\n \"Reconnect\"\n )\n )\n )\n );\n }\n}","export default class BugHunterBadge extends React.Component {\r\n render(){\r\n const props = this.props\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n } \r\n}","export default class Circus extends React.Component {\r\n render(){\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n } \r\n}","import BugHunterBadge from \"../svg/bug_hunter\"\nimport nodeFetch from \"node-fetch\"\nimport { settingsCookie } from \"../0globals\";\nimport Circus from \"../svg/circus\";\n\nexport function uuidv4() { // Generate UUID (No crypto rng)\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n} \n\nconst awaitingBadgesPromises = {}\nlet badgesToFetch = []\n\nexport default new class DistantServer {\n constructor(){\n this._cache = {\n badges: {\n\n }\n }\n window.Lightcord.BetterDiscord.DistantServer = this\n }\n\n get cache(){\n return this._cache\n }\n\n set cache(data){\n if(typeof data !== \"object\" || typeof this._cache !== \"object\")return this._cache = data\n return this._cache = Object.assign(this._cache, data)\n }\n\n /**\n * Get custom badges from the user ID.\n * @param {string} user The user ID \n * @returns {Promise}\n */\n async getBadges(user){\n if(this.cache.badges[user])return this.cache.badges[user]\n if(awaitingBadgesPromises[user])return awaitingBadgesPromises[user]\n\n let resolve\n const newPromise = new Promise((res) => (resolve = res))\n awaitingBadgesPromises[user] = newPromise\n\n const badges = []\n for(let badge of Constants.badges){\n if(badge.defaultUsers.includes(user))badges.push(badge)\n }\n const fetchedBadges = await new Promise((resolve) => {\n if(!settingsCookie[\"lightcord-5\"])return resolve([])\n badgesToFetch.push([user, resolve])\n setTimeout(() => {\n let users = badgesToFetch\n if(users.length === 0)return\n badgesToFetch = []\n handleRequest(Routes.badges, \"POST\", JSON.stringify(users.map(e => e[0])))\n .then(async res => {\n if(res.status !== 200){// Couldn't fetch badges: server error\n users.forEach(data => {\n data[1]([])// resolve no badge fetched\n })\n }\n const responseBody = await res.json()\n \n for(let user of responseBody){\n let promise = users.find(promise => promise[0] === user.user_id)\n promise[1](user.badges)\n }\n }).catch((err) => {// Couldn't fetch badges: error\n if(!(err instanceof LightcordError))console.error(err)\n users.forEach(data => {\n data[1]([])// resolve no badge fetched\n })\n })\n }, 0)\n })\n for(let badge of fetchedBadges){\n if(!Constants.badges.find(e => e.id === badge))continue // We do not have the Component, skip it.\n if(badges.find(e => e.id === badge))continue // Already inserted.\n badges.push(Constants.badges.find(e => e.id === badge))\n }\n this.cache = {\n badges: Object.assign(this.cache.badges, {[user]: badges})\n }\n setTimeout(() => {\n delete this.cache.badges[user]\n }, 600000);\n\n resolve(badges)\n delete awaitingBadgesPromises[user]\n return badges\n }\n}\n\nconst handleRequest = function(route, method, data){\n if(!settingsCookie[\"lightcord-5\"]){\n return Promise.reject(new LightcordError(\"The current settings blocked the request.\"))\n }\n return nodeFetch(`${Constants.SERVER_URL}/api/v1${route}`, {\n method,\n headers: {\n \"CLIENT\": \"Lightcord\",\n \"Authorization\": window.Lightcord.Api.Authorization || \"None::Anonymous\"\n },\n ...(data ? {\n body: data\n } : {})\n })\n}\n\nclass LightcordError extends Error {\n constructor(){\n super(...arguments)\n this.name = \"LightcordError\"\n }\n}\n\nexport const Constants = {\n SERVER_URL: \"https://lightcord.deroku.xyz\",\n badges: [ // TODO: Add more badges + server side svg\n {\n name: \"Lightcord Bug Hunter\",\n id: \"f04698f5-816b-41e3-bd01-92291193d7a5\",\n defaultUsers: [\n \"696481194443014174\",\n \"696003456611385396\"\n ],\n scopes: [],\n component: BugHunterBadge,\n href: \"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter\"\n }, {\n name: \"Buffoon\",\n id: \"06904d31-65b4-41ec-a50c-8658bbd1af96\",\n defaultUsers: [\n \"389016895543705602\",\n \"664600134528663565\",\n \"625350657829896224\"\n ],\n scopes: [],\n component: Circus,\n href: \"https://youtu.be/EJtb6z-dlT8?t=145\"\n }\n ]\n}\n\nexport const Routes = {\n badges: `/users/badges`\n}","import Utils from \"./utils\";\nimport v2 from \"./v2\";\nimport { uuidv4 } from \"./distant\";\nimport { timingSafeEqual } from \"crypto\";\n\nexport default new class Layers {\n constructor(){\n this.layers = []\n window.Lightcord.BetterDiscord.Layers = this\n }\n\n get isInjected(){\n return !!document.querySelector(\"div.Layers.injected\")\n }\n\n inject(){\n if(this.isInjected)return\n let [\n classNameLayers\n ] = [\n Utils.removeDa(v2.WebpackModules.find(e => e.layers && e.layer).layers)\n ]\n const layers = document.querySelector(\".\"+classNameLayers);\n if (!layers) return false;\n const ReactInstance = Lightcord.Api.Utils.FindReact(layers, 1)\n if(!ReactInstance)return layers\n this.ReactInstance = ReactInstance\n let render = ReactInstance.render\n ReactInstance.render = () => {\n let returnValue = render.call(ReactInstance)\n let classList = returnValue.props.children[1].props.className.split(\" \")\n classList.push(\"Layers\")\n classList.push(\"injected\")\n returnValue.props.children[1].props.className = classList.join(\" \")\n\n this.layers.forEach(layer => {\n returnValue.props.children[1].props.children.push(layer[1])\n })\n\n return returnValue\n }\n ReactInstance.forceUpdate()\n }\n\n createLayer(children, props = {}){\n let id = uuidv4()\n let layer = null\n this.layers.push([id, {\n layer = lay\n }} key={id} id={id} remove={() => {\n let index = this.layers.findIndex(e => e[0] === id)\n if(index === -1)return\n this.layers.splice(index, 1)\n layer = null\n if(this.ReactInstance)this.ReactInstance.forceUpdate()\n this.inject()\n }}>{children}])\n if(this.ReactInstance)this.ReactInstance.forceUpdate()\n this.inject()\n return {\n remove: () => {\n if(!layer){\n let index = this.layers.findIndex(e => e[0] === id)\n if(index === -1)return\n this.layers.splice(index, 1)\n layer = null\n if(this.ReactInstance)this.ReactInstance.forceUpdate()\n this.inject()\n }else{\n layer.remove()\n }\n }\n }\n }\n}\n\n\nlet LayerModules\nexport class Layer extends React.Component {\n constructor(){\n super(...arguments)\n this.state = {\n animation: new this.modules[0].default.Value(0)\n } \n this.props.getLayer(this)\n this.keydown = this.keydown.bind(this)\n }\n\n keydown(e){\n if (e.which === 27) {\n this.remove()\n }\n }\n\n get modules(){\n return LayerModules || (LayerModules = [\n v2.WebpackModules.find(e => e.default && e.default.Value && e.default.div)\n ])\n }\n\n componentWillUnmount(){\n window.removeEventListener(\"keydown\", this.keydown)\n }\n\n componentDidMount(ev){\n window.addEventListener(\"keydown\", this.keydown)\n }\n\n remove(){\n this.props.remove()\n }\n\n componentWillEnter(ev){\n this.modules[0].default.timing(this.state.animation, {\n toValue: 1,\n duration: 100\n }).start(ev)\n }\n\n componentWillLeave(ev){\n this.modules[0].default.timing(this.state.animation, {\n toValue: 0,\n duration: 100\n }).start(ev)\n }\n\n render(){\n let interpolation = this.state.animation.interpolate({\n inputRange: [0, 1],\n outputRange: [1.07, 1]\n })\n let style = {\n opacity: this.state.animation,\n transform: [{\n scale: interpolation\n }]\n }\n let Div = this.modules[0].default.div\n return
e).join(\" \") || null} style={style}>\n {this.props.children(() => {\n this.remove()\n })}\n
\n }\n}\nLayer.defaultProps = {\n id: null,\n children: null\n}","import {settingsCookie} from \"../0globals\";\nimport BDV2 from \"./v2\";\nimport webpackModules from \"./webpackModules\";\nimport Utils from \"./utils\";\nimport DOM from \"./domtools\";\n\nimport V2C_PublicServers from \"../ui/publicservers/publicServers\";\nimport Layers from \"./Layers\";\n\nexport default new class V2_PublicServers {\n\n constructor() {\n this._appendButton = this._appendButton.bind(this);\n window.Lightcord.BetterDiscord.V2_PublicServers = this\n }\n\n render() {\n Layers.createLayer((close) => {\n return BDV2.react.createElement(V2C_PublicServers, {rootId: \"pubslayerroot\", close})\n })\n }\n\n get button() {\n const btn = DOM.createElement(`
`);\n if (!settingsCookie[\"bda-gs-1\"]) btn.style.display = \"none\";\n const label = DOM.createElement(`
public
`);\n label.addEventListener(\"click\", () => {this.render();});\n btn.append(label);\n return btn;\n }\n\n _appendButton() {\n let [\n classNametutorialContainer\n ] = [\n Utils.removeDa(BDModules.get(e => e.downloadProgress && e.tutorialContainer)[0].tutorialContainer)\n ]\n if (DOM.query(\"#bd-pub-li\")) return;\n const guilds = DOM.query(`div.${classNametutorialContainer} > div`);\n DOM.after(guilds, this.button);\n }\n\n addButton() {\n if (this.guildPatch) return;\n const GuildList = webpackModules.find(m => m.default && m.default.displayName == \"NavigableGuilds\");\n const GuildListOld = webpackModules.findByDisplayName(\"Guilds\");\n if (!GuildList && !GuildListOld) Utils.warn(\"PublicServer\", \"Can't find GuildList component\");\n this.guildPatch = Utils.monkeyPatch(GuildList ? GuildList : GuildListOld.prototype, GuildList ? \"default\" : \"render\", {after: this._appendButton});\n this._appendButton();\n }\n\n removeButton() {\n this.guildPatch();\n delete this.guildPatch;\n const button = DOM.query(\"#bd-pub-li\");\n if (button) button.remove();\n }\n};","import DOM from \"./domtools\";\r\n\r\nconst style = `\r\n .container-2Rl01u {\r\n display: none!important;\r\n }\r\n\r\n .chat-3bRxxu {\r\n display: none!important;\r\n }\r\n\r\n .sidebar-2K8pFh {\r\n flex-grow: 1!important;\r\n }\r\n`;\r\n\r\nexport default new class VoiceMode {\r\n start() {\r\n DOM.addStyle(\"VoiceMode\", style);\r\n }\r\n\r\n stop() {\r\n DOM.removeStyle(\"VoiceMode\");\r\n }\r\n};","import WebpackModules from \"./webpackModules\";\n\nconst normalizedPrefix = \"da\";\nconst randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`);\n\nexport default new class ClassNormalizer {\n constructor(){\n window.Lightcord.BetterDiscord.ClassNormalizer = this\n }\n stop() {\n if (!this.hasPatched) return;\n this.unpatchClassModules(WebpackModules.findAll(this.moduleFilter.bind(this)));\n this.revertElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = false;\n }\n\n start() {\n if (this.hasPatched) return;\n this.patchClassModules(WebpackModules.findAll(this.moduleFilter.bind(this)));\n this.normalizeElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = true;\n this.patchDOMMethods();\n }\n\n patchClassModules(modules) {\n for (const module of modules) {\n this.patchClassModule(normalizedPrefix, module);\n }\n }\n\n unpatchClassModules(modules) {\n for (const module of modules) {\n this.unpatchClassModule(normalizedPrefix, module);\n }\n }\n\n shouldIgnore(value) {\n if (!isNaN(value)) return true;\n if (value.endsWith(\"px\") || value.endsWith(\"ch\") || value.endsWith(\"em\") || value.endsWith(\"ms\")) return true;\n if (value.startsWith(\"layerContainer-\")) return true;\n if (value.startsWith(\"#\") && (value.length == 7 || value.length == 4)) return true;\n if (value.includes(\"calc(\") || value.includes(\"rgba\")) return true;\n return false;\n }\n\n moduleFilter(module) {\n if (typeof module !== \"object\" || Array.isArray(module)) return false;\n if (module.__esModule) return false;\n if (!Object.keys(module).length) return false;\n for (const baseClassName in module) {\n const value = module[baseClassName];\n if (typeof value !== \"string\") return false;\n if (this.shouldIgnore(value)) continue;\n if (value.split(\"-\").length === 1) return false;\n if (!randClass.test(value.split(\" \")[0])) return false;\n }\n\n return true;\n }\n\n patchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n const classList = value.split(\" \");\n for (const normalClass of classList) {\n const match = normalClass.match(randClass);\n if (!match || !match.length || match.length < 2) continue; // Shouldn't ever happen since they passed the moduleFilter, but you never know\n const camelCase = match[1].split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n classNames[baseClassName] += ` ${componentName}-${camelCase}`;\n }\n }\n }\n\n unpatchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n let newString = \"\";\n const classList = value.split(\" \");\n for (const normalClass of classList) {\n if (normalClass.startsWith(`${componentName}-`)) continue;\n newString += ` ${normalClass}`;\n }\n classNames[baseClassName] = newString.trim();\n }\n }\n\n normalizeElement(element) {\n if (!(element instanceof Element)) return;\n const classes = element.classList;\n for (let c = 0, clen = classes.length; c < clen; c++) {\n if (!randClass.test(classes[c])) continue;\n const match = classes[c].match(randClass)[1];\n const newClass = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n element.classList.add(`${normalizedPrefix}-${newClass}`);\n }\n for (const child of element.children) this.normalizeElement(child);\n }\n\n revertElement(element) {\n if (!(element instanceof Element)) return;\n if (element.children && element.children.length) this.revertElement(element.children[0]);\n if (element.nextElementSibling) this.revertElement(element.nextElementSibling);\n const classes = element.classList;\n const toRemove = [];\n for (let c = 0; c < classes.length; c++) {\n if (classes[c].startsWith(`${normalizedPrefix}-`)) toRemove.push(classes[c]);\n }\n element.classList.remove(...toRemove);\n }\n\n patchDOMMethods() {\n const contains = DOMTokenList.prototype.contains;\n DOMTokenList.prototype.contains = function(token) {\n // const tokens = token.split(\" \");\n return Reflect.apply(contains, this, [token.split(\" \")[0]]);\n // return tokens.every(t => contains.call(this, t));\n };\n\n const add = DOMTokenList.prototype.add;\n DOMTokenList.prototype.add = function(...tokens) {\n for (let t = 0; t < tokens.length; t++) {\n tokens[t] = tokens[t].split(\" \")[0];\n }\n return Reflect.apply(add, this, tokens);\n };\n\n const remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.remove = function(...tokens) {\n for (let t = 0; t < tokens.length; t++) {\n tokens[t] = tokens[t].split(\" \")[0];\n }\n return Reflect.apply(remove, this, tokens);\n };\n }\n\n};","import {settingsCookie} from \"../0globals\";\nimport BDV2 from \"./v2\";\nimport DOM from \"./domtools\";\nimport Utils from \"./utils\";\n\nexport default new class DevMode {\n constructor() {\n this.debugListener = this.debugListener.bind(this);\n this.copySelectorListener = this.copySelectorListener.bind(this);\n }\n\n start() {\n this.startDebugListener();\n if (settingsCookie[\"fork-dm-1\"]) this.startCopySelector();\n }\n \n stop() {\n this.stopDebugListener();\n this.stopCopySelector();\n }\n\n startDebugListener() {\n this.stopDebugListener();\n document.addEventListener(\"keydown\", this.debugListener);\n }\n\n stopDebugListener() {\n document.removeEventListener(\"keydown\", this.debugListener);\n }\n\n startCopySelector() {\n this.stopCopySelector();\n document.addEventListener(\"contextmenu\", this.copySelectorListener);\n }\n\n stopCopySelector() {\n document.removeEventListener(\"contextmenu\", this.copySelectorListener);\n }\n\n debugListener(e) {\n if (e.which === 119 || e.which == 118) {//F8\n console.log(\"%c[%cDevMode%c] %cBreak/Resume\", \"color: red;\", \"color: #303030; font-weight:700;\", \"color:red;\", \"\");\n debugger; // eslint-disable-line no-debugger\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n }\n\n copySelectorListener(e) {\n try{\n e.stopPropagation();\n const selector = this.getSelector(e.target);\n \n let [\n classLayer, \n classItems\n ] = [\n BDModules.get((e) => e.layer && typeof e.layer === \"string\" && e.disabledPointerEvents)[0],\n BDModules.get((e) => e.menu)[0]\n ]\n \n function attach() {\n if(!classItems || !classLayer.layer)return console.log(classItems, classLayer.layer)\n\n let cm = DOM.query(\".\"+Utils.removeDa(classItems.menu));\n if (!cm) {\n const container = DOM.query(\"#app-mount > .\"+Utils.removeDa(classLayer.layerContainer));\n const cmWrap = DOM.createElement(`
`);\n cm = DOM.createElement(`
`);\n cmWrap.append(cm);\n container.append(cmWrap);\n cmWrap.style.top = e.clientY + \"px\";\n cmWrap.style.left = e.clientX + \"px\";\n cmWrap.setAttribute(\"role\", \"menu\")\n cmWrap.setAttribute(\"tabindex\", \"-1\")\n cmWrap.id = \"bd-copy-selector-context\"\n cmWrap.setAttribute(\"aria-label\", \"Copy Selector Actions\")\n\n const scrollerClasses = BDModules.get((e) => e.scrollerWrap)[0]\n const scrollerWrap = DOM.createElement(`
`)\n const scroller = DOM.createElement(`
e.scroller)[0].scroller} ${classItems.scroller}\">
`)\n scrollerWrap.append(scroller)\n cm.append(scrollerWrap)\n\n const removeCM = function(e) {\n if (e.keyCode && e.keyCode !== 27) return;\n cmWrap.remove();\n document.removeEventListener(\"click\", removeCM);\n document.removeEventListener(\"contextmenu\", removeCM);\n document.removeEventListener(\"keyup\", removeCM);\n };\n document.addEventListener(\"click\", removeCM);\n document.addEventListener(\"contextmenu\", removeCM);\n document.addEventListener(\"keyup\", removeCM);\n }\n const cmWrap = cm.parentElement\n \n const scroller = cm.childNodes[0].childNodes[0]\n const cmg = DOM.createElement(`
`);\n /**\n * @type {HTMLElement}\n */\n const cmi = DOM.createElement(`
`);\n cmi.append(DOM.createElement(`
Copy Selector
`));\n cmi.addEventListener(\"click\", () => {\n BDV2.NativeModule.copy(selector);\n cmWrap.style.display = \"none\"\n });\n cmi.addEventListener(\"mouseover\", (e) => {\n let elements = DOM.queryAll(\"div[role=menuitem].\"+Utils.removeDa(classItems.focused))\n elements && elements.forEach(elem => elem.classList.remove(classItems.focused))\n cmi.classList.add(classItems.focused)\n })\n cmi.addEventListener(\"mouseout\", (e) => {\n cmi.classList.remove(classItems.focused)\n })\n cmg.append(cmi);\n if(scroller.childNodes.length){ // apend a separator\n const separator = DOM.createElement(`
`)\n scroller.append(separator)\n }\n scroller.append(cmg);\n if(cmWrap.clientHeight < cmWrap.scrollHeight){\n console.log(\"overflowing \"+cmWrap.style.top)\n cmWrap.style.top = (cmWrap.style.top - cmg.clientHeight) + \"px\";\n console.log(\"overflowing\"+cmWrap.style.top)\n }\n }\n \n setTimeout(attach, 1);\n }catch(e){\n console.error(e)\n }\n }\n\n getSelector(element) {\n if (element.id) return `#${element.id}`;\n /**\n * \n * @param {HTMLElement} el \n */\n function fullPath(el){\n var names = [];\n while (el.parentNode){\n if (el.id){\n names.unshift('#'+el.id);\n break;\n }else{\n if (el==el.ownerDocument.documentElement) names.unshift(el.tagName.toLowerCase()+Array.from(el.classList.entries()).map(e => \".\"+e).join(\"\"));\n else{\n for (var c=1,e=el;e.previousElementSibling;e=e.previousElementSibling,c++);\n names.unshift(el.tagName.toLowerCase()+((typeof el.className === \"string\" && el.className) || \"\").split(\" \").filter(e => !!e).map(e => \".\"+e).join(\"\")+\":nth-child(\"+c+\")\");\n }\n el=el.parentNode;\n }\n }\n return names.join(\" > \");\n }\n return fullPath(element)\n }\n};","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class Switch extends React.Component {\n constructor(props) {\n super(props);\n this.state = {checked: this.props.checked};\n this.onChange = this.onChange.bind(this);\n this.switch = \n }\n\n onChange(value) {\n if (this.props.disabled) return;\n this.props.onChange(value);\n this.setState({checked: value});\n }\n\n render() {\n return this.switch\n }\n}","import BDV2 from \"../modules/v2\";\nimport Switch from \"./components/switch\";\n\nlet classnames = []\nfunction getClassName(name){\n let className = classnames.find(e => e.startsWith(name+\"-\"))\n if(className)return className\n className = BDModules.get(e => e[name])[0][name]\n classnames.push(className)\n return className\n}\n\nexport default class SwitchItem extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n\n onChange() {\n this.props.checked = !this.props.checked;\n this.props.onChange(this.props.id, this.props.checked);\n }\n\n render() {\n let {text, info} = this.props.data;\n if(this.props.data.experimental){\n if(!classnames.find(e => e.startsWith(\"beta-\"))){\n classnames.push(BDModules.get(e => e.beta && (!e.container && !e.userSettingsVoice))[0].beta)\n }\n info = [\n info,\n React.createElement(\"sup\", {className: getClassName(\"beta\")}, \"(EXPERIMENTAL)\")\n ]\n }\n return BDV2.react.createElement(\"div\", {className: \"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item\"},\n BDV2.react.createElement(\"div\", {className: \"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap\"},\n BDV2.react.createElement(\"h3\", {key: \"title\", className: \"ui-form-title h3 margin-reset margin-reset ui-flex-child\"}, text),\n BDV2.react.createElement(Switch, {key: \"switch\", onChange: this.onChange, checked: this.props.checked})\n ),\n BDV2.react.createElement(\"div\", {className: \"ui-form-text style-description margin-top-4\", style: {flex: \"1 1 auto\"}}, info)\n );\n }\n}","let marginModule = BDModules.get(e => e.marginTop60)[0]\r\n\r\nexport default class MarginTop extends React.Component {\r\n render(){\r\n if(!marginModule)marginModule = BDModules.get(e => e.marginTop60)[0]\r\n return
\r\n }\r\n}","import {settingsCookie} from \"../0globals\";\nimport BDV2 from \"../modules/v2\";\n\nimport SettingsTitle from \"./settingsTitle\";\nimport Switch from \"./switch\";\nimport MarginTop from \"./margintop\";\n\nlet formModule\nlet switchItem\nlet betaClassNames\nexport default class V2C_SettingsGroup extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n\n this.state = {\n error: false\n }\n }\n\n renderOldSettings() {\n const {title, settings, button} = this.props;\n const buttonComponent = button ? BDV2.react.createElement(\"button\", {key: \"title-button\", className: \"bd-pfbtn\", onClick: button.onClick}, button.title) : null;\n return [BDV2.react.createElement(SettingsTitle, {text: title}),\n buttonComponent,\n settings.map(setting => {\n return BDV2.react.createElement(Switch, {id: setting.id, key: setting.id, data: setting, checked: settingsCookie[setting.id], onChange: (id, checked) => {\n this.props.onChange(id, checked);\n }});\n })];\n }\n\n componentDidCatch(err, errInfo){\n console.log(err, errInfo)\n this.setState({\n error: true\n })\n }\n\n render(){\n if(this.state.error){\n try{\n return this.renderOldSettings()\n }catch(e){\n console.error(e)\n return null\n }\n }else{\n try{\n if(!formModule)formModule = BDV2.WebpackModules.find(e => e.FormSection)\n if(!switchItem)switchItem = BDV2.WebpackModules.find(e => e.default && e.default.displayName === \"SwitchItem\")\n if(!betaClassNames)betaClassNames = BDV2.WebpackModules.find(e => e.beta && (!e.container && !e.userSettingsVoice))\n \n let children = []\n if(this.props.description){\n children.push(\n {this.props.description}\n , )\n }\n children.push(...this.props.settings.map(setting => {\n let info = [\n setting.text\n ]\n if(setting.experimental){\n info.push((EXPERIMENTAL))\n }\n return {\n this.props.onChange(setting.id, ev.target.checked);\n this.forceUpdate()\n }} key={setting.id} value={settingsCookie[setting.id]} className={__SECRET_EMOTION__.css({\n marginBottom: \"20px\"\n })} disabled={false} hideBorder={false}\n size={switchItem.default.Sizes.DEFAULT} theme={switchItem.default.Themes.DEFAULT} note={setting.info}>\n {info}\n \n }))\n return \n {children}\n \n }catch(e){\n console.error(e)\n setImmediate(()=>{\n this.setState({\n error: true\n })\n })\n return null\n }\n }\n }\n}","import BDV2 from \"../modules/v2\";\r\n\r\nimport SettingsGroup from \"./settingsGroup\";\r\nimport MarginTop from \"./margintop\";\r\n\r\nexport default class V2C_SectionedSettingsPanel extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return this.props.sections.map((section, i) => {\r\n return [\r\n i !== 0 ? BDV2.react.createElement(MarginTop, {}) : null,\r\n BDV2.react.createElement(SettingsGroup, Object.assign({}, section, {onChange: this.props.onChange}))\r\n ]\r\n })\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_Checkbox extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n this.onClick = this.onClick.bind(this);\r\n this.setInitialState();\r\n }\r\n\r\n setInitialState() {\r\n this.state = {\r\n checked: this.props.checked || false\r\n };\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\r\n \"li\",\r\n null,\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"checkbox \"+BDModules.get(e => e.checkboxElement)[0].checkbox, onClick: this.onClick},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"checkbox-inner \"+BDModules.get(e => e.checkboxInner)[0].checkboxInner},\r\n BDV2.react.createElement(\"input\", {className: BDModules.get(e => e.checkboxElement)[0].checkboxElement, checked: this.state.checked, onChange: () => {}, type: \"checkbox\"}),\r\n BDV2.react.createElement(\"span\", null)\r\n ),\r\n BDV2.react.createElement(\r\n \"span\",\r\n null,\r\n this.props.text\r\n )\r\n )\r\n );\r\n }\r\n\r\n onClick() {\r\n this.props.onChange(this.props.id, !this.state.checked);\r\n this.setState({\r\n checked: !this.state.checked\r\n });\r\n }\r\n}","import {settingsCookie} from \"../0globals\";\nimport Settings from \"../modules/settingsPanel\";\nimport BDV2 from \"../modules/v2\";\nimport DataStore from \"../modules/dataStore\";\nimport DOM from \"../modules/domtools\";\nimport Utils from \"../modules/utils\"\n\nimport Checkbox from \"./checkbox\";\n\nexport default class V2C_CssEditorDetached extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n const self = this;\n self.onClick = self.onClick.bind(self);\n self.updateCss = self.updateCss.bind(self);\n self.saveCss = self.saveCss.bind(self);\n self.onChange = self.onChange.bind(self);\n }\n\n componentDidMount() {\n DOM.addClass(DOM.query(\"#app-mount\"), \"bd-detached-editor\");\n BDV2.editorDetached = true;\n // this.updateLineCount();\n this.editor = ace.edit(\"bd-customcss-editor-detached\");\n this.editor.setTheme(\"ace/theme/discord\");\n this.editor.session.setMode(\"ace/mode/css\");\n this.editor.setShowPrintMargin(false);\n this.editor.setFontSize(14);\n this.editor.on(\"change\", () => {\n if (!settingsCookie[\"bda-css-0\"]) return;\n this.saveCss();\n this.updateCss();\n });\n\n }\n\n componentWillUnmount() {\n DOM.removeClass(DOM.query(\"#app-mount\"), \"bd-detached-editor\");\n BDV2.editorDetached = false;\n this.editor.destroy();\n }\n\n updateLineCount() {\n const lineCount = this.refs.editor.value.split(\"\\n\").length;\n if (lineCount == this.props.lines) return;\n this.refs.lines.textContent = Array.from(new Array(lineCount), (_, i) => i + 1).join(\".\\n\") + \".\";\n this.props.lines = lineCount;\n }\n\n get options() {\n return {\n lineNumbers: true,\n mode: \"css\",\n indentUnit: 4,\n theme: \"material\",\n scrollbarStyle: \"simple\"\n };\n }\n\n get css() {\n const _ccss = DataStore.getBDData(\"bdcustomcss\");\n let ccss = \"\";\n if (_ccss && _ccss !== \"\") {\n ccss = Buffer.from(_ccss, \"base64\").toString(\"utf8\");\n }\n return ccss;\n }\n\n get root() {\n const _root = DOM.query(\"#bd-customcss-detach-container\");\n if (!_root) {\n if (!this.injectRoot()) return null;\n return this.detachedRoot;\n }\n return _root;\n }\n\n injectRoot() {\n const app = DOM.query(\".app, .\"+Utils.removeDa(BDModules.get(e => e.app && e.layers)[0].app));\n if (!app) return false;\n DOM.insertAfter(DOM.createElement(`
`), app);\n return true;\n }\n\n render() {\n const self = this;\n return BDV2.react.createElement(\n \"div\",\n {className: \"bd-detached-css-editor\", id: \"bd-customcss-detach-editor\"},\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-innerpane\"},\n BDV2.react.createElement(\"div\", {className: \"editor-wrapper\"},\n BDV2.react.createElement(\"div\", {id: \"bd-customcss-editor-detached\", className: \"editor\", ref: \"editor\"}, self.css)\n ),\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-attach-controls\"},\n BDV2.react.createElement(\n \"ul\",\n {className: \"checkbox-group\"},\n BDV2.react.createElement(Checkbox, {id: \"live-update\", text: \"Live Update\", onChange: self.onChange, checked: settingsCookie[\"bda-css-0\"]})\n ),\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-detach-controls-button\"},\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"3px 0 0 3px\", borderRight: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"update\");\n }},\n \"Update\"\n ),\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"0\", borderLeft: \"1px solid #2d2d2d\", borderRight: \"1px solid #2d2d2d\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"save\");\n }},\n \"Save\"\n ),\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"0 3px 3px 0\", borderLeft: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"attach\");\n }},\n \"Attach\"\n ),\n BDV2.react.createElement(\n \"span\",\n {style: {fontSize: \"10px\", marginLeft: \"5px\"}},\n \"Unsaved changes are lost on attach\"\n )\n )\n )\n )\n );\n }\n\n onChange(id, checked) {\n switch (id) {\n case \"live-update\":\n settingsCookie[\"bda-css-0\"] = checked;\n Settings.saveSettings();\n break;\n }\n }\n\n onClick(id) {\n const self = this;\n switch (id) {\n case \"attach\":\n if (DOM.query(\"#editor-detached\")) self.props.attach();\n BDV2.reactDom.unmountComponentAtNode(self.root);\n self.root.remove();\n break;\n case \"update\":\n self.updateCss();\n break;\n case \"save\":\n self.saveCss();\n break;\n }\n }\n\n updateCss() {\n DOM.removeStyle(\"customcss\");\n DOM.addStyle(\"customcss\", this.editor.session.getValue());\n }\n\n saveCss() {\n DataStore.setBDData(\"bdcustomcss\", Buffer.from(this.editor.session.getValue(), \"utf-8\").toString(\"base64\"));\n }\n}","import {settingsCookie} from \"../0globals\";\nimport Settings from \"../modules/settingsPanel\";\nimport BDV2 from \"../modules/v2\";\nimport DataStore from \"../modules/dataStore\";\nimport DOM from \"../modules/domtools\";\nimport Utils from \"../modules/utils\"\n\nimport SettingsTitle from \"./settingsTitle\";\nimport Checkbox from \"./checkbox\";\nimport V2C_CssEditorDetached from \"./cssEditorDetached\";\n\nexport default class V2C_CssEditor extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n const self = this;\n self.props.lines = 0;\n self.setInitialState();\n self.attach = self.attach.bind(self);\n self.detachedEditor = BDV2.react.createElement(V2C_CssEditorDetached, {attach: self.attach});\n self.onClick = self.onClick.bind(self);\n self.updateCss = self.updateCss.bind(self);\n self.saveCss = self.saveCss.bind(self);\n self.detach = self.detach.bind(self);\n }\n\n setInitialState() {\n this.state = {\n detached: this.props.detached || BDV2.editorDetached\n };\n }\n\n componentDidMount() {\n // this.updateLineCount();\n this.editor = ace.edit(\"bd-customcss-editor\");\n this.editor.setTheme(\"ace/theme/discord\");\n this.editor.session.setMode(\"ace/mode/css\");\n this.editor.setShowPrintMargin(false);\n this.editor.setFontSize(14);\n this.editor.on(\"change\", () => {\n if (!settingsCookie[\"bda-css-0\"]) return;\n this.saveCss();\n this.updateCss();\n });\n }\n\n componentWillUnmount() {\n this.editor.destroy();\n }\n\n componentDidUpdate(prevProps, prevState) {\n const self = this;\n if (prevState.detached && !self.state.detached) {\n BDV2.reactDom.unmountComponentAtNode(self.detachedRoot);\n }\n }\n\n codeMirror() {\n }\n\n get options() {\n return {\n lineNumbers: true,\n mode: \"css\",\n indentUnit: 4,\n theme: \"material\",\n scrollbarStyle: \"simple\"\n };\n }\n\n get css() {\n const _ccss = DataStore.getBDData(\"bdcustomcss\");\n let ccss = \"\";\n if (_ccss && _ccss !== \"\") {\n ccss = Buffer.from(_ccss, \"base64\").toString(\"utf8\");\n }\n return ccss;\n }\n\n updateLineCount() {\n const lineCount = this.refs.editor.value.split(\"\\n\").length;\n if (lineCount == this.props.lines) return;\n this.refs.lines.textContent = Array.from(new Array(lineCount), (_, i) => i + 1).join(\".\\n\") + \".\";\n this.props.lines = lineCount;\n }\n\n render() {\n const self = this;\n\n const {detached} = self.state;\n return [\n detached && BDV2.react.createElement(\n \"div\",\n {id: \"editor-detached\"},\n BDV2.react.createElement(SettingsTitle, {text: \"Custom CSS Editor\"}),\n BDV2.react.createElement(\n \"h3\",\n null,\n \"Editor Detached\"\n ),\n BDV2.react.createElement(\n \"button\",\n {className: \"btn btn-primary\", onClick: () => {\n self.attach();\n }},\n \"Attach\"\n )\n ),\n !detached && BDV2.react.createElement(\n \"div\",\n null,\n BDV2.react.createElement(SettingsTitle, {text: \"Custom CSS Editor\"}),\n BDV2.react.createElement(\"div\", {className: \"editor-wrapper\"},\n BDV2.react.createElement(\"div\", {id: \"bd-customcss-editor\", className: \"editor\", ref: \"editor\"}, self.css)\n ),\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-attach-controls\"},\n BDV2.react.createElement(\n \"ul\",\n {className: \"checkbox-group\"},\n BDV2.react.createElement(Checkbox, {id: \"live-update\", text: \"Live Update\", onChange: this.onChange, checked: settingsCookie[\"bda-css-0\"]})\n ),\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-detach-controls-button\"},\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"3px 0 0 3px\", borderRight: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"update\");\n }},\n \"Update\"\n ),\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"0\", borderLeft: \"1px solid #2d2d2d\", borderRight: \"1px solid #2d2d2d\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"save\");\n }},\n \"Save\"\n ),\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"0 3px 3px 0\", borderLeft: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"detach\");\n }},\n \"Detach\"\n ),\n BDV2.react.createElement(\n \"span\",\n {style: {fontSize: \"10px\", marginLeft: \"5px\"}},\n \"Unsaved changes are lost on detach\"\n ),\n BDV2.react.createElement(\"div\", {className: \"help-text\"},\n \"Press \",\n BDV2.react.createElement(\"code\", {className: \"inline\"}, \"ctrl\"),\n \"+\",\n BDV2.react.createElement(\"span\", {className: \"inline\"}, \",\"),\n \" with the editor focused to access the editor's settings.\"\n )\n )\n )\n )\n ]\n }\n\n onClick(arg) {\n const self = this;\n switch (arg) {\n case \"update\":\n self.updateCss();\n break;\n case \"save\":\n self.saveCss();\n break;\n case \"detach\":\n self.detach();\n break;\n }\n }\n\n onChange(id, checked) {\n switch (id) {\n case \"live-update\":\n settingsCookie[\"bda-css-0\"] = checked;\n Settings.saveSettings();\n break;\n }\n }\n\n updateCss() {\n DOM.removeStyle(\"customcss\");\n DOM.addStyle(\"customcss\", this.editor.session.getValue());\n }\n\n saveCss() {\n DataStore.setBDData(\"bdcustomcss\", Buffer.from(this.editor.session.getValue(), \"utf-8\").toString(\"base64\"));\n }\n\n detach() {\n const self = this;\n self.setState({\n detached: true\n });\n const droot = self.detachedRoot;\n if (!droot) {\n console.log(\"FAILED TO INJECT ROOT: .app\");\n return;\n }\n BDV2.reactDom.render(self.detachedEditor, droot);\n }\n\n get detachedRoot() {\n const _root = DOM.query(\"#bd-customcss-detach-container\");\n if (!_root) {\n if (!this.injectDetachedRoot()) return null;\n return this.detachedRoot;\n }\n return _root;\n }\n\n injectDetachedRoot() {\n const app = DOM.query(\".app, .\"+Utils.removeDa(BDModules.get(e => e.app && e.layers)[0].app));\n if (!app) return false;\n DOM.insertAfter(DOM.createElement(`
`), app);\n return true;\n }\n\n attach() {\n const self = this;\n self.setState({\n detached: false\n });\n }\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class BDErrorBoundary extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {hasError: false};\r\n }\r\n\r\n componentDidCatch() {\r\n this.setState({hasError: true});\r\n }\r\n\r\n render() {\r\n if (this.state.hasError) return BDV2.react.createElement(\"div\", {className: \"react-error\"}, \"Component Error\"); \r\n return this.props.children; \r\n }\r\n}\r\n\r\nconst originalRender = BDErrorBoundary.prototype.render;\r\nObject.defineProperty(BDErrorBoundary.prototype, \"render\", {\r\n enumerable: false,\r\n configurable: false,\r\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\r\n get: () => originalRender\r\n}); ","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_ContentColumn extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n static get displayName() {return \"ContentColumn\";}\r\n\r\n render() {\r\n //let contentModule = BDModules.get(e => e.contentColumn)[0]\r\n let title = this.props.title ? BDV2.react.createElement(\"h2\", {className: \"ui-form-title h2 margin-reset margin-bottom-20\"}, this.props.title) : null\r\n return [\r\n title,\r\n this.props.children\r\n ]\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {className: contentModule.contentColumn + \" \"+contentModule.contentColumnDefault+\" content-column default\", style: {padding: \"60px 40px 0px\"}},\r\n title,\r\n this.props.children\r\n );\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_ReloadIcon extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\"svg\", {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n viewBox: \"0 0 24 24\",\r\n fill: \"#dcddde\",\r\n className: \"bd-reload \" + this.props.className,\r\n onClick: this.props.onClick,\r\n style: {width: this.props.size || \"24px\", height: this.props.size || \"24px\"}\r\n },\r\n BDV2.react.createElement(\"path\", {d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"}),\r\n BDV2.react.createElement(\"path\", {fill: \"none\", d: \"M0 0h24v24H0z\"})\r\n );\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_XSvg extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\r\n \"svg\",\r\n {xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 12 12\", style: {width: \"18px\", height: \"18px\"}},\r\n BDV2.react.createElement(\r\n \"g\",\r\n {className: \"background\", fill: \"none\", fillRule: \"evenodd\"},\r\n BDV2.react.createElement(\"path\", {d: \"M0 0h12v12H0\"}),\r\n BDV2.react.createElement(\"path\", {className: \"fill\", fill: \"#dcddde\", d: \"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6\"})\r\n )\r\n );\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class Edit extends React.Component {\n render() {\n const size = this.props.size || \"24px\";\n return \n \n \n ;\n }\n}","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class Delete extends React.Component {\n render() {\n const size = this.props.size || \"24px\";\n return \n \n \n ;\n }\n}","import {settingsCookie} from \"../0globals\";\nimport BDV2 from \"../modules/v2\";\nimport Utils from \"../modules/utils\";\nimport DOM from \"../modules/domtools\";\n\nimport XSvg from \"./xSvg\";\nimport ReloadIcon from \"./reloadIcon\";\nimport EditIcon from \"./icons/edit\";\nimport DeleteIcon from \"./icons/delete\";\nimport Switch from \"./components/switch\";\nimport TooltipWrap from \"./tooltipWrap\";\nimport { processFile } from \"../modules/pluginCertifier\";\nimport contentManager from \"../modules/contentManager\";\nimport { resolve } from \"path\";\n\nconst React = BDV2.React;\nconst anchorClasses = BDV2.anchorClasses;\n\nexport default class V2C_PluginCard extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.setInitialState();\n this.hasSettings = this.props.addon.plugin && typeof(this.props.addon.plugin.getSettingsPanel) === \"function\";\n this.settingsPanel = \"\";\n\n this.edit = this.edit.bind(this);\n this.delete = this.delete.bind(this);\n this.reload = this.reload.bind(this);\n }\n\n setInitialState() {\n this.state = {\n checked: this.props.enabled,\n settings: false,\n reloads: 0,\n trusted: false\n };\n }\n\n showSettings() {\n if (!this.hasSettings) return;\n this.setState({settings: true});\n }\n\n closeSettings() {\n this.panelRef.current.innerHTML = \"\";\n this.setState({settingsOpen: false});\n }\n\n componentDidUpdate() {\n if (!this.state.settings) return;\n if (typeof this.settingsPanel === \"object\") {\n this.refs.settingspanel.appendChild(this.settingsPanel);\n }\n\n if (!settingsCookie[\"fork-ps-3\"]) return;\n setImmediate(() => {\n const isHidden = (container, element) => {\n if(!container){\n console.error(new Error(`Container is undefined.`))\n return false\n }\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return (eTop < cTop || eBottom > cBottom);\n };\n\n const thisNode = this.refs.cardNode;\n const container = thisNode.closest(\"div[class*=\\\"contentRegionScroller-\\\"]\")\n if (!isHidden(container, thisNode)) return;\n const thisNodeOffset = DOM.offset(thisNode);\n const containerOffset = DOM.offset(container);\n const original = container.scrollTop;\n const endPoint = thisNodeOffset.top - containerOffset.top + container.scrollTop - 30;\n DOM.animate({\n duration: 300,\n update: function(progress) {\n if (endPoint > original) container.scrollTop = original + (progress * (endPoint - original));\n else container.scrollTop = original - (progress * (original - endPoint));\n }\n });\n });\n }\n\n\n getString(value) {\n if (!value) return \"???\";\n return typeof value == \"string\" ? value : value.toString();\n }\n\n get settingsComponent() {\n try { this.settingsPanel = this.props.addon.plugin.getSettingsPanel(); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to get settings panel for \" + this.name + \".\", err); }\n\n return BDV2.react.createElement(\"div\", {className: \"bd-card bd-addon-card settings-open ui-switch-item\", ref: \"cardNode\"},\n BDV2.react.createElement(\"div\", {style: {\"float\": \"right\", \"cursor\": \"pointer\"}, onClick: () => {\n this.refs.settingspanel.innerHTML = \"\";\n this.setState({settings: false});\n }},\n BDV2.react.createElement(XSvg, null)\n ),\n typeof this.settingsPanel === \"object\" && BDV2.react.createElement(\"div\", {id: `plugin-settings-${this.name}`, className: \"plugin-settings\", ref: \"settingspanel\"}),\n typeof this.settingsPanel !== \"object\" && BDV2.react.createElement(\"div\", {id: `plugin-settings-${this.name}`, className: \"plugin-settings\", ref: \"settingspanel\", dangerouslySetInnerHTML: {__html: this.settingsPanel}})\n );\n }\n\n buildTitle(name, version, author) {\n const title = \"{{name}} v{{version}} by {{author}}\".split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = React.createElement(\"span\", {className: \"name bda-name\"}, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = React.createElement(\"span\", {className: \"version bda-version\"}, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) {\n const props = {className: \"author bda-author\"};\n if (author.link || author.id) {\n props.className += ` ${anchorClasses.anchor} ${anchorClasses.anchorUnderlineOnHover}`;\n props.target = \"_blank\";\n\n if (author.link) props.href = author.link;\n if (author.id) props.onClick = () => {BDV2.LayerStack.popLayer(); BDV2.openDM(author.id);};\n }\n title[authorIndex] = React.createElement(author.link || author.id ? \"a\" : \"span\", props, author.name);\n }\n return title.flat();\n }\n\n makeLink(title, url) {\n const props = {className: \"bda-link bda-link-website\", target: \"_blank\"};\n if (typeof(url) == \"string\") props.href = url;\n if (typeof(url) == \"function\") props.onClick = (event) => {event.preventDefault(); event.stopPropagation(); url();};\n return BDV2.react.createElement(\"a\", props, title);\n }\n\n makeButton(title, children, action) {\n return \n
{children}
\n
;\n }\n\n componentWillUnmount(){\n this.unmounted = true\n }\n\n get links() {\n const links = [];\n const addon = this.props.addon;\n if (addon.website) links.push(this.makeLink(\"Website\", addon.website));\n if (addon.source) links.push(this.makeLink(\"Source\", addon.source));\n if (addon.invite) {\n links.push(this.makeLink(\"Support Server\", () => {\n const tester = /\\.gg\\/(.*)$/;\n let code = addon.invite;\n if (tester.test(code)) code = code.match(tester)[1];\n BDV2.LayerStack.popLayer();\n BDV2.InviteActions.acceptInviteAndTransitionToInviteChannel(code);\n }));\n }\n if (addon.donate) links.push(this.makeLink(\"Donate\", addon.donate));\n if (addon.patreon) links.push(this.makeLink(\"Patreon\", addon.patreon));\n return links;\n }\n\n get footer() {\n const links = this.links;\n return (links.length || this.hasSettings) && BDV2.react.createElement(\"div\", {className: \"bd-card-footer bda-footer\"},\n BDV2.react.createElement(\"span\", {className: \"bd-addon-links bda-links\"},\n ...(links.map((element, index) => index < links.length - 1 ? [element, \" | \"] : element).flat())\n ),\n this.hasSettings && BDV2.react.createElement(\"button\", {onClick: this.showSettings, className: \"bd-button bda-settings-button\", disabled: !this.state.checked}, \"Settings\")\n );\n }\n\n onChange() {\n this.props.toggle && this.props.toggle(this.name);\n this.setState({checked: !this.state.checked});\n }\n\n edit() {this.props.edit(this.name);}\n delete() {this.props.remove(this.name);}\n reload() {this.props.reload(this.name);}\n\n get name() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getName() : this.props.addon.name);}\n get author() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getAuthor() : this.props.addon.author);}\n get description() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getDescription() : this.props.addon.description);}\n get version() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getVersion() : this.props.addon.version);}\n\n render() {\n if (this.state.settings) return this.settingsComponent;\n const {authorId, authorLink} = this.props.addon;\n\n const style = {}\n if(settingsCookie[\"fork-ps-6\"]){\n if(!this.isScanning){\n this.isScanning = true\n processFile(resolve(this.props.addon.filename.endsWith(\".plugin.js\") ? contentManager.pluginsFolder : contentManager.themesFolder, this.props.addon.filename), (result) => {\n if(this.unmounted)return\n \n this.setState({\n isTrusted: result.suspect ? \"suspect\" : true\n })\n }, () => {})\n }else{\n if(this.state.isTrusted === true){\n style.borderColor = \"#4087ed\"\n }\n if(this.state.isTrusted === \"suspect\"){\n style.borderColor = \"rgb(240, 71, 71)\"\n }\n }\n }\n \n return BDV2.react.createElement(\"div\", {className: \"bd-card bd-addon-card settings-closed ui-switch-item\", style},\n BDV2.react.createElement(\"div\", {className: \"bd-addon-header bda-header\"},\n BDV2.react.createElement(\"div\", {className: \"bd-card-title bda-header-title\"}, this.buildTitle(this.name, this.version, {name: this.author, id: authorId, link: authorLink})),\n BDV2.react.createElement(\"div\", {className: \"bd-addon-controls bda-controls\"},\n this.props.edit && this.makeButton(\"Edit\", , this.edit),\n this.props.remove && this.makeButton(\"Delete\", , this.delete),\n this.props.reload && this.makeButton(\"Reload\", , this.reload),\n React.createElement(Switch, {onChange: this.onChange, checked: this.state.checked})\n )\n ),\n BDV2.react.createElement(\"div\", {className: \"bd-scroller-wrap bda-description-wrap scroller-wrap fade\"},\n BDV2.react.createElement(\"div\", {className: \"bd-scroller bd-addon-description bda-description scroller\"}, this.description)\n ),\n this.footer\n );\n }\n}\n\nconst originalRender = V2C_PluginCard.prototype.render;\nObject.defineProperty(V2C_PluginCard.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\n get: () => originalRender\n});","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class DownArrow extends React.Component {\n render() {\n const size = this.props.size || \"16px\";\n return \n \n ;\n }\n}","import BDV2 from \"../../modules/v2\";\r\nimport Arrow from \"../icons/downarrow\";\r\n\r\nconst React = BDV2.React;\r\n\r\n\r\nexport default class Select extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {open: false, value: this.props.value || this.props.options[0].value};\r\n this.dropdown = React.createRef();\r\n this.onChange = this.onChange.bind(this);\r\n this.showMenu = this.showMenu.bind(this);\r\n this.hideMenu = this.hideMenu.bind(this);\r\n }\r\n\r\n showMenu(event) {\r\n event.preventDefault();\r\n this.setState({open: true}, () => {\r\n document.addEventListener(\"click\", this.hideMenu);\r\n });\r\n }\r\n\r\n hideMenu() {\r\n this.setState({open: false}, () => {\r\n document.removeEventListener(\"click\", this.hideMenu);\r\n });\r\n }\r\n\r\n onChange(value) {\r\n this.setState({value});\r\n if (this.props.onChange) this.props.onChange(value);\r\n }\r\n\r\n get selected() {return this.props.options.find(o => o.value == this.state.value);}\r\n\r\n get options() {\r\n const selected = this.selected;\r\n return
\r\n {this.props.options.map(opt => \r\n
{opt.label}
\r\n )}\r\n
;\r\n }\r\n\r\n render() {\r\n const style = this.props.style == \"transparent\" ? \" bd-select-transparent\" : \"\";\r\n const isOpen = this.state.open ? \" menu-open\" : \"\";\r\n return
\r\n
{this.selected.label}
\r\n \r\n {this.state.open && this.options}\r\n
;\r\n }\r\n}\r\n\r\n// return
\r\n// \r\n//
\r\n//
\r\n//
{this.selected.label}
\r\n// \r\n//
\r\n//
\r\n// {this.state.open && this.options}\r\n//
;","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class Search extends React.Component {\n render() {\n const size = this.props.size || \"16px\";\n return \n \n \n ;\n }\n}","import BDV2 from \"../../modules/v2\";\nimport SearchIcon from \"../icons/search\";\n\nconst React = BDV2.React;\n\nexport default class Search extends React.Component {\n constructor(props){\n super(props)\n this.state = {\n focused: false\n }\n }\n render() {\n const className = [\"bd-search-wrapper\"]\n if(this.state.focused)className.push(\"focused\")\n return
\n {\n this.setState({focused: true})\n }} onBlur={() => {\n this.setState({focused: false})\n }}/>\n \n
;\n }\n}","import ErrorBoundary from \"./errorBoundary\";\nimport ContentColumn from \"./contentColumn\";\nimport ReloadIcon from \"./reloadIcon\";\nimport AddonCard from \"./addoncard\";\nimport Dropdown from \"./components/dropdown\";\nimport Search from \"./components/search\";\n\nimport {settingsCookie, pluginCookie, themeCookie, bdplugins, bdthemes} from \"../0globals\";\nimport ContentManager from \"../modules/contentManager\";\nimport BDV2 from \"../modules/v2\";\nimport pluginModule from \"../modules/pluginModule\";\nimport themeModule from \"../modules/themeModule\";\nimport WebpackModules from \"../modules/webpackModules\";\nimport BdApi from \"../modules/bdApi\";\nimport Utils from \"../modules/utils\";\nimport TooltipWrap from \"./tooltipWrap\";\nimport bdEvents from \"../modules/bdEvents\";\nimport EmulatedTooltip from \"./tooltip\";\n\nconst Tooltip = WebpackModules.findByDisplayName(\"Tooltip\");\n\nconst React = BDV2.react;\n\nexport default class CardList extends BDV2.reactComponent {\n constructor(props) {\n super(props);\n this.state = {sort: \"name\", ascending: true, query: \"\"};\n this.isPlugins = this.props.type == \"plugins\";\n this.cookie = this.isPlugins ? pluginCookie : themeCookie;\n this.manager = this.isPlugins ? pluginModule : themeModule;\n\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n\n this.onAddonChanges = function(){\n this.forceUpdate()\n }\n this.onAddonChanges = this.onAddonChanges.bind(this)\n }\n\n componentDidMount(){\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\n bdEvents.on(`${type}loaded`, this.onAddonChanges)\n bdEvents.on(`${type}unloaded`, this.onAddonChanges)\n bdEvents.on(`${type}reloaded`, this.onAddonChanges)\n }\n\n componentWillUnmount(){\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\n bdEvents.off(`${type}loaded`, this.onAddonChanges)\n bdEvents.off(`${type}unloaded`, this.onAddonChanges)\n bdEvents.off(`${type}reloaded`, this.onAddonChanges)\n }\n\n openFolder() {\n const shell = require(\"electron\").shell;\n const open = shell.openPath || shell.openItem;\n open(this.isPlugins ? ContentManager.pluginsFolder : ContentManager.themesFolder);\n }\n\n edit(name) {\n console.log(name);\n this.manager.edit(name);\n }\n\n async delete(name) {\n const shouldDelete = await this.confirmDelete(name);\n if (!shouldDelete) return;\n this.manager.delete(name);\n }\n\n confirmDelete(name) {\n return new Promise(resolve => {\n BdApi.showConfirmationModal(\"Are You Sure?\", `Are you sure you want to delete ${name}?`, {\n danger: true,\n confirmText: \"Delete\",\n onConfirm: () => {resolve(true);},\n onCancel: () => {resolve(false);}\n });\n });\n }\n\n get sortOptions() {\n return [\n {label: \"Name\", value: \"name\"},\n {label: \"Author\", value: \"author\"},\n {label: \"Version\", value: \"version\"},\n {label: \"Recently Added\", value: \"added\"},\n {label: \"Last Modified\", value: \"modified\"},\n {label: \"File Size\", value: \"size\"},\n ];\n }\n\n get directions() {\n return [\n {label: \"Ascending\", value: true},\n {label: \"Descending\", value: false}\n ];\n }\n\n reverse(value) {\n this.setState({ascending: value});\n }\n\n sort(value) {\n this.setState({sort: value});\n }\n\n search(event) {\n this.setState({query: event.target.value.toLocaleLowerCase()});\n }\n\n getProps(addon) {\n return {\n key: this.getName(addon),\n enabled: this.cookie[this.getName(addon)],\n toggle: this.manager.toggle.bind(this.manager),\n edit: settingsCookie[\"fork-ps-7\"] ? this.edit.bind(this) : null,\n remove: this.delete.bind(this),\n addon: addon,\n hash: addon.hash\n };\n }\n\n getString(value) {\n if (!value) return \"???\";\n return typeof value == \"string\" ? value : value.toString();\n }\n\n get list(){\n return this.props.type === \"plugins\" ? Object.values(bdplugins) : Object.values(bdthemes);\n }\n\n getAddons() {\n const sortedAddons = this.list.sort((a, b) => {\n const cap = this.state.sort.charAt(0).toUpperCase() + this.state.sort.slice(1);\n const first = a.plugin && a.plugin[`get${cap}`] ? this.getString(a.plugin[`get${cap}`]()) : this.getString(a[this.state.sort]);\n const second = b.plugin && b.plugin[`get${cap}`] ? this.getString(b.plugin[`get${cap}`]()) : this.getString(b[this.state.sort]);\n if (typeof(first) == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n const rendered = [];\n for (let a = 0; a < sortedAddons.length; a++) {\n const addon = sortedAddons[a];\n if (this.state.query) {\n let matches = null;\n const name = this.getName(addon);\n const author = this.getAuthor(addon);\n const description = this.getDescription(addon);\n const version = this.getVersion(addon);\n if (name) matches = name.toLocaleLowerCase().includes(this.state.query);\n if (author) matches = matches || author.toLocaleLowerCase().includes(this.state.query);\n if (description) matches = matches || description.toLocaleLowerCase().includes(this.state.query);\n if (version) matches = matches || version.toLocaleLowerCase().includes(this.state.query);\n if (!matches) continue;\n }\n const props = this.getProps(addon);\n rendered.push();\n }\n return rendered;\n }\n\n getName(addon) {return this.getString(addon.plugin ? addon.plugin.getName() : addon.name);}\n getAuthor(addon) {return this.getString(addon.plugin ? addon.plugin.getAuthor() : addon.author);}\n getDescription(addon) {return this.getString(addon.plugin ? addon.plugin.getDescription() : addon.description);}\n getVersion(addon) {return this.getString(addon.plugin ? addon.plugin.getVersion() : addon.version);}\n\n renderCheckUpdates(){\n if(!window.ZeresPluginLibrary)return null\n if(!window.PluginUpdates)return null\n if(typeof window.PluginUpdates.checkAll !== \"function\")return null\n if(!this.isPlugins)return null\n\n let tooltipIsShowing = false\n let tooltip\n return \n {\n tooltipIsShowing = false\n tooltip.hide()\n }}>\n {\n try{\n Utils.showToast(\"Plugin update check in progress.\", {type: \"info\"})\n window.PluginUpdates.checkAll()\n .then(() => {\n Utils.showToast(\"Plugin update check complete.\", {type: \"success\"})\n }).catch(err => {\n console.error(err)\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\n })\n }catch(e){\n console.error(e)\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\n }\n }} wrapper={false} disabled={false} onRightClick={() => {\n if(!this.refs.checkUpdateButton)return\n if (!window.PluginUpdates || !window.PluginUpdates.plugins) return;\n if(tooltipIsShowing)return\n tooltip = new EmulatedTooltip(this.refs.checkUpdateButton.refs.original.refs.button, Object.values(window.PluginUpdates.plugins).map(p => p.name).join(\", \"), {\n side: \"bottom\",\n attachEvents: false\n })\n tooltip.show()\n tooltipIsShowing = true\n }}>\n Check for Updates\n \n \n \n }\n\n render() {\n const refreshIcon = \n {(props) => \n {\n if (this.isPlugins) pluginModule.updatePluginList();\n else themeModule.updateThemeList();\n this.forceUpdate();\n }} />\n };\n const addonCards = this.getAddons();\n\n return \n \n Open {this.isPlugins ? \"Plugin\" : \"Theme\"} Folder\n \n {this.renderCheckUpdates()}\n {!settingsCookie[\"fork-ps-5\"] && refreshIcon}\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n
{addonCards}
\n
\n }\n}\n\nconst originalRender = CardList.prototype.render;\nObject.defineProperty(CardList.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\n get: () => originalRender\n});","import {settingsRPC, defaultRPC} from \"../0globals\";\r\n\r\nconst dispatcher = BDModules.get(m=>m.Dispatcher&&m.default&&m.default.dispatch)[0].default\r\nconst ActionTypes = BDModules.get(m=>m.ActionTypes)[0].ActionTypes\r\n\r\nconst socketId = \"lightcord-spoof-socket\"\r\nconst pid = process.pid\r\n\r\nexport default new class CustomRichPresence {\r\n constructor(){\r\n this.enabled = false\r\n\r\n this.game = settingsRPC\r\n }\r\n \r\n get formatedGame(){\r\n if(!this.game)return null\r\n if(this.enabled === false)return null\r\n let game = {\r\n name: this.game.name || defaultRPC.name,\r\n application_id: this.game.application_id || defaultRPC.application_id,\r\n details: this.game.details || undefined,\r\n state: this.game.state || undefined,\r\n timestamps: this.game[\"timestamps.start\"] ? {\r\n start: this.game[\"timestamps.start\"]\r\n } : undefined,\r\n assets: this.game[\"assets.large\"] ? {\r\n large_image: this.game[\"assets.large\"],\r\n small_image: this.game[\"assets.small\"] || undefined\r\n } : undefined\r\n }\r\n return game\r\n }\r\n\r\n sendGame(){\r\n dispatcher.dispatch({\r\n type: ActionTypes.LOCAL_ACTIVITY_UPDATE,\r\n socketId,\r\n pid,\r\n activity: this.formatedGame\r\n }) \r\n }\r\n\r\n enable() {\r\n if(this.enabled)return\r\n this.enabled = true\r\n console.log(\"Enabling custom RichPresence\")\r\n\r\n this.set(settingsRPC || Object.create(defaultRPC))\r\n\r\n this.sendGame()\r\n }\r\n\r\n disable() {\r\n if(!this.enabled)return\r\n this.enabled = false\r\n console.log(\"Disabling custom RichPresence\")\r\n\r\n this.sendGame()\r\n }\r\n\r\n async fetchAssets(applicationId){\r\n let assets = await BDModules.get(e => e.getAssets)[0].getAssets(applicationId)\r\n if(assets.undefined && typeof assets.undefined === \"number\"){\r\n throw new Error(\"Unknown Application\")\r\n }\r\n return assets\r\n }\r\n\r\n set(activity){\r\n this.game = activity\r\n\r\n this.sendGame()\r\n }\r\n}","import BDV2 from \"../modules/v2\";\nimport V2C_SettingsTitle from \"./settingsTitle\";\nimport V2C_SettingsGroup from \"./settingsGroup\";\nimport dataStore from \"../modules/dataStore\";\nimport { defaultRPC, settingsRPC } from \"../0globals\";\nimport CustomRichPresence from \"../modules/CustomRichPresence\"\nimport { remote } from \"electron\";\nimport MarginTop from \"./margintop\";\nimport Utils from \"../modules/utils\";\n\nconst React = BDV2.React;\n\nlet V2C_PresenceSettingsModules\nexport default class V2C_PresenceSettings extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n data: dataStore.getSettingGroup(\"rpc\") || defaultRPC,\n assets: []\n }\n\n this.preview = null\n this.isfetching = false\n if(this.state.data.application_id){\n this.fetchAssets()\n }\n\n this.assetComponents = new Set()\n }\n\n updateWhenFetched(comp){\n this.assetComponents.add(comp)\n }\n\n /**\n * \n * @param {InputText} setting \n */\n onChange(setting, value){\n let defaultSetting = RPCProps.find(e => e.id === setting.props.id)\n\n this.setState({\n data: Object.assign(settingsRPC, this.state.data, {\n [defaultSetting.id]: !!value ? value : null\n }),\n assets: this.state.assets\n })\n if(setting.props.id === \"application_id\"){\n this.fetchAssets()\n }\n\n dataStore.setSettingGroup(\"rpc\", settingsRPC);\n this.preview.forceUpdate()\n CustomRichPresence.set(settingsRPC)\n }\n\n fetchAssets(){\n if(this.isfetching === true){\n let app = this.state.data.application_id\n setTimeout(() => {\n if(this.state.data.application_id !== app){\n return\n }\n this.fetchAssets()\n }, 5000);\n }\n if(!this.state.data.application_id){\n this.setState({\n data: this.state.data,\n assets: []\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n return\n }\n this.isfetching = true\n CustomRichPresence.fetchAssets(this.state.data.application_id)\n .then(assets => {\n this.isfetching = false\n this.setState({\n data: this.state.data,\n assets: Object.keys(assets).map(k => {\n let asset = assets[k]\n return {\n id: asset.id,\n name: asset.name,\n type: asset.type\n }\n })\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n }).catch(() => {\n this.isfetching = false\n this.setState({\n data: this.state.data,\n assets: []\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n })\n }\n\n updatePreview(data){\n this.setState({\n data\n })\n }\n\n get modules(){\n return V2C_PresenceSettingsModules || (V2C_PresenceSettingsModules = [\n BDModules.get(e => e.marginBottom20)[0]\n ])\n }\n\n render() {\n let [\n marginModule\n ] = this.modules\n return [\n ,\n ,\n ,\n
\n {/** options */}\n {this.optionsComponents}\n
,\n
\n \n \n {/** preview */}\n \n
,\n
,\n ,\n \n ]\n }\n\n get optionsComponents(){\n return this._optionsComponents || (this._optionsComponents = RPCProps.map(e => {\n if(e.type === \"text\"){\n return \n }else if(e.type === \"number\"){\n let array = []/*\n if(e.id === \"timestamps.start\"){\n array.unshift( {\n DiscordNative.clipboard.copy(Date.now()+\"\")\n }} />)\n }*/\n return array\n }else if(e.type === \"choice\"){\n if([\"assets.small\", \"assets.large\"].includes(e.id)){\n return {\n return {\n value: \"asset-\"+e.id,\n label: e.name\n }\n }))}/>\n }else{\n return \"Unknown choice.\"\n }\n }\n }))\n }\n}\nconst RPCProps = [\n {\n title: \"Application ID\",\n id: \"application_id\",\n type: \"number\",\n placeholder: \"711416957718757418\"\n },\n {\n title: \"Name\",\n id: \"name\",\n type: \"text\",\n placeholder: \"Lightcord\"\n },\n {\n title: \"Details\",\n id: \"details\",\n type: \"text\",\n placeholder: \"Browsing Discord\"\n },\n {\n title: \"State\",\n id: \"state\",\n type: \"text\",\n placeholder: \"Lightcord Client\"\n },\n {\n title: \"Timestamp Start\",\n id: \"timestamps.start\",\n type: \"number\",\n get placeholder(){\n return Date.now()\n }\n },\n {\n title: \"LargeAsset\",\n id: \"assets.large\",\n type: \"choice\"\n },\n {\n title: \"SmallAsset\",\n id: \"assets.small\",\n type: \"choice\"\n },\n]\n\nlet inputTextModules\nclass InputText extends React.PureComponent {\n get modules(){\n if(inputTextModules && inputTextModules[0])return inputTextModules\n return inputTextModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0],\n BDModules.get(e => e.inputMini)[0],\n BDModules.get(e => e.size16 && e.size20)[0],\n ]\n }\n\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id]\n }\n\n this.input = {\n this.setState({\n data: value\n })\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value)\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data)\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n }} type=\"text\"/>\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule,\n inputModule,\n sizeModule2,\n ] = this.modules\n\n return (
\n
\n
\n {setting.title}\n
\n {this.input}\n
\n \n
)\n }\n}\n\nlet InputNumberModules\nclass InputNumber extends React.PureComponent {\n get modules(){\n return InputNumberModules || (InputNumberModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0],\n BDModules.get(e => e.inputMini)[0],\n BDModules.get(e => e.size16 && e.size20)[0],\n BDModules.get(e => e.colorTransparent)[0],\n ])\n }\n\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id]\n }\n\n this.input = {\n value = value.replace(/[^\\d]+/g, \"\")\n if(value == this.state.data){\n input.setValue(value)\n return\n }\n\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value)\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data)\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n this.setState({\n data: value\n })\n }} type=\"text\"/>\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule,\n ] = this.modules\n\n\n return (
\n
\n
\n {setting.title}\n
\n {this.input}\n {setting.id === \"timestamps.start\" ? \n {\n DiscordNative.clipboard.copy(Date.now()+\"\")\n }} color=\"brand\">Copy current timestamp : null}\n
\n \n
)\n }\n}\n\nlet InputChoiceModules\nclass InputChoice extends React.PureComponent {\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id] ? \"asset-\"+this.props.manager.state.data[setting.id] : \"none\"\n }\n this.props.manager.updateWhenFetched(this)\n }\n\n onChange(value){\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value === \"none\" ? null : value.replace(\"asset-\", \"\"))\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data === \"none\" ? null : this.state.data.replace(\"asset-\", \"\"))\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n this.setState({\n data: value\n })\n this.forceUpdate()\n }\n \n get modules(){\n return InputChoiceModules || (InputChoiceModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0]\n ])\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule\n ] = this.modules\n \n let options = this.props.manager.state.assets.map(e => {\n return {\n value: \"asset-\"+e.id,\n label: e.name\n }\n })\n\n options.unshift({\n value: \"none\",\n label: \"No assets\"\n })\n\n return (
\n
\n
\n {setting.title}\n
\n \n {/* {\n this.setState({focused: true})\n }} onBlur={() => {\n this.setState({focused: false})\n }}/>\n \n
;\n }\n}","import ErrorBoundary from \"./errorBoundary\";\nimport ContentColumn from \"./contentColumn\";\nimport ReloadIcon from \"./reloadIcon\";\nimport AddonCard from \"./addoncard\";\nimport Dropdown from \"./components/dropdown\";\nimport Search from \"./components/search\";\n\nimport {settingsCookie, pluginCookie, themeCookie, bdplugins, bdthemes} from \"../0globals\";\nimport ContentManager from \"../modules/contentManager\";\nimport BDV2 from \"../modules/v2\";\nimport pluginModule from \"../modules/pluginModule\";\nimport themeModule from \"../modules/themeModule\";\nimport WebpackModules from \"../modules/webpackModules\";\nimport BdApi from \"../modules/bdApi\";\nimport Utils from \"../modules/utils\";\nimport TooltipWrap from \"./tooltipWrap\";\nimport bdEvents from \"../modules/bdEvents\";\nimport EmulatedTooltip from \"./tooltip\";\n\nconst Tooltip = WebpackModules.findByDisplayName(\"Tooltip\");\n\nconst React = BDV2.react;\n\nexport default class CardList extends BDV2.reactComponent {\n constructor(props) {\n super(props);\n this.state = {sort: \"name\", ascending: true, query: \"\"};\n this.isPlugins = this.props.type == \"plugins\";\n this.cookie = this.isPlugins ? pluginCookie : themeCookie;\n this.manager = this.isPlugins ? pluginModule : themeModule;\n\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n\n this.onAddonChanges = function(){\n this.forceUpdate()\n }\n this.onAddonChanges = this.onAddonChanges.bind(this)\n }\n\n componentDidMount(){\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\n bdEvents.on(`${type}loaded`, this.onAddonChanges)\n bdEvents.on(`${type}unloaded`, this.onAddonChanges)\n bdEvents.on(`${type}reloaded`, this.onAddonChanges)\n }\n\n componentWillUnmount(){\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\n bdEvents.off(`${type}loaded`, this.onAddonChanges)\n bdEvents.off(`${type}unloaded`, this.onAddonChanges)\n bdEvents.off(`${type}reloaded`, this.onAddonChanges)\n }\n\n openFolder() {\n const shell = require(\"electron\").shell;\n const open = shell.openPath || shell.openItem;\n open(this.isPlugins ? ContentManager.pluginsFolder : ContentManager.themesFolder);\n }\n\n edit(name) {\n console.log(name);\n this.manager.edit(name);\n }\n\n async delete(name) {\n const shouldDelete = await this.confirmDelete(name);\n if (!shouldDelete) return;\n this.manager.delete(name);\n }\n\n confirmDelete(name) {\n return new Promise(resolve => {\n BdApi.showConfirmationModal(\"Are You Sure?\", `Are you sure you want to delete ${name}?`, {\n danger: true,\n confirmText: \"Delete\",\n onConfirm: () => {resolve(true);},\n onCancel: () => {resolve(false);}\n });\n });\n }\n\n get sortOptions() {\n return [\n {label: \"Name\", value: \"name\"},\n {label: \"Author\", value: \"author\"},\n {label: \"Version\", value: \"version\"},\n {label: \"Recently Added\", value: \"added\"},\n {label: \"Last Modified\", value: \"modified\"},\n {label: \"File Size\", value: \"size\"},\n ];\n }\n\n get directions() {\n return [\n {label: \"Ascending\", value: true},\n {label: \"Descending\", value: false}\n ];\n }\n\n reverse(value) {\n this.setState({ascending: value});\n }\n\n sort(value) {\n this.setState({sort: value});\n }\n\n search(event) {\n this.setState({query: event.target.value.toLocaleLowerCase()});\n }\n\n getProps(addon) {\n return {\n key: this.getName(addon),\n enabled: this.cookie[this.getName(addon)],\n toggle: this.manager.toggle.bind(this.manager),\n edit: settingsCookie[\"fork-ps-7\"] ? this.edit.bind(this) : null,\n remove: this.delete.bind(this),\n addon: addon,\n hash: addon.hash\n };\n }\n\n getString(value) {\n if (!value) return \"???\";\n return typeof value == \"string\" ? value : value.toString();\n }\n\n get list(){\n return this.props.type === \"plugins\" ? Object.values(bdplugins) : Object.values(bdthemes);\n }\n\n getAddons() {\n const sortedAddons = this.list.sort((a, b) => {\n const cap = this.state.sort.charAt(0).toUpperCase() + this.state.sort.slice(1);\n const first = a.plugin && a.plugin[`get${cap}`] ? this.getString(a.plugin[`get${cap}`]()) : this.getString(a[this.state.sort]);\n const second = b.plugin && b.plugin[`get${cap}`] ? this.getString(b.plugin[`get${cap}`]()) : this.getString(b[this.state.sort]);\n if (typeof(first) == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n const rendered = [];\n for (let a = 0; a < sortedAddons.length; a++) {\n const addon = sortedAddons[a];\n if (this.state.query) {\n let matches = null;\n const name = this.getName(addon);\n const author = this.getAuthor(addon);\n const description = this.getDescription(addon);\n const version = this.getVersion(addon);\n if (name) matches = name.toLocaleLowerCase().includes(this.state.query);\n if (author) matches = matches || author.toLocaleLowerCase().includes(this.state.query);\n if (description) matches = matches || description.toLocaleLowerCase().includes(this.state.query);\n if (version) matches = matches || version.toLocaleLowerCase().includes(this.state.query);\n if (!matches) continue;\n }\n const props = this.getProps(addon);\n rendered.push();\n }\n return rendered;\n }\n\n getName(addon) {return this.getString(addon.plugin ? addon.plugin.getName() : addon.name);}\n getAuthor(addon) {return this.getString(addon.plugin ? addon.plugin.getAuthor() : addon.author);}\n getDescription(addon) {return this.getString(addon.plugin ? addon.plugin.getDescription() : addon.description);}\n getVersion(addon) {return this.getString(addon.plugin ? addon.plugin.getVersion() : addon.version);}\n\n renderCheckUpdates(){\n if(!window.ZeresPluginLibrary)return null\n if(!window.PluginUpdates)return null\n if(typeof window.PluginUpdates.checkAll !== \"function\")return null\n if(!this.isPlugins)return null\n\n let tooltipIsShowing = false\n let tooltip\n return \n {\n tooltipIsShowing = false\n tooltip.hide()\n }}>\n {\n try{\n Utils.showToast(\"Plugin update check in progress.\", {type: \"info\"})\n window.PluginUpdates.checkAll()\n .then(() => {\n Utils.showToast(\"Plugin update check complete.\", {type: \"success\"})\n }).catch(err => {\n console.error(err)\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\n })\n }catch(e){\n console.error(e)\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\n }\n }} wrapper={false} disabled={false} onRightClick={() => {\n if(!this.refs.checkUpdateButton)return\n if (!window.PluginUpdates || !window.PluginUpdates.plugins) return;\n if(tooltipIsShowing)return\n tooltip = new EmulatedTooltip(this.refs.checkUpdateButton.refs.original.refs.button, Object.values(window.PluginUpdates.plugins).map(p => p.name).join(\", \"), {\n side: \"bottom\",\n attachEvents: false\n })\n tooltip.show()\n tooltipIsShowing = true\n }}>\n Check for Updates\n \n \n \n }\n\n render() {\n const refreshIcon = \n {(props) => \n {\n if (this.isPlugins) pluginModule.updatePluginList();\n else themeModule.updateThemeList();\n this.forceUpdate();\n }} />\n };\n const addonCards = this.getAddons();\n\n return \n \n Open {this.isPlugins ? \"Plugin\" : \"Theme\"} Folder\n \n {this.renderCheckUpdates()}\n {!settingsCookie[\"fork-ps-5\"] && refreshIcon}\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n
{addonCards}
\n
\n }\n}\n\nconst originalRender = CardList.prototype.render;\nObject.defineProperty(CardList.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\n get: () => originalRender\n});","import {settingsRPC, defaultRPC} from \"../0globals\";\r\n\r\nconst dispatcher = BDModules.get(m=>m.Dispatcher&&m.default&&m.default.dispatch)[0].default\r\nconst ActionTypes = BDModules.get(m=>m.ActionTypes)[0].ActionTypes\r\n\r\nconst socketId = \"lightcord-spoof-socket\"\r\nconst pid = process.pid\r\n\r\nexport default new class CustomRichPresence {\r\n constructor(){\r\n this.enabled = false\r\n\r\n this.game = settingsRPC\r\n }\r\n \r\n get formatedGame(){\r\n if(!this.game)return null\r\n if(this.enabled === false)return null\r\n let game = {\r\n name: this.game.name || defaultRPC.name,\r\n application_id: this.game.application_id || defaultRPC.application_id,\r\n details: this.game.details || undefined,\r\n state: this.game.state || undefined,\r\n timestamps: this.game[\"timestamps.start\"] ? {\r\n start: this.game[\"timestamps.start\"]\r\n } : undefined,\r\n assets: this.game[\"assets.large\"] ? {\r\n large_image: this.game[\"assets.large\"],\r\n small_image: this.game[\"assets.small\"] || undefined\r\n } : undefined\r\n }\r\n return game\r\n }\r\n\r\n sendGame(){\r\n dispatcher.dispatch({\r\n type: ActionTypes.LOCAL_ACTIVITY_UPDATE,\r\n socketId,\r\n pid,\r\n activity: this.formatedGame\r\n }) \r\n }\r\n\r\n enable() {\r\n if(this.enabled)return\r\n this.enabled = true\r\n console.log(\"Enabling custom RichPresence\")\r\n\r\n this.set(settingsRPC || Object.create(defaultRPC))\r\n\r\n this.sendGame()\r\n }\r\n\r\n disable() {\r\n if(!this.enabled)return\r\n this.enabled = false\r\n console.log(\"Disabling custom RichPresence\")\r\n\r\n this.sendGame()\r\n }\r\n\r\n async fetchAssets(applicationId){\r\n let assets = await BDModules.get(e => e.getAssets)[0].getAssets(applicationId)\r\n if(assets.undefined && typeof assets.undefined === \"number\"){\r\n throw new Error(\"Unknown Application\")\r\n }\r\n return assets\r\n }\r\n\r\n set(activity){\r\n this.game = activity\r\n\r\n this.sendGame()\r\n }\r\n}","import BDV2 from \"../modules/v2\";\nimport V2C_SettingsTitle from \"./settingsTitle\";\nimport V2C_SettingsGroup from \"./settingsGroup\";\nimport dataStore from \"../modules/dataStore\";\nimport { defaultRPC, settingsRPC } from \"../0globals\";\nimport CustomRichPresence from \"../modules/CustomRichPresence\"\nimport { remote } from \"electron\";\nimport MarginTop from \"./margintop\";\nimport Utils from \"../modules/utils\";\n\nconst React = BDV2.React;\n\nlet V2C_PresenceSettingsModules\nexport default class V2C_PresenceSettings extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n data: dataStore.getSettingGroup(\"rpc\") || defaultRPC,\n assets: []\n }\n\n this.preview = null\n this.isfetching = false\n if(this.state.data.application_id){\n this.fetchAssets()\n }\n\n this.assetComponents = new Set()\n }\n\n updateWhenFetched(comp){\n this.assetComponents.add(comp)\n }\n\n /**\n * \n * @param {InputText} setting \n */\n onChange(setting, value){\n let defaultSetting = RPCProps.find(e => e.id === setting.props.id)\n\n this.setState({\n data: Object.assign(settingsRPC, this.state.data, {\n [defaultSetting.id]: !!value ? value : null\n }),\n assets: this.state.assets\n })\n if(setting.props.id === \"application_id\"){\n this.fetchAssets()\n }\n\n dataStore.setSettingGroup(\"rpc\", settingsRPC);\n this.preview.forceUpdate()\n CustomRichPresence.set(settingsRPC)\n }\n\n fetchAssets(){\n if(this.isfetching === true){\n let app = this.state.data.application_id\n setTimeout(() => {\n if(this.state.data.application_id !== app){\n return\n }\n this.fetchAssets()\n }, 5000);\n }\n if(!this.state.data.application_id){\n this.setState({\n data: this.state.data,\n assets: []\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n return\n }\n this.isfetching = true\n CustomRichPresence.fetchAssets(this.state.data.application_id)\n .then(assets => {\n this.isfetching = false\n this.setState({\n data: this.state.data,\n assets: Object.keys(assets).map(k => {\n let asset = assets[k]\n return {\n id: asset.id,\n name: asset.name,\n type: asset.type\n }\n })\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n }).catch(() => {\n this.isfetching = false\n this.setState({\n data: this.state.data,\n assets: []\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n })\n }\n\n updatePreview(data){\n this.setState({\n data\n })\n }\n\n get modules(){\n return V2C_PresenceSettingsModules || (V2C_PresenceSettingsModules = [\n BDModules.get(e => e.marginBottom20)[0]\n ])\n }\n\n render() {\n let [\n marginModule\n ] = this.modules\n return [\n ,\n ,\n ,\n
\n {/** options */}\n {this.optionsComponents}\n
,\n
\n \n \n {/** preview */}\n \n
,\n
,\n ,\n \n ]\n }\n\n get optionsComponents(){\n return this._optionsComponents || (this._optionsComponents = RPCProps.map(e => {\n if(e.type === \"text\"){\n return \n }else if(e.type === \"number\"){\n let array = []/*\n if(e.id === \"timestamps.start\"){\n array.unshift( {\n DiscordNative.clipboard.copy(Date.now()+\"\")\n }} />)\n }*/\n return array\n }else if(e.type === \"choice\"){\n if([\"assets.small\", \"assets.large\"].includes(e.id)){\n return {\n return {\n value: \"asset-\"+e.id,\n label: e.name\n }\n }))}/>\n }else{\n return \"Unknown choice.\"\n }\n }\n }))\n }\n}\nconst RPCProps = [\n {\n title: \"Application ID\",\n id: \"application_id\",\n type: \"number\",\n placeholder: \"711416957718757418\"\n },\n {\n title: \"Name\",\n id: \"name\",\n type: \"text\",\n placeholder: \"Lightcord\"\n },\n {\n title: \"Details\",\n id: \"details\",\n type: \"text\",\n placeholder: \"Browsing Discord\"\n },\n {\n title: \"State\",\n id: \"state\",\n type: \"text\",\n placeholder: \"Lightcord Client\"\n },\n {\n title: \"Timestamp Start\",\n id: \"timestamps.start\",\n type: \"number\",\n get placeholder(){\n return Date.now()\n }\n },\n {\n title: \"LargeAsset\",\n id: \"assets.large\",\n type: \"choice\"\n },\n {\n title: \"SmallAsset\",\n id: \"assets.small\",\n type: \"choice\"\n },\n]\n\nlet inputTextModules\nclass InputText extends React.PureComponent {\n get modules(){\n if(inputTextModules && inputTextModules[0])return inputTextModules\n return inputTextModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0],\n BDModules.get(e => e.inputMini)[0],\n BDModules.get(e => e.size16 && e.size20)[0],\n ]\n }\n\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id]\n }\n\n this.input = {\n this.setState({\n data: value\n })\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value)\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data)\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n }} type=\"text\"/>\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule,\n inputModule,\n sizeModule2,\n ] = this.modules\n\n return (
\n
\n
\n {setting.title}\n
\n {this.input}\n
\n \n
)\n }\n}\n\nlet InputNumberModules\nclass InputNumber extends React.PureComponent {\n get modules(){\n return InputNumberModules || (InputNumberModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0],\n BDModules.get(e => e.inputMini)[0],\n BDModules.get(e => e.size16 && e.size20)[0],\n BDModules.get(e => e.colorTransparent)[0],\n ])\n }\n\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id]\n }\n\n this.input = {\n value = value.replace(/[^\\d]+/g, \"\")\n if(value == this.state.data){\n input.setValue(value)\n return\n }\n\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value)\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data)\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n this.setState({\n data: value\n })\n }} type=\"text\"/>\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule,\n ] = this.modules\n\n\n return (
\n
\n
\n {setting.title}\n
\n {this.input}\n {setting.id === \"timestamps.start\" ? \n {\n DiscordNative.clipboard.copy(Date.now()+\"\")\n }} color=\"brand\">Copy current timestamp : null}\n
\n \n
)\n }\n}\n\nlet InputChoiceModules\nclass InputChoice extends React.PureComponent {\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id] ? \"asset-\"+this.props.manager.state.data[setting.id] : \"none\"\n }\n this.props.manager.updateWhenFetched(this)\n }\n\n onChange(value){\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value === \"none\" ? null : value.replace(\"asset-\", \"\"))\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data === \"none\" ? null : this.state.data.replace(\"asset-\", \"\"))\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n this.setState({\n data: value\n })\n this.forceUpdate()\n }\n \n get modules(){\n return InputChoiceModules || (InputChoiceModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0]\n ])\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule\n ] = this.modules\n \n let options = this.props.manager.state.assets.map(e => {\n return {\n value: \"asset-\"+e.id,\n label: e.name\n }\n })\n\n options.unshift({\n value: \"none\",\n label: \"No assets\"\n })\n\n return (
\n
\n
\n {setting.title}\n
\n \n {/*