| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- // vite.config.ts
- import { loadEnv } from "file:///C:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/node_modules/.pnpm/@vitejs+plugin-vue-jsx@1.3.10/node_modules/@vitejs/plugin-vue-jsx/index.js";
- import VueSetupExtend from "file:///C:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/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:/Users/cheng/Desktop/skyeye-admin/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:\\Users\\cheng\\Desktop\\skyeye-admin";
- 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,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvdXRpbHMudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaW5kZXgudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vaHRtbC50cyIsICJwYWNrYWdlLmpzb24iLCAiYnVpbGQvY29uc3RhbnQudHMiLCAiYnVpbGQvdml0ZS9wbHVnaW4vbW9jay50cyIsICJidWlsZC92aXRlL3BsdWdpbi9jb21wcmVzcy50cyIsICJidWlsZC92aXRlL3BsdWdpbi92aXN1YWxpemVyLnRzIiwgImJ1aWxkL3ZpdGUvcHJveHkudHMiLCAic3JjL3V0aWxzL2RhdGVVdGlsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy9jaGVuZy9EZXNrdG9wL3NreWV5ZS1hZG1pbi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB0eXBlIHsgVXNlckNvbmZpZywgQ29uZmlnRW52IH0gZnJvbSAndml0ZSc7XHJcbmltcG9ydCB7IGxvYWRFbnYgfSBmcm9tICd2aXRlJztcclxuaW1wb3J0IHBhdGgsIHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyB3cmFwcGVyRW52IH0gZnJvbSAnLi9idWlsZC91dGlscyc7XHJcbmltcG9ydCB7IGNyZWF0ZVZpdGVQbHVnaW5zIH0gZnJvbSAnLi9idWlsZC92aXRlL3BsdWdpbic7XHJcbmltcG9ydCB7IE9VVFBVVF9ESVIgfSBmcm9tICcuL2J1aWxkL2NvbnN0YW50JztcclxuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tICcuL2J1aWxkL3ZpdGUvcHJveHknO1xyXG5pbXBvcnQgcGtnIGZyb20gJy4vcGFja2FnZS5qc29uJztcclxuaW1wb3J0IHsgZm9ybWF0VG9EYXRlVGltZSB9IGZyb20gJy4vc3JjL3V0aWxzL2RhdGVVdGlsJztcclxuaW1wb3J0IHsgY3JlYXRlU3ZnSWNvbnNQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1zdmctaWNvbnMnO1xyXG5cclxuY29uc3Qgc3ZnID0gY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gIC8vIFx1ODk4MVx1N0YxM1x1NUI1OFx1NzY4NFx1NTZGRVx1NjgwN1x1NjU4N1x1NEVGNlx1NTkzOVxyXG4gIGljb25EaXJzOiBbcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3NyYy9hc3NldHMvaWNvbnMnKV0sXHJcbiAgLy8gXHU2MjY3XHU4ODRDIGljb24gbmFtZSBcdTc2ODRcdTY4M0NcdTVGMEZcclxuICBzeW1ib2xJZDogJ2ljb24tW25hbWVdJyxcclxufSk7XHJcblxyXG5jb25zdCB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0gPSBwa2c7XHJcblxyXG5jb25zdCBfX0FQUF9JTkZPX18gPSB7XHJcbiAgcGtnOiB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0sXHJcbiAgbGFzdEJ1aWxkVGltZTogZm9ybWF0VG9EYXRlVGltZShuZXcgRGF0ZSgpKSxcclxufTtcclxuXHJcbmZ1bmN0aW9uIHBhdGhSZXNvbHZlKGRpcjogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4nLCBkaXIpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCAoeyBjb21tYW5kLCBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xyXG4gIGNvbnN0IHJvb3QgPSBwcm9jZXNzLmN3ZCgpO1xyXG4gIGNvbnN0IGVudiA9IGxvYWRFbnYobW9kZSwgcm9vdCk7XHJcbiAgY29uc3Qgdml0ZUVudiA9IHdyYXBwZXJFbnYoZW52KTtcclxuICBjb25zdCB7IFZJVEVfUE9SVCwgVklURV9HTE9CX1BST0RfTU9DSywgVklURV9QUk9YWSB9ID0gdml0ZUVudjtcclxuICBjb25zdCBwcm9kTW9jayA9IFZJVEVfR0xPQl9QUk9EX01PQ0s7XHJcbiAgY29uc3QgaXNCdWlsZCA9IGNvbW1hbmQgPT09ICdidWlsZCc7XHJcbiAgcmV0dXJuIHtcclxuICAgIGJhc2U6ICcuLycsXHJcbiAgICBlc2J1aWxkOiB7fSxcclxuICAgIHJlc29sdmU6IHtcclxuICAgICAgYWxpYXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAvXFwvI1xcLy8sXHJcbiAgICAgICAgICByZXBsYWNlbWVudDogcGF0aFJlc29sdmUoJ3R5cGVzJykgKyAnLycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kOiAnQCcsXHJcbiAgICAgICAgICByZXBsYWNlbWVudDogcGF0aFJlc29sdmUoJ3NyYycpICsgJy8nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIGRlZHVwZTogWyd2dWUnXSxcclxuICAgIH0sXHJcbiAgICBwbHVnaW5zOiBbY3JlYXRlVml0ZVBsdWdpbnModml0ZUVudiwgaXNCdWlsZCwgcHJvZE1vY2spLCBzdmddLFxyXG4gICAgZGVmaW5lOiB7XHJcbiAgICAgIF9fQVBQX0lORk9fXzogSlNPTi5zdHJpbmdpZnkoX19BUFBfSU5GT19fKSxcclxuICAgIH0sXHJcbiAgICBjc3M6IHtcclxuICAgICAgZGV2U291cmNlbWFwOiB0cnVlLFxyXG4gICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcbiAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgbW9kaWZ5VmFyczoge30sXHJcbiAgICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiBgQGltcG9ydCBcInNyYy9zdHlsZXMvdmFyLnNjc3NcIjtgLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgc2VydmVyOiB7XHJcbiAgICAgIGhvc3Q6IHRydWUsXHJcbiAgICAgIHBvcnQ6IFZJVEVfUE9SVCxcclxuICAgICAgcHJveHk6IGNyZWF0ZVByb3h5KFZJVEVfUFJPWFkpLFxyXG4gICAgICAvLyBwcm94eToge1xyXG4gICAgICAvLyAgICAgJy9hcGknOiB7XHJcbiAgICAgIC8vICAgICAgICAgdGFyZ2V0OiAnJyxcclxuICAgICAgLy8gICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXHJcbiAgICAgIC8vICAgICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZSgvXlxcL2FwaS8sICcvYXBpL3YxJylcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgfSxcclxuICAgIG9wdGltaXplRGVwczoge1xyXG4gICAgICBpbmNsdWRlOiBbJ2RheWpzJywgJ0B2aWNvbnMvaW9uaWNvbnM1JywgJ0B2aWNvbnMvYW50ZCcsICdAZWxlbWVudC1wbHVzL2ljb25zLXZ1ZSddLFxyXG4gICAgICBleGNsdWRlOiBbXSxcclxuICAgIH0sXHJcbiAgICBidWlsZDoge1xyXG4gICAgICB0YXJnZXQ6ICdlczIwMTUnLFxyXG4gICAgICBvdXREaXI6IE9VVFBVVF9ESVIsXHJcbiAgICAgIG1pbmlmeTogJ3RlcnNlcicsXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBcdTVGNTMgbWluaWZ5IFx1NEUzQSBtaW5pZnkgXHU2MjE2IHRlcnNlciBcdTYyNTNcdTVGMDBcdTZDRThcdTkxQ0FcclxuICAgICAgICovXHJcbiAgICAgIHRlcnNlck9wdGlvbnM6IHtcclxuICAgICAgICBjb21wcmVzczoge1xyXG4gICAgICAgICAga2VlcF9pbmZpbml0eTogdHJ1ZSxcclxuICAgICAgICAgIGRyb3BfY29uc29sZTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICByZXBvcnRDb21wcmVzc2VkU2l6ZTogZmFsc2UsXHJcbiAgICAgIGNodW5rU2l6ZVdhcm5pbmdMaW1pdDogMjAwMCxcclxuICAgIH0sXHJcbiAgfTtcclxufTtcclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cXFxcYnVpbGRcXFxcdXRpbHMudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzL2NoZW5nL0Rlc2t0b3Avc2t5ZXllLWFkbWluL2J1aWxkL3V0aWxzLnRzXCI7aW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBkb3RlbnYgZnJvbSAnZG90ZW52JztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBtb2RlID09PSAnZGV2ZWxvcG1lbnQnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9kRm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIG1vZGUgPT09ICdwcm9kdWN0aW9uJztcclxufVxyXG5cclxuLyoqXHJcbiAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgcGFja2FnZSBwcmV2aWV3XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZXBvcnRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5SRVBPUlQgPT09ICd0cnVlJztcclxufVxyXG5cclxuLy8gUmVhZCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBwcm9jZXNzLmVudlxyXG5leHBvcnQgZnVuY3Rpb24gd3JhcHBlckVudihlbnZDb25mOiBSZWNvcmRhYmxlKTogVml0ZUVudiB7XHJcbiAgY29uc3QgcmV0OiBhbnkgPSB7fTtcclxuXHJcbiAgZm9yIChjb25zdCBlbnZOYW1lIG9mIE9iamVjdC5rZXlzKGVudkNvbmYpKSB7XHJcbiAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcclxuICAgIHJlYWxOYW1lID0gcmVhbE5hbWUgPT09ICd0cnVlJyA/IHRydWUgOiByZWFsTmFtZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogcmVhbE5hbWU7XHJcblxyXG4gICAgaWYgKGVudk5hbWUgPT09ICdWSVRFX1BPUlQnKSB7XHJcbiAgICAgIHJlYWxOYW1lID0gTnVtYmVyKHJlYWxOYW1lKTtcclxuICAgIH1cclxuICAgIGlmIChlbnZOYW1lID09PSAnVklURV9QUk9YWScpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZWFsTmFtZSA9IEpTT04ucGFyc2UocmVhbE5hbWUpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cclxuICAgIH1cclxuICAgIHJldFtlbnZOYW1lXSA9IHJlYWxOYW1lO1xyXG4gICAgcHJvY2Vzcy5lbnZbZW52TmFtZV0gPSByZWFsTmFtZTtcclxuICB9XHJcbiAgcmV0dXJuIHJldDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN0YXJ0aW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXhcclxuICogQHBhcmFtIG1hdGNoIHByZWZpeFxyXG4gKiBAcGFyYW0gY29uZkZpbGVzIGV4dFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudkNvbmZpZyhtYXRjaCA9ICdWSVRFX0dMT0JfJywgY29uZkZpbGVzID0gWycuZW52JywgJy5lbnYucHJvZHVjdGlvbiddKSB7XHJcbiAgbGV0IGVudkNvbmZpZyA9IHt9O1xyXG4gIGNvbmZGaWxlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBlbnYgPSBkb3RlbnYucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBpdGVtKSkpO1xyXG4gICAgICBlbnZDb25maWcgPSB7IC4uLmVudkNvbmZpZywgLi4uZW52IH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge31cclxuICB9KTtcclxuXHJcbiAgT2JqZWN0LmtleXMoZW52Q29uZmlnKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYF4oJHttYXRjaH0pYCk7XHJcbiAgICBpZiAoIXJlZy50ZXN0KGtleSkpIHtcclxuICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShlbnZDb25maWcsIGtleSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGVudkNvbmZpZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB1c2VyIHJvb3QgZGlyZWN0b3J5XHJcbiAqIEBwYXJhbSBkaXIgZmlsZSBwYXRoXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdFBhdGgoLi4uZGlyOiBzdHJpbmdbXSkge1xyXG4gIHJldHVybiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgLi4uZGlyKTtcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblxcXFxpbmRleC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvY2hlbmcvRGVza3RvcC9za3lleWUtYWRtaW4vYnVpbGQvdml0ZS9wbHVnaW4vaW5kZXgudHNcIjtpbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbiB9IGZyb20gJ3ZpdGUnO1xyXG5cclxuaW1wb3J0IHZ1ZSBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUnO1xyXG5pbXBvcnQgdnVlSnN4IGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZS1qc3gnO1xyXG5pbXBvcnQgVnVlU2V0dXBFeHRlbmQgZnJvbSAndml0ZS1wbHVnaW4tdnVlLXNldHVwLWV4dGVuZCc7XHJcbi8vIFx1ODFFQVx1NTJBOFx1NjMwOVx1OTcwMFx1NUJGQ1x1NTE2NVx1RkYwQ1x1NjgzOVx1NjM2RVx1ODFFQVx1OEVBQlx1NjBDNVx1NTFCNVx1OTAwOVx1NjJFOVxyXG4vLyBpbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJztcclxuLy8gaW1wb3J0IENvbXBvbmVudHMgZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvdml0ZSc7XHJcbi8vIGltcG9ydCB7IEVsZW1lbnRQbHVzUmVzb2x2ZXIgfSBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy9yZXNvbHZlcnMnO1xyXG4vLyBpbXBvcnQgQ29tcG9uZW50cyBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy92aXRlJztcclxuLy8gaW1wb3J0IEVsZW1lbnRQbHVzIGZyb20gJ3VucGx1Z2luLWVsZW1lbnQtcGx1cy92aXRlJztcclxuXHJcbmltcG9ydCB7IGNvbmZpZ0h0bWxQbHVnaW4gfSBmcm9tICcuL2h0bWwnO1xyXG5pbXBvcnQgeyBjb25maWdNb2NrUGx1Z2luIH0gZnJvbSAnLi9tb2NrJztcclxuaW1wb3J0IHsgY29uZmlnQ29tcHJlc3NQbHVnaW4gfSBmcm9tICcuL2NvbXByZXNzJztcclxuaW1wb3J0IHsgY29uZmlnVmlzdWFsaXplclBsdWdpbiB9IGZyb20gJy4vdmlzdWFsaXplcic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVml0ZVBsdWdpbnModml0ZUVudjogVml0ZUVudiwgaXNCdWlsZDogYm9vbGVhbiwgcHJvZE1vY2spIHtcclxuICBjb25zdCB7IFZJVEVfVVNFX01PQ0ssIFZJVEVfQlVJTERfQ09NUFJFU1MsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFIH0gPSB2aXRlRW52O1xyXG5cclxuICBjb25zdCB2aXRlUGx1Z2luczogKFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdKVtdID0gW1xyXG4gICAgLy8gaGF2ZSB0b1xyXG4gICAgdnVlKCksXHJcbiAgICAvLyBoYXZlIHRvXHJcbiAgICB2dWVKc3goKSxcclxuICAgIFZ1ZVNldHVwRXh0ZW5kKCksXHJcbiAgICAvLyBFbGVtZW50UGx1cyh7XHJcbiAgICAvLyAgIC8vIFx1NUYxNVx1NTE2NVx1NzY4NFx1NjgzN1x1NUYwRlx1NzY4NFx1N0M3Qlx1NTc4Qlx1RkYwQ1x1NTNFRlx1NEVFNVx1NjYyRmNzc1x1MzAwMXNhc3NcdTMwMDFsZXNzXHU3QjQ5XHVGRjBDXHJcbiAgICAvLyAgIGltcG9ydFN0eWxlOiAnc2FzcycsXHJcbiAgICAvLyAgIHVzZVNvdXJjZTogdHJ1ZSxcclxuICAgIC8vIH0pLFxyXG4gICAgLy8gXHU2MzA5XHU5NzAwXHU1RjE1XHU1MTY1ZWxlbWVudFx1NEUxNFx1ODFFQVx1NTJBOFx1NTIxQlx1NUVGQVx1N0VDNFx1NEVGNlx1NThGMFx1NjYwRVxyXG4gICAgLy8gQXV0b0ltcG9ydCh7XHJcbiAgICAvLyAgIHJlc29sdmVyczogW0VsZW1lbnRQbHVzUmVzb2x2ZXIoKV0sXHJcbiAgICAvLyB9KSxcclxuICAgIC8vIENvbXBvbmVudHMoe1xyXG4gICAgLy8gICByZXNvbHZlcnM6IFtFbGVtZW50UGx1c1Jlc29sdmVyKCldLFxyXG4gICAgLy8gfSksXHJcbiAgXTtcclxuXHJcbiAgLy8gdml0ZS1wbHVnaW4taHRtbFxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY29uZmlnSHRtbFBsdWdpbih2aXRlRW52LCBpc0J1aWxkKSk7XHJcblxyXG4gIC8vIHZpdGUtcGx1Z2luLW1vY2tcclxuICBWSVRFX1VTRV9NT0NLICYmIHZpdGVQbHVnaW5zLnB1c2goY29uZmlnTW9ja1BsdWdpbihpc0J1aWxkLCBwcm9kTW9jaykpO1xyXG5cclxuICAvLyByb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNvbmZpZ1Zpc3VhbGl6ZXJQbHVnaW4oKSk7XHJcblxyXG4gIGlmIChpc0J1aWxkKSB7XHJcbiAgICAvLyByb2xsdXAtcGx1Z2luLWd6aXBcclxuICAgIHZpdGVQbHVnaW5zLnB1c2goXHJcbiAgICAgIGNvbmZpZ0NvbXByZXNzUGx1Z2luKFZJVEVfQlVJTERfQ09NUFJFU1MsIFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdml0ZVBsdWdpbnM7XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cXFxcaHRtbC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvY2hlbmcvRGVza3RvcC9za3lleWUtYWRtaW4vYnVpbGQvdml0ZS9wbHVnaW4vaHRtbC50c1wiOy8qKlxyXG4gKiBQbHVnaW4gdG8gbWluaW1pemUgYW5kIHVzZSBlanMgdGVtcGxhdGUgc3ludGF4IGluIGluZGV4Lmh0bWwuXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbm5jd2Ivdml0ZS1wbHVnaW4taHRtbFxyXG4gKi9cclxuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJztcclxuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLWh0bWwnO1xyXG5pbXBvcnQgcGtnIGZyb20gJy4uLy4uLy4uL3BhY2thZ2UuanNvbic7XHJcbmltcG9ydCB7IEdMT0JfQ09ORklHX0ZJTEVfTkFNRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50JztcclxuaW1wb3J0IHsgc2ltcGxlR2l0IH0gZnJvbSAnc2ltcGxlLWdpdCc7XHJcbmNvbnN0IGdpdCA9IHNpbXBsZUdpdCgpO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0SGFzaCgpIHtcclxuICBjb25zdCBnaXRMb2cgPSBhd2FpdCBnaXQubG9nKCk7XHJcbiAgLyoqIFx1NjIyQVx1NTNENmdpdCBoYXNoXHU1MDNDXHU2NzAwXHU1NDBFOFx1NEY0RCAqL1xyXG4gIGNvbnN0IGxhc3RTdHJOdW0gPSA4O1xyXG4gIHJldHVybiBnaXRMb2cubGF0ZXN0Py5oYXNoLnN1YnN0cmluZygtbGFzdFN0ck51bSwgbGFzdFN0ck51bSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWdIdG1sUGx1Z2luKGVudjogVml0ZUVudiwgaXNCdWlsZDogYm9vbGVhbik6IFByb21pc2U8UGx1Z2luT3B0aW9uW10+IHtcclxuICBjb25zdCB7IFZJVEVfR0xPQl9BUFBfVElUTEUgfSA9IGVudjtcclxuXHJcbiAgY29uc3QgcGF0aCA9ICcuLyc7XHJcblxyXG4gIGNvbnN0IGdldEFwcENvbmZpZ1NyYyA9ICgpID0+IHtcclxuICAgIHJldHVybiBgJHtwYXRoIHx8ICcvJ30ke0dMT0JfQ09ORklHX0ZJTEVfTkFNRX0/dj0ke3BrZy52ZXJzaW9ufS0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICBnZXRMYXRlc3RIYXNoKCkudGhlbigoaGFzaCkgPT4ge1xyXG4gICAgICBjb25zdCBodG1sUGx1Z2luOiBQbHVnaW5PcHRpb25bXSA9IGNyZWF0ZUh0bWxQbHVnaW4oe1xyXG4gICAgICAgIG1pbmlmeTogaXNCdWlsZCxcclxuICAgICAgICBpbmplY3Q6IHtcclxuICAgICAgICAgIC8vIEluamVjdCBkYXRhIGludG8gZWpzIHRlbXBsYXRlXHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBWSVRFX0dMT0JfQVBQX1RJVExFLFxyXG4gICAgICAgICAgICBoYXNoLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC8vIEVtYmVkIHRoZSBnZW5lcmF0ZWQgYXBwLmNvbmZpZy5qcyBmaWxlXHJcbiAgICAgICAgICB0YWdzOiBpc0J1aWxkXHJcbiAgICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB0YWc6ICdzY3JpcHQnLFxyXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZ2V0QXBwQ29uZmlnU3JjKCksXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcmVzb2x2ZShodG1sUGx1Z2luKTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59XHJcbiIsICJ7XHJcbiAgXCJuYW1lXCI6IFwic2t5ZXllLWFkbWluLWZlXCIsXHJcbiAgXCJ2ZXJzaW9uXCI6IFwiMS4zLjlcIixcclxuICBcInByaXZhdGVcIjogdHJ1ZSxcclxuICBcInR5cGVcIjogXCJtb2R1bGVcIixcclxuICBcInNjcmlwdHNcIjoge1xyXG4gICAgXCJib290c3RyYXBcIjogXCJwbnBtIGluc3RhbGxcIixcclxuICAgIFwic2VydmVcIjogXCJwbnBtIHJ1biBkZXZcIixcclxuICAgIFwiZGV2XCI6IFwidml0ZVwiLFxyXG4gICAgXCJjcmVhdGVDb25maWdcIjogXCJlc25vIC4vYnVpbGQvc2NyaXB0L3Bvc3RCdWlsZC50c1wiLFxyXG4gICAgXCJidWlsZFwiOiBcImNyb3NzLWVudiBOT0RFX0VOVj1wcm9kdWN0aW9uIHZpdGUgYnVpbGRcIixcclxuICAgIFwiYnVpbGQ6dGVzdFwiOiBcImNyb3NzLWVudiB2aXRlIGJ1aWxkIC0tbW9kZSB0ZXN0ICYmIGVzbm8gLi9idWlsZC9zY3JpcHQvcG9zdEJ1aWxkLnRzXCIsXHJcbiAgICBcImJ1aWxkOm5vLWNhY2hlXCI6IFwicG5wbSBjbGVhbjpjYWNoZSAmJiBwbnBtIHJ1biBidWlsZFwiLFxyXG4gICAgXCJyZXBvcnRcIjogXCJjcm9zcy1lbnYgUkVQT1JUPXRydWUgcG5wbSBydW4gYnVpbGRcIixcclxuICAgIFwidHlwZTpjaGVja1wiOiBcInZ1ZS10c2MgLS1ub0VtaXQgLS1za2lwTGliQ2hlY2tcIixcclxuICAgIFwicHJldmlld1wiOiBcInBucG0gcnVuIGJ1aWxkICYmIHZpdGUgcHJldmlld1wiLFxyXG4gICAgXCJwcmV2aWV3OmRpc3RcIjogXCJ2aXRlIHByZXZpZXdcIixcclxuICAgIFwiY2xlYW46Y2FjaGVcIjogXCJyaW1yYWYgbm9kZV9tb2R1bGVzLy5jYWNoZS8gJiYgcmltcmFmIG5vZGVfbW9kdWxlcy8udml0ZVwiLFxyXG4gICAgXCJjbGVhbjpsaWJcIjogXCJyaW1yYWYgbm9kZV9tb2R1bGVzXCIsXHJcbiAgICBcImxpbnQ6ZXNsaW50XCI6IFwiZXNsaW50IFxcXCJ7c3JjLG1vY2t9LyoqLyoue3Z1ZSx0cyx0c3h9XFxcIiAtLWZpeFwiLFxyXG4gICAgXCJsaW50OnByZXR0aWVyXCI6IFwicHJldHRpZXIgLS13cml0ZSAtLWxvZ2xldmVsIHdhcm4gXFxcInNyYy8qKi8qLntqcyxqc29uLHRzeCxjc3MsbGVzcyxzY3NzLHZ1ZSxodG1sLG1kfVxcXCJcIixcclxuICAgIFwibGludDpzdHlsZWxpbnRcIjogXCJzdHlsZWxpbnQgLS1maXggXFxcIioqLyoue3Z1ZSxsZXNzLHBvc3Rjc3MsY3NzLHNjc3N9XFxcIiAtLWNhY2hlIC0tY2FjaGUtbG9jYXRpb24gbm9kZV9tb2R1bGVzLy5jYWNoZS9zdHlsZWxpbnQvXCIsXHJcbiAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZCAtYyAuLy5odXNreS9saW50c3RhZ2VkcmMuanNcIixcclxuICAgIFwibGludDpwcmV0dHlcIjogXCJwcmV0dHktcXVpY2sgLS1zdGFnZWRcIixcclxuICAgIFwidGVzdCBwcm9kIGd6aXBcIjogXCJodHRwLXNlcnZlciBkaXN0IC0tY29ycyAtLWd6aXAgLWMtMVwiLFxyXG4gICAgXCJyZWluc3RhbGxcIjogXCJyaW1yYWYgcG5wbS1sb2NrLnlhbWwgJiYgcmltcmFmIHBhY2thZ2UubG9jay5qc29uICYmIHJpbXJhZiBub2RlX21vZHVsZXMgJiYgcG5wbSBydW4gYm9vdHN0cmFwXCIsXHJcbiAgICBcImJ1aWxkIHR5cGVjaGVja1wiOiBcInZ1ZWR4LXR5cGVjaGVjayAuICYmIHZpdGUgYnVpbGRcIixcclxuICAgIFwiZGVwbG95XCI6IFwiZ2gtcGFnZXMgLWQgZGlzdFwiLFxyXG4gICAgXCJwdWJsaXNoXCI6IFwiZXNubyAuL2J1aWxkL3B1Ymxpc2gvcHVibGlzaC50c1wiXHJcbiAgfSxcclxuICBcImRlcGVuZGVuY2llc1wiOiB7XHJcbiAgICBcIkBlbGVtZW50LXBsdXMvaWNvbnMtdnVlXCI6IFwiMi4wLjlcIixcclxuICAgIFwiQHR5cGVzL2ZhYnJpY1wiOiBcIjUuMy42XCIsXHJcbiAgICBcIkB2aWNvbnMvYW50ZFwiOiBcIjAuMTIuMFwiLFxyXG4gICAgXCJAdmljb25zL2lvbmljb25zNVwiOiBcIjAuMTIuMFwiLFxyXG4gICAgXCJAdnVldXAvdnVlLXF1aWxsXCI6IFwiMS4wLjAtYmV0YS44XCIsXHJcbiAgICBcIkB2dWV1c2UvY29yZVwiOiBcIjguOS40XCIsXHJcbiAgICBcIkB2dWV1c2Uvcm91dGVyXCI6IFwiMTAuNi4xXCIsXHJcbiAgICBcIkB3YW5nZWRpdG9yL2VkaXRvclwiOiBcIjUuMS4yM1wiLFxyXG4gICAgXCJAd2FuZ2VkaXRvci9lZGl0b3ItZm9yLXZ1ZVwiOiBcIjUuMS4xMlwiLFxyXG4gICAgXCJhbmltYXRlLmNzc1wiOiBcIjQuMS4xXCIsXHJcbiAgICBcImFyY2hpdmVyXCI6IFwiXjcuMC4xXCIsXHJcbiAgICBcImF4aW9zXCI6IFwiMC4yNy4yXCIsXHJcbiAgICBcImJsdWVpbXAtbWQ1XCI6IFwiMi4xOS4wXCIsXHJcbiAgICBcImNhbnZnXCI6IFwiNC4wLjFcIixcclxuICAgIFwiY3JvcHBlcmpzXCI6IFwiMS41LjEyXCIsXHJcbiAgICBcImRheWpzXCI6IFwiMS4xMS40XCIsXHJcbiAgICBcImVjaGFydHNcIjogXCI1LjMuM1wiLFxyXG4gICAgXCJlbGVtZW50LXBsdXNcIjogXCIyLjcuMVwiLFxyXG4gICAgXCJlbGVtZW50LXJlc2l6ZS1kZXRlY3RvclwiOiBcIjEuMi40XCIsXHJcbiAgICBcImZvcm0tZGF0YVwiOiBcIl40LjAuMFwiLFxyXG4gICAgXCJodG1sMmNhbnZhc1wiOiBcIjEuMC4wXCIsXHJcbiAgICBcImtvbnZhXCI6IFwiOS4zLjBcIixcclxuICAgIFwibG9kYXNoLWVzXCI6IFwiNC4xNy4yMVwiLFxyXG4gICAgXCJtb2NranNcIjogXCIxLjEuMFwiLFxyXG4gICAgXCJtcGVndHMuanNcIjogXCIxLjcuM1wiLFxyXG4gICAgXCJucHJvZ3Jlc3NcIjogXCIwLjIuMFwiLFxyXG4gICAgXCJudW1iZXItcHJlY2lzaW9uXCI6IFwiMS42LjBcIixcclxuICAgIFwicGVyZmVjdC1zY3JvbGxiYXJcIjogXCIxLjUuNVwiLFxyXG4gICAgXCJwaW5pYVwiOiBcIjIuMC4xNlwiLFxyXG4gICAgXCJwcmludC1qc1wiOiBcIjEuNi4wXCIsXHJcbiAgICBcInFyY29kZVwiOiBcIjEuNS4xXCIsXHJcbiAgICBcInFzXCI6IFwiNi4xMS4wXCIsXHJcbiAgICBcInVpZFwiOiBcIjIuMC4yXCIsXHJcbiAgICBcInVybC1qb2luXCI6IFwiNS4wLjBcIixcclxuICAgIFwidnVlXCI6IFwiMy4zLjRcIixcclxuICAgIFwidnVlLWVjaGFydHNcIjogXCJeNi42LjhcIixcclxuICAgIFwidnVlLWhvb2tzLXBsdXNcIjogXCIxLjguNlwiLFxyXG4gICAgXCJ2dWUta29udmFcIjogXCIzLjAuMlwiLFxyXG4gICAgXCJ2dWUtcm91dGVyXCI6IFwiNC4xLjJcIixcclxuICAgIFwidnVlLXR5cGVzXCI6IFwiNC4xLjFcIixcclxuICAgIFwidnVlZHJhZ2dhYmxlXCI6IFwiNC4xLjBcIixcclxuICAgIFwieGxzeFwiOiBcIjAuMTguNVwiXHJcbiAgfSxcclxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XHJcbiAgICBcIkBjb21taXRsaW50L2NsaVwiOiBcIjE3LjAuM1wiLFxyXG4gICAgXCJAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXCI6IFwiMTcuMC4zXCIsXHJcbiAgICBcIkB0eXBlcy9lbGVtZW50LXJlc2l6ZS1kZXRlY3RvclwiOiBcIjEuMS4zXCIsXHJcbiAgICBcIkB0eXBlcy9pbnRyby5qc1wiOiBcIjMuMC4yXCIsXHJcbiAgICBcIkB0eXBlcy9sb2Rhc2gtZXNcIjogXCI0LjE3LjZcIixcclxuICAgIFwiQHR5cGVzL25vZGVcIjogXCIxNy4wLjQ1XCIsXHJcbiAgICBcIkB0eXBlcy9xcmNvZGVcIjogXCIxLjQuMlwiLFxyXG4gICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpblwiOiBcIjUuMzAuN1wiLFxyXG4gICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyXCI6IFwiNS4zMC43XCIsXHJcbiAgICBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiOiBcIjIuMy4zXCIsXHJcbiAgICBcIkB2aXRlanMvcGx1Z2luLXZ1ZS1qc3hcIjogXCIxLjMuMTBcIixcclxuICAgIFwiQHZ1ZS9jb21waWxlci1zZmNcIjogXCIzLjMuNFwiLFxyXG4gICAgXCJhdXRvcHJlZml4ZXJcIjogXCIxMC40LjdcIixcclxuICAgIFwiY2hhbGtcIjogXCI1LjMuMFwiLFxyXG4gICAgXCJjb2xvcnNcIjogXCIxLjQuMFwiLFxyXG4gICAgXCJjb21taXRpemVuXCI6IFwiNC4yLjVcIixcclxuICAgIFwiY29yZS1qc1wiOiBcIjMuMjMuNVwiLFxyXG4gICAgXCJjcm9zcy1lbnZcIjogXCI3LjAuM1wiLFxyXG4gICAgXCJkb3RlbnZcIjogXCIxNi4wLjFcIixcclxuICAgIFwiZXNsaW50XCI6IFwiOC4yMC4wXCIsXHJcbiAgICBcImVzbGludC1jb25maWctcHJldHRpZXJcIjogXCI4LjUuMFwiLFxyXG4gICAgXCJlc2xpbnQtZGVmaW5lLWNvbmZpZ1wiOiBcIjEuNS4xXCIsXHJcbiAgICBcImVzbGludC1wbHVnaW4tcHJldHRpZXJcIjogXCI0LjIuMVwiLFxyXG4gICAgXCJlc2xpbnQtcGx1Z2luLXZ1ZVwiOiBcIjguNy4xXCIsXHJcbiAgICBcImVzbm9cIjogXCIwLjE2LjNcIixcclxuICAgIFwiZmFzdC1nbG9iXCI6IFwiMy4zLjFcIixcclxuICAgIFwiZnMtZXh0cmFcIjogXCIxMC4xLjBcIixcclxuICAgIFwiZ2gtcGFnZXNcIjogXCI0LjAuMFwiLFxyXG4gICAgXCJodXNreVwiOiBcIjguMC4xXCIsXHJcbiAgICBcImxlc3NcIjogXCI0LjEuM1wiLFxyXG4gICAgXCJsZXNzLWxvYWRlclwiOiBcIjExLjEuM1wiLFxyXG4gICAgXCJsaW50LXN0YWdlZFwiOiBcIjEzLjAuM1wiLFxyXG4gICAgXCJwaWNvY29sb3JzXCI6IFwiMS4wLjBcIixcclxuICAgIFwicG9zdGNzc1wiOiBcIjguNC4xNFwiLFxyXG4gICAgXCJwb3N0Y3NzLXB4LXRvLXZpZXdwb3J0XCI6IFwiMS4xLjFcIixcclxuICAgIFwicHJldHRpZXJcIjogXCIyLjcuMVwiLFxyXG4gICAgXCJwcmV0dHktcXVpY2tcIjogXCIzLjEuM1wiLFxyXG4gICAgXCJyaW1yYWZcIjogXCIzLjAuMlwiLFxyXG4gICAgXCJyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXJcIjogXCI1LjguM1wiLFxyXG4gICAgXCJzYXNzXCI6IFwiMS41My4wXCIsXHJcbiAgICBcInNpbXBsZS1naXRcIjogXCIzLjIyLjBcIixcclxuICAgIFwic3R5bGVsaW50XCI6IFwiMTQuOS4xXCIsXHJcbiAgICBcInN0eWxlbGludC1jb25maWctcHJldHRpZXJcIjogXCI5LjAuM1wiLFxyXG4gICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkXCI6IFwiMjUuMC4wXCIsXHJcbiAgICBcInN0eWxlbGludC1vcmRlclwiOiBcIjUuMC4wXCIsXHJcbiAgICBcInN0eWxlbGludC1zY3NzXCI6IFwiNC4zLjBcIixcclxuICAgIFwidGFpbHdpbmRjc3NcIjogXCIzLjMuMlwiLFxyXG4gICAgXCJ0cy1ub2RlXCI6IFwiMTAuOS4xXCIsXHJcbiAgICBcInR5cGVzY3JpcHRcIjogXCI0LjcuNFwiLFxyXG4gICAgXCJ2Y29uc29sZVwiOiBcIjMuMTUuMVwiLFxyXG4gICAgXCJ2aXRlXCI6IFwiNS4xLjNcIixcclxuICAgIFwidml0ZS1wbHVnaW4tY29tcHJlc3Npb25cIjogXCIwLjUuMVwiLFxyXG4gICAgXCJ2aXRlLXBsdWdpbi1odG1sXCI6IFwiMy4yLjJcIixcclxuICAgIFwidml0ZS1wbHVnaW4tbW9ja1wiOiBcIjIuOS42XCIsXHJcbiAgICBcInZpdGUtcGx1Z2luLXN0eWxlLWltcG9ydFwiOiBcIjIuMC4wXCIsXHJcbiAgICBcInZpdGUtcGx1Z2luLXN2Zy1pY29uc1wiOiBcIjIuMC4xXCIsXHJcbiAgICBcInZpdGUtcGx1Z2luLXZjb25zb2xlXCI6IFwiMS4zLjFcIixcclxuICAgIFwidml0ZS1wbHVnaW4tdnVlLXNldHVwLWV4dGVuZFwiOiBcIjAuNC4wXCIsXHJcbiAgICBcInZ1ZS1lc2xpbnQtcGFyc2VyXCI6IFwiOS4wLjNcIixcclxuICAgIFwidnVlLXRzY1wiOiBcIjAuMzUuMlwiXHJcbiAgfSxcclxuICBcImxpbnQtc3RhZ2VkXCI6IHtcclxuICAgIFwiKi57dnVlLGpzLHRzLHRzeH1cIjogXCJlc2xpbnQgLS1maXhcIlxyXG4gIH0sXHJcbiAgXCJjb25maWdcIjoge1xyXG4gICAgXCJjb21taXRpemVuXCI6IHtcclxuICAgICAgXCJwYXRoXCI6IFwiLi9ub2RlX21vZHVsZXMvY3otY3VzdG9taXphYmxlXCJcclxuICAgIH1cclxuICB9LFxyXG4gIFwia2V5d29yZHNcIjogW1xyXG4gICAgXCJ2dWVcIixcclxuICAgIFwibmFpdmUtdWlcIixcclxuICAgIFwibmFpdmUtdWktYWRtaW5cIixcclxuICAgIFwidnVlM1wiLFxyXG4gICAgXCJ0c1wiLFxyXG4gICAgXCJ0c3hcIixcclxuICAgIFwiYWRtaW5cIixcclxuICAgIFwidHlwZXNjcmlwdFwiXHJcbiAgXSxcclxuICBcImVuZ2luZXNcIjoge1xyXG4gICAgXCJub2RlXCI6IFwiMTIgfHwgPj0xNFwiXHJcbiAgfSxcclxuICBcInBucG1cIjoge1xyXG4gICAgXCJwZWVyRGVwZW5kZW5jeVJ1bGVzXCI6IHtcclxuICAgICAgXCJpZ25vcmVNaXNzaW5nXCI6IFtcclxuICAgICAgICBcInJvbGx1cFwiLFxyXG4gICAgICAgIFwid2VicGFja1wiXHJcbiAgICAgIF1cclxuICAgIH1cclxuICB9XHJcbn0iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFxcXFxjb25zdGFudC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvY2hlbmcvRGVza3RvcC9za3lleWUtYWRtaW4vYnVpbGQvY29uc3RhbnQudHNcIjsvKipcclxuICogVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBlbnRlcmVkIGluIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgR0xPQl9DT05GSUdfRklMRV9OQU1FID0gJ2FwcC5jb25maWcuanMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9VVFBVVF9ESVIgPSAnZGlzdCc7XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXFxcXG1vY2sudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzL2NoZW5nL0Rlc2t0b3Avc2t5ZXllLWFkbWluL2J1aWxkL3ZpdGUvcGx1Z2luL21vY2sudHNcIjsvKipcclxuICogTW9jayBwbHVnaW4gZm9yIGRldmVsb3BtZW50IGFuZCBwcm9kdWN0aW9uLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYW5uY3diL3ZpdGUtcGx1Z2luLW1vY2tcclxuICovXHJcbmltcG9ydCB7IHZpdGVNb2NrU2VydmUgfSBmcm9tICd2aXRlLXBsdWdpbi1tb2NrJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWdNb2NrUGx1Z2luKGlzQnVpbGQ6IGJvb2xlYW4sIHByb2RNb2NrOiBib29sZWFuKSB7XHJcbiAgcmV0dXJuIHZpdGVNb2NrU2VydmUoe1xyXG4gICAgaWdub3JlOiAvXlxcXy8sXHJcbiAgICBtb2NrUGF0aDogJ21vY2snLFxyXG4gICAgbG9jYWxFbmFibGVkOiAhaXNCdWlsZCxcclxuICAgIHByb2RFbmFibGVkOiBpc0J1aWxkICYmIHByb2RNb2NrLFxyXG4gICAgaW5qZWN0Q29kZTogYFxyXG4gICAgICAgaW1wb3J0IHsgc2V0dXBQcm9kTW9ja1NlcnZlciB9IGZyb20gJy4uL21vY2svX2NyZWF0ZVByb2R1Y3Rpb25TZXJ2ZXInO1xyXG4gXHJcbiAgICAgICBzZXR1cFByb2RNb2NrU2VydmVyKCk7XHJcbiAgICAgICBgLFxyXG4gIH0pO1xyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcY2hlbmdcXFxcRGVza3RvcFxcXFxza3lleWUtYWRtaW5cXFxcYnVpbGRcXFxcdml0ZVxcXFxwbHVnaW5cIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXFxcXGNvbXByZXNzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy9jaGVuZy9EZXNrdG9wL3NreWV5ZS1hZG1pbi9idWlsZC92aXRlL3BsdWdpbi9jb21wcmVzcy50c1wiOy8qKlxyXG4gKiBVc2VkIHRvIHBhY2thZ2UgYW5kIG91dHB1dCBnemlwLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IGluIFZpdGUsIHRoZSBzcGVjaWZpYyByZWFzb24gaXMgc3RpbGwgYmVpbmcgaW52ZXN0aWdhdGVkXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbm5jd2Ivdml0ZS1wbHVnaW4tY29tcHJlc3Npb25cclxuICovXHJcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XHJcblxyXG5pbXBvcnQgY29tcHJlc3NQbHVnaW4gZnJvbSAndml0ZS1wbHVnaW4tY29tcHJlc3Npb24nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ0NvbXByZXNzUGx1Z2luKFxyXG4gIGNvbXByZXNzOiAnZ3ppcCcgfCAnYnJvdGxpJyB8ICdub25lJyxcclxuICBkZWxldGVPcmlnaW5GaWxlID0gZmFsc2VcclxuKTogUGx1Z2luIHwgUGx1Z2luW10ge1xyXG4gIGNvbnN0IGNvbXByZXNzTGlzdCA9IGNvbXByZXNzLnNwbGl0KCcsJyk7XHJcblxyXG4gIGNvbnN0IHBsdWdpbnM6IFBsdWdpbltdID0gW107XHJcblxyXG4gIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoJ2d6aXAnKSkge1xyXG4gICAgcGx1Z2lucy5wdXNoKFxyXG4gICAgICBjb21wcmVzc1BsdWdpbih7XHJcbiAgICAgICAgZXh0OiAnLmd6JyxcclxuICAgICAgICBkZWxldGVPcmlnaW5GaWxlLFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcygnYnJvdGxpJykpIHtcclxuICAgIHBsdWdpbnMucHVzaChcclxuICAgICAgY29tcHJlc3NQbHVnaW4oe1xyXG4gICAgICAgIGV4dDogJy5icicsXHJcbiAgICAgICAgYWxnb3JpdGhtOiAnYnJvdGxpQ29tcHJlc3MnLFxyXG4gICAgICAgIGRlbGV0ZU9yaWdpbkZpbGUsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICByZXR1cm4gcGx1Z2lucztcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccGx1Z2luXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxidWlsZFxcXFx2aXRlXFxcXHBsdWdpblxcXFx2aXN1YWxpemVyLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy9jaGVuZy9EZXNrdG9wL3NreWV5ZS1hZG1pbi9idWlsZC92aXRlL3BsdWdpbi92aXN1YWxpemVyLnRzXCI7aW1wb3J0IHsgUGx1Z2luT3B0aW9uIH0gZnJvbSAndml0ZSc7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tICdyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXInO1xyXG5pbXBvcnQgeyBpc1JlcG9ydE1vZGUgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29uZmlnVmlzdWFsaXplclBsdWdpbigpIHtcclxuICBpZiAoaXNSZXBvcnRNb2RlKCkpIHtcclxuICAgIHJldHVybiB2aXN1YWxpemVyKHtcclxuICAgICAgZmlsZW5hbWU6ICcuL25vZGVfbW9kdWxlcy8uY2FjaGUvdmlzdWFsaXplci9zdGF0cy5odG1sJyxcclxuICAgICAgb3BlbjogdHJ1ZSxcclxuICAgICAgZ3ppcFNpemU6IHRydWUsXHJcbiAgICAgIGJyb3RsaVNpemU6IHRydWUsXHJcbiAgICB9KSBhcyBQbHVnaW5PcHRpb247XHJcbiAgfVxyXG4gIHJldHVybiBbXTtcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXGJ1aWxkXFxcXHZpdGVcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzL2NoZW5nL0Rlc2t0b3Avc2t5ZXllLWFkbWluL2J1aWxkL3ZpdGUvcHJveHkudHNcIjsvKipcclxuICogVXNlZCB0byBwYXJzZSB0aGUgLmVudi5kZXZlbG9wbWVudCBwcm94eSBjb25maWd1cmF0aW9uXHJcbiAqL1xyXG5pbXBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gJ3ZpdGUnO1xyXG5cclxudHlwZSBQcm94eUl0ZW0gPSBbc3RyaW5nLCBzdHJpbmddO1xyXG5cclxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXTtcclxuXHJcbnR5cGUgUHJveHlUYXJnZXRMaXN0ID0gUmVjb3JkPHN0cmluZywgUHJveHlPcHRpb25zICYgeyByZXdyaXRlOiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmcgfT47XHJcblxyXG5jb25zdCBodHRwc1JFID0gL15odHRwczpcXC9cXC8vO1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHByb3h5XHJcbiAqIEBwYXJhbSBsaXN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHkobGlzdDogUHJveHlMaXN0ID0gW10pIHtcclxuICBjb25zdCByZXQ6IFByb3h5VGFyZ2V0TGlzdCA9IHt9O1xyXG4gIGZvciAoY29uc3QgW3ByZWZpeCwgdGFyZ2V0XSBvZiBsaXN0KSB7XHJcbiAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XHJcblxyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2h0dHAtcGFydHkvbm9kZS1odHRwLXByb3h5I29wdGlvbnNcclxuICAgIHJldFtwcmVmaXhdID0ge1xyXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxyXG4gICAgICB3czogdHJ1ZSxcclxuICAgICAgcmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtwcmVmaXh9YCksICcnKSxcclxuICAgICAgLy8gaHR0cHMgaXMgcmVxdWlyZSBzZWN1cmU9ZmFsc2VcclxuICAgICAgLi4uKGlzSHR0cHMgPyB7IHNlY3VyZTogZmFsc2UgfSA6IHt9KSxcclxuICAgIH07XHJcbiAgfVxyXG4gIHJldHVybiByZXQ7XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxjaGVuZ1xcXFxEZXNrdG9wXFxcXHNreWV5ZS1hZG1pblxcXFxzcmNcXFxcdXRpbHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFVzZXJzXFxcXGNoZW5nXFxcXERlc2t0b3BcXFxcc2t5ZXllLWFkbWluXFxcXHNyY1xcXFx1dGlsc1xcXFxkYXRlVXRpbC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvY2hlbmcvRGVza3RvcC9za3lleWUtYWRtaW4vc3JjL3V0aWxzL2RhdGVVdGlsLnRzXCI7aW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSAnZGF5anMnO1xyXG5cclxuY29uc3QgREFURV9USU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREIEhIOm1tJztcclxuY29uc3QgREFURV9GT1JNQVQgPSAnWVlZWS1NTS1ERCAnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRvRGF0ZVRpbWUoXHJcbiAgZGF0ZTogRGF0ZSB8IERheWpzIHwgc3RyaW5nLFxyXG4gIGZvcm1hdFN0ciA9IERBVEVfVElNRV9GT1JNQVQsXHJcbik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGRheWpzKGRhdGUpLmZvcm1hdChmb3JtYXRTdHIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VG9EYXRlKGRhdGU6IERhdGUgfCBEYXlqcyB8IHN0cmluZywgZm9ybWF0U3RyID0gREFURV9GT1JNQVQpOiBzdHJpbmcge1xyXG4gIHJldHVybiBkYXlqcyhkYXRlKS5mb3JtYXQoZm9ybWF0U3RyKTtcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxlQUFlO0FBQ3hCLE9BQU8sUUFBUSxlQUFlOzs7QUNBOUIsT0FBTyxZQUFZO0FBYVosU0FBUyxlQUF3QjtBQUN0QyxTQUFPLFFBQVEsSUFBSSxXQUFXO0FBQ2hDO0FBR08sU0FBUyxXQUFXLFNBQThCO0FBQ3ZELFFBQU0sTUFBVyxDQUFDO0FBRWxCLGFBQVcsV0FBVyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQzFDLFFBQUksV0FBVyxRQUFRLE9BQU8sRUFBRSxRQUFRLFFBQVEsSUFBSTtBQUNwRCxlQUFXLGFBQWEsU0FBUyxPQUFPLGFBQWEsVUFBVSxRQUFRO0FBRXZFLFFBQUksWUFBWSxhQUFhO0FBQzNCLGlCQUFXLE9BQU8sUUFBUTtBQUFBLElBQzVCO0FBQ0EsUUFBSSxZQUFZLGNBQWM7QUFDNUIsVUFBSTtBQUNGLG1CQUFXLEtBQUssTUFBTSxRQUFRO0FBQUEsTUFDaEMsU0FBUyxPQUFPO0FBQUEsTUFBQztBQUFBLElBQ25CO0FBQ0EsUUFBSSxPQUFPLElBQUk7QUFDZixZQUFRLElBQUksT0FBTyxJQUFJO0FBQUEsRUFDekI7QUFDQSxTQUFPO0FBQ1Q7OztBQ3JDQSxPQUFPLFNBQVM7QUFDaEIsT0FBTyxZQUFZO0FBQ25CLE9BQU8sb0JBQW9COzs7QUNDM0IsU0FBUyx3QkFBd0I7OztBQ0xqQztBQUFBLEVBQ0UsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLEVBQ1gsU0FBVztBQUFBLEVBQ1gsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLElBQ1QsV0FBYTtBQUFBLElBQ2IsT0FBUztBQUFBLElBQ1QsS0FBTztBQUFBLElBQ1AsY0FBZ0I7QUFBQSxJQUNoQixPQUFTO0FBQUEsSUFDVCxjQUFjO0FBQUEsSUFDZCxrQkFBa0I7QUFBQSxJQUNsQixRQUFVO0FBQUEsSUFDVixjQUFjO0FBQUEsSUFDZCxTQUFXO0FBQUEsSUFDWCxnQkFBZ0I7QUFBQSxJQUNoQixlQUFlO0FBQUEsSUFDZixhQUFhO0FBQUEsSUFDYixlQUFlO0FBQUEsSUFDZixpQkFBaUI7QUFBQSxJQUNqQixrQkFBa0I7QUFBQSxJQUNsQixvQkFBb0I7QUFBQSxJQUNwQixlQUFlO0FBQUEsSUFDZixrQkFBa0I7QUFBQSxJQUNsQixXQUFhO0FBQUEsSUFDYixtQkFBbUI7QUFBQSxJQUNuQixRQUFVO0FBQUEsSUFDVixTQUFXO0FBQUEsRUFDYjtBQUFBLEVBQ0EsY0FBZ0I7QUFBQSxJQUNkLDJCQUEyQjtBQUFBLElBQzNCLGlCQUFpQjtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLHFCQUFxQjtBQUFBLElBQ3JCLG9CQUFvQjtBQUFBLElBQ3BCLGdCQUFnQjtBQUFBLElBQ2hCLGtCQUFrQjtBQUFBLElBQ2xCLHNCQUFzQjtBQUFBLElBQ3RCLDhCQUE4QjtBQUFBLElBQzlCLGVBQWU7QUFBQSxJQUNmLFVBQVk7QUFBQSxJQUNaLE9BQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLE9BQVM7QUFBQSxJQUNULFdBQWE7QUFBQSxJQUNiLE9BQVM7QUFBQSxJQUNULFNBQVc7QUFBQSxJQUNYLGdCQUFnQjtBQUFBLElBQ2hCLDJCQUEyQjtBQUFBLElBQzNCLGFBQWE7QUFBQSxJQUNiLGFBQWU7QUFBQSxJQUNmLE9BQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLFFBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxJQUNiLFdBQWE7QUFBQSxJQUNiLG9CQUFvQjtBQUFBLElBQ3BCLHFCQUFxQjtBQUFBLElBQ3JCLE9BQVM7QUFBQSxJQUNULFlBQVk7QUFBQSxJQUNaLFFBQVU7QUFBQSxJQUNWLElBQU07QUFBQSxJQUNOLEtBQU87QUFBQSxJQUNQLFlBQVk7QUFBQSxJQUNaLEtBQU87QUFBQSxJQUNQLGVBQWU7QUFBQSxJQUNmLGtCQUFrQjtBQUFBLElBQ2xCLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLGNBQWdCO0FBQUEsSUFDaEIsTUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBLGlCQUFtQjtBQUFBLElBQ2pCLG1CQUFtQjtBQUFBLElBQ25CLG1DQUFtQztBQUFBLElBQ25DLGtDQUFrQztBQUFBLElBQ2xDLG1CQUFtQjtBQUFBLElBQ25CLG9CQUFvQjtBQUFBLElBQ3BCLGVBQWU7QUFBQSxJQUNmLGlCQUFpQjtBQUFBLElBQ2pCLG9DQUFvQztBQUFBLElBQ3BDLDZCQUE2QjtBQUFBLElBQzdCLHNCQUFzQjtBQUFBLElBQ3RCLDBCQUEwQjtBQUFBLElBQzFCLHFCQUFxQjtBQUFBLElBQ3JCLGNBQWdCO0FBQUEsSUFDaEIsT0FBUztBQUFBLElBQ1QsUUFBVTtBQUFBLElBQ1YsWUFBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsUUFBVTtBQUFBLElBQ1YsUUFBVTtBQUFBLElBQ1YsMEJBQTBCO0FBQUEsSUFDMUIsd0JBQXdCO0FBQUEsSUFDeEIsMEJBQTBCO0FBQUEsSUFDMUIscUJBQXFCO0FBQUEsSUFDckIsTUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osT0FBUztBQUFBLElBQ1QsTUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsWUFBYztBQUFBLElBQ2QsU0FBVztBQUFBLElBQ1gsMEJBQTBCO0FBQUEsSUFDMUIsVUFBWTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsUUFBVTtBQUFBLElBQ1YsNEJBQTRCO0FBQUEsSUFDNUIsTUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLElBQ2QsV0FBYTtBQUFBLElBQ2IsNkJBQTZCO0FBQUEsSUFDN0IsNkJBQTZCO0FBQUEsSUFDN0IsbUJBQW1CO0FBQUEsSUFDbkIsa0JBQWtCO0FBQUEsSUFDbEIsYUFBZTtBQUFBLElBQ2YsV0FBVztBQUFBLElBQ1gsWUFBYztBQUFBLElBQ2QsVUFBWTtBQUFBLElBQ1osTUFBUTtBQUFBLElBQ1IsMkJBQTJCO0FBQUEsSUFDM0Isb0JBQW9CO0FBQUEsSUFDcEIsb0JBQW9CO0FBQUEsSUFDcEIsNEJBQTRCO0FBQUEsSUFDNUIseUJBQXlCO0FBQUEsSUFDekIsd0JBQXdCO0FBQUEsSUFDeEIsZ0NBQWdDO0FBQUEsSUFDaEMscUJBQXFCO0FBQUEsSUFDckIsV0FBVztBQUFBLEVBQ2I7QUFBQSxFQUNBLGVBQWU7QUFBQSxJQUNiLHFCQUFxQjtBQUFBLEVBQ3ZCO0FBQUEsRUFDQSxRQUFVO0FBQUEsSUFDUixZQUFjO0FBQUEsTUFDWixNQUFRO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFVBQVk7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULE1BQVE7QUFBQSxFQUNWO0FBQUEsRUFDQSxNQUFRO0FBQUEsSUFDTixxQkFBdUI7QUFBQSxNQUNyQixlQUFpQjtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7OztBQ2xLTyxJQUFNLHdCQUF3QjtBQUU5QixJQUFNLGFBQWE7OztBRkcxQixTQUFTLGlCQUFpQjtBQUMxQixJQUFNLE1BQU0sVUFBVTtBQUV0QixlQUFlLGdCQUFnQjtBQUM3QixRQUFNLFNBQVMsTUFBTSxJQUFJLElBQUk7QUFFN0IsUUFBTSxhQUFhO0FBQ25CLFNBQU8sT0FBTyxRQUFRLEtBQUssVUFBVSxDQUFDLFlBQVksVUFBVTtBQUM5RDtBQUVPLFNBQVMsaUJBQWlCLEtBQWMsU0FBMkM7QUFDeEYsUUFBTSxFQUFFLG9CQUFvQixJQUFJO0FBRWhDLFFBQU1BLFFBQU87QUFFYixRQUFNLGtCQUFrQixNQUFNO0FBQzVCLFdBQU8sR0FBR0EsU0FBUSxHQUFHLEdBQUcscUJBQXFCLE1BQU0sZ0JBQUksT0FBTyxLQUFJLG9CQUFJLEtBQUssR0FBRSxRQUFRLENBQUM7QUFBQSxFQUN4RjtBQUVBLFNBQU8sSUFBSSxRQUFRLENBQUNDLGFBQVk7QUFDOUIsa0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUztBQUM3QixZQUFNLGFBQTZCLGlCQUFpQjtBQUFBLFFBQ2xELFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQTtBQUFBLFVBRU4sTUFBTTtBQUFBLFlBQ0osT0FBTztBQUFBLFlBQ1A7QUFBQSxVQUNGO0FBQUE7QUFBQSxVQUVBLE1BQU0sVUFDRjtBQUFBLFlBQ0U7QUFBQSxjQUNFLEtBQUs7QUFBQSxjQUNMLE9BQU87QUFBQSxnQkFDTCxLQUFLLGdCQUFnQjtBQUFBLGNBQ3ZCO0FBQUEsWUFDRjtBQUFBLFVBQ0YsSUFDQSxDQUFDO0FBQUEsUUFDUDtBQUFBLE1BQ0YsQ0FBQztBQUNELE1BQUFBLFNBQVEsVUFBVTtBQUFBLElBQ3BCLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDs7O0FHakRBLFNBQVMscUJBQXFCO0FBRXZCLFNBQVMsaUJBQWlCLFNBQWtCLFVBQW1CO0FBQ3BFLFNBQU8sY0FBYztBQUFBLElBQ25CLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLGNBQWMsQ0FBQztBQUFBLElBQ2YsYUFBYSxXQUFXO0FBQUEsSUFDeEIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLZCxDQUFDO0FBQ0g7OztBQ1pBLE9BQU8sb0JBQW9CO0FBRXBCLFNBQVMscUJBQ2QsVUFDQSxtQkFBbUIsT0FDQTtBQUNuQixRQUFNLGVBQWUsU0FBUyxNQUFNLEdBQUc7QUFFdkMsUUFBTSxVQUFvQixDQUFDO0FBRTNCLE1BQUksYUFBYSxTQUFTLE1BQU0sR0FBRztBQUNqQyxZQUFRO0FBQUEsTUFDTixlQUFlO0FBQUEsUUFDYixLQUFLO0FBQUEsUUFDTDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0EsTUFBSSxhQUFhLFNBQVMsUUFBUSxHQUFHO0FBQ25DLFlBQVE7QUFBQSxNQUNOLGVBQWU7QUFBQSxRQUNiLEtBQUs7QUFBQSxRQUNMLFdBQVc7QUFBQSxRQUNYO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7OztBQ2pDQSxTQUFTLGtCQUFrQjtBQUdwQixTQUFTLHlCQUF5QjtBQUN2QyxNQUFJLGFBQWEsR0FBRztBQUNsQixXQUFPLFdBQVc7QUFBQSxNQUNoQixVQUFVO0FBQUEsTUFDVixNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsTUFDVixZQUFZO0FBQUEsSUFDZCxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sQ0FBQztBQUNWOzs7QU5HTyxTQUFTLGtCQUFrQixTQUFrQixTQUFrQixVQUFVO0FBQzlFLFFBQU0sRUFBRSxlQUFlLHFCQUFxQix1Q0FBdUMsSUFBSTtBQUV2RixRQUFNLGNBQWlEO0FBQUE7QUFBQSxJQUVyRCxJQUFJO0FBQUE7QUFBQSxJQUVKLE9BQU87QUFBQSxJQUNQLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWFqQjtBQUdBLGNBQVksS0FBSyxpQkFBaUIsU0FBUyxPQUFPLENBQUM7QUFHbkQsbUJBQWlCLFlBQVksS0FBSyxpQkFBaUIsU0FBUyxRQUFRLENBQUM7QUFHckUsY0FBWSxLQUFLLHVCQUF1QixDQUFDO0FBRXpDLE1BQUksU0FBUztBQUVYLGdCQUFZO0FBQUEsTUFDVixxQkFBcUIscUJBQXFCLHNDQUFzQztBQUFBLElBQ2xGO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDs7O0FPOUNBLElBQU0sVUFBVTtBQU1ULFNBQVMsWUFBWSxPQUFrQixDQUFDLEdBQUc7QUFDaEQsUUFBTSxNQUF1QixDQUFDO0FBQzlCLGFBQVcsQ0FBQyxRQUFRLE1BQU0sS0FBSyxNQUFNO0FBQ25DLFVBQU0sVUFBVSxRQUFRLEtBQUssTUFBTTtBQUduQyxRQUFJLE1BQU0sSUFBSTtBQUFBLE1BQ1o7QUFBQSxNQUNBLGNBQWM7QUFBQSxNQUNkLElBQUk7QUFBQSxNQUNKLFNBQVMsQ0FBQ0MsVUFBU0EsTUFBSyxRQUFRLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFBQTtBQUFBLE1BRTVELEdBQUksVUFBVSxFQUFFLFFBQVEsTUFBTSxJQUFJLENBQUM7QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7OztBQ2pDaVUsT0FBTyxXQUFzQjtBQUU5VixJQUFNLG1CQUFtQjtBQUdsQixTQUFTLGlCQUNkLE1BQ0EsWUFBWSxrQkFDSjtBQUNSLFNBQU8sTUFBTSxJQUFJLEVBQUUsT0FBTyxTQUFTO0FBQ3JDOzs7QVZEQSxTQUFTLDRCQUE0QjtBQVRyQyxJQUFNLG1DQUFtQztBQVd6QyxJQUFNLE1BQU0scUJBQXFCO0FBQUE7QUFBQSxFQUUvQixVQUFVLENBQUMsS0FBSyxRQUFRLGtDQUFXLGtCQUFrQixDQUFDO0FBQUE7QUFBQSxFQUV0RCxVQUFVO0FBQ1osQ0FBQztBQUVELElBQU0sRUFBRSxjQUFjLGlCQUFpQixNQUFNLFFBQVEsSUFBSTtBQUV6RCxJQUFNLGVBQWU7QUFBQSxFQUNuQixLQUFLLEVBQUUsY0FBYyxpQkFBaUIsTUFBTSxRQUFRO0FBQUEsRUFDcEQsZUFBZSxpQkFBaUIsb0JBQUksS0FBSyxDQUFDO0FBQzVDO0FBRUEsU0FBUyxZQUFZLEtBQWE7QUFDaEMsU0FBTyxRQUFRLFFBQVEsSUFBSSxHQUFHLEtBQUssR0FBRztBQUN4QztBQUVBLElBQU8sc0JBQVEsQ0FBQyxFQUFFLFNBQVMsS0FBSyxNQUE2QjtBQUMzRCxRQUFNLE9BQU8sUUFBUSxJQUFJO0FBQ3pCLFFBQU0sTUFBTSxRQUFRLE1BQU0sSUFBSTtBQUM5QixRQUFNLFVBQVUsV0FBVyxHQUFHO0FBQzlCLFFBQU0sRUFBRSxXQUFXLHFCQUFxQixXQUFXLElBQUk7QUFDdkQsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sVUFBVSxZQUFZO0FBQzVCLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLFNBQVMsQ0FBQztBQUFBLElBQ1YsU0FBUztBQUFBLE1BQ1AsT0FBTztBQUFBLFFBQ0w7QUFBQSxVQUNFLE1BQU07QUFBQSxVQUNOLGFBQWEsWUFBWSxPQUFPLElBQUk7QUFBQSxRQUN0QztBQUFBLFFBQ0E7QUFBQSxVQUNFLE1BQU07QUFBQSxVQUNOLGFBQWEsWUFBWSxLQUFLLElBQUk7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLFFBQVEsQ0FBQyxLQUFLO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFNBQVMsQ0FBQyxrQkFBa0IsU0FBUyxTQUFTLFFBQVEsR0FBRyxHQUFHO0FBQUEsSUFDNUQsUUFBUTtBQUFBLE1BQ04sY0FBYyxLQUFLLFVBQVUsWUFBWTtBQUFBLElBQzNDO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSCxjQUFjO0FBQUEsTUFDZCxxQkFBcUI7QUFBQSxRQUNuQixNQUFNO0FBQUEsVUFDSixZQUFZLENBQUM7QUFBQSxVQUNiLG1CQUFtQjtBQUFBLFVBQ25CLGdCQUFnQjtBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLE9BQU8sWUFBWSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVEvQjtBQUFBLElBQ0EsY0FBYztBQUFBLE1BQ1osU0FBUyxDQUFDLFNBQVMscUJBQXFCLGdCQUFnQix5QkFBeUI7QUFBQSxNQUNqRixTQUFTLENBQUM7QUFBQSxJQUNaO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFJUixlQUFlO0FBQUEsUUFDYixVQUFVO0FBQUEsVUFDUixlQUFlO0FBQUEsVUFDZixjQUFjO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxzQkFBc0I7QUFBQSxNQUN0Qix1QkFBdUI7QUFBQSxJQUN6QjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFsicGF0aCIsICJyZXNvbHZlIiwgInBhdGgiXQp9Cg==
|