import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/workspace/moveProject/SelectProject.vue");import { FormButton as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { InfiniteLoading 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/workspace/plan/ProjectModelLimitReachedDialog.vue"; /* Injection by vite-plugin-vue-inspector Start */ import { createVNode as __createVNode,createElementBlock as __createElementBlock,createElementVNode as __createElementVNode,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 _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createBlock(...args) { return _interopVNode(__createBlock(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { useModel as _useModel, mergeModels as _mergeModels, defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { CommonLoadingIcon, FormTextInput, useDebouncedTextInput } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { usePaginatedQuery } from "/_nuxt/lib/common/composables/graphql.ts"; import { workspaceMoveProjectManagerUserQuery } from "/_nuxt/lib/workspaces/graphql/queries.ts"; import { ProjectNotEnoughPermissionsError, WorkspaceLimitsReachedError } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/authz/index.js"; import { computed, ref } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "WorkspaceMoveProjectSelectProject", props: /* @__PURE__ */ _mergeModels({ workspace: { type: Object, required: false }, projectPermissions: { type: Object, required: false }, workspaceId: { type: String, required: false } }, { "search": { type: String }, "searchModifiers": {} }), emits: /* @__PURE__ */ _mergeModels(["project-selected"], ["update:search"]), setup(__props, { expose: __expose, emit: __emit }) { __expose(); const search = _useModel(__props, "search"); const { on, bind } = useDebouncedTextInput({ model: search }); const emit = __emit; const props = __props; const { query: { result, loading }, identifier, onInfiniteLoad } = usePaginatedQuery({ query: workspaceMoveProjectManagerUserQuery, baseVariables: computed(() => ({ cursor: null, sortBy: "role", filter: { search: search.value?.length ? search.value : null, personalOnly: true }, workspaceId: props.workspaceId || "" })), resolveKey: (vars) => [vars.filter?.search || ""], resolveCurrentResult: (res) => res?.activeUser?.projects, resolveNextPageVariables: (baseVars, cursor) => ({ ...baseVars, cursor }), resolveCursorFromVariables: (vars) => vars.cursor }); const showLimitDialog = ref(false); const userProjects = computed(() => result.value?.activeUser?.projects.items || []); const moveableProjects = computed(() => userProjects.value); const hasMoveableProjects = computed(() => moveableProjects.value.length > 0); const isProjectDisabled = computed( () => (project) => { if (project.permissions.canMoveToWorkspace.authorized || project.permissions.canMoveToWorkspace.code === WorkspaceLimitsReachedError.code) { return false; } return true; } ); const getProjectTooltip = computed( () => (project) => { if (project.permissions.canMoveToWorkspace.authorized || project.permissions.canMoveToWorkspace.code === WorkspaceLimitsReachedError.code) { return void 0; } if (project.permissions.canMoveToWorkspace.code === ProjectNotEnoughPermissionsError.code) { return "Only the project owner can move this project"; } return project.permissions.canMoveToWorkspace.message; } ); const handleProjectClick = (project) => { const permission = project.permissions?.canMoveToWorkspace; if (permission?.code === WorkspaceLimitsReachedError.code) { showLimitDialog.value = true; return; } if (permission?.authorized) { emit("project-selected", project); } }; const showLoading = computed(() => loading.value && userProjects.value.length === 0); const __returned__ = { search, on, bind, emit, props, result, loading, identifier, onInfiniteLoad, showLimitDialog, userProjects, moveableProjects, hasMoveableProjects, isProjectDisabled, getProjectTooltip, handleProjectClick, showLoading, get CommonLoadingIcon() { return CommonLoadingIcon; }, get FormTextInput() { return FormTextInput; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { toHandlers as _toHandlers, mergeProps as _mergeProps, openBlock as _openBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, resolveDirective as _resolveDirective, withDirectives as _withDirectives, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:2:3" }; const _hoisted_2 = { key: 0, class: "py-4 flex items-center justify-center w-full h-32", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:14:5" }; const _hoisted_3 = { key: 0, class: "flex flex-col mt-2 border rounded-md border-outline-3", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:18:7" }; const _hoisted_4 = { class: "flex flex-col flex-1 truncate text-body-xs", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:27:11" }; const _hoisted_5 = { class: "font-medium text-foreground truncate", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:28:13" }; const _hoisted_6 = { class: "flex items-center gap-x-1", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:31:13" }; const _hoisted_7 = { class: "text-foreground-3 truncate", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:32:15" }; const _hoisted_8 = { key: 1, class: "py-4 text-body-xs text-foreground-2", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:54:7" }; const _hoisted_9 = { key: 2, class: "py-4 text-body-xs text-foreground-2", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:58:7" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_FormButton = __nuxt_component_0; const _component_InfiniteLoading = __nuxt_component_1; const _component_WorkspacePlanProjectModelLimitReachedDialog = __nuxt_component_2; const _directive_tippy = _resolveDirective("tippy"); return _openBlock(), _createElementBlock("div", _hoisted_1, [ _createVNode( $setup["FormTextInput"], _mergeProps($setup.bind, { label: "Move projects", name: "search", color: "foundation", placeholder: "Search projects...", "show-clear": "", "full-width": "", class: "mb-2" }, _toHandlers($setup.on), { "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:3:5" }), null, 16 /* FULL_PROPS */ ), $setup.showLoading ? (_openBlock(), _createElementBlock("div", _hoisted_2, [ _createVNode($setup["CommonLoadingIcon"], { size: "sm", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:15:7" }) ])) : (_openBlock(), _createElementBlock( _Fragment, { key: 1 }, [ $setup.hasMoveableProjects ? (_openBlock(), _createElementBlock("div", _hoisted_3, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.moveableProjects, (project) => { return _openBlock(), _createElementBlock("div", { key: project.id, class: "flex px-4 py-3 items-center space-x-2 justify-between border-b last:border-0 border-outline-3", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:22:9" }, [ _createElementVNode("div", _hoisted_4, [ _createElementVNode( "span", _hoisted_5, _toDisplayString(project.name), 1 /* TEXT */ ), _createElementVNode("div", _hoisted_6, [ _createElementVNode( "span", _hoisted_7, _toDisplayString(project.modelCount.totalCount) + " model" + _toDisplayString(project.modelCount.totalCount !== 1 ? "s" : ""), 1 /* TEXT */ ) ]) ]), _withDirectives((_openBlock(), _createElementBlock("div", { key: `${project.id}-${project.permissions.canMoveToWorkspace.code}`, "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:39:11" }, [ _createVNode(_component_FormButton, { size: "sm", color: "outline", disabled: $setup.isProjectDisabled(project), onClick: ($event) => $setup.handleProjectClick(project), "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:43:13" }, { default: _withCtx(() => [..._cache[1] || (_cache[1] = [ _createTextVNode( " Move... ", -1 /* CACHED */ ) ])]), _: 2 /* DYNAMIC */ }, 1032, ["disabled", "onClick"]) ])), [ [_directive_tippy, $setup.getProjectTooltip(project)] ]) ]); }), 128 /* KEYED_FRAGMENT */ )) ])) : !$setup.search?.length ? (_openBlock(), _createElementBlock("p", _hoisted_8, " You don't have any projects that can be moved into this workspace. Only projects you own and that aren't in another workspace can be moved. ")) : (_openBlock(), _createElementBlock("p", _hoisted_9, " No projects match your search. ")) ], 64 /* STABLE_FRAGMENT */ )), !$setup.search?.length ? (_openBlock(), _createBlock(_component_InfiniteLoading, { key: 2, settings: { identifier: $setup.identifier }, onInfinite: $setup.onInfiniteLoad, "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:62:5" }, null, 8, ["settings", "onInfinite"])) : _createCommentVNode("v-if", true), _createVNode(_component_WorkspacePlanProjectModelLimitReachedDialog, { open: $setup.showLimitDialog, "onUpdate:open": _cache[0] || (_cache[0] = ($event) => $setup.showLimitDialog = $event), "workspace-name": $props.workspace?.name, plan: $props.workspace?.plan?.name, "workspace-role": $props.workspace?.role, "workspace-slug": $props.workspace?.slug || "", location: "move_project_dialog", "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:67:5" }, null, 8, ["open", "workspace-name", "plan", "workspace-role", "workspace-slug"]) ]); } _sfc_main.__hmrId = "c503121f"; 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/SelectProject.vue"]]); //# sourceMappingURL=data:application/json;base64,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QUFFLElBQUksUUFBUSxZQUFZLG1CQUFtQixJQUFJO0FBQUEsa0JBQzdCLG9CQUFpQjtBQUFBO2tCQUV0RCxhQU9hO0FBQUEsb0JBTlgsTUFBSztBQUFBLG9CQUNMLE9BQU07QUFBQSxvQkFDTCxVQUFVLHlCQUFrQixPQUFPO0FBQUEsb0JBQ25DLFNBQUssWUFBRSwwQkFBbUIsT0FBTztBQUFBLG9CQUFHLG9CQUFpQjtBQUFBO3NDQUN2RCxNQUVEO0FBQUE7d0JBRkM7QUFBQSx3QkFFRDtBQUFBO0FBQUE7QUFBQTs7Ozs7cUNBVFMseUJBQWtCLE9BQU87QUFBQTs7Ozs7O2VBYXpCLGVBQVEsd0JBQXZCLG9CQUdJLEtBSEosWUFBc0osK0lBR3RKLG9CQUNBLG9CQUVJLEtBRkosWUFBaUksa0NBRWpJO0FBQUE7Ozs7S0FHTyxlQUFRLHdCQURqQixhQUlFO0FBQUE7TUFGQyxVQUFRLGNBQUksa0JBQVU7QUFBQSxNQUN0QixZQUFVO0FBQUEsTUFBZ0Isb0JBQWlCO0FBQUE7SUFFOUMsYUFPRTtBQUFBLE1BTlEsTUFBTTtBQUFBLHNGQUFlO0FBQUEsTUFDNUIsa0JBQWdCLGtCQUFXO0FBQUEsTUFDM0IsTUFBTSxrQkFBVyxNQUFNO0FBQUEsTUFDdkIsa0JBQWdCLGtCQUFXO0FBQUEsTUFDM0Isa0JBQWdCLGtCQUFXLFFBQUk7QUFBQSxNQUNoQyxVQUFTO0FBQUEsTUFBc0Isb0JBQWlCO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIlNlbGVjdFByb2plY3QudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9TZWxlY3RQcm9qZWN0LnZ1ZToyOjNcIj5cclxuICAgIDxGb3JtVGV4dElucHV0XHJcbiAgICAgIHYtYmluZD1cImJpbmRcIlxyXG4gICAgICBsYWJlbD1cIk1vdmUgcHJvamVjdHNcIlxyXG4gICAgICBuYW1lPVwic2VhcmNoXCJcclxuICAgICAgY29sb3I9XCJmb3VuZGF0aW9uXCJcclxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggcHJvamVjdHMuLi5cIlxyXG4gICAgICBzaG93LWNsZWFyXHJcbiAgICAgIGZ1bGwtd2lkdGhcclxuICAgICAgY2xhc3M9XCJtYi0yXCJcclxuICAgICAgdi1vbj1cIm9uXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjM6NVwiXHJcbiAgICAvPlxyXG4gICAgPGRpdiB2LWlmPVwic2hvd0xvYWRpbmdcIiBjbGFzcz1cInB5LTQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1mdWxsIGgtMzJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWU6MTQ6NVwiPlxyXG4gICAgICA8Q29tbW9uTG9hZGluZ0ljb24gc2l6ZT1cInNtXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjE1OjdcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgdi1pZj1cImhhc01vdmVhYmxlUHJvamVjdHNcIlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBtdC0yIGJvcmRlciByb3VuZGVkLW1kIGJvcmRlci1vdXRsaW5lLTNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWU6MTg6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICB2LWZvcj1cInByb2plY3QgaW4gbW92ZWFibGVQcm9qZWN0c1wiXHJcbiAgICAgICAgICA6a2V5PVwicHJvamVjdC5pZFwiXHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggcHgtNCBweS0zIGl0ZW1zLWNlbnRlciBzcGFjZS14LTIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGxhc3Q6Ym9yZGVyLTAgYm9yZGVyLW91dGxpbmUtM1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9TZWxlY3RQcm9qZWN0LnZ1ZToyMjo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgdHJ1bmNhdGUgdGV4dC1ib2R5LXhzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjI3OjExXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHRydW5jYXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjI4OjEzXCI+XHJcbiAgICAgICAgICAgICAge3sgcHJvamVjdC5uYW1lIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWU6MzE6MTNcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZm9yZWdyb3VuZC0zIHRydW5jYXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjMyOjE1XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBwcm9qZWN0Lm1vZGVsQ291bnQudG90YWxDb3VudCB9fSBtb2RlbHt7XHJcbiAgICAgICAgICAgICAgICAgIHByb2plY3QubW9kZWxDb3VudC50b3RhbENvdW50ICE9PSAxID8gJ3MnIDogJydcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICA6a2V5PVwiYCR7cHJvamVjdC5pZH0tJHtwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5jb2RlfWBcIlxyXG4gICAgICAgICAgICB2LXRpcHB5PVwiZ2V0UHJvamVjdFRvb2x0aXAocHJvamVjdClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWU6Mzk6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc1Byb2plY3REaXNhYmxlZChwcm9qZWN0KVwiXHJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaGFuZGxlUHJvamVjdENsaWNrKHByb2plY3QpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjQzOjEzXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIE1vdmUuLi5cclxuICAgICAgICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8cCB2LWVsc2UtaWY9XCIhc2VhcmNoPy5sZW5ndGhcIiBjbGFzcz1cInB5LTQgdGV4dC1ib2R5LXhzIHRleHQtZm9yZWdyb3VuZC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjU0OjdcIj5cclxuICAgICAgICBZb3UgZG9uJ3QgaGF2ZSBhbnkgcHJvamVjdHMgdGhhdCBjYW4gYmUgbW92ZWQgaW50byB0aGlzIHdvcmtzcGFjZS4gT25seSBwcm9qZWN0c1xyXG4gICAgICAgIHlvdSBvd24gYW5kIHRoYXQgYXJlbid0IGluIGFub3RoZXIgd29ya3NwYWNlIGNhbiBiZSBtb3ZlZC5cclxuICAgICAgPC9wPlxyXG4gICAgICA8cCB2LWVsc2UgY2xhc3M9XCJweS00IHRleHQtYm9keS14cyB0ZXh0LWZvcmVncm91bmQtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9TZWxlY3RQcm9qZWN0LnZ1ZTo1ODo3XCI+XHJcbiAgICAgICAgTm8gcHJvamVjdHMgbWF0Y2ggeW91ciBzZWFyY2guXHJcbiAgICAgIDwvcD5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8SW5maW5pdGVMb2FkaW5nXHJcbiAgICAgIHYtaWY9XCIhc2VhcmNoPy5sZW5ndGhcIlxyXG4gICAgICA6c2V0dGluZ3M9XCJ7IGlkZW50aWZpZXIgfVwiXHJcbiAgICAgIEBpbmZpbml0ZT1cIm9uSW5maW5pdGVMb2FkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjYyOjVcIlxyXG4gICAgLz5cclxuICAgIDxXb3Jrc3BhY2VQbGFuUHJvamVjdE1vZGVsTGltaXRSZWFjaGVkRGlhbG9nXHJcbiAgICAgIHYtbW9kZWw6b3Blbj1cInNob3dMaW1pdERpYWxvZ1wiXHJcbiAgICAgIDp3b3Jrc3BhY2UtbmFtZT1cIndvcmtzcGFjZT8ubmFtZVwiXHJcbiAgICAgIDpwbGFuPVwid29ya3NwYWNlPy5wbGFuPy5uYW1lXCJcclxuICAgICAgOndvcmtzcGFjZS1yb2xlPVwid29ya3NwYWNlPy5yb2xlXCJcclxuICAgICAgOndvcmtzcGFjZS1zbHVnPVwid29ya3NwYWNlPy5zbHVnIHx8ICcnXCJcclxuICAgICAgbG9jYXRpb249XCJtb3ZlX3Byb2plY3RfZGlhbG9nXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjY3OjVcIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7XHJcbiAgQ29tbW9uTG9hZGluZ0ljb24sXHJcbiAgRm9ybVRleHRJbnB1dCxcclxuICB1c2VEZWJvdW5jZWRUZXh0SW5wdXRcclxufSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgUGVybWlzc2lvbkNoZWNrUmVzdWx0LFxyXG4gIFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0RnJhZ21lbnQsXHJcbiAgV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZUZyYWdtZW50XHJcbn0gZnJvbSAnfn4vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZVBhZ2luYXRlZFF1ZXJ5IH0gZnJvbSAnfi9saWIvY29tbW9uL2NvbXBvc2FibGVzL2dyYXBocWwnXHJcbmltcG9ydCB7IHdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlclVzZXJRdWVyeSB9IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvZ3JhcGhxbC9xdWVyaWVzJ1xyXG5pbXBvcnQge1xyXG4gIFByb2plY3ROb3RFbm91Z2hQZXJtaXNzaW9uc0Vycm9yLFxyXG4gIFdvcmtzcGFjZUxpbWl0c1JlYWNoZWRFcnJvclxyXG59IGZyb20gJ0BzcGVja2xlL3NoYXJlZC9hdXRoeidcclxuXHJcbmNvbnN0IHNlYXJjaCA9IGRlZmluZU1vZGVsPHN0cmluZz4oJ3NlYXJjaCcpXHJcbmNvbnN0IHsgb24sIGJpbmQgfSA9IHVzZURlYm91bmNlZFRleHRJbnB1dCh7IG1vZGVsOiBzZWFyY2ggfSlcclxuXHJcbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czx7XHJcbiAgKGU6ICdwcm9qZWN0LXNlbGVjdGVkJywgcHJvamVjdDogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCk6IHZvaWRcclxufT4oKVxyXG5cclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczx7XHJcbiAgd29ya3NwYWNlPzogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZUZyYWdtZW50XHJcbiAgcHJvamVjdFBlcm1pc3Npb25zPzogUGVybWlzc2lvbkNoZWNrUmVzdWx0XHJcbiAgd29ya3NwYWNlSWQ/OiBzdHJpbmdcclxufT4oKVxyXG5cclxuY29uc3Qge1xyXG4gIHF1ZXJ5OiB7IHJlc3VsdCwgbG9hZGluZyB9LFxyXG4gIGlkZW50aWZpZXIsXHJcbiAgb25JbmZpbml0ZUxvYWRcclxufSA9IHVzZVBhZ2luYXRlZFF1ZXJ5KHtcclxuICBxdWVyeTogd29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyVXNlclF1ZXJ5LFxyXG4gIGJhc2VWYXJpYWJsZXM6IGNvbXB1dGVkKCgpID0+ICh7XHJcbiAgICBjdXJzb3I6IG51bGwgYXMgc3RyaW5nIHwgbnVsbCxcclxuICAgIHNvcnRCeTogJ3JvbGUnLFxyXG4gICAgZmlsdGVyOiB7XHJcbiAgICAgIHNlYXJjaDogc2VhcmNoLnZhbHVlPy5sZW5ndGggPyBzZWFyY2gudmFsdWUgOiBudWxsLFxyXG4gICAgICBwZXJzb25hbE9ubHk6IHRydWVcclxuICAgIH0sXHJcbiAgICB3b3Jrc3BhY2VJZDogcHJvcHMud29ya3NwYWNlSWQgfHwgJydcclxuICB9KSksXHJcbiAgcmVzb2x2ZUtleTogKHZhcnMpID0+IFt2YXJzLmZpbHRlcj8uc2VhcmNoIHx8ICcnXSxcclxuICByZXNvbHZlQ3VycmVudFJlc3VsdDogKHJlcykgPT4gcmVzPy5hY3RpdmVVc2VyPy5wcm9qZWN0cyxcclxuICByZXNvbHZlTmV4dFBhZ2VWYXJpYWJsZXM6IChiYXNlVmFycywgY3Vyc29yKSA9PiAoe1xyXG4gICAgLi4uYmFzZVZhcnMsXHJcbiAgICBjdXJzb3JcclxuICB9KSxcclxuICByZXNvbHZlQ3Vyc29yRnJvbVZhcmlhYmxlczogKHZhcnMpID0+IHZhcnMuY3Vyc29yXHJcbn0pXHJcblxyXG5jb25zdCBzaG93TGltaXREaWFsb2cgPSByZWYoZmFsc2UpXHJcblxyXG5jb25zdCB1c2VyUHJvamVjdHMgPSBjb21wdXRlZCgoKSA9PiByZXN1bHQudmFsdWU/LmFjdGl2ZVVzZXI/LnByb2plY3RzLml0ZW1zIHx8IFtdKVxyXG5jb25zdCBtb3ZlYWJsZVByb2plY3RzID0gY29tcHV0ZWQoKCkgPT4gdXNlclByb2plY3RzLnZhbHVlKVxyXG5jb25zdCBoYXNNb3ZlYWJsZVByb2plY3RzID0gY29tcHV0ZWQoKCkgPT4gbW92ZWFibGVQcm9qZWN0cy52YWx1ZS5sZW5ndGggPiAwKVxyXG5cclxuY29uc3QgaXNQcm9qZWN0RGlzYWJsZWQgPSBjb21wdXRlZChcclxuICAoKSA9PiAocHJvamVjdDogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCkgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICBwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5hdXRob3JpemVkIHx8XHJcbiAgICAgIHByb2plY3QucGVybWlzc2lvbnMuY2FuTW92ZVRvV29ya3NwYWNlLmNvZGUgPT09IFdvcmtzcGFjZUxpbWl0c1JlYWNoZWRFcnJvci5jb2RlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuKVxyXG5cclxuY29uc3QgZ2V0UHJvamVjdFRvb2x0aXAgPSBjb21wdXRlZChcclxuICAoKSA9PiAocHJvamVjdDogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCkgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICBwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5hdXRob3JpemVkIHx8XHJcbiAgICAgIHByb2plY3QucGVybWlzc2lvbnMuY2FuTW92ZVRvV29ya3NwYWNlLmNvZGUgPT09IFdvcmtzcGFjZUxpbWl0c1JlYWNoZWRFcnJvci5jb2RlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5jb2RlID09PVxyXG4gICAgICBQcm9qZWN0Tm90RW5vdWdoUGVybWlzc2lvbnNFcnJvci5jb2RlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuICdPbmx5IHRoZSBwcm9qZWN0IG93bmVyIGNhbiBtb3ZlIHRoaXMgcHJvamVjdCdcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5tZXNzYWdlXHJcbiAgfVxyXG4pXHJcblxyXG5jb25zdCBoYW5kbGVQcm9qZWN0Q2xpY2sgPSAocHJvamVjdDogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCkgPT4ge1xyXG4gIGNvbnN0IHBlcm1pc3Npb24gPSBwcm9qZWN0LnBlcm1pc3Npb25zPy5jYW5Nb3ZlVG9Xb3Jrc3BhY2VcclxuICBpZiAocGVybWlzc2lvbj8uY29kZSA9PT0gV29ya3NwYWNlTGltaXRzUmVhY2hlZEVycm9yLmNvZGUpIHtcclxuICAgIHNob3dMaW1pdERpYWxvZy52YWx1ZSA9IHRydWVcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgaWYgKHBlcm1pc3Npb24/LmF1dGhvcml6ZWQpIHtcclxuICAgIGVtaXQoJ3Byb2plY3Qtc2VsZWN0ZWQnLCBwcm9qZWN0KVxyXG4gIH1cclxufVxyXG5cclxuY29uc3Qgc2hvd0xvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiBsb2FkaW5nLnZhbHVlICYmIHVzZXJQcm9qZWN0cy52YWx1ZS5sZW5ndGggPT09IDApXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWUifQ==