Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_000136
T

555 lines
55 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/controls/Left.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/controls/ButtonToggle.vue";
import { default as __nuxt_component_1 } from "/_nuxt/components/automate/runs/trigger-status/Icon.vue";
import { default as __nuxt_component_2 } from "/_nuxt/components/viewer/models/Panel.vue";
import { default as __nuxt_component_3 } from "/_nuxt/components/viewer/filters/Panel.vue";
import { default as __nuxt_component_4 } from "/_nuxt/components/viewer/elements/Panel.vue";
import { default as __nuxt_component_5 } from "/_nuxt/components/viewer/comments/Panel.vue";
import { default as __nuxt_component_6 } from "/_nuxt/components/automate/viewer/Panel.vue";
import { default as __nuxt_component_7 } from "/_nuxt/components/viewer/dataviewer/Panel.vue";
import { default as __nuxt_component_8 } from "/_nuxt/components/viewer/saved-views/Panel.vue";
/* Injection by vite-plugin-vue-inspector Start */
import { createVNode as __createVNode,createBlock as __createBlock,createElementBlock as __createElementBlock,createElementVNode as __createElementVNode } 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 _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...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 { useViewerShortcuts } from "/_nuxt/lib/viewer/composables/ui.ts";
import {
useInjectedViewerInterfaceState,
useInjectedViewerLoadedResources,
useInjectedViewerState
} from "/_nuxt/lib/viewer/composables/setup.ts";
import { useEmbed } from "/_nuxt/lib/viewer/composables/setup/embed.ts";
import { TailwindBreakpoints } from "/_nuxt/lib/common/helpers/tailwind.ts";
import {
useEventListener,
useResizeObserver,
useBreakpoints,
useWindowSize,
useThrottleFn
} from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29";
import { isNonNullable } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
import { useFunctionRunsStatusSummary } from "/_nuxt/lib/automate/composables/runStatus.ts";
import { useIntercomEnabled } from "/_nuxt/lib/intercom/composables/enabled.ts";
import { viewerDocsRoute } from "/_nuxt/lib/common/helpers/route.ts";
import { useAreSavedViewsEnabled } from "/_nuxt/lib/viewer/composables/savedViews/general.ts";
import {
Camera,
CodeXml,
BookOpen,
Box,
ListFilter,
Search,
MessageSquareText,
CircleQuestionMark
} from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29";
import { useViewerPanelsUtilities } from "/_nuxt/lib/viewer/composables/setup/panels.ts";
import { useSmartTooltipDelay } from "/_nuxt/composables/tooltips.ts";
import { useIsWorkspacesEnabled } from "/_nuxt/composables/globals.ts";
import { useNuxtApp } from "/_nuxt/node_modules/nuxt/dist/app/nuxt.js?v=e4f18c29";
import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "ViewerControlsLeft",
emits: ["forceClosePanels"],
setup(__props, { expose: __expose, emit: __emit }) {
const emit = __emit;
const { width: windowWidth } = useWindowSize();
const { isIntercomEnabled } = useIntercomEnabled();
const { resourceItems, modelsAndVersionIds } = useInjectedViewerLoadedResources();
const { registerShortcuts, getShortcutDisplayText, shortcuts } = useViewerShortcuts();
const { isEnabled: isEmbedEnabled } = useEmbed();
const breakpoints = useBreakpoints(TailwindBreakpoints);
const isMobile = breakpoints.smaller("sm");
const isTablet = breakpoints.smaller("lg");
const isLargerThanLg = breakpoints.greater("lg");
const { getTooltipProps } = useSmartTooltipDelay();
const isSavedViewsEnabled = useAreSavedViewsEnabled();
const isWorkspacesEnabled = useIsWorkspacesEnabled();
const { $intercom } = useNuxtApp();
const {
filters: { hasAnyFiltersApplied }
} = useInjectedViewerInterfaceState();
const {
ui: {
panels: { active: activePanel, modelsSubView }
}
} = useInjectedViewerState();
const { onPanelButtonClick } = useViewerPanelsUtilities();
const width = ref(264);
const panelExtensionWidth = ref(isMobile.value ? 200 : isLargerThanLg.value ? 300 : 256);
const scrollableControlsContainer = ref(null);
const height = ref(scrollableControlsContainer.value?.clientHeight);
const isResizing = ref(false);
const isPanelExtensionResizing = ref(false);
const resizeHandle = ref(null);
const panelExtensionResizeHandle = ref(null);
let startWidth = 0;
let startX = 0;
let startPanelExtensionWidth = 0;
let startPanelExtensionX = 0;
const startResizing = (event) => {
if (isMobile.value) return;
event.preventDefault();
isResizing.value = true;
startX = event.clientX;
startWidth = width.value;
};
const startPanelExtensionResizing = (event) => {
if (isMobile.value) return;
event.preventDefault();
isPanelExtensionResizing.value = true;
startPanelExtensionX = event.clientX;
startPanelExtensionWidth = panelExtensionWidth.value;
};
const throttledHandleMouseMove = useThrottleFn((event) => {
if (isResizing.value) {
const diffX = event.clientX - startX;
const newWidth = Math.max(
240,
Math.min(startWidth + diffX, Math.min(440, windowWidth.value * 0.5 - 60))
);
width.value = newWidth;
} else if (isPanelExtensionResizing.value) {
const diffX = event.clientX - startPanelExtensionX;
const newWidth = Math.max(
200,
Math.min(startPanelExtensionWidth + diffX, Math.min(400, windowWidth.value * 0.4))
);
panelExtensionWidth.value = newWidth;
}
}, 50);
if (true) {
useResizeObserver(scrollableControlsContainer, (entries) => {
const { height: newHeight } = entries[0].contentRect;
height.value = newHeight;
});
useEventListener(resizeHandle, "mousedown", startResizing);
useEventListener(panelExtensionResizeHandle, "mousedown", startPanelExtensionResizing);
useEventListener(document, "mousemove", throttledHandleMouseMove);
useEventListener(document, "mouseup", () => {
if (isResizing.value) {
isResizing.value = false;
}
if (isPanelExtensionResizing.value) {
isPanelExtensionResizing.value = false;
}
});
}
const hasActivePanel = computed(() => activePanel.value !== "none");
const allAutomationRuns = computed(() => {
const allAutomationStatuses = modelsAndVersionIds.value.map(({ model }) => model.loadedVersion.items[0].automationsStatus).flat().filter(isNonNullable);
return allAutomationStatuses.map((status) => status.automationRuns).flat();
});
const allFunctionRuns = computed(() => {
return allAutomationRuns.value.map((run) => run.functionRuns).flat();
});
const widthClass = computed(() => {
if (isMobile.value) {
return "calc(100vw - 3.6rem)";
} else if (isTablet.value) {
return "240px";
} else {
return `${width.value + 4}px`;
}
});
const panelExtensionLeft = computed(() => {
if (isMobile.value || isTablet.value) {
return;
}
const mainPanelLeft = isEmbedEnabled.value ? 52 : 60;
return `${mainPanelLeft + width.value}px`;
});
const { summary } = useFunctionRunsStatusSummary({
runs: allFunctionRuns
});
registerShortcuts({
ToggleModels: () => toggleActivePanel("models"),
ToggleFilters: () => toggleActivePanel("filters"),
ToggleDiscussions: () => toggleActivePanel("discussions"),
ToggleDevMode: () => toggleActivePanel("devMode"),
ToggleSavedViews: () => isSavedViewsEnabled && toggleActivePanel("savedViews")
});
const toggleActivePanel = (panel) => {
onPanelButtonClick(panel);
};
const forceClosePanel = () => {
activePanel.value = "none";
};
const openDocs = () => {
window.open(viewerDocsRoute, "_blank");
};
const openIntercomChat = () => {
if (isIntercomEnabled.value) {
$intercom.show();
}
};
watch(activePanel, (newVal, oldVal) => {
const wasNone = oldVal === "none";
if (wasNone && newVal !== "none" && isMobile.value) {
emit("forceClosePanels");
}
});
__expose({
forceClosePanel,
forceClosePanels: forceClosePanel
});
const __returned__ = { emit, windowWidth, isIntercomEnabled, resourceItems, modelsAndVersionIds, registerShortcuts, getShortcutDisplayText, shortcuts, isEmbedEnabled, breakpoints, isMobile, isTablet, isLargerThanLg, getTooltipProps, isSavedViewsEnabled, isWorkspacesEnabled, $intercom, hasAnyFiltersApplied, activePanel, modelsSubView, onPanelButtonClick, width, panelExtensionWidth, scrollableControlsContainer, height, isResizing, isPanelExtensionResizing, resizeHandle, panelExtensionResizeHandle, get startWidth() {
return startWidth;
}, set startWidth(v) {
startWidth = v;
}, get startX() {
return startX;
}, set startX(v) {
startX = v;
}, get startPanelExtensionWidth() {
return startPanelExtensionWidth;
}, set startPanelExtensionWidth(v) {
startPanelExtensionWidth = v;
}, get startPanelExtensionX() {
return startPanelExtensionX;
}, set startPanelExtensionX(v) {
startPanelExtensionX = v;
}, startResizing, startPanelExtensionResizing, throttledHandleMouseMove, hasActivePanel, allAutomationRuns, allFunctionRuns, widthClass, panelExtensionLeft, summary, toggleActivePanel, forceClosePanel, openDocs, openIntercomChat, get Camera() {
return Camera;
}, get CodeXml() {
return CodeXml;
}, get BookOpen() {
return BookOpen;
}, get Box() {
return Box;
}, get ListFilter() {
return ListFilter;
}, get Search() {
return Search;
}, get MessageSquareText() {
return MessageSquareText;
}, get CircleQuestionMark() {
return CircleQuestionMark;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, openBlock as _openBlock, withCtx as _withCtx, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, vShow as _vShow, KeepAlive as _KeepAlive } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
key: 2,
class: "mt-auto flex flex-col gap-2",
"data-v-inspector": "components/viewer/controls/Left.vue:94:7"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_ViewerControlsButtonToggle = __nuxt_component_0;
const _component_AutomateRunsTriggerStatusIcon = __nuxt_component_1;
const _component_ViewerModelsPanel = __nuxt_component_2;
const _component_ViewerFiltersPanel = __nuxt_component_3;
const _component_ViewerElementsPanel = __nuxt_component_4;
const _component_ViewerCommentsPanel = __nuxt_component_5;
const _component_AutomateViewerPanel = __nuxt_component_6;
const _component_ViewerDataviewerPanel = __nuxt_component_7;
const _component_ViewerSavedViewsPanel = __nuxt_component_8;
const _component_PortalTarget = _resolveComponent("PortalTarget");
const _directive_tippy = _resolveDirective("tippy");
return _openBlock(), _createElementBlock(
"aside",
{
class: _normalizeClass(["absolute left-2 z-50 flex rounded-lg border border-outline-2 bg-foundation px-1 overflow-visible focus-visible:outline-none", [
$setup.isEmbedEnabled ? "top-[0.5rem]" : "top-[3.5rem] lg:top-[3rem] lg:rounded-none lg:px-2 lg:max-h-[calc(100dvh-3rem)] lg:border-l-0 lg:border-t-0 lg:border-b-0 lg:h-full lg:left-0",
$setup.hasActivePanel && "h-full max-h-[calc(100dvh-8rem)] rounded-r-none"
]]),
"data-v-inspector": "components/viewer/controls/Left.vue:3:3"
},
[
_createElementVNode(
"div",
{
class: _normalizeClass(["flex flex-col gap-2 py-1", $setup.isEmbedEnabled ? "" : "lg:py-2"]),
"data-v-inspector": "components/viewer/controls/Left.vue:12:5"
},
[
_withDirectives(_createVNode(_component_ViewerControlsButtonToggle, {
active: $setup.activePanel === "models",
icon: $setup.Box,
onClick: _cache[0] || (_cache[0] = ($event) => $setup.toggleActivePanel("models")),
"data-v-inspector": "components/viewer/controls/Left.vue:13:7"
}, null, 8, ["active", "icon"]), [
[
_directive_tippy,
$setup.getTooltipProps(
$setup.getShortcutDisplayText($setup.shortcuts.ToggleModels, { format: "separate" }),
{
placement: "right"
}
)
]
]),
_withDirectives(_createVNode(_component_ViewerControlsButtonToggle, {
active: $setup.activePanel === "filters",
icon: $setup.ListFilter,
dot: $setup.hasAnyFiltersApplied,
onClick: _cache[1] || (_cache[1] = ($event) => $setup.toggleActivePanel("filters")),
"data-v-inspector": "components/viewer/controls/Left.vue:26:7"
}, null, 8, ["active", "icon", "dot"]), [
[
_directive_tippy,
$setup.getTooltipProps(
$setup.getShortcutDisplayText($setup.shortcuts.ToggleFilters, { format: "separate" }),
{
placement: "right"
}
)
]
]),
_withDirectives(_createVNode(_component_ViewerControlsButtonToggle, {
active: $setup.activePanel === "elements",
icon: $setup.Search,
onClick: _cache[2] || (_cache[2] = ($event) => $setup.toggleActivePanel("elements")),
"data-v-inspector": "components/viewer/controls/Left.vue:40:7"
}, null, 8, ["active", "icon"]), [
[
_directive_tippy,
$setup.getTooltipProps("Elements", {
placement: "right"
})
]
]),
_withDirectives(_createVNode(_component_ViewerControlsButtonToggle, {
active: $setup.activePanel === "discussions",
icon: $setup.MessageSquareText,
onClick: _cache[3] || (_cache[3] = ($event) => $setup.toggleActivePanel("discussions")),
"data-v-inspector": "components/viewer/controls/Left.vue:50:7"
}, null, 8, ["active", "icon"]), [
[
_directive_tippy,
$setup.getTooltipProps(
$setup.getShortcutDisplayText($setup.shortcuts.ToggleDiscussions, { format: "separate" }),
{
placement: "right"
}
)
]
]),
_createCommentVNode(" Saved views "),
$setup.isSavedViewsEnabled ? _withDirectives((_openBlock(), _createBlock(_component_ViewerControlsButtonToggle, {
key: 0,
active: $setup.activePanel === "savedViews",
icon: $setup.Camera,
onClick: _cache[4] || (_cache[4] = ($event) => $setup.toggleActivePanel("savedViews")),
"data-v-inspector": "components/viewer/controls/Left.vue:65:7"
}, null, 8, ["active", "icon"])), [
[
_directive_tippy,
$setup.getTooltipProps(
$setup.getShortcutDisplayText($setup.shortcuts.ToggleSavedViews, { format: "separate" }),
{
placement: "right"
}
)
]
]) : _createCommentVNode("v-if", true),
$setup.allAutomationRuns.length !== 0 ? _withDirectives((_openBlock(), _createBlock(_component_ViewerControlsButtonToggle, {
key: 1,
active: $setup.activePanel === "automate",
onClick: _cache[5] || (_cache[5] = ($event) => $setup.toggleActivePanel("automate")),
"data-v-inspector": "components/viewer/controls/Left.vue:80:7"
}, {
default: _withCtx(() => [
_createVNode(_component_AutomateRunsTriggerStatusIcon, {
summary: $setup.summary,
class: "h-5 w-5 md:h-6 md:w-6",
"data-v-inspector": "components/viewer/controls/Left.vue:89:9"
}, null, 8, ["summary"])
]),
_: 1
/* STABLE */
}, 8, ["active"])), [
[_directive_tippy, {
content: $setup.summary.longSummary,
placement: "right"
}]
]) : _createCommentVNode("v-if", true),
!$setup.isEmbedEnabled && (!$setup.isTablet || $setup.activePanel !== "none") ? (_openBlock(), _createElementBlock("div", _hoisted_1, [
_withDirectives(_createVNode(_component_ViewerControlsButtonToggle, {
active: $setup.activePanel === "devMode",
icon: $setup.CodeXml,
secondary: "",
onClick: _cache[6] || (_cache[6] = ($event) => $setup.toggleActivePanel("devMode")),
"data-v-inspector": "components/viewer/controls/Left.vue:98:9"
}, null, 8, ["active", "icon"]), [
[
_directive_tippy,
$setup.getTooltipProps(
$setup.getShortcutDisplayText($setup.shortcuts.ToggleDevMode, { format: "separate" }),
{
placement: "right"
}
)
]
]),
_withDirectives(_createVNode(_component_ViewerControlsButtonToggle, {
icon: $setup.BookOpen,
secondary: "",
onClick: $setup.openDocs,
"data-v-inspector": "components/viewer/controls/Left.vue:112:9"
}, null, 8, ["icon"]), [
[
_directive_tippy,
$setup.getTooltipProps("Documentation", {
placement: "right"
})
]
]),
$setup.isIntercomEnabled ? _withDirectives((_openBlock(), _createBlock(_component_ViewerControlsButtonToggle, {
key: 0,
icon: $setup.CircleQuestionMark,
secondary: "",
onClick: $setup.openIntercomChat,
"data-v-inspector": "components/viewer/controls/Left.vue:122:9"
}, null, 8, ["icon"])), [
[_directive_tippy, $setup.getTooltipProps("Get help")]
]) : _createCommentVNode("v-if", true)
])) : _createCommentVNode("v-if", true)
],
2
/* CLASS */
),
_createCommentVNode(" Resize handle "),
$setup.activePanel !== "none" && !$setup.isEmbedEnabled ? (_openBlock(), _createElementBlock(
"div",
{
key: 0,
ref: "resizeHandle",
class: "absolute h-full max-h-[calc(100dvh-3rem)] w-4 transition border-l hover:border-l-[2px] border-outline-2 hover:border-primary hidden lg:flex items-center cursor-ew-resize z-30",
style: _normalizeStyle(`left:${$setup.width + 52}px;`),
onMousedown: $setup.startResizing,
"data-v-inspector": "components/viewer/controls/Left.vue:133:5"
},
null,
36
/* STYLE, NEED_HYDRATION */
)) : _createCommentVNode("v-if", true),
_createCommentVNode(" Scrollable controls container "),
_withDirectives(_createElementVNode(
"div",
{
ref: "scrollableControlsContainer",
class: _normalizeClass([
"bg-foundation absolute z-10 left-[calc(2.5rem+1px)] top-[-1px] bottom-[-1px] overflow-hidden border-outline-2 border border-l-0 rounded-lg rounded-tl-none rounded-bl-none ",
$setup.hasActivePanel ? "opacity-100" : "opacity-0",
$setup.isEmbedEnabled ? "" : "lg:left-[calc(3rem+1px)] lg:border-none lg:rounded-none"
]),
style: _normalizeStyle(`width: ${$setup.widthClass};`),
"data-v-inspector": "components/viewer/controls/Left.vue:142:5"
},
[
_withDirectives(_createVNode(_component_ViewerModelsPanel, {
"sub-view": $setup.modelsSubView,
"onUpdate:subView": _cache[7] || (_cache[7] = ($event) => $setup.modelsSubView = $event),
"data-v-inspector": "components/viewer/controls/Left.vue:152:7"
}, null, 8, ["sub-view"]), [
[_vShow, $setup.activePanel === "models"]
]),
$setup.activePanel === "filters" ? (_openBlock(), _createBlock(_component_ViewerFiltersPanel, {
key: 0,
"data-v-inspector": "components/viewer/controls/Left.vue:156:7"
})) : _createCommentVNode("v-if", true),
$setup.activePanel === "elements" ? (_openBlock(), _createBlock(_component_ViewerElementsPanel, {
key: 1,
"data-v-inspector": "components/viewer/controls/Left.vue:157:7"
})) : _createCommentVNode("v-if", true),
$setup.resourceItems.length !== 0 && $setup.activePanel === "discussions" ? (_openBlock(), _createBlock(_component_ViewerCommentsPanel, {
key: 2,
"data-v-inspector": "components/viewer/controls/Left.vue:158:7"
})) : _createCommentVNode("v-if", true),
$setup.activePanel === "automate" ? (_openBlock(), _createBlock(_component_AutomateViewerPanel, {
key: 3,
"automation-runs": $setup.allAutomationRuns,
summary: $setup.summary,
"data-v-inspector": "components/viewer/controls/Left.vue:161:7"
}, null, 8, ["automation-runs", "summary"])) : _createCommentVNode("v-if", true),
$setup.activePanel === "devMode" ? (_openBlock(), _createBlock(_component_ViewerDataviewerPanel, {
key: 4,
"data-v-inspector": "components/viewer/controls/Left.vue:166:7"
})) : _createCommentVNode("v-if", true),
(_openBlock(), _createBlock(
_KeepAlive,
{ "data-v-inspector": "components/viewer/controls/Left.vue:167:7" },
[
$setup.isSavedViewsEnabled && $setup.isWorkspacesEnabled && $setup.activePanel === "savedViews" ? (_openBlock(), _createBlock(_component_ViewerSavedViewsPanel, {
key: 0,
onClose: _cache[8] || (_cache[8] = ($event) => $setup.activePanel = "none"),
"data-v-inspector": "components/viewer/controls/Left.vue:168:9"
})) : _createCommentVNode("v-if", true)
],
1024
/* DYNAMIC_SLOTS */
))
],
6
/* CLASS, STYLE */
), [
[_vShow, $setup.activePanel !== "none"]
]),
_createCommentVNode(" Panel Extension - Portal target for additional content "),
_createElementVNode(
"div",
{
id: "panel-extension",
class: "absolute z-50 left-[calc(100dvw-16rem)] sm:left-72 max-h-[calc(100dvh-6rem)] md:max-h-[calc(100dvh-4rem)] top-1.5 bg-foundation rounded-lg overflow-hidden",
style: _normalizeStyle(`left: ${$setup.panelExtensionLeft} !important; width: ${$setup.panelExtensionWidth}px;`),
"data-v-inspector": "components/viewer/controls/Left.vue:178:5"
},
[
_createCommentVNode(" Resize handle for panel extension "),
_createElementVNode(
"div",
{
ref: "panelExtensionResizeHandle",
class: "absolute h-full max-h-[calc(100dvh-6rem)] md:max-h-[calc(100dvh-4rem)] w-4 transition border-r hover:border-r-[2px] border-outline-2 hover:border-primary hidden lg:flex items-center cursor-ew-resize z-30 right-0",
onMousedown: $setup.startPanelExtensionResizing,
"data-v-inspector": "components/viewer/controls/Left.vue:184:7"
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
),
_createVNode(_component_PortalTarget, {
name: "panel-extension",
"data-v-inspector": "components/viewer/controls/Left.vue:189:7"
})
],
4
/* STYLE */
)
],
2
/* CLASS */
);
}
_sfc_main.__hmrId = "6b48c724";
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/controls/Left.vue"]]);
//# sourceMappingURL=data:application/json;base64,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WU07QUFBQTtBQUFBLFVBWEosSUFBRztBQUFBLFVBQ0gsT0FBTTtBQUFBLFVBQ0wsT0FBSyx5QkFBVyx5QkFBa0IsdUJBQXVCLDBCQUFtQjtBQUFBLFVBQU8sb0JBQWlCO0FBQUE7O1VBRXJHO0FBQUEsVUFDQTtBQUFBLFlBSUU7QUFBQTtBQUFBLGNBSEEsS0FBSTtBQUFBLGNBQ0osT0FBTTtBQUFBLGNBQ0wsYUFBVztBQUFBLGNBQTZCLG9CQUFpQjtBQUFBOzs7OztVQUU1RCxhQUFpSDtBQUFBLFlBQW5HLE1BQUs7QUFBQSxZQUFrQixvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTGVmdC52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAtLT5cclxuPHRlbXBsYXRlPlxyXG4gIDxhc2lkZVxyXG4gICAgY2xhc3M9XCJhYnNvbHV0ZSBsZWZ0LTIgei01MCBmbGV4IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1vdXRsaW5lLTIgYmctZm91bmRhdGlvbiBweC0xIG92ZXJmbG93LXZpc2libGUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmVcIlxyXG4gICAgOmNsYXNzPVwiW1xyXG4gICAgICBpc0VtYmVkRW5hYmxlZFxyXG4gICAgICAgID8gJ3RvcC1bMC41cmVtXSdcclxuICAgICAgICA6ICd0b3AtWzMuNXJlbV0gbGc6dG9wLVszcmVtXSBsZzpyb3VuZGVkLW5vbmUgbGc6cHgtMiBsZzptYXgtaC1bY2FsYygxMDBkdmgtM3JlbSldIGxnOmJvcmRlci1sLTAgbGc6Ym9yZGVyLXQtMCBsZzpib3JkZXItYi0wIGxnOmgtZnVsbCBsZzpsZWZ0LTAnLFxyXG4gICAgICBoYXNBY3RpdmVQYW5lbCAmJiAnaC1mdWxsIG1heC1oLVtjYWxjKDEwMGR2aC04cmVtKV0gcm91bmRlZC1yLW5vbmUnXHJcbiAgICBdXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjM6M1wiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTIgcHktMVwiIDpjbGFzcz1cImlzRW1iZWRFbmFibGVkID8gJycgOiAnbGc6cHktMidcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6MTI6NVwiPlxyXG4gICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICB2LXRpcHB5PVwiXHJcbiAgICAgICAgICBnZXRUb29sdGlwUHJvcHMoXHJcbiAgICAgICAgICAgIGdldFNob3J0Y3V0RGlzcGxheVRleHQoc2hvcnRjdXRzLlRvZ2dsZU1vZGVscywgeyBmb3JtYXQ6ICdzZXBhcmF0ZScgfSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgOmFjdGl2ZT1cImFjdGl2ZVBhbmVsID09PSAnbW9kZWxzJ1wiXHJcbiAgICAgICAgOmljb249XCJCb3hcIlxyXG4gICAgICAgIEBjbGljaz1cInRvZ2dsZUFjdGl2ZVBhbmVsKCdtb2RlbHMnKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxMzo3XCJcclxuICAgICAgLz5cclxuICAgICAgPFZpZXdlckNvbnRyb2xzQnV0dG9uVG9nZ2xlXG4gICAgICAgIHYtdGlwcHk9XCJcbiAgICAgICAgICBnZXRUb29sdGlwUHJvcHMoXG4gICAgICAgICAgICBnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0cy5Ub2dnbGVGaWx0ZXJzLCB7IGZvcm1hdDogJ3NlcGFyYXRlJyB9KSxcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgOmFjdGl2ZT1cImFjdGl2ZVBhbmVsID09PSAnZmlsdGVycydcIlxyXG4gICAgICAgIDppY29uPVwiTGlzdEZpbHRlclwiXHJcbiAgICAgICAgOmRvdD1cImhhc0FueUZpbHRlcnNBcHBsaWVkXCJcclxuICAgICAgICBAY2xpY2s9XCJ0b2dnbGVBY3RpdmVQYW5lbCgnZmlsdGVycycpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjI2OjdcIlxuICAgICAgLz5cbiAgICAgIDxWaWV3ZXJDb250cm9sc0J1dHRvblRvZ2dsZVxuICAgICAgICB2LXRpcHB5PVwiXG4gICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKCdFbGVtZW50cycsIHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xuICAgICAgICAgIH0pXG4gICAgICAgIFwiXG4gICAgICAgIDphY3RpdmU9XCJhY3RpdmVQYW5lbCA9PT0gJ2VsZW1lbnRzJ1wiXG4gICAgICAgIDppY29uPVwiU2VhcmNoXCJcbiAgICAgICAgQGNsaWNrPVwidG9nZ2xlQWN0aXZlUGFuZWwoJ2VsZW1lbnRzJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6NDA6N1wiXG4gICAgICAvPlxuICAgICAgPFZpZXdlckNvbnRyb2xzQnV0dG9uVG9nZ2xlXG4gICAgICAgIHYtdGlwcHk9XCJcbiAgICAgICAgICBnZXRUb29sdGlwUHJvcHMoXG4gICAgICAgICAgICBnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0cy5Ub2dnbGVEaXNjdXNzaW9ucywgeyBmb3JtYXQ6ICdzZXBhcmF0ZScgfSksXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiAncmlnaHQnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBcIlxyXG4gICAgICAgIDphY3RpdmU9XCJhY3RpdmVQYW5lbCA9PT0gJ2Rpc2N1c3Npb25zJ1wiXHJcbiAgICAgICAgOmljb249XCJNZXNzYWdlU3F1YXJlVGV4dFwiXHJcbiAgICAgICAgQGNsaWNrPVwidG9nZ2xlQWN0aXZlUGFuZWwoJ2Rpc2N1c3Npb25zJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6NTA6N1wiXHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8IS0tIFNhdmVkIHZpZXdzIC0tPlxyXG4gICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICB2LWlmPVwiaXNTYXZlZFZpZXdzRW5hYmxlZFwiXHJcbiAgICAgICAgdi10aXBweT1cIlxyXG4gICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKFxyXG4gICAgICAgICAgICBnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0cy5Ub2dnbGVTYXZlZFZpZXdzLCB7IGZvcm1hdDogJ3NlcGFyYXRlJyB9KSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXCJcclxuICAgICAgICA6YWN0aXZlPVwiYWN0aXZlUGFuZWwgPT09ICdzYXZlZFZpZXdzJ1wiXHJcbiAgICAgICAgOmljb249XCJDYW1lcmFcIlxyXG4gICAgICAgIEBjbGljaz1cInRvZ2dsZUFjdGl2ZVBhbmVsKCdzYXZlZFZpZXdzJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6NjU6N1wiXHJcbiAgICAgID48L1ZpZXdlckNvbnRyb2xzQnV0dG9uVG9nZ2xlPlxyXG5cclxuICAgICAgPFZpZXdlckNvbnRyb2xzQnV0dG9uVG9nZ2xlXHJcbiAgICAgICAgdi1pZj1cImFsbEF1dG9tYXRpb25SdW5zLmxlbmd0aCAhPT0gMFwiXHJcbiAgICAgICAgdi10aXBweT1cIntcclxuICAgICAgICAgIGNvbnRlbnQ6IHN1bW1hcnkubG9uZ1N1bW1hcnksXHJcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcclxuICAgICAgICB9XCJcclxuICAgICAgICA6YWN0aXZlPVwiYWN0aXZlUGFuZWwgPT09ICdhdXRvbWF0ZSdcIlxyXG4gICAgICAgIEBjbGljaz1cInRvZ2dsZUFjdGl2ZVBhbmVsKCdhdXRvbWF0ZScpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjgwOjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPEF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNJY29uXHJcbiAgICAgICAgICA6c3VtbWFyeT1cInN1bW1hcnlcIlxyXG4gICAgICAgICAgY2xhc3M9XCJoLTUgdy01IG1kOmgtNiBtZDp3LTZcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6ODk6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9WaWV3ZXJDb250cm9sc0J1dHRvblRvZ2dsZT5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIHYtaWY9XCIhaXNFbWJlZEVuYWJsZWQgJiYgKCFpc1RhYmxldCB8fCBhY3RpdmVQYW5lbCAhPT0gJ25vbmUnKVwiXHJcbiAgICAgICAgY2xhc3M9XCJtdC1hdXRvIGZsZXggZmxleC1jb2wgZ2FwLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6OTQ6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICAgIHYtdGlwcHk9XCJcclxuICAgICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKFxyXG4gICAgICAgICAgICAgIGdldFNob3J0Y3V0RGlzcGxheVRleHQoc2hvcnRjdXRzLlRvZ2dsZURldk1vZGUsIHsgZm9ybWF0OiAnc2VwYXJhdGUnIH0pLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIDphY3RpdmU9XCJhY3RpdmVQYW5lbCA9PT0gJ2Rldk1vZGUnXCJcclxuICAgICAgICAgIDppY29uPVwiQ29kZVhtbFwiXHJcbiAgICAgICAgICBzZWNvbmRhcnlcclxuICAgICAgICAgIEBjbGljaz1cInRvZ2dsZUFjdGl2ZVBhbmVsKCdkZXZNb2RlJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6OTg6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICAgIHYtdGlwcHk9XCJcclxuICAgICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKCdEb2N1bWVudGF0aW9uJywge1xyXG4gICAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIDppY29uPVwiQm9va09wZW5cIlxyXG4gICAgICAgICAgc2Vjb25kYXJ5XHJcbiAgICAgICAgICBAY2xpY2s9XCJvcGVuRG9jc1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxMTI6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICAgIHYtaWY9XCJpc0ludGVyY29tRW5hYmxlZFwiXHJcbiAgICAgICAgICB2LXRpcHB5PVwiZ2V0VG9vbHRpcFByb3BzKCdHZXQgaGVscCcpXCJcclxuICAgICAgICAgIDppY29uPVwiQ2lyY2xlUXVlc3Rpb25NYXJrXCJcclxuICAgICAgICAgIHNlY29uZGFyeVxyXG4gICAgICAgICAgQGNsaWNrPVwib3BlbkludGVyY29tQ2hhdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxMjI6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFJlc2l6ZSBoYW5kbGUgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIHYtaWY9XCJhY3RpdmVQYW5lbCAhPT0gJ25vbmUnICYmICFpc0VtYmVkRW5hYmxlZFwiXHJcbiAgICAgIHJlZj1cInJlc2l6ZUhhbmRsZVwiXHJcbiAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaC1mdWxsIG1heC1oLVtjYWxjKDEwMGR2aC0zcmVtKV0gdy00IHRyYW5zaXRpb24gYm9yZGVyLWwgaG92ZXI6Ym9yZGVyLWwtWzJweF0gYm9yZGVyLW91dGxpbmUtMiBob3Zlcjpib3JkZXItcHJpbWFyeSBoaWRkZW4gbGc6ZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLWV3LXJlc2l6ZSB6LTMwXCJcclxuICAgICAgOnN0eWxlPVwiYGxlZnQ6JHt3aWR0aCArIDUyfXB4O2BcIlxyXG4gICAgICBAbW91c2Vkb3duPVwic3RhcnRSZXNpemluZ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxMzM6NVwiXHJcbiAgICAvPlxyXG5cclxuICAgIDwhLS0gU2Nyb2xsYWJsZSBjb250cm9scyBjb250YWluZXIgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIHYtc2hvdz1cImFjdGl2ZVBhbmVsICE9PSAnbm9uZSdcIlxyXG4gICAgICByZWY9XCJzY3JvbGxhYmxlQ29udHJvbHNDb250YWluZXJcIlxyXG4gICAgICA6Y2xhc3M9XCJbXHJcbiAgICAgICAgJ2JnLWZvdW5kYXRpb24gYWJzb2x1dGUgei0xMCBsZWZ0LVtjYWxjKDIuNXJlbSsxcHgpXSB0b3AtWy0xcHhdIGJvdHRvbS1bLTFweF0gb3ZlcmZsb3ctaGlkZGVuIGJvcmRlci1vdXRsaW5lLTIgYm9yZGVyIGJvcmRlci1sLTAgcm91bmRlZC1sZyByb3VuZGVkLXRsLW5vbmUgcm91bmRlZC1ibC1ub25lICcsXHJcbiAgICAgICAgaGFzQWN0aXZlUGFuZWwgPyAnb3BhY2l0eS0xMDAnIDogJ29wYWNpdHktMCcsXHJcbiAgICAgICAgaXNFbWJlZEVuYWJsZWQgPyAnJyA6ICdsZzpsZWZ0LVtjYWxjKDNyZW0rMXB4KV0gbGc6Ym9yZGVyLW5vbmUgbGc6cm91bmRlZC1ub25lJ1xyXG4gICAgICBdXCJcclxuICAgICAgOnN0eWxlPVwiYHdpZHRoOiAke3dpZHRoQ2xhc3N9O2BcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6MTQyOjVcIlxyXG4gICAgPlxyXG4gICAgICA8Vmlld2VyTW9kZWxzUGFuZWxcbiAgICAgICAgdi1zaG93PVwiYWN0aXZlUGFuZWwgPT09ICdtb2RlbHMnXCJcbiAgICAgICAgdi1tb2RlbDpzdWItdmlldz1cIm1vZGVsc1N1YlZpZXdcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6MTUyOjdcIlxuICAgICAgLz5cbiAgICAgIDxWaWV3ZXJGaWx0ZXJzUGFuZWwgdi1pZj1cImFjdGl2ZVBhbmVsID09PSAnZmlsdGVycydcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6MTU2OjdcIiAvPlxuICAgICAgPFZpZXdlckVsZW1lbnRzUGFuZWwgdi1pZj1cImFjdGl2ZVBhbmVsID09PSAnZWxlbWVudHMnXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE1Nzo3XCIgLz5cbiAgICAgIDxWaWV3ZXJDb21tZW50c1BhbmVsXG4gICAgICAgIHYtaWY9XCJyZXNvdXJjZUl0ZW1zLmxlbmd0aCAhPT0gMCAmJiBhY3RpdmVQYW5lbCA9PT0gJ2Rpc2N1c3Npb25zJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxNTg6N1wiXG4gICAgICAvPlxuICAgICAgPEF1dG9tYXRlVmlld2VyUGFuZWxcclxuICAgICAgICB2LWlmPVwiYWN0aXZlUGFuZWwgPT09ICdhdXRvbWF0ZSdcIlxyXG4gICAgICAgIDphdXRvbWF0aW9uLXJ1bnM9XCJhbGxBdXRvbWF0aW9uUnVuc1wiXHJcbiAgICAgICAgOnN1bW1hcnk9XCJzdW1tYXJ5XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE2MTo3XCJcclxuICAgICAgLz5cclxuICAgICAgPFZpZXdlckRhdGF2aWV3ZXJQYW5lbCB2LWlmPVwiYWN0aXZlUGFuZWwgPT09ICdkZXZNb2RlJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxNjY6N1wiIC8+XHJcbiAgICAgIDxLZWVwQWxpdmUgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE2Nzo3XCI+XHJcbiAgICAgICAgPFZpZXdlclNhdmVkVmlld3NQYW5lbFxyXG4gICAgICAgICAgdi1pZj1cIlxyXG4gICAgICAgICAgICBpc1NhdmVkVmlld3NFbmFibGVkICYmIGlzV29ya3NwYWNlc0VuYWJsZWQgJiYgYWN0aXZlUGFuZWwgPT09ICdzYXZlZFZpZXdzJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIEBjbG9zZT1cImFjdGl2ZVBhbmVsID0gJ25vbmUnXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE2ODo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L0tlZXBBbGl2ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUGFuZWwgRXh0ZW5zaW9uIC0gUG9ydGFsIHRhcmdldCBmb3IgYWRkaXRpb25hbCBjb250ZW50IC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBpZD1cInBhbmVsLWV4dGVuc2lvblwiXHJcbiAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei01MCBsZWZ0LVtjYWxjKDEwMGR2dy0xNnJlbSldIHNtOmxlZnQtNzIgbWF4LWgtW2NhbGMoMTAwZHZoLTZyZW0pXSBtZDptYXgtaC1bY2FsYygxMDBkdmgtNHJlbSldIHRvcC0xLjUgYmctZm91bmRhdGlvbiByb3VuZGVkLWxnIG92ZXJmbG93LWhpZGRlblwiXHJcbiAgICAgIDpzdHlsZT1cImBsZWZ0OiAke3BhbmVsRXh0ZW5zaW9uTGVmdH0gIWltcG9ydGFudDsgd2lkdGg6ICR7cGFuZWxFeHRlbnNpb25XaWR0aH1weDtgXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE3ODo1XCJcclxuICAgID5cclxuICAgICAgPCEtLSBSZXNpemUgaGFuZGxlIGZvciBwYW5lbCBleHRlbnNpb24gLS0+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICByZWY9XCJwYW5lbEV4dGVuc2lvblJlc2l6ZUhhbmRsZVwiXHJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBoLWZ1bGwgbWF4LWgtW2NhbGMoMTAwZHZoLTZyZW0pXSBtZDptYXgtaC1bY2FsYygxMDBkdmgtNHJlbSldIHctNCB0cmFuc2l0aW9uIGJvcmRlci1yIGhvdmVyOmJvcmRlci1yLVsycHhdIGJvcmRlci1vdXRsaW5lLTIgaG92ZXI6Ym9yZGVyLXByaW1hcnkgaGlkZGVuIGxnOmZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1ldy1yZXNpemUgei0zMCByaWdodC0wXCJcclxuICAgICAgICBAbW91c2Vkb3duPVwic3RhcnRQYW5lbEV4dGVuc2lvblJlc2l6aW5nXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE4NDo3XCJcclxuICAgICAgLz5cclxuICAgICAgPFBvcnRhbFRhcmdldCBuYW1lPVwicGFuZWwtZXh0ZW5zaW9uXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE4OTo3XCI+PC9Qb3J0YWxUYXJnZXQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2FzaWRlPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgdXNlVmlld2VyU2hvcnRjdXRzIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy91aSdcclxuaW1wb3J0IHtcclxuICB1c2VJbmplY3RlZFZpZXdlckludGVyZmFjZVN0YXRlLFxyXG4gIHVzZUluamVjdGVkVmlld2VyTG9hZGVkUmVzb3VyY2VzLFxyXG4gIHVzZUluamVjdGVkVmlld2VyU3RhdGVcclxufSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NldHVwJ1xyXG5pbXBvcnQgeyB1c2VFbWJlZCB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cC9lbWJlZCdcclxuaW1wb3J0IHsgVGFpbHdpbmRCcmVha3BvaW50cyB9IGZyb20gJ35+L2xpYi9jb21tb24vaGVscGVycy90YWlsd2luZCdcclxuaW1wb3J0IHtcclxuICB1c2VFdmVudExpc3RlbmVyLFxyXG4gIHVzZVJlc2l6ZU9ic2VydmVyLFxyXG4gIHVzZUJyZWFrcG9pbnRzLFxyXG4gIHVzZVdpbmRvd1NpemUsXHJcbiAgdXNlVGhyb3R0bGVGblxyXG59IGZyb20gJ0B2dWV1c2UvY29yZSdcclxuaW1wb3J0IHsgdHlwZSBOdWxsYWJsZSwgaXNOb25OdWxsYWJsZSB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgdXNlRnVuY3Rpb25SdW5zU3RhdHVzU3VtbWFyeSB9IGZyb20gJ34vbGliL2F1dG9tYXRlL2NvbXBvc2FibGVzL3J1blN0YXR1cydcclxuaW1wb3J0IHsgdXNlSW50ZXJjb21FbmFibGVkIH0gZnJvbSAnfn4vbGliL2ludGVyY29tL2NvbXBvc2FibGVzL2VuYWJsZWQnXHJcbmltcG9ydCB7IHZpZXdlckRvY3NSb3V0ZSB9IGZyb20gJ35+L2xpYi9jb21tb24vaGVscGVycy9yb3V0ZSdcclxuaW1wb3J0IHsgdXNlQXJlU2F2ZWRWaWV3c0VuYWJsZWQgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy9nZW5lcmFsJ1xyXG5pbXBvcnQge1xyXG4gIENhbWVyYSxcbiAgQ29kZVhtbCxcbiAgQm9va09wZW4sXG4gIEJveCxcbiAgTGlzdEZpbHRlcixcbiAgU2VhcmNoLFxuICBNZXNzYWdlU3F1YXJlVGV4dCxcbiAgQ2lyY2xlUXVlc3Rpb25NYXJrXG59IGZyb20gJ2x1Y2lkZS12dWUtbmV4dCdcbmltcG9ydCB7IHVzZVZpZXdlclBhbmVsc1V0aWxpdGllcyB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cC9wYW5lbHMnXHJcbmltcG9ydCB0eXBlIHsgQWN0aXZlUGFuZWwgfSBmcm9tICd+L2xpYi92aWV3ZXIvaGVscGVycy9zY2VuZUV4cGxvcmVyJ1xyXG5cclxuLy8gVE9ETzogUmVmYWN0b3IgYWxsIG9mIHRoaXMgZXZlbnQgYnVzaW5lc3MgYW5kIGp1c3QgcmVhZC93cml0ZSBwYW5lbHMgc3RhdGUgZGlyZWN0bHlcclxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcclxuICBmb3JjZUNsb3NlUGFuZWxzOiBbXVxyXG59PigpXHJcblxyXG5jb25zdCB7IHdpZHRoOiB3aW5kb3dXaWR0aCB9ID0gdXNlV2luZG93U2l6ZSgpXHJcblxyXG5jb25zdCB7IGlzSW50ZXJjb21FbmFibGVkIH0gPSB1c2VJbnRlcmNvbUVuYWJsZWQoKVxyXG5jb25zdCB7IHJlc291cmNlSXRlbXMsIG1vZGVsc0FuZFZlcnNpb25JZHMgfSA9IHVzZUluamVjdGVkVmlld2VyTG9hZGVkUmVzb3VyY2VzKClcclxuY29uc3QgeyByZWdpc3RlclNob3J0Y3V0cywgZ2V0U2hvcnRjdXREaXNwbGF5VGV4dCwgc2hvcnRjdXRzIH0gPSB1c2VWaWV3ZXJTaG9ydGN1dHMoKVxyXG5jb25zdCB7IGlzRW5hYmxlZDogaXNFbWJlZEVuYWJsZWQgfSA9IHVzZUVtYmVkKClcclxuY29uc3QgYnJlYWtwb2ludHMgPSB1c2VCcmVha3BvaW50cyhUYWlsd2luZEJyZWFrcG9pbnRzKVxyXG5jb25zdCBpc01vYmlsZSA9IGJyZWFrcG9pbnRzLnNtYWxsZXIoJ3NtJylcclxuY29uc3QgaXNUYWJsZXQgPSBicmVha3BvaW50cy5zbWFsbGVyKCdsZycpXHJcbmNvbnN0IGlzTGFyZ2VyVGhhbkxnID0gYnJlYWtwb2ludHMuZ3JlYXRlcignbGcnKVxyXG5jb25zdCB7IGdldFRvb2x0aXBQcm9wcyB9ID0gdXNlU21hcnRUb29sdGlwRGVsYXkoKVxyXG5jb25zdCBpc1NhdmVkVmlld3NFbmFibGVkID0gdXNlQXJlU2F2ZWRWaWV3c0VuYWJsZWQoKVxyXG5jb25zdCBpc1dvcmtzcGFjZXNFbmFibGVkID0gdXNlSXNXb3Jrc3BhY2VzRW5hYmxlZCgpXHJcbmNvbnN0IHsgJGludGVyY29tIH0gPSB1c2VOdXh0QXBwKClcclxuY29uc3Qge1xyXG4gIGZpbHRlcnM6IHsgaGFzQW55RmlsdGVyc0FwcGxpZWQgfVxyXG59ID0gdXNlSW5qZWN0ZWRWaWV3ZXJJbnRlcmZhY2VTdGF0ZSgpXHJcbmNvbnN0IHtcclxuICB1aToge1xyXG4gICAgcGFuZWxzOiB7IGFjdGl2ZTogYWN0aXZlUGFuZWwsIG1vZGVsc1N1YlZpZXcgfVxyXG4gIH1cclxufSA9IHVzZUluamVjdGVkVmlld2VyU3RhdGUoKVxyXG5cclxuY29uc3QgeyBvblBhbmVsQnV0dG9uQ2xpY2sgfSA9IHVzZVZpZXdlclBhbmVsc1V0aWxpdGllcygpXHJcblxyXG5jb25zdCB3aWR0aCA9IHJlZigyNjQpXHJcbmNvbnN0IHBhbmVsRXh0ZW5zaW9uV2lkdGggPSByZWYoaXNNb2JpbGUudmFsdWUgPyAyMDAgOiBpc0xhcmdlclRoYW5MZy52YWx1ZSA/IDMwMCA6IDI1NilcclxuY29uc3Qgc2Nyb2xsYWJsZUNvbnRyb2xzQ29udGFpbmVyID0gcmVmKG51bGwgYXMgTnVsbGFibGU8SFRNTERpdkVsZW1lbnQ+KVxyXG5jb25zdCBoZWlnaHQgPSByZWYoc2Nyb2xsYWJsZUNvbnRyb2xzQ29udGFpbmVyLnZhbHVlPy5jbGllbnRIZWlnaHQpXHJcbmNvbnN0IGlzUmVzaXppbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGlzUGFuZWxFeHRlbnNpb25SZXNpemluZyA9IHJlZihmYWxzZSlcclxuY29uc3QgcmVzaXplSGFuZGxlID0gcmVmKG51bGwpXHJcbmNvbnN0IHBhbmVsRXh0ZW5zaW9uUmVzaXplSGFuZGxlID0gcmVmKG51bGwpXHJcblxyXG5sZXQgc3RhcnRXaWR0aCA9IDBcclxubGV0IHN0YXJ0WCA9IDBcclxubGV0IHN0YXJ0UGFuZWxFeHRlbnNpb25XaWR0aCA9IDBcclxubGV0IHN0YXJ0UGFuZWxFeHRlbnNpb25YID0gMFxyXG5cclxuY29uc3Qgc3RhcnRSZXNpemluZyA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gIGlmIChpc01vYmlsZS52YWx1ZSkgcmV0dXJuXHJcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG4gIGlzUmVzaXppbmcudmFsdWUgPSB0cnVlXHJcbiAgc3RhcnRYID0gZXZlbnQuY2xpZW50WFxyXG4gIHN0YXJ0V2lkdGggPSB3aWR0aC52YWx1ZVxyXG59XHJcblxyXG5jb25zdCBzdGFydFBhbmVsRXh0ZW5zaW9uUmVzaXppbmcgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICBpZiAoaXNNb2JpbGUudmFsdWUpIHJldHVyblxyXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcclxuICBpc1BhbmVsRXh0ZW5zaW9uUmVzaXppbmcudmFsdWUgPSB0cnVlXHJcbiAgc3RhcnRQYW5lbEV4dGVuc2lvblggPSBldmVudC5jbGllbnRYXHJcbiAgc3RhcnRQYW5lbEV4dGVuc2lvbldpZHRoID0gcGFuZWxFeHRlbnNpb25XaWR0aC52YWx1ZVxyXG59XHJcblxyXG5jb25zdCB0aHJvdHRsZWRIYW5kbGVNb3VzZU1vdmUgPSB1c2VUaHJvdHRsZUZuKChldmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gIGlmIChpc1Jlc2l6aW5nLnZhbHVlKSB7XHJcbiAgICBjb25zdCBkaWZmWCA9IGV2ZW50LmNsaWVudFggLSBzdGFydFhcclxuICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoXHJcbiAgICAgIDI0MCxcclxuICAgICAgTWF0aC5taW4oc3RhcnRXaWR0aCArIGRpZmZYLCBNYXRoLm1pbig0NDAsIHdpbmRvd1dpZHRoLnZhbHVlICogMC41IC0gNjApKVxyXG4gICAgKVxyXG4gICAgd2lkdGgudmFsdWUgPSBuZXdXaWR0aFxyXG4gIH0gZWxzZSBpZiAoaXNQYW5lbEV4dGVuc2lvblJlc2l6aW5nLnZhbHVlKSB7XHJcbiAgICBjb25zdCBkaWZmWCA9IGV2ZW50LmNsaWVudFggLSBzdGFydFBhbmVsRXh0ZW5zaW9uWFxyXG4gICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heChcclxuICAgICAgMjAwLFxyXG4gICAgICBNYXRoLm1pbihzdGFydFBhbmVsRXh0ZW5zaW9uV2lkdGggKyBkaWZmWCwgTWF0aC5taW4oNDAwLCB3aW5kb3dXaWR0aC52YWx1ZSAqIDAuNCkpXHJcbiAgICApXHJcbiAgICBwYW5lbEV4dGVuc2lvbldpZHRoLnZhbHVlID0gbmV3V2lkdGhcclxuICB9XHJcbn0sIDUwKVxyXG5cclxuaWYgKGltcG9ydC5tZXRhLmNsaWVudCkge1xyXG4gIHVzZVJlc2l6ZU9ic2VydmVyKHNjcm9sbGFibGVDb250cm9sc0NvbnRhaW5lciwgKGVudHJpZXMpID0+IHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiBuZXdIZWlnaHQgfSA9IGVudHJpZXNbMF0uY29udGVudFJlY3RcclxuICAgIGhlaWdodC52YWx1ZSA9IG5ld0hlaWdodFxyXG4gIH0pXHJcbiAgdXNlRXZlbnRMaXN0ZW5lcihyZXNpemVIYW5kbGUsICdtb3VzZWRvd24nLCBzdGFydFJlc2l6aW5nKVxyXG4gIHVzZUV2ZW50TGlzdGVuZXIocGFuZWxFeHRlbnNpb25SZXNpemVIYW5kbGUsICdtb3VzZWRvd24nLCBzdGFydFBhbmVsRXh0ZW5zaW9uUmVzaXppbmcpXHJcblxyXG4gIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aHJvdHRsZWRIYW5kbGVNb3VzZU1vdmUpXHJcblxyXG4gIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsICdtb3VzZXVwJywgKCkgPT4ge1xyXG4gICAgaWYgKGlzUmVzaXppbmcudmFsdWUpIHtcclxuICAgICAgaXNSZXNpemluZy52YWx1ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAoaXNQYW5lbEV4dGVuc2lvblJlc2l6aW5nLnZhbHVlKSB7XHJcbiAgICAgIGlzUGFuZWxFeHRlbnNpb25SZXNpemluZy52YWx1ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgaGFzQWN0aXZlUGFuZWwgPSBjb21wdXRlZCgoKSA9PiBhY3RpdmVQYW5lbC52YWx1ZSAhPT0gJ25vbmUnKVxyXG5cclxuY29uc3QgYWxsQXV0b21hdGlvblJ1bnMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgYWxsQXV0b21hdGlvblN0YXR1c2VzID0gbW9kZWxzQW5kVmVyc2lvbklkcy52YWx1ZVxyXG4gICAgLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbC5sb2FkZWRWZXJzaW9uLml0ZW1zWzBdLmF1dG9tYXRpb25zU3RhdHVzKVxyXG4gICAgLmZsYXQoKVxyXG4gICAgLmZpbHRlcihpc05vbk51bGxhYmxlKVxyXG5cclxuICByZXR1cm4gYWxsQXV0b21hdGlvblN0YXR1c2VzLm1hcCgoc3RhdHVzKSA9PiBzdGF0dXMuYXV0b21hdGlvblJ1bnMpLmZsYXQoKVxyXG59KVxyXG5cclxuY29uc3QgYWxsRnVuY3Rpb25SdW5zID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBhbGxBdXRvbWF0aW9uUnVucy52YWx1ZS5tYXAoKHJ1bikgPT4gcnVuLmZ1bmN0aW9uUnVucykuZmxhdCgpXHJcbn0pXHJcblxyXG5jb25zdCB3aWR0aENsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGlmIChpc01vYmlsZS52YWx1ZSkge1xyXG4gICAgcmV0dXJuICdjYWxjKDEwMHZ3IC0gMy42cmVtKSdcclxuICB9IGVsc2UgaWYgKGlzVGFibGV0LnZhbHVlKSB7XHJcbiAgICByZXR1cm4gJzI0MHB4J1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gYCR7d2lkdGgudmFsdWUgKyA0fXB4YFxyXG4gIH1cclxufSlcclxuXHJcbmNvbnN0IHBhbmVsRXh0ZW5zaW9uTGVmdCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBpZiAoaXNNb2JpbGUudmFsdWUgfHwgaXNUYWJsZXQudmFsdWUpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBjb25zdCBtYWluUGFuZWxMZWZ0ID0gaXNFbWJlZEVuYWJsZWQudmFsdWUgPyA1MiA6IDYwXHJcbiAgcmV0dXJuIGAke21haW5QYW5lbExlZnQgKyB3aWR0aC52YWx1ZX1weGBcclxufSlcclxuXHJcbmNvbnN0IHsgc3VtbWFyeSB9ID0gdXNlRnVuY3Rpb25SdW5zU3RhdHVzU3VtbWFyeSh7XHJcbiAgcnVuczogYWxsRnVuY3Rpb25SdW5zXHJcbn0pXHJcblxyXG5yZWdpc3RlclNob3J0Y3V0cyh7XHJcbiAgVG9nZ2xlTW9kZWxzOiAoKSA9PiB0b2dnbGVBY3RpdmVQYW5lbCgnbW9kZWxzJyksXHJcbiAgVG9nZ2xlRmlsdGVyczogKCkgPT4gdG9nZ2xlQWN0aXZlUGFuZWwoJ2ZpbHRlcnMnKSxcclxuICBUb2dnbGVEaXNjdXNzaW9uczogKCkgPT4gdG9nZ2xlQWN0aXZlUGFuZWwoJ2Rpc2N1c3Npb25zJyksXHJcbiAgVG9nZ2xlRGV2TW9kZTogKCkgPT4gdG9nZ2xlQWN0aXZlUGFuZWwoJ2Rldk1vZGUnKSxcclxuICBUb2dnbGVTYXZlZFZpZXdzOiAoKSA9PiBpc1NhdmVkVmlld3NFbmFibGVkICYmIHRvZ2dsZUFjdGl2ZVBhbmVsKCdzYXZlZFZpZXdzJylcclxufSlcclxuXHJcbmNvbnN0IHRvZ2dsZUFjdGl2ZVBhbmVsID0gKHBhbmVsOiBBY3RpdmVQYW5lbCkgPT4ge1xyXG4gIG9uUGFuZWxCdXR0b25DbGljayhwYW5lbClcclxufVxyXG5cclxuY29uc3QgZm9yY2VDbG9zZVBhbmVsID0gKCkgPT4ge1xyXG4gIGFjdGl2ZVBhbmVsLnZhbHVlID0gJ25vbmUnXHJcbn1cclxuXHJcbmNvbnN0IG9wZW5Eb2NzID0gKCkgPT4ge1xyXG4gIHdpbmRvdy5vcGVuKHZpZXdlckRvY3NSb3V0ZSwgJ19ibGFuaycpXHJcbn1cclxuXHJcbmNvbnN0IG9wZW5JbnRlcmNvbUNoYXQgPSAoKSA9PiB7XHJcbiAgaWYgKGlzSW50ZXJjb21FbmFibGVkLnZhbHVlKSB7XHJcbiAgICAkaW50ZXJjb20uc2hvdygpXHJcbiAgfVxyXG59XHJcblxyXG53YXRjaChhY3RpdmVQYW5lbCwgKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XHJcbiAgY29uc3Qgd2FzTm9uZSA9IG9sZFZhbCA9PT0gJ25vbmUnXHJcblxyXG4gIC8vIElmIGEgcGFuZWwgaXMgYmVpbmcgb3BlbmVkIChub3QgY2xvc2VkKSBvbiBtb2JpbGUsIGVtaXQgZXZlbnQgdG8gcGFyZW50XHJcbiAgaWYgKHdhc05vbmUgJiYgbmV3VmFsICE9PSAnbm9uZScgJiYgaXNNb2JpbGUudmFsdWUpIHtcclxuICAgIGVtaXQoJ2ZvcmNlQ2xvc2VQYW5lbHMnKVxyXG4gIH1cclxufSlcclxuXHJcbmRlZmluZUV4cG9zZSh7XHJcbiAgZm9yY2VDbG9zZVBhbmVsLFxyXG4gIGZvcmNlQ2xvc2VQYW5lbHM6IGZvcmNlQ2xvc2VQYW5lbFxyXG59KVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlIn0=