import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/anchored-point/thread/NewReply.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/comments/Editor.vue"; import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { FormFileUploadZone as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createVNode as __createVNode,createElementVNode as __createElementVNode,createElementBlock as __createElementBlock } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29" function _interopVNode(vnode) { if (vnode && vnode.props && 'data-v-inspector' in vnode.props) { const data = vnode.props['data-v-inspector'] delete vnode.props['data-v-inspector'] Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false }) } return vnode } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts"; import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts"; import { useIsTypingUpdateEmitter } from "/_nuxt/lib/viewer/composables/commentBubbles.ts"; import { useSubmitReply } from "/_nuxt/lib/viewer/composables/commentManagement.ts"; import { convertCommentEditorValueToInput, isValidCommentContentInput } from "/_nuxt/lib/viewer/helpers/comments.ts"; import { useServerFileUploadLimit } from "/_nuxt/lib/common/composables/serverInfo.ts"; import { UniqueFileTypeSpecifier } from "/_nuxt/lib/core/helpers/file.ts"; import { acceptedFileExtensions } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/blobs/index.js"; import { Paperclip, SendHorizonal } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29"; import { ref, computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "ViewerAnchoredPointThreadNewReply", props: { modelValue: { type: Object, required: true } }, emits: ["submit"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props = __props; const emit = __emit; const createReply = useSubmitReply(); const { onKeyDownHandler, updateIsTyping } = useIsTypingUpdateEmitter(); const { projectId } = useInjectedViewerState(); const { maxSizeInBytes } = useServerFileUploadLimit(); const loading = ref(false); const editor = ref( null ); const uploadZone = ref(null); const commentValue = ref({ doc: void 0, attachments: void 0 }); const threadId = computed(() => props.modelValue.id); const acceptValue = [ UniqueFileTypeSpecifier.AnyImage, UniqueFileTypeSpecifier.AnyVideo, ...acceptedFileExtensions.map((fileExtension) => `.${fileExtension}`) ].join(","); const onFilesSelected = (payload) => { editor.value?.onFilesSelected(payload); }; const mp = useMixpanel(); const trackAttachAndOpenFilePicker = () => { uploadZone.value?.triggerPicker(); mp.track("Comment Action", { type: "action", name: "attach" }); }; const onSubmit = async () => { if (!commentValue.value || loading.value) return; const content = convertCommentEditorValueToInput(commentValue.value); if (!isValidCommentContentInput(content)) return; loading.value = true; try { await createReply({ content, threadId: threadId.value, projectId: projectId.value }); updateIsTyping(false); commentValue.value.attachments?.forEach((a) => { a.inUse = true; }); commentValue.value = { doc: void 0, attachments: void 0 }; emit("submit"); } finally { loading.value = false; } }; const __returned__ = { props, emit, createReply, onKeyDownHandler, updateIsTyping, projectId, maxSizeInBytes, loading, editor, uploadZone, commentValue, threadId, acceptValue, onFilesSelected, mp, trackAttachAndOpenFilePicker, onSubmit, get Paperclip() { return Paperclip; }, get SendHorizonal() { return SendHorizonal; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, openBlock as _openBlock, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "w-full relative flex flex-col p-2 pt-1", "data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:3:3" }; const _hoisted_2 = { class: "flex justify-between items-center p-1", "data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:26:9" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_ViewerCommentsEditor = __nuxt_component_0; const _component_FormButton = __nuxt_component_1; const _component_FormFileUploadZone = __nuxt_component_2; return _openBlock(), _createElementBlock("div", _hoisted_1, [ _createVNode(_component_FormFileUploadZone, { ref: "uploadZone", "size-limit": $setup.maxSizeInBytes, accept: $setup.acceptValue, disabled: $setup.loading, multiple: "", onFilesSelected: $setup.onFilesSelected, "data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:4:5" }, { default: _withCtx(({ isDraggingFiles }) => [ _createElementVNode( "div", { class: _normalizeClass(["border border-outline-2 rounded-lg dark:bg-foundation-2", [isDraggingFiles && "border-dashed border-primary"]]), "data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:13:7" }, [ _createVNode(_component_ViewerCommentsEditor, { ref: "editor", modelValue: $setup.commentValue, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.commentValue = $event), prompt: "Add reply", autofocus: "", "disable-drop-zone": "", onKeydown: $setup.onKeyDownHandler, onSubmit: $setup.onSubmit, "data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:17:9" }, null, 8, ["modelValue", "onKeydown"]), _createElementVNode("div", _hoisted_2, [ _createVNode(_component_FormButton, { "icon-left": $setup.Paperclip, disabled: $setup.loading, color: "subtle", "hide-text": "", onClick: _cache[1] || (_cache[1] = ($event) => $setup.trackAttachAndOpenFilePicker()), "data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:27:11" }, null, 8, ["icon-left", "disabled"]), _createVNode(_component_FormButton, { "icon-left": $setup.SendHorizonal, "hide-text": "", disabled: $setup.loading, onClick: $setup.onSubmit, "data-v-inspector": "components/viewer/anchored-point/thread/NewReply.vue:34:11" }, null, 8, ["icon-left", "disabled"]) ]) ], 2 /* CLASS */ ) ]), _: 1 /* STABLE */ }, 8, ["size-limit", "accept", "disabled"]) ]); } _sfc_main.__hmrId = "2d79023b"; 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 "/_nuxt/@id/__x00__plugin-vue:export-helper"; export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/viewer/anchored-point/thread/NewReply.vue"]]); //# sourceMappingURL=data:application/json;base64,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QUNULFVBQVE7QUFBQSxjQUFVLG9CQUFpQjtBQUFBO1lBRXRDLG9CQWNNLE9BZE4sWUFjTTtBQUFBLGNBYkosYUFNRTtBQUFBLGdCQUxDLGFBQVc7QUFBQSxnQkFDWCxVQUFVO0FBQUEsZ0JBQ1gsT0FBTTtBQUFBLGdCQUNOO0FBQUEsZ0JBQ0MsU0FBSyxzQ0FBRSxvQ0FBNEI7QUFBQSxnQkFBSSxvQkFBaUI7QUFBQTtjQUUzRCxhQUtFO0FBQUEsZ0JBSkMsYUFBVztBQUFBLGdCQUNaO0FBQUEsZ0JBQ0MsVUFBVTtBQUFBLGdCQUNWLFNBQU87QUFBQSxnQkFBVSxvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTmV3UmVwbHkudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlanMtYWNjZXNzaWJpbGl0eS9uby1hdXRvZm9jdXMgLS0+XHJcbjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlIGZsZXggZmxleC1jb2wgcC0yIHB0LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvYW5jaG9yZWQtcG9pbnQvdGhyZWFkL05ld1JlcGx5LnZ1ZTozOjNcIj5cclxuICAgIDxGb3JtRmlsZVVwbG9hZFpvbmVcclxuICAgICAgcmVmPVwidXBsb2FkWm9uZVwiXHJcbiAgICAgIHYtc2xvdD1cInsgaXNEcmFnZ2luZ0ZpbGVzIH1cIlxyXG4gICAgICA6c2l6ZS1saW1pdD1cIm1heFNpemVJbkJ5dGVzXCJcclxuICAgICAgOmFjY2VwdD1cImFjY2VwdFZhbHVlXCJcclxuICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXHJcbiAgICAgIG11bHRpcGxlXHJcbiAgICAgIEBmaWxlcy1zZWxlY3RlZD1cIm9uRmlsZXNTZWxlY3RlZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjQ6NVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImJvcmRlciBib3JkZXItb3V0bGluZS0yIHJvdW5kZWQtbGcgZGFyazpiZy1mb3VuZGF0aW9uLTJcIlxyXG4gICAgICAgIDpjbGFzcz1cIltpc0RyYWdnaW5nRmlsZXMgJiYgJ2JvcmRlci1kYXNoZWQgYm9yZGVyLXByaW1hcnknXVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjEzOjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPFZpZXdlckNvbW1lbnRzRWRpdG9yXHJcbiAgICAgICAgICByZWY9XCJlZGl0b3JcIlxyXG4gICAgICAgICAgdi1tb2RlbD1cImNvbW1lbnRWYWx1ZVwiXHJcbiAgICAgICAgICBwcm9tcHQ9XCJBZGQgcmVwbHlcIlxyXG4gICAgICAgICAgYXV0b2ZvY3VzXHJcbiAgICAgICAgICBkaXNhYmxlLWRyb3Atem9uZVxyXG4gICAgICAgICAgQGtleWRvd249XCJvbktleURvd25IYW5kbGVyXCJcclxuICAgICAgICAgIEBzdWJtaXQ9XCJvblN1Ym1pdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjE3OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvYW5jaG9yZWQtcG9pbnQvdGhyZWFkL05ld1JlcGx5LnZ1ZToyNjo5XCI+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICA6aWNvbi1sZWZ0PVwiUGFwZXJjbGlwXCJcclxuICAgICAgICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXHJcbiAgICAgICAgICAgIGNvbG9yPVwic3VidGxlXCJcclxuICAgICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICAgIEBjbGljaz1cInRyYWNrQXR0YWNoQW5kT3BlbkZpbGVQaWNrZXIoKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9hbmNob3JlZC1wb2ludC90aHJlYWQvTmV3UmVwbHkudnVlOjI3OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICA6aWNvbi1sZWZ0PVwiU2VuZEhvcml6b25hbFwiXHJcbiAgICAgICAgICAgIGhpZGUtdGV4dFxyXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgQGNsaWNrPVwib25TdWJtaXRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvYW5jaG9yZWQtcG9pbnQvdGhyZWFkL05ld1JlcGx5LnZ1ZTozNDoxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvRm9ybUZpbGVVcGxvYWRab25lPlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgdHlwZSB7IE51bGxhYmxlIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgeyB1c2VJbmplY3RlZFZpZXdlclN0YXRlIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NldHVwJ1xyXG5pbXBvcnQgeyB1c2VNaXhwYW5lbCB9IGZyb20gJ35+L2xpYi9jb3JlL2NvbXBvc2FibGVzL21wJ1xyXG5pbXBvcnQgeyB1c2VJc1R5cGluZ1VwZGF0ZUVtaXR0ZXIgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL2NvbW1lbnRCdWJibGVzJ1xyXG5pbXBvcnQgdHlwZSB7IENvbW1lbnRCdWJibGVNb2RlbCB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvY29tbWVudEJ1YmJsZXMnXHJcbmltcG9ydCB7IHVzZVN1Ym1pdFJlcGx5IH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9jb21tZW50TWFuYWdlbWVudCdcclxuaW1wb3J0IHR5cGUgeyBDb21tZW50RWRpdG9yVmFsdWUgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL2NvbW1lbnRNYW5hZ2VtZW50J1xyXG5pbXBvcnQge1xyXG4gIGNvbnZlcnRDb21tZW50RWRpdG9yVmFsdWVUb0lucHV0LFxyXG4gIGlzVmFsaWRDb21tZW50Q29udGVudElucHV0XHJcbn0gZnJvbSAnfn4vbGliL3ZpZXdlci9oZWxwZXJzL2NvbW1lbnRzJ1xyXG5pbXBvcnQgeyB1c2VTZXJ2ZXJGaWxlVXBsb2FkTGltaXQgfSBmcm9tICd+fi9saWIvY29tbW9uL2NvbXBvc2FibGVzL3NlcnZlckluZm8nXHJcbmltcG9ydCB7IFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyIH0gZnJvbSAnfn4vbGliL2NvcmUvaGVscGVycy9maWxlJ1xyXG5pbXBvcnQgeyBhY2NlcHRlZEZpbGVFeHRlbnNpb25zIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL2Jsb2JzJ1xyXG5pbXBvcnQgdHlwZSB7IFVwbG9hZGFibGVGaWxlSXRlbSB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IFBhcGVyY2xpcCwgU2VuZEhvcml6b25hbCB9IGZyb20gJ2x1Y2lkZS12dWUtbmV4dCdcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIG1vZGVsVmFsdWU6IENvbW1lbnRCdWJibGVNb2RlbFxyXG59PigpXHJcblxyXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8e1xyXG4gIChlOiAnc3VibWl0Jyk6IHZvaWRcclxufT4oKVxyXG5cclxuY29uc3QgY3JlYXRlUmVwbHkgPSB1c2VTdWJtaXRSZXBseSgpXHJcbmNvbnN0IHsgb25LZXlEb3duSGFuZGxlciwgdXBkYXRlSXNUeXBpbmcgfSA9IHVzZUlzVHlwaW5nVXBkYXRlRW1pdHRlcigpXHJcbmNvbnN0IHsgcHJvamVjdElkIH0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuY29uc3QgeyBtYXhTaXplSW5CeXRlcyB9ID0gdXNlU2VydmVyRmlsZVVwbG9hZExpbWl0KClcclxuXHJcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGVkaXRvciA9IHJlZihcclxuICBudWxsIGFzIE51bGxhYmxlPHtcclxuICAgIG9wZW5GaWxlUGlja2VyOiAoKSA9PiB2b2lkXHJcbiAgICBvbkZpbGVzU2VsZWN0ZWQ6IChwYXlsb2FkOiB7IGZpbGVzOiBVcGxvYWRhYmxlRmlsZUl0ZW1bXSB9KSA9PiB2b2lkXHJcbiAgfT5cclxuKVxyXG5jb25zdCB1cGxvYWRab25lID0gcmVmKG51bGwgYXMgTnVsbGFibGU8eyB0cmlnZ2VyUGlja2VyOiAoKSA9PiB2b2lkIH0+KVxyXG5jb25zdCBjb21tZW50VmFsdWUgPSByZWY8Q29tbWVudEVkaXRvclZhbHVlPih7IGRvYzogdW5kZWZpbmVkLCBhdHRhY2htZW50czogdW5kZWZpbmVkIH0pXHJcbmNvbnN0IHRocmVhZElkID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMubW9kZWxWYWx1ZS5pZClcclxuXHJcbmNvbnN0IGFjY2VwdFZhbHVlID0gW1xyXG4gIFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyLkFueUltYWdlLFxyXG4gIFVuaXF1ZUZpbGVUeXBlU3BlY2lmaWVyLkFueVZpZGVvLFxyXG4gIC4uLmFjY2VwdGVkRmlsZUV4dGVuc2lvbnMubWFwKChmaWxlRXh0ZW5zaW9uKSA9PiBgLiR7ZmlsZUV4dGVuc2lvbn1gKVxyXG5dLmpvaW4oJywnKVxyXG5cclxuY29uc3Qgb25GaWxlc1NlbGVjdGVkID0gKHBheWxvYWQ6IHsgZmlsZXM6IFVwbG9hZGFibGVGaWxlSXRlbVtdIH0pID0+IHtcclxuICBlZGl0b3IudmFsdWU/Lm9uRmlsZXNTZWxlY3RlZChwYXlsb2FkKVxyXG59XHJcblxyXG5jb25zdCBtcCA9IHVzZU1peHBhbmVsKClcclxuY29uc3QgdHJhY2tBdHRhY2hBbmRPcGVuRmlsZVBpY2tlciA9ICgpID0+IHtcclxuICB1cGxvYWRab25lLnZhbHVlPy50cmlnZ2VyUGlja2VyKClcclxuICBtcC50cmFjaygnQ29tbWVudCBBY3Rpb24nLCB7IHR5cGU6ICdhY3Rpb24nLCBuYW1lOiAnYXR0YWNoJyB9KVxyXG59XHJcblxyXG5jb25zdCBvblN1Ym1pdCA9IGFzeW5jICgpID0+IHtcclxuICBpZiAoIWNvbW1lbnRWYWx1ZS52YWx1ZSB8fCBsb2FkaW5nLnZhbHVlKSByZXR1cm5cclxuXHJcbiAgY29uc3QgY29udGVudCA9IGNvbnZlcnRDb21tZW50RWRpdG9yVmFsdWVUb0lucHV0KGNvbW1lbnRWYWx1ZS52YWx1ZSlcclxuICBpZiAoIWlzVmFsaWRDb21tZW50Q29udGVudElucHV0KGNvbnRlbnQpKSByZXR1cm5cclxuXHJcbiAgbG9hZGluZy52YWx1ZSA9IHRydWVcclxuICB0cnkge1xyXG4gICAgYXdhaXQgY3JlYXRlUmVwbHkoe1xyXG4gICAgICBjb250ZW50LFxyXG4gICAgICB0aHJlYWRJZDogdGhyZWFkSWQudmFsdWUsXHJcbiAgICAgIHByb2plY3RJZDogcHJvamVjdElkLnZhbHVlXHJcbiAgICB9KVxyXG4gICAgdXBkYXRlSXNUeXBpbmcoZmFsc2UpXHJcblxyXG4gICAgLy8gTWFyayBhbGwgYXR0YWNobWVudHMgYXMgaW4gdXNlIHRvIHByZXZlbnQgY2xlYW51cFxyXG4gICAgY29tbWVudFZhbHVlLnZhbHVlLmF0dGFjaG1lbnRzPy5mb3JFYWNoKChhKSA9PiB7XHJcbiAgICAgIGEuaW5Vc2UgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbW1lbnRWYWx1ZS52YWx1ZSA9IHtcclxuICAgICAgZG9jOiB1bmRlZmluZWQsXHJcbiAgICAgIGF0dGFjaG1lbnRzOiB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGVtaXQoJ3N1Ym1pdCcpXHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZVxyXG4gIH1cclxufVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvdmlld2VyL2FuY2hvcmVkLXBvaW50L3RocmVhZC9OZXdSZXBseS52dWUifQ==