import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/camera/Menu.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/menu/Item.vue"; import { default as __nuxt_component_1 } from "/_nuxt/components/viewer/layout/Panel.vue"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementBlock as __createElementBlock,createBlock as __createBlock,createElementVNode as __createElementVNode,createVNode as __createVNode } 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 _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createBlock(...args) { return _interopVNode(__createBlock(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { useModel as _useModel, defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts"; import { useInjectedViewerState, useInjectedViewer } from "/_nuxt/lib/viewer/composables/setup.ts"; import { useCameraUtilities, useViewerShortcuts } from "/_nuxt/lib/viewer/composables/ui.ts"; import { ViewShortcuts } from "/_nuxt/lib/viewer/helpers/shortcuts/shortcuts.ts"; import { useViewerCameraControlEndTracker } from "/_nuxt/lib/viewer/composables/viewer.ts"; import { CameraController } from "/_nuxt/@fs/D:/speckle-server/packages/viewer/dist/index.js"; import { useSynchronizedCookie } from "/_nuxt/lib/common/composables/reactiveCookie.ts"; import { ref, onMounted } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "ViewerCameraMenu", props: { "open": { type: Boolean, ...{ default: false } }, "openModifiers": {} }, emits: ["update:open"], setup(__props, { expose: __expose }) { __expose(); const localViewerSettings = useSynchronizedCookie( `localViewerSettings`, { default: () => { return { turntableMode: false }; } } ); const { viewer: { metadata: { views } } } = useInjectedViewerState(); const { instance } = useInjectedViewer(); const { getShortcutDisplayText, registerShortcuts, shortcuts } = useViewerShortcuts(); const mixpanel = useMixpanel(); const { setView: setViewRaw, toggleProjection, camera: { isOrthoProjection } } = useCameraUtilities(); const open = _useModel(__props, "open"); const activeView = ref(null); const viewShortcuts = Object.values(ViewShortcuts); useViewerCameraControlEndTracker(() => { activeView.value = null; }); const handleViewChange = (v, isShortcut = false) => { setViewRaw(v); activeView.value = typeof v === "string" ? v : v.id; if (isShortcut) { open.value = true; } mixpanel.track("Viewer Action", { type: "action", name: "set-view", view: v?.name || v }); }; const trackAndtoggleProjection = () => { toggleProjection(); mixpanel.track("Viewer Action", { type: "action", name: "camera", camera: isOrthoProjection ? "ortho" : "perspective" }); }; const setViewerCameraHandlerControlsMaxPolarAngle = (angle) => { const extension = instance.getExtension(CameraController); if (extension) extension.options = { maximumPolarAngle: angle }; }; const toggleTurntableMode = () => { localViewerSettings.value = { ...localViewerSettings.value, turntableMode: !localViewerSettings.value.turntableMode }; if (localViewerSettings.value.turntableMode) { setViewerCameraHandlerControlsMaxPolarAngle(Math.PI / 2); } else { setViewerCameraHandlerControlsMaxPolarAngle(Math.PI); } }; registerShortcuts({ SetViewTop: () => handleViewChange("top", true), SetViewFront: () => handleViewChange("front", true), SetViewLeft: () => handleViewChange("left", true), SetViewBack: () => handleViewChange("back", true), SetViewRight: () => handleViewChange("right", true), ToggleProjection: () => trackAndtoggleProjection() }); onMounted(() => { if (localViewerSettings.value.turntableMode) { setViewerCameraHandlerControlsMaxPolarAngle(Math.PI / 2); } else { setViewerCameraHandlerControlsMaxPolarAngle(Math.PI); } }); const __returned__ = { localViewerSettings, views, instance, getShortcutDisplayText, registerShortcuts, shortcuts, mixpanel, setViewRaw, toggleProjection, isOrthoProjection, open, activeView, viewShortcuts, handleViewChange, trackAndtoggleProjection, setViewerCameraHandlerControlsMaxPolarAngle, toggleTurntableMode }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode, withCtx as _withCtx } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "w-64 simple-scrollbar overflow-y-auto flex flex-col", "data-v-inspector": "components/viewer/camera/Menu.vue:4:5" }; const _hoisted_2 = { class: "p-1", "data-v-inspector": "components/viewer/camera/Menu.vue:5:7" }; const _hoisted_3 = { class: "p-1 flex flex-col gap-1", "data-v-inspector": "components/viewer/camera/Menu.vue:18:7" }; const _hoisted_4 = { key: 0, class: "w-full border-outline-2", "data-v-inspector": "components/viewer/camera/Menu.vue:34:7" }; const _hoisted_5 = { key: 1, class: "p-1", "data-v-inspector": "components/viewer/camera/Menu.vue:35:7" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_ViewerMenuItem = __nuxt_component_0; const _component_ViewerLayoutPanel = __nuxt_component_1; return _openBlock(), _createBlock(_component_ViewerLayoutPanel, { "data-v-inspector": "components/viewer/camera/Menu.vue:3:3" }, { default: _withCtx(() => [ _createElementVNode("div", _hoisted_1, [ _createElementVNode("div", _hoisted_2, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.viewShortcuts, (shortcut) => { return _openBlock(), _createBlock(_component_ViewerMenuItem, { key: shortcut.name, label: shortcut.name, "hide-active-tick": "", active: $setup.activeView === shortcut.name.toLowerCase(), shortcut: $setup.getShortcutDisplayText(shortcut, { hideName: true }), onClick: ($event) => $setup.handleViewChange(shortcut.name.toLowerCase()), "data-v-inspector": "components/viewer/camera/Menu.vue:6:9" }, null, 8, ["label", "active", "shortcut", "onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]), _cache[2] || (_cache[2] = _createElementVNode( "hr", { class: "w-full border-outline-2", "data-v-inspector": "components/viewer/camera/Menu.vue:17:7" }, null, -1 /* CACHED */ )), _createElementVNode("div", _hoisted_3, [ _createVNode(_component_ViewerMenuItem, { label: "Orthographic projection", active: $setup.isOrthoProjection, shortcut: $setup.getShortcutDisplayText($setup.shortcuts.ToggleProjection, { hideName: true }), onClick: _cache[0] || (_cache[0] = ($event) => $setup.trackAndtoggleProjection()), "data-v-inspector": "components/viewer/camera/Menu.vue:19:9" }, null, 8, ["active", "shortcut"]), _createVNode(_component_ViewerMenuItem, { label: "Free orbit", active: !$setup.localViewerSettings.turntableMode, onClick: _cache[1] || (_cache[1] = ($event) => $setup.toggleTurntableMode()), "data-v-inspector": "components/viewer/camera/Menu.vue:27:9" }, null, 8, ["active"]) ]), $setup.views.length !== 0 ? (_openBlock(), _createElementBlock("hr", _hoisted_4)) : _createCommentVNode("v-if", true), $setup.views.length !== 0 ? (_openBlock(), _createElementBlock("div", _hoisted_5, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.views, (view) => { return _openBlock(), _createBlock(_component_ViewerMenuItem, { key: view.id, "hide-active-tick": "", active: $setup.activeView === view.id, label: view.name ? view.name : view.id, onClick: ($event) => $setup.handleViewChange(view), "data-v-inspector": "components/viewer/camera/Menu.vue:36:9" }, null, 8, ["active", "label", "onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ])) : _createCommentVNode("v-if", true) ]) ]), _: 1 /* STABLE */ }); } _sfc_main.__hmrId = "62c49a11"; 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/camera/Menu.vue"]]); //# sourceMappingURL=data:application/json;base64,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MUMsYUFBTSxXQUFNLG1CQUF0QixvQkFBMEgsTUFBMUgsVUFBMEg7UUFDL0csYUFBTSxXQUFNLG1CQUF2QixvQkFTTSxPQVROLFlBU007QUFBQSw2QkFSSjtBQUFBLFlBT0U7QUFBQTtBQUFBLHdCQU5lLGNBQUssQ0FBYixTQUFJO21DQURiLGFBT0U7QUFBQSxnQkFMQyxLQUFLLEtBQUs7QUFBQSxnQkFDWDtBQUFBLGdCQUNDLFFBQVEsc0JBQWUsS0FBSztBQUFBLGdCQUM1QixPQUFPLEtBQUssT0FBTyxLQUFLLE9BQU8sS0FBSztBQUFBLGdCQUNwQyxTQUFLLFlBQUUsd0JBQWlCLElBQUk7QUFBQSxnQkFBRyxvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTWVudS52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAtLT5cclxuPHRlbXBsYXRlPlxyXG4gIDxWaWV3ZXJMYXlvdXRQYW5lbCBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjM6M1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInctNjQgc2ltcGxlLXNjcm9sbGJhciBvdmVyZmxvdy15LWF1dG8gZmxleCBmbGV4LWNvbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWU6NDo1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjU6N1wiPlxyXG4gICAgICAgIDxWaWV3ZXJNZW51SXRlbVxyXG4gICAgICAgICAgdi1mb3I9XCJzaG9ydGN1dCBpbiB2aWV3U2hvcnRjdXRzXCJcclxuICAgICAgICAgIDprZXk9XCJzaG9ydGN1dC5uYW1lXCJcclxuICAgICAgICAgIDpsYWJlbD1cInNob3J0Y3V0Lm5hbWVcIlxyXG4gICAgICAgICAgaGlkZS1hY3RpdmUtdGlja1xyXG4gICAgICAgICAgOmFjdGl2ZT1cImFjdGl2ZVZpZXcgPT09IHNob3J0Y3V0Lm5hbWUudG9Mb3dlckNhc2UoKVwiXHJcbiAgICAgICAgICA6c2hvcnRjdXQ9XCJnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0LCB7IGhpZGVOYW1lOiB0cnVlIH0pIGFzIHN0cmluZ1wiXHJcbiAgICAgICAgICBAY2xpY2s9XCJoYW5kbGVWaWV3Q2hhbmdlKHNob3J0Y3V0Lm5hbWUudG9Mb3dlckNhc2UoKSBhcyBDYW5vbmljYWxWaWV3KVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWU6Njo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxociBjbGFzcz1cInctZnVsbCBib3JkZXItb3V0bGluZS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NhbWVyYS9NZW51LnZ1ZToxNzo3XCIgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cInAtMSBmbGV4IGZsZXgtY29sIGdhcC0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NhbWVyYS9NZW51LnZ1ZToxODo3XCI+XHJcbiAgICAgICAgPFZpZXdlck1lbnVJdGVtXHJcbiAgICAgICAgICBsYWJlbD1cIk9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXCJcclxuICAgICAgICAgIDphY3RpdmU9XCJpc09ydGhvUHJvamVjdGlvblwiXHJcbiAgICAgICAgICA6c2hvcnRjdXQ9XCJcclxuICAgICAgICAgICAgZ2V0U2hvcnRjdXREaXNwbGF5VGV4dChzaG9ydGN1dHMuVG9nZ2xlUHJvamVjdGlvbiwgeyBoaWRlTmFtZTogdHJ1ZSB9KSBhcyBzdHJpbmdcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBAY2xpY2s9XCJ0cmFja0FuZHRvZ2dsZVByb2plY3Rpb24oKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWU6MTk6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8Vmlld2VyTWVudUl0ZW1cclxuICAgICAgICAgIGxhYmVsPVwiRnJlZSBvcmJpdFwiXHJcbiAgICAgICAgICA6YWN0aXZlPVwiIWxvY2FsVmlld2VyU2V0dGluZ3MudHVybnRhYmxlTW9kZVwiXHJcbiAgICAgICAgICBAY2xpY2s9XCJ0b2dnbGVUdXJudGFibGVNb2RlKClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjI3OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGhyIHYtaWY9XCJ2aWV3cy5sZW5ndGggIT09IDBcIiBjbGFzcz1cInctZnVsbCBib3JkZXItb3V0bGluZS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NhbWVyYS9NZW51LnZ1ZTozNDo3XCIgLz5cclxuICAgICAgPGRpdiB2LWlmPVwidmlld3MubGVuZ3RoICE9PSAwXCIgY2xhc3M9XCJwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjM1OjdcIj5cclxuICAgICAgICA8Vmlld2VyTWVudUl0ZW1cclxuICAgICAgICAgIHYtZm9yPVwidmlldyBpbiB2aWV3c1wiXHJcbiAgICAgICAgICA6a2V5PVwidmlldy5pZFwiXHJcbiAgICAgICAgICBoaWRlLWFjdGl2ZS10aWNrXHJcbiAgICAgICAgICA6YWN0aXZlPVwiYWN0aXZlVmlldyA9PT0gdmlldy5pZFwiXHJcbiAgICAgICAgICA6bGFiZWw9XCJ2aWV3Lm5hbWUgPyB2aWV3Lm5hbWUgOiB2aWV3LmlkXCJcclxuICAgICAgICAgIEBjbGljaz1cImhhbmRsZVZpZXdDaGFuZ2UodmlldylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY2FtZXJhL01lbnUudnVlOjM2OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9WaWV3ZXJMYXlvdXRQYW5lbD5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgQ2Fub25pY2FsVmlldywgU3BlY2tsZVZpZXcgfSBmcm9tICdAc3BlY2tsZS92aWV3ZXInXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfn4vbGliL2NvcmUvY29tcG9zYWJsZXMvbXAnXHJcbmltcG9ydCB7XHJcbiAgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSxcclxuICB1c2VJbmplY3RlZFZpZXdlclxyXG59IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB7IHVzZUNhbWVyYVV0aWxpdGllcywgdXNlVmlld2VyU2hvcnRjdXRzIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy91aSdcclxuaW1wb3J0IHsgVmlld1Nob3J0Y3V0cyB9IGZyb20gJ34vbGliL3ZpZXdlci9oZWxwZXJzL3Nob3J0Y3V0cy9zaG9ydGN1dHMnXHJcbmltcG9ydCB7IHVzZVZpZXdlckNhbWVyYUNvbnRyb2xFbmRUcmFja2VyIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy92aWV3ZXInXHJcbmltcG9ydCB7IENhbWVyYUNvbnRyb2xsZXIgfSBmcm9tICdAc3BlY2tsZS92aWV3ZXInXHJcbmltcG9ydCB7IHVzZVN5bmNocm9uaXplZENvb2tpZSB9IGZyb20gJ35+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvcmVhY3RpdmVDb29raWUnXHJcblxyXG50eXBlIFZpZXdlclVzZXJTZXR0aW5ncyA9IHtcclxuICB0dXJudGFibGVNb2RlOiBib29sZWFuXHJcbn1cclxuXHJcbmNvbnN0IGxvY2FsVmlld2VyU2V0dGluZ3MgPSB1c2VTeW5jaHJvbml6ZWRDb29raWU8Vmlld2VyVXNlclNldHRpbmdzPihcclxuICBgbG9jYWxWaWV3ZXJTZXR0aW5nc2AsXHJcbiAge1xyXG4gICAgZGVmYXVsdDogKCkgPT4ge1xyXG4gICAgICByZXR1cm4geyB0dXJudGFibGVNb2RlOiBmYWxzZSB9XHJcbiAgICB9XHJcbiAgfVxyXG4pXHJcblxyXG5jb25zdCB7XHJcbiAgdmlld2VyOiB7XHJcbiAgICBtZXRhZGF0YTogeyB2aWV3cyB9XHJcbiAgfVxyXG59ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcbmNvbnN0IHsgaW5zdGFuY2UgfSA9IHVzZUluamVjdGVkVmlld2VyKClcclxuY29uc3QgeyBnZXRTaG9ydGN1dERpc3BsYXlUZXh0LCByZWdpc3RlclNob3J0Y3V0cywgc2hvcnRjdXRzIH0gPSB1c2VWaWV3ZXJTaG9ydGN1dHMoKVxyXG5jb25zdCBtaXhwYW5lbCA9IHVzZU1peHBhbmVsKClcclxuY29uc3Qge1xyXG4gIHNldFZpZXc6IHNldFZpZXdSYXcsXHJcbiAgdG9nZ2xlUHJvamVjdGlvbixcclxuICBjYW1lcmE6IHsgaXNPcnRob1Byb2plY3Rpb24gfVxyXG59ID0gdXNlQ2FtZXJhVXRpbGl0aWVzKClcclxuXHJcbmNvbnN0IG9wZW4gPSBkZWZpbmVNb2RlbDxib29sZWFuPignb3BlbicsIHsgZGVmYXVsdDogZmFsc2UgfSlcclxuY29uc3QgYWN0aXZlVmlldyA9IHJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxyXG5jb25zdCB2aWV3U2hvcnRjdXRzID0gT2JqZWN0LnZhbHVlcyhWaWV3U2hvcnRjdXRzKVxyXG5cclxuLy8gQ2xlYXIgYWN0aXZlIHZpZXcgd2hlbiBjYW1lcmEgY29udHJvbCBlbmRzXHJcbnVzZVZpZXdlckNhbWVyYUNvbnRyb2xFbmRUcmFja2VyKCgpID0+IHtcclxuICBhY3RpdmVWaWV3LnZhbHVlID0gbnVsbFxyXG59KVxyXG5cclxuY29uc3QgaGFuZGxlVmlld0NoYW5nZSA9ICh2OiBDYW5vbmljYWxWaWV3IHwgU3BlY2tsZVZpZXcsIGlzU2hvcnRjdXQgPSBmYWxzZSkgPT4ge1xyXG4gIHNldFZpZXdSYXcodilcclxuICBhY3RpdmVWaWV3LnZhbHVlID0gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdiA6IHYuaWRcclxuXHJcbiAgaWYgKGlzU2hvcnRjdXQpIHtcclxuICAgIG9wZW4udmFsdWUgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBtaXhwYW5lbC50cmFjaygnVmlld2VyIEFjdGlvbicsIHtcclxuICAgIHR5cGU6ICdhY3Rpb24nLFxyXG4gICAgbmFtZTogJ3NldC12aWV3JyxcclxuICAgIHZpZXc6ICh2IGFzIFNwZWNrbGVWaWV3KT8ubmFtZSB8fCB2XHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgdHJhY2tBbmR0b2dnbGVQcm9qZWN0aW9uID0gKCkgPT4ge1xyXG4gIHRvZ2dsZVByb2plY3Rpb24oKVxyXG4gIG1peHBhbmVsLnRyYWNrKCdWaWV3ZXIgQWN0aW9uJywge1xyXG4gICAgdHlwZTogJ2FjdGlvbicsXHJcbiAgICBuYW1lOiAnY2FtZXJhJyxcclxuICAgIGNhbWVyYTogaXNPcnRob1Byb2plY3Rpb24gPyAnb3J0aG8nIDogJ3BlcnNwZWN0aXZlJ1xyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IHNldFZpZXdlckNhbWVyYUhhbmRsZXJDb250cm9sc01heFBvbGFyQW5nbGUgPSAoYW5nbGU6IG51bWJlcikgPT4ge1xyXG4gIGNvbnN0IGV4dGVuc2lvbiA9IGluc3RhbmNlLmdldEV4dGVuc2lvbihDYW1lcmFDb250cm9sbGVyKVxyXG4gIGlmIChleHRlbnNpb24pIGV4dGVuc2lvbi5vcHRpb25zID0geyBtYXhpbXVtUG9sYXJBbmdsZTogYW5nbGUgfVxyXG59XHJcblxyXG5jb25zdCB0b2dnbGVUdXJudGFibGVNb2RlID0gKCkgPT4ge1xyXG4gIGxvY2FsVmlld2VyU2V0dGluZ3MudmFsdWUgPSB7XHJcbiAgICAuLi5sb2NhbFZpZXdlclNldHRpbmdzLnZhbHVlLFxyXG4gICAgdHVybnRhYmxlTW9kZTogIWxvY2FsVmlld2VyU2V0dGluZ3MudmFsdWUudHVybnRhYmxlTW9kZVxyXG4gIH1cclxuICBpZiAobG9jYWxWaWV3ZXJTZXR0aW5ncy52YWx1ZS50dXJudGFibGVNb2RlKSB7XHJcbiAgICBzZXRWaWV3ZXJDYW1lcmFIYW5kbGVyQ29udHJvbHNNYXhQb2xhckFuZ2xlKE1hdGguUEkgLyAyKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBzZXRWaWV3ZXJDYW1lcmFIYW5kbGVyQ29udHJvbHNNYXhQb2xhckFuZ2xlKE1hdGguUEkpXHJcbiAgfVxyXG59XHJcblxyXG5yZWdpc3RlclNob3J0Y3V0cyh7XHJcbiAgU2V0Vmlld1RvcDogKCkgPT4gaGFuZGxlVmlld0NoYW5nZSgndG9wJywgdHJ1ZSksXHJcbiAgU2V0Vmlld0Zyb250OiAoKSA9PiBoYW5kbGVWaWV3Q2hhbmdlKCdmcm9udCcsIHRydWUpLFxyXG4gIFNldFZpZXdMZWZ0OiAoKSA9PiBoYW5kbGVWaWV3Q2hhbmdlKCdsZWZ0JywgdHJ1ZSksXHJcbiAgU2V0Vmlld0JhY2s6ICgpID0+IGhhbmRsZVZpZXdDaGFuZ2UoJ2JhY2snLCB0cnVlKSxcclxuICBTZXRWaWV3UmlnaHQ6ICgpID0+IGhhbmRsZVZpZXdDaGFuZ2UoJ3JpZ2h0JywgdHJ1ZSksXHJcbiAgVG9nZ2xlUHJvamVjdGlvbjogKCkgPT4gdHJhY2tBbmR0b2dnbGVQcm9qZWN0aW9uKClcclxufSlcclxuXHJcbm9uTW91bnRlZCgoKSA9PiB7XHJcbiAgaWYgKGxvY2FsVmlld2VyU2V0dGluZ3MudmFsdWUudHVybnRhYmxlTW9kZSkge1xyXG4gICAgc2V0Vmlld2VyQ2FtZXJhSGFuZGxlckNvbnRyb2xzTWF4UG9sYXJBbmdsZShNYXRoLlBJIC8gMilcclxuICB9IGVsc2Uge1xyXG4gICAgc2V0Vmlld2VyQ2FtZXJhSGFuZGxlckNvbnRyb2xzTWF4UG9sYXJBbmdsZShNYXRoLlBJKVxyXG4gIH1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3ZpZXdlci9jYW1lcmEvTWVudS52dWUifQ==