399 lines
37 KiB
Plaintext
399 lines
37 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/selection/Sidebar.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/controls/Right.vue";
|
|
import { CommonBadge as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { default as __nuxt_component_2 } from "/_nuxt/components/viewer/VisibilityButton.vue";
|
|
import { default as __nuxt_component_3 } from "/_nuxt/components/viewer/IsolateButton.vue";
|
|
import { FormButton as __nuxt_component_4 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { LayoutMenu as __nuxt_component_5 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { default as __nuxt_component_6 } from "/_nuxt/components/viewer/selection/Object.vue";
|
|
import { default as __nuxt_component_7 } from "/_nuxt/components/viewer/Sidebar.vue";
|
|
import { default as __nuxt_component_8 } from "/_nuxt/components/viewer/comments/PortalOrDiv.vue";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createBlock as __createBlock,createElementVNode as __createElementVNode,createVNode as __createVNode,createElementBlock as __createElementBlock } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"
|
|
function _interopVNode(vnode) {
|
|
if (vnode && vnode.props && 'data-v-inspector' in vnode.props) {
|
|
const data = vnode.props['data-v-inspector']
|
|
delete vnode.props['data-v-inspector']
|
|
Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false })
|
|
}
|
|
return vnode
|
|
}
|
|
function _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
|
|
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
|
|
/* Injection by vite-plugin-vue-inspector End */
|
|
import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { onKeyStroke, useBreakpoints } from "/_nuxt/node_modules/@vueuse/core/index.mjs?v=e4f18c29";
|
|
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
|
|
import { getTargetObjectIds } from "/_nuxt/lib/object-sidebar/helpers.ts";
|
|
import { containsAll } from "/_nuxt/lib/common/helpers/utils.ts";
|
|
import { useSelectionUtilities } from "/_nuxt/lib/viewer/composables/ui.ts";
|
|
import { useFilterUtilities } from "/_nuxt/lib/viewer/composables/filtering/filtering.ts";
|
|
import { uniqWith } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29";
|
|
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
|
|
import { useIsSmallerOrEqualThanBreakpoint } from "/_nuxt/composables/browser.ts";
|
|
import { modelRoute } from "/_nuxt/lib/common/helpers/route.ts";
|
|
import { TailwindBreakpoints } from "/_nuxt/lib/common/helpers/tailwind.ts";
|
|
import { Ellipsis } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29";
|
|
import { useEmbed } from "/_nuxt/lib/viewer/composables/setup/embed.ts";
|
|
|
|
import { useId, ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
var ActionTypes = /* @__PURE__ */ ((ActionTypes2) => {
|
|
ActionTypes2["OpenInNewTab"] = "open-in-new-tab";
|
|
return ActionTypes2;
|
|
})(ActionTypes || {});
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "ViewerSelectionSidebar",
|
|
setup(__props, { expose: __expose }) {
|
|
const {
|
|
projectId,
|
|
viewer: {
|
|
metadata: { filteringState }
|
|
},
|
|
ui: { diff, measurement, threads, filters },
|
|
urlHashState: { focusedThreadId }
|
|
} = useInjectedViewerState();
|
|
const { objects, clearSelection } = useSelectionUtilities();
|
|
const { hideObjects, showObjects, isolateObjects, unIsolateObjects } = useFilterUtilities();
|
|
const { isSmallerOrEqualSm } = useIsSmallerOrEqualThanBreakpoint();
|
|
const breakpoints = useBreakpoints(TailwindBreakpoints);
|
|
const isGreaterThanSm = breakpoints.greater("sm");
|
|
const menuId = useId();
|
|
const mp = useMixpanel();
|
|
const { showControls } = useEmbed();
|
|
const itemCount = ref(20);
|
|
const sidebarOpen = ref(false);
|
|
const sidebarWidth = ref(280);
|
|
const showSubMenu = ref(false);
|
|
const objectsUniqueByAppId = computed(() => {
|
|
if (!diff.enabled.value) return objects.value;
|
|
return uniqWith(objects.value, (a, b) => {
|
|
return a.applicationId === b.applicationId;
|
|
});
|
|
});
|
|
const shouldRenderSidebar = computed(() => {
|
|
return (!isSmallerOrEqualSm.value || sidebarOpen.value) && !measurement.enabled.value;
|
|
});
|
|
const objectsLimited = computed(() => {
|
|
return objectsUniqueByAppId.value.slice(0, itemCount.value);
|
|
});
|
|
const hiddenObjects = computed(() => filteringState.value?.hiddenObjects);
|
|
const { isolatedObjectsSet } = filters;
|
|
const allTargetIds = computed(() => {
|
|
const ids = [];
|
|
for (const obj of objects.value) {
|
|
ids.push(...getTargetObjectIds(obj));
|
|
}
|
|
return ids;
|
|
});
|
|
const isHidden = computed(() => {
|
|
if (!hiddenObjects.value) return false;
|
|
return containsAll(allTargetIds.value, hiddenObjects.value);
|
|
});
|
|
const isIsolated = computed(() => {
|
|
if (!isolatedObjectsSet.value) return false;
|
|
return containsAll(allTargetIds.value, isolatedObjectsSet.value);
|
|
});
|
|
const actionsItems = computed(() => [
|
|
[
|
|
{
|
|
title: allTargetIds.value.length > 1 ? "Open objects in new tab" : "Open object in new tab",
|
|
id: "open-in-new-tab" /* OpenInNewTab */
|
|
}
|
|
]
|
|
]);
|
|
const selectionLink = computed(() => {
|
|
return modelRoute(projectId.value, allTargetIds.value.join(","));
|
|
});
|
|
const onActionChosen = (params) => {
|
|
const { item } = params;
|
|
switch (item.id) {
|
|
case "open-in-new-tab" /* OpenInNewTab */:
|
|
window.open(selectionLink.value, "_blank");
|
|
break;
|
|
}
|
|
};
|
|
const hideOrShowSelection = () => {
|
|
if (!isHidden.value) {
|
|
hideObjects(allTargetIds.value);
|
|
mp.track("Viewer Action", {
|
|
type: "action",
|
|
name: "selection",
|
|
action: "hide"
|
|
});
|
|
return;
|
|
}
|
|
showObjects(allTargetIds.value);
|
|
mp.track("Viewer Action", {
|
|
type: "action",
|
|
name: "selection",
|
|
action: "show"
|
|
});
|
|
};
|
|
const isolateOrUnisolateSelection = () => {
|
|
if (isIsolated.value) {
|
|
unIsolateObjects(allTargetIds.value);
|
|
mp.track("Viewer Action", {
|
|
type: "action",
|
|
name: "selection",
|
|
action: "unisolate"
|
|
});
|
|
} else {
|
|
isolateObjects(allTargetIds.value);
|
|
mp.track("Viewer Action", {
|
|
type: "action",
|
|
name: "selection",
|
|
action: "isolate"
|
|
});
|
|
}
|
|
};
|
|
const trackAndClearSelection = () => {
|
|
clearSelection();
|
|
mp.track("Viewer Action", {
|
|
type: "action",
|
|
name: "selection",
|
|
action: "clear",
|
|
source: "sidebar-x-button"
|
|
});
|
|
};
|
|
const onClose = () => {
|
|
sidebarOpen.value = false;
|
|
trackAndClearSelection();
|
|
};
|
|
const forceClose = () => {
|
|
sidebarOpen.value = false;
|
|
};
|
|
onKeyStroke("Escape", () => {
|
|
clearSelection();
|
|
mp.track("Viewer Action", {
|
|
type: "action",
|
|
name: "selection",
|
|
action: "clear",
|
|
source: "keypress-escape"
|
|
});
|
|
});
|
|
watch(
|
|
[
|
|
() => objects.value.length,
|
|
() => focusedThreadId.value,
|
|
() => threads.openThread.newThreadEditor.value,
|
|
() => isSmallerOrEqualSm.value
|
|
],
|
|
([objLen, threadId, isNewThreadEditorOpen, isSmSm]) => {
|
|
if (threadId) {
|
|
sidebarOpen.value = false;
|
|
return;
|
|
}
|
|
if (isNewThreadEditorOpen && isSmSm) {
|
|
sidebarOpen.value = false;
|
|
return;
|
|
}
|
|
if (objLen !== 0 && !threadId) {
|
|
sidebarOpen.value = true;
|
|
} else if (objLen === 0) {
|
|
sidebarOpen.value = false;
|
|
}
|
|
}
|
|
);
|
|
__expose({
|
|
forceClose
|
|
});
|
|
const __returned__ = { ActionTypes, projectId, filteringState, diff, measurement, threads, filters, focusedThreadId, objects, clearSelection, hideObjects, showObjects, isolateObjects, unIsolateObjects, isSmallerOrEqualSm, breakpoints, isGreaterThanSm, menuId, mp, showControls, itemCount, sidebarOpen, sidebarWidth, showSubMenu, objectsUniqueByAppId, shouldRenderSidebar, objectsLimited, hiddenObjects, isolatedObjectsSet, allTargetIds, isHidden, isIsolated, actionsItems, selectionLink, onActionChosen, hideOrShowSelection, isolateOrUnisolateSelection, trackAndClearSelection, onClose, forceClose, get Ellipsis() {
|
|
return Ellipsis;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { resolveComponent as _resolveComponent, openBlock as _openBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, withModifiers as _withModifiers, renderList as _renderList, Fragment as _Fragment, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "flex items-center gap-x-2",
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:15:9"
|
|
};
|
|
const _hoisted_2 = {
|
|
class: "flex gap-x-0.5 items-center",
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:23:9"
|
|
};
|
|
const _hoisted_3 = {
|
|
class: "space-y-1",
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:56:7"
|
|
};
|
|
const _hoisted_4 = {
|
|
key: 0,
|
|
class: "mb-2",
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:65:7"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_ViewerControlsRight = __nuxt_component_0;
|
|
const _component_CommonBadge = __nuxt_component_1;
|
|
const _component_ViewerVisibilityButton = __nuxt_component_2;
|
|
const _component_ViewerIsolateButton = __nuxt_component_3;
|
|
const _component_FormButton = __nuxt_component_4;
|
|
const _component_LayoutMenu = __nuxt_component_5;
|
|
const _component_ViewerSelectionObject = __nuxt_component_6;
|
|
const _component_ViewerSidebar = __nuxt_component_7;
|
|
const _component_ViewerCommentsPortalOrDiv = __nuxt_component_8;
|
|
return _openBlock(), _createBlock(_component_ViewerCommentsPortalOrDiv, {
|
|
class: "relative",
|
|
to: "bottomPanel",
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:2:3"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
$setup.isGreaterThanSm && $setup.showControls ? (_openBlock(), _createBlock(_component_ViewerControlsRight, {
|
|
key: 0,
|
|
"sidebar-open": $setup.sidebarOpen && $setup.shouldRenderSidebar,
|
|
"sidebar-width": $setup.sidebarWidth,
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:3:5"
|
|
}, null, 8, ["sidebar-open", "sidebar-width"])) : _createCommentVNode("v-if", true),
|
|
$setup.shouldRenderSidebar ? (_openBlock(), _createBlock(_component_ViewerSidebar, {
|
|
key: 1,
|
|
open: $setup.sidebarOpen,
|
|
onClose: $setup.onClose,
|
|
onWidthChange: _cache[4] || (_cache[4] = ($event) => $setup.sidebarWidth = $event),
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:8:5"
|
|
}, {
|
|
title: _withCtx(() => [
|
|
_createElementVNode("div", _hoisted_1, [
|
|
_cache[5] || (_cache[5] = _createElementVNode(
|
|
"span",
|
|
{ "data-v-inspector": "components/viewer/selection/Sidebar.vue:16:11" },
|
|
"Selected",
|
|
-1
|
|
/* CACHED */
|
|
)),
|
|
$setup.objects.length > 1 ? (_openBlock(), _createBlock(_component_CommonBadge, {
|
|
key: 0,
|
|
rounded: "",
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:17:11"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createTextVNode(
|
|
_toDisplayString($setup.objects.length),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
})) : _createCommentVNode("v-if", true)
|
|
])
|
|
]),
|
|
actions: _withCtx(() => [
|
|
_createElementVNode("div", _hoisted_2, [
|
|
_createVNode(_component_ViewerVisibilityButton, {
|
|
"is-hidden": $setup.isHidden,
|
|
"force-visible": $setup.showSubMenu,
|
|
onClick: $setup.hideOrShowSelection,
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:24:11"
|
|
}, null, 8, ["is-hidden", "force-visible"]),
|
|
_createVNode(_component_ViewerIsolateButton, {
|
|
"is-isolated": $setup.isIsolated,
|
|
"force-visible": $setup.showSubMenu,
|
|
onClick: $setup.isolateOrUnisolateSelection,
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:29:11"
|
|
}, null, 8, ["is-isolated", "force-visible"]),
|
|
_createVNode(_component_LayoutMenu, {
|
|
open: $setup.showSubMenu,
|
|
"onUpdate:open": _cache[1] || (_cache[1] = ($event) => $setup.showSubMenu = $event),
|
|
"menu-id": $setup.menuId,
|
|
items: $setup.actionsItems,
|
|
"custom-menu-items-classes": ["!w-42"],
|
|
onClick: _cache[2] || (_cache[2] = _withModifiers(() => {
|
|
}, ["stop", "prevent"])),
|
|
onChosen: $setup.onActionChosen,
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:34:11"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createVNode(_component_FormButton, {
|
|
"hide-text": "",
|
|
color: "subtle",
|
|
size: "sm",
|
|
"icon-left": $setup.Ellipsis,
|
|
class: _normalizeClass({
|
|
"!bg-highlight-3": $setup.showSubMenu
|
|
}),
|
|
onClick: _cache[0] || (_cache[0] = ($event) => $setup.showSubMenu = !$setup.showSubMenu),
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:42:13"
|
|
}, null, 8, ["icon-left", "class"])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["open", "menu-id", "items"])
|
|
])
|
|
]),
|
|
footer: _withCtx(() => [..._cache[6] || (_cache[6] = [
|
|
_createElementVNode(
|
|
"p",
|
|
{
|
|
class: "text-foreground-2 text-body-3xs",
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:72:9"
|
|
},
|
|
' Hold "shift" to select multiple objects ',
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
default: _withCtx(() => [
|
|
_createElementVNode("div", _hoisted_3, [
|
|
(_openBlock(true), _createElementBlock(
|
|
_Fragment,
|
|
null,
|
|
_renderList($setup.objectsLimited, (object, index) => {
|
|
return _openBlock(), _createBlock(_component_ViewerSelectionObject, {
|
|
key: object.id,
|
|
object,
|
|
root: true,
|
|
unfold: index === 0 && !$setup.isSmallerOrEqualSm,
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:57:9"
|
|
}, null, 8, ["object", "unfold"]);
|
|
}),
|
|
128
|
|
/* KEYED_FRAGMENT */
|
|
))
|
|
]),
|
|
$setup.itemCount <= $setup.objects.length ? (_openBlock(), _createElementBlock("div", _hoisted_4, [
|
|
_createVNode(_component_FormButton, {
|
|
size: "sm",
|
|
text: "",
|
|
"full-width": "",
|
|
onClick: _cache[3] || (_cache[3] = ($event) => $setup.itemCount += 10),
|
|
"data-v-inspector": "components/viewer/selection/Sidebar.vue:66:9"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createTextVNode(
|
|
" View more (" + _toDisplayString($setup.objects.length - $setup.itemCount) + ") ",
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
})
|
|
])) : _createCommentVNode("v-if", true)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["open"])) : _createCommentVNode("v-if", true)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
});
|
|
}
|
|
_sfc_main.__hmrId = "85710cbc";
|
|
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/selection/Sidebar.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStFQSxTQUFTLGFBQWEsc0JBQXNCO0FBQzVDLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMseUNBQXlDO0FBQ2xELFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsMkJBQTJCO0FBRXBDLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsZ0JBQWdCOzs7QUFFekIsSUFBSyxjQUFMLGtCQUFLQSxpQkFBTDtBQUNFLEVBQUFBLGFBQUEsa0JBQWU7QUFEWixTQUFBQTtBQUFBOzs7O0FBSUwsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLFVBQVUsRUFBRSxlQUFlO0FBQUEsTUFDN0I7QUFBQSxNQUNBLElBQUksRUFBRSxNQUFNLGFBQWEsU0FBUyxRQUFRO0FBQUEsTUFDMUMsY0FBYyxFQUFFLGdCQUFnQjtBQUFBLElBQ2xDLElBQUksdUJBQXVCO0FBQzNCLFVBQU0sRUFBRSxTQUFTLGVBQWUsSUFBSSxzQkFBc0I7QUFDMUQsVUFBTSxFQUFFLGFBQWEsYUFBYSxnQkFBZ0IsaUJBQWlCLElBQ2pFLG1CQUFtQjtBQUVyQixVQUFNLEVBQUUsbUJBQW1CLElBQUksa0NBQWtDO0FBQ2pFLFVBQU0sY0FBYyxlQUFlLG1CQUFtQjtBQUN0RCxVQUFNLGtCQUFrQixZQUFZLFFBQVEsSUFBSTtBQUNoRCxVQUFNLFNBQVMsTUFBTTtBQUNyQixVQUFNLEtBQUssWUFBWTtBQUN2QixVQUFNLEVBQUUsYUFBYSxJQUFJLFNBQVM7QUFFbEMsVUFBTSxZQUFZLElBQUksRUFBRTtBQUN4QixVQUFNLGNBQWMsSUFBSSxLQUFLO0FBQzdCLFVBQU0sZUFBZSxJQUFJLEdBQUc7QUFDNUIsVUFBTSxjQUFjLElBQUksS0FBSztBQUU3QixVQUFNLHVCQUF1QixTQUFTLE1BQU07QUFDMUMsVUFBSSxDQUFDLEtBQUssUUFBUSxNQUFPLFFBQU8sUUFBUTtBQUN4QyxhQUFPLFNBQVMsUUFBUSxPQUFPLENBQUMsR0FBRyxNQUFNO0FBQ3ZDLGVBQU8sRUFBRSxrQkFBa0IsRUFBRTtBQUFBLE1BQy9CLENBQUM7QUFBQSxJQUNILENBQUM7QUFFRCxVQUFNLHNCQUFzQixTQUFTLE1BQU07QUFDekMsY0FBUSxDQUFDLG1CQUFtQixTQUFTLFlBQVksVUFBVSxDQUFDLFlBQVksUUFBUTtBQUFBLElBQ2xGLENBQUM7QUFFRCxVQUFNLGlCQUFpQixTQUFTLE1BQU07QUFDcEMsYUFBTyxxQkFBcUIsTUFBTSxNQUFNLEdBQUcsVUFBVSxLQUFLO0FBQUEsSUFDNUQsQ0FBQztBQUVELFVBQU0sZ0JBQWdCLFNBQVMsTUFBTSxlQUFlLE9BQU8sYUFBYTtBQUV4RSxVQUFNLEVBQUUsbUJBQW1CLElBQUk7QUFFL0IsVUFBTSxlQUFlLFNBQVMsTUFBTTtBQUNsQyxZQUFNLE1BQU0sQ0FBQztBQUNiLGlCQUFXLE9BQU8sUUFBUSxPQUFPO0FBQy9CLFlBQUksS0FBSyxHQUFHLG1CQUFtQixHQUFHLENBQUM7QUFBQSxNQUNyQztBQUVBLGFBQU87QUFBQSxJQUNULENBQUM7QUFFRCxVQUFNLFdBQVcsU0FBUyxNQUFNO0FBQzlCLFVBQUksQ0FBQyxjQUFjLE1BQU8sUUFBTztBQUNqQyxhQUFPLFlBQVksYUFBYSxPQUFPLGNBQWMsS0FBSztBQUFBLElBQzVELENBQUM7QUFFRCxVQUFNLGFBQWEsU0FBUyxNQUFNO0FBQ2hDLFVBQUksQ0FBQyxtQkFBbUIsTUFBTyxRQUFPO0FBQ3RDLGFBQU8sWUFBWSxhQUFhLE9BQU8sbUJBQW1CLEtBQUs7QUFBQSxJQUNqRSxDQUFDO0FBRUQsVUFBTSxlQUFlLFNBQTZCLE1BQU07QUFBQSxNQUN0RDtBQUFBLFFBQ0U7QUFBQSxVQUNFLE9BQ0UsYUFBYSxNQUFNLFNBQVMsSUFDeEIsNEJBQ0E7QUFBQSxVQUNOLElBQUk7QUFBQSxRQUNOO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUVELFVBQU0sZ0JBQWdCLFNBQVMsTUFBTTtBQUNuQyxhQUFPLFdBQVcsVUFBVSxPQUFPLGFBQWEsTUFBTSxLQUFLLEdBQUcsQ0FBQztBQUFBLElBQ2pFLENBQUM7QUFFRCxVQUFNLGlCQUFpQixDQUFDLFdBQXdEO0FBQzlFLFlBQU0sRUFBRSxLQUFLLElBQUk7QUFFakIsY0FBUSxLQUFLLElBQUk7QUFBQSxRQUNmLEtBQUs7QUFDSCxpQkFBTyxLQUFLLGNBQWMsT0FBTyxRQUFRO0FBQ3pDO0FBQUEsTUFDSjtBQUFBLElBQ0Y7QUFFQSxVQUFNLHNCQUFzQixNQUFNO0FBQ2hDLFVBQUksQ0FBQyxTQUFTLE9BQU87QUFDbkIsb0JBQVksYUFBYSxLQUFLO0FBQzlCLFdBQUcsTUFBTSxpQkFBaUI7QUFBQSxVQUN4QixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsVUFDTixRQUFRO0FBQUEsUUFDVixDQUFDO0FBQ0Q7QUFBQSxNQUNGO0FBRUEsa0JBQVksYUFBYSxLQUFLO0FBQzlCLFNBQUcsTUFBTSxpQkFBaUI7QUFBQSxRQUN4QixNQUFNO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDVixDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sOEJBQThCLE1BQU07QUFDeEMsVUFBSSxXQUFXLE9BQU87QUFDcEIseUJBQWlCLGFBQWEsS0FBSztBQUNuQyxXQUFHLE1BQU0saUJBQWlCO0FBQUEsVUFDeEIsTUFBTTtBQUFBLFVBQ04sTUFBTTtBQUFBLFVBQ04sUUFBUTtBQUFBLFFBQ1YsQ0FBQztBQUFBLE1BQ0gsT0FBTztBQUNMLHVCQUFlLGFBQWEsS0FBSztBQUNqQyxXQUFHLE1BQU0saUJBQWlCO0FBQUEsVUFDeEIsTUFBTTtBQUFBLFVBQ04sTUFBTTtBQUFBLFVBQ04sUUFBUTtBQUFBLFFBQ1YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBRUEsVUFBTSx5QkFBeUIsTUFBTTtBQUNuQyxxQkFBZTtBQUNmLFNBQUcsTUFBTSxpQkFBaUI7QUFBQSxRQUN4QixNQUFNO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDVixDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sVUFBVSxNQUFNO0FBQ3BCLGtCQUFZLFFBQVE7QUFDcEIsNkJBQXVCO0FBQUEsSUFDekI7QUFFQSxVQUFNLGFBQWEsTUFBTTtBQUN2QixrQkFBWSxRQUFRO0FBQUEsSUFDdEI7QUFFQSxnQkFBWSxVQUFVLE1BQU07QUFJMUIscUJBQWU7QUFDZixTQUFHLE1BQU0saUJBQWlCO0FBQUEsUUFDeEIsTUFBTTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLE1BQ1YsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUVEO0FBQUEsTUFDRTtBQUFBLFFBQ0UsTUFBTSxRQUFRLE1BQU07QUFBQSxRQUNwQixNQUFNLGdCQUFnQjtBQUFBLFFBQ3RCLE1BQU0sUUFBUSxXQUFXLGdCQUFnQjtBQUFBLFFBQ3pDLE1BQU0sbUJBQW1CO0FBQUEsTUFDM0I7QUFBQSxNQUNBLENBQUMsQ0FBQyxRQUFRLFVBQVUsdUJBQXVCLE1BQU0sTUFBTTtBQUVyRCxZQUFJLFVBQVU7QUFDWixzQkFBWSxRQUFRO0FBQ3BCO0FBQUEsUUFDRjtBQUdBLFlBQUkseUJBQXlCLFFBQVE7QUFDbkMsc0JBQVksUUFBUTtBQUNwQjtBQUFBLFFBQ0Y7QUFHQSxZQUFJLFdBQVcsS0FBSyxDQUFDLFVBQVU7QUFDN0Isc0JBQVksUUFBUTtBQUFBLFFBQ3RCLFdBQVcsV0FBVyxHQUFHO0FBQ3ZCLHNCQUFZLFFBQVE7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsYUFBYTtBQUFBLE1BQ1g7QUFBQSxJQUNGLENBQUM7Ozs7Ozs7Ozs7RUFoUlksT0FBTTtBQUFBLEVBQTRCLG9CQUFpQjs7O0VBUW5ELE9BQU07QUFBQSxFQUE4QixvQkFBaUI7OztFQWlDdkQsT0FBTTtBQUFBLEVBQVksb0JBQWlCOzs7O0VBU0EsT0FBTTtBQUFBLEVBQU8sb0JBQWlCOzs7Ozs7Ozs7Ozs7dUJBL0QxRSxhQTJFNEI7QUFBQSxJQTNFRCxPQUFNO0FBQUEsSUFBVyxJQUFHO0FBQUEsSUFBYyxvQkFBaUI7QUFBQTtzQkFFdkMsTUFRdEI7QUFBQSxNQVJQLDBCQUFtQixxQ0FEM0IsYUFJRTtBQUFBO1FBRkMsZ0JBQWMsc0JBQWU7QUFBQSxRQUM3QixpQkFBZTtBQUFBLFFBQWMsb0JBQWlCO0FBQUE7TUFHekMsNENBRFIsYUFvRWdCO0FBQUE7UUFsRWIsTUFBTTtBQUFBLFFBQ04sU0FBTztBQUFBLFFBQ1AsZUFBWSxzQ0FBRSxzQkFBZTtBQUFBLFFBQVEsb0JBQWlCO0FBQUE7UUFFNUMsT0FBSyxTQUNkLE1BS007QUFBQSxVQUxOLG9CQUtNLE9BTE4sWUFLTTtBQUFBLHNDQUpKO0FBQUEsY0FBc0Y7QUFBQSxnQkFBaEYsb0JBQWlCLGdEQUErQztBQUFBLGNBQUM7QUFBQSxjQUFRO0FBQUE7QUFBQTtBQUFBLFlBQzVELGVBQVEsU0FBTSxtQkFBakMsYUFFYztBQUFBO2NBRnlCO0FBQUEsY0FBUSxvQkFBaUI7QUFBQTtnQ0FDOUQsTUFBb0I7QUFBQTttQ0FBakIsZUFBUSxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7OztRQUlaLFNBQU8sU0FDaEIsTUE4Qk07QUFBQSxVQTlCTixvQkE4Qk0sT0E5Qk4sWUE4Qk07QUFBQSxZQTdCSixhQUlFO0FBQUEsY0FIQyxhQUFXO0FBQUEsY0FDWCxpQkFBZTtBQUFBLGNBQ2YsU0FBTztBQUFBLGNBQXFCLG9CQUFpQjtBQUFBO1lBRWhELGFBSUU7QUFBQSxjQUhDLGVBQWE7QUFBQSxjQUNiLGlCQUFlO0FBQUEsY0FDZixTQUFPO0FBQUEsY0FBNkIsb0JBQWlCO0FBQUE7WUFFeEQsYUFrQmE7QUFBQSxjQWpCSCxNQUFNO0FBQUEsMEZBQVc7QUFBQSxjQUN4QixXQUFTO0FBQUEsY0FDVCxPQUFPO0FBQUEsY0FDUCw2QkFBMkI7QUFBQSxjQUMzQixTQUFLLHlDQUFOO0FBQUEsaUJBQW1CO0FBQUEsY0FDbEIsVUFBUTtBQUFBLGNBQWdCLG9CQUFpQjtBQUFBO2dDQUUxQyxNQVNFO0FBQUEsZ0JBVEYsYUFTRTtBQUFBLGtCQVJBO0FBQUEsa0JBQ0EsT0FBTTtBQUFBLGtCQUNOLE1BQUs7QUFBQSxrQkFDSixhQUFXO0FBQUEsa0JBQ1gsT0FBSztBQUFBLHVDQUF3QztBQUFBO2tCQUc3QyxTQUFLLHNDQUFFLHFCQUFXLENBQUk7QUFBQSxrQkFBYSxvQkFBaUI7QUFBQTs7Ozs7OztRQXFCbEQsUUFBTSxTQUNmLE1BRUk7QUFBQSxVQUZKO0FBQUEsWUFFSTtBQUFBO0FBQUEsY0FGRCxPQUFNO0FBQUEsY0FBa0Msb0JBQWlCO0FBQUE7WUFBK0M7QUFBQSxZQUUzRztBQUFBO0FBQUE7QUFBQTswQkFsQkYsTUFRTTtBQUFBLFVBUk4sb0JBUU0sT0FSTixZQVFNO0FBQUEsK0JBUEo7QUFBQSxjQU1FO0FBQUE7QUFBQSwwQkFMMEIsdUJBQWMsQ0FBaEMsUUFBUSxVQUFLO3FDQUR2QixhQU1FO0FBQUEsa0JBSkMsS0FBTSxPQUFPO0FBQUEsa0JBQ2I7QUFBQSxrQkFDQSxNQUFNO0FBQUEsa0JBQ04sUUFBUSxVQUFLLE1BQVc7QUFBQSxrQkFBb0Isb0JBQWlCO0FBQUE7Ozs7OztVQUd2RCxvQkFBYSxlQUFRLHdCQUFoQyxvQkFJTSxPQUpOLFlBSU07QUFBQSxZQUhKLGFBRWE7QUFBQSxjQUZELE1BQUs7QUFBQSxjQUFLO0FBQUEsY0FBSztBQUFBLGNBQVksU0FBSyxzQ0FBRSxvQkFBUztBQUFBLGNBQVEsb0JBQWlCO0FBQUE7Z0NBQStDLE1BQ2xIO0FBQUE7a0JBRGtILGlCQUNsSCxpQkFBRyxlQUFRLFNBQVMsZ0JBQVMsSUFBRztBQUFBLGtCQUM3QztBQUFBO0FBQUE7QUFBQSIsIm5hbWVzIjpbIkFjdGlvblR5cGVzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIlNpZGViYXIudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8Vmlld2VyQ29tbWVudHNQb3J0YWxPckRpdiBjbGFzcz1cInJlbGF0aXZlXCIgdG89XCJib3R0b21QYW5lbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zZWxlY3Rpb24vU2lkZWJhci52dWU6MjozXCI+XHJcbiAgICA8Vmlld2VyQ29udHJvbHNSaWdodFxyXG4gICAgICB2LWlmPVwiaXNHcmVhdGVyVGhhblNtICYmIHNob3dDb250cm9sc1wiXHJcbiAgICAgIDpzaWRlYmFyLW9wZW49XCJzaWRlYmFyT3BlbiAmJiBzaG91bGRSZW5kZXJTaWRlYmFyXCJcclxuICAgICAgOnNpZGViYXItd2lkdGg9XCJzaWRlYmFyV2lkdGhcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2VsZWN0aW9uL1NpZGViYXIudnVlOjM6NVwiXHJcbiAgICAvPlxyXG4gICAgPFZpZXdlclNpZGViYXJcclxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNpZGViYXJcIlxyXG4gICAgICA6b3Blbj1cInNpZGViYXJPcGVuXCJcclxuICAgICAgQGNsb3NlPVwib25DbG9zZVwiXHJcbiAgICAgIEB3aWR0aC1jaGFuZ2U9XCJzaWRlYmFyV2lkdGggPSAkZXZlbnRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2VsZWN0aW9uL1NpZGViYXIudnVlOjg6NVwiXHJcbiAgICA+XHJcbiAgICAgIDx0ZW1wbGF0ZSAjdGl0bGU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2VsZWN0aW9uL1NpZGViYXIudnVlOjE1OjlcIj5cclxuICAgICAgICAgIDxzcGFuIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zZWxlY3Rpb24vU2lkZWJhci52dWU6MTY6MTFcIj5TZWxlY3RlZDwvc3Bhbj5cclxuICAgICAgICAgIDxDb21tb25CYWRnZSB2LWlmPVwib2JqZWN0cy5sZW5ndGggPiAxXCIgcm91bmRlZCBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2VsZWN0aW9uL1NpZGViYXIudnVlOjE3OjExXCI+XHJcbiAgICAgICAgICAgIHt7IG9iamVjdHMubGVuZ3RoIH19XHJcbiAgICAgICAgICA8L0NvbW1vbkJhZGdlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8dGVtcGxhdGUgI2FjdGlvbnM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLXgtMC41IGl0ZW1zLWNlbnRlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zZWxlY3Rpb24vU2lkZWJhci52dWU6MjM6OVwiPlxyXG4gICAgICAgICAgPFZpZXdlclZpc2liaWxpdHlCdXR0b25cclxuICAgICAgICAgICAgOmlzLWhpZGRlbj1cImlzSGlkZGVuXCJcclxuICAgICAgICAgICAgOmZvcmNlLXZpc2libGU9XCJzaG93U3ViTWVudVwiXHJcbiAgICAgICAgICAgIEBjbGljaz1cImhpZGVPclNob3dTZWxlY3Rpb25cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2VsZWN0aW9uL1NpZGViYXIudnVlOjI0OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8Vmlld2VySXNvbGF0ZUJ1dHRvblxyXG4gICAgICAgICAgICA6aXMtaXNvbGF0ZWQ9XCJpc0lzb2xhdGVkXCJcclxuICAgICAgICAgICAgOmZvcmNlLXZpc2libGU9XCJzaG93U3ViTWVudVwiXHJcbiAgICAgICAgICAgIEBjbGljaz1cImlzb2xhdGVPclVuaXNvbGF0ZVNlbGVjdGlvblwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zZWxlY3Rpb24vU2lkZWJhci52dWU6Mjk6MTFcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxMYXlvdXRNZW51XHJcbiAgICAgICAgICAgIHYtbW9kZWw6b3Blbj1cInNob3dTdWJNZW51XCJcclxuICAgICAgICAgICAgOm1lbnUtaWQ9XCJtZW51SWRcIlxyXG4gICAgICAgICAgICA6aXRlbXM9XCJhY3Rpb25zSXRlbXNcIlxyXG4gICAgICAgICAgICA6Y3VzdG9tLW1lbnUtaXRlbXMtY2xhc3Nlcz1cIlsnIXctNDInXVwiXHJcbiAgICAgICAgICAgIEBjbGljay5zdG9wLnByZXZlbnRcclxuICAgICAgICAgICAgQGNob3Nlbj1cIm9uQWN0aW9uQ2hvc2VuXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NlbGVjdGlvbi9TaWRlYmFyLnZ1ZTozNDoxMVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICAgICAgY29sb3I9XCJzdWJ0bGVcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgICAgOmljb24tbGVmdD1cIkVsbGlwc2lzXCJcclxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7XHJcbiAgICAgICAgICAgICAgICAnIWJnLWhpZ2hsaWdodC0zJzogc2hvd1N1Yk1lbnVcclxuICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICBAY2xpY2s9XCJzaG93U3ViTWVudSA9ICFzaG93U3ViTWVudVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zZWxlY3Rpb24vU2lkZWJhci52dWU6NDI6MTNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9MYXlvdXRNZW51PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RlbXBsYXRlPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zZWxlY3Rpb24vU2lkZWJhci52dWU6NTY6N1wiPlxyXG4gICAgICAgIDxWaWV3ZXJTZWxlY3Rpb25PYmplY3RcclxuICAgICAgICAgIHYtZm9yPVwiKG9iamVjdCwgaW5kZXgpIGluIG9iamVjdHNMaW1pdGVkXCJcclxuICAgICAgICAgIDprZXk9XCIob2JqZWN0LmlkIGFzIHN0cmluZylcIlxyXG4gICAgICAgICAgOm9iamVjdD1cIm9iamVjdFwiXHJcbiAgICAgICAgICA6cm9vdD1cInRydWVcIlxyXG4gICAgICAgICAgOnVuZm9sZD1cImluZGV4ID09PSAwICYmICFpc1NtYWxsZXJPckVxdWFsU21cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2VsZWN0aW9uL1NpZGViYXIudnVlOjU3OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IHYtaWY9XCJpdGVtQ291bnQgPD0gb2JqZWN0cy5sZW5ndGhcIiBjbGFzcz1cIm1iLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2VsZWN0aW9uL1NpZGViYXIudnVlOjY1OjdcIj5cclxuICAgICAgICA8Rm9ybUJ1dHRvbiBzaXplPVwic21cIiB0ZXh0IGZ1bGwtd2lkdGggQGNsaWNrPVwiaXRlbUNvdW50ICs9IDEwXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NlbGVjdGlvbi9TaWRlYmFyLnZ1ZTo2Njo5XCI+XHJcbiAgICAgICAgICBWaWV3IG1vcmUgKHt7IG9iamVjdHMubGVuZ3RoIC0gaXRlbUNvdW50IH19KVxyXG4gICAgICAgIDwvRm9ybUJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8dGVtcGxhdGUgI2Zvb3Rlcj5cclxuICAgICAgICA8cCBjbGFzcz1cInRleHQtZm9yZWdyb3VuZC0yIHRleHQtYm9keS0zeHNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2VsZWN0aW9uL1NpZGViYXIudnVlOjcyOjlcIj5cclxuICAgICAgICAgIEhvbGQgXCJzaGlmdFwiIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzXHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L3RlbXBsYXRlPlxyXG4gICAgPC9WaWV3ZXJTaWRlYmFyPlxyXG4gIDwvVmlld2VyQ29tbWVudHNQb3J0YWxPckRpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgb25LZXlTdHJva2UsIHVzZUJyZWFrcG9pbnRzIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJ1xyXG5pbXBvcnQgeyB1c2VJbmplY3RlZFZpZXdlclN0YXRlIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cCdcclxuaW1wb3J0IHsgZ2V0VGFyZ2V0T2JqZWN0SWRzIH0gZnJvbSAnfn4vbGliL29iamVjdC1zaWRlYmFyL2hlbHBlcnMnXHJcbmltcG9ydCB7IGNvbnRhaW5zQWxsIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3V0aWxzJ1xyXG5pbXBvcnQgeyB1c2VTZWxlY3Rpb25VdGlsaXRpZXMgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3VpJ1xyXG5pbXBvcnQgeyB1c2VGaWx0ZXJVdGlsaXRpZXMgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvZmlsdGVyaW5nL2ZpbHRlcmluZydcclxuaW1wb3J0IHsgdW5pcVdpdGggfSBmcm9tICdsb2Rhc2gtZXMnXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfn4vbGliL2NvcmUvY29tcG9zYWJsZXMvbXAnXHJcbmltcG9ydCB7IHVzZUlzU21hbGxlck9yRXF1YWxUaGFuQnJlYWtwb2ludCB9IGZyb20gJ35+L2NvbXBvc2FibGVzL2Jyb3dzZXInXHJcbmltcG9ydCB7IG1vZGVsUm91dGUgfSBmcm9tICd+L2xpYi9jb21tb24vaGVscGVycy9yb3V0ZSdcclxuaW1wb3J0IHsgVGFpbHdpbmRCcmVha3BvaW50cyB9IGZyb20gJ35+L2xpYi9jb21tb24vaGVscGVycy90YWlsd2luZCdcclxuaW1wb3J0IHR5cGUgeyBMYXlvdXRNZW51SXRlbSB9IGZyb20gJ35+L2xpYi9sYXlvdXQvaGVscGVycy9jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyBFbGxpcHNpcyB9IGZyb20gJ2x1Y2lkZS12dWUtbmV4dCdcclxuaW1wb3J0IHsgdXNlRW1iZWQgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAvZW1iZWQnXHJcblxyXG5lbnVtIEFjdGlvblR5cGVzIHtcclxuICBPcGVuSW5OZXdUYWIgPSAnb3Blbi1pbi1uZXctdGFiJ1xyXG59XHJcblxyXG5jb25zdCB7XHJcbiAgcHJvamVjdElkLFxyXG4gIHZpZXdlcjoge1xyXG4gICAgbWV0YWRhdGE6IHsgZmlsdGVyaW5nU3RhdGUgfVxyXG4gIH0sXHJcbiAgdWk6IHsgZGlmZiwgbWVhc3VyZW1lbnQsIHRocmVhZHMsIGZpbHRlcnMgfSxcclxuICB1cmxIYXNoU3RhdGU6IHsgZm9jdXNlZFRocmVhZElkIH1cclxufSA9IHVzZUluamVjdGVkVmlld2VyU3RhdGUoKVxyXG5jb25zdCB7IG9iamVjdHMsIGNsZWFyU2VsZWN0aW9uIH0gPSB1c2VTZWxlY3Rpb25VdGlsaXRpZXMoKVxyXG5jb25zdCB7IGhpZGVPYmplY3RzLCBzaG93T2JqZWN0cywgaXNvbGF0ZU9iamVjdHMsIHVuSXNvbGF0ZU9iamVjdHMgfSA9XHJcbiAgdXNlRmlsdGVyVXRpbGl0aWVzKClcclxuXHJcbmNvbnN0IHsgaXNTbWFsbGVyT3JFcXVhbFNtIH0gPSB1c2VJc1NtYWxsZXJPckVxdWFsVGhhbkJyZWFrcG9pbnQoKVxyXG5jb25zdCBicmVha3BvaW50cyA9IHVzZUJyZWFrcG9pbnRzKFRhaWx3aW5kQnJlYWtwb2ludHMpXHJcbmNvbnN0IGlzR3JlYXRlclRoYW5TbSA9IGJyZWFrcG9pbnRzLmdyZWF0ZXIoJ3NtJylcclxuY29uc3QgbWVudUlkID0gdXNlSWQoKVxyXG5jb25zdCBtcCA9IHVzZU1peHBhbmVsKClcclxuY29uc3QgeyBzaG93Q29udHJvbHMgfSA9IHVzZUVtYmVkKClcclxuXHJcbmNvbnN0IGl0ZW1Db3VudCA9IHJlZigyMClcclxuY29uc3Qgc2lkZWJhck9wZW4gPSByZWYoZmFsc2UpXHJcbmNvbnN0IHNpZGViYXJXaWR0aCA9IHJlZigyODApXHJcbmNvbnN0IHNob3dTdWJNZW51ID0gcmVmKGZhbHNlKVxyXG5cclxuY29uc3Qgb2JqZWN0c1VuaXF1ZUJ5QXBwSWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgaWYgKCFkaWZmLmVuYWJsZWQudmFsdWUpIHJldHVybiBvYmplY3RzLnZhbHVlXHJcbiAgcmV0dXJuIHVuaXFXaXRoKG9iamVjdHMudmFsdWUsIChhLCBiKSA9PiB7XHJcbiAgICByZXR1cm4gYS5hcHBsaWNhdGlvbklkID09PSBiLmFwcGxpY2F0aW9uSWRcclxuICB9KVxyXG59KVxyXG5cclxuY29uc3Qgc2hvdWxkUmVuZGVyU2lkZWJhciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gKCFpc1NtYWxsZXJPckVxdWFsU20udmFsdWUgfHwgc2lkZWJhck9wZW4udmFsdWUpICYmICFtZWFzdXJlbWVudC5lbmFibGVkLnZhbHVlXHJcbn0pXHJcblxyXG5jb25zdCBvYmplY3RzTGltaXRlZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gb2JqZWN0c1VuaXF1ZUJ5QXBwSWQudmFsdWUuc2xpY2UoMCwgaXRlbUNvdW50LnZhbHVlKVxyXG59KVxyXG5cclxuY29uc3QgaGlkZGVuT2JqZWN0cyA9IGNvbXB1dGVkKCgpID0+IGZpbHRlcmluZ1N0YXRlLnZhbHVlPy5oaWRkZW5PYmplY3RzKVxyXG4vLyBVc2Ugc2luZ2xldG9uIGlzb2xhdGVkT2JqZWN0c1NldCBmcm9tIHZpZXdlciBzdGF0ZVxyXG5jb25zdCB7IGlzb2xhdGVkT2JqZWN0c1NldCB9ID0gZmlsdGVyc1xyXG5cclxuY29uc3QgYWxsVGFyZ2V0SWRzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGNvbnN0IGlkcyA9IFtdXHJcbiAgZm9yIChjb25zdCBvYmogb2Ygb2JqZWN0cy52YWx1ZSkge1xyXG4gICAgaWRzLnB1c2goLi4uZ2V0VGFyZ2V0T2JqZWN0SWRzKG9iaikpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gaWRzXHJcbn0pXHJcblxyXG5jb25zdCBpc0hpZGRlbiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBpZiAoIWhpZGRlbk9iamVjdHMudmFsdWUpIHJldHVybiBmYWxzZVxyXG4gIHJldHVybiBjb250YWluc0FsbChhbGxUYXJnZXRJZHMudmFsdWUsIGhpZGRlbk9iamVjdHMudmFsdWUpXHJcbn0pXHJcblxyXG5jb25zdCBpc0lzb2xhdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGlmICghaXNvbGF0ZWRPYmplY3RzU2V0LnZhbHVlKSByZXR1cm4gZmFsc2VcclxuICByZXR1cm4gY29udGFpbnNBbGwoYWxsVGFyZ2V0SWRzLnZhbHVlLCBpc29sYXRlZE9iamVjdHNTZXQudmFsdWUpXHJcbn0pXHJcblxyXG5jb25zdCBhY3Rpb25zSXRlbXMgPSBjb21wdXRlZDxMYXlvdXRNZW51SXRlbVtdW10+KCgpID0+IFtcclxuICBbXHJcbiAgICB7XHJcbiAgICAgIHRpdGxlOlxyXG4gICAgICAgIGFsbFRhcmdldElkcy52YWx1ZS5sZW5ndGggPiAxXHJcbiAgICAgICAgICA/ICdPcGVuIG9iamVjdHMgaW4gbmV3IHRhYidcclxuICAgICAgICAgIDogJ09wZW4gb2JqZWN0IGluIG5ldyB0YWInLFxyXG4gICAgICBpZDogQWN0aW9uVHlwZXMuT3BlbkluTmV3VGFiXHJcbiAgICB9XHJcbiAgXVxyXG5dKVxyXG5cclxuY29uc3Qgc2VsZWN0aW9uTGluayA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gbW9kZWxSb3V0ZShwcm9qZWN0SWQudmFsdWUsIGFsbFRhcmdldElkcy52YWx1ZS5qb2luKCcsJykpXHJcbn0pXHJcblxyXG5jb25zdCBvbkFjdGlvbkNob3NlbiA9IChwYXJhbXM6IHsgaXRlbTogTGF5b3V0TWVudUl0ZW07IGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHtcclxuICBjb25zdCB7IGl0ZW0gfSA9IHBhcmFtc1xyXG5cclxuICBzd2l0Y2ggKGl0ZW0uaWQpIHtcclxuICAgIGNhc2UgQWN0aW9uVHlwZXMuT3BlbkluTmV3VGFiOlxyXG4gICAgICB3aW5kb3cub3BlbihzZWxlY3Rpb25MaW5rLnZhbHVlLCAnX2JsYW5rJylcclxuICAgICAgYnJlYWtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhpZGVPclNob3dTZWxlY3Rpb24gPSAoKSA9PiB7XHJcbiAgaWYgKCFpc0hpZGRlbi52YWx1ZSkge1xyXG4gICAgaGlkZU9iamVjdHMoYWxsVGFyZ2V0SWRzLnZhbHVlKVxyXG4gICAgbXAudHJhY2soJ1ZpZXdlciBBY3Rpb24nLCB7XHJcbiAgICAgIHR5cGU6ICdhY3Rpb24nLFxyXG4gICAgICBuYW1lOiAnc2VsZWN0aW9uJyxcclxuICAgICAgYWN0aW9uOiAnaGlkZSdcclxuICAgIH0pXHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIHNob3dPYmplY3RzKGFsbFRhcmdldElkcy52YWx1ZSlcclxuICBtcC50cmFjaygnVmlld2VyIEFjdGlvbicsIHtcclxuICAgIHR5cGU6ICdhY3Rpb24nLFxyXG4gICAgbmFtZTogJ3NlbGVjdGlvbicsXHJcbiAgICBhY3Rpb246ICdzaG93J1xyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGlzb2xhdGVPclVuaXNvbGF0ZVNlbGVjdGlvbiA9ICgpID0+IHtcclxuICBpZiAoaXNJc29sYXRlZC52YWx1ZSkge1xyXG4gICAgdW5Jc29sYXRlT2JqZWN0cyhhbGxUYXJnZXRJZHMudmFsdWUpXHJcbiAgICBtcC50cmFjaygnVmlld2VyIEFjdGlvbicsIHtcclxuICAgICAgdHlwZTogJ2FjdGlvbicsXHJcbiAgICAgIG5hbWU6ICdzZWxlY3Rpb24nLFxyXG4gICAgICBhY3Rpb246ICd1bmlzb2xhdGUnXHJcbiAgICB9KVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpc29sYXRlT2JqZWN0cyhhbGxUYXJnZXRJZHMudmFsdWUpXHJcbiAgICBtcC50cmFjaygnVmlld2VyIEFjdGlvbicsIHtcclxuICAgICAgdHlwZTogJ2FjdGlvbicsXHJcbiAgICAgIG5hbWU6ICdzZWxlY3Rpb24nLFxyXG4gICAgICBhY3Rpb246ICdpc29sYXRlJ1xyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHRyYWNrQW5kQ2xlYXJTZWxlY3Rpb24gPSAoKSA9PiB7XHJcbiAgY2xlYXJTZWxlY3Rpb24oKVxyXG4gIG1wLnRyYWNrKCdWaWV3ZXIgQWN0aW9uJywge1xyXG4gICAgdHlwZTogJ2FjdGlvbicsXHJcbiAgICBuYW1lOiAnc2VsZWN0aW9uJyxcclxuICAgIGFjdGlvbjogJ2NsZWFyJyxcclxuICAgIHNvdXJjZTogJ3NpZGViYXIteC1idXR0b24nXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3Qgb25DbG9zZSA9ICgpID0+IHtcclxuICBzaWRlYmFyT3Blbi52YWx1ZSA9IGZhbHNlXHJcbiAgdHJhY2tBbmRDbGVhclNlbGVjdGlvbigpXHJcbn1cclxuXHJcbmNvbnN0IGZvcmNlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgc2lkZWJhck9wZW4udmFsdWUgPSBmYWxzZVxyXG59XHJcblxyXG5vbktleVN0cm9rZSgnRXNjYXBlJywgKCkgPT4ge1xyXG4gIC8vIENsZWFyZWFuY2Ugb2YgYW55IHZpcy9pc28gc3RhdGUgY29taW5nIGZyb20gaGVyZSBzaG91bGQgaGFwcGVuIGluIGNsZWFyU2VsZWN0aW9uKClcclxuICAvLyBOb3RlOiB3ZSdyZSBub3QgdXNpbmcgdGhlIHRyYWNrQW5kQ2xlYXJTZWxlY3Rpb24gbWV0aG9kIGJlYWN1c2VcclxuICAvLyB3ZSB3YW50IHRvIHRyYWNrIHdoZXRoZXIgcGVvcGxlIHByZXNzIGJ1dHRvbnMgb3Iga2V5c1xyXG4gIGNsZWFyU2VsZWN0aW9uKClcclxuICBtcC50cmFjaygnVmlld2VyIEFjdGlvbicsIHtcclxuICAgIHR5cGU6ICdhY3Rpb24nLFxyXG4gICAgbmFtZTogJ3NlbGVjdGlvbicsXHJcbiAgICBhY3Rpb246ICdjbGVhcicsXHJcbiAgICBzb3VyY2U6ICdrZXlwcmVzcy1lc2NhcGUnXHJcbiAgfSlcclxufSlcclxuXHJcbndhdGNoKFxyXG4gIFtcclxuICAgICgpID0+IG9iamVjdHMudmFsdWUubGVuZ3RoLFxyXG4gICAgKCkgPT4gZm9jdXNlZFRocmVhZElkLnZhbHVlLFxyXG4gICAgKCkgPT4gdGhyZWFkcy5vcGVuVGhyZWFkLm5ld1RocmVhZEVkaXRvci52YWx1ZSxcclxuICAgICgpID0+IGlzU21hbGxlck9yRXF1YWxTbS52YWx1ZVxyXG4gIF0sXHJcbiAgKFtvYmpMZW4sIHRocmVhZElkLCBpc05ld1RocmVhZEVkaXRvck9wZW4sIGlzU21TbV0pID0+IHtcclxuICAgIC8vIENsb3NlIHNpZGViYXIgaWYgYSB0aHJlYWQgaXMgZm9jdXNlZFxyXG4gICAgaWYgKHRocmVhZElkKSB7XHJcbiAgICAgIHNpZGViYXJPcGVuLnZhbHVlID0gZmFsc2VcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2xvc2Ugc2lkZWJhciBpZiBuZXcgdGhyZWFkIGVkaXRvciBpcyBvcGVuIGFuZCBzY3JlZW4gaXMgc21hbGxcclxuICAgIGlmIChpc05ld1RocmVhZEVkaXRvck9wZW4gJiYgaXNTbVNtKSB7XHJcbiAgICAgIHNpZGViYXJPcGVuLnZhbHVlID0gZmFsc2VcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gT3BlbiBzaWRlYmFyIGlmIG9iamVjdHMgYXJlIHNlbGVjdGVkIGFuZCBubyB0aHJlYWQgaXMgZm9jdXNlZFxyXG4gICAgaWYgKG9iakxlbiAhPT0gMCAmJiAhdGhyZWFkSWQpIHtcclxuICAgICAgc2lkZWJhck9wZW4udmFsdWUgPSB0cnVlXHJcbiAgICB9IGVsc2UgaWYgKG9iakxlbiA9PT0gMCkge1xyXG4gICAgICBzaWRlYmFyT3Blbi52YWx1ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG4pXHJcblxyXG5kZWZpbmVFeHBvc2Uoe1xyXG4gIGZvcmNlQ2xvc2VcclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3ZpZXdlci9zZWxlY3Rpb24vU2lkZWJhci52dWUifQ== |