1
jhzh
2025-10-20 23669f1d566b6a37c4185eda805f6cfda15dd218
1
3 files modified
2 files added
495 ■■■■■ changed files
src/router/index.js 52 ●●●● patch | view | raw | blame | history
src/views/cryptos/Recharge/rechargePage.vue 345 ●●●●● patch | view | raw | blame | history
src/views/homePage/index.vue 8 ●●●● patch | view | raw | blame | history
src/views/my/assets.vue 8 ●●●● patch | view | raw | blame | history
vite.config.js.timestamp-1758512632360.mjs 82 ●●●●● patch | view | raw | blame | history
src/router/index.js
@@ -679,6 +679,28 @@
                        import( /* webpackChunkName: "perpetualContractOld" */ /* webpackPrefetch: true */
                            '@/views/cryptos/PerpetualContract/index-old.vue'),
                },
                // { //充值列表
                //     path: 'recharge/newczlist',
                //     name: 'newczlist',
                //     meta: {
                //         tarbar: false,
                //         keepAlive: true
                //     },
                //     component: () =>
                //         import( /* webpackChunkName: "perpetualContract" */ /* webpackPrefetch: true */
                //             '@/views/cryptos/Recharge/newczlist.vue'),
                // },
                // { //充值列表
                //     path: 'recharge/rechargeList',
                //     name: 'rechargeList',
                //     meta: {
                //         tarbar: false,
                //         keepAlive: true
                //     },
                //     component: () =>
                //         import( /* webpackChunkName: "perpetualContract" */ /* webpackPrefetch: true */
                //             '@/views/cryptos/Recharge/rechargeList.vue'),
                // },
                { //充值列表
                    path: 'recharge/rechargeList',
                    name: 'rechargeList',
@@ -690,21 +712,21 @@
                        import( /* webpackChunkName: "perpetualContract" */ /* webpackPrefetch: true */
                            '@/views/cryptos/Recharge/rechargeList.vue'),
                },
                // {
                //     //充值页面
                //     path: "recharge/rechargePage",
                //     name: "rechargePage",
                //     meta: {
                //         tarbar: false,
                //         keepAlive: true
                //     },
                //     component: () =>
                //         import(
                //             /* webpackChunkName: "rechargePage" */
                //             /* webpackPrefetch: true */
                //             "@/views/cryptos/Recharge/rechargePage.vue"
                //         ),
                // },
                {
                    //充值页面
                    path: "recharge/rechargePage",
                    name: "rechargePage",
                    meta: {
                        tarbar: false,
                        keepAlive: true
                    },
                    component: () =>
                        import(
                            /* webpackChunkName: "rechargePage" */
                            /* webpackPrefetch: true */
                            "@/views/cryptos/Recharge/rechargePage.vue"
                        ),
                },
                {
                    //充值提交
                    path: "recharge/rechargeSubmit",
src/views/cryptos/Recharge/rechargePage.vue
New file
@@ -0,0 +1,345 @@
<template>
    <div id="cryptos">
        <div class="rechargePage box-border px-30 font-28">
            <assets-head goHome="ture" :title="$t('快速充币')">
                <van-icon name="orders-o" @click="openRecord" class="list-icon"></van-icon>
            </assets-head>
            <div class="mt-30 w-full text-center font-36 textColor">{{ coin.toUpperCase() + ' ' + $t('充值') }}</div>
            <div class="pl-30 pt-30 pr-30 text-center flex flex-col items-center justify-center mt40">
                <div>
                    <canvas id="QRcodeCanvas" v-show="!imgshow"></canvas>
                    <img :src="img" alt="" v-show="imgshow" class="QRcodeImg" />
                </div>
                <div class="code-btn btnMain text-center font-26 text-white" @click="download('#QRcodeCanvas')">{{
                    $t('保存二维码') }}</div>
            </div>
            <div class="border-light-grey"></div>
            <div class="pl-10 pr-10 font-28">
                <div class=" flex flex-col items-center justify-center font-28">
                    <div class="textColor font-30 mt50" style="word-break: break-all;" ref="address">{{ address }}</div>
                    <div @click="copy(address)"
                        class="font-26 border-solid-grey text-center code-btn rounded-6 textColor">
                        {{ $t('复制地址') }}</div>
                </div>
                <!-- <div>
                    <div class="font-26 textColor font-28">{{ $t('转出地址(选填)') }}</div>
                    <div style="position: relative;" class="mt-26 mb-20 font-28">
                        <input style="padding-right: 80px;" v-model="enterAddress"
                            class="input-view font-26 textColor inputBackground" :placeholder="$t('请输入转出地址')" />
                        <div style="position: absolute;right: 10px;top: 50%;color: #1194F7;transform: translateY(-50%)"
                            @click="enterAddress = address">
                            {{ $t('粘贴') }}</div>
                    </div>
                </div> -->
                <div class="mb-20">
                    <div class="font-28 textColor">{{ $t('充币数量') }}</div>
                    <div>
                        <input v-model="amount" class="input-view w-full font-28 textColor inputBackground"
                            :placeholder="$t('请输入充币数量')" />
                    </div>
                </div>
                <div>
                    <div class="font-28 textColor">{{ $t('链名称') }}</div>
                    <div class="flex ">
                        <div :class="blockchainIndex == index ? 'borderMain colorMain' : 'border-solid-dark-grey border-r-grey'"
                            class="mr-20 flex-wrap font-32 text-center name-btn rounded textColor"
                            v-for="(item, index) in chainList" :key="index" @click="changeBlockchain(index)">{{
                                item.blockchain_name }}</div>
                    </div>
                </div>
                <div>
                    <div class="font-28 textColor">{{ $t('付款凭证(上传支付详情截图)') }}</div>
                    <div class="img-box">
                        <van-uploader accept="image/*" v-model="fileList" multiple :max-count="1"
                            :before-read="beforeRead" :after-read="afterRead" />
                    </div>
                </div>
            </div>
            <div class="hint-box">
                <div class="pl-30 pr-30">
                    <!-- <div class="font-30 mb-27 textColor">{{ $t('重要提示') }}</div> -->
                    <!-- <div class="font-28 text-grey" v-html="tip"></div> -->
                    <button class="btnMain text-white next-btn font-30 rounded-lg" @click="nextBtn">{{ $t('下一步')
                        }}</button>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
import QRCode from "qrcode";
import { Icon } from 'vant';
import { Uploader, showToast } from 'vant';
import Axios from "@/service/recharge.js";
import assetsHead from "@/components/Transform/assets-head/index.vue";
import { _uploadImage } from "@/service/upload.api.js";
import { BASE_URL } from "@/config";
export default {
    name: "rechargePage",
    components: {
        [Uploader.name]: Uploader,
        [Icon.name]: Icon,
        assetsHead,
    },
    data() {
        return {
            BASE_URL,
            tip: '',
            fileList: [],
            address: "",
            nowUrl: "",
            session_token: "",
            amount: "", //充币数量
            from: "", //客户转出地址
            coin: "", //币种
            blockchainIndex: 0,
            blockchain_name: "",
            chainList: [],
            QRCodeMsg: "",
            imgshow: false,
            img: "",
            enterAddress: ""
        }
    },
    mounted() {
        //获取域名
        this.nowUrl = 'https://' + window.location.hostname;
        this.coin = this.$route.query.symbol;
        this.getData();
        this.getToken();
        // https://www.wbfjsfhjdbsh.site/wap/api/cms!get.action?language=en&content_code=002&token=fe3c35583f8a4f12a86b0c13faa75ee6
        Axios.getRechargeTips({
            language: this.$i18n.locale,
            token: this.$store.state.user.userInfo.token,
            content_code: '002',
        }).then(res => {
            console.log('充值提示', res)
            this.tip = res?.content || '';
        })
    },
    methods: {
        openRecord() {
            this.$router.push({
                path: '/cryptos/assetsCenter/rechargeWithdrawRecord',
                query: {
                    back: "1"
                }
            });
        },
        getData() {
            Axios.getBlock({
                coin: this.coin
            }).then((res) => {
                this.chainList = res;
                this.address = res[0].address;
                this.blockchain_name = res[0].blockchain_name;
                this.getQRCode();
            });
        },
        changeBlockchain(index) {
            this.blockchainIndex = index;
            this.address = this.chainList[this.blockchainIndex].address;
            this.blockchain_name = this.chainList[this.blockchainIndex].blockchain_name;
            this.getQRCode();
        },
        getToken() {
            Axios.getRechargeToken().then((res) => {
                this.session_token = res.session_token;
            });
        },
        onClickLeft() {
            this.$router.go(-1);
        },
        copy(val) {
            if (!val) {
                return
            }
            navigator.clipboard.writeText(val).then(() => {
                showToast(this.$t('复制成功'));
            })
        },
        //上传前
        beforeRead(file) {
            let types = ['image/jpeg', 'image/jpg', 'image/gif', 'image/bmp', 'image/png']
            const isImage = types.includes(file.type);
            if (!isImage) {
                showToast(this.$t('上传图片只能是JPG、JPEG、gif、bmp、PNG格式!'));
                return false;
            }
            return true;
        },
        //上传完成
        async afterRead(file) {
            file.status = 'uploading'
            file.message = this.$t('uploading')
            _uploadImage(file).then(data => {
                file.status = 'success'
                file.message = this.$t('uploadSuccess')
                showToast(this.$t('uploadSuccess'));
                file.resURL = data
            }).catch(err => {
                file.status = 'failed'
                file.message = this.$t('uploadFailed')
            })
        },
        //生成二维码
        getQRCode() {
            let opts = {
                errorCorrectionLevel: "H",//容错级别
                type: "image/png",//生成的二维码类型
                quality: 0.3,//二维码质量
                margin: 4,//二维码留白边距
                width: 200,//宽
                height: 200,//高
                text: "http://www.xxx.com",//二维码内容
                color: {
                    dark: "#333333",//前景色
                    light: "#fff"//背景色
                }
            };
            this.QRCodeMsg = this.address; //生成的二维码为URL地址js
            let msg = document.getElementById("QRcodeCanvas");    // 将获取到的数据(val)画到msg(canvas)上
            QRCode.toCanvas(msg, this.QRCodeMsg, opts, function (error) {
                console.log(error)
            });
            // 将canvas转成图片格式,可以长按保存
            this.img = msg.toDataURL('image/png');
            this.imgshow = true;
        },
        download(selector) {
            // 通过 API 获取目标 canvas 元素
            const canvas = document.querySelector(selector);
            // 创建一个 a 标签,并设置 href 和 download 属性
            const el = document.createElement('a');
            // 设置 href 为图片经过 base64 编码后的字符串,默认为 png 格式
            el.href = canvas.toDataURL();
            el.download = '123';
            // 创建一个点击事件并对 a 标签进行触发
            const event = new MouseEvent('click');
            el.dispatchEvent(event);
        },
        nextBtn() {
            if (!this.amount) {
                showToast(this.$t('请输入数量'));
                return;
            }
            let numReg = /^[0-9]+([.]{1}[0-9]+){0,1}$/;
            if (!numReg.test(this.amount)) {
                showToast(this.$t('请输入数字'));
                return;
            }
            if (this.amount) {
                Axios.rechargeApply({
                    session_token: this.session_token,
                    amount: this.amount,
                    from: this.enterAddress,
                    blockchain_name: this.blockchain_name,
                    img: this.fileList[0].resURL,
                    coin: this.coin,
                    channel_address: this.address,
                    tx: "",
                }).then((res) => {
                    this.$router.push({
                        path: "/cryptos/recharge/rechargeSubmit"
                    });
                }).catch((error) => {
                    if (error.code === 'ECONNABORTED') { showToast(this.$t('网络超时!')); }
                    else if (error.msg !== undefined) { showToast(this.$t(error.msg)); }
                    this.getToken();
                });
            } else {
                showToast(this.$t('请输入充币数量'));
            }
        },
    }
}
</script>
<style lang="scss" scoped>
@import "@/assets/init.scss";
#cryptos {
    background-color: $mainbgWhiteColor;
    .rechargePage {
        width: 100%;
        box-sizing: border-box;
        ::deep .van-uploader__upload {
            background-color: $inp-b !important;
        }
    }
    .code-btn {
        width: 280px;
        height: 70px;
        margin-top: 36px;
        margin-bottom: 56px;
        line-height: 70px;
    }
    .mt50 {
        margin-top: 50px;
    }
    .mt70 {
        margin-top: 70px;
    }
    .input-view {
        height: 100px;
        width: 100%;
        border: none;
        outline: none;
        padding-left: 20px;
        box-sizing: border-box;
    }
    .name-btn {
        width: 210px;
        height: 80px;
        line-height: 80px;
        margin-top: 30px;
        margin-bottom: 50px;
    }
    .img-box {
        margin-top: 32px;
        margin-bottom: 90px;
    }
    .hint-box {
        // background-color: $tab_background;
        background-color: $inp-b;
        padding-top: 35px;
        padding-bottom: 52px;
    }
    .mtb27 {
        margin: 27px 0;
    }
    .next-btn {
        width: 100%;
        height: 100px;
        margin-top: 35px;
        border: none;
        outline: none;
    }
    .list-icon {
        color: $text_color;
        font-size: 36px !important;
    }
}
</style>
src/views/homePage/index.vue
@@ -136,10 +136,10 @@
// 跳转页面
const toPage = (path) => {
    if(path=='/cryptos/recharge/rechargeList?isForeign=true'){
        window.open(customer_service_url.value)
        return
    }
    // if(path=='/cryptos/recharge/rechargeList?isForeign=true'){
    //     window.open(customer_service_url.value)
    //     return
    // }
    if (!path) return
    router.push(path)
}
src/views/my/assets.vue
@@ -142,10 +142,10 @@
};
// 跳转页面
const toPage = (path) => {
    if(path=='/cryptos/recharge/rechargeList?isForeign=true'){
        window.open(customer_service_url.value)
        return
    }
    // if(path=='/cryptos/recharge/rechargeList?isForeign=true'){
    //     window.open(customer_service_url.value)
    //     return
    // }
    if (!path) return
    router.push(path)
}
vite.config.js.timestamp-1758512632360.mjs
New file
@@ -0,0 +1,82 @@
// vite.config.js
import {
  defineConfig
} from "file:///D:/xzpro/xin_newbb_jys/h5/node_modules/vite/dist/node/index.js";
import vue from "file:///D:/xzpro/xin_newbb_jys/h5/node_modules/@vitejs/plugin-vue/dist/index.mjs";
import path from "path";
import Components from "file:///D:/xzpro/xin_newbb_jys/h5/node_modules/unplugin-vue-components/dist/vite.mjs";
import {
  VantResolver
} from "file:///D:/xzpro/xin_newbb_jys/h5/node_modules/unplugin-vue-components/dist/resolvers.mjs";
import DefineOptions from "file:///D:/xzpro/xin_newbb_jys/h5/node_modules/unplugin-vue-define-options/dist/vite.mjs";
import {
  visualizer
} from "file:///D:/xzpro/xin_newbb_jys/h5/node_modules/rollup-plugin-visualizer/dist/plugin/index.js";
import legacy from "file:///D:/xzpro/xin_newbb_jys/h5/node_modules/@vitejs/plugin-legacy/dist/index.mjs";
import obfuscator from "file:///D:/xzpro/xin_newbb_jys/h5/node_modules/rollup-plugin-obfuscator/dist/rollup-plugin-obfuscator.js";
var __vite_injected_original_dirname = "D:\\xzpro\\xin_newbb_jys\\h5";
var isVisualizer = process.env.VISUALIZER === "show";
var vite_config_default = defineConfig({
  base: "",
  plugins: [
    vue(),
    Components({
      resolvers: [VantResolver()]
    }),
    DefineOptions(),
    isVisualizer && visualizer({
      gzipSize: true
    }),
    legacy({
      targets: ["defaults", "not IE 11"]
    })
  ],
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "@/assets/css/variable.scss";`
      }
    }
  },
  server: {
    open: true,
    port: 8085,
    hmr: true,
    host: "0.0.0.0",
    proxy: {
      "/api": {
        target: "https://104.233.210.35:8085",
        changeOrigin: true,
        secure: false
      }
    }
  },
  resolve: {
    dedupe: [
      "vue"
    ],
    alias: {
      "vue-i18n": "vue-i18n/dist/vue-i18n.cjs.js",
      "~": path.resolve(__vite_injected_original_dirname, "./"),
      "@": path.resolve(__vite_injected_original_dirname, "src")
    }
  },
  build: {
    assetsDir: "static",
    rollupOptions: {
      input: {
        index: path.resolve(__vite_injected_original_dirname, "index.html")
      },
      output: {
        chunkFileNames: "js/[name]-[hash].js",
        entryFileNames: "js/[name]-[hash].js",
        assetFileNames: "[ext]/name-[hash].[ext]"
      }
    }
  },
  externals: ["vue"]
});
export {
  vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx4enByb1xcXFx4aW5fbmV3YmJfanlzXFxcXGg1XCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFx4enByb1xcXFx4aW5fbmV3YmJfanlzXFxcXGg1XFxcXHZpdGUuY29uZmlnLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi94enByby94aW5fbmV3YmJfanlzL2g1L3ZpdGUuY29uZmlnLmpzXCI7aW1wb3J0IHtcclxuXHRkZWZpbmVDb25maWdcclxufSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvdml0ZSc7XHJcbmltcG9ydCB7XHJcblx0VmFudFJlc29sdmVyXHJcbn0gZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvcmVzb2x2ZXJzJztcclxuaW1wb3J0IERlZmluZU9wdGlvbnMgZnJvbSAndW5wbHVnaW4tdnVlLWRlZmluZS1vcHRpb25zL3ZpdGUnO1xyXG5pbXBvcnQge1xyXG5cdHZpc3VhbGl6ZXJcclxufSBmcm9tICdyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXInXHJcbmltcG9ydCBsZWdhY3kgZnJvbSAnQHZpdGVqcy9wbHVnaW4tbGVnYWN5JztcclxuaW1wb3J0IG9iZnVzY2F0b3IgZnJvbSAncm9sbHVwLXBsdWdpbi1vYmZ1c2NhdG9yJzsgLy8gXHU1QkZDXHU1MTY1XHU0RUUzXHU3ODAxXHU2REY3XHU2REM2XHU2M0QyXHU0RUY2XHJcbmNvbnN0IGlzVmlzdWFsaXplciA9IHByb2Nlc3MuZW52LlZJU1VBTElaRVIgPT09ICdzaG93J1xyXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xyXG5cdGJhc2U6ICcnLCAvL0g1XHU2MjUzXHU1MzA1XHU3NTI4XHJcblx0Ly8gYmFzZTogJy4vJywgLy8gQVBQXHU2MjUzXHU1MzA1XHU3NTI4XHJcblx0cGx1Z2luczogW1xyXG5cdFx0Ly8gb2JmdXNjYXRvcih7XHJcblx0XHQvLyBcdGdsb2JhbDogdHJ1ZSwgLy8gXHU1NDJGXHU3NTI4XHU1MTY4XHU1QzQwXHU5MTREXHU3RjZFXHVGRjBDXHU1RjcxXHU1NENEXHU2MjQwXHU2NzA5XHU2NTg3XHU0RUY2XHJcblx0XHQvLyBcdC8vIFx1OTE0RFx1N0Y2RVx1OTg3OVx1NTNDMlx1ODAwM1x1RkYxQWh0dHBzOi8vZ2l0aHViLmNvbS9qYXZhc2NyaXB0LW9iZnVzY2F0b3IvamF2YXNjcmlwdC1vYmZ1c2NhdG9yXHJcblx0XHQvLyBcdG9wdGlvbnM6IHtcclxuXHRcdC8vIFx0XHRjb21wYWN0OiB0cnVlLCAvLyBcdTUzOEJcdTdGMjlcdTRFRTNcdTc4MDFcdUZGMENcdTc5RkJcdTk2NjRcdTRFMERcdTVGQzVcdTg5ODFcdTc2ODRcdTdBN0FcdTY4M0NcdTU0OENcdTYzNjJcdTg4NENcclxuXHRcdC8vIFx0XHRjb250cm9sRmxvd0ZsYXR0ZW5pbmc6IHRydWUsIC8vIFx1NTQyRlx1NzUyOFx1NjNBN1x1NTIzNlx1NkQ0MVx1NUU3M1x1NTc2Nlx1NTMxNlx1RkYwQ1x1NkRGN1x1NkRDNlx1NEVFM1x1NzgwMVx1N0VEM1x1Njc4NFx1RkYwQ1x1NTg5RVx1NTJBMFx1NEVFM1x1NzgwMVx1OTYwNVx1OEJGQlx1OTZCRVx1NUVBNlxyXG5cdFx0Ly8gXHRcdGNvbnRyb2xGbG93RmxhdHRlbmluZ1RocmVzaG9sZDogMC43NSwgLy8gXHU2M0E3XHU1MjM2XHU2RDQxXHU1RTczXHU1NzY2XHU1MzE2XHU3Njg0XHU1RTk0XHU3NTI4XHU5NjA4XHU1MDNDXHVGRjBDXHU4ODY4XHU3OTNBXHU4MUYzXHU1QzExIDc1JSBcdTc2ODRcdTRFRTNcdTc4MDFcdTVDMDZcdTg4QUJcdTVFNzNcdTU3NjZcdTUzMTZcclxuXHRcdC8vIFx0XHRudW1iZXJzVG9FeHByZXNzaW9uczogdHJ1ZSwgLy8gXHU1QzA2XHU2NTcwXHU1QjU3XHU2NkZGXHU2MzYyXHU0RTNBXHU2NTcwXHU1QjY2XHU4ODY4XHU4RkJFXHU1RjBGXHVGRjBDXHU1ODlFXHU1MkEwXHU2REY3XHU2REM2XHJcblx0XHQvLyBcdFx0c2ltcGxpZnk6IHRydWUsIC8vIFx1N0I4MFx1NTMxNlx1NEVFM1x1NzgwMVx1RkYwQ1x1NTFDRlx1NUMxMVx1NTE5N1x1NEY1OVx1NEVFM1x1NzgwMVxyXG5cdFx0Ly8gXHRcdHN0cmluZ0FycmF5U2h1ZmZsZTogdHJ1ZSwgLy8gXHU2MjUzXHU0RTcxXHU1QjU3XHU3QjI2XHU0RTMyXHU2NTcwXHU3RUM0XHU3Njg0XHU5ODdBXHU1RThGXHVGRjBDXHU1ODlFXHU1MkEwXHU0RUUzXHU3ODAxXHU1MjA2XHU2NzkwXHU5NkJFXHU1RUE2XHJcblx0XHQvLyBcdFx0c3BsaXRTdHJpbmdzOiB0cnVlLCAvLyBcdTVDMDZcdTk1N0ZcdTVCNTdcdTdCMjZcdTRFMzJcdTYyQzZcdTUyMDZcdTYyMTBcdTU5MUFcdTRFMkFcdTc3RURcdTVCNTdcdTdCMjZcdTRFMzJcclxuXHRcdC8vIFx0XHRzcGxpdFN0cmluZ3NDaHVua0xlbmd0aDogMTAsIC8vIFx1NjJDNlx1NTIwNlx1NUI1N1x1N0IyNlx1NEUzMlx1NzY4NFx1NjcwMFx1NTkyN1x1OTU3Rlx1NUVBNlx1NEUzQSAxMFxyXG5cdFx0Ly8gXHRcdHJvdGF0ZVVuaWNvZGVBcnJheTogdHJ1ZSwgLy8gXHU1NDJGXHU3NTI4IFVuaWNvZGUgXHU2NTcwXHU3RUM0XHU3Njg0XHU2NUNCXHU4RjZDXHVGRjBDXHU1ODlFXHU1MkEwXHU1MjA2XHU2NzkwXHU3Njg0XHU1OTBEXHU2NzQyXHU1RUE2XHJcblx0XHQvLyBcdFx0ZGVhZENvZGVJbmplY3Rpb246IHRydWUsIC8vIFx1NkNFOFx1NTE2NVx1NjVFMFx1NzUyOFx1NzY4NFx1NkI3Qlx1NEVFM1x1NzgwMVx1Njc2NVx1NTg5RVx1NTJBMFx1NkRGN1x1NkRDNlxyXG5cdFx0Ly8gXHRcdGRlYWRDb2RlSW5qZWN0aW9uVGhyZXNob2xkOiAwLjQsIC8vIFx1NkI3Qlx1NEVFM1x1NzgwMVx1NkNFOFx1NTE2NVx1NzY4NFx1NkJENFx1NEY4Qlx1OTYwOFx1NTAzQ1x1RkYwQ1x1ODg2OFx1NzkzQVx1ODFGM1x1NUMxMSA0MCUgXHU3Njg0XHU0RUUzXHU3ODAxXHU0RTNBXHU2QjdCXHU0RUUzXHU3ODAxXHJcblx0XHQvLyBcdFx0ZGVidWdQcm90ZWN0aW9uOiB0cnVlLCAvLyBcdTU0MkZcdTc1MjhcdThDMDNcdThCRDVcdTRGRERcdTYyQTRcdUZGMENcdTk2MzJcdTZCNjJcdThDMDNcdThCRDVcdTVERTVcdTUxNzdcdTVFNzJcdTYyNzBcdTRFRTNcdTc4MDFcdTYyNjdcdTg4NENcclxuXHRcdC8vIFx0XHRkZWJ1Z1Byb3RlY3Rpb25JbnRlcnZhbDogMjAwMCwgLy8gXHU4QkJFXHU3RjZFXHU4QzAzXHU4QkQ1XHU0RkREXHU2MkE0XHU5NUY0XHU5Njk0XHVGRjBDXHU5NjMyXHU2QjYyXHU5ODkxXHU3RTQxXHU3Njg0XHU4QzAzXHU4QkQ1XHU2NTNCXHU1MUZCXHJcblx0XHQvLyBcdFx0ZGlzYWJsZUNvbnNvbGVPdXRwdXQ6IHRydWUsIC8vIFx1Nzk4MVx1NzUyOFx1NjNBN1x1NTIzNlx1NTNGMFx1OEY5M1x1NTFGQVx1RkYwQ1x1OTYzMlx1NkI2Mlx1NkNDNFx1OTczMlx1NjU0Rlx1NjExRlx1NEZFMVx1NjA2RlxyXG5cdFx0Ly8gXHRcdGRvbWFpbkxvY2s6IFtcImh0dHA6Ly8xMjcuMC4wLjE6ODA4MFwiXSwgLy8gXHU4QkJFXHU3RjZFXHU0RUM1XHU1NzI4XHU2MzA3XHU1QjlBXHU3Njg0XHU1N0RGXHU1NDBEXHU0RTBCXHU2MjY3XHU4ODRDXHU0RUUzXHU3ODAxXHVGRjBDXHU1ODlFXHU1MkEwXHU1Qjg5XHU1MTY4XHU2MDI3XHJcblx0XHQvLyBcdFx0aWRlbnRpZmllck5hbWVzR2VuZXJhdG9yOiBcImhleGFkZWNpbWFsXCIsIC8vIFx1NEY3Rlx1NzUyOFx1NTM0MVx1NTE2RFx1OEZEQlx1NTIzNlx1NTQ3RFx1NTQwRFx1NjgwN1x1OEJDNlx1N0IyNlx1RkYwQ1x1NkRGN1x1NkRDNlx1NEVFM1x1NzgwMVxyXG5cdFx0Ly8gXHRcdGlkZW50aWZpZXJzUHJlZml4OiBcIlwiLCAvLyBcdTY4MDdcdThCQzZcdTdCMjZcdTc2ODRcdTUyNERcdTdGMDBcdUZGMENcdTdBN0FcdTg4NjhcdTc5M0FcdTZDQTFcdTY3MDlcdTUyNERcdTdGMDBcclxuXHRcdC8vIFx0XHRpbnB1dEZpbGVOYW1lOiBcIlwiLCAvLyBcdThGOTNcdTUxNjVcdTY1ODdcdTRFRjZcdTU0MERcdUZGMENcdTc1NTlcdTdBN0FcdTg4NjhcdTc5M0FcdTRFMERcdTYzMDdcdTVCOUFcclxuXHRcdC8vIFx0XHRsb2c6IHRydWUsIC8vIFx1NTQyRlx1NzUyOFx1NjVFNVx1NUZEN1x1OEJCMFx1NUY1NVx1RkYwQ1x1NUUyRVx1NTJBOVx1NUYwMFx1NTNEMVx1ODAwNVx1OEMwM1x1OEJENVx1NTQ4Q1x1OERERlx1OEUyQVx1NEVFM1x1NzgwMVx1NkRGN1x1NkRDNlx1OEZDN1x1N0EwQlxyXG5cdFx0Ly8gXHRcdHJlbmFtZUdsb2JhbHM6IHRydWUsIC8vIFx1NTQyRlx1NzUyOFx1NTE2OFx1NUM0MFx1NTNEOFx1OTFDRlx1OTFDRFx1NTQ3RFx1NTQwRFx1RkYwQ1x1OTA3Rlx1NTE0RFx1NjZCNFx1OTczMlx1NTE2OFx1NUM0MFx1NTNEOFx1OTFDRlx1NTQwRFx1NzlGMFxyXG5cdFx0Ly8gXHRcdHJlc2VydmVkTmFtZXM6IFtdLCAvLyBcdTRGRERcdTc1NTlcdTc2ODRcdTUzRDhcdTkxQ0ZcdTU0MERcdTUyMTdcdTg4NjhcdUZGMENcdTRFMERcdTRGMUFcdTg4QUJcdTZERjdcdTZEQzZcdTc2ODRcdTUzRDhcdTkxQ0ZcclxuXHRcdC8vIFx0XHRyZXNlcnZlZFN0cmluZ3M6IFtdLCAvLyBcdTRGRERcdTc1NTlcdTc2ODRcdTVCNTdcdTdCMjZcdTRFMzJcdTUyMTdcdTg4NjhcdUZGMENcdTRFMERcdTRGMUFcdTg4QUJcdTZERjdcdTZEQzZcdTc2ODRcdTVCNTdcdTdCMjZcdTRFMzJcclxuXHRcdC8vIFx0XHRzZWVkOiAwLCAvLyBcdThCQkVcdTdGNkVcdTZERjdcdTZEQzZcdTc2ODRcdTk2OEZcdTY3M0FcdTc5Q0RcdTVCNTBcdUZGMENcdTc4NkVcdTRGRERcdTZCQ0ZcdTZCMjFcdTZERjdcdTZEQzZcdTc2ODRcdTRFMDBcdTgxRjRcdTYwMjdcclxuXHRcdC8vIFx0XHRzZWxmRGVmZW5kaW5nOiB0cnVlLCAvLyBcdTU0MkZcdTc1MjhcdTgxRUFcdTYyMTFcdTRGRERcdTYyQTRcdUZGMENcdTk2MzJcdTZCNjJcdTg4QUJcdTUzQ0RcdTZERjdcdTZEQzZcclxuXHRcdC8vIFx0XHRzb3VyY2VNYXA6IGZhbHNlLCAvLyBcdTc5ODFcdTc1MjhcdTZFOTBcdTY2MjBcdTVDMDRcdUZGMENcdTk2MzJcdTZCNjJcdTZFOTBcdTc4MDFcdTZDQzRcdTk3MzJcclxuXHRcdC8vIFx0XHRzb3VyY2VNYXBCYXNlVXJsOiBcIlwiLCAvLyBcdTZFOTBcdTY2MjBcdTVDMDRcdTc2ODRcdTU3RkFcdTc4NDAgVVJMXHJcblx0XHQvLyBcdFx0c291cmNlTWFwRmlsZU5hbWU6IFwiXCIsIC8vIFx1NkU5MFx1NjYyMFx1NUMwNFx1NzY4NFx1NjU4N1x1NEVGNlx1NTQwRFxyXG5cdFx0Ly8gXHRcdHNvdXJjZU1hcE1vZGU6IFwic2VwYXJhdGVcIiwgLy8gXHU4QkJFXHU3RjZFXHU2RTkwXHU2NjIwXHU1QzA0XHU2QTIxXHU1RjBGXHU0RTNBXHU1MzU1XHU3MkVDXHU2NTg3XHU0RUY2XHJcblx0XHQvLyBcdFx0c3RyaW5nQXJyYXk6IHRydWUsIC8vIFx1NTQyRlx1NzUyOFx1NUI1N1x1N0IyNlx1NEUzMlx1NjU3MFx1N0VDNFx1RkYwQ1x1NEYxOFx1NTMxNlx1NUI1N1x1N0IyNlx1NEUzMlx1NzY4NFx1NUI1OFx1NTBBOFx1NjVCOVx1NUYwRlxyXG5cdFx0Ly8gXHRcdHN0cmluZ0FycmF5RW5jb2Rpbmc6IFtcImJhc2U2NFwiXSwgLy8gXHU0RjdGXHU3NTI4IGJhc2U2NCBcdTdGMTZcdTc4MDFcdTVCNTdcdTdCMjZcdTRFMzJcdTY1NzBcdTdFQzRcdUZGMENcdTU4OUVcdTUyQTBcdTRFRTNcdTc4MDFcdTk2QkVcdTVFQTZcclxuXHRcdC8vIFx0XHRzdHJpbmdBcnJheVRocmVzaG9sZDogMC43NSwgLy8gXHU1QjU3XHU3QjI2XHU0RTMyXHU2NTcwXHU3RUM0XHU3Njg0XHU5NjA4XHU1MDNDXHVGRjBDXHU4ODY4XHU3OTNBIDc1JSBcdTc2ODRcdTVCNTdcdTdCMjZcdTRFMzJcdTVDMDZcdTg4QUJcdTY1M0VcdTUxNjVcdTY1NzBcdTdFQzRcclxuXHRcdC8vIFx0XHR0YXJnZXQ6IFwiYnJvd3NlclwiLCAvLyBcdThCQkVcdTdGNkVcdTc2RUVcdTY4MDdcdTczQUZcdTU4ODNcdTRFM0FcdTZENEZcdTg5QzhcdTU2NjhcclxuXHRcdC8vIFx0XHR0cmFuc2Zvcm1PYmplY3RLZXlzOiB0cnVlLCAvLyBcdThGNkNcdTYzNjJcdTVCRjlcdThDNjFcdTc2ODRcdTk1MkVcdTU0MERcdUZGMENcdTU4OUVcdTUyQTBcdTZERjdcdTZEQzZcclxuXHRcdC8vIFx0XHR1bmljb2RlRXNjYXBlU2VxdWVuY2U6IHRydWUsIC8vIFx1NTQyRlx1NzUyOCBVbmljb2RlIFx1OEY2Q1x1NEU0OVx1NUU4Rlx1NTIxN1x1RkYwQ1x1NTg5RVx1NTJBMFx1NEVFM1x1NzgwMVx1OTZCRVx1NUVBNlxyXG5cclxuXHRcdC8vIFx0XHQvLyBkb21haW5Mb2NrUmVkaXJlY3RVcmw6IFwiYWJvdXQ6YmxhbmtcIiwgLy8gXHU4QkJFXHU3RjZFXHU1N0RGXHU1NDBEXHU5NTAxXHU1QjlBXHU5MUNEXHU1QjlBXHU1NDExIFVSTFx1RkYwQ1x1OTYzMlx1NkI2Mlx1NEVFM1x1NzgwMVx1ODhBQlx1NTE3Nlx1NEVENlx1N0Y1MVx1N0FEOVx1NjI2N1x1ODg0Q1xyXG5cdFx0Ly8gXHRcdC8vIGZvcmNlVHJhbnNmb3JtU3RyaW5nczogW10sIC8vIFx1NUYzQVx1NTIzNlx1OEY2Q1x1NjM2Mlx1NzY4NFx1NUI1N1x1N0IyNlx1NEUzMlx1NTIxN1x1ODg2OFx1RkYwQ1x1NjMwN1x1NUI5QVx1NUZDNVx1OTg3Qlx1NkRGN1x1NkRDNlx1NzY4NFx1NUI1N1x1N0IyNlx1NEUzMlxyXG5cdFx0Ly8gXHRcdC8vIGlkZW50aWZpZXJOYW1lc0NhY2hlOiBudWxsLCAvLyBcdTY4MDdcdThCQzZcdTdCMjZcdTU0MERcdTc5RjBcdTdGMTNcdTVCNThcdUZGMENcdTRGMThcdTUzMTZcdTYwMjdcdTgwRkRcclxuXHRcdC8vIFx0XHQvLyBpZGVudGlmaWVyc0RpY3Rpb25hcnk6IFtdLCAvLyBcdTgxRUFcdTVCOUFcdTRFNDlcdTY4MDdcdThCQzZcdTdCMjZcdTVCNTdcdTUxNzhcdUZGMENcdTc1MjhcdTRFOEVcdTgxRUFcdTVCOUFcdTRFNDlcdTZERjdcdTZEQzZcdTY4MDdcdThCQzZcdTdCMjZcclxuXHRcdC8vIFx0XHQvLyBpZ25vcmVJbXBvcnRzOiB0cnVlLCAvLyBcdTVGRkRcdTc1NjVcdTVCRkNcdTUxNjVcdTc2ODRcdTY1ODdcdTRFRjZcdUZGMENcdTRFMERcdTVCRjlcdTU5MTZcdTkwRThcdTVFOTNcdThGREJcdTg4NENcdTZERjdcdTZEQzZcclxuXHRcdC8vIFx0XHQvLyBvcHRpb25zUHJlc2V0OiBcImRlZmF1bHRcIiwgLy8gXHU0RjdGXHU3NTI4XHU5RUQ4XHU4QkE0XHU3Njg0XHU5MTREXHU3RjZFXHU5ODg0XHU4QkJFXHJcblx0XHQvLyBcdFx0Ly8gcmVuYW1lUHJvcGVydGllczogZmFsc2UsIC8vIFx1Nzk4MVx1NzUyOFx1NUM1RVx1NjAyN1x1OTFDRFx1NTQ3RFx1NTQwRFxyXG5cdFx0Ly8gXHRcdC8vIHJlbmFtZVByb3BlcnRpZXNNb2RlOiBcInNhZmVcIiwgLy8gXHU1QzVFXHU2MDI3XHU5MUNEXHU1NDdEXHU1NDBEXHU3Njg0XHU1Qjg5XHU1MTY4XHU2QTIxXHU1RjBGXHJcblx0XHQvLyBcdFx0Ly8gc291cmNlTWFwU291cmNlc01vZGU6IFwic291cmNlcy1jb250ZW50XCIsIC8vIFx1OEJCRVx1N0Y2RVx1NkU5MFx1NjYyMFx1NUMwNFx1NzY4NFx1NkU5MFx1NkEyMVx1NUYwRlx1RkYwQ1x1NEY3Rlx1NzUyOFx1NkU5MFx1NTE4NVx1NUJCOVxyXG5cclxuXHRcdC8vIFx0XHQvLyBzdHJpbmdBcnJheUNhbGxzVHJhbnNmb3JtOiB0cnVlLCAvLyBcdTU0MkZcdTc1MjhcdTVCNTdcdTdCMjZcdTRFMzJcdTY1NzBcdTdFQzRcdThDMDNcdTc1MjhcdThGNkNcdTYzNjJcdUZGMENcdTU4OUVcdTVGM0FcdTZERjdcdTZEQzZcclxuXHRcdC8vIFx0XHQvLyBzdHJpbmdBcnJheUNhbGxzVHJhbnNmb3JtVGhyZXNob2xkOiAwLjUsIC8vIFx1NUI1N1x1N0IyNlx1NEUzMlx1NjU3MFx1N0VDNFx1OEMwM1x1NzUyOFx1OEY2Q1x1NjM2Mlx1NzY4NFx1OTYwOFx1NTAzQ1x1RkYwQ1x1ODg2OFx1NzkzQSA1MCUgXHU3Njg0XHU4QzAzXHU3NTI4XHU0RjFBXHU4OEFCXHU4RjZDXHU2MzYyXHJcblxyXG5cdFx0Ly8gXHRcdC8vIHN0cmluZ0FycmF5SW5kZXhlc1R5cGU6IFtcImhleGFkZWNpbWFsLW51bWJlclwiXSwgLy8gXHU1QjU3XHU3QjI2XHU0RTMyXHU2NTcwXHU3RUM0XHU3RDIyXHU1RjE1XHU3Njg0XHU3QzdCXHU1NzhCXHU0RTNBXHU1MzQxXHU1MTZEXHU4RkRCXHU1MjM2XHU2NTcwXHU1QjU3XHJcblx0XHQvLyBcdFx0Ly8gc3RyaW5nQXJyYXlJbmRleFNoaWZ0OiB0cnVlLCAvLyBcdTU0MkZcdTc1MjhcdTVCNTdcdTdCMjZcdTRFMzJcdTY1NzBcdTdFQzRcdTdEMjJcdTVGMTVcdTRGNERcdTc5RkJcclxuXHRcdC8vIFx0XHQvLyBzdHJpbmdBcnJheVJvdGF0ZTogdHJ1ZSwgLy8gXHU1NDJGXHU3NTI4XHU1QjU3XHU3QjI2XHU0RTMyXHU2NTcwXHU3RUM0XHU2NUNCXHU4RjZDXHJcblx0XHQvLyBcdFx0Ly8gc3RyaW5nQXJyYXlXcmFwcGVyc0NvdW50OiAxLCAvLyBcdTVCNTdcdTdCMjZcdTRFMzJcdTY1NzBcdTdFQzRcdTUzMDVcdTg4QzVcdTU2NjhcdTc2ODRcdTY1NzBcdTkxQ0ZcclxuXHRcdC8vIFx0XHQvLyBzdHJpbmdBcnJheVdyYXBwZXJzQ2hhaW5lZENhbGxzOiB0cnVlLCAvLyBcdTU0MkZcdTc1MjhcdTVCNTdcdTdCMjZcdTRFMzJcdTY1NzBcdTdFQzRcdTUzMDVcdTg4QzVcdTU2NjhcdTc2ODRcdTk0RkVcdTVGMEZcdThDMDNcdTc1MjhcclxuXHRcdC8vIFx0XHQvLyBzdHJpbmdBcnJheVdyYXBwZXJzUGFyYW1ldGVyc01heENvdW50OiAyLCAvLyBcdTVCNTdcdTdCMjZcdTRFMzJcdTY1NzBcdTdFQzRcdTUzMDVcdTg4QzVcdTU2NjhcdTY3MDBcdTU5MjdcdTUzQzJcdTY1NzBcdTRFMkFcdTY1NzBcclxuXHRcdC8vIFx0XHQvLyBzdHJpbmdBcnJheVdyYXBwZXJzVHlwZTogXCJ2YXJpYWJsZVwiLCAvLyBcdTRGN0ZcdTc1MjhcdTUzRDhcdTkxQ0ZcdTdDN0JcdTU3OEJcdTc2ODRcdTVCNTdcdTdCMjZcdTRFMzJcdTY1NzBcdTdFQzRcdTUzMDVcdTg4QzVcdTU2NjhcclxuXHJcblx0XHQvLyBcdFx0Ly8gYXNzdW1lRnVuY3Rpb25XcmFwcGVyOiB0cnVlLCAvLyBcdTUwNDdcdThCQkVcdTUxRkRcdTY1NzBcdTg4QUJcdTUzMDVcdTg4QzVcdUZGMENcdTk2MzJcdTZCNjJcdTg4QUJcdTc2RjRcdTYzQTVcdThDMDNcdTc1MjhcclxuXHRcdC8vIFx0XHQvLyBiaW5kOiB0cnVlLCAvLyBcdTU0MkZcdTc1MjggYmluZCBcdTdFRDFcdTVCOUFcdUZGMENcdTU4OUVcdTUyQTBcdTZERjdcdTZEQzZcdTk2QkVcdTVFQTZcclxuXHRcdC8vIFx0XHQvLyBjb250cm9sRmxvd0ZsYXR0ZW5pbmdNYXhEZXB0aDogMiwgLy8gXHU2M0E3XHU1MjM2XHU2RDQxXHU1RTczXHU1NzY2XHU1MzE2XHU3Njg0XHU2NzAwXHU1OTI3XHU2REYxXHU1RUE2XHVGRjBDXHU5MDdGXHU1MTREXHU4RkM3XHU1RUE2XHU1RTczXHU1NzY2XHU1MzE2XHJcblx0XHQvLyBcdFx0Ly8gcm90YXRlU3RyaW5nczogdHJ1ZSAvLyBcdTU0MkZcdTc1MjhcdTVCNTdcdTdCMjZcdTRFMzJcdTY1Q0JcdThGNkNcdUZGMENcdTU4OUVcdTUyQTBcdTZERjdcdTZEQzZcdTU5MERcdTY3NDJcdTVFQTZcclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfSksXHJcblx0XHR2dWUoKSxcclxuXHRcdENvbXBvbmVudHMoe1xyXG5cdFx0XHRyZXNvbHZlcnM6IFtWYW50UmVzb2x2ZXIoKV0sXHJcblx0XHR9KSxcclxuXHRcdERlZmluZU9wdGlvbnMoKSxcclxuXHRcdGlzVmlzdWFsaXplciAmJiB2aXN1YWxpemVyKHtcclxuXHRcdFx0Z3ppcFNpemU6IHRydWVcclxuXHRcdH0pLFxyXG5cdFx0bGVnYWN5KHtcclxuXHRcdFx0dGFyZ2V0czogWydkZWZhdWx0cycsICdub3QgSUUgMTEnXSxcclxuXHRcdH0pLFxyXG5cdF0sXHJcblx0Y3NzOiB7XHJcblx0XHRwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcblx0XHRcdHNjc3M6IHtcclxuXHRcdFx0XHRhZGRpdGlvbmFsRGF0YTogYEBpbXBvcnQgXCJAL2Fzc2V0cy9jc3MvdmFyaWFibGUuc2Nzc1wiO2BcclxuXHRcdFx0fSxcclxuXHRcdH1cclxuXHR9LFxyXG5cdHNlcnZlcjoge1xyXG5cdFx0b3BlbjogdHJ1ZSxcclxuXHRcdHBvcnQ6IDgwODUsXHJcblx0XHRobXI6IHRydWUsXHJcblx0XHRob3N0OiAnMC4wLjAuMCcsXHJcblx0XHRwcm94eToge1xyXG5cdFx0XHRcIi9hcGlcIjoge1xyXG5cdFx0XHRcdHRhcmdldDogXCJodHRwczovLzEwNC4yMzMuMjEwLjM1OjgwODVcIixcclxuXHRcdFx0XHQvLyB0YXJnZXQ6IFwiaHR0cDovLzE5OC4xMy4zOS4xMDk6ODA4MVwiLFxyXG5cdFx0XHRcdGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuXHRcdFx0XHQvLyByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKC9eXFwvd2FwLywgXCJcIiksXHJcblx0XHRcdFx0c2VjdXJlOiBmYWxzZVxyXG5cdFx0XHR9LFxyXG5cdFx0fSxcclxuXHR9LFxyXG5cdHJlc29sdmU6IHtcclxuXHRcdGRlZHVwZTogW1xyXG5cdFx0XHQndnVlJ1xyXG5cdFx0XSxcclxuXHRcdGFsaWFzOiB7XHJcblx0XHRcdCd2dWUtaTE4bic6ICd2dWUtaTE4bi9kaXN0L3Z1ZS1pMThuLmNqcy5qcycsXHJcblx0XHRcdFwiflwiOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi8nKSxcclxuXHRcdFx0XCJAXCI6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdzcmMnKSxcclxuXHRcdH1cclxuXHR9LFxyXG5cdGJ1aWxkOiB7XHJcblx0XHRhc3NldHNEaXI6IFwic3RhdGljXCIsXHJcblx0XHRyb2xsdXBPcHRpb25zOiB7XHJcblx0XHRcdGlucHV0OiB7XHJcblx0XHRcdFx0aW5kZXg6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIFwiaW5kZXguaHRtbFwiKSxcclxuXHRcdFx0fSxcclxuXHRcdFx0b3V0cHV0OiB7XHJcblx0XHRcdFx0Y2h1bmtGaWxlTmFtZXM6ICdqcy9bbmFtZV0tW2hhc2hdLmpzJyxcclxuXHRcdFx0XHRlbnRyeUZpbGVOYW1lczogXCJqcy9bbmFtZV0tW2hhc2hdLmpzXCIsXHJcblx0XHRcdFx0YXNzZXRGaWxlTmFtZXM6IFwiW2V4dF0vbmFtZS1baGFzaF0uW2V4dF1cIlxyXG5cdFx0XHR9LFxyXG5cdFx0fSxcclxuXHR9LFxyXG5cdGV4dGVybmFsczogWyd2dWUnXVxyXG59KVxyXG5cclxuY29uc3QgZ2xvYmFsU2FzcyA9IGNvbmZpZyA9PiB7XHJcblx0Y29uc3Qgb25lT2ZzTWFwID0gY29uZmlnLm1vZHVsZS5ydWxlKCdzY3NzJykub25lT2ZzLnN0b3JlXHJcblx0b25lT2ZzTWFwLmZvckVhY2goaXRlbSA9PiB7XHJcblx0XHRpdGVtXHJcblx0XHRcdC51c2UoJ3Nhc3MtcmVzb3VyY2VzLWxvYWRlcicpXHJcblx0XHRcdC5sb2FkZXIoJ3Nhc3MtcmVzb3VyY2VzLWxvYWRlcicpXHJcblx0XHRcdC5vcHRpb25zKHtcclxuXHRcdFx0XHRyZXNvdXJjZXM6ICdAL2Fzc2V0cy9jc3MvaW5pdC5zY3NzJ1xyXG5cdFx0XHR9KVxyXG5cdFx0XHQuZW5kKClcclxuXHR9KTtcclxufSJdLAogICJtYXBwaW5ncyI6ICI7QUFBcVE7QUFBQSxFQUNwUTtBQUFBLE9BQ007QUFDUCxPQUFPLFNBQVM7QUFDaEIsT0FBTyxVQUFVO0FBQ2pCLE9BQU8sZ0JBQWdCO0FBQ3ZCO0FBQUEsRUFDQztBQUFBLE9BQ007QUFDUCxPQUFPLG1CQUFtQjtBQUMxQjtBQUFBLEVBQ0M7QUFBQSxPQUNNO0FBQ1AsT0FBTyxZQUFZO0FBQ25CLE9BQU8sZ0JBQWdCO0FBZHZCLElBQU0sbUNBQW1DO0FBZXpDLElBQU0sZUFBZSxRQUFRLElBQUksZUFBZTtBQUNoRCxJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMzQixNQUFNO0FBQUEsRUFFTixTQUFTO0FBQUEsSUFtRVIsSUFBSTtBQUFBLElBQ0osV0FBVztBQUFBLE1BQ1YsV0FBVyxDQUFDLGFBQWEsQ0FBQztBQUFBLElBQzNCLENBQUM7QUFBQSxJQUNELGNBQWM7QUFBQSxJQUNkLGdCQUFnQixXQUFXO0FBQUEsTUFDMUIsVUFBVTtBQUFBLElBQ1gsQ0FBQztBQUFBLElBQ0QsT0FBTztBQUFBLE1BQ04sU0FBUyxDQUFDLFlBQVksV0FBVztBQUFBLElBQ2xDLENBQUM7QUFBQSxFQUNGO0FBQUEsRUFDQSxLQUFLO0FBQUEsSUFDSixxQkFBcUI7QUFBQSxNQUNwQixNQUFNO0FBQUEsUUFDTCxnQkFBZ0I7QUFBQSxNQUNqQjtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsTUFDTixRQUFRO0FBQUEsUUFDUCxRQUFRO0FBQUEsUUFFUixjQUFjO0FBQUEsUUFFZCxRQUFRO0FBQUEsTUFDVDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUixRQUFRO0FBQUEsTUFDUDtBQUFBLElBQ0Q7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNOLFlBQVk7QUFBQSxNQUNaLEtBQUssS0FBSyxRQUFRLGtDQUFXLElBQUk7QUFBQSxNQUNqQyxLQUFLLEtBQUssUUFBUSxrQ0FBVyxLQUFLO0FBQUEsSUFDbkM7QUFBQSxFQUNEO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTixXQUFXO0FBQUEsSUFDWCxlQUFlO0FBQUEsTUFDZCxPQUFPO0FBQUEsUUFDTixPQUFPLEtBQUssUUFBUSxrQ0FBVyxZQUFZO0FBQUEsTUFDNUM7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNQLGdCQUFnQjtBQUFBLFFBQ2hCLGdCQUFnQjtBQUFBLFFBQ2hCLGdCQUFnQjtBQUFBLE1BQ2pCO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUNBLFdBQVcsQ0FBQyxLQUFLO0FBQ2xCLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==