From 22025a86cff01cb02007243c332fb205b97725af Mon Sep 17 00:00:00 2001 From: lijiahao Date: Tue, 5 Nov 2024 10:58:35 +0800 Subject: [PATCH] feat: trigger rumble support --- app/background.js | 7 +- app/preload.js | 2 +- package-lock.json | 120 ++ package.json | 6 +- renderer/common/settings.ts | 22 + renderer/context/userContext.defaults.ts | 3 + renderer/pages/[locale]/stream.tsx | 16 + renderer/pages/[locale]/test.tsx | 30 +- renderer/public/locales/en/settings.json | 7 + renderer/public/locales/jp/settings.json | 7 + renderer/public/locales/zh/settings.json | 7 + renderer/public/locales/zht/settings.json | 7 + yarn.lock | 1569 ++++++++------------- 13 files changed, 828 insertions(+), 975 deletions(-) diff --git a/app/background.js b/app/background.js index f2eb7de..114df57 100644 --- a/app/background.js +++ b/app/background.js @@ -3577,6 +3577,8 @@ const defaultSettings = { xhome_bitrate: 20, xcloud_bitrate_mode: "Auto", xcloud_bitrate: 20, + audio_bitrate_mode: "Auto", + audio_bitrate: 20, preferred_game_language: "en-US", force_region_ip: "", codec: "", @@ -3585,6 +3587,7 @@ const defaultSettings = { gamepad_kernal: "Native", dead_zone: 0.1, edge_compensation: 0, + force_trigger_rumble: '', power_on: false, video_format: "", virtual_gamepad_opacity: 0.6, @@ -15947,7 +15950,7 @@ module.exports = path.URL; /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.1.0","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debounce":"^2.1.1","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","moment":"^2.30.1","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.5","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"28","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); +module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.2.0","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debounce":"^2.1.1","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","moment":"^2.30.1","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.4","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"33","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); /***/ }) @@ -16298,4 +16301,4 @@ new Application(); /******/ })() ; }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLE9BQU87QUFDUCxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxVQUFVLGFBQWEsbUNBQW1DO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxVQUFVLFVBQVU7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCLGtDQUFrQztBQUMxRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNkRBQTZEO0FBQ3JGO0FBQ0EsTUFBTTtBQUNOLHNCQUFzQix5Q0FBeUM7QUFDL0Q7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiwrQ0FBK0M7QUFDekU7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHdCQUF3QjtBQUNuQztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHNCQUFzQjtBQUN0RDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxJQUFJLGtCQUFrQjs7QUFFdkI7QUFDQSxzRkFBc0YsaUJBQWlCOztBQUV2RztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsSUFBSSxrQkFBa0I7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUEsSUFBSSwwREFBMEQ7QUFDOUQ7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0EsUUFBUSxvRUFBb0U7QUFDNUU7QUFDQSw4RkFBOEY7QUFDOUY7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHO0FBQ2xHOztBQUVBO0FBQ0E7O0FBRUEsUUFBUSxxRUFBcUU7QUFDN0U7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUM5ZkE7Ozs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7OztBQ0FhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLDhIQUE4Qzs7Ozs7Ozs7Ozs7QUNGdEQ7Ozs7Ozs7Ozs7OztBQ0FhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLDRFQUFxQjtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyx3RkFBMkI7QUFDcEQsWUFBWSxtQkFBTyxDQUFDLDBFQUFvQjtBQUN4Qyw4QkFBOEIsbUJBQU8sQ0FBQyxrSEFBd0M7QUFDOUUsZUFBZSxtQkFBTyxDQUFDLGtGQUF3QjtBQUMvQyxxQkFBcUIsbUJBQU8sQ0FBQyxrSEFBd0M7O0FBRXJFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLElBQUksNkVBQTZFO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7QUNuQ1k7QUFDYjtBQUNBLG1CQUFPLENBQUMsZ0dBQStCO0FBQ3ZDLFFBQVEsbUJBQU8sQ0FBQyw0RUFBcUI7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsc0ZBQTBCO0FBQ3BELHFCQUFxQixtQkFBTyxDQUFDLGtIQUF3QztBQUNyRSxpQkFBaUIsbUJBQU8sQ0FBQyxzRkFBMEI7QUFDbkQsV0FBVyxtQkFBTyxDQUFDLDBHQUFvQztBQUN2RCxrQkFBa0IsbUJBQU8sQ0FBQywwR0FBb0M7QUFDOUQsb0JBQW9CLG1CQUFPLENBQUMsOEZBQThCO0FBQzFELDRCQUE0QixtQkFBTyxDQUFDLGdIQUF1QztBQUMzRSxpQkFBaUIsbUJBQU8sQ0FBQyxzRkFBMEI7QUFDbkQsYUFBYSxtQkFBTyxDQUFDLGdHQUErQjtBQUNwRCxhQUFhLG1CQUFPLENBQUMsMEZBQTRCO0FBQ2pELGdCQUFnQixtQkFBTyxDQUFDLG9GQUF5QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxzRkFBMEI7QUFDbkQsYUFBYSw4SEFBK0M7QUFDNUQsY0FBYyxtQkFBTyxDQUFDLGdIQUF1QztBQUM3RCxnQkFBZ0IsbUJBQU8sQ0FBQyxrRkFBd0I7QUFDaEQscUJBQXFCLG1CQUFPLENBQUMsa0dBQWdDO0FBQzdELDhCQUE4QixtQkFBTyxDQUFDLGtIQUF3QztBQUM5RSw0QkFBNEIsbUJBQU8sQ0FBQyw4SEFBOEM7QUFDbEYsMEJBQTBCLG1CQUFPLENBQUMsNEZBQTZCOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHFCQUFxQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxrQkFBa0Isd0JBQXdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsV0FBVztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixXQUFXO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0EsQ0FBQztBQUNELG9DQUFvQztBQUNwQyxvQkFBb0IsUUFBUTtBQUM1QixDQUFDO0FBQ0Qsd0NBQXdDO0FBQ3hDLG9CQUFvQjtBQUNwQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qiw2QkFBNkI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMkJBQTJCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QVcsQ0FBQzBDLFFBQVEsQ0FBQyxDQUFDO0VBQ3hCO0FBQ0Y7QUFFQSxJQUFJdEMsV0FBVyxDQUFDLENBQUMsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2F1dGhlbnRpY2F0aW9uLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvYWNoaXZlbWVudG1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy9jcmVhdGUtd2luZG93LnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvaHR0cC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL2luZGV4LnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvc3RyZWFtbWFuYWdlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3RpdGxlbWFuYWdlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3Rva2Vuc3RvcmUudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy91cGRhdGVyLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMveGJveFdvcmtlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3hjbG91ZGFwaS50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3hodHRwLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMvYXBwLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy9iYXNlLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy9jb25zb2xlcy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMvc2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaXBjL3N0cmVhbWluZy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMveGNsb3VkLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9pbmRleC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL2h0dHAudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy9kZXZpY2V0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy9tc2FsdG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbnMvc2lzdXRva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL3N0cmVhbWluZ3Rva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL3VzZXJ0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy94c3RzdG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL3Rva2Vuc3RvcmUudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL3hhbC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJlbGVjdHJvblwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImZzXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cHNcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJub2RlOnBhdGhcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImF4aW9zXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJjb21wYXJlLXZlcnNpb25zXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJkZWJ1Z1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiZWxlY3Ryb24tc2VydmVcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImVsZWN0cm9uLXN0b3JlXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJnaXRodWItdXJsLXRvLW9iamVjdFwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiaXAtYWRkcmVzc1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiam9zZVwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwidXVpZC0xMzQ1XCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJ4Ym94LXdlYmFwaVwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvZGF0ZS9ub3cuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb21lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS90cmltLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC1pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC10aW1lb3V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3VybC1zZWFyY2gtcGFyYW1zLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS91cmwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9kYXRlL25vdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvanNvbi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zZXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvdHJpbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Etc2V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jYWxsZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGF0ZS10by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWZmLXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWllLW9yLWVkZ2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy1wZWJibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtd2Vib3Mtd2Via2l0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC13ZWJraXQtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3F1ZXVlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWNsb25lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pdGVyYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNpemUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdW5pb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctcGFkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctcHVueWNvZGUtdG8tYXNjaWkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdWlkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZGF0ZS5ub3cuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLnRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbnkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2Uud2l0aC1yZXNvbHZlcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQudW5pb24udjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5jdXN0b20tbWF0Y2hlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuZGlzcG9zZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5jbGVhci1pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtaW50ZXJ2YWwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5oYXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwuY2FuLXBhcnNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLnBhcnNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC50by1qc29uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9kYXRlL25vdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2pzb24vc3RyaW5naWZ5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LWltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3VybC1zZWFyY2gtcGFyYW1zL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS91cmwvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvd2ViL3VybC1zZWFyY2gtcGFyYW1zLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3dlYi91cmwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vYXBwbGljYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiZWxlY3Ryb24tc2VydmVcIiksIHJlcXVpcmUoXCJlbGVjdHJvbi1zdG9yZVwiKSwgcmVxdWlyZShcImRlYnVnXCIpLCByZXF1aXJlKFwiaXAtYWRkcmVzc1wiKSwgcmVxdWlyZShcImF4aW9zXCIpLCByZXF1aXJlKFwiY29tcGFyZS12ZXJzaW9uc1wiKSwgcmVxdWlyZShcImdpdGh1Yi11cmwtdG8tb2JqZWN0XCIpLCByZXF1aXJlKFwiam9zZVwiKSwgcmVxdWlyZShcInV1aWQtMTM0NVwiKSwgcmVxdWlyZShcInhib3gtd2ViYXBpXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcImVsZWN0cm9uLXNlcnZlXCIsIFwiZWxlY3Ryb24tc3RvcmVcIiwgXCJkZWJ1Z1wiLCBcImlwLWFkZHJlc3NcIiwgXCJheGlvc1wiLCBcImNvbXBhcmUtdmVyc2lvbnNcIiwgXCJnaXRodWItdXJsLXRvLW9iamVjdFwiLCBcImpvc2VcIiwgXCJ1dWlkLTEzNDVcIiwgXCJ4Ym94LXdlYmFwaVwiXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZmFjdG9yeShyZXF1aXJlKFwiZWxlY3Ryb24tc2VydmVcIiksIHJlcXVpcmUoXCJlbGVjdHJvbi1zdG9yZVwiKSwgcmVxdWlyZShcImRlYnVnXCIpLCByZXF1aXJlKFwiaXAtYWRkcmVzc1wiKSwgcmVxdWlyZShcImF4aW9zXCIpLCByZXF1aXJlKFwiY29tcGFyZS12ZXJzaW9uc1wiKSwgcmVxdWlyZShcImdpdGh1Yi11cmwtdG8tb2JqZWN0XCIpLCByZXF1aXJlKFwiam9zZVwiKSwgcmVxdWlyZShcInV1aWQtMTM0NVwiKSwgcmVxdWlyZShcInhib3gtd2ViYXBpXCIpKSA6IGZhY3Rvcnkocm9vdFtcImVsZWN0cm9uLXNlcnZlXCJdLCByb290W1wiZWxlY3Ryb24tc3RvcmVcIl0sIHJvb3RbXCJkZWJ1Z1wiXSwgcm9vdFtcImlwLWFkZHJlc3NcIl0sIHJvb3RbXCJheGlvc1wiXSwgcm9vdFtcImNvbXBhcmUtdmVyc2lvbnNcIl0sIHJvb3RbXCJnaXRodWItdXJsLXRvLW9iamVjdFwiXSwgcm9vdFtcImpvc2VcIl0sIHJvb3RbXCJ1dWlkLTEzNDVcIl0sIHJvb3RbXCJ4Ym94LXdlYmFwaVwiXSk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShnbG9iYWwsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2VsZWN0cm9uX3NlcnZlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZWxlY3Ryb25fc3RvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9kZWJ1Z19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2lwX2FkZHJlc3NfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9heGlvc19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2NvbXBhcmVfdmVyc2lvbnNfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9naXRodWJfdXJsX3RvX29iamVjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2pvc2VfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV91dWlkXzEzNDVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV94Ym94X3dlYmFwaV9fKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IHsgc2Vzc2lvbiwgZGlhbG9nIH0gZnJvbSAnZWxlY3Ryb24nXG5pbXBvcnQgeyBjcmVhdGVXaW5kb3cgfSBmcm9tICcuL2hlbHBlcnMnXG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi9hcHBsaWNhdGlvbidcbmltcG9ydCB7IFhhbCwgVG9rZW5TdG9yZSB9IGZyb20gJy4veGFsJ1xuaW1wb3J0IEF1dGhUb2tlblN0b3JlIGZyb20gJy4vaGVscGVycy90b2tlbnN0b3JlJ1xuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzIH0gZnJvbSAnLi4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0cydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aGVudGljYXRpb24ge1xuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgX3Rva2VuU3RvcmU6QXV0aFRva2VuU3RvcmVcbiAgICBfeGFsOlhhbFxuICAgIFxuICAgIF9hdXRoV2luZG93XG4gICAgX2F1dGhDYWxsYmFja1xuXG4gICAgX2lzQXV0aGVudGljYXRpbmc6Ym9vbGVhbiA9IGZhbHNlXG4gICAgX2lzQXV0aGVudGljYXRlZDpib29sZWFuID0gZmFsc2VcbiAgICBfYXBwTGV2ZWw6bnVtYmVyID0gMFxuXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb246QXBwbGljYXRpb24pe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uXG4gICAgICAgIHRoaXMuX3Rva2VuU3RvcmUgPSBuZXcgQXV0aFRva2VuU3RvcmUoKVxuICAgICAgICB0aGlzLl90b2tlblN0b3JlLmxvYWQoKVxuICAgICAgICB0aGlzLl94YWwgPSBuZXcgWGFsKHRoaXMuX3Rva2VuU3RvcmUpXG4gICAgfVxuXG4gICAgY2hlY2tBdXRoZW50aWNhdGlvbigpe1xuICAgICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0aW5nID0gdHJ1ZVxuICAgICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZVxuXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbY2hlY2tBdXRoZW50aWNhdGlvbigpXSBTdGFydGluZyB0b2tlbiBjaGVjay4uLicpXG4gICAgICAgIGlmKHRoaXMuX3Rva2VuU3RvcmUuaGFzVmFsaWRBdXRoVG9rZW5zKCkpe1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tjaGVja0F1dGhlbnRpY2F0aW9uKCldIFRva2VucyBhcmUgdmFsaWQuJylcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRGbG93KClcblxuICAgICAgICAgICAgcmV0dXJuIHRydWVcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYodGhpcy5fdG9rZW5TdG9yZS5nZXRVc2VyVG9rZW4oKSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgdXNlciB0b2tlbiwgbGV0cyB0cnkgdG8gcmVmcmVzaCBpdC5cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW2NoZWNrQXV0aGVudGljYXRpb24oKV0gVG9rZW5zIGFyZSBleHBpcmVkIGJ1dCB3ZSBoYXZlIGEgdXNlciB0b2tlbi4gTGV0cyB0cnkgdG8gcmVmcmVzaCB0aGUgdG9rZW5zLicpXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFNpbGVudEZsb3coKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tjaGVja0F1dGhlbnRpY2F0aW9uKCldIE5vIHRva2VucyBhcmUgcHJlc2VudC4nKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhcnRTaWxlbnRGbG93KCl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIFN0YXJ0aW5nIHNpbGVudCBmbG93Li4uJylcbiAgICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGluZyA9IHRydWVcbiAgICAgICAgdGhpcy5feGFsLnJlZnJlc2hUb2tlbnModGhpcy5fdG9rZW5TdG9yZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBUb2tlbnMgaGF2ZSBiZWVuIHJlZnJlc2hlZCcpXG5cbiAgICAgICAgICAgIHRoaXMuZ2V0U3RyZWFtaW5nVG9rZW4odGhpcy5fdG9rZW5TdG9yZSkudGhlbigoc3RyZWFtaW5nVG9rZW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuICE9PSBudWxsKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gUmV0cmlldmVkIGJvdGggeEhvbWUgYW5kIHhDbG91ZCB0b2tlbnMnKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBMZXZlbCA9IDJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBSZXRyaWV2ZWQgeEhvbWUgdG9rZW4gb25seScpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcExldmVsID0gMVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX3hhbC5nZXRXZWJUb2tlbih0aGlzLl90b2tlblN0b3JlKS50aGVuKCh3ZWJUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCBfX2ZpbGVuYW1lKydbc3RhcnRTaWxlbnRGbG93KCldIFdlYiB0b2tlbiByZWNlaXZlZCcpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5hdXRoZW50aWNhdGlvbkNvbXBsZXRlZChzdHJlYW1pbmdUb2tlbnMsIHdlYlRva2VuKVxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsIF9fZmlsZW5hbWUrJ1tzdGFydFNpbGVudEZsb3coKV0gRmFpbGVkIHRvIHJldHJpZXZlIHdlYiB0b2tlbnM6JywgZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZy5zaG93TWVzc2FnZUJveCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3I6IEZhaWxlZCB0byByZXRyaWV2ZSB3ZWIgdG9rZW5zOicrIEpTT04uc3RyaW5naWZ5KGVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIEZhaWxlZCB0byByZXRyaWV2ZSBzdHJlYW1pbmcgdG9rZW5zOicsIGVycilcbiAgICAgICAgICAgICAgICBkaWFsb2cuc2hvd01lc3NhZ2VCb3goe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3I6IEZhaWxlZCB0byByZXRyaWV2ZSBzdHJlYW1pbmcgdG9rZW5zOicrIEpTT04uc3RyaW5naWZ5KGVyciksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gRXJyb3IgcmVmcmVzaGluZyB0b2tlbnM6JywgZXJyKVxuICAgICAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnW3N0YXJ0U2lsZW50RmxvdygpXSBFcnJvciByZWZyZXNoaW5nIHRva2VuczonICsgSlNPTi5zdHJpbmdpZnkoZXJyKSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RvcmUuY2xlYXIoKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0YXJ0QXV0aGZsb3coKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydEF1dGhmbG93KCldIFN0YXJ0aW5nIGF1dGhlbnRpY2F0aW9uIGZsb3cnKVxuICAgICAgICBcbiAgICAgICAgdGhpcy5feGFsLmdldFJlZGlyZWN0VXJpKCkudGhlbigocmVkaXJlY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlbkF1dGhXaW5kb3cocmVkaXJlY3Quc2lzdUF1dGguTXNhT2F1dGhSZWRpcmVjdClcblxuICAgICAgICAgICAgdGhpcy5fYXV0aENhbGxiYWNrID0gKHJlZGlyZWN0VXJpKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGluZyA9IHRydWVcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0QXV0aEZsb3coKV0gR290IHJlZGlyZWN0IFVSSTonLCByZWRpcmVjdFVyaSlcbiAgICAgICAgICAgICAgICB0aGlzLl94YWwuYXV0aGVudGljYXRlVXNlcih0aGlzLl90b2tlblN0b3JlLCByZWRpcmVjdCwgcmVkaXJlY3RVcmkpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0QXV0aEZsb3coKV0gQXV0aGVudGljYXRlZCB1c2VyOicsIHJlc3VsdClcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2lsZW50RmxvdygpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRBdXRoRmxvdygpXSBFcnJvciBhdXRoZW50aWNhdGluZyB1c2VyOicsIGVycilcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nLnNob3dFcnJvckJveCgnRXJyb3InLCAnRXJyb3IgYXV0aGVudGljYXRpbmcgdXNlci4gRXJyb3IgZGV0YWlsczogJytKU09OLnN0cmluZ2lmeShlcnIpKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRBdXRoRmxvdygpXSBFcnJvciBnZXR0aW5nIHJlZGlyZWN0IFVSSTonLCBlcnIpXG4gICAgICAgICAgICBkaWFsb2cuc2hvd0Vycm9yQm94KCdFcnJvcicsICdFcnJvciBnZXR0aW5nIHJlZGlyZWN0IFVSSS4gRXJyb3IgZGV0YWlsczogJytKU09OLnN0cmluZ2lmeShlcnIpKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0YXJ0V2Vidmlld0hvb2tzKCl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRXZWJ2aWV3SG9va3MoKV0gU3RhcnRpbmcgd2VidmlldyBob29rcycpXG5cbiAgICAgICAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi53ZWJSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKHtcbiAgICAgICAgICAgIHVybHM6IFtcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly9sb2dpbi5saXZlLmNvbS9vYXV0aDIwX2F1dGhvcml6ZS5zcmY/KicsXG4gICAgICAgICAgICAgICAgJ2h0dHBzOi8vbG9naW4ubGl2ZS5jb20vcHBzZWN1cmUvcG9zdC5zcmY/KicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LCAoZGV0YWlscywgY2FsbGJhY2spID0+IHtcblxuICAgICAgICAgICAgaWYoZGV0YWlscy5yZXNwb25zZUhlYWRlcnMuTG9jYXRpb24gIT09IHVuZGVmaW5lZCAmJiBkZXRhaWxzLnJlc3BvbnNlSGVhZGVycy5Mb2NhdGlvblswXS5pbmNsdWRlcyh0aGlzLl94YWwuX2FwcC5SZWRpcmVjdFVyaSkpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRXZWJ2aWV3SG9va3MoKV0gR290IHJlZGlyZWN0IFVSSSBmcm9tIE9BVVRIOicsIGRldGFpbHMucmVzcG9uc2VIZWFkZXJzLkxvY2F0aW9uWzBdKVxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhXaW5kb3cuY2xvc2UoKVxuXG4gICAgICAgICAgICAgICAgaWYodGhpcy5fYXV0aENhbGxiYWNrICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdXRoQ2FsbGJhY2soZGV0YWlscy5yZXNwb25zZUhlYWRlcnMuTG9jYXRpb25bMF0pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFdlYnZpZXdIb29rcygpXSBBdXRoZW50aWNhdGlvbiBDYWxsYmFjayBpcyBub3QgZGVmaW5lZDonLCB0aGlzLl9hdXRoQ2FsbGJhY2spXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZy5zaG93RXJyb3JCb3goJ0Vycm9yJywgJ0F1dGhlbnRpY2F0aW9uIENhbGxiYWNrIGlzIG5vdCBkZWZpbmVkLiBFcnJvciBkZXRhaWxzOiAnK0pTT04uc3RyaW5naWZ5KHRoaXMuX2F1dGhDYWxsYmFjaykpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IHRydWUgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZGV0YWlscylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBvcGVuQXV0aFdpbmRvdyh1cmwpe1xuICAgICAgICBjb25zdCBhdXRoV2luZG93ID0gY3JlYXRlV2luZG93KCdhdXRoJywge1xuICAgICAgICAgICAgd2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGhlaWdodDogNjAwLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbicsXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICBhdXRoV2luZG93LmxvYWRVUkwodXJsKVxuICAgICAgICB0aGlzLl9hdXRoV2luZG93ID0gYXV0aFdpbmRvd1xuXG4gICAgICAgIHRoaXMuX2F1dGhXaW5kb3cub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tvcGVuQXV0aFdpbmRvdygpXSBDbG9zZWQgYXV0aCB3aW5kb3cnKVxuICAgICAgICAgICAgLy8gQFRPRE86IFdoYXQgdG8gZG8/XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0U3RyZWFtaW5nVG9rZW4odG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFN0cmVhbWluZ1Rva2VuJylcbiAgICAgICAgY29uc3Qgc2lzdVRva2VuID0gdG9rZW5TdG9yZS5nZXRTaXN1VG9rZW4oKVxuICAgICAgICBpZihzaXN1VG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lzdSB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcblxuICAgICAgICBjb25zdCB4c3RzVG9rZW4gPSBhd2FpdCB0aGlzLl94YWwuZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW4sICdodHRwOi8vZ3Nzdi54Ym94bGl2ZS5jb20vJylcblxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5feGFsLl94aG9tZVRva2VuOicsIHRoaXMuX3hhbC5feGhvbWVUb2tlbilcbiAgICAgICAgaWYodGhpcy5feGFsLl94aG9tZVRva2VuID09PSB1bmRlZmluZWQgfHwgdGhpcy5feGFsLl94aG9tZVRva2VuLmdldFNlY29uZHNWYWxpZCgpIDw9IDYwKXtcbiAgICAgICAgICAgIHRoaXMuX3hhbC5feGhvbWVUb2tlbiA9IGF3YWl0IHRoaXMuX3hhbC5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4aG9tZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5feGFsLl94Y2xvdWRUb2tlbjonLCB0aGlzLl94YWwuX3hjbG91ZFRva2VuKVxuICAgICAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldCgnc2V0dGluZ3MnLCBkZWZhdWx0U2V0dGluZ3MpXG4gICAgICAgIGlmKCF0aGlzLl94YWwuX3hjbG91ZFRva2VuIHx8IHRoaXMuX3hhbC5feGNsb3VkVG9rZW4uZ2V0U2Vjb25kc1ZhbGlkKCkgPD0gNjApe1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl94YWwuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5feGFsLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWInLCBzZXR0aW5ncy5mb3JjZV9yZWdpb25faXApXG4gICAgICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl94YWwuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5feGFsLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWJmMnAnLCBzZXR0aW5ncy5mb3JjZV9yZWdpb25faXApXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3hhbC5feGNsb3VkVG9rZW4gPSBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgeEhvbWVUb2tlbjogdGhpcy5feGFsLl94aG9tZVRva2VuLCB4Q2xvdWRUb2tlbjogdGhpcy5feGFsLl94Y2xvdWRUb2tlbiB9XG4gICAgfVxuXG4gICAgXG59XG4iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5pbXBvcnQgSHR0cCBmcm9tICcuL3hodHRwJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2hpdmVtZW50TWFuYWdlciB7XG4gIF9hcHBsaWNhdGlvbjogQXBwbGljYXRpb25cblxuICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbil7XG4gICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICB9XG5cbiAgZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzKCkge1xuICAgIGNvbnN0IGh0dHAgPSBuZXcgSHR0cCgpO1xuICAgIGNvbnN0IHNldHRpbmdzOiBhbnkgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KCdzZXR0aW5ncycsIHt9KVxuICAgIGNvbnN0IHByZWZlcnJlZF9nYW1lX2xhbmd1YWdlID0gc2V0dGluZ3MucHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UgfHwgJ2VuLVVTJ1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHVocyA9IHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuRGlzcGxheUNsYWltcy54dWlbMF0udWhzO1xuICAgICAgY29uc3QgeGlkID0gdGhpcy5fYXBwbGljYXRpb24ud2ViVG9rZW4uZGF0YS5EaXNwbGF5Q2xhaW1zLnh1aVswXS54aWQ7XG5cbiAgICAgIGh0dHBcbiAgICAgICAgLmdldChcbiAgICAgICAgICAnYWNoaWV2ZW1lbnRzLnhib3hsaXZlLmNvbScsXG4gICAgICAgICAgYC91c2Vycy94dWlkKCR7eGlkfSkvaGlzdG9yeS90aXRsZXM/b3JkZXJCeT11bmxvY2tUaW1lYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiAnWEJMMy4wIHg9JyArIHVocyArICc7JyArIHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuVG9rZW4sXG4gICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogcHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UsXG4gICAgICAgICAgICAneC14YmwtY29udHJhY3QtdmVyc2lvbic6IDIsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LW5hbWUnOiAnWGJveEFwcCcsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LXR5cGUnOiAnVVdBJyxcbiAgICAgICAgICAgICd4LXhibC1jbGllbnQtdmVyc2lvbic6ICczOS4zOS4yMjAwMS4wJyxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIGxvZy5pbmZvKCdbZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzXSBnZXRIaXN0b3J5QWNoaXZlbWVudHM6JywgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgICAgaWYgKHJlcy50aXRsZXMpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzLnRpdGxlcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzXSBlcnJvcjonLCBlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWNoaXZlbWVudERldGFpbCh0aXRsZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBodHRwID0gbmV3IEh0dHAoKTtcbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldCgnc2V0dGluZ3MnLCB7fSlcbiAgICBjb25zdCBwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSA9IHNldHRpbmdzLnByZWZlcnJlZF9nYW1lX2xhbmd1YWdlIHx8ICdlbi1VUydcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB1aHMgPSB0aGlzLl9hcHBsaWNhdGlvbi53ZWJUb2tlbi5kYXRhLkRpc3BsYXlDbGFpbXMueHVpWzBdLnVocztcbiAgICAgIGNvbnN0IHhpZCA9IHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuRGlzcGxheUNsYWltcy54dWlbMF0ueGlkO1xuXG4gICAgICBodHRwXG4gICAgICAgIC5nZXQoXG4gICAgICAgICAgJ2FjaGlldmVtZW50cy54Ym94bGl2ZS5jb20nLFxuICAgICAgICAgIGAvdXNlcnMveHVpZCgke3hpZH0pL2FjaGlldmVtZW50cz90aXRsZUlkPSR7dGl0bGVJZH0mbWF4SXRlbXM9MTAwMGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ1hCTDMuMCB4PScgKyB1aHMgKyAnOycgKyB0aGlzLl9hcHBsaWNhdGlvbi53ZWJUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IHByZWZlcnJlZF9nYW1lX2xhbmd1YWdlLFxuICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAyLFxuICAgICAgICAgICAgJ3gteGJsLWNsaWVudC1uYW1lJzogJ1hib3hBcHAnLFxuICAgICAgICAgICAgJ3gteGJsLWNsaWVudC10eXBlJzogJ1VXQScsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LXZlcnNpb24nOiAnMzkuMzkuMjIwMDEuMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLmFjaGlldmVtZW50cykge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuYWNoaWV2ZW1lbnRzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1tnZXRBY2hpdmVtZW50RGV0YWlsXSBlcnJvcjonLCBlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiaW1wb3J0IHtcbiAgICBzY3JlZW4sXG4gICAgQnJvd3NlcldpbmRvdyxcbiAgICBCcm93c2VyV2luZG93Q29uc3RydWN0b3JPcHRpb25zLFxufSBmcm9tICdlbGVjdHJvbidcbmltcG9ydCBTdG9yZSBmcm9tICdlbGVjdHJvbi1zdG9yZSdcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCdcblxuZXhwb3J0IGRlZmF1bHQgKHdpbmRvd05hbWU6IHN0cmluZywgb3B0aW9uczogQnJvd3NlcldpbmRvd0NvbnN0cnVjdG9yT3B0aW9ucyk6IEJyb3dzZXJXaW5kb3cgPT4ge1xuICAgIGNvbnN0IGtleSA9ICd3aW5kb3ctc3RhdGUnXG4gICAgY29uc3QgbmFtZSA9IGB3aW5kb3ctc3RhdGUtdjItJHt3aW5kb3dOYW1lfWBcbiAgICBjb25zdCBzdG9yZSA9IG5ldyBTdG9yZSh7IG5hbWUgfSlcbiAgICBjb25zdCBkZWZhdWx0U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IG9wdGlvbnMud2lkdGgsXG4gICAgICAgIGhlaWdodDogb3B0aW9ucy5oZWlnaHQsXG4gICAgfVxuICAgIGxldCBzdGF0ZSA9IHt9XG5cbiAgICBjb25zdCByZXN0b3JlID0gKCkgPT4gc3RvcmUuZ2V0KGtleSwgZGVmYXVsdFNpemUpXG5cbiAgICBjb25zdCBnZXRDdXJyZW50UG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICAgIHdpbi5yZW1vdmVNZW51KClcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB3aW4uZ2V0UG9zaXRpb24oKVxuICAgICAgICBjb25zdCBzaXplID0gd2luLmdldFNpemUoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcG9zaXRpb25bMF0sXG4gICAgICAgICAgICB5OiBwb3NpdGlvblsxXSxcbiAgICAgICAgICAgIHdpZHRoOiBzaXplWzBdLFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplWzFdLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2luZG93V2l0aGluQm91bmRzID0gKHdpbmRvd1N0YXRlLCBib3VuZHMpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHdpbmRvd1N0YXRlLnggPj0gYm91bmRzLnggJiZcbiAgICAgIHdpbmRvd1N0YXRlLnkgPj0gYm91bmRzLnkgJiZcbiAgICAgIHdpbmRvd1N0YXRlLnggKyB3aW5kb3dTdGF0ZS53aWR0aCA8PSBib3VuZHMueCArIGJvdW5kcy53aWR0aCAmJlxuICAgICAgd2luZG93U3RhdGUueSArIHdpbmRvd1N0YXRlLmhlaWdodCA8PSBib3VuZHMueSArIGJvdW5kcy5oZWlnaHRcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlc2V0VG9EZWZhdWx0cyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmRzID0gc2NyZWVuLmdldFByaW1hcnlEaXNwbGF5KCkuYm91bmRzXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2l6ZSwge1xuICAgICAgICAgICAgeDogKGJvdW5kcy53aWR0aCAtIGRlZmF1bHRTaXplLndpZHRoKSAvIDIsXG4gICAgICAgICAgICB5OiAoYm91bmRzLmhlaWdodCAtIGRlZmF1bHRTaXplLmhlaWdodCkgLyAyLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGVuc3VyZVZpc2libGVPblNvbWVEaXNwbGF5ID0gd2luZG93U3RhdGUgPT4ge1xuICAgICAgICBjb25zdCB2aXNpYmxlID0gc2NyZWVuLmdldEFsbERpc3BsYXlzKCkuc29tZShkaXNwbGF5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3dXaXRoaW5Cb3VuZHMod2luZG93U3RhdGUsIGRpc3BsYXkuYm91bmRzKVxuICAgICAgICB9KVxuICAgICAgICBpZiAoIXZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIFdpbmRvdyBpcyBwYXJ0aWFsbHkgb3IgZnVsbHkgbm90IHZpc2libGUgbm93LlxuICAgICAgICAgICAgLy8gUmVzZXQgaXQgdG8gc2FmZSBkZWZhdWx0cy5cbiAgICAgICAgICAgIHJldHVybiByZXNldFRvRGVmYXVsdHMoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aW5kb3dTdGF0ZVxuICAgIH1cblxuICAgIGNvbnN0IHNhdmVTdGF0ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF3aW4uaXNNaW5pbWl6ZWQoKSAmJiAhd2luLmlzTWF4aW1pemVkKCkpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGUsIGdldEN1cnJlbnRQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICAgIHN0b3JlLnNldChrZXksIHN0YXRlKVxuICAgIH1cblxuICAgIHN0YXRlID0gZW5zdXJlVmlzaWJsZU9uU29tZURpc3BsYXkocmVzdG9yZSgpKVxuXG4gICAgY29uc3QgYnJvd3Nlck9wdGlvbnM6IEJyb3dzZXJXaW5kb3dDb25zdHJ1Y3Rvck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgICAgICAgLy8gbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgLy8gY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgY29udGV4dElzb2xhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuYWJsZUJsaW5rRmVhdHVyZXM6ICcnLFxuICAgICAgICAgICAgc2FuZGJveDogZmFsc2UsXG4gICAgICAgICAgICBwcmVsb2FkOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncHJlbG9hZC5qcycpLFxuICAgICAgICAgICAgLi4ub3B0aW9ucy53ZWJQcmVmZXJlbmNlcyxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b0hpZGVNZW51QmFyOiB0cnVlLFxuICAgIH1cbiAgICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyhicm93c2VyT3B0aW9ucylcblxuICAgIHdpbi5vbignY2xvc2UnLCBzYXZlU3RhdGUpXG5cbiAgICByZXR1cm4gd2luXG59IiwiaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb246QXBwbGljYXRpb24pIHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgIH1cblxuICAgIGdldChob3N0OnN0cmluZywgdXJsOiBzdHJpbmcsIG1ldGhvZCA9ICdHRVQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcblxuICAgICAgICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCAocmVzcG9uc2U6YW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCAoZGF0YTphbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGFcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdIVFRQJywgJ2dldCgnK3VybCsnLCAnK21ldGhvZCsnKSByZXNvbHZlOicsIHJlc3BvbnNlLnN0YXR1c0NvZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuRGF0YSA9IHJlc3BvbnNlRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5EYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZURhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIGlzIG5vdCBKU09OLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjA0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJldHJ5Li5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXQodXJsLCBtZXRob2QpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNzUwKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJldHVybkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0hUVFAnLCAnZ2V0KCcrdXJsKycpIHJlamVjdDonLCByZXNwb25zZS5zdGF0dXNDb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlcS5lbmQoKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHBvc3QoaG9zdDogc3RyaW5nLCB1cmw6IHN0cmluZywgcG9zdERhdGEgPSB7fSwgaGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZEhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sIGhlYWRlcnMpXG5cbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIGhvc3Q6IGhvc3QsXG4gICAgICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IG1lcmdlZEhlYWRlcnMsXG4gICAgICAgICAgICB9LCAocmVzcG9uc2U6YW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZGF0YScsIChkYXRhOmFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgKz0gZGF0YVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXNDb2RlID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXNDb2RlIDw9IDI5OSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0hUVFAnLCAncG9zdCgnK3VybCsnKSByZXNvbHZlOicsIHJlc3BvbnNlLnN0YXR1c0NvZGUsIHJlc3BvbnNlRGF0YS5zdWJzdHJpbmcoMCwgMTAwKSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVybkRhdGEgPSByZXNwb25zZURhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBpcyBub3QgSlNPTi4uXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSFRUUCcsICdwb3N0KCcrdXJsKycpIHJlamVjdDonLCByZXNwb25zZS5zdGF0dXNDb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVxLndyaXRlKEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSlcblxuICAgICAgICAgICAgcmVxLmVuZCgpXG4gICAgICAgIH0pXG4gICAgfVxuXG59IiwiaW1wb3J0IGNyZWF0ZVdpbmRvdyBmcm9tICcuL2NyZWF0ZS13aW5kb3cnXG5pbXBvcnQgeENsb3VkQXBpIGZyb20gJy4veGNsb3VkYXBpJ1xuaW1wb3J0IHhib3hXb3JrZXIgZnJvbSAnLi94Ym94V29ya2VyJ1xuaW1wb3J0IHsgc2V0VXBkYXRlTm90aWZpY2F0aW9uIGFzIHVwZGF0ZXIgfSBmcm9tICcuL3VwZGF0ZXInXG5cbmV4cG9ydCB7XG4gICAgY3JlYXRlV2luZG93LFxuICAgIHhDbG91ZEFwaSxcbiAgICB4Ym94V29ya2VyLFxuICAgIHVwZGF0ZXIsXG59XG4iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5pbXBvcnQgeENsb3VkQXBpLCB7IHBsYXlSZXN1bHQgfSBmcm9tICcuL3hjbG91ZGFwaSdcblxuaW50ZXJmYWNlIHN0cmVhbVNlc3Npb24ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZ3wnaG9tZSd8J2Nsb3VkJztcbiAgICBzdGF0ZT86IHN0cmluZztcbiAgICB3YWl0aW5nVGltZXM/OiBhbnk7XG4gICAgcGxheWVyU3RhdGU6IHN0cmluZ3wncGVuZGluZyd8J3N0YXJ0ZWQnfCdxdWV1ZWQnfCdmYWlsZWQnO1xuICAgIGVycm9yRGV0YWlscz86IHtcbiAgICAgICAgY29kZTtcbiAgICAgICAgbWVzc2FnZTtcbiAgICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1NYW5hZ2VyIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgX3Nlc3Npb25zID0ge31cbiAgICBcbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbil7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cbiAgICB9XG5cbiAgICBnZXRBcGkodHlwZSk6IHhDbG91ZEFwaXtcbiAgICAgICAgY29uc3Qgc3RyZWFtaW5nVG9rZW5zID0gdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zO1xuXG4gICAgICAgIGlmKHR5cGUgPT09ICdob21lJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB4Q2xvdWRBcGkoXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24sXG4gICAgICAgICAgICAgICAgc3RyZWFtaW5nVG9rZW5zLnhIb21lVG9rZW4uZ2V0RGVmYXVsdFJlZ2lvbigpLmJhc2VVcmkuc3Vic3RyaW5nKDgpLFxuICAgICAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54SG9tZVRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgICAgICAgICAgICBcImhvbWVcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgeENsb3VkQXBpKFxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLFxuICAgICAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5nZXREZWZhdWx0UmVnaW9uKCkuYmFzZVVyaS5zdWJzdHJpbmcoOCksXG4gICAgICAgICAgICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgICAgICAgICAgICBcImNsb3VkXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZXNzaW9uKHNlc3Npb25JZDpzdHJpbmcpOnN0cmVhbVNlc3Npb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbnNbc2Vzc2lvbklkXVxuICAgIH1cblxuICAgIHN0YXJ0U3RyZWFtKHR5cGU6c3RyaW5nfCdob21lJ3wnY2xvdWQnLCB0YXJnZXQpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRBcGkodHlwZSkuc3RhcnRTdHJlYW0odGFyZ2V0KS50aGVuKChwbGF5UmVzdWx0OnBsYXlSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuX2FwcGxpY2F0aW9uLl94Q2xvdWRBcGkuc3RhcnRTdHJlYW0odHlwZSwgdGFyZ2V0KS50aGVuKChwbGF5UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N0cmVhbW1hbmFnZXIgLSBzdGFydFN0cmVhbTonLCBwbGF5UmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gcGxheVJlc3VsdC5zZXNzaW9uUGF0aC5zcGxpdCgnLycpWzNdXG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1TZXNzaW9uOnN0cmVhbVNlc3Npb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBwbGF5UmVzdWx0LnNlc3Npb25QYXRoLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJTdGF0ZTogJ3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9zZXNzaW9uc1tzZXNzaW9uSWRdID0gc3RyZWFtU2Vzc2lvblxuICAgICAgICAgICAgICAgIHRoaXMubW9uaXRvclNlc3Npb24oc2Vzc2lvbklkKVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzZXNzaW9uSWQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0b3BTdHJlYW0oc2Vzc2lvbklkKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZWplY3QoJ1Nlc3Npb24gbm90IGZvdW5kOiAnK3Nlc3Npb25JZClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nZXRBcGkoc2Vzc2lvbi50eXBlKS5zdG9wU3RyZWFtKHNlc3Npb25JZCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0N1cnJlbnQgc2Vzc2lvbnM6JywgdGhpcy5fc2Vzc2lvbnMpXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Nlc3Npb25zW3Nlc3Npb25JZF1cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbmV3IHNlc3Npb25zOicsIHRoaXMuX3Nlc3Npb25zKVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNlbmRTZHAoc2Vzc2lvbklkOnN0cmluZywgc2RwOmFueSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZFNkcChzZXNzaW9uSWQsIHNkcCkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VuZENoYXRTZHAoc2Vzc2lvbklkOnN0cmluZywgc2RwOmFueSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZENoYXRTZHAoc2Vzc2lvbklkLCBzZHApLnRoZW4oKHJlc3VsdCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNlbmRJY2Uoc2Vzc2lvbklkOnN0cmluZywgaWNlOmFueSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZEljZShzZXNzaW9uSWQsIGljZSkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VuZEtlZXBhbGl2ZShzZXNzaW9uSWQ6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZWplY3QoJ1Nlc3Npb24gbm90IGZvdW5kOiAnK3Nlc3Npb25JZClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nZXRBcGkoc2Vzc2lvbi50eXBlKS5zZW5kS2VlcGFsaXZlKHNlc3Npb25JZCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG1vbml0b3JTZXNzaW9uKHNlc3Npb25JZCl7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdTdHJlYW1NYW5hZ2VyJywgJ21vbml0b3JTZXNzaW9uKCcrc2Vzc2lvbklkKycpIGNoZWNraW5nIHN0YXRlJylcblxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICBpZihzZXNzaW9uID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnU3RyZWFtTWFuYWdlcicsICdtb25pdG9yU2Vzc2lvbignK3Nlc3Npb25JZCsnKSBzZXNzaW9uIG5vdCBmb3VuZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdldEFwaSh0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS50eXBlKS5nZXRTdHJlYW1TdGF0ZShzZXNzaW9uSWQpLnRoZW4oKHJlc3VsdDphbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3RyZWFtbWFuYWdlciAtIHN0YXRlOicsIHJlc3VsdClcblxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnN0YXRlID0gcmVzdWx0LnN0YXRlXG5cbiAgICAgICAgICAgICAgICBpZihyZXN1bHQuc3RhdGUgPT09ICdQcm92aXNpb25lZCcpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS5wbGF5ZXJTdGF0ZSA9ICdzdGFydGVkJ1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc3VsdC5zdGF0ZSA9PT0gJ1Byb3Zpc2lvbmluZycpe1xuICAgICAgICAgICAgICAgICAgICAvLyBMZXRzIGxvb3AgYWdhaW5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzdWx0LnN0YXRlID09PSAnUmVhZHlUb0Nvbm5lY3QnKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gTVNBTCBBdXRoXG4gICAgICAgICAgICAgICAgICAgIC8vIEBUT0RPOiBSZWZyZXNoIHRva2VuIGlmIGV4cGlyZWQ/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5feGFsLmdldE1zYWxUb2tlbih0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX3Rva2VuU3RvcmUpLnRoZW4oKG1zYWxUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBcGkodGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkudHlwZSkuc2VuZE1TQUxBdXRoKHNlc3Npb25JZCwgbXNhbFRva2VuLmRhdGEubHB0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbml0b3JTZXNzaW9uKHNlc3Npb25JZClcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ01TQUwgQVVUSCBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnTVNBTCBBVVRIIEVycm9yOicrIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTVNBTCBBVVRIIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ01TQUwgQVVUSCBFcnJvcjonKyBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZihyZXN1bHQuc3RhdGUgPT09ICdXYWl0aW5nRm9yUmVzb3VyY2VzJyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvIFF1ZXVlIGxvZ2ljXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLndhaXRpbmdUaW1lcyA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnR5cGUpLmdldFdhaXRpbmdUaW1lcyh0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS50YXJnZXQpLnRoZW4oKHdhaXRpbmdUaW1lcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLndhaXRpbmdUaW1lcyA9IHdhaXRpbmdUaW1lc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnBsYXllclN0YXRlID0gJ3F1ZXVlZCdcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzdWx0LnN0YXRlID09PSAnRmFpbGVkJyl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLmVycm9yRGV0YWlscyA9IHJlc3VsdC5lcnJvckRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkucGxheWVyU3RhdGUgPSAnZmFpbGVkJ1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdVbmtub3duIHN0YXRlOicsIHJlc3VsdClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdHJlYW1tYW5hZ2VyIC0gZXJyb3IgY2hlY2tpbmcgc3RhdGU6Jywgc2Vzc2lvbklkLCBlcnJvcilcblxuICAgICAgICAgICAgICAgIGlmKGVycm9yLnN0YXR1cyA9PT0gNDA0KXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdTdHJlYW1NYW5hZ2VyJywgJ1Nlc3Npb24gbm90IGZvdW5kIG9uIHNlcnZlci4gUmVtb3Zpbmcgc2Vzc2lvbi4uLicpXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZXNzaW9uc1tzZXNzaW9uSWRdXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgMTAwMClcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVTZXNzaW9ucygpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRBcGkoJ2Nsb3VkJykuZ2V0QWN0aXZlU2Vzc2lvbnMoKS50aGVuKChyZXN1bHQpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBY3RpdmUgc2Vzc2lvbnM6JywgcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG59IiwiaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IEhUVFAgZnJvbSAnLi9odHRwJ1xuaW1wb3J0IFN0b3JlIGZyb20gJ2VsZWN0cm9uLXN0b3JlJ1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW50ZXJmYWNlIHRpdGxlSW5mb0FyZ3Mge1xuICAgIFByb2R1Y3RUaXRsZTogc3RyaW5nO1xuICAgIFB1Ymxpc2hlck5hbWU6IHN0cmluZztcbiAgICBYQ2xvdWRUaXRsZUlkOiBzdHJpbmc7XG4gICAgSW1hZ2VfVGlsZTogYW55O1xuICAgIEltYWdlX1Bvc3RlcjogYW55O1xuICAgIFN0cmVhbWFiaWxpdHk6IGFueTtcbiAgICBDYXRlZ29yaWVzOiBhbnk7XG4gICAgTG9jYWxpemVkQ2F0ZWdvcmllczogYW55O1xuICAgIFhDbG91ZE9mZmVyaW5nczogYW55O1xuICAgIFhib3hUaXRsZUlkOiBzdHJpbmc7XG4gICAgQ2hpbGRYYm94VGl0bGVJZHM6IGFueTtcbiAgICBTdG9yZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlTWFuYWdlciB7XG5cbiAgICBfYXBwbGljYXRpb246QXBwbGljYXRpb25cbiAgICBfc3RvcmUgPSBuZXcgU3RvcmUoKVxuICAgIF9odHRwOkhUVFBcblxuICAgIF94Q2xvdWRUaXRsZXMgPSB7fVxuICAgIF9wcm9kdWN0SWRRdWV1ZSA9IFtdXG5cbiAgICBfeENsb3VkUmVjZW50VGl0bGVzID0ge31cbiAgICBfeENsb3VkUmVjZW50VGl0bGVzTGFzdFVwZGF0ZSA9IDBcblxuICAgIFxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgICAgICB0aGlzLl9odHRwID0gbmV3IEhUVFAodGhpcy5fYXBwbGljYXRpb24pXG4gICAgfVxuICAgIC8vIGdldE9mZmljaWFsVGl0bGVzKCkge1xuICAgIC8vICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgLy8gICAgICAgICBsZXQgb2ZmaWNpYWxUaXRsZXMgPSBbXTtcbiAgICAvLyAgICAgICAgIGF4aW9zXG4gICAgLy8gICAgICAgICAuZ2V0KCdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0dlb2NsZC9YU3RyZWFtaW5nL2NvbnRlbnRzL3RpdGxlcy5qc29uP3JlZj1tYWluJywge1xuICAgIC8vICAgICAgICAgICAgIHRpbWVvdXQ6IDIwICogMTAwMCxcbiAgICAvLyAgICAgICAgIH0pXG4gICAgLy8gICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgIC8vICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHJlcy5kYXRhLmNvbnRlbnQ7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnRDbGVhbmVkID0gY29udGVudC5yZXBsYWNlKC9cXG4vZywgJycpO1xuXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZWRCdWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjRDb250ZW50Q2xlYW5lZCwgJ2Jhc2U2NCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCBkZWNvZGVkQ29udGVudCA9IGRlY29kZWRCdWZmZXIudG9TdHJpbmcoJ3V0Zi04Jyk7XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZEpzb24gPSBKU09OLnBhcnNlKGRlY29kZWRDb250ZW50KTtcblxuICAgIC8vICAgICAgICAgICAgICAgICBvZmZpY2lhbFRpdGxlcyA9IGRlY29kZWRKc29uLlByb2R1Y3RzO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICByZXNvbHZlKG9mZmljaWFsVGl0bGVzKTtcbiAgICAvLyAgICAgICAgIH0pXG4gICAgLy8gICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coJ29mZmljaWFsVGl0bGVzIGVycm9yOicsIGUpXG4gICAgLy8gICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuXG4gICAgZ2V0T2ZmaWNpYWxUaXRsZXMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGxldCBvZmZpY2lhbFRpdGxlcyA9IFtdO1xuICAgICAgICAgICAgYXhpb3NcbiAgICAgICAgICAgIC5nZXQoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9HZW9jbGQvWFN0cmVhbWluZ0BtYWluL3RpdGxlcy5qc29uJywge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwICogMTAwMCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmaWNpYWxUaXRsZXMgPSByZXMuZGF0YS5Qcm9kdWN0cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShvZmZpY2lhbFRpdGxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEdhbWVQYXNzUHJvZHVjdHModGl0bGVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0SWRRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgdjJUaXRsZU1hcCA9IHt9O1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRpdGxlcykpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpdGxlcy5mb3JFYWNoKHRpdGxlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGl0bGUuZGV0YWlscyAmJiB0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWRRdWV1ZS5wdXNoKHRpdGxlLmRldGFpbHMucHJvZHVjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgdjJUaXRsZU1hcFt0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZF0gPSB0aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gR2V0IG9mZmljaWFsVGl0bGVzXG4gICAgICAgICAgICB0aGlzLmdldE9mZmljaWFsVGl0bGVzKCkudGhlbigob2ZmaWNpYWxUaXRsZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlUHJvZHVjdElkcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLi4ubmV3IFNldChbLi4ucHJvZHVjdElkUXVldWUsIC4uLm9mZmljaWFsVGl0bGVzXSksXG4gICAgICAgICAgICAgICAgXTtcbiAgICBcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwLnBvc3QoJ2NhdGFsb2cuZ2FtZXBhc3MuY29tJywgJy92My9wcm9kdWN0cz9tYXJrZXQ9VVMmbGFuZ3VhZ2U9ZW4tVVMmaHlkcmF0aW9uPVJlbW90ZUxvd0phZGUwJywgeyAvLyBSZW1vdGVMb3dKYWRlMFxuICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdHMnOiBtZXJnZVByb2R1Y3RJZHMsXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAnbXMtY3YnOiAwLFxuICAgICAgICAgICAgICAgICAgICAnY2FsbGluZy1hcHAtbmFtZSc6ICdYYm94IENsb3VkIEdhbWluZyBXZWInLFxuICAgICAgICAgICAgICAgICAgICAnY2FsbGluZy1hcHAtdmVyc2lvbic6ICcyNC4xNy42MycsXG4gICAgXG4gICAgICAgICAgICAgICAgfSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuUHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RzID0gcmVzdWx0LlByb2R1Y3RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkVGl0bGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2MlRpdGxlTWFwW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRUaXRsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcm9kdWN0c1trZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52MlRpdGxlTWFwW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRUaXRsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcm9kdWN0c1trZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZFRpdGxlcy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuUHJvZHVjdFRpdGxlLmxvY2FsZUNvbXBhcmUoYi5Qcm9kdWN0VGl0bGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobWVyZ2VkVGl0bGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRHYW1lUGFzc1Byb2R1Y3RzIGVycm9yOicsIGUpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXROZXdUaXRsZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KCdjYXRhbG9nLmdhbWVwYXNzLmNvbScsICcvc2lnbHMvdjI/aWQ9ZjEzY2Y2YjQtNTdlNi00NDU5LTg5ZGYtNmFlYzE4Y2YwNTM4Jm1hcmtldD1VUyZsYW5ndWFnZT1lbi1VUycpXG4gICAgfVxufVxuXG5pbnRlcmZhY2UgVGl0bGVEZXRhaWxzIHtcbiAgICB0aXRsZUlkOnN0cmluZztcbiAgICBkZXRhaWxzOiB7XG4gICAgICAgIHByb2R1Y3RJZDpzdHJpbmc7XG4gICAgICAgIHhib3hUaXRsZUlkOm51bWJlcjtcbiAgICAgICAgaGFzRW50aXRsZW1lbnQ6Ym9vbGVhbjtcbiAgICAgICAgc3VwcG9ydHNJbkFwcFB1cmNoYXNlczpib29sZWFuO1xuICAgICAgICBzdXBwb3J0ZWRUYWJzOiBhbnk7XG4gICAgICAgIHN1cHBvcnRlZElucHV0VHlwZXM6IGFueTtcbiAgICAgICAgcHJvZ3JhbXM6IGFueTtcbiAgICAgICAgdXNlclByb2dyYW1zOiBhbnk7XG4gICAgICAgIHVzZXJTdWJzY3JpcHRpb25zOiBhbnk7XG4gICAgICAgIGlzRnJlZUluU3RvcmU6IGJvb2xlYW47XG4gICAgICAgIG1heEdhbWVwbGF5VGltZUluU2Vjb25kczogbnVtYmVyO1xuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUaXRsZSB7XG5cbiAgICB0aXRsZUlkXG4gICAgcHJvZHVjdElkXG4gICAgeGJveFRpdGxlSWRcbiAgICBzdXBwb3J0ZWRJbnB1dFR5cGVzXG4gICAgY2F0YWxvZ0RldGFpbHNcblxuICAgIGNvbnN0cnVjdG9yKHRpdGxlOlRpdGxlRGV0YWlscyl7XG4gICAgICAgIHRoaXMudGl0bGVJZCA9IHRpdGxlLnRpdGxlSWRcbiAgICAgICAgdGhpcy5wcm9kdWN0SWQgPSB0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZFxuICAgICAgICB0aGlzLnhib3hUaXRsZUlkID0gdGl0bGUuZGV0YWlscy54Ym94VGl0bGVJZFxuICAgICAgICB0aGlzLnN1cHBvcnRlZElucHV0VHlwZXMgPSB0aXRsZS5kZXRhaWxzLnN1cHBvcnRlZElucHV0VHlwZXNcbiAgICB9XG5cbiAgICBzZXRDYXRhbG9nRGV0YWlscyh0aXRsZUluZm86dGl0bGVJbmZvQXJncyl7XG4gICAgICAgIHRoaXMuY2F0YWxvZ0RldGFpbHMgPSB0aXRsZUluZm9cbiAgICB9XG5cbiAgICB0b1N0cmluZygpe1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcylcbiAgICB9XG5cbiAgICByZXN0b3JlRnJvbUNhY2hlKGNhY2hlZE9iail7XG4gICAgICAgIHRoaXMuY2F0YWxvZ0RldGFpbHMgPSBjYWNoZWRPYmouY2F0YWxvZ0RldGFpbHNcbiAgICB9XG59IiwiaW1wb3J0IHsgVG9rZW5TdG9yZSB9IGZyb20gJy4uL3hhbCdcbmltcG9ydCBTdG9yZSBmcm9tICdlbGVjdHJvbi1zdG9yZSdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aFRva2VuU3RvcmUgZXh0ZW5kcyBUb2tlblN0b3JlIHtcblxuICAgIHByaXZhdGUgX3N0b3JlID0gbmV3IFN0b3JlKClcblxuICAgIGxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX3N0b3JlLmdldCgndXNlci50b2tlbnN0b3JlJywgJ3t9JykgYXMgc3RyaW5nXG4gICAgICAgIHRoaXMubG9hZEpzb24odG9rZW5zKVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVzZXJUb2tlbjogdGhpcy5fdXNlclRva2VuPy5kYXRhLFxuICAgICAgICAgICAgc2lzdVRva2VuOiB0aGlzLl9zaXN1VG9rZW4/LmRhdGEsXG4gICAgICAgICAgICBqd3RLZXlzOiB0aGlzLl9qd3RLZXlzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuX3N0b3JlLnNldCgndXNlci50b2tlbnN0b3JlJywgZGF0YSlcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGVsZXRlKCd1c2VyLnRva2Vuc3RvcmUnKVxuICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5fc2lzdVRva2VuID0gdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuX2p3dEtleXMgPSB1bmRlZmluZWRcbiAgICB9XG59IiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IGVsZWN0cm9uIGZyb20gJ2VsZWN0cm9uJ1xuaW1wb3J0IHsgY29tcGFyZSB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnXG5pbXBvcnQgZ2ggZnJvbSAnZ2l0aHViLXVybC10by1vYmplY3QnXG5pbXBvcnQgcGtnIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbidcblxuLy8gQmFzZSBjb2RlIGJlbG93IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Fua3VyazkxL2VsZWN0cm9uLXVwZGF0ZS1ub3RpZmllci4gQ3JlZGl0cyB0byBAYW5rdXJrOTEuXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgc2lsZW50PzogYm9vbGVhbjtcbiAgcHJlcmVsZWFzZXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgR2l0aHViUmVsZWFzZU9iamVjdCB7XG4gIHRhZ19uYW1lOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgaHRtbF91cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIGRlYnVnOiBmYWxzZSwgLy8gZm9yY2UgcnVuIGluIGRldmVsb3BtZW50XG4gICAgc2lsZW50OiB0cnVlLFxuICAgIHByZXJlbGVhc2VzOiBmYWxzZSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwZGF0ZU5vdGlmaWNhdGlvbihvcHRpb25zOiBPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMsIGxvZ2dlcikge1xuICAgIGNvbnN0IHdpdGhEZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpXG5cbiAgICBpZiAoZWxlY3Ryb24uYXBwLmlzUmVhZHkoKSkge1xuICAgICAgICBjaGVja0ZvclVwZGF0ZXMod2l0aERlZmF1bHRzLCBsb2dnZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWxlY3Ryb24uYXBwLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICAgIGNoZWNrRm9yVXBkYXRlcyh3aXRoRGVmYXVsdHMsIGxvZ2dlcilcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoe3JlcG9zaXRvcnksIHRva2VuLCBkZWJ1Zywgc2lsZW50LCBwcmVyZWxlYXNlc306IE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucywgbG9nZ2VyKSB7XG4gICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gUnVubmluZyB1cGRhdGVyLi4uJywgZWxlY3Ryb24uYXBwLmlzUGFja2FnZWQsIGRlYnVnKVxuICAgIGlmICghZWxlY3Ryb24uYXBwLmlzUGFja2FnZWQgJiYgIWRlYnVnKXtcbiAgICAgICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gTm90IGNoZWNraW5nIGZvciB1cGRhdGVzIGJlY2F1c2UgYXBwIGlzIG5vdCBwYWNrYWdlZC4nKVxuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcG9zaXRvcnkpIHtcbiAgICAvLyBjb25zdCBwa2cgPSByZXF1aXJlKHBhdGguam9pbihlbGVjdHJvbi5hcHAuZ2V0QXBwUGF0aCgpLCAncGFja2FnZS5qc29uJykpXG4gICAgICAgIGNvbnN0IGdoT2JqID0gZ2gocGtnLnJlcG9zaXRvcnkpXG5cbiAgICAgICAgaWYgKCFnaE9iaikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXBvc2l0b3J5IFVSTCBub3QgZm91bmQgaW4gcGFja2FnZS5qc29uIGZpbGUuJylcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9zaXRvcnkgPSBnaE9iai51c2VyICsgJy8nICsgZ2hPYmoucmVwb1xuICAgIH1cblxuICAgIGxldCBsYXRlc3RSZWxlYXNlOiBudWxsIHwgR2l0aHViUmVsZWFzZU9iamVjdCA9IG51bGxcblxuICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIENoZWNraW5nIGZvciB1cGRhdGVzIG9uIEdpdEh1YjonLCBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG9zaXRvcnl9L3JlbGVhc2VzYClcbiAgICAgICAgY29uc3Qge2RhdGE6IHJlbGVhc2VzfSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG9zaXRvcnl9L3JlbGVhc2VzYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0b2tlbiA/IHthdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gfSA6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKVxuXG4gICAgICAgIGZvcihjb25zdCByZWxlYXNlIGluIHJlbGVhc2VzKXtcbiAgICAgICAgICAgIGlmKHJlbGVhc2VzW3JlbGVhc2VdLnByZXJlbGVhc2UgPT09IHByZXJlbGVhc2VzKXtcbiAgICAgICAgICAgICAgICBsYXRlc3RSZWxlYXNlID0gcmVsZWFzZXNbcmVsZWFzZV0gYXMgR2l0aHViUmVsZWFzZU9iamVjdFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBFcnJvciB3aGlsZSBjaGVja2luZyBmb3IgdXBkYXRlczonLCBlcnJvcilcblxuICAgICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICAgICAgc2hvd0RpYWxvZygnVW5hYmxlIHRvIGNoZWNrIGZvciB1cGRhdGVzIGF0IHRoaXMgbW9tZW50LiBUcnkgYWdhaW4uJywgJ2Vycm9yJylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbGF0ZXN0UmVsZWFzZSkgcmV0dXJuXG5cbiAgICBpZiAoY29tcGFyZShsYXRlc3RSZWxlYXNlLnRhZ19uYW1lLCBlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpLCAnPicpKSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIE5ldyB2ZXJzaW9uIGZvdW5kOicsIGxhdGVzdFJlbGVhc2UudGFnX25hbWUpXG4gICAgICAgIHNob3dVcGRhdGVEaWFsb2cobGF0ZXN0UmVsZWFzZSlcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBBcHBsaWNhdGlvbiBpcyBuZXdlc3QgdmVyc2lvbi4gQ3VycmVudCB2ZXJzaW9uOicsIGVsZWN0cm9uLmFwcC5nZXRWZXJzaW9uKCksICdOZXdlc3QgdmVyc2lvbjonLCBsYXRlc3RSZWxlYXNlLnRhZ19uYW1lIClcbiAgICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgICAgIHNob3dEaWFsb2coYFlvdSBhcmUgYWxyZWFkeSBydW5uaW5nIHRoZSBsYXRlc3QgdmVyc2lvbi4gQ3VycmVudCB2ZXJzaW9uOiAke2VsZWN0cm9uLmFwcC5nZXRWZXJzaW9uKCl9LiBOZXdlc3QgdmVyc2lvbjogJHtsYXRlc3RSZWxlYXNlLnRhZ19uYW1lfWApXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93VXBkYXRlRGlhbG9nKHJlbGVhc2U6IEdpdGh1YlJlbGVhc2VPYmplY3QpIHtcbiAgICBlbGVjdHJvbi5kaWFsb2cuc2hvd01lc3NhZ2VCb3goXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBlbGVjdHJvbi5hcHAuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgbWVzc2FnZTogJ05ldyByZWxlYXNlIGF2YWlsYWJsZScsXG4gICAgICAgICAgICBkZXRhaWw6IGBJbnN0YWxsZWQgVmVyc2lvbjogJHtlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpfVxcbkxhdGVzdCBWZXJzaW9uOiAke3JlbGVhc2UudGFnX25hbWV9XFxuXFxuJHtyZWxlYXNlLmJvZHl9YC50cmltKCksXG4gICAgICAgICAgICBidXR0b25zOiBbJ0Rvd25sb2FkJywgJ0xhdGVyJ10sXG4gICAgICAgICAgICBkZWZhdWx0SWQ6IDAsXG4gICAgICAgICAgICBjYW5jZWxJZDogMSxcbiAgICAgICAgfSxcbiAgICApXG4gICAgICAgIC50aGVuKCh7cmVzcG9uc2V9KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVjdHJvbi5zaGVsbC5vcGVuRXh0ZXJuYWwocmVsZWFzZS5odG1sX3VybClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpXG4gICAgICAgIH0pXG59XG5cbmNvbnN0IHNob3dEaWFsb2cgPSAoZGV0YWlsOiBzdHJpbmcsIHR5cGU6IHN0cmluZyA9ICdpbmZvJykgPT4ge1xuICAgIGVsZWN0cm9uLmRpYWxvZy5zaG93TWVzc2FnZUJveChcbiAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6IGVsZWN0cm9uLmFwcC5nZXROYW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiAnVXBkYXRlIGNoZWNrZXInLFxuICAgICAgICAgICAgYnV0dG9uczogWydDbG9zZSddLFxuICAgICAgICAgICAgZGVmYXVsdElkOiAwLFxuICAgICAgICAgICAgY2FuY2VsSWQ6IDAsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZGV0YWlsLFxuICAgICAgICB9LFxuICAgIClcbn0iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHhib3hXb3JrZXIge1xuXG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG4gICAgXG4gICAgX2ZyaWVuZHMgPSB7fVxuICAgIF9vbmxpbmVGcmllbmRzID0ge31cblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuXG4gICAgICAgIC8vIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuaW50ZXJ2YWxGcmllbmRzKCkgXG4gICAgICAgIC8vIH0sIDMwICogMTAwMCkgLy8gQXBpIGlzIGxpbWl0ZWQgdG8gMzAgcmVxdWVzdHMgcGVyIDMwMCBzZWNvbmRzLiAoMzAwLzMwID0gMTAgc2VjKVxuICAgICAgICBcbiAgICAgICAgLy8gdGhpcy5pbnRlcnZhbEZyaWVuZHMoKVxuICAgIH1cblxuICAgIGludGVydmFsRnJpZW5kcygpe1xuICAgICAgICAvLyBjb25zb2xlLmxvZygneGJveCB3b3JrZXIgbG9vcCBydW4nKVxuXG4gICAgICAgIHRoaXMudXBkYXRlRnJpZW5kcygpLnRoZW4oKGZyaWVuZHM6YW55KSA9PiB7XG4gICAgICAgICAgICAvLyBHZXQgYWxsIGZyaWVuZHNcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd4Ym94V29ya2VyIC0gVXBkYXRlZCBmcmllbmRzIHN1Y2Nlc3NmdWxseScpXG5cbiAgICAgICAgICAgIC8vIFNlbmQgb3ZlciBvbmxpbmUgZnJpZW5kc1xuICAgICAgICAgICAgY29uc3Qgb25saW5lRnJpZW5kcyA9IFtdXG4gICAgICAgICAgICBmb3IoY29uc3QgZnJpZW5kIGluIGZyaWVuZHMpe1xuICAgICAgICAgICAgICAgIGlmKGZyaWVuZHNbZnJpZW5kXS5wcmVzZW5jZVN0YXRlICE9PSAnT2ZmbGluZScpe1xuICAgICAgICAgICAgICAgICAgICBvbmxpbmVGcmllbmRzLnB1c2goZnJpZW5kc1tmcmllbmRdKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fb25saW5lRnJpZW5kcyA9IG9ubGluZUZyaWVuZHNcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygneGJveFdvcmtlciAtIEVycm9yIHVwZGF0aW5nIGZyaWVuZHM6JywgZXJyb3IpXG4gICAgICAgIH0pXG5cbiAgICB9XG5cbiAgICB1cGRhdGVGcmllbmRzKCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fd2ViQXBpLmdldFByb3ZpZGVyKCdwZW9wbGUnKS5nZXRGcmllbmRzKCkudGhlbigoZnJpZW5kcykgPT4ge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBmcmllbmQgaW4gZnJpZW5kcy5wZW9wbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmllbmRzW2ZyaWVuZHMucGVvcGxlW2ZyaWVuZF0ueHVpZF0gPSBmcmllbmRzLnBlb3BsZVtmcmllbmRdXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9mcmllbmRzKVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbn0iLCJpbXBvcnQgaHR0cHMgZnJvbSBcImh0dHBzXCI7XG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCI7XG5pbXBvcnQgeyBBZGRyZXNzNiB9IGZyb20gXCJpcC1hZGRyZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIHBsYXlSZXN1bHQge1xuICBzZXNzaW9uUGF0aDogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIGV4Y2hhbmdlUmVzdWx0IHtcbiAgZXhjaGFuZ2VSZXNwb25zZTogc3RyaW5nO1xuICBlcnJvckRldGFpbHM6IHtcbiAgICBjb2RlOiBhbnk7XG4gICAgbWVzc2FnZTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB4Q2xvdWRBcGkge1xuICBfYXBwbGljYXRpb247XG5cbiAgX2hvc3Q6IHN0cmluZztcbiAgX3Rva2VuOiBzdHJpbmc7XG4gIF90eXBlOiBcImhvbWVcIiB8IFwiY2xvdWRcIjtcblxuICBfc2Vzc2lvblBhdGg6IHN0cmluZztcblxuICBfZXhjaGFuZ2VDb3VudGVyID0gMDtcbiAgX2V4Y2hhbmdlVXJsID0gXCJcIjtcbiAgX2N1cnJlbnRHYW1lID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhcHBsaWNhdGlvbjogQXBwbGljYXRpb24sXG4gICAgaG9zdDogc3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdHlwZTogXCJob21lXCIgfCBcImNsb3VkXCIgPSBcImhvbWVcIlxuICApIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uO1xuICAgIHRoaXMuX2hvc3QgPSBob3N0O1xuICAgIHRoaXMuX3Rva2VuID0gdG9rZW47XG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXQodXJsOiBzdHJpbmcsIG1ldGhvZCA9IFwiR0VUXCIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9IFwiXCI7XG5cbiAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0OiB0aGlzLl9ob3N0LFxuICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IFwiQmVhcmVyIFwiICsgdGhpcy5fdG9rZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNwb25zZS5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXNwb25zZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgICAgIFwieENsb3VkQXBpXCIsXG4gICAgICAgICAgICAgICAgXCJob3N0OlwiICtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgK1xuICAgICAgICAgICAgICAgICAgXCIgZ2V0KFwiICtcbiAgICAgICAgICAgICAgICAgIHVybCArXG4gICAgICAgICAgICAgICAgICBcIiwgXCIgK1xuICAgICAgICAgICAgICAgICAgbWV0aG9kICtcbiAgICAgICAgICAgICAgICAgIFwiKSByZXNvbHZlOlwiLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IHJldHVybkRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBEYXRhIGlzIG5vdCBKU09OLi5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSAyMDQpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJldHJ5Li5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KHVybCwgbWV0aG9kKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgNzUwKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJldHVybkRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coXG4gICAgICAgICAgICAgICAgXCJ4Q2xvdWRBcGlcIixcbiAgICAgICAgICAgICAgICBcImdldChcIiArIHVybCArIFwiKSByZWplY3Q6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcG9zdCh1cmw6IHN0cmluZywgcG9zdERhdGEgPSB7fSwgaGVhZGVycyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCByZXNwb25zZURhdGEgPSBcIlwiO1xuICAgICAgY29uc3QgbWVyZ2VkSGVhZGVycyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB0aGlzLl90b2tlbixcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyc1xuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIGhvc3Q6IHRoaXMuX2hvc3QsXG4gICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczogbWVyZ2VkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNwb25zZS5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXNwb25zZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgICAgIFwieENsb3VkQXBpXCIsXG4gICAgICAgICAgICAgICAgXCJwb3N0KFwiICsgdXJsICsgXCIpIHJlc29sdmU6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGFcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBsZXQgcmV0dXJuRGF0YSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm5EYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZURhdGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIERhdGEgaXMgbm90IEpTT04uLlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5EYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcbiAgICAgICAgICAgICAgICBcInhDbG91ZEFwaVwiLFxuICAgICAgICAgICAgICAgIFwicG9zdChcIiArIHVybCArIFwiKSByZWplY3Q6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXEud3JpdGUoSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpKTtcblxuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0V2FpdGluZ1RpbWVzKHRpdGxlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjEvd2FpdHRpbWUvXCIgKyB0aXRsZUlkKTtcbiAgfVxuXG4gIGdldFRpdGxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjIvdGl0bGVzXCIpO1xuICB9XG5cbiAgZ2V0UmVjZW50VGl0bGVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldChcIi92Mi90aXRsZXMvbXJ1P21yPTI1XCIpO1xuICB9XG5cbiAgc3RvcFN0cmVhbShzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQsIFwiREVMRVRFXCIpO1xuICB9XG5cbiAgc3RhcnRTdHJlYW0odGFyZ2V0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcbiAgICAgIFwic2V0dGluZ3NcIixcbiAgICAgIGRlZmF1bHRTZXR0aW5nc1xuICAgICk7XG4gICAgY29uc3QgZGV2aWNlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFwcEluZm86IHtcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgY2xpZW50QXBwSWQ6IFwid3d3Lnhib3guY29tXCIsXG4gICAgICAgICAgY2xpZW50QXBwVHlwZTogXCJicm93c2VyXCIsXG4gICAgICAgICAgY2xpZW50QXBwVmVyc2lvbjogXCIyMS4xLjk4XCIsXG4gICAgICAgICAgY2xpZW50U2RrVmVyc2lvbjogXCI4LjUuM1wiLFxuICAgICAgICAgIGh0dHBFbnZpcm9ubWVudDogXCJwcm9kXCIsXG4gICAgICAgICAgc2RrSW5zdGFsbElkOiBcIlwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRldjoge1xuICAgICAgICBodzoge1xuICAgICAgICAgIG1ha2U6IFwiTWljcm9zb2Z0XCIsXG4gICAgICAgICAgbW9kZWw6IFwiU3VyZmFjZSBQcm9cIixcbiAgICAgICAgICBzZGt0eXBlOiBcIndlYlwiLFxuICAgICAgICB9LFxuICAgICAgICBvczoge1xuICAgICAgICAgIG5hbWU6IHNldHRpbmdzLnJlc29sdXRpb24gPT0gMTA4MCA/IFwid2luZG93c1wiIDogXCJhbmRyb2lkXCIsXG4gICAgICAgICAgdmVyOiBcIjIyNjMxLjI3MTVcIixcbiAgICAgICAgICBwbGF0Zm9ybTogXCJkZXNrdG9wXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGRpc3BsYXlJbmZvOiB7XG4gICAgICAgICAgZGltZW5zaW9uczoge1xuICAgICAgICAgICAgd2lkdGhJblBpeGVsczogMTkyMCxcbiAgICAgICAgICAgIGhlaWdodEluUGl4ZWxzOiAxMDgwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGl4ZWxEZW5zaXR5OiB7XG4gICAgICAgICAgICBkcGlYOiAyLFxuICAgICAgICAgICAgZHBpWTogMixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgdGl0bGVJZDogdGhpcy5fdHlwZSA9PT0gXCJjbG91ZFwiID8gdGFyZ2V0IDogXCJcIixcbiAgICAgIHN5c3RlbVVwZGF0ZUdyb3VwOiBcIlwiLFxuICAgICAgY2xpZW50U2Vzc2lvbklkOiBcIlwiLFxuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgbmFub1ZlcnNpb246IFwiVjM7V2VicnRjVHJhbnNwb3J0LmRsbFwiLFxuICAgICAgICBlbmFibGVUZXh0VG9TcGVlY2g6IGZhbHNlLFxuICAgICAgICBoaWdoQ29udHJhc3Q6IDAsXG4gICAgICAgIGxvY2FsZTogc2V0dGluZ3MucHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UgPyBzZXR0aW5ncy5wcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSA6ICdlbi1VUycsXG4gICAgICAgIHVzZUljZUNvbm5lY3Rpb246IGZhbHNlLFxuICAgICAgICB0aW1lem9uZU9mZnNldE1pbnV0ZXM6IDEyMCxcbiAgICAgICAgc2RrVHlwZTogXCJ3ZWJcIixcbiAgICAgICAgLy8gRm9yIHhDbG91ZCBzdHJlYW1pbmdcbiAgICAgICAgb3NOYW1lOiBzZXR0aW5ncy5yZXNvbHV0aW9uID09IDEwODAgPyBcIndpbmRvd3NcIiA6IFwiYW5kcm9pZFwiLFxuICAgICAgfSxcbiAgICAgIHNlcnZlcklkOiB0aGlzLl90eXBlID09PSBcImhvbWVcIiA/IHRhcmdldCA6IFwiXCIsXG4gICAgICBmYWxsYmFja1JlZ2lvbk5hbWVzOiBbXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9zdChcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9wbGF5XCIsIHBvc3REYXRhLCB7XG4gICAgICBcIlgtTVMtRGV2aWNlLUluZm9cIjogZGV2aWNlSW5mbyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0cmVhbVN0YXRlKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc3RhdGVcIik7XG4gIH1cblxuICBzZW5kU2RwKHNlc3Npb25JZDogc3RyaW5nLCBzZHA6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZVR5cGU6IFwib2ZmZXJcIixcbiAgICAgICAgc2RwOiBzZHAsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjaGF0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgYnl0ZXNQZXJTYW1wbGU6IDIsXG4gICAgICAgICAgICBleHBlY3RlZENsaXBEdXJhdGlvbk1zOiAyMCxcbiAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICBjb2RlYzogXCJvcHVzXCIsXG4gICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJ3ZWJtXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVtQ2hhbm5lbHM6IDEsXG4gICAgICAgICAgICBzYW1wbGVGcmVxdWVuY3lIejogMjQwMDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGF0OiB7XG4gICAgICAgICAgICBtaW5WZXJzaW9uOiAxLFxuICAgICAgICAgICAgbWF4VmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRyb2w6IHtcbiAgICAgICAgICAgIG1pblZlcnNpb246IDEsXG4gICAgICAgICAgICBtYXhWZXJzaW9uOiAzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgIG1pblZlcnNpb246IDEsXG4gICAgICAgICAgICBtYXhWZXJzaW9uOiA4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgbWluVmVyc2lvbjogMSxcbiAgICAgICAgICAgIG1heFZlcnNpb246IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucG9zdChcbiAgICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9zZHBcIixcbiAgICAgICAgcG9zdERhdGFcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIpXG4gICAgICAgICAgICAudGhlbigoc2RwUmVzdWx0OiBleGNoYW5nZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGNoYW5nZVNkcCA9IEpTT04ucGFyc2Uoc2RwUmVzdWx0LmV4Y2hhbmdlUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUoZXhjaGFuZ2VTZHApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kQ2hhdFNkcChzZXNzaW9uSWQ6IHN0cmluZywgc2RwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcG9zdERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2VUeXBlOiBcIm9mZmVyXCIsXG4gICAgICAgIHNkcDogc2RwLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgaXNNZWRpYVN0cmVhbXNDaGF0UmVuZWdvdGlhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucG9zdChcbiAgICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9zZHBcIixcbiAgICAgICAgcG9zdERhdGFcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIpXG4gICAgICAgICAgICAudGhlbigoc2RwUmVzdWx0OiBleGNoYW5nZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGNoYW5nZVNkcCA9IEpTT04ucGFyc2Uoc2RwUmVzdWx0LmV4Y2hhbmdlUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUoZXhjaGFuZ2VTZHApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjaGVja0ljZShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNldHRpbmdzOiBhbnkgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFxuICAgICAgXCJzZXR0aW5nc1wiLFxuICAgICAgZGVmYXVsdFNldHRpbmdzXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5nZXQoXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9pY2VcIikudGhlbihcbiAgICAgICAgKGljZVJlc3VsdDogZXhjaGFuZ2VSZXN1bHQgfCBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoaWNlUmVzdWx0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0ljZShzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBfaWNlUmVzdWx0ID0gaWNlUmVzdWx0IGFzIGV4Y2hhbmdlUmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgZXhjaGFuZ2VJY2UgPSBKU09OLnBhcnNlKF9pY2VSZXN1bHQuZXhjaGFuZ2VSZXNwb25zZSk7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZENhbmRpZGF0ZXMgPSBbXTtcblxuICAgICAgICAgICAgLy8gRmluZCBUZXJlZG8gQWRkcmVzcyBhbmQgZXh0cmFjdCByZW1vdGUgaXBcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIGluIGV4Y2hhbmdlSWNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUFkZHJlc3MgPVxuICAgICAgICAgICAgICAgIGV4Y2hhbmdlSWNlW2NhbmRpZGF0ZV0uY2FuZGlkYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUFkZHJlc3MubGVuZ3RoID4gNCAmJlxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUFkZHJlc3NbNF0uc3Vic3RyKDAsIDQpID09PSBcIjIwMDFcIlxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3M2KGNhbmRpZGF0ZUFkZHJlc3NbNF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlcmVkbyA9IGFkZHJlc3MuaW5zcGVjdFRlcmVkbygpO1xuXG4gICAgICAgICAgICAgICAgY29tcHV0ZWRDYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlOlxuICAgICAgICAgICAgICAgICAgICBcImE9Y2FuZGlkYXRlOjEwIDEgVURQIDEgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0ZXJlZG8uY2xpZW50NCArXG4gICAgICAgICAgICAgICAgICAgIFwiIDkwMDIgdHlwIGhvc3QgXCIsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgICAgICAgICAgIHNkcE1MaW5lSW5kZXg6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgc2RwTWlkOiBcIjBcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb21wdXRlZENhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBjYW5kaWRhdGU6XG4gICAgICAgICAgICAgICAgICAgIFwiYT1jYW5kaWRhdGU6MTEgMSBVRFAgMSBcIiArXG4gICAgICAgICAgICAgICAgICAgIHRlcmVkby5jbGllbnQ0ICtcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0ZXJlZG8udWRwUG9ydCArXG4gICAgICAgICAgICAgICAgICAgIFwiIHR5cCBob3N0IFwiLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZVR5cGU6IFwiaWNlQ2FuZGlkYXRlXCIsXG4gICAgICAgICAgICAgICAgICBzZHBNTGluZUluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgIHNkcE1pZDogXCIwXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb21wdXRlZENhbmRpZGF0ZXMucHVzaChleGNoYW5nZUljZVtjYW5kaWRhdGVdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgIC9hPWNhbmRpZGF0ZTooPzxmb3VuZGF0aW9uPlxcZCspICg/PGNvbXBvbmVudD5cXGQrKSBVRFAgKD88cHJpb3JpdHk+XFxkKykgKD88aXA+W15cXHNdKykgKD88cG9ydD5cXGQrKSAoPzx0aGVfcmVzdD4uKikvXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBsc3QgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgY29tcHV0ZWRDYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLmNhbmRpZGF0ZSA9PT0gXCJhPWVuZC1vZi1jYW5kaWRhdGVzXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IHBhdHRlcm4uZXhlYyhpdGVtLmNhbmRpZGF0ZSkuZ3JvdXBzO1xuICAgICAgICAgICAgICBsc3QucHVzaChncm91cHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQZXJmZXJJUFY2XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaXB2Nikge1xuICAgICAgICAgICAgICBsc3Quc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0SXAgPSBhLmlwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZElwID0gYi5pcDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAhZmlyc3RJcC5pbmNsdWRlcyhcIjpcIikgJiYgc2Vjb25kSXAuaW5jbHVkZXMoXCI6XCIpXG4gICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5kaWRhdGVzID0gW107XG4gICAgICAgICAgICBsZXQgZm91bmRhdGlvbiA9IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmRpZGF0ZSA9IChjYW5kaWRhdGUpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGU6IGNhbmRpZGF0ZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgICAgICAgICBzZHBNTGluZUluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICBzZHBNaWQ6IFwiMFwiLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbHN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5mb3VuZGF0aW9uID0gZm91bmRhdGlvbjtcbiAgICAgICAgICAgICAgaXRlbS5wcmlvcml0eSA9IGZvdW5kYXRpb24gPT09IDEgPyAyMTMwNzA2NDMxIDogMTtcblxuICAgICAgICAgICAgICBuZXdDYW5kaWRhdGVzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3Q2FuZGlkYXRlKFxuICAgICAgICAgICAgICAgICAgYGE9Y2FuZGlkYXRlOiR7aXRlbS5mb3VuZGF0aW9ufSAxIFVEUCAke2l0ZW0ucHJpb3JpdHl9ICR7aXRlbS5pcH0gJHtpdGVtLnBvcnR9ICR7aXRlbS50aGVfcmVzdH1gXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICArK2ZvdW5kYXRpb247XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbmV3Q2FuZGlkYXRlcy5wdXNoKG5ld0NhbmRpZGF0ZShcImE9ZW5kLW9mLWNhbmRpZGF0ZXNcIikpO1xuXG4gICAgICAgICAgICByZXNvbHZlKG5ld0NhbmRpZGF0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbmRJY2Uoc2Vzc2lvbklkOiBzdHJpbmcsIGljZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgY2FuZGlkYXRlOiBpY2UsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBvc3QoXG4gICAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvaWNlXCIsXG4gICAgICAgIHBvc3REYXRhXG4gICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJY2Uoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIC50aGVuKGNhbmRpZGF0ZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNhbmRpZGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbmRNU0FMQXV0aChzZXNzaW9uSWQ6IHN0cmluZywgdXNlclRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wb3N0KFxuICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9jb25uZWN0XCIsXG4gICAgICB7XG4gICAgICAgIHVzZXJUb2tlbjogdXNlclRva2VuLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZW5kS2VlcGFsaXZlKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zdChcbiAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIva2VlcGFsaXZlXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0QWN0aXZlU2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL2FjdGl2ZVwiKTtcbiAgfVxufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuXG5jbGFzcyBIdHRwIHtcbiAgZ2V0KGhvc3Q6IHN0cmluZywgcGF0aDogc3RyaW5nLCBoZWFkZXJzOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaG9zdEhlYWRlcnMgPSB7XG4gICAgICAgIC8vICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICB9O1xuXG4gICAgICBheGlvc1xuICAgICAgICAuZ2V0KGBodHRwczovLyR7aG9zdH0ke3BhdGh9YCwge1xuICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwIHx8IHJlcy5zdGF0dXMgPT09IDIwNCkge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuY29kZSxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgICAgIGJvZHk6IHJlcy5kYXRhLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJyArIGhvc3QgKyBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHBvc3QoaG9zdDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGhlYWRlcnM6IGFueSwgZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhvc3RIZWFkZXJzID0ge1xuICAgICAgICAvLyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGBodHRwczovLyR7aG9zdH0ke3BhdGh9YCwgZGF0YSwge1xuICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwIHx8IHJlcy5zdGF0dXMgPT09IDIwMikge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuY29kZSxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgICAgIGJvZHk6IHJlcy5kYXRhLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJyArIGhvc3QgKyBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIdHRwOyIsImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IElwY0NvbnNvbGVzIGZyb20gJy4vaXBjL2NvbnNvbGVzJ1xuaW1wb3J0IElwY1N0cmVhbWluZyBmcm9tICcuL2lwYy9zdHJlYW1pbmcnXG5pbXBvcnQgSXBjeENsb3VkIGZyb20gJy4vaXBjL3hjbG91ZCdcbmltcG9ydCBJcGNBcHAgZnJvbSAnLi9pcGMvYXBwJ1xuaW1wb3J0IElwY1NldHRpbmdzIGZyb20gJy4vaXBjL3NldHRpbmdzJ1xuXG5pbXBvcnQgeyBpcGNNYWluIH0gZnJvbSAnZWxlY3Ryb24nXG5cbmludGVyZmFjZSBJcGNDaGFubmVscyB7XG4gICAgc3RyZWFtaW5nOiBJcGNTdHJlYW1pbmc7XG4gICAgY29uc29sZXM6IElwY0NvbnNvbGVzO1xuICAgIGFwcDogSXBjQXBwO1xuICAgIHhDbG91ZDogSXBjeENsb3VkO1xuICAgIHNldHRpbmdzOiBJcGNTZXR0aW5ncztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgX2NoYW5uZWxzOklwY0NoYW5uZWxzXG5cbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbil7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cblxuICAgICAgICB0aGlzLl9jaGFubmVscyA9IHtcbiAgICAgICAgICAgIHN0cmVhbWluZzogbmV3IElwY1N0cmVhbWluZyh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgICAgICBjb25zb2xlczogbmV3IElwY0NvbnNvbGVzKHRoaXMuX2FwcGxpY2F0aW9uKSxcbiAgICAgICAgICAgIGFwcDogbmV3IElwY0FwcCh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgICAgICB4Q2xvdWQ6IG5ldyBJcGN4Q2xvdWQodGhpcy5fYXBwbGljYXRpb24pLFxuICAgICAgICAgICAgc2V0dGluZ3M6IG5ldyBJcGNTZXR0aW5ncyh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgIH1cblxuICAgICAgICBmb3IoY29uc3QgY2hhbm5lbCBpbiB0aGlzLl9jaGFubmVscyl7XG4gICAgICAgICAgICBpcGNNYWluLm9uKGNoYW5uZWwsIChldmVudCwgYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxzW2NoYW5uZWxdLm9uRXZlbnQoY2hhbm5lbCwgZXZlbnQsIGFyZ3MpIFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9XG5cbiAgICBzdGFydFVwKCl7XG4gICAgICAgIGZvcihjb25zdCBjaGFubmVsIGluIHRoaXMuX2NoYW5uZWxzKXtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSXBjJywgJ1N0YXJ0aW5nIElQQyBjaGFubmVsOiAnICsgY2hhbm5lbClcblxuICAgICAgICAgICAgaWYodGhpcy5fY2hhbm5lbHNbY2hhbm5lbF0uc3RhcnRVcClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5zdGFydFVwKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVXNlckxvYWRlZCgpe1xuICAgICAgICBmb3IoY29uc3QgY2hhbm5lbCBpbiB0aGlzLl9jaGFubmVscyl7XG4gICAgICAgICAgICBpZih0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5vblVzZXJMb2FkZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSXBjJywgJ0xvYWRpbmcgc3RhcnR1cCBkYXRhIGZvciBJUEMgY2hhbm5lbDogJyArIGNoYW5uZWwpXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbHNbY2hhbm5lbF0ub25Vc2VyTG9hZGVkKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0FwcCBleHRlbmRzIElwY0Jhc2Uge1xuICAvLyBfc3RyZWFtaW5nU2Vzc2lvbnM6YW55ID0ge31cblxuICBsb2FkQ2FjaGVkVXNlcigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXJTdGF0ZSgpO1xuXG4gICAgICByZXNvbHZlKHVzZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXNlclN0YXRlKCkge1xuICAgIGNvbnN0IGdhbWVydGFnID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcInVzZXIuZ2FtZXJ0YWdcIik7XG4gICAgY29uc3QgZ2FtZXJwaWMgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFwidXNlci5nYW1lcnBpY1wiKTtcbiAgICBjb25zdCBnYW1lcnNjb3JlID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcInVzZXIuZ2FtZXJzY29yZVwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaWduZWRJbjogZ2FtZXJ0YWcgPyB0cnVlIDogZmFsc2UsXG4gICAgICB0eXBlOiBcInVzZXJcIixcbiAgICAgIGdhbWVydGFnOiBnYW1lcnRhZyA/IGdhbWVydGFnIDogXCJcIixcbiAgICAgIGdhbWVycGljOiBnYW1lcnBpYyA/IGdhbWVycGljIDogXCJcIixcbiAgICAgIGdhbWVyc2NvcmU6IGdhbWVyc2NvcmUgPyBnYW1lcnNjb3JlIDogXCJcIixcbiAgICAgIGxldmVsOiB0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX2FwcExldmVsLFxuICAgIH07XG4gIH1cblxuICBnZXRBdXRoU3RhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGluZzogdGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLl9pc0F1dGhlbnRpY2F0aW5nLFxuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5faXNBdXRoZW50aWNhdGVkLFxuICAgICAgICB1c2VyOiB0aGlzLmdldFVzZXJTdGF0ZSgpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBcHBMZXZlbCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX2FwcExldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNoZWNrQXV0aGVudGljYXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5jaGVja0F1dGhlbnRpY2F0aW9uKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uc3RhcnRBdXRoZmxvdygpO1xuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHF1aXQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnF1aXQoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSk7XG4gIH1cblxuICByZXN0YXJ0KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5yZXN0YXJ0KCk7XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJEYXRhKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uXG4gICAgICAgIC5jbGVhclN0b3JhZ2VEYXRhKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5fdG9rZW5TdG9yZS5jbGVhcigpO1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5kZWxldGUoXCJ1c2VyXCIpO1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5kZWxldGUoXCJhdXRoXCIpO1xuXG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgXCJhdXRoZW50aWNhdGlvblwiLFxuICAgICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICAgIFwiW3N0YXJ0SXBjRXZlbnRzKCldIFJlY2VpdmVkIHJlc3RhcnQgcmVxdWVzdC4gUmVzdGFydGluZyBhcHBsaWNhdGlvbi4uLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5yZXN0YXJ0KCk7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcbiAgICAgICAgICAgIFwiYXV0aGVudGljYXRpb25cIixcbiAgICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgICBcIltzdGFydElwY0V2ZW50cygpXSBFcnJvcjogRmFpbGVkIHRvIGNsZWFyIGxvY2FsIHN0b3JhZ2UhXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0T25saW5lRnJpZW5kcygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9hcHBsaWNhdGlvbi5feGJveFdvcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFdvcmtlciBpcyBub3QgbG9hZGVkIHlldC4uXG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9hcHBsaWNhdGlvbi5feGJveFdvcmtlci5fb25saW5lRnJpZW5kcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblVpU2hvd24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHt9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzRnVsbHNjcmVlbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGlzRnVsbFNjcmVlbiA9IHRoaXMuX2FwcGxpY2F0aW9uLl9tYWluV2luZG93LmlzRnVsbFNjcmVlbigpO1xuICAgICAgcmVzb2x2ZShpc0Z1bGxTY3JlZW4pXG4gICAgfSk7IFxuICB9XG5cbiAgdG9nZ2xlRnVsbHNjcmVlbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGlzRnVsbFNjcmVlbiA9IHRoaXMuX2FwcGxpY2F0aW9uLl9tYWluV2luZG93LmlzRnVsbFNjcmVlbigpO1xuICAgICAgdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cuc2V0RnVsbFNjcmVlbighaXNGdWxsU2NyZWVuKTtcbiAgICAgIHJlc29sdmUoe30pXG4gICAgfSk7XG4gIH1cblxuICBlbnRlckZ1bGxzY3JlZW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy5zZXRGdWxsU2NyZWVuKHRydWUpO1xuICAgICAgcmVzb2x2ZSh7fSlcbiAgICB9KTtcbiAgfVxuXG4gIGV4aXRGdWxsc2NyZWVuKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cuc2V0RnVsbFNjcmVlbihmYWxzZSk7XG4gICAgICByZXNvbHZlKHt9KVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5cbmludGVyZmFjZSBFdmVudEFyZ3Mge1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIGlkOiBudW1iZXI7XG4gICAgZGF0YTogYW55O1xuICAgIGVycm9yPzogYW55O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGNCYXNlIHtcbiAgICBfYXBwbGljYXRpb246QXBwbGljYXRpb25cblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgIH1cblxuICAgIG9uRXZlbnQoY2hhbm5lbCwgZXZlbnQsIGFyZ3M6RXZlbnRBcmdzKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdJcGM6UmVjdicsICdSZWNlaXZlZCBldmVudDogWycrY2hhbm5lbCsnXScsIGFyZ3MpXG4gICAgICAgIGlmKHR5cGVvZiB0aGlzW2FyZ3MuYWN0aW9uXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSAoT2JqZWN0LmtleXMoYXJncy5kYXRhKS5sZW5ndGggPiAwKSA/IHRoaXNbYXJncy5hY3Rpb25dKGFyZ3MuZGF0YSkgOiB0aGlzW2FyZ3MuYWN0aW9uXSgpXG4gICAgICAgICAgICByZXNwb25zZS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoY2hhbm5lbCwge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFyZ3MuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1I6IElQQyBjb21tdW5pY2F0aW9uIGVycm9yIGZyb20gYmFja2VuZDonLCBlcnJvcilcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoY2hhbm5lbCwge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFyZ3MuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdJcGMnLCAnRVJST1I6IEFjdGlvbiB3YXMgbm90IGZvdW5kOicsIGFyZ3MuYWN0aW9uLCAnb24gY2hhbm5lbCcsIGNoYW5uZWwpXG4gICAgICAgICAgICB0aGlzLnNlbmQoY2hhbm5lbCwge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgaWQ6IGFyZ3MuaWQsXG4gICAgICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdJUEMgYWN0aW9uIGZhaWx1cmUuIEFjdGlvbiB3YXMgbm90IGZvdW5kOiAnK2NoYW5uZWwrJzonK2FyZ3MuYWN0aW9uLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbmQoY2hhbm5lbCwgYXJnczpFdmVudEFyZ3Mpe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0lwYzpTZW5kJywgJ1NlbmRpbmcgZXZlbnQ6IFsnK2NoYW5uZWwrJ10nLCBKU09OLnN0cmluZ2lmeShhcmdzKSlcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cud2ViQ29udGVudHMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICBhY3Rpb246IGFyZ3MuYWN0aW9uLFxuICAgICAgICAgICAgaWQ6IGFyZ3MuaWQsXG4gICAgICAgICAgICBkYXRhOiBhcmdzLmRhdGEsXG4gICAgICAgICAgICBlcnJvcjogYXJncy5lcnJvcixcbiAgICAgICAgfSlcbiAgICB9XG59IiwiaW1wb3J0IElwY0Jhc2UgZnJvbSAnLi9iYXNlJ1xuaW1wb3J0IEh0dHAgZnJvbSAnLi4vaGVscGVycy94aHR0cCdcblxuaW1wb3J0IFVVSUQgZnJvbSAndXVpZC0xMzQ1J1xuY29uc3QgbmV4dFVVSUQgPSAoKSA9PiBVVUlELnYzKHsgbmFtZXNwYWNlOiAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JywgbmFtZTogRGF0ZS5ub3coKS50b1N0cmluZygpIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0NvbnNvbGVzIGV4dGVuZHMgSXBjQmFzZSB7XG4gICAgLy8gX3N0cmVhbWluZ1Nlc3Npb25zOmFueSA9IHt9XG5cbiAgICBfY29uc29sZXMgPSBbXVxuICAgIF9jb25zb2xlc0xhc3RVcGRhdGUgPSAwXG5cbiAgICBzZW5kQ29tbWFuZCAoXG4gICAgICAgIGNvbnNvbGVJZDogc3RyaW5nLFxuICAgICAgICBjb21tYW5kVHlwZTogc3RyaW5nLFxuICAgICAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgICAgIHBhcmFtcz86IGFueSxcbiAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tzZW5kQ29tbWFuZF06JywgY29uc29sZUlkLCBjb21tYW5kVHlwZSwgY29tbWFuZCk7XG4gICAgICAgIGNvbnN0IGh0dHAgPSBuZXcgSHR0cCgpO1xuICAgIFxuICAgICAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJhbXMgPSBbXTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBjb25zdCBwb3N0UGFyYW1zID0ge1xuICAgICAgICAgIGRlc3RpbmF0aW9uOiAnWGJveCcsXG4gICAgICAgICAgdHlwZTogY29tbWFuZFR5cGUsXG4gICAgICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgICAgICBzZXNzaW9uSWQ6IG5leHRVVUlEKCksXG4gICAgICAgICAgc291cmNlSWQ6ICdjb20ubWljcm9zb2Z0LnNtYXJ0Z2xhc3MnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHBhcmFtcyxcbiAgICAgICAgICBsaW5rZWRYYm94SWQ6IGNvbnNvbGVJZCxcbiAgICAgICAgfTtcbiAgICBcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBodHRwXG4gICAgICAgICAgICAucG9zdChcbiAgICAgICAgICAgICAgJ3hjY3MueGJveGxpdmUuY29tJyxcbiAgICAgICAgICAgICAgJy9jb21tYW5kcycsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOlxuICAgICAgICAgICAgICAgICAgJ1hCTDMuMCB4PScgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ud2ViVG9rZW4uZGF0YS5EaXNwbGF5Q2xhaW1zLnh1aVswXS51aHMgK1xuICAgICAgICAgICAgICAgICAgJzsnICtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuVG9rZW4sXG4gICAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6ICdlbi1VUycsXG4gICAgICAgICAgICAgICAgc2tpbGxwbGF0Zm9ybTogJ1JlbW90ZU1hbmFnZW1lbnQnLFxuICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzQnLFxuICAgICAgICAgICAgICAgICd4LXhibC1jbGllbnQtbmFtZSc6ICdYYm94QXBwJyxcbiAgICAgICAgICAgICAgICAneC14YmwtY2xpZW50LXR5cGUnOiAnVVdBJyxcbiAgICAgICAgICAgICAgICAneC14YmwtY2xpZW50LXZlcnNpb24nOiAnMzkuMzkuMjIwMDEuMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHBvc3RQYXJhbXMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzZW5kQ29tbWFuZF0gL2NvbW1hbmRzLyByZXNwb25zZTonLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5yZXN1bHQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0KCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLl9jb25zb2xlc0xhc3RVcGRhdGUgPCBEYXRlLm5vdygpIC0gNjAqMTAwMCl7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fYXBwbGljYXRpb24uX2V2ZW50cy5fd2ViQXBpLmdldFByb3ZpZGVyKCdzbWFydGdsYXNzJykuZ2V0Q29uc29sZXNMaXN0KCkudGhlbigoY29uc29sZXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fd2ViQXBpLmdldFByb3ZpZGVyKCdzbWFydGdsYXNzJykuZ2V0Q29uc29sZXNMaXN0KCkudGhlbihjb25zb2xlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnNvbGVzID0gY29uc29sZXMucmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnNvbGVzTGFzdFVwZGF0ZSA9IERhdGUubm93KClcblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuX2NvbnNvbGVzKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jb25zb2xlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwb3dlck9uKGNvbnNvbGVJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb25zb2xlSWQ6JywgY29uc29sZUlkKVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZW5kQ29tbWFuZChjb25zb2xlSWQsICdQb3dlcicsICdXYWtlVXAnKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHBvd2VyT2ZmKGNvbnNvbGVJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbmRDb21tYW5kKGNvbnNvbGVJZCwgJ1Bvd2VyJywgJ1R1cm5PZmYnKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tICcuL2Jhc2UnXG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9yZW5kZXJlci9jb250ZXh0L3VzZXJDb250ZXh0LmRlZmF1bHRzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGNTZXR0aW5ncyBleHRlbmRzIElwY0Jhc2Uge1xuXG4gICAgc2V0U2V0dGluZ3MoYXJnczoodHlwZW9mIGRlZmF1bHRTZXR0aW5ncykpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NldHRpbmdzID0gey4uLmRlZmF1bHRTZXR0aW5ncywgLi4uYXJnc31cbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5zZXQoJ3NldHRpbmdzJywgbmV3U2V0dGluZ3MpXG4gICAgICAgICAgICByZXNvbHZlKG5ld1NldHRpbmdzKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFNldHRpbmdzKCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx0eXBlb2YgZGVmYXVsdFNldHRpbmdzPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KCdzZXR0aW5ncycsIGRlZmF1bHRTZXR0aW5ncykgYXMgb2JqZWN0XG4gICAgICAgICAgICByZXNvbHZlKHsuLi5kZWZhdWx0U2V0dGluZ3MsIC4uLnNldHRpbmdzfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZXNldFNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gey4uLmRlZmF1bHRTZXR0aW5nc31cbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5kZWxldGUoJ3NldHRpbmdzJylcblxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLnNldCgnc2V0dGluZ3MnLCBzZXR0aW5ncylcbiAgICAgICAgICAgIHJlc29sdmUoc2V0dGluZ3MpXG4gICAgICAgIH0pXG4gICAgfVxufSIsImltcG9ydCBJcGNCYXNlIGZyb20gJy4vYmFzZSdcbmltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi9hcHBsaWNhdGlvbidcbmltcG9ydCBTdHJlYW1NYW5hZ2VyIGZyb20gJy4uL2hlbHBlcnMvc3RyZWFtbWFuYWdlcidcblxuaW50ZXJmYWNlIHN0YXJ0U3RyZWFtQXJncyB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHRhcmdldDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2Ugc2VuZFNkcEFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIHNkcDogYW55O1xufVxuXG5pbnRlcmZhY2Ugc2VuZEljZUFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIGljZTogYW55O1xufVxuaW50ZXJmYWNlIHNlbmRLZWVwYWxpdmVBcmdzIHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBzdG9wU3RyZWFtQXJncyB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgZ2V0UGxheWVyU3RhdGVBcmdzIHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjU3RyZWFtaW5nIGV4dGVuZHMgSXBjQmFzZSB7XG5cbiAgICBfc3RyZWFtTWFuYWdlcjpTdHJlYW1NYW5hZ2VyXG5cbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbil7XG4gICAgICAgIHN1cGVyKGFwcGxpY2F0aW9uKVxuXG4gICAgICAgIHRoaXMuX3N0cmVhbU1hbmFnZXIgPSBuZXcgU3RyZWFtTWFuYWdlcihhcHBsaWNhdGlvbilcbiAgICB9XG5cbiAgICBzdGFydFN0cmVhbShhcmdzOnN0YXJ0U3RyZWFtQXJncyl7XG5cbiAgICAgICAgaWYoYXJncy50eXBlID09PSAnaG9tZScpe1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX2lwYy5fY2hhbm5lbHMuY29uc29sZXMuX2NvbnNvbGVzTGFzdFVwZGF0ZSA9IDBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9pcGMuX2NoYW5uZWxzLnhDbG91ZC5fcmVjZW50VGl0bGVzTGFzdFVwZGF0ZSA9IDBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLnN0YXJ0U3RyZWFtKGFyZ3MudHlwZSwgYXJncy50YXJnZXQpXG4gICAgfVxuXG4gICAgc3RvcFN0cmVhbShhcmdzOnN0b3BTdHJlYW1BcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc3RvcFN0cmVhbShhcmdzLnNlc3Npb25JZClcbiAgICB9XG5cbiAgICBzZW5kU2RwKGFyZ3M6c2VuZFNkcEFyZ3Mpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5zZW5kU2RwKGFyZ3Muc2Vzc2lvbklkLCBhcmdzLnNkcClcbiAgICB9XG5cbiAgICBzZW5kQ2hhdFNkcChhcmdzOnNlbmRTZHBBcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc2VuZENoYXRTZHAoYXJncy5zZXNzaW9uSWQsIGFyZ3Muc2RwKVxuICAgIH1cblxuICAgIHNlbmRJY2UoYXJnczpzZW5kSWNlQXJncyl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLnNlbmRJY2UoYXJncy5zZXNzaW9uSWQsIGFyZ3MuaWNlKVxuICAgIH1cblxuICAgIHNlbmRLZWVwYWxpdmUoYXJnczpzZW5kS2VlcGFsaXZlQXJncyl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLnNlbmRLZWVwYWxpdmUoYXJncy5zZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgZ2V0UGxheWVyU3RhdGUoYXJnczpnZXRQbGF5ZXJTdGF0ZUFyZ3Mpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5fc3RyZWFtTWFuYWdlci5nZXRTZXNzaW9uKGFyZ3Muc2Vzc2lvbklkKSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhY3RpdmVTZXNzaW9ucygpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5nZXRBY3RpdmVTZXNzaW9ucygpXG4gICAgfVxuXG59IiwiaW1wb3J0IElwY0Jhc2UgZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gXCIuLi9hcHBsaWNhdGlvblwiO1xuaW1wb3J0IFRpdGxlTWFuYWdlciBmcm9tIFwiLi4vaGVscGVycy90aXRsZW1hbmFnZXJcIjtcbmltcG9ydCBBY2hpdmVtZW50TWFuYWdlciBmcm9tIFwiLi4vaGVscGVycy9hY2hpdmVtZW50bWFuYWdlclwiO1xuaW1wb3J0IHhDbG91ZEFwaSBmcm9tIFwiLi4vaGVscGVycy94Y2xvdWRhcGlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjeENsb3VkIGV4dGVuZHMgSXBjQmFzZSB7XG4gIF90aXRsZU1hbmFnZXI6IFRpdGxlTWFuYWdlcjtcbiAgX2FjaGl2ZW1lbnRNYW5hZ2VyOiBBY2hpdmVtZW50TWFuYWdlcjtcblxuICBfdGl0bGVzQXJlTG9hZGVkID0gZmFsc2U7XG5cbiAgX3RpdGxlcyA9IFtdO1xuICBfdGl0bGVzTGFzdFVwZGF0ZSA9IDA7XG5cbiAgX3JlY2VudFRpdGxlcyA9IFtdO1xuICBfcmVjZW50VGl0bGVzTGFzdFVwZGF0ZSA9IDA7XG5cbiAgX25ld1RpdGxlcyA9IFtdO1xuICBfbmV3VGl0bGVzTGFzdFVwZGF0ZSA9IDA7XG5cbiAgY29uc3RydWN0b3IoYXBwbGljYXRpb246IEFwcGxpY2F0aW9uKSB7XG4gICAgc3VwZXIoYXBwbGljYXRpb24pO1xuXG4gICAgdGhpcy5fdGl0bGVNYW5hZ2VyID0gbmV3IFRpdGxlTWFuYWdlcihhcHBsaWNhdGlvbik7XG4gICAgdGhpcy5fYWNoaXZlbWVudE1hbmFnZXIgPSBuZXcgQWNoaXZlbWVudE1hbmFnZXIoYXBwbGljYXRpb24pO1xuICB9XG5cbiAgc3RhcnRVcCgpIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coXCJJcGM6eENsb3VkXCIsIFwiU3RhcnRpbmcgeENsb3VkIElQQyBDaGFubmVsLi4uXCIpO1xuICB9XG5cbiAgZ2V0UmVjZW50VGl0bGVzKCkge1xuICAgIGNvbnN0IHN0cmVhbWluZ1Rva2VucyA9IHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2VucztcbiAgICBjb25zdCBfeENsb3VkQXBpID0gbmV3IHhDbG91ZEFwaShcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLFxuICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmdldERlZmF1bHRSZWdpb24oKS5iYXNlVXJpLnN1YnN0cmluZyg4KSxcbiAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5kYXRhLmdzVG9rZW4sXG4gICAgICBcImNsb3VkXCJcbiAgICApO1xuICAgIHJldHVybiBfeENsb3VkQXBpLmdldFJlY2VudFRpdGxlcygpO1xuICB9XG5cbiAgZ2V0WGhvbWVUb2tlbigpIHtcbiAgICBjb25zb2xlLmxvZyhcImdldFhob21lVG9rZW5cIik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2VucyAmJlxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueEhvbWVUb2tlblxuICAgICAgKSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhIb21lVG9rZW4uZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0WGhvbWVUb2tlbkRlZmF1bHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueEhvbWVUb2tlbi5zZXREZWZhdWx0UmVnaW9uKG5hbWUpO1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFhjbG91ZFRva2VuKCkge1xuICAgIGNvbnNvbGUubG9nKFwiZ2V0WGNsb3VkVG9rZW5cIik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2VucyAmJlxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW5cbiAgICAgICkge1xuICAgICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRYY2xvdWRUb2tlbkRlZmF1bHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuKSB7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5zZXREZWZhdWx0UmVnaW9uKG5hbWUpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7fSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRUaXRsZXMoKSB7XG4gICAgY29uc3Qgc3RyZWFtaW5nVG9rZW5zID0gdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zO1xuICAgIGNvbnN0IF94Q2xvdWRBcGkgPSBuZXcgeENsb3VkQXBpKFxuICAgICAgdGhpcy5fYXBwbGljYXRpb24sXG4gICAgICBzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uZ2V0RGVmYXVsdFJlZ2lvbigpLmJhc2VVcmkuc3Vic3RyaW5nKDgpLFxuICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgIFwiY2xvdWRcIlxuICAgICk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIF94Q2xvdWRBcGlcbiAgICAgICAgLmdldFRpdGxlcygpXG4gICAgICAgIC50aGVuKCh0aXRsZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGl0bGVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0R2FtZVBhc3NQcm9kdWN0cyh0aXRsZXM6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl90aXRsZU1hbmFnZXIuZ2V0R2FtZVBhc3NQcm9kdWN0cyh0aXRsZXMpO1xuICB9XG5cbiAgZ2V0TmV3VGl0bGVzKCkge1xuICAgIHJldHVybiB0aGlzLl90aXRsZU1hbmFnZXIuZ2V0TmV3VGl0bGVzKCk7XG4gIH1cblxuICBnZXRIaXN0b3J5QWNoaXZlbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjaGl2ZW1lbnRNYW5hZ2VyLmdldEhpc3RvcnlBY2hpdmVtZW50cygpO1xuICB9XG5cbiAgZ2V0QWNoaXZlbWVudERldGFpbCh0aXRsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fYWNoaXZlbWVudE1hbmFnZXIuZ2V0QWNoaXZlbWVudERldGFpbCh0aXRsZUlkKTtcbiAgfVxufVxuIiwiaW1wb3J0IFRva2VuU3RvcmUgZnJvbSAnLi90b2tlbnN0b3JlJ1xuaW1wb3J0IFhhbCBmcm9tICcuL3hhbCdcblxuZXhwb3J0IHtcbiAgICBUb2tlblN0b3JlLFxuICAgIFhhbCxcbn0iLCJpbXBvcnQgeyBJbmNvbWluZ0h0dHBIZWFkZXJzIH0gZnJvbSAnaHR0cCdcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cCB7XG5cbiAgICBnZXRSZXF1ZXN0KGhvc3QsIHBhdGgsIGhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEh0dHBSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBob3N0SGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAvLyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgICAgIHBvcnQ6IDQ0MyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBob3N0SGVhZGVyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXMub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgKz0gZGF0YVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXMub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzQ29kZSA9PSAyMDAgfHwgcmVzLnN0YXR1c0NvZGUgPT0gMjA0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlRGF0YS50b1N0cmluZygpID09PSAnJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgSHR0cFJlc3BvbnNlKHt9LCByZXMuaGVhZGVycykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IEh0dHBSZXNwb25zZShKU09OLnBhcnNlKHJlc3BvbnNlRGF0YS50b1N0cmluZygpKSwgcmVzLmhlYWRlcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJytob3N0K3BhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJlcS5lbmQoKVxuXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcG9zdFJlcXVlc3QoaG9zdCwgcGF0aCwgaGVhZGVycywgZGF0YSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SHR0cFJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGhvc3RIZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgIC8vICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgICAgIHBvcnQ6IDQ0MyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBob3N0SGVhZGVyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvcHRpb25zLCBkYXRhKVxuXG4gICAgICAgICAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXMub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgKz0gZGF0YVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXMub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzQ29kZSA9PSAyMDAgfHwgcmVzLnN0YXR1c0NvZGUgPT0gMjAyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlRGF0YS50b1N0cmluZygpID09PSAnJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgSHR0cFJlc3BvbnNlKHt9LCByZXMuaGVhZGVycykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IEh0dHBSZXNwb25zZShKU09OLnBhcnNlKHJlc3BvbnNlRGF0YS50b1N0cmluZygpKSwgcmVzLmhlYWRlcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJytob3N0K3BhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJlcS53cml0ZShkYXRhKVxuICAgICAgICAgICAgcmVxLmVuZCgpXG5cbiAgICAgICAgfSlcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEh0dHBSZXNwb25zZSB7XG5cbiAgICBkYXRhOmFueVxuICAgIGhlYWRlcnM6SW5jb21pbmdIdHRwSGVhZGVyc1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTphbnksIGhlYWRlcnM6SW5jb21pbmdIdHRwSGVhZGVycyl7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICAgIH1cblxuICAgIGhlYWRlcigpe1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXJzXG4gICAgfVxuXG4gICAgYm9keSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuIHtcbiAgICBkYXRhOmFueVxuXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgY2FsY3VsYXRlU2Vjb25kc0xlZnQoZGF0ZTpEYXRlKXtcbiAgICAgICAgY29uc3QgZXhwaXJlc09uID0gZGF0ZVxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKGV4cGlyZXNPbi5nZXRUaW1lKCkgLSBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpIC8gMTAwMClcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgY29uc29sZS5sb2coJ1dhcm5pbmc6IGdldFNlY29uZHNWYWxpZCBub3QgaW1wbGVtZW50ZWQnKVxuXG4gICAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpeyBcbiAgICAgICAgY29uc29sZS5sb2coJ1dhcm5pbmc6IGlzVmFsaWQgbm90IGltcGxlbWVudGVkJylcblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBnZXRVc2VySGFzaCgpe1xuICAgICAgICBpZignVXNlclRva2VuJyBpbiB0aGlzLmRhdGEpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5Vc2VyVG9rZW4uRGlzcGxheUNsYWltcy54dWlbMF0udWhzXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBnZXRHYW1lcnRhZygpe1xuICAgICAgICBpZignQXV0aG9yaXphdGlvblRva2VuJyBpbiB0aGlzLmRhdGEpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5BdXRob3JpemF0aW9uVG9rZW4uRGlzcGxheUNsYWltcy54dWlbMF0uZ3RnXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElEZXZpY2VDb2RlIHtcbiAgICBJc3N1ZUluc3RhbnQ6IHN0cmluZ1xuICAgIE5vdEFmdGVyOiBzdHJpbmdcbiAgICBUb2tlbjogc3RyaW5nXG4gICAgRGlzcGxheUNsYWltczoge1xuICAgICAgICB4dWk6IHtcbiAgICAgICAgICAgIHVoczogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERldmljZVRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SURldmljZUNvZGVcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6SURldmljZUNvZGUpIHtcbiAgICAgICAgc3VwZXIoZGF0YSlcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuTm90QWZ0ZXIpKVxuICAgIH1cblxuICAgIGlzVmFsaWQoKXtcblxuICAgICAgICBpZih0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Ob3RBZnRlcikpIDw9IDApe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbn0iLCJpbXBvcnQgVG9rZW4gZnJvbSAnLi4vdG9rZW4nXG5pbXBvcnQgVXNlclRva2VuIGZyb20gJy4vdXNlcnRva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElNc2FsVG9rZW4ge1xuICAgIGxwdDogc3RyaW5nXG4gICAgcmVmcmVzaF90b2tlbjogc3RyaW5nXG4gICAgdXNlcl9pZDogc3RyaW5nXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1zYWxUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgICBkYXRhOklNc2FsVG9rZW5cblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6SU1zYWxUb2tlbikge1xuICAgICAgICBzdXBlcihkYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcblxuZXhwb3J0IGludGVyZmFjZSBJU2lzdVRva2VuIHtcbiAgICBEZXZpY2VUb2tlbjogc3RyaW5nXG4gICAgVGl0bGVUb2tlbjogSVNpc3VUaXRsZVRva2VuXG4gICAgVXNlclRva2VuOiBJU2lzdVVzZXJUb2tlblxuICAgIEF1dGhvcml6YXRpb25Ub2tlblxuICAgIFdlYlBhZ2U6IHN0cmluZ1xuICAgIFNhbmRib3g6IHN0cmluZ1xuICAgIFVzZU1vZGVybkdhbWVydGFnOiBib29sZWFuXG4gICAgRmxvdzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBJU2lzdVVzZXJUb2tlbiB7XG4gICAgSXNzdWVJbnN0YW50OiBzdHJpbmdcbiAgICBOb3RBZnRlcjogc3RyaW5nXG4gICAgVG9rZW46IHN0cmluZ1xuICAgIERpc3BsYXlDbGFpbXM6IHtcbiAgICAgICAgeHVpOiB7XG4gICAgICAgICAgICB1aHM6IHN0cmluZ1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgSVNpc3VUaXRsZVRva2VuIHtcbiAgICBJc3N1ZUluc3RhbnQ6IHN0cmluZ1xuICAgIE5vdEFmdGVyOiBzdHJpbmdcbiAgICBUb2tlbjogc3RyaW5nXG4gICAgRGlzcGxheUNsYWltczoge1xuICAgICAgICB4dGk6IHtcbiAgICAgICAgICAgIHRpZDogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpc3VUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgICBkYXRhOklTaXN1VG9rZW5cblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6SVNpc3VUb2tlbikge1xuICAgICAgICBzdXBlcihkYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0VGl0bGUgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5UaXRsZVRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRVc2VyID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuVXNlclRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRBdXRob3JpemF0aW9uID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuQXV0aG9yaXphdGlvblRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHNlY29uZHNMZWZ0VGl0bGUsIHNlY29uZHNMZWZ0VXNlciwgc2Vjb25kc0xlZnRBdXRob3JpemF0aW9uKVxuICAgIH1cblxuICAgIGlzVmFsaWQoKXtcbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRUaXRsZSA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLlRpdGxlVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICBpZihzZWNvbmRzTGVmdFRpdGxlIDw9IDApe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdFVzZXIgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Vc2VyVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICBpZihzZWNvbmRzTGVmdFVzZXIgPD0gMCl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0QXV0aG9yaXphdGlvbiA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLkF1dGhvcml6YXRpb25Ub2tlbi5Ob3RBZnRlcikpXG4gICAgICAgIGlmKHNlY29uZHNMZWZ0QXV0aG9yaXphdGlvbiA8PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBnZXRVc2VySGFzaCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLlVzZXJUb2tlbi5EaXNwbGF5Q2xhaW1zLnh1aVswXS51aHNcbiAgICB9XG5cbiAgICBnZXRHYW1lcnRhZygpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLkF1dGhvcml6YXRpb25Ub2tlbi5EaXNwbGF5Q2xhaW1zLnh1aVswXS5ndGdcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW1Ub2tlbiB7XG4gICAgb2ZmZXJpbmdTZXR0aW5nczogSU9mZmVyaW5nU2V0dGluZ3NcbiAgICBtYXJrZXQ6IHN0cmluZ1xuICAgIGdzVG9rZW46IHN0cmluZ1xuICAgIHRva2VuVHlwZTogc3RyaW5nXG4gICAgZHVyYXRpb25JblNlY29uZHM6IG51bWJlclxufVxuICBcbmV4cG9ydCBpbnRlcmZhY2UgSU9mZmVyaW5nU2V0dGluZ3Mge1xuICAgIGFsbG93UmVnaW9uU2VsZWN0aW9uOiBib29sZWFuXG4gICAgcmVnaW9uczogSVJlZ2lvbltdXG4gICAgc2VsZWN0YWJsZVNlcnZlclR5cGVzOiBhbnlcbiAgICBjbGllbnRDbG91ZFNldHRpbmdzOiBJQ2xpZW50Q2xvdWRTZXR0aW5nc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpb24ge1xuICAgIG5hbWU6IHN0cmluZ1xuICAgIGJhc2VVcmk6IHN0cmluZ1xuICAgIG5ldHdvcmtUZXN0SG9zdG5hbWU6IHN0cmluZ1xuICAgIGlzRGVmYXVsdDogYm9vbGVhblxuICAgIHN5c3RlbVVwZGF0ZUdyb3VwczogYW55XG4gICAgZmFsbGJhY2tQcmlvcml0eTogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsaWVudENsb3VkU2V0dGluZ3Mge1xuICAgIEVudmlyb25tZW50czogSUVudmlyb25tZW50W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRW52aXJvbm1lbnQge1xuICAgIE5hbWU6IHN0cmluZ1xuICAgIEF1dGhCYXNlVXJpPzogc3RyaW5nXG59ICBcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtaW5nVG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG5cbiAgICBwdWJsaWMgZGF0YTpJU3RyZWFtVG9rZW5cbiAgICBwcml2YXRlIF9vYmplY3RDcmVhdGVUaW1lID0gRGF0ZS5ub3coKVxuXG4gICAgY29uc3RydWN0b3IodG9rZW5EYXRhOklTdHJlYW1Ub2tlbil7XG4gICAgICAgIHN1cGVyKHRva2VuRGF0YSlcbiAgICAgICAgdGhpcy5kYXRhID0gdG9rZW5EYXRhXG4gICAgfVxuXG4gICAgY2FsY3VsYXRlU2Vjb25kc0xlZnQoZGF0ZTpEYXRlKXtcbiAgICAgICAgY29uc3QgZXhwaXJlc09uID0gZGF0ZVxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKGV4cGlyZXNPbi5nZXRUaW1lKCkgLSBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpIC8gMTAwMClcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgaWYodGhpcy5fb2JqZWN0Q3JlYXRlVGltZSArICh0aGlzLmRhdGEuZHVyYXRpb25JblNlY29uZHMqMTAwMCkpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5fb2JqZWN0Q3JlYXRlVGltZSArICh0aGlzLmRhdGEuZHVyYXRpb25JblNlY29uZHMqMTAwMCkpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7XG4gICAgICAgIGlmKHRoaXMuX29iamVjdENyZWF0ZVRpbWUgKyAodGhpcy5kYXRhLmR1cmF0aW9uSW5TZWNvbmRzKjEwMDApKXtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0ID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLl9vYmplY3RDcmVhdGVUaW1lICsgKHRoaXMuZGF0YS5kdXJhdGlvbkluU2Vjb25kcyoxMDAwKSkpXG4gICAgICAgICAgICByZXR1cm4gc2Vjb25kc0xlZnQgPiAwXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBnZXRNYXJrZXQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tYXJrZXRcbiAgICB9XG5cbiAgICBnZXRSZWdpb25zKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEub2ZmZXJpbmdTZXR0aW5ncy5yZWdpb25zXG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFJlZ2lvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm9mZmVyaW5nU2V0dGluZ3MucmVnaW9ucy5maWx0ZXIocmVnaW9uID0+IHJlZ2lvbi5pc0RlZmF1bHQpWzBdXG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdFJlZ2lvbihuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kYXRhLm9mZmVyaW5nU2V0dGluZ3MucmVnaW9ucy5mb3JFYWNoKHJlZ2lvbiA9PiB7XG4gICAgICAgICAgICBpZiAocmVnaW9uLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZWdpb24uaXNEZWZhdWx0ID0gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWdpb24uaXNEZWZhdWx0ID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRFbnZpcm9ubWVudHMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5vZmZlcmluZ1NldHRpbmdzLmNsaWVudENsb3VkU2V0dGluZ3MuRW52aXJvbm1lbnRzXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcblxuZXhwb3J0IGludGVyZmFjZSBJVXNlclRva2VuIHtcbiAgICB0b2tlbl90eXBlOiBzdHJpbmdcbiAgICBleHBpcmVzX2luOiBudW1iZXJcbiAgICBzY29wZTogc3RyaW5nXG4gICAgYWNjZXNzX3Rva2VuOiBzdHJpbmdcbiAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmdcbiAgICB1c2VyX2lkOiBzdHJpbmdcbiAgICBleHBpcmVzX29uOiBzdHJpbmdcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXNlclRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SVVzZXJUb2tlblxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJVXNlclRva2VuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVTZWNvbmRzTGVmdChkYXRlOkRhdGUpe1xuICAgICAgICBjb25zdCBleHBpcmVzT24gPSBkYXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoZXhwaXJlc09uLmdldFRpbWUoKSAtIGN1cnJlbnREYXRlLmdldFRpbWUoKSkgLyAxMDAwKVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuZXhwaXJlc19vbikpXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpe1xuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdCA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLmV4cGlyZXNfb24pKVxuICAgICAgICByZXR1cm4gc2Vjb25kc0xlZnQgPiAwXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcblxuZXhwb3J0IGludGVyZmFjZSBJWHN0c1Rva2VuIHtcbiAgICBJc3N1ZUluc3RhbnQ6IHN0cmluZ1xuICAgIE5vdEFmdGVyOiBzdHJpbmdcbiAgICBUb2tlbjogc3RyaW5nXG4gICAgRGlzcGxheUNsYWltczoge1xuICAgICAgICB4dWk6IHtcbiAgICAgICAgICAgIHVoczogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFhzdHNUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgICBkYXRhOklYc3RzVG9rZW5cblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6SVhzdHNUb2tlbikge1xuICAgICAgICBzdXBlcihkYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Ob3RBZnRlcikpXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpe1xuXG4gICAgICAgIGlmKHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLk5vdEFmdGVyKSkgPD0gMCl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufSIsImltcG9ydCBTaXN1VG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL3Npc3V0b2tlbidcbmltcG9ydCBVc2VyVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL3VzZXJ0b2tlbidcbmltcG9ydCBmcyBmcm9tICdmcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5TdG9yZSB7XG5cbiAgICBfZmlsZXBhdGg6c3RyaW5nID0gJydcblxuICAgIC8vIE1haW4gdG9rZW5zXG4gICAgX3VzZXJUb2tlbjpVc2VyVG9rZW4gfCB1bmRlZmluZWRcbiAgICBfc2lzdVRva2VuOlNpc3VUb2tlbiB8IHVuZGVmaW5lZFxuICAgIF9qd3RLZXlzOmFueVxuXG4gICAgLy8gU3ViLVRva2Vuc1xuICAgIGxvYWQoZmlsZXBhdGg6c3RyaW5nLCBzaWxlbnQgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9maWxlcGF0aCA9IGZpbGVwYXRoXG5cbiAgICAgICAgaWYoZnMuZXhpc3RzU3luYyhmaWxlcGF0aCkpe1xuICAgICAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gZnMucmVhZEZpbGVTeW5jKGZpbGVwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEpzb24oZmlsZUNvbnRlbnRzLnRvU3RyaW5nKCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZighIHNpbGVudCl7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlblN0b3JlOiBGaWxlIG5vdCBmb3VuZDogJyArIGZpbGVwYXRoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgbG9hZEpzb24oanNvbjpzdHJpbmcpIHtcbiAgICAgICAgY29uc3QganNvbkRhdGE6eyB1c2VyVG9rZW46YW55LCBzaXN1VG9rZW46YW55LCBqd3RLZXlzOmFueSB9ID0gSlNPTi5wYXJzZShqc29uKVxuXG4gICAgICAgIGlmKGpzb25EYXRhLnVzZXJUb2tlbil7XG4gICAgICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSBuZXcgVXNlclRva2VuKGpzb25EYXRhLnVzZXJUb2tlbilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGpzb25EYXRhLnNpc3VUb2tlbil7XG4gICAgICAgICAgICB0aGlzLl9zaXN1VG9rZW4gPSBuZXcgU2lzdVRva2VuKGpzb25EYXRhLnNpc3VUb2tlbilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGpzb25EYXRhLmp3dEtleXMpe1xuICAgICAgICAgICAgdGhpcy5fand0S2V5cyA9IGpzb25EYXRhLmp3dEtleXNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgc2V0VXNlclRva2VuKHVzZXJUb2tlbjpVc2VyVG9rZW4pIHtcbiAgICAgICAgY29uc3QgZXhwaXJlRGF0ZSA9IG5ldyBEYXRlKClcbiAgICAgICAgZXhwaXJlRGF0ZS5zZXRTZWNvbmRzKGV4cGlyZURhdGUuZ2V0U2Vjb25kcygpICsgdXNlclRva2VuLmRhdGEuZXhwaXJlc19pbilcblxuICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSBuZXcgVXNlclRva2VuKHsgLi4udXNlclRva2VuLmRhdGEsIGV4cGlyZXNfb246IGV4cGlyZURhdGUudG9JU09TdHJpbmcoKSB9KVxuICAgIH1cblxuICAgIGdldFVzZXJUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJUb2tlblxuICAgIH1cblxuICAgIHNldFNpc3VUb2tlbihzaXN1VG9rZW46U2lzdVRva2VuKSB7XG4gICAgICAgIHRoaXMuX3Npc3VUb2tlbiA9IG5ldyBTaXN1VG9rZW4oc2lzdVRva2VuLmRhdGEpXG4gICAgfVxuXG4gICAgZ2V0U2lzdVRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lzdVRva2VuXG4gICAgfVxuXG4gICAgc2V0Snd0S2V5cyhqd3RLZXlzOmFueSkge1xuICAgICAgICB0aGlzLl9qd3RLZXlzID0gand0S2V5c1xuICAgIH1cblxuICAgIHNhdmUoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICB1c2VyVG9rZW46IHRoaXMuX3VzZXJUb2tlbj8uZGF0YSxcbiAgICAgICAgICAgIHNpc3VUb2tlbjogdGhpcy5fc2lzdVRva2VuPy5kYXRhLFxuICAgICAgICAgICAgand0S2V5czogdGhpcy5fand0S2V5c1xuICAgICAgICB9XG5cbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLl9maWxlcGF0aCwgSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikpXG4gICAgfVxuXG4gICAgcmVtb3ZlQWxsKCkge1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuX2ZpbGVwYXRoLCBKU09OLnN0cmluZ2lmeSh7fSkpXG4gICAgfVxuXG4gICAgaGFzVmFsaWRBdXRoVG9rZW5zKCkge1xuICAgICAgICBpZih0aGlzLl91c2VyVG9rZW4pe1xuICAgICAgICAgICAgaWYoISB0aGlzLl91c2VyVG9rZW4uaXNWYWxpZCgpKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5fc2lzdVRva2VuKXtcbiAgICAgICAgICAgIGlmKCEgdGhpcy5fdXNlclRva2VuLmlzVmFsaWQoKSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufSIsImltcG9ydCBIdHRwIGZyb20gJy4vbGliL2h0dHAnXG5pbXBvcnQgY3J5cHRvLCB7IHN1YnRsZSwgS2V5T2JqZWN0IH0gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgZXhwb3J0SldLIH0gZnJvbSAnam9zZSdcblxuaW1wb3J0IERldmljZVRva2VuIGZyb20gJy4vbGliL3Rva2Vucy9kZXZpY2V0b2tlbidcbmltcG9ydCBTaXN1VG9rZW4sIHsgSVNpc3VUb2tlbiB9IGZyb20gJy4vbGliL3Rva2Vucy9zaXN1dG9rZW4nXG5pbXBvcnQgVXNlclRva2VuLCB7IElVc2VyVG9rZW4gfSBmcm9tICcuL2xpYi90b2tlbnMvdXNlcnRva2VuJ1xuaW1wb3J0IFN0cmVhbWluZ1Rva2VuIGZyb20gJy4vbGliL3Rva2Vucy9zdHJlYW1pbmd0b2tlbidcbmltcG9ydCBYc3RzVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL3hzdHN0b2tlbidcbmltcG9ydCBNc2FsVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL21zYWx0b2tlbidcblxuaW1wb3J0IFRva2VuU3RvcmUgZnJvbSAnLi90b2tlbnN0b3JlJ1xuXG5jb25zdCBVVUlEID0gcmVxdWlyZSgndXVpZC0xMzQ1JylcbmNvbnN0IG5leHRVVUlEID0gKCkgPT4gVVVJRC52Myh7IG5hbWVzcGFjZTogJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCcsIG5hbWU6IERhdGUubm93KCkudG9TdHJpbmcoKSB9KVxuXG5pbnRlcmZhY2UgSUNvZGVDaGFsbGFuZ2Uge1xuICAgIHZhbHVlOiBzdHJpbmdcbiAgICBtZXRob2Q6IHN0cmluZ1xuICAgIHZlcmlmaWVyOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIElTaXN1QXV0aGVudGljYXRpb25SZXNwb25zZSB7XG4gICAgTXNhT2F1dGhSZWRpcmVjdDogc3RyaW5nXG4gICAgTXNhUmVxdWVzdFBhcmFtZXRlcnM6IHt9XG4gICAgU2Vzc2lvbklkOiBzdHJpbmdcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWGFsIHtcblxuICAgIGtleXNcbiAgICBqd3RLZXlzXG5cbiAgICBfYXBwID0ge1xuICAgICAgICBBcHBJZDogJzAwMDAwMDAwNGMyMGE5MDgnLCAvLycwMDAwMDAwMDRjMTJhZTZmJywgLy8gMDAwMDAwMDA0ODE4MzUyMiA9IHdvcmtpbmcsIGJ1dCBtaW5lY3JhZnQgLS08PDwgMDAwMDAwMDA0YzEyYWU2ZiB3b3JrcywgeGJveCBhcHBcbiAgICAgICAgVGl0bGVJZDogJzMyODE3ODA3OCcsIC8vJzMyODE3ODA3OCcsIC8vIDEwMTY4OTg0MzkgPSB3b3JraW5nXG4gICAgICAgIFJlZGlyZWN0VXJpOiAnbXMteGFsLTAwMDAwMDAwNGMyMGE5MDg6Ly9hdXRoJ1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHRva2VuU3RvcmU/OlRva2VuU3RvcmUpe1xuICAgICAgICBpZih0b2tlblN0b3JlICYmIHRva2VuU3RvcmUuX2p3dEtleXMpe1xuICAgICAgICAgICAgdGhpcy5zZXRLZXlzKHRva2VuU3RvcmUuX2p3dEtleXMuand0KS50aGVuKChrZXlzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0tleXMgbG9hZGVkOicsIGtleXMpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGxvYWQga2V5czonLCBlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHNldEtleXMob3JnSnd0S2V5KXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHN1YnRsZS5pbXBvcnRLZXkoJ2p3aycsIG9yZ0p3dEtleSwgeyBuYW1lOiAnRUNEU0EnLCBuYW1lZEN1cnZlOiAnUC0yNTYnIH0sIHRydWUsIFsnc2lnbiddKS50aGVuKGp3dEtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IEtleU9iamVjdC5mcm9tKGp3dEtleSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmp3dEtleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJhdzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZUtleTogcHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IG9yZ0p3dEtleVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5qd3RLZXlzKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygna2V5IGVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEtleXMoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuand0S2V5cyAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuand0S2V5cylcblxuICAgICAgICAgICAgfSBlbHNlIGlmKHRoaXMua2V5cyA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICB0aGlzLmtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYygnZWMnLCB7IG5hbWVkQ3VydmU6ICdQLTI1NicgfSlcblxuICAgICAgICAgICAgICAgIHRoaXMuand0S2V5cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmF3OiB0aGlzLmtleXNcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBleHBvcnRKV0sodGhpcy5rZXlzLnB1YmxpY0tleSkudGhlbihqd2sgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqd2tLZXkgPSB7IC4uLmp3aywgYWxnOiAnRVMyNTYnLCB1c2U6ICdzaWcnIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5qd3RLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiB0aGlzLmtleXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBqd3Q6IGp3a0tleVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgandrS2V5cyA9IHRoaXMuand0S2V5cy5yYXcucHJpdmF0ZUtleS5leHBvcnQoeyB0eXBlOiAncGtjczgnLCBmb3JtYXQ6ICdqd2snIH0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0S2V5cyhqd2tLZXlzKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShrZXlzKVxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5qd3RLZXlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNvZGVDaGFsbGFuZ2VcblxuICAgIGdldENvZGVDaGFsbGFuZ2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJQ29kZUNoYWxsYW5nZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5jb2RlQ2hhbGxhbmdlID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVfdmVyaWZpZXIgPSBCdWZmZXIuZnJvbShjcnlwdG8ucHNldWRvUmFuZG9tQnl0ZXMoMzIpKS50b1N0cmluZygnYmFzZTY0dXJsJylcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVfY2hhbGxlbmdlID0gY3J5cHRvXG4gICAgICAgICAgICAgICAgICAgIC5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgICAgICAgICAgICAgICAgIC51cGRhdGUoY29kZV92ZXJpZmllcilcbiAgICAgICAgICAgICAgICAgICAgLmRpZ2VzdCgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jb2RlQ2hhbGxhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29kZV9jaGFsbGVuZ2UudG9TdHJpbmcoJ2Jhc2U2NHVybCcpLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdTMjU2JyxcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZXI6IGNvZGVfdmVyaWZpZXIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuY29kZUNoYWxsYW5nZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRSYW5kb21TdGF0ZShieXRlcyA9IDY0KSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoYnl0ZXMpLnRvU3RyaW5nKCdiYXNlNjR1cmwnKVxuICAgIH1cblxuICAgIGdldERldmljZVRva2VuSGFjaygpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldERldmljZVRva2VuSGFjay4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxEZXZpY2VUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXREZXZpY2VUb2tlbigpLnRoZW4oZGV2aWNlVG9rZW4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXREZXZpY2VUb2tlbiBzdWNjZXNzOicsIGRldmljZVRva2VuKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoZGV2aWNlVG9rZW4pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzY29kZSA9PSA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RldmljZSB0b2tlbiBnZXQgZXJyb3IsIHJldHJ5Li4uJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGV2aWNlVG9rZW5IYWNrKCkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0RGV2aWNlVG9rZW4oKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXREZXZpY2VUb2tlbi4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxEZXZpY2VUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRLZXlzKCkudGhlbigoand0S2V5czphbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBdXRoTWV0aG9kOiAnUHJvb2ZPZlBvc3Nlc3Npb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgSWQ6IGB7JHtuZXh0VVVJRCgpfX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlVHlwZTogJ0FuZHJvaWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsTnVtYmVyOiBgeyR7bmV4dFVVSUQoKX19YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb246ICcxNS4wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb29mS2V5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSc6ICdzaWcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGcnOiAnRVMyNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrdHknOiAnRUMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcnYnOiAnUC0yNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4Jzogand0S2V5cy5qd3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAneSc6IGp3dEtleXMuand0LnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVseWluZ1BhcnR5OiAnaHR0cDovL2F1dGgueGJveGxpdmUuY29tJyxcbiAgICAgICAgICAgICAgICAgICAgVG9rZW5UeXBlOiAnSldUJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbignaHR0cHM6Ly9kZXZpY2UuYXV0aC54Ym94bGl2ZS5jb20vZGV2aWNlL2F1dGhlbnRpY2F0ZScsICcnLCBib2R5LCBqd3RLZXlzKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0geyAuLi57XG4gICAgICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZSdcbiAgICAgICAgICAgICAgICB9LCBTaWduYXR1cmU6IHNpZ25hdHVyZSB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ2RldmljZS5hdXRoLnhib3hsaXZlLmNvbScsICcvZGV2aWNlL2F1dGhlbnRpY2F0ZScsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IERldmljZVRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRvU2lzdUF1dGhlbnRpY2F0aW9uKGRldmljZVRva2VuOkRldmljZVRva2VuLCBjb2RlQ2hhbGxhbmdlOklDb2RlQ2hhbGxhbmdlLCBzdGF0ZSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0S2V5cygpLnRoZW4oKGp3dEtleXM6YW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBBcHBJZDogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICAgICBUaXRsZUlkOiB0aGlzLl9hcHAuVGl0bGVJZCxcbiAgICAgICAgICAgICAgICAgICAgUmVkaXJlY3RVcmk6IHRoaXMuX2FwcC5SZWRpcmVjdFVyaSxcbiAgICAgICAgICAgICAgICAgICAgRGV2aWNlVG9rZW46IGRldmljZVRva2VuLmRhdGEuVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIFNhbmRib3g6IFwiUkVUQUlMXCIsXG4gICAgICAgICAgICAgICAgICAgIFRva2VuVHlwZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgIE9mZmVyczogW1wic2VydmljZTo6dXNlci5hdXRoLnhib3hsaXZlLmNvbTo6TUJJX1NTTFwiXSxcbiAgICAgICAgICAgICAgICAgICAgUXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdhbmRyb2lkX3Bob25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlOiBjb2RlQ2hhbGxhbmdlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2VfbWV0aG9kOiBjb2RlQ2hhbGxhbmdlLm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oJ2h0dHBzOi8vc2lzdS54Ym94bGl2ZS5jb20vYXV0aGVudGljYXRlJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLntcbiAgICAgICAgICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICB9LCBTaWduYXR1cmU6IHNpZ25hdHVyZSB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ3Npc3UueGJveGxpdmUuY29tJywgJy9hdXRoZW50aWNhdGUnLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgU2Vzc2lvbklkIHRvIHJlc3BvbnNlIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNCb2R5ID0geyBTZXNzaW9uSWQ6IHJlc3BvbnNlLmhlYWRlcnNbJ3gtc2Vzc2lvbmlkJ10sIC4uLnJlc3BvbnNlLmJvZHkoKSB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKCByZXNCb2R5IGFzIElTaXN1QXV0aGVudGljYXRpb25SZXNwb25zZSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRvU2lzdUF1dGhvcml6YXRpb24odXNlclRva2VuOlVzZXJUb2tlbiwgZGV2aWNlVG9rZW46RGV2aWNlVG9rZW4sIFNlc3Npb25JZD86c3RyaW5nKXtcbiAgICAgICAgY29uc29sZS5sb2coJ2RvU2lzdUF1dGhvcml6YXRpb24uLi4nKVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8U2lzdVRva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEtleXMoKS50aGVuKChqd3RLZXlzOmFueSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgQWNjZXNzVG9rZW46ICd0PScrdXNlclRva2VuLmRhdGEuYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICBBcHBJZDogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICAgICBEZXZpY2VUb2tlbjogZGV2aWNlVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgICAgICAgICAgICAgICAgU2FuZGJveDogXCJSRVRBSUxcIixcbiAgICAgICAgICAgICAgICAgICAgU2l0ZU5hbWU6IFwidXNlci5hdXRoLnhib3hsaXZlLmNvbVwiLFxuICAgICAgICAgICAgICAgICAgICBVc2VNb2Rlcm5HYW1lcnRhZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgUHJvb2ZLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2UnOiAnc2lnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbGcnOiAnRVMyNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2t0eSc6ICdFQycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY3J2JzogJ1AtMjU2JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4Jzogand0S2V5cy5qd3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICd5Jzogand0S2V5cy5qd3QueVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAuLi5TZXNzaW9uSWQgPyB7IFNlc3Npb25JZDogU2Vzc2lvbklkIH0gOiB7fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oJ2h0dHBzOi8vc2lzdS54Ym94bGl2ZS5jb20vYXV0aG9yaXplJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCdzaXN1Lnhib3hsaXZlLmNvbScsICcvYXV0aG9yaXplJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU2lzdVRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGV4Y2hhbmdlQ29kZUZvclRva2VuKGNvZGU6c3RyaW5nLCBjb2RlVmVyaWZpZXI6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFVzZXJUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAnY2xpZW50X2lkJzogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICdjb2RlJzogY29kZSxcbiAgICAgICAgICAgICAgICAnY29kZV92ZXJpZmllcic6IGNvZGVWZXJpZmllcixcbiAgICAgICAgICAgICAgICAnZ3JhbnRfdHlwZSc6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICAgICAgICAgICdyZWRpcmVjdF91cmknOiB0aGlzLl9hcHAuUmVkaXJlY3RVcmksXG4gICAgICAgICAgICAgICAgJ3Njb3BlJzogJ3NlcnZpY2U6OnVzZXIuYXV0aC54Ym94bGl2ZS5jb206Ok1CSV9TU0wnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBheWxvYWQpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnbG9naW4ubGl2ZS5jb20nLCAnL29hdXRoMjBfdG9rZW4uc3JmJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVc2VyVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZWZyZXNoVXNlclRva2VuKHVzZXJUb2tlbjpVc2VyVG9rZW4pe1xuICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaFVzZXJUb2tlbi4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxVc2VyVG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgJ2NsaWVudF9pZCc6IHRoaXMuX2FwcC5BcHBJZCxcbiAgICAgICAgICAgICAgICAnZ3JhbnRfdHlwZSc6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICAgICAgICAncmVmcmVzaF90b2tlbic6IHVzZXJUb2tlbi5kYXRhLnJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgICAgICAgJ3Njb3BlJzogJ3NlcnZpY2U6OnVzZXIuYXV0aC54Ym94bGl2ZS5jb206Ok1CSV9TU0wnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBheWxvYWQpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnbG9naW4ubGl2ZS5jb20nLCAnL29hdXRoMjBfdG9rZW4uc3JmJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaFVzZXJUb2tlbiBzdWNjZXNzOiAnLCByZXNwb25zZS5ib2R5KCkpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgVXNlclRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaFVzZXJUb2tlbiBmYWlsOicsIGVycm9yKVxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW46U2lzdVRva2VuLCByZWx5aW5nUGFydHk6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFhzdHNUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRLZXlzKCkudGhlbigoand0S2V5czphbnkpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFNhbmRib3hJZDogJ1JFVEFJTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VUb2tlbjogc2lzdVRva2VuLmRhdGEuRGV2aWNlVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBUaXRsZVRva2VuOiBzaXN1VG9rZW4uZGF0YS5UaXRsZVRva2VuLlRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlclRva2VuczogW3Npc3VUb2tlbi5kYXRhLlVzZXJUb2tlbi5Ub2tlbl1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVseWluZ1BhcnR5OiByZWx5aW5nUGFydHksXG4gICAgICAgICAgICAgICAgICAgIFRva2VuVHlwZTogJ0pXVCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oJ2h0dHBzOi8veHN0cy5hdXRoLnhib3hsaXZlLmNvbS94c3RzL2F1dGhvcml6ZScsICcnLCBib2R5LCBqd3RLZXlzKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0geyAuLi57XG4gICAgICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICAgICAgfSwgU2lnbmF0dXJlOiBzaWduYXR1cmUgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCd4c3RzLmF1dGgueGJveGxpdmUuY29tJywgJy94c3RzL2F1dGhvcml6ZScsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFhzdHNUb2tlbihyZXNwb25zZS5ib2R5KCkpKVxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBleGNoYW5nZVJlZnJlc2hUb2tlbkZvclhjbG91ZFRyYW5zZmVyVG9rZW4odXNlclRva2VuOlVzZXJUb2tlbil7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxNc2FsVG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLl9hcHAuQXBwSWQsXG4gICAgICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAgICAgICAgIHNjb3BlOiAnc2VydmljZTo6aHR0cDovL1Bhc3Nwb3J0Lk5FVC9wdXJwb3NlOjpQVVJQT1NFX1hCT1hfQ0xPVURfQ09OU09MRV9UUkFOU0ZFUl9UT0tFTicsXG4gICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdXNlclRva2VuLmRhdGEucmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgICAgICBjb2RlOiAnJyxcbiAgICAgICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiAnJyxcbiAgICAgICAgICAgICAgICByZWRpcmVjdF91cmk6ICcnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXlsb2FkKS50b1N0cmluZygpXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ2xvZ2luLmxpdmUuY29tJywgJy9vYXV0aDIwX3Rva2VuLnNyZicsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgTXNhbFRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuOlhzdHNUb2tlbiwgb2ZmZXJpbmc6c3RyaW5nLCBmb3JjZVJlZ2lvbklwOiBzdHJpbmcgPSAnJyl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxTdHJlYW1pbmdUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAndG9rZW4nOiB4c3RzVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgICAgICAgICAgICAnb2ZmZXJpbmdJZCc6IG9mZmVyaW5nLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICAgICAgJ3gtZ3Nzdi1jbGllbnQnOiAnWGJveENvbUJyb3dzZXInLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9yY2VSZWdpb25JcC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10gPSBmb3JjZVJlZ2lvbklwXG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3Qob2ZmZXJpbmcrJy5nc3N2LXBsYXktcHJvZC54Ym94bGl2ZS5jb20nLCAnL3YyL2xvZ2luL3VzZXInLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0cmVhbWluZ1Rva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gQ3JlZGl0cyB0byBodHRwczovL2dpdGh1Yi5jb20vUHJpc21hcmluZUpTL3ByaXNtYXJpbmUtYXV0aCBmb3IgdGhlIHNpZ25pbmcgcGFydFxuICAgIHNpZ24odXJsLCBhdXRob3JpemF0aW9uVG9rZW4sIHBheWxvYWQsIGp3dEtleXMpIHtcbiAgICAgICAgY29uc3Qgd2luZG93c1RpbWVzdGFtcCA9IChCaWdJbnQoKERhdGUubm93KCkgLyAxMDAwKSB8IDApICsgQmlnSW50KDExNjQ0NDczNjAwKSkgKiBCaWdJbnQoMTAwMDAwMDApXG4gICAgICAgIGNvbnN0IHBhdGhBbmRRdWVyeSA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxuICAgIFxuICAgICAgICBjb25zdCBhbGxvY1NpemUgPSA1ICsgOSArIDUgKyBwYXRoQW5kUXVlcnkubGVuZ3RoICsgMSArIGF1dGhvcml6YXRpb25Ub2tlbi5sZW5ndGggKyAxICsgcGF5bG9hZC5sZW5ndGggKyAxXG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhhbGxvY1NpemUpXG4gICAgICAgIGJ1Zi53cml0ZUludDMyQkUoMSlcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgNClcbiAgICAgICAgYnVmLndyaXRlQmlnVUludDY0QkUod2luZG93c1RpbWVzdGFtcCwgNSlcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgMTMpXG4gICAgICAgIGxldCBvZmZzZXQgPSAxNFxuXG4gICAgICAgIEJ1ZmZlci5mcm9tKCdQT1NUJykuY29weShidWYsIG9mZnNldClcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgb2Zmc2V0KzQpXG4gICAgICAgIG9mZnNldCA9IG9mZnNldCs0KzFcblxuICAgICAgICBCdWZmZXIuZnJvbShwYXRoQW5kUXVlcnkpLmNvcHkoYnVmLCBvZmZzZXQpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQ4KDAsIG9mZnNldCtwYXRoQW5kUXVlcnkubGVuZ3RoKVxuICAgICAgICBvZmZzZXQgPSBvZmZzZXQrcGF0aEFuZFF1ZXJ5Lmxlbmd0aCsxXG5cbiAgICAgICAgQnVmZmVyLmZyb20oYXV0aG9yaXphdGlvblRva2VuKS5jb3B5KGJ1Ziwgb2Zmc2V0KVxuICAgICAgICBidWYud3JpdGVVSW50OCgwLCBvZmZzZXQrYXV0aG9yaXphdGlvblRva2VuLmxlbmd0aClcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0K2F1dGhvcml6YXRpb25Ub2tlbi5sZW5ndGgrMVxuXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBheWxvYWQpLmNvcHkoYnVmLCBvZmZzZXQpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQ4KDAsIG9mZnNldCtwYXlsb2FkLmxlbmd0aClcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0K3BheWxvYWQubGVuZ3RoKzFcblxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uc2lnbignU0hBMjU2JywgYnVmLCB7IGtleTogand0S2V5cy5yYXcucHJpdmF0ZUtleSwgZHNhRW5jb2Rpbmc6ICdpZWVlLXAxMzYzJyB9KVxuICAgIFxuICAgICAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuYWxsb2Moc2lnbmF0dXJlLmxlbmd0aCArIDEyKVxuICAgICAgICBoZWFkZXIud3JpdGVJbnQzMkJFKDEpXG4gICAgICAgIGhlYWRlci53cml0ZUJpZ1VJbnQ2NEJFKHdpbmRvd3NUaW1lc3RhbXAsIDQpXG4gICAgICAgIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkuY29weShoZWFkZXIsIDEyKVxuICAgIFxuICAgICAgICByZXR1cm4gaGVhZGVyXG4gICAgfVxuXG4gICAgLy8gVG9rZW4gcmV0cmlldmFsIGhlbHBlcnNcbiAgICBhc3luYyByZWZyZXNoVG9rZW5zKHRva2VuU3RvcmU6VG9rZW5TdG9yZSl7XG4gICAgICAgIGNvbnN0IGN1clVzZXJUb2tlbiA9IHRva2VuU3RvcmUuZ2V0VXNlclRva2VuKClcbiAgICAgICAgaWYoY3VyVXNlclRva2VuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCcpXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJUb2tlbiA9IGF3YWl0IHRoaXMucmVmcmVzaFVzZXJUb2tlbihjdXJVc2VyVG9rZW4pXG4gICAgICAgICAgICBjb25zdCBkZXZpY2VUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlVG9rZW5IYWNrKClcbiAgICAgICAgICAgIGNvbnN0IHNpc3VUb2tlbiA9IGF3YWl0IHRoaXMuZG9TaXN1QXV0aG9yaXphdGlvbih1c2VyVG9rZW4sIGRldmljZVRva2VuKVxuXG4gICAgICAgICAgICB0b2tlblN0b3JlLnNldFVzZXJUb2tlbih1c2VyVG9rZW4pXG4gICAgICAgICAgICB0b2tlblN0b3JlLnNldFNpc3VUb2tlbihzaXN1VG9rZW4pXG4gICAgICAgICAgICB0b2tlblN0b3JlLnNhdmUoKVxuXG4gICAgICAgICAgICByZXR1cm4geyB1c2VyVG9rZW4sIGRldmljZVRva2VuLCBzaXN1VG9rZW4gfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFRva2VuUmVmcmVzaEVycm9yKCdGYWlsZWQgdG8gcmVmcmVzaCB0b2tlbnM6ICcgKyBKU09OLnN0cmluZ2lmeShlcnJvcikpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRNc2FsVG9rZW4odG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc3QgdXNlclRva2VuID0gdG9rZW5TdG9yZS5nZXRVc2VyVG9rZW4oKVxuICAgICAgICBpZih1c2VyVG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmV4Y2hhbmdlUmVmcmVzaFRva2VuRm9yWGNsb3VkVHJhbnNmZXJUb2tlbih1c2VyVG9rZW4pICAgIFxuICAgIH1cblxuICAgIF93ZWJUb2tlbjpYc3RzVG9rZW4gfCB1bmRlZmluZWRcblxuICAgIGFzeW5jIGdldFdlYlRva2VuKHRva2VuU3RvcmU6VG9rZW5TdG9yZSl7XG4gICAgICAgIGNvbnN0IHNpc3VUb2tlbiA9IHRva2VuU3RvcmUuZ2V0U2lzdVRva2VuKClcbiAgICAgICAgaWYoc2lzdVRva2VuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Npc3UgdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCcpXG5cbiAgICAgICAgaWYodGhpcy5fd2ViVG9rZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93ZWJUb2tlbi5nZXRTZWNvbmRzVmFsaWQoKSA8PSA2MCl7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW4sICdodHRwOi8veGJveGxpdmUuY29tJylcbiAgICAgICAgICAgIHRoaXMuX3dlYlRva2VuID0gdG9rZW5cblxuICAgICAgICAgICAgcmV0dXJuIHRva2VuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2ViVG9rZW4gYXMgWHN0c1Rva2VuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfeGhvbWVUb2tlbjpTdHJlYW1pbmdUb2tlbiB8IHVuZGVmaW5lZFxuICAgIF94Y2xvdWRUb2tlbjpTdHJlYW1pbmdUb2tlbiB8IHVuZGVmaW5lZFxuXG4gICAgYXN5bmMgZ2V0U3RyZWFtaW5nVG9rZW4odG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc3Qgc2lzdVRva2VuID0gdG9rZW5TdG9yZS5nZXRTaXN1VG9rZW4oKVxuICAgICAgICBpZihzaXN1VG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lzdSB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcblxuICAgICAgICBjb25zdCB4c3RzVG9rZW4gPSBhd2FpdCB0aGlzLmRvWHN0c0F1dGhvcml6YXRpb24oc2lzdVRva2VuLCAnaHR0cDovL2dzc3YueGJveGxpdmUuY29tLycpXG5cbiAgICAgICAgaWYodGhpcy5feGhvbWVUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3hob21lVG9rZW4uZ2V0U2Vjb25kc1ZhbGlkKCkgPD0gNjApe1xuICAgICAgICAgICAgdGhpcy5feGhvbWVUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuLCAneGhvbWUnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5feGNsb3VkVG9rZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzLl94Y2xvdWRUb2tlbi5nZXRTZWNvbmRzVmFsaWQoKSA8PSA2MCl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4Z3B1d2ViJylcbiAgICAgICAgICAgIH0gY2F0Y2goZXJyb3Ipe1xuICAgICAgICAgICAgICAgIHRoaXMuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4Z3B1d2ViZjJwJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHhIb21lVG9rZW46IHRoaXMuX3hob21lVG9rZW4sIHhDbG91ZFRva2VuOiB0aGlzLl94Y2xvdWRUb2tlbiB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmVkaXJlY3RVcmkoKXtcbiAgICAgICAgY29uc3QgZGV2aWNlVG9rZW4gPSBhd2FpdCB0aGlzLmdldERldmljZVRva2VuSGFjaygpXG4gICAgICAgIGNvbnN0IGNvZGVDaGFsbGFuZ2UgPSBhd2FpdCB0aGlzLmdldENvZGVDaGFsbGFuZ2UoKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0UmFuZG9tU3RhdGUoKVxuICAgICAgICBjb25zdCBzaXN1QXV0aCA9IGF3YWl0IHRoaXMuZG9TaXN1QXV0aGVudGljYXRpb24oZGV2aWNlVG9rZW4sIGNvZGVDaGFsbGFuZ2UsIHN0YXRlKVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXN1QXV0aCxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgY29kZUNoYWxsYW5nZVxuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZVVzZXIodG9rZW5TdG9yZTpUb2tlblN0b3JlLCByZWRpcmVjdE9iamVjdDp7XG4gICAgICAgIHNpc3VBdXRoOiBJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U7XG4gICAgICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgICAgIGNvZGVDaGFsbGFuZ2U6IElDb2RlQ2hhbGxhbmdlO1xuICAgIH0sIHJlZGlyZWN0VXJpOnN0cmluZyl7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVkaXJlY3RVcmkpXG5cbiAgICAgICAgY29uc3QgZXJyb3IgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnZXJyb3InKVxuICAgICAgICBpZihlcnJvcil7XG4gICAgICAgICAgICBjb25zdCBlcnJvcl9kZXNjcmlwdGlvbiA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdlcnJvcl9kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZGUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnY29kZScpXG4gICAgICAgIGlmKGNvZGUpe1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnc3RhdGUnKVxuICAgICAgICAgICAgaWYoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGVVc2VyVXNpbmdDb2RlKHRva2VuU3RvcmUsIHJlZGlyZWN0T2JqZWN0LCBjb2RlLCBzdGF0ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZVVzZXJVc2luZ0NvZGUodG9rZW5TdG9yZTpUb2tlblN0b3JlLCByZWRpcmVjdE9iamVjdDp7XG4gICAgICAgIHNpc3VBdXRoOiBJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U7XG4gICAgICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgICAgIGNvZGVDaGFsbGFuZ2U6IElDb2RlQ2hhbGxhbmdlO1xuICAgIH0sIGNvZGU6c3RyaW5nLCBzdGF0ZTpzdHJpbmcpe1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdhdXRoZW50aWNhdGVVc2VyOicsIGNvZGUsIHN0YXRlKVxuXG4gICAgICAgIGlmKHN0YXRlICE9PSByZWRpcmVjdE9iamVjdC5zdGF0ZSl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQXV0aGVudGljYXRpb24gZmFpbGVkOiBTdGF0ZSBtaXNtYXRjaCcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlQ2hhbGxhbmdlID0gYXdhaXQgdGhpcy5nZXRDb2RlQ2hhbGxhbmdlKClcbiAgICAgICAgY29uc3QgdXNlclRva2VuID0gYXdhaXQgdGhpcy5leGNoYW5nZUNvZGVGb3JUb2tlbihjb2RlLCBjb2RlQ2hhbGxhbmdlLnZlcmlmaWVyKVxuXG4gICAgICAgIHRva2VuU3RvcmUuc2V0VXNlclRva2VuKHVzZXJUb2tlbilcbiAgICAgICAgdG9rZW5TdG9yZS5zZXRKd3RLZXlzKHRoaXMuand0S2V5cylcbiAgICAgICAgdG9rZW5TdG9yZS5zYXZlKClcblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRva2VuUmVmcmVzaEVycm9yIGV4dGVuZHMgRXJyb3Ige30iLCJleHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzID0ge1xuICBsb2NhbGU6IFwiZW5cIixcbiAgZnVsbHNjcmVlbjogZmFsc2UsXG4gIHJlc29sdXRpb246IDcyMCxcbiAgeGhvbWVfYml0cmF0ZV9tb2RlOiBcIkF1dG9cIixcbiAgeGhvbWVfYml0cmF0ZTogMjAsXG4gIHhjbG91ZF9iaXRyYXRlX21vZGU6IFwiQXV0b1wiLFxuICB4Y2xvdWRfYml0cmF0ZTogMjAsXG4gIHByZWZlcnJlZF9nYW1lX2xhbmd1YWdlOiBcImVuLVVTXCIsXG4gIGZvcmNlX3JlZ2lvbl9pcDogXCJcIixcbiAgY29kZWM6IFwiXCIsXG4gIHZpYnJhdGlvbjogdHJ1ZSxcbiAgdmlicmF0aW9uX21vZGU6IFwiTmF0aXZlXCIsXG4gIGdhbWVwYWRfa2VybmFsOiBcIk5hdGl2ZVwiLFxuICBkZWFkX3pvbmU6IDAuMSxcbiAgZWRnZV9jb21wZW5zYXRpb246IDAsXG4gIHBvd2VyX29uOiBmYWxzZSxcbiAgdmlkZW9fZm9ybWF0OiBcIlwiLFxuICB2aXJ0dWFsX2dhbWVwYWRfb3BhY2l0eTogMC42LFxuICBnYW1lcGFkX21hcGluZzogbnVsbCxcbiAgbmF0aXZlX2dhbWVwYWRfbWFwaW5nOiBudWxsLFxuICBpcHY2OiBmYWxzZSxcbiAgaW5wdXRfbW91c2VrZXlib2FyZF9tYXBpbmc6IHtcbiAgICBBcnJvd0xlZnQ6ICdEUGFkTGVmdCcsXG4gICAgQXJyb3dVcDogJ0RQYWRVcCcsXG4gICAgQXJyb3dSaWdodDogJ0RQYWRSaWdodCcsXG4gICAgQXJyb3dEb3duOiAnRFBhZERvd24nLFxuXG4gICAgRW50ZXI6ICdBJyxcbiAgICBhOiAnQScsXG5cbiAgICBCYWNrc3BhY2U6ICdCJyxcbiAgICBiOiAnQicsXG5cbiAgICB4OiAnWCcsXG4gICAgeTogJ1knLFxuXG4gICAgJ1snOiAnTGVmdFNob3VsZGVyJyxcbiAgICAnXSc6ICdSaWdodFNob3VsZGVyJyxcblxuICAgICctJzogJ0xlZnRUcmlnZ2VyJyxcbiAgICAnPSc6ICdSaWdodFRyaWdnZXInLFxuXG4gICAgdjogJ1ZpZXcnLFxuICAgIG06ICdNZW51JyxcbiAgICBuOiAnTmV4dXMnLFxuICB9LFxuICBkaXNwbGF5X29wdGlvbnM6IHtcbiAgICBzaGFycG5lc3M6IDUsXG4gICAgc2F0dXJhdGlvbjogMTAwLFxuICAgIGNvbnRyYXN0OiAxMDAsXG4gICAgYnJpZ2h0bmVzczogMTAwLFxuICB9LFxuICBkZWJ1ZzogZmFsc2UsXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZWN0cm9uXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5vZGU6cGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfYXhpb3NfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfY29tcGFyZV92ZXJzaW9uc19fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9kZWJ1Z19fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9lbGVjdHJvbl9zZXJ2ZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9lbGVjdHJvbl9zdG9yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9naXRodWJfdXJsX3RvX29iamVjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9pcF9hZGRyZXNzX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2pvc2VfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfdXVpZF8xMzQ1X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3hib3hfd2ViYXBpX187IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2RhdGUvbm93XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmNsdWRlc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb21lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3RyaW1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9hc3NpZ25cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9sc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9rZXlzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldC1pbW1lZGlhdGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3VybC1zZWFyY2gtcGFyYW1zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvdXJsXCIpOyIsInZhciBfT2JqZWN0JGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCIpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX1N5bWJvbCR0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qc1wiKTtcbnZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtfU3ltYm9sJHRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB0b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9TeW1ib2wkaXRlcmF0b3IgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiKTtcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgX1N5bWJvbCRpdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gX1N5bWJvbCAmJiBvICE9PSBfU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguQXJyYXkuaXNBcnJheTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZpbHRlcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmb3JFYWNoJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2luY2x1ZGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAna2V5cycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb21lJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvbWUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzb3J0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUubm93Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5EYXRlLm5vdztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmNsdWRlcycpO1xudmFyIHN0cmluZ01ldGhvZCA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL2luY2x1ZGVzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBTdHJpbmdQcm90b3R5cGUgPSBTdHJpbmcucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuaW5jbHVkZXM7XG4gIGlmIChpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluY2x1ZGVzKSkgcmV0dXJuIGFycmF5TWV0aG9kO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnIHx8IGl0ID09PSBTdHJpbmdQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoU3RyaW5nUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBTdHJpbmdQcm90b3R5cGUuaW5jbHVkZXMpKSB7XG4gICAgcmV0dXJuIHN0cmluZ01ldGhvZDtcbiAgfSByZXR1cm4gb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvdHJpbScpO1xuXG52YXIgU3RyaW5nUHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnRyaW07XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N0cmluZycgfHwgaXQgPT09IFN0cmluZ1Byb3RvdHlwZVxuICAgIHx8IChpc1Byb3RvdHlwZU9mKFN0cmluZ1Byb3RvdHlwZSwgaXQpICYmIG93biA9PT0gU3RyaW5nUHJvdG90eXBlLnRyaW0pID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5hc3NpZ247XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYW55Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2Uud2l0aC1yZXNvbHZlcnMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUHJvbWlzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LmludGVyc2VjdGlvbi52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnU3RyaW5nJywgJ2luY2x1ZGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy50cmltJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ1N0cmluZycsICd0cmltJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU3ltYm9sO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ2l0ZXJhdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC9pdGVyYXRvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC90by1wcmltaXRpdmUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmN1c3RvbS1tYXRjaGVyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucmVwbGFjZS1hbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbC9pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzUG9zc2libGVQcm90b3R5cGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnb2JqZWN0JyAmJiAnc2l6ZScgaW4gaXQgJiYgJ2hhcycgaW4gaXQgJiYgJ2FkZCcgaW4gaXQgJiYgJ2RlbGV0ZScgaW4gaXQgJiYgJ2tleXMnIGluIGl0KSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0KSArICcgaXMgbm90IGEgc2V0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBJU19DT05TVFJVQ1RPUiA9IGlzQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYXBwaW5nKSBtYXBmbiA9IGJpbmQobWFwZm4sIGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dCwgdmFsdWU7XG4gIC8vIGlmIHRoZSB0YXJnZXQgaXMgbm90IGl0ZXJhYmxlIG9yIGl0J3MgYW4gYXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBhIHNpbXBsZSBjYXNlXG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhKHRoaXMgPT09ICRBcnJheSAmJiBpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlcmF0b3JNZXRob2QpKSkge1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMoKSA6IFtdO1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIGZvciAoOyEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKGxlbmd0aCkgOiAkQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxudmFyIHNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA4KSB7XG4gICAgLy8gaW5zZXJ0aW9uIHNvcnRcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIGVsZW1lbnQsIGo7XG5cbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgaiA9IGk7XG4gICAgICBlbGVtZW50ID0gYXJyYXlbaV07XG4gICAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgICAgYXJyYXlbal0gPSBhcnJheVstLWpdO1xuICAgICAgfVxuICAgICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBtZXJnZSBzb3J0XG4gICAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICAgIHZhciBsZWZ0ID0gc29ydChhcnJheVNsaWNlKGFycmF5LCAwLCBtaWRkbGUpLCBjb21wYXJlZm4pO1xuICAgIHZhciByaWdodCA9IHNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKTtcbiAgICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICAgIHZhciBybGVuZ3RoID0gcmlnaHQubGVuZ3RoO1xuICAgIHZhciBsaW5kZXggPSAwO1xuICAgIHZhciByaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGxpbmRleCA8IGxsZW5ndGggfHwgcmluZGV4IDwgcmxlbmd0aCkge1xuICAgICAgYXJyYXlbbGluZGV4ICsgcmluZGV4XSA9IChsaW5kZXggPCBsbGVuZ3RoICYmIHJpbmRleCA8IHJsZW5ndGgpXG4gICAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICAgIDogbGluZGV4IDwgbGxlbmd0aCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc29ydDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIG51bUFyZ3MpIHtcbiAgcmV0dXJuIG51bUFyZ3MgPT09IDEgPyBmdW5jdGlvbiAob2JqZWN0LCBhcmcpIHtcbiAgICByZXR1cm4gb2JqZWN0W21ldGhvZE5hbWVdKGFyZyk7XG4gIH0gOiBmdW5jdGlvbiAob2JqZWN0LCBhcmcxLCBhcmcyKSB7XG4gICAgcmV0dXJuIG9iamVjdFttZXRob2ROYW1lXShhcmcxLCBhcmcyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogbnVsbCxcbiAgICAgICAgbGFzdDogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgICAgcmVtb3ZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdGF0ZS5maXJzdCkgc3RhdGUuZmlyc3QgPSBlbnRyeTtcbiAgICAgICAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy5uZXh0ID0gZW50cnk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSsrO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSsrO1xuICAgICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHN0YXRlLmluZGV4W2luZGV4XSA9IGVudHJ5O1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIC8vIGZhc3QgY2FzZVxuICAgICAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICAgICAgdmFyIGVudHJ5O1xuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiBzdGF0ZS5pbmRleFtpbmRleF07XG4gICAgICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgICAgIGZvciAoZW50cnkgPSBzdGF0ZS5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnkubmV4dCkge1xuICAgICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IG51bGw7XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IG51bGw7XG4gICAgICAgIHN0YXRlLmluZGV4ID0gY3JlYXRlKG51bGwpO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiBudWxsXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUsIHdyYXBwZXIsIGNvbW1vbikge1xuICB2YXIgSVNfTUFQID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdNYXAnKSAhPT0gLTE7XG4gIHZhciBJU19XRUFLID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdXZWFrJykgIT09IC0xO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxUaGlzW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3Rba2V5XSA9IHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHBhZFN0YXJ0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wYWQnKS5zdGFydDtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkaXNGaW5pdGUgPSBpc0Zpbml0ZTtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBEYXRlUHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7XG52YXIgbmF0aXZlRGF0ZVRvSVNPU3RyaW5nID0gRGF0ZVByb3RvdHlwZS50b0lTT1N0cmluZztcbnZhciB0aGlzVGltZVZhbHVlID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRUaW1lKTtcbnZhciBnZXRVVENEYXRlID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENEYXRlKTtcbnZhciBnZXRVVENGdWxsWWVhciA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDRnVsbFllYXIpO1xudmFyIGdldFVUQ0hvdXJzID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENIb3Vycyk7XG52YXIgZ2V0VVRDTWlsbGlzZWNvbmRzID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENNaWxsaXNlY29uZHMpO1xudmFyIGdldFVUQ01pbnV0ZXMgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ01pbnV0ZXMpO1xudmFyIGdldFVUQ01vbnRoID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENNb250aCk7XG52YXIgZ2V0VVRDU2Vjb25kcyA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDU2Vjb25kcyk7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLnRvaXNvc3RyaW5nXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGZhaWxzIGhlcmU6XG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVEYXRlVG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuYXRpdmVEYXRlVG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoISRpc0Zpbml0ZSh0aGlzVGltZVZhbHVlKHRoaXMpKSkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgdmFyIGRhdGUgPSB0aGlzO1xuICB2YXIgeWVhciA9IGdldFVUQ0Z1bGxZZWFyKGRhdGUpO1xuICB2YXIgbWlsbGlzZWNvbmRzID0gZ2V0VVRDTWlsbGlzZWNvbmRzKGRhdGUpO1xuICB2YXIgc2lnbiA9IHllYXIgPCAwID8gJy0nIDogeWVhciA+IDk5OTkgPyAnKycgOiAnJztcbiAgcmV0dXJuIHNpZ24gKyBwYWRTdGFydChhYnMoeWVhciksIHNpZ24gPyA2IDogNCwgMCkgK1xuICAgICctJyArIHBhZFN0YXJ0KGdldFVUQ01vbnRoKGRhdGUpICsgMSwgMiwgMCkgK1xuICAgICctJyArIHBhZFN0YXJ0KGdldFVUQ0RhdGUoZGF0ZSksIDIsIDApICtcbiAgICAnVCcgKyBwYWRTdGFydChnZXRVVENIb3VycyhkYXRlKSwgMiwgMCkgK1xuICAgICc6JyArIHBhZFN0YXJ0KGdldFVUQ01pbnV0ZXMoZGF0ZSksIDIsIDApICtcbiAgICAnOicgKyBwYWRTdGFydChnZXRVVENTZWNvbmRzKGRhdGUpLCAyLCAwKSArXG4gICAgJy4nICsgcGFkU3RhcnQobWlsbGlzZWNvbmRzLCAzLCAwKSArXG4gICAgJ1onO1xufSA6IG5hdGl2ZURhdGVUb0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudW1lcmFibGUpIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCB2YWx1ZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVuc2FmZSAmJiB0YXJnZXRba2V5XSkgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBkZWxldGUgcHJvcGVydHkgJyArIHRyeVRvU3RyaW5nKFApICsgJyBvZiAnICsgdHJ5VG9TdHJpbmcoTykpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIGZpcmVmb3ggPSB1c2VyQWdlbnQubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvaSk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFmaXJlZm94ICYmICtmaXJlZm94WzFdO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFVBID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdCh1c2VyQWdlbnQpICYmIHR5cGVvZiBQZWJibGUgIT0gJ3VuZGVmaW5lZCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSAvKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEVOVklST05NRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRU5WSVJPTk1FTlQgPT09ICdOT0RFJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3QodXNlckFnZW50KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4sIERlbm8gLS0gZGV0ZWN0aW9uICovXG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgdXNlckFnZW50U3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5zbGljZSgwLCBzdHJpbmcubGVuZ3RoKSA9PT0gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnQnVuLycpKSByZXR1cm4gJ0JVTic7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdDbG91ZGZsYXJlLVdvcmtlcnMnKSkgcmV0dXJuICdDTE9VREZMQVJFJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ0Rlbm8vJykpIHJldHVybiAnREVOTyc7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdOb2RlLmpzLycpKSByZXR1cm4gJ05PREUnO1xuICBpZiAoZ2xvYmFsVGhpcy5CdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnKSByZXR1cm4gJ0JVTic7XG4gIGlmIChnbG9iYWxUaGlzLkRlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JykgcmV0dXJuICdERU5PJztcbiAgaWYgKGNsYXNzb2YoZ2xvYmFsVGhpcy5wcm9jZXNzKSA9PT0gJ3Byb2Nlc3MnKSByZXR1cm4gJ05PREUnO1xuICBpZiAoZ2xvYmFsVGhpcy53aW5kb3cgJiYgZ2xvYmFsVGhpcy5kb2N1bWVudCkgcmV0dXJuICdCUk9XU0VSJztcbiAgcmV0dXJuICdSRVNUJztcbn0pKCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ2EnKTtcbiAgaWYgKCEoJ3N0YWNrJyBpbiBlcnJvcikpIHJldHVybiB0cnVlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgNykpO1xuICByZXR1cm4gZXJyb3Iuc3RhY2sgIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuLy8gYWRkIGRlYnVnZ2luZyBpbmZvXG5yZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciB3cmFwQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgdmFyIFdyYXBwZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgV3JhcHBlcikge1xuICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiKTtcbiAgICAgIH0gcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiLCBjKTtcbiAgICB9IHJldHVybiBhcHBseShOYXRpdmVDb25zdHJ1Y3RvciwgdGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgV3JhcHBlci5wcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBXcmFwcGVyO1xufTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIFBST1RPID0gb3B0aW9ucy5wcm90bztcblxuICB2YXIgbmF0aXZlU291cmNlID0gR0xPQkFMID8gZ2xvYmFsVGhpcyA6IFNUQVRJQyA/IGdsb2JhbFRoaXNbVEFSR0VUXSA6IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKCFGT1JDRUQgJiYgIVBST1RPICYmIHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSA9PSB0eXBlb2Ygc291cmNlUHJvcGVydHkpIGNvbnRpbnVlO1xuXG4gICAgLy8gYmluZCBtZXRob2RzIHRvIGdsb2JhbCBmb3IgY2FsbGluZyBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgaWYgKG9wdGlvbnMuYmluZCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoc291cmNlUHJvcGVydHksIGdsb2JhbFRoaXMpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IE5BVElWRV9CSU5EID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuICAvLyBOYXNob3JuIGJ1ZzpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEyOFxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTMwXG4gIGlmIChjbGFzc29mUmF3KGZuKSA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIHVuY3VycnlUaGlzKGZuKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IsIE1FVEhPRCkge1xuICB2YXIgTmFtZXNwYWNlID0gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbiAgdmFyIHB1cmVNZXRob2QgPSBOYW1lc3BhY2UgJiYgTmFtZXNwYWNlW01FVEhPRF07XG4gIGlmIChwdXJlTWV0aG9kKSByZXR1cm4gcHVyZU1ldGhvZDtcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsVGhpc1tDT05TVFJVQ1RPUl07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBOYXRpdmVQcm90b3R5cGUgJiYgTmF0aXZlUHJvdG90eXBlW01FVEhPRF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodmFyaWFibGUpID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBgR2V0SXRlcmF0b3JEaXJlY3Qob2JqKWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVycy8jc2VjLWdldGl0ZXJhdG9yZGlyZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICBpdGVyYXRvcjogb2JqLFxuICAgIG5leHQ6IG9iai5uZXh0LFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyIElOVkFMSURfU0laRSA9ICdJbnZhbGlkIHNpemUnO1xudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgU2V0UmVjb3JkID0gZnVuY3Rpb24gKHNldCwgaW50U2l6ZSkge1xuICB0aGlzLnNldCA9IHNldDtcbiAgdGhpcy5zaXplID0gbWF4KGludFNpemUsIDApO1xuICB0aGlzLmhhcyA9IGFDYWxsYWJsZShzZXQuaGFzKTtcbiAgdGhpcy5rZXlzID0gYUNhbGxhYmxlKHNldC5rZXlzKTtcbn07XG5cblNldFJlY29yZC5wcm90b3R5cGUgPSB7XG4gIGdldEl0ZXJhdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEl0ZXJhdG9yRGlyZWN0KGFuT2JqZWN0KGNhbGwodGhpcy5rZXlzLCB0aGlzLnNldCkpKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBjYWxsKHRoaXMuaGFzLCB0aGlzLnNldCwgaXQpO1xuICB9XG59O1xuXG4vLyBgR2V0U2V0UmVjb3JkYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jc2VjLWdldHNldHJlY29yZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGFuT2JqZWN0KG9iaik7XG4gIHZhciBudW1TaXplID0gK29iai5zaXplO1xuICAvLyBOT1RFOiBJZiBzaXplIGlzIHVuZGVmaW5lZCwgdGhlbiBudW1TaXplIHdpbGwgYmUgTmFOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1TaXplICE9PSBudW1TaXplKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihJTlZBTElEX1NJWkUpO1xuICB2YXIgaW50U2l6ZSA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtU2l6ZSk7XG4gIGlmIChpbnRTaXplIDwgMCkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHJldHVybiBuZXcgU2V0UmVjb3JkKG9iaiwgaW50U2l6ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxuLy8gYEluc3RhbGxFcnJvckNhdXNlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1lcnJvci1jYXVzZS8jc2VjLWVycm9yb2JqZWN0cy1pbnN0YWxsLWVycm9yLWNhdXNlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBvcHRpb25zKSB7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSAmJiAnY2F1c2UnIGluIG9wdGlvbnMpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywgJ2NhdXNlJywgb3B0aW9ucy5jYXVzZSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBbXSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT09ICdSZWdFeHAnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVjb3JkLCBmbiwgSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQpIHtcbiAgdmFyIGl0ZXJhdG9yID0gSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQgPyByZWNvcmQgOiByZWNvcmQuaXRlcmF0b3I7XG4gIHZhciBuZXh0ID0gcmVjb3JkLm5leHQ7XG4gIHZhciBzdGVwLCByZXN1bHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGZuKHN0ZXAudmFsdWUpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzYWZlR2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zYWZlLWdldC1idWlsdC1pbicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MtcGViYmxlJyk7XG52YXIgSVNfV0VCT1NfV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLXdlYm9zLXdlYmtpdCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbFRoaXMuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWxUaGlzLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbFRoaXMuUHJvbWlzZTtcbnZhciBtaWNyb3Rhc2sgPSBzYWZlR2V0QnVpbHRJbigncXVldWVNaWNyb3Rhc2snKTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbFRoaXMpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIG1pY3JvdGFzayA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICghcXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgcXVldWUuYWRkKGZuKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb3Rhc2s7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcmVnZXhwJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNSZWdFeHAoaXQpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnNcIik7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnYXNzaWduIGRldGVjdGlvbicpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9PSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9PSBhbHBoYWJldDtcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG4gIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpbmRleCkge1xuICAgIHZhciBTID0gSW5kZXhlZE9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KG9iamVjdEtleXMoUyksIGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlLCBTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtYXNzaWdubWVudCAtLSBhdm9pZCBtZW1vcnkgbGVha1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsO1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgcmVxdWlyZU9iamVjdENvZXJjaWJsZShPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmICghaXNPYmplY3QoTykpIHJldHVybiBPO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEVOVklST05NRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWxUaGlzLlByb21pc2VSZWplY3Rpb25FdmVudCk7XG5cbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IGlzRm9yY2VkKCdQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICB2YXIgUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgPSBpbnNwZWN0U291cmNlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIHZhciBHTE9CQUxfQ09SRV9KU19QUk9NSVNFID0gUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgIT09IFN0cmluZyhOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAvLyBXZSBuZWVkIFByb21pc2UjeyBjYXRjaCwgZmluYWxseSB9IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddKSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmICghVjhfVkVSU0lPTiB8fCBWOF9WRVJTSU9OIDwgNTEgfHwgIS9uYXRpdmUgY29kZS8udGVzdChQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSkpIHtcbiAgICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gbmV3IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKDEpOyB9KTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gICAgfTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBwcm9taXNlLmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgICBTVUJDTEFTU0lORyA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gICAgaWYgKCFTVUJDTEFTU0lORykgcmV0dXJuIHRydWU7XG4gIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgfSByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgKEVOVklST05NRU5UID09PSAnQlJPV1NFUicgfHwgRU5WSVJPTk1FTlQgPT09ICdERU5PJykgJiYgIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ09OU1RSVUNUT1I6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLFxuICBSRUpFQ1RJT05fRVZFTlQ6IE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCxcbiAgU1VCQ0xBU1NJTkc6IFNVQkNMQVNTSU5HXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzLlByb21pc2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIHx8ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5hbGwoaXRlcmFibGUpLnRoZW4odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGVhZCA9IG51bGw7XG4gIHRoaXMudGFpbCA9IG51bGw7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgZW50cnkgPSB7IGl0ZW06IGl0ZW0sIG5leHQ6IG51bGwgfTtcbiAgICB2YXIgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBpZiAodGFpbCkgdGFpbC5uZXh0ID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIEF2b2lkIE5vZGVKUyBleHBlcmltZW50YWwgd2FybmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIURFU0NSSVBUT1JTKSByZXR1cm4gZ2xvYmFsVGhpc1tuYW1lXTtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsVGhpcywgbmFtZSk7XG4gIHJldHVybiBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBFTlZJUk9OTUVOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudCcpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbFRoaXMuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOVklST05NRU5UID09PSAnQlVOJyAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbFRoaXMuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG4gIGl0ZXJhdGUoc2V0LCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICBlbHNlIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgY2FsbGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGxlcicpO1xuXG52YXIgU2V0ID0gZ2V0QnVpbHRJbignU2V0Jyk7XG52YXIgU2V0UHJvdG90eXBlID0gU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFNldDogU2V0LFxuICBhZGQ6IGNhbGxlcignYWRkJywgMSksXG4gIGhhczogY2FsbGVyKCdoYXMnLCAxKSxcbiAgcmVtb3ZlOiBjYWxsZXIoJ2RlbGV0ZScsIDEpLFxuICBwcm90bzogU2V0UHJvdG90eXBlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG5cbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSB7XG4gICAgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGhhcyhPLCBlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGlzam9pbnRGcm9tKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3Vic2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdWJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXRlcmF0ZShPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghb3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdXBlcnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPCBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCwgZm4sIGludGVycnVwdGlibGUpIHtcbiAgcmV0dXJuIGludGVycnVwdGlibGUgPyBpdGVyYXRlU2ltcGxlKHNldC5rZXlzKCksIGZuLCB0cnVlKSA6IHNldC5mb3JFYWNoKGZuKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gc2V0LnNpemU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN5bW1ldHJpY0RpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgICBlbHNlIGFkZChyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdCAmJiBpdC5wcm90b3R5cGU7XG4gIGlmICh0YXJnZXQpIHtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICAgIH1cbiAgICBpZiAoU0VUX01FVEhPRCAmJiAhVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCAndG9TdHJpbmcnLCB0b1N0cmluZyk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBhZGQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5hZGQ7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bmlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjEnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjEvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYFNwZWNpZXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IGlzTnVsbE9yVW5kZWZpbmVkKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPyBkZWZhdWx0Q29uc3RydWN0b3IgOiBhQ29uc3RydWN0b3IoUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciAkcmVwZWF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgcmVwZWF0ID0gdW5jdXJyeVRoaXMoJHJlcGVhdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBwYWRTdGFydCwgcGFkRW5kIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfRU5EKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIG1heExlbmd0aCwgZmlsbFN0cmluZykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICAgIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IHRvU3RyaW5nKGZpbGxTdHJpbmcpO1xuICAgIHZhciBmaWxsTGVuLCBzdHJpbmdGaWxsZXI7XG4gICAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PT0gJycpIHJldHVybiBTO1xuICAgIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gICAgc3RyaW5nRmlsbGVyID0gcmVwZWF0KGZpbGxTdHIsIGNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gICAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdTbGljZShzdHJpbmdGaWxsZXIsIDAsIGZpbGxMZW4pO1xuICAgIHJldHVybiBJU19FTkQgPyBTICsgc3RyaW5nRmlsbGVyIDogc3RyaW5nRmlsbGVyICsgUztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5wYWRzdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUucGFkRW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZGVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcy9ibG9iL21hc3Rlci9wdW55Y29kZS5qc1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgbWF4SW50ID0gMjE0NzQ4MzY0NzsgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxudmFyIGJhc2UgPSAzNjtcbnZhciB0TWluID0gMTtcbnZhciB0TWF4ID0gMjY7XG52YXIgc2tldyA9IDM4O1xudmFyIGRhbXAgPSA3MDA7XG52YXIgaW5pdGlhbEJpYXMgPSA3MjtcbnZhciBpbml0aWFsTiA9IDEyODsgLy8gMHg4MFxudmFyIGRlbGltaXRlciA9ICctJzsgLy8gJ1xceDJEJ1xudmFyIHJlZ2V4Tm9uQVNDSUkgPSAvW15cXDAtXFx1MDA3RV0vOyAvLyBub24tQVNDSUkgY2hhcnNcbnZhciByZWdleFNlcGFyYXRvcnMgPSAvWy5cXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2c7IC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcbnZhciBPVkVSRkxPV19FUlJPUiA9ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2Vzcyc7XG52YXIgYmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluO1xuXG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhyZWdleFNlcGFyYXRvcnMuZXhlYyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xudmFyIHRvTG93ZXJDYXNlID0gdW5jdXJyeVRoaXMoJycudG9Mb3dlckNhc2UpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcbiAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG4gKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcbiAqIG1hdGNoaW5nIFVURi0xNi5cbiAqL1xudmFyIHVjczJkZWNvZGUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgdmFyIGNvdW50ZXIgPSAwO1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBjaGFyQ29kZUF0KHN0cmluZywgY291bnRlcisrKTtcbiAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAvLyBJdCdzIGEgaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyLlxuICAgICAgdmFyIGV4dHJhID0gY2hhckNvZGVBdChzdHJpbmcsIGNvdW50ZXIrKyk7XG4gICAgICBpZiAoKGV4dHJhICYgMHhGQzAwKSA9PT0gMHhEQzAwKSB7IC8vIExvdyBzdXJyb2dhdGUuXG4gICAgICAgIHB1c2gob3V0cHV0LCAoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG4gICAgICAgIHB1c2gob3V0cHV0LCB2YWx1ZSk7XG4gICAgICAgIGNvdW50ZXItLTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHVzaChvdXRwdXQsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuICovXG52YXIgZGlnaXRUb0Jhc2ljID0gZnVuY3Rpb24gKGRpZ2l0KSB7XG4gIC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG4gIC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuICByZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpO1xufTtcblxuLyoqXG4gKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcbiAqL1xudmFyIGFkYXB0ID0gZnVuY3Rpb24gKGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuICB2YXIgayA9IDA7XG4gIGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG4gIGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcbiAgd2hpbGUgKGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMSkge1xuICAgIGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcbiAgICBrICs9IGJhc2U7XG4gIH1cbiAgcmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG4gKiBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICovXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcblxuICAvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzLlxuICBpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG4gIC8vIENhY2hlIHRoZSBsZW5ndGguXG4gIHZhciBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzdGF0ZS5cbiAgdmFyIG4gPSBpbml0aWFsTjtcbiAgdmFyIGRlbHRhID0gMDtcbiAgdmFyIGJpYXMgPSBpbml0aWFsQmlhcztcbiAgdmFyIGksIGN1cnJlbnRWYWx1ZTtcblxuICAvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzLlxuICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICBpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuICAgICAgcHVzaChvdXRwdXQsIGZyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoOyAvLyBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG4gIHZhciBoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoOyAvLyBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblxuICAvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyB3aXRoIGEgZGVsaW1pdGVyIHVubGVzcyBpdCdzIGVtcHR5LlxuICBpZiAoYmFzaWNMZW5ndGgpIHtcbiAgICBwdXNoKG91dHB1dCwgZGVsaW1pdGVyKTtcbiAgfVxuXG4gIC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcbiAgd2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcbiAgICAvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0IGxhcmdlciBvbmU6XG4gICAgdmFyIG0gPSBtYXhJbnQ7XG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG4gICAgICAgIG0gPSBjdXJyZW50VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LCBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdy5cbiAgICB2YXIgaGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuICAgIGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG4gICAgICB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoT1ZFUkZMT1dfRVJST1IpO1xuICAgIH1cblxuICAgIGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG4gICAgbiA9IG07XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuICAgICAgICB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoT1ZFUkZMT1dfRVJST1IpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gbikge1xuICAgICAgICAvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlci5cbiAgICAgICAgdmFyIHEgPSBkZWx0YTtcbiAgICAgICAgdmFyIGsgPSBiYXNlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHZhciB0ID0gayA8PSBiaWFzID8gdE1pbiA6IGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXM7XG4gICAgICAgICAgaWYgKHEgPCB0KSBicmVhaztcbiAgICAgICAgICB2YXIgcU1pbnVzVCA9IHEgLSB0O1xuICAgICAgICAgIHZhciBiYXNlTWludXNUID0gYmFzZSAtIHQ7XG4gICAgICAgICAgcHVzaChvdXRwdXQsIGZyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNUKSkpO1xuICAgICAgICAgIHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG4gICAgICAgICAgayArPSBiYXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVzaChvdXRwdXQsIGZyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSkpKTtcbiAgICAgICAgYmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09PSBiYXNpY0xlbmd0aCk7XG4gICAgICAgIGRlbHRhID0gMDtcbiAgICAgICAgaGFuZGxlZENQQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWx0YSsrO1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gam9pbihvdXRwdXQsICcnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBlbmNvZGVkID0gW107XG4gIHZhciBsYWJlbHMgPSBzcGxpdChyZXBsYWNlKHRvTG93ZXJDYXNlKGlucHV0KSwgcmVnZXhTZXBhcmF0b3JzLCAnXFx1MDAyRScpLCAnLicpO1xuICB2YXIgaSwgbGFiZWw7XG4gIGZvciAoaSA9IDA7IGkgPCBsYWJlbHMubGVuZ3RoOyBpKyspIHtcbiAgICBsYWJlbCA9IGxhYmVsc1tpXTtcbiAgICBwdXNoKGVuY29kZWQsIGV4ZWMocmVnZXhOb25BU0NJSSwgbGFiZWwpID8gJ3huLS0nICsgZW5jb2RlKGxhYmVsKSA6IGxhYmVsKTtcbiAgfVxuICByZXR1cm4gam9pbihlbmNvZGVkLCAnLicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGVhdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09PSBJbmZpbml0eSkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKCdXcm9uZyBudW1iZXIgb2YgcmVwZXRpdGlvbnMnKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlc3VsdCArPSBzdHI7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5QUk9QRVI7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpXG4gICAgICB8fCBub25bTUVUSE9EX05BTUVdKCkgIT09IG5vblxuICAgICAgfHwgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG52YXIga2V5Rm9yID0gU3ltYm9sLmtleUZvcjtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2wgfHwgZnVuY3Rpb24gaXNSZWdpc3RlcmVkU3ltYm9sKHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGtleUZvcih0aGlzU3ltYm9sVmFsdWUodmFsdWUpKSAhPT0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHNhZmUgKi9cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJiAhIVN5bWJvbFsnZm9yJ10gJiYgISFTeW1ib2wua2V5Rm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlJyk7XG5cbnZhciBzZXQgPSBnbG9iYWxUaGlzLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbFRoaXMuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEaXNwYXRjaCA9IGdsb2JhbFRoaXMuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWxUaGlzLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsVGhpcy5NZXNzYWdlQ2hhbm5lbDtcbnZhciBTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyICRsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbmZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gICRsb2NhdGlvbiA9IGdsb2JhbFRoaXMubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKFN0cmluZyhpZCksICRsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyAkbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGhhbmRsZXIpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChJU19OT0RFKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGV2ZW50TGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbFRoaXMucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyAmJlxuICAgICRsb2NhdGlvbiAmJiAkbG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICAhZmFpbHMoZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcilcbiAgKSB7XG4gICAgZGVmZXIgPSBnbG9iYWxQb3N0TWVzc2FnZURlZmVyO1xuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcmVsYXRpdmUtdXJsLXN0eWxlIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciB1cmwgPSBuZXcgVVJMKCdiP2E9MSZiPTImYz0zJywgJ2h0dHBzOi8vYScpO1xuICB2YXIgcGFyYW1zID0gdXJsLnNlYXJjaFBhcmFtcztcbiAgdmFyIHBhcmFtczIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCdhPTEmYT0yJmI9MycpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHVybC5wYXRobmFtZSA9ICdjJTIwZCc7XG4gIHBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgcGFyYW1zWydkZWxldGUnXSgnYicpO1xuICAgIHJlc3VsdCArPSBrZXkgKyB2YWx1ZTtcbiAgfSk7XG4gIHBhcmFtczJbJ2RlbGV0ZSddKCdhJywgMik7XG4gIC8vIGB1bmRlZmluZWRgIGNhc2UgaXMgYSBDaHJvbWl1bSAxMTcgYnVnXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0MjIyXG4gIHBhcmFtczJbJ2RlbGV0ZSddKCdiJywgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIChJU19QVVJFICYmICghdXJsLnRvSlNPTiB8fCAhcGFyYW1zMi5oYXMoJ2EnLCAxKSB8fCBwYXJhbXMyLmhhcygnYScsIDIpIHx8ICFwYXJhbXMyLmhhcygnYScsIHVuZGVmaW5lZCkgfHwgcGFyYW1zMi5oYXMoJ2InKSkpXG4gICAgfHwgKCFwYXJhbXMuc2l6ZSAmJiAoSVNfUFVSRSB8fCAhREVTQ1JJUFRPUlMpKVxuICAgIHx8ICFwYXJhbXMuc29ydFxuICAgIHx8IHVybC5ocmVmICE9PSAnaHR0cHM6Ly9hL2MlMjBkP2E9MSZjPTMnXG4gICAgfHwgcGFyYW1zLmdldCgnYycpICE9PSAnMydcbiAgICB8fCBTdHJpbmcobmV3IFVSTFNlYXJjaFBhcmFtcygnP2E9MScpKSAhPT0gJ2E9MSdcbiAgICB8fCAhcGFyYW1zW0lURVJBVE9SXVxuICAgIC8vIHRocm93cyBpbiBFZGdlXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly9hQGInKS51c2VybmFtZSAhPT0gJ2EnXG4gICAgfHwgbmV3IFVSTFNlYXJjaFBhcmFtcyhuZXcgVVJMU2VhcmNoUGFyYW1zKCdhPWInKSkuZ2V0KCdhJykgIT09ICdiJ1xuICAgIC8vIG5vdCBwdW55Y29kZWQgaW4gRWRnZVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8v0YLQtdGB0YInKS5ob3N0ICE9PSAneG4tLWUxYXliYydcbiAgICAvLyBub3QgZXNjYXBlZCBpbiBDaHJvbWUgNjItXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly9hI9CxJykuaGFzaCAhPT0gJyMlRDAlQjEnXG4gICAgLy8gZmFpbHMgaW4gQ2hyb21lIDY2LVxuICAgIHx8IHJlc3VsdCAhPT0gJ2ExYzMnXG4gICAgLy8gdGhyb3dzIGluIFNhZmFyaVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8veCcsIHVuZGVmaW5lZCkuaG9zdCAhPT0gJ3gnO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgaXNJbnN0YW5jZSA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpO1xuICB2YXIgdGhhdDtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyAkRXJyb3IoKSwgaXNJbnN0YW5jZSA/IGdldFByb3RvdHlwZU9mKHRoaXMpIDogQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQgPSBpc0luc3RhbmNlID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsIFRPX1NUUklOR19UQUcsICdFcnJvcicpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yU3RhY2sodGhhdCwgJEFnZ3JlZ2F0ZUVycm9yLCB0aGF0LnN0YWNrLCAxKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBhcmd1bWVudHNbMl0pO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoJEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDIgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3RvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluY2x1ZGVzO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gRkY5OSsgYnVnXG52YXIgQlJPS0VOX09OX1NQQVJTRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1pbmNsdWRlcyAtLSBkZXRlY3Rpb25cbiAgcmV0dXJuICFBcnJheSgxKS5pbmNsdWRlcygpO1xufSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJST0tFTl9PTl9TUEFSU0UgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnaW5jbHVkZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxuLy8gYEFycmF5LmlzQXJyYXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5pc2FycmF5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNBcnJheTogaXNBcnJheVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLnNvbWU7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29tZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1mZi12ZXJzaW9uJyk7XG52YXIgSUVfT1JfRURHRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pZS1vci1lZGdlJyk7XG52YXIgVjggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC13ZWJraXQtdmVyc2lvbicpO1xuXG52YXIgdGVzdCA9IFtdO1xudmFyIG5hdGl2ZVNvcnQgPSB1bmN1cnJ5VGhpcyh0ZXN0LnNvcnQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyh0ZXN0LnB1c2gpO1xuXG4vLyBJRTgtXG52YXIgRkFJTFNfT05fVU5ERUZJTkVEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pO1xuLy8gVjggYnVnXG52YXIgRkFJTFNfT05fTlVMTCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KG51bGwpO1xufSk7XG4vLyBPbGQgV2ViS2l0XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvcnQnKTtcblxudmFyIFNUQUJMRV9TT1JUID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZmVhdHVyZSBkZXRlY3Rpb24gY2FuIGJlIHRvbyBzbG93LCBzbyBjaGVjayBlbmdpbmVzIHZlcnNpb25zXG4gIGlmIChWOCkgcmV0dXJuIFY4IDwgNzA7XG4gIGlmIChGRiAmJiBGRiA+IDMpIHJldHVybjtcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAzO1xuXG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNvZGUsIGNociwgdmFsdWUsIGluZGV4O1xuXG4gIC8vIGdlbmVyYXRlIGFuIGFycmF5IHdpdGggbW9yZSA1MTIgZWxlbWVudHMgKENoYWtyYSBhbmQgb2xkIFY4IGZhaWxzIG9ubHkgaW4gdGhpcyBjYXNlKVxuICBmb3IgKGNvZGUgPSA2NTsgY29kZSA8IDc2OyBjb2RlKyspIHtcbiAgICBjaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIDY2OiBjYXNlIDY5OiBjYXNlIDcwOiBjYXNlIDcyOiB2YWx1ZSA9IDM7IGJyZWFrO1xuICAgICAgY2FzZSA2ODogY2FzZSA3MTogdmFsdWUgPSA0OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHZhbHVlID0gMjtcbiAgICB9XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0NzsgaW5kZXgrKykge1xuICAgICAgdGVzdC5wdXNoKHsgazogY2hyICsgaW5kZXgsIHY6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRlc3Quc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi52IC0gYS52OyB9KTtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0ZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IHRlc3RbaW5kZXhdLmsuY2hhckF0KDApO1xuICAgIGlmIChyZXN1bHQuY2hhckF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gY2hyKSByZXN1bHQgKz0gY2hyO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gJ0RHQkVGSEFDSUpLJztcbn0pO1xuXG52YXIgRk9SQ0VEID0gRkFJTFNfT05fVU5ERUZJTkVEIHx8ICFGQUlMU19PTl9OVUxMIHx8ICFTVFJJQ1RfTUVUSE9EIHx8ICFTVEFCTEVfU09SVDtcblxudmFyIGdldFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGNvbXBhcmVmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gK2NvbXBhcmVmbih4LCB5KSB8fCAwO1xuICAgIHJldHVybiB0b1N0cmluZyh4KSA+IHRvU3RyaW5nKHkpID8gMSA6IC0xO1xuICB9O1xufTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSBhQ2FsbGFibGUoY29tcGFyZWZuKTtcblxuICAgIHZhciBhcnJheSA9IHRvT2JqZWN0KHRoaXMpO1xuXG4gICAgaWYgKFNUQUJMRV9TT1JUKSByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWQgPyBuYXRpdmVTb3J0KGFycmF5KSA6IG5hdGl2ZVNvcnQoYXJyYXksIGNvbXBhcmVmbik7XG5cbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgYXJyYXlMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShhcnJheSk7XG4gICAgdmFyIGl0ZW1zTGVuZ3RoLCBpbmRleDtcblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoaW5kZXggaW4gYXJyYXkpIHB1c2goaXRlbXMsIGFycmF5W2luZGV4XSk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxTb3J0KGl0ZW1zLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcblxuICAgIGl0ZW1zTGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlbXMpO1xuICAgIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IGl0ZW1zTGVuZ3RoKSBhcnJheVtpbmRleF0gPSBpdGVtc1tpbmRleCsrXTtcbiAgICB3aGlsZSAoaW5kZXggPCBhcnJheUxlbmd0aCkgZGVsZXRlUHJvcGVydHlPclRocm93KGFycmF5LCBpbmRleCsrKTtcblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRGF0ZSA9IERhdGU7XG52YXIgdGhpc1RpbWVWYWx1ZSA9IHVuY3VycnlUaGlzKCREYXRlLnByb3RvdHlwZS5nZXRUaW1lKTtcblxuLy8gYERhdGUubm93YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5ub3dcbiQoeyB0YXJnZXQ6ICdEYXRlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIG5vdzogZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiB0aGlzVGltZVZhbHVlKG5ldyAkRGF0ZSgpKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kYXRlLXRvLWlzby1zdHJpbmcnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE5hTikudG9KU09OKCkgIT09IG51bGxcbiAgICB8fCBjYWxsKERhdGUucHJvdG90eXBlLnRvSlNPTiwgeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUudG9KU09OYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9qc29uXG4kKHsgdGFyZ2V0OiAnRGF0ZScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTywgJ251bWJlcicpO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOlxuICAgICAgKCEoJ3RvSVNPU3RyaW5nJyBpbiBPKSAmJiBjbGFzc29mKE8pID09PSAnRGF0ZScpID8gY2FsbCh0b0lTT1N0cmluZywgTykgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWxUaGlzLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBrZXksIGRlc2NyaXB0b3I7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5ID0ga2V5c1tpbmRleCsrXSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxzZXR0bGVkXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGxTZXR0bGVkOiBmdW5jdGlvbiBhbGxTZXR0bGVkKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGVycm9yIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UuYWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxudmFyIFBST01JU0VfQU5ZX0VSUk9SID0gJ05vIG9uZSBwcm9taXNlIHJlc29sdmVkJztcblxuLy8gYFByb21pc2UuYW55YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFueTogZnVuY3Rpb24gYW55KGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBBZ2dyZWdhdGVFcnJvciA9IGdldEJ1aWx0SW4oJ0FnZ3JlZ2F0ZUVycm9yJyk7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgdmFyIGFscmVhZHlSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeVJlamVjdGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yc1tpbmRleF0gPSBlcnJvcjtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5DT05TVFJVQ1RPUjtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uUkVKRUNUSU9OX0VWRU5UO1xudmFyIE5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlNVQkNMQVNTSU5HO1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3I7XG52YXIgUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xuXG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWxUaGlzLmRpc3BhdGNoRXZlbnQpO1xudmFyIFVOSEFORExFRF9SRUpFQ1RJT04gPSAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnZhciBSRUpFQ1RJT05fSEFORExFRCA9ICdyZWplY3Rpb25oYW5kbGVkJztcbnZhciBQRU5ESU5HID0gMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcbnZhciBIQU5ETEVEID0gMTtcbnZhciBVTkhBTkRMRUQgPSAyO1xuXG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgY2FsbFJlYWN0aW9uID0gZnVuY3Rpb24gKHJlYWN0aW9uLCBzdGF0ZSkge1xuICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT09IEZVTEZJTExFRDtcbiAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gIHRyeSB7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICBjYWxsKHRoZW4sIHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgIHJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbnZhciBub3RpZnkgPSBmdW5jdGlvbiAoc3RhdGUsIGlzUmVqZWN0KSB7XG4gIGlmIChzdGF0ZS5ub3RpZmllZCkgcmV0dXJuO1xuICBzdGF0ZS5ub3RpZmllZCA9IHRydWU7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlYWN0aW9ucyA9IHN0YXRlLnJlYWN0aW9ucztcbiAgICB2YXIgcmVhY3Rpb247XG4gICAgd2hpbGUgKHJlYWN0aW9uID0gcmVhY3Rpb25zLmdldCgpKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQoc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsVGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFRoaXNbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWxUaGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWxUaGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcbiAgfTtcblxuICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICBJbnRlcm5hbC5wcm90b3R5cGUgPSBkZWZpbmVCdWlsdEluKFByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgcmVhY3Rpb24uZmFpbCA9IGlzQ2FsbGFibGUob25SZWplY3RlZCkgJiYgb25SZWplY3RlZDtcbiAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHN0YXRlLnN0YXRlID09PSBQRU5ESU5HKSBzdGF0ZS5yZWFjdGlvbnMuYWRkKHJlYWN0aW9uKTtcbiAgICBlbHNlIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgfSk7XG5cbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG5cbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGUudGhlbjtcblxuICAgIGlmICghTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcpIHtcbiAgICAgIC8vIG1ha2UgYFByb21pc2UjdGhlbmAgcmV0dXJuIGEgcG9seWZpbGxlZCBgUHJvbWlzZWAgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gU2FmYXJpIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwODI5XG52YXIgTk9OX0dFTkVSSUMgPSAhIU5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXRoZW5hYmxlIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXS5jYWxsKHsgdGhlbjogZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9IH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmZpbmFsbHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5maW5hbGx5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IE5PTl9HRU5FUklDIH0sIHtcbiAgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgZ2V0QnVpbHRJbignUHJvbWlzZScpKTtcbiAgICB2YXIgaXNGdW5jdGlvbiA9IGlzQ2FsbGFibGUob25GaW5hbGx5KTtcbiAgICByZXR1cm4gdGhpcy50aGVuKFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHksXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5XG4gICAgKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2ZpbmFsbHlgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnZmluYWxseSddO1xuICBpZiAoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdmaW5hbGx5JywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2gnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UucmVqZWN0Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UucmFjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmFjZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIHZhciBjYXBhYmlsaXR5UmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgY2FwYWJpbGl0eVJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcblxudmFyIFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG52YXIgQ0hFQ0tfV1JBUFBFUiA9IElTX1BVUkUgJiYgIUZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDSEVDS19XUkFQUEVSICYmIHRoaXMgPT09IFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbi8vIGBQcm9taXNlLndpdGhSZXNvbHZlcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS13aXRoLXJlc29sdmVyc1xuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgd2l0aFJlc29sdmVyczogZnVuY3Rpb24gd2l0aFJlc29sdmVycygpIHtcbiAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9taXNlOiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlLFxuICAgICAgcmVzb2x2ZTogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSxcbiAgICAgIHJlamVjdDogcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0XG4gICAgfTtcbiAgfVxufSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2RpZmZlcmVuY2UnKSB9LCB7XG4gIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2Vcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcnNlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxudmFyIElOQ09SUkVDVCA9ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpbnRlcnNlY3Rpb24nKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBlcy9uby1zZXQgLS0gdGVzdGluZ1xuICByZXR1cm4gU3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwgMiwgM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLCAyXSkpKSkgIT09ICczLDInO1xufSk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVCB9LCB7XG4gIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzRGlzam9pbnRGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc0Rpc2pvaW50RnJvbScpIH0sIHtcbiAgaXNEaXNqb2ludEZyb206IGlzRGlzam9pbnRGcm9tXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3Vic2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1YnNldE9mJykgfSwge1xuICBpc1N1YnNldE9mOiBpc1N1YnNldE9mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3VwZXJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1cGVyc2V0T2YnKSB9LCB7XG4gIGlzU3VwZXJzZXRPZjogaXNTdXBlcnNldE9mXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3RvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc3ltbWV0cmljRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnc3ltbWV0cmljRGlmZmVyZW5jZScpIH0sIHtcbiAgc3ltbWV0cmljRGlmZmVyZW5jZTogc3ltbWV0cmljRGlmZmVyZW5jZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdW5pb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3VuaW9uJykgfSwge1xuICB1bmlvbjogdW5pb25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zdHJpbmctZnJvbWNvZGVwb2ludCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG52YXIgSU5DT1JSRUNUX0xFTkdUSCA9ICEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9PSAxO1xuXG4vLyBgU3RyaW5nLmZyb21Db2RlUG9pbnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcuZnJvbWNvZGVwb2ludFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHN0YXQ6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IElOQ09SUkVDVF9MRU5HVEggfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBGRkZGKSAhPT0gY29kZSkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIGVsZW1lbnRzW2ldID0gY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCwgY29kZSAlIDB4NDAwICsgMHhEQzAwKTtcbiAgICB9IHJldHVybiBqb2luKGVsZW1lbnRzLCAnJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgbm90QVJlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3QtYS1yZWdleHAnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNvcnJlY3RJc1JlZ0V4cExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljJyk7XG5cbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFjb3JyZWN0SXNSZWdFeHBMb2dpYygnaW5jbHVkZXMnKSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+c3RyaW5nSW5kZXhPZihcbiAgICAgIHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpLFxuICAgICAgdG9TdHJpbmcobm90QVJlZ0V4cChzZWFyY2hTdHJpbmcpKSxcbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ1RyaW1NZXRob2QoJ3RyaW0nKSB9LCB7XG4gIHRyaW06IGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWxUaGlzLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbFRoaXMuUU9iamVjdDtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBmYWxsYmFja0RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59O1xuXG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPT0gNztcbn0pID8gZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5hdGl2ZU9iamVjdENyZWF0ZShudWxsKSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBjYWxsKG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLCB0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywgUCkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzT3duKHRoaXMsIFApIHx8ICFoYXNPd24oQWxsU3ltYm9scywgUCkgfHwgaGFzT3duKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdXG4gICAgPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhKGhhc093bihpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSkgcHVzaChyZXN1bHQsIGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiAoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICBwdXNoKHJlc3VsdCwgQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAoaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciAkdGhpcyA9IHRoaXMgPT09IHVuZGVmaW5lZCA/IGdsb2JhbFRoaXMgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmhhc0luc3RhbmNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaGFzaW5zdGFuY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaEFsbGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoYWxsXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucmVwbGFjZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnJlcGxhY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zZWFyY2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zZWFyY2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc2VhcmNoJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwZWNpZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGVjaWVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BsaXRgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGxpdFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGxpdCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdldEJ1aWx0SW4oJ1N5bWJvbCcpLCAnU3ltYm9sJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnVuc2NvcGFibGVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudW5zY29wYWJsZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIE1FVEFEQVRBID0gd2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vLyBGdW5jdGlvbi5wcm90b3R5cGVbQEBtZXRhZGF0YV1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuaWYgKEZ1bmN0aW9uUHJvdG90eXBlW01FVEFEQVRBXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBNRVRBREFUQSwge1xuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hc3luYy1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jRGlzcG9zZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5jdXN0b21NYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdjdXN0b21NYXRjaGVyJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2Rpc3Bvc2UnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZGAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBuYW1lOiAnaXNSZWdpc3RlcmVkU3ltYm9sJyB9LCB7XG4gIGlzUmVnaXN0ZXJlZDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpc1dlbGxLbm93blN5bWJvbDogaXNXZWxsS25vd25TeW1ib2xcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hlcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hlcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFLZXlgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGFLZXknKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3JzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlQWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgY2xlYXJJbW1lZGlhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLmNsZWFyO1xuXG4vLyBgY2xlYXJJbW1lZGlhdGVgIG1ldGhvZFxuLy8gaHR0cDovL3czYy5naXRodWIuaW8vc2V0SW1tZWRpYXRlLyNzaS1jbGVhckltbWVkaWF0ZVxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiBnbG9iYWxUaGlzLmNsZWFySW1tZWRpYXRlICE9PSBjbGVhckltbWVkaWF0ZSB9LCB7XG4gIGNsZWFySW1tZWRpYXRlOiBjbGVhckltbWVkaWF0ZVxufSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHNldFRvU3RyaW5nVGFnKGdsb2JhbFRoaXNbQ09MTEVDVElPTl9OQU1FXSwgQ09MTEVDVElPTl9OQU1FKTtcbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5jbGVhci1pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnNldC1pbW1lZGlhdGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzZXRUYXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbnZhciBzZXRJbW1lZGlhdGUgPSBnbG9iYWxUaGlzLnNldEltbWVkaWF0ZSA/IHNjaGVkdWxlcnNGaXgoc2V0VGFzaywgZmFsc2UpIDogc2V0VGFzaztcblxuLy8gYHNldEltbWVkaWF0ZWAgbWV0aG9kXG4vLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvI3NpLXNldEltbWVkaWF0ZVxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiBnbG9iYWxUaGlzLnNldEltbWVkaWF0ZSAhPT0gc2V0SW1tZWRpYXRlIH0sIHtcbiAgc2V0SW1tZWRpYXRlOiBzZXRJbW1lZGlhdGVcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWxUaGlzLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWxUaGlzLnNldEludGVydmFsICE9PSBzZXRJbnRlcnZhbCB9LCB7XG4gIHNldEludGVydmFsOiBzZXRJbnRlcnZhbFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsVGhpcy5zZXRUaW1lb3V0LCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRUaW1lb3V0IGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldHRpbWVvdXRcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogZ2xvYmFsVGhpcy5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5zZXQtaW50ZXJ2YWwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnNldC10aW1lb3V0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBpbiBjb3JlLWpzQDQsIG1vdmUgL21vZHVsZXMvIGRlcGVuZGVuY2llcyB0byBwdWJsaWMgZW50cmllcyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBieSB0b29scyBsaWtlIGBwcmVzZXQtZW52YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2FmZUdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2FmZS1nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVVNFX05BVElWRV9VUkwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXJsLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFVSTF9TRUFSQ0hfUEFSQU1TID0gJ1VSTFNlYXJjaFBhcmFtcyc7XG52YXIgVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IgPSBVUkxfU0VBUkNIX1BBUkFNUyArICdJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUGFyYW1zU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihVUkxfU0VBUkNIX1BBUkFNUyk7XG52YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IpO1xuXG52YXIgbmF0aXZlRmV0Y2ggPSBzYWZlR2V0QnVpbHRJbignZmV0Y2gnKTtcbnZhciBOYXRpdmVSZXF1ZXN0ID0gc2FmZUdldEJ1aWx0SW4oJ1JlcXVlc3QnKTtcbnZhciBIZWFkZXJzID0gc2FmZUdldEJ1aWx0SW4oJ0hlYWRlcnMnKTtcbnZhciBSZXF1ZXN0UHJvdG90eXBlID0gTmF0aXZlUmVxdWVzdCAmJiBOYXRpdmVSZXF1ZXN0LnByb3RvdHlwZTtcbnZhciBIZWFkZXJzUHJvdG90eXBlID0gSGVhZGVycyAmJiBIZWFkZXJzLnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBlbmNvZGVVUklDb21wb25lbnQgPSBnbG9iYWxUaGlzLmVuY29kZVVSSUNvbXBvbmVudDtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyIGZyb21Db2RlUG9pbnQgPSBnZXRCdWlsdEluKCdTdHJpbmcnLCAnZnJvbUNvZGVQb2ludCcpO1xudmFyICRwYXJzZUludCA9IHBhcnNlSW50O1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc2hpZnQgPSB1bmN1cnJ5VGhpcyhbXS5zaGlmdCk7XG52YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xuXG52YXIgcGx1cyA9IC9cXCsvZztcbnZhciBGQUxMQkFDS19SRVBMQUNFUiA9ICdcXHVGRkZEJztcbnZhciBWQUxJRF9IRVggPSAvXlswLTlhLWZdKyQvaTtcblxudmFyIHBhcnNlSGV4T2N0ZXQgPSBmdW5jdGlvbiAoc3RyaW5nLCBzdGFydCkge1xuICB2YXIgc3Vic3RyID0gc3RyaW5nU2xpY2Uoc3RyaW5nLCBzdGFydCwgc3RhcnQgKyAyKTtcbiAgaWYgKCFleGVjKFZBTElEX0hFWCwgc3Vic3RyKSkgcmV0dXJuIE5hTjtcblxuICByZXR1cm4gJHBhcnNlSW50KHN1YnN0ciwgMTYpO1xufTtcblxudmFyIGdldExlYWRpbmdPbmVzID0gZnVuY3Rpb24gKG9jdGV0KSB7XG4gIHZhciBjb3VudCA9IDA7XG4gIGZvciAodmFyIG1hc2sgPSAweDgwOyBtYXNrID4gMCAmJiAob2N0ZXQgJiBtYXNrKSAhPT0gMDsgbWFzayA+Pj0gMSkge1xuICAgIGNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufTtcblxudmFyIHV0ZjhEZWNvZGUgPSBmdW5jdGlvbiAob2N0ZXRzKSB7XG4gIHZhciBjb2RlUG9pbnQgPSBudWxsO1xuXG4gIHN3aXRjaCAob2N0ZXRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIGNvZGVQb2ludCA9IG9jdGV0c1swXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIGNvZGVQb2ludCA9IChvY3RldHNbMF0gJiAweDFGKSA8PCA2IHwgKG9jdGV0c1sxXSAmIDB4M0YpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgY29kZVBvaW50ID0gKG9jdGV0c1swXSAmIDB4MEYpIDw8IDEyIHwgKG9jdGV0c1sxXSAmIDB4M0YpIDw8IDYgfCAob2N0ZXRzWzJdICYgMHgzRik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICBjb2RlUG9pbnQgPSAob2N0ZXRzWzBdICYgMHgwNykgPDwgMTggfCAob2N0ZXRzWzFdICYgMHgzRikgPDwgMTIgfCAob2N0ZXRzWzJdICYgMHgzRikgPDwgNiB8IChvY3RldHNbM10gJiAweDNGKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNvZGVQb2ludCA+IDB4MTBGRkZGID8gbnVsbCA6IGNvZGVQb2ludDtcbn07XG5cbnZhciBkZWNvZGUgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgaW5wdXQgPSByZXBsYWNlKGlucHV0LCBwbHVzLCAnICcpO1xuICB2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIHZhciBkZWNvZGVkQ2hhciA9IGNoYXJBdChpbnB1dCwgaSk7XG5cbiAgICBpZiAoZGVjb2RlZENoYXIgPT09ICclJykge1xuICAgICAgaWYgKGNoYXJBdChpbnB1dCwgaSArIDEpID09PSAnJScgfHwgaSArIDMgPiBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ICs9ICclJztcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9jdGV0ID0gcGFyc2VIZXhPY3RldChpbnB1dCwgaSArIDEpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKG9jdGV0ICE9PSBvY3RldCkge1xuICAgICAgICByZXN1bHQgKz0gZGVjb2RlZENoYXI7XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGkgKz0gMjtcbiAgICAgIHZhciBieXRlU2VxdWVuY2VMZW5ndGggPSBnZXRMZWFkaW5nT25lcyhvY3RldCk7XG5cbiAgICAgIGlmIChieXRlU2VxdWVuY2VMZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVjb2RlZENoYXIgPSBmcm9tQ2hhckNvZGUob2N0ZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJ5dGVTZXF1ZW5jZUxlbmd0aCA9PT0gMSB8fCBieXRlU2VxdWVuY2VMZW5ndGggPiA0KSB7XG4gICAgICAgICAgcmVzdWx0ICs9IEZBTExCQUNLX1JFUExBQ0VSO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvY3RldHMgPSBbb2N0ZXRdO1xuICAgICAgICB2YXIgc2VxdWVuY2VJbmRleCA9IDE7XG5cbiAgICAgICAgd2hpbGUgKHNlcXVlbmNlSW5kZXggPCBieXRlU2VxdWVuY2VMZW5ndGgpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgaWYgKGkgKyAzID4gbGVuZ3RoIHx8IGNoYXJBdChpbnB1dCwgaSkgIT09ICclJykgYnJlYWs7XG5cbiAgICAgICAgICB2YXIgbmV4dEJ5dGUgPSBwYXJzZUhleE9jdGV0KGlucHV0LCBpICsgMSk7XG5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgICAgIGlmIChuZXh0Qnl0ZSAhPT0gbmV4dEJ5dGUpIHtcbiAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmV4dEJ5dGUgPiAxOTEgfHwgbmV4dEJ5dGUgPCAxMjgpIGJyZWFrO1xuXG4gICAgICAgICAgcHVzaChvY3RldHMsIG5leHRCeXRlKTtcbiAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgc2VxdWVuY2VJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9jdGV0cy5sZW5ndGggIT09IGJ5dGVTZXF1ZW5jZUxlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdCArPSBGQUxMQkFDS19SRVBMQUNFUjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb2RlUG9pbnQgPSB1dGY4RGVjb2RlKG9jdGV0cyk7XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQgKz0gRkFMTEJBQ0tfUkVQTEFDRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVjb2RlZENoYXIgPSBmcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgKz0gZGVjb2RlZENoYXI7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBmaW5kID0gL1shJygpfl18JTIwL2c7XG5cbnZhciByZXBsYWNlbWVudHMgPSB7XG4gICchJzogJyUyMScsXG4gIFwiJ1wiOiAnJTI3JyxcbiAgJygnOiAnJTI4JyxcbiAgJyknOiAnJTI5JyxcbiAgJ34nOiAnJTdFJyxcbiAgJyUyMCc6ICcrJ1xufTtcblxudmFyIHJlcGxhY2VyID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gIHJldHVybiByZXBsYWNlbWVudHNbbWF0Y2hdO1xufTtcblxudmFyIHNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gcmVwbGFjZShlbmNvZGVVUklDb21wb25lbnQoaXQpLCBmaW5kLCByZXBsYWNlcik7XG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKGZ1bmN0aW9uIEl0ZXJhdG9yKHBhcmFtcywga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUixcbiAgICB0YXJnZXQ6IGdldEludGVybmFsUGFyYW1zU3RhdGUocGFyYW1zKS5lbnRyaWVzLFxuICAgIGluZGV4OiAwLFxuICAgIGtpbmQ6IGtpbmRcbiAgfSk7XG59LCBVUkxfU0VBUkNIX1BBUkFNUywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHZhciBlbnRyeSA9IHRhcmdldFtpbmRleF07XG4gIHN3aXRjaCAoc3RhdGUua2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xufSwgdHJ1ZSk7XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNTdGF0ZSA9IGZ1bmN0aW9uIChpbml0KSB7XG4gIHRoaXMuZW50cmllcyA9IFtdO1xuICB0aGlzLnVybCA9IG51bGw7XG5cbiAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChpc09iamVjdChpbml0KSkgdGhpcy5wYXJzZU9iamVjdChpbml0KTtcbiAgICBlbHNlIHRoaXMucGFyc2VRdWVyeSh0eXBlb2YgaW5pdCA9PSAnc3RyaW5nJyA/IGNoYXJBdChpbml0LCAwKSA9PT0gJz8nID8gc3RyaW5nU2xpY2UoaW5pdCwgMSkgOiBpbml0IDogJHRvU3RyaW5nKGluaXQpKTtcbiAgfVxufTtcblxuVVJMU2VhcmNoUGFyYW1zU3RhdGUucHJvdG90eXBlID0ge1xuICB0eXBlOiBVUkxfU0VBUkNIX1BBUkFNUyxcbiAgYmluZFVSTDogZnVuY3Rpb24gKHVybCkge1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH0sXG4gIHBhcnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2Qob2JqZWN0KTtcbiAgICB2YXIgaXRlcmF0b3IsIG5leHQsIHN0ZXAsIGVudHJ5SXRlcmF0b3IsIGVudHJ5TmV4dCwgZmlyc3QsIHNlY29uZDtcblxuICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihvYmplY3QsIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgICAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgICAgIGVudHJ5SXRlcmF0b3IgPSBnZXRJdGVyYXRvcihhbk9iamVjdChzdGVwLnZhbHVlKSk7XG4gICAgICAgIGVudHJ5TmV4dCA9IGVudHJ5SXRlcmF0b3IubmV4dDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChmaXJzdCA9IGNhbGwoZW50cnlOZXh0LCBlbnRyeUl0ZXJhdG9yKSkuZG9uZSB8fFxuICAgICAgICAgIChzZWNvbmQgPSBjYWxsKGVudHJ5TmV4dCwgZW50cnlJdGVyYXRvcikpLmRvbmUgfHxcbiAgICAgICAgICAhY2FsbChlbnRyeU5leHQsIGVudHJ5SXRlcmF0b3IpLmRvbmVcbiAgICAgICAgKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzZXF1ZW5jZSB3aXRoIGxlbmd0aCAyJyk7XG4gICAgICAgIHB1c2goZW50cmllcywgeyBrZXk6ICR0b1N0cmluZyhmaXJzdC52YWx1ZSksIHZhbHVlOiAkdG9TdHJpbmcoc2Vjb25kLnZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgZm9yICh2YXIga2V5IGluIG9iamVjdCkgaWYgKGhhc093bihvYmplY3QsIGtleSkpIHtcbiAgICAgIHB1c2goZW50cmllcywgeyBrZXk6IGtleSwgdmFsdWU6ICR0b1N0cmluZyhvYmplY3Rba2V5XSkgfSk7XG4gICAgfVxuICB9LFxuICBwYXJzZVF1ZXJ5OiBmdW5jdGlvbiAocXVlcnkpIHtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzcGxpdChxdWVyeSwgJyYnKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgYXR0cmlidXRlLCBlbnRyeTtcbiAgICAgIHdoaWxlIChpbmRleCA8IGF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaW5kZXgrK107XG4gICAgICAgIGlmIChhdHRyaWJ1dGUubGVuZ3RoKSB7XG4gICAgICAgICAgZW50cnkgPSBzcGxpdChhdHRyaWJ1dGUsICc9Jyk7XG4gICAgICAgICAgcHVzaChlbnRyaWVzLCB7XG4gICAgICAgICAgICBrZXk6IGRlY29kZShzaGlmdChlbnRyeSkpLFxuICAgICAgICAgICAgdmFsdWU6IGRlY29kZShqb2luKGVudHJ5LCAnPScpKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBzZXJpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICAgIHB1c2gocmVzdWx0LCBzZXJpYWxpemUoZW50cnkua2V5KSArICc9JyArIHNlcmlhbGl6ZShlbnRyeS52YWx1ZSkpO1xuICAgIH0gcmV0dXJuIGpvaW4ocmVzdWx0LCAnJicpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLnBhcnNlUXVlcnkodGhpcy51cmwucXVlcnkpO1xuICB9LFxuICB1cGRhdGVVUkw6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy51cmwpIHRoaXMudXJsLnVwZGF0ZSgpO1xuICB9XG59O1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtdXJsc2VhcmNocGFyYW1zXG52YXIgVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBVUkxTZWFyY2hQYXJhbXMoLyogaW5pdCAqLykge1xuICBhbkluc3RhbmNlKHRoaXMsIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSk7XG4gIHZhciBpbml0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQ7XG4gIHZhciBzdGF0ZSA9IHNldEludGVybmFsU3RhdGUodGhpcywgbmV3IFVSTFNlYXJjaFBhcmFtc1N0YXRlKGluaXQpKTtcbiAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5zaXplID0gc3RhdGUuZW50cmllcy5sZW5ndGg7XG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlID0gVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG5kZWZpbmVCdWlsdElucyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsIHtcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuYXBwZW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWFwcGVuZFxuICBhcHBlbmQ6IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMik7XG4gICAgcHVzaChzdGF0ZS5lbnRyaWVzLCB7IGtleTogJHRvU3RyaW5nKG5hbWUpLCB2YWx1ZTogJHRvU3RyaW5nKHZhbHVlKSB9KTtcbiAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLmxlbmd0aCsrO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5kZWxldGVgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZGVsZXRlXG4gICdkZWxldGUnOiBmdW5jdGlvbiAobmFtZSAvKiAsIHZhbHVlICovKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGVudHJpZXMgPSBzdGF0ZS5lbnRyaWVzO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyICR2YWx1ZSA9IGxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG4gICAgdmFyIHZhbHVlID0gJHZhbHVlID09PSB1bmRlZmluZWQgPyAkdmFsdWUgOiAkdG9TdHJpbmcoJHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSAmJiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBlbnRyeS52YWx1ZSA9PT0gdmFsdWUpKSB7XG4gICAgICAgIHNwbGljZShlbnRyaWVzLCBpbmRleCwgMSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgIH0gZWxzZSBpbmRleCsrO1xuICAgIH1cbiAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLnNpemUgPSBlbnRyaWVzLmxlbmd0aDtcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZ2V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWdldFxuICBnZXQ6IGZ1bmN0aW9uIGdldChuYW1lKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoZW50cmllc1tpbmRleF0ua2V5ID09PSBrZXkpIHJldHVybiBlbnRyaWVzW2luZGV4XS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmdldEFsbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1nZXRhbGxcbiAgZ2V0QWxsOiBmdW5jdGlvbiBnZXRBbGwobmFtZSkge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChlbnRyaWVzW2luZGV4XS5rZXkgPT09IGtleSkgcHVzaChyZXN1bHQsIGVudHJpZXNbaW5kZXhdLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaGFzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWhhc1xuICBoYXM6IGZ1bmN0aW9uIGhhcyhuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgdmFsdWUgPSAkdmFsdWUgPT09IHVuZGVmaW5lZCA/ICR2YWx1ZSA6ICR0b1N0cmluZygkdmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkgJiYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgZW50cnkudmFsdWUgPT09IHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLXNldFxuICBzZXQ6IGZ1bmN0aW9uIHNldChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGVudHJpZXMgPSBzdGF0ZS5lbnRyaWVzO1xuICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIHZhbCA9ICR0b1N0cmluZyh2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZW50cnk7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGZvdW5kKSBzcGxpY2UoZW50cmllcywgaW5kZXgtLSwgMSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZvdW5kKSBwdXNoKGVudHJpZXMsIHsga2V5OiBrZXksIHZhbHVlOiB2YWwgfSk7XG4gICAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5zaXplID0gZW50cmllcy5sZW5ndGg7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtc29ydFxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KCkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgYXJyYXlTb3J0KHN0YXRlLmVudHJpZXMsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5rZXkgPiBiLmtleSA/IDEgOiAtMTtcbiAgICB9KTtcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgfVxuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5rZXlzYCBtZXRob2RcbiAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICdrZXlzJyk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ3ZhbHVlcycpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2RcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICdlbnRyaWVzJyk7XG4gIH1cbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuZGVmaW5lQnVpbHRJbihVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsIElURVJBVE9SLCBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZW50cmllcywgeyBuYW1lOiAnZW50cmllcycgfSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsc2VhcmNocGFyYW1zLXN0cmluZ2lmaWNhdGlvbi1iZWhhdmlvclxuZGVmaW5lQnVpbHRJbihVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5zZXJpYWxpemUoKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2l6ZWAgZ2V0dGVyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3VybC9wdWxsLzczNFxuaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgZ2V0OiBmdW5jdGlvbiBzaXplKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXMubGVuZ3RoO1xuICB9LFxuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciwgVVJMX1NFQVJDSF9QQVJBTVMpO1xuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwgfSwge1xuICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yXG59KTtcblxuLy8gV3JhcCBgZmV0Y2hgIGFuZCBgUmVxdWVzdGAgZm9yIGNvcnJlY3Qgd29yayB3aXRoIHBvbHlmaWxsZWQgYFVSTFNlYXJjaFBhcmFtc2BcbmlmICghVVNFX05BVElWRV9VUkwgJiYgaXNDYWxsYWJsZShIZWFkZXJzKSkge1xuICB2YXIgaGVhZGVyc0hhcyA9IHVuY3VycnlUaGlzKEhlYWRlcnNQcm90b3R5cGUuaGFzKTtcbiAgdmFyIGhlYWRlcnNTZXQgPSB1bmN1cnJ5VGhpcyhIZWFkZXJzUHJvdG90eXBlLnNldCk7XG5cbiAgdmFyIHdyYXBSZXF1ZXN0T3B0aW9ucyA9IGZ1bmN0aW9uIChpbml0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGluaXQpKSB7XG4gICAgICB2YXIgYm9keSA9IGluaXQuYm9keTtcbiAgICAgIHZhciBoZWFkZXJzO1xuICAgICAgaWYgKGNsYXNzb2YoYm9keSkgPT09IFVSTF9TRUFSQ0hfUEFSQU1TKSB7XG4gICAgICAgIGhlYWRlcnMgPSBpbml0LmhlYWRlcnMgPyBuZXcgSGVhZGVycyhpbml0LmhlYWRlcnMpIDogbmV3IEhlYWRlcnMoKTtcbiAgICAgICAgaWYgKCFoZWFkZXJzSGFzKGhlYWRlcnMsICdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICAgIGhlYWRlcnNTZXQoaGVhZGVycywgJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGUoaW5pdCwge1xuICAgICAgICAgIGJvZHk6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCAkdG9TdHJpbmcoYm9keSkpLFxuICAgICAgICAgIGhlYWRlcnM6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBoZWFkZXJzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IHJldHVybiBpbml0O1xuICB9O1xuXG4gIGlmIChpc0NhbGxhYmxlKG5hdGl2ZUZldGNoKSkge1xuICAgICQoeyBnbG9iYWw6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGRvbnRDYWxsR2V0U2V0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgICByZXR1cm4gbmF0aXZlRmV0Y2goaW5wdXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gd3JhcFJlcXVlc3RPcHRpb25zKGFyZ3VtZW50c1sxXSkgOiB7fSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNDYWxsYWJsZShOYXRpdmVSZXF1ZXN0KSkge1xuICAgIHZhciBSZXF1ZXN0Q29uc3RydWN0b3IgPSBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCBSZXF1ZXN0UHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBuZXcgTmF0aXZlUmVxdWVzdChpbnB1dCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyB3cmFwUmVxdWVzdE9wdGlvbnMoYXJndW1lbnRzWzFdKSA6IHt9KTtcbiAgICB9O1xuXG4gICAgUmVxdWVzdFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlcXVlc3RDb25zdHJ1Y3RvcjtcbiAgICBSZXF1ZXN0Q29uc3RydWN0b3IucHJvdG90eXBlID0gUmVxdWVzdFByb3RvdHlwZTtcblxuICAgICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBkb250Q2FsbEdldFNldDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIFJlcXVlc3Q6IFJlcXVlc3RDb25zdHJ1Y3RvclxuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLFxuICBnZXRTdGF0ZTogZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZVxufTtcbiIsIi8vIGVtcHR5XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyByZXBsYWNlZCB0byBtb2R1bGUgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmNvbnN0cnVjdG9yJyk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBVU0VfTkFUSVZFX1VSTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciBVUkwgPSBnZXRCdWlsdEluKCdVUkwnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80NzUwNVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rlbm9sYW5kL2Rlbm8vaXNzdWVzLzE4ODkzXG52YXIgVEhST1dTX1dJVEhPVVRfQVJHVU1FTlRTID0gVVNFX05BVElWRV9VUkwgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICBVUkwuY2FuUGFyc2UoKTtcbn0pO1xuXG4vLyBCdW4gfiAxLjAuMzAgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzkyNTBcbnZhciBXUk9OR19BUklUWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFVSTC5jYW5QYXJzZS5sZW5ndGggIT09IDE7XG59KTtcblxuLy8gYFVSTC5jYW5QYXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtY2FucGFyc2VcbiQoeyB0YXJnZXQ6ICdVUkwnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFUSFJPV1NfV0lUSE9VVF9BUkdVTUVOVFMgfHwgV1JPTkdfQVJJVFkgfSwge1xuICBjYW5QYXJzZTogZnVuY3Rpb24gY2FuUGFyc2UodXJsKSB7XG4gICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciB1cmxTdHJpbmcgPSB0b1N0cmluZyh1cmwpO1xuICAgIHZhciBiYXNlID0gbGVuZ3RoIDwgMiB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRvU3RyaW5nKGFyZ3VtZW50c1sxXSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhIW5ldyBVUkwodXJsU3RyaW5nLCBiYXNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBpbiBjb3JlLWpzQDQsIG1vdmUgL21vZHVsZXMvIGRlcGVuZGVuY2llcyB0byBwdWJsaWMgZW50cmllcyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBieSB0b29scyBsaWtlIGBwcmVzZXQtZW52YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVVNFX05BVElWRV9VUkwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXJsLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG52YXIgYXJyYXlGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY29kZUF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jb2RlQXQ7XG52YXIgdG9BU0NJSSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcHVueWNvZGUtdG8tYXNjaWknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgVVJMU2VhcmNoUGFyYW1zTW9kdWxlID0gcmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuY29uc3RydWN0b3InKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxVUkxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKCdVUkwnKTtcbnZhciBVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuVVJMU2VhcmNoUGFyYW1zO1xudmFyIGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuZ2V0U3RhdGU7XG5cbnZhciBOYXRpdmVVUkwgPSBnbG9iYWxUaGlzLlVSTDtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBwYXJzZUludCA9IGdsb2JhbFRoaXMucGFyc2VJbnQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xudmFyIHBvcCA9IHVuY3VycnlUaGlzKFtdLnBvcCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzaGlmdCA9IHVuY3VycnlUaGlzKFtdLnNoaWZ0KTtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciB0b0xvd2VyQ2FzZSA9IHVuY3VycnlUaGlzKCcnLnRvTG93ZXJDYXNlKTtcbnZhciB1bnNoaWZ0ID0gdW5jdXJyeVRoaXMoW10udW5zaGlmdCk7XG5cbnZhciBJTlZBTElEX0FVVEhPUklUWSA9ICdJbnZhbGlkIGF1dGhvcml0eSc7XG52YXIgSU5WQUxJRF9TQ0hFTUUgPSAnSW52YWxpZCBzY2hlbWUnO1xudmFyIElOVkFMSURfSE9TVCA9ICdJbnZhbGlkIGhvc3QnO1xudmFyIElOVkFMSURfUE9SVCA9ICdJbnZhbGlkIHBvcnQnO1xuXG52YXIgQUxQSEEgPSAvW2Etel0vaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tb2JzY3VyZS1yYW5nZSAtLSBzYWZlXG52YXIgQUxQSEFOVU1FUklDID0gL1tcXGQrLS5hLXpdL2k7XG52YXIgRElHSVQgPSAvXFxkLztcbnZhciBIRVhfU1RBUlQgPSAvXjB4L2k7XG52YXIgT0NUID0gL15bMC03XSskLztcbnZhciBERUMgPSAvXlxcZCskLztcbnZhciBIRVggPSAvXltcXGRhLWZdKyQvaTtcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1jb250cm9sLWNoYXJhY3RlciAtLSBzYWZlICovXG52YXIgRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVCA9IC9bXFwwXFx0XFxuXFxyICMlLzo8Pj9AW1xcXFxcXF1efF0vO1xudmFyIEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlRfRVhDTFVESU5HX1BFUkNFTlQgPSAvW1xcMFxcdFxcblxcciAjLzo8Pj9AW1xcXFxcXF1efF0vO1xudmFyIExFQURJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSA9IC9eW1xcdTAwMDAtXFx1MDAyMF0rLztcbnZhciBUUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFID0gLyhefFteXFx1MDAwMC1cXHUwMDIwXSlbXFx1MDAwMC1cXHUwMDIwXSskLztcbnZhciBUQUJfQU5EX05FV19MSU5FID0gL1tcXHRcXG5cXHJdL2c7XG4vKiBlc2xpbnQtZW5hYmxlIHJlZ2V4cC9uby1jb250cm9sLWNoYXJhY3RlciAtLSBzYWZlICovXG52YXIgRU9GO1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2lwdjQtbnVtYmVyLXBhcnNlclxudmFyIHBhcnNlSVB2NCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgcGFydHMgPSBzcGxpdChpbnB1dCwgJy4nKTtcbiAgdmFyIHBhcnRzTGVuZ3RoLCBudW1iZXJzLCBpbmRleCwgcGFydCwgcmFkaXgsIG51bWJlciwgaXB2NDtcbiAgaWYgKHBhcnRzLmxlbmd0aCAmJiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICBwYXJ0cy5sZW5ndGgtLTtcbiAgfVxuICBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcbiAgaWYgKHBhcnRzTGVuZ3RoID4gNCkgcmV0dXJuIGlucHV0O1xuICBudW1iZXJzID0gW107XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgcGFydCA9IHBhcnRzW2luZGV4XTtcbiAgICBpZiAocGFydCA9PT0gJycpIHJldHVybiBpbnB1dDtcbiAgICByYWRpeCA9IDEwO1xuICAgIGlmIChwYXJ0Lmxlbmd0aCA+IDEgJiYgY2hhckF0KHBhcnQsIDApID09PSAnMCcpIHtcbiAgICAgIHJhZGl4ID0gZXhlYyhIRVhfU1RBUlQsIHBhcnQpID8gMTYgOiA4O1xuICAgICAgcGFydCA9IHN0cmluZ1NsaWNlKHBhcnQsIHJhZGl4ID09PSA4ID8gMSA6IDIpO1xuICAgIH1cbiAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgIG51bWJlciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZXhlYyhyYWRpeCA9PT0gMTAgPyBERUMgOiByYWRpeCA9PT0gOCA/IE9DVCA6IEhFWCwgcGFydCkpIHJldHVybiBpbnB1dDtcbiAgICAgIG51bWJlciA9IHBhcnNlSW50KHBhcnQsIHJhZGl4KTtcbiAgICB9XG4gICAgcHVzaChudW1iZXJzLCBudW1iZXIpO1xuICB9XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbnVtYmVyID0gbnVtYmVyc1tpbmRleF07XG4gICAgaWYgKGluZGV4ID09PSBwYXJ0c0xlbmd0aCAtIDEpIHtcbiAgICAgIGlmIChudW1iZXIgPj0gcG93KDI1NiwgNSAtIHBhcnRzTGVuZ3RoKSkgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChudW1iZXIgPiAyNTUpIHJldHVybiBudWxsO1xuICB9XG4gIGlwdjQgPSBwb3AobnVtYmVycyk7XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bWJlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaXB2NCArPSBudW1iZXJzW2luZGV4XSAqIHBvdygyNTYsIDMgLSBpbmRleCk7XG4gIH1cbiAgcmV0dXJuIGlwdjQ7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaXB2Ni1wYXJzZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50cyAtLSBUT0RPXG52YXIgcGFyc2VJUHY2ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBhZGRyZXNzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICB2YXIgcGllY2VJbmRleCA9IDA7XG4gIHZhciBjb21wcmVzcyA9IG51bGw7XG4gIHZhciBwb2ludGVyID0gMDtcbiAgdmFyIHZhbHVlLCBsZW5ndGgsIG51bWJlcnNTZWVuLCBpcHY0UGllY2UsIG51bWJlciwgc3dhcHMsIHN3YXA7XG5cbiAgdmFyIGNociA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2hhckF0KGlucHV0LCBwb2ludGVyKTtcbiAgfTtcblxuICBpZiAoY2hyKCkgPT09ICc6Jykge1xuICAgIGlmIChjaGFyQXQoaW5wdXQsIDEpICE9PSAnOicpIHJldHVybjtcbiAgICBwb2ludGVyICs9IDI7XG4gICAgcGllY2VJbmRleCsrO1xuICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcbiAgfVxuICB3aGlsZSAoY2hyKCkpIHtcbiAgICBpZiAocGllY2VJbmRleCA9PT0gOCkgcmV0dXJuO1xuICAgIGlmIChjaHIoKSA9PT0gJzonKSB7XG4gICAgICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHJldHVybjtcbiAgICAgIHBvaW50ZXIrKztcbiAgICAgIHBpZWNlSW5kZXgrKztcbiAgICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YWx1ZSA9IGxlbmd0aCA9IDA7XG4gICAgd2hpbGUgKGxlbmd0aCA8IDQgJiYgZXhlYyhIRVgsIGNocigpKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSAqIDE2ICsgcGFyc2VJbnQoY2hyKCksIDE2KTtcbiAgICAgIHBvaW50ZXIrKztcbiAgICAgIGxlbmd0aCsrO1xuICAgIH1cbiAgICBpZiAoY2hyKCkgPT09ICcuJykge1xuICAgICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgcG9pbnRlciAtPSBsZW5ndGg7XG4gICAgICBpZiAocGllY2VJbmRleCA+IDYpIHJldHVybjtcbiAgICAgIG51bWJlcnNTZWVuID0gMDtcbiAgICAgIHdoaWxlIChjaHIoKSkge1xuICAgICAgICBpcHY0UGllY2UgPSBudWxsO1xuICAgICAgICBpZiAobnVtYmVyc1NlZW4gPiAwKSB7XG4gICAgICAgICAgaWYgKGNocigpID09PSAnLicgJiYgbnVtYmVyc1NlZW4gPCA0KSBwb2ludGVyKys7XG4gICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleGVjKERJR0lULCBjaHIoKSkpIHJldHVybjtcbiAgICAgICAgd2hpbGUgKGV4ZWMoRElHSVQsIGNocigpKSkge1xuICAgICAgICAgIG51bWJlciA9IHBhcnNlSW50KGNocigpLCAxMCk7XG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA9PT0gbnVsbCkgaXB2NFBpZWNlID0gbnVtYmVyO1xuICAgICAgICAgIGVsc2UgaWYgKGlwdjRQaWVjZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgIGVsc2UgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA+IDI1NSkgcmV0dXJuO1xuICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gYWRkcmVzc1twaWVjZUluZGV4XSAqIDI1NiArIGlwdjRQaWVjZTtcbiAgICAgICAgbnVtYmVyc1NlZW4rKztcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09PSAyIHx8IG51bWJlcnNTZWVuID09PSA0KSBwaWVjZUluZGV4Kys7XG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyc1NlZW4gIT09IDQpIHJldHVybjtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoY2hyKCkgPT09ICc6Jykge1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgaWYgKCFjaHIoKSkgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoY2hyKCkpIHJldHVybjtcbiAgICBhZGRyZXNzW3BpZWNlSW5kZXgrK10gPSB2YWx1ZTtcbiAgfVxuICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcbiAgICBzd2FwcyA9IHBpZWNlSW5kZXggLSBjb21wcmVzcztcbiAgICBwaWVjZUluZGV4ID0gNztcbiAgICB3aGlsZSAocGllY2VJbmRleCAhPT0gMCAmJiBzd2FwcyA+IDApIHtcbiAgICAgIHN3YXAgPSBhZGRyZXNzW3BpZWNlSW5kZXhdO1xuICAgICAgYWRkcmVzc1twaWVjZUluZGV4LS1dID0gYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV07XG4gICAgICBhZGRyZXNzW2NvbXByZXNzICsgLS1zd2Fwc10gPSBzd2FwO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwaWVjZUluZGV4ICE9PSA4KSByZXR1cm47XG4gIHJldHVybiBhZGRyZXNzO1xufTtcblxudmFyIGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlID0gZnVuY3Rpb24gKGlwdjYpIHtcbiAgdmFyIG1heEluZGV4ID0gbnVsbDtcbiAgdmFyIG1heExlbmd0aCA9IDE7XG4gIHZhciBjdXJyU3RhcnQgPSBudWxsO1xuICB2YXIgY3Vyckxlbmd0aCA9IDA7XG4gIHZhciBpbmRleCA9IDA7XG4gIGZvciAoOyBpbmRleCA8IDg7IGluZGV4KyspIHtcbiAgICBpZiAoaXB2NltpbmRleF0gIT09IDApIHtcbiAgICAgIGlmIChjdXJyTGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIG1heEluZGV4ID0gY3VyclN0YXJ0O1xuICAgICAgICBtYXhMZW5ndGggPSBjdXJyTGVuZ3RoO1xuICAgICAgfVxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcbiAgICAgIGN1cnJMZW5ndGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSBjdXJyU3RhcnQgPSBpbmRleDtcbiAgICAgICsrY3Vyckxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN1cnJMZW5ndGggPiBtYXhMZW5ndGggPyBjdXJyU3RhcnQgOiBtYXhJbmRleDtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaG9zdC1zZXJpYWxpemluZ1xudmFyIHNlcmlhbGl6ZUhvc3QgPSBmdW5jdGlvbiAoaG9zdCkge1xuICB2YXIgcmVzdWx0LCBpbmRleCwgY29tcHJlc3MsIGlnbm9yZTA7XG5cbiAgLy8gaXB2NFxuICBpZiAodHlwZW9mIGhvc3QgPT0gJ251bWJlcicpIHtcbiAgICByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0OyBpbmRleCsrKSB7XG4gICAgICB1bnNoaWZ0KHJlc3VsdCwgaG9zdCAlIDI1Nik7XG4gICAgICBob3N0ID0gZmxvb3IoaG9zdCAvIDI1Nik7XG4gICAgfVxuICAgIHJldHVybiBqb2luKHJlc3VsdCwgJy4nKTtcbiAgfVxuXG4gIC8vIGlwdjZcbiAgaWYgKHR5cGVvZiBob3N0ID09ICdvYmplY3QnKSB7XG4gICAgcmVzdWx0ID0gJyc7XG4gICAgY29tcHJlc3MgPSBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShob3N0KTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoaWdub3JlMCAmJiBob3N0W2luZGV4XSA9PT0gMCkgY29udGludWU7XG4gICAgICBpZiAoaWdub3JlMCkgaWdub3JlMCA9IGZhbHNlO1xuICAgICAgaWYgKGNvbXByZXNzID09PSBpbmRleCkge1xuICAgICAgICByZXN1bHQgKz0gaW5kZXggPyAnOicgOiAnOjonO1xuICAgICAgICBpZ25vcmUwID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBudW1iZXJUb1N0cmluZyhob3N0W2luZGV4XSwgMTYpO1xuICAgICAgICBpZiAoaW5kZXggPCA3KSByZXN1bHQgKz0gJzonO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJ1snICsgcmVzdWx0ICsgJ10nO1xuICB9XG5cbiAgcmV0dXJuIGhvc3Q7XG59O1xuXG52YXIgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCA9IHt9O1xudmFyIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCwge1xuICAnICc6IDEsICdcIic6IDEsICc8JzogMSwgJz4nOiAxLCAnYCc6IDFcbn0pO1xudmFyIHBhdGhQZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJyMnOiAxLCAnPyc6IDEsICd7JzogMSwgJ30nOiAxXG59KTtcbnZhciB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIHBhdGhQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcvJzogMSwgJzonOiAxLCAnOyc6IDEsICc9JzogMSwgJ0AnOiAxLCAnWyc6IDEsICdcXFxcJzogMSwgJ10nOiAxLCAnXic6IDEsICd8JzogMVxufSk7XG5cbnZhciBwZXJjZW50RW5jb2RlID0gZnVuY3Rpb24gKGNociwgc2V0KSB7XG4gIHZhciBjb2RlID0gY29kZUF0KGNociwgMCk7XG4gIHJldHVybiBjb2RlID4gMHgyMCAmJiBjb2RlIDwgMHg3RiAmJiAhaGFzT3duKHNldCwgY2hyKSA/IGNociA6IGVuY29kZVVSSUNvbXBvbmVudChjaHIpO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzcGVjaWFsLXNjaGVtZVxudmFyIHNwZWNpYWxTY2hlbWVzID0ge1xuICBmdHA6IDIxLFxuICBmaWxlOiBudWxsLFxuICBodHRwOiA4MCxcbiAgaHR0cHM6IDQ0MyxcbiAgd3M6IDgwLFxuICB3c3M6IDQ0M1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN3aW5kb3dzLWRyaXZlLWxldHRlclxudmFyIGlzV2luZG93c0RyaXZlTGV0dGVyID0gZnVuY3Rpb24gKHN0cmluZywgbm9ybWFsaXplZCkge1xuICB2YXIgc2Vjb25kO1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PT0gMiAmJiBleGVjKEFMUEhBLCBjaGFyQXQoc3RyaW5nLCAwKSlcbiAgICAmJiAoKHNlY29uZCA9IGNoYXJBdChzdHJpbmcsIDEpKSA9PT0gJzonIHx8ICghbm9ybWFsaXplZCAmJiBzZWNvbmQgPT09ICd8JykpO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdGFydC13aXRoLWEtd2luZG93cy1kcml2ZS1sZXR0ZXJcbnZhciBzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgdGhpcmQ7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID4gMSAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihzdHJpbmdTbGljZShzdHJpbmcsIDAsIDIpKSAmJiAoXG4gICAgc3RyaW5nLmxlbmd0aCA9PT0gMiB8fFxuICAgICgodGhpcmQgPSBjaGFyQXQoc3RyaW5nLCAyKSkgPT09ICcvJyB8fCB0aGlyZCA9PT0gJ1xcXFwnIHx8IHRoaXJkID09PSAnPycgfHwgdGhpcmQgPT09ICcjJylcbiAgKTtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc2luZ2xlLWRvdC1wYXRoLXNlZ21lbnRcbnZhciBpc1NpbmdsZURvdCA9IGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gIHJldHVybiBzZWdtZW50ID09PSAnLicgfHwgdG9Mb3dlckNhc2Uoc2VnbWVudCkgPT09ICclMmUnO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb3VibGUtZG90LXBhdGgtc2VnbWVudFxudmFyIGlzRG91YmxlRG90ID0gZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgc2VnbWVudCA9IHRvTG93ZXJDYXNlKHNlZ21lbnQpO1xuICByZXR1cm4gc2VnbWVudCA9PT0gJy4uJyB8fCBzZWdtZW50ID09PSAnJTJlLicgfHwgc2VnbWVudCA9PT0gJy4lMmUnIHx8IHNlZ21lbnQgPT09ICclMmUlMmUnO1xufTtcblxuLy8gU3RhdGVzOlxudmFyIFNDSEVNRV9TVEFSVCA9IHt9O1xudmFyIFNDSEVNRSA9IHt9O1xudmFyIE5PX1NDSEVNRSA9IHt9O1xudmFyIFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZID0ge307XG52YXIgUEFUSF9PUl9BVVRIT1JJVFkgPSB7fTtcbnZhciBSRUxBVElWRSA9IHt9O1xudmFyIFJFTEFUSVZFX1NMQVNIID0ge307XG52YXIgU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUyA9IHt9O1xudmFyIFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTID0ge307XG52YXIgQVVUSE9SSVRZID0ge307XG52YXIgSE9TVCA9IHt9O1xudmFyIEhPU1ROQU1FID0ge307XG52YXIgUE9SVCA9IHt9O1xudmFyIEZJTEUgPSB7fTtcbnZhciBGSUxFX1NMQVNIID0ge307XG52YXIgRklMRV9IT1NUID0ge307XG52YXIgUEFUSF9TVEFSVCA9IHt9O1xudmFyIFBBVEggPSB7fTtcbnZhciBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIID0ge307XG52YXIgUVVFUlkgPSB7fTtcbnZhciBGUkFHTUVOVCA9IHt9O1xuXG52YXIgVVJMU3RhdGUgPSBmdW5jdGlvbiAodXJsLCBpc0Jhc2UsIGJhc2UpIHtcbiAgdmFyIHVybFN0cmluZyA9ICR0b1N0cmluZyh1cmwpO1xuICB2YXIgYmFzZVN0YXRlLCBmYWlsdXJlLCBzZWFyY2hQYXJhbXM7XG4gIGlmIChpc0Jhc2UpIHtcbiAgICBmYWlsdXJlID0gdGhpcy5wYXJzZSh1cmxTdHJpbmcpO1xuICAgIGlmIChmYWlsdXJlKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZhaWx1cmUpO1xuICAgIHRoaXMuc2VhcmNoUGFyYW1zID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmFzZSAhPT0gdW5kZWZpbmVkKSBiYXNlU3RhdGUgPSBuZXcgVVJMU3RhdGUoYmFzZSwgdHJ1ZSk7XG4gICAgZmFpbHVyZSA9IHRoaXMucGFyc2UodXJsU3RyaW5nLCBudWxsLCBiYXNlU3RhdGUpO1xuICAgIGlmIChmYWlsdXJlKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZhaWx1cmUpO1xuICAgIHNlYXJjaFBhcmFtcyA9IGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUobmV3IFVSTFNlYXJjaFBhcmFtcygpKTtcbiAgICBzZWFyY2hQYXJhbXMuYmluZFVSTCh0aGlzKTtcbiAgICB0aGlzLnNlYXJjaFBhcmFtcyA9IHNlYXJjaFBhcmFtcztcbiAgfVxufTtcblxuVVJMU3RhdGUucHJvdG90eXBlID0ge1xuICB0eXBlOiAnVVJMJyxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHMgLS0gVE9ET1xuICBwYXJzZTogZnVuY3Rpb24gKGlucHV0LCBzdGF0ZU92ZXJyaWRlLCBiYXNlKSB7XG4gICAgdmFyIHVybCA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBTQ0hFTUVfU1RBUlQ7XG4gICAgdmFyIHBvaW50ZXIgPSAwO1xuICAgIHZhciBidWZmZXIgPSAnJztcbiAgICB2YXIgc2VlbkF0ID0gZmFsc2U7XG4gICAgdmFyIHNlZW5CcmFja2V0ID0gZmFsc2U7XG4gICAgdmFyIHNlZW5QYXNzd29yZFRva2VuID0gZmFsc2U7XG4gICAgdmFyIGNvZGVQb2ludHMsIGNociwgYnVmZmVyQ29kZVBvaW50cywgZmFpbHVyZTtcblxuICAgIGlucHV0ID0gJHRvU3RyaW5nKGlucHV0KTtcblxuICAgIGlmICghc3RhdGVPdmVycmlkZSkge1xuICAgICAgdXJsLnNjaGVtZSA9ICcnO1xuICAgICAgdXJsLnVzZXJuYW1lID0gJyc7XG4gICAgICB1cmwucGFzc3dvcmQgPSAnJztcbiAgICAgIHVybC5ob3N0ID0gbnVsbDtcbiAgICAgIHVybC5wb3J0ID0gbnVsbDtcbiAgICAgIHVybC5wYXRoID0gW107XG4gICAgICB1cmwucXVlcnkgPSBudWxsO1xuICAgICAgdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgIHVybC5jYW5ub3RCZUFCYXNlVVJMID0gZmFsc2U7XG4gICAgICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIExFQURJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSwgJycpO1xuICAgICAgaW5wdXQgPSByZXBsYWNlKGlucHV0LCBUUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFLCAnJDEnKTtcbiAgICB9XG5cbiAgICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIFRBQl9BTkRfTkVXX0xJTkUsICcnKTtcblxuICAgIGNvZGVQb2ludHMgPSBhcnJheUZyb20oaW5wdXQpO1xuXG4gICAgd2hpbGUgKHBvaW50ZXIgPD0gY29kZVBvaW50cy5sZW5ndGgpIHtcbiAgICAgIGNociA9IGNvZGVQb2ludHNbcG9pbnRlcl07XG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgIGNhc2UgU0NIRU1FX1NUQVJUOlxuICAgICAgICAgIGlmIChjaHIgJiYgZXhlYyhBTFBIQSwgY2hyKSkge1xuICAgICAgICAgICAgYnVmZmVyICs9IHRvTG93ZXJDYXNlKGNocik7XG4gICAgICAgICAgICBzdGF0ZSA9IFNDSEVNRTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IE5PX1NDSEVNRTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTQ0hFTUU6XG4gICAgICAgICAgaWYgKGNociAmJiAoZXhlYyhBTFBIQU5VTUVSSUMsIGNocikgfHwgY2hyID09PSAnKycgfHwgY2hyID09PSAnLScgfHwgY2hyID09PSAnLicpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gdG9Mb3dlckNhc2UoY2hyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJzonKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSAmJiAoXG4gICAgICAgICAgICAgICh1cmwuaXNTcGVjaWFsKCkgIT09IGhhc093bihzcGVjaWFsU2NoZW1lcywgYnVmZmVyKSkgfHxcbiAgICAgICAgICAgICAgKGJ1ZmZlciA9PT0gJ2ZpbGUnICYmICh1cmwuaW5jbHVkZXNDcmVkZW50aWFscygpIHx8IHVybC5wb3J0ICE9PSBudWxsKSkgfHxcbiAgICAgICAgICAgICAgKHVybC5zY2hlbWUgPT09ICdmaWxlJyAmJiAhdXJsLmhvc3QpXG4gICAgICAgICAgICApKSByZXR1cm47XG4gICAgICAgICAgICB1cmwuc2NoZW1lID0gYnVmZmVyO1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgaWYgKHVybC5pc1NwZWNpYWwoKSAmJiBzcGVjaWFsU2NoZW1lc1t1cmwuc2NoZW1lXSA9PT0gdXJsLnBvcnQpIHVybC5wb3J0ID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBpZiAodXJsLnNjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gRklMRTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLmlzU3BlY2lhbCgpICYmIGJhc2UgJiYgYmFzZS5zY2hlbWUgPT09IHVybC5zY2hlbWUpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLmlzU3BlY2lhbCgpKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50c1twb2ludGVyICsgMV0gPT09ICcvJykge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEhfT1JfQVVUSE9SSVRZO1xuICAgICAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XG4gICAgICAgICAgICAgIHB1c2godXJsLnBhdGgsICcnKTtcbiAgICAgICAgICAgICAgc3RhdGUgPSBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBOT19TQ0hFTUU7XG4gICAgICAgICAgICBwb2ludGVyID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBOT19TQ0hFTUU6XG4gICAgICAgICAgaWYgKCFiYXNlIHx8IChiYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgY2hyICE9PSAnIycpKSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgICAgaWYgKGJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLnNjaGVtZSA9IGJhc2Uuc2NoZW1lO1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlID0gYmFzZS5zY2hlbWUgPT09ICdmaWxlJyA/IEZJTEUgOiBSRUxBVElWRTtcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBjYXNlIFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZOlxuICAgICAgICAgIGlmIChjaHIgPT09ICcvJyAmJiBjb2RlUG9pbnRzW3BvaW50ZXIgKyAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTO1xuICAgICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFJFTEFUSVZFO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFBBVEhfT1JfQVVUSE9SSVRZOlxuICAgICAgICAgIGlmIChjaHIgPT09ICcvJykge1xuICAgICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVMQVRJVkU6XG4gICAgICAgICAgdXJsLnNjaGVtZSA9IGJhc2Uuc2NoZW1lO1xuICAgICAgICAgIGlmIChjaHIgPT09IEVPRikge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnLycgfHwgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkpIHtcbiAgICAgICAgICAgIHN0YXRlID0gUkVMQVRJVkVfU0xBU0g7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5wYXRoLmxlbmd0aC0tO1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFJFTEFUSVZFX1NMQVNIOlxuICAgICAgICAgIGlmICh1cmwuaXNTcGVjaWFsKCkgJiYgKGNociA9PT0gJy8nIHx8IGNociA9PT0gJ1xcXFwnKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJy8nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEFVVEhPUklUWTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVM6XG4gICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgICBpZiAoY2hyICE9PSAnLycgfHwgY2hhckF0KGJ1ZmZlciwgcG9pbnRlciArIDEpICE9PSAnLycpIGNvbnRpbnVlO1xuICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTOlxuICAgICAgICAgIGlmIChjaHIgIT09ICcvJyAmJiBjaHIgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQVVUSE9SSVRZOlxuICAgICAgICAgIGlmIChjaHIgPT09ICdAJykge1xuICAgICAgICAgICAgaWYgKHNlZW5BdCkgYnVmZmVyID0gJyU0MCcgKyBidWZmZXI7XG4gICAgICAgICAgICBzZWVuQXQgPSB0cnVlO1xuICAgICAgICAgICAgYnVmZmVyQ29kZVBvaW50cyA9IGFycmF5RnJvbShidWZmZXIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJDb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBidWZmZXJDb2RlUG9pbnRzW2ldO1xuICAgICAgICAgICAgICBpZiAoY29kZVBvaW50ID09PSAnOicgJiYgIXNlZW5QYXNzd29yZFRva2VuKSB7XG4gICAgICAgICAgICAgICAgc2VlblBhc3N3b3JkVG9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBlbmNvZGVkQ29kZVBvaW50cyA9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50LCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgICAgICBpZiAoc2VlblBhc3N3b3JkVG9rZW4pIHVybC5wYXNzd29yZCArPSBlbmNvZGVkQ29kZVBvaW50cztcbiAgICAgICAgICAgICAgZWxzZSB1cmwudXNlcm5hbWUgKz0gZW5jb2RlZENvZGVQb2ludHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycgfHxcbiAgICAgICAgICAgIChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoc2VlbkF0ICYmIGJ1ZmZlciA9PT0gJycpIHJldHVybiBJTlZBTElEX0FVVEhPUklUWTtcbiAgICAgICAgICAgIHBvaW50ZXIgLT0gYXJyYXlGcm9tKGJ1ZmZlcikubGVuZ3RoICsgMTtcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBIT1NUO1xuICAgICAgICAgIH0gZWxzZSBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSE9TVDpcbiAgICAgICAgY2FzZSBIT1NUTkFNRTpcbiAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSAmJiB1cmwuc2NoZW1lID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgIHN0YXRlID0gRklMRV9IT1NUO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICc6JyAmJiAhc2VlbkJyYWNrZXQpIHtcbiAgICAgICAgICAgIGlmIChidWZmZXIgPT09ICcnKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgICAgICAgZmFpbHVyZSA9IHVybC5wYXJzZUhvc3QoYnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBQT1JUO1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgPT09IEhPU1ROQU1FKSByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnIHx8XG4gICAgICAgICAgICAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHVybC5pc1NwZWNpYWwoKSAmJiBidWZmZXIgPT09ICcnKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgYnVmZmVyID09PSAnJyAmJiAodXJsLmluY2x1ZGVzQ3JlZGVudGlhbHMoKSB8fCB1cmwucG9ydCAhPT0gbnVsbCkpIHJldHVybjtcbiAgICAgICAgICAgIGZhaWx1cmUgPSB1cmwucGFyc2VIb3N0KGJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNociA9PT0gJ1snKSBzZWVuQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgICBlbHNlIGlmIChjaHIgPT09ICddJykgc2VlbkJyYWNrZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFBPUlQ6XG4gICAgICAgICAgaWYgKGV4ZWMoRElHSVQsIGNocikpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnIHx8XG4gICAgICAgICAgICAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSB8fFxuICAgICAgICAgICAgc3RhdGVPdmVycmlkZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdmFyIHBvcnQgPSBwYXJzZUludChidWZmZXIsIDEwKTtcbiAgICAgICAgICAgICAgaWYgKHBvcnQgPiAweEZGRkYpIHJldHVybiBJTlZBTElEX1BPUlQ7XG4gICAgICAgICAgICAgIHVybC5wb3J0ID0gKHVybC5pc1NwZWNpYWwoKSAmJiBwb3J0ID09PSBzcGVjaWFsU2NoZW1lc1t1cmwuc2NoZW1lXSkgPyBudWxsIDogcG9ydDtcbiAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHJldHVybiBJTlZBTElEX1BPUlQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGSUxFOlxuICAgICAgICAgIHVybC5zY2hlbWUgPSAnZmlsZSc7XG4gICAgICAgICAgaWYgKGNociA9PT0gJy8nIHx8IGNociA9PT0gJ1xcXFwnKSBzdGF0ZSA9IEZJTEVfU0xBU0g7XG4gICAgICAgICAgZWxzZSBpZiAoYmFzZSAmJiBiYXNlLnNjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNocikge1xuICAgICAgICAgICAgICBjYXNlIEVPRjpcbiAgICAgICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyKGpvaW4oYXJyYXlTbGljZShjb2RlUG9pbnRzLCBwb2ludGVyKSwgJycpKSkge1xuICAgICAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgIHVybC5zaG9ydGVuUGF0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGSUxFX1NMQVNIOlxuICAgICAgICAgIGlmIChjaHIgPT09ICcvJyB8fCBjaHIgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgc3RhdGUgPSBGSUxFX0hPU1Q7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJhc2UgJiYgYmFzZS5zY2hlbWUgPT09ICdmaWxlJyAmJiAhc3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlcihqb2luKGFycmF5U2xpY2UoY29kZVBvaW50cywgcG9pbnRlciksICcnKSkpIHtcbiAgICAgICAgICAgIGlmIChpc1dpbmRvd3NEcml2ZUxldHRlcihiYXNlLnBhdGhbMF0sIHRydWUpKSBwdXNoKHVybC5wYXRoLCBiYXNlLnBhdGhbMF0pO1xuICAgICAgICAgICAgZWxzZSB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIGNhc2UgRklMRV9IT1NUOlxuICAgICAgICAgIGlmIChjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fCBjaHIgPT09ICdcXFxcJyB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChidWZmZXIgPT09ICcnKSB7XG4gICAgICAgICAgICAgIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZhaWx1cmUgPSB1cmwucGFyc2VIb3N0KGJ1ZmZlcik7XG4gICAgICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICAgICAgaWYgKHVybC5ob3N0ID09PSAnbG9jYWxob3N0JykgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIH0gY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQQVRIX1NUQVJUOlxuICAgICAgICAgIGlmICh1cmwuaXNTcGVjaWFsKCkpIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGlmIChjaHIgIT09ICcvJyAmJiBjaHIgIT09ICdcXFxcJykgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSAmJiBjaHIgPT09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociAhPT0gRU9GKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBpZiAoY2hyICE9PSAnLycpIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQQVRIOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8XG4gICAgICAgICAgICAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSB8fFxuICAgICAgICAgICAgKCFzdGF0ZU92ZXJyaWRlICYmIChjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJykpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoaXNEb3VibGVEb3QoYnVmZmVyKSkge1xuICAgICAgICAgICAgICB1cmwuc2hvcnRlblBhdGgoKTtcbiAgICAgICAgICAgICAgaWYgKGNociAhPT0gJy8nICYmICEoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSkge1xuICAgICAgICAgICAgICAgIHB1c2godXJsLnBhdGgsICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1NpbmdsZURvdChidWZmZXIpKSB7XG4gICAgICAgICAgICAgIGlmIChjaHIgIT09ICcvJyAmJiAhKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkpIHtcbiAgICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09PSAnZmlsZScgJiYgIXVybC5wYXRoLmxlbmd0aCAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihidWZmZXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5ob3N0KSB1cmwuaG9zdCA9ICcnO1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNoYXJBdChidWZmZXIsIDApICsgJzonOyAvLyBub3JtYWxpemUgd2luZG93cyBkcml2ZSBsZXR0ZXJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCBidWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBpZiAodXJsLnNjaGVtZSA9PT0gJ2ZpbGUnICYmIChjaHIgPT09IEVPRiB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJykpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHVybC5wYXRoLmxlbmd0aCA+IDEgJiYgdXJsLnBhdGhbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgc2hpZnQodXJsLnBhdGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hyID09PSAnPycpIHtcbiAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gcGVyY2VudEVuY29kZShjaHIsIHBhdGhQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSDpcbiAgICAgICAgICBpZiAoY2hyID09PSAnPycpIHtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgIT09IEVPRikge1xuICAgICAgICAgICAgdXJsLnBhdGhbMF0gKz0gcGVyY2VudEVuY29kZShjaHIsIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBRVUVSWTpcbiAgICAgICAgICBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociAhPT0gRU9GKSB7XG4gICAgICAgICAgICBpZiAoY2hyID09PSBcIidcIiAmJiB1cmwuaXNTcGVjaWFsKCkpIHVybC5xdWVyeSArPSAnJTI3JztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNociA9PT0gJyMnKSB1cmwucXVlcnkgKz0gJyUyMyc7XG4gICAgICAgICAgICBlbHNlIHVybC5xdWVyeSArPSBwZXJjZW50RW5jb2RlKGNociwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIEZSQUdNRU5UOlxuICAgICAgICAgIGlmIChjaHIgIT09IEVPRikgdXJsLmZyYWdtZW50ICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwb2ludGVyKys7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2hvc3QtcGFyc2luZ1xuICBwYXJzZUhvc3Q6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHZhciByZXN1bHQsIGNvZGVQb2ludHMsIGluZGV4O1xuICAgIGlmIChjaGFyQXQoaW5wdXQsIDApID09PSAnWycpIHtcbiAgICAgIGlmIChjaGFyQXQoaW5wdXQsIGlucHV0Lmxlbmd0aCAtIDEpICE9PSAnXScpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICByZXN1bHQgPSBwYXJzZUlQdjYoc3RyaW5nU2xpY2UoaW5wdXQsIDEsIC0xKSk7XG4gICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdDtcbiAgICAvLyBvcGFxdWUgaG9zdFxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNTcGVjaWFsKCkpIHtcbiAgICAgIGlmIChleGVjKEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlRfRVhDTFVESU5HX1BFUkNFTlQsIGlucHV0KSkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHJlc3VsdCA9ICcnO1xuICAgICAgY29kZVBvaW50cyA9IGFycmF5RnJvbShpbnB1dCk7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjb2RlUG9pbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgKz0gcGVyY2VudEVuY29kZShjb2RlUG9pbnRzW2luZGV4XSwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3QgPSByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gdG9BU0NJSShpbnB1dCk7XG4gICAgICBpZiAoZXhlYyhGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5ULCBpbnB1dCkpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICByZXN1bHQgPSBwYXJzZUlQdjQoaW5wdXQpO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdDtcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY2Fubm90LWhhdmUtYS11c2VybmFtZS1wYXNzd29yZC1wb3J0XG4gIGNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhdGhpcy5ob3N0IHx8IHRoaXMuY2Fubm90QmVBQmFzZVVSTCB8fCB0aGlzLnNjaGVtZSA9PT0gJ2ZpbGUnO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2luY2x1ZGUtY3JlZGVudGlhbHNcbiAgaW5jbHVkZXNDcmVkZW50aWFsczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnVzZXJuYW1lICE9PSAnJyB8fCB0aGlzLnBhc3N3b3JkICE9PSAnJztcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpcy1zcGVjaWFsXG4gIGlzU3BlY2lhbDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBoYXNPd24oc3BlY2lhbFNjaGVtZXMsIHRoaXMuc2NoZW1lKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzaG9ydGVuLWEtdXJscy1wYXRoXG4gIHNob3J0ZW5QYXRoOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhdGggPSB0aGlzLnBhdGg7XG4gICAgdmFyIHBhdGhTaXplID0gcGF0aC5sZW5ndGg7XG4gICAgaWYgKHBhdGhTaXplICYmICh0aGlzLnNjaGVtZSAhPT0gJ2ZpbGUnIHx8IHBhdGhTaXplICE9PSAxIHx8ICFpc1dpbmRvd3NEcml2ZUxldHRlcihwYXRoWzBdLCB0cnVlKSkpIHtcbiAgICAgIHBhdGgubGVuZ3RoLS07XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLXNlcmlhbGl6ZXJcbiAgc2VyaWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXM7XG4gICAgdmFyIHNjaGVtZSA9IHVybC5zY2hlbWU7XG4gICAgdmFyIHVzZXJuYW1lID0gdXJsLnVzZXJuYW1lO1xuICAgIHZhciBwYXNzd29yZCA9IHVybC5wYXNzd29yZDtcbiAgICB2YXIgaG9zdCA9IHVybC5ob3N0O1xuICAgIHZhciBwb3J0ID0gdXJsLnBvcnQ7XG4gICAgdmFyIHBhdGggPSB1cmwucGF0aDtcbiAgICB2YXIgcXVlcnkgPSB1cmwucXVlcnk7XG4gICAgdmFyIGZyYWdtZW50ID0gdXJsLmZyYWdtZW50O1xuICAgIHZhciBvdXRwdXQgPSBzY2hlbWUgKyAnOic7XG4gICAgaWYgKGhvc3QgIT09IG51bGwpIHtcbiAgICAgIG91dHB1dCArPSAnLy8nO1xuICAgICAgaWYgKHVybC5pbmNsdWRlc0NyZWRlbnRpYWxzKCkpIHtcbiAgICAgICAgb3V0cHV0ICs9IHVzZXJuYW1lICsgKHBhc3N3b3JkID8gJzonICsgcGFzc3dvcmQgOiAnJykgKyAnQCc7XG4gICAgICB9XG4gICAgICBvdXRwdXQgKz0gc2VyaWFsaXplSG9zdChob3N0KTtcbiAgICAgIGlmIChwb3J0ICE9PSBudWxsKSBvdXRwdXQgKz0gJzonICsgcG9ydDtcbiAgICB9IGVsc2UgaWYgKHNjaGVtZSA9PT0gJ2ZpbGUnKSBvdXRwdXQgKz0gJy8vJztcbiAgICBvdXRwdXQgKz0gdXJsLmNhbm5vdEJlQUJhc2VVUkwgPyBwYXRoWzBdIDogcGF0aC5sZW5ndGggPyAnLycgKyBqb2luKHBhdGgsICcvJykgOiAnJztcbiAgICBpZiAocXVlcnkgIT09IG51bGwpIG91dHB1dCArPSAnPycgKyBxdWVyeTtcbiAgICBpZiAoZnJhZ21lbnQgIT09IG51bGwpIG91dHB1dCArPSAnIycgKyBmcmFnbWVudDtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaHJlZlxuICBzZXRIcmVmOiBmdW5jdGlvbiAoaHJlZikge1xuICAgIHZhciBmYWlsdXJlID0gdGhpcy5wYXJzZShocmVmKTtcbiAgICBpZiAoZmFpbHVyZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICB0aGlzLnNlYXJjaFBhcmFtcy51cGRhdGUoKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLW9yaWdpblxuICBnZXRPcmlnaW46IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2NoZW1lID0gdGhpcy5zY2hlbWU7XG4gICAgdmFyIHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgaWYgKHNjaGVtZSA9PT0gJ2Jsb2InKSB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBVUkxDb25zdHJ1Y3RvcihzY2hlbWUucGF0aFswXSkub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBpZiAoc2NoZW1lID09PSAnZmlsZScgfHwgIXRoaXMuaXNTcGVjaWFsKCkpIHJldHVybiAnbnVsbCc7XG4gICAgcmV0dXJuIHNjaGVtZSArICc6Ly8nICsgc2VyaWFsaXplSG9zdCh0aGlzLmhvc3QpICsgKHBvcnQgIT09IG51bGwgPyAnOicgKyBwb3J0IDogJycpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcHJvdG9jb2xcbiAgZ2V0UHJvdG9jb2w6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWUgKyAnOic7XG4gIH0sXG4gIHNldFByb3RvY29sOiBmdW5jdGlvbiAocHJvdG9jb2wpIHtcbiAgICB0aGlzLnBhcnNlKCR0b1N0cmluZyhwcm90b2NvbCkgKyAnOicsIFNDSEVNRV9TVEFSVCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC11c2VybmFtZVxuICBnZXRVc2VybmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnVzZXJuYW1lO1xuICB9LFxuICBzZXRVc2VybmFtZTogZnVuY3Rpb24gKHVzZXJuYW1lKSB7XG4gICAgdmFyIGNvZGVQb2ludHMgPSBhcnJheUZyb20oJHRvU3RyaW5nKHVzZXJuYW1lKSk7XG4gICAgaWYgKHRoaXMuY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KCkpIHJldHVybjtcbiAgICB0aGlzLnVzZXJuYW1lID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVzZXJuYW1lICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpXSwgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0KTtcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXNzd29yZFxuICBnZXRQYXNzd29yZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkO1xuICB9LFxuICBzZXRQYXNzd29yZDogZnVuY3Rpb24gKHBhc3N3b3JkKSB7XG4gICAgdmFyIGNvZGVQb2ludHMgPSBhcnJheUZyb20oJHRvU3RyaW5nKHBhc3N3b3JkKSk7XG4gICAgaWYgKHRoaXMuY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KCkpIHJldHVybjtcbiAgICB0aGlzLnBhc3N3b3JkID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhc3N3b3JkICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpXSwgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0KTtcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0XG4gIGdldEhvc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgICB2YXIgcG9ydCA9IHRoaXMucG9ydDtcbiAgICByZXR1cm4gaG9zdCA9PT0gbnVsbCA/ICcnXG4gICAgICA6IHBvcnQgPT09IG51bGwgPyBzZXJpYWxpemVIb3N0KGhvc3QpXG4gICAgICA6IHNlcmlhbGl6ZUhvc3QoaG9zdCkgKyAnOicgKyBwb3J0O1xuICB9LFxuICBzZXRIb3N0OiBmdW5jdGlvbiAoaG9zdCkge1xuICAgIGlmICh0aGlzLmNhbm5vdEJlQUJhc2VVUkwpIHJldHVybjtcbiAgICB0aGlzLnBhcnNlKGhvc3QsIEhPU1QpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdG5hbWVcbiAgZ2V0SG9zdG5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgICByZXR1cm4gaG9zdCA9PT0gbnVsbCA/ICcnIDogc2VyaWFsaXplSG9zdChob3N0KTtcbiAgfSxcbiAgc2V0SG9zdG5hbWU6IGZ1bmN0aW9uIChob3N0bmFtZSkge1xuICAgIGlmICh0aGlzLmNhbm5vdEJlQUJhc2VVUkwpIHJldHVybjtcbiAgICB0aGlzLnBhcnNlKGhvc3RuYW1lLCBIT1NUTkFNRSk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wb3J0XG4gIGdldFBvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcG9ydCA9IHRoaXMucG9ydDtcbiAgICByZXR1cm4gcG9ydCA9PT0gbnVsbCA/ICcnIDogJHRvU3RyaW5nKHBvcnQpO1xuICB9LFxuICBzZXRQb3J0OiBmdW5jdGlvbiAocG9ydCkge1xuICAgIGlmICh0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpKSByZXR1cm47XG4gICAgcG9ydCA9ICR0b1N0cmluZyhwb3J0KTtcbiAgICBpZiAocG9ydCA9PT0gJycpIHRoaXMucG9ydCA9IG51bGw7XG4gICAgZWxzZSB0aGlzLnBhcnNlKHBvcnQsIFBPUlQpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGF0aG5hbWVcbiAgZ2V0UGF0aG5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGF0aCA9IHRoaXMucGF0aDtcbiAgICByZXR1cm4gdGhpcy5jYW5ub3RCZUFCYXNlVVJMID8gcGF0aFswXSA6IHBhdGgubGVuZ3RoID8gJy8nICsgam9pbihwYXRoLCAnLycpIDogJyc7XG4gIH0sXG4gIHNldFBhdGhuYW1lOiBmdW5jdGlvbiAocGF0aG5hbWUpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgdGhpcy5wYXRoID0gW107XG4gICAgdGhpcy5wYXJzZShwYXRobmFtZSwgUEFUSF9TVEFSVCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hcbiAgZ2V0U2VhcmNoOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeTtcbiAgICByZXR1cm4gcXVlcnkgPyAnPycgKyBxdWVyeSA6ICcnO1xuICB9LFxuICBzZXRTZWFyY2g6IGZ1bmN0aW9uIChzZWFyY2gpIHtcbiAgICBzZWFyY2ggPSAkdG9TdHJpbmcoc2VhcmNoKTtcbiAgICBpZiAoc2VhcmNoID09PSAnJykge1xuICAgICAgdGhpcy5xdWVyeSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGFyQXQoc2VhcmNoLCAwKSA9PT0gJz8nKSBzZWFyY2ggPSBzdHJpbmdTbGljZShzZWFyY2gsIDEpO1xuICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgdGhpcy5wYXJzZShzZWFyY2gsIFFVRVJZKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hQYXJhbXMudXBkYXRlKCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hwYXJhbXNcbiAgZ2V0U2VhcmNoUGFyYW1zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoUGFyYW1zLmZhY2FkZTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhhc2hcbiAgZ2V0SGFzaDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQ7XG4gICAgcmV0dXJuIGZyYWdtZW50ID8gJyMnICsgZnJhZ21lbnQgOiAnJztcbiAgfSxcbiAgc2V0SGFzaDogZnVuY3Rpb24gKGhhc2gpIHtcbiAgICBoYXNoID0gJHRvU3RyaW5nKGhhc2gpO1xuICAgIGlmIChoYXNoID09PSAnJykge1xuICAgICAgdGhpcy5mcmFnbWVudCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjaGFyQXQoaGFzaCwgMCkgPT09ICcjJykgaGFzaCA9IHN0cmluZ1NsaWNlKGhhc2gsIDEpO1xuICAgIHRoaXMuZnJhZ21lbnQgPSAnJztcbiAgICB0aGlzLnBhcnNlKGhhc2gsIEZSQUdNRU5UKTtcbiAgfSxcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5xdWVyeSA9IHRoaXMuc2VhcmNoUGFyYW1zLnNlcmlhbGl6ZSgpIHx8IG51bGw7XG4gIH1cbn07XG5cbi8vIGBVUkxgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1jbGFzc1xudmFyIFVSTENvbnN0cnVjdG9yID0gZnVuY3Rpb24gVVJMKHVybCAvKiAsIGJhc2UgKi8pIHtcbiAgdmFyIHRoYXQgPSBhbkluc3RhbmNlKHRoaXMsIFVSTFByb3RvdHlwZSk7XG4gIHZhciBiYXNlID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgc3RhdGUgPSBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIG5ldyBVUkxTdGF0ZSh1cmwsIGZhbHNlLCBiYXNlKSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHtcbiAgICB0aGF0LmhyZWYgPSBzdGF0ZS5zZXJpYWxpemUoKTtcbiAgICB0aGF0Lm9yaWdpbiA9IHN0YXRlLmdldE9yaWdpbigpO1xuICAgIHRoYXQucHJvdG9jb2wgPSBzdGF0ZS5nZXRQcm90b2NvbCgpO1xuICAgIHRoYXQudXNlcm5hbWUgPSBzdGF0ZS5nZXRVc2VybmFtZSgpO1xuICAgIHRoYXQucGFzc3dvcmQgPSBzdGF0ZS5nZXRQYXNzd29yZCgpO1xuICAgIHRoYXQuaG9zdCA9IHN0YXRlLmdldEhvc3QoKTtcbiAgICB0aGF0Lmhvc3RuYW1lID0gc3RhdGUuZ2V0SG9zdG5hbWUoKTtcbiAgICB0aGF0LnBvcnQgPSBzdGF0ZS5nZXRQb3J0KCk7XG4gICAgdGhhdC5wYXRobmFtZSA9IHN0YXRlLmdldFBhdGhuYW1lKCk7XG4gICAgdGhhdC5zZWFyY2ggPSBzdGF0ZS5nZXRTZWFyY2goKTtcbiAgICB0aGF0LnNlYXJjaFBhcmFtcyA9IHN0YXRlLmdldFNlYXJjaFBhcmFtcygpO1xuICAgIHRoYXQuaGFzaCA9IHN0YXRlLmdldEhhc2goKTtcbiAgfVxufTtcblxudmFyIFVSTFByb3RvdHlwZSA9IFVSTENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxudmFyIGFjY2Vzc29yRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChnZXR0ZXIsIHNldHRlcikge1xuICByZXR1cm4ge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcylbZ2V0dGVyXSgpO1xuICAgIH0sXG4gICAgc2V0OiBzZXR0ZXIgJiYgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKVtzZXR0ZXJdKHZhbHVlKTtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH07XG59O1xuXG5pZiAoREVTQ1JJUFRPUlMpIHtcbiAgLy8gYFVSTC5wcm90b3R5cGUuaHJlZmAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhyZWZcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ2hyZWYnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ3NlcmlhbGl6ZScsICdzZXRIcmVmJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5vcmlnaW5gIGdldHRlclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtb3JpZ2luXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdvcmlnaW4nLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldE9yaWdpbicpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUucHJvdG9jb2xgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wcm90b2NvbFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAncHJvdG9jb2wnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFByb3RvY29sJywgJ3NldFByb3RvY29sJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS51c2VybmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXVzZXJuYW1lXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICd1c2VybmFtZScsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0VXNlcm5hbWUnLCAnc2V0VXNlcm5hbWUnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnBhc3N3b3JkYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGFzc3dvcmRcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3Bhc3N3b3JkJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQYXNzd29yZCcsICdzZXRQYXNzd29yZCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuaG9zdGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ2hvc3QnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldEhvc3QnLCAnc2V0SG9zdCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuaG9zdG5hbWVgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0bmFtZVxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaG9zdG5hbWUnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldEhvc3RuYW1lJywgJ3NldEhvc3RuYW1lJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5wb3J0YCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcG9ydFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAncG9ydCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0UG9ydCcsICdzZXRQb3J0JykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5wYXRobmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhdGhuYW1lXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwYXRobmFtZScsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0UGF0aG5hbWUnLCAnc2V0UGF0aG5hbWUnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnNlYXJjaGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnc2VhcmNoJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRTZWFyY2gnLCAnc2V0U2VhcmNoJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5zZWFyY2hQYXJhbXNgIGdldHRlclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNocGFyYW1zXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdzZWFyY2hQYXJhbXMnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFNlYXJjaFBhcmFtcycpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuaGFzaGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhhc2hcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ2hhc2gnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldEhhc2gnLCAnc2V0SGFzaCcpKTtcbn1cblxuLy8gYFVSTC5wcm90b3R5cGUudG9KU09OYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC10b2pzb25cbmRlZmluZUJ1aWx0SW4oVVJMUHJvdG90eXBlLCAndG9KU09OJywgZnVuY3Rpb24gdG9KU09OKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5zZXJpYWxpemUoKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLy8gYFVSTC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNVUkwtc3RyaW5naWZpY2F0aW9uLWJlaGF2aW9yXG5kZWZpbmVCdWlsdEluKFVSTFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnNlcmlhbGl6ZSgpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG5pZiAoTmF0aXZlVVJMKSB7XG4gIHZhciBuYXRpdmVDcmVhdGVPYmplY3RVUkwgPSBOYXRpdmVVUkwuY3JlYXRlT2JqZWN0VVJMO1xuICB2YXIgbmF0aXZlUmV2b2tlT2JqZWN0VVJMID0gTmF0aXZlVVJMLnJldm9rZU9iamVjdFVSTDtcbiAgLy8gYFVSTC5jcmVhdGVPYmplY3RVUkxgIG1ldGhvZFxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML2NyZWF0ZU9iamVjdFVSTFxuICBpZiAobmF0aXZlQ3JlYXRlT2JqZWN0VVJMKSBkZWZpbmVCdWlsdEluKFVSTENvbnN0cnVjdG9yLCAnY3JlYXRlT2JqZWN0VVJMJywgYmluZChuYXRpdmVDcmVhdGVPYmplY3RVUkwsIE5hdGl2ZVVSTCkpO1xuICAvLyBgVVJMLnJldm9rZU9iamVjdFVSTGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvcmV2b2tlT2JqZWN0VVJMXG4gIGlmIChuYXRpdmVSZXZva2VPYmplY3RVUkwpIGRlZmluZUJ1aWx0SW4oVVJMQ29uc3RydWN0b3IsICdyZXZva2VPYmplY3RVUkwnLCBiaW5kKG5hdGl2ZVJldm9rZU9iamVjdFVSTCwgTmF0aXZlVVJMKSk7XG59XG5cbnNldFRvU3RyaW5nVGFnKFVSTENvbnN0cnVjdG9yLCAnVVJMJyk7XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6ICFVU0VfTkFUSVZFX1VSTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgVVJMOiBVUkxDb25zdHJ1Y3RvclxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLmNvbnN0cnVjdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBVU0VfTkFUSVZFX1VSTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciBVUkwgPSBnZXRCdWlsdEluKCdVUkwnKTtcblxuLy8gYFVSTC5wYXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtY2FucGFyc2VcbiQoeyB0YXJnZXQ6ICdVUkwnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFVU0VfTkFUSVZFX1VSTCB9LCB7XG4gIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSh1cmwpIHtcbiAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIHVybFN0cmluZyA9IHRvU3RyaW5nKHVybCk7XG4gICAgdmFyIGJhc2UgPSBsZW5ndGggPCAyIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9TdHJpbmcoYXJndW1lbnRzWzFdKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBVUkwodXJsU3RyaW5nLCBiYXNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvZGF0ZS9ub3cnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmlsdGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9pbmNsdWRlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmtleXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmtleXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvdHJpbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvYXNzaWduJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnNldEltbWVkaWF0ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3dlYi91cmwtc2VhcmNoLXBhcmFtcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3dlYi91cmwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuZGVsZXRlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5oYXMnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLnNpemUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlVSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vdXJsLXNlYXJjaC1wYXJhbXMnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLmNhbi1wYXJzZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLnBhcnNlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwudG8tanNvbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguVVJMO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IGFwcCBhcyBFbGVjdHJvbkFwcCwgQnJvd3NlcldpbmRvdywgZGlhbG9nIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgc2VydmUgZnJvbSBcImVsZWN0cm9uLXNlcnZlXCI7XG5pbXBvcnQgU3RvcmUgZnJvbSBcImVsZWN0cm9uLXN0b3JlXCI7XG5pbXBvcnQgRGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgeyBjcmVhdGVXaW5kb3csIHhib3hXb3JrZXIgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgQXV0aGVudGljYXRpb24gZnJvbSBcIi4vYXV0aGVudGljYXRpb25cIjtcbmltcG9ydCBJcGMgZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MgfSBmcm9tICcuLi9yZW5kZXJlci9jb250ZXh0L3VzZXJDb250ZXh0LmRlZmF1bHRzJ1xuXG5pbXBvcnQgeGJveFdlYkFwaSBmcm9tIFwieGJveC13ZWJhcGlcIjtcbmltcG9ydCB4Q2xvdWRBcGkgZnJvbSBcIi4vaGVscGVycy94Y2xvdWRhcGlcIjtcblxuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCI7XG5cbmludGVyZmFjZSBzdGFydHVwRmxhZ3Mge1xuICBmdWxsc2NyZWVuOiBib29sZWFuO1xuICBhdXRvU3RyZWFtOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uIHtcbiAgcHJpdmF0ZSBfbG9nO1xuICBwdWJsaWMgX3N0b3JlID0gbmV3IFN0b3JlKCk7XG4gIHByaXZhdGUgX3N0YXJ0dXBGbGFnczogc3RhcnR1cEZsYWdzID0ge1xuICAgIGZ1bGxzY3JlZW46IGZhbHNlLFxuICAgIGF1dG9TdHJlYW06IFwiXCIsXG4gIH07XG5cbiAgcHVibGljIF9pc1Byb2R1Y3Rpb246IGJvb2xlYW4gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG4gIHByaXZhdGUgX2lzQ2k6IGJvb2xlYW4gPSBwcm9jZXNzLmVudi5DSSAhPT0gdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pc01hYzogYm9vbGVhbiA9IHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCI7XG4gIHByaXZhdGUgX2lzV2luZG93czogYm9vbGVhbiA9IHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIjtcbiAgcHJpdmF0ZSBfaXNRdWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBfbWFpbldpbmRvdztcbiAgcHVibGljIF9pcGM6IElwYztcbiAgcHVibGljIF9hdXRoZW50aWNhdGlvbjogQXV0aGVudGljYXRpb247XG5cbiAgcHVibGljIHN0cmVhbWluZ1Rva2VuczogYW55XG5cbiAgcHVibGljIHdlYlRva2VuOiBhbnlcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIF9fZmlsZW5hbWUgKyBcIltjb25zdHJ1Y3RvcigpXSBTdGFydGluZyBYU3RyZWFtaW5nIHZcIiArIHBrZy52ZXJzaW9uXG4gICAgKTtcbiAgICB0aGlzLl9sb2cgPSBEZWJ1ZyhcInhzdHJlYW1pbmdcIik7XG5cbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXG4gICAgICBcImVuYWJsZS1mZWF0dXJlc1wiLFxuICAgICAgXCJWYWFwaUlnbm9yZURyaXZlckNoZWNrcyxWYWFwaVZpZGVvRGVjb2RlcixQbGF0Zm9ybUhFVkNEZWNvZGVyU3VwcG9ydCxDYW52YXNPb3BSYXN0ZXJpemF0aW9uXCJcbiAgICApO1xuICAgIC8vIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaCgnZGlzYWJsZS1mZWF0dXJlcycsICdVc2VDaHJvbWVPU0RpcmVjdFZpZGVvRGVjb2RlcicpO1xuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcImVuYWJsZS1ncHUtcmFzdGVyaXphdGlvblwiKTtcbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXCJlbmFibGUtb29wLXJhc3Rlcml6YXRpb25cIik7XG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFwiYWNjZWxlcmF0ZWQtdmlkZW8tZGVjb2RlXCIpO1xuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcIm96b25lLXBsYXRmb3JtLWhpbnRcIiwgXCJ4MTFcIik7XG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFwiaWdub3JlLWdwdS1ibG9ja2xpc3RcIik7XG4gICAgLy8gRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKCdlbmFibGUtemVyby1jb3B5Jyk7XG5cbiAgICB0aGlzLnJlYWRTdGFydHVwRmxhZ3MoKTtcbiAgICB0aGlzLmxvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCk7XG5cbiAgICAvLyBFbGVjdHJvbkFwcC5yZW1vdmVBc0RlZmF1bHRQcm90b2NvbENsaWVudCgnbXMteGFsLXB1YmxpYy1iZXRhLTAwMDAwMDAwNGMyMGE5MDgnKVxuXG4gICAgdGhpcy5faXBjID0gbmV3IElwYyh0aGlzKTtcbiAgICB0aGlzLl9hdXRoZW50aWNhdGlvbiA9IG5ldyBBdXRoZW50aWNhdGlvbih0aGlzKTtcblxuICAgIHRoaXMuX2lwYy5zdGFydFVwKCk7XG4gIH1cblxuICBsb2cobmFtZXNwYWNlID0gXCJhcHBsaWNhdGlvblwiLCAuLi5hcmdzKSB7XG4gICAgdGhpcy5fbG9nLmV4dGVuZChuYW1lc3BhY2UpKC4uLmFyZ3MpO1xuICB9XG5cbiAgZ2V0U3RhcnR1cEZsYWdzKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFydHVwRmxhZ3M7XG4gIH1cblxuICByZXNldEF1dG9zdHJlYW0oKSB7XG4gICAgdGhpcy5fc3RhcnR1cEZsYWdzLmF1dG9TdHJlYW0gPSBcIlwiO1xuICB9XG5cbiAgcmVhZFN0YXJ0dXBGbGFncygpIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIFwiYXBwbGljYXRpb25cIixcbiAgICAgIF9fZmlsZW5hbWUgKyBcIltyZWFkU3RhcnR1cEZsYWdzKCldIFByb2dyYW0gYXJncyBkZXRlY3RlZDpcIixcbiAgICAgIHByb2Nlc3MuYXJndlxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGFyZyBpbiBwcm9jZXNzLmFyZ3YpIHtcbiAgICAgIGlmIChwcm9jZXNzLmFyZ3ZbYXJnXS5pbmNsdWRlcyhcIi0tZnVsbHNjcmVlblwiKSkge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImFwcGxpY2F0aW9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltyZWFkU3RhcnR1cEZsYWdzKCldIC0tZnVsbHNjcmVlbiBzd2l0Y2ggZm91bmQuIFNldHRpbmcgZnVsbHNjcmVlbiB0byB0cnVlXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc3RhcnR1cEZsYWdzLmZ1bGxzY3JlZW4gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5hcmd2W2FyZ10uaW5jbHVkZXMoXCItLWNvbm5lY3Q9XCIpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHByb2Nlc3MuYXJndlthcmddLnN1YnN0cmluZygxMCk7XG5cbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJhcHBsaWNhdGlvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbcmVhZFN0YXJ0dXBGbGFncygpXSAtLWNvbm5lY3Qgc3dpdGNoIGZvdW5kLiBTZXR0aW5nIGF1dG9TdHJlYW0gdG9cIixcbiAgICAgICAgICBrZXlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc3RhcnR1cEZsYWdzLmF1dG9TdHJlYW0gPSBrZXk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2coXG4gICAgICBcImFwcGxpY2F0aW9uXCIsXG4gICAgICBfX2ZpbGVuYW1lICsgXCJbcmVhZFN0YXJ0dXBGbGFncygpXSBFbmQgcmVzdWx0IG9mIHN0YXJ0dXBGbGFnczpcIixcbiAgICAgIHRoaXMuX3N0YXJ0dXBGbGFnc1xuICAgICk7XG4gIH1cblxuICBsb2FkQXBwbGljYXRpb25EZWZhdWx0cygpIHtcbiAgICBpZiAodGhpcy5faXNQcm9kdWN0aW9uID09PSB0cnVlICYmIHRoaXMuX2lzQ2kgPT09IGZhbHNlKSB7XG4gICAgICBzZXJ2ZSh7IGRpcmVjdG9yeTogXCJhcHBcIiB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzQ2kgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkgKiAxMDA7XG4gICAgICBFbGVjdHJvbkFwcC5zZXRQYXRoKFxuICAgICAgICBcInVzZXJEYXRhXCIsXG4gICAgICAgIGAke0VsZWN0cm9uQXBwLmdldFBhdGgoXCJ1c2VyRGF0YVwiKX0gKCR7cmFuZG9tfSlgXG4gICAgICApO1xuICAgICAgRWxlY3Ryb25BcHAuc2V0UGF0aChcbiAgICAgICAgXCJzZXNzaW9uRGF0YVwiLFxuICAgICAgICBgJHtFbGVjdHJvbkFwcC5nZXRQYXRoKFwidXNlckRhdGFcIil9ICgke3JhbmRvbX0pYFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N0b3JlLmRlbGV0ZShcInVzZXJcIik7XG4gICAgICB0aGlzLl9zdG9yZS5kZWxldGUoXCJhdXRoXCIpO1xuXG4gICAgICBzZXJ2ZSh7IGRpcmVjdG9yeTogXCJhcHBcIiB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgRWxlY3Ryb25BcHAuc2V0UGF0aChcbiAgICAgICAgXCJ1c2VyRGF0YVwiLFxuICAgICAgICBgJHtFbGVjdHJvbkFwcC5nZXRQYXRoKFwidXNlckRhdGFcIil9IChkZXZlbG9wbWVudClgXG4gICAgICApO1xuICAgIH1cblxuICAgIEVsZWN0cm9uQXBwLndoZW5SZWFkeSgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW2xvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCldIEVsZWN0cm9uIGhhcyBiZWVuIGZ1bGx5IGxvYWRlZC4gUmVhZHkgdG8gb3BlbiB3aW5kb3dzXCJcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm9wZW5NYWluV2luZG93KCk7XG4gICAgICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uLnN0YXJ0V2Vidmlld0hvb2tzKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltsb2FkQXBwbGljYXRpb25EZWZhdWx0cygpXSBFbGVjdHJvbiBoYXMgZmFpbGVkIHRvIGxvYWQ6XCIsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgRWxlY3Ryb25BcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNYWMgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbbG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMoKV0gRWxlY3Ryb24gZGV0ZWN0ZWQgdGhhdCBhbGwgd2luZG93cyBhcmUgY2xvc2VkLiBSdW5uaW5nIGluIGJhY2tncm91bmQuLi5cIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbbG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMoKV0gRWxlY3Ryb24gZGV0ZWN0ZWQgdGhhdCBhbGwgd2luZG93cyBhcmUgY2xvc2VkLiBRdWl0dGluZyBhcHAuLi5cIlxuICAgICAgICApO1xuICAgICAgICBFbGVjdHJvbkFwcC5xdWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBFbGVjdHJvbkFwcC5vbihcImFjdGl2YXRlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuX21haW5XaW5kb3cgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMuX21haW5XaW5kb3cuc2hvdygpXG4gICAgICAgIDogdGhpcy5vcGVuTWFpbldpbmRvdygpO1xuICAgIH0pO1xuICAgIEVsZWN0cm9uQXBwLm9uKFwiYmVmb3JlLXF1aXRcIiwgKCkgPT4gKHRoaXMuX2lzUXVpdHRpbmcgPSB0cnVlKSk7XG4gIH1cblxuICBfd2ViQXBpOiB4Ym94V2ViQXBpO1xuICBfeEhvbWVBcGk6IHhDbG91ZEFwaTtcbiAgX3hDbG91ZEFwaTogeENsb3VkQXBpO1xuICBfeGJveFdvcmtlcjogeGJveFdvcmtlcjtcblxuICBhdXRoZW50aWNhdGlvbkNvbXBsZXRlZChzdHJlYW1pbmdUb2tlbnMsIHdlYlRva2VuKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcImVsZWN0cm9uXCIsXG4gICAgICBfX2ZpbGVuYW1lICsgXCJbYXV0aGVudGljYXRpb25Db21wbGV0ZWQoKV0gYXV0aGVudGljYXRpb25Db21wbGV0ZWQgY2FsbGVkXCJcbiAgICApO1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgX19maWxlbmFtZSArIFwiW2F1dGhlbnRpY2F0aW9uQ29tcGxldGVkKCldIHN0cmVhbWluZ1Rva2VuczpcIixcbiAgICAgIHN0cmVhbWluZ1Rva2Vuc1xuICAgICk7XG5cbiAgICB0aGlzLnN0cmVhbWluZ1Rva2VucyA9IHN0cmVhbWluZ1Rva2Vuc1xuICAgIHRoaXMud2ViVG9rZW4gPSB3ZWJUb2tlblxuXG4gICAgdGhpcy5fd2ViQXBpID0gbmV3IHhib3hXZWJBcGkoe1xuICAgICAgdXNlclRva2VuOiB3ZWJUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgdWhzOiB3ZWJUb2tlbi5kYXRhLkRpc3BsYXlDbGFpbXMueHVpWzBdLnVocyxcbiAgICB9KTtcblxuICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uLl9pc0F1dGhlbnRpY2F0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5fYXV0aGVudGljYXRpb24uX2lzQXV0aGVudGljYXRlZCA9IHRydWU7XG5cbiAgICB0aGlzLl93ZWJBcGlcbiAgICAgIC5nZXRQcm92aWRlcihcInByb2ZpbGVcIilcbiAgICAgIC5nZXQoXG4gICAgICAgIFwiL3VzZXJzL21lL3Byb2ZpbGUvc2V0dGluZ3M/c2V0dGluZ3M9R2FtZURpc3BsYXlOYW1lLEdhbWVEaXNwbGF5UGljUmF3LEdhbWVyc2NvcmUsR2FtZXJ0YWdcIlxuICAgICAgKVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnByb2ZpbGVVc2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzZXR0aW5nIGluIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzW3NldHRpbmddLmlkID09PSBcIkdhbWVydGFnXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc3RvcmUuc2V0KFxuICAgICAgICAgICAgICAgIFwidXNlci5nYW1lcnRhZ1wiLFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10udmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10uaWQgPT09XG4gICAgICAgICAgICAgIFwiR2FtZURpc3BsYXlQaWNSYXdcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlLnNldChcbiAgICAgICAgICAgICAgICBcInVzZXIuZ2FtZXJwaWNcIixcbiAgICAgICAgICAgICAgICByZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzW3NldHRpbmddLnZhbHVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICByZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzW3NldHRpbmddLmlkID09PSBcIkdhbWVyc2NvcmVcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlLnNldChcbiAgICAgICAgICAgICAgICBcInVzZXIuZ2FtZXJzY29yZVwiLFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10udmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSdW4gd29ya2Vyc1xuICAgICAgICB0aGlzLl94Ym94V29ya2VyID0gbmV3IHhib3hXb3JrZXIodGhpcyk7XG4gICAgICAgIHRoaXMuX2lwYy5vblVzZXJMb2FkZWQoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW2F1dGhlbnRpY2F0aW9uQ29tcGxldGVkKCldIEZhaWxlZCB0byByZXRyaWV2ZSB1c2VyIHByb2ZpbGU6XCIsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KHtcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgXCJFcnJvcjogRmFpbGVkIHRvIHJldHJpZXZlIHVzZXIgcHJvZmlsZTpcIiArIEpTT04uc3RyaW5naWZ5KGVycm9yKSxcbiAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBvcGVuTWFpbldpbmRvdygpIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgIF9fZmlsZW5hbWUgKyBcIltvcGVuTWFpbldpbmRvdygpXSBDcmVhdGluZyBuZXcgbWFpbiB3aW5kb3dcIlxuICAgICk7XG5cbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fc3RvcmUuZ2V0KCdzZXR0aW5ncycsIGRlZmF1bHRTZXR0aW5ncylcbiAgICBjb25zb2xlLmxvZygnc2V0dGluZ3M6Jywgc2V0dGluZ3MpXG5cbiAgICBjb25zdCB3aW5kb3dPcHRpb25zOiBhbnkgPSB7XG4gICAgICB0aXRsZTogXCJYU3RyZWFtaW5nXCIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiKDI2LCAyNywgMzApXCIsXG4gICAgfTtcblxuICAgIGlmIChzZXR0aW5ncy5mdWxsc2NyZWVuKSB7XG4gICAgICB3aW5kb3dPcHRpb25zLmZ1bGxzY3JlZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX21haW5XaW5kb3cgPSBjcmVhdGVXaW5kb3coXCJtYWluXCIsIHtcbiAgICAgIHdpZHRoOiAxMjgwLFxuICAgICAgaGVpZ2h0OiA4MDAsXG4gICAgICAuLi53aW5kb3dPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbWFpbldpbmRvdy5vbihcInNob3dcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sb2coXG4gICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgX19maWxlbmFtZSArIFwiW29wZW5NYWluV2luZG93KCldIFNob3dpbmcgTWFpbiB3aW5kb3cuXCJcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9tYWluV2luZG93Lm9uKFwiY2xvc2VcIiwgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNYWMgPT09IHRydWUgJiYgdGhpcy5faXNRdWl0dGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgKyBcIltvcGVuTWFpbldpbmRvdygpXSBNYWluIHdpbmRvd3MgaGFzIGJlZW4gaGlkZGVuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbWFpbldpbmRvdy5oaWRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArIFwiW29wZW5NYWluV2luZG93KCldIE1haW4gd2luZG93cyBoYXMgYmVlbiBjbG9zZWRcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tYWluV2luZG93ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgXG4gICAgY29uc3QgbG9jYWxlID0gc2V0dGluZ3MubG9jYWxlIHx8ICdlbidcblxuICAgIGlmICh0aGlzLl9pc1Byb2R1Y3Rpb24gPT09IHRydWUgJiYgdGhpcy5faXNDaSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX21haW5XaW5kb3cubG9hZFVSTChgYXBwOi8vLi8ke2xvY2FsZX0vaG9tZWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwb3J0ID0gcHJvY2Vzcy5hcmd2WzJdIHx8IDMwMDA7XG4gICAgICB0aGlzLl9tYWluV2luZG93LmxvYWRVUkwoYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS8ke2xvY2FsZX0vaG9tZWApO1xuXG4gICAgICAvLyBpZih0aGlzLl9pc0NpICE9PSB0cnVlKXtcbiAgICAgIC8vICAgICB0aGlzLl9tYWluV2luZG93LndlYkNvbnRlbnRzLm9wZW5EZXZUb29scygpXG4gICAgICAvLyAgICAgdGhpcy5vcGVuR1BVV2luZG93KClcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cblxuICBfZ3B1V2luZG93O1xuXG4gIG9wZW5HUFVXaW5kb3coKSB7XG4gICAgdGhpcy5fZ3B1V2luZG93ID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgICAgd2lkdGg6IDgwMCxcbiAgICAgIGhlaWdodDogNjAwLFxuICAgIH0pO1xuXG4gICAgLy8gTG9hZCBjaHJvbWU6Ly9ncHVcbiAgICB0aGlzLl9ncHVXaW5kb3cubG9hZFVSTChcImNocm9tZTovL2dwdVwiKTtcblxuICAgIC8vIE9wZW4gRGV2VG9vbHNcbiAgICB0aGlzLl9ncHVXaW5kb3cud2ViQ29udGVudHMub3BlbkRldlRvb2xzKCk7XG4gIH1cblxuICBxdWl0KCkge1xuICAgIEVsZWN0cm9uQXBwLnF1aXQoKTtcbiAgfVxuXG4gIHJlc3RhcnQoKSB7XG4gICAgdGhpcy5xdWl0KCk7XG4gICAgRWxlY3Ryb25BcHAucmVsYXVuY2goKTtcbiAgfVxufVxuXG5uZXcgQXBwbGljYXRpb24oKTtcbiJdLCJuYW1lcyI6WyJzZXNzaW9uIiwiZGlhbG9nIiwiY3JlYXRlV2luZG93IiwiWGFsIiwiQXV0aFRva2VuU3RvcmUiLCJkZWZhdWx0U2V0dGluZ3MiLCJBdXRoZW50aWNhdGlvbiIsImNvbnN0cnVjdG9yIiwiYXBwbGljYXRpb24iLCJfZGVmaW5lUHJvcGVydHkiLCJfYXBwbGljYXRpb24iLCJfdG9rZW5TdG9yZSIsImxvYWQiLCJfeGFsIiwiY2hlY2tBdXRoZW50aWNhdGlvbiIsIl9pc0F1dGhlbnRpY2F0aW5nIiwiX2lzQXV0aGVudGljYXRlZCIsImxvZyIsImhhc1ZhbGlkQXV0aFRva2VucyIsInN0YXJ0U2lsZW50RmxvdyIsImdldFVzZXJUb2tlbiIsInVuZGVmaW5lZCIsInJlZnJlc2hUb2tlbnMiLCJ0aGVuIiwiZ2V0U3RyZWFtaW5nVG9rZW4iLCJzdHJlYW1pbmdUb2tlbnMiLCJ4Q2xvdWRUb2tlbiIsIl9hcHBMZXZlbCIsImdldFdlYlRva2VuIiwid2ViVG9rZW4iLCJfX2ZpbGVuYW1lIiwiYXV0aGVudGljYXRpb25Db21wbGV0ZWQiLCJjYXRjaCIsImVycm9yIiwic2hvd01lc3NhZ2VCb3giLCJtZXNzYWdlIiwiX0pTT04kc3RyaW5naWZ5IiwidHlwZSIsImVyciIsImNsZWFyIiwic3RhcnRBdXRoZmxvdyIsImdldFJlZGlyZWN0VXJpIiwicmVkaXJlY3QiLCJvcGVuQXV0aFdpbmRvdyIsInNpc3VBdXRoIiwiTXNhT2F1dGhSZWRpcmVjdCIsIl9hdXRoQ2FsbGJhY2siLCJyZWRpcmVjdFVyaSIsImF1dGhlbnRpY2F0ZVVzZXIiLCJyZXN1bHQiLCJzaG93RXJyb3JCb3giLCJzdGFydFdlYnZpZXdIb29rcyIsImRlZmF1bHRTZXNzaW9uIiwid2ViUmVxdWVzdCIsIm9uSGVhZGVyc1JlY2VpdmVkIiwidXJscyIsImRldGFpbHMiLCJjYWxsYmFjayIsIl9jb250ZXh0IiwicmVzcG9uc2VIZWFkZXJzIiwiTG9jYXRpb24iLCJfaW5jbHVkZXNJbnN0YW5jZVByb3BlcnR5IiwiY2FsbCIsIl9hcHAiLCJSZWRpcmVjdFVyaSIsIl9hdXRoV2luZG93IiwiY2xvc2UiLCJjYW5jZWwiLCJ1cmwiLCJhdXRoV2luZG93Iiwid2lkdGgiLCJoZWlnaHQiLCJ0aXRsZSIsImxvYWRVUkwiLCJvbiIsInRva2VuU3RvcmUiLCJjb25zb2xlIiwic2lzdVRva2VuIiwiZ2V0U2lzdVRva2VuIiwiRXJyb3IiLCJ4c3RzVG9rZW4iLCJkb1hzdHNBdXRob3JpemF0aW9uIiwiX3hob21lVG9rZW4iLCJnZXRTZWNvbmRzVmFsaWQiLCJnZXRTdHJlYW1Ub2tlbiIsIl94Y2xvdWRUb2tlbiIsInNldHRpbmdzIiwiX3N0b3JlIiwiZ2V0IiwiZm9yY2VfcmVnaW9uX2lwIiwieEhvbWVUb2tlbiIsIkh0dHAiLCJBY2hpdmVtZW50TWFuYWdlciIsImdldEhpc3RvcnlBY2hpdmVtZW50cyIsImh0dHAiLCJwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSIsIl9Qcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInVocyIsImRhdGEiLCJEaXNwbGF5Q2xhaW1zIiwieHVpIiwieGlkIiwiQXV0aG9yaXphdGlvbiIsIlRva2VuIiwicmVzIiwidGl0bGVzIiwiZSIsImdldEFjaGl2ZW1lbnREZXRhaWwiLCJ0aXRsZUlkIiwiYWNoaWV2ZW1lbnRzIiwic2NyZWVuIiwiQnJvd3NlcldpbmRvdyIsIlN0b3JlIiwicGF0aCIsIndpbmRvd05hbWUiLCJvcHRpb25zIiwia2V5IiwibmFtZSIsInN0b3JlIiwiZGVmYXVsdFNpemUiLCJzdGF0ZSIsInJlc3RvcmUiLCJnZXRDdXJyZW50UG9zaXRpb24iLCJ3aW4iLCJyZW1vdmVNZW51IiwicG9zaXRpb24iLCJnZXRQb3NpdGlvbiIsInNpemUiLCJnZXRTaXplIiwieCIsInkiLCJ3aW5kb3dXaXRoaW5Cb3VuZHMiLCJ3aW5kb3dTdGF0ZSIsImJvdW5kcyIsInJlc2V0VG9EZWZhdWx0cyIsImdldFByaW1hcnlEaXNwbGF5IiwiX09iamVjdCRhc3NpZ24iLCJlbnN1cmVWaXNpYmxlT25Tb21lRGlzcGxheSIsInZpc2libGUiLCJfc29tZUluc3RhbmNlUHJvcGVydHkiLCJnZXRBbGxEaXNwbGF5cyIsImRpc3BsYXkiLCJzYXZlU3RhdGUiLCJpc01pbmltaXplZCIsImlzTWF4aW1pemVkIiwic2V0IiwiYnJvd3Nlck9wdGlvbnMiLCJfb2JqZWN0U3ByZWFkIiwid2ViUHJlZmVyZW5jZXMiLCJub2RlSW50ZWdyYXRpb24iLCJjb250ZXh0SXNvbGF0aW9uIiwiZW5hYmxlQmxpbmtGZWF0dXJlcyIsInNhbmRib3giLCJwcmVsb2FkIiwiam9pbiIsIl9fZGlybmFtZSIsImF1dG9IaWRlTWVudUJhciIsImh0dHBzIiwiaG9zdCIsIm1ldGhvZCIsInJlc3BvbnNlRGF0YSIsInJlcSIsInJlcXVlc3QiLCJoZWFkZXJzIiwicmVzcG9uc2UiLCJzdGF0dXNDb2RlIiwicmV0dXJuRGF0YSIsIkpTT04iLCJwYXJzZSIsIl9zZXRUaW1lb3V0Iiwic3RhdHVzIiwiYm9keSIsImVuZCIsInBvc3QiLCJwb3N0RGF0YSIsIm1lcmdlZEhlYWRlcnMiLCJzdWJzdHJpbmciLCJ3cml0ZSIsInhDbG91ZEFwaSIsInhib3hXb3JrZXIiLCJzZXRVcGRhdGVOb3RpZmljYXRpb24iLCJ1cGRhdGVyIiwiU3RyZWFtTWFuYWdlciIsImdldEFwaSIsImdldERlZmF1bHRSZWdpb24iLCJiYXNlVXJpIiwiZ3NUb2tlbiIsImdldFNlc3Npb24iLCJzZXNzaW9uSWQiLCJfc2Vzc2lvbnMiLCJzdGFydFN0cmVhbSIsInRhcmdldCIsInBsYXlSZXN1bHQiLCJzZXNzaW9uUGF0aCIsInNwbGl0Iiwic3RyZWFtU2Vzc2lvbiIsImlkIiwicGxheWVyU3RhdGUiLCJtb25pdG9yU2Vzc2lvbiIsInN0b3BTdHJlYW0iLCJzZW5kU2RwIiwic2RwIiwic2VuZENoYXRTZHAiLCJzZW5kSWNlIiwiaWNlIiwic2VuZEtlZXBhbGl2ZSIsImdldFN0cmVhbVN0YXRlIiwiX2F1dGhlbnRpY2F0aW9uIiwiZ2V0TXNhbFRva2VuIiwibXNhbFRva2VuIiwic2VuZE1TQUxBdXRoIiwibHB0IiwiYWxlcnQiLCJ3YWl0aW5nVGltZXMiLCJnZXRXYWl0aW5nVGltZXMiLCJlcnJvckRldGFpbHMiLCJnZXRBY3RpdmVTZXNzaW9ucyIsIkhUVFAiLCJheGlvcyIsIlRpdGxlTWFuYWdlciIsIl9odHRwIiwiZ2V0T2ZmaWNpYWxUaXRsZXMiLCJvZmZpY2lhbFRpdGxlcyIsInRpbWVvdXQiLCJQcm9kdWN0cyIsImdldEdhbWVQYXNzUHJvZHVjdHMiLCJwcm9kdWN0SWRRdWV1ZSIsInYyVGl0bGVNYXAiLCJfQXJyYXkkaXNBcnJheSIsIl9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSIsInByb2R1Y3RJZCIsInB1c2giLCJtZXJnZVByb2R1Y3RJZHMiLCJfU2V0IiwicHJvZHVjdHMiLCJtZXJnZWRUaXRsZXMiLCJfc29ydEluc3RhbmNlUHJvcGVydHkiLCJhIiwiYiIsIlByb2R1Y3RUaXRsZSIsImxvY2FsZUNvbXBhcmUiLCJnZXROZXdUaXRsZXMiLCJUaXRsZSIsInhib3hUaXRsZUlkIiwic3VwcG9ydGVkSW5wdXRUeXBlcyIsInNldENhdGFsb2dEZXRhaWxzIiwidGl0bGVJbmZvIiwiY2F0YWxvZ0RldGFpbHMiLCJ0b1N0cmluZyIsInJlc3RvcmVGcm9tQ2FjaGUiLCJjYWNoZWRPYmoiLCJUb2tlblN0b3JlIiwiYXJncyIsInRva2VucyIsImxvYWRKc29uIiwic2F2ZSIsInVzZXJUb2tlbiIsIl91c2VyVG9rZW4iLCJfc2lzdVRva2VuIiwiand0S2V5cyIsIl9qd3RLZXlzIiwiZGVsZXRlIiwiZWxlY3Ryb24iLCJjb21wYXJlIiwiZ2giLCJwa2ciLCJkZWZhdWx0T3B0aW9ucyIsImRlYnVnIiwic2lsZW50IiwicHJlcmVsZWFzZXMiLCJsb2dnZXIiLCJ3aXRoRGVmYXVsdHMiLCJhcHAiLCJpc1JlYWR5IiwiY2hlY2tGb3JVcGRhdGVzIiwicmVwb3NpdG9yeSIsInRva2VuIiwiaXNQYWNrYWdlZCIsImdoT2JqIiwidXNlciIsInJlcG8iLCJsYXRlc3RSZWxlYXNlIiwicmVsZWFzZXMiLCJhdXRob3JpemF0aW9uIiwicmVsZWFzZSIsInByZXJlbGVhc2UiLCJzaG93RGlhbG9nIiwidGFnX25hbWUiLCJnZXRWZXJzaW9uIiwic2hvd1VwZGF0ZURpYWxvZyIsImdldE5hbWUiLCJkZXRhaWwiLCJfdHJpbUluc3RhbmNlUHJvcGVydHkiLCJidXR0b25zIiwiZGVmYXVsdElkIiwiY2FuY2VsSWQiLCJfc2V0SW1tZWRpYXRlIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJodG1sX3VybCIsImludGVydmFsRnJpZW5kcyIsInVwZGF0ZUZyaWVuZHMiLCJmcmllbmRzIiwib25saW5lRnJpZW5kcyIsImZyaWVuZCIsInByZXNlbmNlU3RhdGUiLCJfb25saW5lRnJpZW5kcyIsIl93ZWJBcGkiLCJnZXRQcm92aWRlciIsImdldEZyaWVuZHMiLCJwZW9wbGUiLCJfZnJpZW5kcyIsInh1aWQiLCJBZGRyZXNzNiIsIl9ob3N0IiwiX3Rva2VuIiwiX3R5cGUiLCJnZXRUaXRsZXMiLCJnZXRSZWNlbnRUaXRsZXMiLCJkZXZpY2VJbmZvIiwiYXBwSW5mbyIsImVudiIsImNsaWVudEFwcElkIiwiY2xpZW50QXBwVHlwZSIsImNsaWVudEFwcFZlcnNpb24iLCJjbGllbnRTZGtWZXJzaW9uIiwiaHR0cEVudmlyb25tZW50Iiwic2RrSW5zdGFsbElkIiwiZGV2IiwiaHciLCJtYWtlIiwibW9kZWwiLCJzZGt0eXBlIiwib3MiLCJyZXNvbHV0aW9uIiwidmVyIiwicGxhdGZvcm0iLCJkaXNwbGF5SW5mbyIsImRpbWVuc2lvbnMiLCJ3aWR0aEluUGl4ZWxzIiwiaGVpZ2h0SW5QaXhlbHMiLCJwaXhlbERlbnNpdHkiLCJkcGlYIiwiZHBpWSIsInN5c3RlbVVwZGF0ZUdyb3VwIiwiY2xpZW50U2Vzc2lvbklkIiwibmFub1ZlcnNpb24iLCJlbmFibGVUZXh0VG9TcGVlY2giLCJoaWdoQ29udHJhc3QiLCJsb2NhbGUiLCJ1c2VJY2VDb25uZWN0aW9uIiwidGltZXpvbmVPZmZzZXRNaW51dGVzIiwic2RrVHlwZSIsIm9zTmFtZSIsInNlcnZlcklkIiwiZmFsbGJhY2tSZWdpb25OYW1lcyIsIm1lc3NhZ2VUeXBlIiwiY29uZmlndXJhdGlvbiIsImNoYXRDb25maWd1cmF0aW9uIiwiYnl0ZXNQZXJTYW1wbGUiLCJleHBlY3RlZENsaXBEdXJhdGlvbk1zIiwiZm9ybWF0IiwiY29kZWMiLCJjb250YWluZXIiLCJudW1DaGFubmVscyIsInNhbXBsZUZyZXF1ZW5jeUh6IiwiY2hhdCIsIm1pblZlcnNpb24iLCJtYXhWZXJzaW9uIiwiY29udHJvbCIsImlucHV0Iiwic2RwUmVzdWx0IiwiZXhjaGFuZ2VTZHAiLCJleGNoYW5nZVJlc3BvbnNlIiwiaXNNZWRpYVN0cmVhbXNDaGF0UmVuZWdvdGlhdGlvbiIsImNoZWNrSWNlIiwiaWNlUmVzdWx0IiwiX2ljZVJlc3VsdCIsImV4Y2hhbmdlSWNlIiwiY29tcHV0ZWRDYW5kaWRhdGVzIiwiY2FuZGlkYXRlIiwiY2FuZGlkYXRlQWRkcmVzcyIsImxlbmd0aCIsInN1YnN0ciIsImFkZHJlc3MiLCJ0ZXJlZG8iLCJpbnNwZWN0VGVyZWRvIiwiY2xpZW50NCIsInNkcE1MaW5lSW5kZXgiLCJzZHBNaWQiLCJ1ZHBQb3J0IiwicGF0dGVybiIsIlJlZ0V4cCIsImxzdCIsIml0ZW0iLCJncm91cHMiLCJleGVjIiwiaXB2NiIsImZpcnN0SXAiLCJpcCIsInNlY29uZElwIiwibmV3Q2FuZGlkYXRlcyIsImZvdW5kYXRpb24iLCJuZXdDYW5kaWRhdGUiLCJwcmlvcml0eSIsInBvcnQiLCJ0aGVfcmVzdCIsImNhbmRpZGF0ZXMiLCJob3N0SGVhZGVycyIsInN0YXR1c2NvZGUiLCJjb2RlIiwiSXBjQ29uc29sZXMiLCJJcGNTdHJlYW1pbmciLCJJcGN4Q2xvdWQiLCJJcGNBcHAiLCJJcGNTZXR0aW5ncyIsImlwY01haW4iLCJJcGMiLCJfY2hhbm5lbHMiLCJzdHJlYW1pbmciLCJjb25zb2xlcyIsInhDbG91ZCIsImNoYW5uZWwiLCJldmVudCIsIm9uRXZlbnQiLCJzdGFydFVwIiwib25Vc2VyTG9hZGVkIiwiSXBjQmFzZSIsImxvYWRDYWNoZWRVc2VyIiwiZ2V0VXNlclN0YXRlIiwiZ2FtZXJ0YWciLCJnYW1lcnBpYyIsImdhbWVyc2NvcmUiLCJzaWduZWRJbiIsImxldmVsIiwiZ2V0QXV0aFN0YXRlIiwiaXNBdXRoZW50aWNhdGluZyIsImlzQXV0aGVudGljYXRlZCIsImdldEFwcExldmVsIiwibG9naW4iLCJxdWl0IiwicmVzdGFydCIsImNsZWFyRGF0YSIsImNsZWFyU3RvcmFnZURhdGEiLCJnZXRPbmxpbmVGcmllbmRzIiwiX3hib3hXb3JrZXIiLCJvblVpU2hvd24iLCJpc0Z1bGxzY3JlZW4iLCJpc0Z1bGxTY3JlZW4iLCJfbWFpbldpbmRvdyIsInRvZ2dsZUZ1bGxzY3JlZW4iLCJzZXRGdWxsU2NyZWVuIiwiZW50ZXJGdWxsc2NyZWVuIiwiZXhpdEZ1bGxzY3JlZW4iLCJhY3Rpb24iLCJfT2JqZWN0JGtleXMiLCJzZW5kIiwid2ViQ29udGVudHMiLCJVVUlEIiwibmV4dFVVSUQiLCJ2MyIsIm5hbWVzcGFjZSIsIl9EYXRlJG5vdyIsInNlbmRDb21tYW5kIiwiY29uc29sZUlkIiwiY29tbWFuZFR5cGUiLCJjb21tYW5kIiwicGFyYW1zIiwicG9zdFBhcmFtcyIsImRlc3RpbmF0aW9uIiwic291cmNlSWQiLCJwYXJhbWV0ZXJzIiwibGlua2VkWGJveElkIiwic2tpbGxwbGF0Zm9ybSIsIl9jb25zb2xlc0xhc3RVcGRhdGUiLCJnZXRDb25zb2xlc0xpc3QiLCJfY29uc29sZXMiLCJwb3dlck9uIiwicG93ZXJPZmYiLCJzZXRTZXR0aW5ncyIsIm5ld1NldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJyZXNldFNldHRpbmdzIiwiX3N0cmVhbU1hbmFnZXIiLCJfaXBjIiwiX3JlY2VudFRpdGxlc0xhc3RVcGRhdGUiLCJnZXRQbGF5ZXJTdGF0ZSIsImFjdGl2ZVNlc3Npb25zIiwiX3RpdGxlTWFuYWdlciIsIl9hY2hpdmVtZW50TWFuYWdlciIsIl94Q2xvdWRBcGkiLCJnZXRYaG9tZVRva2VuIiwic2V0WGhvbWVUb2tlbkRlZmF1bHQiLCJzZXREZWZhdWx0UmVnaW9uIiwiZ2V0WGNsb3VkVG9rZW4iLCJzZXRYY2xvdWRUb2tlbkRlZmF1bHQiLCJnZXRSZXF1ZXN0IiwiaG9zdG5hbWUiLCJIdHRwUmVzcG9uc2UiLCJwb3N0UmVxdWVzdCIsImhlYWRlciIsImNhbGN1bGF0ZVNlY29uZHNMZWZ0IiwiZGF0ZSIsImV4cGlyZXNPbiIsImN1cnJlbnREYXRlIiwiRGF0ZSIsIk1hdGgiLCJmbG9vciIsImdldFRpbWUiLCJpc1ZhbGlkIiwiZ2V0VXNlckhhc2giLCJVc2VyVG9rZW4iLCJnZXRHYW1lcnRhZyIsIkF1dGhvcml6YXRpb25Ub2tlbiIsImd0ZyIsIkRldmljZVRva2VuIiwiTm90QWZ0ZXIiLCJNc2FsVG9rZW4iLCJTaXN1VG9rZW4iLCJzZWNvbmRzTGVmdFRpdGxlIiwiVGl0bGVUb2tlbiIsInNlY29uZHNMZWZ0VXNlciIsInNlY29uZHNMZWZ0QXV0aG9yaXphdGlvbiIsIm1pbiIsIlN0cmVhbWluZ1Rva2VuIiwidG9rZW5EYXRhIiwiX29iamVjdENyZWF0ZVRpbWUiLCJkdXJhdGlvbkluU2Vjb25kcyIsInNlY29uZHNMZWZ0IiwiZ2V0TWFya2V0IiwibWFya2V0IiwiZ2V0UmVnaW9ucyIsIm9mZmVyaW5nU2V0dGluZ3MiLCJyZWdpb25zIiwiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCJyZWdpb24iLCJpc0RlZmF1bHQiLCJfY29udGV4dDIiLCJnZXRFbnZpcm9ubWVudHMiLCJjbGllbnRDbG91ZFNldHRpbmdzIiwiRW52aXJvbm1lbnRzIiwiZXhwaXJlc19vbiIsIlhzdHNUb2tlbiIsImZzIiwiZmlsZXBhdGgiLCJfZmlsZXBhdGgiLCJleGlzdHNTeW5jIiwiZmlsZUNvbnRlbnRzIiwicmVhZEZpbGVTeW5jIiwianNvbiIsImpzb25EYXRhIiwic2V0VXNlclRva2VuIiwiZXhwaXJlRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwiZXhwaXJlc19pbiIsInRvSVNPU3RyaW5nIiwic2V0U2lzdVRva2VuIiwic2V0Snd0S2V5cyIsIndyaXRlRmlsZVN5bmMiLCJyZW1vdmVBbGwiLCJjcnlwdG8iLCJzdWJ0bGUiLCJLZXlPYmplY3QiLCJleHBvcnRKV0siLCJyZXF1aXJlIiwiQXBwSWQiLCJUaXRsZUlkIiwic2V0S2V5cyIsImp3dCIsImtleXMiLCJvcmdKd3RLZXkiLCJpbXBvcnRLZXkiLCJuYW1lZEN1cnZlIiwiand0S2V5IiwicHJpdmF0ZUtleSIsImZyb20iLCJyYXciLCJnZXRLZXlzIiwiX2tleXNJbnN0YW5jZVByb3BlcnR5IiwiZ2VuZXJhdGVLZXlQYWlyU3luYyIsInB1YmxpY0tleSIsImp3ayIsImp3a0tleSIsImFsZyIsInVzZSIsImp3a0tleXMiLCJleHBvcnQiLCJnZXRDb2RlQ2hhbGxhbmdlIiwiY29kZUNoYWxsYW5nZSIsImNvZGVfdmVyaWZpZXIiLCJCdWZmZXIiLCJwc2V1ZG9SYW5kb21CeXRlcyIsImNvZGVfY2hhbGxlbmdlIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsImRpZ2VzdCIsInZhbHVlIiwidmVyaWZpZXIiLCJnZXRSYW5kb21TdGF0ZSIsImJ5dGVzIiwicmFuZG9tQnl0ZXMiLCJnZXREZXZpY2VUb2tlbkhhY2siLCJnZXREZXZpY2VUb2tlbiIsImRldmljZVRva2VuIiwicGF5bG9hZCIsIlByb3BlcnRpZXMiLCJBdXRoTWV0aG9kIiwiSWQiLCJEZXZpY2VUeXBlIiwiU2VyaWFsTnVtYmVyIiwiVmVyc2lvbiIsIlByb29mS2V5IiwiUmVseWluZ1BhcnR5IiwiVG9rZW5UeXBlIiwic2lnbmF0dXJlIiwic2lnbiIsIlNpZ25hdHVyZSIsIkh0dHBDbGllbnQiLCJkb1Npc3VBdXRoZW50aWNhdGlvbiIsIlNhbmRib3giLCJPZmZlcnMiLCJRdWVyeSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsInJlc0JvZHkiLCJTZXNzaW9uSWQiLCJkb1Npc3VBdXRob3JpemF0aW9uIiwiQWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJTaXRlTmFtZSIsIlVzZU1vZGVybkdhbWVydGFnIiwiZXhjaGFuZ2VDb2RlRm9yVG9rZW4iLCJjb2RlVmVyaWZpZXIiLCJfVVJMU2VhcmNoUGFyYW1zIiwicmVmcmVzaFVzZXJUb2tlbiIsInJlZnJlc2hfdG9rZW4iLCJyZWx5aW5nUGFydHkiLCJTYW5kYm94SWQiLCJVc2VyVG9rZW5zIiwiZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JYY2xvdWRUcmFuc2ZlclRva2VuIiwiY2xpZW50X2lkIiwiZ3JhbnRfdHlwZSIsInNjb3BlIiwicmVkaXJlY3RfdXJpIiwib2ZmZXJpbmciLCJmb3JjZVJlZ2lvbklwIiwiYXV0aG9yaXphdGlvblRva2VuIiwid2luZG93c1RpbWVzdGFtcCIsIkJpZ0ludCIsInBhdGhBbmRRdWVyeSIsIl9VUkwiLCJwYXRobmFtZSIsImFsbG9jU2l6ZSIsImJ1ZiIsImFsbG9jIiwid3JpdGVJbnQzMkJFIiwid3JpdGVVSW50OCIsIndyaXRlQmlnVUludDY0QkUiLCJvZmZzZXQiLCJjb3B5IiwiZHNhRW5jb2RpbmciLCJjdXJVc2VyVG9rZW4iLCJUb2tlblJlZnJlc2hFcnJvciIsIl93ZWJUb2tlbiIsInJlZGlyZWN0T2JqZWN0Iiwic2VhcmNoUGFyYW1zIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJhdXRoZW50aWNhdGVVc2VyVXNpbmdDb2RlIiwiRWxlY3Ryb25BcHAiLCJzZXJ2ZSIsIkRlYnVnIiwieGJveFdlYkFwaSIsIkFwcGxpY2F0aW9uIiwiZnVsbHNjcmVlbiIsImF1dG9TdHJlYW0iLCJwcm9jZXNzIiwiTk9ERV9FTlYiLCJDSSIsInZlcnNpb24iLCJfbG9nIiwiY29tbWFuZExpbmUiLCJhcHBlbmRTd2l0Y2giLCJyZWFkU3RhcnR1cEZsYWdzIiwibG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMiLCJleHRlbmQiLCJnZXRTdGFydHVwRmxhZ3MiLCJfc3RhcnR1cEZsYWdzIiwicmVzZXRBdXRvc3RyZWFtIiwiYXJndiIsImFyZyIsIl9pc1Byb2R1Y3Rpb24iLCJfaXNDaSIsImRpcmVjdG9yeSIsInJhbmRvbSIsInNldFBhdGgiLCJnZXRQYXRoIiwid2hlblJlYWR5Iiwib3Blbk1haW5XaW5kb3ciLCJfaXNNYWMiLCJzaG93IiwiX2lzUXVpdHRpbmciLCJwcm9maWxlVXNlcnMiLCJzZXR0aW5nIiwid2luZG93T3B0aW9ucyIsImJhY2tncm91bmRDb2xvciIsInByZXZlbnREZWZhdWx0IiwiaGlkZSIsIm9wZW5HUFVXaW5kb3ciLCJfZ3B1V2luZG93Iiwib3BlbkRldlRvb2xzIiwicmVsYXVuY2giXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLE9BQU87QUFDUCxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxVQUFVLGFBQWEsbUNBQW1DO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxVQUFVLFVBQVU7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCLGtDQUFrQztBQUMxRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixXQUFXO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0EsQ0FBQztBQUNELG9DQUFvQztBQUNwQyxvQkFBb0IsUUFBUTtBQUM1QixDQUFDO0FBQ0Qsd0NBQXdDO0FBQ3hDLG9CQUFvQjtBQUNwQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qiw2QkFBNkI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMkJBQTJCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0FBQztJQUNYb08sMENBQVcsQ0FBQzBDLFFBQVEsQ0FBQyxDQUFDO0VBQ3hCO0FBQ0Y7QUFFQSxJQUFJdEMsV0FBVyxDQUFDLENBQUMsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2F1dGhlbnRpY2F0aW9uLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvYWNoaXZlbWVudG1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy9jcmVhdGUtd2luZG93LnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvaHR0cC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL2luZGV4LnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMvc3RyZWFtbWFuYWdlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3RpdGxlbWFuYWdlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3Rva2Vuc3RvcmUudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaGVscGVycy91cGRhdGVyLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2hlbHBlcnMveGJveFdvcmtlci50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3hjbG91ZGFwaS50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9oZWxwZXJzL3hodHRwLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMvYXBwLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy9iYXNlLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL2lwYy9jb25zb2xlcy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMvc2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vaXBjL3N0cmVhbWluZy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi9pcGMveGNsb3VkLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9pbmRleC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL2h0dHAudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy9kZXZpY2V0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy9tc2FsdG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL2xpYi90b2tlbnMvc2lzdXRva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL3N0cmVhbWluZ3Rva2VuLnRzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9tYWluL3hhbC9saWIvdG9rZW5zL3VzZXJ0b2tlbi50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbWFpbi94YWwvbGliL3Rva2Vucy94c3RzdG9rZW4udHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL3Rva2Vuc3RvcmUudHMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4veGFsL3hhbC50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJlbGVjdHJvblwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImZzXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cHNcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJub2RlOnBhdGhcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImF4aW9zXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJjb21wYXJlLXZlcnNpb25zXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJkZWJ1Z1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiZWxlY3Ryb24tc2VydmVcIiIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL2V4dGVybmFsIHVtZCBcImVsZWN0cm9uLXN0b3JlXCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJnaXRodWItdXJsLXRvLW9iamVjdFwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiaXAtYWRkcmVzc1wiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwiam9zZVwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvZXh0ZXJuYWwgdW1kIFwidXVpZC0xMzQ1XCIiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy9leHRlcm5hbCB1bWQgXCJ4Ym94LXdlYmFwaVwiIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvZGF0ZS9ub3cuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb21lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS90cmltLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9qc29uL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC1pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3NldC10aW1lb3V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3VybC1zZWFyY2gtcGFyYW1zLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS91cmwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9kYXRlL25vdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29tZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvanNvbi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zZXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3RyaW5nL3ZpcnR1YWwvdHJpbS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Etc2V0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jYWxsZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGF0ZS10by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWZmLXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWllLW9yLWVkZ2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy1wZWJibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtd2Vib3Mtd2Via2l0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbnZpcm9ubWVudC13ZWJraXQtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW52aXJvbm1lbnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wZXJmb3JtLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3F1ZXVlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWNsb25lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1pdGVyYXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNpemUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtdW5pb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctcGFkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctcHVueWNvZGUtdG8tYXNjaWkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdWlkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZGF0ZS5ub3cuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5kYXRlLnRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbnkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2Uud2l0aC1yZXNvbHZlcnMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQudW5pb24udjIuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5jdXN0b20tbWF0Y2hlci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuZGlzcG9zZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5jbGVhci1pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LWltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtaW50ZXJ2YWwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5oYXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwuY2FuLXBhcnNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi51cmwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIudXJsLnBhcnNlLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnVybC50by1qc29uLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9rZXlzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9kYXRlL25vdy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvcnQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2pzb24vc3RyaW5naWZ5LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LWltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC9pbmRleC5qcyIsIndlYnBhY2s6Ly94c3RyZWFtaW5nLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3VybC1zZWFyY2gtcGFyYW1zL2luZGV4LmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS91cmwvaW5kZXguanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvd2ViL3VybC1zZWFyY2gtcGFyYW1zLmpzIiwid2VicGFjazovL3hzdHJlYW1pbmcvLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3dlYi91cmwuanMiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3hzdHJlYW1pbmcvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly94c3RyZWFtaW5nL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8veHN0cmVhbWluZy8uL21haW4vYXBwbGljYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiZWxlY3Ryb24tc2VydmVcIiksIHJlcXVpcmUoXCJlbGVjdHJvbi1zdG9yZVwiKSwgcmVxdWlyZShcImRlYnVnXCIpLCByZXF1aXJlKFwiaXAtYWRkcmVzc1wiKSwgcmVxdWlyZShcImF4aW9zXCIpLCByZXF1aXJlKFwiY29tcGFyZS12ZXJzaW9uc1wiKSwgcmVxdWlyZShcImdpdGh1Yi11cmwtdG8tb2JqZWN0XCIpLCByZXF1aXJlKFwiam9zZVwiKSwgcmVxdWlyZShcInV1aWQtMTM0NVwiKSwgcmVxdWlyZShcInhib3gtd2ViYXBpXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcImVsZWN0cm9uLXNlcnZlXCIsIFwiZWxlY3Ryb24tc3RvcmVcIiwgXCJkZWJ1Z1wiLCBcImlwLWFkZHJlc3NcIiwgXCJheGlvc1wiLCBcImNvbXBhcmUtdmVyc2lvbnNcIiwgXCJnaXRodWItdXJsLXRvLW9iamVjdFwiLCBcImpvc2VcIiwgXCJ1dWlkLTEzNDVcIiwgXCJ4Ym94LXdlYmFwaVwiXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZmFjdG9yeShyZXF1aXJlKFwiZWxlY3Ryb24tc2VydmVcIiksIHJlcXVpcmUoXCJlbGVjdHJvbi1zdG9yZVwiKSwgcmVxdWlyZShcImRlYnVnXCIpLCByZXF1aXJlKFwiaXAtYWRkcmVzc1wiKSwgcmVxdWlyZShcImF4aW9zXCIpLCByZXF1aXJlKFwiY29tcGFyZS12ZXJzaW9uc1wiKSwgcmVxdWlyZShcImdpdGh1Yi11cmwtdG8tb2JqZWN0XCIpLCByZXF1aXJlKFwiam9zZVwiKSwgcmVxdWlyZShcInV1aWQtMTM0NVwiKSwgcmVxdWlyZShcInhib3gtd2ViYXBpXCIpKSA6IGZhY3Rvcnkocm9vdFtcImVsZWN0cm9uLXNlcnZlXCJdLCByb290W1wiZWxlY3Ryb24tc3RvcmVcIl0sIHJvb3RbXCJkZWJ1Z1wiXSwgcm9vdFtcImlwLWFkZHJlc3NcIl0sIHJvb3RbXCJheGlvc1wiXSwgcm9vdFtcImNvbXBhcmUtdmVyc2lvbnNcIl0sIHJvb3RbXCJnaXRodWItdXJsLXRvLW9iamVjdFwiXSwgcm9vdFtcImpvc2VcIl0sIHJvb3RbXCJ1dWlkLTEzNDVcIl0sIHJvb3RbXCJ4Ym94LXdlYmFwaVwiXSk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShnbG9iYWwsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2VsZWN0cm9uX3NlcnZlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZWxlY3Ryb25fc3RvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9kZWJ1Z19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2lwX2FkZHJlc3NfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9heGlvc19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2NvbXBhcmVfdmVyc2lvbnNfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9naXRodWJfdXJsX3RvX29iamVjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2pvc2VfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV91dWlkXzEzNDVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV94Ym94X3dlYmFwaV9fKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IHsgc2Vzc2lvbiwgZGlhbG9nIH0gZnJvbSAnZWxlY3Ryb24nXG5pbXBvcnQgeyBjcmVhdGVXaW5kb3cgfSBmcm9tICcuL2hlbHBlcnMnXG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi9hcHBsaWNhdGlvbidcbmltcG9ydCB7IFhhbCwgVG9rZW5TdG9yZSB9IGZyb20gJy4veGFsJ1xuaW1wb3J0IEF1dGhUb2tlblN0b3JlIGZyb20gJy4vaGVscGVycy90b2tlbnN0b3JlJ1xuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzIH0gZnJvbSAnLi4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0cydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aGVudGljYXRpb24ge1xuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgX3Rva2VuU3RvcmU6QXV0aFRva2VuU3RvcmVcbiAgICBfeGFsOlhhbFxuICAgIFxuICAgIF9hdXRoV2luZG93XG4gICAgX2F1dGhDYWxsYmFja1xuXG4gICAgX2lzQXV0aGVudGljYXRpbmc6Ym9vbGVhbiA9IGZhbHNlXG4gICAgX2lzQXV0aGVudGljYXRlZDpib29sZWFuID0gZmFsc2VcbiAgICBfYXBwTGV2ZWw6bnVtYmVyID0gMFxuXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb246QXBwbGljYXRpb24pe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uXG4gICAgICAgIHRoaXMuX3Rva2VuU3RvcmUgPSBuZXcgQXV0aFRva2VuU3RvcmUoKVxuICAgICAgICB0aGlzLl90b2tlblN0b3JlLmxvYWQoKVxuICAgICAgICB0aGlzLl94YWwgPSBuZXcgWGFsKHRoaXMuX3Rva2VuU3RvcmUpXG4gICAgfVxuXG4gICAgY2hlY2tBdXRoZW50aWNhdGlvbigpe1xuICAgICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0aW5nID0gdHJ1ZVxuICAgICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZVxuXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbY2hlY2tBdXRoZW50aWNhdGlvbigpXSBTdGFydGluZyB0b2tlbiBjaGVjay4uLicpXG4gICAgICAgIGlmKHRoaXMuX3Rva2VuU3RvcmUuaGFzVmFsaWRBdXRoVG9rZW5zKCkpe1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tjaGVja0F1dGhlbnRpY2F0aW9uKCldIFRva2VucyBhcmUgdmFsaWQuJylcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRGbG93KClcblxuICAgICAgICAgICAgcmV0dXJuIHRydWVcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYodGhpcy5fdG9rZW5TdG9yZS5nZXRVc2VyVG9rZW4oKSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgdXNlciB0b2tlbiwgbGV0cyB0cnkgdG8gcmVmcmVzaCBpdC5cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW2NoZWNrQXV0aGVudGljYXRpb24oKV0gVG9rZW5zIGFyZSBleHBpcmVkIGJ1dCB3ZSBoYXZlIGEgdXNlciB0b2tlbi4gTGV0cyB0cnkgdG8gcmVmcmVzaCB0aGUgdG9rZW5zLicpXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFNpbGVudEZsb3coKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tjaGVja0F1dGhlbnRpY2F0aW9uKCldIE5vIHRva2VucyBhcmUgcHJlc2VudC4nKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhcnRTaWxlbnRGbG93KCl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIFN0YXJ0aW5nIHNpbGVudCBmbG93Li4uJylcbiAgICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGluZyA9IHRydWVcbiAgICAgICAgdGhpcy5feGFsLnJlZnJlc2hUb2tlbnModGhpcy5fdG9rZW5TdG9yZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBUb2tlbnMgaGF2ZSBiZWVuIHJlZnJlc2hlZCcpXG5cbiAgICAgICAgICAgIHRoaXMuZ2V0U3RyZWFtaW5nVG9rZW4odGhpcy5fdG9rZW5TdG9yZSkudGhlbigoc3RyZWFtaW5nVG9rZW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuICE9PSBudWxsKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gUmV0cmlldmVkIGJvdGggeEhvbWUgYW5kIHhDbG91ZCB0b2tlbnMnKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBMZXZlbCA9IDJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0U2lsZW50RmxvdygpXSBSZXRyaWV2ZWQgeEhvbWUgdG9rZW4gb25seScpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcExldmVsID0gMVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX3hhbC5nZXRXZWJUb2tlbih0aGlzLl90b2tlblN0b3JlKS50aGVuKCh3ZWJUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCBfX2ZpbGVuYW1lKydbc3RhcnRTaWxlbnRGbG93KCldIFdlYiB0b2tlbiByZWNlaXZlZCcpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5hdXRoZW50aWNhdGlvbkNvbXBsZXRlZChzdHJlYW1pbmdUb2tlbnMsIHdlYlRva2VuKVxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsIF9fZmlsZW5hbWUrJ1tzdGFydFNpbGVudEZsb3coKV0gRmFpbGVkIHRvIHJldHJpZXZlIHdlYiB0b2tlbnM6JywgZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZy5zaG93TWVzc2FnZUJveCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3I6IEZhaWxlZCB0byByZXRyaWV2ZSB3ZWIgdG9rZW5zOicrIEpTT04uc3RyaW5naWZ5KGVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRTaWxlbnRGbG93KCldIEZhaWxlZCB0byByZXRyaWV2ZSBzdHJlYW1pbmcgdG9rZW5zOicsIGVycilcbiAgICAgICAgICAgICAgICBkaWFsb2cuc2hvd01lc3NhZ2VCb3goe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3I6IEZhaWxlZCB0byByZXRyaWV2ZSBzdHJlYW1pbmcgdG9rZW5zOicrIEpTT04uc3RyaW5naWZ5KGVyciksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFNpbGVudEZsb3coKV0gRXJyb3IgcmVmcmVzaGluZyB0b2tlbnM6JywgZXJyKVxuICAgICAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnW3N0YXJ0U2lsZW50RmxvdygpXSBFcnJvciByZWZyZXNoaW5nIHRva2VuczonICsgSlNPTi5zdHJpbmdpZnkoZXJyKSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RvcmUuY2xlYXIoKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0YXJ0QXV0aGZsb3coKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydEF1dGhmbG93KCldIFN0YXJ0aW5nIGF1dGhlbnRpY2F0aW9uIGZsb3cnKVxuICAgICAgICBcbiAgICAgICAgdGhpcy5feGFsLmdldFJlZGlyZWN0VXJpKCkudGhlbigocmVkaXJlY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlbkF1dGhXaW5kb3cocmVkaXJlY3Quc2lzdUF1dGguTXNhT2F1dGhSZWRpcmVjdClcblxuICAgICAgICAgICAgdGhpcy5fYXV0aENhbGxiYWNrID0gKHJlZGlyZWN0VXJpKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGluZyA9IHRydWVcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0QXV0aEZsb3coKV0gR290IHJlZGlyZWN0IFVSSTonLCByZWRpcmVjdFVyaSlcbiAgICAgICAgICAgICAgICB0aGlzLl94YWwuYXV0aGVudGljYXRlVXNlcih0aGlzLl90b2tlblN0b3JlLCByZWRpcmVjdCwgcmVkaXJlY3RVcmkpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ2F1dGhlbnRpY2F0aW9uVjInLCAnW3N0YXJ0QXV0aEZsb3coKV0gQXV0aGVudGljYXRlZCB1c2VyOicsIHJlc3VsdClcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2lsZW50RmxvdygpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRBdXRoRmxvdygpXSBFcnJvciBhdXRoZW50aWNhdGluZyB1c2VyOicsIGVycilcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nLnNob3dFcnJvckJveCgnRXJyb3InLCAnRXJyb3IgYXV0aGVudGljYXRpbmcgdXNlci4gRXJyb3IgZGV0YWlsczogJytKU09OLnN0cmluZ2lmeShlcnIpKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRBdXRoRmxvdygpXSBFcnJvciBnZXR0aW5nIHJlZGlyZWN0IFVSSTonLCBlcnIpXG4gICAgICAgICAgICBkaWFsb2cuc2hvd0Vycm9yQm94KCdFcnJvcicsICdFcnJvciBnZXR0aW5nIHJlZGlyZWN0IFVSSS4gRXJyb3IgZGV0YWlsczogJytKU09OLnN0cmluZ2lmeShlcnIpKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0YXJ0V2Vidmlld0hvb2tzKCl7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRXZWJ2aWV3SG9va3MoKV0gU3RhcnRpbmcgd2VidmlldyBob29rcycpXG5cbiAgICAgICAgc2Vzc2lvbi5kZWZhdWx0U2Vzc2lvbi53ZWJSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKHtcbiAgICAgICAgICAgIHVybHM6IFtcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly9sb2dpbi5saXZlLmNvbS9vYXV0aDIwX2F1dGhvcml6ZS5zcmY/KicsXG4gICAgICAgICAgICAgICAgJ2h0dHBzOi8vbG9naW4ubGl2ZS5jb20vcHBzZWN1cmUvcG9zdC5zcmY/KicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LCAoZGV0YWlscywgY2FsbGJhY2spID0+IHtcblxuICAgICAgICAgICAgaWYoZGV0YWlscy5yZXNwb25zZUhlYWRlcnMuTG9jYXRpb24gIT09IHVuZGVmaW5lZCAmJiBkZXRhaWxzLnJlc3BvbnNlSGVhZGVycy5Mb2NhdGlvblswXS5pbmNsdWRlcyh0aGlzLl94YWwuX2FwcC5SZWRpcmVjdFVyaSkpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnYXV0aGVudGljYXRpb25WMicsICdbc3RhcnRXZWJ2aWV3SG9va3MoKV0gR290IHJlZGlyZWN0IFVSSSBmcm9tIE9BVVRIOicsIGRldGFpbHMucmVzcG9uc2VIZWFkZXJzLkxvY2F0aW9uWzBdKVxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhXaW5kb3cuY2xvc2UoKVxuXG4gICAgICAgICAgICAgICAgaWYodGhpcy5fYXV0aENhbGxiYWNrICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdXRoQ2FsbGJhY2soZGV0YWlscy5yZXNwb25zZUhlYWRlcnMuTG9jYXRpb25bMF0pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tzdGFydFdlYnZpZXdIb29rcygpXSBBdXRoZW50aWNhdGlvbiBDYWxsYmFjayBpcyBub3QgZGVmaW5lZDonLCB0aGlzLl9hdXRoQ2FsbGJhY2spXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZy5zaG93RXJyb3JCb3goJ0Vycm9yJywgJ0F1dGhlbnRpY2F0aW9uIENhbGxiYWNrIGlzIG5vdCBkZWZpbmVkLiBFcnJvciBkZXRhaWxzOiAnK0pTT04uc3RyaW5naWZ5KHRoaXMuX2F1dGhDYWxsYmFjaykpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soeyBjYW5jZWw6IHRydWUgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZGV0YWlscylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBvcGVuQXV0aFdpbmRvdyh1cmwpe1xuICAgICAgICBjb25zdCBhdXRoV2luZG93ID0gY3JlYXRlV2luZG93KCdhdXRoJywge1xuICAgICAgICAgICAgd2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGhlaWdodDogNjAwLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbicsXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICBhdXRoV2luZG93LmxvYWRVUkwodXJsKVxuICAgICAgICB0aGlzLl9hdXRoV2luZG93ID0gYXV0aFdpbmRvd1xuXG4gICAgICAgIHRoaXMuX2F1dGhXaW5kb3cub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdhdXRoZW50aWNhdGlvblYyJywgJ1tvcGVuQXV0aFdpbmRvdygpXSBDbG9zZWQgYXV0aCB3aW5kb3cnKVxuICAgICAgICAgICAgLy8gQFRPRE86IFdoYXQgdG8gZG8/XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0U3RyZWFtaW5nVG9rZW4odG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFN0cmVhbWluZ1Rva2VuJylcbiAgICAgICAgY29uc3Qgc2lzdVRva2VuID0gdG9rZW5TdG9yZS5nZXRTaXN1VG9rZW4oKVxuICAgICAgICBpZihzaXN1VG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lzdSB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcblxuICAgICAgICBjb25zdCB4c3RzVG9rZW4gPSBhd2FpdCB0aGlzLl94YWwuZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW4sICdodHRwOi8vZ3Nzdi54Ym94bGl2ZS5jb20vJylcblxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5feGFsLl94aG9tZVRva2VuOicsIHRoaXMuX3hhbC5feGhvbWVUb2tlbilcbiAgICAgICAgaWYodGhpcy5feGFsLl94aG9tZVRva2VuID09PSB1bmRlZmluZWQgfHwgdGhpcy5feGFsLl94aG9tZVRva2VuLmdldFNlY29uZHNWYWxpZCgpIDw9IDYwKXtcbiAgICAgICAgICAgIHRoaXMuX3hhbC5feGhvbWVUb2tlbiA9IGF3YWl0IHRoaXMuX3hhbC5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4aG9tZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5feGFsLl94Y2xvdWRUb2tlbjonLCB0aGlzLl94YWwuX3hjbG91ZFRva2VuKVxuICAgICAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldCgnc2V0dGluZ3MnLCBkZWZhdWx0U2V0dGluZ3MpXG4gICAgICAgIGlmKCF0aGlzLl94YWwuX3hjbG91ZFRva2VuIHx8IHRoaXMuX3hhbC5feGNsb3VkVG9rZW4uZ2V0U2Vjb25kc1ZhbGlkKCkgPD0gNjApe1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl94YWwuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5feGFsLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWInLCBzZXR0aW5ncy5mb3JjZV9yZWdpb25faXApXG4gICAgICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl94YWwuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5feGFsLmdldFN0cmVhbVRva2VuKHhzdHNUb2tlbiwgJ3hncHV3ZWJmMnAnLCBzZXR0aW5ncy5mb3JjZV9yZWdpb25faXApXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3hhbC5feGNsb3VkVG9rZW4gPSBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgeEhvbWVUb2tlbjogdGhpcy5feGFsLl94aG9tZVRva2VuLCB4Q2xvdWRUb2tlbjogdGhpcy5feGFsLl94Y2xvdWRUb2tlbiB9XG4gICAgfVxuXG4gICAgXG59XG4iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5pbXBvcnQgSHR0cCBmcm9tICcuL3hodHRwJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2hpdmVtZW50TWFuYWdlciB7XG4gIF9hcHBsaWNhdGlvbjogQXBwbGljYXRpb25cblxuICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbil7XG4gICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICB9XG5cbiAgZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzKCkge1xuICAgIGNvbnN0IGh0dHAgPSBuZXcgSHR0cCgpO1xuICAgIGNvbnN0IHNldHRpbmdzOiBhbnkgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KCdzZXR0aW5ncycsIHt9KVxuICAgIGNvbnN0IHByZWZlcnJlZF9nYW1lX2xhbmd1YWdlID0gc2V0dGluZ3MucHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UgfHwgJ2VuLVVTJ1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHVocyA9IHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuRGlzcGxheUNsYWltcy54dWlbMF0udWhzO1xuICAgICAgY29uc3QgeGlkID0gdGhpcy5fYXBwbGljYXRpb24ud2ViVG9rZW4uZGF0YS5EaXNwbGF5Q2xhaW1zLnh1aVswXS54aWQ7XG5cbiAgICAgIGh0dHBcbiAgICAgICAgLmdldChcbiAgICAgICAgICAnYWNoaWV2ZW1lbnRzLnhib3hsaXZlLmNvbScsXG4gICAgICAgICAgYC91c2Vycy94dWlkKCR7eGlkfSkvaGlzdG9yeS90aXRsZXM/b3JkZXJCeT11bmxvY2tUaW1lYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiAnWEJMMy4wIHg9JyArIHVocyArICc7JyArIHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuVG9rZW4sXG4gICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogcHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UsXG4gICAgICAgICAgICAneC14YmwtY29udHJhY3QtdmVyc2lvbic6IDIsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LW5hbWUnOiAnWGJveEFwcCcsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LXR5cGUnOiAnVVdBJyxcbiAgICAgICAgICAgICd4LXhibC1jbGllbnQtdmVyc2lvbic6ICczOS4zOS4yMjAwMS4wJyxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIGxvZy5pbmZvKCdbZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzXSBnZXRIaXN0b3J5QWNoaXZlbWVudHM6JywgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgICAgaWYgKHJlcy50aXRsZXMpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzLnRpdGxlcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbZ2V0SGlzdG9yeUFjaGl2ZW1lbnRzXSBlcnJvcjonLCBlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWNoaXZlbWVudERldGFpbCh0aXRsZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBodHRwID0gbmV3IEh0dHAoKTtcbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldCgnc2V0dGluZ3MnLCB7fSlcbiAgICBjb25zdCBwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSA9IHNldHRpbmdzLnByZWZlcnJlZF9nYW1lX2xhbmd1YWdlIHx8ICdlbi1VUydcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB1aHMgPSB0aGlzLl9hcHBsaWNhdGlvbi53ZWJUb2tlbi5kYXRhLkRpc3BsYXlDbGFpbXMueHVpWzBdLnVocztcbiAgICAgIGNvbnN0IHhpZCA9IHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuRGlzcGxheUNsYWltcy54dWlbMF0ueGlkO1xuXG4gICAgICBodHRwXG4gICAgICAgIC5nZXQoXG4gICAgICAgICAgJ2FjaGlldmVtZW50cy54Ym94bGl2ZS5jb20nLFxuICAgICAgICAgIGAvdXNlcnMveHVpZCgke3hpZH0pL2FjaGlldmVtZW50cz90aXRsZUlkPSR7dGl0bGVJZH0mbWF4SXRlbXM9MTAwMGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ1hCTDMuMCB4PScgKyB1aHMgKyAnOycgKyB0aGlzLl9hcHBsaWNhdGlvbi53ZWJUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IHByZWZlcnJlZF9nYW1lX2xhbmd1YWdlLFxuICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAyLFxuICAgICAgICAgICAgJ3gteGJsLWNsaWVudC1uYW1lJzogJ1hib3hBcHAnLFxuICAgICAgICAgICAgJ3gteGJsLWNsaWVudC10eXBlJzogJ1VXQScsXG4gICAgICAgICAgICAneC14YmwtY2xpZW50LXZlcnNpb24nOiAnMzkuMzkuMjIwMDEuMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLmFjaGlldmVtZW50cykge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuYWNoaWV2ZW1lbnRzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1tnZXRBY2hpdmVtZW50RGV0YWlsXSBlcnJvcjonLCBlKTtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiaW1wb3J0IHtcbiAgICBzY3JlZW4sXG4gICAgQnJvd3NlcldpbmRvdyxcbiAgICBCcm93c2VyV2luZG93Q29uc3RydWN0b3JPcHRpb25zLFxufSBmcm9tICdlbGVjdHJvbidcbmltcG9ydCBTdG9yZSBmcm9tICdlbGVjdHJvbi1zdG9yZSdcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCdcblxuZXhwb3J0IGRlZmF1bHQgKHdpbmRvd05hbWU6IHN0cmluZywgb3B0aW9uczogQnJvd3NlcldpbmRvd0NvbnN0cnVjdG9yT3B0aW9ucyk6IEJyb3dzZXJXaW5kb3cgPT4ge1xuICAgIGNvbnN0IGtleSA9ICd3aW5kb3ctc3RhdGUnXG4gICAgY29uc3QgbmFtZSA9IGB3aW5kb3ctc3RhdGUtdjItJHt3aW5kb3dOYW1lfWBcbiAgICBjb25zdCBzdG9yZSA9IG5ldyBTdG9yZSh7IG5hbWUgfSlcbiAgICBjb25zdCBkZWZhdWx0U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IG9wdGlvbnMud2lkdGgsXG4gICAgICAgIGhlaWdodDogb3B0aW9ucy5oZWlnaHQsXG4gICAgfVxuICAgIGxldCBzdGF0ZSA9IHt9XG5cbiAgICBjb25zdCByZXN0b3JlID0gKCkgPT4gc3RvcmUuZ2V0KGtleSwgZGVmYXVsdFNpemUpXG5cbiAgICBjb25zdCBnZXRDdXJyZW50UG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICAgIHdpbi5yZW1vdmVNZW51KClcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB3aW4uZ2V0UG9zaXRpb24oKVxuICAgICAgICBjb25zdCBzaXplID0gd2luLmdldFNpemUoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogcG9zaXRpb25bMF0sXG4gICAgICAgICAgICB5OiBwb3NpdGlvblsxXSxcbiAgICAgICAgICAgIHdpZHRoOiBzaXplWzBdLFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplWzFdLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2luZG93V2l0aGluQm91bmRzID0gKHdpbmRvd1N0YXRlLCBib3VuZHMpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHdpbmRvd1N0YXRlLnggPj0gYm91bmRzLnggJiZcbiAgICAgIHdpbmRvd1N0YXRlLnkgPj0gYm91bmRzLnkgJiZcbiAgICAgIHdpbmRvd1N0YXRlLnggKyB3aW5kb3dTdGF0ZS53aWR0aCA8PSBib3VuZHMueCArIGJvdW5kcy53aWR0aCAmJlxuICAgICAgd2luZG93U3RhdGUueSArIHdpbmRvd1N0YXRlLmhlaWdodCA8PSBib3VuZHMueSArIGJvdW5kcy5oZWlnaHRcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlc2V0VG9EZWZhdWx0cyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmRzID0gc2NyZWVuLmdldFByaW1hcnlEaXNwbGF5KCkuYm91bmRzXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2l6ZSwge1xuICAgICAgICAgICAgeDogKGJvdW5kcy53aWR0aCAtIGRlZmF1bHRTaXplLndpZHRoKSAvIDIsXG4gICAgICAgICAgICB5OiAoYm91bmRzLmhlaWdodCAtIGRlZmF1bHRTaXplLmhlaWdodCkgLyAyLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGVuc3VyZVZpc2libGVPblNvbWVEaXNwbGF5ID0gd2luZG93U3RhdGUgPT4ge1xuICAgICAgICBjb25zdCB2aXNpYmxlID0gc2NyZWVuLmdldEFsbERpc3BsYXlzKCkuc29tZShkaXNwbGF5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3dXaXRoaW5Cb3VuZHMod2luZG93U3RhdGUsIGRpc3BsYXkuYm91bmRzKVxuICAgICAgICB9KVxuICAgICAgICBpZiAoIXZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIFdpbmRvdyBpcyBwYXJ0aWFsbHkgb3IgZnVsbHkgbm90IHZpc2libGUgbm93LlxuICAgICAgICAgICAgLy8gUmVzZXQgaXQgdG8gc2FmZSBkZWZhdWx0cy5cbiAgICAgICAgICAgIHJldHVybiByZXNldFRvRGVmYXVsdHMoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aW5kb3dTdGF0ZVxuICAgIH1cblxuICAgIGNvbnN0IHNhdmVTdGF0ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF3aW4uaXNNaW5pbWl6ZWQoKSAmJiAhd2luLmlzTWF4aW1pemVkKCkpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGUsIGdldEN1cnJlbnRQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICAgIHN0b3JlLnNldChrZXksIHN0YXRlKVxuICAgIH1cblxuICAgIHN0YXRlID0gZW5zdXJlVmlzaWJsZU9uU29tZURpc3BsYXkocmVzdG9yZSgpKVxuXG4gICAgY29uc3QgYnJvd3Nlck9wdGlvbnM6IEJyb3dzZXJXaW5kb3dDb25zdHJ1Y3Rvck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgICAgICAgLy8gbm9kZUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgLy8gY29udGV4dElzb2xhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgY29udGV4dElzb2xhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuYWJsZUJsaW5rRmVhdHVyZXM6ICcnLFxuICAgICAgICAgICAgc2FuZGJveDogZmFsc2UsXG4gICAgICAgICAgICBwcmVsb2FkOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncHJlbG9hZC5qcycpLFxuICAgICAgICAgICAgLi4ub3B0aW9ucy53ZWJQcmVmZXJlbmNlcyxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b0hpZGVNZW51QmFyOiB0cnVlLFxuICAgIH1cbiAgICBjb25zdCB3aW4gPSBuZXcgQnJvd3NlcldpbmRvdyhicm93c2VyT3B0aW9ucylcblxuICAgIHdpbi5vbignY2xvc2UnLCBzYXZlU3RhdGUpXG5cbiAgICByZXR1cm4gd2luXG59IiwiaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb246QXBwbGljYXRpb24pIHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgIH1cblxuICAgIGdldChob3N0OnN0cmluZywgdXJsOiBzdHJpbmcsIG1ldGhvZCA9ICdHRVQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcblxuICAgICAgICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCAocmVzcG9uc2U6YW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCAoZGF0YTphbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGFcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdIVFRQJywgJ2dldCgnK3VybCsnLCAnK21ldGhvZCsnKSByZXNvbHZlOicsIHJlc3BvbnNlLnN0YXR1c0NvZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuRGF0YSA9IHJlc3BvbnNlRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5EYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZURhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIGlzIG5vdCBKU09OLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjA0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJldHJ5Li5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXQodXJsLCBtZXRob2QpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNzUwKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJldHVybkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0hUVFAnLCAnZ2V0KCcrdXJsKycpIHJlamVjdDonLCByZXNwb25zZS5zdGF0dXNDb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlcS5lbmQoKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHBvc3QoaG9zdDogc3RyaW5nLCB1cmw6IHN0cmluZywgcG9zdERhdGEgPSB7fSwgaGVhZGVycyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZEhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sIGhlYWRlcnMpXG5cbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIGhvc3Q6IGhvc3QsXG4gICAgICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IG1lcmdlZEhlYWRlcnMsXG4gICAgICAgICAgICB9LCAocmVzcG9uc2U6YW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZGF0YScsIChkYXRhOmFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgKz0gZGF0YVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXNDb2RlID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXNDb2RlIDw9IDI5OSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0hUVFAnLCAncG9zdCgnK3VybCsnKSByZXNvbHZlOicsIHJlc3BvbnNlLnN0YXR1c0NvZGUsIHJlc3BvbnNlRGF0YS5zdWJzdHJpbmcoMCwgMTAwKSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVybkRhdGEgPSByZXNwb25zZURhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBpcyBub3QgSlNPTi4uXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSFRUUCcsICdwb3N0KCcrdXJsKycpIHJlamVjdDonLCByZXNwb25zZS5zdGF0dXNDb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXEub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVxLndyaXRlKEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSlcblxuICAgICAgICAgICAgcmVxLmVuZCgpXG4gICAgICAgIH0pXG4gICAgfVxuXG59IiwiaW1wb3J0IGNyZWF0ZVdpbmRvdyBmcm9tICcuL2NyZWF0ZS13aW5kb3cnXG5pbXBvcnQgeENsb3VkQXBpIGZyb20gJy4veGNsb3VkYXBpJ1xuaW1wb3J0IHhib3hXb3JrZXIgZnJvbSAnLi94Ym94V29ya2VyJ1xuaW1wb3J0IHsgc2V0VXBkYXRlTm90aWZpY2F0aW9uIGFzIHVwZGF0ZXIgfSBmcm9tICcuL3VwZGF0ZXInXG5cbmV4cG9ydCB7XG4gICAgY3JlYXRlV2luZG93LFxuICAgIHhDbG91ZEFwaSxcbiAgICB4Ym94V29ya2VyLFxuICAgIHVwZGF0ZXIsXG59XG4iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5pbXBvcnQgeENsb3VkQXBpLCB7IHBsYXlSZXN1bHQgfSBmcm9tICcuL3hjbG91ZGFwaSdcblxuaW50ZXJmYWNlIHN0cmVhbVNlc3Npb24ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZ3wnaG9tZSd8J2Nsb3VkJztcbiAgICBzdGF0ZT86IHN0cmluZztcbiAgICB3YWl0aW5nVGltZXM/OiBhbnk7XG4gICAgcGxheWVyU3RhdGU6IHN0cmluZ3wncGVuZGluZyd8J3N0YXJ0ZWQnfCdxdWV1ZWQnfCdmYWlsZWQnO1xuICAgIGVycm9yRGV0YWlscz86IHtcbiAgICAgICAgY29kZTtcbiAgICAgICAgbWVzc2FnZTtcbiAgICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1NYW5hZ2VyIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgX3Nlc3Npb25zID0ge31cbiAgICBcbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbil7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cbiAgICB9XG5cbiAgICBnZXRBcGkodHlwZSk6IHhDbG91ZEFwaXtcbiAgICAgICAgY29uc3Qgc3RyZWFtaW5nVG9rZW5zID0gdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zO1xuXG4gICAgICAgIGlmKHR5cGUgPT09ICdob21lJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB4Q2xvdWRBcGkoXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24sXG4gICAgICAgICAgICAgICAgc3RyZWFtaW5nVG9rZW5zLnhIb21lVG9rZW4uZ2V0RGVmYXVsdFJlZ2lvbigpLmJhc2VVcmkuc3Vic3RyaW5nKDgpLFxuICAgICAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54SG9tZVRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgICAgICAgICAgICBcImhvbWVcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgeENsb3VkQXBpKFxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLFxuICAgICAgICAgICAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5nZXREZWZhdWx0UmVnaW9uKCkuYmFzZVVyaS5zdWJzdHJpbmcoOCksXG4gICAgICAgICAgICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgICAgICAgICAgICBcImNsb3VkXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTZXNzaW9uKHNlc3Npb25JZDpzdHJpbmcpOnN0cmVhbVNlc3Npb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbnNbc2Vzc2lvbklkXVxuICAgIH1cblxuICAgIHN0YXJ0U3RyZWFtKHR5cGU6c3RyaW5nfCdob21lJ3wnY2xvdWQnLCB0YXJnZXQpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRBcGkodHlwZSkuc3RhcnRTdHJlYW0odGFyZ2V0KS50aGVuKChwbGF5UmVzdWx0OnBsYXlSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuX2FwcGxpY2F0aW9uLl94Q2xvdWRBcGkuc3RhcnRTdHJlYW0odHlwZSwgdGFyZ2V0KS50aGVuKChwbGF5UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1N0cmVhbW1hbmFnZXIgLSBzdGFydFN0cmVhbTonLCBwbGF5UmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gcGxheVJlc3VsdC5zZXNzaW9uUGF0aC5zcGxpdCgnLycpWzNdXG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1TZXNzaW9uOnN0cmVhbVNlc3Npb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBwbGF5UmVzdWx0LnNlc3Npb25QYXRoLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXJTdGF0ZTogJ3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9zZXNzaW9uc1tzZXNzaW9uSWRdID0gc3RyZWFtU2Vzc2lvblxuICAgICAgICAgICAgICAgIHRoaXMubW9uaXRvclNlc3Npb24oc2Vzc2lvbklkKVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzZXNzaW9uSWQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0b3BTdHJlYW0oc2Vzc2lvbklkKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZWplY3QoJ1Nlc3Npb24gbm90IGZvdW5kOiAnK3Nlc3Npb25JZClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nZXRBcGkoc2Vzc2lvbi50eXBlKS5zdG9wU3RyZWFtKHNlc3Npb25JZCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0N1cnJlbnQgc2Vzc2lvbnM6JywgdGhpcy5fc2Vzc2lvbnMpXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Nlc3Npb25zW3Nlc3Npb25JZF1cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbmV3IHNlc3Npb25zOicsIHRoaXMuX3Nlc3Npb25zKVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNlbmRTZHAoc2Vzc2lvbklkOnN0cmluZywgc2RwOmFueSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZFNkcChzZXNzaW9uSWQsIHNkcCkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VuZENoYXRTZHAoc2Vzc2lvbklkOnN0cmluZywgc2RwOmFueSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZENoYXRTZHAoc2Vzc2lvbklkLCBzZHApLnRoZW4oKHJlc3VsdCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNlbmRJY2Uoc2Vzc2lvbklkOnN0cmluZywgaWNlOmFueSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgICAgICAgIGlmKHNlc3Npb24gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdTZXNzaW9uIG5vdCBmb3VuZDogJytzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHNlc3Npb24udHlwZSkuc2VuZEljZShzZXNzaW9uSWQsIGljZSkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VuZEtlZXBhbGl2ZShzZXNzaW9uSWQ6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgICAgICAgaWYoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZWplY3QoJ1Nlc3Npb24gbm90IGZvdW5kOiAnK3Nlc3Npb25JZClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nZXRBcGkoc2Vzc2lvbi50eXBlKS5zZW5kS2VlcGFsaXZlKHNlc3Npb25JZCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG1vbml0b3JTZXNzaW9uKHNlc3Npb25JZCl7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdTdHJlYW1NYW5hZ2VyJywgJ21vbml0b3JTZXNzaW9uKCcrc2Vzc2lvbklkKycpIGNoZWNraW5nIHN0YXRlJylcblxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICBpZihzZXNzaW9uID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnU3RyZWFtTWFuYWdlcicsICdtb25pdG9yU2Vzc2lvbignK3Nlc3Npb25JZCsnKSBzZXNzaW9uIG5vdCBmb3VuZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdldEFwaSh0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS50eXBlKS5nZXRTdHJlYW1TdGF0ZShzZXNzaW9uSWQpLnRoZW4oKHJlc3VsdDphbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU3RyZWFtbWFuYWdlciAtIHN0YXRlOicsIHJlc3VsdClcblxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnN0YXRlID0gcmVzdWx0LnN0YXRlXG5cbiAgICAgICAgICAgICAgICBpZihyZXN1bHQuc3RhdGUgPT09ICdQcm92aXNpb25lZCcpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS5wbGF5ZXJTdGF0ZSA9ICdzdGFydGVkJ1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlc3VsdC5zdGF0ZSA9PT0gJ1Byb3Zpc2lvbmluZycpe1xuICAgICAgICAgICAgICAgICAgICAvLyBMZXRzIGxvb3AgYWdhaW5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzdWx0LnN0YXRlID09PSAnUmVhZHlUb0Nvbm5lY3QnKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gTVNBTCBBdXRoXG4gICAgICAgICAgICAgICAgICAgIC8vIEBUT0RPOiBSZWZyZXNoIHRva2VuIGlmIGV4cGlyZWQ/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5feGFsLmdldE1zYWxUb2tlbih0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX3Rva2VuU3RvcmUpLnRoZW4oKG1zYWxUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBcGkodGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkudHlwZSkuc2VuZE1TQUxBdXRoKHNlc3Npb25JZCwgbXNhbFRva2VuLmRhdGEubHB0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbml0b3JTZXNzaW9uKHNlc3Npb25JZClcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ01TQUwgQVVUSCBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnTVNBTCBBVVRIIEVycm9yOicrIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTVNBTCBBVVRIIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ01TQUwgQVVUSCBFcnJvcjonKyBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZihyZXN1bHQuc3RhdGUgPT09ICdXYWl0aW5nRm9yUmVzb3VyY2VzJyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvIFF1ZXVlIGxvZ2ljXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLndhaXRpbmdUaW1lcyA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QXBpKHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnR5cGUpLmdldFdhaXRpbmdUaW1lcyh0aGlzLmdldFNlc3Npb24oc2Vzc2lvbklkKS50YXJnZXQpLnRoZW4oKHdhaXRpbmdUaW1lcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLndhaXRpbmdUaW1lcyA9IHdhaXRpbmdUaW1lc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLnBsYXllclN0YXRlID0gJ3F1ZXVlZCdcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmVzdWx0LnN0YXRlID09PSAnRmFpbGVkJyl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLmVycm9yRGV0YWlscyA9IHJlc3VsdC5lcnJvckRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkucGxheWVyU3RhdGUgPSAnZmFpbGVkJ1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdVbmtub3duIHN0YXRlOicsIHJlc3VsdClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdHJlYW1tYW5hZ2VyIC0gZXJyb3IgY2hlY2tpbmcgc3RhdGU6Jywgc2Vzc2lvbklkLCBlcnJvcilcblxuICAgICAgICAgICAgICAgIGlmKGVycm9yLnN0YXR1cyA9PT0gNDA0KXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdTdHJlYW1NYW5hZ2VyJywgJ1Nlc3Npb24gbm90IGZvdW5kIG9uIHNlcnZlci4gUmVtb3Zpbmcgc2Vzc2lvbi4uLicpXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZXNzaW9uc1tzZXNzaW9uSWRdXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb25pdG9yU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgMTAwMClcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVTZXNzaW9ucygpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRBcGkoJ2Nsb3VkJykuZ2V0QWN0aXZlU2Vzc2lvbnMoKS50aGVuKChyZXN1bHQpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBY3RpdmUgc2Vzc2lvbnM6JywgcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG59IiwiaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IEhUVFAgZnJvbSAnLi9odHRwJ1xuaW1wb3J0IFN0b3JlIGZyb20gJ2VsZWN0cm9uLXN0b3JlJ1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW50ZXJmYWNlIHRpdGxlSW5mb0FyZ3Mge1xuICAgIFByb2R1Y3RUaXRsZTogc3RyaW5nO1xuICAgIFB1Ymxpc2hlck5hbWU6IHN0cmluZztcbiAgICBYQ2xvdWRUaXRsZUlkOiBzdHJpbmc7XG4gICAgSW1hZ2VfVGlsZTogYW55O1xuICAgIEltYWdlX1Bvc3RlcjogYW55O1xuICAgIFN0cmVhbWFiaWxpdHk6IGFueTtcbiAgICBDYXRlZ29yaWVzOiBhbnk7XG4gICAgTG9jYWxpemVkQ2F0ZWdvcmllczogYW55O1xuICAgIFhDbG91ZE9mZmVyaW5nczogYW55O1xuICAgIFhib3hUaXRsZUlkOiBzdHJpbmc7XG4gICAgQ2hpbGRYYm94VGl0bGVJZHM6IGFueTtcbiAgICBTdG9yZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlTWFuYWdlciB7XG5cbiAgICBfYXBwbGljYXRpb246QXBwbGljYXRpb25cbiAgICBfc3RvcmUgPSBuZXcgU3RvcmUoKVxuICAgIF9odHRwOkhUVFBcblxuICAgIF94Q2xvdWRUaXRsZXMgPSB7fVxuICAgIF9wcm9kdWN0SWRRdWV1ZSA9IFtdXG5cbiAgICBfeENsb3VkUmVjZW50VGl0bGVzID0ge31cbiAgICBfeENsb3VkUmVjZW50VGl0bGVzTGFzdFVwZGF0ZSA9IDBcblxuICAgIFxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgICAgICB0aGlzLl9odHRwID0gbmV3IEhUVFAodGhpcy5fYXBwbGljYXRpb24pXG4gICAgfVxuICAgIC8vIGdldE9mZmljaWFsVGl0bGVzKCkge1xuICAgIC8vICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgLy8gICAgICAgICBsZXQgb2ZmaWNpYWxUaXRsZXMgPSBbXTtcbiAgICAvLyAgICAgICAgIGF4aW9zXG4gICAgLy8gICAgICAgICAuZ2V0KCdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0dlb2NsZC9YU3RyZWFtaW5nL2NvbnRlbnRzL3RpdGxlcy5qc29uP3JlZj1tYWluJywge1xuICAgIC8vICAgICAgICAgICAgIHRpbWVvdXQ6IDIwICogMTAwMCxcbiAgICAvLyAgICAgICAgIH0pXG4gICAgLy8gICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgIC8vICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHJlcy5kYXRhLmNvbnRlbnQ7XG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnRDbGVhbmVkID0gY29udGVudC5yZXBsYWNlKC9cXG4vZywgJycpO1xuXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZWRCdWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjRDb250ZW50Q2xlYW5lZCwgJ2Jhc2U2NCcpO1xuICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCBkZWNvZGVkQ29udGVudCA9IGRlY29kZWRCdWZmZXIudG9TdHJpbmcoJ3V0Zi04Jyk7XG5cbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZEpzb24gPSBKU09OLnBhcnNlKGRlY29kZWRDb250ZW50KTtcblxuICAgIC8vICAgICAgICAgICAgICAgICBvZmZpY2lhbFRpdGxlcyA9IGRlY29kZWRKc29uLlByb2R1Y3RzO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICByZXNvbHZlKG9mZmljaWFsVGl0bGVzKTtcbiAgICAvLyAgICAgICAgIH0pXG4gICAgLy8gICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coJ29mZmljaWFsVGl0bGVzIGVycm9yOicsIGUpXG4gICAgLy8gICAgICAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuXG4gICAgZ2V0T2ZmaWNpYWxUaXRsZXMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGxldCBvZmZpY2lhbFRpdGxlcyA9IFtdO1xuICAgICAgICAgICAgYXhpb3NcbiAgICAgICAgICAgIC5nZXQoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9HZW9jbGQvWFN0cmVhbWluZ0BtYWluL3RpdGxlcy5qc29uJywge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwICogMTAwMCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmaWNpYWxUaXRsZXMgPSByZXMuZGF0YS5Qcm9kdWN0cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShvZmZpY2lhbFRpdGxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEdhbWVQYXNzUHJvZHVjdHModGl0bGVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0SWRRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgdjJUaXRsZU1hcCA9IHt9O1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRpdGxlcykpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpdGxlcy5mb3JFYWNoKHRpdGxlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGl0bGUuZGV0YWlscyAmJiB0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWRRdWV1ZS5wdXNoKHRpdGxlLmRldGFpbHMucHJvZHVjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgdjJUaXRsZU1hcFt0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZF0gPSB0aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gR2V0IG9mZmljaWFsVGl0bGVzXG4gICAgICAgICAgICB0aGlzLmdldE9mZmljaWFsVGl0bGVzKCkudGhlbigob2ZmaWNpYWxUaXRsZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlUHJvZHVjdElkcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLi4ubmV3IFNldChbLi4ucHJvZHVjdElkUXVldWUsIC4uLm9mZmljaWFsVGl0bGVzXSksXG4gICAgICAgICAgICAgICAgXTtcbiAgICBcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwLnBvc3QoJ2NhdGFsb2cuZ2FtZXBhc3MuY29tJywgJy92My9wcm9kdWN0cz9tYXJrZXQ9VVMmbGFuZ3VhZ2U9ZW4tVVMmaHlkcmF0aW9uPVJlbW90ZUxvd0phZGUwJywgeyAvLyBSZW1vdGVMb3dKYWRlMFxuICAgICAgICAgICAgICAgICAgICAnUHJvZHVjdHMnOiBtZXJnZVByb2R1Y3RJZHMsXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAnbXMtY3YnOiAwLFxuICAgICAgICAgICAgICAgICAgICAnY2FsbGluZy1hcHAtbmFtZSc6ICdYYm94IENsb3VkIEdhbWluZyBXZWInLFxuICAgICAgICAgICAgICAgICAgICAnY2FsbGluZy1hcHAtdmVyc2lvbic6ICcyNC4xNy42MycsXG4gICAgXG4gICAgICAgICAgICAgICAgfSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuUHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RzID0gcmVzdWx0LlByb2R1Y3RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkVGl0bGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2MlRpdGxlTWFwW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRUaXRsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcm9kdWN0c1trZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52MlRpdGxlTWFwW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRUaXRsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcm9kdWN0c1trZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZFRpdGxlcy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuUHJvZHVjdFRpdGxlLmxvY2FsZUNvbXBhcmUoYi5Qcm9kdWN0VGl0bGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobWVyZ2VkVGl0bGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRHYW1lUGFzc1Byb2R1Y3RzIGVycm9yOicsIGUpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXROZXdUaXRsZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KCdjYXRhbG9nLmdhbWVwYXNzLmNvbScsICcvc2lnbHMvdjI/aWQ9ZjEzY2Y2YjQtNTdlNi00NDU5LTg5ZGYtNmFlYzE4Y2YwNTM4Jm1hcmtldD1VUyZsYW5ndWFnZT1lbi1VUycpXG4gICAgfVxufVxuXG5pbnRlcmZhY2UgVGl0bGVEZXRhaWxzIHtcbiAgICB0aXRsZUlkOnN0cmluZztcbiAgICBkZXRhaWxzOiB7XG4gICAgICAgIHByb2R1Y3RJZDpzdHJpbmc7XG4gICAgICAgIHhib3hUaXRsZUlkOm51bWJlcjtcbiAgICAgICAgaGFzRW50aXRsZW1lbnQ6Ym9vbGVhbjtcbiAgICAgICAgc3VwcG9ydHNJbkFwcFB1cmNoYXNlczpib29sZWFuO1xuICAgICAgICBzdXBwb3J0ZWRUYWJzOiBhbnk7XG4gICAgICAgIHN1cHBvcnRlZElucHV0VHlwZXM6IGFueTtcbiAgICAgICAgcHJvZ3JhbXM6IGFueTtcbiAgICAgICAgdXNlclByb2dyYW1zOiBhbnk7XG4gICAgICAgIHVzZXJTdWJzY3JpcHRpb25zOiBhbnk7XG4gICAgICAgIGlzRnJlZUluU3RvcmU6IGJvb2xlYW47XG4gICAgICAgIG1heEdhbWVwbGF5VGltZUluU2Vjb25kczogbnVtYmVyO1xuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUaXRsZSB7XG5cbiAgICB0aXRsZUlkXG4gICAgcHJvZHVjdElkXG4gICAgeGJveFRpdGxlSWRcbiAgICBzdXBwb3J0ZWRJbnB1dFR5cGVzXG4gICAgY2F0YWxvZ0RldGFpbHNcblxuICAgIGNvbnN0cnVjdG9yKHRpdGxlOlRpdGxlRGV0YWlscyl7XG4gICAgICAgIHRoaXMudGl0bGVJZCA9IHRpdGxlLnRpdGxlSWRcbiAgICAgICAgdGhpcy5wcm9kdWN0SWQgPSB0aXRsZS5kZXRhaWxzLnByb2R1Y3RJZFxuICAgICAgICB0aGlzLnhib3hUaXRsZUlkID0gdGl0bGUuZGV0YWlscy54Ym94VGl0bGVJZFxuICAgICAgICB0aGlzLnN1cHBvcnRlZElucHV0VHlwZXMgPSB0aXRsZS5kZXRhaWxzLnN1cHBvcnRlZElucHV0VHlwZXNcbiAgICB9XG5cbiAgICBzZXRDYXRhbG9nRGV0YWlscyh0aXRsZUluZm86dGl0bGVJbmZvQXJncyl7XG4gICAgICAgIHRoaXMuY2F0YWxvZ0RldGFpbHMgPSB0aXRsZUluZm9cbiAgICB9XG5cbiAgICB0b1N0cmluZygpe1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcylcbiAgICB9XG5cbiAgICByZXN0b3JlRnJvbUNhY2hlKGNhY2hlZE9iail7XG4gICAgICAgIHRoaXMuY2F0YWxvZ0RldGFpbHMgPSBjYWNoZWRPYmouY2F0YWxvZ0RldGFpbHNcbiAgICB9XG59IiwiaW1wb3J0IHsgVG9rZW5TdG9yZSB9IGZyb20gJy4uL3hhbCdcbmltcG9ydCBTdG9yZSBmcm9tICdlbGVjdHJvbi1zdG9yZSdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aFRva2VuU3RvcmUgZXh0ZW5kcyBUb2tlblN0b3JlIHtcblxuICAgIHByaXZhdGUgX3N0b3JlID0gbmV3IFN0b3JlKClcblxuICAgIGxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX3N0b3JlLmdldCgndXNlci50b2tlbnN0b3JlJywgJ3t9JykgYXMgc3RyaW5nXG4gICAgICAgIHRoaXMubG9hZEpzb24odG9rZW5zKVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVzZXJUb2tlbjogdGhpcy5fdXNlclRva2VuPy5kYXRhLFxuICAgICAgICAgICAgc2lzdVRva2VuOiB0aGlzLl9zaXN1VG9rZW4/LmRhdGEsXG4gICAgICAgICAgICBqd3RLZXlzOiB0aGlzLl9qd3RLZXlzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuX3N0b3JlLnNldCgndXNlci50b2tlbnN0b3JlJywgZGF0YSlcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGVsZXRlKCd1c2VyLnRva2Vuc3RvcmUnKVxuICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5fc2lzdVRva2VuID0gdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuX2p3dEtleXMgPSB1bmRlZmluZWRcbiAgICB9XG59IiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IGVsZWN0cm9uIGZyb20gJ2VsZWN0cm9uJ1xuaW1wb3J0IHsgY29tcGFyZSB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnXG5pbXBvcnQgZ2ggZnJvbSAnZ2l0aHViLXVybC10by1vYmplY3QnXG5pbXBvcnQgcGtnIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbidcblxuLy8gQmFzZSBjb2RlIGJlbG93IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Fua3VyazkxL2VsZWN0cm9uLXVwZGF0ZS1ub3RpZmllci4gQ3JlZGl0cyB0byBAYW5rdXJrOTEuXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgcmVwb3NpdG9yeT86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgc2lsZW50PzogYm9vbGVhbjtcbiAgcHJlcmVsZWFzZXM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgR2l0aHViUmVsZWFzZU9iamVjdCB7XG4gIHRhZ19uYW1lOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgaHRtbF91cmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIGRlYnVnOiBmYWxzZSwgLy8gZm9yY2UgcnVuIGluIGRldmVsb3BtZW50XG4gICAgc2lsZW50OiB0cnVlLFxuICAgIHByZXJlbGVhc2VzOiBmYWxzZSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVwZGF0ZU5vdGlmaWNhdGlvbihvcHRpb25zOiBPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMsIGxvZ2dlcikge1xuICAgIGNvbnN0IHdpdGhEZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpXG5cbiAgICBpZiAoZWxlY3Ryb24uYXBwLmlzUmVhZHkoKSkge1xuICAgICAgICBjaGVja0ZvclVwZGF0ZXMod2l0aERlZmF1bHRzLCBsb2dnZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWxlY3Ryb24uYXBwLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICAgIGNoZWNrRm9yVXBkYXRlcyh3aXRoRGVmYXVsdHMsIGxvZ2dlcilcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoe3JlcG9zaXRvcnksIHRva2VuLCBkZWJ1Zywgc2lsZW50LCBwcmVyZWxlYXNlc306IE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucywgbG9nZ2VyKSB7XG4gICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gUnVubmluZyB1cGRhdGVyLi4uJywgZWxlY3Ryb24uYXBwLmlzUGFja2FnZWQsIGRlYnVnKVxuICAgIGlmICghZWxlY3Ryb24uYXBwLmlzUGFja2FnZWQgJiYgIWRlYnVnKXtcbiAgICAgICAgbG9nZ2VyLmxvZygndXBkYXRlcicsIF9fZmlsZW5hbWUrJ1tjaGVja0ZvclVwZGF0ZXMoKV0gTm90IGNoZWNraW5nIGZvciB1cGRhdGVzIGJlY2F1c2UgYXBwIGlzIG5vdCBwYWNrYWdlZC4nKVxuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcG9zaXRvcnkpIHtcbiAgICAvLyBjb25zdCBwa2cgPSByZXF1aXJlKHBhdGguam9pbihlbGVjdHJvbi5hcHAuZ2V0QXBwUGF0aCgpLCAncGFja2FnZS5qc29uJykpXG4gICAgICAgIGNvbnN0IGdoT2JqID0gZ2gocGtnLnJlcG9zaXRvcnkpXG5cbiAgICAgICAgaWYgKCFnaE9iaikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXBvc2l0b3J5IFVSTCBub3QgZm91bmQgaW4gcGFja2FnZS5qc29uIGZpbGUuJylcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9zaXRvcnkgPSBnaE9iai51c2VyICsgJy8nICsgZ2hPYmoucmVwb1xuICAgIH1cblxuICAgIGxldCBsYXRlc3RSZWxlYXNlOiBudWxsIHwgR2l0aHViUmVsZWFzZU9iamVjdCA9IG51bGxcblxuICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIENoZWNraW5nIGZvciB1cGRhdGVzIG9uIEdpdEh1YjonLCBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG9zaXRvcnl9L3JlbGVhc2VzYClcbiAgICAgICAgY29uc3Qge2RhdGE6IHJlbGVhc2VzfSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG9zaXRvcnl9L3JlbGVhc2VzYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0b2tlbiA/IHthdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gfSA6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKVxuXG4gICAgICAgIGZvcihjb25zdCByZWxlYXNlIGluIHJlbGVhc2VzKXtcbiAgICAgICAgICAgIGlmKHJlbGVhc2VzW3JlbGVhc2VdLnByZXJlbGVhc2UgPT09IHByZXJlbGVhc2VzKXtcbiAgICAgICAgICAgICAgICBsYXRlc3RSZWxlYXNlID0gcmVsZWFzZXNbcmVsZWFzZV0gYXMgR2l0aHViUmVsZWFzZU9iamVjdFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBFcnJvciB3aGlsZSBjaGVja2luZyBmb3IgdXBkYXRlczonLCBlcnJvcilcblxuICAgICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICAgICAgc2hvd0RpYWxvZygnVW5hYmxlIHRvIGNoZWNrIGZvciB1cGRhdGVzIGF0IHRoaXMgbW9tZW50LiBUcnkgYWdhaW4uJywgJ2Vycm9yJylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbGF0ZXN0UmVsZWFzZSkgcmV0dXJuXG5cbiAgICBpZiAoY29tcGFyZShsYXRlc3RSZWxlYXNlLnRhZ19uYW1lLCBlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpLCAnPicpKSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ3VwZGF0ZXInLCBfX2ZpbGVuYW1lKydbY2hlY2tGb3JVcGRhdGVzKCldIE5ldyB2ZXJzaW9uIGZvdW5kOicsIGxhdGVzdFJlbGVhc2UudGFnX25hbWUpXG4gICAgICAgIHNob3dVcGRhdGVEaWFsb2cobGF0ZXN0UmVsZWFzZSlcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIubG9nKCd1cGRhdGVyJywgX19maWxlbmFtZSsnW2NoZWNrRm9yVXBkYXRlcygpXSBBcHBsaWNhdGlvbiBpcyBuZXdlc3QgdmVyc2lvbi4gQ3VycmVudCB2ZXJzaW9uOicsIGVsZWN0cm9uLmFwcC5nZXRWZXJzaW9uKCksICdOZXdlc3QgdmVyc2lvbjonLCBsYXRlc3RSZWxlYXNlLnRhZ19uYW1lIClcbiAgICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgICAgIHNob3dEaWFsb2coYFlvdSBhcmUgYWxyZWFkeSBydW5uaW5nIHRoZSBsYXRlc3QgdmVyc2lvbi4gQ3VycmVudCB2ZXJzaW9uOiAke2VsZWN0cm9uLmFwcC5nZXRWZXJzaW9uKCl9LiBOZXdlc3QgdmVyc2lvbjogJHtsYXRlc3RSZWxlYXNlLnRhZ19uYW1lfWApXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93VXBkYXRlRGlhbG9nKHJlbGVhc2U6IEdpdGh1YlJlbGVhc2VPYmplY3QpIHtcbiAgICBlbGVjdHJvbi5kaWFsb2cuc2hvd01lc3NhZ2VCb3goXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiBlbGVjdHJvbi5hcHAuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgbWVzc2FnZTogJ05ldyByZWxlYXNlIGF2YWlsYWJsZScsXG4gICAgICAgICAgICBkZXRhaWw6IGBJbnN0YWxsZWQgVmVyc2lvbjogJHtlbGVjdHJvbi5hcHAuZ2V0VmVyc2lvbigpfVxcbkxhdGVzdCBWZXJzaW9uOiAke3JlbGVhc2UudGFnX25hbWV9XFxuXFxuJHtyZWxlYXNlLmJvZHl9YC50cmltKCksXG4gICAgICAgICAgICBidXR0b25zOiBbJ0Rvd25sb2FkJywgJ0xhdGVyJ10sXG4gICAgICAgICAgICBkZWZhdWx0SWQ6IDAsXG4gICAgICAgICAgICBjYW5jZWxJZDogMSxcbiAgICAgICAgfSxcbiAgICApXG4gICAgICAgIC50aGVuKCh7cmVzcG9uc2V9KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVjdHJvbi5zaGVsbC5vcGVuRXh0ZXJuYWwocmVsZWFzZS5odG1sX3VybClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpXG4gICAgICAgIH0pXG59XG5cbmNvbnN0IHNob3dEaWFsb2cgPSAoZGV0YWlsOiBzdHJpbmcsIHR5cGU6IHN0cmluZyA9ICdpbmZvJykgPT4ge1xuICAgIGVsZWN0cm9uLmRpYWxvZy5zaG93TWVzc2FnZUJveChcbiAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6IGVsZWN0cm9uLmFwcC5nZXROYW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiAnVXBkYXRlIGNoZWNrZXInLFxuICAgICAgICAgICAgYnV0dG9uczogWydDbG9zZSddLFxuICAgICAgICAgICAgZGVmYXVsdElkOiAwLFxuICAgICAgICAgICAgY2FuY2VsSWQ6IDAsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZGV0YWlsLFxuICAgICAgICB9LFxuICAgIClcbn0iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHhib3hXb3JrZXIge1xuXG4gICAgX2FwcGxpY2F0aW9uOkFwcGxpY2F0aW9uXG4gICAgXG4gICAgX2ZyaWVuZHMgPSB7fVxuICAgIF9vbmxpbmVGcmllbmRzID0ge31cblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuXG4gICAgICAgIC8vIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuaW50ZXJ2YWxGcmllbmRzKCkgXG4gICAgICAgIC8vIH0sIDMwICogMTAwMCkgLy8gQXBpIGlzIGxpbWl0ZWQgdG8gMzAgcmVxdWVzdHMgcGVyIDMwMCBzZWNvbmRzLiAoMzAwLzMwID0gMTAgc2VjKVxuICAgICAgICBcbiAgICAgICAgLy8gdGhpcy5pbnRlcnZhbEZyaWVuZHMoKVxuICAgIH1cblxuICAgIGludGVydmFsRnJpZW5kcygpe1xuICAgICAgICAvLyBjb25zb2xlLmxvZygneGJveCB3b3JrZXIgbG9vcCBydW4nKVxuXG4gICAgICAgIHRoaXMudXBkYXRlRnJpZW5kcygpLnRoZW4oKGZyaWVuZHM6YW55KSA9PiB7XG4gICAgICAgICAgICAvLyBHZXQgYWxsIGZyaWVuZHNcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd4Ym94V29ya2VyIC0gVXBkYXRlZCBmcmllbmRzIHN1Y2Nlc3NmdWxseScpXG5cbiAgICAgICAgICAgIC8vIFNlbmQgb3ZlciBvbmxpbmUgZnJpZW5kc1xuICAgICAgICAgICAgY29uc3Qgb25saW5lRnJpZW5kcyA9IFtdXG4gICAgICAgICAgICBmb3IoY29uc3QgZnJpZW5kIGluIGZyaWVuZHMpe1xuICAgICAgICAgICAgICAgIGlmKGZyaWVuZHNbZnJpZW5kXS5wcmVzZW5jZVN0YXRlICE9PSAnT2ZmbGluZScpe1xuICAgICAgICAgICAgICAgICAgICBvbmxpbmVGcmllbmRzLnB1c2goZnJpZW5kc1tmcmllbmRdKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fb25saW5lRnJpZW5kcyA9IG9ubGluZUZyaWVuZHNcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygneGJveFdvcmtlciAtIEVycm9yIHVwZGF0aW5nIGZyaWVuZHM6JywgZXJyb3IpXG4gICAgICAgIH0pXG5cbiAgICB9XG5cbiAgICB1cGRhdGVGcmllbmRzKCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fd2ViQXBpLmdldFByb3ZpZGVyKCdwZW9wbGUnKS5nZXRGcmllbmRzKCkudGhlbigoZnJpZW5kcykgPT4ge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBmcmllbmQgaW4gZnJpZW5kcy5wZW9wbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmllbmRzW2ZyaWVuZHMucGVvcGxlW2ZyaWVuZF0ueHVpZF0gPSBmcmllbmRzLnBlb3BsZVtmcmllbmRdXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9mcmllbmRzKVxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbn0iLCJpbXBvcnQgaHR0cHMgZnJvbSBcImh0dHBzXCI7XG5pbXBvcnQgQXBwbGljYXRpb24gZnJvbSBcIi4uL2FwcGxpY2F0aW9uXCI7XG5pbXBvcnQgeyBBZGRyZXNzNiB9IGZyb20gXCJpcC1hZGRyZXNzXCI7XG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vcmVuZGVyZXIvY29udGV4dC91c2VyQ29udGV4dC5kZWZhdWx0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIHBsYXlSZXN1bHQge1xuICBzZXNzaW9uUGF0aDogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIGV4Y2hhbmdlUmVzdWx0IHtcbiAgZXhjaGFuZ2VSZXNwb25zZTogc3RyaW5nO1xuICBlcnJvckRldGFpbHM6IHtcbiAgICBjb2RlOiBhbnk7XG4gICAgbWVzc2FnZTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB4Q2xvdWRBcGkge1xuICBfYXBwbGljYXRpb247XG5cbiAgX2hvc3Q6IHN0cmluZztcbiAgX3Rva2VuOiBzdHJpbmc7XG4gIF90eXBlOiBcImhvbWVcIiB8IFwiY2xvdWRcIjtcblxuICBfc2Vzc2lvblBhdGg6IHN0cmluZztcblxuICBfZXhjaGFuZ2VDb3VudGVyID0gMDtcbiAgX2V4Y2hhbmdlVXJsID0gXCJcIjtcbiAgX2N1cnJlbnRHYW1lID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhcHBsaWNhdGlvbjogQXBwbGljYXRpb24sXG4gICAgaG9zdDogc3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdHlwZTogXCJob21lXCIgfCBcImNsb3VkXCIgPSBcImhvbWVcIlxuICApIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uO1xuICAgIHRoaXMuX2hvc3QgPSBob3N0O1xuICAgIHRoaXMuX3Rva2VuID0gdG9rZW47XG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXQodXJsOiBzdHJpbmcsIG1ldGhvZCA9IFwiR0VUXCIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9IFwiXCI7XG5cbiAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLnJlcXVlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0OiB0aGlzLl9ob3N0LFxuICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IFwiQmVhcmVyIFwiICsgdGhpcy5fdG9rZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNwb25zZS5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXNwb25zZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgICAgIFwieENsb3VkQXBpXCIsXG4gICAgICAgICAgICAgICAgXCJob3N0OlwiICtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgK1xuICAgICAgICAgICAgICAgICAgXCIgZ2V0KFwiICtcbiAgICAgICAgICAgICAgICAgIHVybCArXG4gICAgICAgICAgICAgICAgICBcIiwgXCIgK1xuICAgICAgICAgICAgICAgICAgbWV0aG9kICtcbiAgICAgICAgICAgICAgICAgIFwiKSByZXNvbHZlOlwiLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IHJldHVybkRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuRGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBEYXRhIGlzIG5vdCBKU09OLi5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSAyMDQpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJldHJ5Li5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KHVybCwgbWV0aG9kKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgNzUwKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJldHVybkRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coXG4gICAgICAgICAgICAgICAgXCJ4Q2xvdWRBcGlcIixcbiAgICAgICAgICAgICAgICBcImdldChcIiArIHVybCArIFwiKSByZWplY3Q6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcG9zdCh1cmw6IHN0cmluZywgcG9zdERhdGEgPSB7fSwgaGVhZGVycyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCByZXNwb25zZURhdGEgPSBcIlwiO1xuICAgICAgY29uc3QgbWVyZ2VkSGVhZGVycyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB0aGlzLl90b2tlbixcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyc1xuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIGhvc3Q6IHRoaXMuX2hvc3QsXG4gICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczogbWVyZ2VkSGVhZGVycyxcbiAgICAgICAgfSxcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNwb25zZS5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhICs9IGRhdGE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXNwb25zZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSAyOTkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgICAgIFwieENsb3VkQXBpXCIsXG4gICAgICAgICAgICAgICAgXCJwb3N0KFwiICsgdXJsICsgXCIpIHJlc29sdmU6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGFcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBsZXQgcmV0dXJuRGF0YSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm5EYXRhID0gSlNPTi5wYXJzZShyZXNwb25zZURhdGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIERhdGEgaXMgbm90IEpTT04uLlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5EYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcbiAgICAgICAgICAgICAgICBcInhDbG91ZEFwaVwiLFxuICAgICAgICAgICAgICAgIFwicG9zdChcIiArIHVybCArIFwiKSByZWplY3Q6XCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXEub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXEud3JpdGUoSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpKTtcblxuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0V2FpdGluZ1RpbWVzKHRpdGxlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjEvd2FpdHRpbWUvXCIgKyB0aXRsZUlkKTtcbiAgfVxuXG4gIGdldFRpdGxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjIvdGl0bGVzXCIpO1xuICB9XG5cbiAgZ2V0UmVjZW50VGl0bGVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldChcIi92Mi90aXRsZXMvbXJ1P21yPTI1XCIpO1xuICB9XG5cbiAgc3RvcFN0cmVhbShzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQsIFwiREVMRVRFXCIpO1xuICB9XG5cbiAgc3RhcnRTdHJlYW0odGFyZ2V0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcbiAgICAgIFwic2V0dGluZ3NcIixcbiAgICAgIGRlZmF1bHRTZXR0aW5nc1xuICAgICk7XG4gICAgY29uc3QgZGV2aWNlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFwcEluZm86IHtcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgY2xpZW50QXBwSWQ6IFwid3d3Lnhib3guY29tXCIsXG4gICAgICAgICAgY2xpZW50QXBwVHlwZTogXCJicm93c2VyXCIsXG4gICAgICAgICAgY2xpZW50QXBwVmVyc2lvbjogXCIyMS4xLjk4XCIsXG4gICAgICAgICAgY2xpZW50U2RrVmVyc2lvbjogXCI4LjUuM1wiLFxuICAgICAgICAgIGh0dHBFbnZpcm9ubWVudDogXCJwcm9kXCIsXG4gICAgICAgICAgc2RrSW5zdGFsbElkOiBcIlwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRldjoge1xuICAgICAgICBodzoge1xuICAgICAgICAgIG1ha2U6IFwiTWljcm9zb2Z0XCIsXG4gICAgICAgICAgbW9kZWw6IFwiU3VyZmFjZSBQcm9cIixcbiAgICAgICAgICBzZGt0eXBlOiBcIndlYlwiLFxuICAgICAgICB9LFxuICAgICAgICBvczoge1xuICAgICAgICAgIG5hbWU6IHNldHRpbmdzLnJlc29sdXRpb24gPT0gMTA4MCA/IFwid2luZG93c1wiIDogXCJhbmRyb2lkXCIsXG4gICAgICAgICAgdmVyOiBcIjIyNjMxLjI3MTVcIixcbiAgICAgICAgICBwbGF0Zm9ybTogXCJkZXNrdG9wXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGRpc3BsYXlJbmZvOiB7XG4gICAgICAgICAgZGltZW5zaW9uczoge1xuICAgICAgICAgICAgd2lkdGhJblBpeGVsczogMTkyMCxcbiAgICAgICAgICAgIGhlaWdodEluUGl4ZWxzOiAxMDgwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGl4ZWxEZW5zaXR5OiB7XG4gICAgICAgICAgICBkcGlYOiAyLFxuICAgICAgICAgICAgZHBpWTogMixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgdGl0bGVJZDogdGhpcy5fdHlwZSA9PT0gXCJjbG91ZFwiID8gdGFyZ2V0IDogXCJcIixcbiAgICAgIHN5c3RlbVVwZGF0ZUdyb3VwOiBcIlwiLFxuICAgICAgY2xpZW50U2Vzc2lvbklkOiBcIlwiLFxuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgbmFub1ZlcnNpb246IFwiVjM7V2VicnRjVHJhbnNwb3J0LmRsbFwiLFxuICAgICAgICBlbmFibGVUZXh0VG9TcGVlY2g6IGZhbHNlLFxuICAgICAgICBoaWdoQ29udHJhc3Q6IDAsXG4gICAgICAgIGxvY2FsZTogc2V0dGluZ3MucHJlZmVycmVkX2dhbWVfbGFuZ3VhZ2UgPyBzZXR0aW5ncy5wcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSA6ICdlbi1VUycsXG4gICAgICAgIHVzZUljZUNvbm5lY3Rpb246IGZhbHNlLFxuICAgICAgICB0aW1lem9uZU9mZnNldE1pbnV0ZXM6IDEyMCxcbiAgICAgICAgc2RrVHlwZTogXCJ3ZWJcIixcbiAgICAgICAgLy8gRm9yIHhDbG91ZCBzdHJlYW1pbmdcbiAgICAgICAgb3NOYW1lOiBzZXR0aW5ncy5yZXNvbHV0aW9uID09IDEwODAgPyBcIndpbmRvd3NcIiA6IFwiYW5kcm9pZFwiLFxuICAgICAgfSxcbiAgICAgIHNlcnZlcklkOiB0aGlzLl90eXBlID09PSBcImhvbWVcIiA/IHRhcmdldCA6IFwiXCIsXG4gICAgICBmYWxsYmFja1JlZ2lvbk5hbWVzOiBbXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9zdChcIi92NS9zZXNzaW9ucy9cIiArIHRoaXMuX3R5cGUgKyBcIi9wbGF5XCIsIHBvc3REYXRhLCB7XG4gICAgICBcIlgtTVMtRGV2aWNlLUluZm9cIjogZGV2aWNlSW5mbyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0cmVhbVN0YXRlKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc3RhdGVcIik7XG4gIH1cblxuICBzZW5kU2RwKHNlc3Npb25JZDogc3RyaW5nLCBzZHA6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZVR5cGU6IFwib2ZmZXJcIixcbiAgICAgICAgc2RwOiBzZHAsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjaGF0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgYnl0ZXNQZXJTYW1wbGU6IDIsXG4gICAgICAgICAgICBleHBlY3RlZENsaXBEdXJhdGlvbk1zOiAyMCxcbiAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICBjb2RlYzogXCJvcHVzXCIsXG4gICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJ3ZWJtXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVtQ2hhbm5lbHM6IDEsXG4gICAgICAgICAgICBzYW1wbGVGcmVxdWVuY3lIejogMjQwMDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGF0OiB7XG4gICAgICAgICAgICBtaW5WZXJzaW9uOiAxLFxuICAgICAgICAgICAgbWF4VmVyc2lvbjogMSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRyb2w6IHtcbiAgICAgICAgICAgIG1pblZlcnNpb246IDEsXG4gICAgICAgICAgICBtYXhWZXJzaW9uOiAzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgIG1pblZlcnNpb246IDEsXG4gICAgICAgICAgICBtYXhWZXJzaW9uOiA4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgbWluVmVyc2lvbjogMSxcbiAgICAgICAgICAgIG1heFZlcnNpb246IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucG9zdChcbiAgICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9zZHBcIixcbiAgICAgICAgcG9zdERhdGFcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIpXG4gICAgICAgICAgICAudGhlbigoc2RwUmVzdWx0OiBleGNoYW5nZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGNoYW5nZVNkcCA9IEpTT04ucGFyc2Uoc2RwUmVzdWx0LmV4Y2hhbmdlUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUoZXhjaGFuZ2VTZHApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kQ2hhdFNkcChzZXNzaW9uSWQ6IHN0cmluZywgc2RwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcG9zdERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2VUeXBlOiBcIm9mZmVyXCIsXG4gICAgICAgIHNkcDogc2RwLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgaXNNZWRpYVN0cmVhbXNDaGF0UmVuZWdvdGlhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucG9zdChcbiAgICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9zZHBcIixcbiAgICAgICAgcG9zdERhdGFcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvc2RwXCIpXG4gICAgICAgICAgICAudGhlbigoc2RwUmVzdWx0OiBleGNoYW5nZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGNoYW5nZVNkcCA9IEpTT04ucGFyc2Uoc2RwUmVzdWx0LmV4Y2hhbmdlUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUoZXhjaGFuZ2VTZHApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjaGVja0ljZShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNldHRpbmdzOiBhbnkgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFxuICAgICAgXCJzZXR0aW5nc1wiLFxuICAgICAgZGVmYXVsdFNldHRpbmdzXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5nZXQoXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9pY2VcIikudGhlbihcbiAgICAgICAgKGljZVJlc3VsdDogZXhjaGFuZ2VSZXN1bHQgfCBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoaWNlUmVzdWx0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0ljZShzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBfaWNlUmVzdWx0ID0gaWNlUmVzdWx0IGFzIGV4Y2hhbmdlUmVzdWx0O1xuICAgICAgICAgICAgY29uc3QgZXhjaGFuZ2VJY2UgPSBKU09OLnBhcnNlKF9pY2VSZXN1bHQuZXhjaGFuZ2VSZXNwb25zZSk7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlZENhbmRpZGF0ZXMgPSBbXTtcblxuICAgICAgICAgICAgLy8gRmluZCBUZXJlZG8gQWRkcmVzcyBhbmQgZXh0cmFjdCByZW1vdGUgaXBcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIGluIGV4Y2hhbmdlSWNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUFkZHJlc3MgPVxuICAgICAgICAgICAgICAgIGV4Y2hhbmdlSWNlW2NhbmRpZGF0ZV0uY2FuZGlkYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUFkZHJlc3MubGVuZ3RoID4gNCAmJlxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUFkZHJlc3NbNF0uc3Vic3RyKDAsIDQpID09PSBcIjIwMDFcIlxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gbmV3IEFkZHJlc3M2KGNhbmRpZGF0ZUFkZHJlc3NbNF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlcmVkbyA9IGFkZHJlc3MuaW5zcGVjdFRlcmVkbygpO1xuXG4gICAgICAgICAgICAgICAgY29tcHV0ZWRDYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlOlxuICAgICAgICAgICAgICAgICAgICBcImE9Y2FuZGlkYXRlOjEwIDEgVURQIDEgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0ZXJlZG8uY2xpZW50NCArXG4gICAgICAgICAgICAgICAgICAgIFwiIDkwMDIgdHlwIGhvc3QgXCIsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgICAgICAgICAgIHNkcE1MaW5lSW5kZXg6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgc2RwTWlkOiBcIjBcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb21wdXRlZENhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBjYW5kaWRhdGU6XG4gICAgICAgICAgICAgICAgICAgIFwiYT1jYW5kaWRhdGU6MTEgMSBVRFAgMSBcIiArXG4gICAgICAgICAgICAgICAgICAgIHRlcmVkby5jbGllbnQ0ICtcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0ZXJlZG8udWRwUG9ydCArXG4gICAgICAgICAgICAgICAgICAgIFwiIHR5cCBob3N0IFwiLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZVR5cGU6IFwiaWNlQ2FuZGlkYXRlXCIsXG4gICAgICAgICAgICAgICAgICBzZHBNTGluZUluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgIHNkcE1pZDogXCIwXCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb21wdXRlZENhbmRpZGF0ZXMucHVzaChleGNoYW5nZUljZVtjYW5kaWRhdGVdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgIC9hPWNhbmRpZGF0ZTooPzxmb3VuZGF0aW9uPlxcZCspICg/PGNvbXBvbmVudD5cXGQrKSBVRFAgKD88cHJpb3JpdHk+XFxkKykgKD88aXA+W15cXHNdKykgKD88cG9ydD5cXGQrKSAoPzx0aGVfcmVzdD4uKikvXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBsc3QgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgY29tcHV0ZWRDYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLmNhbmRpZGF0ZSA9PT0gXCJhPWVuZC1vZi1jYW5kaWRhdGVzXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IHBhdHRlcm4uZXhlYyhpdGVtLmNhbmRpZGF0ZSkuZ3JvdXBzO1xuICAgICAgICAgICAgICBsc3QucHVzaChncm91cHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQZXJmZXJJUFY2XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaXB2Nikge1xuICAgICAgICAgICAgICBsc3Quc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0SXAgPSBhLmlwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZElwID0gYi5pcDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAhZmlyc3RJcC5pbmNsdWRlcyhcIjpcIikgJiYgc2Vjb25kSXAuaW5jbHVkZXMoXCI6XCIpXG4gICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5kaWRhdGVzID0gW107XG4gICAgICAgICAgICBsZXQgZm91bmRhdGlvbiA9IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmRpZGF0ZSA9IChjYW5kaWRhdGUpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGU6IGNhbmRpZGF0ZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgICAgICAgICBzZHBNTGluZUluZGV4OiBcIjBcIixcbiAgICAgICAgICAgICAgICBzZHBNaWQ6IFwiMFwiLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbHN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5mb3VuZGF0aW9uID0gZm91bmRhdGlvbjtcbiAgICAgICAgICAgICAgaXRlbS5wcmlvcml0eSA9IGZvdW5kYXRpb24gPT09IDEgPyAyMTMwNzA2NDMxIDogMTtcblxuICAgICAgICAgICAgICBuZXdDYW5kaWRhdGVzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3Q2FuZGlkYXRlKFxuICAgICAgICAgICAgICAgICAgYGE9Y2FuZGlkYXRlOiR7aXRlbS5mb3VuZGF0aW9ufSAxIFVEUCAke2l0ZW0ucHJpb3JpdHl9ICR7aXRlbS5pcH0gJHtpdGVtLnBvcnR9ICR7aXRlbS50aGVfcmVzdH1gXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICArK2ZvdW5kYXRpb247XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbmV3Q2FuZGlkYXRlcy5wdXNoKG5ld0NhbmRpZGF0ZShcImE9ZW5kLW9mLWNhbmRpZGF0ZXNcIikpO1xuXG4gICAgICAgICAgICByZXNvbHZlKG5ld0NhbmRpZGF0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbmRJY2Uoc2Vzc2lvbklkOiBzdHJpbmcsIGljZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHBvc3REYXRhID0ge1xuICAgICAgICBtZXNzYWdlVHlwZTogXCJpY2VDYW5kaWRhdGVcIixcbiAgICAgICAgY2FuZGlkYXRlOiBpY2UsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBvc3QoXG4gICAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIvaWNlXCIsXG4gICAgICAgIHBvc3REYXRhXG4gICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJY2Uoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAgIC50aGVuKGNhbmRpZGF0ZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNhbmRpZGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNlbmRNU0FMQXV0aChzZXNzaW9uSWQ6IHN0cmluZywgdXNlclRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wb3N0KFxuICAgICAgXCIvdjUvc2Vzc2lvbnMvXCIgKyB0aGlzLl90eXBlICsgXCIvXCIgKyBzZXNzaW9uSWQgKyBcIi9jb25uZWN0XCIsXG4gICAgICB7XG4gICAgICAgIHVzZXJUb2tlbjogdXNlclRva2VuLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZW5kS2VlcGFsaXZlKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zdChcbiAgICAgIFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL1wiICsgc2Vzc2lvbklkICsgXCIva2VlcGFsaXZlXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0QWN0aXZlU2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KFwiL3Y1L3Nlc3Npb25zL1wiICsgdGhpcy5fdHlwZSArIFwiL2FjdGl2ZVwiKTtcbiAgfVxufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuXG5jbGFzcyBIdHRwIHtcbiAgZ2V0KGhvc3Q6IHN0cmluZywgcGF0aDogc3RyaW5nLCBoZWFkZXJzOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaG9zdEhlYWRlcnMgPSB7XG4gICAgICAgIC8vICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICB9O1xuXG4gICAgICBheGlvc1xuICAgICAgICAuZ2V0KGBodHRwczovLyR7aG9zdH0ke3BhdGh9YCwge1xuICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwIHx8IHJlcy5zdGF0dXMgPT09IDIwNCkge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuY29kZSxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgICAgIGJvZHk6IHJlcy5kYXRhLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJyArIGhvc3QgKyBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHBvc3QoaG9zdDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIGhlYWRlcnM6IGFueSwgZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhvc3RIZWFkZXJzID0ge1xuICAgICAgICAvLyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGBodHRwczovLyR7aG9zdH0ke3BhdGh9YCwgZGF0YSwge1xuICAgICAgICAgIGhlYWRlcnM6IGhvc3RIZWFkZXJzLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwIHx8IHJlcy5zdGF0dXMgPT09IDIwMikge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuY29kZSxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgICAgIGJvZHk6IHJlcy5kYXRhLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJyArIGhvc3QgKyBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIdHRwOyIsImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuL2FwcGxpY2F0aW9uJ1xuaW1wb3J0IElwY0NvbnNvbGVzIGZyb20gJy4vaXBjL2NvbnNvbGVzJ1xuaW1wb3J0IElwY1N0cmVhbWluZyBmcm9tICcuL2lwYy9zdHJlYW1pbmcnXG5pbXBvcnQgSXBjeENsb3VkIGZyb20gJy4vaXBjL3hjbG91ZCdcbmltcG9ydCBJcGNBcHAgZnJvbSAnLi9pcGMvYXBwJ1xuaW1wb3J0IElwY1NldHRpbmdzIGZyb20gJy4vaXBjL3NldHRpbmdzJ1xuXG5pbXBvcnQgeyBpcGNNYWluIH0gZnJvbSAnZWxlY3Ryb24nXG5cbmludGVyZmFjZSBJcGNDaGFubmVscyB7XG4gICAgc3RyZWFtaW5nOiBJcGNTdHJlYW1pbmc7XG4gICAgY29uc29sZXM6IElwY0NvbnNvbGVzO1xuICAgIGFwcDogSXBjQXBwO1xuICAgIHhDbG91ZDogSXBjeENsb3VkO1xuICAgIHNldHRpbmdzOiBJcGNTZXR0aW5ncztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjIHtcblxuICAgIF9hcHBsaWNhdGlvbjpBcHBsaWNhdGlvblxuXG4gICAgX2NoYW5uZWxzOklwY0NoYW5uZWxzXG5cbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbil7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gYXBwbGljYXRpb25cblxuICAgICAgICB0aGlzLl9jaGFubmVscyA9IHtcbiAgICAgICAgICAgIHN0cmVhbWluZzogbmV3IElwY1N0cmVhbWluZyh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgICAgICBjb25zb2xlczogbmV3IElwY0NvbnNvbGVzKHRoaXMuX2FwcGxpY2F0aW9uKSxcbiAgICAgICAgICAgIGFwcDogbmV3IElwY0FwcCh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgICAgICB4Q2xvdWQ6IG5ldyBJcGN4Q2xvdWQodGhpcy5fYXBwbGljYXRpb24pLFxuICAgICAgICAgICAgc2V0dGluZ3M6IG5ldyBJcGNTZXR0aW5ncyh0aGlzLl9hcHBsaWNhdGlvbiksXG4gICAgICAgIH1cblxuICAgICAgICBmb3IoY29uc3QgY2hhbm5lbCBpbiB0aGlzLl9jaGFubmVscyl7XG4gICAgICAgICAgICBpcGNNYWluLm9uKGNoYW5uZWwsIChldmVudCwgYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxzW2NoYW5uZWxdLm9uRXZlbnQoY2hhbm5lbCwgZXZlbnQsIGFyZ3MpIFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9XG5cbiAgICBzdGFydFVwKCl7XG4gICAgICAgIGZvcihjb25zdCBjaGFubmVsIGluIHRoaXMuX2NoYW5uZWxzKXtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSXBjJywgJ1N0YXJ0aW5nIElQQyBjaGFubmVsOiAnICsgY2hhbm5lbClcblxuICAgICAgICAgICAgaWYodGhpcy5fY2hhbm5lbHNbY2hhbm5lbF0uc3RhcnRVcClcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5zdGFydFVwKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVXNlckxvYWRlZCgpe1xuICAgICAgICBmb3IoY29uc3QgY2hhbm5lbCBpbiB0aGlzLl9jaGFubmVscyl7XG4gICAgICAgICAgICBpZih0aGlzLl9jaGFubmVsc1tjaGFubmVsXS5vblVzZXJMb2FkZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZygnSXBjJywgJ0xvYWRpbmcgc3RhcnR1cCBkYXRhIGZvciBJUEMgY2hhbm5lbDogJyArIGNoYW5uZWwpXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbHNbY2hhbm5lbF0ub25Vc2VyTG9hZGVkKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBzZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0FwcCBleHRlbmRzIElwY0Jhc2Uge1xuICAvLyBfc3RyZWFtaW5nU2Vzc2lvbnM6YW55ID0ge31cblxuICBsb2FkQ2FjaGVkVXNlcigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXJTdGF0ZSgpO1xuXG4gICAgICByZXNvbHZlKHVzZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXNlclN0YXRlKCkge1xuICAgIGNvbnN0IGdhbWVydGFnID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcInVzZXIuZ2FtZXJ0YWdcIik7XG4gICAgY29uc3QgZ2FtZXJwaWMgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KFwidXNlci5nYW1lcnBpY1wiKTtcbiAgICBjb25zdCBnYW1lcnNjb3JlID0gdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLmdldChcInVzZXIuZ2FtZXJzY29yZVwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaWduZWRJbjogZ2FtZXJ0YWcgPyB0cnVlIDogZmFsc2UsXG4gICAgICB0eXBlOiBcInVzZXJcIixcbiAgICAgIGdhbWVydGFnOiBnYW1lcnRhZyA/IGdhbWVydGFnIDogXCJcIixcbiAgICAgIGdhbWVycGljOiBnYW1lcnBpYyA/IGdhbWVycGljIDogXCJcIixcbiAgICAgIGdhbWVyc2NvcmU6IGdhbWVyc2NvcmUgPyBnYW1lcnNjb3JlIDogXCJcIixcbiAgICAgIGxldmVsOiB0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX2FwcExldmVsLFxuICAgIH07XG4gIH1cblxuICBnZXRBdXRoU3RhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGluZzogdGhpcy5fYXBwbGljYXRpb24uX2F1dGhlbnRpY2F0aW9uLl9pc0F1dGhlbnRpY2F0aW5nLFxuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5faXNBdXRoZW50aWNhdGVkLFxuICAgICAgICB1c2VyOiB0aGlzLmdldFVzZXJTdGF0ZSgpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBcHBMZXZlbCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uX2FwcExldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNoZWNrQXV0aGVudGljYXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5jaGVja0F1dGhlbnRpY2F0aW9uKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fYXV0aGVudGljYXRpb24uc3RhcnRBdXRoZmxvdygpO1xuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHF1aXQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnF1aXQoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSk7XG4gIH1cblxuICByZXN0YXJ0KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5yZXN0YXJ0KCk7XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJEYXRhKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLmRlZmF1bHRTZXNzaW9uXG4gICAgICAgIC5jbGVhclN0b3JhZ2VEYXRhKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9hdXRoZW50aWNhdGlvbi5fdG9rZW5TdG9yZS5jbGVhcigpO1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5kZWxldGUoXCJ1c2VyXCIpO1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5kZWxldGUoXCJhdXRoXCIpO1xuXG4gICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKFxuICAgICAgICAgICAgXCJhdXRoZW50aWNhdGlvblwiLFxuICAgICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICAgIFwiW3N0YXJ0SXBjRXZlbnRzKCldIFJlY2VpdmVkIHJlc3RhcnQgcmVxdWVzdC4gUmVzdGFydGluZyBhcHBsaWNhdGlvbi4uLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5yZXN0YXJ0KCk7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLmxvZyhcbiAgICAgICAgICAgIFwiYXV0aGVudGljYXRpb25cIixcbiAgICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgICBcIltzdGFydElwY0V2ZW50cygpXSBFcnJvcjogRmFpbGVkIHRvIGNsZWFyIGxvY2FsIHN0b3JhZ2UhXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0T25saW5lRnJpZW5kcygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9hcHBsaWNhdGlvbi5feGJveFdvcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFdvcmtlciBpcyBub3QgbG9hZGVkIHlldC4uXG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9hcHBsaWNhdGlvbi5feGJveFdvcmtlci5fb25saW5lRnJpZW5kcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblVpU2hvd24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHt9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzRnVsbHNjcmVlbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGlzRnVsbFNjcmVlbiA9IHRoaXMuX2FwcGxpY2F0aW9uLl9tYWluV2luZG93LmlzRnVsbFNjcmVlbigpO1xuICAgICAgcmVzb2x2ZShpc0Z1bGxTY3JlZW4pXG4gICAgfSk7IFxuICB9XG5cbiAgdG9nZ2xlRnVsbHNjcmVlbigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGlzRnVsbFNjcmVlbiA9IHRoaXMuX2FwcGxpY2F0aW9uLl9tYWluV2luZG93LmlzRnVsbFNjcmVlbigpO1xuICAgICAgdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cuc2V0RnVsbFNjcmVlbighaXNGdWxsU2NyZWVuKTtcbiAgICAgIHJlc29sdmUoe30pXG4gICAgfSk7XG4gIH1cblxuICBlbnRlckZ1bGxzY3JlZW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fbWFpbldpbmRvdy5zZXRGdWxsU2NyZWVuKHRydWUpO1xuICAgICAgcmVzb2x2ZSh7fSlcbiAgICB9KTtcbiAgfVxuXG4gIGV4aXRGdWxsc2NyZWVuKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cuc2V0RnVsbFNjcmVlbihmYWxzZSk7XG4gICAgICByZXNvbHZlKHt9KVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgQXBwbGljYXRpb24gZnJvbSAnLi4vYXBwbGljYXRpb24nXG5cbmludGVyZmFjZSBFdmVudEFyZ3Mge1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIGlkOiBudW1iZXI7XG4gICAgZGF0YTogYW55O1xuICAgIGVycm9yPzogYW55O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGNCYXNlIHtcbiAgICBfYXBwbGljYXRpb246QXBwbGljYXRpb25cblxuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uOkFwcGxpY2F0aW9uKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvblxuICAgIH1cblxuICAgIG9uRXZlbnQoY2hhbm5lbCwgZXZlbnQsIGFyZ3M6RXZlbnRBcmdzKXtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdJcGM6UmVjdicsICdSZWNlaXZlZCBldmVudDogWycrY2hhbm5lbCsnXScsIGFyZ3MpXG4gICAgICAgIGlmKHR5cGVvZiB0aGlzW2FyZ3MuYWN0aW9uXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSAoT2JqZWN0LmtleXMoYXJncy5kYXRhKS5sZW5ndGggPiAwKSA/IHRoaXNbYXJncy5hY3Rpb25dKGFyZ3MuZGF0YSkgOiB0aGlzW2FyZ3MuYWN0aW9uXSgpXG4gICAgICAgICAgICByZXNwb25zZS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoY2hhbm5lbCwge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFyZ3MuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1I6IElQQyBjb21tdW5pY2F0aW9uIGVycm9yIGZyb20gYmFja2VuZDonLCBlcnJvcilcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmQoY2hhbm5lbCwge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFyZ3MuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpZDogYXJncy5pZCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ubG9nKCdJcGMnLCAnRVJST1I6IEFjdGlvbiB3YXMgbm90IGZvdW5kOicsIGFyZ3MuYWN0aW9uLCAnb24gY2hhbm5lbCcsIGNoYW5uZWwpXG4gICAgICAgICAgICB0aGlzLnNlbmQoY2hhbm5lbCwge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogYXJncy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgaWQ6IGFyZ3MuaWQsXG4gICAgICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdJUEMgYWN0aW9uIGZhaWx1cmUuIEFjdGlvbiB3YXMgbm90IGZvdW5kOiAnK2NoYW5uZWwrJzonK2FyZ3MuYWN0aW9uLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbmQoY2hhbm5lbCwgYXJnczpFdmVudEFyZ3Mpe1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coJ0lwYzpTZW5kJywgJ1NlbmRpbmcgZXZlbnQ6IFsnK2NoYW5uZWwrJ10nLCBKU09OLnN0cmluZ2lmeShhcmdzKSlcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX21haW5XaW5kb3cud2ViQ29udGVudHMuc2VuZChjaGFubmVsLCB7XG4gICAgICAgICAgICBhY3Rpb246IGFyZ3MuYWN0aW9uLFxuICAgICAgICAgICAgaWQ6IGFyZ3MuaWQsXG4gICAgICAgICAgICBkYXRhOiBhcmdzLmRhdGEsXG4gICAgICAgICAgICBlcnJvcjogYXJncy5lcnJvcixcbiAgICAgICAgfSlcbiAgICB9XG59IiwiaW1wb3J0IElwY0Jhc2UgZnJvbSAnLi9iYXNlJ1xuaW1wb3J0IEh0dHAgZnJvbSAnLi4vaGVscGVycy94aHR0cCdcblxuaW1wb3J0IFVVSUQgZnJvbSAndXVpZC0xMzQ1J1xuY29uc3QgbmV4dFVVSUQgPSAoKSA9PiBVVUlELnYzKHsgbmFtZXNwYWNlOiAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JywgbmFtZTogRGF0ZS5ub3coKS50b1N0cmluZygpIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwY0NvbnNvbGVzIGV4dGVuZHMgSXBjQmFzZSB7XG4gICAgLy8gX3N0cmVhbWluZ1Nlc3Npb25zOmFueSA9IHt9XG5cbiAgICBfY29uc29sZXMgPSBbXVxuICAgIF9jb25zb2xlc0xhc3RVcGRhdGUgPSAwXG5cbiAgICBzZW5kQ29tbWFuZCAoXG4gICAgICAgIGNvbnNvbGVJZDogc3RyaW5nLFxuICAgICAgICBjb21tYW5kVHlwZTogc3RyaW5nLFxuICAgICAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgICAgIHBhcmFtcz86IGFueSxcbiAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tzZW5kQ29tbWFuZF06JywgY29uc29sZUlkLCBjb21tYW5kVHlwZSwgY29tbWFuZCk7XG4gICAgICAgIGNvbnN0IGh0dHAgPSBuZXcgSHR0cCgpO1xuICAgIFxuICAgICAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJhbXMgPSBbXTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBjb25zdCBwb3N0UGFyYW1zID0ge1xuICAgICAgICAgIGRlc3RpbmF0aW9uOiAnWGJveCcsXG4gICAgICAgICAgdHlwZTogY29tbWFuZFR5cGUsXG4gICAgICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgICAgICBzZXNzaW9uSWQ6IG5leHRVVUlEKCksXG4gICAgICAgICAgc291cmNlSWQ6ICdjb20ubWljcm9zb2Z0LnNtYXJ0Z2xhc3MnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHBhcmFtcyxcbiAgICAgICAgICBsaW5rZWRYYm94SWQ6IGNvbnNvbGVJZCxcbiAgICAgICAgfTtcbiAgICBcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBodHRwXG4gICAgICAgICAgICAucG9zdChcbiAgICAgICAgICAgICAgJ3hjY3MueGJveGxpdmUuY29tJyxcbiAgICAgICAgICAgICAgJy9jb21tYW5kcycsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOlxuICAgICAgICAgICAgICAgICAgJ1hCTDMuMCB4PScgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24ud2ViVG9rZW4uZGF0YS5EaXNwbGF5Q2xhaW1zLnh1aVswXS51aHMgK1xuICAgICAgICAgICAgICAgICAgJzsnICtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLndlYlRva2VuLmRhdGEuVG9rZW4sXG4gICAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6ICdlbi1VUycsXG4gICAgICAgICAgICAgICAgc2tpbGxwbGF0Zm9ybTogJ1JlbW90ZU1hbmFnZW1lbnQnLFxuICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzQnLFxuICAgICAgICAgICAgICAgICd4LXhibC1jbGllbnQtbmFtZSc6ICdYYm94QXBwJyxcbiAgICAgICAgICAgICAgICAneC14YmwtY2xpZW50LXR5cGUnOiAnVVdBJyxcbiAgICAgICAgICAgICAgICAneC14YmwtY2xpZW50LXZlcnNpb24nOiAnMzkuMzkuMjIwMDEuMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHBvc3RQYXJhbXMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tzZW5kQ29tbWFuZF0gL2NvbW1hbmRzLyByZXNwb25zZTonLCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5yZXN1bHQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0KCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLl9jb25zb2xlc0xhc3RVcGRhdGUgPCBEYXRlLm5vdygpIC0gNjAqMTAwMCl7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fYXBwbGljYXRpb24uX2V2ZW50cy5fd2ViQXBpLmdldFByb3ZpZGVyKCdzbWFydGdsYXNzJykuZ2V0Q29uc29sZXNMaXN0KCkudGhlbigoY29uc29sZXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5fd2ViQXBpLmdldFByb3ZpZGVyKCdzbWFydGdsYXNzJykuZ2V0Q29uc29sZXNMaXN0KCkudGhlbihjb25zb2xlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnNvbGVzID0gY29uc29sZXMucmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnNvbGVzTGFzdFVwZGF0ZSA9IERhdGUubm93KClcblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuX2NvbnNvbGVzKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jb25zb2xlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwb3dlck9uKGNvbnNvbGVJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb25zb2xlSWQ6JywgY29uc29sZUlkKVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZW5kQ29tbWFuZChjb25zb2xlSWQsICdQb3dlcicsICdXYWtlVXAnKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHBvd2VyT2ZmKGNvbnNvbGVJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbmRDb21tYW5kKGNvbnNvbGVJZCwgJ1Bvd2VyJywgJ1R1cm5PZmYnKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cbn0iLCJpbXBvcnQgSXBjQmFzZSBmcm9tICcuL2Jhc2UnXG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9yZW5kZXJlci9jb250ZXh0L3VzZXJDb250ZXh0LmRlZmF1bHRzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcGNTZXR0aW5ncyBleHRlbmRzIElwY0Jhc2Uge1xuXG4gICAgc2V0U2V0dGluZ3MoYXJnczoodHlwZW9mIGRlZmF1bHRTZXR0aW5ncykpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NldHRpbmdzID0gey4uLmRlZmF1bHRTZXR0aW5ncywgLi4uYXJnc31cbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5zZXQoJ3NldHRpbmdzJywgbmV3U2V0dGluZ3MpXG4gICAgICAgICAgICByZXNvbHZlKG5ld1NldHRpbmdzKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFNldHRpbmdzKCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx0eXBlb2YgZGVmYXVsdFNldHRpbmdzPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9hcHBsaWNhdGlvbi5fc3RvcmUuZ2V0KCdzZXR0aW5ncycsIGRlZmF1bHRTZXR0aW5ncykgYXMgb2JqZWN0XG4gICAgICAgICAgICByZXNvbHZlKHsuLi5kZWZhdWx0U2V0dGluZ3MsIC4uLnNldHRpbmdzfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZXNldFNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gey4uLmRlZmF1bHRTZXR0aW5nc31cbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9zdG9yZS5kZWxldGUoJ3NldHRpbmdzJylcblxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX3N0b3JlLnNldCgnc2V0dGluZ3MnLCBzZXR0aW5ncylcbiAgICAgICAgICAgIHJlc29sdmUoc2V0dGluZ3MpXG4gICAgICAgIH0pXG4gICAgfVxufSIsImltcG9ydCBJcGNCYXNlIGZyb20gJy4vYmFzZSdcbmltcG9ydCBBcHBsaWNhdGlvbiBmcm9tICcuLi9hcHBsaWNhdGlvbidcbmltcG9ydCBTdHJlYW1NYW5hZ2VyIGZyb20gJy4uL2hlbHBlcnMvc3RyZWFtbWFuYWdlcidcblxuaW50ZXJmYWNlIHN0YXJ0U3RyZWFtQXJncyB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHRhcmdldDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2Ugc2VuZFNkcEFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIHNkcDogYW55O1xufVxuXG5pbnRlcmZhY2Ugc2VuZEljZUFyZ3Mge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIGljZTogYW55O1xufVxuaW50ZXJmYWNlIHNlbmRLZWVwYWxpdmVBcmdzIHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBzdG9wU3RyZWFtQXJncyB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgZ2V0UGxheWVyU3RhdGVBcmdzIHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjU3RyZWFtaW5nIGV4dGVuZHMgSXBjQmFzZSB7XG5cbiAgICBfc3RyZWFtTWFuYWdlcjpTdHJlYW1NYW5hZ2VyXG5cbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbjpBcHBsaWNhdGlvbil7XG4gICAgICAgIHN1cGVyKGFwcGxpY2F0aW9uKVxuXG4gICAgICAgIHRoaXMuX3N0cmVhbU1hbmFnZXIgPSBuZXcgU3RyZWFtTWFuYWdlcihhcHBsaWNhdGlvbilcbiAgICB9XG5cbiAgICBzdGFydFN0cmVhbShhcmdzOnN0YXJ0U3RyZWFtQXJncyl7XG5cbiAgICAgICAgaWYoYXJncy50eXBlID09PSAnaG9tZScpe1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb24uX2lwYy5fY2hhbm5lbHMuY29uc29sZXMuX2NvbnNvbGVzTGFzdFVwZGF0ZSA9IDBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLl9pcGMuX2NoYW5uZWxzLnhDbG91ZC5fcmVjZW50VGl0bGVzTGFzdFVwZGF0ZSA9IDBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLnN0YXJ0U3RyZWFtKGFyZ3MudHlwZSwgYXJncy50YXJnZXQpXG4gICAgfVxuXG4gICAgc3RvcFN0cmVhbShhcmdzOnN0b3BTdHJlYW1BcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc3RvcFN0cmVhbShhcmdzLnNlc3Npb25JZClcbiAgICB9XG5cbiAgICBzZW5kU2RwKGFyZ3M6c2VuZFNkcEFyZ3Mpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5zZW5kU2RwKGFyZ3Muc2Vzc2lvbklkLCBhcmdzLnNkcClcbiAgICB9XG5cbiAgICBzZW5kQ2hhdFNkcChhcmdzOnNlbmRTZHBBcmdzKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbU1hbmFnZXIuc2VuZENoYXRTZHAoYXJncy5zZXNzaW9uSWQsIGFyZ3Muc2RwKVxuICAgIH1cblxuICAgIHNlbmRJY2UoYXJnczpzZW5kSWNlQXJncyl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLnNlbmRJY2UoYXJncy5zZXNzaW9uSWQsIGFyZ3MuaWNlKVxuICAgIH1cblxuICAgIHNlbmRLZWVwYWxpdmUoYXJnczpzZW5kS2VlcGFsaXZlQXJncyl7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW1NYW5hZ2VyLnNlbmRLZWVwYWxpdmUoYXJncy5zZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgZ2V0UGxheWVyU3RhdGUoYXJnczpnZXRQbGF5ZXJTdGF0ZUFyZ3Mpe1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5fc3RyZWFtTWFuYWdlci5nZXRTZXNzaW9uKGFyZ3Muc2Vzc2lvbklkKSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhY3RpdmVTZXNzaW9ucygpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtTWFuYWdlci5nZXRBY3RpdmVTZXNzaW9ucygpXG4gICAgfVxuXG59IiwiaW1wb3J0IElwY0Jhc2UgZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gXCIuLi9hcHBsaWNhdGlvblwiO1xuaW1wb3J0IFRpdGxlTWFuYWdlciBmcm9tIFwiLi4vaGVscGVycy90aXRsZW1hbmFnZXJcIjtcbmltcG9ydCBBY2hpdmVtZW50TWFuYWdlciBmcm9tIFwiLi4vaGVscGVycy9hY2hpdmVtZW50bWFuYWdlclwiO1xuaW1wb3J0IHhDbG91ZEFwaSBmcm9tIFwiLi4vaGVscGVycy94Y2xvdWRhcGlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBjeENsb3VkIGV4dGVuZHMgSXBjQmFzZSB7XG4gIF90aXRsZU1hbmFnZXI6IFRpdGxlTWFuYWdlcjtcbiAgX2FjaGl2ZW1lbnRNYW5hZ2VyOiBBY2hpdmVtZW50TWFuYWdlcjtcblxuICBfdGl0bGVzQXJlTG9hZGVkID0gZmFsc2U7XG5cbiAgX3RpdGxlcyA9IFtdO1xuICBfdGl0bGVzTGFzdFVwZGF0ZSA9IDA7XG5cbiAgX3JlY2VudFRpdGxlcyA9IFtdO1xuICBfcmVjZW50VGl0bGVzTGFzdFVwZGF0ZSA9IDA7XG5cbiAgX25ld1RpdGxlcyA9IFtdO1xuICBfbmV3VGl0bGVzTGFzdFVwZGF0ZSA9IDA7XG5cbiAgY29uc3RydWN0b3IoYXBwbGljYXRpb246IEFwcGxpY2F0aW9uKSB7XG4gICAgc3VwZXIoYXBwbGljYXRpb24pO1xuXG4gICAgdGhpcy5fdGl0bGVNYW5hZ2VyID0gbmV3IFRpdGxlTWFuYWdlcihhcHBsaWNhdGlvbik7XG4gICAgdGhpcy5fYWNoaXZlbWVudE1hbmFnZXIgPSBuZXcgQWNoaXZlbWVudE1hbmFnZXIoYXBwbGljYXRpb24pO1xuICB9XG5cbiAgc3RhcnRVcCgpIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbi5sb2coXCJJcGM6eENsb3VkXCIsIFwiU3RhcnRpbmcgeENsb3VkIElQQyBDaGFubmVsLi4uXCIpO1xuICB9XG5cbiAgZ2V0UmVjZW50VGl0bGVzKCkge1xuICAgIGNvbnN0IHN0cmVhbWluZ1Rva2VucyA9IHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2VucztcbiAgICBjb25zdCBfeENsb3VkQXBpID0gbmV3IHhDbG91ZEFwaShcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLFxuICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmdldERlZmF1bHRSZWdpb24oKS5iYXNlVXJpLnN1YnN0cmluZyg4KSxcbiAgICAgIHN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5kYXRhLmdzVG9rZW4sXG4gICAgICBcImNsb3VkXCJcbiAgICApO1xuICAgIHJldHVybiBfeENsb3VkQXBpLmdldFJlY2VudFRpdGxlcygpO1xuICB9XG5cbiAgZ2V0WGhvbWVUb2tlbigpIHtcbiAgICBjb25zb2xlLmxvZyhcImdldFhob21lVG9rZW5cIik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2VucyAmJlxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueEhvbWVUb2tlblxuICAgICAgKSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhIb21lVG9rZW4uZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0WGhvbWVUb2tlbkRlZmF1bHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueEhvbWVUb2tlbi5zZXREZWZhdWx0UmVnaW9uKG5hbWUpO1xuICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFhjbG91ZFRva2VuKCkge1xuICAgIGNvbnNvbGUubG9nKFwiZ2V0WGNsb3VkVG9rZW5cIik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2VucyAmJlxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbi5zdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW5cbiAgICAgICkge1xuICAgICAgICByZXNvbHZlKHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRYY2xvdWRUb2tlbkRlZmF1bHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuKSB7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uLnN0cmVhbWluZ1Rva2Vucy54Q2xvdWRUb2tlbi5zZXREZWZhdWx0UmVnaW9uKG5hbWUpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7fSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRUaXRsZXMoKSB7XG4gICAgY29uc3Qgc3RyZWFtaW5nVG9rZW5zID0gdGhpcy5fYXBwbGljYXRpb24uc3RyZWFtaW5nVG9rZW5zO1xuICAgIGNvbnN0IF94Q2xvdWRBcGkgPSBuZXcgeENsb3VkQXBpKFxuICAgICAgdGhpcy5fYXBwbGljYXRpb24sXG4gICAgICBzdHJlYW1pbmdUb2tlbnMueENsb3VkVG9rZW4uZ2V0RGVmYXVsdFJlZ2lvbigpLmJhc2VVcmkuc3Vic3RyaW5nKDgpLFxuICAgICAgc3RyZWFtaW5nVG9rZW5zLnhDbG91ZFRva2VuLmRhdGEuZ3NUb2tlbixcbiAgICAgIFwiY2xvdWRcIlxuICAgICk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIF94Q2xvdWRBcGlcbiAgICAgICAgLmdldFRpdGxlcygpXG4gICAgICAgIC50aGVuKCh0aXRsZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodGl0bGVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0R2FtZVBhc3NQcm9kdWN0cyh0aXRsZXM6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl90aXRsZU1hbmFnZXIuZ2V0R2FtZVBhc3NQcm9kdWN0cyh0aXRsZXMpO1xuICB9XG5cbiAgZ2V0TmV3VGl0bGVzKCkge1xuICAgIHJldHVybiB0aGlzLl90aXRsZU1hbmFnZXIuZ2V0TmV3VGl0bGVzKCk7XG4gIH1cblxuICBnZXRIaXN0b3J5QWNoaXZlbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjaGl2ZW1lbnRNYW5hZ2VyLmdldEhpc3RvcnlBY2hpdmVtZW50cygpO1xuICB9XG5cbiAgZ2V0QWNoaXZlbWVudERldGFpbCh0aXRsZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fYWNoaXZlbWVudE1hbmFnZXIuZ2V0QWNoaXZlbWVudERldGFpbCh0aXRsZUlkKTtcbiAgfVxufVxuIiwiaW1wb3J0IFRva2VuU3RvcmUgZnJvbSAnLi90b2tlbnN0b3JlJ1xuaW1wb3J0IFhhbCBmcm9tICcuL3hhbCdcblxuZXhwb3J0IHtcbiAgICBUb2tlblN0b3JlLFxuICAgIFhhbCxcbn0iLCJpbXBvcnQgeyBJbmNvbWluZ0h0dHBIZWFkZXJzIH0gZnJvbSAnaHR0cCdcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cCB7XG5cbiAgICBnZXRSZXF1ZXN0KGhvc3QsIHBhdGgsIGhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEh0dHBSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBob3N0SGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAvLyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgICAgIHBvcnQ6IDQ0MyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBob3N0SGVhZGVyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXMub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgKz0gZGF0YVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXMub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzQ29kZSA9PSAyMDAgfHwgcmVzLnN0YXR1c0NvZGUgPT0gMjA0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlRGF0YS50b1N0cmluZygpID09PSAnJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgSHR0cFJlc3BvbnNlKHt9LCByZXMuaGVhZGVycykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IEh0dHBSZXNwb25zZShKU09OLnBhcnNlKHJlc3BvbnNlRGF0YS50b1N0cmluZygpKSwgcmVzLmhlYWRlcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJytob3N0K3BhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJlcS5lbmQoKVxuXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcG9zdFJlcXVlc3QoaG9zdCwgcGF0aCwgaGVhZGVycywgZGF0YSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SHR0cFJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGhvc3RIZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgIC8vICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgICAgIHBvcnQ6IDQ0MyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBob3N0SGVhZGVyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvcHRpb25zLCBkYXRhKVxuXG4gICAgICAgICAgICBjb25zdCByZXEgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhID0gJydcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXMub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgKz0gZGF0YVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXMub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzQ29kZSA9PSAyMDAgfHwgcmVzLnN0YXR1c0NvZGUgPT0gMjAyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlRGF0YS50b1N0cmluZygpID09PSAnJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgSHR0cFJlc3BvbnNlKHt9LCByZXMuaGVhZGVycykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IEh0dHBSZXNwb25zZShKU09OLnBhcnNlKHJlc3BvbnNlRGF0YS50b1N0cmluZygpKSwgcmVzLmhlYWRlcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNjb2RlOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZURhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZmV0Y2hpbmcgJytob3N0K3BhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJlcS53cml0ZShkYXRhKVxuICAgICAgICAgICAgcmVxLmVuZCgpXG5cbiAgICAgICAgfSlcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEh0dHBSZXNwb25zZSB7XG5cbiAgICBkYXRhOmFueVxuICAgIGhlYWRlcnM6SW5jb21pbmdIdHRwSGVhZGVyc1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTphbnksIGhlYWRlcnM6SW5jb21pbmdIdHRwSGVhZGVycyl7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICAgIH1cblxuICAgIGhlYWRlcigpe1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXJzXG4gICAgfVxuXG4gICAgYm9keSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuIHtcbiAgICBkYXRhOmFueVxuXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgY2FsY3VsYXRlU2Vjb25kc0xlZnQoZGF0ZTpEYXRlKXtcbiAgICAgICAgY29uc3QgZXhwaXJlc09uID0gZGF0ZVxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKGV4cGlyZXNPbi5nZXRUaW1lKCkgLSBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpIC8gMTAwMClcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgY29uc29sZS5sb2coJ1dhcm5pbmc6IGdldFNlY29uZHNWYWxpZCBub3QgaW1wbGVtZW50ZWQnKVxuXG4gICAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpeyBcbiAgICAgICAgY29uc29sZS5sb2coJ1dhcm5pbmc6IGlzVmFsaWQgbm90IGltcGxlbWVudGVkJylcblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBnZXRVc2VySGFzaCgpe1xuICAgICAgICBpZignVXNlclRva2VuJyBpbiB0aGlzLmRhdGEpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5Vc2VyVG9rZW4uRGlzcGxheUNsYWltcy54dWlbMF0udWhzXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBnZXRHYW1lcnRhZygpe1xuICAgICAgICBpZignQXV0aG9yaXphdGlvblRva2VuJyBpbiB0aGlzLmRhdGEpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5BdXRob3JpemF0aW9uVG9rZW4uRGlzcGxheUNsYWltcy54dWlbMF0uZ3RnXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElEZXZpY2VDb2RlIHtcbiAgICBJc3N1ZUluc3RhbnQ6IHN0cmluZ1xuICAgIE5vdEFmdGVyOiBzdHJpbmdcbiAgICBUb2tlbjogc3RyaW5nXG4gICAgRGlzcGxheUNsYWltczoge1xuICAgICAgICB4dWk6IHtcbiAgICAgICAgICAgIHVoczogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERldmljZVRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SURldmljZUNvZGVcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6SURldmljZUNvZGUpIHtcbiAgICAgICAgc3VwZXIoZGF0YSlcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuTm90QWZ0ZXIpKVxuICAgIH1cblxuICAgIGlzVmFsaWQoKXtcblxuICAgICAgICBpZih0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Ob3RBZnRlcikpIDw9IDApe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbn0iLCJpbXBvcnQgVG9rZW4gZnJvbSAnLi4vdG9rZW4nXG5pbXBvcnQgVXNlclRva2VuIGZyb20gJy4vdXNlcnRva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElNc2FsVG9rZW4ge1xuICAgIGxwdDogc3RyaW5nXG4gICAgcmVmcmVzaF90b2tlbjogc3RyaW5nXG4gICAgdXNlcl9pZDogc3RyaW5nXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1zYWxUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgICBkYXRhOklNc2FsVG9rZW5cblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6SU1zYWxUb2tlbikge1xuICAgICAgICBzdXBlcihkYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcblxuZXhwb3J0IGludGVyZmFjZSBJU2lzdVRva2VuIHtcbiAgICBEZXZpY2VUb2tlbjogc3RyaW5nXG4gICAgVGl0bGVUb2tlbjogSVNpc3VUaXRsZVRva2VuXG4gICAgVXNlclRva2VuOiBJU2lzdVVzZXJUb2tlblxuICAgIEF1dGhvcml6YXRpb25Ub2tlblxuICAgIFdlYlBhZ2U6IHN0cmluZ1xuICAgIFNhbmRib3g6IHN0cmluZ1xuICAgIFVzZU1vZGVybkdhbWVydGFnOiBib29sZWFuXG4gICAgRmxvdzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBJU2lzdVVzZXJUb2tlbiB7XG4gICAgSXNzdWVJbnN0YW50OiBzdHJpbmdcbiAgICBOb3RBZnRlcjogc3RyaW5nXG4gICAgVG9rZW46IHN0cmluZ1xuICAgIERpc3BsYXlDbGFpbXM6IHtcbiAgICAgICAgeHVpOiB7XG4gICAgICAgICAgICB1aHM6IHN0cmluZ1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgSVNpc3VUaXRsZVRva2VuIHtcbiAgICBJc3N1ZUluc3RhbnQ6IHN0cmluZ1xuICAgIE5vdEFmdGVyOiBzdHJpbmdcbiAgICBUb2tlbjogc3RyaW5nXG4gICAgRGlzcGxheUNsYWltczoge1xuICAgICAgICB4dGk6IHtcbiAgICAgICAgICAgIHRpZDogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpc3VUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgICBkYXRhOklTaXN1VG9rZW5cblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6SVNpc3VUb2tlbikge1xuICAgICAgICBzdXBlcihkYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0VGl0bGUgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5UaXRsZVRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRVc2VyID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuVXNlclRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRBdXRob3JpemF0aW9uID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuQXV0aG9yaXphdGlvblRva2VuLk5vdEFmdGVyKSlcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHNlY29uZHNMZWZ0VGl0bGUsIHNlY29uZHNMZWZ0VXNlciwgc2Vjb25kc0xlZnRBdXRob3JpemF0aW9uKVxuICAgIH1cblxuICAgIGlzVmFsaWQoKXtcbiAgICAgICAgY29uc3Qgc2Vjb25kc0xlZnRUaXRsZSA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLlRpdGxlVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICBpZihzZWNvbmRzTGVmdFRpdGxlIDw9IDApe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdFVzZXIgPSB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Vc2VyVG9rZW4uTm90QWZ0ZXIpKVxuICAgICAgICBpZihzZWNvbmRzTGVmdFVzZXIgPD0gMCl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0QXV0aG9yaXphdGlvbiA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLkF1dGhvcml6YXRpb25Ub2tlbi5Ob3RBZnRlcikpXG4gICAgICAgIGlmKHNlY29uZHNMZWZ0QXV0aG9yaXphdGlvbiA8PSAwKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBnZXRVc2VySGFzaCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLlVzZXJUb2tlbi5EaXNwbGF5Q2xhaW1zLnh1aVswXS51aHNcbiAgICB9XG5cbiAgICBnZXRHYW1lcnRhZygpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLkF1dGhvcml6YXRpb25Ub2tlbi5EaXNwbGF5Q2xhaW1zLnh1aVswXS5ndGdcbiAgICB9XG59IiwiaW1wb3J0IFRva2VuIGZyb20gJy4uL3Rva2VuJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW1Ub2tlbiB7XG4gICAgb2ZmZXJpbmdTZXR0aW5nczogSU9mZmVyaW5nU2V0dGluZ3NcbiAgICBtYXJrZXQ6IHN0cmluZ1xuICAgIGdzVG9rZW46IHN0cmluZ1xuICAgIHRva2VuVHlwZTogc3RyaW5nXG4gICAgZHVyYXRpb25JblNlY29uZHM6IG51bWJlclxufVxuICBcbmV4cG9ydCBpbnRlcmZhY2UgSU9mZmVyaW5nU2V0dGluZ3Mge1xuICAgIGFsbG93UmVnaW9uU2VsZWN0aW9uOiBib29sZWFuXG4gICAgcmVnaW9uczogSVJlZ2lvbltdXG4gICAgc2VsZWN0YWJsZVNlcnZlclR5cGVzOiBhbnlcbiAgICBjbGllbnRDbG91ZFNldHRpbmdzOiBJQ2xpZW50Q2xvdWRTZXR0aW5nc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpb24ge1xuICAgIG5hbWU6IHN0cmluZ1xuICAgIGJhc2VVcmk6IHN0cmluZ1xuICAgIG5ldHdvcmtUZXN0SG9zdG5hbWU6IHN0cmluZ1xuICAgIGlzRGVmYXVsdDogYm9vbGVhblxuICAgIHN5c3RlbVVwZGF0ZUdyb3VwczogYW55XG4gICAgZmFsbGJhY2tQcmlvcml0eTogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsaWVudENsb3VkU2V0dGluZ3Mge1xuICAgIEVudmlyb25tZW50czogSUVudmlyb25tZW50W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRW52aXJvbm1lbnQge1xuICAgIE5hbWU6IHN0cmluZ1xuICAgIEF1dGhCYXNlVXJpPzogc3RyaW5nXG59ICBcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtaW5nVG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG5cbiAgICBwdWJsaWMgZGF0YTpJU3RyZWFtVG9rZW5cbiAgICBwcml2YXRlIF9vYmplY3RDcmVhdGVUaW1lID0gRGF0ZS5ub3coKVxuXG4gICAgY29uc3RydWN0b3IodG9rZW5EYXRhOklTdHJlYW1Ub2tlbil7XG4gICAgICAgIHN1cGVyKHRva2VuRGF0YSlcbiAgICAgICAgdGhpcy5kYXRhID0gdG9rZW5EYXRhXG4gICAgfVxuXG4gICAgY2FsY3VsYXRlU2Vjb25kc0xlZnQoZGF0ZTpEYXRlKXtcbiAgICAgICAgY29uc3QgZXhwaXJlc09uID0gZGF0ZVxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKGV4cGlyZXNPbi5nZXRUaW1lKCkgLSBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpIC8gMTAwMClcbiAgICB9XG5cbiAgICBnZXRTZWNvbmRzVmFsaWQoKXtcbiAgICAgICAgaWYodGhpcy5fb2JqZWN0Q3JlYXRlVGltZSArICh0aGlzLmRhdGEuZHVyYXRpb25JblNlY29uZHMqMTAwMCkpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5fb2JqZWN0Q3JlYXRlVGltZSArICh0aGlzLmRhdGEuZHVyYXRpb25JblNlY29uZHMqMTAwMCkpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCl7XG4gICAgICAgIGlmKHRoaXMuX29iamVjdENyZWF0ZVRpbWUgKyAodGhpcy5kYXRhLmR1cmF0aW9uSW5TZWNvbmRzKjEwMDApKXtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHNMZWZ0ID0gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLl9vYmplY3RDcmVhdGVUaW1lICsgKHRoaXMuZGF0YS5kdXJhdGlvbkluU2Vjb25kcyoxMDAwKSkpXG4gICAgICAgICAgICByZXR1cm4gc2Vjb25kc0xlZnQgPiAwXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBnZXRNYXJrZXQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tYXJrZXRcbiAgICB9XG5cbiAgICBnZXRSZWdpb25zKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEub2ZmZXJpbmdTZXR0aW5ncy5yZWdpb25zXG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFJlZ2lvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm9mZmVyaW5nU2V0dGluZ3MucmVnaW9ucy5maWx0ZXIocmVnaW9uID0+IHJlZ2lvbi5pc0RlZmF1bHQpWzBdXG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdFJlZ2lvbihuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kYXRhLm9mZmVyaW5nU2V0dGluZ3MucmVnaW9ucy5mb3JFYWNoKHJlZ2lvbiA9PiB7XG4gICAgICAgICAgICBpZiAocmVnaW9uLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZWdpb24uaXNEZWZhdWx0ID0gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWdpb24uaXNEZWZhdWx0ID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRFbnZpcm9ubWVudHMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5vZmZlcmluZ1NldHRpbmdzLmNsaWVudENsb3VkU2V0dGluZ3MuRW52aXJvbm1lbnRzXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcblxuZXhwb3J0IGludGVyZmFjZSBJVXNlclRva2VuIHtcbiAgICB0b2tlbl90eXBlOiBzdHJpbmdcbiAgICBleHBpcmVzX2luOiBudW1iZXJcbiAgICBzY29wZTogc3RyaW5nXG4gICAgYWNjZXNzX3Rva2VuOiBzdHJpbmdcbiAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmdcbiAgICB1c2VyX2lkOiBzdHJpbmdcbiAgICBleHBpcmVzX29uOiBzdHJpbmdcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXNlclRva2VuIGV4dGVuZHMgVG9rZW4ge1xuICAgIGRhdGE6SVVzZXJUb2tlblxuXG4gICAgY29uc3RydWN0b3IoZGF0YTpJVXNlclRva2VuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVTZWNvbmRzTGVmdChkYXRlOkRhdGUpe1xuICAgICAgICBjb25zdCBleHBpcmVzT24gPSBkYXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoZXhwaXJlc09uLmdldFRpbWUoKSAtIGN1cnJlbnREYXRlLmdldFRpbWUoKSkgLyAxMDAwKVxuICAgIH1cblxuICAgIGdldFNlY29uZHNWYWxpZCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVTZWNvbmRzTGVmdChuZXcgRGF0ZSh0aGlzLmRhdGEuZXhwaXJlc19vbikpXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpe1xuICAgICAgICBjb25zdCBzZWNvbmRzTGVmdCA9IHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLmV4cGlyZXNfb24pKVxuICAgICAgICByZXR1cm4gc2Vjb25kc0xlZnQgPiAwXG4gICAgfVxufSIsImltcG9ydCBUb2tlbiBmcm9tICcuLi90b2tlbidcblxuZXhwb3J0IGludGVyZmFjZSBJWHN0c1Rva2VuIHtcbiAgICBJc3N1ZUluc3RhbnQ6IHN0cmluZ1xuICAgIE5vdEFmdGVyOiBzdHJpbmdcbiAgICBUb2tlbjogc3RyaW5nXG4gICAgRGlzcGxheUNsYWltczoge1xuICAgICAgICB4dWk6IHtcbiAgICAgICAgICAgIHVoczogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFhzdHNUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgICBkYXRhOklYc3RzVG9rZW5cblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6SVhzdHNUb2tlbikge1xuICAgICAgICBzdXBlcihkYXRhKVxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgZ2V0U2Vjb25kc1ZhbGlkKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZVNlY29uZHNMZWZ0KG5ldyBEYXRlKHRoaXMuZGF0YS5Ob3RBZnRlcikpXG4gICAgfVxuXG4gICAgaXNWYWxpZCgpe1xuXG4gICAgICAgIGlmKHRoaXMuY2FsY3VsYXRlU2Vjb25kc0xlZnQobmV3IERhdGUodGhpcy5kYXRhLk5vdEFmdGVyKSkgPD0gMCl7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufSIsImltcG9ydCBTaXN1VG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL3Npc3V0b2tlbidcbmltcG9ydCBVc2VyVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL3VzZXJ0b2tlbidcbmltcG9ydCBmcyBmcm9tICdmcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5TdG9yZSB7XG5cbiAgICBfZmlsZXBhdGg6c3RyaW5nID0gJydcblxuICAgIC8vIE1haW4gdG9rZW5zXG4gICAgX3VzZXJUb2tlbjpVc2VyVG9rZW4gfCB1bmRlZmluZWRcbiAgICBfc2lzdVRva2VuOlNpc3VUb2tlbiB8IHVuZGVmaW5lZFxuICAgIF9qd3RLZXlzOmFueVxuXG4gICAgLy8gU3ViLVRva2Vuc1xuICAgIGxvYWQoZmlsZXBhdGg6c3RyaW5nLCBzaWxlbnQgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9maWxlcGF0aCA9IGZpbGVwYXRoXG5cbiAgICAgICAgaWYoZnMuZXhpc3RzU3luYyhmaWxlcGF0aCkpe1xuICAgICAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gZnMucmVhZEZpbGVTeW5jKGZpbGVwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEpzb24oZmlsZUNvbnRlbnRzLnRvU3RyaW5nKCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZighIHNpbGVudCl7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlblN0b3JlOiBGaWxlIG5vdCBmb3VuZDogJyArIGZpbGVwYXRoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgbG9hZEpzb24oanNvbjpzdHJpbmcpIHtcbiAgICAgICAgY29uc3QganNvbkRhdGE6eyB1c2VyVG9rZW46YW55LCBzaXN1VG9rZW46YW55LCBqd3RLZXlzOmFueSB9ID0gSlNPTi5wYXJzZShqc29uKVxuXG4gICAgICAgIGlmKGpzb25EYXRhLnVzZXJUb2tlbil7XG4gICAgICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSBuZXcgVXNlclRva2VuKGpzb25EYXRhLnVzZXJUb2tlbilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGpzb25EYXRhLnNpc3VUb2tlbil7XG4gICAgICAgICAgICB0aGlzLl9zaXN1VG9rZW4gPSBuZXcgU2lzdVRva2VuKGpzb25EYXRhLnNpc3VUb2tlbilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGpzb25EYXRhLmp3dEtleXMpe1xuICAgICAgICAgICAgdGhpcy5fand0S2V5cyA9IGpzb25EYXRhLmp3dEtleXNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgc2V0VXNlclRva2VuKHVzZXJUb2tlbjpVc2VyVG9rZW4pIHtcbiAgICAgICAgY29uc3QgZXhwaXJlRGF0ZSA9IG5ldyBEYXRlKClcbiAgICAgICAgZXhwaXJlRGF0ZS5zZXRTZWNvbmRzKGV4cGlyZURhdGUuZ2V0U2Vjb25kcygpICsgdXNlclRva2VuLmRhdGEuZXhwaXJlc19pbilcblxuICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSBuZXcgVXNlclRva2VuKHsgLi4udXNlclRva2VuLmRhdGEsIGV4cGlyZXNfb246IGV4cGlyZURhdGUudG9JU09TdHJpbmcoKSB9KVxuICAgIH1cblxuICAgIGdldFVzZXJUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJUb2tlblxuICAgIH1cblxuICAgIHNldFNpc3VUb2tlbihzaXN1VG9rZW46U2lzdVRva2VuKSB7XG4gICAgICAgIHRoaXMuX3Npc3VUb2tlbiA9IG5ldyBTaXN1VG9rZW4oc2lzdVRva2VuLmRhdGEpXG4gICAgfVxuXG4gICAgZ2V0U2lzdVRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lzdVRva2VuXG4gICAgfVxuXG4gICAgc2V0Snd0S2V5cyhqd3RLZXlzOmFueSkge1xuICAgICAgICB0aGlzLl9qd3RLZXlzID0gand0S2V5c1xuICAgIH1cblxuICAgIHNhdmUoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICB1c2VyVG9rZW46IHRoaXMuX3VzZXJUb2tlbj8uZGF0YSxcbiAgICAgICAgICAgIHNpc3VUb2tlbjogdGhpcy5fc2lzdVRva2VuPy5kYXRhLFxuICAgICAgICAgICAgand0S2V5czogdGhpcy5fand0S2V5c1xuICAgICAgICB9XG5cbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLl9maWxlcGF0aCwgSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikpXG4gICAgfVxuXG4gICAgcmVtb3ZlQWxsKCkge1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuX2ZpbGVwYXRoLCBKU09OLnN0cmluZ2lmeSh7fSkpXG4gICAgfVxuXG4gICAgaGFzVmFsaWRBdXRoVG9rZW5zKCkge1xuICAgICAgICBpZih0aGlzLl91c2VyVG9rZW4pe1xuICAgICAgICAgICAgaWYoISB0aGlzLl91c2VyVG9rZW4uaXNWYWxpZCgpKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5fc2lzdVRva2VuKXtcbiAgICAgICAgICAgIGlmKCEgdGhpcy5fdXNlclRva2VuLmlzVmFsaWQoKSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufSIsImltcG9ydCBIdHRwIGZyb20gJy4vbGliL2h0dHAnXG5pbXBvcnQgY3J5cHRvLCB7IHN1YnRsZSwgS2V5T2JqZWN0IH0gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgZXhwb3J0SldLIH0gZnJvbSAnam9zZSdcblxuaW1wb3J0IERldmljZVRva2VuIGZyb20gJy4vbGliL3Rva2Vucy9kZXZpY2V0b2tlbidcbmltcG9ydCBTaXN1VG9rZW4sIHsgSVNpc3VUb2tlbiB9IGZyb20gJy4vbGliL3Rva2Vucy9zaXN1dG9rZW4nXG5pbXBvcnQgVXNlclRva2VuLCB7IElVc2VyVG9rZW4gfSBmcm9tICcuL2xpYi90b2tlbnMvdXNlcnRva2VuJ1xuaW1wb3J0IFN0cmVhbWluZ1Rva2VuIGZyb20gJy4vbGliL3Rva2Vucy9zdHJlYW1pbmd0b2tlbidcbmltcG9ydCBYc3RzVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL3hzdHN0b2tlbidcbmltcG9ydCBNc2FsVG9rZW4gZnJvbSAnLi9saWIvdG9rZW5zL21zYWx0b2tlbidcblxuaW1wb3J0IFRva2VuU3RvcmUgZnJvbSAnLi90b2tlbnN0b3JlJ1xuXG5jb25zdCBVVUlEID0gcmVxdWlyZSgndXVpZC0xMzQ1JylcbmNvbnN0IG5leHRVVUlEID0gKCkgPT4gVVVJRC52Myh7IG5hbWVzcGFjZTogJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCcsIG5hbWU6IERhdGUubm93KCkudG9TdHJpbmcoKSB9KVxuXG5pbnRlcmZhY2UgSUNvZGVDaGFsbGFuZ2Uge1xuICAgIHZhbHVlOiBzdHJpbmdcbiAgICBtZXRob2Q6IHN0cmluZ1xuICAgIHZlcmlmaWVyOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIElTaXN1QXV0aGVudGljYXRpb25SZXNwb25zZSB7XG4gICAgTXNhT2F1dGhSZWRpcmVjdDogc3RyaW5nXG4gICAgTXNhUmVxdWVzdFBhcmFtZXRlcnM6IHt9XG4gICAgU2Vzc2lvbklkOiBzdHJpbmdcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWGFsIHtcblxuICAgIGtleXNcbiAgICBqd3RLZXlzXG5cbiAgICBfYXBwID0ge1xuICAgICAgICBBcHBJZDogJzAwMDAwMDAwNGMyMGE5MDgnLCAvLycwMDAwMDAwMDRjMTJhZTZmJywgLy8gMDAwMDAwMDA0ODE4MzUyMiA9IHdvcmtpbmcsIGJ1dCBtaW5lY3JhZnQgLS08PDwgMDAwMDAwMDA0YzEyYWU2ZiB3b3JrcywgeGJveCBhcHBcbiAgICAgICAgVGl0bGVJZDogJzMyODE3ODA3OCcsIC8vJzMyODE3ODA3OCcsIC8vIDEwMTY4OTg0MzkgPSB3b3JraW5nXG4gICAgICAgIFJlZGlyZWN0VXJpOiAnbXMteGFsLTAwMDAwMDAwNGMyMGE5MDg6Ly9hdXRoJ1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHRva2VuU3RvcmU/OlRva2VuU3RvcmUpe1xuICAgICAgICBpZih0b2tlblN0b3JlICYmIHRva2VuU3RvcmUuX2p3dEtleXMpe1xuICAgICAgICAgICAgdGhpcy5zZXRLZXlzKHRva2VuU3RvcmUuX2p3dEtleXMuand0KS50aGVuKChrZXlzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0tleXMgbG9hZGVkOicsIGtleXMpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGxvYWQga2V5czonLCBlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHNldEtleXMob3JnSnd0S2V5KXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHN1YnRsZS5pbXBvcnRLZXkoJ2p3aycsIG9yZ0p3dEtleSwgeyBuYW1lOiAnRUNEU0EnLCBuYW1lZEN1cnZlOiAnUC0yNTYnIH0sIHRydWUsIFsnc2lnbiddKS50aGVuKGp3dEtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IEtleU9iamVjdC5mcm9tKGp3dEtleSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmp3dEtleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJhdzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZUtleTogcHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IG9yZ0p3dEtleVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5qd3RLZXlzKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygna2V5IGVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEtleXMoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuand0S2V5cyAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuand0S2V5cylcblxuICAgICAgICAgICAgfSBlbHNlIGlmKHRoaXMua2V5cyA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICB0aGlzLmtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYygnZWMnLCB7IG5hbWVkQ3VydmU6ICdQLTI1NicgfSlcblxuICAgICAgICAgICAgICAgIHRoaXMuand0S2V5cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmF3OiB0aGlzLmtleXNcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBleHBvcnRKV0sodGhpcy5rZXlzLnB1YmxpY0tleSkudGhlbihqd2sgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqd2tLZXkgPSB7IC4uLmp3aywgYWxnOiAnRVMyNTYnLCB1c2U6ICdzaWcnIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5qd3RLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiB0aGlzLmtleXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBqd3Q6IGp3a0tleVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgandrS2V5cyA9IHRoaXMuand0S2V5cy5yYXcucHJpdmF0ZUtleS5leHBvcnQoeyB0eXBlOiAncGtjczgnLCBmb3JtYXQ6ICdqd2snIH0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0S2V5cyhqd2tLZXlzKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShrZXlzKVxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5qd3RLZXlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNvZGVDaGFsbGFuZ2VcblxuICAgIGdldENvZGVDaGFsbGFuZ2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJQ29kZUNoYWxsYW5nZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5jb2RlQ2hhbGxhbmdlID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVfdmVyaWZpZXIgPSBCdWZmZXIuZnJvbShjcnlwdG8ucHNldWRvUmFuZG9tQnl0ZXMoMzIpKS50b1N0cmluZygnYmFzZTY0dXJsJylcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVfY2hhbGxlbmdlID0gY3J5cHRvXG4gICAgICAgICAgICAgICAgICAgIC5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgICAgICAgICAgICAgICAgIC51cGRhdGUoY29kZV92ZXJpZmllcilcbiAgICAgICAgICAgICAgICAgICAgLmRpZ2VzdCgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jb2RlQ2hhbGxhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29kZV9jaGFsbGVuZ2UudG9TdHJpbmcoJ2Jhc2U2NHVybCcpLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdTMjU2JyxcbiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZXI6IGNvZGVfdmVyaWZpZXIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuY29kZUNoYWxsYW5nZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRSYW5kb21TdGF0ZShieXRlcyA9IDY0KSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoYnl0ZXMpLnRvU3RyaW5nKCdiYXNlNjR1cmwnKVxuICAgIH1cblxuICAgIGdldERldmljZVRva2VuSGFjaygpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldERldmljZVRva2VuSGFjay4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxEZXZpY2VUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXREZXZpY2VUb2tlbigpLnRoZW4oZGV2aWNlVG9rZW4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXREZXZpY2VUb2tlbiBzdWNjZXNzOicsIGRldmljZVRva2VuKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoZGV2aWNlVG9rZW4pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzY29kZSA9PSA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RldmljZSB0b2tlbiBnZXQgZXJyb3IsIHJldHJ5Li4uJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGV2aWNlVG9rZW5IYWNrKCkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0RGV2aWNlVG9rZW4oKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXREZXZpY2VUb2tlbi4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxEZXZpY2VUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRLZXlzKCkudGhlbigoand0S2V5czphbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBdXRoTWV0aG9kOiAnUHJvb2ZPZlBvc3Nlc3Npb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgSWQ6IGB7JHtuZXh0VVVJRCgpfX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlVHlwZTogJ0FuZHJvaWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsTnVtYmVyOiBgeyR7bmV4dFVVSUQoKX19YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb246ICcxNS4wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb29mS2V5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSc6ICdzaWcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGcnOiAnRVMyNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrdHknOiAnRUMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcnYnOiAnUC0yNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4Jzogand0S2V5cy5qd3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAneSc6IGp3dEtleXMuand0LnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVseWluZ1BhcnR5OiAnaHR0cDovL2F1dGgueGJveGxpdmUuY29tJyxcbiAgICAgICAgICAgICAgICAgICAgVG9rZW5UeXBlOiAnSldUJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuc2lnbignaHR0cHM6Ly9kZXZpY2UuYXV0aC54Ym94bGl2ZS5jb20vZGV2aWNlL2F1dGhlbnRpY2F0ZScsICcnLCBib2R5LCBqd3RLZXlzKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0geyAuLi57XG4gICAgICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZSdcbiAgICAgICAgICAgICAgICB9LCBTaWduYXR1cmU6IHNpZ25hdHVyZSB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ2RldmljZS5hdXRoLnhib3hsaXZlLmNvbScsICcvZGV2aWNlL2F1dGhlbnRpY2F0ZScsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IERldmljZVRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRvU2lzdUF1dGhlbnRpY2F0aW9uKGRldmljZVRva2VuOkRldmljZVRva2VuLCBjb2RlQ2hhbGxhbmdlOklDb2RlQ2hhbGxhbmdlLCBzdGF0ZSl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0S2V5cygpLnRoZW4oKGp3dEtleXM6YW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBBcHBJZDogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICAgICBUaXRsZUlkOiB0aGlzLl9hcHAuVGl0bGVJZCxcbiAgICAgICAgICAgICAgICAgICAgUmVkaXJlY3RVcmk6IHRoaXMuX2FwcC5SZWRpcmVjdFVyaSxcbiAgICAgICAgICAgICAgICAgICAgRGV2aWNlVG9rZW46IGRldmljZVRva2VuLmRhdGEuVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIFNhbmRib3g6IFwiUkVUQUlMXCIsXG4gICAgICAgICAgICAgICAgICAgIFRva2VuVHlwZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgIE9mZmVyczogW1wic2VydmljZTo6dXNlci5hdXRoLnhib3hsaXZlLmNvbTo6TUJJX1NTTFwiXSxcbiAgICAgICAgICAgICAgICAgICAgUXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdhbmRyb2lkX3Bob25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlOiBjb2RlQ2hhbGxhbmdlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2VfbWV0aG9kOiBjb2RlQ2hhbGxhbmdlLm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oJ2h0dHBzOi8vc2lzdS54Ym94bGl2ZS5jb20vYXV0aGVudGljYXRlJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLntcbiAgICAgICAgICAgICAgICAgICAgJ3gteGJsLWNvbnRyYWN0LXZlcnNpb24nOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICB9LCBTaWduYXR1cmU6IHNpZ25hdHVyZSB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ3Npc3UueGJveGxpdmUuY29tJywgJy9hdXRoZW50aWNhdGUnLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgU2Vzc2lvbklkIHRvIHJlc3BvbnNlIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNCb2R5ID0geyBTZXNzaW9uSWQ6IHJlc3BvbnNlLmhlYWRlcnNbJ3gtc2Vzc2lvbmlkJ10sIC4uLnJlc3BvbnNlLmJvZHkoKSB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKCByZXNCb2R5IGFzIElTaXN1QXV0aGVudGljYXRpb25SZXNwb25zZSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRvU2lzdUF1dGhvcml6YXRpb24odXNlclRva2VuOlVzZXJUb2tlbiwgZGV2aWNlVG9rZW46RGV2aWNlVG9rZW4sIFNlc3Npb25JZD86c3RyaW5nKXtcbiAgICAgICAgY29uc29sZS5sb2coJ2RvU2lzdUF1dGhvcml6YXRpb24uLi4nKVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8U2lzdVRva2VuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEtleXMoKS50aGVuKChqd3RLZXlzOmFueSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgQWNjZXNzVG9rZW46ICd0PScrdXNlclRva2VuLmRhdGEuYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICBBcHBJZDogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICAgICBEZXZpY2VUb2tlbjogZGV2aWNlVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgICAgICAgICAgICAgICAgU2FuZGJveDogXCJSRVRBSUxcIixcbiAgICAgICAgICAgICAgICAgICAgU2l0ZU5hbWU6IFwidXNlci5hdXRoLnhib3hsaXZlLmNvbVwiLFxuICAgICAgICAgICAgICAgICAgICBVc2VNb2Rlcm5HYW1lcnRhZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgUHJvb2ZLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2UnOiAnc2lnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbGcnOiAnRVMyNTYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2t0eSc6ICdFQycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY3J2JzogJ1AtMjU2JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd4Jzogand0S2V5cy5qd3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICd5Jzogand0S2V5cy5qd3QueVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAuLi5TZXNzaW9uSWQgPyB7IFNlc3Npb25JZDogU2Vzc2lvbklkIH0gOiB7fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oJ2h0dHBzOi8vc2lzdS54Ym94bGl2ZS5jb20vYXV0aG9yaXplJywgJycsIGJvZHksIGp3dEtleXMpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCdzaXN1Lnhib3hsaXZlLmNvbScsICcvYXV0aG9yaXplJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU2lzdVRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGV4Y2hhbmdlQ29kZUZvclRva2VuKGNvZGU6c3RyaW5nLCBjb2RlVmVyaWZpZXI6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFVzZXJUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAnY2xpZW50X2lkJzogdGhpcy5fYXBwLkFwcElkLFxuICAgICAgICAgICAgICAgICdjb2RlJzogY29kZSxcbiAgICAgICAgICAgICAgICAnY29kZV92ZXJpZmllcic6IGNvZGVWZXJpZmllcixcbiAgICAgICAgICAgICAgICAnZ3JhbnRfdHlwZSc6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICAgICAgICAgICdyZWRpcmVjdF91cmknOiB0aGlzLl9hcHAuUmVkaXJlY3RVcmksXG4gICAgICAgICAgICAgICAgJ3Njb3BlJzogJ3NlcnZpY2U6OnVzZXIuYXV0aC54Ym94bGl2ZS5jb206Ok1CSV9TU0wnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBheWxvYWQpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnbG9naW4ubGl2ZS5jb20nLCAnL29hdXRoMjBfdG9rZW4uc3JmJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVc2VyVG9rZW4ocmVzcG9uc2UuYm9keSgpKSlcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZWZyZXNoVXNlclRva2VuKHVzZXJUb2tlbjpVc2VyVG9rZW4pe1xuICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaFVzZXJUb2tlbi4uLicpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxVc2VyVG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgJ2NsaWVudF9pZCc6IHRoaXMuX2FwcC5BcHBJZCxcbiAgICAgICAgICAgICAgICAnZ3JhbnRfdHlwZSc6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICAgICAgICAncmVmcmVzaF90b2tlbic6IHVzZXJUb2tlbi5kYXRhLnJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgICAgICAgJ3Njb3BlJzogJ3NlcnZpY2U6OnVzZXIuYXV0aC54Ym94bGl2ZS5jb206Ok1CSV9TU0wnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBheWxvYWQpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUsIG5vLWNhY2hlJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHAoKVxuICAgICAgICAgICAgSHR0cENsaWVudC5wb3N0UmVxdWVzdCgnbG9naW4ubGl2ZS5jb20nLCAnL29hdXRoMjBfdG9rZW4uc3JmJywgaGVhZGVycywgYm9keSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaFVzZXJUb2tlbiBzdWNjZXNzOiAnLCByZXNwb25zZS5ib2R5KCkpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgVXNlclRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVmcmVzaFVzZXJUb2tlbiBmYWlsOicsIGVycm9yKVxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW46U2lzdVRva2VuLCByZWx5aW5nUGFydHk6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPFhzdHNUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRLZXlzKCkudGhlbigoand0S2V5czphbnkpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFNhbmRib3hJZDogJ1JFVEFJTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VUb2tlbjogc2lzdVRva2VuLmRhdGEuRGV2aWNlVG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBUaXRsZVRva2VuOiBzaXN1VG9rZW4uZGF0YS5UaXRsZVRva2VuLlRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlclRva2VuczogW3Npc3VUb2tlbi5kYXRhLlVzZXJUb2tlbi5Ub2tlbl1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVseWluZ1BhcnR5OiByZWx5aW5nUGFydHksXG4gICAgICAgICAgICAgICAgICAgIFRva2VuVHlwZTogJ0pXVCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oJ2h0dHBzOi8veHN0cy5hdXRoLnhib3hsaXZlLmNvbS94c3RzL2F1dGhvcml6ZScsICcnLCBib2R5LCBqd3RLZXlzKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0geyAuLi57XG4gICAgICAgICAgICAgICAgICAgICd4LXhibC1jb250cmFjdC12ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICAgICAgfSwgU2lnbmF0dXJlOiBzaWduYXR1cmUgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgICAgICBIdHRwQ2xpZW50LnBvc3RSZXF1ZXN0KCd4c3RzLmF1dGgueGJveGxpdmUuY29tJywgJy94c3RzL2F1dGhvcml6ZScsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFhzdHNUb2tlbihyZXNwb25zZS5ib2R5KCkpKVxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBleGNoYW5nZVJlZnJlc2hUb2tlbkZvclhjbG91ZFRyYW5zZmVyVG9rZW4odXNlclRva2VuOlVzZXJUb2tlbil7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxNc2FsVG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLl9hcHAuQXBwSWQsXG4gICAgICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAgICAgICAgIHNjb3BlOiAnc2VydmljZTo6aHR0cDovL1Bhc3Nwb3J0Lk5FVC9wdXJwb3NlOjpQVVJQT1NFX1hCT1hfQ0xPVURfQ09OU09MRV9UUkFOU0ZFUl9UT0tFTicsXG4gICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdXNlclRva2VuLmRhdGEucmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgICAgICBjb2RlOiAnJyxcbiAgICAgICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiAnJyxcbiAgICAgICAgICAgICAgICByZWRpcmVjdF91cmk6ICcnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXlsb2FkKS50b1N0cmluZygpXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3QoJ2xvZ2luLmxpdmUuY29tJywgJy9vYXV0aDIwX3Rva2VuLnNyZicsIGhlYWRlcnMsIGJvZHkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgTXNhbFRva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuOlhzdHNUb2tlbiwgb2ZmZXJpbmc6c3RyaW5nLCBmb3JjZVJlZ2lvbklwOiBzdHJpbmcgPSAnJyl7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxTdHJlYW1pbmdUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAndG9rZW4nOiB4c3RzVG9rZW4uZGF0YS5Ub2tlbixcbiAgICAgICAgICAgICAgICAnb2ZmZXJpbmdJZCc6IG9mZmVyaW5nLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlLCBuby1jYWNoZScsXG4gICAgICAgICAgICAgICAgJ3gtZ3Nzdi1jbGllbnQnOiAnWGJveENvbUJyb3dzZXInLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9yY2VSZWdpb25JcC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10gPSBmb3JjZVJlZ2lvbklwXG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgY29uc3QgSHR0cENsaWVudCA9IG5ldyBIdHRwKClcbiAgICAgICAgICAgIEh0dHBDbGllbnQucG9zdFJlcXVlc3Qob2ZmZXJpbmcrJy5nc3N2LXBsYXktcHJvZC54Ym94bGl2ZS5jb20nLCAnL3YyL2xvZ2luL3VzZXInLCBoZWFkZXJzLCBib2R5KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0cmVhbWluZ1Rva2VuKHJlc3BvbnNlLmJvZHkoKSkpXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gQ3JlZGl0cyB0byBodHRwczovL2dpdGh1Yi5jb20vUHJpc21hcmluZUpTL3ByaXNtYXJpbmUtYXV0aCBmb3IgdGhlIHNpZ25pbmcgcGFydFxuICAgIHNpZ24odXJsLCBhdXRob3JpemF0aW9uVG9rZW4sIHBheWxvYWQsIGp3dEtleXMpIHtcbiAgICAgICAgY29uc3Qgd2luZG93c1RpbWVzdGFtcCA9IChCaWdJbnQoKERhdGUubm93KCkgLyAxMDAwKSB8IDApICsgQmlnSW50KDExNjQ0NDczNjAwKSkgKiBCaWdJbnQoMTAwMDAwMDApXG4gICAgICAgIGNvbnN0IHBhdGhBbmRRdWVyeSA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxuICAgIFxuICAgICAgICBjb25zdCBhbGxvY1NpemUgPSA1ICsgOSArIDUgKyBwYXRoQW5kUXVlcnkubGVuZ3RoICsgMSArIGF1dGhvcml6YXRpb25Ub2tlbi5sZW5ndGggKyAxICsgcGF5bG9hZC5sZW5ndGggKyAxXG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyhhbGxvY1NpemUpXG4gICAgICAgIGJ1Zi53cml0ZUludDMyQkUoMSlcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgNClcbiAgICAgICAgYnVmLndyaXRlQmlnVUludDY0QkUod2luZG93c1RpbWVzdGFtcCwgNSlcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgMTMpXG4gICAgICAgIGxldCBvZmZzZXQgPSAxNFxuXG4gICAgICAgIEJ1ZmZlci5mcm9tKCdQT1NUJykuY29weShidWYsIG9mZnNldClcbiAgICAgICAgYnVmLndyaXRlVUludDgoMCwgb2Zmc2V0KzQpXG4gICAgICAgIG9mZnNldCA9IG9mZnNldCs0KzFcblxuICAgICAgICBCdWZmZXIuZnJvbShwYXRoQW5kUXVlcnkpLmNvcHkoYnVmLCBvZmZzZXQpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQ4KDAsIG9mZnNldCtwYXRoQW5kUXVlcnkubGVuZ3RoKVxuICAgICAgICBvZmZzZXQgPSBvZmZzZXQrcGF0aEFuZFF1ZXJ5Lmxlbmd0aCsxXG5cbiAgICAgICAgQnVmZmVyLmZyb20oYXV0aG9yaXphdGlvblRva2VuKS5jb3B5KGJ1Ziwgb2Zmc2V0KVxuICAgICAgICBidWYud3JpdGVVSW50OCgwLCBvZmZzZXQrYXV0aG9yaXphdGlvblRva2VuLmxlbmd0aClcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0K2F1dGhvcml6YXRpb25Ub2tlbi5sZW5ndGgrMVxuXG4gICAgICAgIEJ1ZmZlci5mcm9tKHBheWxvYWQpLmNvcHkoYnVmLCBvZmZzZXQpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQ4KDAsIG9mZnNldCtwYXlsb2FkLmxlbmd0aClcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0K3BheWxvYWQubGVuZ3RoKzFcblxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uc2lnbignU0hBMjU2JywgYnVmLCB7IGtleTogand0S2V5cy5yYXcucHJpdmF0ZUtleSwgZHNhRW5jb2Rpbmc6ICdpZWVlLXAxMzYzJyB9KVxuICAgIFxuICAgICAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuYWxsb2Moc2lnbmF0dXJlLmxlbmd0aCArIDEyKVxuICAgICAgICBoZWFkZXIud3JpdGVJbnQzMkJFKDEpXG4gICAgICAgIGhlYWRlci53cml0ZUJpZ1VJbnQ2NEJFKHdpbmRvd3NUaW1lc3RhbXAsIDQpXG4gICAgICAgIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkuY29weShoZWFkZXIsIDEyKVxuICAgIFxuICAgICAgICByZXR1cm4gaGVhZGVyXG4gICAgfVxuXG4gICAgLy8gVG9rZW4gcmV0cmlldmFsIGhlbHBlcnNcbiAgICBhc3luYyByZWZyZXNoVG9rZW5zKHRva2VuU3RvcmU6VG9rZW5TdG9yZSl7XG4gICAgICAgIGNvbnN0IGN1clVzZXJUb2tlbiA9IHRva2VuU3RvcmUuZ2V0VXNlclRva2VuKClcbiAgICAgICAgaWYoY3VyVXNlclRva2VuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCcpXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJUb2tlbiA9IGF3YWl0IHRoaXMucmVmcmVzaFVzZXJUb2tlbihjdXJVc2VyVG9rZW4pXG4gICAgICAgICAgICBjb25zdCBkZXZpY2VUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlVG9rZW5IYWNrKClcbiAgICAgICAgICAgIGNvbnN0IHNpc3VUb2tlbiA9IGF3YWl0IHRoaXMuZG9TaXN1QXV0aG9yaXphdGlvbih1c2VyVG9rZW4sIGRldmljZVRva2VuKVxuXG4gICAgICAgICAgICB0b2tlblN0b3JlLnNldFVzZXJUb2tlbih1c2VyVG9rZW4pXG4gICAgICAgICAgICB0b2tlblN0b3JlLnNldFNpc3VUb2tlbihzaXN1VG9rZW4pXG4gICAgICAgICAgICB0b2tlblN0b3JlLnNhdmUoKVxuXG4gICAgICAgICAgICByZXR1cm4geyB1c2VyVG9rZW4sIGRldmljZVRva2VuLCBzaXN1VG9rZW4gfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFRva2VuUmVmcmVzaEVycm9yKCdGYWlsZWQgdG8gcmVmcmVzaCB0b2tlbnM6ICcgKyBKU09OLnN0cmluZ2lmeShlcnJvcikpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRNc2FsVG9rZW4odG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc3QgdXNlclRva2VuID0gdG9rZW5TdG9yZS5nZXRVc2VyVG9rZW4oKVxuICAgICAgICBpZih1c2VyVG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmV4Y2hhbmdlUmVmcmVzaFRva2VuRm9yWGNsb3VkVHJhbnNmZXJUb2tlbih1c2VyVG9rZW4pICAgIFxuICAgIH1cblxuICAgIF93ZWJUb2tlbjpYc3RzVG9rZW4gfCB1bmRlZmluZWRcblxuICAgIGFzeW5jIGdldFdlYlRva2VuKHRva2VuU3RvcmU6VG9rZW5TdG9yZSl7XG4gICAgICAgIGNvbnN0IHNpc3VUb2tlbiA9IHRva2VuU3RvcmUuZ2V0U2lzdVRva2VuKClcbiAgICAgICAgaWYoc2lzdVRva2VuID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Npc3UgdG9rZW4gaXMgbWlzc2luZy4gUGxlYXNlIGF1dGhlbnRpY2F0ZSBmaXJzdCcpXG5cbiAgICAgICAgaWYodGhpcy5fd2ViVG9rZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzLl93ZWJUb2tlbi5nZXRTZWNvbmRzVmFsaWQoKSA8PSA2MCl7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZG9Yc3RzQXV0aG9yaXphdGlvbihzaXN1VG9rZW4sICdodHRwOi8veGJveGxpdmUuY29tJylcbiAgICAgICAgICAgIHRoaXMuX3dlYlRva2VuID0gdG9rZW5cblxuICAgICAgICAgICAgcmV0dXJuIHRva2VuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2ViVG9rZW4gYXMgWHN0c1Rva2VuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfeGhvbWVUb2tlbjpTdHJlYW1pbmdUb2tlbiB8IHVuZGVmaW5lZFxuICAgIF94Y2xvdWRUb2tlbjpTdHJlYW1pbmdUb2tlbiB8IHVuZGVmaW5lZFxuXG4gICAgYXN5bmMgZ2V0U3RyZWFtaW5nVG9rZW4odG9rZW5TdG9yZTpUb2tlblN0b3JlKXtcbiAgICAgICAgY29uc3Qgc2lzdVRva2VuID0gdG9rZW5TdG9yZS5nZXRTaXN1VG9rZW4oKVxuICAgICAgICBpZihzaXN1VG9rZW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lzdSB0b2tlbiBpcyBtaXNzaW5nLiBQbGVhc2UgYXV0aGVudGljYXRlIGZpcnN0JylcblxuICAgICAgICBjb25zdCB4c3RzVG9rZW4gPSBhd2FpdCB0aGlzLmRvWHN0c0F1dGhvcml6YXRpb24oc2lzdVRva2VuLCAnaHR0cDovL2dzc3YueGJveGxpdmUuY29tLycpXG5cbiAgICAgICAgaWYodGhpcy5feGhvbWVUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX3hob21lVG9rZW4uZ2V0U2Vjb25kc1ZhbGlkKCkgPD0gNjApe1xuICAgICAgICAgICAgdGhpcy5feGhvbWVUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0U3RyZWFtVG9rZW4oeHN0c1Rva2VuLCAneGhvbWUnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5feGNsb3VkVG9rZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzLl94Y2xvdWRUb2tlbi5nZXRTZWNvbmRzVmFsaWQoKSA8PSA2MCl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4Z3B1d2ViJylcbiAgICAgICAgICAgIH0gY2F0Y2goZXJyb3Ipe1xuICAgICAgICAgICAgICAgIHRoaXMuX3hjbG91ZFRva2VuID0gYXdhaXQgdGhpcy5nZXRTdHJlYW1Ub2tlbih4c3RzVG9rZW4sICd4Z3B1d2ViZjJwJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHhIb21lVG9rZW46IHRoaXMuX3hob21lVG9rZW4sIHhDbG91ZFRva2VuOiB0aGlzLl94Y2xvdWRUb2tlbiB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmVkaXJlY3RVcmkoKXtcbiAgICAgICAgY29uc3QgZGV2aWNlVG9rZW4gPSBhd2FpdCB0aGlzLmdldERldmljZVRva2VuSGFjaygpXG4gICAgICAgIGNvbnN0IGNvZGVDaGFsbGFuZ2UgPSBhd2FpdCB0aGlzLmdldENvZGVDaGFsbGFuZ2UoKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0UmFuZG9tU3RhdGUoKVxuICAgICAgICBjb25zdCBzaXN1QXV0aCA9IGF3YWl0IHRoaXMuZG9TaXN1QXV0aGVudGljYXRpb24oZGV2aWNlVG9rZW4sIGNvZGVDaGFsbGFuZ2UsIHN0YXRlKVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXN1QXV0aCxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgY29kZUNoYWxsYW5nZVxuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZVVzZXIodG9rZW5TdG9yZTpUb2tlblN0b3JlLCByZWRpcmVjdE9iamVjdDp7XG4gICAgICAgIHNpc3VBdXRoOiBJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U7XG4gICAgICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgICAgIGNvZGVDaGFsbGFuZ2U6IElDb2RlQ2hhbGxhbmdlO1xuICAgIH0sIHJlZGlyZWN0VXJpOnN0cmluZyl7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVkaXJlY3RVcmkpXG5cbiAgICAgICAgY29uc3QgZXJyb3IgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnZXJyb3InKVxuICAgICAgICBpZihlcnJvcil7XG4gICAgICAgICAgICBjb25zdCBlcnJvcl9kZXNjcmlwdGlvbiA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdlcnJvcl9kZXNjcmlwdGlvbicpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZGUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnY29kZScpXG4gICAgICAgIGlmKGNvZGUpe1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnc3RhdGUnKVxuICAgICAgICAgICAgaWYoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGVVc2VyVXNpbmdDb2RlKHRva2VuU3RvcmUsIHJlZGlyZWN0T2JqZWN0LCBjb2RlLCBzdGF0ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZVVzZXJVc2luZ0NvZGUodG9rZW5TdG9yZTpUb2tlblN0b3JlLCByZWRpcmVjdE9iamVjdDp7XG4gICAgICAgIHNpc3VBdXRoOiBJU2lzdUF1dGhlbnRpY2F0aW9uUmVzcG9uc2U7XG4gICAgICAgIHN0YXRlOiBzdHJpbmc7XG4gICAgICAgIGNvZGVDaGFsbGFuZ2U6IElDb2RlQ2hhbGxhbmdlO1xuICAgIH0sIGNvZGU6c3RyaW5nLCBzdGF0ZTpzdHJpbmcpe1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdhdXRoZW50aWNhdGVVc2VyOicsIGNvZGUsIHN0YXRlKVxuXG4gICAgICAgIGlmKHN0YXRlICE9PSByZWRpcmVjdE9iamVjdC5zdGF0ZSl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQXV0aGVudGljYXRpb24gZmFpbGVkOiBTdGF0ZSBtaXNtYXRjaCcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlQ2hhbGxhbmdlID0gYXdhaXQgdGhpcy5nZXRDb2RlQ2hhbGxhbmdlKClcbiAgICAgICAgY29uc3QgdXNlclRva2VuID0gYXdhaXQgdGhpcy5leGNoYW5nZUNvZGVGb3JUb2tlbihjb2RlLCBjb2RlQ2hhbGxhbmdlLnZlcmlmaWVyKVxuXG4gICAgICAgIHRva2VuU3RvcmUuc2V0VXNlclRva2VuKHVzZXJUb2tlbilcbiAgICAgICAgdG9rZW5TdG9yZS5zZXRKd3RLZXlzKHRoaXMuand0S2V5cylcbiAgICAgICAgdG9rZW5TdG9yZS5zYXZlKClcblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRva2VuUmVmcmVzaEVycm9yIGV4dGVuZHMgRXJyb3Ige30iLCJleHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzID0ge1xuICBsb2NhbGU6IFwiZW5cIixcbiAgZnVsbHNjcmVlbjogZmFsc2UsXG4gIHJlc29sdXRpb246IDcyMCxcbiAgeGhvbWVfYml0cmF0ZV9tb2RlOiBcIkF1dG9cIixcbiAgeGhvbWVfYml0cmF0ZTogMjAsXG4gIHhjbG91ZF9iaXRyYXRlX21vZGU6IFwiQXV0b1wiLFxuICB4Y2xvdWRfYml0cmF0ZTogMjAsXG4gIGF1ZGlvX2JpdHJhdGVfbW9kZTogXCJBdXRvXCIsXG4gIGF1ZGlvX2JpdHJhdGU6IDIwLFxuICBwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZTogXCJlbi1VU1wiLFxuICBmb3JjZV9yZWdpb25faXA6IFwiXCIsXG4gIGNvZGVjOiBcIlwiLFxuICB2aWJyYXRpb246IHRydWUsXG4gIHZpYnJhdGlvbl9tb2RlOiBcIk5hdGl2ZVwiLFxuICBnYW1lcGFkX2tlcm5hbDogXCJOYXRpdmVcIixcbiAgZGVhZF96b25lOiAwLjEsXG4gIGVkZ2VfY29tcGVuc2F0aW9uOiAwLFxuICBmb3JjZV90cmlnZ2VyX3J1bWJsZTogJycsXG4gIHBvd2VyX29uOiBmYWxzZSxcbiAgdmlkZW9fZm9ybWF0OiBcIlwiLFxuICB2aXJ0dWFsX2dhbWVwYWRfb3BhY2l0eTogMC42LFxuICBnYW1lcGFkX21hcGluZzogbnVsbCxcbiAgbmF0aXZlX2dhbWVwYWRfbWFwaW5nOiBudWxsLFxuICBpcHY2OiBmYWxzZSxcbiAgaW5wdXRfbW91c2VrZXlib2FyZF9tYXBpbmc6IHtcbiAgICBBcnJvd0xlZnQ6ICdEUGFkTGVmdCcsXG4gICAgQXJyb3dVcDogJ0RQYWRVcCcsXG4gICAgQXJyb3dSaWdodDogJ0RQYWRSaWdodCcsXG4gICAgQXJyb3dEb3duOiAnRFBhZERvd24nLFxuXG4gICAgRW50ZXI6ICdBJyxcbiAgICBhOiAnQScsXG5cbiAgICBCYWNrc3BhY2U6ICdCJyxcbiAgICBiOiAnQicsXG5cbiAgICB4OiAnWCcsXG4gICAgeTogJ1knLFxuXG4gICAgJ1snOiAnTGVmdFNob3VsZGVyJyxcbiAgICAnXSc6ICdSaWdodFNob3VsZGVyJyxcblxuICAgICctJzogJ0xlZnRUcmlnZ2VyJyxcbiAgICAnPSc6ICdSaWdodFRyaWdnZXInLFxuXG4gICAgdjogJ1ZpZXcnLFxuICAgIG06ICdNZW51JyxcbiAgICBuOiAnTmV4dXMnLFxuICB9LFxuICBkaXNwbGF5X29wdGlvbnM6IHtcbiAgICBzaGFycG5lc3M6IDUsXG4gICAgc2F0dXJhdGlvbjogMTAwLFxuICAgIGNvbnRyYXN0OiAxMDAsXG4gICAgYnJpZ2h0bmVzczogMTAwLFxuICB9LFxuICBkZWJ1ZzogZmFsc2UsXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZWN0cm9uXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5vZGU6cGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfYXhpb3NfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfY29tcGFyZV92ZXJzaW9uc19fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9kZWJ1Z19fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9lbGVjdHJvbl9zZXJ2ZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9lbGVjdHJvbl9zdG9yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9naXRodWJfdXJsX3RvX29iamVjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9pcF9hZGRyZXNzX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2pvc2VfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfdXVpZF8xMzQ1X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3hib3hfd2ViYXBpX187IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2RhdGUvbm93XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmNsdWRlc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb21lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3RyaW1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9qc29uL3N0cmluZ2lmeVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9hc3NpZ25cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9sc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9rZXlzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldC1pbW1lZGlhdGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3VybC1zZWFyY2gtcGFyYW1zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvdXJsXCIpOyIsInZhciBfT2JqZWN0JGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCIpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX1N5bWJvbCR0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL3RvLXByaW1pdGl2ZS5qc1wiKTtcbnZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtfU3ltYm9sJHRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB0b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9TeW1ib2wkaXRlcmF0b3IgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiKTtcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgX1N5bWJvbCRpdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gX1N5bWJvbCAmJiBvICE9PSBfU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sL2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguQXJyYXkuaXNBcnJheTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZpbHRlcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmb3JFYWNoJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2luY2x1ZGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAna2V5cycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb21lJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvbWUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzb3J0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUubm93Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5EYXRlLm5vdztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmNsdWRlcycpO1xudmFyIHN0cmluZ01ldGhvZCA9IHJlcXVpcmUoJy4uL3N0cmluZy92aXJ0dWFsL2luY2x1ZGVzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBTdHJpbmdQcm90b3R5cGUgPSBTdHJpbmcucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuaW5jbHVkZXM7XG4gIGlmIChpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluY2x1ZGVzKSkgcmV0dXJuIGFycmF5TWV0aG9kO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnIHx8IGl0ID09PSBTdHJpbmdQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoU3RyaW5nUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBTdHJpbmdQcm90b3R5cGUuaW5jbHVkZXMpKSB7XG4gICAgcmV0dXJuIHN0cmluZ01ldGhvZDtcbiAgfSByZXR1cm4gb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvdHJpbScpO1xuXG52YXIgU3RyaW5nUHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnRyaW07XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N0cmluZycgfHwgaXQgPT09IFN0cmluZ1Byb3RvdHlwZVxuICAgIHx8IChpc1Byb3RvdHlwZU9mKFN0cmluZ1Byb3RvdHlwZSwgaXQpICYmIG93biA9PT0gU3RyaW5nUHJvdG90eXBlLnRyaW0pID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5hc3NpZ247XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5rZXlzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Qua2V5cztcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UuYW55Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2Uud2l0aC1yZXNvbHZlcnMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUHJvbWlzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LmludGVyc2VjdGlvbi52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuaXMtZGlzam9pbnQtZnJvbS52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52MicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnU3RyaW5nJywgJ2luY2x1ZGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy50cmltJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ1N0cmluZycsICd0cmltJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU3ltYm9sO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ2l0ZXJhdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC9pdGVyYXRvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC90by1wcmltaXRpdmUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmN1c3RvbS1tYXRjaGVyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucmVwbGFjZS1hbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbC9pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzUG9zc2libGVQcm90b3R5cGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnb2JqZWN0JyAmJiAnc2l6ZScgaW4gaXQgJiYgJ2hhcycgaW4gaXQgJiYgJ2FkZCcgaW4gaXQgJiYgJ2RlbGV0ZScgaW4gaXQgJiYgJ2tleXMnIGluIGl0KSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0KSArICcgaXMgbm90IGEgc2V0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBJU19DT05TVFJVQ1RPUiA9IGlzQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYXBwaW5nKSBtYXBmbiA9IGJpbmQobWFwZm4sIGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dCwgdmFsdWU7XG4gIC8vIGlmIHRoZSB0YXJnZXQgaXMgbm90IGl0ZXJhYmxlIG9yIGl0J3MgYW4gYXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBhIHNpbXBsZSBjYXNlXG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhKHRoaXMgPT09ICRBcnJheSAmJiBpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlcmF0b3JNZXRob2QpKSkge1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMoKSA6IFtdO1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIGZvciAoOyEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKGxlbmd0aCkgOiAkQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxudmFyIHNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA4KSB7XG4gICAgLy8gaW5zZXJ0aW9uIHNvcnRcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIGVsZW1lbnQsIGo7XG5cbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgaiA9IGk7XG4gICAgICBlbGVtZW50ID0gYXJyYXlbaV07XG4gICAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgICAgYXJyYXlbal0gPSBhcnJheVstLWpdO1xuICAgICAgfVxuICAgICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBtZXJnZSBzb3J0XG4gICAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICAgIHZhciBsZWZ0ID0gc29ydChhcnJheVNsaWNlKGFycmF5LCAwLCBtaWRkbGUpLCBjb21wYXJlZm4pO1xuICAgIHZhciByaWdodCA9IHNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKTtcbiAgICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICAgIHZhciBybGVuZ3RoID0gcmlnaHQubGVuZ3RoO1xuICAgIHZhciBsaW5kZXggPSAwO1xuICAgIHZhciByaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGxpbmRleCA8IGxsZW5ndGggfHwgcmluZGV4IDwgcmxlbmd0aCkge1xuICAgICAgYXJyYXlbbGluZGV4ICsgcmluZGV4XSA9IChsaW5kZXggPCBsbGVuZ3RoICYmIHJpbmRleCA8IHJsZW5ndGgpXG4gICAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICAgIDogbGluZGV4IDwgbGxlbmd0aCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc29ydDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIG51bUFyZ3MpIHtcbiAgcmV0dXJuIG51bUFyZ3MgPT09IDEgPyBmdW5jdGlvbiAob2JqZWN0LCBhcmcpIHtcbiAgICByZXR1cm4gb2JqZWN0W21ldGhvZE5hbWVdKGFyZyk7XG4gIH0gOiBmdW5jdGlvbiAob2JqZWN0LCBhcmcxLCBhcmcyKSB7XG4gICAgcmV0dXJuIG9iamVjdFttZXRob2ROYW1lXShhcmcxLCBhcmcyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogbnVsbCxcbiAgICAgICAgbGFzdDogbnVsbCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgICAgcmVtb3ZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdGF0ZS5maXJzdCkgc3RhdGUuZmlyc3QgPSBlbnRyeTtcbiAgICAgICAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy5uZXh0ID0gZW50cnk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSsrO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSsrO1xuICAgICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHN0YXRlLmluZGV4W2luZGV4XSA9IGVudHJ5O1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIC8vIGZhc3QgY2FzZVxuICAgICAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICAgICAgdmFyIGVudHJ5O1xuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiBzdGF0ZS5pbmRleFtpbmRleF07XG4gICAgICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgICAgIGZvciAoZW50cnkgPSBzdGF0ZS5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnkubmV4dCkge1xuICAgICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IG51bGw7XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IG51bGw7XG4gICAgICAgIHN0YXRlLmluZGV4ID0gY3JlYXRlKG51bGwpO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiBudWxsXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUsIHdyYXBwZXIsIGNvbW1vbikge1xuICB2YXIgSVNfTUFQID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdNYXAnKSAhPT0gLTE7XG4gIHZhciBJU19XRUFLID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdXZWFrJykgIT09IC0xO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxUaGlzW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3Rba2V5XSA9IHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHBhZFN0YXJ0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wYWQnKS5zdGFydDtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkaXNGaW5pdGUgPSBpc0Zpbml0ZTtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBEYXRlUHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7XG52YXIgbmF0aXZlRGF0ZVRvSVNPU3RyaW5nID0gRGF0ZVByb3RvdHlwZS50b0lTT1N0cmluZztcbnZhciB0aGlzVGltZVZhbHVlID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRUaW1lKTtcbnZhciBnZXRVVENEYXRlID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENEYXRlKTtcbnZhciBnZXRVVENGdWxsWWVhciA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDRnVsbFllYXIpO1xudmFyIGdldFVUQ0hvdXJzID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENIb3Vycyk7XG52YXIgZ2V0VVRDTWlsbGlzZWNvbmRzID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENNaWxsaXNlY29uZHMpO1xudmFyIGdldFVUQ01pbnV0ZXMgPSB1bmN1cnJ5VGhpcyhEYXRlUHJvdG90eXBlLmdldFVUQ01pbnV0ZXMpO1xudmFyIGdldFVUQ01vbnRoID0gdW5jdXJyeVRoaXMoRGF0ZVByb3RvdHlwZS5nZXRVVENNb250aCk7XG52YXIgZ2V0VVRDU2Vjb25kcyA9IHVuY3VycnlUaGlzKERhdGVQcm90b3R5cGUuZ2V0VVRDU2Vjb25kcyk7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLnRvaXNvc3RyaW5nXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGZhaWxzIGhlcmU6XG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVEYXRlVG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuYXRpdmVEYXRlVG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoISRpc0Zpbml0ZSh0aGlzVGltZVZhbHVlKHRoaXMpKSkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgdmFyIGRhdGUgPSB0aGlzO1xuICB2YXIgeWVhciA9IGdldFVUQ0Z1bGxZZWFyKGRhdGUpO1xuICB2YXIgbWlsbGlzZWNvbmRzID0gZ2V0VVRDTWlsbGlzZWNvbmRzKGRhdGUpO1xuICB2YXIgc2lnbiA9IHllYXIgPCAwID8gJy0nIDogeWVhciA+IDk5OTkgPyAnKycgOiAnJztcbiAgcmV0dXJuIHNpZ24gKyBwYWRTdGFydChhYnMoeWVhciksIHNpZ24gPyA2IDogNCwgMCkgK1xuICAgICctJyArIHBhZFN0YXJ0KGdldFVUQ01vbnRoKGRhdGUpICsgMSwgMiwgMCkgK1xuICAgICctJyArIHBhZFN0YXJ0KGdldFVUQ0RhdGUoZGF0ZSksIDIsIDApICtcbiAgICAnVCcgKyBwYWRTdGFydChnZXRVVENIb3VycyhkYXRlKSwgMiwgMCkgK1xuICAgICc6JyArIHBhZFN0YXJ0KGdldFVUQ01pbnV0ZXMoZGF0ZSksIDIsIDApICtcbiAgICAnOicgKyBwYWRTdGFydChnZXRVVENTZWNvbmRzKGRhdGUpLCAyLCAwKSArXG4gICAgJy4nICsgcGFkU3RhcnQobWlsbGlzZWNvbmRzLCAzLCAwKSArXG4gICAgJ1onO1xufSA6IG5hdGl2ZURhdGVUb0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudW1lcmFibGUpIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCB2YWx1ZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVuc2FmZSAmJiB0YXJnZXRba2V5XSkgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBkZWxldGUgcHJvcGVydHkgJyArIHRyeVRvU3RyaW5nKFApICsgJyBvZiAnICsgdHJ5VG9TdHJpbmcoTykpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxudmFyIGZpcmVmb3ggPSB1c2VyQWdlbnQubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvaSk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFmaXJlZm94ICYmICtmaXJlZm94WzFdO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFVBID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdCh1c2VyQWdlbnQpICYmIHR5cGVvZiBQZWJibGUgIT0gJ3VuZGVmaW5lZCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSAvKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEVOVklST05NRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRU5WSVJPTk1FTlQgPT09ICdOT0RFJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3QodXNlckFnZW50KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4sIERlbm8gLS0gZGV0ZWN0aW9uICovXG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgdXNlckFnZW50U3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5zbGljZSgwLCBzdHJpbmcubGVuZ3RoKSA9PT0gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnQnVuLycpKSByZXR1cm4gJ0JVTic7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdDbG91ZGZsYXJlLVdvcmtlcnMnKSkgcmV0dXJuICdDTE9VREZMQVJFJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ0Rlbm8vJykpIHJldHVybiAnREVOTyc7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdOb2RlLmpzLycpKSByZXR1cm4gJ05PREUnO1xuICBpZiAoZ2xvYmFsVGhpcy5CdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnKSByZXR1cm4gJ0JVTic7XG4gIGlmIChnbG9iYWxUaGlzLkRlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JykgcmV0dXJuICdERU5PJztcbiAgaWYgKGNsYXNzb2YoZ2xvYmFsVGhpcy5wcm9jZXNzKSA9PT0gJ3Byb2Nlc3MnKSByZXR1cm4gJ05PREUnO1xuICBpZiAoZ2xvYmFsVGhpcy53aW5kb3cgJiYgZ2xvYmFsVGhpcy5kb2N1bWVudCkgcmV0dXJuICdCUk9XU0VSJztcbiAgcmV0dXJuICdSRVNUJztcbn0pKCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ2EnKTtcbiAgaWYgKCEoJ3N0YWNrJyBpbiBlcnJvcikpIHJldHVybiB0cnVlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgNykpO1xuICByZXR1cm4gZXJyb3Iuc3RhY2sgIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuLy8gYWRkIGRlYnVnZ2luZyBpbmZvXG5yZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciB3cmFwQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgdmFyIFdyYXBwZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgV3JhcHBlcikge1xuICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiKTtcbiAgICAgIH0gcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhLCBiLCBjKTtcbiAgICB9IHJldHVybiBhcHBseShOYXRpdmVDb25zdHJ1Y3RvciwgdGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgV3JhcHBlci5wcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBXcmFwcGVyO1xufTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIFBST1RPID0gb3B0aW9ucy5wcm90bztcblxuICB2YXIgbmF0aXZlU291cmNlID0gR0xPQkFMID8gZ2xvYmFsVGhpcyA6IFNUQVRJQyA/IGdsb2JhbFRoaXNbVEFSR0VUXSA6IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKCFGT1JDRUQgJiYgIVBST1RPICYmIHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSA9PSB0eXBlb2Ygc291cmNlUHJvcGVydHkpIGNvbnRpbnVlO1xuXG4gICAgLy8gYmluZCBtZXRob2RzIHRvIGdsb2JhbCBmb3IgY2FsbGluZyBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgaWYgKG9wdGlvbnMuYmluZCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoc291cmNlUHJvcGVydHksIGdsb2JhbFRoaXMpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IE5BVElWRV9CSU5EID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuICAvLyBOYXNob3JuIGJ1ZzpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEyOFxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTMwXG4gIGlmIChjbGFzc29mUmF3KGZuKSA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIHVuY3VycnlUaGlzKGZuKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IsIE1FVEhPRCkge1xuICB2YXIgTmFtZXNwYWNlID0gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbiAgdmFyIHB1cmVNZXRob2QgPSBOYW1lc3BhY2UgJiYgTmFtZXNwYWNlW01FVEhPRF07XG4gIGlmIChwdXJlTWV0aG9kKSByZXR1cm4gcHVyZU1ldGhvZDtcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsVGhpc1tDT05TVFJVQ1RPUl07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBOYXRpdmVQcm90b3R5cGUgJiYgTmF0aXZlUHJvdG90eXBlW01FVEhPRF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodmFyaWFibGUpID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsVGhpc1tuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFRoaXNbbmFtZXNwYWNlXSAmJiBnbG9iYWxUaGlzW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBgR2V0SXRlcmF0b3JEaXJlY3Qob2JqKWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVycy8jc2VjLWdldGl0ZXJhdG9yZGlyZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICBpdGVyYXRvcjogb2JqLFxuICAgIG5leHQ6IG9iai5uZXh0LFxuICAgIGRvbmU6IGZhbHNlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyIElOVkFMSURfU0laRSA9ICdJbnZhbGlkIHNpemUnO1xudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgU2V0UmVjb3JkID0gZnVuY3Rpb24gKHNldCwgaW50U2l6ZSkge1xuICB0aGlzLnNldCA9IHNldDtcbiAgdGhpcy5zaXplID0gbWF4KGludFNpemUsIDApO1xuICB0aGlzLmhhcyA9IGFDYWxsYWJsZShzZXQuaGFzKTtcbiAgdGhpcy5rZXlzID0gYUNhbGxhYmxlKHNldC5rZXlzKTtcbn07XG5cblNldFJlY29yZC5wcm90b3R5cGUgPSB7XG4gIGdldEl0ZXJhdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEl0ZXJhdG9yRGlyZWN0KGFuT2JqZWN0KGNhbGwodGhpcy5rZXlzLCB0aGlzLnNldCkpKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBjYWxsKHRoaXMuaGFzLCB0aGlzLnNldCwgaXQpO1xuICB9XG59O1xuXG4vLyBgR2V0U2V0UmVjb3JkYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jc2VjLWdldHNldHJlY29yZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGFuT2JqZWN0KG9iaik7XG4gIHZhciBudW1TaXplID0gK29iai5zaXplO1xuICAvLyBOT1RFOiBJZiBzaXplIGlzIHVuZGVmaW5lZCwgdGhlbiBudW1TaXplIHdpbGwgYmUgTmFOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1TaXplICE9PSBudW1TaXplKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihJTlZBTElEX1NJWkUpO1xuICB2YXIgaW50U2l6ZSA9IHRvSW50ZWdlck9ySW5maW5pdHkobnVtU2l6ZSk7XG4gIGlmIChpbnRTaXplIDwgMCkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHJldHVybiBuZXcgU2V0UmVjb3JkKG9iaiwgaW50U2l6ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxuLy8gYEluc3RhbGxFcnJvckNhdXNlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1lcnJvci1jYXVzZS8jc2VjLWVycm9yb2JqZWN0cy1pbnN0YWxsLWVycm9yLWNhdXNlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBvcHRpb25zKSB7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSAmJiAnY2F1c2UnIGluIG9wdGlvbnMpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywgJ2NhdXNlJywgb3B0aW9ucy5jYXVzZSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBbXSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT09ICdSZWdFeHAnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVjb3JkLCBmbiwgSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQpIHtcbiAgdmFyIGl0ZXJhdG9yID0gSVRFUkFUT1JfSU5TVEVBRF9PRl9SRUNPUkQgPyByZWNvcmQgOiByZWNvcmQuaXRlcmF0b3I7XG4gIHZhciBuZXh0ID0gcmVjb3JkLm5leHQ7XG4gIHZhciBzdGVwLCByZXN1bHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGZuKHN0ZXAudmFsdWUpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzYWZlR2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zYWZlLWdldC1idWlsdC1pbicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MtcGViYmxlJyk7XG52YXIgSVNfV0VCT1NfV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLXdlYm9zLXdlYmtpdCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbFRoaXMuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWxUaGlzLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbFRoaXMuUHJvbWlzZTtcbnZhciBtaWNyb3Rhc2sgPSBzYWZlR2V0QnVpbHRJbigncXVldWVNaWNyb3Rhc2snKTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbFRoaXMpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hY3JvdGFzayhmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIG1pY3JvdGFzayA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICghcXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgcXVldWUuYWRkKGZuKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtaWNyb3Rhc2s7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcmVnZXhwJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNSZWdFeHAoaXQpKSB7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnNcIik7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnYXNzaWduIGRldGVjdGlvbicpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9PSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9PSBhbHBoYWJldDtcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG4gIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpbmRleCkge1xuICAgIHZhciBTID0gSW5kZXhlZE9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KG9iamVjdEtleXMoUyksIGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlLCBTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtYXNzaWdubWVudCAtLSBhdm9pZCBtZW1vcnkgbGVha1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsO1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZSAqL1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgcmVxdWlyZU9iamVjdENvZXJjaWJsZShPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmICghaXNPYmplY3QoTykpIHJldHVybiBPO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEVOVklST05NRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWxUaGlzLlByb21pc2VSZWplY3Rpb25FdmVudCk7XG5cbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IGlzRm9yY2VkKCdQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICB2YXIgUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgPSBpbnNwZWN0U291cmNlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIHZhciBHTE9CQUxfQ09SRV9KU19QUk9NSVNFID0gUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgIT09IFN0cmluZyhOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAvLyBXZSBuZWVkIFByb21pc2UjeyBjYXRjaCwgZmluYWxseSB9IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddKSkgcmV0dXJuIHRydWU7XG4gIC8vIFdlIGNhbid0IHVzZSBAQHNwZWNpZXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG4gIGlmICghVjhfVkVSU0lPTiB8fCBWOF9WRVJTSU9OIDwgNTEgfHwgIS9uYXRpdmUgY29kZS8udGVzdChQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSkpIHtcbiAgICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gbmV3IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKDEpOyB9KTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gICAgfTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBwcm9taXNlLmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgICBTVUJDTEFTU0lORyA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gICAgaWYgKCFTVUJDTEFTU0lORykgcmV0dXJuIHRydWU7XG4gIC8vIFVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgfSByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgKEVOVklST05NRU5UID09PSAnQlJPV1NFUicgfHwgRU5WSVJPTk1FTlQgPT09ICdERU5PJykgJiYgIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ09OU1RSVUNUT1I6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SLFxuICBSRUpFQ1RJT05fRVZFTlQ6IE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCxcbiAgU1VCQ0xBU1NJTkc6IFNVQkNMQVNTSU5HXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzLlByb21pc2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIHx8ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5hbGwoaXRlcmFibGUpLnRoZW4odW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGVhZCA9IG51bGw7XG4gIHRoaXMudGFpbCA9IG51bGw7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgZW50cnkgPSB7IGl0ZW06IGl0ZW0sIG5leHQ6IG51bGwgfTtcbiAgICB2YXIgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBpZiAodGFpbCkgdGFpbC5uZXh0ID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIEF2b2lkIE5vZGVKUyBleHBlcmltZW50YWwgd2FybmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIURFU0NSSVBUT1JTKSByZXR1cm4gZ2xvYmFsVGhpc1tuYW1lXTtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsVGhpcywgbmFtZSk7XG4gIHJldHVybiBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBFTlZJUk9OTUVOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudCcpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbFRoaXMuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOVklST05NRU5UID09PSAnQlVOJyAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbFRoaXMuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG4gIGl0ZXJhdGUoc2V0LCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICBlbHNlIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgY2FsbGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGxlcicpO1xuXG52YXIgU2V0ID0gZ2V0QnVpbHRJbignU2V0Jyk7XG52YXIgU2V0UHJvdG90eXBlID0gU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFNldDogU2V0LFxuICBhZGQ6IGNhbGxlcignYWRkJywgMSksXG4gIGhhczogY2FsbGVyKCdoYXMnLCAxKSxcbiAgcmVtb3ZlOiBjYWxsZXIoJ2RlbGV0ZScsIDEpLFxuICBwcm90bzogU2V0UHJvdG90eXBlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIHZhciByZXN1bHQgPSBuZXcgU2V0KCk7XG5cbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSB7XG4gICAgaXRlcmF0ZVNpbXBsZShvdGhlclJlYy5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGhhcyhPLCBlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSBhZGQocmVzdWx0LCBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGlzam9pbnRGcm9tKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPD0gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3Vic2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdWJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXRlcmF0ZShPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghb3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJldHVybiBmYWxzZTtcbiAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2Zcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTdXBlcnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPCBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghaGFzKE8sIGUpKSByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGZhbHNlKTtcbiAgfSkgIT09IGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCwgZm4sIGludGVycnVwdGlibGUpIHtcbiAgcmV0dXJuIGludGVycnVwdGlibGUgPyBpdGVyYXRlU2ltcGxlKHNldC5rZXlzKCksIGZuLCB0cnVlKSA6IHNldC5mb3JFYWNoKGZuKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gc2V0LnNpemU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGNsb25lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1jbG9uZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN5bW1ldHJpY0RpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIga2V5c0l0ZXIgPSBnZXRTZXRSZWNvcmQob3RoZXIpLmdldEl0ZXJhdG9yKCk7XG4gIHZhciByZXN1bHQgPSBjbG9uZShPKTtcbiAgaXRlcmF0ZVNpbXBsZShrZXlzSXRlciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoaGFzKE8sIGUpKSByZW1vdmUocmVzdWx0LCBlKTtcbiAgICBlbHNlIGFkZChyZXN1bHQsIGUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdCAmJiBpdC5wcm90b3R5cGU7XG4gIGlmICh0YXJnZXQpIHtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICAgIH1cbiAgICBpZiAoU0VUX01FVEhPRCAmJiAhVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCAndG9TdHJpbmcnLCB0b1N0cmluZyk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBhZGQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5hZGQ7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bmlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFRoaXNbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxuKHN0b3JlLnZlcnNpb25zIHx8IChzdG9yZS52ZXJzaW9ucyA9IFtdKSkucHVzaCh7XG4gIHZlcnNpb246ICczLjM4LjEnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM4LjEvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYFNwZWNpZXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IGlzTnVsbE9yVW5kZWZpbmVkKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPyBkZWZhdWx0Q29uc3RydWN0b3IgOiBhQ29uc3RydWN0b3IoUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciAkcmVwZWF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgcmVwZWF0ID0gdW5jdXJyeVRoaXMoJHJlcGVhdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBwYWRTdGFydCwgcGFkRW5kIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfRU5EKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIG1heExlbmd0aCwgZmlsbFN0cmluZykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICAgIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IHRvU3RyaW5nKGZpbGxTdHJpbmcpO1xuICAgIHZhciBmaWxsTGVuLCBzdHJpbmdGaWxsZXI7XG4gICAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PT0gJycpIHJldHVybiBTO1xuICAgIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gICAgc3RyaW5nRmlsbGVyID0gcmVwZWF0KGZpbGxTdHIsIGNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gICAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdTbGljZShzdHJpbmdGaWxsZXIsIDAsIGZpbGxMZW4pO1xuICAgIHJldHVybiBJU19FTkQgPyBTICsgc3RyaW5nRmlsbGVyIDogc3RyaW5nRmlsbGVyICsgUztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5wYWRzdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUucGFkRW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZGVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcy9ibG9iL21hc3Rlci9wdW55Y29kZS5qc1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgbWF4SW50ID0gMjE0NzQ4MzY0NzsgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxudmFyIGJhc2UgPSAzNjtcbnZhciB0TWluID0gMTtcbnZhciB0TWF4ID0gMjY7XG52YXIgc2tldyA9IDM4O1xudmFyIGRhbXAgPSA3MDA7XG52YXIgaW5pdGlhbEJpYXMgPSA3MjtcbnZhciBpbml0aWFsTiA9IDEyODsgLy8gMHg4MFxudmFyIGRlbGltaXRlciA9ICctJzsgLy8gJ1xceDJEJ1xudmFyIHJlZ2V4Tm9uQVNDSUkgPSAvW15cXDAtXFx1MDA3RV0vOyAvLyBub24tQVNDSUkgY2hhcnNcbnZhciByZWdleFNlcGFyYXRvcnMgPSAvWy5cXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2c7IC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcbnZhciBPVkVSRkxPV19FUlJPUiA9ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2Vzcyc7XG52YXIgYmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluO1xuXG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhyZWdleFNlcGFyYXRvcnMuZXhlYyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xudmFyIHRvTG93ZXJDYXNlID0gdW5jdXJyeVRoaXMoJycudG9Mb3dlckNhc2UpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcbiAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG4gKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcbiAqIG1hdGNoaW5nIFVURi0xNi5cbiAqL1xudmFyIHVjczJkZWNvZGUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgdmFyIGNvdW50ZXIgPSAwO1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBjaGFyQ29kZUF0KHN0cmluZywgY291bnRlcisrKTtcbiAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAvLyBJdCdzIGEgaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyLlxuICAgICAgdmFyIGV4dHJhID0gY2hhckNvZGVBdChzdHJpbmcsIGNvdW50ZXIrKyk7XG4gICAgICBpZiAoKGV4dHJhICYgMHhGQzAwKSA9PT0gMHhEQzAwKSB7IC8vIExvdyBzdXJyb2dhdGUuXG4gICAgICAgIHB1c2gob3V0cHV0LCAoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG4gICAgICAgIHB1c2gob3V0cHV0LCB2YWx1ZSk7XG4gICAgICAgIGNvdW50ZXItLTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHVzaChvdXRwdXQsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuICovXG52YXIgZGlnaXRUb0Jhc2ljID0gZnVuY3Rpb24gKGRpZ2l0KSB7XG4gIC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG4gIC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuICByZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpO1xufTtcblxuLyoqXG4gKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcbiAqL1xudmFyIGFkYXB0ID0gZnVuY3Rpb24gKGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuICB2YXIgayA9IDA7XG4gIGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG4gIGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcbiAgd2hpbGUgKGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMSkge1xuICAgIGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcbiAgICBrICs9IGJhc2U7XG4gIH1cbiAgcmV0dXJuIGZsb29yKGsgKyAoYmFzZU1pbnVzVE1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scyAoZS5nLiBhIGRvbWFpbiBuYW1lIGxhYmVsKSB0byBhXG4gKiBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICovXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcblxuICAvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzLlxuICBpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG4gIC8vIENhY2hlIHRoZSBsZW5ndGguXG4gIHZhciBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzdGF0ZS5cbiAgdmFyIG4gPSBpbml0aWFsTjtcbiAgdmFyIGRlbHRhID0gMDtcbiAgdmFyIGJpYXMgPSBpbml0aWFsQmlhcztcbiAgdmFyIGksIGN1cnJlbnRWYWx1ZTtcblxuICAvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzLlxuICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICBpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuICAgICAgcHVzaChvdXRwdXQsIGZyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoOyAvLyBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG4gIHZhciBoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoOyAvLyBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBoYXZlIGJlZW4gaGFuZGxlZDtcblxuICAvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyB3aXRoIGEgZGVsaW1pdGVyIHVubGVzcyBpdCdzIGVtcHR5LlxuICBpZiAoYmFzaWNMZW5ndGgpIHtcbiAgICBwdXNoKG91dHB1dCwgZGVsaW1pdGVyKTtcbiAgfVxuXG4gIC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcbiAgd2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcbiAgICAvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0IGxhcmdlciBvbmU6XG4gICAgdmFyIG0gPSBtYXhJbnQ7XG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG4gICAgICAgIG0gPSBjdXJyZW50VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LCBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdy5cbiAgICB2YXIgaGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuICAgIGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG4gICAgICB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoT1ZFUkZMT1dfRVJST1IpO1xuICAgIH1cblxuICAgIGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG4gICAgbiA9IG07XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuICAgICAgICB0aHJvdyBuZXcgJFJhbmdlRXJyb3IoT1ZFUkZMT1dfRVJST1IpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gbikge1xuICAgICAgICAvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlci5cbiAgICAgICAgdmFyIHEgPSBkZWx0YTtcbiAgICAgICAgdmFyIGsgPSBiYXNlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHZhciB0ID0gayA8PSBiaWFzID8gdE1pbiA6IGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXM7XG4gICAgICAgICAgaWYgKHEgPCB0KSBicmVhaztcbiAgICAgICAgICB2YXIgcU1pbnVzVCA9IHEgLSB0O1xuICAgICAgICAgIHZhciBiYXNlTWludXNUID0gYmFzZSAtIHQ7XG4gICAgICAgICAgcHVzaChvdXRwdXQsIGZyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNUKSkpO1xuICAgICAgICAgIHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG4gICAgICAgICAgayArPSBiYXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVzaChvdXRwdXQsIGZyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSkpKTtcbiAgICAgICAgYmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09PSBiYXNpY0xlbmd0aCk7XG4gICAgICAgIGRlbHRhID0gMDtcbiAgICAgICAgaGFuZGxlZENQQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWx0YSsrO1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gam9pbihvdXRwdXQsICcnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBlbmNvZGVkID0gW107XG4gIHZhciBsYWJlbHMgPSBzcGxpdChyZXBsYWNlKHRvTG93ZXJDYXNlKGlucHV0KSwgcmVnZXhTZXBhcmF0b3JzLCAnXFx1MDAyRScpLCAnLicpO1xuICB2YXIgaSwgbGFiZWw7XG4gIGZvciAoaSA9IDA7IGkgPCBsYWJlbHMubGVuZ3RoOyBpKyspIHtcbiAgICBsYWJlbCA9IGxhYmVsc1tpXTtcbiAgICBwdXNoKGVuY29kZWQsIGV4ZWMocmVnZXhOb25BU0NJSSwgbGFiZWwpID8gJ3huLS0nICsgZW5jb2RlKGxhYmVsKSA6IGxhYmVsKTtcbiAgfVxuICByZXR1cm4gam9pbihlbmNvZGVkLCAnLicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGVhdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09PSBJbmZpbml0eSkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKCdXcm9uZyBudW1iZXIgb2YgcmVwZXRpdGlvbnMnKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlc3VsdCArPSBzdHI7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5QUk9QRVI7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpXG4gICAgICB8fCBub25bTUVUSE9EX05BTUVdKCkgIT09IG5vblxuICAgICAgfHwgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG52YXIga2V5Rm9yID0gU3ltYm9sLmtleUZvcjtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2wgfHwgZnVuY3Rpb24gaXNSZWdpc3RlcmVkU3ltYm9sKHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGtleUZvcih0aGlzU3ltYm9sVmFsdWUodmFsdWUpKSAhPT0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHNhZmUgKi9cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJiAhIVN5bWJvbFsnZm9yJ10gJiYgISFTeW1ib2wua2V5Rm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlJyk7XG5cbnZhciBzZXQgPSBnbG9iYWxUaGlzLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbFRoaXMuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEaXNwYXRjaCA9IGdsb2JhbFRoaXMuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWxUaGlzLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsVGhpcy5NZXNzYWdlQ2hhbm5lbDtcbnZhciBTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyICRsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbmZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gICRsb2NhdGlvbiA9IGdsb2JhbFRoaXMubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKFN0cmluZyhpZCksICRsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyAkbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGhhbmRsZXIpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChJU19OT0RFKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGV2ZW50TGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbFRoaXMucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyAmJlxuICAgICRsb2NhdGlvbiAmJiAkbG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICAhZmFpbHMoZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcilcbiAgKSB7XG4gICAgZGVmZXIgPSBnbG9iYWxQb3N0TWVzc2FnZURlZmVyO1xuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcmVsYXRpdmUtdXJsLXN0eWxlIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciB1cmwgPSBuZXcgVVJMKCdiP2E9MSZiPTImYz0zJywgJ2h0dHBzOi8vYScpO1xuICB2YXIgcGFyYW1zID0gdXJsLnNlYXJjaFBhcmFtcztcbiAgdmFyIHBhcmFtczIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCdhPTEmYT0yJmI9MycpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHVybC5wYXRobmFtZSA9ICdjJTIwZCc7XG4gIHBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgcGFyYW1zWydkZWxldGUnXSgnYicpO1xuICAgIHJlc3VsdCArPSBrZXkgKyB2YWx1ZTtcbiAgfSk7XG4gIHBhcmFtczJbJ2RlbGV0ZSddKCdhJywgMik7XG4gIC8vIGB1bmRlZmluZWRgIGNhc2UgaXMgYSBDaHJvbWl1bSAxMTcgYnVnXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0MjIyXG4gIHBhcmFtczJbJ2RlbGV0ZSddKCdiJywgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIChJU19QVVJFICYmICghdXJsLnRvSlNPTiB8fCAhcGFyYW1zMi5oYXMoJ2EnLCAxKSB8fCBwYXJhbXMyLmhhcygnYScsIDIpIHx8ICFwYXJhbXMyLmhhcygnYScsIHVuZGVmaW5lZCkgfHwgcGFyYW1zMi5oYXMoJ2InKSkpXG4gICAgfHwgKCFwYXJhbXMuc2l6ZSAmJiAoSVNfUFVSRSB8fCAhREVTQ1JJUFRPUlMpKVxuICAgIHx8ICFwYXJhbXMuc29ydFxuICAgIHx8IHVybC5ocmVmICE9PSAnaHR0cHM6Ly9hL2MlMjBkP2E9MSZjPTMnXG4gICAgfHwgcGFyYW1zLmdldCgnYycpICE9PSAnMydcbiAgICB8fCBTdHJpbmcobmV3IFVSTFNlYXJjaFBhcmFtcygnP2E9MScpKSAhPT0gJ2E9MSdcbiAgICB8fCAhcGFyYW1zW0lURVJBVE9SXVxuICAgIC8vIHRocm93cyBpbiBFZGdlXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly9hQGInKS51c2VybmFtZSAhPT0gJ2EnXG4gICAgfHwgbmV3IFVSTFNlYXJjaFBhcmFtcyhuZXcgVVJMU2VhcmNoUGFyYW1zKCdhPWInKSkuZ2V0KCdhJykgIT09ICdiJ1xuICAgIC8vIG5vdCBwdW55Y29kZWQgaW4gRWRnZVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8v0YLQtdGB0YInKS5ob3N0ICE9PSAneG4tLWUxYXliYydcbiAgICAvLyBub3QgZXNjYXBlZCBpbiBDaHJvbWUgNjItXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly9hI9CxJykuaGFzaCAhPT0gJyMlRDAlQjEnXG4gICAgLy8gZmFpbHMgaW4gQ2hyb21lIDY2LVxuICAgIHx8IHJlc3VsdCAhPT0gJ2ExYzMnXG4gICAgLy8gdGhyb3dzIGluIFNhZmFyaVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8veCcsIHVuZGVmaW5lZCkuaG9zdCAhPT0gJ3gnO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgaXNJbnN0YW5jZSA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpO1xuICB2YXIgdGhhdDtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyAkRXJyb3IoKSwgaXNJbnN0YW5jZSA/IGdldFByb3RvdHlwZU9mKHRoaXMpIDogQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQgPSBpc0luc3RhbmNlID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsIFRPX1NUUklOR19UQUcsICdFcnJvcicpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yU3RhY2sodGhhdCwgJEFnZ3JlZ2F0ZUVycm9yLCB0aGF0LnN0YWNrLCAxKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBhcmd1bWVudHNbMl0pO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoJEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDIgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3RvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluY2x1ZGVzO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gRkY5OSsgYnVnXG52YXIgQlJPS0VOX09OX1NQQVJTRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1pbmNsdWRlcyAtLSBkZXRlY3Rpb25cbiAgcmV0dXJuICFBcnJheSgxKS5pbmNsdWRlcygpO1xufSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJST0tFTl9PTl9TUEFSU0UgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnaW5jbHVkZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxuLy8gYEFycmF5LmlzQXJyYXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5pc2FycmF5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNBcnJheTogaXNBcnJheVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLnNvbWU7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29tZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1mZi12ZXJzaW9uJyk7XG52YXIgSUVfT1JfRURHRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pZS1vci1lZGdlJyk7XG52YXIgVjggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC13ZWJraXQtdmVyc2lvbicpO1xuXG52YXIgdGVzdCA9IFtdO1xudmFyIG5hdGl2ZVNvcnQgPSB1bmN1cnJ5VGhpcyh0ZXN0LnNvcnQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyh0ZXN0LnB1c2gpO1xuXG4vLyBJRTgtXG52YXIgRkFJTFNfT05fVU5ERUZJTkVEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pO1xuLy8gVjggYnVnXG52YXIgRkFJTFNfT05fTlVMTCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KG51bGwpO1xufSk7XG4vLyBPbGQgV2ViS2l0XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvcnQnKTtcblxudmFyIFNUQUJMRV9TT1JUID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZmVhdHVyZSBkZXRlY3Rpb24gY2FuIGJlIHRvbyBzbG93LCBzbyBjaGVjayBlbmdpbmVzIHZlcnNpb25zXG4gIGlmIChWOCkgcmV0dXJuIFY4IDwgNzA7XG4gIGlmIChGRiAmJiBGRiA+IDMpIHJldHVybjtcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAzO1xuXG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNvZGUsIGNociwgdmFsdWUsIGluZGV4O1xuXG4gIC8vIGdlbmVyYXRlIGFuIGFycmF5IHdpdGggbW9yZSA1MTIgZWxlbWVudHMgKENoYWtyYSBhbmQgb2xkIFY4IGZhaWxzIG9ubHkgaW4gdGhpcyBjYXNlKVxuICBmb3IgKGNvZGUgPSA2NTsgY29kZSA8IDc2OyBjb2RlKyspIHtcbiAgICBjaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIDY2OiBjYXNlIDY5OiBjYXNlIDcwOiBjYXNlIDcyOiB2YWx1ZSA9IDM7IGJyZWFrO1xuICAgICAgY2FzZSA2ODogY2FzZSA3MTogdmFsdWUgPSA0OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHZhbHVlID0gMjtcbiAgICB9XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0NzsgaW5kZXgrKykge1xuICAgICAgdGVzdC5wdXNoKHsgazogY2hyICsgaW5kZXgsIHY6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRlc3Quc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi52IC0gYS52OyB9KTtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0ZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IHRlc3RbaW5kZXhdLmsuY2hhckF0KDApO1xuICAgIGlmIChyZXN1bHQuY2hhckF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gY2hyKSByZXN1bHQgKz0gY2hyO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gJ0RHQkVGSEFDSUpLJztcbn0pO1xuXG52YXIgRk9SQ0VEID0gRkFJTFNfT05fVU5ERUZJTkVEIHx8ICFGQUlMU19PTl9OVUxMIHx8ICFTVFJJQ1RfTUVUSE9EIHx8ICFTVEFCTEVfU09SVDtcblxudmFyIGdldFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGNvbXBhcmVmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gK2NvbXBhcmVmbih4LCB5KSB8fCAwO1xuICAgIHJldHVybiB0b1N0cmluZyh4KSA+IHRvU3RyaW5nKHkpID8gMSA6IC0xO1xuICB9O1xufTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSBhQ2FsbGFibGUoY29tcGFyZWZuKTtcblxuICAgIHZhciBhcnJheSA9IHRvT2JqZWN0KHRoaXMpO1xuXG4gICAgaWYgKFNUQUJMRV9TT1JUKSByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWQgPyBuYXRpdmVTb3J0KGFycmF5KSA6IG5hdGl2ZVNvcnQoYXJyYXksIGNvbXBhcmVmbik7XG5cbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgYXJyYXlMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShhcnJheSk7XG4gICAgdmFyIGl0ZW1zTGVuZ3RoLCBpbmRleDtcblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoaW5kZXggaW4gYXJyYXkpIHB1c2goaXRlbXMsIGFycmF5W2luZGV4XSk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxTb3J0KGl0ZW1zLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcblxuICAgIGl0ZW1zTGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlbXMpO1xuICAgIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IGl0ZW1zTGVuZ3RoKSBhcnJheVtpbmRleF0gPSBpdGVtc1tpbmRleCsrXTtcbiAgICB3aGlsZSAoaW5kZXggPCBhcnJheUxlbmd0aCkgZGVsZXRlUHJvcGVydHlPclRocm93KGFycmF5LCBpbmRleCsrKTtcblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRGF0ZSA9IERhdGU7XG52YXIgdGhpc1RpbWVWYWx1ZSA9IHVuY3VycnlUaGlzKCREYXRlLnByb3RvdHlwZS5nZXRUaW1lKTtcblxuLy8gYERhdGUubm93YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5ub3dcbiQoeyB0YXJnZXQ6ICdEYXRlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIG5vdzogZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiB0aGlzVGltZVZhbHVlKG5ldyAkRGF0ZSgpKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kYXRlLXRvLWlzby1zdHJpbmcnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE5hTikudG9KU09OKCkgIT09IG51bGxcbiAgICB8fCBjYWxsKERhdGUucHJvdG90eXBlLnRvSlNPTiwgeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUudG9KU09OYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9qc29uXG4kKHsgdGFyZ2V0OiAnRGF0ZScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTywgJ251bWJlcicpO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOlxuICAgICAgKCEoJ3RvSVNPU3RyaW5nJyBpbiBPKSAmJiBjbGFzc29mKE8pID09PSAnRGF0ZScpID8gY2FsbCh0b0lTT1N0cmluZywgTykgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwiLy8gZW1wdHlcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWxUaGlzLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBrZXksIGRlc2NyaXB0b3I7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5ID0ga2V5c1tpbmRleCsrXSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxzZXR0bGVkXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGxTZXR0bGVkOiBmdW5jdGlvbiBhbGxTZXR0bGVkKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGVycm9yIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UuYWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxudmFyIFBST01JU0VfQU5ZX0VSUk9SID0gJ05vIG9uZSBwcm9taXNlIHJlc29sdmVkJztcblxuLy8gYFByb21pc2UuYW55YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFueTogZnVuY3Rpb24gYW55KGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBBZ2dyZWdhdGVFcnJvciA9IGdldEJ1aWx0SW4oJ0FnZ3JlZ2F0ZUVycm9yJyk7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciBlcnJvcnMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgdmFyIGFscmVhZHlSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeVJlamVjdGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yc1tpbmRleF0gPSBlcnJvcjtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgUFJPTUlTRV9BTllfRVJST1IpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5DT05TVFJVQ1RPUjtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uUkVKRUNUSU9OX0VWRU5UO1xudmFyIE5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlNVQkNMQVNTSU5HO1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3I7XG52YXIgUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xuXG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWxUaGlzLmRpc3BhdGNoRXZlbnQpO1xudmFyIFVOSEFORExFRF9SRUpFQ1RJT04gPSAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnZhciBSRUpFQ1RJT05fSEFORExFRCA9ICdyZWplY3Rpb25oYW5kbGVkJztcbnZhciBQRU5ESU5HID0gMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcbnZhciBIQU5ETEVEID0gMTtcbnZhciBVTkhBTkRMRUQgPSAyO1xuXG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgY2FsbFJlYWN0aW9uID0gZnVuY3Rpb24gKHJlYWN0aW9uLCBzdGF0ZSkge1xuICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT09IEZVTEZJTExFRDtcbiAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gIHRyeSB7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICBjYWxsKHRoZW4sIHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgIHJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbnZhciBub3RpZnkgPSBmdW5jdGlvbiAoc3RhdGUsIGlzUmVqZWN0KSB7XG4gIGlmIChzdGF0ZS5ub3RpZmllZCkgcmV0dXJuO1xuICBzdGF0ZS5ub3RpZmllZCA9IHRydWU7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlYWN0aW9ucyA9IHN0YXRlLnJlYWN0aW9ucztcbiAgICB2YXIgcmVhY3Rpb247XG4gICAgd2hpbGUgKHJlYWN0aW9uID0gcmVhY3Rpb25zLmdldCgpKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQoc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsVGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFRoaXNbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWxUaGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWxUaGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcbiAgfTtcblxuICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICBJbnRlcm5hbC5wcm90b3R5cGUgPSBkZWZpbmVCdWlsdEluKFByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgcmVhY3Rpb24uZmFpbCA9IGlzQ2FsbGFibGUob25SZWplY3RlZCkgJiYgb25SZWplY3RlZDtcbiAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHN0YXRlLnN0YXRlID09PSBQRU5ESU5HKSBzdGF0ZS5yZWFjdGlvbnMuYWRkKHJlYWN0aW9uKTtcbiAgICBlbHNlIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgfSk7XG5cbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG5cbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGUudGhlbjtcblxuICAgIGlmICghTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcpIHtcbiAgICAgIC8vIG1ha2UgYFByb21pc2UjdGhlbmAgcmV0dXJuIGEgcG9seWZpbGxlZCBgUHJvbWlzZWAgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gU2FmYXJpIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwODI5XG52YXIgTk9OX0dFTkVSSUMgPSAhIU5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXRoZW5hYmxlIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXS5jYWxsKHsgdGhlbjogZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9IH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmZpbmFsbHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5maW5hbGx5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IE5PTl9HRU5FUklDIH0sIHtcbiAgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgZ2V0QnVpbHRJbignUHJvbWlzZScpKTtcbiAgICB2YXIgaXNGdW5jdGlvbiA9IGlzQ2FsbGFibGUob25GaW5hbGx5KTtcbiAgICByZXR1cm4gdGhpcy50aGVuKFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHksXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5XG4gICAgKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2ZpbmFsbHlgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnZmluYWxseSddO1xuICBpZiAoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdmaW5hbGx5JywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuYWxsJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2gnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UucmVqZWN0Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24nKTtcblxuLy8gYFByb21pc2UucmFjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmFjZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIHZhciBjYXBhYmlsaXR5UmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgY2FwYWJpbGl0eVJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcblxudmFyIFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG52YXIgQ0hFQ0tfV1JBUFBFUiA9IElTX1BVUkUgJiYgIUZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDSEVDS19XUkFQUEVSICYmIHRoaXMgPT09IFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbi8vIGBQcm9taXNlLndpdGhSZXNvbHZlcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS13aXRoLXJlc29sdmVyc1xuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgd2l0aFJlc29sdmVyczogZnVuY3Rpb24gd2l0aFJlc29sdmVycygpIHtcbiAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9taXNlOiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlLFxuICAgICAgcmVzb2x2ZTogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSxcbiAgICAgIHJlamVjdDogcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0XG4gICAgfTtcbiAgfVxufSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBkaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2RpZmZlcmVuY2UnKSB9LCB7XG4gIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2Vcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcnNlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxudmFyIElOQ09SUkVDVCA9ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpbnRlcnNlY3Rpb24nKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBlcy9uby1zZXQgLS0gdGVzdGluZ1xuICByZXR1cm4gU3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwgMiwgM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLCAyXSkpKSkgIT09ICczLDInO1xufSk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVCB9LCB7XG4gIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzRGlzam9pbnRGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1kaXNqb2ludC1mcm9tJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc0Rpc2pvaW50RnJvbScpIH0sIHtcbiAgaXNEaXNqb2ludEZyb206IGlzRGlzam9pbnRGcm9tXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3Vic2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1YnNldE9mJykgfSwge1xuICBpc1N1YnNldE9mOiBpc1N1YnNldE9mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzU3VwZXJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6ICFzZXRNZXRob2RBY2NlcHRTZXRMaWtlKCdpc1N1cGVyc2V0T2YnKSB9LCB7XG4gIGlzU3VwZXJzZXRPZjogaXNTdXBlcnNldE9mXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3RvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc3ltbWV0cmljRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnc3ltbWV0cmljRGlmZmVyZW5jZScpIH0sIHtcbiAgc3ltbWV0cmljRGlmZmVyZW5jZTogc3ltbWV0cmljRGlmZmVyZW5jZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdW5pb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3VuaW9uJykgfSwge1xuICB1bmlvbjogdW5pb25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zdHJpbmctZnJvbWNvZGVwb2ludCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG52YXIgSU5DT1JSRUNUX0xFTkdUSCA9ICEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9PSAxO1xuXG4vLyBgU3RyaW5nLmZyb21Db2RlUG9pbnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcuZnJvbWNvZGVwb2ludFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHN0YXQ6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IElOQ09SUkVDVF9MRU5HVEggfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBGRkZGKSAhPT0gY29kZSkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIGVsZW1lbnRzW2ldID0gY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCwgY29kZSAlIDB4NDAwICsgMHhEQzAwKTtcbiAgICB9IHJldHVybiBqb2luKGVsZW1lbnRzLCAnJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgbm90QVJlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3QtYS1yZWdleHAnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNvcnJlY3RJc1JlZ0V4cExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljJyk7XG5cbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFjb3JyZWN0SXNSZWdFeHBMb2dpYygnaW5jbHVkZXMnKSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+c3RyaW5nSW5kZXhPZihcbiAgICAgIHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpLFxuICAgICAgdG9TdHJpbmcobm90QVJlZ0V4cChzZWFyY2hTdHJpbmcpKSxcbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ1RyaW1NZXRob2QoJ3RyaW0nKSB9LCB7XG4gIHRyaW06IGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWxUaGlzLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbFRoaXMuUU9iamVjdDtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBmYWxsYmFja0RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59O1xuXG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPT0gNztcbn0pID8gZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5hdGl2ZU9iamVjdENyZWF0ZShudWxsKSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBjYWxsKG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLCB0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywgUCkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzT3duKHRoaXMsIFApIHx8ICFoYXNPd24oQWxsU3ltYm9scywgUCkgfHwgaGFzT3duKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdXG4gICAgPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhKGhhc093bihpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSkgcHVzaChyZXN1bHQsIGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiAoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICBwdXNoKHJlc3VsdCwgQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAoaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciAkdGhpcyA9IHRoaXMgPT09IHVuZGVmaW5lZCA/IGdsb2JhbFRoaXMgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmhhc0luc3RhbmNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaGFzaW5zdGFuY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaEFsbGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoYWxsXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucmVwbGFjZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnJlcGxhY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zZWFyY2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zZWFyY2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc2VhcmNoJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwZWNpZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGVjaWVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BsaXRgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGxpdFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGxpdCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdldEJ1aWx0SW4oJ1N5bWJvbCcpLCAnU3ltYm9sJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnVuc2NvcGFibGVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudW5zY29wYWJsZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIE1FVEFEQVRBID0gd2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vLyBGdW5jdGlvbi5wcm90b3R5cGVbQEBtZXRhZGF0YV1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuaWYgKEZ1bmN0aW9uUHJvdG90eXBlW01FVEFEQVRBXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBNRVRBREFUQSwge1xuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hc3luYy1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jRGlzcG9zZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5jdXN0b21NYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdjdXN0b21NYXRjaGVyJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2Rpc3Bvc2UnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZGAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBuYW1lOiAnaXNSZWdpc3RlcmVkU3ltYm9sJyB9LCB7XG4gIGlzUmVnaXN0ZXJlZDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpc1dlbGxLbm93blN5bWJvbDogaXNXZWxsS25vd25TeW1ib2xcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hlcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hlcicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFLZXlgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGFLZXknKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3JzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlQWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgY2xlYXJJbW1lZGlhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLmNsZWFyO1xuXG4vLyBgY2xlYXJJbW1lZGlhdGVgIG1ldGhvZFxuLy8gaHR0cDovL3czYy5naXRodWIuaW8vc2V0SW1tZWRpYXRlLyNzaS1jbGVhckltbWVkaWF0ZVxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiBnbG9iYWxUaGlzLmNsZWFySW1tZWRpYXRlICE9PSBjbGVhckltbWVkaWF0ZSB9LCB7XG4gIGNsZWFySW1tZWRpYXRlOiBjbGVhckltbWVkaWF0ZVxufSk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHNldFRvU3RyaW5nVGFnKGdsb2JhbFRoaXNbQ09MTEVDVElPTl9OQU1FXSwgQ09MTEVDVElPTl9OQU1FKTtcbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5jbGVhci1pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnNldC1pbW1lZGlhdGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzZXRUYXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbnZhciBzZXRJbW1lZGlhdGUgPSBnbG9iYWxUaGlzLnNldEltbWVkaWF0ZSA/IHNjaGVkdWxlcnNGaXgoc2V0VGFzaywgZmFsc2UpIDogc2V0VGFzaztcblxuLy8gYHNldEltbWVkaWF0ZWAgbWV0aG9kXG4vLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvI3NpLXNldEltbWVkaWF0ZVxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiBnbG9iYWxUaGlzLnNldEltbWVkaWF0ZSAhPT0gc2V0SW1tZWRpYXRlIH0sIHtcbiAgc2V0SW1tZWRpYXRlOiBzZXRJbW1lZGlhdGVcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWxUaGlzLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWxUaGlzLnNldEludGVydmFsICE9PSBzZXRJbnRlcnZhbCB9LCB7XG4gIHNldEludGVydmFsOiBzZXRJbnRlcnZhbFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsVGhpcy5zZXRUaW1lb3V0LCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRUaW1lb3V0IGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldHRpbWVvdXRcbiQoeyBnbG9iYWw6IHRydWUsIGJpbmQ6IHRydWUsIGZvcmNlZDogZ2xvYmFsVGhpcy5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5zZXQtaW50ZXJ2YWwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnNldC10aW1lb3V0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBpbiBjb3JlLWpzQDQsIG1vdmUgL21vZHVsZXMvIGRlcGVuZGVuY2llcyB0byBwdWJsaWMgZW50cmllcyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBieSB0b29scyBsaWtlIGBwcmVzZXQtZW52YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2FmZUdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2FmZS1nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVVNFX05BVElWRV9VUkwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXJsLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFVSTF9TRUFSQ0hfUEFSQU1TID0gJ1VSTFNlYXJjaFBhcmFtcyc7XG52YXIgVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IgPSBVUkxfU0VBUkNIX1BBUkFNUyArICdJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUGFyYW1zU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihVUkxfU0VBUkNIX1BBUkFNUyk7XG52YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IpO1xuXG52YXIgbmF0aXZlRmV0Y2ggPSBzYWZlR2V0QnVpbHRJbignZmV0Y2gnKTtcbnZhciBOYXRpdmVSZXF1ZXN0ID0gc2FmZUdldEJ1aWx0SW4oJ1JlcXVlc3QnKTtcbnZhciBIZWFkZXJzID0gc2FmZUdldEJ1aWx0SW4oJ0hlYWRlcnMnKTtcbnZhciBSZXF1ZXN0UHJvdG90eXBlID0gTmF0aXZlUmVxdWVzdCAmJiBOYXRpdmVSZXF1ZXN0LnByb3RvdHlwZTtcbnZhciBIZWFkZXJzUHJvdG90eXBlID0gSGVhZGVycyAmJiBIZWFkZXJzLnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBlbmNvZGVVUklDb21wb25lbnQgPSBnbG9iYWxUaGlzLmVuY29kZVVSSUNvbXBvbmVudDtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyIGZyb21Db2RlUG9pbnQgPSBnZXRCdWlsdEluKCdTdHJpbmcnLCAnZnJvbUNvZGVQb2ludCcpO1xudmFyICRwYXJzZUludCA9IHBhcnNlSW50O1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc2hpZnQgPSB1bmN1cnJ5VGhpcyhbXS5zaGlmdCk7XG52YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xuXG52YXIgcGx1cyA9IC9cXCsvZztcbnZhciBGQUxMQkFDS19SRVBMQUNFUiA9ICdcXHVGRkZEJztcbnZhciBWQUxJRF9IRVggPSAvXlswLTlhLWZdKyQvaTtcblxudmFyIHBhcnNlSGV4T2N0ZXQgPSBmdW5jdGlvbiAoc3RyaW5nLCBzdGFydCkge1xuICB2YXIgc3Vic3RyID0gc3RyaW5nU2xpY2Uoc3RyaW5nLCBzdGFydCwgc3RhcnQgKyAyKTtcbiAgaWYgKCFleGVjKFZBTElEX0hFWCwgc3Vic3RyKSkgcmV0dXJuIE5hTjtcblxuICByZXR1cm4gJHBhcnNlSW50KHN1YnN0ciwgMTYpO1xufTtcblxudmFyIGdldExlYWRpbmdPbmVzID0gZnVuY3Rpb24gKG9jdGV0KSB7XG4gIHZhciBjb3VudCA9IDA7XG4gIGZvciAodmFyIG1hc2sgPSAweDgwOyBtYXNrID4gMCAmJiAob2N0ZXQgJiBtYXNrKSAhPT0gMDsgbWFzayA+Pj0gMSkge1xuICAgIGNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufTtcblxudmFyIHV0ZjhEZWNvZGUgPSBmdW5jdGlvbiAob2N0ZXRzKSB7XG4gIHZhciBjb2RlUG9pbnQgPSBudWxsO1xuXG4gIHN3aXRjaCAob2N0ZXRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIGNvZGVQb2ludCA9IG9jdGV0c1swXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIGNvZGVQb2ludCA9IChvY3RldHNbMF0gJiAweDFGKSA8PCA2IHwgKG9jdGV0c1sxXSAmIDB4M0YpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgY29kZVBvaW50ID0gKG9jdGV0c1swXSAmIDB4MEYpIDw8IDEyIHwgKG9jdGV0c1sxXSAmIDB4M0YpIDw8IDYgfCAob2N0ZXRzWzJdICYgMHgzRik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6XG4gICAgICBjb2RlUG9pbnQgPSAob2N0ZXRzWzBdICYgMHgwNykgPDwgMTggfCAob2N0ZXRzWzFdICYgMHgzRikgPDwgMTIgfCAob2N0ZXRzWzJdICYgMHgzRikgPDwgNiB8IChvY3RldHNbM10gJiAweDNGKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNvZGVQb2ludCA+IDB4MTBGRkZGID8gbnVsbCA6IGNvZGVQb2ludDtcbn07XG5cbnZhciBkZWNvZGUgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgaW5wdXQgPSByZXBsYWNlKGlucHV0LCBwbHVzLCAnICcpO1xuICB2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIHZhciBkZWNvZGVkQ2hhciA9IGNoYXJBdChpbnB1dCwgaSk7XG5cbiAgICBpZiAoZGVjb2RlZENoYXIgPT09ICclJykge1xuICAgICAgaWYgKGNoYXJBdChpbnB1dCwgaSArIDEpID09PSAnJScgfHwgaSArIDMgPiBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ICs9ICclJztcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9jdGV0ID0gcGFyc2VIZXhPY3RldChpbnB1dCwgaSArIDEpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKG9jdGV0ICE9PSBvY3RldCkge1xuICAgICAgICByZXN1bHQgKz0gZGVjb2RlZENoYXI7XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGkgKz0gMjtcbiAgICAgIHZhciBieXRlU2VxdWVuY2VMZW5ndGggPSBnZXRMZWFkaW5nT25lcyhvY3RldCk7XG5cbiAgICAgIGlmIChieXRlU2VxdWVuY2VMZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVjb2RlZENoYXIgPSBmcm9tQ2hhckNvZGUob2N0ZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJ5dGVTZXF1ZW5jZUxlbmd0aCA9PT0gMSB8fCBieXRlU2VxdWVuY2VMZW5ndGggPiA0KSB7XG4gICAgICAgICAgcmVzdWx0ICs9IEZBTExCQUNLX1JFUExBQ0VSO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvY3RldHMgPSBbb2N0ZXRdO1xuICAgICAgICB2YXIgc2VxdWVuY2VJbmRleCA9IDE7XG5cbiAgICAgICAgd2hpbGUgKHNlcXVlbmNlSW5kZXggPCBieXRlU2VxdWVuY2VMZW5ndGgpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgaWYgKGkgKyAzID4gbGVuZ3RoIHx8IGNoYXJBdChpbnB1dCwgaSkgIT09ICclJykgYnJlYWs7XG5cbiAgICAgICAgICB2YXIgbmV4dEJ5dGUgPSBwYXJzZUhleE9jdGV0KGlucHV0LCBpICsgMSk7XG5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgICAgIGlmIChuZXh0Qnl0ZSAhPT0gbmV4dEJ5dGUpIHtcbiAgICAgICAgICAgIGkgKz0gMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmV4dEJ5dGUgPiAxOTEgfHwgbmV4dEJ5dGUgPCAxMjgpIGJyZWFrO1xuXG4gICAgICAgICAgcHVzaChvY3RldHMsIG5leHRCeXRlKTtcbiAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgc2VxdWVuY2VJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9jdGV0cy5sZW5ndGggIT09IGJ5dGVTZXF1ZW5jZUxlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdCArPSBGQUxMQkFDS19SRVBMQUNFUjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb2RlUG9pbnQgPSB1dGY4RGVjb2RlKG9jdGV0cyk7XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQgKz0gRkFMTEJBQ0tfUkVQTEFDRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVjb2RlZENoYXIgPSBmcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgKz0gZGVjb2RlZENoYXI7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBmaW5kID0gL1shJygpfl18JTIwL2c7XG5cbnZhciByZXBsYWNlbWVudHMgPSB7XG4gICchJzogJyUyMScsXG4gIFwiJ1wiOiAnJTI3JyxcbiAgJygnOiAnJTI4JyxcbiAgJyknOiAnJTI5JyxcbiAgJ34nOiAnJTdFJyxcbiAgJyUyMCc6ICcrJ1xufTtcblxudmFyIHJlcGxhY2VyID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gIHJldHVybiByZXBsYWNlbWVudHNbbWF0Y2hdO1xufTtcblxudmFyIHNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gcmVwbGFjZShlbmNvZGVVUklDb21wb25lbnQoaXQpLCBmaW5kLCByZXBsYWNlcik7XG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKGZ1bmN0aW9uIEl0ZXJhdG9yKHBhcmFtcywga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUixcbiAgICB0YXJnZXQ6IGdldEludGVybmFsUGFyYW1zU3RhdGUocGFyYW1zKS5lbnRyaWVzLFxuICAgIGluZGV4OiAwLFxuICAgIGtpbmQ6IGtpbmRcbiAgfSk7XG59LCBVUkxfU0VBUkNIX1BBUkFNUywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHZhciBlbnRyeSA9IHRhcmdldFtpbmRleF07XG4gIHN3aXRjaCAoc3RhdGUua2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xufSwgdHJ1ZSk7XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNTdGF0ZSA9IGZ1bmN0aW9uIChpbml0KSB7XG4gIHRoaXMuZW50cmllcyA9IFtdO1xuICB0aGlzLnVybCA9IG51bGw7XG5cbiAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChpc09iamVjdChpbml0KSkgdGhpcy5wYXJzZU9iamVjdChpbml0KTtcbiAgICBlbHNlIHRoaXMucGFyc2VRdWVyeSh0eXBlb2YgaW5pdCA9PSAnc3RyaW5nJyA/IGNoYXJBdChpbml0LCAwKSA9PT0gJz8nID8gc3RyaW5nU2xpY2UoaW5pdCwgMSkgOiBpbml0IDogJHRvU3RyaW5nKGluaXQpKTtcbiAgfVxufTtcblxuVVJMU2VhcmNoUGFyYW1zU3RhdGUucHJvdG90eXBlID0ge1xuICB0eXBlOiBVUkxfU0VBUkNIX1BBUkFNUyxcbiAgYmluZFVSTDogZnVuY3Rpb24gKHVybCkge1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH0sXG4gIHBhcnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2Qob2JqZWN0KTtcbiAgICB2YXIgaXRlcmF0b3IsIG5leHQsIHN0ZXAsIGVudHJ5SXRlcmF0b3IsIGVudHJ5TmV4dCwgZmlyc3QsIHNlY29uZDtcblxuICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihvYmplY3QsIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgICAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgICAgIGVudHJ5SXRlcmF0b3IgPSBnZXRJdGVyYXRvcihhbk9iamVjdChzdGVwLnZhbHVlKSk7XG4gICAgICAgIGVudHJ5TmV4dCA9IGVudHJ5SXRlcmF0b3IubmV4dDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChmaXJzdCA9IGNhbGwoZW50cnlOZXh0LCBlbnRyeUl0ZXJhdG9yKSkuZG9uZSB8fFxuICAgICAgICAgIChzZWNvbmQgPSBjYWxsKGVudHJ5TmV4dCwgZW50cnlJdGVyYXRvcikpLmRvbmUgfHxcbiAgICAgICAgICAhY2FsbChlbnRyeU5leHQsIGVudHJ5SXRlcmF0b3IpLmRvbmVcbiAgICAgICAgKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBzZXF1ZW5jZSB3aXRoIGxlbmd0aCAyJyk7XG4gICAgICAgIHB1c2goZW50cmllcywgeyBrZXk6ICR0b1N0cmluZyhmaXJzdC52YWx1ZSksIHZhbHVlOiAkdG9TdHJpbmcoc2Vjb25kLnZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgZm9yICh2YXIga2V5IGluIG9iamVjdCkgaWYgKGhhc093bihvYmplY3QsIGtleSkpIHtcbiAgICAgIHB1c2goZW50cmllcywgeyBrZXk6IGtleSwgdmFsdWU6ICR0b1N0cmluZyhvYmplY3Rba2V5XSkgfSk7XG4gICAgfVxuICB9LFxuICBwYXJzZVF1ZXJ5OiBmdW5jdGlvbiAocXVlcnkpIHtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzcGxpdChxdWVyeSwgJyYnKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgYXR0cmlidXRlLCBlbnRyeTtcbiAgICAgIHdoaWxlIChpbmRleCA8IGF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaW5kZXgrK107XG4gICAgICAgIGlmIChhdHRyaWJ1dGUubGVuZ3RoKSB7XG4gICAgICAgICAgZW50cnkgPSBzcGxpdChhdHRyaWJ1dGUsICc9Jyk7XG4gICAgICAgICAgcHVzaChlbnRyaWVzLCB7XG4gICAgICAgICAgICBrZXk6IGRlY29kZShzaGlmdChlbnRyeSkpLFxuICAgICAgICAgICAgdmFsdWU6IGRlY29kZShqb2luKGVudHJ5LCAnPScpKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBzZXJpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICAgIHB1c2gocmVzdWx0LCBzZXJpYWxpemUoZW50cnkua2V5KSArICc9JyArIHNlcmlhbGl6ZShlbnRyeS52YWx1ZSkpO1xuICAgIH0gcmV0dXJuIGpvaW4ocmVzdWx0LCAnJicpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLnBhcnNlUXVlcnkodGhpcy51cmwucXVlcnkpO1xuICB9LFxuICB1cGRhdGVVUkw6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy51cmwpIHRoaXMudXJsLnVwZGF0ZSgpO1xuICB9XG59O1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtdXJsc2VhcmNocGFyYW1zXG52YXIgVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBVUkxTZWFyY2hQYXJhbXMoLyogaW5pdCAqLykge1xuICBhbkluc3RhbmNlKHRoaXMsIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSk7XG4gIHZhciBpbml0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQ7XG4gIHZhciBzdGF0ZSA9IHNldEludGVybmFsU3RhdGUodGhpcywgbmV3IFVSTFNlYXJjaFBhcmFtc1N0YXRlKGluaXQpKTtcbiAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5zaXplID0gc3RhdGUuZW50cmllcy5sZW5ndGg7XG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlID0gVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG5kZWZpbmVCdWlsdElucyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsIHtcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuYXBwZW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWFwcGVuZFxuICBhcHBlbmQ6IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMik7XG4gICAgcHVzaChzdGF0ZS5lbnRyaWVzLCB7IGtleTogJHRvU3RyaW5nKG5hbWUpLCB2YWx1ZTogJHRvU3RyaW5nKHZhbHVlKSB9KTtcbiAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLmxlbmd0aCsrO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5kZWxldGVgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZGVsZXRlXG4gICdkZWxldGUnOiBmdW5jdGlvbiAobmFtZSAvKiAsIHZhbHVlICovKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGVudHJpZXMgPSBzdGF0ZS5lbnRyaWVzO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyICR2YWx1ZSA9IGxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG4gICAgdmFyIHZhbHVlID0gJHZhbHVlID09PSB1bmRlZmluZWQgPyAkdmFsdWUgOiAkdG9TdHJpbmcoJHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSAmJiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBlbnRyeS52YWx1ZSA9PT0gdmFsdWUpKSB7XG4gICAgICAgIHNwbGljZShlbnRyaWVzLCBpbmRleCwgMSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgIH0gZWxzZSBpbmRleCsrO1xuICAgIH1cbiAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLnNpemUgPSBlbnRyaWVzLmxlbmd0aDtcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZ2V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWdldFxuICBnZXQ6IGZ1bmN0aW9uIGdldChuYW1lKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoZW50cmllc1tpbmRleF0ua2V5ID09PSBrZXkpIHJldHVybiBlbnRyaWVzW2luZGV4XS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmdldEFsbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1nZXRhbGxcbiAgZ2V0QWxsOiBmdW5jdGlvbiBnZXRBbGwobmFtZSkge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChlbnRyaWVzW2luZGV4XS5rZXkgPT09IGtleSkgcHVzaChyZXN1bHQsIGVudHJpZXNbaW5kZXhdLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaGFzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWhhc1xuICBoYXM6IGZ1bmN0aW9uIGhhcyhuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgdmFsdWUgPSAkdmFsdWUgPT09IHVuZGVmaW5lZCA/ICR2YWx1ZSA6ICR0b1N0cmluZygkdmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkgJiYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgZW50cnkudmFsdWUgPT09IHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLXNldFxuICBzZXQ6IGZ1bmN0aW9uIHNldChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGVudHJpZXMgPSBzdGF0ZS5lbnRyaWVzO1xuICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIHZhbCA9ICR0b1N0cmluZyh2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZW50cnk7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGZvdW5kKSBzcGxpY2UoZW50cmllcywgaW5kZXgtLSwgMSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZvdW5kKSBwdXNoKGVudHJpZXMsIHsga2V5OiBrZXksIHZhbHVlOiB2YWwgfSk7XG4gICAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5zaXplID0gZW50cmllcy5sZW5ndGg7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtc29ydFxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KCkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgYXJyYXlTb3J0KHN0YXRlLmVudHJpZXMsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5rZXkgPiBiLmtleSA/IDEgOiAtMTtcbiAgICB9KTtcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgfVxuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5rZXlzYCBtZXRob2RcbiAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICdrZXlzJyk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ3ZhbHVlcycpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2RcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICdlbnRyaWVzJyk7XG4gIH1cbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuZGVmaW5lQnVpbHRJbihVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsIElURVJBVE9SLCBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZW50cmllcywgeyBuYW1lOiAnZW50cmllcycgfSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsc2VhcmNocGFyYW1zLXN0cmluZ2lmaWNhdGlvbi1iZWhhdmlvclxuZGVmaW5lQnVpbHRJbihVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5zZXJpYWxpemUoKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2l6ZWAgZ2V0dGVyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3VybC9wdWxsLzczNFxuaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgZ2V0OiBmdW5jdGlvbiBzaXplKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXMubGVuZ3RoO1xuICB9LFxuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciwgVVJMX1NFQVJDSF9QQVJBTVMpO1xuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwgfSwge1xuICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yXG59KTtcblxuLy8gV3JhcCBgZmV0Y2hgIGFuZCBgUmVxdWVzdGAgZm9yIGNvcnJlY3Qgd29yayB3aXRoIHBvbHlmaWxsZWQgYFVSTFNlYXJjaFBhcmFtc2BcbmlmICghVVNFX05BVElWRV9VUkwgJiYgaXNDYWxsYWJsZShIZWFkZXJzKSkge1xuICB2YXIgaGVhZGVyc0hhcyA9IHVuY3VycnlUaGlzKEhlYWRlcnNQcm90b3R5cGUuaGFzKTtcbiAgdmFyIGhlYWRlcnNTZXQgPSB1bmN1cnJ5VGhpcyhIZWFkZXJzUHJvdG90eXBlLnNldCk7XG5cbiAgdmFyIHdyYXBSZXF1ZXN0T3B0aW9ucyA9IGZ1bmN0aW9uIChpbml0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGluaXQpKSB7XG4gICAgICB2YXIgYm9keSA9IGluaXQuYm9keTtcbiAgICAgIHZhciBoZWFkZXJzO1xuICAgICAgaWYgKGNsYXNzb2YoYm9keSkgPT09IFVSTF9TRUFSQ0hfUEFSQU1TKSB7XG4gICAgICAgIGhlYWRlcnMgPSBpbml0LmhlYWRlcnMgPyBuZXcgSGVhZGVycyhpbml0LmhlYWRlcnMpIDogbmV3IEhlYWRlcnMoKTtcbiAgICAgICAgaWYgKCFoZWFkZXJzSGFzKGhlYWRlcnMsICdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICAgIGhlYWRlcnNTZXQoaGVhZGVycywgJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGUoaW5pdCwge1xuICAgICAgICAgIGJvZHk6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCAkdG9TdHJpbmcoYm9keSkpLFxuICAgICAgICAgIGhlYWRlcnM6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBoZWFkZXJzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IHJldHVybiBpbml0O1xuICB9O1xuXG4gIGlmIChpc0NhbGxhYmxlKG5hdGl2ZUZldGNoKSkge1xuICAgICQoeyBnbG9iYWw6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGRvbnRDYWxsR2V0U2V0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgICByZXR1cm4gbmF0aXZlRmV0Y2goaW5wdXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gd3JhcFJlcXVlc3RPcHRpb25zKGFyZ3VtZW50c1sxXSkgOiB7fSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNDYWxsYWJsZShOYXRpdmVSZXF1ZXN0KSkge1xuICAgIHZhciBSZXF1ZXN0Q29uc3RydWN0b3IgPSBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCBSZXF1ZXN0UHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBuZXcgTmF0aXZlUmVxdWVzdChpbnB1dCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyB3cmFwUmVxdWVzdE9wdGlvbnMoYXJndW1lbnRzWzFdKSA6IHt9KTtcbiAgICB9O1xuXG4gICAgUmVxdWVzdFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlcXVlc3RDb25zdHJ1Y3RvcjtcbiAgICBSZXF1ZXN0Q29uc3RydWN0b3IucHJvdG90eXBlID0gUmVxdWVzdFByb3RvdHlwZTtcblxuICAgICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBkb250Q2FsbEdldFNldDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIFJlcXVlc3Q6IFJlcXVlc3RDb25zdHJ1Y3RvclxuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLFxuICBnZXRTdGF0ZTogZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZVxufTtcbiIsIi8vIGVtcHR5XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyByZXBsYWNlZCB0byBtb2R1bGUgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmNvbnN0cnVjdG9yJyk7XG4iLCIvLyBlbXB0eVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBVU0VfTkFUSVZFX1VSTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciBVUkwgPSBnZXRCdWlsdEluKCdVUkwnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80NzUwNVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rlbm9sYW5kL2Rlbm8vaXNzdWVzLzE4ODkzXG52YXIgVEhST1dTX1dJVEhPVVRfQVJHVU1FTlRTID0gVVNFX05BVElWRV9VUkwgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICBVUkwuY2FuUGFyc2UoKTtcbn0pO1xuXG4vLyBCdW4gfiAxLjAuMzAgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzkyNTBcbnZhciBXUk9OR19BUklUWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFVSTC5jYW5QYXJzZS5sZW5ndGggIT09IDE7XG59KTtcblxuLy8gYFVSTC5jYW5QYXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtY2FucGFyc2VcbiQoeyB0YXJnZXQ6ICdVUkwnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFUSFJPV1NfV0lUSE9VVF9BUkdVTUVOVFMgfHwgV1JPTkdfQVJJVFkgfSwge1xuICBjYW5QYXJzZTogZnVuY3Rpb24gY2FuUGFyc2UodXJsKSB7XG4gICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciB1cmxTdHJpbmcgPSB0b1N0cmluZyh1cmwpO1xuICAgIHZhciBiYXNlID0gbGVuZ3RoIDwgMiB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRvU3RyaW5nKGFyZ3VtZW50c1sxXSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhIW5ldyBVUkwodXJsU3RyaW5nLCBiYXNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBpbiBjb3JlLWpzQDQsIG1vdmUgL21vZHVsZXMvIGRlcGVuZGVuY2llcyB0byBwdWJsaWMgZW50cmllcyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBieSB0b29scyBsaWtlIGBwcmVzZXQtZW52YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVVNFX05BVElWRV9VUkwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXJsLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG52YXIgYXJyYXlGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY29kZUF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jb2RlQXQ7XG52YXIgdG9BU0NJSSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcHVueWNvZGUtdG8tYXNjaWknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgVVJMU2VhcmNoUGFyYW1zTW9kdWxlID0gcmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuY29uc3RydWN0b3InKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxVUkxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKCdVUkwnKTtcbnZhciBVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuVVJMU2VhcmNoUGFyYW1zO1xudmFyIGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuZ2V0U3RhdGU7XG5cbnZhciBOYXRpdmVVUkwgPSBnbG9iYWxUaGlzLlVSTDtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBwYXJzZUludCA9IGdsb2JhbFRoaXMucGFyc2VJbnQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xudmFyIHBvcCA9IHVuY3VycnlUaGlzKFtdLnBvcCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzaGlmdCA9IHVuY3VycnlUaGlzKFtdLnNoaWZ0KTtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciB0b0xvd2VyQ2FzZSA9IHVuY3VycnlUaGlzKCcnLnRvTG93ZXJDYXNlKTtcbnZhciB1bnNoaWZ0ID0gdW5jdXJyeVRoaXMoW10udW5zaGlmdCk7XG5cbnZhciBJTlZBTElEX0FVVEhPUklUWSA9ICdJbnZhbGlkIGF1dGhvcml0eSc7XG52YXIgSU5WQUxJRF9TQ0hFTUUgPSAnSW52YWxpZCBzY2hlbWUnO1xudmFyIElOVkFMSURfSE9TVCA9ICdJbnZhbGlkIGhvc3QnO1xudmFyIElOVkFMSURfUE9SVCA9ICdJbnZhbGlkIHBvcnQnO1xuXG52YXIgQUxQSEEgPSAvW2Etel0vaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tb2JzY3VyZS1yYW5nZSAtLSBzYWZlXG52YXIgQUxQSEFOVU1FUklDID0gL1tcXGQrLS5hLXpdL2k7XG52YXIgRElHSVQgPSAvXFxkLztcbnZhciBIRVhfU1RBUlQgPSAvXjB4L2k7XG52YXIgT0NUID0gL15bMC03XSskLztcbnZhciBERUMgPSAvXlxcZCskLztcbnZhciBIRVggPSAvXltcXGRhLWZdKyQvaTtcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1jb250cm9sLWNoYXJhY3RlciAtLSBzYWZlICovXG52YXIgRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVCA9IC9bXFwwXFx0XFxuXFxyICMlLzo8Pj9AW1xcXFxcXF1efF0vO1xudmFyIEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlRfRVhDTFVESU5HX1BFUkNFTlQgPSAvW1xcMFxcdFxcblxcciAjLzo8Pj9AW1xcXFxcXF1efF0vO1xudmFyIExFQURJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSA9IC9eW1xcdTAwMDAtXFx1MDAyMF0rLztcbnZhciBUUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFID0gLyhefFteXFx1MDAwMC1cXHUwMDIwXSlbXFx1MDAwMC1cXHUwMDIwXSskLztcbnZhciBUQUJfQU5EX05FV19MSU5FID0gL1tcXHRcXG5cXHJdL2c7XG4vKiBlc2xpbnQtZW5hYmxlIHJlZ2V4cC9uby1jb250cm9sLWNoYXJhY3RlciAtLSBzYWZlICovXG52YXIgRU9GO1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2lwdjQtbnVtYmVyLXBhcnNlclxudmFyIHBhcnNlSVB2NCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgcGFydHMgPSBzcGxpdChpbnB1dCwgJy4nKTtcbiAgdmFyIHBhcnRzTGVuZ3RoLCBudW1iZXJzLCBpbmRleCwgcGFydCwgcmFkaXgsIG51bWJlciwgaXB2NDtcbiAgaWYgKHBhcnRzLmxlbmd0aCAmJiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICBwYXJ0cy5sZW5ndGgtLTtcbiAgfVxuICBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcbiAgaWYgKHBhcnRzTGVuZ3RoID4gNCkgcmV0dXJuIGlucHV0O1xuICBudW1iZXJzID0gW107XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgcGFydCA9IHBhcnRzW2luZGV4XTtcbiAgICBpZiAocGFydCA9PT0gJycpIHJldHVybiBpbnB1dDtcbiAgICByYWRpeCA9IDEwO1xuICAgIGlmIChwYXJ0Lmxlbmd0aCA+IDEgJiYgY2hhckF0KHBhcnQsIDApID09PSAnMCcpIHtcbiAgICAgIHJhZGl4ID0gZXhlYyhIRVhfU1RBUlQsIHBhcnQpID8gMTYgOiA4O1xuICAgICAgcGFydCA9IHN0cmluZ1NsaWNlKHBhcnQsIHJhZGl4ID09PSA4ID8gMSA6IDIpO1xuICAgIH1cbiAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgIG51bWJlciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZXhlYyhyYWRpeCA9PT0gMTAgPyBERUMgOiByYWRpeCA9PT0gOCA/IE9DVCA6IEhFWCwgcGFydCkpIHJldHVybiBpbnB1dDtcbiAgICAgIG51bWJlciA9IHBhcnNlSW50KHBhcnQsIHJhZGl4KTtcbiAgICB9XG4gICAgcHVzaChudW1iZXJzLCBudW1iZXIpO1xuICB9XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbnVtYmVyID0gbnVtYmVyc1tpbmRleF07XG4gICAgaWYgKGluZGV4ID09PSBwYXJ0c0xlbmd0aCAtIDEpIHtcbiAgICAgIGlmIChudW1iZXIgPj0gcG93KDI1NiwgNSAtIHBhcnRzTGVuZ3RoKSkgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChudW1iZXIgPiAyNTUpIHJldHVybiBudWxsO1xuICB9XG4gIGlwdjQgPSBwb3AobnVtYmVycyk7XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bWJlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaXB2NCArPSBudW1iZXJzW2luZGV4XSAqIHBvdygyNTYsIDMgLSBpbmRleCk7XG4gIH1cbiAgcmV0dXJuIGlwdjQ7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaXB2Ni1wYXJzZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50cyAtLSBUT0RPXG52YXIgcGFyc2VJUHY2ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBhZGRyZXNzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICB2YXIgcGllY2VJbmRleCA9IDA7XG4gIHZhciBjb21wcmVzcyA9IG51bGw7XG4gIHZhciBwb2ludGVyID0gMDtcbiAgdmFyIHZhbHVlLCBsZW5ndGgsIG51bWJlcnNTZWVuLCBpcHY0UGllY2UsIG51bWJlciwgc3dhcHMsIHN3YXA7XG5cbiAgdmFyIGNociA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2hhckF0KGlucHV0LCBwb2ludGVyKTtcbiAgfTtcblxuICBpZiAoY2hyKCkgPT09ICc6Jykge1xuICAgIGlmIChjaGFyQXQoaW5wdXQsIDEpICE9PSAnOicpIHJldHVybjtcbiAgICBwb2ludGVyICs9IDI7XG4gICAgcGllY2VJbmRleCsrO1xuICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcbiAgfVxuICB3aGlsZSAoY2hyKCkpIHtcbiAgICBpZiAocGllY2VJbmRleCA9PT0gOCkgcmV0dXJuO1xuICAgIGlmIChjaHIoKSA9PT0gJzonKSB7XG4gICAgICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHJldHVybjtcbiAgICAgIHBvaW50ZXIrKztcbiAgICAgIHBpZWNlSW5kZXgrKztcbiAgICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YWx1ZSA9IGxlbmd0aCA9IDA7XG4gICAgd2hpbGUgKGxlbmd0aCA8IDQgJiYgZXhlYyhIRVgsIGNocigpKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSAqIDE2ICsgcGFyc2VJbnQoY2hyKCksIDE2KTtcbiAgICAgIHBvaW50ZXIrKztcbiAgICAgIGxlbmd0aCsrO1xuICAgIH1cbiAgICBpZiAoY2hyKCkgPT09ICcuJykge1xuICAgICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgcG9pbnRlciAtPSBsZW5ndGg7XG4gICAgICBpZiAocGllY2VJbmRleCA+IDYpIHJldHVybjtcbiAgICAgIG51bWJlcnNTZWVuID0gMDtcbiAgICAgIHdoaWxlIChjaHIoKSkge1xuICAgICAgICBpcHY0UGllY2UgPSBudWxsO1xuICAgICAgICBpZiAobnVtYmVyc1NlZW4gPiAwKSB7XG4gICAgICAgICAgaWYgKGNocigpID09PSAnLicgJiYgbnVtYmVyc1NlZW4gPCA0KSBwb2ludGVyKys7XG4gICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFleGVjKERJR0lULCBjaHIoKSkpIHJldHVybjtcbiAgICAgICAgd2hpbGUgKGV4ZWMoRElHSVQsIGNocigpKSkge1xuICAgICAgICAgIG51bWJlciA9IHBhcnNlSW50KGNocigpLCAxMCk7XG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA9PT0gbnVsbCkgaXB2NFBpZWNlID0gbnVtYmVyO1xuICAgICAgICAgIGVsc2UgaWYgKGlwdjRQaWVjZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgIGVsc2UgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA+IDI1NSkgcmV0dXJuO1xuICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gYWRkcmVzc1twaWVjZUluZGV4XSAqIDI1NiArIGlwdjRQaWVjZTtcbiAgICAgICAgbnVtYmVyc1NlZW4rKztcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09PSAyIHx8IG51bWJlcnNTZWVuID09PSA0KSBwaWVjZUluZGV4Kys7XG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyc1NlZW4gIT09IDQpIHJldHVybjtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoY2hyKCkgPT09ICc6Jykge1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgaWYgKCFjaHIoKSkgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoY2hyKCkpIHJldHVybjtcbiAgICBhZGRyZXNzW3BpZWNlSW5kZXgrK10gPSB2YWx1ZTtcbiAgfVxuICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcbiAgICBzd2FwcyA9IHBpZWNlSW5kZXggLSBjb21wcmVzcztcbiAgICBwaWVjZUluZGV4ID0gNztcbiAgICB3aGlsZSAocGllY2VJbmRleCAhPT0gMCAmJiBzd2FwcyA+IDApIHtcbiAgICAgIHN3YXAgPSBhZGRyZXNzW3BpZWNlSW5kZXhdO1xuICAgICAgYWRkcmVzc1twaWVjZUluZGV4LS1dID0gYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV07XG4gICAgICBhZGRyZXNzW2NvbXByZXNzICsgLS1zd2Fwc10gPSBzd2FwO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwaWVjZUluZGV4ICE9PSA4KSByZXR1cm47XG4gIHJldHVybiBhZGRyZXNzO1xufTtcblxudmFyIGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlID0gZnVuY3Rpb24gKGlwdjYpIHtcbiAgdmFyIG1heEluZGV4ID0gbnVsbDtcbiAgdmFyIG1heExlbmd0aCA9IDE7XG4gIHZhciBjdXJyU3RhcnQgPSBudWxsO1xuICB2YXIgY3Vyckxlbmd0aCA9IDA7XG4gIHZhciBpbmRleCA9IDA7XG4gIGZvciAoOyBpbmRleCA8IDg7IGluZGV4KyspIHtcbiAgICBpZiAoaXB2NltpbmRleF0gIT09IDApIHtcbiAgICAgIGlmIChjdXJyTGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIG1heEluZGV4ID0gY3VyclN0YXJ0O1xuICAgICAgICBtYXhMZW5ndGggPSBjdXJyTGVuZ3RoO1xuICAgICAgfVxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcbiAgICAgIGN1cnJMZW5ndGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSBjdXJyU3RhcnQgPSBpbmRleDtcbiAgICAgICsrY3Vyckxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN1cnJMZW5ndGggPiBtYXhMZW5ndGggPyBjdXJyU3RhcnQgOiBtYXhJbmRleDtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaG9zdC1zZXJpYWxpemluZ1xudmFyIHNlcmlhbGl6ZUhvc3QgPSBmdW5jdGlvbiAoaG9zdCkge1xuICB2YXIgcmVzdWx0LCBpbmRleCwgY29tcHJlc3MsIGlnbm9yZTA7XG5cbiAgLy8gaXB2NFxuICBpZiAodHlwZW9mIGhvc3QgPT0gJ251bWJlcicpIHtcbiAgICByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0OyBpbmRleCsrKSB7XG4gICAgICB1bnNoaWZ0KHJlc3VsdCwgaG9zdCAlIDI1Nik7XG4gICAgICBob3N0ID0gZmxvb3IoaG9zdCAvIDI1Nik7XG4gICAgfVxuICAgIHJldHVybiBqb2luKHJlc3VsdCwgJy4nKTtcbiAgfVxuXG4gIC8vIGlwdjZcbiAgaWYgKHR5cGVvZiBob3N0ID09ICdvYmplY3QnKSB7XG4gICAgcmVzdWx0ID0gJyc7XG4gICAgY29tcHJlc3MgPSBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShob3N0KTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoaWdub3JlMCAmJiBob3N0W2luZGV4XSA9PT0gMCkgY29udGludWU7XG4gICAgICBpZiAoaWdub3JlMCkgaWdub3JlMCA9IGZhbHNlO1xuICAgICAgaWYgKGNvbXByZXNzID09PSBpbmRleCkge1xuICAgICAgICByZXN1bHQgKz0gaW5kZXggPyAnOicgOiAnOjonO1xuICAgICAgICBpZ25vcmUwID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBudW1iZXJUb1N0cmluZyhob3N0W2luZGV4XSwgMTYpO1xuICAgICAgICBpZiAoaW5kZXggPCA3KSByZXN1bHQgKz0gJzonO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJ1snICsgcmVzdWx0ICsgJ10nO1xuICB9XG5cbiAgcmV0dXJuIGhvc3Q7XG59O1xuXG52YXIgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCA9IHt9O1xudmFyIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCwge1xuICAnICc6IDEsICdcIic6IDEsICc8JzogMSwgJz4nOiAxLCAnYCc6IDFcbn0pO1xudmFyIHBhdGhQZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJyMnOiAxLCAnPyc6IDEsICd7JzogMSwgJ30nOiAxXG59KTtcbnZhciB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIHBhdGhQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcvJzogMSwgJzonOiAxLCAnOyc6IDEsICc9JzogMSwgJ0AnOiAxLCAnWyc6IDEsICdcXFxcJzogMSwgJ10nOiAxLCAnXic6IDEsICd8JzogMVxufSk7XG5cbnZhciBwZXJjZW50RW5jb2RlID0gZnVuY3Rpb24gKGNociwgc2V0KSB7XG4gIHZhciBjb2RlID0gY29kZUF0KGNociwgMCk7XG4gIHJldHVybiBjb2RlID4gMHgyMCAmJiBjb2RlIDwgMHg3RiAmJiAhaGFzT3duKHNldCwgY2hyKSA/IGNociA6IGVuY29kZVVSSUNvbXBvbmVudChjaHIpO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzcGVjaWFsLXNjaGVtZVxudmFyIHNwZWNpYWxTY2hlbWVzID0ge1xuICBmdHA6IDIxLFxuICBmaWxlOiBudWxsLFxuICBodHRwOiA4MCxcbiAgaHR0cHM6IDQ0MyxcbiAgd3M6IDgwLFxuICB3c3M6IDQ0M1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN3aW5kb3dzLWRyaXZlLWxldHRlclxudmFyIGlzV2luZG93c0RyaXZlTGV0dGVyID0gZnVuY3Rpb24gKHN0cmluZywgbm9ybWFsaXplZCkge1xuICB2YXIgc2Vjb25kO1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PT0gMiAmJiBleGVjKEFMUEhBLCBjaGFyQXQoc3RyaW5nLCAwKSlcbiAgICAmJiAoKHNlY29uZCA9IGNoYXJBdChzdHJpbmcsIDEpKSA9PT0gJzonIHx8ICghbm9ybWFsaXplZCAmJiBzZWNvbmQgPT09ICd8JykpO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdGFydC13aXRoLWEtd2luZG93cy1kcml2ZS1sZXR0ZXJcbnZhciBzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgdGhpcmQ7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID4gMSAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihzdHJpbmdTbGljZShzdHJpbmcsIDAsIDIpKSAmJiAoXG4gICAgc3RyaW5nLmxlbmd0aCA9PT0gMiB8fFxuICAgICgodGhpcmQgPSBjaGFyQXQoc3RyaW5nLCAyKSkgPT09ICcvJyB8fCB0aGlyZCA9PT0gJ1xcXFwnIHx8IHRoaXJkID09PSAnPycgfHwgdGhpcmQgPT09ICcjJylcbiAgKTtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc2luZ2xlLWRvdC1wYXRoLXNlZ21lbnRcbnZhciBpc1NpbmdsZURvdCA9IGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gIHJldHVybiBzZWdtZW50ID09PSAnLicgfHwgdG9Mb3dlckNhc2Uoc2VnbWVudCkgPT09ICclMmUnO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb3VibGUtZG90LXBhdGgtc2VnbWVudFxudmFyIGlzRG91YmxlRG90ID0gZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgc2VnbWVudCA9IHRvTG93ZXJDYXNlKHNlZ21lbnQpO1xuICByZXR1cm4gc2VnbWVudCA9PT0gJy4uJyB8fCBzZWdtZW50ID09PSAnJTJlLicgfHwgc2VnbWVudCA9PT0gJy4lMmUnIHx8IHNlZ21lbnQgPT09ICclMmUlMmUnO1xufTtcblxuLy8gU3RhdGVzOlxudmFyIFNDSEVNRV9TVEFSVCA9IHt9O1xudmFyIFNDSEVNRSA9IHt9O1xudmFyIE5PX1NDSEVNRSA9IHt9O1xudmFyIFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZID0ge307XG52YXIgUEFUSF9PUl9BVVRIT1JJVFkgPSB7fTtcbnZhciBSRUxBVElWRSA9IHt9O1xudmFyIFJFTEFUSVZFX1NMQVNIID0ge307XG52YXIgU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUyA9IHt9O1xudmFyIFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTID0ge307XG52YXIgQVVUSE9SSVRZID0ge307XG52YXIgSE9TVCA9IHt9O1xudmFyIEhPU1ROQU1FID0ge307XG52YXIgUE9SVCA9IHt9O1xudmFyIEZJTEUgPSB7fTtcbnZhciBGSUxFX1NMQVNIID0ge307XG52YXIgRklMRV9IT1NUID0ge307XG52YXIgUEFUSF9TVEFSVCA9IHt9O1xudmFyIFBBVEggPSB7fTtcbnZhciBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIID0ge307XG52YXIgUVVFUlkgPSB7fTtcbnZhciBGUkFHTUVOVCA9IHt9O1xuXG52YXIgVVJMU3RhdGUgPSBmdW5jdGlvbiAodXJsLCBpc0Jhc2UsIGJhc2UpIHtcbiAgdmFyIHVybFN0cmluZyA9ICR0b1N0cmluZyh1cmwpO1xuICB2YXIgYmFzZVN0YXRlLCBmYWlsdXJlLCBzZWFyY2hQYXJhbXM7XG4gIGlmIChpc0Jhc2UpIHtcbiAgICBmYWlsdXJlID0gdGhpcy5wYXJzZSh1cmxTdHJpbmcpO1xuICAgIGlmIChmYWlsdXJlKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZhaWx1cmUpO1xuICAgIHRoaXMuc2VhcmNoUGFyYW1zID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmFzZSAhPT0gdW5kZWZpbmVkKSBiYXNlU3RhdGUgPSBuZXcgVVJMU3RhdGUoYmFzZSwgdHJ1ZSk7XG4gICAgZmFpbHVyZSA9IHRoaXMucGFyc2UodXJsU3RyaW5nLCBudWxsLCBiYXNlU3RhdGUpO1xuICAgIGlmIChmYWlsdXJlKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZhaWx1cmUpO1xuICAgIHNlYXJjaFBhcmFtcyA9IGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUobmV3IFVSTFNlYXJjaFBhcmFtcygpKTtcbiAgICBzZWFyY2hQYXJhbXMuYmluZFVSTCh0aGlzKTtcbiAgICB0aGlzLnNlYXJjaFBhcmFtcyA9IHNlYXJjaFBhcmFtcztcbiAgfVxufTtcblxuVVJMU3RhdGUucHJvdG90eXBlID0ge1xuICB0eXBlOiAnVVJMJyxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHMgLS0gVE9ET1xuICBwYXJzZTogZnVuY3Rpb24gKGlucHV0LCBzdGF0ZU92ZXJyaWRlLCBiYXNlKSB7XG4gICAgdmFyIHVybCA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBTQ0hFTUVfU1RBUlQ7XG4gICAgdmFyIHBvaW50ZXIgPSAwO1xuICAgIHZhciBidWZmZXIgPSAnJztcbiAgICB2YXIgc2VlbkF0ID0gZmFsc2U7XG4gICAgdmFyIHNlZW5CcmFja2V0ID0gZmFsc2U7XG4gICAgdmFyIHNlZW5QYXNzd29yZFRva2VuID0gZmFsc2U7XG4gICAgdmFyIGNvZGVQb2ludHMsIGNociwgYnVmZmVyQ29kZVBvaW50cywgZmFpbHVyZTtcblxuICAgIGlucHV0ID0gJHRvU3RyaW5nKGlucHV0KTtcblxuICAgIGlmICghc3RhdGVPdmVycmlkZSkge1xuICAgICAgdXJsLnNjaGVtZSA9ICcnO1xuICAgICAgdXJsLnVzZXJuYW1lID0gJyc7XG4gICAgICB1cmwucGFzc3dvcmQgPSAnJztcbiAgICAgIHVybC5ob3N0ID0gbnVsbDtcbiAgICAgIHVybC5wb3J0ID0gbnVsbDtcbiAgICAgIHVybC5wYXRoID0gW107XG4gICAgICB1cmwucXVlcnkgPSBudWxsO1xuICAgICAgdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgIHVybC5jYW5ub3RCZUFCYXNlVVJMID0gZmFsc2U7XG4gICAgICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIExFQURJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSwgJycpO1xuICAgICAgaW5wdXQgPSByZXBsYWNlKGlucHV0LCBUUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFLCAnJDEnKTtcbiAgICB9XG5cbiAgICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIFRBQl9BTkRfTkVXX0xJTkUsICcnKTtcblxuICAgIGNvZGVQb2ludHMgPSBhcnJheUZyb20oaW5wdXQpO1xuXG4gICAgd2hpbGUgKHBvaW50ZXIgPD0gY29kZVBvaW50cy5sZW5ndGgpIHtcbiAgICAgIGNociA9IGNvZGVQb2ludHNbcG9pbnRlcl07XG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgIGNhc2UgU0NIRU1FX1NUQVJUOlxuICAgICAgICAgIGlmIChjaHIgJiYgZXhlYyhBTFBIQSwgY2hyKSkge1xuICAgICAgICAgICAgYnVmZmVyICs9IHRvTG93ZXJDYXNlKGNocik7XG4gICAgICAgICAgICBzdGF0ZSA9IFNDSEVNRTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IE5PX1NDSEVNRTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTQ0hFTUU6XG4gICAgICAgICAgaWYgKGNociAmJiAoZXhlYyhBTFBIQU5VTUVSSUMsIGNocikgfHwgY2hyID09PSAnKycgfHwgY2hyID09PSAnLScgfHwgY2hyID09PSAnLicpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gdG9Mb3dlckNhc2UoY2hyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJzonKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSAmJiAoXG4gICAgICAgICAgICAgICh1cmwuaXNTcGVjaWFsKCkgIT09IGhhc093bihzcGVjaWFsU2NoZW1lcywgYnVmZmVyKSkgfHxcbiAgICAgICAgICAgICAgKGJ1ZmZlciA9PT0gJ2ZpbGUnICYmICh1cmwuaW5jbHVkZXNDcmVkZW50aWFscygpIHx8IHVybC5wb3J0ICE9PSBudWxsKSkgfHxcbiAgICAgICAgICAgICAgKHVybC5zY2hlbWUgPT09ICdmaWxlJyAmJiAhdXJsLmhvc3QpXG4gICAgICAgICAgICApKSByZXR1cm47XG4gICAgICAgICAgICB1cmwuc2NoZW1lID0gYnVmZmVyO1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgaWYgKHVybC5pc1NwZWNpYWwoKSAmJiBzcGVjaWFsU2NoZW1lc1t1cmwuc2NoZW1lXSA9PT0gdXJsLnBvcnQpIHVybC5wb3J0ID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBpZiAodXJsLnNjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gRklMRTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLmlzU3BlY2lhbCgpICYmIGJhc2UgJiYgYmFzZS5zY2hlbWUgPT09IHVybC5zY2hlbWUpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLmlzU3BlY2lhbCgpKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50c1twb2ludGVyICsgMV0gPT09ICcvJykge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEhfT1JfQVVUSE9SSVRZO1xuICAgICAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XG4gICAgICAgICAgICAgIHB1c2godXJsLnBhdGgsICcnKTtcbiAgICAgICAgICAgICAgc3RhdGUgPSBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBOT19TQ0hFTUU7XG4gICAgICAgICAgICBwb2ludGVyID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBOT19TQ0hFTUU6XG4gICAgICAgICAgaWYgKCFiYXNlIHx8IChiYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgY2hyICE9PSAnIycpKSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgICAgaWYgKGJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLnNjaGVtZSA9IGJhc2Uuc2NoZW1lO1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlID0gYmFzZS5zY2hlbWUgPT09ICdmaWxlJyA/IEZJTEUgOiBSRUxBVElWRTtcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBjYXNlIFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZOlxuICAgICAgICAgIGlmIChjaHIgPT09ICcvJyAmJiBjb2RlUG9pbnRzW3BvaW50ZXIgKyAxXSA9PT0gJy8nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTO1xuICAgICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFJFTEFUSVZFO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFBBVEhfT1JfQVVUSE9SSVRZOlxuICAgICAgICAgIGlmIChjaHIgPT09ICcvJykge1xuICAgICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVMQVRJVkU6XG4gICAgICAgICAgdXJsLnNjaGVtZSA9IGJhc2Uuc2NoZW1lO1xuICAgICAgICAgIGlmIChjaHIgPT09IEVPRikge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnLycgfHwgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkpIHtcbiAgICAgICAgICAgIHN0YXRlID0gUkVMQVRJVkVfU0xBU0g7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5wYXRoLmxlbmd0aC0tO1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFJFTEFUSVZFX1NMQVNIOlxuICAgICAgICAgIGlmICh1cmwuaXNTcGVjaWFsKCkgJiYgKGNociA9PT0gJy8nIHx8IGNociA9PT0gJ1xcXFwnKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJy8nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEFVVEhPUklUWTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVM6XG4gICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgICBpZiAoY2hyICE9PSAnLycgfHwgY2hhckF0KGJ1ZmZlciwgcG9pbnRlciArIDEpICE9PSAnLycpIGNvbnRpbnVlO1xuICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTOlxuICAgICAgICAgIGlmIChjaHIgIT09ICcvJyAmJiBjaHIgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQVVUSE9SSVRZOlxuICAgICAgICAgIGlmIChjaHIgPT09ICdAJykge1xuICAgICAgICAgICAgaWYgKHNlZW5BdCkgYnVmZmVyID0gJyU0MCcgKyBidWZmZXI7XG4gICAgICAgICAgICBzZWVuQXQgPSB0cnVlO1xuICAgICAgICAgICAgYnVmZmVyQ29kZVBvaW50cyA9IGFycmF5RnJvbShidWZmZXIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJDb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBidWZmZXJDb2RlUG9pbnRzW2ldO1xuICAgICAgICAgICAgICBpZiAoY29kZVBvaW50ID09PSAnOicgJiYgIXNlZW5QYXNzd29yZFRva2VuKSB7XG4gICAgICAgICAgICAgICAgc2VlblBhc3N3b3JkVG9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBlbmNvZGVkQ29kZVBvaW50cyA9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50LCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgICAgICBpZiAoc2VlblBhc3N3b3JkVG9rZW4pIHVybC5wYXNzd29yZCArPSBlbmNvZGVkQ29kZVBvaW50cztcbiAgICAgICAgICAgICAgZWxzZSB1cmwudXNlcm5hbWUgKz0gZW5jb2RlZENvZGVQb2ludHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycgfHxcbiAgICAgICAgICAgIChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoc2VlbkF0ICYmIGJ1ZmZlciA9PT0gJycpIHJldHVybiBJTlZBTElEX0FVVEhPUklUWTtcbiAgICAgICAgICAgIHBvaW50ZXIgLT0gYXJyYXlGcm9tKGJ1ZmZlcikubGVuZ3RoICsgMTtcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBIT1NUO1xuICAgICAgICAgIH0gZWxzZSBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSE9TVDpcbiAgICAgICAgY2FzZSBIT1NUTkFNRTpcbiAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSAmJiB1cmwuc2NoZW1lID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgIHN0YXRlID0gRklMRV9IT1NUO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICc6JyAmJiAhc2VlbkJyYWNrZXQpIHtcbiAgICAgICAgICAgIGlmIChidWZmZXIgPT09ICcnKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgICAgICAgZmFpbHVyZSA9IHVybC5wYXJzZUhvc3QoYnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBQT1JUO1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgPT09IEhPU1ROQU1FKSByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnIHx8XG4gICAgICAgICAgICAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHVybC5pc1NwZWNpYWwoKSAmJiBidWZmZXIgPT09ICcnKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgYnVmZmVyID09PSAnJyAmJiAodXJsLmluY2x1ZGVzQ3JlZGVudGlhbHMoKSB8fCB1cmwucG9ydCAhPT0gbnVsbCkpIHJldHVybjtcbiAgICAgICAgICAgIGZhaWx1cmUgPSB1cmwucGFyc2VIb3N0KGJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNociA9PT0gJ1snKSBzZWVuQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgICBlbHNlIGlmIChjaHIgPT09ICddJykgc2VlbkJyYWNrZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFBPUlQ6XG4gICAgICAgICAgaWYgKGV4ZWMoRElHSVQsIGNocikpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnIHx8XG4gICAgICAgICAgICAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSB8fFxuICAgICAgICAgICAgc3RhdGVPdmVycmlkZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPT0gJycpIHtcbiAgICAgICAgICAgICAgdmFyIHBvcnQgPSBwYXJzZUludChidWZmZXIsIDEwKTtcbiAgICAgICAgICAgICAgaWYgKHBvcnQgPiAweEZGRkYpIHJldHVybiBJTlZBTElEX1BPUlQ7XG4gICAgICAgICAgICAgIHVybC5wb3J0ID0gKHVybC5pc1NwZWNpYWwoKSAmJiBwb3J0ID09PSBzcGVjaWFsU2NoZW1lc1t1cmwuc2NoZW1lXSkgPyBudWxsIDogcG9ydDtcbiAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHJldHVybiBJTlZBTElEX1BPUlQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGSUxFOlxuICAgICAgICAgIHVybC5zY2hlbWUgPSAnZmlsZSc7XG4gICAgICAgICAgaWYgKGNociA9PT0gJy8nIHx8IGNociA9PT0gJ1xcXFwnKSBzdGF0ZSA9IEZJTEVfU0xBU0g7XG4gICAgICAgICAgZWxzZSBpZiAoYmFzZSAmJiBiYXNlLnNjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNocikge1xuICAgICAgICAgICAgICBjYXNlIEVPRjpcbiAgICAgICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyKGpvaW4oYXJyYXlTbGljZShjb2RlUG9pbnRzLCBwb2ludGVyKSwgJycpKSkge1xuICAgICAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgIHVybC5zaG9ydGVuUGF0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGSUxFX1NMQVNIOlxuICAgICAgICAgIGlmIChjaHIgPT09ICcvJyB8fCBjaHIgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgc3RhdGUgPSBGSUxFX0hPU1Q7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJhc2UgJiYgYmFzZS5zY2hlbWUgPT09ICdmaWxlJyAmJiAhc3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlcihqb2luKGFycmF5U2xpY2UoY29kZVBvaW50cywgcG9pbnRlciksICcnKSkpIHtcbiAgICAgICAgICAgIGlmIChpc1dpbmRvd3NEcml2ZUxldHRlcihiYXNlLnBhdGhbMF0sIHRydWUpKSBwdXNoKHVybC5wYXRoLCBiYXNlLnBhdGhbMF0pO1xuICAgICAgICAgICAgZWxzZSB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIGNhc2UgRklMRV9IT1NUOlxuICAgICAgICAgIGlmIChjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fCBjaHIgPT09ICdcXFxcJyB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChidWZmZXIgPT09ICcnKSB7XG4gICAgICAgICAgICAgIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZhaWx1cmUgPSB1cmwucGFyc2VIb3N0KGJ1ZmZlcik7XG4gICAgICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICAgICAgaWYgKHVybC5ob3N0ID09PSAnbG9jYWxob3N0JykgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIH0gY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQQVRIX1NUQVJUOlxuICAgICAgICAgIGlmICh1cmwuaXNTcGVjaWFsKCkpIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGlmIChjaHIgIT09ICcvJyAmJiBjaHIgIT09ICdcXFxcJykgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSAmJiBjaHIgPT09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociAhPT0gRU9GKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBpZiAoY2hyICE9PSAnLycpIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQQVRIOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8XG4gICAgICAgICAgICAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSB8fFxuICAgICAgICAgICAgKCFzdGF0ZU92ZXJyaWRlICYmIChjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJykpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoaXNEb3VibGVEb3QoYnVmZmVyKSkge1xuICAgICAgICAgICAgICB1cmwuc2hvcnRlblBhdGgoKTtcbiAgICAgICAgICAgICAgaWYgKGNociAhPT0gJy8nICYmICEoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSkge1xuICAgICAgICAgICAgICAgIHB1c2godXJsLnBhdGgsICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1NpbmdsZURvdChidWZmZXIpKSB7XG4gICAgICAgICAgICAgIGlmIChjaHIgIT09ICcvJyAmJiAhKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkpIHtcbiAgICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09PSAnZmlsZScgJiYgIXVybC5wYXRoLmxlbmd0aCAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihidWZmZXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5ob3N0KSB1cmwuaG9zdCA9ICcnO1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNoYXJBdChidWZmZXIsIDApICsgJzonOyAvLyBub3JtYWxpemUgd2luZG93cyBkcml2ZSBsZXR0ZXJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCBidWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBpZiAodXJsLnNjaGVtZSA9PT0gJ2ZpbGUnICYmIChjaHIgPT09IEVPRiB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJykpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHVybC5wYXRoLmxlbmd0aCA+IDEgJiYgdXJsLnBhdGhbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgc2hpZnQodXJsLnBhdGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hyID09PSAnPycpIHtcbiAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gcGVyY2VudEVuY29kZShjaHIsIHBhdGhQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSDpcbiAgICAgICAgICBpZiAoY2hyID09PSAnPycpIHtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgIT09IEVPRikge1xuICAgICAgICAgICAgdXJsLnBhdGhbMF0gKz0gcGVyY2VudEVuY29kZShjaHIsIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBRVUVSWTpcbiAgICAgICAgICBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociAhPT0gRU9GKSB7XG4gICAgICAgICAgICBpZiAoY2hyID09PSBcIidcIiAmJiB1cmwuaXNTcGVjaWFsKCkpIHVybC5xdWVyeSArPSAnJTI3JztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNociA9PT0gJyMnKSB1cmwucXVlcnkgKz0gJyUyMyc7XG4gICAgICAgICAgICBlbHNlIHVybC5xdWVyeSArPSBwZXJjZW50RW5jb2RlKGNociwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIEZSQUdNRU5UOlxuICAgICAgICAgIGlmIChjaHIgIT09IEVPRikgdXJsLmZyYWdtZW50ICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwb2ludGVyKys7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2hvc3QtcGFyc2luZ1xuICBwYXJzZUhvc3Q6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHZhciByZXN1bHQsIGNvZGVQb2ludHMsIGluZGV4O1xuICAgIGlmIChjaGFyQXQoaW5wdXQsIDApID09PSAnWycpIHtcbiAgICAgIGlmIChjaGFyQXQoaW5wdXQsIGlucHV0Lmxlbmd0aCAtIDEpICE9PSAnXScpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICByZXN1bHQgPSBwYXJzZUlQdjYoc3RyaW5nU2xpY2UoaW5wdXQsIDEsIC0xKSk7XG4gICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdDtcbiAgICAvLyBvcGFxdWUgaG9zdFxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNTcGVjaWFsKCkpIHtcbiAgICAgIGlmIChleGVjKEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlRfRVhDTFVESU5HX1BFUkNFTlQsIGlucHV0KSkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHJlc3VsdCA9ICcnO1xuICAgICAgY29kZVBvaW50cyA9IGFycmF5RnJvbShpbnB1dCk7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjb2RlUG9pbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgKz0gcGVyY2VudEVuY29kZShjb2RlUG9pbnRzW2luZGV4XSwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3QgPSByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gdG9BU0NJSShpbnB1dCk7XG4gICAgICBpZiAoZXhlYyhGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5ULCBpbnB1dCkpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICByZXN1bHQgPSBwYXJzZUlQdjQoaW5wdXQpO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdDtcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY2Fubm90LWhhdmUtYS11c2VybmFtZS1wYXNzd29yZC1wb3J0XG4gIGNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhdGhpcy5ob3N0IHx8IHRoaXMuY2Fubm90QmVBQmFzZVVSTCB8fCB0aGlzLnNjaGVtZSA9PT0gJ2ZpbGUnO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2luY2x1ZGUtY3JlZGVudGlhbHNcbiAgaW5jbHVkZXNDcmVkZW50aWFsczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnVzZXJuYW1lICE9PSAnJyB8fCB0aGlzLnBhc3N3b3JkICE9PSAnJztcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpcy1zcGVjaWFsXG4gIGlzU3BlY2lhbDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBoYXNPd24oc3BlY2lhbFNjaGVtZXMsIHRoaXMuc2NoZW1lKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzaG9ydGVuLWEtdXJscy1wYXRoXG4gIHNob3J0ZW5QYXRoOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhdGggPSB0aGlzLnBhdGg7XG4gICAgdmFyIHBhdGhTaXplID0gcGF0aC5sZW5ndGg7XG4gICAgaWYgKHBhdGhTaXplICYmICh0aGlzLnNjaGVtZSAhPT0gJ2ZpbGUnIHx8IHBhdGhTaXplICE9PSAxIHx8ICFpc1dpbmRvd3NEcml2ZUxldHRlcihwYXRoWzBdLCB0cnVlKSkpIHtcbiAgICAgIHBhdGgubGVuZ3RoLS07XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLXNlcmlhbGl6ZXJcbiAgc2VyaWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybCA9IHRoaXM7XG4gICAgdmFyIHNjaGVtZSA9IHVybC5zY2hlbWU7XG4gICAgdmFyIHVzZXJuYW1lID0gdXJsLnVzZXJuYW1lO1xuICAgIHZhciBwYXNzd29yZCA9IHVybC5wYXNzd29yZDtcbiAgICB2YXIgaG9zdCA9IHVybC5ob3N0O1xuICAgIHZhciBwb3J0ID0gdXJsLnBvcnQ7XG4gICAgdmFyIHBhdGggPSB1cmwucGF0aDtcbiAgICB2YXIgcXVlcnkgPSB1cmwucXVlcnk7XG4gICAgdmFyIGZyYWdtZW50ID0gdXJsLmZyYWdtZW50O1xuICAgIHZhciBvdXRwdXQgPSBzY2hlbWUgKyAnOic7XG4gICAgaWYgKGhvc3QgIT09IG51bGwpIHtcbiAgICAgIG91dHB1dCArPSAnLy8nO1xuICAgICAgaWYgKHVybC5pbmNsdWRlc0NyZWRlbnRpYWxzKCkpIHtcbiAgICAgICAgb3V0cHV0ICs9IHVzZXJuYW1lICsgKHBhc3N3b3JkID8gJzonICsgcGFzc3dvcmQgOiAnJykgKyAnQCc7XG4gICAgICB9XG4gICAgICBvdXRwdXQgKz0gc2VyaWFsaXplSG9zdChob3N0KTtcbiAgICAgIGlmIChwb3J0ICE9PSBudWxsKSBvdXRwdXQgKz0gJzonICsgcG9ydDtcbiAgICB9IGVsc2UgaWYgKHNjaGVtZSA9PT0gJ2ZpbGUnKSBvdXRwdXQgKz0gJy8vJztcbiAgICBvdXRwdXQgKz0gdXJsLmNhbm5vdEJlQUJhc2VVUkwgPyBwYXRoWzBdIDogcGF0aC5sZW5ndGggPyAnLycgKyBqb2luKHBhdGgsICcvJykgOiAnJztcbiAgICBpZiAocXVlcnkgIT09IG51bGwpIG91dHB1dCArPSAnPycgKyBxdWVyeTtcbiAgICBpZiAoZnJhZ21lbnQgIT09IG51bGwpIG91dHB1dCArPSAnIycgKyBmcmFnbWVudDtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaHJlZlxuICBzZXRIcmVmOiBmdW5jdGlvbiAoaHJlZikge1xuICAgIHZhciBmYWlsdXJlID0gdGhpcy5wYXJzZShocmVmKTtcbiAgICBpZiAoZmFpbHVyZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICB0aGlzLnNlYXJjaFBhcmFtcy51cGRhdGUoKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLW9yaWdpblxuICBnZXRPcmlnaW46IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2NoZW1lID0gdGhpcy5zY2hlbWU7XG4gICAgdmFyIHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgaWYgKHNjaGVtZSA9PT0gJ2Jsb2InKSB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBVUkxDb25zdHJ1Y3RvcihzY2hlbWUucGF0aFswXSkub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBpZiAoc2NoZW1lID09PSAnZmlsZScgfHwgIXRoaXMuaXNTcGVjaWFsKCkpIHJldHVybiAnbnVsbCc7XG4gICAgcmV0dXJuIHNjaGVtZSArICc6Ly8nICsgc2VyaWFsaXplSG9zdCh0aGlzLmhvc3QpICsgKHBvcnQgIT09IG51bGwgPyAnOicgKyBwb3J0IDogJycpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcHJvdG9jb2xcbiAgZ2V0UHJvdG9jb2w6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWUgKyAnOic7XG4gIH0sXG4gIHNldFByb3RvY29sOiBmdW5jdGlvbiAocHJvdG9jb2wpIHtcbiAgICB0aGlzLnBhcnNlKCR0b1N0cmluZyhwcm90b2NvbCkgKyAnOicsIFNDSEVNRV9TVEFSVCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC11c2VybmFtZVxuICBnZXRVc2VybmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnVzZXJuYW1lO1xuICB9LFxuICBzZXRVc2VybmFtZTogZnVuY3Rpb24gKHVzZXJuYW1lKSB7XG4gICAgdmFyIGNvZGVQb2ludHMgPSBhcnJheUZyb20oJHRvU3RyaW5nKHVzZXJuYW1lKSk7XG4gICAgaWYgKHRoaXMuY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KCkpIHJldHVybjtcbiAgICB0aGlzLnVzZXJuYW1lID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVzZXJuYW1lICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpXSwgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0KTtcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXNzd29yZFxuICBnZXRQYXNzd29yZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkO1xuICB9LFxuICBzZXRQYXNzd29yZDogZnVuY3Rpb24gKHBhc3N3b3JkKSB7XG4gICAgdmFyIGNvZGVQb2ludHMgPSBhcnJheUZyb20oJHRvU3RyaW5nKHBhc3N3b3JkKSk7XG4gICAgaWYgKHRoaXMuY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KCkpIHJldHVybjtcbiAgICB0aGlzLnBhc3N3b3JkID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhc3N3b3JkICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpXSwgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0KTtcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0XG4gIGdldEhvc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgICB2YXIgcG9ydCA9IHRoaXMucG9ydDtcbiAgICByZXR1cm4gaG9zdCA9PT0gbnVsbCA/ICcnXG4gICAgICA6IHBvcnQgPT09IG51bGwgPyBzZXJpYWxpemVIb3N0KGhvc3QpXG4gICAgICA6IHNlcmlhbGl6ZUhvc3QoaG9zdCkgKyAnOicgKyBwb3J0O1xuICB9LFxuICBzZXRIb3N0OiBmdW5jdGlvbiAoaG9zdCkge1xuICAgIGlmICh0aGlzLmNhbm5vdEJlQUJhc2VVUkwpIHJldHVybjtcbiAgICB0aGlzLnBhcnNlKGhvc3QsIEhPU1QpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdG5hbWVcbiAgZ2V0SG9zdG5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgICByZXR1cm4gaG9zdCA9PT0gbnVsbCA/ICcnIDogc2VyaWFsaXplSG9zdChob3N0KTtcbiAgfSxcbiAgc2V0SG9zdG5hbWU6IGZ1bmN0aW9uIChob3N0bmFtZSkge1xuICAgIGlmICh0aGlzLmNhbm5vdEJlQUJhc2VVUkwpIHJldHVybjtcbiAgICB0aGlzLnBhcnNlKGhvc3RuYW1lLCBIT1NUTkFNRSk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wb3J0XG4gIGdldFBvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcG9ydCA9IHRoaXMucG9ydDtcbiAgICByZXR1cm4gcG9ydCA9PT0gbnVsbCA/ICcnIDogJHRvU3RyaW5nKHBvcnQpO1xuICB9LFxuICBzZXRQb3J0OiBmdW5jdGlvbiAocG9ydCkge1xuICAgIGlmICh0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpKSByZXR1cm47XG4gICAgcG9ydCA9ICR0b1N0cmluZyhwb3J0KTtcbiAgICBpZiAocG9ydCA9PT0gJycpIHRoaXMucG9ydCA9IG51bGw7XG4gICAgZWxzZSB0aGlzLnBhcnNlKHBvcnQsIFBPUlQpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGF0aG5hbWVcbiAgZ2V0UGF0aG5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGF0aCA9IHRoaXMucGF0aDtcbiAgICByZXR1cm4gdGhpcy5jYW5ub3RCZUFCYXNlVVJMID8gcGF0aFswXSA6IHBhdGgubGVuZ3RoID8gJy8nICsgam9pbihwYXRoLCAnLycpIDogJyc7XG4gIH0sXG4gIHNldFBhdGhuYW1lOiBmdW5jdGlvbiAocGF0aG5hbWUpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgdGhpcy5wYXRoID0gW107XG4gICAgdGhpcy5wYXJzZShwYXRobmFtZSwgUEFUSF9TVEFSVCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hcbiAgZ2V0U2VhcmNoOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeTtcbiAgICByZXR1cm4gcXVlcnkgPyAnPycgKyBxdWVyeSA6ICcnO1xuICB9LFxuICBzZXRTZWFyY2g6IGZ1bmN0aW9uIChzZWFyY2gpIHtcbiAgICBzZWFyY2ggPSAkdG9TdHJpbmcoc2VhcmNoKTtcbiAgICBpZiAoc2VhcmNoID09PSAnJykge1xuICAgICAgdGhpcy5xdWVyeSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGFyQXQoc2VhcmNoLCAwKSA9PT0gJz8nKSBzZWFyY2ggPSBzdHJpbmdTbGljZShzZWFyY2gsIDEpO1xuICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgdGhpcy5wYXJzZShzZWFyY2gsIFFVRVJZKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hQYXJhbXMudXBkYXRlKCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hwYXJhbXNcbiAgZ2V0U2VhcmNoUGFyYW1zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoUGFyYW1zLmZhY2FkZTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhhc2hcbiAgZ2V0SGFzaDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQ7XG4gICAgcmV0dXJuIGZyYWdtZW50ID8gJyMnICsgZnJhZ21lbnQgOiAnJztcbiAgfSxcbiAgc2V0SGFzaDogZnVuY3Rpb24gKGhhc2gpIHtcbiAgICBoYXNoID0gJHRvU3RyaW5nKGhhc2gpO1xuICAgIGlmIChoYXNoID09PSAnJykge1xuICAgICAgdGhpcy5mcmFnbWVudCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjaGFyQXQoaGFzaCwgMCkgPT09ICcjJykgaGFzaCA9IHN0cmluZ1NsaWNlKGhhc2gsIDEpO1xuICAgIHRoaXMuZnJhZ21lbnQgPSAnJztcbiAgICB0aGlzLnBhcnNlKGhhc2gsIEZSQUdNRU5UKTtcbiAgfSxcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5xdWVyeSA9IHRoaXMuc2VhcmNoUGFyYW1zLnNlcmlhbGl6ZSgpIHx8IG51bGw7XG4gIH1cbn07XG5cbi8vIGBVUkxgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1jbGFzc1xudmFyIFVSTENvbnN0cnVjdG9yID0gZnVuY3Rpb24gVVJMKHVybCAvKiAsIGJhc2UgKi8pIHtcbiAgdmFyIHRoYXQgPSBhbkluc3RhbmNlKHRoaXMsIFVSTFByb3RvdHlwZSk7XG4gIHZhciBiYXNlID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgc3RhdGUgPSBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIG5ldyBVUkxTdGF0ZSh1cmwsIGZhbHNlLCBiYXNlKSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHtcbiAgICB0aGF0LmhyZWYgPSBzdGF0ZS5zZXJpYWxpemUoKTtcbiAgICB0aGF0Lm9yaWdpbiA9IHN0YXRlLmdldE9yaWdpbigpO1xuICAgIHRoYXQucHJvdG9jb2wgPSBzdGF0ZS5nZXRQcm90b2NvbCgpO1xuICAgIHRoYXQudXNlcm5hbWUgPSBzdGF0ZS5nZXRVc2VybmFtZSgpO1xuICAgIHRoYXQucGFzc3dvcmQgPSBzdGF0ZS5nZXRQYXNzd29yZCgpO1xuICAgIHRoYXQuaG9zdCA9IHN0YXRlLmdldEhvc3QoKTtcbiAgICB0aGF0Lmhvc3RuYW1lID0gc3RhdGUuZ2V0SG9zdG5hbWUoKTtcbiAgICB0aGF0LnBvcnQgPSBzdGF0ZS5nZXRQb3J0KCk7XG4gICAgdGhhdC5wYXRobmFtZSA9IHN0YXRlLmdldFBhdGhuYW1lKCk7XG4gICAgdGhhdC5zZWFyY2ggPSBzdGF0ZS5nZXRTZWFyY2goKTtcbiAgICB0aGF0LnNlYXJjaFBhcmFtcyA9IHN0YXRlLmdldFNlYXJjaFBhcmFtcygpO1xuICAgIHRoYXQuaGFzaCA9IHN0YXRlLmdldEhhc2goKTtcbiAgfVxufTtcblxudmFyIFVSTFByb3RvdHlwZSA9IFVSTENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxudmFyIGFjY2Vzc29yRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChnZXR0ZXIsIHNldHRlcikge1xuICByZXR1cm4ge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcylbZ2V0dGVyXSgpO1xuICAgIH0sXG4gICAgc2V0OiBzZXR0ZXIgJiYgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKVtzZXR0ZXJdKHZhbHVlKTtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH07XG59O1xuXG5pZiAoREVTQ1JJUFRPUlMpIHtcbiAgLy8gYFVSTC5wcm90b3R5cGUuaHJlZmAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhyZWZcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ2hyZWYnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ3NlcmlhbGl6ZScsICdzZXRIcmVmJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5vcmlnaW5gIGdldHRlclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtb3JpZ2luXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdvcmlnaW4nLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldE9yaWdpbicpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUucHJvdG9jb2xgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wcm90b2NvbFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAncHJvdG9jb2wnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFByb3RvY29sJywgJ3NldFByb3RvY29sJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS51c2VybmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXVzZXJuYW1lXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICd1c2VybmFtZScsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0VXNlcm5hbWUnLCAnc2V0VXNlcm5hbWUnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnBhc3N3b3JkYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGFzc3dvcmRcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3Bhc3N3b3JkJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQYXNzd29yZCcsICdzZXRQYXNzd29yZCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuaG9zdGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ2hvc3QnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldEhvc3QnLCAnc2V0SG9zdCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuaG9zdG5hbWVgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0bmFtZVxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaG9zdG5hbWUnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldEhvc3RuYW1lJywgJ3NldEhvc3RuYW1lJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5wb3J0YCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcG9ydFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAncG9ydCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0UG9ydCcsICdzZXRQb3J0JykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5wYXRobmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhdGhuYW1lXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwYXRobmFtZScsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0UGF0aG5hbWUnLCAnc2V0UGF0aG5hbWUnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnNlYXJjaGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnc2VhcmNoJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRTZWFyY2gnLCAnc2V0U2VhcmNoJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5zZWFyY2hQYXJhbXNgIGdldHRlclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNocGFyYW1zXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdzZWFyY2hQYXJhbXMnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFNlYXJjaFBhcmFtcycpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuaGFzaGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhhc2hcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ2hhc2gnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldEhhc2gnLCAnc2V0SGFzaCcpKTtcbn1cblxuLy8gYFVSTC5wcm90b3R5cGUudG9KU09OYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC10b2pzb25cbmRlZmluZUJ1aWx0SW4oVVJMUHJvdG90eXBlLCAndG9KU09OJywgZnVuY3Rpb24gdG9KU09OKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5zZXJpYWxpemUoKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLy8gYFVSTC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNVUkwtc3RyaW5naWZpY2F0aW9uLWJlaGF2aW9yXG5kZWZpbmVCdWlsdEluKFVSTFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnNlcmlhbGl6ZSgpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG5pZiAoTmF0aXZlVVJMKSB7XG4gIHZhciBuYXRpdmVDcmVhdGVPYmplY3RVUkwgPSBOYXRpdmVVUkwuY3JlYXRlT2JqZWN0VVJMO1xuICB2YXIgbmF0aXZlUmV2b2tlT2JqZWN0VVJMID0gTmF0aXZlVVJMLnJldm9rZU9iamVjdFVSTDtcbiAgLy8gYFVSTC5jcmVhdGVPYmplY3RVUkxgIG1ldGhvZFxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML2NyZWF0ZU9iamVjdFVSTFxuICBpZiAobmF0aXZlQ3JlYXRlT2JqZWN0VVJMKSBkZWZpbmVCdWlsdEluKFVSTENvbnN0cnVjdG9yLCAnY3JlYXRlT2JqZWN0VVJMJywgYmluZChuYXRpdmVDcmVhdGVPYmplY3RVUkwsIE5hdGl2ZVVSTCkpO1xuICAvLyBgVVJMLnJldm9rZU9iamVjdFVSTGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvcmV2b2tlT2JqZWN0VVJMXG4gIGlmIChuYXRpdmVSZXZva2VPYmplY3RVUkwpIGRlZmluZUJ1aWx0SW4oVVJMQ29uc3RydWN0b3IsICdyZXZva2VPYmplY3RVUkwnLCBiaW5kKG5hdGl2ZVJldm9rZU9iamVjdFVSTCwgTmF0aXZlVVJMKSk7XG59XG5cbnNldFRvU3RyaW5nVGFnKFVSTENvbnN0cnVjdG9yLCAnVVJMJyk7XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6ICFVU0VfTkFUSVZFX1VSTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgVVJMOiBVUkxDb25zdHJ1Y3RvclxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLmNvbnN0cnVjdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBVU0VfTkFUSVZFX1VSTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciBVUkwgPSBnZXRCdWlsdEluKCdVUkwnKTtcblxuLy8gYFVSTC5wYXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtY2FucGFyc2VcbiQoeyB0YXJnZXQ6ICdVUkwnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFVU0VfTkFUSVZFX1VSTCB9LCB7XG4gIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSh1cmwpIHtcbiAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIHVybFN0cmluZyA9IHRvU3RyaW5nKHVybCk7XG4gICAgdmFyIGJhc2UgPSBsZW5ndGggPCAyIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdG9TdHJpbmcoYXJndW1lbnRzWzFdKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBVUkwodXJsU3RyaW5nLCBiYXNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIGVtcHR5XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvZGF0ZS9ub3cnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmlsdGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9pbmNsdWRlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmtleXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmtleXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvdHJpbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvYXNzaWduJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLnNldEltbWVkaWF0ZTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3dlYi91cmwtc2VhcmNoLXBhcmFtcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3dlYi91cmwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuZGVsZXRlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5oYXMnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLnNpemUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlVSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vdXJsLXNlYXJjaC1wYXJhbXMnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLmNhbi1wYXJzZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLnBhcnNlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwudG8tanNvbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguVVJMO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB7IGFwcCBhcyBFbGVjdHJvbkFwcCwgQnJvd3NlcldpbmRvdywgZGlhbG9nIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgc2VydmUgZnJvbSBcImVsZWN0cm9uLXNlcnZlXCI7XG5pbXBvcnQgU3RvcmUgZnJvbSBcImVsZWN0cm9uLXN0b3JlXCI7XG5pbXBvcnQgRGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgeyBjcmVhdGVXaW5kb3csIHhib3hXb3JrZXIgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgQXV0aGVudGljYXRpb24gZnJvbSBcIi4vYXV0aGVudGljYXRpb25cIjtcbmltcG9ydCBJcGMgZnJvbSBcIi4vaXBjXCI7XG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MgfSBmcm9tICcuLi9yZW5kZXJlci9jb250ZXh0L3VzZXJDb250ZXh0LmRlZmF1bHRzJ1xuXG5pbXBvcnQgeGJveFdlYkFwaSBmcm9tIFwieGJveC13ZWJhcGlcIjtcbmltcG9ydCB4Q2xvdWRBcGkgZnJvbSBcIi4vaGVscGVycy94Y2xvdWRhcGlcIjtcblxuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCI7XG5cbmludGVyZmFjZSBzdGFydHVwRmxhZ3Mge1xuICBmdWxsc2NyZWVuOiBib29sZWFuO1xuICBhdXRvU3RyZWFtOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uIHtcbiAgcHJpdmF0ZSBfbG9nO1xuICBwdWJsaWMgX3N0b3JlID0gbmV3IFN0b3JlKCk7XG4gIHByaXZhdGUgX3N0YXJ0dXBGbGFnczogc3RhcnR1cEZsYWdzID0ge1xuICAgIGZ1bGxzY3JlZW46IGZhbHNlLFxuICAgIGF1dG9TdHJlYW06IFwiXCIsXG4gIH07XG5cbiAgcHVibGljIF9pc1Byb2R1Y3Rpb246IGJvb2xlYW4gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XG4gIHByaXZhdGUgX2lzQ2k6IGJvb2xlYW4gPSBwcm9jZXNzLmVudi5DSSAhPT0gdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pc01hYzogYm9vbGVhbiA9IHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCI7XG4gIHByaXZhdGUgX2lzV2luZG93czogYm9vbGVhbiA9IHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIjtcbiAgcHJpdmF0ZSBfaXNRdWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBfbWFpbldpbmRvdztcbiAgcHVibGljIF9pcGM6IElwYztcbiAgcHVibGljIF9hdXRoZW50aWNhdGlvbjogQXV0aGVudGljYXRpb247XG5cbiAgcHVibGljIHN0cmVhbWluZ1Rva2VuczogYW55XG5cbiAgcHVibGljIHdlYlRva2VuOiBhbnlcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIF9fZmlsZW5hbWUgKyBcIltjb25zdHJ1Y3RvcigpXSBTdGFydGluZyBYU3RyZWFtaW5nIHZcIiArIHBrZy52ZXJzaW9uXG4gICAgKTtcbiAgICB0aGlzLl9sb2cgPSBEZWJ1ZyhcInhzdHJlYW1pbmdcIik7XG5cbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXG4gICAgICBcImVuYWJsZS1mZWF0dXJlc1wiLFxuICAgICAgXCJWYWFwaUlnbm9yZURyaXZlckNoZWNrcyxWYWFwaVZpZGVvRGVjb2RlcixQbGF0Zm9ybUhFVkNEZWNvZGVyU3VwcG9ydCxDYW52YXNPb3BSYXN0ZXJpemF0aW9uXCJcbiAgICApO1xuICAgIC8vIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaCgnZGlzYWJsZS1mZWF0dXJlcycsICdVc2VDaHJvbWVPU0RpcmVjdFZpZGVvRGVjb2RlcicpO1xuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcImVuYWJsZS1ncHUtcmFzdGVyaXphdGlvblwiKTtcbiAgICBFbGVjdHJvbkFwcC5jb21tYW5kTGluZS5hcHBlbmRTd2l0Y2goXCJlbmFibGUtb29wLXJhc3Rlcml6YXRpb25cIik7XG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFwiYWNjZWxlcmF0ZWQtdmlkZW8tZGVjb2RlXCIpO1xuICAgIEVsZWN0cm9uQXBwLmNvbW1hbmRMaW5lLmFwcGVuZFN3aXRjaChcIm96b25lLXBsYXRmb3JtLWhpbnRcIiwgXCJ4MTFcIik7XG4gICAgRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKFwiaWdub3JlLWdwdS1ibG9ja2xpc3RcIik7XG4gICAgLy8gRWxlY3Ryb25BcHAuY29tbWFuZExpbmUuYXBwZW5kU3dpdGNoKCdlbmFibGUtemVyby1jb3B5Jyk7XG5cbiAgICB0aGlzLnJlYWRTdGFydHVwRmxhZ3MoKTtcbiAgICB0aGlzLmxvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCk7XG5cbiAgICAvLyBFbGVjdHJvbkFwcC5yZW1vdmVBc0RlZmF1bHRQcm90b2NvbENsaWVudCgnbXMteGFsLXB1YmxpYy1iZXRhLTAwMDAwMDAwNGMyMGE5MDgnKVxuXG4gICAgdGhpcy5faXBjID0gbmV3IElwYyh0aGlzKTtcbiAgICB0aGlzLl9hdXRoZW50aWNhdGlvbiA9IG5ldyBBdXRoZW50aWNhdGlvbih0aGlzKTtcblxuICAgIHRoaXMuX2lwYy5zdGFydFVwKCk7XG4gIH1cblxuICBsb2cobmFtZXNwYWNlID0gXCJhcHBsaWNhdGlvblwiLCAuLi5hcmdzKSB7XG4gICAgdGhpcy5fbG9nLmV4dGVuZChuYW1lc3BhY2UpKC4uLmFyZ3MpO1xuICB9XG5cbiAgZ2V0U3RhcnR1cEZsYWdzKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFydHVwRmxhZ3M7XG4gIH1cblxuICByZXNldEF1dG9zdHJlYW0oKSB7XG4gICAgdGhpcy5fc3RhcnR1cEZsYWdzLmF1dG9TdHJlYW0gPSBcIlwiO1xuICB9XG5cbiAgcmVhZFN0YXJ0dXBGbGFncygpIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIFwiYXBwbGljYXRpb25cIixcbiAgICAgIF9fZmlsZW5hbWUgKyBcIltyZWFkU3RhcnR1cEZsYWdzKCldIFByb2dyYW0gYXJncyBkZXRlY3RlZDpcIixcbiAgICAgIHByb2Nlc3MuYXJndlxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGFyZyBpbiBwcm9jZXNzLmFyZ3YpIHtcbiAgICAgIGlmIChwcm9jZXNzLmFyZ3ZbYXJnXS5pbmNsdWRlcyhcIi0tZnVsbHNjcmVlblwiKSkge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImFwcGxpY2F0aW9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltyZWFkU3RhcnR1cEZsYWdzKCldIC0tZnVsbHNjcmVlbiBzd2l0Y2ggZm91bmQuIFNldHRpbmcgZnVsbHNjcmVlbiB0byB0cnVlXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc3RhcnR1cEZsYWdzLmZ1bGxzY3JlZW4gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5hcmd2W2FyZ10uaW5jbHVkZXMoXCItLWNvbm5lY3Q9XCIpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHByb2Nlc3MuYXJndlthcmddLnN1YnN0cmluZygxMCk7XG5cbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJhcHBsaWNhdGlvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbcmVhZFN0YXJ0dXBGbGFncygpXSAtLWNvbm5lY3Qgc3dpdGNoIGZvdW5kLiBTZXR0aW5nIGF1dG9TdHJlYW0gdG9cIixcbiAgICAgICAgICBrZXlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc3RhcnR1cEZsYWdzLmF1dG9TdHJlYW0gPSBrZXk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2coXG4gICAgICBcImFwcGxpY2F0aW9uXCIsXG4gICAgICBfX2ZpbGVuYW1lICsgXCJbcmVhZFN0YXJ0dXBGbGFncygpXSBFbmQgcmVzdWx0IG9mIHN0YXJ0dXBGbGFnczpcIixcbiAgICAgIHRoaXMuX3N0YXJ0dXBGbGFnc1xuICAgICk7XG4gIH1cblxuICBsb2FkQXBwbGljYXRpb25EZWZhdWx0cygpIHtcbiAgICBpZiAodGhpcy5faXNQcm9kdWN0aW9uID09PSB0cnVlICYmIHRoaXMuX2lzQ2kgPT09IGZhbHNlKSB7XG4gICAgICBzZXJ2ZSh7IGRpcmVjdG9yeTogXCJhcHBcIiB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzQ2kgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkgKiAxMDA7XG4gICAgICBFbGVjdHJvbkFwcC5zZXRQYXRoKFxuICAgICAgICBcInVzZXJEYXRhXCIsXG4gICAgICAgIGAke0VsZWN0cm9uQXBwLmdldFBhdGgoXCJ1c2VyRGF0YVwiKX0gKCR7cmFuZG9tfSlgXG4gICAgICApO1xuICAgICAgRWxlY3Ryb25BcHAuc2V0UGF0aChcbiAgICAgICAgXCJzZXNzaW9uRGF0YVwiLFxuICAgICAgICBgJHtFbGVjdHJvbkFwcC5nZXRQYXRoKFwidXNlckRhdGFcIil9ICgke3JhbmRvbX0pYFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N0b3JlLmRlbGV0ZShcInVzZXJcIik7XG4gICAgICB0aGlzLl9zdG9yZS5kZWxldGUoXCJhdXRoXCIpO1xuXG4gICAgICBzZXJ2ZSh7IGRpcmVjdG9yeTogXCJhcHBcIiB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgRWxlY3Ryb25BcHAuc2V0UGF0aChcbiAgICAgICAgXCJ1c2VyRGF0YVwiLFxuICAgICAgICBgJHtFbGVjdHJvbkFwcC5nZXRQYXRoKFwidXNlckRhdGFcIil9IChkZXZlbG9wbWVudClgXG4gICAgICApO1xuICAgIH1cblxuICAgIEVsZWN0cm9uQXBwLndoZW5SZWFkeSgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW2xvYWRBcHBsaWNhdGlvbkRlZmF1bHRzKCldIEVsZWN0cm9uIGhhcyBiZWVuIGZ1bGx5IGxvYWRlZC4gUmVhZHkgdG8gb3BlbiB3aW5kb3dzXCJcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm9wZW5NYWluV2luZG93KCk7XG4gICAgICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uLnN0YXJ0V2Vidmlld0hvb2tzKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArXG4gICAgICAgICAgICBcIltsb2FkQXBwbGljYXRpb25EZWZhdWx0cygpXSBFbGVjdHJvbiBoYXMgZmFpbGVkIHRvIGxvYWQ6XCIsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgRWxlY3Ryb25BcHAub24oXCJ3aW5kb3ctYWxsLWNsb3NlZFwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNYWMgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbbG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMoKV0gRWxlY3Ryb24gZGV0ZWN0ZWQgdGhhdCBhbGwgd2luZG93cyBhcmUgY2xvc2VkLiBSdW5uaW5nIGluIGJhY2tncm91bmQuLi5cIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgK1xuICAgICAgICAgICAgXCJbbG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMoKV0gRWxlY3Ryb24gZGV0ZWN0ZWQgdGhhdCBhbGwgd2luZG93cyBhcmUgY2xvc2VkLiBRdWl0dGluZyBhcHAuLi5cIlxuICAgICAgICApO1xuICAgICAgICBFbGVjdHJvbkFwcC5xdWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBFbGVjdHJvbkFwcC5vbihcImFjdGl2YXRlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuX21haW5XaW5kb3cgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMuX21haW5XaW5kb3cuc2hvdygpXG4gICAgICAgIDogdGhpcy5vcGVuTWFpbldpbmRvdygpO1xuICAgIH0pO1xuICAgIEVsZWN0cm9uQXBwLm9uKFwiYmVmb3JlLXF1aXRcIiwgKCkgPT4gKHRoaXMuX2lzUXVpdHRpbmcgPSB0cnVlKSk7XG4gIH1cblxuICBfd2ViQXBpOiB4Ym94V2ViQXBpO1xuICBfeEhvbWVBcGk6IHhDbG91ZEFwaTtcbiAgX3hDbG91ZEFwaTogeENsb3VkQXBpO1xuICBfeGJveFdvcmtlcjogeGJveFdvcmtlcjtcblxuICBhdXRoZW50aWNhdGlvbkNvbXBsZXRlZChzdHJlYW1pbmdUb2tlbnMsIHdlYlRva2VuKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcImVsZWN0cm9uXCIsXG4gICAgICBfX2ZpbGVuYW1lICsgXCJbYXV0aGVudGljYXRpb25Db21wbGV0ZWQoKV0gYXV0aGVudGljYXRpb25Db21wbGV0ZWQgY2FsbGVkXCJcbiAgICApO1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgX19maWxlbmFtZSArIFwiW2F1dGhlbnRpY2F0aW9uQ29tcGxldGVkKCldIHN0cmVhbWluZ1Rva2VuczpcIixcbiAgICAgIHN0cmVhbWluZ1Rva2Vuc1xuICAgICk7XG5cbiAgICB0aGlzLnN0cmVhbWluZ1Rva2VucyA9IHN0cmVhbWluZ1Rva2Vuc1xuICAgIHRoaXMud2ViVG9rZW4gPSB3ZWJUb2tlblxuXG4gICAgdGhpcy5fd2ViQXBpID0gbmV3IHhib3hXZWJBcGkoe1xuICAgICAgdXNlclRva2VuOiB3ZWJUb2tlbi5kYXRhLlRva2VuLFxuICAgICAgdWhzOiB3ZWJUb2tlbi5kYXRhLkRpc3BsYXlDbGFpbXMueHVpWzBdLnVocyxcbiAgICB9KTtcblxuICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uLl9pc0F1dGhlbnRpY2F0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5fYXV0aGVudGljYXRpb24uX2lzQXV0aGVudGljYXRlZCA9IHRydWU7XG5cbiAgICB0aGlzLl93ZWJBcGlcbiAgICAgIC5nZXRQcm92aWRlcihcInByb2ZpbGVcIilcbiAgICAgIC5nZXQoXG4gICAgICAgIFwiL3VzZXJzL21lL3Byb2ZpbGUvc2V0dGluZ3M/c2V0dGluZ3M9R2FtZURpc3BsYXlOYW1lLEdhbWVEaXNwbGF5UGljUmF3LEdhbWVyc2NvcmUsR2FtZXJ0YWdcIlxuICAgICAgKVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnByb2ZpbGVVc2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzZXR0aW5nIGluIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzW3NldHRpbmddLmlkID09PSBcIkdhbWVydGFnXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc3RvcmUuc2V0KFxuICAgICAgICAgICAgICAgIFwidXNlci5nYW1lcnRhZ1wiLFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10udmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10uaWQgPT09XG4gICAgICAgICAgICAgIFwiR2FtZURpc3BsYXlQaWNSYXdcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlLnNldChcbiAgICAgICAgICAgICAgICBcInVzZXIuZ2FtZXJwaWNcIixcbiAgICAgICAgICAgICAgICByZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzW3NldHRpbmddLnZhbHVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICByZXN1bHQucHJvZmlsZVVzZXJzWzBdLnNldHRpbmdzW3NldHRpbmddLmlkID09PSBcIkdhbWVyc2NvcmVcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlLnNldChcbiAgICAgICAgICAgICAgICBcInVzZXIuZ2FtZXJzY29yZVwiLFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wcm9maWxlVXNlcnNbMF0uc2V0dGluZ3Nbc2V0dGluZ10udmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSdW4gd29ya2Vyc1xuICAgICAgICB0aGlzLl94Ym94V29ya2VyID0gbmV3IHhib3hXb3JrZXIodGhpcyk7XG4gICAgICAgIHRoaXMuX2lwYy5vblVzZXJMb2FkZWQoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgICBfX2ZpbGVuYW1lICtcbiAgICAgICAgICAgIFwiW2F1dGhlbnRpY2F0aW9uQ29tcGxldGVkKCldIEZhaWxlZCB0byByZXRyaWV2ZSB1c2VyIHByb2ZpbGU6XCIsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgICAgZGlhbG9nLnNob3dNZXNzYWdlQm94KHtcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgXCJFcnJvcjogRmFpbGVkIHRvIHJldHJpZXZlIHVzZXIgcHJvZmlsZTpcIiArIEpTT04uc3RyaW5naWZ5KGVycm9yKSxcbiAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBvcGVuTWFpbldpbmRvdygpIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgIF9fZmlsZW5hbWUgKyBcIltvcGVuTWFpbldpbmRvdygpXSBDcmVhdGluZyBuZXcgbWFpbiB3aW5kb3dcIlxuICAgICk7XG5cbiAgICBjb25zdCBzZXR0aW5nczogYW55ID0gdGhpcy5fc3RvcmUuZ2V0KCdzZXR0aW5ncycsIGRlZmF1bHRTZXR0aW5ncylcbiAgICBjb25zb2xlLmxvZygnc2V0dGluZ3M6Jywgc2V0dGluZ3MpXG5cbiAgICBjb25zdCB3aW5kb3dPcHRpb25zOiBhbnkgPSB7XG4gICAgICB0aXRsZTogXCJYU3RyZWFtaW5nXCIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiKDI2LCAyNywgMzApXCIsXG4gICAgfTtcblxuICAgIGlmIChzZXR0aW5ncy5mdWxsc2NyZWVuKSB7XG4gICAgICB3aW5kb3dPcHRpb25zLmZ1bGxzY3JlZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX21haW5XaW5kb3cgPSBjcmVhdGVXaW5kb3coXCJtYWluXCIsIHtcbiAgICAgIHdpZHRoOiAxMjgwLFxuICAgICAgaGVpZ2h0OiA4MDAsXG4gICAgICAuLi53aW5kb3dPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbWFpbldpbmRvdy5vbihcInNob3dcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sb2coXG4gICAgICAgIFwiZWxlY3Ryb25cIixcbiAgICAgICAgX19maWxlbmFtZSArIFwiW29wZW5NYWluV2luZG93KCldIFNob3dpbmcgTWFpbiB3aW5kb3cuXCJcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9tYWluV2luZG93Lm9uKFwiY2xvc2VcIiwgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNYWMgPT09IHRydWUgJiYgdGhpcy5faXNRdWl0dGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgXCJlbGVjdHJvblwiLFxuICAgICAgICAgIF9fZmlsZW5hbWUgKyBcIltvcGVuTWFpbldpbmRvdygpXSBNYWluIHdpbmRvd3MgaGFzIGJlZW4gaGlkZGVuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbWFpbldpbmRvdy5oaWRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBcImVsZWN0cm9uXCIsXG4gICAgICAgICAgX19maWxlbmFtZSArIFwiW29wZW5NYWluV2luZG93KCldIE1haW4gd2luZG93cyBoYXMgYmVlbiBjbG9zZWRcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tYWluV2luZG93ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgXG4gICAgY29uc3QgbG9jYWxlID0gc2V0dGluZ3MubG9jYWxlIHx8ICdlbidcblxuICAgIGlmICh0aGlzLl9pc1Byb2R1Y3Rpb24gPT09IHRydWUgJiYgdGhpcy5faXNDaSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX21haW5XaW5kb3cubG9hZFVSTChgYXBwOi8vLi8ke2xvY2FsZX0vaG9tZWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwb3J0ID0gcHJvY2Vzcy5hcmd2WzJdIHx8IDMwMDA7XG4gICAgICB0aGlzLl9tYWluV2luZG93LmxvYWRVUkwoYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS8ke2xvY2FsZX0vaG9tZWApO1xuXG4gICAgICAvLyBpZih0aGlzLl9pc0NpICE9PSB0cnVlKXtcbiAgICAgIC8vICAgICB0aGlzLl9tYWluV2luZG93LndlYkNvbnRlbnRzLm9wZW5EZXZUb29scygpXG4gICAgICAvLyAgICAgdGhpcy5vcGVuR1BVV2luZG93KClcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cblxuICBfZ3B1V2luZG93O1xuXG4gIG9wZW5HUFVXaW5kb3coKSB7XG4gICAgdGhpcy5fZ3B1V2luZG93ID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgICAgd2lkdGg6IDgwMCxcbiAgICAgIGhlaWdodDogNjAwLFxuICAgIH0pO1xuXG4gICAgLy8gTG9hZCBjaHJvbWU6Ly9ncHVcbiAgICB0aGlzLl9ncHVXaW5kb3cubG9hZFVSTChcImNocm9tZTovL2dwdVwiKTtcblxuICAgIC8vIE9wZW4gRGV2VG9vbHNcbiAgICB0aGlzLl9ncHVXaW5kb3cud2ViQ29udGVudHMub3BlbkRldlRvb2xzKCk7XG4gIH1cblxuICBxdWl0KCkge1xuICAgIEVsZWN0cm9uQXBwLnF1aXQoKTtcbiAgfVxuXG4gIHJlc3RhcnQoKSB7XG4gICAgdGhpcy5xdWl0KCk7XG4gICAgRWxlY3Ryb25BcHAucmVsYXVuY2goKTtcbiAgfVxufVxuXG5uZXcgQXBwbGljYXRpb24oKTtcbiJdLCJuYW1lcyI6WyJzZXNzaW9uIiwiZGlhbG9nIiwiY3JlYXRlV2luZG93IiwiWGFsIiwiQXV0aFRva2VuU3RvcmUiLCJkZWZhdWx0U2V0dGluZ3MiLCJBdXRoZW50aWNhdGlvbiIsImNvbnN0cnVjdG9yIiwiYXBwbGljYXRpb24iLCJfZGVmaW5lUHJvcGVydHkiLCJfYXBwbGljYXRpb24iLCJfdG9rZW5TdG9yZSIsImxvYWQiLCJfeGFsIiwiY2hlY2tBdXRoZW50aWNhdGlvbiIsIl9pc0F1dGhlbnRpY2F0aW5nIiwiX2lzQXV0aGVudGljYXRlZCIsImxvZyIsImhhc1ZhbGlkQXV0aFRva2VucyIsInN0YXJ0U2lsZW50RmxvdyIsImdldFVzZXJUb2tlbiIsInVuZGVmaW5lZCIsInJlZnJlc2hUb2tlbnMiLCJ0aGVuIiwiZ2V0U3RyZWFtaW5nVG9rZW4iLCJzdHJlYW1pbmdUb2tlbnMiLCJ4Q2xvdWRUb2tlbiIsIl9hcHBMZXZlbCIsImdldFdlYlRva2VuIiwid2ViVG9rZW4iLCJfX2ZpbGVuYW1lIiwiYXV0aGVudGljYXRpb25Db21wbGV0ZWQiLCJjYXRjaCIsImVycm9yIiwic2hvd01lc3NhZ2VCb3giLCJtZXNzYWdlIiwiX0pTT04kc3RyaW5naWZ5IiwidHlwZSIsImVyciIsImNsZWFyIiwic3RhcnRBdXRoZmxvdyIsImdldFJlZGlyZWN0VXJpIiwicmVkaXJlY3QiLCJvcGVuQXV0aFdpbmRvdyIsInNpc3VBdXRoIiwiTXNhT2F1dGhSZWRpcmVjdCIsIl9hdXRoQ2FsbGJhY2siLCJyZWRpcmVjdFVyaSIsImF1dGhlbnRpY2F0ZVVzZXIiLCJyZXN1bHQiLCJzaG93RXJyb3JCb3giLCJzdGFydFdlYnZpZXdIb29rcyIsImRlZmF1bHRTZXNzaW9uIiwid2ViUmVxdWVzdCIsIm9uSGVhZGVyc1JlY2VpdmVkIiwidXJscyIsImRldGFpbHMiLCJjYWxsYmFjayIsIl9jb250ZXh0IiwicmVzcG9uc2VIZWFkZXJzIiwiTG9jYXRpb24iLCJfaW5jbHVkZXNJbnN0YW5jZVByb3BlcnR5IiwiY2FsbCIsIl9hcHAiLCJSZWRpcmVjdFVyaSIsIl9hdXRoV2luZG93IiwiY2xvc2UiLCJjYW5jZWwiLCJ1cmwiLCJhdXRoV2luZG93Iiwid2lkdGgiLCJoZWlnaHQiLCJ0aXRsZSIsImxvYWRVUkwiLCJvbiIsInRva2VuU3RvcmUiLCJjb25zb2xlIiwic2lzdVRva2VuIiwiZ2V0U2lzdVRva2VuIiwiRXJyb3IiLCJ4c3RzVG9rZW4iLCJkb1hzdHNBdXRob3JpemF0aW9uIiwiX3hob21lVG9rZW4iLCJnZXRTZWNvbmRzVmFsaWQiLCJnZXRTdHJlYW1Ub2tlbiIsIl94Y2xvdWRUb2tlbiIsInNldHRpbmdzIiwiX3N0b3JlIiwiZ2V0IiwiZm9yY2VfcmVnaW9uX2lwIiwieEhvbWVUb2tlbiIsIkh0dHAiLCJBY2hpdmVtZW50TWFuYWdlciIsImdldEhpc3RvcnlBY2hpdmVtZW50cyIsImh0dHAiLCJwcmVmZXJyZWRfZ2FtZV9sYW5ndWFnZSIsIl9Qcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInVocyIsImRhdGEiLCJEaXNwbGF5Q2xhaW1zIiwieHVpIiwieGlkIiwiQXV0aG9yaXphdGlvbiIsIlRva2VuIiwicmVzIiwidGl0bGVzIiwiZSIsImdldEFjaGl2ZW1lbnREZXRhaWwiLCJ0aXRsZUlkIiwiYWNoaWV2ZW1lbnRzIiwic2NyZWVuIiwiQnJvd3NlcldpbmRvdyIsIlN0b3JlIiwicGF0aCIsIndpbmRvd05hbWUiLCJvcHRpb25zIiwia2V5IiwibmFtZSIsInN0b3JlIiwiZGVmYXVsdFNpemUiLCJzdGF0ZSIsInJlc3RvcmUiLCJnZXRDdXJyZW50UG9zaXRpb24iLCJ3aW4iLCJyZW1vdmVNZW51IiwicG9zaXRpb24iLCJnZXRQb3NpdGlvbiIsInNpemUiLCJnZXRTaXplIiwieCIsInkiLCJ3aW5kb3dXaXRoaW5Cb3VuZHMiLCJ3aW5kb3dTdGF0ZSIsImJvdW5kcyIsInJlc2V0VG9EZWZhdWx0cyIsImdldFByaW1hcnlEaXNwbGF5IiwiX09iamVjdCRhc3NpZ24iLCJlbnN1cmVWaXNpYmxlT25Tb21lRGlzcGxheSIsInZpc2libGUiLCJfc29tZUluc3RhbmNlUHJvcGVydHkiLCJnZXRBbGxEaXNwbGF5cyIsImRpc3BsYXkiLCJzYXZlU3RhdGUiLCJpc01pbmltaXplZCIsImlzTWF4aW1pemVkIiwic2V0IiwiYnJvd3Nlck9wdGlvbnMiLCJfb2JqZWN0U3ByZWFkIiwid2ViUHJlZmVyZW5jZXMiLCJub2RlSW50ZWdyYXRpb24iLCJjb250ZXh0SXNvbGF0aW9uIiwiZW5hYmxlQmxpbmtGZWF0dXJlcyIsInNhbmRib3giLCJwcmVsb2FkIiwiam9pbiIsIl9fZGlybmFtZSIsImF1dG9IaWRlTWVudUJhciIsImh0dHBzIiwiaG9zdCIsIm1ldGhvZCIsInJlc3BvbnNlRGF0YSIsInJlcSIsInJlcXVlc3QiLCJoZWFkZXJzIiwicmVzcG9uc2UiLCJzdGF0dXNDb2RlIiwicmV0dXJuRGF0YSIsIkpTT04iLCJwYXJzZSIsIl9zZXRUaW1lb3V0Iiwic3RhdHVzIiwiYm9keSIsImVuZCIsInBvc3QiLCJwb3N0RGF0YSIsIm1lcmdlZEhlYWRlcnMiLCJzdWJzdHJpbmciLCJ3cml0ZSIsInhDbG91ZEFwaSIsInhib3hXb3JrZXIiLCJzZXRVcGRhdGVOb3RpZmljYXRpb24iLCJ1cGRhdGVyIiwiU3RyZWFtTWFuYWdlciIsImdldEFwaSIsImdldERlZmF1bHRSZWdpb24iLCJiYXNlVXJpIiwiZ3NUb2tlbiIsImdldFNlc3Npb24iLCJzZXNzaW9uSWQiLCJfc2Vzc2lvbnMiLCJzdGFydFN0cmVhbSIsInRhcmdldCIsInBsYXlSZXN1bHQiLCJzZXNzaW9uUGF0aCIsInNwbGl0Iiwic3RyZWFtU2Vzc2lvbiIsImlkIiwicGxheWVyU3RhdGUiLCJtb25pdG9yU2Vzc2lvbiIsInN0b3BTdHJlYW0iLCJzZW5kU2RwIiwic2RwIiwic2VuZENoYXRTZHAiLCJzZW5kSWNlIiwiaWNlIiwic2VuZEtlZXBhbGl2ZSIsImdldFN0cmVhbVN0YXRlIiwiX2F1dGhlbnRpY2F0aW9uIiwiZ2V0TXNhbFRva2VuIiwibXNhbFRva2VuIiwic2VuZE1TQUxBdXRoIiwibHB0IiwiYWxlcnQiLCJ3YWl0aW5nVGltZXMiLCJnZXRXYWl0aW5nVGltZXMiLCJlcnJvckRldGFpbHMiLCJnZXRBY3RpdmVTZXNzaW9ucyIsIkhUVFAiLCJheGlvcyIsIlRpdGxlTWFuYWdlciIsIl9odHRwIiwiZ2V0T2ZmaWNpYWxUaXRsZXMiLCJvZmZpY2lhbFRpdGxlcyIsInRpbWVvdXQiLCJQcm9kdWN0cyIsImdldEdhbWVQYXNzUHJvZHVjdHMiLCJwcm9kdWN0SWRRdWV1ZSIsInYyVGl0bGVNYXAiLCJfQXJyYXkkaXNBcnJheSIsIl9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSIsInByb2R1Y3RJZCIsInB1c2giLCJtZXJnZVByb2R1Y3RJZHMiLCJfU2V0IiwicHJvZHVjdHMiLCJtZXJnZWRUaXRsZXMiLCJfc29ydEluc3RhbmNlUHJvcGVydHkiLCJhIiwiYiIsIlByb2R1Y3RUaXRsZSIsImxvY2FsZUNvbXBhcmUiLCJnZXROZXdUaXRsZXMiLCJUaXRsZSIsInhib3hUaXRsZUlkIiwic3VwcG9ydGVkSW5wdXRUeXBlcyIsInNldENhdGFsb2dEZXRhaWxzIiwidGl0bGVJbmZvIiwiY2F0YWxvZ0RldGFpbHMiLCJ0b1N0cmluZyIsInJlc3RvcmVGcm9tQ2FjaGUiLCJjYWNoZWRPYmoiLCJUb2tlblN0b3JlIiwiYXJncyIsInRva2VucyIsImxvYWRKc29uIiwic2F2ZSIsInVzZXJUb2tlbiIsIl91c2VyVG9rZW4iLCJfc2lzdVRva2VuIiwiand0S2V5cyIsIl9qd3RLZXlzIiwiZGVsZXRlIiwiZWxlY3Ryb24iLCJjb21wYXJlIiwiZ2giLCJwa2ciLCJkZWZhdWx0T3B0aW9ucyIsImRlYnVnIiwic2lsZW50IiwicHJlcmVsZWFzZXMiLCJsb2dnZXIiLCJ3aXRoRGVmYXVsdHMiLCJhcHAiLCJpc1JlYWR5IiwiY2hlY2tGb3JVcGRhdGVzIiwicmVwb3NpdG9yeSIsInRva2VuIiwiaXNQYWNrYWdlZCIsImdoT2JqIiwidXNlciIsInJlcG8iLCJsYXRlc3RSZWxlYXNlIiwicmVsZWFzZXMiLCJhdXRob3JpemF0aW9uIiwicmVsZWFzZSIsInByZXJlbGVhc2UiLCJzaG93RGlhbG9nIiwidGFnX25hbWUiLCJnZXRWZXJzaW9uIiwic2hvd1VwZGF0ZURpYWxvZyIsImdldE5hbWUiLCJkZXRhaWwiLCJfdHJpbUluc3RhbmNlUHJvcGVydHkiLCJidXR0b25zIiwiZGVmYXVsdElkIiwiY2FuY2VsSWQiLCJfc2V0SW1tZWRpYXRlIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJodG1sX3VybCIsImludGVydmFsRnJpZW5kcyIsInVwZGF0ZUZyaWVuZHMiLCJmcmllbmRzIiwib25saW5lRnJpZW5kcyIsImZyaWVuZCIsInByZXNlbmNlU3RhdGUiLCJfb25saW5lRnJpZW5kcyIsIl93ZWJBcGkiLCJnZXRQcm92aWRlciIsImdldEZyaWVuZHMiLCJwZW9wbGUiLCJfZnJpZW5kcyIsInh1aWQiLCJBZGRyZXNzNiIsIl9ob3N0IiwiX3Rva2VuIiwiX3R5cGUiLCJnZXRUaXRsZXMiLCJnZXRSZWNlbnRUaXRsZXMiLCJkZXZpY2VJbmZvIiwiYXBwSW5mbyIsImVudiIsImNsaWVudEFwcElkIiwiY2xpZW50QXBwVHlwZSIsImNsaWVudEFwcFZlcnNpb24iLCJjbGllbnRTZGtWZXJzaW9uIiwiaHR0cEVudmlyb25tZW50Iiwic2RrSW5zdGFsbElkIiwiZGV2IiwiaHciLCJtYWtlIiwibW9kZWwiLCJzZGt0eXBlIiwib3MiLCJyZXNvbHV0aW9uIiwidmVyIiwicGxhdGZvcm0iLCJkaXNwbGF5SW5mbyIsImRpbWVuc2lvbnMiLCJ3aWR0aEluUGl4ZWxzIiwiaGVpZ2h0SW5QaXhlbHMiLCJwaXhlbERlbnNpdHkiLCJkcGlYIiwiZHBpWSIsInN5c3RlbVVwZGF0ZUdyb3VwIiwiY2xpZW50U2Vzc2lvbklkIiwibmFub1ZlcnNpb24iLCJlbmFibGVUZXh0VG9TcGVlY2giLCJoaWdoQ29udHJhc3QiLCJsb2NhbGUiLCJ1c2VJY2VDb25uZWN0aW9uIiwidGltZXpvbmVPZmZzZXRNaW51dGVzIiwic2RrVHlwZSIsIm9zTmFtZSIsInNlcnZlcklkIiwiZmFsbGJhY2tSZWdpb25OYW1lcyIsIm1lc3NhZ2VUeXBlIiwiY29uZmlndXJhdGlvbiIsImNoYXRDb25maWd1cmF0aW9uIiwiYnl0ZXNQZXJTYW1wbGUiLCJleHBlY3RlZENsaXBEdXJhdGlvbk1zIiwiZm9ybWF0IiwiY29kZWMiLCJjb250YWluZXIiLCJudW1DaGFubmVscyIsInNhbXBsZUZyZXF1ZW5jeUh6IiwiY2hhdCIsIm1pblZlcnNpb24iLCJtYXhWZXJzaW9uIiwiY29udHJvbCIsImlucHV0Iiwic2RwUmVzdWx0IiwiZXhjaGFuZ2VTZHAiLCJleGNoYW5nZVJlc3BvbnNlIiwiaXNNZWRpYVN0cmVhbXNDaGF0UmVuZWdvdGlhdGlvbiIsImNoZWNrSWNlIiwiaWNlUmVzdWx0IiwiX2ljZVJlc3VsdCIsImV4Y2hhbmdlSWNlIiwiY29tcHV0ZWRDYW5kaWRhdGVzIiwiY2FuZGlkYXRlIiwiY2FuZGlkYXRlQWRkcmVzcyIsImxlbmd0aCIsInN1YnN0ciIsImFkZHJlc3MiLCJ0ZXJlZG8iLCJpbnNwZWN0VGVyZWRvIiwiY2xpZW50NCIsInNkcE1MaW5lSW5kZXgiLCJzZHBNaWQiLCJ1ZHBQb3J0IiwicGF0dGVybiIsIlJlZ0V4cCIsImxzdCIsIml0ZW0iLCJncm91cHMiLCJleGVjIiwiaXB2NiIsImZpcnN0SXAiLCJpcCIsInNlY29uZElwIiwibmV3Q2FuZGlkYXRlcyIsImZvdW5kYXRpb24iLCJuZXdDYW5kaWRhdGUiLCJwcmlvcml0eSIsInBvcnQiLCJ0aGVfcmVzdCIsImNhbmRpZGF0ZXMiLCJob3N0SGVhZGVycyIsInN0YXR1c2NvZGUiLCJjb2RlIiwiSXBjQ29uc29sZXMiLCJJcGNTdHJlYW1pbmciLCJJcGN4Q2xvdWQiLCJJcGNBcHAiLCJJcGNTZXR0aW5ncyIsImlwY01haW4iLCJJcGMiLCJfY2hhbm5lbHMiLCJzdHJlYW1pbmciLCJjb25zb2xlcyIsInhDbG91ZCIsImNoYW5uZWwiLCJldmVudCIsIm9uRXZlbnQiLCJzdGFydFVwIiwib25Vc2VyTG9hZGVkIiwiSXBjQmFzZSIsImxvYWRDYWNoZWRVc2VyIiwiZ2V0VXNlclN0YXRlIiwiZ2FtZXJ0YWciLCJnYW1lcnBpYyIsImdhbWVyc2NvcmUiLCJzaWduZWRJbiIsImxldmVsIiwiZ2V0QXV0aFN0YXRlIiwiaXNBdXRoZW50aWNhdGluZyIsImlzQXV0aGVudGljYXRlZCIsImdldEFwcExldmVsIiwibG9naW4iLCJxdWl0IiwicmVzdGFydCIsImNsZWFyRGF0YSIsImNsZWFyU3RvcmFnZURhdGEiLCJnZXRPbmxpbmVGcmllbmRzIiwiX3hib3hXb3JrZXIiLCJvblVpU2hvd24iLCJpc0Z1bGxzY3JlZW4iLCJpc0Z1bGxTY3JlZW4iLCJfbWFpbldpbmRvdyIsInRvZ2dsZUZ1bGxzY3JlZW4iLCJzZXRGdWxsU2NyZWVuIiwiZW50ZXJGdWxsc2NyZWVuIiwiZXhpdEZ1bGxzY3JlZW4iLCJhY3Rpb24iLCJfT2JqZWN0JGtleXMiLCJzZW5kIiwid2ViQ29udGVudHMiLCJVVUlEIiwibmV4dFVVSUQiLCJ2MyIsIm5hbWVzcGFjZSIsIl9EYXRlJG5vdyIsInNlbmRDb21tYW5kIiwiY29uc29sZUlkIiwiY29tbWFuZFR5cGUiLCJjb21tYW5kIiwicGFyYW1zIiwicG9zdFBhcmFtcyIsImRlc3RpbmF0aW9uIiwic291cmNlSWQiLCJwYXJhbWV0ZXJzIiwibGlua2VkWGJveElkIiwic2tpbGxwbGF0Zm9ybSIsIl9jb25zb2xlc0xhc3RVcGRhdGUiLCJnZXRDb25zb2xlc0xpc3QiLCJfY29uc29sZXMiLCJwb3dlck9uIiwicG93ZXJPZmYiLCJzZXRTZXR0aW5ncyIsIm5ld1NldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJyZXNldFNldHRpbmdzIiwiX3N0cmVhbU1hbmFnZXIiLCJfaXBjIiwiX3JlY2VudFRpdGxlc0xhc3RVcGRhdGUiLCJnZXRQbGF5ZXJTdGF0ZSIsImFjdGl2ZVNlc3Npb25zIiwiX3RpdGxlTWFuYWdlciIsIl9hY2hpdmVtZW50TWFuYWdlciIsIl94Q2xvdWRBcGkiLCJnZXRYaG9tZVRva2VuIiwic2V0WGhvbWVUb2tlbkRlZmF1bHQiLCJzZXREZWZhdWx0UmVnaW9uIiwiZ2V0WGNsb3VkVG9rZW4iLCJzZXRYY2xvdWRUb2tlbkRlZmF1bHQiLCJnZXRSZXF1ZXN0IiwiaG9zdG5hbWUiLCJIdHRwUmVzcG9uc2UiLCJwb3N0UmVxdWVzdCIsImhlYWRlciIsImNhbGN1bGF0ZVNlY29uZHNMZWZ0IiwiZGF0ZSIsImV4cGlyZXNPbiIsImN1cnJlbnREYXRlIiwiRGF0ZSIsIk1hdGgiLCJmbG9vciIsImdldFRpbWUiLCJpc1ZhbGlkIiwiZ2V0VXNlckhhc2giLCJVc2VyVG9rZW4iLCJnZXRHYW1lcnRhZyIsIkF1dGhvcml6YXRpb25Ub2tlbiIsImd0ZyIsIkRldmljZVRva2VuIiwiTm90QWZ0ZXIiLCJNc2FsVG9rZW4iLCJTaXN1VG9rZW4iLCJzZWNvbmRzTGVmdFRpdGxlIiwiVGl0bGVUb2tlbiIsInNlY29uZHNMZWZ0VXNlciIsInNlY29uZHNMZWZ0QXV0aG9yaXphdGlvbiIsIm1pbiIsIlN0cmVhbWluZ1Rva2VuIiwidG9rZW5EYXRhIiwiX29iamVjdENyZWF0ZVRpbWUiLCJkdXJhdGlvbkluU2Vjb25kcyIsInNlY29uZHNMZWZ0IiwiZ2V0TWFya2V0IiwibWFya2V0IiwiZ2V0UmVnaW9ucyIsIm9mZmVyaW5nU2V0dGluZ3MiLCJyZWdpb25zIiwiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCJyZWdpb24iLCJpc0RlZmF1bHQiLCJfY29udGV4dDIiLCJnZXRFbnZpcm9ubWVudHMiLCJjbGllbnRDbG91ZFNldHRpbmdzIiwiRW52aXJvbm1lbnRzIiwiZXhwaXJlc19vbiIsIlhzdHNUb2tlbiIsImZzIiwiZmlsZXBhdGgiLCJfZmlsZXBhdGgiLCJleGlzdHNTeW5jIiwiZmlsZUNvbnRlbnRzIiwicmVhZEZpbGVTeW5jIiwianNvbiIsImpzb25EYXRhIiwic2V0VXNlclRva2VuIiwiZXhwaXJlRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwiZXhwaXJlc19pbiIsInRvSVNPU3RyaW5nIiwic2V0U2lzdVRva2VuIiwic2V0Snd0S2V5cyIsIndyaXRlRmlsZVN5bmMiLCJyZW1vdmVBbGwiLCJjcnlwdG8iLCJzdWJ0bGUiLCJLZXlPYmplY3QiLCJleHBvcnRKV0siLCJyZXF1aXJlIiwiQXBwSWQiLCJUaXRsZUlkIiwic2V0S2V5cyIsImp3dCIsImtleXMiLCJvcmdKd3RLZXkiLCJpbXBvcnRLZXkiLCJuYW1lZEN1cnZlIiwiand0S2V5IiwicHJpdmF0ZUtleSIsImZyb20iLCJyYXciLCJnZXRLZXlzIiwiX2tleXNJbnN0YW5jZVByb3BlcnR5IiwiZ2VuZXJhdGVLZXlQYWlyU3luYyIsInB1YmxpY0tleSIsImp3ayIsImp3a0tleSIsImFsZyIsInVzZSIsImp3a0tleXMiLCJleHBvcnQiLCJnZXRDb2RlQ2hhbGxhbmdlIiwiY29kZUNoYWxsYW5nZSIsImNvZGVfdmVyaWZpZXIiLCJCdWZmZXIiLCJwc2V1ZG9SYW5kb21CeXRlcyIsImNvZGVfY2hhbGxlbmdlIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsImRpZ2VzdCIsInZhbHVlIiwidmVyaWZpZXIiLCJnZXRSYW5kb21TdGF0ZSIsImJ5dGVzIiwicmFuZG9tQnl0ZXMiLCJnZXREZXZpY2VUb2tlbkhhY2siLCJnZXREZXZpY2VUb2tlbiIsImRldmljZVRva2VuIiwicGF5bG9hZCIsIlByb3BlcnRpZXMiLCJBdXRoTWV0aG9kIiwiSWQiLCJEZXZpY2VUeXBlIiwiU2VyaWFsTnVtYmVyIiwiVmVyc2lvbiIsIlByb29mS2V5IiwiUmVseWluZ1BhcnR5IiwiVG9rZW5UeXBlIiwic2lnbmF0dXJlIiwic2lnbiIsIlNpZ25hdHVyZSIsIkh0dHBDbGllbnQiLCJkb1Npc3VBdXRoZW50aWNhdGlvbiIsIlNhbmRib3giLCJPZmZlcnMiLCJRdWVyeSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsInJlc0JvZHkiLCJTZXNzaW9uSWQiLCJkb1Npc3VBdXRob3JpemF0aW9uIiwiQWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJTaXRlTmFtZSIsIlVzZU1vZGVybkdhbWVydGFnIiwiZXhjaGFuZ2VDb2RlRm9yVG9rZW4iLCJjb2RlVmVyaWZpZXIiLCJfVVJMU2VhcmNoUGFyYW1zIiwicmVmcmVzaFVzZXJUb2tlbiIsInJlZnJlc2hfdG9rZW4iLCJyZWx5aW5nUGFydHkiLCJTYW5kYm94SWQiLCJVc2VyVG9rZW5zIiwiZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JYY2xvdWRUcmFuc2ZlclRva2VuIiwiY2xpZW50X2lkIiwiZ3JhbnRfdHlwZSIsInNjb3BlIiwicmVkaXJlY3RfdXJpIiwib2ZmZXJpbmciLCJmb3JjZVJlZ2lvbklwIiwiYXV0aG9yaXphdGlvblRva2VuIiwid2luZG93c1RpbWVzdGFtcCIsIkJpZ0ludCIsInBhdGhBbmRRdWVyeSIsIl9VUkwiLCJwYXRobmFtZSIsImFsbG9jU2l6ZSIsImJ1ZiIsImFsbG9jIiwid3JpdGVJbnQzMkJFIiwid3JpdGVVSW50OCIsIndyaXRlQmlnVUludDY0QkUiLCJvZmZzZXQiLCJjb3B5IiwiZHNhRW5jb2RpbmciLCJjdXJVc2VyVG9rZW4iLCJUb2tlblJlZnJlc2hFcnJvciIsIl93ZWJUb2tlbiIsInJlZGlyZWN0T2JqZWN0Iiwic2VhcmNoUGFyYW1zIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJhdXRoZW50aWNhdGVVc2VyVXNpbmdDb2RlIiwiRWxlY3Ryb25BcHAiLCJzZXJ2ZSIsIkRlYnVnIiwieGJveFdlYkFwaSIsIkFwcGxpY2F0aW9uIiwiZnVsbHNjcmVlbiIsImF1dG9TdHJlYW0iLCJwcm9jZXNzIiwiTk9ERV9FTlYiLCJDSSIsInZlcnNpb24iLCJfbG9nIiwiY29tbWFuZExpbmUiLCJhcHBlbmRTd2l0Y2giLCJyZWFkU3RhcnR1cEZsYWdzIiwibG9hZEFwcGxpY2F0aW9uRGVmYXVsdHMiLCJleHRlbmQiLCJnZXRTdGFydHVwRmxhZ3MiLCJfc3RhcnR1cEZsYWdzIiwicmVzZXRBdXRvc3RyZWFtIiwiYXJndiIsImFyZyIsIl9pc1Byb2R1Y3Rpb24iLCJfaXNDaSIsImRpcmVjdG9yeSIsInJhbmRvbSIsInNldFBhdGgiLCJnZXRQYXRoIiwid2hlblJlYWR5Iiwib3Blbk1haW5XaW5kb3ciLCJfaXNNYWMiLCJzaG93IiwiX2lzUXVpdHRpbmciLCJwcm9maWxlVXNlcnMiLCJzZXR0aW5nIiwid2luZG93T3B0aW9ucyIsImJhY2tncm91bmRDb2xvciIsInByZXZlbnREZWZhdWx0IiwiaGlkZSIsIm9wZW5HUFVXaW5kb3ciLCJfZ3B1V2luZG93Iiwib3BlbkRldlRvb2xzIiwicmVsYXVuY2giXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/app/preload.js b/app/preload.js index cadae0d..4b92b5b 100644 --- a/app/preload.js +++ b/app/preload.js @@ -4647,7 +4647,7 @@ module.exports = parent; /***/ ((module) => { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.1.0","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debounce":"^2.1.1","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","moment":"^2.30.1","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.5","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"28","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); +module.exports = /*#__PURE__*/JSON.parse('{"private":true,"name":"xstreaming","description":"xstreaming","version":"1.2.0","author":"Geocld ","main":"app/background.js","scripts":{"dev":"DEBUG=xstreaming:authenticationV2 nextron","build":"nextron build","lint":"eslint . --ext .ts && eslint renderer/ --ext .tsx","lint:fix":"eslint . --ext .ts --fix && eslint renderer/ --ext .tsx --fix","postinstall":"electron-builder install-app-deps","publish":"electron-builder -p onTag","flatpak-build":"nextron build --no-pack && electron-builder --dir"},"dependencies":{"@nextui-org/react":"^2.4.6","axios":"^1.7.7","compare-versions":"^6.1.0","debounce":"^2.1.1","debug":"^4.3.4","electron-serve":"^1.3.0","electron-store":"^8.0.1","express":"^4.18.3","express-http-proxy":"^2.0.0","express-ws":"^5.0.2","framer-motion":"^11.5.4","github-url-to-object":"^4.0.6","i18next":"23.14.0","ip-address":"^9.0.5","jose":"^5.1.0","moment":"^2.30.1","next-i18next":"^15.3.1","next-themes":"^0.3.0","react-i18next":"^15.0.1","react-query":"^3.39.3","semver":"^7.6.3","uplot":"^1.6.30","uuid-1345":"^1.0.2","xbox-webapi":"^1.4.1","xstreaming-player":"^0.2.4","xvfb-maybe":"^0.2.1"},"devDependencies":{"@babel/core":"^7.24.4","@fortawesome/fontawesome-free":"^6.5.1","@next/eslint-plugin-next":"^14.2.2","@types/node":"^20.12.7","@types/react":"^18.2.47","@typescript-eslint/eslint-plugin":"^8.6.0","@typescript-eslint/parser":"^8.6.0","autoprefixer":"^10.4.20","babel-loader":"^9.1.3","electron":"33","electron-builder":"^24.13.3","eslint":"^8.57.0","eslint-plugin-react-hooks":"^4.6.2","eslint-plugin-react-refresh":"^0.4.12","next":"^13.5.6","nextron":"^8.13.0","node-loader":"^2.0.0","postcss":"^8.4.45","react":"^18.1.0","react-dom":"^18.1.0","sass":"^1.78.0","tailwindcss":"^3.4.10","typescript":"^5.3.3"},"packageManager":"yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"}'); /***/ }) diff --git a/package-lock.json b/package-lock.json index 90842fd..503a473 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18084,6 +18084,126 @@ "funding": { "url": "https://github.com/sponsors/isaacs" } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", + "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", + "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", + "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", + "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", + "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", + "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", + "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", + "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } } } } diff --git a/package.json b/package.json index 710cbf8..51f8b21 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "private": true, "name": "xstreaming", "description": "xstreaming", - "version": "1.1.0", + "version": "1.2.0", "author": "Geocld ", "main": "app/background.js", "scripts": { @@ -39,7 +39,7 @@ "uplot": "^1.6.30", "uuid-1345": "^1.0.2", "xbox-webapi": "^1.4.1", - "xstreaming-player": "^0.2.4", + "xstreaming-player": "0.2.5", "xvfb-maybe": "^0.2.1" }, "devDependencies": { @@ -52,7 +52,7 @@ "@typescript-eslint/parser": "^8.6.0", "autoprefixer": "^10.4.20", "babel-loader": "^9.1.3", - "electron": "28", + "electron": "33", "electron-builder": "^24.13.3", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", diff --git a/renderer/common/settings.ts b/renderer/common/settings.ts index 536fd52..dcf4d76 100644 --- a/renderer/common/settings.ts +++ b/renderer/common/settings.ts @@ -139,6 +139,14 @@ const getSettingsMetas = (t) => { 'Set the cloud streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)', ) }, + { + name: 'audio_bitrate', + type: 'bitrate', + title: t('Audio bitrate'), + description: t( + 'Set the streaming audio bitrate', + ) + }, ], gamepad: [ { @@ -183,6 +191,20 @@ const getSettingsMetas = (t) => { {value: false, label: t('Disable')}, ], }, + { + name: 'force_trigger_rumble', + type: 'radio', + title: t('Trigger rumble'), + description: t( + 'trigger_rumble_description', + ), + data: [ + {value: '', label: t('Disable')}, + {value: 'all', label: t('All')}, + {value: 'left', label: t('Left trigger')}, + {value: 'right', label: t('Right trigger')}, + ], + }, ], xhome: [ { diff --git a/renderer/context/userContext.defaults.ts b/renderer/context/userContext.defaults.ts index a92924f..e20a0c9 100644 --- a/renderer/context/userContext.defaults.ts +++ b/renderer/context/userContext.defaults.ts @@ -6,6 +6,8 @@ export const defaultSettings = { xhome_bitrate: 20, xcloud_bitrate_mode: "Auto", xcloud_bitrate: 20, + audio_bitrate_mode: "Auto", + audio_bitrate: 20, preferred_game_language: "en-US", force_region_ip: "", codec: "", @@ -14,6 +16,7 @@ export const defaultSettings = { gamepad_kernal: "Native", dead_zone: 0.1, edge_compensation: 0, + force_trigger_rumble: '', power_on: false, video_format: "", virtual_gamepad_opacity: 0.6, diff --git a/renderer/pages/[locale]/stream.tsx b/renderer/pages/[locale]/stream.tsx index 4ac7244..6f7e0eb 100644 --- a/renderer/pages/[locale]/stream.tsx +++ b/renderer/pages/[locale]/stream.tsx @@ -85,6 +85,10 @@ function Stream() { xPlayer.setGamepadMaping(settings.gamepad_maping) } + if (settings.force_trigger_rumble) { + xPlayer.setForceTriggerRumble(settings.force_trigger_rumble) + } + // Set bitrate if (streamType === "cloud") { if ( @@ -110,6 +114,18 @@ function Stream() { } } + // Set audio bitrate + if ( + settings.audio_bitrate_mode === "Custom" && + settings.audio_bitrate !== 0 + ) { + console.log( + "setAudioBitrate:", + settings.audio_bitrate + "Mb/s" + ); + xPlayer.setAudioBitrate(settings.audio_bitrate); + } + xPlayer.setConnectFailHandler(() => { // Not connected if (connectStateRef.current === "") { diff --git a/renderer/pages/[locale]/test.tsx b/renderer/pages/[locale]/test.tsx index a28a276..4e6cdad 100644 --- a/renderer/pages/[locale]/test.tsx +++ b/renderer/pages/[locale]/test.tsx @@ -211,7 +211,35 @@ function GamepadTester() { } }} > - Vibration test + Vibration + + +
diff --git a/renderer/public/locales/en/settings.json b/renderer/public/locales/en/settings.json index 0a2c067..e68d6ba 100644 --- a/renderer/public/locales/en/settings.json +++ b/renderer/public/locales/en/settings.json @@ -41,12 +41,19 @@ "If your device supports newer codecs, it can reduce the video bandwidth requirements": "If your device supports newer codecs, it can reduce the video bandwidth requirements", "Host stream bitrate": "Host stream bitrate", "Cloud stream bitrate": "Cloud stream bitrate", + "Audio bitrate": "Audio bitrate", + "Set the streaming audio bitrate": "Set the streaming audio bitrate", "Set the host streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)": "Set the host streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)", "Set the cloud streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)": "Set the cloud streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)", "Joystick dead zone": "Joystick dead zone", "Config joystick dead zone": "Config joystick dead zone", "Vibration": "Vibration", "If your controller supports vibration, you can set whether it vibrates during the game": "If your controller supports vibration, you can set whether it vibrates during the game", + "Trigger rumble": "Trigger rumble", + "trigger_rumble_description": "Force controller trigger rumbled(Only work in Xbox one/s/x controller)", + "All": "All", + "Left trigger": "Left trigger", + "Right trigger": "Right trigger", "Ipv6": "Ipv6", "Prioritize using IPv6 connection": "Prioritize using IPv6 connection", "Signal server": "Signal server", diff --git a/renderer/public/locales/jp/settings.json b/renderer/public/locales/jp/settings.json index 0a2c067..e68d6ba 100644 --- a/renderer/public/locales/jp/settings.json +++ b/renderer/public/locales/jp/settings.json @@ -41,12 +41,19 @@ "If your device supports newer codecs, it can reduce the video bandwidth requirements": "If your device supports newer codecs, it can reduce the video bandwidth requirements", "Host stream bitrate": "Host stream bitrate", "Cloud stream bitrate": "Cloud stream bitrate", + "Audio bitrate": "Audio bitrate", + "Set the streaming audio bitrate": "Set the streaming audio bitrate", "Set the host streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)": "Set the host streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)", "Set the cloud streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)": "Set the cloud streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)", "Joystick dead zone": "Joystick dead zone", "Config joystick dead zone": "Config joystick dead zone", "Vibration": "Vibration", "If your controller supports vibration, you can set whether it vibrates during the game": "If your controller supports vibration, you can set whether it vibrates during the game", + "Trigger rumble": "Trigger rumble", + "trigger_rumble_description": "Force controller trigger rumbled(Only work in Xbox one/s/x controller)", + "All": "All", + "Left trigger": "Left trigger", + "Right trigger": "Right trigger", "Ipv6": "Ipv6", "Prioritize using IPv6 connection": "Prioritize using IPv6 connection", "Signal server": "Signal server", diff --git a/renderer/public/locales/zh/settings.json b/renderer/public/locales/zh/settings.json index 613ce1d..c1e7c8a 100644 --- a/renderer/public/locales/zh/settings.json +++ b/renderer/public/locales/zh/settings.json @@ -40,12 +40,19 @@ "If your device supports newer codecs, it can reduce the video bandwidth requirements": "如果您的设备支持较新的编解码器,则可以降低视频带宽要求。", "Host stream bitrate": "主机串流码率", "Cloud stream bitrate": "云游戏码率", + "Audio bitrate": "声音", + "Set the streaming audio bitrate": "设置声音码率", "Set the host streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)": "设置主机串流码率(注意:并不是码率越高越好,最终码率以串流协商为准)", "Set the cloud streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)": "设置主机串流码率(注意:并不是码率越高越好,最终码率以串流协商为准)", "Joystick dead zone": "摇杆死区", "Config joystick dead zone": "设置摇杆死区", "Vibration": "振动", "If your controller supports vibration, you can set whether it vibrates during the game": "如果手柄支持振动,可以设置游戏中是否振动。", + "Trigger rumble": "扳机振动", + "trigger_rumble_description": "强制扳机振动(只有你的手柄支持扳机振动才生效)", + "All": "全部", + "Left trigger": "左扳机", + "Right trigger": "右扳机", "Ipv6": "Ipv6", "Prioritize using IPv6 connection": "优先使用Ipv6连接", "Signal server": "信令服务器", diff --git a/renderer/public/locales/zht/settings.json b/renderer/public/locales/zht/settings.json index bdc5db5..f5b4aac 100644 --- a/renderer/public/locales/zht/settings.json +++ b/renderer/public/locales/zht/settings.json @@ -40,13 +40,20 @@ "If your device supports newer codecs, it can reduce the video bandwidth requirements": "如果您的設備支持較新的編解碼器,則可以降低視頻帶寬要求。", "Host stream bitrate": "主機串流碼率", "Cloud stream bitrate": "雲遊戲碼率", + "Audio bitrate": "声音碼率", + "Set the streaming audio bitrate": "設置主機串流声音碼率", "Set the host streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)": "設置主機串流碼率(注意:並不是碼率越高越好,最終碼率以串流協商為準)", "Set the cloud streaming bitrate (Note: Higher bitrate is not always better; the final bitrate will be determined by streaming negotiation)": "設置雲遊戲碼率(注意:並不是碼率越高越好,最終碼率以串流協商為準)", "Joystick dead zone": "搖桿死區", "Config joystick dead zone": "設置搖桿死區", "Vibration": "振動", "If your controller supports vibration, you can set whether it vibrates during the game": "如果手柄支持振動,可以設置遊戲中是否振動。", + "Trigger rumble": "扳机振動", + "trigger_rumble_description": "强制扳机振動(手柄支持扳机振動才生效)", "Ipv6": "Ipv6", + "All": "全部", + "Left trigger": "左扳机", + "Right trigger": "右扳机", "Prioritize using IPv6 connection": "優先使用Ipv6連接", "Signal server": "信令伺服器", "The signaling server is a server for stream negotiation. If the host cannot connect, please try modifying this option": "信令伺服器用於串流開始握手階段,如出現無法連接主機/雲遊戲的情況,請嘗試修改此選項(該選項關閉APP後將重置)", diff --git a/yarn.lock b/yarn.lock index 3d5f8b4..349fd88 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"7zip-bin@~5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz" + integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== + "@alloc/quick-lru@^5.2.0": version "5.2.0" resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" @@ -28,7 +33,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz" integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== -"@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.13.0", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0", "@babel/core@7.24.4": +"@babel/core@7.24.4": version "7.24.4" resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz" integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== @@ -49,7 +54,7 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/core@^7.0.0", "@babel/core@^7.12.0", "@babel/core@^7.24.4": +"@babel/core@^7.24.4": version "7.25.2" resolved "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz" integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== @@ -478,14 +483,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-class-properties@^7.24.1": - version "7.25.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz" - integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/plugin-transform-class-properties@7.24.1": version "7.24.1" resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz" @@ -494,6 +491,14 @@ "@babel/helper-create-class-features-plugin" "^7.24.1" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-class-properties@^7.24.1": + version "7.25.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz" + integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.4" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-transform-class-static-block@^7.24.4": version "7.24.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz" @@ -682,16 +687,6 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.24.1": - version "7.24.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== - dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-object-rest-spread@7.24.1": version "7.24.1" resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz" @@ -702,6 +697,16 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.24.1" +"@babel/plugin-transform-object-rest-spread@^7.24.1": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== + dependencies: + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-object-super@^7.24.1": version "7.24.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz" @@ -718,16 +723,16 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.24.1": - version "7.24.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz" - integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== +"@babel/plugin-transform-optional-chaining@7.24.1": + version "7.24.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz" + integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.24.7": +"@babel/plugin-transform-optional-chaining@^7.24.1", "@babel/plugin-transform-optional-chaining@^7.24.7": version "7.24.8" resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz" integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== @@ -736,15 +741,6 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-optional-chaining@7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz" - integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-transform-parameters@^7.24.1", "@babel/plugin-transform-parameters@^7.24.7": version "7.24.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz" @@ -1002,13 +998,6 @@ core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" -"@babel/runtime@^7.20.13", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.8", "@babel/runtime@^7.24.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": - version "7.25.6" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz" - integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/runtime@7.24.4": version "7.24.4" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz" @@ -1016,6 +1005,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.20.13", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.8", "@babel/runtime@^7.24.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.25.6" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz" + integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.24.0", "@babel/template@^7.24.7", "@babel/template@^7.25.0": version "7.25.0" resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz" @@ -1328,6 +1324,46 @@ resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz" integrity sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA== +"@next/swc-darwin-x64@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz#9c72ee31cc356cb65ce6860b658d807ff39f1578" + integrity sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA== + +"@next/swc-linux-arm64-gnu@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz#59f5f66155e85380ffa26ee3d95b687a770cfeab" + integrity sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg== + +"@next/swc-linux-arm64-musl@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz#f012518228017052736a87d69bae73e587c76ce2" + integrity sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q== + +"@next/swc-linux-x64-gnu@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz#339b867a7e9e7ee727a700b496b269033d820df4" + integrity sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw== + +"@next/swc-linux-x64-musl@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz#ae0ae84d058df758675830bcf70ca1846f1028f2" + integrity sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ== + +"@next/swc-win32-arm64-msvc@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz#a5cc0c16920485a929a17495064671374fdbc661" + integrity sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg== + +"@next/swc-win32-ia32-msvc@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz#6a2409b84a2cbf34bf92fe714896455efb4191e4" + integrity sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg== + +"@next/swc-win32-x64-msvc@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz#4a3e2a206251abc729339ba85f60bc0433c2865d" + integrity sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ== + "@nextui-org/accordion@2.0.38": version "2.0.38" resolved "https://registry.npmjs.org/@nextui-org/accordion/-/accordion-2.0.38.tgz" @@ -1982,7 +2018,7 @@ "@react-types/shared" "3.23.1" clsx "^1.2.1" -"@nextui-org/system@>=2.0.0", "@nextui-org/system@>=2.1.0", "@nextui-org/system@2.2.5": +"@nextui-org/system@2.2.5": version "2.2.5" resolved "https://registry.npmjs.org/@nextui-org/system/-/system-2.2.5.tgz" integrity sha512-nrX6768aiyWtpxX3OTFBIVWR+v9nlMsC3KaBinNfek97sNm7gAfTHi7q5kylE3L5yIMpNG+DclAKpuxgDQEmvw== @@ -2035,7 +2071,7 @@ "@react-types/tabs" "3.3.7" scroll-into-view-if-needed "3.0.10" -"@nextui-org/theme@>=2.1.0", "@nextui-org/theme@>=2.2.0", "@nextui-org/theme@2.2.9": +"@nextui-org/theme@2.2.9": version "2.2.9" resolved "https://registry.npmjs.org/@nextui-org/theme/-/theme-2.2.9.tgz" integrity sha512-TN2I9sMriLaj00pXsIMlg19+UHeOdjzS2JV0u4gjL14mSbQl5BYNxgbvU3gbMqkZZQ6OpwT4RnT8RS+ks6TXCw== @@ -2256,7 +2292,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2438,17 +2474,6 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-aria/focus@^3.17.1", "@react-aria/focus@^3.18.2": - version "3.18.2" - resolved "https://registry.npmjs.org/@react-aria/focus/-/focus-3.18.2.tgz" - integrity sha512-Jc/IY+StjA3uqN73o6txKQ527RFU7gnG5crEl5Xy3V+gbYp2O5L3ezAo/E0Ipi2cyMbG6T5Iit1IDs7hcGu8aw== - dependencies: - "@react-aria/interactions" "^3.22.2" - "@react-aria/utils" "^3.25.2" - "@react-types/shared" "^3.24.1" - "@swc/helpers" "^0.5.0" - clsx "^2.0.0" - "@react-aria/focus@3.17.1": version "3.17.1" resolved "https://registry.npmjs.org/@react-aria/focus/-/focus-3.17.1.tgz" @@ -2460,16 +2485,16 @@ "@swc/helpers" "^0.5.0" clsx "^2.0.0" -"@react-aria/form@^3.0.5", "@react-aria/form@^3.0.8": - version "3.0.8" - resolved "https://registry.npmjs.org/@react-aria/form/-/form-3.0.8.tgz" - integrity sha512-8S2QiyUdAgK43M3flohI0R+2rTyzH088EmgeRArA8euvJTL16cj/oSOKMEgWVihjotJ9n6awPb43ZhKboyNsMg== +"@react-aria/focus@^3.17.1", "@react-aria/focus@^3.18.2": + version "3.18.2" + resolved "https://registry.npmjs.org/@react-aria/focus/-/focus-3.18.2.tgz" + integrity sha512-Jc/IY+StjA3uqN73o6txKQ527RFU7gnG5crEl5Xy3V+gbYp2O5L3ezAo/E0Ipi2cyMbG6T5Iit1IDs7hcGu8aw== dependencies: "@react-aria/interactions" "^3.22.2" "@react-aria/utils" "^3.25.2" - "@react-stately/form" "^3.0.5" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" + clsx "^2.0.0" "@react-aria/form@3.0.5": version "3.0.5" @@ -2482,6 +2507,17 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" +"@react-aria/form@^3.0.5", "@react-aria/form@^3.0.8": + version "3.0.8" + resolved "https://registry.npmjs.org/@react-aria/form/-/form-3.0.8.tgz" + integrity sha512-8S2QiyUdAgK43M3flohI0R+2rTyzH088EmgeRArA8euvJTL16cj/oSOKMEgWVihjotJ9n6awPb43ZhKboyNsMg== + dependencies: + "@react-aria/interactions" "^3.22.2" + "@react-aria/utils" "^3.25.2" + "@react-stately/form" "^3.0.5" + "@react-types/shared" "^3.24.1" + "@swc/helpers" "^0.5.0" + "@react-aria/grid@^3.9.1": version "3.10.3" resolved "https://registry.npmjs.org/@react-aria/grid/-/grid-3.10.3.tgz" @@ -2501,20 +2537,6 @@ "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" -"@react-aria/i18n@^3.11.1", "@react-aria/i18n@^3.12.2": - version "3.12.2" - resolved "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.12.2.tgz" - integrity sha512-PvEyC6JWylTpe8dQEWqQwV6GiA+pbTxHQd//BxtMSapRW3JT9obObAnb/nFhj3HthkUvqHyj0oO1bfeN+mtD8A== - dependencies: - "@internationalized/date" "^3.5.5" - "@internationalized/message" "^3.1.4" - "@internationalized/number" "^3.5.3" - "@internationalized/string" "^3.2.3" - "@react-aria/ssr" "^3.9.5" - "@react-aria/utils" "^3.25.2" - "@react-types/shared" "^3.24.1" - "@swc/helpers" "^0.5.0" - "@react-aria/i18n@3.11.1": version "3.11.1" resolved "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.11.1.tgz" @@ -2529,11 +2551,15 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-aria/interactions@^3.21.3", "@react-aria/interactions@^3.22.2": - version "3.22.2" - resolved "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.22.2.tgz" - integrity sha512-xE/77fRVSlqHp2sfkrMeNLrqf2amF/RyuAS6T5oDJemRSgYM3UoxTbWjucPhfnoW7r32pFPHHgz4lbdX8xqD/g== +"@react-aria/i18n@^3.11.1", "@react-aria/i18n@^3.12.2": + version "3.12.2" + resolved "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.12.2.tgz" + integrity sha512-PvEyC6JWylTpe8dQEWqQwV6GiA+pbTxHQd//BxtMSapRW3JT9obObAnb/nFhj3HthkUvqHyj0oO1bfeN+mtD8A== dependencies: + "@internationalized/date" "^3.5.5" + "@internationalized/message" "^3.1.4" + "@internationalized/number" "^3.5.3" + "@internationalized/string" "^3.2.3" "@react-aria/ssr" "^3.9.5" "@react-aria/utils" "^3.25.2" "@react-types/shared" "^3.24.1" @@ -2549,11 +2575,12 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-aria/label@^3.7.11", "@react-aria/label@^3.7.8": - version "3.7.11" - resolved "https://registry.npmjs.org/@react-aria/label/-/label-3.7.11.tgz" - integrity sha512-REgejE5Qr8cXG/b8H2GhzQmjQlII/0xQW/4eDzydskaTLvA7lF5HoJUE6biYTquH5va38d8XlH465RPk+bvHzA== +"@react-aria/interactions@^3.21.3", "@react-aria/interactions@^3.22.2": + version "3.22.2" + resolved "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.22.2.tgz" + integrity sha512-xE/77fRVSlqHp2sfkrMeNLrqf2amF/RyuAS6T5oDJemRSgYM3UoxTbWjucPhfnoW7r32pFPHHgz4lbdX8xqD/g== dependencies: + "@react-aria/ssr" "^3.9.5" "@react-aria/utils" "^3.25.2" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -2567,15 +2594,12 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-aria/link@^3.7.1": - version "3.7.4" - resolved "https://registry.npmjs.org/@react-aria/link/-/link-3.7.4.tgz" - integrity sha512-E8SLDuS9ssm/d42+3sDFNthfMcNXMUrT2Tq1DIZt22EsMcuEzmJ9B0P7bDP5RgvIw05xVGqZ20nOpU4mKTxQtA== +"@react-aria/label@^3.7.11", "@react-aria/label@^3.7.8": + version "3.7.11" + resolved "https://registry.npmjs.org/@react-aria/label/-/label-3.7.11.tgz" + integrity sha512-REgejE5Qr8cXG/b8H2GhzQmjQlII/0xQW/4eDzydskaTLvA7lF5HoJUE6biYTquH5va38d8XlH465RPk+bvHzA== dependencies: - "@react-aria/focus" "^3.18.2" - "@react-aria/interactions" "^3.22.2" "@react-aria/utils" "^3.25.2" - "@react-types/link" "^3.5.7" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -2591,18 +2615,15 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-aria/listbox@^3.12.1": - version "3.13.3" - resolved "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.13.3.tgz" - integrity sha512-htluPyDfFtn66OEYaJdIaFCYH9wGCNk30vOgZrQkPul9F9Cjce52tTyPVR0ERsf14oCUsjjS5qgeq3dGidRqEw== +"@react-aria/link@^3.7.1": + version "3.7.4" + resolved "https://registry.npmjs.org/@react-aria/link/-/link-3.7.4.tgz" + integrity sha512-E8SLDuS9ssm/d42+3sDFNthfMcNXMUrT2Tq1DIZt22EsMcuEzmJ9B0P7bDP5RgvIw05xVGqZ20nOpU4mKTxQtA== dependencies: + "@react-aria/focus" "^3.18.2" "@react-aria/interactions" "^3.22.2" - "@react-aria/label" "^3.7.11" - "@react-aria/selection" "^3.19.3" "@react-aria/utils" "^3.25.2" - "@react-stately/collections" "^3.10.9" - "@react-stately/list" "^3.10.8" - "@react-types/listbox" "^3.5.1" + "@react-types/link" "^3.5.7" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -2621,32 +2642,28 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-aria/live-announcer@^3.3.4": - version "3.3.4" - resolved "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.4.tgz" - integrity sha512-w8lxs35QrRrn6pBNzVfyGOeqWdxeVKf9U6bXIVwhq7rrTqRULL8jqy8RJIMfIs1s8G5FpwWYjyBOjl2g5Cu1iA== - dependencies: - "@swc/helpers" "^0.5.0" - -"@react-aria/menu@^3.14.1": - version "3.15.3" - resolved "https://registry.npmjs.org/@react-aria/menu/-/menu-3.15.3.tgz" - integrity sha512-vvUmVjJwIg3h2r+7isQXTwlmoDlPAFBckHkg94p3afrT1kNOTHveTsaVl17mStx/ymIioaAi3PrIXk/PZXp1jw== +"@react-aria/listbox@^3.12.1": + version "3.13.3" + resolved "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.13.3.tgz" + integrity sha512-htluPyDfFtn66OEYaJdIaFCYH9wGCNk30vOgZrQkPul9F9Cjce52tTyPVR0ERsf14oCUsjjS5qgeq3dGidRqEw== dependencies: - "@react-aria/focus" "^3.18.2" - "@react-aria/i18n" "^3.12.2" "@react-aria/interactions" "^3.22.2" - "@react-aria/overlays" "^3.23.2" + "@react-aria/label" "^3.7.11" "@react-aria/selection" "^3.19.3" "@react-aria/utils" "^3.25.2" "@react-stately/collections" "^3.10.9" - "@react-stately/menu" "^3.8.2" - "@react-stately/tree" "^3.8.4" - "@react-types/button" "^3.9.6" - "@react-types/menu" "^3.9.11" + "@react-stately/list" "^3.10.8" + "@react-types/listbox" "^3.5.1" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" +"@react-aria/live-announcer@^3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.4.tgz" + integrity sha512-w8lxs35QrRrn6pBNzVfyGOeqWdxeVKf9U6bXIVwhq7rrTqRULL8jqy8RJIMfIs1s8G5FpwWYjyBOjl2g5Cu1iA== + dependencies: + "@swc/helpers" "^0.5.0" + "@react-aria/menu@3.14.1": version "3.14.1" resolved "https://registry.npmjs.org/@react-aria/menu/-/menu-3.14.1.tgz" @@ -2666,20 +2683,22 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-aria/overlays@^3.22.1", "@react-aria/overlays@^3.23.2": - version "3.23.2" - resolved "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.23.2.tgz" - integrity sha512-vjlplr953YAuJfHiP4O+CyrTlr6OaFgXAGrzWq4MVMjnpV/PT5VRJWYFHR0sUGlHTPqeKS4NZbi/xCSgl/3pGQ== +"@react-aria/menu@^3.14.1": + version "3.15.3" + resolved "https://registry.npmjs.org/@react-aria/menu/-/menu-3.15.3.tgz" + integrity sha512-vvUmVjJwIg3h2r+7isQXTwlmoDlPAFBckHkg94p3afrT1kNOTHveTsaVl17mStx/ymIioaAi3PrIXk/PZXp1jw== dependencies: "@react-aria/focus" "^3.18.2" "@react-aria/i18n" "^3.12.2" "@react-aria/interactions" "^3.22.2" - "@react-aria/ssr" "^3.9.5" + "@react-aria/overlays" "^3.23.2" + "@react-aria/selection" "^3.19.3" "@react-aria/utils" "^3.25.2" - "@react-aria/visually-hidden" "^3.8.15" - "@react-stately/overlays" "^3.6.10" + "@react-stately/collections" "^3.10.9" + "@react-stately/menu" "^3.8.2" + "@react-stately/tree" "^3.8.4" "@react-types/button" "^3.9.6" - "@react-types/overlays" "^3.8.9" + "@react-types/menu" "^3.9.11" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -2700,6 +2719,23 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" +"@react-aria/overlays@^3.22.1", "@react-aria/overlays@^3.23.2": + version "3.23.2" + resolved "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.23.2.tgz" + integrity sha512-vjlplr953YAuJfHiP4O+CyrTlr6OaFgXAGrzWq4MVMjnpV/PT5VRJWYFHR0sUGlHTPqeKS4NZbi/xCSgl/3pGQ== + dependencies: + "@react-aria/focus" "^3.18.2" + "@react-aria/i18n" "^3.12.2" + "@react-aria/interactions" "^3.22.2" + "@react-aria/ssr" "^3.9.5" + "@react-aria/utils" "^3.25.2" + "@react-aria/visually-hidden" "^3.8.15" + "@react-stately/overlays" "^3.6.10" + "@react-types/button" "^3.9.6" + "@react-types/overlays" "^3.8.9" + "@react-types/shared" "^3.24.1" + "@swc/helpers" "^0.5.0" + "@react-aria/progress@3.4.13": version "3.4.13" resolved "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.13.tgz" @@ -2728,19 +2764,6 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-aria/selection@^3.18.1", "@react-aria/selection@^3.19.3": - version "3.19.3" - resolved "https://registry.npmjs.org/@react-aria/selection/-/selection-3.19.3.tgz" - integrity sha512-GYoObXCXlmGK08hp7Qfl6Bk0U+bKP5YDWSsX+MzNjJsqzQSLm4S06tRB9ACM7gIo9dDCvL4IRxdSYTJAlJc6bw== - dependencies: - "@react-aria/focus" "^3.18.2" - "@react-aria/i18n" "^3.12.2" - "@react-aria/interactions" "^3.22.2" - "@react-aria/utils" "^3.25.2" - "@react-stately/selection" "^3.16.2" - "@react-types/shared" "^3.24.1" - "@swc/helpers" "^0.5.0" - "@react-aria/selection@3.18.1": version "3.18.1" resolved "https://registry.npmjs.org/@react-aria/selection/-/selection-3.18.1.tgz" @@ -2754,6 +2777,19 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" +"@react-aria/selection@^3.18.1", "@react-aria/selection@^3.19.3": + version "3.19.3" + resolved "https://registry.npmjs.org/@react-aria/selection/-/selection-3.19.3.tgz" + integrity sha512-GYoObXCXlmGK08hp7Qfl6Bk0U+bKP5YDWSsX+MzNjJsqzQSLm4S06tRB9ACM7gIo9dDCvL4IRxdSYTJAlJc6bw== + dependencies: + "@react-aria/focus" "^3.18.2" + "@react-aria/i18n" "^3.12.2" + "@react-aria/interactions" "^3.22.2" + "@react-aria/utils" "^3.25.2" + "@react-stately/selection" "^3.16.2" + "@react-types/shared" "^3.24.1" + "@swc/helpers" "^0.5.0" + "@react-aria/slider@3.7.8": version "3.7.8" resolved "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.8.tgz" @@ -2781,13 +2817,6 @@ "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" -"@react-aria/ssr@^3.9.4", "@react-aria/ssr@^3.9.5": - version "3.9.5" - resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.5.tgz" - integrity sha512-xEwGKoysu+oXulibNUSkXf8itW0npHHTa6c4AyYeZIJyRoegeteYuFpZUBPtIDE8RfHdNsSmE1ssOkxRnwbkuQ== - dependencies: - "@swc/helpers" "^0.5.0" - "@react-aria/ssr@3.9.4": version "3.9.4" resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.4.tgz" @@ -2795,6 +2824,13 @@ dependencies: "@swc/helpers" "^0.5.0" +"@react-aria/ssr@^3.9.4", "@react-aria/ssr@^3.9.5": + version "3.9.5" + resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.5.tgz" + integrity sha512-xEwGKoysu+oXulibNUSkXf8itW0npHHTa6c4AyYeZIJyRoegeteYuFpZUBPtIDE8RfHdNsSmE1ssOkxRnwbkuQ== + dependencies: + "@swc/helpers" "^0.5.0" + "@react-aria/switch@3.6.4": version "3.6.4" resolved "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.4.tgz" @@ -2841,21 +2877,6 @@ "@react-types/tabs" "^3.3.7" "@swc/helpers" "^0.5.0" -"@react-aria/textfield@^3.14.5": - version "3.14.8" - resolved "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.8.tgz" - integrity sha512-FHEvsHdE1cMR2B7rlf+HIneITrC40r201oLYbHAp3q26jH/HUujzFBB9I20qhXjyBohMWfQLqJhSwhs1VW1RJQ== - dependencies: - "@react-aria/focus" "^3.18.2" - "@react-aria/form" "^3.0.8" - "@react-aria/label" "^3.7.11" - "@react-aria/utils" "^3.25.2" - "@react-stately/form" "^3.0.5" - "@react-stately/utils" "^3.10.3" - "@react-types/shared" "^3.24.1" - "@react-types/textfield" "^3.9.6" - "@swc/helpers" "^0.5.0" - "@react-aria/textfield@3.14.5": version "3.14.5" resolved "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.5.tgz" @@ -2871,6 +2892,21 @@ "@react-types/textfield" "^3.9.3" "@swc/helpers" "^0.5.0" +"@react-aria/textfield@^3.14.5": + version "3.14.8" + resolved "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.8.tgz" + integrity sha512-FHEvsHdE1cMR2B7rlf+HIneITrC40r201oLYbHAp3q26jH/HUujzFBB9I20qhXjyBohMWfQLqJhSwhs1VW1RJQ== + dependencies: + "@react-aria/focus" "^3.18.2" + "@react-aria/form" "^3.0.8" + "@react-aria/label" "^3.7.11" + "@react-aria/utils" "^3.25.2" + "@react-stately/form" "^3.0.5" + "@react-stately/utils" "^3.10.3" + "@react-types/shared" "^3.24.1" + "@react-types/textfield" "^3.9.6" + "@swc/helpers" "^0.5.0" + "@react-aria/toggle@^3.10.4": version "3.10.7" resolved "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.7.tgz" @@ -2897,17 +2933,6 @@ "@react-types/tooltip" "^3.4.9" "@swc/helpers" "^0.5.0" -"@react-aria/utils@^3.24.1", "@react-aria/utils@^3.25.2": - version "3.25.2" - resolved "https://registry.npmjs.org/@react-aria/utils/-/utils-3.25.2.tgz" - integrity sha512-GdIvG8GBJJZygB4L2QJP1Gabyn2mjFsha73I2wSe+o4DYeGWoJiMZRM06PyTIxLH4S7Sn7eVDtsSBfkc2VY/NA== - dependencies: - "@react-aria/ssr" "^3.9.5" - "@react-stately/utils" "^3.10.3" - "@react-types/shared" "^3.24.1" - "@swc/helpers" "^0.5.0" - clsx "^2.0.0" - "@react-aria/utils@3.24.1": version "3.24.1" resolved "https://registry.npmjs.org/@react-aria/utils/-/utils-3.24.1.tgz" @@ -2919,25 +2944,16 @@ "@swc/helpers" "^0.5.0" clsx "^2.0.0" -"@react-aria/visually-hidden@^3.8.12": - version "3.8.15" - resolved "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.15.tgz" - integrity sha512-l+sJ7xTdD5Sd6+rDNDaeJCSPnHOsI+BaJyApvb/YcVgHa7rB47lp6TXCWUCDItcPY4JqRGyeByRJVrtzBFTWCw== - dependencies: - "@react-aria/interactions" "^3.22.2" - "@react-aria/utils" "^3.25.2" - "@react-types/shared" "^3.24.1" - "@swc/helpers" "^0.5.0" - -"@react-aria/visually-hidden@^3.8.15": - version "3.8.15" - resolved "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.15.tgz" - integrity sha512-l+sJ7xTdD5Sd6+rDNDaeJCSPnHOsI+BaJyApvb/YcVgHa7rB47lp6TXCWUCDItcPY4JqRGyeByRJVrtzBFTWCw== +"@react-aria/utils@^3.24.1", "@react-aria/utils@^3.25.2": + version "3.25.2" + resolved "https://registry.npmjs.org/@react-aria/utils/-/utils-3.25.2.tgz" + integrity sha512-GdIvG8GBJJZygB4L2QJP1Gabyn2mjFsha73I2wSe+o4DYeGWoJiMZRM06PyTIxLH4S7Sn7eVDtsSBfkc2VY/NA== dependencies: - "@react-aria/interactions" "^3.22.2" - "@react-aria/utils" "^3.25.2" + "@react-aria/ssr" "^3.9.5" + "@react-stately/utils" "^3.10.3" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" + clsx "^2.0.0" "@react-aria/visually-hidden@3.8.12": version "3.8.12" @@ -2949,14 +2965,13 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-stately/calendar@^3.5.1": - version "3.5.4" - resolved "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.5.4.tgz" - integrity sha512-R2011mtFSXIjzMXaA+CZ1sflPm9XkTBMqVk77Bnxso2ZsG7FUX8nqFmaDavxwTuHFC6OUexAGSMs8bP9KycTNg== +"@react-aria/visually-hidden@^3.8.12", "@react-aria/visually-hidden@^3.8.15": + version "3.8.15" + resolved "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.15.tgz" + integrity sha512-l+sJ7xTdD5Sd6+rDNDaeJCSPnHOsI+BaJyApvb/YcVgHa7rB47lp6TXCWUCDItcPY4JqRGyeByRJVrtzBFTWCw== dependencies: - "@internationalized/date" "^3.5.5" - "@react-stately/utils" "^3.10.3" - "@react-types/calendar" "^3.4.9" + "@react-aria/interactions" "^3.22.2" + "@react-aria/utils" "^3.25.2" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -2971,14 +2986,14 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-stately/checkbox@^3.6.5": - version "3.6.8" - resolved "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.8.tgz" - integrity sha512-c8TWjU67XHHBCpqj6+FXXhQUWGr2Pil1IKggX81pkedhWiJl3/7+WHJuZI0ivGnRjp3aISNOG8UNVlBEjS9E8A== +"@react-stately/calendar@^3.5.1": + version "3.5.4" + resolved "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.5.4.tgz" + integrity sha512-R2011mtFSXIjzMXaA+CZ1sflPm9XkTBMqVk77Bnxso2ZsG7FUX8nqFmaDavxwTuHFC6OUexAGSMs8bP9KycTNg== dependencies: - "@react-stately/form" "^3.0.5" + "@internationalized/date" "^3.5.5" "@react-stately/utils" "^3.10.3" - "@react-types/checkbox" "^3.8.3" + "@react-types/calendar" "^3.4.9" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -2993,11 +3008,14 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-stately/collections@^3.10.7", "@react-stately/collections@^3.10.9": - version "3.10.9" - resolved "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.9.tgz" - integrity sha512-plyrng6hOQMG8LrjArMA6ts/DgWyXln3g90/hFNbqe/hdVYF53sDVsj8Jb+5LtoYTpiAlV6eOvy1XR0vPZUf8w== +"@react-stately/checkbox@^3.6.5": + version "3.6.8" + resolved "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.8.tgz" + integrity sha512-c8TWjU67XHHBCpqj6+FXXhQUWGr2Pil1IKggX81pkedhWiJl3/7+WHJuZI0ivGnRjp3aISNOG8UNVlBEjS9E8A== dependencies: + "@react-stately/form" "^3.0.5" + "@react-stately/utils" "^3.10.3" + "@react-types/checkbox" "^3.8.3" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -3009,18 +3027,11 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-stately/combobox@^3.8.4": - version "3.9.2" - resolved "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.9.2.tgz" - integrity sha512-ZsbAcD58IvxZqwYxg9d2gOf8R/k5RUB2TPUiGKD6wgWfEKH6SDzY3bgRByHGOyMCyJB62cHjih/ZShizNTguqA== +"@react-stately/collections@^3.10.7", "@react-stately/collections@^3.10.9": + version "3.10.9" + resolved "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.9.tgz" + integrity sha512-plyrng6hOQMG8LrjArMA6ts/DgWyXln3g90/hFNbqe/hdVYF53sDVsj8Jb+5LtoYTpiAlV6eOvy1XR0vPZUf8w== dependencies: - "@react-stately/collections" "^3.10.9" - "@react-stately/form" "^3.0.5" - "@react-stately/list" "^3.10.8" - "@react-stately/overlays" "^3.6.10" - "@react-stately/select" "^3.6.7" - "@react-stately/utils" "^3.10.3" - "@react-types/combobox" "^3.12.1" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -3039,17 +3050,18 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-stately/datepicker@^3.9.4": - version "3.10.2" - resolved "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.10.2.tgz" - integrity sha512-pa5IZUw+49AyOnddwu4XwU2kI5eo/1thbiIVNHP8uDpbbBrBkquSk3zVFDAGX1cu/I1U2VUkt64U/dxgkwaMQw== +"@react-stately/combobox@^3.8.4": + version "3.9.2" + resolved "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.9.2.tgz" + integrity sha512-ZsbAcD58IvxZqwYxg9d2gOf8R/k5RUB2TPUiGKD6wgWfEKH6SDzY3bgRByHGOyMCyJB62cHjih/ZShizNTguqA== dependencies: - "@internationalized/date" "^3.5.5" - "@internationalized/string" "^3.2.3" + "@react-stately/collections" "^3.10.9" "@react-stately/form" "^3.0.5" + "@react-stately/list" "^3.10.8" "@react-stately/overlays" "^3.6.10" + "@react-stately/select" "^3.6.7" "@react-stately/utils" "^3.10.3" - "@react-types/datepicker" "^3.8.2" + "@react-types/combobox" "^3.12.1" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -3067,6 +3079,20 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" +"@react-stately/datepicker@^3.9.4": + version "3.10.2" + resolved "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.10.2.tgz" + integrity sha512-pa5IZUw+49AyOnddwu4XwU2kI5eo/1thbiIVNHP8uDpbbBrBkquSk3zVFDAGX1cu/I1U2VUkt64U/dxgkwaMQw== + dependencies: + "@internationalized/date" "^3.5.5" + "@internationalized/string" "^3.2.3" + "@react-stately/form" "^3.0.5" + "@react-stately/overlays" "^3.6.10" + "@react-stately/utils" "^3.10.3" + "@react-types/datepicker" "^3.8.2" + "@react-types/shared" "^3.24.1" + "@swc/helpers" "^0.5.0" + "@react-stately/flags@^3.0.3": version "3.0.3" resolved "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.3.tgz" @@ -3074,14 +3100,6 @@ dependencies: "@swc/helpers" "^0.5.0" -"@react-stately/form@^3.0.3", "@react-stately/form@^3.0.5": - version "3.0.5" - resolved "https://registry.npmjs.org/@react-stately/form/-/form-3.0.5.tgz" - integrity sha512-J3plwJ63HQz109OdmaTqTA8Qhvl3gcYYK7DtgKyNP6mc/Me2Q4tl2avkWoA+22NRuv5m+J8TpBk4AVHUEOwqeQ== - dependencies: - "@react-types/shared" "^3.24.1" - "@swc/helpers" "^0.5.0" - "@react-stately/form@3.0.3": version "3.0.3" resolved "https://registry.npmjs.org/@react-stately/form/-/form-3.0.3.tgz" @@ -3090,6 +3108,14 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" +"@react-stately/form@^3.0.3", "@react-stately/form@^3.0.5": + version "3.0.5" + resolved "https://registry.npmjs.org/@react-stately/form/-/form-3.0.5.tgz" + integrity sha512-J3plwJ63HQz109OdmaTqTA8Qhvl3gcYYK7DtgKyNP6mc/Me2Q4tl2avkWoA+22NRuv5m+J8TpBk4AVHUEOwqeQ== + dependencies: + "@react-types/shared" "^3.24.1" + "@swc/helpers" "^0.5.0" + "@react-stately/grid@^3.8.7", "@react-stately/grid@^3.9.2": version "3.9.2" resolved "https://registry.npmjs.org/@react-stately/grid/-/grid-3.9.2.tgz" @@ -3101,17 +3127,6 @@ "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" -"@react-stately/list@^3.10.5", "@react-stately/list@^3.10.8": - version "3.10.8" - resolved "https://registry.npmjs.org/@react-stately/list/-/list-3.10.8.tgz" - integrity sha512-rHCiPLXd+Ry3ztR9DkLA5FPQeH4Zd4/oJAEDWJ77W3oBBOdiMp3ZdHDLP7KBRh17XGNLO/QruYoHWAQTPiMF4g== - dependencies: - "@react-stately/collections" "^3.10.9" - "@react-stately/selection" "^3.16.2" - "@react-stately/utils" "^3.10.3" - "@react-types/shared" "^3.24.1" - "@swc/helpers" "^0.5.0" - "@react-stately/list@3.10.5": version "3.10.5" resolved "https://registry.npmjs.org/@react-stately/list/-/list-3.10.5.tgz" @@ -3123,23 +3138,14 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-stately/menu@^3.7.1": - version "3.8.2" - resolved "https://registry.npmjs.org/@react-stately/menu/-/menu-3.8.2.tgz" - integrity sha512-lt6hIHmSixMzkKx1rKJf3lbAf01EmEvvIlENL20GLiU9cRbpPnPJ1aJMZ5Ad5ygglA7wAemAx+daPhlTQfF2rg== - dependencies: - "@react-stately/overlays" "^3.6.10" - "@react-types/menu" "^3.9.11" - "@react-types/shared" "^3.24.1" - "@swc/helpers" "^0.5.0" - -"@react-stately/menu@^3.8.2": - version "3.8.2" - resolved "https://registry.npmjs.org/@react-stately/menu/-/menu-3.8.2.tgz" - integrity sha512-lt6hIHmSixMzkKx1rKJf3lbAf01EmEvvIlENL20GLiU9cRbpPnPJ1aJMZ5Ad5ygglA7wAemAx+daPhlTQfF2rg== +"@react-stately/list@^3.10.5", "@react-stately/list@^3.10.8": + version "3.10.8" + resolved "https://registry.npmjs.org/@react-stately/list/-/list-3.10.8.tgz" + integrity sha512-rHCiPLXd+Ry3ztR9DkLA5FPQeH4Zd4/oJAEDWJ77W3oBBOdiMp3ZdHDLP7KBRh17XGNLO/QruYoHWAQTPiMF4g== dependencies: - "@react-stately/overlays" "^3.6.10" - "@react-types/menu" "^3.9.11" + "@react-stately/collections" "^3.10.9" + "@react-stately/selection" "^3.16.2" + "@react-stately/utils" "^3.10.3" "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" @@ -3153,13 +3159,14 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-stately/overlays@^3.6.10", "@react-stately/overlays@^3.6.7": - version "3.6.10" - resolved "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.10.tgz" - integrity sha512-XxZ2qScT5JPwGk9qiVJE4dtVh3AXTcYwGRA5RsHzC26oyVVsegPqY2PmNJGblAh6Q57VyodoVUyebE0Eo5CzRw== +"@react-stately/menu@^3.7.1", "@react-stately/menu@^3.8.2": + version "3.8.2" + resolved "https://registry.npmjs.org/@react-stately/menu/-/menu-3.8.2.tgz" + integrity sha512-lt6hIHmSixMzkKx1rKJf3lbAf01EmEvvIlENL20GLiU9cRbpPnPJ1aJMZ5Ad5ygglA7wAemAx+daPhlTQfF2rg== dependencies: - "@react-stately/utils" "^3.10.3" - "@react-types/overlays" "^3.8.9" + "@react-stately/overlays" "^3.6.10" + "@react-types/menu" "^3.9.11" + "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" "@react-stately/overlays@3.6.7": @@ -3171,15 +3178,13 @@ "@react-types/overlays" "^3.8.7" "@swc/helpers" "^0.5.0" -"@react-stately/radio@^3.10.4": - version "3.10.7" - resolved "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.7.tgz" - integrity sha512-ZwGzFR+sGd42DxRlDTp3G2vLZyhMVtgHkwv2BxazPHxPMvLO9yYl7+3PPNxAmhMB4tg2u9CrzffpGX2rmEJEXA== +"@react-stately/overlays@^3.6.10", "@react-stately/overlays@^3.6.7": + version "3.6.10" + resolved "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.10.tgz" + integrity sha512-XxZ2qScT5JPwGk9qiVJE4dtVh3AXTcYwGRA5RsHzC26oyVVsegPqY2PmNJGblAh6Q57VyodoVUyebE0Eo5CzRw== dependencies: - "@react-stately/form" "^3.0.5" "@react-stately/utils" "^3.10.3" - "@react-types/radio" "^3.8.3" - "@react-types/shared" "^3.24.1" + "@react-types/overlays" "^3.8.9" "@swc/helpers" "^0.5.0" "@react-stately/radio@3.10.4": @@ -3193,6 +3198,17 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" +"@react-stately/radio@^3.10.4": + version "3.10.7" + resolved "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.7.tgz" + integrity sha512-ZwGzFR+sGd42DxRlDTp3G2vLZyhMVtgHkwv2BxazPHxPMvLO9yYl7+3PPNxAmhMB4tg2u9CrzffpGX2rmEJEXA== + dependencies: + "@react-stately/form" "^3.0.5" + "@react-stately/utils" "^3.10.3" + "@react-types/radio" "^3.8.3" + "@react-types/shared" "^3.24.1" + "@swc/helpers" "^0.5.0" + "@react-stately/select@^3.6.4", "@react-stately/select@^3.6.7": version "3.6.7" resolved "https://registry.npmjs.org/@react-stately/select/-/select-3.6.7.tgz" @@ -3215,16 +3231,6 @@ "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" -"@react-stately/slider@^3.5.4": - version "3.5.7" - resolved "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.7.tgz" - integrity sha512-gEIGTcpBLcXixd8LYiLc8HKrBiGQJltrrEGoOvvTP8KVItXQxmeL+JiSsh8qgOoUdRRpzmAoFNUKGEg2/gtN8A== - dependencies: - "@react-stately/utils" "^3.10.3" - "@react-types/shared" "^3.24.1" - "@react-types/slider" "^3.7.5" - "@swc/helpers" "^0.5.0" - "@react-stately/slider@3.5.4": version "3.5.4" resolved "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.4.tgz" @@ -3235,19 +3241,14 @@ "@react-types/slider" "^3.7.3" "@swc/helpers" "^0.5.0" -"@react-stately/table@^3.11.8": - version "3.12.2" - resolved "https://registry.npmjs.org/@react-stately/table/-/table-3.12.2.tgz" - integrity sha512-dUcsrdALylhWz6exqIoqtR/dnrzjIAptMyAUPT378Y/mCYs4PxKkHSvtPEQrZhdQS1ALIIgfeg9KUVIempoXPw== +"@react-stately/slider@^3.5.4": + version "3.5.7" + resolved "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.7.tgz" + integrity sha512-gEIGTcpBLcXixd8LYiLc8HKrBiGQJltrrEGoOvvTP8KVItXQxmeL+JiSsh8qgOoUdRRpzmAoFNUKGEg2/gtN8A== dependencies: - "@react-stately/collections" "^3.10.9" - "@react-stately/flags" "^3.0.3" - "@react-stately/grid" "^3.9.2" - "@react-stately/selection" "^3.16.2" "@react-stately/utils" "^3.10.3" - "@react-types/grid" "^3.2.8" "@react-types/shared" "^3.24.1" - "@react-types/table" "^3.10.1" + "@react-types/slider" "^3.7.5" "@swc/helpers" "^0.5.0" "@react-stately/table@3.11.8": @@ -3265,14 +3266,19 @@ "@react-types/table" "^3.9.5" "@swc/helpers" "^0.5.0" -"@react-stately/tabs@^3.6.6": - version "3.6.9" - resolved "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.9.tgz" - integrity sha512-YZDqZng3HrRX+uXmg6u78x73Oi24G5ICpiXVqDKKDkO333XCA5H8MWItiuPZkYB2h3SbaCaLqSobLkvCoWYpNQ== +"@react-stately/table@^3.11.8": + version "3.12.2" + resolved "https://registry.npmjs.org/@react-stately/table/-/table-3.12.2.tgz" + integrity sha512-dUcsrdALylhWz6exqIoqtR/dnrzjIAptMyAUPT378Y/mCYs4PxKkHSvtPEQrZhdQS1ALIIgfeg9KUVIempoXPw== dependencies: - "@react-stately/list" "^3.10.8" + "@react-stately/collections" "^3.10.9" + "@react-stately/flags" "^3.0.3" + "@react-stately/grid" "^3.9.2" + "@react-stately/selection" "^3.16.2" + "@react-stately/utils" "^3.10.3" + "@react-types/grid" "^3.2.8" "@react-types/shared" "^3.24.1" - "@react-types/tabs" "^3.3.9" + "@react-types/table" "^3.10.1" "@swc/helpers" "^0.5.0" "@react-stately/tabs@3.6.6": @@ -3285,22 +3291,14 @@ "@react-types/tabs" "^3.3.7" "@swc/helpers" "^0.5.0" -"@react-stately/toggle@^3.7.4": - version "3.7.7" - resolved "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.7.tgz" - integrity sha512-AS+xB4+hHWa3wzYkbS6pwBkovPfIE02B9SnuYTe0stKcuejpWKo5L3QMptW0ftFYsW3ZPCXuneImfObEw2T01A== - dependencies: - "@react-stately/utils" "^3.10.3" - "@react-types/checkbox" "^3.8.3" - "@swc/helpers" "^0.5.0" - -"@react-stately/toggle@^3.7.7": - version "3.7.7" - resolved "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.7.tgz" - integrity sha512-AS+xB4+hHWa3wzYkbS6pwBkovPfIE02B9SnuYTe0stKcuejpWKo5L3QMptW0ftFYsW3ZPCXuneImfObEw2T01A== +"@react-stately/tabs@^3.6.6": + version "3.6.9" + resolved "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.9.tgz" + integrity sha512-YZDqZng3HrRX+uXmg6u78x73Oi24G5ICpiXVqDKKDkO333XCA5H8MWItiuPZkYB2h3SbaCaLqSobLkvCoWYpNQ== dependencies: - "@react-stately/utils" "^3.10.3" - "@react-types/checkbox" "^3.8.3" + "@react-stately/list" "^3.10.8" + "@react-types/shared" "^3.24.1" + "@react-types/tabs" "^3.3.9" "@swc/helpers" "^0.5.0" "@react-stately/toggle@3.7.4": @@ -3312,13 +3310,13 @@ "@react-types/checkbox" "^3.8.1" "@swc/helpers" "^0.5.0" -"@react-stately/tooltip@^3.4.9": - version "3.4.12" - resolved "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.12.tgz" - integrity sha512-QKYT/cze7n9qaBsk7o5ais3jRfhYCzcVRfps+iys/W+/9FFbbhjfQG995Lwi6b+vGOHWfXxXpwmyIO2tzM1Iog== +"@react-stately/toggle@^3.7.4", "@react-stately/toggle@^3.7.7": + version "3.7.7" + resolved "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.7.tgz" + integrity sha512-AS+xB4+hHWa3wzYkbS6pwBkovPfIE02B9SnuYTe0stKcuejpWKo5L3QMptW0ftFYsW3ZPCXuneImfObEw2T01A== dependencies: - "@react-stately/overlays" "^3.6.10" - "@react-types/tooltip" "^3.4.11" + "@react-stately/utils" "^3.10.3" + "@react-types/checkbox" "^3.8.3" "@swc/helpers" "^0.5.0" "@react-stately/tooltip@3.4.9": @@ -3330,26 +3328,13 @@ "@react-types/tooltip" "^3.4.9" "@swc/helpers" "^0.5.0" -"@react-stately/tree@^3.8.1": - version "3.8.4" - resolved "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.4.tgz" - integrity sha512-HFNclIXJ/3QdGQWxXbj+tdlmIX/XwCfzAMB5m26xpJ6HtJhia6dtx3GLfcdyHNjmuRbAsTBsAAnnVKBmNRUdIQ== - dependencies: - "@react-stately/collections" "^3.10.9" - "@react-stately/selection" "^3.16.2" - "@react-stately/utils" "^3.10.3" - "@react-types/shared" "^3.24.1" - "@swc/helpers" "^0.5.0" - -"@react-stately/tree@^3.8.4": - version "3.8.4" - resolved "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.4.tgz" - integrity sha512-HFNclIXJ/3QdGQWxXbj+tdlmIX/XwCfzAMB5m26xpJ6HtJhia6dtx3GLfcdyHNjmuRbAsTBsAAnnVKBmNRUdIQ== +"@react-stately/tooltip@^3.4.9": + version "3.4.12" + resolved "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.12.tgz" + integrity sha512-QKYT/cze7n9qaBsk7o5ais3jRfhYCzcVRfps+iys/W+/9FFbbhjfQG995Lwi6b+vGOHWfXxXpwmyIO2tzM1Iog== dependencies: - "@react-stately/collections" "^3.10.9" - "@react-stately/selection" "^3.16.2" - "@react-stately/utils" "^3.10.3" - "@react-types/shared" "^3.24.1" + "@react-stately/overlays" "^3.6.10" + "@react-types/tooltip" "^3.4.11" "@swc/helpers" "^0.5.0" "@react-stately/tree@3.8.1": @@ -3363,11 +3348,15 @@ "@react-types/shared" "^3.23.1" "@swc/helpers" "^0.5.0" -"@react-stately/utils@^3.10.1", "@react-stately/utils@^3.10.3": - version "3.10.3" - resolved "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.3.tgz" - integrity sha512-moClv7MlVSHpbYtQIkm0Cx+on8Pgt1XqtPx6fy9rQFb2DNc9u1G3AUVnqA17buOkH1vLxAtX4MedlxMWyRCYYA== +"@react-stately/tree@^3.8.1", "@react-stately/tree@^3.8.4": + version "3.8.4" + resolved "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.4.tgz" + integrity sha512-HFNclIXJ/3QdGQWxXbj+tdlmIX/XwCfzAMB5m26xpJ6HtJhia6dtx3GLfcdyHNjmuRbAsTBsAAnnVKBmNRUdIQ== dependencies: + "@react-stately/collections" "^3.10.9" + "@react-stately/selection" "^3.16.2" + "@react-stately/utils" "^3.10.3" + "@react-types/shared" "^3.24.1" "@swc/helpers" "^0.5.0" "@react-stately/utils@3.10.1": @@ -3377,7 +3366,14 @@ dependencies: "@swc/helpers" "^0.5.0" -"@react-stately/virtualizer@^3.7.1", "@react-stately/virtualizer@3.7.1": +"@react-stately/utils@^3.10.1", "@react-stately/utils@^3.10.3": + version "3.10.3" + resolved "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.3.tgz" + integrity sha512-moClv7MlVSHpbYtQIkm0Cx+on8Pgt1XqtPx6fy9rQFb2DNc9u1G3AUVnqA17buOkH1vLxAtX4MedlxMWyRCYYA== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-stately/virtualizer@3.7.1", "@react-stately/virtualizer@^3.7.1": version "3.7.1" resolved "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.7.1.tgz" integrity sha512-voHgE6EQ+oZaLv6u2umKxakvIKNkCQuUihqKACTjdslp7SJh4Mvs3oLBI0hf0JOh+rCcFIKDvQtFwy1fXFRYBA== @@ -3393,14 +3389,6 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/breadcrumbs@^3.7.5": - version "3.7.7" - resolved "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.7.tgz" - integrity sha512-ZmhXwD2LLzfEA2OvOCp/QvXu8A/Edsrn5q0qUDGsmOZj9SCVeT82bIv8P+mQnATM13mi2gyoik6102Jc1OscJA== - dependencies: - "@react-types/link" "^3.5.7" - "@react-types/shared" "^3.24.1" - "@react-types/breadcrumbs@3.7.5": version "3.7.5" resolved "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.5.tgz" @@ -3409,11 +3397,12 @@ "@react-types/link" "^3.5.5" "@react-types/shared" "^3.23.1" -"@react-types/button@^3.9.4", "@react-types/button@^3.9.6": - version "3.9.6" - resolved "https://registry.npmjs.org/@react-types/button/-/button-3.9.6.tgz" - integrity sha512-8lA+D5JLbNyQikf8M/cPP2cji91aVTcqjrGpDqI7sQnaLFikM8eFR6l1ZWGtZS5MCcbfooko77ha35SYplSQvw== +"@react-types/breadcrumbs@^3.7.5": + version "3.7.7" + resolved "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.7.tgz" + integrity sha512-ZmhXwD2LLzfEA2OvOCp/QvXu8A/Edsrn5q0qUDGsmOZj9SCVeT82bIv8P+mQnATM13mi2gyoik6102Jc1OscJA== dependencies: + "@react-types/link" "^3.5.7" "@react-types/shared" "^3.24.1" "@react-types/button@3.9.4": @@ -3423,12 +3412,11 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/calendar@^3.4.6", "@react-types/calendar@^3.4.9": - version "3.4.9" - resolved "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.9.tgz" - integrity sha512-O/PS9c21HgO9qzxOyZ7/dTccxabFZdF6tj3UED4DrBw7AN3KZ7JMzwzYbwHinOcO7nUcklGgNoAIHk45UAKR9g== +"@react-types/button@^3.9.4", "@react-types/button@^3.9.6": + version "3.9.6" + resolved "https://registry.npmjs.org/@react-types/button/-/button-3.9.6.tgz" + integrity sha512-8lA+D5JLbNyQikf8M/cPP2cji91aVTcqjrGpDqI7sQnaLFikM8eFR6l1ZWGtZS5MCcbfooko77ha35SYplSQvw== dependencies: - "@internationalized/date" "^3.5.5" "@react-types/shared" "^3.24.1" "@react-types/calendar@3.4.6": @@ -3439,11 +3427,12 @@ "@internationalized/date" "^3.5.4" "@react-types/shared" "^3.23.1" -"@react-types/checkbox@^3.8.1", "@react-types/checkbox@^3.8.3": - version "3.8.3" - resolved "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.3.tgz" - integrity sha512-f4c1mnLEt0iS1NMkyZXgT3q3AgcxzDk7w6MSONOKydcnh0xG5L2oefY14DhVDLkAuQS7jThlUFwiAs+MxiO3MA== +"@react-types/calendar@^3.4.6", "@react-types/calendar@^3.4.9": + version "3.4.9" + resolved "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.9.tgz" + integrity sha512-O/PS9c21HgO9qzxOyZ7/dTccxabFZdF6tj3UED4DrBw7AN3KZ7JMzwzYbwHinOcO7nUcklGgNoAIHk45UAKR9g== dependencies: + "@internationalized/date" "^3.5.5" "@react-types/shared" "^3.24.1" "@react-types/checkbox@3.8.1": @@ -3453,10 +3442,10 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/combobox@^3.11.1", "@react-types/combobox@^3.12.1": - version "3.12.1" - resolved "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.12.1.tgz" - integrity sha512-bd5YwHZWtgnJx4jGbplWbYzXj7IbO5w3IY5suNR7r891rx6IktquZ8GQwyYH0pQ/x+X5LdK2xI59i6+QC2PmlA== +"@react-types/checkbox@^3.8.1", "@react-types/checkbox@^3.8.3": + version "3.8.3" + resolved "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.3.tgz" + integrity sha512-f4c1mnLEt0iS1NMkyZXgT3q3AgcxzDk7w6MSONOKydcnh0xG5L2oefY14DhVDLkAuQS7jThlUFwiAs+MxiO3MA== dependencies: "@react-types/shared" "^3.24.1" @@ -3467,14 +3456,11 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/datepicker@^3.7.4", "@react-types/datepicker@^3.8.2": - version "3.8.2" - resolved "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.8.2.tgz" - integrity sha512-Ih4F0bNVGrEuwCD8XmmBAspuuOBsj/Svn/pDFtC2RyAZjXfWh+sI+n4XLz/sYKjvARh5TUI8GNy9smYS4vYXug== +"@react-types/combobox@^3.11.1", "@react-types/combobox@^3.12.1": + version "3.12.1" + resolved "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.12.1.tgz" + integrity sha512-bd5YwHZWtgnJx4jGbplWbYzXj7IbO5w3IY5suNR7r891rx6IktquZ8GQwyYH0pQ/x+X5LdK2xI59i6+QC2PmlA== dependencies: - "@internationalized/date" "^3.5.5" - "@react-types/calendar" "^3.4.9" - "@react-types/overlays" "^3.8.9" "@react-types/shared" "^3.24.1" "@react-types/datepicker@3.7.4": @@ -3487,19 +3473,22 @@ "@react-types/overlays" "^3.8.7" "@react-types/shared" "^3.23.1" -"@react-types/dialog@^3.5.10": - version "3.5.12" - resolved "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.12.tgz" - integrity sha512-JmpQbSpXltqEyYfEwoqDolABIiojeExkqolHNdQlayIsfFuSxZxNwXZPOpz58Ri/iwv21JP7K3QF0Gb2Ohxl9w== +"@react-types/datepicker@^3.7.4", "@react-types/datepicker@^3.8.2": + version "3.8.2" + resolved "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.8.2.tgz" + integrity sha512-Ih4F0bNVGrEuwCD8XmmBAspuuOBsj/Svn/pDFtC2RyAZjXfWh+sI+n4XLz/sYKjvARh5TUI8GNy9smYS4vYXug== dependencies: + "@internationalized/date" "^3.5.5" + "@react-types/calendar" "^3.4.9" "@react-types/overlays" "^3.8.9" "@react-types/shared" "^3.24.1" - -"@react-types/grid@^3.2.6", "@react-types/grid@^3.2.8": - version "3.2.8" - resolved "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.8.tgz" - integrity sha512-6PJrpukwMqlv3IhJSDkJuVbhHM8Oe6hd2supWqd9adMXrlSP7QHt9a8SgFcFblCCTx8JzUaA0PvY5sTudcEtOQ== + +"@react-types/dialog@^3.5.10": + version "3.5.12" + resolved "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.12.tgz" + integrity sha512-JmpQbSpXltqEyYfEwoqDolABIiojeExkqolHNdQlayIsfFuSxZxNwXZPOpz58Ri/iwv21JP7K3QF0Gb2Ohxl9w== dependencies: + "@react-types/overlays" "^3.8.9" "@react-types/shared" "^3.24.1" "@react-types/grid@3.2.6": @@ -3509,10 +3498,10 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/link@^3.5.5", "@react-types/link@^3.5.7": - version "3.5.7" - resolved "https://registry.npmjs.org/@react-types/link/-/link-3.5.7.tgz" - integrity sha512-2WyaVmm1qr9UrSG3Dq6iz+2ziuVp+DH8CsYZ9CA6aNNb6U18Hxju3LTPb4a5gM0eC7W0mQGNBmrgGlAdDZEJOw== +"@react-types/grid@^3.2.6", "@react-types/grid@^3.2.8": + version "3.2.8" + resolved "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.8.tgz" + integrity sha512-6PJrpukwMqlv3IhJSDkJuVbhHM8Oe6hd2supWqd9adMXrlSP7QHt9a8SgFcFblCCTx8JzUaA0PvY5sTudcEtOQ== dependencies: "@react-types/shared" "^3.24.1" @@ -3523,6 +3512,13 @@ dependencies: "@react-types/shared" "^3.23.1" +"@react-types/link@^3.5.5", "@react-types/link@^3.5.7": + version "3.5.7" + resolved "https://registry.npmjs.org/@react-types/link/-/link-3.5.7.tgz" + integrity sha512-2WyaVmm1qr9UrSG3Dq6iz+2ziuVp+DH8CsYZ9CA6aNNb6U18Hxju3LTPb4a5gM0eC7W0mQGNBmrgGlAdDZEJOw== + dependencies: + "@react-types/shared" "^3.24.1" + "@react-types/listbox@^3.4.9", "@react-types/listbox@^3.5.1": version "3.5.1" resolved "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.5.1.tgz" @@ -3530,14 +3526,6 @@ dependencies: "@react-types/shared" "^3.24.1" -"@react-types/menu@^3.9.11", "@react-types/menu@^3.9.9": - version "3.9.11" - resolved "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.11.tgz" - integrity sha512-IguQVF70d7aHXgWB1Rd2a/PiIuLZ2Nt7lyayJshLcy/NLOYmgpTmTyn2WCtlA5lTfQwmQrNFf4EvnWkeljJXdA== - dependencies: - "@react-types/overlays" "^3.8.9" - "@react-types/shared" "^3.24.1" - "@react-types/menu@3.9.9": version "3.9.9" resolved "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.9.tgz" @@ -3546,11 +3534,12 @@ "@react-types/overlays" "^3.8.7" "@react-types/shared" "^3.23.1" -"@react-types/overlays@^3.8.7", "@react-types/overlays@^3.8.9": - version "3.8.9" - resolved "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.9.tgz" - integrity sha512-9ni9upQgXPnR+K9cWmbYWvm3ll9gH8P/XsEZprqIV5zNLMF334jADK48h4jafb1X9RFnj0WbHo6BqcSObzjTig== +"@react-types/menu@^3.9.11", "@react-types/menu@^3.9.9": + version "3.9.11" + resolved "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.11.tgz" + integrity sha512-IguQVF70d7aHXgWB1Rd2a/PiIuLZ2Nt7lyayJshLcy/NLOYmgpTmTyn2WCtlA5lTfQwmQrNFf4EvnWkeljJXdA== dependencies: + "@react-types/overlays" "^3.8.9" "@react-types/shared" "^3.24.1" "@react-types/overlays@3.8.7": @@ -3560,10 +3549,10 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/progress@^3.5.4": - version "3.5.6" - resolved "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.6.tgz" - integrity sha512-Nh43sjQ5adyN1bTHBPRaIPhXUdBqP0miYeJpeMY3V/KUl4qmouJLwDnccwFG4xLm6gBfYe22lgbbV7nAfNnuTQ== +"@react-types/overlays@^3.8.7", "@react-types/overlays@^3.8.9": + version "3.8.9" + resolved "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.9.tgz" + integrity sha512-9ni9upQgXPnR+K9cWmbYWvm3ll9gH8P/XsEZprqIV5zNLMF334jADK48h4jafb1X9RFnj0WbHo6BqcSObzjTig== dependencies: "@react-types/shared" "^3.24.1" @@ -3574,10 +3563,10 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/radio@^3.8.1", "@react-types/radio@^3.8.3": - version "3.8.3" - resolved "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.3.tgz" - integrity sha512-fUVJt4Bb6jOReFqnhHVNxWXH7t6c60uSFfoPKuXt/xI9LL1i2jhpur0ggpTfIn3qLIAmNBU6bKBCWAdr4KjeVQ== +"@react-types/progress@^3.5.4": + version "3.5.6" + resolved "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.6.tgz" + integrity sha512-Nh43sjQ5adyN1bTHBPRaIPhXUdBqP0miYeJpeMY3V/KUl4qmouJLwDnccwFG4xLm6gBfYe22lgbbV7nAfNnuTQ== dependencies: "@react-types/shared" "^3.24.1" @@ -3588,10 +3577,10 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/select@^3.9.6": - version "3.9.6" - resolved "https://registry.npmjs.org/@react-types/select/-/select-3.9.6.tgz" - integrity sha512-cVSFR0eJLup/ht1Uto+y8uyLmHO89J6wNh65SIHb3jeVz9oLBAedP3YNI2qB+F9qFMUcA8PBSLXIIuT6gXzLgQ== +"@react-types/radio@^3.8.1", "@react-types/radio@^3.8.3": + version "3.8.3" + resolved "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.3.tgz" + integrity sha512-fUVJt4Bb6jOReFqnhHVNxWXH7t6c60uSFfoPKuXt/xI9LL1i2jhpur0ggpTfIn3qLIAmNBU6bKBCWAdr4KjeVQ== dependencies: "@react-types/shared" "^3.24.1" @@ -3602,16 +3591,23 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/shared@^3.23.1", "@react-types/shared@^3.24.1": - version "3.24.1" - resolved "https://registry.npmjs.org/@react-types/shared/-/shared-3.24.1.tgz" - integrity sha512-AUQeGYEm/zDTN6zLzdXolDxz3Jk5dDL7f506F07U8tBwxNNI3WRdhU84G0/AaFikOZzDXhOZDr3MhQMzyE7Ydw== +"@react-types/select@^3.9.6": + version "3.9.6" + resolved "https://registry.npmjs.org/@react-types/select/-/select-3.9.6.tgz" + integrity sha512-cVSFR0eJLup/ht1Uto+y8uyLmHO89J6wNh65SIHb3jeVz9oLBAedP3YNI2qB+F9qFMUcA8PBSLXIIuT6gXzLgQ== + dependencies: + "@react-types/shared" "^3.24.1" "@react-types/shared@3.23.1": version "3.23.1" resolved "https://registry.npmjs.org/@react-types/shared/-/shared-3.23.1.tgz" integrity sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw== +"@react-types/shared@^3.23.1", "@react-types/shared@^3.24.1": + version "3.24.1" + resolved "https://registry.npmjs.org/@react-types/shared/-/shared-3.24.1.tgz" + integrity sha512-AUQeGYEm/zDTN6zLzdXolDxz3Jk5dDL7f506F07U8tBwxNNI3WRdhU84G0/AaFikOZzDXhOZDr3MhQMzyE7Ydw== + "@react-types/slider@^3.7.3", "@react-types/slider@^3.7.5": version "3.7.5" resolved "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.5.tgz" @@ -3626,14 +3622,6 @@ dependencies: "@react-types/shared" "^3.24.1" -"@react-types/table@^3.10.1", "@react-types/table@^3.9.5": - version "3.10.1" - resolved "https://registry.npmjs.org/@react-types/table/-/table-3.10.1.tgz" - integrity sha512-xsNh0Gm4GtNeSknZqkMsfGvc94fycmfhspGO+FzQKim2hB5k4yILwd+lHYQ2UKW6New9GVH/zN2Pd3v67IeZ2g== - dependencies: - "@react-types/grid" "^3.2.8" - "@react-types/shared" "^3.24.1" - "@react-types/table@3.9.5": version "3.9.5" resolved "https://registry.npmjs.org/@react-types/table/-/table-3.9.5.tgz" @@ -3642,11 +3630,12 @@ "@react-types/grid" "^3.2.6" "@react-types/shared" "^3.23.1" -"@react-types/tabs@^3.3.7", "@react-types/tabs@^3.3.9": - version "3.3.9" - resolved "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.9.tgz" - integrity sha512-3Q9kRVvg/qDyeJR/W1+C2z2OyvDWQrSLvOCvAezX5UKzww4rBEAA8OqBlyDwn7q3fiwrh/m64l6p+dbln+RdxQ== +"@react-types/table@^3.10.1", "@react-types/table@^3.9.5": + version "3.10.1" + resolved "https://registry.npmjs.org/@react-types/table/-/table-3.10.1.tgz" + integrity sha512-xsNh0Gm4GtNeSknZqkMsfGvc94fycmfhspGO+FzQKim2hB5k4yILwd+lHYQ2UKW6New9GVH/zN2Pd3v67IeZ2g== dependencies: + "@react-types/grid" "^3.2.8" "@react-types/shared" "^3.24.1" "@react-types/tabs@3.3.7": @@ -3656,10 +3645,10 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/textfield@^3.9.3", "@react-types/textfield@^3.9.6": - version "3.9.6" - resolved "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.6.tgz" - integrity sha512-0uPqjJh4lYp1aL1HL9IlV8Cgp8eT0PcsNfdoCktfkLytvvBPmox2Pfm57W/d0xTtzZu2CjxhYNTob+JtGAOeXA== +"@react-types/tabs@^3.3.7", "@react-types/tabs@^3.3.9": + version "3.3.9" + resolved "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.9.tgz" + integrity sha512-3Q9kRVvg/qDyeJR/W1+C2z2OyvDWQrSLvOCvAezX5UKzww4rBEAA8OqBlyDwn7q3fiwrh/m64l6p+dbln+RdxQ== dependencies: "@react-types/shared" "^3.24.1" @@ -3670,12 +3659,11 @@ dependencies: "@react-types/shared" "^3.23.1" -"@react-types/tooltip@^3.4.11", "@react-types/tooltip@^3.4.9": - version "3.4.11" - resolved "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.11.tgz" - integrity sha512-WPikHQxeT5Lb09yJEaW6Ja3ecE0g1YM6ukWYS2v/iZLUPn5YlYrGytspuCYQNSh/u7suCz4zRLEHYCl7OCigjw== +"@react-types/textfield@^3.9.3", "@react-types/textfield@^3.9.6": + version "3.9.6" + resolved "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.6.tgz" + integrity sha512-0uPqjJh4lYp1aL1HL9IlV8Cgp8eT0PcsNfdoCktfkLytvvBPmox2Pfm57W/d0xTtzZu2CjxhYNTob+JtGAOeXA== dependencies: - "@react-types/overlays" "^3.8.9" "@react-types/shared" "^3.24.1" "@react-types/tooltip@3.4.9": @@ -3686,18 +3674,19 @@ "@react-types/overlays" "^3.8.7" "@react-types/shared" "^3.23.1" +"@react-types/tooltip@^3.4.11", "@react-types/tooltip@^3.4.9": + version "3.4.11" + resolved "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.11.tgz" + integrity sha512-WPikHQxeT5Lb09yJEaW6Ja3ecE0g1YM6ukWYS2v/iZLUPn5YlYrGytspuCYQNSh/u7suCz4zRLEHYCl7OCigjw== + dependencies: + "@react-types/overlays" "^3.8.9" + "@react-types/shared" "^3.24.1" + "@sindresorhus/is@^4.0.0": version "4.6.0" resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@swc/helpers@^0.5.0": - version "0.5.13" - resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz" - integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== - dependencies: - tslib "^2.4.0" - "@swc/helpers@0.5.2": version "0.5.2" resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz" @@ -3705,6 +3694,13 @@ dependencies: tslib "^2.4.0" +"@swc/helpers@^0.5.0": + version "0.5.13" + resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz" + integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== + dependencies: + tslib "^2.4.0" + "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" @@ -3755,7 +3751,7 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== -"@types/fs-extra@^9.0.11", "@types/fs-extra@9.0.13": +"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.11": version "9.0.13" resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== @@ -3811,13 +3807,6 @@ dependencies: undici-types "~6.19.2" -"@types/node@^18.11.18": - version "18.19.50" - resolved "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz" - integrity sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg== - dependencies: - undici-types "~5.26.4" - "@types/node@^20.12.7": version "20.16.5" resolved "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz" @@ -3825,6 +3814,13 @@ dependencies: undici-types "~6.19.2" +"@types/node@^20.9.0": + version "20.17.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.6.tgz#6e4073230c180d3579e8c60141f99efdf5df0081" + integrity sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ== + dependencies: + undici-types "~6.19.2" + "@types/plist@^3.0.1": version "3.0.5" resolved "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz" @@ -3846,7 +3842,7 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0", "@types/react@^18.2.47": +"@types/react@^18.2.47": version "18.3.5" resolved "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz" integrity sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA== @@ -3888,7 +3884,7 @@ natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^8.0.0 || ^8.0.0-alpha.0", "@typescript-eslint/parser@^8.6.0": +"@typescript-eslint/parser@^8.6.0": version "8.6.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz" integrity sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow== @@ -3959,7 +3955,7 @@ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@webassemblyjs/ast@^1.12.1", "@webassemblyjs/ast@1.12.1": +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz" integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== @@ -4060,7 +4056,7 @@ "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@^1.12.1", "@webassemblyjs/wasm-parser@1.12.1": +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": version "1.12.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz" integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== @@ -4095,11 +4091,6 @@ resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -"7zip-bin@~5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz" - integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== - accepts@~1.3.8: version "1.3.8" resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" @@ -4118,7 +4109,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: version "8.12.1" resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== @@ -4149,7 +4140,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -4159,7 +4150,7 @@ ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.3, ajv@^8.8.2, ajv@^8.9.0: +ajv@^8.0.0, ajv@^8.6.3, ajv@^8.9.0: version "8.17.1" resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -4261,52 +4252,7 @@ app-builder-lib@24.13.3: tar "^6.1.12" temp-file "^3.4.0" -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver-utils@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz" - integrity sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw== - dependencies: - glob "^7.2.3" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - -archiver@^5.3.1: - version "5.3.2" - resolved "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz" - integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw== - dependencies: - archiver-utils "^2.1.0" - async "^3.2.4" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.1.2" - tar-stream "^2.2.0" - zip-stream "^4.1.0" - -arg@^5.0.2, arg@5.0.2: +arg@5.0.2, arg@^5.0.2: version "5.0.2" resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== @@ -4348,7 +4294,7 @@ async-exit-hook@^2.0.1: resolved "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz" integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== -async@^3.2.3, async@^3.2.4: +async@^3.2.3: version "3.2.6" resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== @@ -4389,7 +4335,7 @@ axios@^1.7.7: form-data "^4.0.0" proxy-from-env "^1.1.0" -babel-loader@^9.1.3, babel-loader@9.1.3: +babel-loader@9.1.3, babel-loader@^9.1.3: version "9.1.3" resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz" integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw== @@ -4446,15 +4392,6 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - bluebird-lst@^1.0.9: version "1.0.9" resolved "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz" @@ -4526,7 +4463,7 @@ broadcast-channel@^3.4.1: rimraf "3.0.2" unload "2.2.0" -browserslist@^4.21.10, browserslist@^4.23.1, browserslist@^4.23.3, "browserslist@>= 4.21.0": +browserslist@^4.21.10, browserslist@^4.23.1, browserslist@^4.23.3: version "4.23.3" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz" integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== @@ -4536,7 +4473,7 @@ browserslist@^4.21.10, browserslist@^4.23.1, browserslist@^4.23.3, "browserslist node-releases "^2.0.18" update-browserslist-db "^1.1.0" -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: +buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== @@ -4551,7 +4488,7 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.1.0, buffer@^5.5.0: +buffer@^5.1.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -4572,8 +4509,8 @@ builder-util@24.13.1: resolved "https://registry.npmjs.org/builder-util/-/builder-util-24.13.1.tgz" integrity sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA== dependencies: - "@types/debug" "^4.1.6" "7zip-bin" "~5.2.0" + "@types/debug" "^4.1.6" app-builder-bin "4.0.0" bluebird-lst "^1.0.9" builder-util-runtime "9.2.4" @@ -4653,6 +4590,14 @@ cardinal@^2.1.1: ansicolors "~0.3.2" redeyed "~2.1.0" +chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -4662,15 +4607,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2, chalk@4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -4812,16 +4749,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-string@^1.9.0: version "1.9.1" resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" @@ -4830,6 +4767,11 @@ color-string@^1.9.0: color-name "^1.0.0" simple-swizzle "^0.2.2" +color2k@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz" + integrity sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog== + color@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" @@ -4838,11 +4780,6 @@ color@^4.2.3: color-convert "^2.0.1" color-string "^1.9.0" -color2k@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz" - integrity sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog== - combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" @@ -4880,16 +4817,6 @@ compare-versions@^6.1.0: resolved "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz" integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== -compress-commons@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz" - integrity sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^4.0.2" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - compute-scroll-into-view@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz" @@ -4968,16 +4895,11 @@ core-js@^3: resolved "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz" integrity sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw== -core-util-is@~1.0.0, core-util-is@1.0.2: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - crc@^3.8.0: version "3.8.0" resolved "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz" @@ -4985,14 +4907,6 @@ crc@^3.8.0: dependencies: buffer "^5.1.0" -crc32-stream@^4.0.2: - version "4.0.3" - resolved "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz" - integrity sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw== - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" @@ -5024,33 +4938,26 @@ debounce@^2.1.1: resolved "https://registry.npmjs.org/debounce/-/debounce-2.1.1.tgz" integrity sha512-+xRWxgel9LgTC4PwKlm7TJUK6B6qsEK77NaiNvXmeQ7Y3e6OVVsBC4a9BSptS/mAYceyAz37Oa8JTTuPRft7uQ== -debug@^2.2.0: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.0.1: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.7" resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@^3.0.1: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.0.0" + ms "^2.1.1" decompress-response@^6.0.0: version "6.0.0" @@ -5211,16 +5118,6 @@ ejs@^3.1.6, ejs@^3.1.8: dependencies: jake "^10.8.5" -electron-builder-squirrel-windows@24.13.3: - version "24.13.3" - resolved "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-24.13.3.tgz" - integrity sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg== - dependencies: - app-builder-lib "24.13.3" - archiver "^5.3.1" - builder-util "24.13.1" - fs-extra "^10.1.0" - electron-builder@^24.13.3: version "24.13.3" resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-24.13.3.tgz" @@ -5269,13 +5166,13 @@ electron-to-chromium@^1.5.4: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz" integrity sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ== -electron@28: - version "28.3.3" - resolved "https://registry.npmjs.org/electron/-/electron-28.3.3.tgz" - integrity sha512-ObKMLSPNhomtCOBAxFS8P2DW/4umkh72ouZUlUKzXGtYuPzgr1SYhskhFWgzAsPtUzhL2CzyV2sfbHcEW4CXqw== +electron@33: + version "33.0.2" + resolved "https://registry.yarnpkg.com/electron/-/electron-33.0.2.tgz#db31b105bf0edd7c8600dfb70c2dfc214e3789f1" + integrity sha512-C2WksfP0COsMHbYXSJG68j6S3TjuGDrw/YT42B526yXalIlNQZ2GeAYKryg6AEMkIp3p8TUfDRD0+HyiyCt/nw== dependencies: "@electron/get" "^2.0.0" - "@types/node" "^18.11.18" + "@types/node" "^20.9.0" extract-zip "^2.0.1" emoji-regex@^8.0.0: @@ -5298,7 +5195,7 @@ encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -5360,16 +5257,16 @@ escape-html@~1.0.3: resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^4.0.0, escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - eslint-plugin-react-hooks@^4.6.2: version "4.6.2" resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz" @@ -5380,14 +5277,6 @@ eslint-plugin-react-refresh@^0.4.12: resolved "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.12.tgz" integrity sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg== -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" @@ -5396,12 +5285,20 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -"eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.57.0, "eslint@^8.57.0 || ^9.0.0", eslint@>=7: +eslint@^8.57.0: version "8.57.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== @@ -5529,7 +5426,7 @@ express-ws@^5.0.2: dependencies: ws "^7.4.6" -"express@^4.0.0 || ^5.0.0-alpha.1", express@^4.17.1, express@^4.18.3: +express@^4.17.1, express@^4.18.3: version "4.19.2" resolved "https://registry.npmjs.org/express/-/express-4.19.2.tgz" integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== @@ -5748,7 +5645,7 @@ fraction.js@^4.3.7: resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== -framer-motion@^11.5.4, framer-motion@>=10.17.0: +framer-motion@^11.5.4: version "11.5.4" resolved "https://registry.npmjs.org/framer-motion/-/framer-motion-11.5.4.tgz" integrity sha512-E+tb3/G6SO69POkdJT+3EpdMuhmtCh9EWuK4I1DnIC23L7tFPrl8vxP+LSovwaw6uUr73rUbpb4FgK011wbRJQ== @@ -5760,10 +5657,14 @@ fresh@0.5.2: resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@11.2.0: + version "11.2.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" @@ -5774,7 +5675,7 @@ fs-extra@^10.0.0, fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^8.1: +fs-extra@^8.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -5783,36 +5684,7 @@ fs-extra@^8.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5822,15 +5694,6 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@11.2.0: - version "11.2.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" @@ -5922,6 +5785,17 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@10.3.10: + version "10.3.10" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + glob@^10.3.10: version "10.4.5" resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" @@ -5934,43 +5808,7 @@ glob@^10.3.10: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.4: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.2.3: +glob@^7.1.3, glob@^7.1.6: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5982,17 +5820,6 @@ glob@^7.2.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@10.3.10: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - global-agent@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz" @@ -6182,7 +6009,7 @@ i18next-fs-backend@^2.3.2: resolved "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.2.tgz" integrity sha512-LIwUlkqDZnUI8lnUxBnEj8K/FrHQTT/Sc+1rvDm9E8YvvY5YxzoEAASNx+W5M9DfD5s77lI5vSAFWeTp26B/3Q== -"i18next@>= 23.2.3", "i18next@>= 23.7.13", i18next@23.14.0: +i18next@23.14.0: version "23.14.0" resolved "https://registry.npmjs.org/i18next/-/i18next-23.14.0.tgz" integrity sha512-Y5GL4OdA8IU2geRrt2+Uc1iIhsjICdHZzT9tNwQ3TVqdNzgxHToGCKf/TPRP80vTCAP6svg2WbbJL+Gx5MFQVA== @@ -6197,13 +6024,6 @@ iconv-corefoundation@^1.1.7: cli-truncate "^2.1.0" node-addon-api "^1.6.3" -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -6211,6 +6031,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" @@ -6252,7 +6079,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6374,11 +6201,6 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isbinaryfile@^4.0.8: version "4.0.10" resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz" @@ -6456,15 +6278,7 @@ js-sha3@0.8.0: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.14.1: +js-yaml@^3.13.1, js-yaml@^3.14.1: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -6567,13 +6381,6 @@ lazy-val@^1.0.4, lazy-val@^1.0.5: resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz" integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -6638,21 +6445,6 @@ lodash.debounce@^4.0.8: resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz" - integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - lodash.foreach@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz" @@ -6663,11 +6455,6 @@ lodash.get@^4.4.2: resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - lodash.kebabcase@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz" @@ -6688,11 +6475,6 @@ lodash.omit@^4.5.0: resolved "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz" integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz" - integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== - lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" @@ -6799,16 +6581,16 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: dependencies: mime-db "1.52.0" -mime@^2.5.2: - version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mime@1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" @@ -6836,35 +6618,14 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.1.0: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.1.1: +minimatch@^5.0.1, minimatch@^5.1.1: version "5.1.6" resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: - version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.4: +minimatch@^9.0.1, minimatch@^9.0.4: version "9.0.5" resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -6883,16 +6644,16 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - minipass@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + minizlib@^2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" @@ -6911,16 +6672,16 @@ moment@^2.30.1: resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -ms@^2.1.1, ms@^2.1.3, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" @@ -6978,7 +6739,7 @@ next-themes@^0.3.0: resolved "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz" integrity sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w== -next@^13.5.6, "next@>= 12.0.0": +next@^13.5.6: version "13.5.6" resolved "https://registry.npmjs.org/next/-/next-13.5.6.tgz" integrity sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw== @@ -7344,15 +7105,6 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.45, postcss@>=8.0.9: - version "8.4.45" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz" - integrity sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.1" - source-map-js "^1.2.0" - postcss@8.4.31: version "8.4.31" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" @@ -7362,16 +7114,20 @@ postcss@8.4.31: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.23, postcss@^8.4.45: + version "8.4.45" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz" + integrity sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.1" + source-map-js "^1.2.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - progress@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" @@ -7440,7 +7196,7 @@ range-parser@~1.2.1: resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@^2.3.0, raw-body@2.5.2: +raw-body@2.5.2, raw-body@^2.3.0: version "2.5.2" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== @@ -7450,7 +7206,7 @@ raw-body@^2.3.0, raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" -"react-dom@^16.8 || ^17 || ^18", "react-dom@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", react-dom@^18.0.0, react-dom@^18.1.0, react-dom@^18.2.0, react-dom@>=18: +react-dom@^18.1.0: version "18.3.1" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== @@ -7458,7 +7214,7 @@ raw-body@^2.3.0, raw-body@2.5.2: loose-envify "^1.1.0" scheduler "^0.23.2" -react-i18next@^15.0.1, "react-i18next@>= 13.5.0": +react-i18next@^15.0.1: version "15.0.1" resolved "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.1.tgz" integrity sha512-NwxLqNM6CLbeGA9xPsjits0EnXdKgCRSS6cgkgOdNcPXqL+1fYNl8fBg1wmnnHvFy812Bt4IWTPE9zjoPmFj3w== @@ -7517,7 +7273,7 @@ react-textarea-autosize@^8.5.3: use-composed-ref "^1.3.0" use-latest "^1.2.1" -"react@^16.8 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0", "react@^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", react@^18.0.0, react@^18.1.0, react@^18.2.0, react@^18.3.1, "react@>= 16.8.0", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", "react@>= 17.0.2", react@>=18: +react@^18.1.0: version "18.3.1" resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== @@ -7543,48 +7299,6 @@ read-config-file@6.3.2: json5 "^2.2.0" lazy-val "^1.0.4" -readable-stream@^2.0.0: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^2.0.5: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdir-glob@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz" - integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== - dependencies: - minimatch "^5.1.0" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -7693,7 +7407,7 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2, rimraf@3.0.2: +rimraf@3.0.2, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -7719,16 +7433,11 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@^5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: +safe-buffer@5.2.1, safe-buffer@^5.1.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" @@ -7741,7 +7450,7 @@ sanitize-filename@^1.6.3: dependencies: truncate-utf8-bytes "^1.0.0" -sass@^1.3.0, sass@^1.78.0: +sass@^1.78.0: version "1.78.0" resolved "https://registry.npmjs.org/sass/-/sass-1.78.0.tgz" integrity sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ== @@ -7793,12 +7502,7 @@ semver-compare@^1.0.0: resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -semver@^6.2.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.3.1: +semver@^6.2.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -7940,7 +7644,7 @@ smart-buffer@^4.0.2: resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -source-map-js@^1.0.2, source-map-js@^1.2.0, "source-map-js@>=0.6.2 <2.0.0": +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2, source-map-js@^1.2.0: version "1.2.1" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== @@ -7983,30 +7687,7 @@ streamsearch@^1.1.0: resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8024,14 +7705,7 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -8094,14 +7768,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -8140,7 +7807,7 @@ tailwind-variants@^0.1.20: dependencies: tailwind-merge "^1.14.0" -tailwindcss@*, tailwindcss@^3.4.10, tailwindcss@>=3.4.0: +tailwindcss@^3.4.10: version "3.4.10" resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz" integrity sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w== @@ -8173,17 +7840,6 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar-stream@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - tar@^6.1.12: version "6.2.1" resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" @@ -8204,7 +7860,7 @@ temp-file@^3.4.0: async-exit-hook "^2.0.1" fs-extra "^10.0.0" -terser-webpack-plugin@^5.3.10, terser-webpack-plugin@5.3.10: +terser-webpack-plugin@5.3.10, terser-webpack-plugin@^5.3.10: version "5.3.10" resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz" integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== @@ -8348,16 +8004,11 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@^5.3.3, typescript@>=4.2.0: +typescript@^5.3.3: version "5.5.4" resolved "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz" integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - undici-types@~6.19.2: version "6.19.8" resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" @@ -8404,7 +8055,7 @@ unload@2.2.0: "@babel/runtime" "^7.6.2" detect-node "^2.0.4" -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -8466,7 +8117,7 @@ utf8-byte-length@^1.0.1: resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz" integrity sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA== -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -8507,14 +8158,6 @@ void-elements@3.1.0: resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== -watchpack@^2.4.1: - version "2.4.2" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz" - integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - watchpack@2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" @@ -8523,6 +8166,14 @@ watchpack@2.4.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" +watchpack@^2.4.1: + version "2.4.2" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + webpack-merge@5.10.0: version "5.10.0" resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz" @@ -8537,7 +8188,7 @@ webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.0.0, webpack@^5.1.0, webpack@>=5, webpack@5.91.0: +webpack@5.91.0: version "5.91.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz" integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== @@ -8598,16 +8249,7 @@ word-wrap@^1.2.5: resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -8645,15 +8287,15 @@ xbox-webapi@^1.4.1: express "^4.17.1" uuid4 "^2.0.2" -xmlbuilder@^15.1.1, xmlbuilder@>=11.0.1: +xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: version "15.1.1" resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== -xstreaming-player@^0.2.4: - version "0.2.4" - resolved "https://registry.npmjs.org/xstreaming-player/-/xstreaming-player-0.2.4.tgz" - integrity sha512-5RiE5ORwGiQBANbC43ACf6wlyVslHyACfvn4ujqPb2nuZQc5tjS4lnETThS61Rmt0cpungRsq22dsI5yldO4FQ== +xstreaming-player@0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/xstreaming-player/-/xstreaming-player-0.2.5.tgz#b91782e3780f9055110af04ff2b9c7adf0411ec7" + integrity sha512-cHTDPSwEGhRjZAAEXvMXzlRADcHcpahzInwD7GrLRNQvTJvz+MqGoxUDs9YSTYNH7Fex+pUqZ/A/lRSRovmAUQ== xvfb-maybe@^0.2.1: version "0.2.1" @@ -8718,12 +8360,3 @@ yocto-queue@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== - -zip-stream@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz" - integrity sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ== - dependencies: - archiver-utils "^3.0.4" - compress-commons "^4.1.2" - readable-stream "^3.6.0"