import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/invite/dialog/shared/SelectUsers.vue");import { FormTextInput as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { default as __nuxt_component_1 } from "/_nuxt/components/form/select/WorkspaceSeatType.vue"; import { CommonTextLink as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { FormButton as __nuxt_component_3 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementBlock as __createElementBlock,createVNode as __createVNode,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 _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...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 { useForm, useFieldArray } from "/_nuxt/node_modules/.cache/vite/client/deps/vee-validate.js?v=e4f18c29"; import { PlusIcon, TrashIcon } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_outline.js?v=e4f18c29"; import { emptyInviteWorkspaceItem } from "/_nuxt/lib/invites/helpers/constants.ts"; import { isEmailOrEmpty } from "/_nuxt/lib/common/helpers/validation.ts"; import { Roles, SeatTypes } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js"; import { canHaveRole } from "/_nuxt/lib/invites/helpers/validation.ts"; import { parsePastedEmails } from "/_nuxt/lib/invites/helpers/helpers.ts"; import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts"; import { useWorkspacePlan } from "/_nuxt/lib/workspaces/composables/plan.ts"; import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "InviteDialogSharedSelectUsers", props: { workspace: { type: null, required: true }, invites: { type: Array, required: true }, allowedDomains: { type: null, required: true }, targetRole: { type: null, required: false } }, setup(__props, { expose: __expose }) { graphql(` fragment InviteDialogSharedSelectUsers_Workspace on Workspace { id slug defaultSeatType } `); const props = __props; const { handleSubmit } = useForm({ initialValues: { fields: [...props.invites] } }); const { fields, push: pushInvite, remove: removeInvite } = useFieldArray("fields"); const workspaceSlug = computed(() => props.workspace?.slug || ""); const { isPaidPlan, editorSeatPriceWithIntervalFormatted } = useWorkspacePlan(workspaceSlug); const infoText = computed(() => { if (!isPaidPlan.value) return ""; return `Viewer seats are free. You'll be charged ${editorSeatPriceWithIntervalFormatted.value} for each Editor seat when they accept. We'll use any unused Editor seats from your plan first.`; }); const addInviteItem = () => { pushInvite({ ...emptyInviteWorkspaceItem, seatType: props.workspace?.defaultSeatType || SeatTypes.Viewer, workspaceRole: props.targetRole || Roles.Workspace.Guest, projectRole: Roles.Stream.Reviewer }); }; const removeInviteItem = (index) => { removeInvite(index); }; const handlePaste = (event, index) => { const pastedText = event.clipboardData?.getData("text"); if (pastedText && /[\s,;]/.test(pastedText)) { event.preventDefault(); const validEmails = parsePastedEmails(pastedText); if (validEmails.length > 0) { fields.value[index].value.email = validEmails[0]; validEmails.shift(); if (validEmails.length > 0) { validEmails.forEach((email) => { pushInvite({ ...emptyInviteWorkspaceItem, email, workspaceRole: Roles.Workspace.Member, projectRole: Roles.Stream.Reviewer }); }); } } } }; const submitForm = handleSubmit(() => { const invites = fields.value.filter((invite) => invite.value.email).map((invite) => ({ ...invite.value })); return invites; }); __expose({ submitForm }); const __returned__ = { props, handleSubmit, fields, pushInvite, removeInvite, workspaceSlug, isPaidPlan, editorSeatPriceWithIntervalFormatted, infoText, addInviteItem, removeInviteItem, handlePaste, submitForm, get PlusIcon() { return PlusIcon; }, get TrashIcon() { return TrashIcon; }, get isEmailOrEmpty() { return isEmailOrEmpty; }, get canHaveRole() { return canHaveRole; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { renderSlot as _renderSlot, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, toDisplayString as _toDisplayString } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:2:3" }; const _hoisted_2 = { class: "flex flex-col gap-y-3 text-foreground mb-3", "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:4:5" }; const _hoisted_3 = { class: "flex flex-col gap-y-3 flex-1", "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:6:9" }; const _hoisted_4 = { class: "flex flex-row gap-x-3", "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:7:11" }; const _hoisted_5 = { class: "flex-1 flex gap-2", "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:8:13" }; const _hoisted_6 = { class: "relative w-4", "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:37:9" }; const _hoisted_7 = { "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:48:7" }; const _hoisted_8 = { class: "text-body-2xs text-foreground-2 leading-5", "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:54:5" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_FormTextInput = __nuxt_component_0; const _component_FormSelectWorkspaceSeatType = __nuxt_component_1; const _component_CommonTextLink = __nuxt_component_2; const _component_FormButton = __nuxt_component_3; return _openBlock(), _createElementBlock("form", _hoisted_1, [ _renderSlot(_ctx.$slots, "project"), _createElementVNode("div", _hoisted_2, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.fields, (item, index) => { return _openBlock(), _createElementBlock("div", { key: item.key, class: "flex gap-x-3", "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:5:7" }, [ _createElementVNode("div", _hoisted_3, [ _createElementVNode("div", _hoisted_4, [ _createElementVNode("div", _hoisted_5, [ _createVNode(_component_FormTextInput, { modelValue: item.value.email, "onUpdate:modelValue": ($event) => item.value.email = $event, name: `email-${item.key}`, color: "foundation", placeholder: "Email address", "show-clear": "", "full-width": "", "use-label-in-errors": "", "show-label": index === 0, label: "Email", rules: [ $setup.isEmailOrEmpty, $setup.canHaveRole({ allowedDomains: $setup.props.allowedDomains, workspaceRole: $props.targetRole }) ], onPaste: ($event) => $setup.handlePaste($event, index), "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:9:15" }, null, 8, ["modelValue", "onUpdate:modelValue", "name", "show-label", "rules", "onPaste"]), _createVNode(_component_FormSelectWorkspaceSeatType, { modelValue: item.value.seatType, "onUpdate:modelValue": ($event) => item.value.seatType = $event, "allow-unset": false, name: `seatType-${item.key}`, "show-label": index === 0, "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:28:15" }, null, 8, ["modelValue", "onUpdate:modelValue", "name", "show-label"]) ]) ]) ]), _createElementVNode("div", _hoisted_6, [ $setup.fields.length > 1 ? (_openBlock(), _createBlock(_component_CommonTextLink, { key: 0, class: _normalizeClass(["absolute right-0", { "top-7": index === 0 }]), onClick: ($event) => $setup.removeInviteItem(index), "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:38:11" }, { default: _withCtx(() => [ _createVNode($setup["TrashIcon"], { class: "h-4 w-4 text-foreground-2", "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:44:13" }) ]), _: 2 /* DYNAMIC */ }, 1032, ["class", "onClick"])) : _createCommentVNode("v-if", true) ]) ]); }), 128 /* KEYED_FRAGMENT */ )), _createElementVNode("div", _hoisted_7, [ _createVNode(_component_FormButton, { color: "subtle", "icon-left": $setup.PlusIcon, onClick: $setup.addInviteItem, "data-v-inspector": "components/invite/dialog/shared/SelectUsers.vue:49:9" }, { default: _withCtx(() => [..._cache[0] || (_cache[0] = [ _createTextVNode( " Add another user ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["icon-left"]) ]) ]), _createElementVNode( "p", _hoisted_8, _toDisplayString($setup.infoText), 1 /* TEXT */ ) ]); } _sfc_main.__hmrId = "9d4bc90b"; 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/invite/dialog/shared/SelectUsers.vue"]]); //# sourceMappingURL=data:application/json;base64,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U0FBSyxZQUFFLHdCQUFpQixLQUFLO0FBQUEsZ0JBQUcsb0JBQWlCO0FBQUE7a0NBRWxELE1BQXdIO0FBQUEsa0JBQXhILGFBQXdIO0FBQUEsb0JBQTdHLE9BQU07QUFBQSxvQkFBNEIsb0JBQWlCO0FBQUE7Ozs7Ozs7Ozs7O01BSXBFLG9CQUlNLE9BSk4sWUFJTTtBQUFBLFFBSEosYUFFYTtBQUFBLFVBRkQsT0FBTTtBQUFBLFVBQVUsYUFBVztBQUFBLFVBQVcsU0FBTztBQUFBLFVBQWUsb0JBQWlCO0FBQUE7NEJBQXVELE1BRWhKO0FBQUE7Y0FGZ0o7QUFBQSxjQUVoSjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0lBR0o7QUFBQSxNQUVJO0FBQUEsTUFGSjtBQUFBLE1BRUksaUJBREMsZUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJTZWxlY3RVc2Vycy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxmb3JtIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9kaWFsb2cvc2hhcmVkL1NlbGVjdFVzZXJzLnZ1ZToyOjNcIj5cclxuICAgIDxzbG90IG5hbWU9XCJwcm9qZWN0XCIgLz5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC15LTMgdGV4dC1mb3JlZ3JvdW5kIG1iLTNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL3NoYXJlZC9TZWxlY3RVc2Vycy52dWU6NDo1XCI+XHJcbiAgICAgIDxkaXYgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGZpZWxkc1wiIDprZXk9XCJpdGVtLmtleVwiIGNsYXNzPVwiZmxleCBnYXAteC0zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9zaGFyZWQvU2VsZWN0VXNlcnMudnVlOjU6N1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC15LTMgZmxleC0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9zaGFyZWQvU2VsZWN0VXNlcnMudnVlOjY6OVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLXgtM1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9kaWFsb2cvc2hhcmVkL1NlbGVjdFVzZXJzLnZ1ZTo3OjExXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgZmxleCBnYXAtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9kaWFsb2cvc2hhcmVkL1NlbGVjdFVzZXJzLnZ1ZTo4OjEzXCI+XHJcbiAgICAgICAgICAgICAgPEZvcm1UZXh0SW5wdXRcclxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpdGVtLnZhbHVlLmVtYWlsXCJcclxuICAgICAgICAgICAgICAgIDpuYW1lPVwiYGVtYWlsLSR7aXRlbS5rZXl9YFwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImZvdW5kYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbWFpbCBhZGRyZXNzXCJcclxuICAgICAgICAgICAgICAgIHNob3ctY2xlYXJcclxuICAgICAgICAgICAgICAgIGZ1bGwtd2lkdGhcclxuICAgICAgICAgICAgICAgIHVzZS1sYWJlbC1pbi1lcnJvcnNcclxuICAgICAgICAgICAgICAgIDpzaG93LWxhYmVsPVwiaW5kZXggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJFbWFpbFwiXHJcbiAgICAgICAgICAgICAgICA6cnVsZXM9XCJbXHJcbiAgICAgICAgICAgICAgICAgIGlzRW1haWxPckVtcHR5LFxyXG4gICAgICAgICAgICAgICAgICBjYW5IYXZlUm9sZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZERvbWFpbnM6IHByb3BzLmFsbG93ZWREb21haW5zLFxyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZVJvbGU6IHRhcmdldFJvbGVcclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIF1cIlxyXG4gICAgICAgICAgICAgICAgQHBhc3RlPVwiaGFuZGxlUGFzdGUoJGV2ZW50LCBpbmRleClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL3NoYXJlZC9TZWxlY3RVc2Vycy52dWU6OToxNVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8Rm9ybVNlbGVjdFdvcmtzcGFjZVNlYXRUeXBlXHJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaXRlbS52YWx1ZS5zZWF0VHlwZVwiXHJcbiAgICAgICAgICAgICAgICA6YWxsb3ctdW5zZXQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImBzZWF0VHlwZS0ke2l0ZW0ua2V5fWBcIlxyXG4gICAgICAgICAgICAgICAgOnNob3ctbGFiZWw9XCJpbmRleCA9PT0gMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9kaWFsb2cvc2hhcmVkL1NlbGVjdFVzZXJzLnZ1ZToyODoxNVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy00XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9zaGFyZWQvU2VsZWN0VXNlcnMudnVlOjM3OjlcIj5cclxuICAgICAgICAgIDxDb21tb25UZXh0TGlua1xyXG4gICAgICAgICAgICB2LWlmPVwiZmllbGRzLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHJpZ2h0LTBcIlxyXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7ICd0b3AtNyc6IGluZGV4ID09PSAwIH1cIlxyXG4gICAgICAgICAgICBAY2xpY2s9XCJyZW1vdmVJbnZpdGVJdGVtKGluZGV4KVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9kaWFsb2cvc2hhcmVkL1NlbGVjdFVzZXJzLnZ1ZTozODoxMVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxUcmFzaEljb24gY2xhc3M9XCJoLTQgdy00IHRleHQtZm9yZWdyb3VuZC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9zaGFyZWQvU2VsZWN0VXNlcnMudnVlOjQ0OjEzXCIgLz5cclxuICAgICAgICAgIDwvQ29tbW9uVGV4dExpbms+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9kaWFsb2cvc2hhcmVkL1NlbGVjdFVzZXJzLnZ1ZTo0ODo3XCI+XHJcbiAgICAgICAgPEZvcm1CdXR0b24gY29sb3I9XCJzdWJ0bGVcIiA6aWNvbi1sZWZ0PVwiUGx1c0ljb25cIiBAY2xpY2s9XCJhZGRJbnZpdGVJdGVtXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9zaGFyZWQvU2VsZWN0VXNlcnMudnVlOjQ5OjlcIj5cclxuICAgICAgICAgIEFkZCBhbm90aGVyIHVzZXJcclxuICAgICAgICA8L0Zvcm1CdXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8cCBjbGFzcz1cInRleHQtYm9keS0yeHMgdGV4dC1mb3JlZ3JvdW5kLTIgbGVhZGluZy01XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9zaGFyZWQvU2VsZWN0VXNlcnMudnVlOjU0OjVcIj5cclxuICAgICAge3sgaW5mb1RleHQgfX1cclxuICAgIDwvcD5cclxuICA8L2Zvcm0+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHVzZUZvcm0sIHVzZUZpZWxkQXJyYXkgfSBmcm9tICd2ZWUtdmFsaWRhdGUnXHJcbmltcG9ydCB7IFBsdXNJY29uLCBUcmFzaEljb24gfSBmcm9tICdAaGVyb2ljb25zL3Z1ZS8yNC9vdXRsaW5lJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgSW52aXRlV29ya3NwYWNlRm9ybSxcclxuICBJbnZpdGVXb3Jrc3BhY2VJdGVtXHJcbn0gZnJvbSAnfn4vbGliL2ludml0ZXMvaGVscGVycy90eXBlcydcclxuaW1wb3J0IHsgZW1wdHlJbnZpdGVXb3Jrc3BhY2VJdGVtIH0gZnJvbSAnfn4vbGliL2ludml0ZXMvaGVscGVycy9jb25zdGFudHMnXHJcbmltcG9ydCB7IGlzRW1haWxPckVtcHR5IH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3ZhbGlkYXRpb24nXHJcbmltcG9ydCB7XHJcbiAgUm9sZXMsXHJcbiAgdHlwZSBXb3Jrc3BhY2VSb2xlcyxcclxuICB0eXBlIE1heWJlTnVsbE9yVW5kZWZpbmVkLFxyXG4gIFNlYXRUeXBlc1xyXG59IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgY2FuSGF2ZVJvbGUgfSBmcm9tICd+L2xpYi9pbnZpdGVzL2hlbHBlcnMvdmFsaWRhdGlvbidcclxuaW1wb3J0IHsgcGFyc2VQYXN0ZWRFbWFpbHMgfSBmcm9tICd+L2xpYi9pbnZpdGVzL2hlbHBlcnMvaGVscGVycydcclxuaW1wb3J0IHsgZ3JhcGhxbCB9IGZyb20gJ34vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsJ1xyXG5pbXBvcnQgdHlwZSB7IEludml0ZURpYWxvZ1NoYXJlZFNlbGVjdFVzZXJzX1dvcmtzcGFjZUZyYWdtZW50IH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuaW1wb3J0IHsgdXNlV29ya3NwYWNlUGxhbiB9IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvY29tcG9zYWJsZXMvcGxhbidcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IEludml0ZURpYWxvZ1NoYXJlZFNlbGVjdFVzZXJzX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xyXG4gICAgaWRcclxuICAgIHNsdWdcclxuICAgIGRlZmF1bHRTZWF0VHlwZVxyXG4gIH1cclxuYClcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIHdvcmtzcGFjZTogTWF5YmVOdWxsT3JVbmRlZmluZWQ8SW52aXRlRGlhbG9nU2hhcmVkU2VsZWN0VXNlcnNfV29ya3NwYWNlRnJhZ21lbnQ+XHJcbiAgaW52aXRlczogSW52aXRlV29ya3NwYWNlSXRlbVtdXHJcbiAgYWxsb3dlZERvbWFpbnM6IE1heWJlTnVsbE9yVW5kZWZpbmVkPHN0cmluZ1tdPlxyXG4gIHRhcmdldFJvbGU/OiBXb3Jrc3BhY2VSb2xlc1xyXG59PigpXHJcblxyXG5jb25zdCB7IGhhbmRsZVN1Ym1pdCB9ID0gdXNlRm9ybTxJbnZpdGVXb3Jrc3BhY2VGb3JtPih7XHJcbiAgaW5pdGlhbFZhbHVlczoge1xyXG4gICAgZmllbGRzOiBbLi4ucHJvcHMuaW52aXRlc11cclxuICB9XHJcbn0pXHJcbmNvbnN0IHtcclxuICBmaWVsZHMsXHJcbiAgcHVzaDogcHVzaEludml0ZSxcclxuICByZW1vdmU6IHJlbW92ZUludml0ZVxyXG59ID0gdXNlRmllbGRBcnJheTxJbnZpdGVXb3Jrc3BhY2VJdGVtPignZmllbGRzJylcclxuXHJcbmNvbnN0IHdvcmtzcGFjZVNsdWcgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy53b3Jrc3BhY2U/LnNsdWcgfHwgJycpXHJcbmNvbnN0IHsgaXNQYWlkUGxhbiwgZWRpdG9yU2VhdFByaWNlV2l0aEludGVydmFsRm9ybWF0dGVkIH0gPVxyXG4gIHVzZVdvcmtzcGFjZVBsYW4od29ya3NwYWNlU2x1ZylcclxuXHJcbmNvbnN0IGluZm9UZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGlmICghaXNQYWlkUGxhbi52YWx1ZSkgcmV0dXJuICcnXHJcbiAgcmV0dXJuIGBWaWV3ZXIgc2VhdHMgYXJlIGZyZWUuIFlvdSdsbCBiZSBjaGFyZ2VkICR7ZWRpdG9yU2VhdFByaWNlV2l0aEludGVydmFsRm9ybWF0dGVkLnZhbHVlfSBmb3IgZWFjaCBFZGl0b3Igc2VhdCB3aGVuIHRoZXkgYWNjZXB0LiBXZSdsbCB1c2UgYW55IHVudXNlZCBFZGl0b3Igc2VhdHMgZnJvbSB5b3VyIHBsYW4gZmlyc3QuYFxyXG59KVxyXG5cclxuY29uc3QgYWRkSW52aXRlSXRlbSA9ICgpID0+IHtcclxuICBwdXNoSW52aXRlKHtcclxuICAgIC4uLmVtcHR5SW52aXRlV29ya3NwYWNlSXRlbSxcclxuICAgIHNlYXRUeXBlOiBwcm9wcy53b3Jrc3BhY2U/LmRlZmF1bHRTZWF0VHlwZSB8fCBTZWF0VHlwZXMuVmlld2VyLFxyXG4gICAgd29ya3NwYWNlUm9sZTogcHJvcHMudGFyZ2V0Um9sZSB8fCBSb2xlcy5Xb3Jrc3BhY2UuR3Vlc3QsXHJcbiAgICBwcm9qZWN0Um9sZTogUm9sZXMuU3RyZWFtLlJldmlld2VyXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgcmVtb3ZlSW52aXRlSXRlbSA9IChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgcmVtb3ZlSW52aXRlKGluZGV4KVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGVQYXN0ZSA9IChldmVudDogQ2xpcGJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICBjb25zdCBwYXN0ZWRUZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpXHJcblxyXG4gIGlmIChwYXN0ZWRUZXh0ICYmIC9bXFxzLDtdLy50ZXN0KHBhc3RlZFRleHQpKSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICBjb25zdCB2YWxpZEVtYWlscyA9IHBhcnNlUGFzdGVkRW1haWxzKHBhc3RlZFRleHQpXHJcblxyXG4gICAgaWYgKHZhbGlkRW1haWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZmllbGRzLnZhbHVlW2luZGV4XS52YWx1ZS5lbWFpbCA9IHZhbGlkRW1haWxzWzBdXHJcbiAgICAgIHZhbGlkRW1haWxzLnNoaWZ0KClcclxuXHJcbiAgICAgIGlmICh2YWxpZEVtYWlscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdmFsaWRFbWFpbHMuZm9yRWFjaCgoZW1haWwpID0+IHtcclxuICAgICAgICAgIHB1c2hJbnZpdGUoe1xyXG4gICAgICAgICAgICAuLi5lbXB0eUludml0ZVdvcmtzcGFjZUl0ZW0sXHJcbiAgICAgICAgICAgIGVtYWlsLFxyXG4gICAgICAgICAgICB3b3Jrc3BhY2VSb2xlOiBSb2xlcy5Xb3Jrc3BhY2UuTWVtYmVyLFxyXG4gICAgICAgICAgICBwcm9qZWN0Um9sZTogUm9sZXMuU3RyZWFtLlJldmlld2VyXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHN1Ym1pdEZvcm0gPSBoYW5kbGVTdWJtaXQoKCkgPT4ge1xyXG4gIGNvbnN0IGludml0ZXMgPSBmaWVsZHMudmFsdWVcclxuICAgIC5maWx0ZXIoKGludml0ZSkgPT4gaW52aXRlLnZhbHVlLmVtYWlsKVxyXG4gICAgLm1hcCgoaW52aXRlKSA9PiAoeyAuLi5pbnZpdGUudmFsdWUgfSkpXHJcblxyXG4gIHJldHVybiBpbnZpdGVzXHJcbn0pXHJcblxyXG5kZWZpbmVFeHBvc2Uoe1xyXG4gIHN1Ym1pdEZvcm1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL2ludml0ZS9kaWFsb2cvc2hhcmVkL1NlbGVjdFVzZXJzLnZ1ZSJ9