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

300 lines
28 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/comments/ListItem.vue");import { UserAvatarGroup as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { FormButton 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/resources/LimitAlert.vue";
import { default as __nuxt_component_3 } from "/_nuxt/components/global/icon/CircleExclamation.vue";
/* Injection by vite-plugin-vue-inspector Start */
import { createVNode as __createVNode,createBlock as __createBlock,createElementVNode as __createElementVNode,createElementBlock as __createElementBlock } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"
function _interopVNode(vnode) {
if (vnode && vnode.props && 'data-v-inspector' in vnode.props) {
const data = vnode.props['data-v-inspector']
delete vnode.props['data-v-inspector']
Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false })
}
return vnode
}
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
function _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
/* Injection by vite-plugin-vue-inspector End */
import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { CheckCircleIcon, ClockIcon } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_solid.js?v=e4f18c29";
import { CheckCircleIcon as CheckCircleIconOutlined } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_outline.js?v=e4f18c29";
import {
useInjectedViewerInterfaceState,
useInjectedViewerState
} from "/_nuxt/lib/viewer/composables/setup.ts";
import { useActiveUser } from "/_nuxt/lib/auth/composables/activeUser.ts";
import {
useArchiveComment,
useCommentContext
} from "/_nuxt/lib/viewer/composables/commentManagement.ts";
import { ToastNotificationType, useGlobalToast } from "/_nuxt/lib/common/composables/toast.ts";
import { Roles } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
import { useThreadUtilities } from "/_nuxt/lib/viewer/composables/ui.ts";
import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { useDateFormatters } from "/_nuxt/composables/dates.ts";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "ViewerCommentsListItem",
props: {
thread: { type: null, required: true }
},
setup(__props, { expose: __expose }) {
__expose();
const props = __props;
const {
threads: { openThread }
} = useInjectedViewerInterfaceState();
const { open: openThreadRaw } = useThreadUtilities();
const { activeUser } = useActiveUser();
const archiveComment = useArchiveComment();
const { triggerNotification } = useGlobalToast();
const {
projectId,
resources: {
response: { project }
}
} = useInjectedViewerState();
const isLimited = computed(() => {
return !props.thread.rawText || props.thread.rawText.trim() === "";
});
const mp = useMixpanel();
const open = (id) => {
openThreadRaw(id);
mp.track("Comment Action", {
type: "action",
name: "toggle",
status: !isOpenInViewer.value,
source: "sidebar"
});
};
const { calculateThreadResourceStatus } = useCommentContext();
const itemStatus = computed(() => calculateThreadResourceStatus(props.thread));
const { formattedRelativeDate, formattedFullDate } = useDateFormatters();
const createdAt = computed(() => {
return {
full: formattedFullDate(props.thread.createdAt),
relative: formattedRelativeDate(props.thread.createdAt, { capitalize: true })
};
});
const isOpenInViewer = computed(() => openThread.thread.value?.id === props.thread.id);
const threadAuthors = computed(() => {
const authors = [props.thread.author];
for (const author of props.thread.replyAuthors.items) {
if (!authors.find((u) => u.id === author.id)) authors.push(author);
}
return authors;
});
const canArchiveOrUnarchive = computed(
() => activeUser.value && (props.thread.author.id === activeUser.value.id || project.value?.role === Roles.Stream.Owner)
);
const toggleCommentResolvedStatus = async () => {
await archiveComment({
commentId: props.thread.id,
projectId: projectId.value,
archived: !props.thread.archived
});
mp.track("Comment Action", {
type: "action",
name: "archive",
status: !props.thread.archived
});
triggerNotification({
title: `Thread ${props.thread.archived ? "reopened." : "resolved."}`,
type: ToastNotificationType.Info
});
};
const __returned__ = { props, openThread, openThreadRaw, activeUser, archiveComment, triggerNotification, projectId, project, isLimited, mp, open, calculateThreadResourceStatus, itemStatus, formattedRelativeDate, formattedFullDate, createdAt, isOpenInViewer, threadAuthors, canArchiveOrUnarchive, toggleCommentResolvedStatus, get CheckCircleIcon() {
return CheckCircleIcon;
}, get ClockIcon() {
return ClockIcon;
}, get CheckCircleIconOutlined() {
return CheckCircleIconOutlined;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withModifiers as _withModifiers, resolveDirective as _resolveDirective, withDirectives as _withDirectives, openBlock as _openBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, Fragment as _Fragment } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
class: "flex-1 flex flex-col gap-y-1",
"data-v-inspector": "components/viewer/comments/ListItem.vue:11:5"
};
const _hoisted_2 = {
class: "flex items-center space-x-1.5 justify-between",
"data-v-inspector": "components/viewer/comments/ListItem.vue:12:7"
};
const _hoisted_3 = {
class: "flex items-center gap-x-1.5 text-body-3xs",
"data-v-inspector": "components/viewer/comments/ListItem.vue:24:7"
};
const _hoisted_4 = {
class: "text-foreground",
"data-v-inspector": "components/viewer/comments/ListItem.vue:25:9"
};
const _hoisted_5 = {
key: 0,
"data-v-inspector": "components/viewer/comments/ListItem.vue:27:11"
};
const _hoisted_6 = {
class: "text-foreground-3",
"data-v-inspector": "components/viewer/comments/ListItem.vue:32:9"
};
const _hoisted_7 = {
key: 0,
class: "text-body-2xs text-foreground dark:text-foreground-2 line-clamp-2 py-1",
"data-v-inspector": "components/viewer/comments/ListItem.vue:36:7"
};
const _hoisted_8 = {
class: "text-body-3xs flex items-center space-x-1.5 text-foreground-3",
"data-v-inspector": "components/viewer/comments/ListItem.vue:43:7"
};
const _hoisted_9 = {
key: 0,
class: "flex items-center space-x-1",
"data-v-inspector": "components/viewer/comments/ListItem.vue:44:9"
};
const _hoisted_10 = {
key: 0,
"data-v-inspector": "components/viewer/comments/ListItem.vue:48:11"
};
const _hoisted_11 = {
key: 1,
"data-v-inspector": "components/viewer/comments/ListItem.vue:54:11"
};
const _hoisted_12 = { "data-v-inspector": "components/viewer/comments/ListItem.vue:61:9" };
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_UserAvatarGroup = __nuxt_component_0;
const _component_FormButton = __nuxt_component_1;
const _component_ViewerResourcesLimitAlert = __nuxt_component_2;
const _component_IconCircleExclamation = __nuxt_component_3;
const _directive_tippy = _resolveDirective("tippy");
return _openBlock(), _createElementBlock(
_Fragment,
null,
[
_createCommentVNode(" eslint-disable-next-line vuejs-accessibility/click-events-have-key-events "),
_createElementVNode(
"div",
{
class: _normalizeClass(`p-1.5 pt-0.5 flex flex-col rounded-md
${$setup.isOpenInViewer ? "bg-highlight-2" : ""}
${$setup.isLimited ? "cursor-default" : "cursor-pointer hover:bg-highlight-3"}
`),
onClick: _cache[1] || (_cache[1] = ($event) => $setup.isLimited ? null : $setup.open($props.thread.id)),
"data-v-inspector": "components/viewer/comments/ListItem.vue:4:3"
},
[
_createElementVNode("div", _hoisted_1, [
_createElementVNode("div", _hoisted_2, [
_createVNode(_component_UserAvatarGroup, {
users: $setup.threadAuthors,
size: "sm",
"data-v-inspector": "components/viewer/comments/ListItem.vue:13:9"
}, null, 8, ["users"]),
!$setup.isLimited ? _withDirectives((_openBlock(), _createBlock(_component_FormButton, {
key: 0,
"icon-left": $props.thread.archived ? $setup.CheckCircleIcon : $setup.CheckCircleIconOutlined,
text: "",
"hide-text": "",
disabled: !$setup.canArchiveOrUnarchive,
onClick: _cache[0] || (_cache[0] = _withModifiers(($event) => $setup.toggleCommentResolvedStatus(), ["stop"])),
"data-v-inspector": "components/viewer/comments/ListItem.vue:14:9"
}, null, 8, ["icon-left", "disabled"])), [
[_directive_tippy, $props.thread.archived ? "Unresolve" : "Resolve"]
]) : _createCommentVNode("v-if", true)
]),
_createElementVNode("div", _hoisted_3, [
_createElementVNode("span", _hoisted_4, [
_createTextVNode(
_toDisplayString($props.thread.author.name) + " ",
1
/* TEXT */
),
$setup.threadAuthors.length !== 1 ? (_openBlock(), _createElementBlock(
"span",
_hoisted_5,
" & " + _toDisplayString($props.thread.replyAuthors.totalCount) + " others ",
1
/* TEXT */
)) : _createCommentVNode("v-if", true)
]),
_withDirectives((_openBlock(), _createElementBlock("span", _hoisted_6, [
_createTextVNode(
_toDisplayString($setup.createdAt.relative),
1
/* TEXT */
)
])), [
[_directive_tippy, $setup.createdAt.full]
])
]),
!$setup.isLimited ? (_openBlock(), _createElementBlock(
"div",
_hoisted_7,
_toDisplayString($props.thread.rawText),
1
/* TEXT */
)) : (_openBlock(), _createBlock(_component_ViewerResourcesLimitAlert, {
key: 1,
"limit-type": "comment",
project: $setup.project,
"data-v-inspector": "components/viewer/comments/ListItem.vue:42:7"
}, null, 8, ["project"])),
_createElementVNode("div", _hoisted_8, [
$setup.itemStatus.isDifferentVersion || $setup.itemStatus.isFederatedModel ? (_openBlock(), _createElementBlock("div", _hoisted_9, [
$setup.itemStatus.isDifferentVersion ? _withDirectives((_openBlock(), _createElementBlock("div", _hoisted_10, [
_createVNode($setup["ClockIcon"], {
class: "size-3 text-foreground-2",
"data-v-inspector": "components/viewer/comments/ListItem.vue:52:13"
})
])), [
[_directive_tippy, "Conversation started in a different version."]
]) : _createCommentVNode("v-if", true),
$setup.itemStatus.isFederatedModel ? _withDirectives((_openBlock(), _createElementBlock("div", _hoisted_11, [
_createVNode(_component_IconCircleExclamation, {
class: "size-3 text-foreground-2",
"data-v-inspector": "components/viewer/comments/ListItem.vue:58:13"
})
])), [
[_directive_tippy, "References models not currently loaded."]
]) : _createCommentVNode("v-if", true)
])) : _createCommentVNode("v-if", true),
_createElementVNode(
"span",
_hoisted_12,
_toDisplayString($props.thread.replies.totalCount) + " " + _toDisplayString($props.thread.replies.totalCount === 1 ? "reply" : "replies"),
1
/* TEXT */
)
])
])
],
2
/* CLASS */
)
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
}
_sfc_main.__hmrId = "3314803f";
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/comments/ListItem.vue"]]);
//# sourceMappingURL=data:application/json;base64,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LGNBQU8sT0FBTyxJQUFJLElBQUc7QUFBQSxrQkFDeEI7QUFBQTtBQUFBO0FBQUEsZ0JBQVkscUJBQWMsV0FBTSxtQkFBaEM7QUFBQSxrQkFFTztBQUFBLGtCQUZQO0FBQUEsa0JBQXlHLFFBQ3JHLGlCQUFHLGNBQU8sYUFBYSxVQUFVLElBQUc7QUFBQSxrQkFDeEM7QUFBQTtBQUFBOzs2Q0FHRixvQkFFTyxRQUZQLFlBRU87QUFBQTttQ0FERixpQkFBVSxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7bUNBRFIsaUJBQVUsSUFBSTtBQUFBOzthQUt0QixrQ0FEVDtBQUFBLGNBS007QUFBQSxjQUxOO0FBQUEsY0FLTSxpQkFERCxjQUFPLE9BQU87QUFBQTtBQUFBO0FBQUEsZ0NBRW5CLGFBQTRJO0FBQUE7Y0FBMUcsY0FBVztBQUFBLGNBQVcsU0FBUztBQUFBLGNBQVMsb0JBQWlCO0FBQUE7WUFDM0Ysb0JBc0JNLE9BdEJOLFlBc0JNO0FBQUEsY0FwQkksa0JBQVcsc0JBQXNCLGtCQUFXLGtDQURwRCxvQkFnQk0sT0FoQk4sWUFnQk07QUFBQSxnQkFYSSxrQkFBVyxvREFEbkIsb0JBS00sT0FMTixhQUtNO0FBQUEsa0JBREosYUFBK0c7QUFBQSxvQkFBcEcsT0FBTTtBQUFBLG9CQUEyQixvQkFBaUI7QUFBQTs7cUNBRnBELDhDQUE4QztBQUFBO2dCQUtqRCxrQkFBVyxrREFEbkIsb0JBS00sT0FMTixhQUtNO0FBQUEsa0JBREosYUFBMkg7QUFBQSxvQkFBcEcsT0FBTTtBQUFBLG9CQUEyQixvQkFBaUI7QUFBQTs7cUNBRmhFLHlDQUF5QztBQUFBOztjQUt0RDtBQUFBLGdCQUdPO0FBQUEsZ0JBSFA7QUFBQSxnQkFHTyxpQkFGRixjQUFPLFFBQVEsVUFBVSxJQUFHLE1BQy9CLGlCQUFHLGNBQU8sUUFBUSxlQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIkxpc3RJdGVtLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZWpzLWFjY2Vzc2liaWxpdHkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zIC0tPlxyXG48dGVtcGxhdGU+XHJcbiAgPCEtLSBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlanMtYWNjZXNzaWJpbGl0eS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzIC0tPlxyXG4gIDxkaXZcclxuICAgIDpjbGFzcz1cImBwLTEuNSBwdC0wLjUgZmxleCBmbGV4LWNvbCByb3VuZGVkLW1kXHJcbiAgICAgICR7aXNPcGVuSW5WaWV3ZXIgPyAnYmctaGlnaGxpZ2h0LTInIDogJyd9XHJcbiAgICAgICR7aXNMaW1pdGVkID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1oaWdobGlnaHQtMyd9XHJcbiAgICBgXCJcclxuICAgIEBjbGljaz1cImlzTGltaXRlZCA/IG51bGwgOiBvcGVuKHRocmVhZC5pZClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29tbWVudHMvTGlzdEl0ZW0udnVlOjQ6M1wiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC15LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29tbWVudHMvTGlzdEl0ZW0udnVlOjExOjVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMS41IGp1c3RpZnktYmV0d2VlblwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9MaXN0SXRlbS52dWU6MTI6N1wiPlxyXG4gICAgICAgIDxVc2VyQXZhdGFyR3JvdXAgOnVzZXJzPVwidGhyZWFkQXV0aG9yc1wiIHNpemU9XCJzbVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9MaXN0SXRlbS52dWU6MTM6OVwiIC8+XHJcbiAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgIHYtaWY9XCIhaXNMaW1pdGVkXCJcclxuICAgICAgICAgIHYtdGlwcHk9XCJ0aHJlYWQuYXJjaGl2ZWQgPyAnVW5yZXNvbHZlJyA6ICdSZXNvbHZlJ1wiXHJcbiAgICAgICAgICA6aWNvbi1sZWZ0PVwidGhyZWFkLmFyY2hpdmVkID8gQ2hlY2tDaXJjbGVJY29uIDogQ2hlY2tDaXJjbGVJY29uT3V0bGluZWRcIlxyXG4gICAgICAgICAgdGV4dFxyXG4gICAgICAgICAgaGlkZS10ZXh0XHJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCIhY2FuQXJjaGl2ZU9yVW5hcmNoaXZlXCJcclxuICAgICAgICAgIEBjbGljay5zdG9wPVwidG9nZ2xlQ29tbWVudFJlc29sdmVkU3RhdHVzKClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29tbWVudHMvTGlzdEl0ZW0udnVlOjE0OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtMS41IHRleHQtYm9keS0zeHNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29tbWVudHMvTGlzdEl0ZW0udnVlOjI0OjdcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZm9yZWdyb3VuZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9MaXN0SXRlbS52dWU6MjU6OVwiPlxyXG4gICAgICAgICAge3sgdGhyZWFkLmF1dGhvci5uYW1lIH19XHJcbiAgICAgICAgICA8c3BhbiB2LWlmPVwidGhyZWFkQXV0aG9ycy5sZW5ndGggIT09IDFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29tbWVudHMvTGlzdEl0ZW0udnVlOjI3OjExXCI+XHJcbiAgICAgICAgICAgICYge3sgdGhyZWFkLnJlcGx5QXV0aG9ycy50b3RhbENvdW50IH19IG90aGVyc1xyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHNwYW4gdi10aXBweT1cImNyZWF0ZWRBdC5mdWxsXCIgY2xhc3M9XCJ0ZXh0LWZvcmVncm91bmQtM1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9MaXN0SXRlbS52dWU6MzI6OVwiPlxyXG4gICAgICAgICAge3sgY3JlYXRlZEF0LnJlbGF0aXZlIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIHYtaWY9XCIhaXNMaW1pdGVkXCJcclxuICAgICAgICBjbGFzcz1cInRleHQtYm9keS0yeHMgdGV4dC1mb3JlZ3JvdW5kIGRhcms6dGV4dC1mb3JlZ3JvdW5kLTIgbGluZS1jbGFtcC0yIHB5LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29tbWVudHMvTGlzdEl0ZW0udnVlOjM2OjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgdGhyZWFkLnJhd1RleHQgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxWaWV3ZXJSZXNvdXJjZXNMaW1pdEFsZXJ0IHYtZWxzZSBsaW1pdC10eXBlPVwiY29tbWVudFwiIDpwcm9qZWN0PVwicHJvamVjdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9MaXN0SXRlbS52dWU6NDI6N1wiIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktM3hzIGZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMS41IHRleHQtZm9yZWdyb3VuZC0zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbW1lbnRzL0xpc3RJdGVtLnZ1ZTo0Mzo3XCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgdi1pZj1cIml0ZW1TdGF0dXMuaXNEaWZmZXJlbnRWZXJzaW9uIHx8IGl0ZW1TdGF0dXMuaXNGZWRlcmF0ZWRNb2RlbFwiXHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9MaXN0SXRlbS52dWU6NDQ6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICB2LWlmPVwiaXRlbVN0YXR1cy5pc0RpZmZlcmVudFZlcnNpb25cIlxyXG4gICAgICAgICAgICB2LXRpcHB5PVwiJ0NvbnZlcnNhdGlvbiBzdGFydGVkIGluIGEgZGlmZmVyZW50IHZlcnNpb24uJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9MaXN0SXRlbS52dWU6NDg6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8Q2xvY2tJY29uIGNsYXNzPVwic2l6ZS0zIHRleHQtZm9yZWdyb3VuZC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbW1lbnRzL0xpc3RJdGVtLnZ1ZTo1MjoxM1wiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgdi1pZj1cIml0ZW1TdGF0dXMuaXNGZWRlcmF0ZWRNb2RlbFwiXHJcbiAgICAgICAgICAgIHYtdGlwcHk9XCInUmVmZXJlbmNlcyBtb2RlbHMgbm90IGN1cnJlbnRseSBsb2FkZWQuJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9MaXN0SXRlbS52dWU6NTQ6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8SWNvbkNpcmNsZUV4Y2xhbWF0aW9uIGNsYXNzPVwic2l6ZS0zIHRleHQtZm9yZWdyb3VuZC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2NvbW1lbnRzL0xpc3RJdGVtLnZ1ZTo1ODoxM1wiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvY29tbWVudHMvTGlzdEl0ZW0udnVlOjYxOjlcIj5cclxuICAgICAgICAgIHt7IHRocmVhZC5yZXBsaWVzLnRvdGFsQ291bnQgfX1cclxuICAgICAgICAgIHt7IHRocmVhZC5yZXBsaWVzLnRvdGFsQ291bnQgPT09IDEgPyAncmVwbHknIDogJ3JlcGxpZXMnIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBDaGVja0NpcmNsZUljb24sIENsb2NrSWNvbiB9IGZyb20gJ0BoZXJvaWNvbnMvdnVlLzI0L3NvbGlkJ1xyXG5pbXBvcnQgeyBDaGVja0NpcmNsZUljb24gYXMgQ2hlY2tDaXJjbGVJY29uT3V0bGluZWQgfSBmcm9tICdAaGVyb2ljb25zL3Z1ZS8yNC9vdXRsaW5lJ1xyXG5pbXBvcnQgdHlwZSB7IExvYWRlZENvbW1lbnRUaHJlYWQgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NldHVwJ1xyXG5pbXBvcnQge1xyXG4gIHVzZUluamVjdGVkVmlld2VySW50ZXJmYWNlU3RhdGUsXHJcbiAgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZVxyXG59IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB7IHVzZUFjdGl2ZVVzZXIgfSBmcm9tICd+fi9saWIvYXV0aC9jb21wb3NhYmxlcy9hY3RpdmVVc2VyJ1xyXG5pbXBvcnQge1xyXG4gIHVzZUFyY2hpdmVDb21tZW50LFxyXG4gIHVzZUNvbW1lbnRDb250ZXh0XHJcbn0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9jb21tZW50TWFuYWdlbWVudCdcclxuaW1wb3J0IHsgVG9hc3ROb3RpZmljYXRpb25UeXBlLCB1c2VHbG9iYWxUb2FzdCB9IGZyb20gJ35+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvdG9hc3QnXHJcbmltcG9ydCB7IFJvbGVzIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgeyB1c2VNaXhwYW5lbCB9IGZyb20gJ35+L2xpYi9jb3JlL2NvbXBvc2FibGVzL21wJ1xyXG5pbXBvcnQgeyB1c2VUaHJlYWRVdGlsaXRpZXMgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3VpJ1xyXG5cclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczx7XHJcbiAgdGhyZWFkOiBMb2FkZWRDb21tZW50VGhyZWFkXHJcbn0+KClcclxuXHJcbmNvbnN0IHtcclxuICB0aHJlYWRzOiB7IG9wZW5UaHJlYWQgfVxyXG59ID0gdXNlSW5qZWN0ZWRWaWV3ZXJJbnRlcmZhY2VTdGF0ZSgpXHJcbmNvbnN0IHsgb3Blbjogb3BlblRocmVhZFJhdyB9ID0gdXNlVGhyZWFkVXRpbGl0aWVzKClcclxuY29uc3QgeyBhY3RpdmVVc2VyIH0gPSB1c2VBY3RpdmVVc2VyKClcclxuY29uc3QgYXJjaGl2ZUNvbW1lbnQgPSB1c2VBcmNoaXZlQ29tbWVudCgpXHJcbmNvbnN0IHsgdHJpZ2dlck5vdGlmaWNhdGlvbiB9ID0gdXNlR2xvYmFsVG9hc3QoKVxyXG5jb25zdCB7XHJcbiAgcHJvamVjdElkLFxyXG4gIHJlc291cmNlczoge1xyXG4gICAgcmVzcG9uc2U6IHsgcHJvamVjdCB9XHJcbiAgfVxyXG59ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcblxyXG5jb25zdCBpc0xpbWl0ZWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuICFwcm9wcy50aHJlYWQucmF3VGV4dCB8fCBwcm9wcy50aHJlYWQucmF3VGV4dC50cmltKCkgPT09ICcnXHJcbn0pXHJcblxyXG5jb25zdCBtcCA9IHVzZU1peHBhbmVsKClcclxuY29uc3Qgb3BlbiA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgb3BlblRocmVhZFJhdyhpZClcclxuICBtcC50cmFjaygnQ29tbWVudCBBY3Rpb24nLCB7XHJcbiAgICB0eXBlOiAnYWN0aW9uJyxcclxuICAgIG5hbWU6ICd0b2dnbGUnLFxyXG4gICAgc3RhdHVzOiAhaXNPcGVuSW5WaWV3ZXIudmFsdWUsXHJcbiAgICBzb3VyY2U6ICdzaWRlYmFyJ1xyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IHsgY2FsY3VsYXRlVGhyZWFkUmVzb3VyY2VTdGF0dXMgfSA9IHVzZUNvbW1lbnRDb250ZXh0KClcclxuY29uc3QgaXRlbVN0YXR1cyA9IGNvbXB1dGVkKCgpID0+IGNhbGN1bGF0ZVRocmVhZFJlc291cmNlU3RhdHVzKHByb3BzLnRocmVhZCkpXHJcbmNvbnN0IHsgZm9ybWF0dGVkUmVsYXRpdmVEYXRlLCBmb3JtYXR0ZWRGdWxsRGF0ZSB9ID0gdXNlRGF0ZUZvcm1hdHRlcnMoKVxyXG5cclxuY29uc3QgY3JlYXRlZEF0ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBmdWxsOiBmb3JtYXR0ZWRGdWxsRGF0ZShwcm9wcy50aHJlYWQuY3JlYXRlZEF0KSxcclxuICAgIHJlbGF0aXZlOiBmb3JtYXR0ZWRSZWxhdGl2ZURhdGUocHJvcHMudGhyZWFkLmNyZWF0ZWRBdCwgeyBjYXBpdGFsaXplOiB0cnVlIH0pXHJcbiAgfVxyXG59KVxyXG5cclxuY29uc3QgaXNPcGVuSW5WaWV3ZXIgPSBjb21wdXRlZCgoKSA9PiBvcGVuVGhyZWFkLnRocmVhZC52YWx1ZT8uaWQgPT09IHByb3BzLnRocmVhZC5pZClcclxuXHJcbmNvbnN0IHRocmVhZEF1dGhvcnMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgYXV0aG9ycyA9IFtwcm9wcy50aHJlYWQuYXV0aG9yXVxyXG4gIGZvciAoY29uc3QgYXV0aG9yIG9mIHByb3BzLnRocmVhZC5yZXBseUF1dGhvcnMuaXRlbXMpIHtcclxuICAgIGlmICghYXV0aG9ycy5maW5kKCh1KSA9PiB1LmlkID09PSBhdXRob3IuaWQpKSBhdXRob3JzLnB1c2goYXV0aG9yKVxyXG4gIH1cclxuICByZXR1cm4gYXV0aG9yc1xyXG59KVxyXG5cclxuY29uc3QgY2FuQXJjaGl2ZU9yVW5hcmNoaXZlID0gY29tcHV0ZWQoXHJcbiAgKCkgPT5cclxuICAgIGFjdGl2ZVVzZXIudmFsdWUgJiZcclxuICAgIChwcm9wcy50aHJlYWQuYXV0aG9yLmlkID09PSBhY3RpdmVVc2VyLnZhbHVlLmlkIHx8XHJcbiAgICAgIHByb2plY3QudmFsdWU/LnJvbGUgPT09IFJvbGVzLlN0cmVhbS5Pd25lcilcclxuKVxyXG5cclxuY29uc3QgdG9nZ2xlQ29tbWVudFJlc29sdmVkU3RhdHVzID0gYXN5bmMgKCkgPT4ge1xyXG4gIGF3YWl0IGFyY2hpdmVDb21tZW50KHtcclxuICAgIGNvbW1lbnRJZDogcHJvcHMudGhyZWFkLmlkLFxyXG4gICAgcHJvamVjdElkOiBwcm9qZWN0SWQudmFsdWUsXHJcbiAgICBhcmNoaXZlZDogIXByb3BzLnRocmVhZC5hcmNoaXZlZFxyXG4gIH0pXHJcbiAgbXAudHJhY2soJ0NvbW1lbnQgQWN0aW9uJywge1xyXG4gICAgdHlwZTogJ2FjdGlvbicsXHJcbiAgICBuYW1lOiAnYXJjaGl2ZScsXHJcbiAgICBzdGF0dXM6ICFwcm9wcy50aHJlYWQuYXJjaGl2ZWRcclxuICB9KVxyXG4gIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgdGl0bGU6IGBUaHJlYWQgJHtwcm9wcy50aHJlYWQuYXJjaGl2ZWQgPyAncmVvcGVuZWQuJyA6ICdyZXNvbHZlZC4nfWAsXHJcbiAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuSW5mb1xyXG4gIH0pXHJcbn1cclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3ZpZXdlci9jb21tZW50cy9MaXN0SXRlbS52dWUifQ==