import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/workspace/moveProject/Confirm.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/billing/TransitionCards.vue"; import { UserAvatar as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { FormButton as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { default as __nuxt_component_3 } from "/_nuxt/components/workspace/RegionStaticDataDisclaimer.vue"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementVNode as __createElementVNode,createVNode as __createVNode,createElementBlock as __createElementBlock,createBlock as __createBlock } 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 _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createBlock(...args) { return _interopVNode(__createBlock(...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 { useQuery } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29"; import { moveToWorkspaceDryRunQuery } from "/_nuxt/lib/projects/graphql/queries.ts"; import { useMoveProjectToWorkspace } from "/_nuxt/lib/projects/composables/projectManagement.ts"; import { useWorkspaceCustomDataResidencyDisclaimer, RegionStaticDataDisclaimerVariant } from "/_nuxt/lib/workspaces/composables/region.ts"; import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "WorkspaceMoveProjectConfirm", props: { project: { type: Object, required: true }, workspace: { type: Object, required: true }, eventSource: { type: String, required: false } }, emits: ["move-complete", "back"], setup(__props, { expose: __expose, emit: __emit }) { const props = __props; const emit = __emit; const moveProject = useMoveProjectToWorkspace(); const handleConfirm = async () => { const res = await moveProject({ projectId: props.project.id, workspaceId: props.workspace.id, workspaceName: props.workspace.name, eventSource: props.eventSource }); if (res?.id) { emit("move-complete"); } }; const { showRegionStaticDataDisclaimer, triggerAction } = useWorkspaceCustomDataResidencyDisclaimer({ workspace: computed(() => props.workspace), onConfirmAction: handleConfirm }); const { result: dryRunResult } = useQuery( moveToWorkspaceDryRunQuery, () => ({ projectId: props.project.id, workspaceId: props.workspace.id, limit: 20 }), () => ({ enabled: !!props.project.id && !!props.workspace.id }) ); const dryRunResultMembers = computed( () => dryRunResult.value?.project.moveToWorkspaceDryRun.addedToWorkspace || [] ); const dryRunResultMembersCount = computed( () => dryRunResult.value?.project.moveToWorkspaceDryRun.addedToWorkspaceTotalCount ); const dryRunResultMembersInfoText = computed(() => { if (!dryRunResultMembers.value || !dryRunResultMembersCount.value) return ""; if (dryRunResultMembers.value?.length > 20 && dryRunResultMembersCount.value > 20) { const diff = dryRunResultMembersCount.value - dryRunResultMembers.value.length; return `and ${diff} more`; } return ""; }); const transitionItems = { project: { title: "Viewer seat", description: "Can view and comment on projects" }, workspace: { title: "Editor seat", description: "Can view and comment on projects" } }; __expose({ onConfirm: triggerAction }); const __returned__ = { props, emit, moveProject, handleConfirm, showRegionStaticDataDisclaimer, triggerAction, dryRunResult, dryRunResultMembers, dryRunResultMembersCount, dryRunResultMembersInfoText, transitionItems, get RegionStaticDataDisclaimerVariant() { return RegionStaticDataDisclaimerVariant; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { "data-v-inspector": "components/workspace/moveProject/Confirm.vue:2:3" }; const _hoisted_2 = { class: "flex flex-col", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:8:9" }; const _hoisted_3 = { class: "flex items-center gap-4 justify-between", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:10:11" }; const _hoisted_4 = { class: "text-heading-sm mt-1", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:11:13" }; const _hoisted_5 = { class: "text-body-2xs font-medium", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:12:13" }; const _hoisted_6 = { class: "flex flex-col", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:19:9" }; const _hoisted_7 = { class: "text-heading-sm mt-1", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:21:11" }; const _hoisted_8 = { class: "flex flex-col gap-y-4", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:25:5" }; const _hoisted_9 = { key: 0, class: "pt-2 gap-y-2 flex flex-col border-t border-outline-3", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:31:7" }; const _hoisted_10 = { class: "text-body-2xs text-foreground-2 mt-2 mb-1", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:35:9" }; const _hoisted_11 = { class: "w-full", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:42:9" }; const _hoisted_12 = { class: "text-foreground text-body-2xs", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:49:13" }; const _hoisted_13 = { key: 0, class: "text-body-2xs text-foreground-2", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:52:9" }; const _hoisted_14 = { class: "flex justify-end gap-2 mt-4", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:57:7" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_BillingTransitionCards = __nuxt_component_0; const _component_UserAvatar = __nuxt_component_1; const _component_FormButton = __nuxt_component_2; const _component_WorkspaceRegionStaticDataDisclaimer = __nuxt_component_3; return _openBlock(), _createElementBlock("div", _hoisted_1, [ _createVNode(_component_BillingTransitionCards, { "current-state": $setup.transitionItems.project, "new-state": $setup.transitionItems.workspace, "data-v-inspector": "components/workspace/moveProject/Confirm.vue:3:5" }, { "current-state": _withCtx(() => [ _createElementVNode("div", _hoisted_2, [ _cache[2] || (_cache[2] = _createElementVNode( "div", { class: "text-foreground-2 text-body-3xs", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:9:11" }, "Project", -1 /* CACHED */ )), _createElementVNode("div", _hoisted_3, [ _createElementVNode( "div", _hoisted_4, _toDisplayString($props.project.name), 1 /* TEXT */ ), _createElementVNode( "div", _hoisted_5, _toDisplayString($props.project.modelCount.totalCount) + " models ", 1 /* TEXT */ ) ]) ]) ]), "new-state": _withCtx(() => [ _createElementVNode("div", _hoisted_6, [ _cache[3] || (_cache[3] = _createElementVNode( "div", { class: "text-foreground-2 text-body-3xs", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:20:11" }, "Workspace", -1 /* CACHED */ )), _createElementVNode( "div", _hoisted_7, _toDisplayString($props.workspace.name), 1 /* TEXT */ ) ]) ]), _: 1 /* STABLE */ }, 8, ["current-state", "new-state"]), _createElementVNode("div", _hoisted_8, [ _cache[6] || (_cache[6] = _createElementVNode( "p", { class: "text-body-2xs text-foreground-2 mt-4", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:26:7" }, " The project, including all its data, will be moved to the workspace, where all existing members will have access by default. ", -1 /* CACHED */ )), $setup.dryRunResultMembers.length > 0 ? (_openBlock(), _createElementBlock("div", _hoisted_9, [ _createElementVNode( "p", _hoisted_10, _toDisplayString($setup.dryRunResultMembers.length === 1 ? "1 person will also be added as a free member to the workspace." : `${$setup.dryRunResultMembers.length} people will also be added as free members to the workspace.`), 1 /* TEXT */ ), _createElementVNode("div", _hoisted_11, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.dryRunResultMembers, (user) => { return _openBlock(), _createElementBlock("div", { key: `dry-run-user-${user.id}`, class: "flex items-center py-1.5 px-2 border-t border-x last:border-b border-outline-3 first:rounded-t-lg last:rounded-b-lg gap-x-1.5", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:43:11" }, [ _createVNode(_component_UserAvatar, { "hide-tooltip": "", user, size: "sm", "data-v-inspector": "components/workspace/moveProject/Confirm.vue:48:13" }, null, 8, ["user"]), _createElementVNode( "p", _hoisted_12, _toDisplayString(user.name), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), $setup.dryRunResultMembersInfoText ? (_openBlock(), _createElementBlock( "p", _hoisted_13, _toDisplayString($setup.dryRunResultMembersInfoText), 1 /* TEXT */ )) : _createCommentVNode("v-if", true) ])) : _createCommentVNode("v-if", true), _createElementVNode("div", _hoisted_14, [ _createVNode(_component_FormButton, { color: "outline", onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("back")), "data-v-inspector": "components/workspace/moveProject/Confirm.vue:58:9" }, { default: _withCtx(() => [..._cache[4] || (_cache[4] = [ _createTextVNode( "Back", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }), _createVNode(_component_FormButton, { color: "primary", onClick: $setup.triggerAction, "data-v-inspector": "components/workspace/moveProject/Confirm.vue:59:9" }, { default: _withCtx(() => [..._cache[5] || (_cache[5] = [ _createTextVNode( "Move", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["onClick"]) ]) ]), $setup.showRegionStaticDataDisclaimer ? (_openBlock(), _createBlock(_component_WorkspaceRegionStaticDataDisclaimer, { key: 0, open: $setup.showRegionStaticDataDisclaimer, "onUpdate:open": _cache[1] || (_cache[1] = ($event) => $setup.showRegionStaticDataDisclaimer = $event), variant: $setup.RegionStaticDataDisclaimerVariant.MoveProjectIntoWorkspace, "data-v-inspector": "components/workspace/moveProject/Confirm.vue:62:5" }, null, 8, ["open", "variant"])) : _createCommentVNode("v-if", true) ]); } _sfc_main.__hmrId = "7c16c646"; 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/workspace/moveProject/Confirm.vue"]]); //# sourceMappingURL=data:application/json;base64,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QVNNO0FBQUEsNkJBUko7QUFBQSxZQU9NO0FBQUE7QUFBQSx3QkFOVyw0QkFBbUIsQ0FBM0IsU0FBSTttQ0FEYixvQkFPTTtBQUFBLGdCQUxILEtBQUcsZ0JBQWtCLEtBQUssRUFBRTtBQUFBLGdCQUM3QixPQUFNO0FBQUEsZ0JBQWdJLG9CQUFpQjtBQUFBO2dCQUV2SixhQUF3SDtBQUFBLGtCQUE1RztBQUFBLGtCQUFjO0FBQUEsa0JBQVksTUFBSztBQUFBLGtCQUFLLG9CQUFpQjtBQUFBO2dCQUNqRTtBQUFBLGtCQUFrSTtBQUFBLGtCQUFsSTtBQUFBLGtCQUFrSSxpQkFBaEIsS0FBSyxJQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7OztRQUd0SCxvREFBVDtBQUFBLFVBRUk7QUFBQSxVQUZKO0FBQUEsVUFFSSxpQkFEQyxrQ0FBMkI7QUFBQTtBQUFBO0FBQUE7O01BSWxDLG9CQUdNLE9BSE4sYUFHTTtBQUFBLFFBRkosYUFBeUk7QUFBQSxVQUE3SCxPQUFNO0FBQUEsVUFBVyxTQUFLLHNDQUFFLFdBQUs7QUFBQSxVQUFVLG9CQUFpQjtBQUFBOzRCQUFvRCxNQUFJO0FBQUE7Y0FBSjtBQUFBLGNBQUk7QUFBQTtBQUFBO0FBQUE7Ozs7UUFDNUgsYUFBeUk7QUFBQSxVQUE3SCxPQUFNO0FBQUEsVUFBVyxTQUFPO0FBQUEsVUFBZSxvQkFBaUI7QUFBQTs0QkFBb0QsTUFBSTtBQUFBO2NBQUo7QUFBQSxjQUFJO0FBQUE7QUFBQTtBQUFBOzs7Ozs7SUFJeEgsdURBRFIsYUFJRTtBQUFBO01BRlEsTUFBTTtBQUFBLHFHQUE4QjtBQUFBLE1BQzNDLFNBQVMseUNBQWtDO0FBQUEsTUFBMEIsb0JBQWlCO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIkNvbmZpcm0udnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9Db25maXJtLnZ1ZToyOjNcIj5cclxuICAgIDxCaWxsaW5nVHJhbnNpdGlvbkNhcmRzXHJcbiAgICAgIDpjdXJyZW50LXN0YXRlPVwidHJhbnNpdGlvbkl0ZW1zLnByb2plY3RcIlxyXG4gICAgICA6bmV3LXN0YXRlPVwidHJhbnNpdGlvbkl0ZW1zLndvcmtzcGFjZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9Db25maXJtLnZ1ZTozOjVcIlxyXG4gICAgPlxyXG4gICAgICA8dGVtcGxhdGUgI2N1cnJlbnQtc3RhdGU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvQ29uZmlybS52dWU6ODo5XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kLTIgdGV4dC1ib2R5LTN4c1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9Db25maXJtLnZ1ZTo5OjExXCI+UHJvamVjdDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IGp1c3RpZnktYmV0d2VlblwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9Db25maXJtLnZ1ZToxMDoxMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1oZWFkaW5nLXNtIG10LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvQ29uZmlybS52dWU6MTE6MTNcIj57eyBwcm9qZWN0Lm5hbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYm9keS0yeHMgZm9udC1tZWRpdW1cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvQ29uZmlybS52dWU6MTI6MTNcIj5cclxuICAgICAgICAgICAgICB7eyBwcm9qZWN0Lm1vZGVsQ291bnQudG90YWxDb3VudCB9fSBtb2RlbHNcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPHRlbXBsYXRlICNuZXctc3RhdGU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvQ29uZmlybS52dWU6MTk6OVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZm9yZWdyb3VuZC0yIHRleHQtYm9keS0zeHNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvQ29uZmlybS52dWU6MjA6MTFcIj5Xb3Jrc3BhY2U8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWhlYWRpbmctc20gbXQtMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9Db25maXJtLnZ1ZToyMToxMVwiPnt7IHdvcmtzcGFjZS5uYW1lIH19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8L0JpbGxpbmdUcmFuc2l0aW9uQ2FyZHM+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAteS00XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0NvbmZpcm0udnVlOjI1OjVcIj5cclxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIHRleHQtZm9yZWdyb3VuZC0yIG10LTRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvQ29uZmlybS52dWU6MjY6N1wiPlxyXG4gICAgICAgIFRoZSBwcm9qZWN0LCBpbmNsdWRpbmcgYWxsIGl0cyBkYXRhLCB3aWxsIGJlIG1vdmVkIHRvIHRoZSB3b3Jrc3BhY2UsIHdoZXJlIGFsbFxyXG4gICAgICAgIGV4aXN0aW5nIG1lbWJlcnMgd2lsbCBoYXZlIGFjY2VzcyBieSBkZWZhdWx0LlxyXG4gICAgICA8L3A+XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgdi1pZj1cImRyeVJ1blJlc3VsdE1lbWJlcnMubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgY2xhc3M9XCJwdC0yIGdhcC15LTIgZmxleCBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItb3V0bGluZS0zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0NvbmZpcm0udnVlOjMxOjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIHRleHQtZm9yZWdyb3VuZC0yIG10LTIgbWItMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9Db25maXJtLnZ1ZTozNTo5XCI+XHJcbiAgICAgICAgICB7e1xyXG4gICAgICAgICAgICBkcnlSdW5SZXN1bHRNZW1iZXJzLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgICAgID8gJzEgcGVyc29uIHdpbGwgYWxzbyBiZSBhZGRlZCBhcyBhIGZyZWUgbWVtYmVyIHRvIHRoZSB3b3Jrc3BhY2UuJ1xyXG4gICAgICAgICAgICAgIDogYCR7ZHJ5UnVuUmVzdWx0TWVtYmVycy5sZW5ndGh9IHBlb3BsZSB3aWxsIGFsc28gYmUgYWRkZWQgYXMgZnJlZSBtZW1iZXJzIHRvIHRoZSB3b3Jrc3BhY2UuYFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9Db25maXJtLnZ1ZTo0Mjo5XCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIHYtZm9yPVwidXNlciBpbiBkcnlSdW5SZXN1bHRNZW1iZXJzXCJcclxuICAgICAgICAgICAgOmtleT1cImBkcnktcnVuLXVzZXItJHt1c2VyLmlkfWBcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHB5LTEuNSBweC0yIGJvcmRlci10IGJvcmRlci14IGxhc3Q6Ym9yZGVyLWIgYm9yZGVyLW91dGxpbmUtMyBmaXJzdDpyb3VuZGVkLXQtbGcgbGFzdDpyb3VuZGVkLWItbGcgZ2FwLXgtMS41XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0NvbmZpcm0udnVlOjQzOjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPFVzZXJBdmF0YXIgaGlkZS10b29sdGlwIDp1c2VyPVwidXNlclwiIHNpemU9XCJzbVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9Db25maXJtLnZ1ZTo0ODoxM1wiIC8+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kIHRleHQtYm9keS0yeHNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvQ29uZmlybS52dWU6NDk6MTNcIj57eyB1c2VyLm5hbWUgfX08L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCB2LWlmPVwiZHJ5UnVuUmVzdWx0TWVtYmVyc0luZm9UZXh0XCIgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIHRleHQtZm9yZWdyb3VuZC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0NvbmZpcm0udnVlOjUyOjlcIj5cclxuICAgICAgICAgIHt7IGRyeVJ1blJlc3VsdE1lbWJlcnNJbmZvVGV4dCB9fVxyXG4gICAgICAgIDwvcD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMiBtdC00XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0NvbmZpcm0udnVlOjU3OjdcIj5cclxuICAgICAgICA8Rm9ybUJ1dHRvbiBjb2xvcj1cIm91dGxpbmVcIiBAY2xpY2s9XCIkZW1pdCgnYmFjaycpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0NvbmZpcm0udnVlOjU4OjlcIj5CYWNrPC9Gb3JtQnV0dG9uPlxyXG4gICAgICAgIDxGb3JtQnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIEBjbGljaz1cInRyaWdnZXJBY3Rpb25cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvQ29uZmlybS52dWU6NTk6OVwiPk1vdmU8L0Zvcm1CdXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8V29ya3NwYWNlUmVnaW9uU3RhdGljRGF0YURpc2NsYWltZXJcclxuICAgICAgdi1pZj1cInNob3dSZWdpb25TdGF0aWNEYXRhRGlzY2xhaW1lclwiXHJcbiAgICAgIHYtbW9kZWw6b3Blbj1cInNob3dSZWdpb25TdGF0aWNEYXRhRGlzY2xhaW1lclwiXHJcbiAgICAgIDp2YXJpYW50PVwiUmVnaW9uU3RhdGljRGF0YURpc2NsYWltZXJWYXJpYW50Lk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9Db25maXJtLnZ1ZTo2Mjo1XCJcclxuICAgIC8+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgdHlwZSB7XHJcbiAgV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCxcclxuICBXb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Xb3Jrc3BhY2VGcmFnbWVudFxyXG59IGZyb20gJ35+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbC9ncmFwaHFsJ1xyXG5pbXBvcnQgeyB1c2VRdWVyeSB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IG1vdmVUb1dvcmtzcGFjZURyeVJ1blF1ZXJ5IH0gZnJvbSAnfi9saWIvcHJvamVjdHMvZ3JhcGhxbC9xdWVyaWVzJ1xyXG5pbXBvcnQgeyB1c2VNb3ZlUHJvamVjdFRvV29ya3NwYWNlIH0gZnJvbSAnfi9saWIvcHJvamVjdHMvY29tcG9zYWJsZXMvcHJvamVjdE1hbmFnZW1lbnQnXHJcbmltcG9ydCB7XHJcbiAgdXNlV29ya3NwYWNlQ3VzdG9tRGF0YVJlc2lkZW5jeURpc2NsYWltZXIsXHJcbiAgUmVnaW9uU3RhdGljRGF0YURpc2NsYWltZXJWYXJpYW50XHJcbn0gZnJvbSAnfi9saWIvd29ya3NwYWNlcy9jb21wb3NhYmxlcy9yZWdpb24nXHJcblxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICBwcm9qZWN0OiBXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdEZyYWdtZW50XHJcbiAgd29ya3NwYWNlOiBXb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Xb3Jrc3BhY2VGcmFnbWVudFxyXG4gIGV2ZW50U291cmNlPzogc3RyaW5nXHJcbn0+KClcclxuXHJcbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czx7XHJcbiAgKGU6ICdtb3ZlLWNvbXBsZXRlJyk6IHZvaWRcclxuICAoZTogJ2JhY2snKTogdm9pZFxyXG59PigpXHJcblxyXG5jb25zdCBtb3ZlUHJvamVjdCA9IHVzZU1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2UoKVxyXG5cclxuY29uc3QgaGFuZGxlQ29uZmlybSA9IGFzeW5jICgpID0+IHtcclxuICBjb25zdCByZXMgPSBhd2FpdCBtb3ZlUHJvamVjdCh7XHJcbiAgICBwcm9qZWN0SWQ6IHByb3BzLnByb2plY3QuaWQsXHJcbiAgICB3b3Jrc3BhY2VJZDogcHJvcHMud29ya3NwYWNlLmlkLFxyXG4gICAgd29ya3NwYWNlTmFtZTogcHJvcHMud29ya3NwYWNlLm5hbWUsXHJcbiAgICBldmVudFNvdXJjZTogcHJvcHMuZXZlbnRTb3VyY2VcclxuICB9KVxyXG4gIGlmIChyZXM/LmlkKSB7XHJcbiAgICBlbWl0KCdtb3ZlLWNvbXBsZXRlJylcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHsgc2hvd1JlZ2lvblN0YXRpY0RhdGFEaXNjbGFpbWVyLCB0cmlnZ2VyQWN0aW9uIH0gPVxyXG4gIHVzZVdvcmtzcGFjZUN1c3RvbURhdGFSZXNpZGVuY3lEaXNjbGFpbWVyKHtcclxuICAgIHdvcmtzcGFjZTogY29tcHV0ZWQoKCkgPT4gcHJvcHMud29ya3NwYWNlKSxcclxuICAgIG9uQ29uZmlybUFjdGlvbjogaGFuZGxlQ29uZmlybVxyXG4gIH0pXHJcblxyXG5jb25zdCB7IHJlc3VsdDogZHJ5UnVuUmVzdWx0IH0gPSB1c2VRdWVyeShcclxuICBtb3ZlVG9Xb3Jrc3BhY2VEcnlSdW5RdWVyeSxcclxuICAoKSA9PiAoe1xyXG4gICAgcHJvamVjdElkOiBwcm9wcy5wcm9qZWN0LmlkLFxyXG4gICAgd29ya3NwYWNlSWQ6IHByb3BzLndvcmtzcGFjZS5pZCxcclxuICAgIGxpbWl0OiAyMFxyXG4gIH0pLFxyXG4gICgpID0+ICh7XHJcbiAgICBlbmFibGVkOiAhIXByb3BzLnByb2plY3QuaWQgJiYgISFwcm9wcy53b3Jrc3BhY2UuaWRcclxuICB9KVxyXG4pXHJcblxyXG5jb25zdCBkcnlSdW5SZXN1bHRNZW1iZXJzID0gY29tcHV0ZWQoXHJcbiAgKCkgPT4gZHJ5UnVuUmVzdWx0LnZhbHVlPy5wcm9qZWN0Lm1vdmVUb1dvcmtzcGFjZURyeVJ1bi5hZGRlZFRvV29ya3NwYWNlIHx8IFtdXHJcbilcclxuY29uc3QgZHJ5UnVuUmVzdWx0TWVtYmVyc0NvdW50ID0gY29tcHV0ZWQoXHJcbiAgKCkgPT4gZHJ5UnVuUmVzdWx0LnZhbHVlPy5wcm9qZWN0Lm1vdmVUb1dvcmtzcGFjZURyeVJ1bi5hZGRlZFRvV29ya3NwYWNlVG90YWxDb3VudFxyXG4pXHJcbmNvbnN0IGRyeVJ1blJlc3VsdE1lbWJlcnNJbmZvVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBpZiAoIWRyeVJ1blJlc3VsdE1lbWJlcnMudmFsdWUgfHwgIWRyeVJ1blJlc3VsdE1lbWJlcnNDb3VudC52YWx1ZSkgcmV0dXJuICcnXHJcblxyXG4gIGlmIChkcnlSdW5SZXN1bHRNZW1iZXJzLnZhbHVlPy5sZW5ndGggPiAyMCAmJiBkcnlSdW5SZXN1bHRNZW1iZXJzQ291bnQudmFsdWUgPiAyMCkge1xyXG4gICAgY29uc3QgZGlmZiA9IGRyeVJ1blJlc3VsdE1lbWJlcnNDb3VudC52YWx1ZSAtIGRyeVJ1blJlc3VsdE1lbWJlcnMudmFsdWUubGVuZ3RoXHJcbiAgICByZXR1cm4gYGFuZCAke2RpZmZ9IG1vcmVgXHJcbiAgfVxyXG5cclxuICByZXR1cm4gJydcclxufSlcclxuXHJcbmNvbnN0IHRyYW5zaXRpb25JdGVtcyA9IHtcclxuICBwcm9qZWN0OiB7XHJcbiAgICB0aXRsZTogJ1ZpZXdlciBzZWF0JyxcclxuICAgIGRlc2NyaXB0aW9uOiAnQ2FuIHZpZXcgYW5kIGNvbW1lbnQgb24gcHJvamVjdHMnXHJcbiAgfSxcclxuICB3b3Jrc3BhY2U6IHtcclxuICAgIHRpdGxlOiAnRWRpdG9yIHNlYXQnLFxyXG4gICAgZGVzY3JpcHRpb246ICdDYW4gdmlldyBhbmQgY29tbWVudCBvbiBwcm9qZWN0cydcclxuICB9XHJcbn0gYXMgY29uc3RcclxuXHJcbmRlZmluZUV4cG9zZSh7XHJcbiAgb25Db25maXJtOiB0cmlnZ2VyQWN0aW9uXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvQ29uZmlybS52dWUifQ==