import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/project/page/models/Card.vue");import { default as __nuxt_component_0 } from "/_nuxt/node_modules/nuxt/dist/app/components/nuxt-link.js?v=e4f18c29"; import { default as __nuxt_component_1 } from "/_nuxt/components/project/page/models/Actions.vue"; import { default as __nuxt_component_2 } from "/_nuxt/components/automate/runs/TriggerStatus.vue"; import { default as __nuxt_component_3 } from "/_nuxt/components/project/PendingFileImportStatus.vue"; import { default as __nuxt_component_4 } from "/_nuxt/components/preview/Image.vue"; import { default as __nuxt_component_5 } from "/_nuxt/components/project/CardImportFileArea.vue"; import { default as __nuxt_component_6 } from "/_nuxt/components/project/page/models/card/UpdatedTime.vue"; import { default as __nuxt_component_7 } from "/_nuxt/components/global/icon/Discussions.vue"; import { default as __nuxt_component_8 } from "/_nuxt/components/global/icon/Versions.vue"; import { FormButton as __nuxt_component_9 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createBlock as __createBlock,createElementBlock as __createElementBlock,createElementVNode as __createElementVNode,createVNode as __createVNode } 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 _createBlock(...args) { return _interopVNode(__createBlock(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...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 { modelVersionsRoute } from "/_nuxt/lib/common/helpers/route.ts"; import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts"; import { getModelItemRoute, isPendingModelFragment } from "/_nuxt/lib/projects/helpers/models.ts"; import { FileUploadConvertedStatus } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/blobs/index.js"; import __vite__cjsImport16_dayjs from "/_nuxt/node_modules/.cache/vite/client/deps/dayjs.js?v=e4f18c29"; const dayjs = __vite__cjsImport16_dayjs.__esModule ? __vite__cjsImport16_dayjs.default : __vite__cjsImport16_dayjs; import { useRouter } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29"; import { useIsAutomateModuleEnabled } from "/_nuxt/composables/globals.ts"; import { ref, computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "ProjectPageModelsCard", props: { projectId: { type: String, required: true }, model: { type: Object, required: true }, project: { type: null, required: true }, showVersions: { type: Boolean, required: false, default: true }, showActions: { type: Boolean, required: false, default: true }, disableDefaultLink: { type: Boolean, required: false }, smallView: { type: Boolean, required: false, default: false } }, emits: ["click"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); graphql(` fragment ProjectPageModelsCardProject on Project { id role visibility ...ProjectPageModelsActions_Project ...ProjectCardImportFileArea_Project permissions { canCreateModel { ...FullPermissionCheckResult } } } `); graphql(` fragment ProjectPageModelsCard_Model on Model { id homeView { id resourceIds } lastUpload: uploads(input: { limit: 1, cursor: null }) { items { id updatedAt convertedStatus } } lastVersion: versions(limit: 1, cursor: null) { items { id createdAt } } } `); const emit = __emit; const props = __props; const router = useRouter(); const isAutomateModuleEnabled = useIsAutomateModuleEnabled(); const importArea = ref( null ); const actions = ref( null ); const isVersionUploading = ref(false); const showActionsMenu = ref(false); const hovered = ref(false); const showLastUploadFailed = computed(() => { if (isPendingModelFragment(props.model)) return false; const lastUpload = props.model.lastUpload?.items[0]; const lastVersion = props.model.lastVersion?.items[0]; if (lastUpload?.convertedStatus !== FileUploadConvertedStatus.Error) return false; if (!lastVersion) return true; return dayjs(lastUpload.updatedAt).isAfter(dayjs(lastVersion.createdAt)); }); const containerClasses = computed(() => { const classParts = [ "group rounded-xl bg-foundation border border-outline-3 hover:border-outline-5 w-full z-[0]" ]; if (versionCount.value > 0) { classParts.push("cursor-pointer"); } return classParts.join(" "); }); const nameParts = computed(() => { const model = props.model; const modelName = isPendingModelFragment(model) ? model.modelName : model.name; const splitName = modelName.split("/"); if (splitName.length === 1) return [null, modelName]; const displayName = splitName.pop(); return [splitName.join("/") + "/", displayName]; }); const modelUrl = computed(() => getModelItemRoute(props.model)); const previewUrl = computed( () => isPendingModelFragment(props.model) ? null : props.model.previewUrl ); const defaultLinkDisabled = computed( () => props.disableDefaultLink || versionCount.value < 1 ); const updatedAtFullDate = computed(() => { return isPendingModelFragment(props.model) ? props.model.convertedLastUpdate || props.model.uploadDate : props.model.updatedAt; }); const versionCount = computed(() => { return isPendingModelFragment(props.model) ? 0 : props.model.versionCount.totalCount; }); const pendingVersion = computed(() => { if (isPendingModelFragment(props.model)) { return null; } const lastPendingVersion = props.model.pendingImportedVersions[0]; const lastVersion = props.model.lastVersion?.items[0]; if (!lastVersion || !lastPendingVersion) return lastPendingVersion; if (dayjs(lastPendingVersion.updatedAt).isBefore(dayjs(lastVersion.createdAt))) { return null; } return lastPendingVersion; }); const onCardClick = (event) => { if (!previewUrl.value && !pendingVersion.value && !isPendingModelFragment(props.model)) { return; } emit("click", event); }; const onVersionUploading = (payload) => { isVersionUploading.value = payload.isUploading; }; const triggerVersionUpload = () => { importArea.value?.triggerPicker(); }; const __returned__ = { emit, props, router, isAutomateModuleEnabled, importArea, actions, isVersionUploading, showActionsMenu, hovered, showLastUploadFailed, containerClasses, nameParts, modelUrl, previewUrl, defaultLinkDisabled, updatedAtFullDate, versionCount, pendingVersion, onCardClick, onVersionUploading, triggerVersionUpload, get modelVersionsRoute() { return modelVersionsRoute; }, get isPendingModelFragment() { return isPendingModelFragment; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveComponent as _resolveComponent, openBlock as _openBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, withCtx as _withCtx, withModifiers as _withModifiers, normalizeClass as _normalizeClass, vShow as _vShow, withDirectives as _withDirectives, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "relative p-2 h-full flex flex-col", "data-v-inspector": "components/project/page/models/Card.vue:12:5" }; const _hoisted_2 = { class: "relative z-40 flex justify-between items-center h-10", "data-v-inspector": "components/project/page/models/Card.vue:18:7" }; const _hoisted_3 = { class: "px-1 select-none w-full", "data-v-inspector": "components/project/page/models/Card.vue:20:11" }; const _hoisted_4 = { key: 0, class: "text-body-2xs text-foreground-2 relative truncate", "data-v-inspector": "components/project/page/models/Card.vue:21:13" }; const _hoisted_5 = { class: "text-body-xs font-medium truncate text-foreground flex-shrink min-w-0", "data-v-inspector": "components/project/page/models/Card.vue:27:13" }; const _hoisted_6 = { class: "relative flex items-center justify-center my-1 flex-1", "data-v-inspector": "components/project/page/models/Card.vue:44:7" }; const _hoisted_7 = { key: 0, class: "z-30 absolute top-0 left-0", "data-v-inspector": "components/project/page/models/Card.vue:45:9" }; const _hoisted_8 = { key: 4, class: "h-48 w-full relative z-30", "data-v-inspector": "components/project/page/models/Card.vue:79:9" }; const _hoisted_9 = { class: "relative z-20 flex justify-between items-center w-full h-8 pl-2", "data-v-inspector": "components/project/page/models/Card.vue:94:7" }; const _hoisted_10 = { class: "flex flex-col", "data-v-inspector": "components/project/page/models/Card.vue:95:9" }; const _hoisted_11 = { class: "flex items-center gap-1", "data-v-inspector": "components/project/page/models/Card.vue:109:9" }; const _hoisted_12 = ["to"]; const _hoisted_13 = { class: "text-body-2xs font-medium", "data-v-inspector": "components/project/page/models/Card.vue:116:13" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_NuxtLink = __nuxt_component_0; const _component_ProjectPageModelsActions = __nuxt_component_1; const _component_AutomateRunsTriggerStatus = __nuxt_component_2; const _component_ProjectPendingFileImportStatus = __nuxt_component_3; const _component_PreviewImage = __nuxt_component_4; const _component_ProjectCardImportFileArea = __nuxt_component_5; const _component_ProjectPageModelsCardUpdatedTime = __nuxt_component_6; const _component_IconDiscussions = __nuxt_component_7; const _component_IconVersions = __nuxt_component_8; const _component_FormButton = __nuxt_component_9; const _directive_keyboard_clickable = _resolveDirective("keyboard-clickable"); const _directive_tippy = _resolveDirective("tippy"); return _withDirectives((_openBlock(), _createElementBlock( "div", { class: _normalizeClass($setup.containerClasses), onClick: $setup.onCardClick, onMouseleave: _cache[4] || (_cache[4] = ($event) => { ; $setup.showActionsMenu = false, $setup.hovered = false; }), onMouseenter: _cache[5] || (_cache[5] = ($event) => $setup.hovered = true), "data-v-inspector": "components/project/page/models/Card.vue:5:3" }, [ _createElementVNode("div", _hoisted_1, [ !$setup.defaultLinkDisabled ? (_openBlock(), _createBlock(_component_NuxtLink, { key: 0, to: $setup.modelUrl, class: "absolute z-10 inset-0", "data-v-inspector": "components/project/page/models/Card.vue:13:7" }, null, 8, ["to"])) : _createCommentVNode("v-if", true), _createElementVNode("div", _hoisted_2, [ _createVNode(_component_NuxtLink, { to: !$setup.defaultLinkDisabled ? $setup.modelUrl : void 0, class: "truncate", "data-v-inspector": "components/project/page/models/Card.vue:19:9" }, { default: _withCtx(() => [ _createElementVNode("div", _hoisted_3, [ $setup.nameParts[0] ? (_openBlock(), _createElementBlock( "div", _hoisted_4, _toDisplayString($setup.nameParts[0]), 1 /* TEXT */ )) : _createCommentVNode("v-if", true), _createElementVNode( "div", _hoisted_5, _toDisplayString($setup.nameParts[1]), 1 /* TEXT */ ) ]) ]), _: 1 /* STABLE */ }, 8, ["to"]), $props.project && $props.showActions && !$setup.isPendingModelFragment($props.model) ? (_openBlock(), _createBlock(_component_ProjectPageModelsActions, { key: 0, ref: "actions", open: $setup.showActionsMenu, "onUpdate:open": _cache[0] || (_cache[0] = ($event) => $setup.showActionsMenu = $event), model: $props.model, project: $props.project, onClick: _cache[1] || (_cache[1] = _withModifiers(() => { }, ["stop", "prevent"])), onUploadVersion: $setup.triggerVersionUpload, "data-v-inspector": "components/project/page/models/Card.vue:34:9" }, null, 8, ["open", "model", "project"])) : _createCommentVNode("v-if", true) ]), _createElementVNode("div", _hoisted_6, [ $setup.isAutomateModuleEnabled && !$setup.isPendingModelFragment($props.model) && $props.model.automationsStatus ? (_openBlock(), _createElementBlock("div", _hoisted_7, [ _createVNode(_component_AutomateRunsTriggerStatus, { "project-id": $props.projectId, status: $props.model.automationsStatus, "model-id": $props.model.id, "data-v-inspector": "components/project/page/models/Card.vue:53:11" }, null, 8, ["project-id", "status", "model-id"]) ])) : _createCommentVNode("v-if", true), $setup.isPendingModelFragment($props.model) ? (_openBlock(), _createBlock(_component_ProjectPendingFileImportStatus, { key: 1, upload: $props.model, class: "px-4 w-full h-48", "data-v-inspector": "components/project/page/models/Card.vue:59:9" }, null, 8, ["upload"])) : $setup.pendingVersion ? (_openBlock(), _createBlock(_component_ProjectPendingFileImportStatus, { key: 2, upload: $setup.pendingVersion, type: "subversion", class: "px-4 w-full h-48 text-foreground-2 text-sm flex flex-col items-center space-y-1", "data-v-inspector": "components/project/page/models/Card.vue:64:9" }, null, 8, ["upload"])) : $setup.previewUrl && !$setup.isVersionUploading ? (_openBlock(), _createBlock(_component_NuxtLink, { key: 3, to: !$setup.defaultLinkDisabled ? $setup.modelUrl : void 0, class: _normalizeClass(["relative z-20 bg-foundation-page w-full rounded-xl border border-outline-2 overflow-hidden", $props.smallView ? "h-24" : "h-48"]), "data-v-inspector": "components/project/page/models/Card.vue:71:11" }, { default: _withCtx(() => [ _createVNode(_component_PreviewImage, { "preview-url": $setup.previewUrl, "data-v-inspector": "components/project/page/models/Card.vue:76:13" }, null, 8, ["preview-url"]) ]), _: 1 /* STABLE */ }, 8, ["to", "class"])) : _createCommentVNode("v-if", true), !$setup.isPendingModelFragment($props.model) && $props.project ? _withDirectives((_openBlock(), _createElementBlock( "div", _hoisted_8, [ _createVNode(_component_ProjectCardImportFileArea, { ref: "importArea", "empty-state-variant": "modelGrid", project: $props.project, model: $props.model, class: "w-full h-full", onUploading: $setup.onVersionUploading, "data-v-inspector": "components/project/page/models/Card.vue:84:11" }, null, 8, ["project", "model"]) ], 512 /* NEED_PATCH */ )), [ [_vShow, !$setup.pendingVersion && ($setup.isVersionUploading || !$setup.previewUrl)] ]) : _createCommentVNode("v-if", true) ]), _createElementVNode("div", _hoisted_9, [ _createElementVNode("div", _hoisted_10, [ _createVNode(_component_ProjectPageModelsCardUpdatedTime, { class: "text-body-3xs text-foreground-2", "updated-at": $setup.updatedAtFullDate, "data-v-inspector": "components/project/page/models/Card.vue:96:11" }, null, 8, ["updated-at"]), $setup.showLastUploadFailed ? _withDirectives((_openBlock(), _createBlock(_component_NuxtLink, { key: 0, class: "text-body-3xs text-danger hover:text-danger-lighter cursor-pointer", onClick: _cache[2] || (_cache[2] = _withModifiers(($event) => $setup.actions?.showUploads(), ["stop"])), "data-v-inspector": "components/project/page/models/Card.vue:100:11" }, { default: _withCtx(() => [..._cache[6] || (_cache[6] = [ _createTextVNode( " Last upload failed ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ })), [ [_directive_keyboard_clickable] ]) : _createCommentVNode("v-if", true) ]), _createElementVNode("div", _hoisted_11, [ !$setup.isPendingModelFragment($props.model) ? (_openBlock(), _createElementBlock("div", { key: 0, class: "flex items-center gap-1 !text-foreground-2", to: $setup.modelVersionsRoute($props.projectId, $props.model.id), "data-v-inspector": "components/project/page/models/Card.vue:110:11" }, [ _createVNode(_component_IconDiscussions, { class: "h-4 w-4", "data-v-inspector": "components/project/page/models/Card.vue:115:13" }), _createElementVNode( "span", _hoisted_13, _toDisplayString($props.model.commentThreadCount.totalCount), 1 /* TEXT */ ) ], 8, _hoisted_12)) : _createCommentVNode("v-if", true), _withDirectives((_openBlock(), _createBlock(_component_FormButton, { color: "subtle", size: "sm", class: "flex items-center gap-1 !text-foreground-2", onClick: _cache[3] || (_cache[3] = _withModifiers(($event) => $setup.router.push($setup.modelVersionsRoute($props.projectId, $props.model.id)), ["stop"])), "data-v-inspector": "components/project/page/models/Card.vue:120:11" }, { default: _withCtx(() => [ _createVNode(_component_IconVersions, { class: "h-4 w-4", "data-v-inspector": "components/project/page/models/Card.vue:127:13" }), _createTextVNode( " " + _toDisplayString($setup.versionCount), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ })), [ [_directive_tippy, "View Versions"] ]) ]) ]) ]) ], 34 /* CLASS, NEED_HYDRATION */ )), [ [_directive_keyboard_clickable] ]); } _sfc_main.__hmrId = "87de36e3"; 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/project/page/models/Card.vue"]]); //# sourceMappingURL=data:application/json;base64,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Ozs7Ozs7O1VBRUYsb0JBcUJNLE9BckJOLGFBcUJNO0FBQUEsYUFuQkssOEJBQXVCLFlBQUssbUJBRHJDLG9CQVNNO0FBQUE7Y0FQSixPQUFNO0FBQUEsY0FDTCxJQUFJLDBCQUFtQixrQkFBVyxhQUFNLEVBQUU7QUFBQSxjQUFHLG9CQUFpQjtBQUFBO2NBRS9ELGFBQXFHO0FBQUEsZ0JBQXBGLE9BQU07QUFBQSxnQkFBVSxvQkFBaUI7QUFBQTtjQUNsRDtBQUFBLGdCQUVPO0FBQUEsZ0JBRlA7QUFBQSxnQkFFTyxpQkFERixhQUFNLG1CQUFtQixVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7MkNBRzFDLGFBU2E7QUFBQSxjQVBYLE9BQU07QUFBQSxjQUNOLE1BQUs7QUFBQSxjQUNMLE9BQU07QUFBQSxjQUNMLFNBQUsscURBQU8sY0FBTyxLQUFLLDBCQUFtQixrQkFBVyxhQUFNLEVBQUU7QUFBQSxjQUFJLG9CQUFpQjtBQUFBO2dDQUVwRixNQUFrRztBQUFBLGdCQUFsRyxhQUFrRztBQUFBLGtCQUFwRixPQUFNO0FBQUEsa0JBQVUsb0JBQWlCO0FBQUE7O2tCQUFtRCxNQUNsRyxpQkFBRyxtQkFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O2lDQVBOLGVBQWU7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiQ2FyZC52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWVqcy1hY2Nlc3NpYmlsaXR5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgLS0+XHJcbjwhLS0gZXNsaW50LWRpc2FibGUgdnVlanMtYWNjZXNzaWJpbGl0eS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgLS0+XHJcbjwhLS0gZXNsaW50LWRpc2FibGUgdnVlanMtYWNjZXNzaWJpbGl0eS9tb3VzZS1ldmVudHMtaGF2ZS1rZXktZXZlbnRzIC0tPlxyXG48dGVtcGxhdGU+XHJcbiAgPGRpdlxyXG4gICAgdi1rZXlib2FyZC1jbGlja2FibGVcclxuICAgIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzZXNcIlxyXG4gICAgQGNsaWNrPVwib25DYXJkQ2xpY2tcIlxyXG4gICAgQG1vdXNlbGVhdmU9XCI7KHNob3dBY3Rpb25zTWVudSA9IGZhbHNlKSwgKGhvdmVyZWQgPSBmYWxzZSlcIlxyXG4gICAgQG1vdXNlZW50ZXI9XCJob3ZlcmVkID0gdHJ1ZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6NTozXCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgcC0yIGgtZnVsbCBmbGV4IGZsZXgtY29sXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZToxMjo1XCI+XHJcbiAgICAgIDxOdXh0TGlua1xyXG4gICAgICAgIHYtaWY9XCIhZGVmYXVsdExpbmtEaXNhYmxlZFwiXHJcbiAgICAgICAgOnRvPVwibW9kZWxVcmxcIlxyXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei0xMCBpbnNldC0wXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZToxMzo3XCJcclxuICAgICAgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHotNDAgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGgtMTBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmQudnVlOjE4OjdcIj5cclxuICAgICAgICA8TnV4dExpbmsgOnRvPVwiIWRlZmF1bHRMaW5rRGlzYWJsZWQgPyBtb2RlbFVybCA6IHVuZGVmaW5lZFwiIGNsYXNzPVwidHJ1bmNhdGVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmQudnVlOjE5OjlcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIHNlbGVjdC1ub25lIHctZnVsbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6MjA6MTFcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIHYtaWY9XCJuYW1lUGFydHNbMF1cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ib2R5LTJ4cyB0ZXh0LWZvcmVncm91bmQtMiByZWxhdGl2ZSB0cnVuY2F0ZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6MjE6MTNcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgbmFtZVBhcnRzWzBdIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJvZHkteHMgZm9udC1tZWRpdW0gdHJ1bmNhdGUgdGV4dC1mb3JlZ3JvdW5kIGZsZXgtc2hyaW5rIG1pbi13LTBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmQudnVlOjI3OjEzXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7IG5hbWVQYXJ0c1sxXSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvTnV4dExpbms+XHJcbiAgICAgICAgPFByb2plY3RQYWdlTW9kZWxzQWN0aW9uc1xyXG4gICAgICAgICAgdi1pZj1cInByb2plY3QgJiYgc2hvd0FjdGlvbnMgJiYgIWlzUGVuZGluZ01vZGVsRnJhZ21lbnQobW9kZWwpXCJcclxuICAgICAgICAgIHJlZj1cImFjdGlvbnNcIlxyXG4gICAgICAgICAgdi1tb2RlbDpvcGVuPVwic2hvd0FjdGlvbnNNZW51XCJcclxuICAgICAgICAgIDptb2RlbD1cIm1vZGVsXCJcclxuICAgICAgICAgIDpwcm9qZWN0PVwicHJvamVjdFwiXHJcbiAgICAgICAgICBAY2xpY2suc3RvcC5wcmV2ZW50XHJcbiAgICAgICAgICBAdXBsb2FkLXZlcnNpb249XCJ0cmlnZ2VyVmVyc2lvblVwbG9hZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6MzQ6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBteS0xIGZsZXgtMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6NDQ6N1wiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHYtaWY9XCJcclxuICAgICAgICAgICAgaXNBdXRvbWF0ZU1vZHVsZUVuYWJsZWQgJiZcclxuICAgICAgICAgICAgIWlzUGVuZGluZ01vZGVsRnJhZ21lbnQobW9kZWwpICYmXHJcbiAgICAgICAgICAgIG1vZGVsLmF1dG9tYXRpb25zU3RhdHVzXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ6LTMwIGFic29sdXRlIHRvcC0wIGxlZnQtMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6NDU6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPEF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNcclxuICAgICAgICAgICAgOnByb2plY3QtaWQ9XCJwcm9qZWN0SWRcIlxyXG4gICAgICAgICAgICA6c3RhdHVzPVwibW9kZWwuYXV0b21hdGlvbnNTdGF0dXNcIlxyXG4gICAgICAgICAgICA6bW9kZWwtaWQ9XCJtb2RlbC5pZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6NTM6MTFcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8UHJvamVjdFBlbmRpbmdGaWxlSW1wb3J0U3RhdHVzXHJcbiAgICAgICAgICB2LWlmPVwiaXNQZW5kaW5nTW9kZWxGcmFnbWVudChtb2RlbClcIlxyXG4gICAgICAgICAgOnVwbG9hZD1cIm1vZGVsXCJcclxuICAgICAgICAgIGNsYXNzPVwicHgtNCB3LWZ1bGwgaC00OFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6NTk6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8UHJvamVjdFBlbmRpbmdGaWxlSW1wb3J0U3RhdHVzXHJcbiAgICAgICAgICB2LWVsc2UtaWY9XCJwZW5kaW5nVmVyc2lvblwiXHJcbiAgICAgICAgICA6dXBsb2FkPVwicGVuZGluZ1ZlcnNpb25cIlxyXG4gICAgICAgICAgdHlwZT1cInN1YnZlcnNpb25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJweC00IHctZnVsbCBoLTQ4IHRleHQtZm9yZWdyb3VuZC0yIHRleHQtc20gZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZTo2NDo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2UtaWY9XCJwcmV2aWV3VXJsICYmICFpc1ZlcnNpb25VcGxvYWRpbmdcIj5cclxuICAgICAgICAgIDxOdXh0TGlua1xyXG4gICAgICAgICAgICA6dG89XCIhZGVmYXVsdExpbmtEaXNhYmxlZCA/IG1vZGVsVXJsIDogdW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB6LTIwIGJnLWZvdW5kYXRpb24tcGFnZSB3LWZ1bGwgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLW91dGxpbmUtMiBvdmVyZmxvdy1oaWRkZW5cIlxyXG4gICAgICAgICAgICA6Y2xhc3M9XCJzbWFsbFZpZXcgPyAnaC0yNCcgOiAnaC00OCdcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmQudnVlOjcxOjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPFByZXZpZXdJbWFnZSA6cHJldmlldy11cmw9XCJwcmV2aWV3VXJsXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZTo3NjoxM1wiIC8+XHJcbiAgICAgICAgICA8L051eHRMaW5rPlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgdi1pZj1cIiFpc1BlbmRpbmdNb2RlbEZyYWdtZW50KG1vZGVsKSAmJiBwcm9qZWN0XCJcclxuICAgICAgICAgIHYtc2hvdz1cIiFwZW5kaW5nVmVyc2lvbiAmJiAoaXNWZXJzaW9uVXBsb2FkaW5nIHx8ICFwcmV2aWV3VXJsKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImgtNDggdy1mdWxsIHJlbGF0aXZlIHotMzBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0NhcmQudnVlOjc5OjlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxQcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhXHJcbiAgICAgICAgICAgIHJlZj1cImltcG9ydEFyZWFcIlxyXG4gICAgICAgICAgICBlbXB0eS1zdGF0ZS12YXJpYW50PVwibW9kZWxHcmlkXCJcclxuICAgICAgICAgICAgOnByb2plY3Q9XCJwcm9qZWN0XCJcclxuICAgICAgICAgICAgOm1vZGVsPVwibW9kZWxcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCBoLWZ1bGxcIlxyXG4gICAgICAgICAgICBAdXBsb2FkaW5nPVwib25WZXJzaW9uVXBsb2FkaW5nXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZTo4NDoxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHotMjAgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHctZnVsbCBoLTggcGwtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6OTQ6N1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZTo5NTo5XCI+XHJcbiAgICAgICAgICA8UHJvamVjdFBhZ2VNb2RlbHNDYXJkVXBkYXRlZFRpbWVcclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJvZHktM3hzIHRleHQtZm9yZWdyb3VuZC0yXCJcclxuICAgICAgICAgICAgOnVwZGF0ZWQtYXQ9XCJ1cGRhdGVkQXRGdWxsRGF0ZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6OTY6MTFcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxOdXh0TGlua1xyXG4gICAgICAgICAgICB2LWlmPVwic2hvd0xhc3RVcGxvYWRGYWlsZWRcIlxyXG4gICAgICAgICAgICB2LWtleWJvYXJkLWNsaWNrYWJsZVxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS0zeHMgdGV4dC1kYW5nZXIgaG92ZXI6dGV4dC1kYW5nZXItbGlnaHRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgIEBjbGljay5zdG9wPVwiYWN0aW9ucz8uc2hvd1VwbG9hZHMoKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6MTAwOjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgTGFzdCB1cGxvYWQgZmFpbGVkXHJcbiAgICAgICAgICA8L051eHRMaW5rPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6MTA5OjlcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgdi1pZj1cIiFpc1BlbmRpbmdNb2RlbEZyYWdtZW50KG1vZGVsKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgIXRleHQtZm9yZWdyb3VuZC0yXCJcclxuICAgICAgICAgICAgOnRvPVwibW9kZWxWZXJzaW9uc1JvdXRlKHByb2plY3RJZCwgbW9kZWwuaWQpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZToxMTA6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8SWNvbkRpc2N1c3Npb25zIGNsYXNzPVwiaC00IHctNFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6MTE1OjEzXCIgLz5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIGZvbnQtbWVkaXVtXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZToxMTY6MTNcIj5cclxuICAgICAgICAgICAgICB7eyBtb2RlbC5jb21tZW50VGhyZWFkQ291bnQudG90YWxDb3VudCB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICAgIHYtdGlwcHk9XCInVmlldyBWZXJzaW9ucydcIlxyXG4gICAgICAgICAgICBjb2xvcj1cInN1YnRsZVwiXHJcbiAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgIXRleHQtZm9yZWdyb3VuZC0yXCJcclxuICAgICAgICAgICAgQGNsaWNrLnN0b3A9XCJyb3V0ZXIucHVzaChtb2RlbFZlcnNpb25zUm91dGUocHJvamVjdElkLCBtb2RlbC5pZCkpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZToxMjA6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8SWNvblZlcnNpb25zIGNsYXNzPVwiaC00IHctNFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvQ2FyZC52dWU6MTI3OjEzXCIgLz5cclxuICAgICAgICAgICAge3sgdmVyc2lvbkNvdW50IH19XHJcbiAgICAgICAgICA8L0Zvcm1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgbGFuZz1cInRzXCIgc2V0dXA+XHJcbmltcG9ydCB0eXBlIHtcclxuICBQZW5kaW5nRmlsZVVwbG9hZEZyYWdtZW50LFxyXG4gIFByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1GcmFnbWVudCxcclxuICBQcm9qZWN0UGFnZU1vZGVsc0NhcmRQcm9qZWN0RnJhZ21lbnRcclxufSBmcm9tICd+fi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuaW1wb3J0IHsgbW9kZWxWZXJzaW9uc1JvdXRlIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3JvdXRlJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsJ1xyXG5pbXBvcnQge1xyXG4gIGdldE1vZGVsSXRlbVJvdXRlLFxyXG4gIGlzUGVuZGluZ01vZGVsRnJhZ21lbnRcclxufSBmcm9tICd+fi9saWIvcHJvamVjdHMvaGVscGVycy9tb2RlbHMnXHJcbmltcG9ydCB0eXBlIHsgTnVsbGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgdHlwZSB7IEZpbGVBcmVhVXBsb2FkaW5nUGF5bG9hZCB9IGZyb20gJ34vbGliL2Zvcm0vaGVscGVycy9maWxlVXBsb2FkJ1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29udmVydGVkU3RhdHVzIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkL2Jsb2JzJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcblxyXG5ncmFwaHFsKGBcclxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc0NhcmRQcm9qZWN0IG9uIFByb2plY3Qge1xyXG4gICAgaWRcclxuICAgIHJvbGVcclxuICAgIHZpc2liaWxpdHlcclxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQWN0aW9uc19Qcm9qZWN0XHJcbiAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3RcclxuICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xyXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYClcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzQ2FyZF9Nb2RlbCBvbiBNb2RlbCB7XHJcbiAgICBpZFxyXG4gICAgaG9tZVZpZXcge1xyXG4gICAgICBpZFxyXG4gICAgICByZXNvdXJjZUlkc1xyXG4gICAgfVxyXG4gICAgbGFzdFVwbG9hZDogdXBsb2FkcyhpbnB1dDogeyBsaW1pdDogMSwgY3Vyc29yOiBudWxsIH0pIHtcclxuICAgICAgaXRlbXMge1xyXG4gICAgICAgIGlkXHJcbiAgICAgICAgdXBkYXRlZEF0XHJcbiAgICAgICAgY29udmVydGVkU3RhdHVzXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxhc3RWZXJzaW9uOiB2ZXJzaW9ucyhsaW1pdDogMSwgY3Vyc29yOiBudWxsKSB7XHJcbiAgICAgIGl0ZW1zIHtcclxuICAgICAgICBpZFxyXG4gICAgICAgIGNyZWF0ZWRBdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5gKVxyXG5cclxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzPHtcclxuICAoZTogJ2NsaWNrJywgZXZlbnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZFxyXG59PigpXHJcblxyXG5jb25zdCBwcm9wcyA9IHdpdGhEZWZhdWx0cyhcclxuICBkZWZpbmVQcm9wczx7XHJcbiAgICBwcm9qZWN0SWQ6IHN0cmluZ1xyXG4gICAgbW9kZWw6IFByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1GcmFnbWVudCB8IFBlbmRpbmdGaWxlVXBsb2FkRnJhZ21lbnRcclxuICAgIHByb2plY3Q6IE9wdGlvbmFsPFByb2plY3RQYWdlTW9kZWxzQ2FyZFByb2plY3RGcmFnbWVudD5cclxuICAgIHNob3dWZXJzaW9ucz86IGJvb2xlYW5cclxuICAgIHNob3dBY3Rpb25zPzogYm9vbGVhblxyXG4gICAgZGlzYWJsZURlZmF1bHRMaW5rPzogYm9vbGVhblxyXG4gICAgc21hbGxWaWV3PzogYm9vbGVhblxyXG4gIH0+KCksXHJcbiAge1xyXG4gICAgc2hvd1ZlcnNpb25zOiB0cnVlLFxyXG4gICAgc2hvd0FjdGlvbnM6IHRydWUsXHJcbiAgICBzbWFsbFZpZXc6IGZhbHNlXHJcbiAgfVxyXG4pXHJcblxyXG5jb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxyXG5jb25zdCBpc0F1dG9tYXRlTW9kdWxlRW5hYmxlZCA9IHVzZUlzQXV0b21hdGVNb2R1bGVFbmFibGVkKClcclxuXHJcbmNvbnN0IGltcG9ydEFyZWEgPSByZWYoXHJcbiAgbnVsbCBhcyBOdWxsYWJsZTx7XHJcbiAgICB0cmlnZ2VyUGlja2VyOiAoKSA9PiB2b2lkXHJcbiAgfT5cclxuKVxyXG5cclxuY29uc3QgYWN0aW9ucyA9IHJlZihcclxuICBudWxsIGFzIE51bGxhYmxlPHtcclxuICAgIHNob3dVcGxvYWRzOiAoKSA9PiB2b2lkXHJcbiAgfT5cclxuKVxyXG5cclxuY29uc3QgaXNWZXJzaW9uVXBsb2FkaW5nID0gcmVmKGZhbHNlKVxyXG5jb25zdCBzaG93QWN0aW9uc01lbnUgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGhvdmVyZWQgPSByZWYoZmFsc2UpXHJcblxyXG5jb25zdCBzaG93TGFzdFVwbG9hZEZhaWxlZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBpZiAoaXNQZW5kaW5nTW9kZWxGcmFnbWVudChwcm9wcy5tb2RlbCkpIHJldHVybiBmYWxzZVxyXG4gIGNvbnN0IGxhc3RVcGxvYWQgPSBwcm9wcy5tb2RlbC5sYXN0VXBsb2FkPy5pdGVtc1swXVxyXG4gIGNvbnN0IGxhc3RWZXJzaW9uID0gcHJvcHMubW9kZWwubGFzdFZlcnNpb24/Lml0ZW1zWzBdXHJcblxyXG4gIC8vIE9ubHkgc2hvdyBpZiBsYXN0IHVwbG9hZCBmYWlsZWQgJiB0aGVyZSBpcyBubyBsYXN0IHZlcnNpb24sXHJcbiAgLy8gb3IgbGFzdCB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gbGFzdCB1cGxvYWRcclxuICBpZiAobGFzdFVwbG9hZD8uY29udmVydGVkU3RhdHVzICE9PSBGaWxlVXBsb2FkQ29udmVydGVkU3RhdHVzLkVycm9yKSByZXR1cm4gZmFsc2VcclxuICBpZiAoIWxhc3RWZXJzaW9uKSByZXR1cm4gdHJ1ZVxyXG4gIHJldHVybiBkYXlqcyhsYXN0VXBsb2FkLnVwZGF0ZWRBdCkuaXNBZnRlcihkYXlqcyhsYXN0VmVyc2lvbi5jcmVhdGVkQXQpKVxyXG59KVxyXG5cclxuY29uc3QgY29udGFpbmVyQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBjb25zdCBjbGFzc1BhcnRzID0gW1xyXG4gICAgJ2dyb3VwIHJvdW5kZWQteGwgYmctZm91bmRhdGlvbiBib3JkZXIgYm9yZGVyLW91dGxpbmUtMyBob3Zlcjpib3JkZXItb3V0bGluZS01IHctZnVsbCB6LVswXSdcclxuICBdXHJcblxyXG4gIGlmICh2ZXJzaW9uQ291bnQudmFsdWUgPiAwKSB7XHJcbiAgICBjbGFzc1BhcnRzLnB1c2goJ2N1cnNvci1wb2ludGVyJylcclxuICB9XHJcblxyXG4gIHJldHVybiBjbGFzc1BhcnRzLmpvaW4oJyAnKVxyXG59KVxyXG5jb25zdCBuYW1lUGFydHMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgbW9kZWwgPSBwcm9wcy5tb2RlbFxyXG4gIGNvbnN0IG1vZGVsTmFtZSA9IGlzUGVuZGluZ01vZGVsRnJhZ21lbnQobW9kZWwpID8gbW9kZWwubW9kZWxOYW1lIDogbW9kZWwubmFtZVxyXG4gIGNvbnN0IHNwbGl0TmFtZSA9IG1vZGVsTmFtZS5zcGxpdCgnLycpXHJcbiAgaWYgKHNwbGl0TmFtZS5sZW5ndGggPT09IDEpIHJldHVybiBbbnVsbCwgbW9kZWxOYW1lXVxyXG5cclxuICBjb25zdCBkaXNwbGF5TmFtZSA9IHNwbGl0TmFtZS5wb3AoKVxyXG4gIHJldHVybiBbc3BsaXROYW1lLmpvaW4oJy8nKSArICcvJywgZGlzcGxheU5hbWVdXHJcbn0pXHJcblxyXG5jb25zdCBtb2RlbFVybCA9IGNvbXB1dGVkKCgpID0+IGdldE1vZGVsSXRlbVJvdXRlKHByb3BzLm1vZGVsKSlcclxuXHJcbmNvbnN0IHByZXZpZXdVcmwgPSBjb21wdXRlZCgoKSA9PlxyXG4gIGlzUGVuZGluZ01vZGVsRnJhZ21lbnQocHJvcHMubW9kZWwpID8gbnVsbCA6IHByb3BzLm1vZGVsLnByZXZpZXdVcmxcclxuKVxyXG5jb25zdCBkZWZhdWx0TGlua0Rpc2FibGVkID0gY29tcHV0ZWQoXHJcbiAgKCkgPT4gcHJvcHMuZGlzYWJsZURlZmF1bHRMaW5rIHx8IHZlcnNpb25Db3VudC52YWx1ZSA8IDFcclxuKVxyXG5cclxuY29uc3QgdXBkYXRlZEF0RnVsbERhdGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIGlzUGVuZGluZ01vZGVsRnJhZ21lbnQocHJvcHMubW9kZWwpXHJcbiAgICA/IHByb3BzLm1vZGVsLmNvbnZlcnRlZExhc3RVcGRhdGUgfHwgcHJvcHMubW9kZWwudXBsb2FkRGF0ZVxyXG4gICAgOiBwcm9wcy5tb2RlbC51cGRhdGVkQXRcclxufSlcclxuXHJcbmNvbnN0IHZlcnNpb25Db3VudCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gaXNQZW5kaW5nTW9kZWxGcmFnbWVudChwcm9wcy5tb2RlbCkgPyAwIDogcHJvcHMubW9kZWwudmVyc2lvbkNvdW50LnRvdGFsQ291bnRcclxufSlcclxuXHJcbmNvbnN0IHBlbmRpbmdWZXJzaW9uID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGlmIChpc1BlbmRpbmdNb2RlbEZyYWdtZW50KHByb3BzLm1vZGVsKSkge1xyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IGxhc3RQZW5kaW5nVmVyc2lvbiA9IHByb3BzLm1vZGVsLnBlbmRpbmdJbXBvcnRlZFZlcnNpb25zWzBdXHJcbiAgY29uc3QgbGFzdFZlcnNpb24gPSBwcm9wcy5tb2RlbC5sYXN0VmVyc2lvbj8uaXRlbXNbMF1cclxuICBpZiAoIWxhc3RWZXJzaW9uIHx8ICFsYXN0UGVuZGluZ1ZlcnNpb24pIHJldHVybiBsYXN0UGVuZGluZ1ZlcnNpb25cclxuXHJcbiAgLy8gSWYgcGVuZGluZyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gbmV3ZXN0IHZlcnNpb24sIGhpZGUgaXQgKG1heSBiZSBhIHN0dWNrIGltcG9ydClcclxuICBpZiAoZGF5anMobGFzdFBlbmRpbmdWZXJzaW9uLnVwZGF0ZWRBdCkuaXNCZWZvcmUoZGF5anMobGFzdFZlcnNpb24uY3JlYXRlZEF0KSkpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbGFzdFBlbmRpbmdWZXJzaW9uXHJcbn0pXHJcblxyXG5jb25zdCBvbkNhcmRDbGljayA9IChldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQpID0+IHtcclxuICBpZiAoXHJcbiAgICAhcHJldmlld1VybC52YWx1ZSAmJlxyXG4gICAgIXBlbmRpbmdWZXJzaW9uLnZhbHVlICYmXHJcbiAgICAhaXNQZW5kaW5nTW9kZWxGcmFnbWVudChwcm9wcy5tb2RlbClcclxuICApIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBlbWl0KCdjbGljaycsIGV2ZW50KVxyXG59XHJcblxyXG5jb25zdCBvblZlcnNpb25VcGxvYWRpbmcgPSAocGF5bG9hZDogRmlsZUFyZWFVcGxvYWRpbmdQYXlsb2FkKSA9PiB7XHJcbiAgaXNWZXJzaW9uVXBsb2FkaW5nLnZhbHVlID0gcGF5bG9hZC5pc1VwbG9hZGluZ1xyXG59XHJcblxyXG5jb25zdCB0cmlnZ2VyVmVyc2lvblVwbG9hZCA9ICgpID0+IHtcclxuICBpbXBvcnRBcmVhLnZhbHVlPy50cmlnZ2VyUGlja2VyKClcclxufVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9DYXJkLnZ1ZSJ9