173 lines
17 KiB
Plaintext
173 lines
17 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/limits/WorkspaceDialog.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/workspace/plan/LimitReachedDialog.vue";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { 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 _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 { Roles } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
|
|
import { settingsWorkspaceRoutes } from "/_nuxt/lib/common/helpers/route.ts";
|
|
import { useEmbed } from "/_nuxt/lib/viewer/composables/setup/embed.ts";
|
|
import { useWorkspaceLimits } from "/_nuxt/lib/workspaces/composables/limits.ts";
|
|
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
|
|
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
|
|
import { useLoadLatestVersion } from "/_nuxt/lib/viewer/composables/resources.ts";
|
|
|
|
import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { navigateTo } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "ViewerLimitsWorkspaceDialog",
|
|
props: /* @__PURE__ */ _mergeModels({
|
|
limitType: { type: null, required: true },
|
|
project: { type: Object, required: true },
|
|
resourceIdString: { type: String, required: true }
|
|
}, {
|
|
"open": { type: Boolean, ...{
|
|
required: true
|
|
} },
|
|
"openModifiers": {}
|
|
}),
|
|
emits: ["update:open"],
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
graphql(`
|
|
fragment ViewerLimitsWorkspaceDialog_Project on Project {
|
|
id
|
|
workspace {
|
|
id
|
|
role
|
|
slug
|
|
...WorkspacePlanLimits_Workspace
|
|
}
|
|
...UseLoadLatestVersion_Project
|
|
}
|
|
`);
|
|
const props = __props;
|
|
const dialogOpen = _useModel(__props, "open");
|
|
const mixpanel = useMixpanel();
|
|
const { isEnabled: isEmbedEnabled } = useEmbed();
|
|
const { versionLimitFormatted } = useWorkspaceLimits({
|
|
slug: computed(() => props.project.workspace?.slug),
|
|
workspace: computed(() => props.project.workspace)
|
|
});
|
|
const { createButton: loadLatestButton } = useLoadLatestVersion({
|
|
project: computed(() => props.project),
|
|
resourceIdString: computed(() => props.resourceIdString)
|
|
});
|
|
const title = computed(() => {
|
|
switch (props.limitType) {
|
|
case "version":
|
|
return "Plan limit reached";
|
|
case "federated":
|
|
return "The federated models couldn't be loaded";
|
|
case "comment":
|
|
return "The comment could not be loaded";
|
|
default:
|
|
return "Plan limit reached";
|
|
}
|
|
});
|
|
const message = computed(() => {
|
|
switch (props.limitType) {
|
|
case "version":
|
|
return `The version you're trying to load is older than the ${versionLimitFormatted.value} version history limit allowed by your workspace plan. Upgrade your workspace plan to gain access.`;
|
|
case "federated":
|
|
return `One of the models is older than the ${versionLimitFormatted.value} version history limit allowed by your workspace plan. Upgrade your workspace plan to gain access.`;
|
|
case "comment":
|
|
return `Unable to load the comment because one or more of the referenced models is older than the ${versionLimitFormatted.value} version history limit. Upgrade your workspace plan to gain access.`;
|
|
default:
|
|
return "You've reached the limit of your plan. Please upgrade to continue.";
|
|
}
|
|
});
|
|
const explorePlansButton = {
|
|
text: "Explore plans",
|
|
disabled: props.project.workspace?.role === Roles.Workspace.Guest,
|
|
disabledMessage: "As a Guest you cannot access plans and billing",
|
|
onClick: () => {
|
|
const slug = props.project.workspace?.slug;
|
|
if (!slug) return;
|
|
mixpanel.track("Limit Reached Dialog Upgrade Button Clicked", {
|
|
type: props.limitType === "version" ? "version" : "model",
|
|
location: "viewer",
|
|
// eslint-disable-next-line camelcase
|
|
workspace_id: slug
|
|
});
|
|
return navigateTo(settingsWorkspaceRoutes.billing.route(slug));
|
|
}
|
|
};
|
|
const buttons = computed(() => {
|
|
const buttons2 = {
|
|
version: isEmbedEnabled.value ? [loadLatestButton(false)] : [loadLatestButton(false), explorePlansButton],
|
|
federated: isEmbedEnabled.value ? [loadLatestButton(false)] : [loadLatestButton(false), explorePlansButton],
|
|
comment: [loadLatestButton(true)]
|
|
};
|
|
return buttons2[props.limitType];
|
|
});
|
|
const __returned__ = { props, dialogOpen, mixpanel, isEmbedEnabled, versionLimitFormatted, loadLatestButton, title, message, explorePlansButton, buttons };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "mb-2",
|
|
"data-v-inspector": "components/viewer/limits/WorkspaceDialog.vue:9:5"
|
|
};
|
|
const _hoisted_2 = { "data-v-inspector": "components/viewer/limits/WorkspaceDialog.vue:10:7" };
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_WorkspacePlanLimitReachedDialog = __nuxt_component_0;
|
|
return _openBlock(), _createBlock(_component_WorkspacePlanLimitReachedDialog, {
|
|
open: $setup.dialogOpen,
|
|
"onUpdate:open": _cache[0] || (_cache[0] = ($event) => $setup.dialogOpen = $event),
|
|
buttons: $setup.buttons,
|
|
"prevent-close": "",
|
|
condensed: $setup.isEmbedEnabled || void 0,
|
|
"data-v-inspector": "components/viewer/limits/WorkspaceDialog.vue:2:3"
|
|
}, {
|
|
header: _withCtx(() => [
|
|
_createTextVNode(
|
|
_toDisplayString($setup.title),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
default: _withCtx(() => [
|
|
_createElementVNode("div", _hoisted_1, [
|
|
_createElementVNode(
|
|
"p",
|
|
_hoisted_2,
|
|
_toDisplayString($setup.message),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["open", "buttons", "condensed"]);
|
|
}
|
|
_sfc_main.__hmrId = "8f4bf638";
|
|
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/limits/WorkspaceDialog.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBY0EsU0FBUyxhQUFhO0FBRXRCLFNBQVMsK0JBQStCO0FBQ3hDLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsZUFBZTtBQUd4QixTQUFTLDRCQUE0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVyQyxZQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxDQVdQO0FBRUQsVUFBTSxRQUFRO0FBTWQsVUFBTSxhQUFhLFVBQW9CLFNBQUMsTUFFdkM7QUFFRCxVQUFNLFdBQVcsWUFBWTtBQUM3QixVQUFNLEVBQUUsV0FBVyxlQUFlLElBQUksU0FBUztBQUMvQyxVQUFNLEVBQUUsc0JBQXNCLElBQUksbUJBQW1CO0FBQUEsTUFDbkQsTUFBTSxTQUFTLE1BQU0sTUFBTSxRQUFRLFdBQVcsSUFBSTtBQUFBLE1BQ2xELFdBQVcsU0FBUyxNQUFNLE1BQU0sUUFBUSxTQUFTO0FBQUEsSUFDbkQsQ0FBQztBQUVELFVBQU0sRUFBRSxjQUFjLGlCQUFpQixJQUFJLHFCQUFxQjtBQUFBLE1BQzlELFNBQVMsU0FBUyxNQUFNLE1BQU0sT0FBTztBQUFBLE1BQ3JDLGtCQUFrQixTQUFTLE1BQU0sTUFBTSxnQkFBZ0I7QUFBQSxJQUN6RCxDQUFDO0FBRUQsVUFBTSxRQUFRLFNBQVMsTUFBTTtBQUMzQixjQUFRLE1BQU0sV0FBVztBQUFBLFFBQ3ZCLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNUO0FBQ0UsaUJBQU87QUFBQSxNQUNYO0FBQUEsSUFDRixDQUFDO0FBRUQsVUFBTSxVQUFVLFNBQVMsTUFBTTtBQUM3QixjQUFRLE1BQU0sV0FBVztBQUFBLFFBQ3ZCLEtBQUs7QUFDSCxpQkFBTyx1REFBdUQsc0JBQXNCLEtBQUs7QUFBQSxRQUMzRixLQUFLO0FBQ0gsaUJBQU8sdUNBQXVDLHNCQUFzQixLQUFLO0FBQUEsUUFDM0UsS0FBSztBQUNILGlCQUFPLDZGQUE2RixzQkFBc0IsS0FBSztBQUFBLFFBQ2pJO0FBQ0UsaUJBQU87QUFBQSxNQUNYO0FBQUEsSUFDRixDQUFDO0FBRUQsVUFBTSxxQkFBeUM7QUFBQSxNQUM3QyxNQUFNO0FBQUEsTUFDTixVQUFVLE1BQU0sUUFBUSxXQUFXLFNBQVMsTUFBTSxVQUFVO0FBQUEsTUFDNUQsaUJBQWlCO0FBQUEsTUFDakIsU0FBUyxNQUFNO0FBQ2IsY0FBTSxPQUFPLE1BQU0sUUFBUSxXQUFXO0FBQ3RDLFlBQUksQ0FBQyxLQUFNO0FBRVgsaUJBQVMsTUFBTSwrQ0FBK0M7QUFBQSxVQUM1RCxNQUFNLE1BQU0sY0FBYyxZQUFZLFlBQVk7QUFBQSxVQUNsRCxVQUFVO0FBQUE7QUFBQSxVQUVWLGNBQWM7QUFBQSxRQUNoQixDQUFDO0FBQ0QsZUFBTyxXQUFXLHdCQUF3QixRQUFRLE1BQU0sSUFBSSxDQUFDO0FBQUEsTUFDL0Q7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLFNBQVMsTUFBNEI7QUFDbkQsWUFBTUEsV0FBZ0U7QUFBQSxRQUNwRSxTQUFTLGVBQWUsUUFDcEIsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLElBQ3hCLENBQUMsaUJBQWlCLEtBQUssR0FBRyxrQkFBa0I7QUFBQSxRQUNoRCxXQUFXLGVBQWUsUUFDdEIsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLElBQ3hCLENBQUMsaUJBQWlCLEtBQUssR0FBRyxrQkFBa0I7QUFBQSxRQUNoRCxTQUFTLENBQUMsaUJBQWlCLElBQUksQ0FBQztBQUFBLE1BQ2xDO0FBRUEsYUFBT0EsU0FBUSxNQUFNLFNBQVM7QUFBQSxJQUNoQyxDQUFDOzs7Ozs7OztFQTVHUSxPQUFNO0FBQUEsRUFBTyxvQkFBaUI7O3FCQUM5QixvQkFBaUIsb0RBQW1EOzs7dUJBUjNFLGFBVWtDO0FBQUEsSUFUeEIsTUFBTTtBQUFBLCtFQUFVO0FBQUEsSUFDdkIsU0FBUztBQUFBLElBQ1Y7QUFBQSxJQUNDLFdBQVcseUJBQWtCO0FBQUEsSUFBVyxvQkFBaUI7QUFBQTtJQUUvQyxRQUFNLFNBQUMsTUFBVztBQUFBO3lCQUFSLFlBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtzQkFDMUIsTUFFTTtBQUFBLE1BRk4sb0JBRU0sT0FGTixZQUVNO0FBQUEsUUFESjtBQUFBLFVBQXlGO0FBQUEsVUFBekY7QUFBQSxVQUF5RixpQkFBZCxjQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJuYW1lcyI6WyJidXR0b25zIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIldvcmtzcGFjZURpYWxvZy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxXb3Jrc3BhY2VQbGFuTGltaXRSZWFjaGVkRGlhbG9nXHJcbiAgICB2LW1vZGVsOm9wZW49XCJkaWFsb2dPcGVuXCJcclxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXHJcbiAgICBwcmV2ZW50LWNsb3NlXHJcbiAgICA6Y29uZGVuc2VkPVwiaXNFbWJlZEVuYWJsZWQgfHwgdW5kZWZpbmVkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL2xpbWl0cy9Xb3Jrc3BhY2VEaWFsb2cudnVlOjI6M1wiXHJcbiAgPlxyXG4gICAgPHRlbXBsYXRlICNoZWFkZXI+e3sgdGl0bGUgfX08L3RlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbGltaXRzL1dvcmtzcGFjZURpYWxvZy52dWU6OTo1XCI+XHJcbiAgICAgIDxwIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9saW1pdHMvV29ya3NwYWNlRGlhbG9nLnZ1ZToxMDo3XCI+e3sgbWVzc2FnZSB9fTwvcD5cclxuICAgIDwvZGl2PlxyXG4gIDwvV29ya3NwYWNlUGxhbkxpbWl0UmVhY2hlZERpYWxvZz5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgUm9sZXMgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQnXHJcbmltcG9ydCB0eXBlIHsgTGF5b3V0RGlhbG9nQnV0dG9uIH0gZnJvbSAnQHNwZWNrbGUvdWktY29tcG9uZW50cydcclxuaW1wb3J0IHsgc2V0dGluZ3NXb3Jrc3BhY2VSb3V0ZXMgfSBmcm9tICd+L2xpYi9jb21tb24vaGVscGVycy9yb3V0ZSdcclxuaW1wb3J0IHsgdXNlRW1iZWQgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAvZW1iZWQnXHJcbmltcG9ydCB7IHVzZVdvcmtzcGFjZUxpbWl0cyB9IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvY29tcG9zYWJsZXMvbGltaXRzJ1xyXG5pbXBvcnQgeyB1c2VNaXhwYW5lbCB9IGZyb20gJ34vbGliL2NvcmUvY29tcG9zYWJsZXMvbXAnXHJcbmltcG9ydCB7IGdyYXBocWwgfSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbCdcclxuaW1wb3J0IHR5cGUgeyBWaWV3ZXJMaW1pdHNXb3Jrc3BhY2VEaWFsb2dfUHJvamVjdEZyYWdtZW50IH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuaW1wb3J0IHR5cGUgeyBWaWV3ZXJMaW1pdHNEaWFsb2dUeXBlIH0gZnJvbSAnfi9saWIvcHJvamVjdHMvaGVscGVycy9saW1pdHMnXHJcbmltcG9ydCB7IHVzZUxvYWRMYXRlc3RWZXJzaW9uIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3Jlc291cmNlcydcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFZpZXdlckxpbWl0c1dvcmtzcGFjZURpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xyXG4gICAgaWRcclxuICAgIHdvcmtzcGFjZSB7XHJcbiAgICAgIGlkXHJcbiAgICAgIHJvbGVcclxuICAgICAgc2x1Z1xyXG4gICAgICAuLi5Xb3Jrc3BhY2VQbGFuTGltaXRzX1dvcmtzcGFjZVxyXG4gICAgfVxyXG4gICAgLi4uVXNlTG9hZExhdGVzdFZlcnNpb25fUHJvamVjdFxyXG4gIH1cclxuYClcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIGxpbWl0VHlwZTogVmlld2VyTGltaXRzRGlhbG9nVHlwZVxyXG4gIHByb2plY3Q6IFZpZXdlckxpbWl0c1dvcmtzcGFjZURpYWxvZ19Qcm9qZWN0RnJhZ21lbnRcclxuICByZXNvdXJjZUlkU3RyaW5nOiBzdHJpbmdcclxufT4oKVxyXG5cclxuY29uc3QgZGlhbG9nT3BlbiA9IGRlZmluZU1vZGVsPGJvb2xlYW4+KCdvcGVuJywge1xyXG4gIHJlcXVpcmVkOiB0cnVlXHJcbn0pXHJcblxyXG5jb25zdCBtaXhwYW5lbCA9IHVzZU1peHBhbmVsKClcclxuY29uc3QgeyBpc0VuYWJsZWQ6IGlzRW1iZWRFbmFibGVkIH0gPSB1c2VFbWJlZCgpXHJcbmNvbnN0IHsgdmVyc2lvbkxpbWl0Rm9ybWF0dGVkIH0gPSB1c2VXb3Jrc3BhY2VMaW1pdHMoe1xyXG4gIHNsdWc6IGNvbXB1dGVkKCgpID0+IHByb3BzLnByb2plY3Qud29ya3NwYWNlPy5zbHVnKSxcclxuICB3b3Jrc3BhY2U6IGNvbXB1dGVkKCgpID0+IHByb3BzLnByb2plY3Qud29ya3NwYWNlKVxyXG59KVxyXG5cclxuY29uc3QgeyBjcmVhdGVCdXR0b246IGxvYWRMYXRlc3RCdXR0b24gfSA9IHVzZUxvYWRMYXRlc3RWZXJzaW9uKHtcclxuICBwcm9qZWN0OiBjb21wdXRlZCgoKSA9PiBwcm9wcy5wcm9qZWN0KSxcclxuICByZXNvdXJjZUlkU3RyaW5nOiBjb21wdXRlZCgoKSA9PiBwcm9wcy5yZXNvdXJjZUlkU3RyaW5nKVxyXG59KVxyXG5cclxuY29uc3QgdGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgc3dpdGNoIChwcm9wcy5saW1pdFR5cGUpIHtcclxuICAgIGNhc2UgJ3ZlcnNpb24nOlxyXG4gICAgICByZXR1cm4gJ1BsYW4gbGltaXQgcmVhY2hlZCdcclxuICAgIGNhc2UgJ2ZlZGVyYXRlZCc6XHJcbiAgICAgIHJldHVybiBcIlRoZSBmZWRlcmF0ZWQgbW9kZWxzIGNvdWxkbid0IGJlIGxvYWRlZFwiXHJcbiAgICBjYXNlICdjb21tZW50JzpcclxuICAgICAgcmV0dXJuICdUaGUgY29tbWVudCBjb3VsZCBub3QgYmUgbG9hZGVkJ1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuICdQbGFuIGxpbWl0IHJlYWNoZWQnXHJcbiAgfVxyXG59KVxyXG5cclxuY29uc3QgbWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBzd2l0Y2ggKHByb3BzLmxpbWl0VHlwZSkge1xyXG4gICAgY2FzZSAndmVyc2lvbic6XHJcbiAgICAgIHJldHVybiBgVGhlIHZlcnNpb24geW91J3JlIHRyeWluZyB0byBsb2FkIGlzIG9sZGVyIHRoYW4gdGhlICR7dmVyc2lvbkxpbWl0Rm9ybWF0dGVkLnZhbHVlfSB2ZXJzaW9uIGhpc3RvcnkgbGltaXQgYWxsb3dlZCBieSB5b3VyIHdvcmtzcGFjZSBwbGFuLiBVcGdyYWRlIHlvdXIgd29ya3NwYWNlIHBsYW4gdG8gZ2FpbiBhY2Nlc3MuYFxyXG4gICAgY2FzZSAnZmVkZXJhdGVkJzpcclxuICAgICAgcmV0dXJuIGBPbmUgb2YgdGhlIG1vZGVscyBpcyBvbGRlciB0aGFuIHRoZSAke3ZlcnNpb25MaW1pdEZvcm1hdHRlZC52YWx1ZX0gdmVyc2lvbiBoaXN0b3J5IGxpbWl0IGFsbG93ZWQgYnkgeW91ciB3b3Jrc3BhY2UgcGxhbi4gVXBncmFkZSB5b3VyIHdvcmtzcGFjZSBwbGFuIHRvIGdhaW4gYWNjZXNzLmBcclxuICAgIGNhc2UgJ2NvbW1lbnQnOlxyXG4gICAgICByZXR1cm4gYFVuYWJsZSB0byBsb2FkIHRoZSBjb21tZW50IGJlY2F1c2Ugb25lIG9yIG1vcmUgb2YgdGhlIHJlZmVyZW5jZWQgbW9kZWxzIGlzIG9sZGVyIHRoYW4gdGhlICR7dmVyc2lvbkxpbWl0Rm9ybWF0dGVkLnZhbHVlfSB2ZXJzaW9uIGhpc3RvcnkgbGltaXQuIFVwZ3JhZGUgeW91ciB3b3Jrc3BhY2UgcGxhbiB0byBnYWluIGFjY2Vzcy5gXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICByZXR1cm4gXCJZb3UndmUgcmVhY2hlZCB0aGUgbGltaXQgb2YgeW91ciBwbGFuLiBQbGVhc2UgdXBncmFkZSB0byBjb250aW51ZS5cIlxyXG4gIH1cclxufSlcclxuXHJcbmNvbnN0IGV4cGxvcmVQbGFuc0J1dHRvbjogTGF5b3V0RGlhbG9nQnV0dG9uID0ge1xyXG4gIHRleHQ6ICdFeHBsb3JlIHBsYW5zJyxcclxuICBkaXNhYmxlZDogcHJvcHMucHJvamVjdC53b3Jrc3BhY2U/LnJvbGUgPT09IFJvbGVzLldvcmtzcGFjZS5HdWVzdCxcclxuICBkaXNhYmxlZE1lc3NhZ2U6ICdBcyBhIEd1ZXN0IHlvdSBjYW5ub3QgYWNjZXNzIHBsYW5zIGFuZCBiaWxsaW5nJyxcclxuICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICBjb25zdCBzbHVnID0gcHJvcHMucHJvamVjdC53b3Jrc3BhY2U/LnNsdWdcclxuICAgIGlmICghc2x1ZykgcmV0dXJuXHJcblxyXG4gICAgbWl4cGFuZWwudHJhY2soJ0xpbWl0IFJlYWNoZWQgRGlhbG9nIFVwZ3JhZGUgQnV0dG9uIENsaWNrZWQnLCB7XHJcbiAgICAgIHR5cGU6IHByb3BzLmxpbWl0VHlwZSA9PT0gJ3ZlcnNpb24nID8gJ3ZlcnNpb24nIDogJ21vZGVsJyxcclxuICAgICAgbG9jYXRpb246ICd2aWV3ZXInLFxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXHJcbiAgICAgIHdvcmtzcGFjZV9pZDogc2x1Z1xyXG4gICAgfSlcclxuICAgIHJldHVybiBuYXZpZ2F0ZVRvKHNldHRpbmdzV29ya3NwYWNlUm91dGVzLmJpbGxpbmcucm91dGUoc2x1ZykpXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBidXR0b25zID0gY29tcHV0ZWQoKCk6IExheW91dERpYWxvZ0J1dHRvbltdID0+IHtcclxuICBjb25zdCBidXR0b25zOiBSZWNvcmQ8Vmlld2VyTGltaXRzRGlhbG9nVHlwZSwgTGF5b3V0RGlhbG9nQnV0dG9uW10+ID0ge1xyXG4gICAgdmVyc2lvbjogaXNFbWJlZEVuYWJsZWQudmFsdWVcclxuICAgICAgPyBbbG9hZExhdGVzdEJ1dHRvbihmYWxzZSldXHJcbiAgICAgIDogW2xvYWRMYXRlc3RCdXR0b24oZmFsc2UpLCBleHBsb3JlUGxhbnNCdXR0b25dLFxyXG4gICAgZmVkZXJhdGVkOiBpc0VtYmVkRW5hYmxlZC52YWx1ZVxyXG4gICAgICA/IFtsb2FkTGF0ZXN0QnV0dG9uKGZhbHNlKV1cclxuICAgICAgOiBbbG9hZExhdGVzdEJ1dHRvbihmYWxzZSksIGV4cGxvcmVQbGFuc0J1dHRvbl0sXHJcbiAgICBjb21tZW50OiBbbG9hZExhdGVzdEJ1dHRvbih0cnVlKV1cclxuICB9XHJcblxyXG4gIHJldHVybiBidXR0b25zW3Byb3BzLmxpbWl0VHlwZV1cclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL3ZpZXdlci9saW1pdHMvV29ya3NwYWNlRGlhbG9nLnZ1ZSJ9 |