555 lines
55 KiB
Plaintext
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,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtNQSxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLDJCQUEyQjtBQUNwQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQXdCLHFCQUFxQjtBQUM3QyxTQUFTLG9DQUFvQztBQUM3QyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLCtCQUErQjtBQUN4QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZ0NBQWdDOzs7Ozs7Ozs7O0FBSXpDLFVBQU0sT0FBTztBQUliLFVBQU0sRUFBRSxPQUFPLFlBQVksSUFBSSxjQUFjO0FBRTdDLFVBQU0sRUFBRSxrQkFBa0IsSUFBSSxtQkFBbUI7QUFDakQsVUFBTSxFQUFFLGVBQWUsb0JBQW9CLElBQUksaUNBQWlDO0FBQ2hGLFVBQU0sRUFBRSxtQkFBbUIsd0JBQXdCLFVBQVUsSUFBSSxtQkFBbUI7QUFDcEYsVUFBTSxFQUFFLFdBQVcsZUFBZSxJQUFJLFNBQVM7QUFDL0MsVUFBTSxjQUFjLGVBQWUsbUJBQW1CO0FBQ3RELFVBQU0sV0FBVyxZQUFZLFFBQVEsSUFBSTtBQUN6QyxVQUFNLFdBQVcsWUFBWSxRQUFRLElBQUk7QUFDekMsVUFBTSxpQkFBaUIsWUFBWSxRQUFRLElBQUk7QUFDL0MsVUFBTSxFQUFFLGdCQUFnQixJQUFJLHFCQUFxQjtBQUNqRCxVQUFNLHNCQUFzQix3QkFBd0I7QUFDcEQsVUFBTSxzQkFBc0IsdUJBQXVCO0FBQ25ELFVBQU0sRUFBRSxVQUFVLElBQUksV0FBVztBQUNqQyxVQUFNO0FBQUEsTUFDSixTQUFTLEVBQUUscUJBQXFCO0FBQUEsSUFDbEMsSUFBSSxnQ0FBZ0M7QUFDcEMsVUFBTTtBQUFBLE1BQ0osSUFBSTtBQUFBLFFBQ0YsUUFBUSxFQUFFLFFBQVEsYUFBYSxjQUFjO0FBQUEsTUFDL0M7QUFBQSxJQUNGLElBQUksdUJBQXVCO0FBRTNCLFVBQU0sRUFBRSxtQkFBbUIsSUFBSSx5QkFBeUI7QUFFeEQsVUFBTSxRQUFRLElBQUksR0FBRztBQUNyQixVQUFNLHNCQUFzQixJQUFJLFNBQVMsUUFBUSxNQUFNLGVBQWUsUUFBUSxNQUFNLEdBQUc7QUFDdkYsVUFBTSw4QkFBOEIsSUFBSSxJQUFnQztBQUN4RSxVQUFNLFNBQVMsSUFBSSw0QkFBNEIsT0FBTyxZQUFZO0FBQ2xFLFVBQU0sYUFBYSxJQUFJLEtBQUs7QUFDNUIsVUFBTSwyQkFBMkIsSUFBSSxLQUFLO0FBQzFDLFVBQU0sZUFBZSxJQUFJLElBQUk7QUFDN0IsVUFBTSw2QkFBNkIsSUFBSSxJQUFJO0FBRTNDLFFBQUksYUFBYTtBQUNqQixRQUFJLFNBQVM7QUFDYixRQUFJLDJCQUEyQjtBQUMvQixRQUFJLHVCQUF1QjtBQUUzQixVQUFNLGdCQUFnQixDQUFDLFVBQXNCO0FBQzNDLFVBQUksU0FBUyxNQUFPO0FBQ3BCLFlBQU0sZUFBZTtBQUNyQixpQkFBVyxRQUFRO0FBQ25CLGVBQVMsTUFBTTtBQUNmLG1CQUFhLE1BQU07QUFBQSxJQUNyQjtBQUVBLFVBQU0sOEJBQThCLENBQUMsVUFBc0I7QUFDekQsVUFBSSxTQUFTLE1BQU87QUFDcEIsWUFBTSxlQUFlO0FBQ3JCLCtCQUF5QixRQUFRO0FBQ2pDLDZCQUF1QixNQUFNO0FBQzdCLGlDQUEyQixvQkFBb0I7QUFBQSxJQUNqRDtBQUVBLFVBQU0sMkJBQTJCLGNBQWMsQ0FBQyxVQUFzQjtBQUNwRSxVQUFJLFdBQVcsT0FBTztBQUNwQixjQUFNLFFBQVEsTUFBTSxVQUFVO0FBQzlCLGNBQU0sV0FBVyxLQUFLO0FBQUEsVUFDcEI7QUFBQSxVQUNBLEtBQUssSUFBSSxhQUFhLE9BQU8sS0FBSyxJQUFJLEtBQUssWUFBWSxRQUFRLE1BQU0sRUFBRSxDQUFDO0FBQUEsUUFDMUU7QUFDQSxjQUFNLFFBQVE7QUFBQSxNQUNoQixXQUFXLHlCQUF5QixPQUFPO0FBQ3pDLGNBQU0sUUFBUSxNQUFNLFVBQVU7QUFDOUIsY0FBTSxXQUFXLEtBQUs7QUFBQSxVQUNwQjtBQUFBLFVBQ0EsS0FBSyxJQUFJLDJCQUEyQixPQUFPLEtBQUssSUFBSSxLQUFLLFlBQVksUUFBUSxHQUFHLENBQUM7QUFBQSxRQUNuRjtBQUNBLDRCQUFvQixRQUFRO0FBQUEsTUFDOUI7QUFBQSxJQUNGLEdBQUcsRUFBRTtBQUVMLFFBQUksSUFBWSxFQUFRO0FBQ3RCLHdCQUFrQiw2QkFBNkIsQ0FBQyxZQUFZO0FBQzFELGNBQU0sRUFBRSxRQUFRLFVBQVUsSUFBSSxRQUFRLENBQUMsRUFBRTtBQUN6QyxlQUFPLFFBQVE7QUFBQSxNQUNqQixDQUFDO0FBQ0QsdUJBQWlCLGNBQWMsYUFBYSxhQUFhO0FBQ3pELHVCQUFpQiw0QkFBNEIsYUFBYSwyQkFBMkI7QUFFckYsdUJBQWlCLFVBQVUsYUFBYSx3QkFBd0I7QUFFaEUsdUJBQWlCLFVBQVUsV0FBVyxNQUFNO0FBQzFDLFlBQUksV0FBVyxPQUFPO0FBQ3BCLHFCQUFXLFFBQVE7QUFBQSxRQUNyQjtBQUNBLFlBQUkseUJBQXlCLE9BQU87QUFDbEMsbUNBQXlCLFFBQVE7QUFBQSxRQUNuQztBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxVQUFNLGlCQUFpQixTQUFTLE1BQU0sWUFBWSxVQUFVLE1BQU07QUFFbEUsVUFBTSxvQkFBb0IsU0FBUyxNQUFNO0FBQ3ZDLFlBQU0sd0JBQXdCLG9CQUFvQixNQUMvQyxJQUFJLENBQUMsRUFBRSxNQUFNLE1BQU0sTUFBTSxjQUFjLE1BQU0sQ0FBQyxFQUFFLGlCQUFpQixFQUNqRSxLQUFLLEVBQ0wsT0FBTyxhQUFhO0FBRXZCLGFBQU8sc0JBQXNCLElBQUksQ0FBQyxXQUFXLE9BQU8sY0FBYyxFQUFFLEtBQUs7QUFBQSxJQUMzRSxDQUFDO0FBRUQsVUFBTSxrQkFBa0IsU0FBUyxNQUFNO0FBQ3JDLGFBQU8sa0JBQWtCLE1BQU0sSUFBSSxDQUFDLFFBQVEsSUFBSSxZQUFZLEVBQUUsS0FBSztBQUFBLElBQ3JFLENBQUM7QUFFRCxVQUFNLGFBQWEsU0FBUyxNQUFNO0FBQ2hDLFVBQUksU0FBUyxPQUFPO0FBQ2xCLGVBQU87QUFBQSxNQUNULFdBQVcsU0FBUyxPQUFPO0FBQ3pCLGVBQU87QUFBQSxNQUNULE9BQU87QUFDTCxlQUFPLEdBQUcsTUFBTSxRQUFRLENBQUM7QUFBQSxNQUMzQjtBQUFBLElBQ0YsQ0FBQztBQUVELFVBQU0scUJBQXFCLFNBQVMsTUFBTTtBQUN4QyxVQUFJLFNBQVMsU0FBUyxTQUFTLE9BQU87QUFDcEM7QUFBQSxNQUNGO0FBQ0EsWUFBTSxnQkFBZ0IsZUFBZSxRQUFRLEtBQUs7QUFDbEQsYUFBTyxHQUFHLGdCQUFnQixNQUFNLEtBQUs7QUFBQSxJQUN2QyxDQUFDO0FBRUQsVUFBTSxFQUFFLFFBQVEsSUFBSSw2QkFBNkI7QUFBQSxNQUMvQyxNQUFNO0FBQUEsSUFDUixDQUFDO0FBRUQsc0JBQWtCO0FBQUEsTUFDaEIsY0FBYyxNQUFNLGtCQUFrQixRQUFRO0FBQUEsTUFDOUMsZUFBZSxNQUFNLGtCQUFrQixTQUFTO0FBQUEsTUFDaEQsbUJBQW1CLE1BQU0sa0JBQWtCLGFBQWE7QUFBQSxNQUN4RCxlQUFlLE1BQU0sa0JBQWtCLFNBQVM7QUFBQSxNQUNoRCxrQkFBa0IsTUFBTSx1QkFBdUIsa0JBQWtCLFlBQVk7QUFBQSxJQUMvRSxDQUFDO0FBRUQsVUFBTSxvQkFBb0IsQ0FBQyxVQUF1QjtBQUNoRCx5QkFBbUIsS0FBSztBQUFBLElBQzFCO0FBRUEsVUFBTSxrQkFBa0IsTUFBTTtBQUM1QixrQkFBWSxRQUFRO0FBQUEsSUFDdEI7QUFFQSxVQUFNLFdBQVcsTUFBTTtBQUNyQixhQUFPLEtBQUssaUJBQWlCLFFBQVE7QUFBQSxJQUN2QztBQUVBLFVBQU0sbUJBQW1CLE1BQU07QUFDN0IsVUFBSSxrQkFBa0IsT0FBTztBQUMzQixrQkFBVSxLQUFLO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBRUEsVUFBTSxhQUFhLENBQUMsUUFBUSxXQUFXO0FBQ3JDLFlBQU0sVUFBVSxXQUFXO0FBRzNCLFVBQUksV0FBVyxXQUFXLFVBQVUsU0FBUyxPQUFPO0FBQ2xELGFBQUssa0JBQWtCO0FBQUEsTUFDekI7QUFBQSxJQUNGLENBQUM7QUFFRCxhQUFhO0FBQUEsTUFDWDtBQUFBLE1BQ0Esa0JBQWtCO0FBQUEsSUFDcEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFqVE8sT0FBTTtBQUFBLEVBQThCLG9CQUFpQjs7Ozs7Ozs7Ozs7Ozs7dUJBN0YzRDtBQUFBLElBNExRO0FBQUE7QUFBQSxNQTNMTixPQUFLLGlCQUFDLCtIQUE2SDtBQUFBLFFBQ2xIO1FBQTRNLHlCQUFjO0FBQUE7TUFLeE8sb0JBQWlCO0FBQUE7O01BRXBCO0FBQUEsUUFzSE07QUFBQTtBQUFBLFVBdEhELE9BQUssaUJBQUMsNEJBQW1DLHdCQUFjO0FBQUEsVUFBbUIsb0JBQWlCO0FBQUE7OzBCQUM5RixhQVlFO0FBQUEsWUFIQyxRQUFRLHVCQUFXO0FBQUEsWUFDbkIsTUFBTTtBQUFBLFlBQ04sU0FBSyxzQ0FBRSx5QkFBaUI7QUFBQSxZQUFZLG9CQUFpQjtBQUFBOzs7Y0FWakM7QUFBQSxnQkFBOEIsOEJBQXVCLGlCQUFVLGNBQVk7QUFBQTs7Ozs7OzBCQVlsRyxhQWFFO0FBQUEsWUFKQyxRQUFRLHVCQUFXO0FBQUEsWUFDbkIsTUFBTTtBQUFBLFlBQ04sS0FBSztBQUFBLFlBQ0wsU0FBSyxzQ0FBRSx5QkFBaUI7QUFBQSxZQUFhLG9CQUFpQjtBQUFBOzs7Y0FYbkM7QUFBQSxnQkFBNkIsOEJBQXVCLGlCQUFVLGVBQWE7QUFBQTs7Ozs7OzBCQWFqRyxhQVNFO0FBQUEsWUFIQyxRQUFRLHVCQUFXO0FBQUEsWUFDbkIsTUFBTTtBQUFBLFlBQ04sU0FBSyxzQ0FBRSx5QkFBaUI7QUFBQSxZQUFjLG9CQUFpQjtBQUFBOzs7Y0FQcEMsdUJBQWU7QUFBQTs7OzswQkFTckMsYUFZRTtBQUFBLFlBSEMsUUFBUSx1QkFBVztBQUFBLFlBQ25CLE1BQU07QUFBQSxZQUNOLFNBQUssc0NBQUUseUJBQWlCO0FBQUEsWUFBaUIsb0JBQWlCO0FBQUE7OztjQVZ2QztBQUFBLGdCQUE2Qiw4QkFBdUIsaUJBQVUsbUJBQWlCO0FBQUE7Ozs7OztVQWFyRztBQUFBLFVBRVEsNERBRFIsYUFhOEI7QUFBQTtZQUgzQixRQUFRLHVCQUFXO0FBQUEsWUFDbkIsTUFBTTtBQUFBLFlBQ04sU0FBSyxzQ0FBRSx5QkFBaUI7QUFBQSxZQUFnQixvQkFBaUI7QUFBQTs7O2NBVnJDO0FBQUEsZ0JBQThCLDhCQUF1QixpQkFBVSxrQkFBZ0I7QUFBQTs7Ozs7O1VBYzlGLHlCQUFrQixXQUFNLG1DQURoQyxhQWE2QjtBQUFBO1lBUDFCLFFBQVEsdUJBQVc7QUFBQSxZQUNuQixTQUFLLHNDQUFFLHlCQUFpQjtBQUFBLFlBQWMsb0JBQWlCO0FBQUE7OEJBRXhELE1BR0U7QUFBQSxjQUhGLGFBR0U7QUFBQSxnQkFGQyxTQUFTO0FBQUEsZ0JBQ1YsT0FBTTtBQUFBLGdCQUF3QixvQkFBaUI7QUFBQTs7Ozs7O3VCQVRsQixlQUFRO0FBQUE7OztXQWFoQywwQkFBYyxDQUFNLG1CQUFZLHVCQUFXLHlCQURwRCxvQkFtQ00sT0FuQ04sWUFtQ007QUFBQSw0QkEvQkosYUFhRTtBQUFBLGNBSkMsUUFBUSx1QkFBVztBQUFBLGNBQ25CLE1BQU07QUFBQSxjQUNQO0FBQUEsY0FDQyxTQUFLLHNDQUFFLHlCQUFpQjtBQUFBLGNBQWEsb0JBQWlCO0FBQUE7OztnQkFYaEM7QUFBQSxrQkFBZ0MsOEJBQXVCLGlCQUFVLGVBQWE7QUFBQTs7Ozs7OzRCQWF2RyxhQVNFO0FBQUEsY0FIQyxNQUFNO0FBQUEsY0FDUDtBQUFBLGNBQ0MsU0FBTztBQUFBLGNBQVUsb0JBQWlCO0FBQUE7OztnQkFQWix1QkFBZTtBQUFBOzs7O1lBVWhDLDBEQURSLGFBTUU7QUFBQTtjQUhDLE1BQU07QUFBQSxjQUNQO0FBQUEsY0FDQyxTQUFPO0FBQUEsY0FBa0Isb0JBQWlCO0FBQUE7aUNBSGxDLHVCQUFlO0FBQUE7Ozs7OztNQVE5QjtBQUFBLE1BRVEsdUJBQVcsV0FBZ0IsdUNBRG5DO0FBQUEsUUFNRTtBQUFBO0FBQUE7VUFKQSxLQUFJO0FBQUEsVUFDSixPQUFNO0FBQUEsVUFDTCxPQUFLLHdCQUFVLGVBQUs7QUFBQSxVQUNwQixhQUFXO0FBQUEsVUFBZSxvQkFBaUI7QUFBQTs7Ozs7TUFHOUM7QUFBQSxzQkFDQTtBQUFBLFFBaUNNO0FBQUE7QUFBQSxVQS9CSixLQUFJO0FBQUEsVUFDSCxPQUFLO0FBQUE7WUFBcU0sd0JBQWM7QUFBQSxZQUF5Qyx3QkFBYztBQUFBO1VBSy9RLE9BQUssMEJBQVksaUJBQVU7QUFBQSxVQUFLLG9CQUFpQjtBQUFBOzswQkFFbEQsYUFHRTtBQUFBLFlBRFEsWUFBVTtBQUFBLDZGQUFhO0FBQUEsWUFBRSxvQkFBaUI7QUFBQTtxQkFEMUMsdUJBQVc7QUFBQTtVQUdLLHVCQUFXLDJCQUFyQyxhQUFvSDtBQUFBO1lBQS9ELG9CQUFpQjtBQUFBO1VBQzNDLHVCQUFXLDRCQUF0QyxhQUFzSDtBQUFBO1lBQS9ELG9CQUFpQjtBQUFBO1VBRWhFLHFCQUFjLFdBQU0sS0FBVSx1QkFBVywrQkFEakQsYUFFRTtBQUFBO1lBRG1FLG9CQUFpQjtBQUFBO1VBRzlFLHVCQUFXLDRCQURuQixhQUlFO0FBQUE7WUFGQyxtQkFBaUI7QUFBQSxZQUNqQixTQUFTO0FBQUEsWUFBUyxvQkFBaUI7QUFBQTtVQUVULHVCQUFXLDJCQUF4QyxhQUF1SDtBQUFBO1lBQS9ELG9CQUFpQjtBQUFBO3lCQUN6RTtBQUFBLFlBT1k7QUFBQSxjQVBELG9CQUFpQiw0Q0FBMkM7QUFBQTtBQUFBLGNBRS9DLDhCQUF1Qiw4QkFBdUIsdUJBQVcsOEJBRC9FLGFBS0U7QUFBQTtnQkFEQyxTQUFLLHNDQUFFLHFCQUFXO0FBQUEsZ0JBQVcsb0JBQWlCO0FBQUE7Ozs7Ozs7OztpQkE3QjNDLHVCQUFXO0FBQUE7TUFrQ3JCO0FBQUEsTUFDQTtBQUFBLFFBWU07QUFBQTtBQUFBLFVBWEosSUFBRztBQUFBLFVBQ0gsT0FBTTtBQUFBLFVBQ0wsT0FBSyx5QkFBVyx5QkFBa0IsdUJBQXVCLDBCQUFtQjtBQUFBLFVBQU8sb0JBQWlCO0FBQUE7O1VBRXJHO0FBQUEsVUFDQTtBQUFBLFlBSUU7QUFBQTtBQUFBLGNBSEEsS0FBSTtBQUFBLGNBQ0osT0FBTTtBQUFBLGNBQ0wsYUFBVztBQUFBLGNBQTZCLG9CQUFpQjtBQUFBOzs7OztVQUU1RCxhQUFpSDtBQUFBLFlBQW5HLE1BQUs7QUFBQSxZQUFrQixvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTGVmdC52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAtLT5cclxuPHRlbXBsYXRlPlxyXG4gIDxhc2lkZVxyXG4gICAgY2xhc3M9XCJhYnNvbHV0ZSBsZWZ0LTIgei01MCBmbGV4IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1vdXRsaW5lLTIgYmctZm91bmRhdGlvbiBweC0xIG92ZXJmbG93LXZpc2libGUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmVcIlxyXG4gICAgOmNsYXNzPVwiW1xyXG4gICAgICBpc0VtYmVkRW5hYmxlZFxyXG4gICAgICAgID8gJ3RvcC1bMC41cmVtXSdcclxuICAgICAgICA6ICd0b3AtWzMuNXJlbV0gbGc6dG9wLVszcmVtXSBsZzpyb3VuZGVkLW5vbmUgbGc6cHgtMiBsZzptYXgtaC1bY2FsYygxMDBkdmgtM3JlbSldIGxnOmJvcmRlci1sLTAgbGc6Ym9yZGVyLXQtMCBsZzpib3JkZXItYi0wIGxnOmgtZnVsbCBsZzpsZWZ0LTAnLFxyXG4gICAgICBoYXNBY3RpdmVQYW5lbCAmJiAnaC1mdWxsIG1heC1oLVtjYWxjKDEwMGR2aC04cmVtKV0gcm91bmRlZC1yLW5vbmUnXHJcbiAgICBdXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjM6M1wiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTIgcHktMVwiIDpjbGFzcz1cImlzRW1iZWRFbmFibGVkID8gJycgOiAnbGc6cHktMidcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6MTI6NVwiPlxyXG4gICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICB2LXRpcHB5PVwiXHJcbiAgICAgICAgICBnZXRUb29sdGlwUHJvcHMoXHJcbiAgICAgICAgICAgIGdldFNob3J0Y3V0RGlzcGxheVRleHQoc2hvcnRjdXRzLlRvZ2dsZU1vZGVscywgeyBmb3JtYXQ6ICdzZXBhcmF0ZScgfSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgOmFjdGl2ZT1cImFjdGl2ZVBhbmVsID09PSAnbW9kZWxzJ1wiXHJcbiAgICAgICAgOmljb249XCJCb3hcIlxyXG4gICAgICAgIEBjbGljaz1cInRvZ2dsZUFjdGl2ZVBhbmVsKCdtb2RlbHMnKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxMzo3XCJcclxuICAgICAgLz5cclxuICAgICAgPFZpZXdlckNvbnRyb2xzQnV0dG9uVG9nZ2xlXG4gICAgICAgIHYtdGlwcHk9XCJcbiAgICAgICAgICBnZXRUb29sdGlwUHJvcHMoXG4gICAgICAgICAgICBnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0cy5Ub2dnbGVGaWx0ZXJzLCB7IGZvcm1hdDogJ3NlcGFyYXRlJyB9KSxcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgOmFjdGl2ZT1cImFjdGl2ZVBhbmVsID09PSAnZmlsdGVycydcIlxyXG4gICAgICAgIDppY29uPVwiTGlzdEZpbHRlclwiXHJcbiAgICAgICAgOmRvdD1cImhhc0FueUZpbHRlcnNBcHBsaWVkXCJcclxuICAgICAgICBAY2xpY2s9XCJ0b2dnbGVBY3RpdmVQYW5lbCgnZmlsdGVycycpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjI2OjdcIlxuICAgICAgLz5cbiAgICAgIDxWaWV3ZXJDb250cm9sc0J1dHRvblRvZ2dsZVxuICAgICAgICB2LXRpcHB5PVwiXG4gICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKCdFbGVtZW50cycsIHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xuICAgICAgICAgIH0pXG4gICAgICAgIFwiXG4gICAgICAgIDphY3RpdmU9XCJhY3RpdmVQYW5lbCA9PT0gJ2VsZW1lbnRzJ1wiXG4gICAgICAgIDppY29uPVwiU2VhcmNoXCJcbiAgICAgICAgQGNsaWNrPVwidG9nZ2xlQWN0aXZlUGFuZWwoJ2VsZW1lbnRzJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6NDA6N1wiXG4gICAgICAvPlxuICAgICAgPFZpZXdlckNvbnRyb2xzQnV0dG9uVG9nZ2xlXG4gICAgICAgIHYtdGlwcHk9XCJcbiAgICAgICAgICBnZXRUb29sdGlwUHJvcHMoXG4gICAgICAgICAgICBnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0cy5Ub2dnbGVEaXNjdXNzaW9ucywgeyBmb3JtYXQ6ICdzZXBhcmF0ZScgfSksXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiAncmlnaHQnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICBcIlxyXG4gICAgICAgIDphY3RpdmU9XCJhY3RpdmVQYW5lbCA9PT0gJ2Rpc2N1c3Npb25zJ1wiXHJcbiAgICAgICAgOmljb249XCJNZXNzYWdlU3F1YXJlVGV4dFwiXHJcbiAgICAgICAgQGNsaWNrPVwidG9nZ2xlQWN0aXZlUGFuZWwoJ2Rpc2N1c3Npb25zJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6NTA6N1wiXHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8IS0tIFNhdmVkIHZpZXdzIC0tPlxyXG4gICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICB2LWlmPVwiaXNTYXZlZFZpZXdzRW5hYmxlZFwiXHJcbiAgICAgICAgdi10aXBweT1cIlxyXG4gICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKFxyXG4gICAgICAgICAgICBnZXRTaG9ydGN1dERpc3BsYXlUZXh0KHNob3J0Y3V0cy5Ub2dnbGVTYXZlZFZpZXdzLCB7IGZvcm1hdDogJ3NlcGFyYXRlJyB9KSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgXCJcclxuICAgICAgICA6YWN0aXZlPVwiYWN0aXZlUGFuZWwgPT09ICdzYXZlZFZpZXdzJ1wiXHJcbiAgICAgICAgOmljb249XCJDYW1lcmFcIlxyXG4gICAgICAgIEBjbGljaz1cInRvZ2dsZUFjdGl2ZVBhbmVsKCdzYXZlZFZpZXdzJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6NjU6N1wiXHJcbiAgICAgID48L1ZpZXdlckNvbnRyb2xzQnV0dG9uVG9nZ2xlPlxyXG5cclxuICAgICAgPFZpZXdlckNvbnRyb2xzQnV0dG9uVG9nZ2xlXHJcbiAgICAgICAgdi1pZj1cImFsbEF1dG9tYXRpb25SdW5zLmxlbmd0aCAhPT0gMFwiXHJcbiAgICAgICAgdi10aXBweT1cIntcclxuICAgICAgICAgIGNvbnRlbnQ6IHN1bW1hcnkubG9uZ1N1bW1hcnksXHJcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcclxuICAgICAgICB9XCJcclxuICAgICAgICA6YWN0aXZlPVwiYWN0aXZlUGFuZWwgPT09ICdhdXRvbWF0ZSdcIlxyXG4gICAgICAgIEBjbGljaz1cInRvZ2dsZUFjdGl2ZVBhbmVsKCdhdXRvbWF0ZScpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjgwOjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPEF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNJY29uXHJcbiAgICAgICAgICA6c3VtbWFyeT1cInN1bW1hcnlcIlxyXG4gICAgICAgICAgY2xhc3M9XCJoLTUgdy01IG1kOmgtNiBtZDp3LTZcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6ODk6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9WaWV3ZXJDb250cm9sc0J1dHRvblRvZ2dsZT5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIHYtaWY9XCIhaXNFbWJlZEVuYWJsZWQgJiYgKCFpc1RhYmxldCB8fCBhY3RpdmVQYW5lbCAhPT0gJ25vbmUnKVwiXHJcbiAgICAgICAgY2xhc3M9XCJtdC1hdXRvIGZsZXggZmxleC1jb2wgZ2FwLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6OTQ6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICAgIHYtdGlwcHk9XCJcclxuICAgICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKFxyXG4gICAgICAgICAgICAgIGdldFNob3J0Y3V0RGlzcGxheVRleHQoc2hvcnRjdXRzLlRvZ2dsZURldk1vZGUsIHsgZm9ybWF0OiAnc2VwYXJhdGUnIH0pLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIDphY3RpdmU9XCJhY3RpdmVQYW5lbCA9PT0gJ2Rldk1vZGUnXCJcclxuICAgICAgICAgIDppY29uPVwiQ29kZVhtbFwiXHJcbiAgICAgICAgICBzZWNvbmRhcnlcclxuICAgICAgICAgIEBjbGljaz1cInRvZ2dsZUFjdGl2ZVBhbmVsKCdkZXZNb2RlJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6OTg6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICAgIHYtdGlwcHk9XCJcclxuICAgICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKCdEb2N1bWVudGF0aW9uJywge1xyXG4gICAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIDppY29uPVwiQm9va09wZW5cIlxyXG4gICAgICAgICAgc2Vjb25kYXJ5XHJcbiAgICAgICAgICBAY2xpY2s9XCJvcGVuRG9jc1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxMTI6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8Vmlld2VyQ29udHJvbHNCdXR0b25Ub2dnbGVcclxuICAgICAgICAgIHYtaWY9XCJpc0ludGVyY29tRW5hYmxlZFwiXHJcbiAgICAgICAgICB2LXRpcHB5PVwiZ2V0VG9vbHRpcFByb3BzKCdHZXQgaGVscCcpXCJcclxuICAgICAgICAgIDppY29uPVwiQ2lyY2xlUXVlc3Rpb25NYXJrXCJcclxuICAgICAgICAgIHNlY29uZGFyeVxyXG4gICAgICAgICAgQGNsaWNrPVwib3BlbkludGVyY29tQ2hhdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxMjI6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFJlc2l6ZSBoYW5kbGUgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIHYtaWY9XCJhY3RpdmVQYW5lbCAhPT0gJ25vbmUnICYmICFpc0VtYmVkRW5hYmxlZFwiXHJcbiAgICAgIHJlZj1cInJlc2l6ZUhhbmRsZVwiXHJcbiAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaC1mdWxsIG1heC1oLVtjYWxjKDEwMGR2aC0zcmVtKV0gdy00IHRyYW5zaXRpb24gYm9yZGVyLWwgaG92ZXI6Ym9yZGVyLWwtWzJweF0gYm9yZGVyLW91dGxpbmUtMiBob3Zlcjpib3JkZXItcHJpbWFyeSBoaWRkZW4gbGc6ZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLWV3LXJlc2l6ZSB6LTMwXCJcclxuICAgICAgOnN0eWxlPVwiYGxlZnQ6JHt3aWR0aCArIDUyfXB4O2BcIlxyXG4gICAgICBAbW91c2Vkb3duPVwic3RhcnRSZXNpemluZ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxMzM6NVwiXHJcbiAgICAvPlxyXG5cclxuICAgIDwhLS0gU2Nyb2xsYWJsZSBjb250cm9scyBjb250YWluZXIgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIHYtc2hvdz1cImFjdGl2ZVBhbmVsICE9PSAnbm9uZSdcIlxyXG4gICAgICByZWY9XCJzY3JvbGxhYmxlQ29udHJvbHNDb250YWluZXJcIlxyXG4gICAgICA6Y2xhc3M9XCJbXHJcbiAgICAgICAgJ2JnLWZvdW5kYXRpb24gYWJzb2x1dGUgei0xMCBsZWZ0LVtjYWxjKDIuNXJlbSsxcHgpXSB0b3AtWy0xcHhdIGJvdHRvbS1bLTFweF0gb3ZlcmZsb3ctaGlkZGVuIGJvcmRlci1vdXRsaW5lLTIgYm9yZGVyIGJvcmRlci1sLTAgcm91bmRlZC1sZyByb3VuZGVkLXRsLW5vbmUgcm91bmRlZC1ibC1ub25lICcsXHJcbiAgICAgICAgaGFzQWN0aXZlUGFuZWwgPyAnb3BhY2l0eS0xMDAnIDogJ29wYWNpdHktMCcsXHJcbiAgICAgICAgaXNFbWJlZEVuYWJsZWQgPyAnJyA6ICdsZzpsZWZ0LVtjYWxjKDNyZW0rMXB4KV0gbGc6Ym9yZGVyLW5vbmUgbGc6cm91bmRlZC1ub25lJ1xyXG4gICAgICBdXCJcclxuICAgICAgOnN0eWxlPVwiYHdpZHRoOiAke3dpZHRoQ2xhc3N9O2BcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6MTQyOjVcIlxyXG4gICAgPlxyXG4gICAgICA8Vmlld2VyTW9kZWxzUGFuZWxcbiAgICAgICAgdi1zaG93PVwiYWN0aXZlUGFuZWwgPT09ICdtb2RlbHMnXCJcbiAgICAgICAgdi1tb2RlbDpzdWItdmlldz1cIm1vZGVsc1N1YlZpZXdcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6MTUyOjdcIlxuICAgICAgLz5cbiAgICAgIDxWaWV3ZXJGaWx0ZXJzUGFuZWwgdi1pZj1cImFjdGl2ZVBhbmVsID09PSAnZmlsdGVycydcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29udHJvbHMvTGVmdC52dWU6MTU2OjdcIiAvPlxuICAgICAgPFZpZXdlckVsZW1lbnRzUGFuZWwgdi1pZj1cImFjdGl2ZVBhbmVsID09PSAnZWxlbWVudHMnXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE1Nzo3XCIgLz5cbiAgICAgIDxWaWV3ZXJDb21tZW50c1BhbmVsXG4gICAgICAgIHYtaWY9XCJyZXNvdXJjZUl0ZW1zLmxlbmd0aCAhPT0gMCAmJiBhY3RpdmVQYW5lbCA9PT0gJ2Rpc2N1c3Npb25zJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxNTg6N1wiXG4gICAgICAvPlxuICAgICAgPEF1dG9tYXRlVmlld2VyUGFuZWxcclxuICAgICAgICB2LWlmPVwiYWN0aXZlUGFuZWwgPT09ICdhdXRvbWF0ZSdcIlxyXG4gICAgICAgIDphdXRvbWF0aW9uLXJ1bnM9XCJhbGxBdXRvbWF0aW9uUnVuc1wiXHJcbiAgICAgICAgOnN1bW1hcnk9XCJzdW1tYXJ5XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE2MTo3XCJcclxuICAgICAgLz5cclxuICAgICAgPFZpZXdlckRhdGF2aWV3ZXJQYW5lbCB2LWlmPVwiYWN0aXZlUGFuZWwgPT09ICdkZXZNb2RlJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb250cm9scy9MZWZ0LnZ1ZToxNjY6N1wiIC8+XHJcbiAgICAgIDxLZWVwQWxpdmUgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE2Nzo3XCI+XHJcbiAgICAgICAgPFZpZXdlclNhdmVkVmlld3NQYW5lbFxyXG4gICAgICAgICAgdi1pZj1cIlxyXG4gICAgICAgICAgICBpc1NhdmVkVmlld3NFbmFibGVkICYmIGlzV29ya3NwYWNlc0VuYWJsZWQgJiYgYWN0aXZlUGFuZWwgPT09ICdzYXZlZFZpZXdzJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIEBjbG9zZT1cImFjdGl2ZVBhbmVsID0gJ25vbmUnXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE2ODo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L0tlZXBBbGl2ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUGFuZWwgRXh0ZW5zaW9uIC0gUG9ydGFsIHRhcmdldCBmb3IgYWRkaXRpb25hbCBjb250ZW50IC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBpZD1cInBhbmVsLWV4dGVuc2lvblwiXHJcbiAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei01MCBsZWZ0LVtjYWxjKDEwMGR2dy0xNnJlbSldIHNtOmxlZnQtNzIgbWF4LWgtW2NhbGMoMTAwZHZoLTZyZW0pXSBtZDptYXgtaC1bY2FsYygxMDBkdmgtNHJlbSldIHRvcC0xLjUgYmctZm91bmRhdGlvbiByb3VuZGVkLWxnIG92ZXJmbG93LWhpZGRlblwiXHJcbiAgICAgIDpzdHlsZT1cImBsZWZ0OiAke3BhbmVsRXh0ZW5zaW9uTGVmdH0gIWltcG9ydGFudDsgd2lkdGg6ICR7cGFuZWxFeHRlbnNpb25XaWR0aH1weDtgXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE3ODo1XCJcclxuICAgID5cclxuICAgICAgPCEtLSBSZXNpemUgaGFuZGxlIGZvciBwYW5lbCBleHRlbnNpb24gLS0+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICByZWY9XCJwYW5lbEV4dGVuc2lvblJlc2l6ZUhhbmRsZVwiXHJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBoLWZ1bGwgbWF4LWgtW2NhbGMoMTAwZHZoLTZyZW0pXSBtZDptYXgtaC1bY2FsYygxMDBkdmgtNHJlbSldIHctNCB0cmFuc2l0aW9uIGJvcmRlci1yIGhvdmVyOmJvcmRlci1yLVsycHhdIGJvcmRlci1vdXRsaW5lLTIgaG92ZXI6Ym9yZGVyLXByaW1hcnkgaGlkZGVuIGxnOmZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1ldy1yZXNpemUgei0zMCByaWdodC0wXCJcclxuICAgICAgICBAbW91c2Vkb3duPVwic3RhcnRQYW5lbEV4dGVuc2lvblJlc2l6aW5nXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE4NDo3XCJcclxuICAgICAgLz5cclxuICAgICAgPFBvcnRhbFRhcmdldCBuYW1lPVwicGFuZWwtZXh0ZW5zaW9uXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlOjE4OTo3XCI+PC9Qb3J0YWxUYXJnZXQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2FzaWRlPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgdXNlVmlld2VyU2hvcnRjdXRzIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy91aSdcclxuaW1wb3J0IHtcclxuICB1c2VJbmplY3RlZFZpZXdlckludGVyZmFjZVN0YXRlLFxyXG4gIHVzZUluamVjdGVkVmlld2VyTG9hZGVkUmVzb3VyY2VzLFxyXG4gIHVzZUluamVjdGVkVmlld2VyU3RhdGVcclxufSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NldHVwJ1xyXG5pbXBvcnQgeyB1c2VFbWJlZCB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cC9lbWJlZCdcclxuaW1wb3J0IHsgVGFpbHdpbmRCcmVha3BvaW50cyB9IGZyb20gJ35+L2xpYi9jb21tb24vaGVscGVycy90YWlsd2luZCdcclxuaW1wb3J0IHtcclxuICB1c2VFdmVudExpc3RlbmVyLFxyXG4gIHVzZVJlc2l6ZU9ic2VydmVyLFxyXG4gIHVzZUJyZWFrcG9pbnRzLFxyXG4gIHVzZVdpbmRvd1NpemUsXHJcbiAgdXNlVGhyb3R0bGVGblxyXG59IGZyb20gJ0B2dWV1c2UvY29yZSdcclxuaW1wb3J0IHsgdHlwZSBOdWxsYWJsZSwgaXNOb25OdWxsYWJsZSB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgdXNlRnVuY3Rpb25SdW5zU3RhdHVzU3VtbWFyeSB9IGZyb20gJ34vbGliL2F1dG9tYXRlL2NvbXBvc2FibGVzL3J1blN0YXR1cydcclxuaW1wb3J0IHsgdXNlSW50ZXJjb21FbmFibGVkIH0gZnJvbSAnfn4vbGliL2ludGVyY29tL2NvbXBvc2FibGVzL2VuYWJsZWQnXHJcbmltcG9ydCB7IHZpZXdlckRvY3NSb3V0ZSB9IGZyb20gJ35+L2xpYi9jb21tb24vaGVscGVycy9yb3V0ZSdcclxuaW1wb3J0IHsgdXNlQXJlU2F2ZWRWaWV3c0VuYWJsZWQgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy9nZW5lcmFsJ1xyXG5pbXBvcnQge1xyXG4gIENhbWVyYSxcbiAgQ29kZVhtbCxcbiAgQm9va09wZW4sXG4gIEJveCxcbiAgTGlzdEZpbHRlcixcbiAgU2VhcmNoLFxuICBNZXNzYWdlU3F1YXJlVGV4dCxcbiAgQ2lyY2xlUXVlc3Rpb25NYXJrXG59IGZyb20gJ2x1Y2lkZS12dWUtbmV4dCdcbmltcG9ydCB7IHVzZVZpZXdlclBhbmVsc1V0aWxpdGllcyB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cC9wYW5lbHMnXHJcbmltcG9ydCB0eXBlIHsgQWN0aXZlUGFuZWwgfSBmcm9tICd+L2xpYi92aWV3ZXIvaGVscGVycy9zY2VuZUV4cGxvcmVyJ1xyXG5cclxuLy8gVE9ETzogUmVmYWN0b3IgYWxsIG9mIHRoaXMgZXZlbnQgYnVzaW5lc3MgYW5kIGp1c3QgcmVhZC93cml0ZSBwYW5lbHMgc3RhdGUgZGlyZWN0bHlcclxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcclxuICBmb3JjZUNsb3NlUGFuZWxzOiBbXVxyXG59PigpXHJcblxyXG5jb25zdCB7IHdpZHRoOiB3aW5kb3dXaWR0aCB9ID0gdXNlV2luZG93U2l6ZSgpXHJcblxyXG5jb25zdCB7IGlzSW50ZXJjb21FbmFibGVkIH0gPSB1c2VJbnRlcmNvbUVuYWJsZWQoKVxyXG5jb25zdCB7IHJlc291cmNlSXRlbXMsIG1vZGVsc0FuZFZlcnNpb25JZHMgfSA9IHVzZUluamVjdGVkVmlld2VyTG9hZGVkUmVzb3VyY2VzKClcclxuY29uc3QgeyByZWdpc3RlclNob3J0Y3V0cywgZ2V0U2hvcnRjdXREaXNwbGF5VGV4dCwgc2hvcnRjdXRzIH0gPSB1c2VWaWV3ZXJTaG9ydGN1dHMoKVxyXG5jb25zdCB7IGlzRW5hYmxlZDogaXNFbWJlZEVuYWJsZWQgfSA9IHVzZUVtYmVkKClcclxuY29uc3QgYnJlYWtwb2ludHMgPSB1c2VCcmVha3BvaW50cyhUYWlsd2luZEJyZWFrcG9pbnRzKVxyXG5jb25zdCBpc01vYmlsZSA9IGJyZWFrcG9pbnRzLnNtYWxsZXIoJ3NtJylcclxuY29uc3QgaXNUYWJsZXQgPSBicmVha3BvaW50cy5zbWFsbGVyKCdsZycpXHJcbmNvbnN0IGlzTGFyZ2VyVGhhbkxnID0gYnJlYWtwb2ludHMuZ3JlYXRlcignbGcnKVxyXG5jb25zdCB7IGdldFRvb2x0aXBQcm9wcyB9ID0gdXNlU21hcnRUb29sdGlwRGVsYXkoKVxyXG5jb25zdCBpc1NhdmVkVmlld3NFbmFibGVkID0gdXNlQXJlU2F2ZWRWaWV3c0VuYWJsZWQoKVxyXG5jb25zdCBpc1dvcmtzcGFjZXNFbmFibGVkID0gdXNlSXNXb3Jrc3BhY2VzRW5hYmxlZCgpXHJcbmNvbnN0IHsgJGludGVyY29tIH0gPSB1c2VOdXh0QXBwKClcclxuY29uc3Qge1xyXG4gIGZpbHRlcnM6IHsgaGFzQW55RmlsdGVyc0FwcGxpZWQgfVxyXG59ID0gdXNlSW5qZWN0ZWRWaWV3ZXJJbnRlcmZhY2VTdGF0ZSgpXHJcbmNvbnN0IHtcclxuICB1aToge1xyXG4gICAgcGFuZWxzOiB7IGFjdGl2ZTogYWN0aXZlUGFuZWwsIG1vZGVsc1N1YlZpZXcgfVxyXG4gIH1cclxufSA9IHVzZUluamVjdGVkVmlld2VyU3RhdGUoKVxyXG5cclxuY29uc3QgeyBvblBhbmVsQnV0dG9uQ2xpY2sgfSA9IHVzZVZpZXdlclBhbmVsc1V0aWxpdGllcygpXHJcblxyXG5jb25zdCB3aWR0aCA9IHJlZigyNjQpXHJcbmNvbnN0IHBhbmVsRXh0ZW5zaW9uV2lkdGggPSByZWYoaXNNb2JpbGUudmFsdWUgPyAyMDAgOiBpc0xhcmdlclRoYW5MZy52YWx1ZSA/IDMwMCA6IDI1NilcclxuY29uc3Qgc2Nyb2xsYWJsZUNvbnRyb2xzQ29udGFpbmVyID0gcmVmKG51bGwgYXMgTnVsbGFibGU8SFRNTERpdkVsZW1lbnQ+KVxyXG5jb25zdCBoZWlnaHQgPSByZWYoc2Nyb2xsYWJsZUNvbnRyb2xzQ29udGFpbmVyLnZhbHVlPy5jbGllbnRIZWlnaHQpXHJcbmNvbnN0IGlzUmVzaXppbmcgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGlzUGFuZWxFeHRlbnNpb25SZXNpemluZyA9IHJlZihmYWxzZSlcclxuY29uc3QgcmVzaXplSGFuZGxlID0gcmVmKG51bGwpXHJcbmNvbnN0IHBhbmVsRXh0ZW5zaW9uUmVzaXplSGFuZGxlID0gcmVmKG51bGwpXHJcblxyXG5sZXQgc3RhcnRXaWR0aCA9IDBcclxubGV0IHN0YXJ0WCA9IDBcclxubGV0IHN0YXJ0UGFuZWxFeHRlbnNpb25XaWR0aCA9IDBcclxubGV0IHN0YXJ0UGFuZWxFeHRlbnNpb25YID0gMFxyXG5cclxuY29uc3Qgc3RhcnRSZXNpemluZyA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gIGlmIChpc01vYmlsZS52YWx1ZSkgcmV0dXJuXHJcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG4gIGlzUmVzaXppbmcudmFsdWUgPSB0cnVlXHJcbiAgc3RhcnRYID0gZXZlbnQuY2xpZW50WFxyXG4gIHN0YXJ0V2lkdGggPSB3aWR0aC52YWx1ZVxyXG59XHJcblxyXG5jb25zdCBzdGFydFBhbmVsRXh0ZW5zaW9uUmVzaXppbmcgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICBpZiAoaXNNb2JpbGUudmFsdWUpIHJldHVyblxyXG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcclxuICBpc1BhbmVsRXh0ZW5zaW9uUmVzaXppbmcudmFsdWUgPSB0cnVlXHJcbiAgc3RhcnRQYW5lbEV4dGVuc2lvblggPSBldmVudC5jbGllbnRYXHJcbiAgc3RhcnRQYW5lbEV4dGVuc2lvbldpZHRoID0gcGFuZWxFeHRlbnNpb25XaWR0aC52YWx1ZVxyXG59XHJcblxyXG5jb25zdCB0aHJvdHRsZWRIYW5kbGVNb3VzZU1vdmUgPSB1c2VUaHJvdHRsZUZuKChldmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gIGlmIChpc1Jlc2l6aW5nLnZhbHVlKSB7XHJcbiAgICBjb25zdCBkaWZmWCA9IGV2ZW50LmNsaWVudFggLSBzdGFydFhcclxuICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoXHJcbiAgICAgIDI0MCxcclxuICAgICAgTWF0aC5taW4oc3RhcnRXaWR0aCArIGRpZmZYLCBNYXRoLm1pbig0NDAsIHdpbmRvd1dpZHRoLnZhbHVlICogMC41IC0gNjApKVxyXG4gICAgKVxyXG4gICAgd2lkdGgudmFsdWUgPSBuZXdXaWR0aFxyXG4gIH0gZWxzZSBpZiAoaXNQYW5lbEV4dGVuc2lvblJlc2l6aW5nLnZhbHVlKSB7XHJcbiAgICBjb25zdCBkaWZmWCA9IGV2ZW50LmNsaWVudFggLSBzdGFydFBhbmVsRXh0ZW5zaW9uWFxyXG4gICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heChcclxuICAgICAgMjAwLFxyXG4gICAgICBNYXRoLm1pbihzdGFydFBhbmVsRXh0ZW5zaW9uV2lkdGggKyBkaWZmWCwgTWF0aC5taW4oNDAwLCB3aW5kb3dXaWR0aC52YWx1ZSAqIDAuNCkpXHJcbiAgICApXHJcbiAgICBwYW5lbEV4dGVuc2lvbldpZHRoLnZhbHVlID0gbmV3V2lkdGhcclxuICB9XHJcbn0sIDUwKVxyXG5cclxuaWYgKGltcG9ydC5tZXRhLmNsaWVudCkge1xyXG4gIHVzZVJlc2l6ZU9ic2VydmVyKHNjcm9sbGFibGVDb250cm9sc0NvbnRhaW5lciwgKGVudHJpZXMpID0+IHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0OiBuZXdIZWlnaHQgfSA9IGVudHJpZXNbMF0uY29udGVudFJlY3RcclxuICAgIGhlaWdodC52YWx1ZSA9IG5ld0hlaWdodFxyXG4gIH0pXHJcbiAgdXNlRXZlbnRMaXN0ZW5lcihyZXNpemVIYW5kbGUsICdtb3VzZWRvd24nLCBzdGFydFJlc2l6aW5nKVxyXG4gIHVzZUV2ZW50TGlzdGVuZXIocGFuZWxFeHRlbnNpb25SZXNpemVIYW5kbGUsICdtb3VzZWRvd24nLCBzdGFydFBhbmVsRXh0ZW5zaW9uUmVzaXppbmcpXHJcblxyXG4gIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aHJvdHRsZWRIYW5kbGVNb3VzZU1vdmUpXHJcblxyXG4gIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsICdtb3VzZXVwJywgKCkgPT4ge1xyXG4gICAgaWYgKGlzUmVzaXppbmcudmFsdWUpIHtcclxuICAgICAgaXNSZXNpemluZy52YWx1ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAoaXNQYW5lbEV4dGVuc2lvblJlc2l6aW5nLnZhbHVlKSB7XHJcbiAgICAgIGlzUGFuZWxFeHRlbnNpb25SZXNpemluZy52YWx1ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgaGFzQWN0aXZlUGFuZWwgPSBjb21wdXRlZCgoKSA9PiBhY3RpdmVQYW5lbC52YWx1ZSAhPT0gJ25vbmUnKVxyXG5cclxuY29uc3QgYWxsQXV0b21hdGlvblJ1bnMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgYWxsQXV0b21hdGlvblN0YXR1c2VzID0gbW9kZWxzQW5kVmVyc2lvbklkcy52YWx1ZVxyXG4gICAgLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbC5sb2FkZWRWZXJzaW9uLml0ZW1zWzBdLmF1dG9tYXRpb25zU3RhdHVzKVxyXG4gICAgLmZsYXQoKVxyXG4gICAgLmZpbHRlcihpc05vbk51bGxhYmxlKVxyXG5cclxuICByZXR1cm4gYWxsQXV0b21hdGlvblN0YXR1c2VzLm1hcCgoc3RhdHVzKSA9PiBzdGF0dXMuYXV0b21hdGlvblJ1bnMpLmZsYXQoKVxyXG59KVxyXG5cclxuY29uc3QgYWxsRnVuY3Rpb25SdW5zID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBhbGxBdXRvbWF0aW9uUnVucy52YWx1ZS5tYXAoKHJ1bikgPT4gcnVuLmZ1bmN0aW9uUnVucykuZmxhdCgpXHJcbn0pXHJcblxyXG5jb25zdCB3aWR0aENsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGlmIChpc01vYmlsZS52YWx1ZSkge1xyXG4gICAgcmV0dXJuICdjYWxjKDEwMHZ3IC0gMy42cmVtKSdcclxuICB9IGVsc2UgaWYgKGlzVGFibGV0LnZhbHVlKSB7XHJcbiAgICByZXR1cm4gJzI0MHB4J1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gYCR7d2lkdGgudmFsdWUgKyA0fXB4YFxyXG4gIH1cclxufSlcclxuXHJcbmNvbnN0IHBhbmVsRXh0ZW5zaW9uTGVmdCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBpZiAoaXNNb2JpbGUudmFsdWUgfHwgaXNUYWJsZXQudmFsdWUpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBjb25zdCBtYWluUGFuZWxMZWZ0ID0gaXNFbWJlZEVuYWJsZWQudmFsdWUgPyA1MiA6IDYwXHJcbiAgcmV0dXJuIGAke21haW5QYW5lbExlZnQgKyB3aWR0aC52YWx1ZX1weGBcclxufSlcclxuXHJcbmNvbnN0IHsgc3VtbWFyeSB9ID0gdXNlRnVuY3Rpb25SdW5zU3RhdHVzU3VtbWFyeSh7XHJcbiAgcnVuczogYWxsRnVuY3Rpb25SdW5zXHJcbn0pXHJcblxyXG5yZWdpc3RlclNob3J0Y3V0cyh7XHJcbiAgVG9nZ2xlTW9kZWxzOiAoKSA9PiB0b2dnbGVBY3RpdmVQYW5lbCgnbW9kZWxzJyksXHJcbiAgVG9nZ2xlRmlsdGVyczogKCkgPT4gdG9nZ2xlQWN0aXZlUGFuZWwoJ2ZpbHRlcnMnKSxcclxuICBUb2dnbGVEaXNjdXNzaW9uczogKCkgPT4gdG9nZ2xlQWN0aXZlUGFuZWwoJ2Rpc2N1c3Npb25zJyksXHJcbiAgVG9nZ2xlRGV2TW9kZTogKCkgPT4gdG9nZ2xlQWN0aXZlUGFuZWwoJ2Rldk1vZGUnKSxcclxuICBUb2dnbGVTYXZlZFZpZXdzOiAoKSA9PiBpc1NhdmVkVmlld3NFbmFibGVkICYmIHRvZ2dsZUFjdGl2ZVBhbmVsKCdzYXZlZFZpZXdzJylcclxufSlcclxuXHJcbmNvbnN0IHRvZ2dsZUFjdGl2ZVBhbmVsID0gKHBhbmVsOiBBY3RpdmVQYW5lbCkgPT4ge1xyXG4gIG9uUGFuZWxCdXR0b25DbGljayhwYW5lbClcclxufVxyXG5cclxuY29uc3QgZm9yY2VDbG9zZVBhbmVsID0gKCkgPT4ge1xyXG4gIGFjdGl2ZVBhbmVsLnZhbHVlID0gJ25vbmUnXHJcbn1cclxuXHJcbmNvbnN0IG9wZW5Eb2NzID0gKCkgPT4ge1xyXG4gIHdpbmRvdy5vcGVuKHZpZXdlckRvY3NSb3V0ZSwgJ19ibGFuaycpXHJcbn1cclxuXHJcbmNvbnN0IG9wZW5JbnRlcmNvbUNoYXQgPSAoKSA9PiB7XHJcbiAgaWYgKGlzSW50ZXJjb21FbmFibGVkLnZhbHVlKSB7XHJcbiAgICAkaW50ZXJjb20uc2hvdygpXHJcbiAgfVxyXG59XHJcblxyXG53YXRjaChhY3RpdmVQYW5lbCwgKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XHJcbiAgY29uc3Qgd2FzTm9uZSA9IG9sZFZhbCA9PT0gJ25vbmUnXHJcblxyXG4gIC8vIElmIGEgcGFuZWwgaXMgYmVpbmcgb3BlbmVkIChub3QgY2xvc2VkKSBvbiBtb2JpbGUsIGVtaXQgZXZlbnQgdG8gcGFyZW50XHJcbiAgaWYgKHdhc05vbmUgJiYgbmV3VmFsICE9PSAnbm9uZScgJiYgaXNNb2JpbGUudmFsdWUpIHtcclxuICAgIGVtaXQoJ2ZvcmNlQ2xvc2VQYW5lbHMnKVxyXG4gIH1cclxufSlcclxuXHJcbmRlZmluZUV4cG9zZSh7XHJcbiAgZm9yY2VDbG9zZVBhbmVsLFxyXG4gIGZvcmNlQ2xvc2VQYW5lbHM6IGZvcmNlQ2xvc2VQYW5lbFxyXG59KVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvdmlld2VyL2NvbnRyb2xzL0xlZnQudnVlIn0= |