// vite.config.ts import { loadEnv } from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/vite@5.1.3_@types+node@17.0.45_less@4.1.3_sass@1.53.0/node_modules/vite/dist/node/index.js"; import path, { resolve } from "path"; // build/utils.ts import dotenv from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/dotenv@16.0.1/node_modules/dotenv/lib/main.js"; function isReportMode() { return process.env.REPORT === "true"; } function wrapperEnv(envConf) { const ret = {}; for (const envName of Object.keys(envConf)) { let realName = envConf[envName].replace(/\\n/g, "\n"); realName = realName === "true" ? true : realName === "false" ? false : realName; if (envName === "VITE_PORT") { realName = Number(realName); } if (envName === "VITE_PROXY") { try { realName = JSON.parse(realName); } catch (error) { } } ret[envName] = realName; process.env[envName] = realName; } return ret; } // build/vite/plugin/index.ts import vue from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/@vitejs+plugin-vue@2.3.3_vite@5.1.3_vue@3.3.4/node_modules/@vitejs/plugin-vue/dist/index.js"; import vueJsx from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/@vitejs+plugin-vue-jsx@1.3.10/node_modules/@vitejs/plugin-vue-jsx/index.js"; import VueSetupExtend from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/vite-plugin-vue-setup-extend@0.4.0_vite@5.1.3/node_modules/vite-plugin-vue-setup-extend/dist/index.mjs"; // build/vite/plugin/html.ts import { createHtmlPlugin } from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/vite-plugin-html@3.2.2_vite@5.1.3/node_modules/vite-plugin-html/dist/index.mjs"; // package.json var package_default = { name: "skyeye-admin-fe", version: "1.3.9", private: true, type: "module", scripts: { bootstrap: "pnpm install", serve: "pnpm run dev", dev: "vite", createConfig: "esno ./build/script/postBuild.ts", build: "cross-env NODE_ENV=production vite build", "build:test": "cross-env vite build --mode test && esno ./build/script/postBuild.ts", "build:no-cache": "pnpm clean:cache && pnpm run build", report: "cross-env REPORT=true pnpm run build", "type:check": "vue-tsc --noEmit --skipLibCheck", preview: "pnpm run build && vite preview", "preview:dist": "vite preview", "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite", "clean:lib": "rimraf node_modules", "lint:eslint": 'eslint "{src,mock}/**/*.{vue,ts,tsx}" --fix', "lint:prettier": 'prettier --write --loglevel warn "src/**/*.{js,json,tsx,css,less,scss,vue,html,md}"', "lint:stylelint": 'stylelint --fix "**/*.{vue,less,postcss,css,scss}" --cache --cache-location node_modules/.cache/stylelint/', "lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.js", "lint:pretty": "pretty-quick --staged", "test prod gzip": "http-server dist --cors --gzip -c-1", reinstall: "rimraf pnpm-lock.yaml && rimraf package.lock.json && rimraf node_modules && pnpm run bootstrap", "build typecheck": "vuedx-typecheck . && vite build", deploy: "gh-pages -d dist", publish: "esno ./build/publish/publish.ts" }, dependencies: { "@element-plus/icons-vue": "2.0.9", "@types/fabric": "5.3.6", "@vicons/antd": "0.12.0", "@vicons/ionicons5": "0.12.0", "@vueup/vue-quill": "1.0.0-beta.8", "@vueuse/core": "8.9.4", "@vueuse/router": "10.6.1", "@wangeditor/editor": "5.1.23", "@wangeditor/editor-for-vue": "5.1.12", "animate.css": "4.1.1", archiver: "^7.0.1", axios: "0.27.2", "blueimp-md5": "2.19.0", canvg: "4.0.1", cropperjs: "1.5.12", dayjs: "1.11.4", echarts: "5.3.3", "element-plus": "2.7.1", "element-resize-detector": "1.2.4", "form-data": "^4.0.0", html2canvas: "1.0.0", konva: "9.3.0", "lodash-es": "4.17.21", mockjs: "1.1.0", "mpegts.js": "1.7.3", nprogress: "0.2.0", "number-precision": "1.6.0", "perfect-scrollbar": "1.5.5", pinia: "2.0.16", "print-js": "1.6.0", qrcode: "1.5.1", qs: "6.11.0", uid: "2.0.2", "url-join": "5.0.0", vue: "3.3.4", "vue-echarts": "^6.6.8", "vue-hooks-plus": "1.8.6", "vue-konva": "3.0.2", "vue-router": "4.1.2", "vue-types": "4.1.1", vuedraggable: "4.1.0", xlsx: "0.18.5" }, devDependencies: { "@commitlint/cli": "17.0.3", "@commitlint/config-conventional": "17.0.3", "@types/element-resize-detector": "1.1.3", "@types/intro.js": "3.0.2", "@types/lodash-es": "4.17.6", "@types/node": "17.0.45", "@types/qrcode": "1.4.2", "@typescript-eslint/eslint-plugin": "5.30.7", "@typescript-eslint/parser": "5.30.7", "@vitejs/plugin-vue": "2.3.3", "@vitejs/plugin-vue-jsx": "1.3.10", "@vue/compiler-sfc": "3.3.4", autoprefixer: "10.4.7", chalk: "5.3.0", colors: "1.4.0", commitizen: "4.2.5", "core-js": "3.23.5", "cross-env": "7.0.3", dotenv: "16.0.1", eslint: "8.20.0", "eslint-config-prettier": "8.5.0", "eslint-define-config": "1.5.1", "eslint-plugin-prettier": "4.2.1", "eslint-plugin-vue": "8.7.1", esno: "0.16.3", "fast-glob": "3.3.1", "fs-extra": "10.1.0", "gh-pages": "4.0.0", husky: "8.0.1", less: "4.1.3", "less-loader": "11.1.3", "lint-staged": "13.0.3", picocolors: "1.0.0", postcss: "8.4.14", "postcss-px-to-viewport": "1.1.1", prettier: "2.7.1", "pretty-quick": "3.1.3", rimraf: "3.0.2", "rollup-plugin-visualizer": "5.8.3", sass: "1.53.0", "simple-git": "3.22.0", stylelint: "14.9.1", "stylelint-config-prettier": "9.0.3", "stylelint-config-standard": "25.0.0", "stylelint-order": "5.0.0", "stylelint-scss": "4.3.0", tailwindcss: "3.3.2", "ts-node": "10.9.1", typescript: "4.7.4", vconsole: "3.15.1", vite: "5.1.3", "vite-plugin-compression": "0.5.1", "vite-plugin-html": "3.2.2", "vite-plugin-mock": "2.9.6", "vite-plugin-style-import": "2.0.0", "vite-plugin-svg-icons": "2.0.1", "vite-plugin-vconsole": "1.3.1", "vite-plugin-vue-setup-extend": "0.4.0", "vue-eslint-parser": "9.0.3", "vue-tsc": "0.35.2" }, "lint-staged": { "*.{vue,js,ts,tsx}": "eslint --fix" }, config: { commitizen: { path: "./node_modules/cz-customizable" } }, keywords: [ "vue", "naive-ui", "naive-ui-admin", "vue3", "ts", "tsx", "admin", "typescript" ], engines: { node: "12 || >=14" }, pnpm: { peerDependencyRules: { ignoreMissing: [ "rollup", "webpack" ] } } }; // build/constant.ts var GLOB_CONFIG_FILE_NAME = "app.config.js"; var OUTPUT_DIR = "dist"; // build/vite/plugin/html.ts import { simpleGit } from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/simple-git@3.22.0/node_modules/simple-git/dist/esm/index.js"; var git = simpleGit(); async function getLatestHash() { const gitLog = await git.log(); const lastStrNum = 8; return gitLog.latest?.hash.substring(-lastStrNum, lastStrNum); } function configHtmlPlugin(env, isBuild) { const { VITE_GLOB_APP_TITLE } = env; const path2 = "./"; const getAppConfigSrc = () => { return `${path2 || "/"}${GLOB_CONFIG_FILE_NAME}?v=${package_default.version}-${(/* @__PURE__ */ new Date()).getTime()}`; }; return new Promise((resolve2) => { getLatestHash().then((hash) => { const htmlPlugin = createHtmlPlugin({ minify: isBuild, inject: { // Inject data into ejs template data: { title: VITE_GLOB_APP_TITLE, hash }, // Embed the generated app.config.js file tags: isBuild ? [ { tag: "script", attrs: { src: getAppConfigSrc() } } ] : [] } }); resolve2(htmlPlugin); }); }); } // build/vite/plugin/mock.ts import { viteMockServe } from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/vite-plugin-mock@2.9.6_mockjs@1.1.0_vite@5.1.3/node_modules/vite-plugin-mock/dist/index.js"; function configMockPlugin(isBuild, prodMock) { return viteMockServe({ ignore: /^\_/, mockPath: "mock", localEnabled: !isBuild, prodEnabled: isBuild && prodMock, injectCode: ` import { setupProdMockServer } from '../mock/_createProductionServer'; setupProdMockServer(); ` }); } // build/vite/plugin/compress.ts import compressPlugin from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/vite-plugin-compression@0.5.1_vite@5.1.3/node_modules/vite-plugin-compression/dist/index.mjs"; function configCompressPlugin(compress, deleteOriginFile = false) { const compressList = compress.split(","); const plugins = []; if (compressList.includes("gzip")) { plugins.push( compressPlugin({ ext: ".gz", deleteOriginFile }) ); } if (compressList.includes("brotli")) { plugins.push( compressPlugin({ ext: ".br", algorithm: "brotliCompress", deleteOriginFile }) ); } return plugins; } // build/vite/plugin/visualizer.ts import { visualizer } from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/rollup-plugin-visualizer@5.8.3/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; function configVisualizerPlugin() { if (isReportMode()) { return visualizer({ filename: "./node_modules/.cache/visualizer/stats.html", open: true, gzipSize: true, brotliSize: true }); } return []; } // build/vite/plugin/index.ts function createVitePlugins(viteEnv, isBuild, prodMock) { const { VITE_USE_MOCK, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; const vitePlugins = [ // have to vue(), // have to vueJsx(), VueSetupExtend() // ElementPlus({ // // 引入的样式的类型,可以是css、sass、less等, // importStyle: 'sass', // useSource: true, // }), // 按需引入element且自动创建组件声明 // AutoImport({ // resolvers: [ElementPlusResolver()], // }), // Components({ // resolvers: [ElementPlusResolver()], // }), ]; vitePlugins.push(configHtmlPlugin(viteEnv, isBuild)); VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild, prodMock)); vitePlugins.push(configVisualizerPlugin()); if (isBuild) { vitePlugins.push( configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE) ); } return vitePlugins; } // build/vite/proxy.ts var httpsRE = /^https:\/\//; function createProxy(list = []) { const ret = {}; for (const [prefix, target] of list) { const isHttps = httpsRE.test(target); ret[prefix] = { target, changeOrigin: true, ws: true, rewrite: (path2) => path2.replace(new RegExp(`^${prefix}`), ""), // https is require secure=false ...isHttps ? { secure: false } : {} }; } return ret; } // src/utils/dateUtil.ts import dayjs from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/dayjs@1.11.4/node_modules/dayjs/dayjs.min.js"; var DATE_TIME_FORMAT = "YYYY-MM-DD HH:mm"; function formatToDateTime(date, formatStr = DATE_TIME_FORMAT) { return dayjs(date).format(formatStr); } // vite.config.ts import { createSvgIconsPlugin } from "file:///C:/comac/skyeye/skyeye-admin-fe/node_modules/.pnpm/vite-plugin-svg-icons@2.0.1_vite@5.1.3/node_modules/vite-plugin-svg-icons/dist/index.mjs"; var __vite_injected_original_dirname = "C:\\comac\\skyeye\\skyeye-admin-fe"; var svg = createSvgIconsPlugin({ // 要缓存的图标文件夹 iconDirs: [path.resolve(__vite_injected_original_dirname, "src/assets/icons")], // 执行 icon name 的格式 symbolId: "icon-[name]" }); var { dependencies, devDependencies, name, version } = package_default; var __APP_INFO__ = { pkg: { dependencies, devDependencies, name, version }, lastBuildTime: formatToDateTime(/* @__PURE__ */ new Date()) }; function pathResolve(dir) { return resolve(process.cwd(), ".", dir); } var vite_config_default = ({ command, mode }) => { const root = process.cwd(); const env = loadEnv(mode, root); const viteEnv = wrapperEnv(env); const { VITE_PORT, VITE_GLOB_PROD_MOCK, VITE_PROXY } = viteEnv; const prodMock = VITE_GLOB_PROD_MOCK; const isBuild = command === "build"; return { base: "./", esbuild: {}, resolve: { alias: [ { find: /\/#\//, replacement: pathResolve("types") + "/" }, { find: "@", replacement: pathResolve("src") + "/" } ], dedupe: ["vue"] }, plugins: [createVitePlugins(viteEnv, isBuild, prodMock), svg], define: { __APP_INFO__: JSON.stringify(__APP_INFO__) }, css: { devSourcemap: true, preprocessorOptions: { scss: { modifyVars: {}, javascriptEnabled: true, additionalData: `@import "src/styles/var.scss";` } } }, server: { host: true, port: VITE_PORT, proxy: createProxy(VITE_PROXY) // proxy: { // '/api': { // target: '', // changeOrigin: true, // rewrite: (path) => path.replace(/^\/api/, '/api/v1') // } // } }, optimizeDeps: { include: ["dayjs", "@vicons/ionicons5", "@vicons/antd", "@element-plus/icons-vue"], exclude: [] }, build: { target: "es2015", outDir: OUTPUT_DIR, minify: "terser", /** * 当 minify 为 minify 或 terser 打开注释 */ terserOptions: { compress: { keep_infinity: true, drop_console: true } }, reportCompressedSize: false, chunkSizeWarningLimit: 2e3 } }; }; export { vite_config_default as default }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvdXRpbHMudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaW5kZXgudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaHRtbC50cyIsICJwYWNrYWdlLmpzb24iLCAiYnVpbGQvY29uc3RhbnQudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vbW9jay50cyIsICJidWlsZC92aXRlL3BsdWdpbi9jb21wcmVzcy50cyIsICJidWlsZC92aXRlL3BsdWdpbi92aXN1YWxpemVyLnRzIiwgImJ1aWxkL3ZpdGUvcHJveHkudHMiLCAic3JjL3V0aWxzL2RhdGVVdGlsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcY29tYWNcXFxcc2t5ZXllXFxcXHNreWV5ZS1hZG1pbi1mZVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcY29tYWNcXFxcc2t5ZXllXFxcXHNreWV5ZS1hZG1pbi1mZVxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovY29tYWMvc2t5ZXllL3NreWV5ZS1hZG1pbi1mZS92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB0eXBlIHsgVXNlckNvbmZpZywgQ29uZmlnRW52IH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBsb2FkRW52IH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgcGF0aCwgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3cmFwcGVyRW52IH0gZnJvbSAnLi9idWlsZC91dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVWaXRlUGx1Z2lucyB9IGZyb20gJy4vYnVpbGQvdml0ZS9wbHVnaW4nO1xuaW1wb3J0IHsgT1VUUFVUX0RJUiB9IGZyb20gJy4vYnVpbGQvY29uc3RhbnQnO1xuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tICcuL2J1aWxkL3ZpdGUvcHJveHknO1xuaW1wb3J0IHBrZyBmcm9tICcuL3BhY2thZ2UuanNvbic7XG5pbXBvcnQgeyBmb3JtYXRUb0RhdGVUaW1lIH0gZnJvbSAnLi9zcmMvdXRpbHMvZGF0ZVV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlU3ZnSWNvbnNQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1zdmctaWNvbnMnO1xuXG5jb25zdCBzdmcgPSBjcmVhdGVTdmdJY29uc1BsdWdpbih7XG4gIC8vIFx1ODk4MVx1N0YxM1x1NUI1OFx1NzY4NFx1NTZGRVx1NjgwN1x1NjU4N1x1NEVGNlx1NTkzOVxuICBpY29uRGlyczogW3BhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdzcmMvYXNzZXRzL2ljb25zJyldLFxuICAvLyBcdTYyNjdcdTg4NEMgaWNvbiBuYW1lIFx1NzY4NFx1NjgzQ1x1NUYwRlxuICBzeW1ib2xJZDogJ2ljb24tW25hbWVdJyxcbn0pO1xuXG5jb25zdCB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0gPSBwa2c7XG5cbmNvbnN0IF9fQVBQX0lORk9fXyA9IHtcbiAgcGtnOiB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0sXG4gIGxhc3RCdWlsZFRpbWU6IGZvcm1hdFRvRGF0ZVRpbWUobmV3IERhdGUoKSksXG59O1xuXG5mdW5jdGlvbiBwYXRoUmVzb2x2ZShkaXI6IHN0cmluZykge1xuICByZXR1cm4gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLicsIGRpcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh7IGNvbW1hbmQsIG1vZGUgfTogQ29uZmlnRW52KTogVXNlckNvbmZpZyA9PiB7XG4gIGNvbnN0IHJvb3QgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xuICBjb25zdCB2aXRlRW52ID0gd3JhcHBlckVudihlbnYpO1xuICBjb25zdCB7IFZJVEVfUE9SVCwgVklURV9HTE9CX1BST0RfTU9DSywgVklURV9QUk9YWSB9ID0gdml0ZUVudjtcbiAgY29uc3QgcHJvZE1vY2sgPSBWSVRFX0dMT0JfUFJPRF9NT0NLO1xuICBjb25zdCBpc0J1aWxkID0gY29tbWFuZCA9PT0gJ2J1aWxkJztcbiAgcmV0dXJuIHtcbiAgICBiYXNlOiAnLi8nLFxuICAgIGVzYnVpbGQ6IHt9LFxuICAgIHJlc29sdmU6IHtcbiAgICAgIGFsaWFzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaW5kOiAvXFwvI1xcLy8sXG4gICAgICAgICAgcmVwbGFjZW1lbnQ6IHBhdGhSZXNvbHZlKCd0eXBlcycpICsgJy8nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmluZDogJ0AnLFxuICAgICAgICAgIHJlcGxhY2VtZW50OiBwYXRoUmVzb2x2ZSgnc3JjJykgKyAnLycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZGVkdXBlOiBbJ3Z1ZSddLFxuICAgIH0sXG4gICAgcGx1Z2luczogW2NyZWF0ZVZpdGVQbHVnaW5zKHZpdGVFbnYsIGlzQnVpbGQsIHByb2RNb2NrKSwgc3ZnXSxcbiAgICBkZWZpbmU6IHtcbiAgICAgIF9fQVBQX0lORk9fXzogSlNPTi5zdHJpbmdpZnkoX19BUFBfSU5GT19fKSxcbiAgICB9LFxuICAgIGNzczoge1xuICAgICAgZGV2U291cmNlbWFwOiB0cnVlLFxuICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICBzY3NzOiB7XG4gICAgICAgICAgbW9kaWZ5VmFyczoge30sXG4gICAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAaW1wb3J0IFwic3JjL3N0eWxlcy92YXIuc2Nzc1wiO2AsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2VydmVyOiB7XG4gICAgICBob3N0OiB0cnVlLFxuICAgICAgcG9ydDogVklURV9QT1JULFxuICAgICAgcHJveHk6IGNyZWF0ZVByb3h5KFZJVEVfUFJPWFkpLFxuICAgICAgLy8gcHJveHk6IHtcbiAgICAgIC8vICAgICAnL2FwaSc6IHtcbiAgICAgIC8vICAgICAgICAgdGFyZ2V0OiAnJyxcbiAgICAgIC8vICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxuICAgICAgLy8gICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKC9eXFwvYXBpLywgJy9hcGkvdjEnKVxuICAgICAgLy8gICAgIH1cbiAgICAgIC8vIH1cbiAgICB9LFxuICAgIG9wdGltaXplRGVwczoge1xuICAgICAgaW5jbHVkZTogWydkYXlqcycsICdAdmljb25zL2lvbmljb25zNScsICdAdmljb25zL2FudGQnLCAnQGVsZW1lbnQtcGx1cy9pY29ucy12dWUnXSxcbiAgICAgIGV4Y2x1ZGU6IFtdLFxuICAgIH0sXG4gICAgYnVpbGQ6IHtcbiAgICAgIHRhcmdldDogJ2VzMjAxNScsXG4gICAgICBvdXREaXI6IE9VVFBVVF9ESVIsXG4gICAgICBtaW5pZnk6ICd0ZXJzZXInLFxuICAgICAgLyoqXG4gICAgICAgKiBcdTVGNTMgbWluaWZ5IFx1NEUzQSBtaW5pZnkgXHU2MjE2IHRlcnNlciBcdTYyNTNcdTVGMDBcdTZDRThcdTkxQ0FcbiAgICAgICAqL1xuICAgICAgdGVyc2VyT3B0aW9uczoge1xuICAgICAgICBjb21wcmVzczoge1xuICAgICAgICAgIGtlZXBfaW5maW5pdHk6IHRydWUsXG4gICAgICAgICAgZHJvcF9jb25zb2xlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlcG9ydENvbXByZXNzZWRTaXplOiBmYWxzZSxcbiAgICAgIGNodW5rU2l6ZVdhcm5pbmdMaW1pdDogMjAwMCxcbiAgICB9LFxuICB9O1xufTtcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcY29tYWNcXFxcc2t5ZXllXFxcXHNreWV5ZS1hZG1pbi1mZVxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcY29tYWNcXFxcc2t5ZXllXFxcXHNreWV5ZS1hZG1pbi1mZVxcXFxidWlsZFxcXFx1dGlscy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovY29tYWMvc2t5ZXllL3NreWV5ZS1hZG1pbi1mZS9idWlsZC91dGlscy50c1wiO2ltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBkb3RlbnYgZnJvbSAnZG90ZW52JztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGV2Rm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBtb2RlID09PSAnZGV2ZWxvcG1lbnQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9kRm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBtb2RlID09PSAncHJvZHVjdGlvbic7XG59XG5cbi8qKlxuICogV2hldGhlciB0byBnZW5lcmF0ZSBwYWNrYWdlIHByZXZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwb3J0TW9kZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LlJFUE9SVCA9PT0gJ3RydWUnO1xufVxuXG4vLyBSZWFkIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHByb2Nlc3MuZW52XG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XG4gIGNvbnN0IHJldDogYW55ID0ge307XG5cbiAgZm9yIChjb25zdCBlbnZOYW1lIG9mIE9iamVjdC5rZXlzKGVudkNvbmYpKSB7XG4gICAgbGV0IHJlYWxOYW1lID0gZW52Q29uZltlbnZOYW1lXS5yZXBsYWNlKC9cXFxcbi9nLCAnXFxuJyk7XG4gICAgcmVhbE5hbWUgPSByZWFsTmFtZSA9PT0gJ3RydWUnID8gdHJ1ZSA6IHJlYWxOYW1lID09PSAnZmFsc2UnID8gZmFsc2UgOiByZWFsTmFtZTtcblxuICAgIGlmIChlbnZOYW1lID09PSAnVklURV9QT1JUJykge1xuICAgICAgcmVhbE5hbWUgPSBOdW1iZXIocmVhbE5hbWUpO1xuICAgIH1cbiAgICBpZiAoZW52TmFtZSA9PT0gJ1ZJVEVfUFJPWFknKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZWFsTmFtZSA9IEpTT04ucGFyc2UocmVhbE5hbWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfVxuICAgIHJldFtlbnZOYW1lXSA9IHJlYWxOYW1lO1xuICAgIHByb2Nlc3MuZW52W2Vudk5hbWVdID0gcmVhbE5hbWU7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4XG4gKiBAcGFyYW0gbWF0Y2ggcHJlZml4XG4gKiBAcGFyYW0gY29uZkZpbGVzIGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52Q29uZmlnKG1hdGNoID0gJ1ZJVEVfR0xPQl8nLCBjb25mRmlsZXMgPSBbJy5lbnYnLCAnLmVudi5wcm9kdWN0aW9uJ10pIHtcbiAgbGV0IGVudkNvbmZpZyA9IHt9O1xuICBjb25mRmlsZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnYgPSBkb3RlbnYucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBpdGVtKSkpO1xuICAgICAgZW52Q29uZmlnID0geyAuLi5lbnZDb25maWcsIC4uLmVudiB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICB9KTtcblxuICBPYmplY3Qua2V5cyhlbnZDb25maWcpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYF4oJHttYXRjaH0pYCk7XG4gICAgaWYgKCFyZWcudGVzdChrZXkpKSB7XG4gICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGVudkNvbmZpZywga2V5KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZW52Q29uZmlnO1xufVxuXG4vKipcbiAqIEdldCB1c2VyIHJvb3QgZGlyZWN0b3J5XG4gKiBAcGFyYW0gZGlyIGZpbGUgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdFBhdGgoLi4uZGlyOiBzdHJpbmdbXSkge1xuICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIC4uLmRpcik7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXGNvbWFjXFxcXHNreWV5ZVxcXFxza3lleWUtYWRtaW4tZmVcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXGNvbWFjXFxcXHNreWV5ZVxcXFxza3lleWUtYWRtaW4tZmVcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcaW5kZXgudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L2NvbWFjL3NreWV5ZS9za3lleWUtYWRtaW4tZmUvYnVpbGQvdml0ZS9wbHVnaW4vaW5kZXgudHNcIjtpbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbiB9IGZyb20gJ3ZpdGUnO1xuXG5pbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSc7XG5pbXBvcnQgdnVlSnN4IGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZS1qc3gnO1xuaW1wb3J0IFZ1ZVNldHVwRXh0ZW5kIGZyb20gJ3ZpdGUtcGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmQnO1xuLy8gXHU4MUVBXHU1MkE4XHU2MzA5XHU5NzAwXHU1QkZDXHU1MTY1XHVGRjBDXHU2ODM5XHU2MzZFXHU4MUVBXHU4RUFCXHU2MEM1XHU1MUI1XHU5MDA5XHU2MkU5XG4vLyBpbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJztcbi8vIGltcG9ydCBDb21wb25lbnRzIGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGUnO1xuLy8gaW1wb3J0IHsgRWxlbWVudFBsdXNSZXNvbHZlciB9IGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVycyc7XG4vLyBpbXBvcnQgQ29tcG9uZW50cyBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy92aXRlJztcbi8vIGltcG9ydCBFbGVtZW50UGx1cyBmcm9tICd1bnBsdWdpbi1lbGVtZW50LXBsdXMvdml0ZSc7XG5cbmltcG9ydCB7IGNvbmZpZ0h0bWxQbHVnaW4gfSBmcm9tICcuL2h0bWwnO1xuaW1wb3J0IHsgY29uZmlnTW9ja1BsdWdpbiB9IGZyb20gJy4vbW9jayc7XG5pbXBvcnQgeyBjb25maWdDb21wcmVzc1BsdWdpbiB9IGZyb20gJy4vY29tcHJlc3MnO1xuaW1wb3J0IHsgY29uZmlnVmlzdWFsaXplclBsdWdpbiB9IGZyb20gJy4vdmlzdWFsaXplcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52OiBWaXRlRW52LCBpc0J1aWxkOiBib29sZWFuLCBwcm9kTW9jaykge1xuICBjb25zdCB7IFZJVEVfVVNFX01PQ0ssIFZJVEVfQlVJTERfQ09NUFJFU1MsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFIH0gPSB2aXRlRW52O1xuXG4gIGNvbnN0IHZpdGVQbHVnaW5zOiAoUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10pW10gPSBbXG4gICAgLy8gaGF2ZSB0b1xuICAgIHZ1ZSgpLFxuICAgIC8vIGhhdmUgdG9cbiAgICB2dWVKc3goKSxcbiAgICBWdWVTZXR1cEV4dGVuZCgpLFxuICAgIC8vIEVsZW1lbnRQbHVzKHtcbiAgICAvLyAgIC8vIFx1NUYxNVx1NTE2NVx1NzY4NFx1NjgzN1x1NUYwRlx1NzY4NFx1N0M3Qlx1NTc4Qlx1RkYwQ1x1NTNFRlx1NEVFNVx1NjYyRmNzc1x1MzAwMXNhc3NcdTMwMDFsZXNzXHU3QjQ5XHVGRjBDXG4gICAgLy8gICBpbXBvcnRTdHlsZTogJ3Nhc3MnLFxuICAgIC8vICAgdXNlU291cmNlOiB0cnVlLFxuICAgIC8vIH0pLFxuICAgIC8vIFx1NjMwOVx1OTcwMFx1NUYxNVx1NTE2NWVsZW1lbnRcdTRFMTRcdTgxRUFcdTUyQThcdTUyMUJcdTVFRkFcdTdFQzRcdTRFRjZcdTU4RjBcdTY2MEVcbiAgICAvLyBBdXRvSW1wb3J0KHtcbiAgICAvLyAgIHJlc29sdmVyczogW0VsZW1lbnRQbHVzUmVzb2x2ZXIoKV0sXG4gICAgLy8gfSksXG4gICAgLy8gQ29tcG9uZW50cyh7XG4gICAgLy8gICByZXNvbHZlcnM6IFtFbGVtZW50UGx1c1Jlc29sdmVyKCldLFxuICAgIC8vIH0pLFxuICBdO1xuXG4gIC8vIHZpdGUtcGx1Z2luLWh0bWxcbiAgdml0ZVBsdWdpbnMucHVzaChjb25maWdIdG1sUGx1Z2luKHZpdGVFbnYsIGlzQnVpbGQpKTtcblxuICAvLyB2aXRlLXBsdWdpbi1tb2NrXG4gIFZJVEVfVVNFX01PQ0sgJiYgdml0ZVBsdWdpbnMucHVzaChjb25maWdNb2NrUGx1Z2luKGlzQnVpbGQsIHByb2RNb2NrKSk7XG5cbiAgLy8gcm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXG4gIHZpdGVQbHVnaW5zLnB1c2goY29uZmlnVmlzdWFsaXplclBsdWdpbigpKTtcblxuICBpZiAoaXNCdWlsZCkge1xuICAgIC8vIHJvbGx1cC1wbHVnaW4tZ3ppcFxuICAgIHZpdGVQbHVnaW5zLnB1c2goXG4gICAgICBjb25maWdDb21wcmVzc1BsdWdpbihWSVRFX0JVSUxEX0NPTVBSRVNTLCBWSVRFX0JVSUxEX0NPTVBSRVNTX0RFTEVURV9PUklHSU5fRklMRSksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB2aXRlUGx1Z2lucztcbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcY29tYWNcXFxcc2t5ZXllXFxcXHNreWV5ZS1hZG1pbi1mZVxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcY29tYWNcXFxcc2t5ZXllXFxcXHNreWV5ZS1hZG1pbi1mZVxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblxcXFxodG1sLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9jb21hYy9za3lleWUvc2t5ZXllLWFkbWluLWZlL2J1aWxkL3ZpdGUvcGx1Z2luL2h0bWwudHNcIjsvKipcbiAqIFBsdWdpbiB0byBtaW5pbWl6ZSBhbmQgdXNlIGVqcyB0ZW1wbGF0ZSBzeW50YXggaW4gaW5kZXguaHRtbC5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbm5jd2Ivdml0ZS1wbHVnaW4taHRtbFxuICovXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLWh0bWwnO1xuaW1wb3J0IHBrZyBmcm9tICcuLi8uLi8uLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHsgR0xPQl9DT05GSUdfRklMRV9OQU1FIH0gZnJvbSAnLi4vLi4vY29uc3RhbnQnO1xuaW1wb3J0IHsgc2ltcGxlR2l0IH0gZnJvbSAnc2ltcGxlLWdpdCc7XG5jb25zdCBnaXQgPSBzaW1wbGVHaXQoKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0SGFzaCgpIHtcbiAgY29uc3QgZ2l0TG9nID0gYXdhaXQgZ2l0LmxvZygpO1xuICAvKiogXHU2MjJBXHU1M0Q2Z2l0IGhhc2hcdTUwM0NcdTY3MDBcdTU0MEU4XHU0RjREICovXG4gIGNvbnN0IGxhc3RTdHJOdW0gPSA4O1xuICByZXR1cm4gZ2l0TG9nLmxhdGVzdD8uaGFzaC5zdWJzdHJpbmcoLWxhc3RTdHJOdW0sIGxhc3RTdHJOdW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlnSHRtbFBsdWdpbihlbnY6IFZpdGVFbnYsIGlzQnVpbGQ6IGJvb2xlYW4pOiBQcm9taXNlPFBsdWdpbk9wdGlvbltdPiB7XG4gIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSB9ID0gZW52O1xuXG4gIGNvbnN0IHBhdGggPSAnLi8nO1xuXG4gIGNvbnN0IGdldEFwcENvbmZpZ1NyYyA9ICgpID0+IHtcbiAgICByZXR1cm4gYCR7cGF0aCB8fCAnLyd9JHtHTE9CX0NPTkZJR19GSUxFX05BTUV9P3Y9JHtwa2cudmVyc2lvbn0tJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gO1xuICB9O1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGdldExhdGVzdEhhc2goKS50aGVuKChoYXNoKSA9PiB7XG4gICAgICBjb25zdCBodG1sUGx1Z2luOiBQbHVnaW5PcHRpb25bXSA9IGNyZWF0ZUh0bWxQbHVnaW4oe1xuICAgICAgICBtaW5pZnk6IGlzQnVpbGQsXG4gICAgICAgIGluamVjdDoge1xuICAgICAgICAgIC8vIEluamVjdCBkYXRhIGludG8gZWpzIHRlbXBsYXRlXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFZJVEVfR0xPQl9BUFBfVElUTEUsXG4gICAgICAgICAgICBoYXNoLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gRW1iZWQgdGhlIGdlbmVyYXRlZCBhcHAuY29uZmlnLmpzIGZpbGVcbiAgICAgICAgICB0YWdzOiBpc0J1aWxkXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0YWc6ICdzY3JpcHQnLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBnZXRBcHBDb25maWdTcmMoKSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcmVzb2x2ZShodG1sUGx1Z2luKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCAie1xuICBcIm5hbWVcIjogXCJza3lleWUtYWRtaW4tZmVcIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMS4zLjlcIixcbiAgXCJwcml2YXRlXCI6IHRydWUsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwiYm9vdHN0cmFwXCI6IFwicG5wbSBpbnN0YWxsXCIsXG4gICAgXCJzZXJ2ZVwiOiBcInBucG0gcnVuIGRldlwiLFxuICAgIFwiZGV2XCI6IFwidml0ZVwiLFxuICAgIFwiY3JlYXRlQ29uZmlnXCI6IFwiZXNubyAuL2J1aWxkL3NjcmlwdC9wb3N0QnVpbGQudHNcIixcbiAgICBcImJ1aWxkXCI6IFwiY3Jvc3MtZW52IE5PREVfRU5WPXByb2R1Y3Rpb24gdml0ZSBidWlsZFwiLFxuICAgIFwiYnVpbGQ6dGVzdFwiOiBcImNyb3NzLWVudiB2aXRlIGJ1aWxkIC0tbW9kZSB0ZXN0ICYmIGVzbm8gLi9idWlsZC9zY3JpcHQvcG9zdEJ1aWxkLnRzXCIsXG4gICAgXCJidWlsZDpuby1jYWNoZVwiOiBcInBucG0gY2xlYW46Y2FjaGUgJiYgcG5wbSBydW4gYnVpbGRcIixcbiAgICBcInJlcG9ydFwiOiBcImNyb3NzLWVudiBSRVBPUlQ9dHJ1ZSBwbnBtIHJ1biBidWlsZFwiLFxuICAgIFwidHlwZTpjaGVja1wiOiBcInZ1ZS10c2MgLS1ub0VtaXQgLS1za2lwTGliQ2hlY2tcIixcbiAgICBcInByZXZpZXdcIjogXCJwbnBtIHJ1biBidWlsZCAmJiB2aXRlIHByZXZpZXdcIixcbiAgICBcInByZXZpZXc6ZGlzdFwiOiBcInZpdGUgcHJldmlld1wiLFxuICAgIFwiY2xlYW46Y2FjaGVcIjogXCJyaW1yYWYgbm9kZV9tb2R1bGVzLy5jYWNoZS8gJiYgcmltcmFmIG5vZGVfbW9kdWxlcy8udml0ZVwiLFxuICAgIFwiY2xlYW46bGliXCI6IFwicmltcmFmIG5vZGVfbW9kdWxlc1wiLFxuICAgIFwibGludDplc2xpbnRcIjogXCJlc2xpbnQgXFxcIntzcmMsbW9ja30vKiovKi57dnVlLHRzLHRzeH1cXFwiIC0tZml4XCIsXG4gICAgXCJsaW50OnByZXR0aWVyXCI6IFwicHJldHRpZXIgLS13cml0ZSAtLWxvZ2xldmVsIHdhcm4gXFxcInNyYy8qKi8qLntqcyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcbiAgICBcImxpbnQ6c3R5bGVsaW50XCI6IFwic3R5bGVsaW50IC0tZml4IFxcXCIqKi8qLnt2dWUsbGVzcyxwb3N0Y3NzLGNzcyxzY3NzfVxcXCIgLS1jYWNoZSAtLWNhY2hlLWxvY2F0aW9uIG5vZGVfbW9kdWxlcy8uY2FjaGUvc3R5bGVsaW50L1wiLFxuICAgIFwibGludDpsaW50LXN0YWdlZFwiOiBcImxpbnQtc3RhZ2VkIC1jIC4vLmh1c2t5L2xpbnRzdGFnZWRyYy5qc1wiLFxuICAgIFwibGludDpwcmV0dHlcIjogXCJwcmV0dHktcXVpY2sgLS1zdGFnZWRcIixcbiAgICBcInRlc3QgcHJvZCBnemlwXCI6IFwiaHR0cC1zZXJ2ZXIgZGlzdCAtLWNvcnMgLS1nemlwIC1jLTFcIixcbiAgICBcInJlaW5zdGFsbFwiOiBcInJpbXJhZiBwbnBtLWxvY2sueWFtbCAmJiByaW1yYWYgcGFja2FnZS5sb2NrLmpzb24gJiYgcmltcmFmIG5vZGVfbW9kdWxlcyAmJiBwbnBtIHJ1biBib290c3RyYXBcIixcbiAgICBcImJ1aWxkIHR5cGVjaGVja1wiOiBcInZ1ZWR4LXR5cGVjaGVjayAuICYmIHZpdGUgYnVpbGRcIixcbiAgICBcImRlcGxveVwiOiBcImdoLXBhZ2VzIC1kIGRpc3RcIixcbiAgICBcInB1Ymxpc2hcIjogXCJlc25vIC4vYnVpbGQvcHVibGlzaC9wdWJsaXNoLnRzXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGVsZW1lbnQtcGx1cy9pY29ucy12dWVcIjogXCIyLjAuOVwiLFxuICAgIFwiQHR5cGVzL2ZhYnJpY1wiOiBcIjUuMy42XCIsXG4gICAgXCJAdmljb25zL2FudGRcIjogXCIwLjEyLjBcIixcbiAgICBcIkB2aWNvbnMvaW9uaWNvbnM1XCI6IFwiMC4xMi4wXCIsXG4gICAgXCJAdnVldXAvdnVlLXF1aWxsXCI6IFwiMS4wLjAtYmV0YS44XCIsXG4gICAgXCJAdnVldXNlL2NvcmVcIjogXCI4LjkuNFwiLFxuICAgIFwiQHZ1ZXVzZS9yb3V0ZXJcIjogXCIxMC42LjFcIixcbiAgICBcIkB3YW5nZWRpdG9yL2VkaXRvclwiOiBcIjUuMS4yM1wiLFxuICAgIFwiQHdhbmdlZGl0b3IvZWRpdG9yLWZvci12dWVcIjogXCI1LjEuMTJcIixcbiAgICBcImFuaW1hdGUuY3NzXCI6IFwiNC4xLjFcIixcbiAgICBcImFyY2hpdmVyXCI6IFwiXjcuMC4xXCIsXG4gICAgXCJheGlvc1wiOiBcIjAuMjcuMlwiLFxuICAgIFwiYmx1ZWltcC1tZDVcIjogXCIyLjE5LjBcIixcbiAgICBcImNhbnZnXCI6IFwiNC4wLjFcIixcbiAgICBcImNyb3BwZXJqc1wiOiBcIjEuNS4xMlwiLFxuICAgIFwiZGF5anNcIjogXCIxLjExLjRcIixcbiAgICBcImVjaGFydHNcIjogXCI1LjMuM1wiLFxuICAgIFwiZWxlbWVudC1wbHVzXCI6IFwiMi43LjFcIixcbiAgICBcImVsZW1lbnQtcmVzaXplLWRldGVjdG9yXCI6IFwiMS4yLjRcIixcbiAgICBcImZvcm0tZGF0YVwiOiBcIl40LjAuMFwiLFxuICAgIFwiaHRtbDJjYW52YXNcIjogXCIxLjAuMFwiLFxuICAgIFwia29udmFcIjogXCI5LjMuMFwiLFxuICAgIFwibG9kYXNoLWVzXCI6IFwiNC4xNy4yMVwiLFxuICAgIFwibW9ja2pzXCI6IFwiMS4xLjBcIixcbiAgICBcIm1wZWd0cy5qc1wiOiBcIjEuNy4zXCIsXG4gICAgXCJucHJvZ3Jlc3NcIjogXCIwLjIuMFwiLFxuICAgIFwibnVtYmVyLXByZWNpc2lvblwiOiBcIjEuNi4wXCIsXG4gICAgXCJwZXJmZWN0LXNjcm9sbGJhclwiOiBcIjEuNS41XCIsXG4gICAgXCJwaW5pYVwiOiBcIjIuMC4xNlwiLFxuICAgIFwicHJpbnQtanNcIjogXCIxLjYuMFwiLFxuICAgIFwicXJjb2RlXCI6IFwiMS41LjFcIixcbiAgICBcInFzXCI6IFwiNi4xMS4wXCIsXG4gICAgXCJ1aWRcIjogXCIyLjAuMlwiLFxuICAgIFwidXJsLWpvaW5cIjogXCI1LjAuMFwiLFxuICAgIFwidnVlXCI6IFwiMy4zLjRcIixcbiAgICBcInZ1ZS1lY2hhcnRzXCI6IFwiXjYuNi44XCIsXG4gICAgXCJ2dWUtaG9va3MtcGx1c1wiOiBcIjEuOC42XCIsXG4gICAgXCJ2dWUta29udmFcIjogXCIzLjAuMlwiLFxuICAgIFwidnVlLXJvdXRlclwiOiBcIjQuMS4yXCIsXG4gICAgXCJ2dWUtdHlwZXNcIjogXCI0LjEuMVwiLFxuICAgIFwidnVlZHJhZ2dhYmxlXCI6IFwiNC4xLjBcIixcbiAgICBcInhsc3hcIjogXCIwLjE4LjVcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAY29tbWl0bGludC9jbGlcIjogXCIxNy4wLjNcIixcbiAgICBcIkBjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxcIjogXCIxNy4wLjNcIixcbiAgICBcIkB0eXBlcy9lbGVtZW50LXJlc2l6ZS1kZXRlY3RvclwiOiBcIjEuMS4zXCIsXG4gICAgXCJAdHlwZXMvaW50cm8uanNcIjogXCIzLjAuMlwiLFxuICAgIFwiQHR5cGVzL2xvZGFzaC1lc1wiOiBcIjQuMTcuNlwiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCIxNy4wLjQ1XCIsXG4gICAgXCJAdHlwZXMvcXJjb2RlXCI6IFwiMS40LjJcIixcbiAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luXCI6IFwiNS4zMC43XCIsXG4gICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyXCI6IFwiNS4zMC43XCIsXG4gICAgXCJAdml0ZWpzL3BsdWdpbi12dWVcIjogXCIyLjMuM1wiLFxuICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiOiBcIjEuMy4xMFwiLFxuICAgIFwiQHZ1ZS9jb21waWxlci1zZmNcIjogXCIzLjMuNFwiLFxuICAgIFwiYXV0b3ByZWZpeGVyXCI6IFwiMTAuNC43XCIsXG4gICAgXCJjaGFsa1wiOiBcIjUuMy4wXCIsXG4gICAgXCJjb2xvcnNcIjogXCIxLjQuMFwiLFxuICAgIFwiY29tbWl0aXplblwiOiBcIjQuMi41XCIsXG4gICAgXCJjb3JlLWpzXCI6IFwiMy4yMy41XCIsXG4gICAgXCJjcm9zcy1lbnZcIjogXCI3LjAuM1wiLFxuICAgIFwiZG90ZW52XCI6IFwiMTYuMC4xXCIsXG4gICAgXCJlc2xpbnRcIjogXCI4LjIwLjBcIixcbiAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCI4LjUuMFwiLFxuICAgIFwiZXNsaW50LWRlZmluZS1jb25maWdcIjogXCIxLjUuMVwiLFxuICAgIFwiZXNsaW50LXBsdWdpbi1wcmV0dGllclwiOiBcIjQuMi4xXCIsXG4gICAgXCJlc2xpbnQtcGx1Z2luLXZ1ZVwiOiBcIjguNy4xXCIsXG4gICAgXCJlc25vXCI6IFwiMC4xNi4zXCIsXG4gICAgXCJmYXN0LWdsb2JcIjogXCIzLjMuMVwiLFxuICAgIFwiZnMtZXh0cmFcIjogXCIxMC4xLjBcIixcbiAgICBcImdoLXBhZ2VzXCI6IFwiNC4wLjBcIixcbiAgICBcImh1c2t5XCI6IFwiOC4wLjFcIixcbiAgICBcImxlc3NcIjogXCI0LjEuM1wiLFxuICAgIFwibGVzcy1sb2FkZXJcIjogXCIxMS4xLjNcIixcbiAgICBcImxpbnQtc3RhZ2VkXCI6IFwiMTMuMC4zXCIsXG4gICAgXCJwaWNvY29sb3JzXCI6IFwiMS4wLjBcIixcbiAgICBcInBvc3Rjc3NcIjogXCI4LjQuMTRcIixcbiAgICBcInBvc3Rjc3MtcHgtdG8tdmlld3BvcnRcIjogXCIxLjEuMVwiLFxuICAgIFwicHJldHRpZXJcIjogXCIyLjcuMVwiLFxuICAgIFwicHJldHR5LXF1aWNrXCI6IFwiMy4xLjNcIixcbiAgICBcInJpbXJhZlwiOiBcIjMuMC4yXCIsXG4gICAgXCJyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcIjogXCI1LjguM1wiLFxuICAgIFwic2Fzc1wiOiBcIjEuNTMuMFwiLFxuICAgIFwic2ltcGxlLWdpdFwiOiBcIjMuMjIuMFwiLFxuICAgIFwic3R5bGVsaW50XCI6IFwiMTQuOS4xXCIsXG4gICAgXCJzdHlsZWxpbnQtY29uZmlnLXByZXR0aWVyXCI6IFwiOS4wLjNcIixcbiAgICBcInN0eWxlbGludC1jb25maWctc3RhbmRhcmRcIjogXCIyNS4wLjBcIixcbiAgICBcInN0eWxlbGludC1vcmRlclwiOiBcIjUuMC4wXCIsXG4gICAgXCJzdHlsZWxpbnQtc2Nzc1wiOiBcIjQuMy4wXCIsXG4gICAgXCJ0YWlsd2luZGNzc1wiOiBcIjMuMy4yXCIsXG4gICAgXCJ0cy1ub2RlXCI6IFwiMTAuOS4xXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiNC43LjRcIixcbiAgICBcInZjb25zb2xlXCI6IFwiMy4xNS4xXCIsXG4gICAgXCJ2aXRlXCI6IFwiNS4xLjNcIixcbiAgICBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI6IFwiMC41LjFcIixcbiAgICBcInZpdGUtcGx1Z2luLWh0bWxcIjogXCIzLjIuMlwiLFxuICAgIFwidml0ZS1wbHVnaW4tbW9ja1wiOiBcIjIuOS42XCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1zdHlsZS1pbXBvcnRcIjogXCIyLjAuMFwiLFxuICAgIFwidml0ZS1wbHVnaW4tc3ZnLWljb25zXCI6IFwiMi4wLjFcIixcbiAgICBcInZpdGUtcGx1Z2luLXZjb25zb2xlXCI6IFwiMS4zLjFcIixcbiAgICBcInZpdGUtcGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmRcIjogXCIwLjQuMFwiLFxuICAgIFwidnVlLWVzbGludC1wYXJzZXJcIjogXCI5LjAuM1wiLFxuICAgIFwidnVlLXRzY1wiOiBcIjAuMzUuMlwiXG4gIH0sXG4gIFwibGludC1zdGFnZWRcIjoge1xuICAgIFwiKi57dnVlLGpzLHRzLHRzeH1cIjogXCJlc2xpbnQgLS1maXhcIlxuICB9LFxuICBcImNvbmZpZ1wiOiB7XG4gICAgXCJjb21taXRpemVuXCI6IHtcbiAgICAgIFwicGF0aFwiOiBcIi4vbm9kZV9tb2R1bGVzL2N6LWN1c3RvbWl6YWJsZVwiXG4gICAgfVxuICB9LFxuICBcImtleXdvcmRzXCI6IFtcbiAgICBcInZ1ZVwiLFxuICAgIFwibmFpdmUtdWlcIixcbiAgICBcIm5haXZlLXVpLWFkbWluXCIsXG4gICAgXCJ2dWUzXCIsXG4gICAgXCJ0c1wiLFxuICAgIFwidHN4XCIsXG4gICAgXCJhZG1pblwiLFxuICAgIFwidHlwZXNjcmlwdFwiXG4gIF0sXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiMTIgfHwgPj0xNFwiXG4gIH0sXG4gIFwicG5wbVwiOiB7XG4gICAgXCJwZWVyRGVwZW5kZW5jeVJ1bGVzXCI6IHtcbiAgICAgIFwiaWdub3JlTWlzc2luZ1wiOiBbXG4gICAgICAgIFwicm9sbHVwXCIsXG4gICAgICAgIFwid2VicGFja1wiXG4gICAgICBdXG4gICAgfVxuICB9XG59IiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxjb21hY1xcXFxza3lleWVcXFxcc2t5ZXllLWFkbWluLWZlXFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxjb21hY1xcXFxza3lleWVcXFxcc2t5ZXllLWFkbWluLWZlXFxcXGJ1aWxkXFxcXGNvbnN0YW50LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9jb21hYy9za3lleWUvc2t5ZXllLWFkbWluLWZlL2J1aWxkL2NvbnN0YW50LnRzXCI7LyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGVudGVyZWQgaW4gdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IEdMT0JfQ09ORklHX0ZJTEVfTkFNRSA9ICdhcHAuY29uZmlnLmpzJztcblxuZXhwb3J0IGNvbnN0IE9VVFBVVF9ESVIgPSAnZGlzdCc7XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXGNvbWFjXFxcXHNreWV5ZVxcXFxza3lleWUtYWRtaW4tZmVcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXGNvbWFjXFxcXHNreWV5ZVxcXFxza3lleWUtYWRtaW4tZmVcXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcbW9jay50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovY29tYWMvc2t5ZXllL3NreWV5ZS1hZG1pbi1mZS9idWlsZC92aXRlL3BsdWdpbi9tb2NrLnRzXCI7LyoqXG4gKiBNb2NrIHBsdWdpbiBmb3IgZGV2ZWxvcG1lbnQgYW5kIHByb2R1Y3Rpb24uXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYW5uY3diL3ZpdGUtcGx1Z2luLW1vY2tcbiAqL1xuaW1wb3J0IHsgdml0ZU1vY2tTZXJ2ZSB9IGZyb20gJ3ZpdGUtcGx1Z2luLW1vY2snO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlnTW9ja1BsdWdpbihpc0J1aWxkOiBib29sZWFuLCBwcm9kTW9jazogYm9vbGVhbikge1xuICByZXR1cm4gdml0ZU1vY2tTZXJ2ZSh7XG4gICAgaWdub3JlOiAvXlxcXy8sXG4gICAgbW9ja1BhdGg6ICdtb2NrJyxcbiAgICBsb2NhbEVuYWJsZWQ6ICFpc0J1aWxkLFxuICAgIHByb2RFbmFibGVkOiBpc0J1aWxkICYmIHByb2RNb2NrLFxuICAgIGluamVjdENvZGU6IGBcbiAgICAgICBpbXBvcnQgeyBzZXR1cFByb2RNb2NrU2VydmVyIH0gZnJvbSAnLi4vbW9jay9fY3JlYXRlUHJvZHVjdGlvblNlcnZlcic7XG4gXG4gICAgICAgc2V0dXBQcm9kTW9ja1NlcnZlcigpO1xuICAgICAgIGAsXG4gIH0pO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxjb21hY1xcXFxza3lleWVcXFxcc2t5ZXllLWFkbWluLWZlXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxjb21hY1xcXFxza3lleWVcXFxcc2t5ZXllLWFkbWluLWZlXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXFxcXGNvbXByZXNzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9jb21hYy9za3lleWUvc2t5ZXllLWFkbWluLWZlL2J1aWxkL3ZpdGUvcGx1Z2luL2NvbXByZXNzLnRzXCI7LyoqXG4gKiBVc2VkIHRvIHBhY2thZ2UgYW5kIG91dHB1dCBnemlwLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IGluIFZpdGUsIHRoZSBzcGVjaWZpYyByZWFzb24gaXMgc3RpbGwgYmVpbmcgaW52ZXN0aWdhdGVkXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYW5uY3diL3ZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXG4gKi9cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5cbmltcG9ydCBjb21wcmVzc1BsdWdpbiBmcm9tICd2aXRlLXBsdWdpbi1jb21wcmVzc2lvbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25maWdDb21wcmVzc1BsdWdpbihcbiAgY29tcHJlc3M6ICdnemlwJyB8ICdicm90bGknIHwgJ25vbmUnLFxuICBkZWxldGVPcmlnaW5GaWxlID0gZmFsc2Vcbik6IFBsdWdpbiB8IFBsdWdpbltdIHtcbiAgY29uc3QgY29tcHJlc3NMaXN0ID0gY29tcHJlc3Muc3BsaXQoJywnKTtcblxuICBjb25zdCBwbHVnaW5zOiBQbHVnaW5bXSA9IFtdO1xuXG4gIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoJ2d6aXAnKSkge1xuICAgIHBsdWdpbnMucHVzaChcbiAgICAgIGNvbXByZXNzUGx1Z2luKHtcbiAgICAgICAgZXh0OiAnLmd6JyxcbiAgICAgICAgZGVsZXRlT3JpZ2luRmlsZSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBpZiAoY29tcHJlc3NMaXN0LmluY2x1ZGVzKCdicm90bGknKSkge1xuICAgIHBsdWdpbnMucHVzaChcbiAgICAgIGNvbXByZXNzUGx1Z2luKHtcbiAgICAgICAgZXh0OiAnLmJyJyxcbiAgICAgICAgYWxnb3JpdGhtOiAnYnJvdGxpQ29tcHJlc3MnLFxuICAgICAgICBkZWxldGVPcmlnaW5GaWxlLFxuICAgICAgfSlcbiAgICApO1xuICB9XG4gIHJldHVybiBwbHVnaW5zO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxjb21hY1xcXFxza3lleWVcXFxcc2t5ZXllLWFkbWluLWZlXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxjb21hY1xcXFxza3lleWVcXFxcc2t5ZXllLWFkbWluLWZlXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXFxcXHZpc3VhbGl6ZXIudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L2NvbWFjL3NreWV5ZS9za3lleWUtYWRtaW4tZmUvYnVpbGQvdml0ZS9wbHVnaW4vdmlzdWFsaXplci50c1wiO2ltcG9ydCB7IFBsdWdpbk9wdGlvbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgdmlzdWFsaXplciB9IGZyb20gJ3JvbGx1cC1wbHVnaW4tdmlzdWFsaXplcic7XG5pbXBvcnQgeyBpc1JlcG9ydE1vZGUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25maWdWaXN1YWxpemVyUGx1Z2luKCkge1xuICBpZiAoaXNSZXBvcnRNb2RlKCkpIHtcbiAgICByZXR1cm4gdmlzdWFsaXplcih7XG4gICAgICBmaWxlbmFtZTogJy4vbm9kZV9tb2R1bGVzLy5jYWNoZS92aXN1YWxpemVyL3N0YXRzLmh0bWwnLFxuICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgIGd6aXBTaXplOiB0cnVlLFxuICAgICAgYnJvdGxpU2l6ZTogdHJ1ZSxcbiAgICB9KSBhcyBQbHVnaW5PcHRpb247XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxjb21hY1xcXFxza3lleWVcXFxcc2t5ZXllLWFkbWluLWZlXFxcXGJ1aWxkXFxcXHZpdGVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXGNvbWFjXFxcXHNreWV5ZVxcXFxza3lleWUtYWRtaW4tZmVcXFxcYnVpbGRcXFxcdml0ZVxcXFxwcm94eS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovY29tYWMvc2t5ZXllL3NreWV5ZS1hZG1pbi1mZS9idWlsZC92aXRlL3Byb3h5LnRzXCI7LyoqXG4gKiBVc2VkIHRvIHBhcnNlIHRoZSAuZW52LmRldmVsb3BtZW50IHByb3h5IGNvbmZpZ3VyYXRpb25cbiAqL1xuaW1wb3J0IHR5cGUgeyBQcm94eU9wdGlvbnMgfSBmcm9tICd2aXRlJztcblxudHlwZSBQcm94eUl0ZW0gPSBbc3RyaW5nLCBzdHJpbmddO1xuXG50eXBlIFByb3h5TGlzdCA9IFByb3h5SXRlbVtdO1xuXG50eXBlIFByb3h5VGFyZ2V0TGlzdCA9IFJlY29yZDxzdHJpbmcsIFByb3h5T3B0aW9ucyAmIHsgcmV3cml0ZTogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nIH0+O1xuXG5jb25zdCBodHRwc1JFID0gL15odHRwczpcXC9cXC8vO1xuXG4vKipcbiAqIEdlbmVyYXRlIHByb3h5XG4gKiBAcGFyYW0gbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHkobGlzdDogUHJveHlMaXN0ID0gW10pIHtcbiAgY29uc3QgcmV0OiBQcm94eVRhcmdldExpc3QgPSB7fTtcbiAgZm9yIChjb25zdCBbcHJlZml4LCB0YXJnZXRdIG9mIGxpc3QpIHtcbiAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaHR0cC1wYXJ0eS9ub2RlLWh0dHAtcHJveHkjb3B0aW9uc1xuICAgIHJldFtwcmVmaXhdID0ge1xuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICB3czogdHJ1ZSxcbiAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cHJlZml4fWApLCAnJyksXG4gICAgICAvLyBodHRwcyBpcyByZXF1aXJlIHNlY3VyZT1mYWxzZVxuICAgICAgLi4uKGlzSHR0cHMgPyB7IHNlY3VyZTogZmFsc2UgfSA6IHt9KSxcbiAgICB9O1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXGNvbWFjXFxcXHNreWV5ZVxcXFxza3lleWUtYWRtaW4tZmVcXFxcc3JjXFxcXHV0aWxzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxjb21hY1xcXFxza3lleWVcXFxcc2t5ZXllLWFkbWluLWZlXFxcXHNyY1xcXFx1dGlsc1xcXFxkYXRlVXRpbC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovY29tYWMvc2t5ZXllL3NreWV5ZS1hZG1pbi1mZS9zcmMvdXRpbHMvZGF0ZVV0aWwudHNcIjtpbXBvcnQgZGF5anMsIHsgRGF5anMgfSBmcm9tICdkYXlqcyc7XG5cbmNvbnN0IERBVEVfVElNRV9GT1JNQVQgPSAnWVlZWS1NTS1ERCBISDptbSc7XG5jb25zdCBEQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREICc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUb0RhdGVUaW1lKFxuICBkYXRlOiBEYXRlIHwgRGF5anMgfCBzdHJpbmcsXG4gIGZvcm1hdFN0ciA9IERBVEVfVElNRV9GT1JNQVQsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gZGF5anMoZGF0ZSkuZm9ybWF0KGZvcm1hdFN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUb0RhdGUoZGF0ZTogRGF0ZSB8IERheWpzIHwgc3RyaW5nLCBmb3JtYXRTdHIgPSBEQVRFX0ZPUk1BVCk6IHN0cmluZyB7XG4gIHJldHVybiBkYXlqcyhkYXRlKS5mb3JtYXQoZm9ybWF0U3RyKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFDQSxTQUFTLGVBQWU7QUFDeEIsT0FBTyxRQUFRLGVBQWU7OztBQ0E5QixPQUFPLFlBQVk7QUFhWixTQUFTLGVBQXdCO0FBQ3RDLFNBQU8sUUFBUSxJQUFJLFdBQVc7QUFDaEM7QUFHTyxTQUFTLFdBQVcsU0FBOEI7QUFDdkQsUUFBTSxNQUFXLENBQUM7QUFFbEIsYUFBVyxXQUFXLE9BQU8sS0FBSyxPQUFPLEdBQUc7QUFDMUMsUUFBSSxXQUFXLFFBQVEsT0FBTyxFQUFFLFFBQVEsUUFBUSxJQUFJO0FBQ3BELGVBQVcsYUFBYSxTQUFTLE9BQU8sYUFBYSxVQUFVLFFBQVE7QUFFdkUsUUFBSSxZ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QUFBLElBQ0EsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sT0FBTyxZQUFZLFVBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUS9CO0FBQUEsSUFDQSxjQUFjO0FBQUEsTUFDWixTQUFTLENBQUMsU0FBUyxxQkFBcUIsZ0JBQWdCLHlCQUF5QjtBQUFBLE1BQ2pGLFNBQVMsQ0FBQztBQUFBLElBQ1o7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlSLGVBQWU7QUFBQSxRQUNiLFVBQVU7QUFBQSxVQUNSLGVBQWU7QUFBQSxVQUNmLGNBQWM7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLHNCQUFzQjtBQUFBLE1BQ3RCLHVCQUF1QjtBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJwYXRoIiwgInJlc29sdmUiLCAicGF0aCJdCn0K