login-module-5174.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/views/Login/index.vue");/* unplugin-vue-components disabled */import { ElForm as __unplugin_components_5 } from "/node_modules/.vite/deps/element-plus_es.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_base_style_css.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_form_style_css.js?v=f9805ad8";
  2. import { ElButton as __unplugin_components_4 } from "/node_modules/.vite/deps/element-plus_es.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_base_style_css.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_button_style_css.js?v=f9805ad8";
  3. import { ElCheckbox as __unplugin_components_3 } from "/node_modules/.vite/deps/element-plus_es.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_base_style_css.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_checkbox_style_css.js?v=f9805ad8";
  4. import { ElFormItem as __unplugin_components_2 } from "/node_modules/.vite/deps/element-plus_es.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_base_style_css.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_form-item_style_css.js?v=f9805ad8";
  5. import { ElInput as __unplugin_components_1 } from "/node_modules/.vite/deps/element-plus_es.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_base_style_css.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_input_style_css.js?v=f9805ad8";
  6. import { ElIcon as __unplugin_components_0 } from "/node_modules/.vite/deps/element-plus_es.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_base_style_css.js?v=f9805ad8";import "/node_modules/.vite/deps/element-plus_es_components_icon_style_css.js?v=f9805ad8";
  7. import { defineComponent as _defineComponent } from "/node_modules/.vite/deps/vue.js?v=f9805ad8";
  8. import { reactive, ref } from "/node_modules/.vite/deps/vue.js?v=f9805ad8";
  9. import { useRouter } from "/node_modules/.vite/deps/vue-router.js?v=f9805ad8";
  10. import { Lock, User, VideoPlay } from "/node_modules/.vite/deps/@element-plus_icons-vue.js?v=f9805ad8";
  11. import { ElMessage } from "/node_modules/.vite/deps/element-plus.js?v=f9805ad8";
  12. import AuthPageLayout from "/src/components/AuthPageLayout.vue?t=1776940473650";
  13. import { useAuthStore } from "/src/stores/auth.ts?t=1776940473650";
  14. import { useServerStore } from "/src/stores/server.ts";
  15. const _sfc_main = /* @__PURE__ */ _defineComponent({
  16. __name: "index",
  17. setup(__props, { expose: __expose }) {
  18. __expose();
  19. const router = useRouter();
  20. const authStore = useAuthStore();
  21. const serverStore = useServerStore();
  22. const formRef = ref();
  23. const loading = ref(false);
  24. const form = reactive({
  25. username: "",
  26. password: "",
  27. rememberMe: true
  28. });
  29. const rules = {
  30. username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
  31. password: [{ required: true, message: "请输入密码", trigger: "blur" }]
  32. };
  33. async function handleLogin() {
  34. if (!formRef.value) return;
  35. const valid = await formRef.value.validate().catch(() => false);
  36. if (!valid) return;
  37. loading.value = true;
  38. try {
  39. await authStore.login({
  40. username: form.username,
  41. password: form.password,
  42. rememberMe: form.rememberMe
  43. });
  44. ElMessage.success("登录成功");
  45. router.push("/");
  46. } finally {
  47. loading.value = false;
  48. }
  49. }
  50. const __returned__ = { router, authStore, serverStore, formRef, loading, form, rules, handleLogin, get Lock() {
  51. return Lock;
  52. }, get User() {
  53. return User;
  54. }, get VideoPlay() {
  55. return VideoPlay;
  56. }, AuthPageLayout };
  57. Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
  58. return __returned__;
  59. }
  60. });
  61. import { createElementVNode as _createElementVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, withModifiers as _withModifiers, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock } from "/node_modules/.vite/deps/vue.js?v=f9805ad8";
  62. const _hoisted_1 = { class: "login-card" };
  63. const _hoisted_2 = { class: "login-header" };
  64. const _hoisted_3 = { class: "logo-mark" };
  65. const _hoisted_4 = { class: "form-meta" };
  66. const _hoisted_5 = { class: "server-panel" };
  67. const _hoisted_6 = { class: "server-row" };
  68. const _hoisted_7 = { class: "server-row compact" };
  69. const _hoisted_8 = { class: "login-footer" };
  70. function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
  71. const _component_el_icon = __unplugin_components_0;
  72. const _component_el_input = __unplugin_components_1;
  73. const _component_el_form_item = __unplugin_components_2;
  74. const _component_el_checkbox = __unplugin_components_3;
  75. const _component_el_button = __unplugin_components_4;
  76. const _component_el_form = __unplugin_components_5;
  77. return _openBlock(), _createBlock($setup["AuthPageLayout"], null, {
  78. default: _withCtx(() => [
  79. _createElementVNode("div", _hoisted_1, [
  80. _createElementVNode("div", _hoisted_2, [
  81. _cache[4] || (_cache[4] = _createElementVNode(
  82. "span",
  83. { class: "badge" },
  84. "Workspace Access",
  85. -1
  86. /* CACHED */
  87. )),
  88. _createElementVNode("div", _hoisted_3, [
  89. _createVNode(_component_el_icon, null, {
  90. default: _withCtx(() => [
  91. _createVNode($setup["VideoPlay"])
  92. ]),
  93. _: 1
  94. /* STABLE */
  95. })
  96. ]),
  97. _cache[5] || (_cache[5] = _createElementVNode(
  98. "h2",
  99. null,
  100. "登录智媒通",
  101. -1
  102. /* CACHED */
  103. )),
  104. _cache[6] || (_cache[6] = _createElementVNode(
  105. "p",
  106. null,
  107. "进入本地 Node 工作台,继续账号运营、自动发布与数据分析。",
  108. -1
  109. /* CACHED */
  110. ))
  111. ]),
  112. _createVNode(_component_el_form, {
  113. ref: "formRef",
  114. model: $setup.form,
  115. rules: $setup.rules,
  116. class: "login-form",
  117. onSubmit: _withModifiers($setup.handleLogin, ["prevent"])
  118. }, {
  119. default: _withCtx(() => [
  120. _createVNode(_component_el_form_item, { prop: "username" }, {
  121. default: _withCtx(() => [
  122. _createVNode(_component_el_input, {
  123. modelValue: $setup.form.username,
  124. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.form.username = $event),
  125. placeholder: "用户名或邮箱",
  126. size: "large",
  127. "prefix-icon": $setup.User
  128. }, null, 8, ["modelValue", "prefix-icon"])
  129. ]),
  130. _: 1
  131. /* STABLE */
  132. }),
  133. _createVNode(_component_el_form_item, { prop: "password" }, {
  134. default: _withCtx(() => [
  135. _createVNode(_component_el_input, {
  136. modelValue: $setup.form.password,
  137. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.password = $event),
  138. type: "password",
  139. placeholder: "密码",
  140. size: "large",
  141. "prefix-icon": $setup.Lock,
  142. "show-password": ""
  143. }, null, 8, ["modelValue", "prefix-icon"])
  144. ]),
  145. _: 1
  146. /* STABLE */
  147. }),
  148. _createElementVNode("div", _hoisted_4, [
  149. _createVNode(_component_el_checkbox, {
  150. modelValue: $setup.form.rememberMe,
  151. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.form.rememberMe = $event)
  152. }, {
  153. default: _withCtx(() => [..._cache[7] || (_cache[7] = [
  154. _createTextVNode(
  155. "保持登录",
  156. -1
  157. /* CACHED */
  158. )
  159. ])]),
  160. _: 1
  161. /* STABLE */
  162. }, 8, ["modelValue"]),
  163. _cache[8] || (_cache[8] = _createElementVNode(
  164. "span",
  165. { class: "meta-hint" },
  166. "服务地址自动跟随本地服务",
  167. -1
  168. /* CACHED */
  169. ))
  170. ]),
  171. _createVNode(_component_el_button, {
  172. type: "primary",
  173. size: "large",
  174. loading: $setup.loading,
  175. class: "login-btn",
  176. "native-type": "submit"
  177. }, {
  178. default: _withCtx(() => [..._cache[9] || (_cache[9] = [
  179. _createTextVNode(
  180. " 进入工作台 ",
  181. -1
  182. /* CACHED */
  183. )
  184. ])]),
  185. _: 1
  186. /* STABLE */
  187. }, 8, ["loading"])
  188. ]),
  189. _: 1
  190. /* STABLE */
  191. }, 8, ["model"]),
  192. _createElementVNode("div", _hoisted_5, [
  193. _createElementVNode("div", _hoisted_6, [
  194. _cache[10] || (_cache[10] = _createElementVNode(
  195. "span",
  196. { class: "server-label" },
  197. "当前服务",
  198. -1
  199. /* CACHED */
  200. )),
  201. _createElementVNode(
  202. "strong",
  203. null,
  204. _toDisplayString($setup.serverStore.currentServer?.name || "未配置"),
  205. 1
  206. /* TEXT */
  207. )
  208. ]),
  209. _createElementVNode("div", _hoisted_7, [
  210. _createElementVNode(
  211. "span",
  212. null,
  213. _toDisplayString($setup.serverStore.currentServer?.url || "未读取到地址"),
  214. 1
  215. /* TEXT */
  216. )
  217. ])
  218. ]),
  219. _createElementVNode("div", _hoisted_8, [
  220. _cache[12] || (_cache[12] = _createElementVNode(
  221. "span",
  222. null,
  223. "还没有账号?",
  224. -1
  225. /* CACHED */
  226. )),
  227. _createVNode(_component_el_button, {
  228. type: "primary",
  229. link: "",
  230. onClick: _cache[3] || (_cache[3] = ($event) => _ctx.$router.push("/register"))
  231. }, {
  232. default: _withCtx(() => [..._cache[11] || (_cache[11] = [
  233. _createTextVNode(
  234. "立即注册",
  235. -1
  236. /* CACHED */
  237. )
  238. ])]),
  239. _: 1
  240. /* STABLE */
  241. })
  242. ])
  243. ])
  244. ]),
  245. _: 1
  246. /* STABLE */
  247. });
  248. }
  249. import "/src/views/Login/index.vue?vue&type=style&index=0&scoped=374a0b31&lang.scss";
  250. _sfc_main.__hmrId = "374a0b31";
  251. typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main);
  252. import.meta.hot.on("file-changed", ({ file }) => {
  253. __VUE_HMR_RUNTIME__.CHANGED_FILE = file;
  254. });
  255. import.meta.hot.accept((mod) => {
  256. if (!mod) return;
  257. const { default: updated, _rerender_only } = mod;
  258. if (_rerender_only) {
  259. __VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render);
  260. } else {
  261. __VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated);
  262. }
  263. });
  264. import _export_sfc from "/@id/__x00__plugin-vue:export-helper";
  265. export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-374a0b31"], ["__file", "C:/workspace/multi-platform-media-manage/client/src/views/Login/index.vue"]]);
  266. //# sourceMappingURL=data:application/json;base64,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Imlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImluZGV4LnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyLvu788dGVtcGxhdGU+XHJcbiAgPEF1dGhQYWdlTGF5b3V0PlxyXG4gICAgPGRpdiBjbGFzcz1cImxvZ2luLWNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWhlYWRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIj5Xb3Jrc3BhY2UgQWNjZXNzPC9zcGFuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLW1hcmtcIj5cclxuICAgICAgICAgIDxlbC1pY29uPjxWaWRlb1BsYXkgLz48L2VsLWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGgyPueZu+W9leaZuuWqkumAmjwvaDI+XG4gICAgICAgIDxwPui/m+WFpeacrOWcsCBOb2RlIOW3peS9nOWPsO+8jOe7p+e7rei0puWPt+i/kOiQpeOAgeiHquWKqOWPkeW4g+S4juaVsOaNruWIhuaekOOAgjwvcD5cbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGVsLWZvcm1cclxuICAgICAgICByZWY9XCJmb3JtUmVmXCJcclxuICAgICAgICA6bW9kZWw9XCJmb3JtXCJcclxuICAgICAgICA6cnVsZXM9XCJydWxlc1wiXHJcbiAgICAgICAgY2xhc3M9XCJsb2dpbi1mb3JtXCJcclxuICAgICAgICBAc3VibWl0LnByZXZlbnQ9XCJoYW5kbGVMb2dpblwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZWwtZm9ybS1pdGVtIHByb3A9XCJ1c2VybmFtZVwiPlxyXG4gICAgICAgICAgPGVsLWlucHV0XHJcbiAgICAgICAgICAgIHYtbW9kZWw9XCJmb3JtLnVzZXJuYW1lXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLnlKjmiLflkI3miJbpgq7nrrFcIlxuICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcclxuICAgICAgICAgICAgOnByZWZpeC1pY29uPVwiVXNlclwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZWwtZm9ybS1pdGVtPlxyXG5cclxuICAgICAgICA8ZWwtZm9ybS1pdGVtIHByb3A9XCJwYXNzd29yZFwiPlxyXG4gICAgICAgICAgPGVsLWlucHV0XHJcbiAgICAgICAgICAgIHYtbW9kZWw9XCJmb3JtLnBhc3N3b3JkXCJcclxuICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLlr4bnoIFcIlxuICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcclxuICAgICAgICAgICAgOnByZWZpeC1pY29uPVwiTG9ja1wiXHJcbiAgICAgICAgICAgIHNob3ctcGFzc3dvcmRcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9lbC1mb3JtLWl0ZW0+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLW1ldGFcIj5cclxuICAgICAgICAgIDxlbC1jaGVja2JveCB2LW1vZGVsPVwiZm9ybS5yZW1lbWJlck1lXCI+5L+d5oyB55m75b2VPC9lbC1jaGVja2JveD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldGEtaGludFwiPuacjeWKoeWcsOWdgOiHquWKqOi3n+maj+acrOWcsOacjeWKoTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxlbC1idXR0b25cclxuICAgICAgICAgIHR5cGU9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXHJcbiAgICAgICAgICA6bG9hZGluZz1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgY2xhc3M9XCJsb2dpbi1idG5cIlxyXG4gICAgICAgICAgbmF0aXZlLXR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIOi/m+WFpeW3peS9nOWPsFxuICAgICAgICA8L2VsLWJ1dHRvbj5cbiAgICAgIDwvZWwtZm9ybT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzZXJ2ZXItcGFuZWxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VydmVyLXJvd1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXJ2ZXItbGFiZWxcIj7lvZPliY3mnI3liqE8L3NwYW4+XG4gICAgICAgICAgPHN0cm9uZz57eyBzZXJ2ZXJTdG9yZS5jdXJyZW50U2VydmVyPy5uYW1lIHx8ICfmnKrphY3nva4nIH19PC9zdHJvbmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZlci1yb3cgY29tcGFjdFwiPlxyXG4gICAgICAgICAgPHNwYW4+e3sgc2VydmVyU3RvcmUuY3VycmVudFNlcnZlcj8udXJsIHx8ICfmnKror7vlj5bliLDlnLDlnYAnIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1mb290ZXJcIj5cclxuICAgICAgICA8c3Bhbj7ov5jmsqHmnInotKblj7fvvJ88L3NwYW4+XG4gICAgICAgIDxlbC1idXR0b24gdHlwZT1cInByaW1hcnlcIiBsaW5rIEBjbGljaz1cIiRyb3V0ZXIucHVzaCgnL3JlZ2lzdGVyJylcIj7nq4vljbPms6jlhow8L2VsLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9BdXRoUGFnZUxheW91dD5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlYWN0aXZlLCByZWYgfSBmcm9tICd2dWUnO1xyXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICd2dWUtcm91dGVyJztcclxuaW1wb3J0IHsgTG9jaywgVXNlciwgVmlkZW9QbGF5IH0gZnJvbSAnQGVsZW1lbnQtcGx1cy9pY29ucy12dWUnO1xyXG5pbXBvcnQgeyBFbE1lc3NhZ2UsIHR5cGUgRm9ybUluc3RhbmNlLCB0eXBlIEZvcm1SdWxlcyB9IGZyb20gJ2VsZW1lbnQtcGx1cyc7XHJcbmltcG9ydCBBdXRoUGFnZUxheW91dCBmcm9tICdAL2NvbXBvbmVudHMvQXV0aFBhZ2VMYXlvdXQudnVlJztcclxuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnQC9zdG9yZXMvYXV0aCc7XHJcbmltcG9ydCB7IHVzZVNlcnZlclN0b3JlIH0gZnJvbSAnQC9zdG9yZXMvc2VydmVyJztcclxuXHJcbmNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xyXG5jb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKTtcclxuY29uc3Qgc2VydmVyU3RvcmUgPSB1c2VTZXJ2ZXJTdG9yZSgpO1xyXG5cclxuY29uc3QgZm9ybVJlZiA9IHJlZjxGb3JtSW5zdGFuY2U+KCk7XHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpO1xyXG5cclxuY29uc3QgZm9ybSA9IHJlYWN0aXZlKHtcclxuICB1c2VybmFtZTogJycsXHJcbiAgcGFzc3dvcmQ6ICcnLFxyXG4gIHJlbWVtYmVyTWU6IHRydWUsXHJcbn0pO1xyXG5cclxuY29uc3QgcnVsZXM6IEZvcm1SdWxlcyA9IHtcclxuICB1c2VybmFtZTogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfor7fovpPlhaXnlKjmiLflkI0nLCB0cmlnZ2VyOiAnYmx1cicgfV0sXHJcbiAgcGFzc3dvcmQ6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+36L6T5YWl5a+G56CBJywgdHJpZ2dlcjogJ2JsdXInIH1dLFxyXG59O1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlTG9naW4oKSB7XHJcbiAgaWYgKCFmb3JtUmVmLnZhbHVlKSByZXR1cm47XHJcblxyXG4gIGNvbnN0IHZhbGlkID0gYXdhaXQgZm9ybVJlZi52YWx1ZS52YWxpZGF0ZSgpLmNhdGNoKCgpID0+IGZhbHNlKTtcclxuICBpZiAoIXZhbGlkKSByZXR1cm47XHJcblxyXG4gIGxvYWRpbmcudmFsdWUgPSB0cnVlO1xyXG4gIHRyeSB7XHJcbiAgICBhd2FpdCBhdXRoU3RvcmUubG9naW4oe1xyXG4gICAgICB1c2VybmFtZTogZm9ybS51c2VybmFtZSxcclxuICAgICAgcGFzc3dvcmQ6IGZvcm0ucGFzc3dvcmQsXHJcbiAgICAgIHJlbWVtYmVyTWU6IGZvcm0ucmVtZW1iZXJNZSxcclxuICAgIH0pO1xyXG4gICAgRWxNZXNzYWdlLnN1Y2Nlc3MoJ+eZu+W9leaIkOWKnycpO1xuICAgIHJvdXRlci5wdXNoKCcvJyk7XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgc2NvcGVkIGxhbmc9XCJzY3NzXCI+XHJcbkB1c2UgJ0Avc3R5bGVzL3ZhcmlhYmxlcy5zY3NzJyBhcyAqO1xyXG5cclxuLmxvZ2luLWNhcmQge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIG1heC13aWR0aDogMzgwcHg7XHJcbiAgcGFkZGluZzogMDtcclxuICBib3JkZXItcmFkaXVzOiAwO1xyXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gIGJvcmRlcjogbm9uZTtcclxuICBib3gtc2hhZG93OiBub25lO1xyXG59XHJcblxyXG4ubG9naW4taGVhZGVyIHtcclxuICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cclxuICBoMiB7XHJcbiAgICBtYXJnaW46IDE4cHggMCAxMnB4O1xyXG4gICAgZm9udC1mYW1pbHk6ICdOZXdzcmVhZGVyJywgJ05vdG8gU2VyaWYgU0MnLCBzZXJpZjtcclxuICAgIGZvbnQtc2l6ZTogMzhweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAwLjk4O1xyXG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XHJcbiAgICBjb2xvcjogJHRleHQtcHJpbWFyeTtcclxuICB9XHJcblxyXG4gIHAge1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgY29sb3I6ICR0ZXh0LXNlY29uZGFyeTtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjc7XHJcbiAgfVxyXG59XHJcblxyXG4uYmFkZ2Uge1xyXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xyXG4gIG1pbi1oZWlnaHQ6IDMwcHg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBwYWRkaW5nOiAwIDEycHg7XHJcbiAgYm9yZGVyLXJhZGl1czogOTk5cHg7XHJcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDkyLCAwLCAwLjA4KTtcclxuICBjb2xvcjogJHByaW1hcnktY29sb3I7XHJcbiAgZm9udC1zaXplOiAxMnB4O1xyXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XHJcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcclxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xyXG59XHJcblxyXG4ubG9nby1tYXJrIHtcclxuICB3aWR0aDogNjJweDtcclxuICBoZWlnaHQ6IDYycHg7XHJcbiAgbWFyZ2luLXRvcDogMThweDtcclxuICBib3JkZXItcmFkaXVzOiAyMnB4O1xyXG4gIGRpc3BsYXk6IGdyaWQ7XHJcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcclxuICBiYWNrZ3JvdW5kOiAkZ3JhZGllbnQtcHJpbWFyeTtcclxuICBib3gtc2hhZG93OiAwIDE2cHggMzZweCByZ2JhKDI1NSwgOTIsIDAsIDAuMjQpO1xyXG5cclxuICAuZWwtaWNvbiB7XHJcbiAgICBmb250LXNpemU6IDMwcHg7XHJcbiAgICBjb2xvcjogd2hpdGU7XHJcbiAgfVxyXG59XHJcblxyXG4ubG9naW4tZm9ybSB7XHJcbiAgbWFyZ2luLXRvcDogMjZweDtcclxuXHJcbiAgOmRlZXAoLmVsLWZvcm0taXRlbSkge1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMThweDtcclxuICB9XHJcblxyXG4gIDpkZWVwKC5lbC1pbnB1dF9fd3JhcHBlcikge1xyXG4gICAgbWluLWhlaWdodDogNTJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XHJcbiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgyNiwgMjYsIDI2LCAwLjA4KSBpbnNldDtcclxuXHJcbiAgICAmLmlzLWZvY3VzIHtcclxuICAgICAgYm94LXNoYWRvdzpcclxuICAgICAgICAwIDAgMCAxcHggcmdiYSgyNTUsIDkyLCAwLCAwLjQ4KSBpbnNldCxcclxuICAgICAgICAwIDAgMCA0cHggcmdiYSgyNTUsIDkyLCAwLCAwLjEpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmZvcm0tbWV0YSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBnYXA6IDEycHg7XHJcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxuICBjb2xvcjogJHRleHQtc2Vjb25kYXJ5O1xyXG4gIGZvbnQtc2l6ZTogMTNweDtcclxufVxyXG5cclxuLm1ldGEtaGludCB7XHJcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbn1cclxuXHJcbi5sb2dpbi1idG4ge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogNTJweDtcclxuICBib3JkZXI6IG5vbmU7XHJcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcclxuICBiYWNrZ3JvdW5kOiAkZ3JhZGllbnQtcHJpbWFyeTtcclxuICBib3gtc2hhZG93OiAwIDE4cHggMzRweCByZ2JhKDI1NSwgOTIsIDAsIDAuMjIpO1xyXG4gIGZvbnQtc2l6ZTogMTVweDtcclxuICBmb250LXdlaWdodDogNzAwO1xyXG59XHJcblxyXG4uc2VydmVyLXBhbmVsIHtcclxuICBtYXJnaW4tdG9wOiAyNHB4O1xyXG4gIHBhZGRpbmc6IDE4cHg7XHJcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcclxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgOTIsIDAsIDAuMDQpO1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCA5MiwgMCwgMC4xKTtcclxufVxyXG5cclxuLnNlcnZlci1yb3cge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgZ2FwOiAxNHB4O1xyXG4gIGNvbG9yOiAkdGV4dC1wcmltYXJ5O1xyXG5cclxuICAmLmNvbXBhY3Qge1xyXG4gICAgbWFyZ2luLXRvcDogOHB4O1xyXG4gICAgY29sb3I6ICR0ZXh0LXNlY29uZGFyeTtcclxuICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcclxuICB9XHJcblxyXG4gIHN0cm9uZyB7XHJcbiAgICBmb250LXNpemU6IDE1cHg7XHJcbiAgfVxyXG59XHJcblxyXG4uc2VydmVyLWxhYmVsIHtcclxuICBjb2xvcjogJHRleHQtc2Vjb25kYXJ5O1xyXG4gIGZvbnQtc2l6ZTogMTJweDtcclxuICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xyXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XHJcbn1cclxuXHJcbi5sb2dpbi1mb290ZXIge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgZ2FwOiA0cHg7XHJcbiAgbWFyZ2luLXRvcDogMThweDtcclxuICBjb2xvcjogJHRleHQtc2Vjb25kYXJ5O1xyXG4gIGZvbnQtc2l6ZTogMTRweDtcclxufVxyXG48L3N0eWxlPlxyXG5cclxuXHJcblxyXG4iXSwiZmlsZSI6IkM6L3dvcmtzcGFjZS9tdWx0aS1wbGF0Zm9ybS1tZWRpYS1tYW5hZ2UvY2xpZW50L3NyYy92aWV3cy9Mb2dpbi9pbmRleC52dWUifQ==