import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/components/SettingsPanel.vue");import { defineComponent as _defineComponent } from "/@fs/D:/dndClaw/agent-console/node_modules/.vite/deps/vue.js?v=4266a811"; import { computed, reactive, ref } from "/@fs/D:/dndClaw/agent-console/node_modules/.vite/deps/vue.js?v=4266a811"; import { agentSettings } from "/mock.ts"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "SettingsPanel", props: { view: { type: String, required: true } }, emits: ["back"], setup(__props, { expose: __expose }) { __expose(); const props = __props; const titleMap = { features: "功能开关", api: "大模型 API 设置", workflow: "日常工作流管理" }; const title = computed(() => titleMap[props.view] ?? "设置"); const features = agentSettings; const providers = [ { key: "qianfan_v2", label: "文心千帆 v2", description: "Bearer Token 方式,推荐使用", fields: [ { key: "baseUrl", label: "Base URL", type: "text", default: "https://qianfan.baidubce.com/v2/chat/completions" }, { key: "authorization", label: "Authorization", type: "text", default: "Bearer bce-v3/ALTAK-t6cEDUmPPSmoYJbGUPj2f/c136be53cb9d69e2990dad6030c9e19b1708b284" }, { key: "model", label: "模型", type: "text", default: "deepseek-v3.2" }, { key: "temperature", label: "Temperature", type: "number", default: 0.934, step: 0.01 } ] }, { key: "openai", label: "OpenAI 兼容(OpenAPI)", description: "支持 OpenAI 及兼容服务(DeepSeek、通义、智谱等)", fields: [ { key: "baseUrl", label: "Base URL", type: "text", default: "https://api.openai.com/v1", placeholder: "https://api.openai.com/v1" }, { key: "apiKey", label: "API Key", type: "password", default: "", placeholder: "sk-..." }, { key: "model", label: "模型", type: "text", default: "gpt-4o-mini", placeholder: "gpt-4o-mini" }, { key: "temperature", label: "Temperature", type: "number", default: 0.7, step: 0.01 } ] } ]; const selectedProvider = ref("qianfan_v2"); const currentProvider = computed(() => providers.find((p) => p.key === selectedProvider.value)); const apiForm = reactive({}); const saving = ref(false); const testResult = ref(""); const testOk = ref(false); function fillDefaults() { Object.keys(apiForm).forEach((k) => delete apiForm[k]); for (const f of currentProvider.value.fields) { apiForm[f.key] = f.default; } } fillDefaults(); function onProviderChange() { fillDefaults(); testResult.value = ""; } async function testApi() { const provider = selectedProvider.value; const baseUrl = String(apiForm.baseUrl || ""); const model = String(apiForm.model || ""); const temperature = Number(apiForm.temperature ?? 0.7); let url = baseUrl; let headers = { "Content-Type": "application/json" }; const body = { model, messages: [{ role: "user", content: '你好,请只回复"连接成功"四个字' }], temperature, stream: false }; if (provider === "qianfan_v2") { headers["Authorization"] = String(apiForm.authorization || ""); } else { if (!baseUrl.endsWith("/chat/completions")) { url = baseUrl.replace(/\/$/, "") + "/chat/completions"; } headers["Authorization"] = "Bearer " + String(apiForm.apiKey || ""); } try { const res = await fetch(url, { method: "POST", headers, body: JSON.stringify(body) }); const data = await res.json(); if (!res.ok) { testResult.value = `✗ 保存失败,连通性测试未通过:HTTP ${res.status} ${data?.error?.message || res.statusText}`; return false; } const content = data?.choices?.[0]?.message?.content; if (content) { return true; } testResult.value = `✗ 保存失败,响应格式异常:${JSON.stringify(data).slice(0, 120)}`; return false; } catch (e) { testResult.value = `✗ 保存失败,请求异常:${e?.message || String(e)}(可能是 CORS 或网络问题)`; return false; } } async function saveAndTest() { saving.value = true; testResult.value = ""; testOk.value = false; const ok = await testApi(); if (ok) { const providerLabel = currentProvider.value?.label ?? selectedProvider.value; const model = String(apiForm.model || ""); const name = `${providerLabel} · ${model}`; try { if (!window.electronAPI) throw new Error("electronAPI 未注入"); const saved = await window.electronAPI.callAgent("llm:save", { name, provider: selectedProvider.value, config: { ...apiForm } }); testOk.value = true; testResult.value = `✓ 连通性测试通过,配置「${name}」已存储到 agent-core (ID: ${saved.id.slice(0, 8)})`; } catch (e) { testResult.value = `✗ 存储失败:${e?.message || String(e)}`; } } saving.value = false; } const workflows = ref([ { id: 1, name: "每日经营数据汇总", desc: "每日 09:00 自动汇总前一日经营数据并生成报表", enabled: true }, { id: 2, name: "门店巡检提醒", desc: "每周一 10:00 推送巡检任务到负责人", enabled: true }, { id: 3, name: "员工排班自动优化", desc: "根据客流预测自动调整排班建议", enabled: false }, { id: 4, name: "订单异常预警", desc: "实时监控订单退款率,超阈值自动告警", enabled: true } ]); function addWorkflow() { const name = prompt("请输入工作流名称:"); if (name) { workflows.value.push({ id: Date.now(), name, desc: "新建的工作流", enabled: false }); } } const __returned__ = { props, titleMap, title, features, providers, selectedProvider, currentProvider, apiForm, saving, testResult, testOk, fillDefaults, onProviderChange, testApi, saveAndTest, workflows, addWorkflow }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelSelect as _vModelSelect, withDirectives as _withDirectives, vModelDynamic as _vModelDynamic, vModelText as _vModelText, normalizeClass as _normalizeClass } from "/@fs/D:/dndClaw/agent-console/node_modules/.vite/deps/vue.js?v=4266a811"; const _hoisted_1 = { class: "settings" }; const _hoisted_2 = { class: "header" }; const _hoisted_3 = { class: "page-title" }; const _hoisted_4 = { class: "body" }; const _hoisted_5 = { key: 0, class: "card" }; const _hoisted_6 = { class: "switch-label-text" }; const _hoisted_7 = ["checked", "onChange"]; const _hoisted_8 = { class: "card" }; const _hoisted_9 = { class: "form-group" }; const _hoisted_10 = ["value"]; const _hoisted_11 = { class: "hint" }; const _hoisted_12 = ["onUpdate:modelValue", "type", "placeholder"]; const _hoisted_13 = ["onUpdate:modelValue", "step"]; const _hoisted_14 = ["onUpdate:modelValue"]; const _hoisted_15 = ["value"]; const _hoisted_16 = { class: "btn-row" }; const _hoisted_17 = ["disabled"]; const _hoisted_18 = { class: "card" }; const _hoisted_19 = { class: "wf-info" }; const _hoisted_20 = { class: "wf-name" }; const _hoisted_21 = { class: "wf-desc" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return _openBlock(), _createElementBlock("section", _hoisted_1, [ _createCommentVNode(" 顶部 "), _createElementVNode("header", _hoisted_2, [ _createElementVNode("button", { class: "back-btn", onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("back")) }, "← 返回对话"), _createElementVNode( "div", _hoisted_3, _toDisplayString($setup.title), 1 /* TEXT */ ) ]), _createElementVNode("div", _hoisted_4, [ _createCommentVNode(" 功能开关 "), $props.view === "features" ? (_openBlock(), _createElementBlock("div", _hoisted_5, [ _cache[2] || (_cache[2] = _createElementVNode( "div", { class: "card-title" }, "智能体行为", -1 /* CACHED */ )), (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.features, (s) => { return _openBlock(), _createElementBlock("label", { key: s.key, class: "switch-row" }, [ _createElementVNode( "span", _hoisted_6, _toDisplayString(s.label), 1 /* TEXT */ ), _createElementVNode("input", { type: "checkbox", checked: s.value, onChange: ($event) => s.value = $event.target.checked }, null, 40, _hoisted_7) ]); }), 128 /* KEYED_FRAGMENT */ )) ])) : $props.view === "api" ? (_openBlock(), _createElementBlock( _Fragment, { key: 1 }, [ _createCommentVNode(" 大模型 API 设置 "), _createElementVNode("div", _hoisted_8, [ _cache[4] || (_cache[4] = _createElementVNode( "div", { class: "card-title" }, "大模型 API 设置", -1 /* CACHED */ )), _createCommentVNode(" 接入方式选择 "), _createElementVNode("div", _hoisted_9, [ _cache[3] || (_cache[3] = _createElementVNode( "label", null, "接入方式", -1 /* CACHED */ )), _withDirectives(_createElementVNode( "select", { "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.selectedProvider = $event), onChange: $setup.onProviderChange }, [ (_openBlock(), _createElementBlock( _Fragment, null, _renderList($setup.providers, (p) => { return _createElementVNode("option", { key: p.key, value: p.key }, _toDisplayString(p.label), 9, _hoisted_10); }), 64 /* STABLE_FRAGMENT */ )) ], 544 /* NEED_HYDRATION, NEED_PATCH */ ), [ [_vModelSelect, $setup.selectedProvider] ]), _createElementVNode( "div", _hoisted_11, _toDisplayString($setup.currentProvider?.description), 1 /* TEXT */ ) ]), _createCommentVNode(" 动态字段 "), (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.currentProvider?.fields, (f) => { return _openBlock(), _createElementBlock("div", { key: f.key, class: "form-group" }, [ _createElementVNode( "label", null, _toDisplayString(f.label), 1 /* TEXT */ ), f.type === "text" || f.type === "password" ? _withDirectives((_openBlock(), _createElementBlock("input", { key: 0, "onUpdate:modelValue": ($event) => $setup.apiForm[f.key] = $event, type: f.type, placeholder: f.placeholder }, null, 8, _hoisted_12)), [ [_vModelDynamic, $setup.apiForm[f.key]] ]) : f.type === "number" ? _withDirectives((_openBlock(), _createElementBlock("input", { key: 1, "onUpdate:modelValue": ($event) => $setup.apiForm[f.key] = $event, type: "number", step: f.step ?? 0.01 }, null, 8, _hoisted_13)), [ [ _vModelText, $setup.apiForm[f.key], void 0, { number: true } ] ]) : f.type === "select" ? _withDirectives((_openBlock(), _createElementBlock("select", { key: 2, "onUpdate:modelValue": ($event) => $setup.apiForm[f.key] = $event }, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList(f.options, (opt) => { return _openBlock(), _createElementBlock("option", { key: opt, value: opt }, _toDisplayString(opt), 9, _hoisted_15); }), 128 /* KEYED_FRAGMENT */ )) ], 8, _hoisted_14)), [ [_vModelSelect, $setup.apiForm[f.key]] ]) : _createCommentVNode("v-if", true) ]); }), 128 /* KEYED_FRAGMENT */ )), _createElementVNode("div", _hoisted_16, [ _createElementVNode("button", { class: "save-btn", disabled: $setup.saving, onClick: $setup.saveAndTest }, _toDisplayString($setup.saving ? "测试中…" : "测试并保存"), 9, _hoisted_17) ]), $setup.testResult ? (_openBlock(), _createElementBlock( "div", { key: 0, class: _normalizeClass(["test-result", $setup.testOk ? "ok" : "err"]) }, _toDisplayString($setup.testResult), 3 /* TEXT, CLASS */ )) : _createCommentVNode("v-if", true) ]) ], 64 /* STABLE_FRAGMENT */ )) : $props.view === "workflow" ? (_openBlock(), _createElementBlock( _Fragment, { key: 2 }, [ _createCommentVNode(" 日常工作流管理 "), _createElementVNode("div", _hoisted_18, [ _createElementVNode("div", { class: "card-head" }, [ _cache[5] || (_cache[5] = _createElementVNode( "div", { class: "card-title" }, "工作流列表", -1 /* CACHED */ )), _createElementVNode("button", { class: "add-btn", onClick: $setup.addWorkflow }, "+ 新建") ]), (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.workflows, (w) => { return _openBlock(), _createElementBlock("div", { key: w.id, class: "workflow-item" }, [ _createElementVNode("div", _hoisted_19, [ _createElementVNode( "div", _hoisted_20, _toDisplayString(w.name), 1 /* TEXT */ ), _createElementVNode( "div", _hoisted_21, _toDisplayString(w.desc), 1 /* TEXT */ ) ]), _createElementVNode( "div", { class: _normalizeClass(["wf-status", w.enabled ? "on" : "off"]) }, _toDisplayString(w.enabled ? "已启用" : "已停用"), 3 /* TEXT, CLASS */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ], 64 /* STABLE_FRAGMENT */ )) : _createCommentVNode("v-if", true) ]) ]); } import "/components/SettingsPanel.vue?vue&type=style&index=0&scoped=b65b5cd7&lang.css"; _sfc_main.__hmrId = "b65b5cd7"; typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main); import.meta.hot.on("file-changed", ({ file }) => { __VUE_HMR_RUNTIME__.CHANGED_FILE = file; }); import.meta.hot.accept((mod) => { if (!mod) return; const { default: updated, _rerender_only } = mod; if (_rerender_only) { __VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render); } else { __VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated); } }); import _export_sfc from "/@id/__x00__plugin-vue:export-helper"; export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-b65b5cd7"], ["__file", "D:/dndClaw/agent-console/src/renderer/components/SettingsPanel.vue"]]); //# sourceMappingURL=data:application/json;base64,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QUFBQSxzQkFBdkM7QUFBQSxzQkFBdUMsaUJBQWYsRUFBRSxJQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUE7a0JBRWhDO0FBQUEsb0JBRU07QUFBQTtBQUFBLHNCQUZELE9BQUssaUJBQUMsYUFBb0IsRUFBRSxVQUFPO0FBQUE7cUNBQ25DLEVBQUUsVUFBTztBQUFBO0FBQUE7QUFBQTtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJTZXR0aW5nc1BhbmVsLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3NcIj5cbiAgICA8IS0tIOmhtumDqCAtLT5cbiAgICA8aGVhZGVyIGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYmFjay1idG5cIiBAY2xpY2s9XCIkZW1pdCgnYmFjaycpXCI+4oaQIOi/lOWbnuWvueivnTwvYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtdGl0bGVcIj57eyB0aXRsZSB9fTwvZGl2PlxuICAgIDwvaGVhZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImJvZHlcIj5cbiAgICAgIDwhLS0g5Yqf6IO95byA5YWzIC0tPlxuICAgICAgPHRlbXBsYXRlIHYtaWY9XCJ2aWV3ID09PSAnZmVhdHVyZXMnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj7mmbrog73kvZPooYzkuLo8L2Rpdj5cbiAgICAgICAgICA8bGFiZWwgdi1mb3I9XCJzIGluIGZlYXR1cmVzXCIgOmtleT1cInMua2V5XCIgY2xhc3M9XCJzd2l0Y2gtcm93XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN3aXRjaC1sYWJlbC10ZXh0XCI+e3sgcy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICA6Y2hlY2tlZD1cInMudmFsdWVcIlxuICAgICAgICAgICAgICBAY2hhbmdlPVwicy52YWx1ZSA9ICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgIDwhLS0g5aSn5qih5Z6LIEFQSSDorr7nva4gLS0+XG4gICAgICA8dGVtcGxhdGUgdi1lbHNlLWlmPVwidmlldyA9PT0gJ2FwaSdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPuWkp+aooeWeiyBBUEkg6K6+572uPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIOaOpeWFpeaWueW8j+mAieaLqSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsPuaOpeWFpeaWueW8jzwvbGFiZWw+XG4gICAgICAgICAgICA8c2VsZWN0IHYtbW9kZWw9XCJzZWxlY3RlZFByb3ZpZGVyXCIgQGNoYW5nZT1cIm9uUHJvdmlkZXJDaGFuZ2VcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cInAgaW4gcHJvdmlkZXJzXCIgOmtleT1cInAua2V5XCIgOnZhbHVlPVwicC5rZXlcIj5cbiAgICAgICAgICAgICAgICB7eyBwLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGludFwiPnt7IGN1cnJlbnRQcm92aWRlcj8uZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0g5Yqo5oCB5a2X5q61IC0tPlxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cImYgaW4gY3VycmVudFByb3ZpZGVyPy5maWVsZHNcIiA6a2V5PVwiZi5rZXlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxsYWJlbD57eyBmLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdi1pZj1cImYudHlwZSA9PT0gJ3RleHQnIHx8IGYudHlwZSA9PT0gJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cImFwaUZvcm1bZi5rZXldXCJcbiAgICAgICAgICAgICAgICA6dHlwZT1cImYudHlwZVwiXG4gICAgICAgICAgICAgICAgOnBsYWNlaG9sZGVyPVwiZi5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImYudHlwZSA9PT0gJ251bWJlcidcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWwubnVtYmVyPVwiYXBpRm9ybVtmLmtleV1cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgIDpzdGVwPVwiZi5zdGVwID8/IDAuMDFcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c2VsZWN0IHYtZWxzZS1pZj1cImYudHlwZSA9PT0gJ3NlbGVjdCdcIiB2LW1vZGVsPVwiYXBpRm9ybVtmLmtleV1cIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwib3B0IGluIGYub3B0aW9uc1wiIDprZXk9XCJvcHRcIiA6dmFsdWU9XCJvcHRcIj57eyBvcHQgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1yb3dcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzYXZlLWJ0blwiIDpkaXNhYmxlZD1cInNhdmluZ1wiIEBjbGljaz1cInNhdmVBbmRUZXN0XCI+XG4gICAgICAgICAgICAgIHt7IHNhdmluZyA/ICfmtYvor5XkuK3igKYnIDogJ+a1i+ivleW5tuS/neWtmCcgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgdi1pZj1cInRlc3RSZXN1bHRcIiBjbGFzcz1cInRlc3QtcmVzdWx0XCIgOmNsYXNzPVwidGVzdE9rID8gJ29rJyA6ICdlcnInXCI+XG4gICAgICAgICAgICB7eyB0ZXN0UmVzdWx0IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgPCEtLSDml6XluLjlt6XkvZzmtYHnrqHnkIYgLS0+XG4gICAgICA8dGVtcGxhdGUgdi1lbHNlLWlmPVwidmlldyA9PT0gJ3dvcmtmbG93J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+5bel5L2c5rWB5YiX6KGoPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIEBjbGljaz1cImFkZFdvcmtmbG93XCI+77yLIOaWsOW7ujwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgdi1mb3I9XCJ3IGluIHdvcmtmbG93c1wiIDprZXk9XCJ3LmlkXCIgY2xhc3M9XCJ3b3JrZmxvdy1pdGVtXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtaW5mb1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtbmFtZVwiPnt7IHcubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtZGVzY1wiPnt7IHcuZGVzYyB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Ytc3RhdHVzXCIgOmNsYXNzPVwidy5lbmFibGVkID8gJ29uJyA6ICdvZmYnXCI+XG4gICAgICAgICAgICAgIHt7IHcuZW5hYmxlZCA/ICflt7LlkK/nlKgnIDogJ+W3suWBnOeUqCcgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQgeyBjb21wdXRlZCwgcmVhY3RpdmUsIHJlZiB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGFnZW50U2V0dGluZ3MgfSBmcm9tICcuLi9tb2NrJ1xuaW1wb3J0IHR5cGUgeyBWaWV3VHlwZSB9IGZyb20gJy4uL3R5cGVzJ1xuXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHsgdmlldzogVmlld1R5cGUgfT4oKVxuZGVmaW5lRW1pdHM8eyAoZTogJ2JhY2snKTogdm9pZCB9PigpXG5cbmNvbnN0IHRpdGxlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBmZWF0dXJlczogJ+WKn+iDveW8gOWFsycsXG4gIGFwaTogJ+Wkp+aooeWeiyBBUEkg6K6+572uJyxcbiAgd29ya2Zsb3c6ICfml6XluLjlt6XkvZzmtYHnrqHnkIYnXG59XG5jb25zdCB0aXRsZSA9IGNvbXB1dGVkKCgpID0+IHRpdGxlTWFwW3Byb3BzLnZpZXddID8/ICforr7nva4nKVxuXG4vLyDlip/og73lvIDlhbNcbmNvbnN0IGZlYXR1cmVzID0gYWdlbnRTZXR0aW5nc1xuXG4vKiA9PT09PT0g5aSn5qih5Z6LIEFQSSDphY3nva7vvJrlj6/mianlsZUgUHJvdmlkZXIg57uT5p6EID09PT09PSAqL1xuaW50ZXJmYWNlIEZpZWxkRGVmIHtcbiAga2V5OiBzdHJpbmdcbiAgbGFiZWw6IHN0cmluZ1xuICB0eXBlOiAndGV4dCcgfCAncGFzc3dvcmQnIHwgJ251bWJlcicgfCAnc2VsZWN0J1xuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBvcHRpb25zPzogc3RyaW5nW11cbiAgc3RlcD86IG51bWJlclxuICBkZWZhdWx0OiBzdHJpbmcgfCBudW1iZXJcbn1cblxuaW50ZXJmYWNlIFByb3ZpZGVyRGVmIHtcbiAga2V5OiBzdHJpbmdcbiAgbGFiZWw6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGZpZWxkczogRmllbGREZWZbXVxufVxuXG4vLyDmlrDlop7mqKHlnovmjqXlhaXvvJrlnKjmraTmlbDnu4Tmt7vliqDkuIDkuKogUHJvdmlkZXJEZWYg5Y2z5Y+vXG5jb25zdCBwcm92aWRlcnM6IFByb3ZpZGVyRGVmW10gPSBbXG4gIHtcbiAgICBrZXk6ICdxaWFuZmFuX3YyJyxcbiAgICBsYWJlbDogJ+aWh+W/g+WNg+W4hiB2MicsXG4gICAgZGVzY3JpcHRpb246ICdCZWFyZXIgVG9rZW4g5pa55byP77yM5o6o6I2Q5L2/55SoJyxcbiAgICBmaWVsZHM6IFtcbiAgICAgIHsga2V5OiAnYmFzZVVybCcsIGxhYmVsOiAnQmFzZSBVUkwnLCB0eXBlOiAndGV4dCcsIGRlZmF1bHQ6ICdodHRwczovL3FpYW5mYW4uYmFpZHViY2UuY29tL3YyL2NoYXQvY29tcGxldGlvbnMnIH0sXG4gICAgICB7IGtleTogJ2F1dGhvcml6YXRpb24nLCBsYWJlbDogJ0F1dGhvcml6YXRpb24nLCB0eXBlOiAndGV4dCcsIGRlZmF1bHQ6ICdCZWFyZXIgYmNlLXYzL0FMVEFLLXQ2Y0VEVW1QUFNtb1lKYkdVUGoyZi9jMTM2YmU1M2NiOWQ2OWUyOTkwZGFkNjAzMGM5ZTE5YjE3MDhiMjg0JyB9LFxuICAgICAgeyBrZXk6ICdtb2RlbCcsIGxhYmVsOiAn5qih5Z6LJywgdHlwZTogJ3RleHQnLCBkZWZhdWx0OiAnZGVlcHNlZWstdjMuMicgfSxcbiAgICAgIHsga2V5OiAndGVtcGVyYXR1cmUnLCBsYWJlbDogJ1RlbXBlcmF0dXJlJywgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDAuOTM0LCBzdGVwOiAwLjAxIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcGVuYWknLFxuICAgIGxhYmVsOiAnT3BlbkFJIOWFvOWuue+8iE9wZW5BUEnvvIknLFxuICAgIGRlc2NyaXB0aW9uOiAn5pSv5oyBIE9wZW5BSSDlj4rlhbzlrrnmnI3liqHvvIhEZWVwU2Vla+OAgemAmuS5ieOAgeaZuuiwseetie+8iScsXG4gICAgZmllbGRzOiBbXG4gICAgICB7IGtleTogJ2Jhc2VVcmwnLCBsYWJlbDogJ0Jhc2UgVVJMJywgdHlwZTogJ3RleHQnLCBkZWZhdWx0OiAnaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MScsIHBsYWNlaG9sZGVyOiAnaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MScgfSxcbiAgICAgIHsga2V5OiAnYXBpS2V5JywgbGFiZWw6ICdBUEkgS2V5JywgdHlwZTogJ3Bhc3N3b3JkJywgZGVmYXVsdDogJycsIHBsYWNlaG9sZGVyOiAnc2stLi4uJyB9LFxuICAgICAgeyBrZXk6ICdtb2RlbCcsIGxhYmVsOiAn5qih5Z6LJywgdHlwZTogJ3RleHQnLCBkZWZhdWx0OiAnZ3B0LTRvLW1pbmknLCBwbGFjZWhvbGRlcjogJ2dwdC00by1taW5pJyB9LFxuICAgICAgeyBrZXk6ICd0ZW1wZXJhdHVyZScsIGxhYmVsOiAnVGVtcGVyYXR1cmUnLCB0eXBlOiAnbnVtYmVyJywgZGVmYXVsdDogMC43LCBzdGVwOiAwLjAxIH1cbiAgICBdXG4gIH1cbl1cblxuY29uc3Qgc2VsZWN0ZWRQcm92aWRlciA9IHJlZigncWlhbmZhbl92MicpXG5jb25zdCBjdXJyZW50UHJvdmlkZXIgPSBjb21wdXRlZCgoKSA9PiBwcm92aWRlcnMuZmluZCgocCkgPT4gcC5rZXkgPT09IHNlbGVjdGVkUHJvdmlkZXIudmFsdWUpKVxuXG5jb25zdCBhcGlGb3JtID0gcmVhY3RpdmU8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPj4oe30pXG5jb25zdCBzYXZpbmcgPSByZWYoZmFsc2UpXG5jb25zdCB0ZXN0UmVzdWx0ID0gcmVmKCcnKVxuY29uc3QgdGVzdE9rID0gcmVmKGZhbHNlKVxuXG5mdW5jdGlvbiBmaWxsRGVmYXVsdHMoKSB7XG4gIE9iamVjdC5rZXlzKGFwaUZvcm0pLmZvckVhY2goKGspID0+IGRlbGV0ZSBhcGlGb3JtW2tdKVxuICBmb3IgKGNvbnN0IGYgb2YgY3VycmVudFByb3ZpZGVyLnZhbHVlIS5maWVsZHMpIHtcbiAgICBhcGlGb3JtW2Yua2V5XSA9IGYuZGVmYXVsdFxuICB9XG59XG5maWxsRGVmYXVsdHMoKVxuXG5mdW5jdGlvbiBvblByb3ZpZGVyQ2hhbmdlKCkge1xuICBmaWxsRGVmYXVsdHMoKVxuICB0ZXN0UmVzdWx0LnZhbHVlID0gJydcbn1cblxuYXN5bmMgZnVuY3Rpb24gdGVzdEFwaSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcHJvdmlkZXIgPSBzZWxlY3RlZFByb3ZpZGVyLnZhbHVlXG4gIGNvbnN0IGJhc2VVcmwgPSBTdHJpbmcoYXBpRm9ybS5iYXNlVXJsIHx8ICcnKVxuICBjb25zdCBtb2RlbCA9IFN0cmluZyhhcGlGb3JtLm1vZGVsIHx8ICcnKVxuICBjb25zdCB0ZW1wZXJhdHVyZSA9IE51bWJlcihhcGlGb3JtLnRlbXBlcmF0dXJlID8/IDAuNylcblxuICBsZXQgdXJsID0gYmFzZVVybFxuICBsZXQgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XG4gIGNvbnN0IGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIG1vZGVsLFxuICAgIG1lc3NhZ2VzOiBbeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICfkvaDlpb3vvIzor7flj6rlm57lpI1cIui/nuaOpeaIkOWKn1wi5Zub5Liq5a2XJyB9XSxcbiAgICB0ZW1wZXJhdHVyZSxcbiAgICBzdHJlYW06IGZhbHNlXG4gIH1cblxuICBpZiAocHJvdmlkZXIgPT09ICdxaWFuZmFuX3YyJykge1xuICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IFN0cmluZyhhcGlGb3JtLmF1dGhvcml6YXRpb24gfHwgJycpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCFiYXNlVXJsLmVuZHNXaXRoKCcvY2hhdC9jb21wbGV0aW9ucycpKSB7XG4gICAgICB1cmwgPSBiYXNlVXJsLnJlcGxhY2UoL1xcLyQvLCAnJykgKyAnL2NoYXQvY29tcGxldGlvbnMnXG4gICAgfVxuICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdCZWFyZXIgJyArIFN0cmluZyhhcGlGb3JtLmFwaUtleSB8fCAnJylcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KVxuICAgIH0pXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKClcblxuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICB0ZXN0UmVzdWx0LnZhbHVlID0gYOKclyDkv53lrZjlpLHotKXvvIzov57pgJrmgKfmtYvor5XmnKrpgJrov4fvvJpIVFRQICR7cmVzLnN0YXR1c30gJHtkYXRhPy5lcnJvcj8ubWVzc2FnZSB8fCByZXMuc3RhdHVzVGV4dH1gXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gZGF0YT8uY2hvaWNlcz8uWzBdPy5tZXNzYWdlPy5jb250ZW50XG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHRlc3RSZXN1bHQudmFsdWUgPSBg4pyXIOS/neWtmOWksei0pe+8jOWTjeW6lOagvOW8j+W8guW4uO+8miR7SlNPTi5zdHJpbmdpZnkoZGF0YSkuc2xpY2UoMCwgMTIwKX1gXG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIHRlc3RSZXN1bHQudmFsdWUgPSBg4pyXIOS/neWtmOWksei0pe+8jOivt+axguW8guW4uO+8miR7ZT8ubWVzc2FnZSB8fCBTdHJpbmcoZSl977yI5Y+v6IO95pivIENPUlMg5oiW572R57uc6Zeu6aKY77yJYFxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICog5rWL6K+V6YCa6L+H5ZCO77yM6YCa6L+HIElQQyDlsIbphY3nva7lrZjlgqjliLAgYWdlbnQtY29yZe+8iFNRTGl0Ze+8iVxuICogYWdlbnQtY29yZSDkvJroh6rliqjljrvph43vvIjlkIzlkI0gKyDlkIwgcHJvdmlkZXIg5YiZ5pu05paw77yJXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhdmVBbmRUZXN0KCkge1xuICBzYXZpbmcudmFsdWUgPSB0cnVlXG4gIHRlc3RSZXN1bHQudmFsdWUgPSAnJ1xuICB0ZXN0T2sudmFsdWUgPSBmYWxzZVxuXG4gIGNvbnN0IG9rID0gYXdhaXQgdGVzdEFwaSgpXG4gIGlmIChvaykge1xuICAgIGNvbnN0IHByb3ZpZGVyTGFiZWwgPSBjdXJyZW50UHJvdmlkZXIudmFsdWU/LmxhYmVsID8/IHNlbGVjdGVkUHJvdmlkZXIudmFsdWVcbiAgICBjb25zdCBtb2RlbCA9IFN0cmluZyhhcGlGb3JtLm1vZGVsIHx8ICcnKVxuICAgIGNvbnN0IG5hbWUgPSBgJHtwcm92aWRlckxhYmVsfSDCtyAke21vZGVsfWBcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdpbmRvdy5lbGVjdHJvbkFQSSkgdGhyb3cgbmV3IEVycm9yKCdlbGVjdHJvbkFQSSDmnKrms6jlhaUnKVxuICAgICAgLy8g6LCD55SoIGFnZW50LWNvcmUg5L+d5a2Y5YiwIFNRTGl0ZVxuICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB3aW5kb3cuZWxlY3Ryb25BUEkuY2FsbEFnZW50KCdsbG06c2F2ZScsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcHJvdmlkZXI6IHNlbGVjdGVkUHJvdmlkZXIudmFsdWUsXG4gICAgICAgIGNvbmZpZzogeyAuLi5hcGlGb3JtIH1cbiAgICAgIH0pXG5cbiAgICAgIHRlc3RPay52YWx1ZSA9IHRydWVcbiAgICAgIHRlc3RSZXN1bHQudmFsdWUgPSBg4pyTIOi/numAmuaAp+a1i+ivlemAmui/h++8jOmFjee9ruOAjCR7bmFtZX3jgI3lt7LlrZjlgqjliLAgYWdlbnQtY29yZSAoSUQ6ICR7c2F2ZWQuaWQuc2xpY2UoMCwgOCl9KWBcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRlc3RSZXN1bHQudmFsdWUgPSBg4pyXIOWtmOWCqOWksei0pe+8miR7ZT8ubWVzc2FnZSB8fCBTdHJpbmcoZSl9YFxuICAgIH1cbiAgfVxuICBzYXZpbmcudmFsdWUgPSBmYWxzZVxufVxuXG4vKiA9PT09PT0g5bel5L2c5rWBID09PT09PSAqL1xuY29uc3Qgd29ya2Zsb3dzID0gcmVmKFtcbiAgeyBpZDogMSwgbmFtZTogJ+avj+aXpee7j+iQpeaVsOaNruaxh+aAuycsIGRlc2M6ICfmr4/ml6UgMDk6MDAg6Ieq5Yqo5rGH5oC75YmN5LiA5pel57uP6JCl5pWw5o2u5bm255Sf5oiQ5oql6KGoJywgZW5hYmxlZDogdHJ1ZSB9LFxuICB7IGlkOiAyLCBuYW1lOiAn6Zeo5bqX5beh5qOA5o+Q6YaSJywgZGVzYzogJ+avj+WRqOS4gCAxMDowMCDmjqjpgIHlt6Hmo4Dku7vliqHliLDotJ/otKPkuronLCBlbmFibGVkOiB0cnVlIH0sXG4gIHsgaWQ6IDMsIG5hbWU6ICflkZjlt6XmjpLnj63oh6rliqjkvJjljJYnLCBkZXNjOiAn5qC55o2u5a6i5rWB6aKE5rWL6Ieq5Yqo6LCD5pW05o6S54+t5bu66K6uJywgZW5hYmxlZDogZmFsc2UgfSxcbiAgeyBpZDogNCwgbmFtZTogJ+iuouWNleW8guW4uOmihOitpicsIGRlc2M6ICflrp7ml7bnm5HmjqforqLljZXpgIDmrL7njofvvIzotoXpmIjlgLzoh6rliqjlkYroraYnLCBlbmFibGVkOiB0cnVlIH1cbl0pXG5mdW5jdGlvbiBhZGRXb3JrZmxvdygpIHtcbiAgY29uc3QgbmFtZSA9IHByb21wdCgn6K+36L6T5YWl5bel5L2c5rWB5ZCN56ew77yaJylcbiAgaWYgKG5hbWUpIHtcbiAgICB3b3JrZmxvd3MudmFsdWUucHVzaCh7IGlkOiBEYXRlLm5vdygpLCBuYW1lLCBkZXNjOiAn5paw5bu655qE5bel5L2c5rWBJywgZW5hYmxlZDogZmFsc2UgfSlcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4uc2V0dGluZ3Mge1xuICBmbGV4OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1wYW5lbCk7XG4gIG1pbi13aWR0aDogMDtcbn1cbi5oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDE2cHg7XG4gIHBhZGRpbmc6IDE0cHggMjBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XG59XG4uYmFjay1idG4ge1xuICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICBmb250LXNpemU6IDEzcHg7XG4gIHBhZGRpbmc6IDRweCAxMHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG4uYmFjay1idG46aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1ob3Zlcik7XG59XG4ucGFnZS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cbi5ib2R5IHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgcGFkZGluZzogMjRweDtcbn1cbi5jYXJkIHtcbiAgbWF4LXdpZHRoOiA2MDBweDtcbiAgYmFja2dyb3VuZDogdmFyKC0tYmctc2lkZWJhcik7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG4uY2FyZC1oZWFkIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuLmNhcmQtdGl0bGUge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi1ib3R0b206IDE0cHg7XG59XG4uc3dpdGNoLXJvdyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTBweCAwO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbn1cbi5zd2l0Y2gtcm93Omxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuLnN3aXRjaC1sYWJlbC10ZXh0IHtcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuLnN3aXRjaC1yb3cgaW5wdXQge1xuICBhY2NlbnQtY29sb3I6IHZhcigtLXByaW1hcnkpO1xuICB3aWR0aDogMThweDtcbiAgaGVpZ2h0OiAxOHB4O1xufVxuLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDZweDtcbn1cbi5mb3JtLWdyb3VwIGxhYmVsIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XG59XG4uZm9ybS1ncm91cCBpbnB1dCxcbi5mb3JtLWdyb3VwIHNlbGVjdCB7XG4gIHBhZGRpbmc6IDlweCAxMnB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJnLWlucHV0KTtcbiAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cbi5mb3JtLWdyb3VwIGlucHV0OmZvY3VzLFxuLmZvcm0tZ3JvdXAgc2VsZWN0OmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wcmltYXJ5KTtcbiAgb3V0bGluZTogbm9uZTtcbn1cbi5oaW50IHtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XG59XG4uYnRuLXJvdyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcbiAgbWFyZ2luLXRvcDogOHB4O1xufVxuLnNhdmUtYnRuIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeSk7XG4gIGNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiA5cHggMjBweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBmb250LXNpemU6IDEzcHg7XG59XG4uc2F2ZS1idG46ZGlzYWJsZWQge1xuICBvcGFjaXR5OiAwLjY7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4udGVzdC1yZXN1bHQge1xuICBtYXJnaW4tdG9wOiAxMnB4O1xuICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS42O1xufVxuLnRlc3QtcmVzdWx0Lm9rIHtcbiAgYmFja2dyb3VuZDogcmdiYSg3NiwgMjE3LCAxMDAsIDAuMTIpO1xuICBjb2xvcjogdmFyKC0tc3VjY2Vzcyk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXN1Y2Nlc3MpO1xufVxuLnRlc3QtcmVzdWx0LmVyciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjIxLCA4MiwgNzcsIDAuMSk7XG4gIGNvbG9yOiB2YXIoLS1kYW5nZXIpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1kYW5nZXIpO1xufVxuLmFkZC1idG4ge1xuICBjb2xvcjogdmFyKC0tcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cbi53b3JrZmxvdy1pdGVtIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxMnB4IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO1xufVxuLndvcmtmbG93LWl0ZW06bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG4ud2YtbmFtZSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi53Zi1kZXNjIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XG4gIG1hcmdpbi10b3A6IDNweDtcbn1cbi53Zi1zdGF0dXMge1xuICBmb250LXNpemU6IDExcHg7XG4gIHBhZGRpbmc6IDNweCAxMHB4O1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xufVxuLndmLXN0YXR1cy5vbiB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXN1Y2Nlc3MpO1xuICBjb2xvcjogI2ZmZjtcbn1cbi53Zi1zdGF0dXMub2ZmIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tdGV4dC1tdXRlZCk7XG4gIGNvbG9yOiAjZmZmO1xufVxuPC9zdHlsZT5cbiJdLCJmaWxlIjoiRDovZG5kQ2xhdy9hZ2VudC1jb25zb2xlL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL1NldHRpbmdzUGFuZWwudnVlIn0=