| src/router/index.js | ●●●●● patch | view | raw | blame | history | |
| src/views/cryptos/Recharge/rechargePage.vue | ●●●●● patch | view | raw | blame | history | |
| src/views/homePage/index.vue | ●●●●● patch | view | raw | blame | history | |
| src/views/my/assets.vue | ●●●●● patch | view | raw | blame | history | |
| vite.config.js.timestamp-1758512632360.mjs | ●●●●● 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==