238 lines
20 KiB
Plaintext
238 lines
20 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/auth/LoginPanel.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/auth/WorkspaceInviteHeader.vue";
|
|
import { default as __nuxt_component_1 } from "/_nuxt/components/auth/third-party/LoginBlock.vue";
|
|
import { FormButton as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { default as __nuxt_component_3 } from "/_nuxt/components/auth/LoginWithEmailBlock.vue";
|
|
import { default as __nuxt_component_4 } from "/_nuxt/node_modules/nuxt/dist/app/components/nuxt-link.js?v=e4f18c29";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createElementVNode as __createElementVNode,createElementBlock as __createElementBlock,createBlock as __createBlock,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 _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
|
|
function _createBlock(...args) { return _interopVNode(__createBlock(...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 { useQuery } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
|
|
import { AuthStrategy } from "/_nuxt/lib/auth/helpers/strategies.ts";
|
|
import { useLoginOrRegisterUtils, useAuthManager } from "/_nuxt/lib/auth/composables/auth.ts";
|
|
import { LayoutDialog } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { registerRoute, ssoLoginRoute } from "/_nuxt/lib/common/helpers/route.ts";
|
|
import {
|
|
authLoginPanelQuery,
|
|
authLoginPanelWorkspaceInviteQuery
|
|
} from "/_nuxt/lib/auth/graphql/queries.ts";
|
|
|
|
import { useActiveUser, useIsWorkspacesEnabled, useIsWorkspacesSsoEnabled } from "/_nuxt/composables/globals.ts";
|
|
import { useRouter } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
|
|
import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "AuthLoginPanel",
|
|
props: {
|
|
dialogMode: { type: Boolean, required: false, default: false },
|
|
title: { type: String, required: false, default: "Speckle login" },
|
|
subtitle: { type: String, required: false }
|
|
},
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
const props = __props;
|
|
const { appId, challenge } = useLoginOrRegisterUtils();
|
|
const { isLoggedIn } = useActiveUser();
|
|
const { inviteToken } = useAuthManager();
|
|
const router = useRouter();
|
|
const isWorkspacesEnabled = useIsWorkspacesEnabled();
|
|
const isSsoEnabled = useIsWorkspacesSsoEnabled();
|
|
const { result } = useQuery(authLoginPanelQuery);
|
|
const { result: workspaceInviteResult } = useQuery(
|
|
authLoginPanelWorkspaceInviteQuery,
|
|
() => ({
|
|
token: inviteToken.value
|
|
}),
|
|
() => ({
|
|
enabled: isWorkspacesEnabled.value
|
|
})
|
|
);
|
|
const finalRegisterRoute = computed(() => {
|
|
const result2 = router.resolve({
|
|
path: registerRoute,
|
|
query: inviteToken.value ? { token: inviteToken.value } : {}
|
|
});
|
|
return result2.fullPath;
|
|
});
|
|
const concreteComponent = computed(() => {
|
|
return props.dialogMode ? LayoutDialog : "div";
|
|
});
|
|
const workspaceInvite = computed(() => workspaceInviteResult.value?.workspaceInvite);
|
|
const forcedInviteEmail = computed(() => workspaceInvite.value?.email);
|
|
const serverInfo = computed(() => result.value?.serverInfo);
|
|
const hasLocalStrategy = computed(
|
|
() => (serverInfo.value?.authStrategies || []).some((s) => s.id === AuthStrategy.Local)
|
|
);
|
|
const hasThirdPartyStrategies = computed(
|
|
() => serverInfo.value?.authStrategies.some((s) => s.id !== AuthStrategy.Local)
|
|
);
|
|
const __returned__ = { props, appId, challenge, isLoggedIn, inviteToken, router, isWorkspacesEnabled, isSsoEnabled, result, workspaceInviteResult, finalRegisterRoute, concreteComponent, workspaceInvite, forcedInviteEmail, serverInfo, hasLocalStrategy, hasThirdPartyStrategies, get ssoLoginRoute() {
|
|
return ssoLoginRoute;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { toDisplayString as _toDisplayString, openBlock as _openBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createTextVNode as _createTextVNode, withCtx as _withCtx, resolveDynamicComponent as _resolveDynamicComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "flex flex-col gap-4",
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:8:5"
|
|
};
|
|
const _hoisted_2 = {
|
|
key: 0,
|
|
class: "flex flex-col items-center gap-y-2 pb-4",
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:9:7"
|
|
};
|
|
const _hoisted_3 = {
|
|
class: "text-heading-xl text-center inline-block",
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:10:9"
|
|
};
|
|
const _hoisted_4 = {
|
|
class: "text-body-sm text-center text-foreground-2",
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:13:9"
|
|
};
|
|
const _hoisted_5 = { "data-v-inspector": "components/auth/LoginPanel.vue:36:7" };
|
|
const _hoisted_6 = {
|
|
key: 1,
|
|
class: "text-center text-body-xs text-foreground-3 mt-2 select-none",
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:42:9"
|
|
};
|
|
const _hoisted_7 = {
|
|
key: 1,
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:52:3"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_AuthWorkspaceInviteHeader = __nuxt_component_0;
|
|
const _component_AuthThirdPartyLoginBlock = __nuxt_component_1;
|
|
const _component_FormButton = __nuxt_component_2;
|
|
const _component_AuthLoginWithEmailBlock = __nuxt_component_3;
|
|
const _component_NuxtLink = __nuxt_component_4;
|
|
return !$setup.isLoggedIn ? (_openBlock(), _createBlock(_resolveDynamicComponent($setup.concreteComponent), {
|
|
key: 0,
|
|
"no-shadow": "",
|
|
class: "mx-auto w-full",
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:2:3"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createElementVNode("div", _hoisted_1, [
|
|
!$setup.workspaceInvite ? (_openBlock(), _createElementBlock("div", _hoisted_2, [
|
|
_createElementVNode(
|
|
"h1",
|
|
_hoisted_3,
|
|
_toDisplayString($props.title),
|
|
1
|
|
/* TEXT */
|
|
),
|
|
_createElementVNode(
|
|
"h2",
|
|
_hoisted_4,
|
|
_toDisplayString($props.subtitle),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
])) : (_openBlock(), _createBlock(_component_AuthWorkspaceInviteHeader, {
|
|
key: 1,
|
|
invite: $setup.workspaceInvite,
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:17:7"
|
|
}, null, 8, ["invite"])),
|
|
$setup.hasThirdPartyStrategies && $setup.serverInfo ? (_openBlock(), _createBlock(_component_AuthThirdPartyLoginBlock, {
|
|
key: 2,
|
|
"server-info": $setup.serverInfo,
|
|
challenge: $setup.challenge,
|
|
"app-id": $setup.appId,
|
|
"newsletter-consent": false,
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:18:7"
|
|
}, null, 8, ["server-info", "challenge", "app-id"])) : _createCommentVNode("v-if", true),
|
|
$setup.isSsoEnabled ? (_openBlock(), _createBlock(_component_FormButton, {
|
|
key: 3,
|
|
color: "outline",
|
|
"full-width": "",
|
|
size: "lg",
|
|
to: $setup.ssoLoginRoute,
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:25:7"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[0] || (_cache[0] = [
|
|
_createTextVNode(
|
|
" Continue with SSO ",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["to"])) : _createCommentVNode("v-if", true),
|
|
_cache[3] || (_cache[3] = _createElementVNode(
|
|
"div",
|
|
{
|
|
class: "h-px w-full bg-outline-3 mt-2 shrink-0",
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:35:7"
|
|
},
|
|
null,
|
|
-1
|
|
/* CACHED */
|
|
)),
|
|
_createElementVNode("div", _hoisted_5, [
|
|
$setup.hasLocalStrategy ? (_openBlock(), _createBlock(_component_AuthLoginWithEmailBlock, {
|
|
key: 0,
|
|
challenge: $setup.challenge,
|
|
"workspace-invite": $setup.workspaceInvite || void 0,
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:37:9"
|
|
}, null, 8, ["challenge", "workspace-invite"])) : _createCommentVNode("v-if", true),
|
|
!$setup.forcedInviteEmail ? (_openBlock(), _createElementBlock("div", _hoisted_6, [
|
|
_cache[2] || (_cache[2] = _createTextVNode(
|
|
" Don't have an account? ",
|
|
-1
|
|
/* CACHED */
|
|
)),
|
|
_createVNode(_component_NuxtLink, {
|
|
class: "text-foreground",
|
|
to: $setup.finalRegisterRoute,
|
|
"data-v-inspector": "components/auth/LoginPanel.vue:47:11"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[1] || (_cache[1] = [
|
|
_createTextVNode(
|
|
"Sign up",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["to"])
|
|
])) : _createCommentVNode("v-if", true)
|
|
])
|
|
])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
})) : (_openBlock(), _createElementBlock("div", _hoisted_7));
|
|
}
|
|
_sfc_main.__hmrId = "0fd6f685";
|
|
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/auth/LoginPanel.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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QUE7UUFHdkMscUNBRFIsYUFRYTtBQUFBO1VBTlgsT0FBTTtBQUFBLFVBQ047QUFBQSxVQUNBLE1BQUs7QUFBQSxVQUNKLElBQUk7QUFBQSxVQUFlLG9CQUFpQjtBQUFBOzRCQUN0QyxNQUVEO0FBQUE7Y0FGQztBQUFBLGNBRUQ7QUFBQTtBQUFBO0FBQUE7Ozs7a0NBRUE7QUFBQSxVQUE2RztBQUFBO0FBQUEsWUFBeEcsT0FBTTtBQUFBLFlBQXlDLG9CQUFpQjtBQUFBOzs7OztRQUNyRSxvQkFhTSxPQWJOLFlBYU07QUFBQSxVQVhJLHlDQURSLGFBSUU7QUFBQTtZQUZDLFdBQVc7QUFBQSxZQUNYLG9CQUFrQiwwQkFBbUI7QUFBQSxZQUFXLG9CQUFpQjtBQUFBO1dBRzNELDBDQURULG9CQU1NLE9BTk4sWUFNTTtBQUFBO2NBSEw7QUFBQSxjQUVDO0FBQUE7QUFBQTtBQUFBLHlCQUFxSTtBQUFBLGNBQTNILE9BQU07QUFBQSxjQUFtQixJQUFJO0FBQUEsY0FBb0Isb0JBQWlCO0FBQUE7Z0NBQXVDLE1BQU87QUFBQTtrQkFBUDtBQUFBLGtCQUFPO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O3VCQUtsSSxvQkFBcUUsT0FBckUsVUFBcUUiLCJuYW1lcyI6WyJyZXN1bHQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTG9naW5QYW5lbC52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxDb21wb25lbnRcclxuICAgIDppcz1cImNvbmNyZXRlQ29tcG9uZW50XCJcclxuICAgIHYtaWY9XCIhaXNMb2dnZWRJblwiXHJcbiAgICBuby1zaGFkb3dcclxuICAgIGNsYXNzPVwibXgtYXV0byB3LWZ1bGxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjI6M1wiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjg6NVwiPlxyXG4gICAgICA8ZGl2IHYtaWY9XCIhd29ya3NwYWNlSW52aXRlXCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAteS0yIHBiLTRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjk6N1wiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cInRleHQtaGVhZGluZy14bCB0ZXh0LWNlbnRlciBpbmxpbmUtYmxvY2tcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjEwOjlcIj5cclxuICAgICAgICAgIHt7IHRpdGxlIH19XHJcbiAgICAgICAgPC9oMT5cclxuICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWJvZHktc20gdGV4dC1jZW50ZXIgdGV4dC1mb3JlZ3JvdW5kLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjEzOjlcIj5cclxuICAgICAgICAgIHt7IHN1YnRpdGxlIH19XHJcbiAgICAgICAgPC9oMj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxBdXRoV29ya3NwYWNlSW52aXRlSGVhZGVyIHYtZWxzZSA6aW52aXRlPVwid29ya3NwYWNlSW52aXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpblBhbmVsLnZ1ZToxNzo3XCIgLz5cclxuICAgICAgPEF1dGhUaGlyZFBhcnR5TG9naW5CbG9ja1xyXG4gICAgICAgIHYtaWY9XCJoYXNUaGlyZFBhcnR5U3RyYXRlZ2llcyAmJiBzZXJ2ZXJJbmZvXCJcclxuICAgICAgICA6c2VydmVyLWluZm89XCJzZXJ2ZXJJbmZvXCJcclxuICAgICAgICA6Y2hhbGxlbmdlPVwiY2hhbGxlbmdlXCJcclxuICAgICAgICA6YXBwLWlkPVwiYXBwSWRcIlxyXG4gICAgICAgIDpuZXdzbGV0dGVyLWNvbnNlbnQ9XCJmYWxzZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5QYW5lbC52dWU6MTg6N1wiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgdi1pZj1cImlzU3NvRW5hYmxlZFwiXHJcbiAgICAgICAgY29sb3I9XCJvdXRsaW5lXCJcclxuICAgICAgICBmdWxsLXdpZHRoXHJcbiAgICAgICAgc2l6ZT1cImxnXCJcclxuICAgICAgICA6dG89XCJzc29Mb2dpblJvdXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpblBhbmVsLnZ1ZToyNTo3XCJcclxuICAgICAgPlxyXG4gICAgICAgIENvbnRpbnVlIHdpdGggU1NPXHJcbiAgICAgIDwvRm9ybUJ1dHRvbj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoLXB4IHctZnVsbCBiZy1vdXRsaW5lLTMgbXQtMiBzaHJpbmstMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5QYW5lbC52dWU6MzU6N1wiIC8+XHJcbiAgICAgIDxkaXYgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpblBhbmVsLnZ1ZTozNjo3XCI+XHJcbiAgICAgICAgPEF1dGhMb2dpbldpdGhFbWFpbEJsb2NrXHJcbiAgICAgICAgICB2LWlmPVwiaGFzTG9jYWxTdHJhdGVneVwiXHJcbiAgICAgICAgICA6Y2hhbGxlbmdlPVwiY2hhbGxlbmdlXCJcclxuICAgICAgICAgIDp3b3Jrc3BhY2UtaW52aXRlPVwid29ya3NwYWNlSW52aXRlIHx8IHVuZGVmaW5lZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5QYW5lbC52dWU6Mzc6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICB2LWlmPVwiIWZvcmNlZEludml0ZUVtYWlsXCJcclxuICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1ib2R5LXhzIHRleHQtZm9yZWdyb3VuZC0zIG10LTIgc2VsZWN0LW5vbmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjQyOjlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIERvbid0IGhhdmUgYW4gYWNjb3VudD9cclxuICAgICAgICAgIDxOdXh0TGluayBjbGFzcz1cInRleHQtZm9yZWdyb3VuZFwiIDp0bz1cImZpbmFsUmVnaXN0ZXJSb3V0ZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5QYW5lbC52dWU6NDc6MTFcIj5TaWduIHVwPC9OdXh0TGluaz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L0NvbXBvbmVudD5cclxuICA8ZGl2IHYtZWxzZSBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjUyOjNcIiAvPlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyB1c2VRdWVyeSB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IEF1dGhTdHJhdGVneSB9IGZyb20gJ35+L2xpYi9hdXRoL2hlbHBlcnMvc3RyYXRlZ2llcydcclxuaW1wb3J0IHsgdXNlTG9naW5PclJlZ2lzdGVyVXRpbHMsIHVzZUF1dGhNYW5hZ2VyIH0gZnJvbSAnfn4vbGliL2F1dGgvY29tcG9zYWJsZXMvYXV0aCdcclxuaW1wb3J0IHsgTGF5b3V0RGlhbG9nIH0gZnJvbSAnQHNwZWNrbGUvdWktY29tcG9uZW50cydcclxuaW1wb3J0IHsgcmVnaXN0ZXJSb3V0ZSwgc3NvTG9naW5Sb3V0ZSB9IGZyb20gJ35+L2xpYi9jb21tb24vaGVscGVycy9yb3V0ZSdcclxuaW1wb3J0IHtcclxuICBhdXRoTG9naW5QYW5lbFF1ZXJ5LFxyXG4gIGF1dGhMb2dpblBhbmVsV29ya3NwYWNlSW52aXRlUXVlcnlcclxufSBmcm9tICd+L2xpYi9hdXRoL2dyYXBocWwvcXVlcmllcydcclxuXHJcbmNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKFxyXG4gIGRlZmluZVByb3BzPHtcclxuICAgIGRpYWxvZ01vZGU/OiBib29sZWFuXHJcbiAgICB0aXRsZT86IHN0cmluZ1xyXG4gICAgc3VidGl0bGU/OiBzdHJpbmdcclxuICB9PigpLFxyXG4gIHtcclxuICAgIGRpYWxvZ01vZGU6IGZhbHNlLFxyXG4gICAgdGl0bGU6ICdTcGVja2xlIGxvZ2luJ1xyXG4gIH1cclxuKVxyXG5cclxuY29uc3QgeyBhcHBJZCwgY2hhbGxlbmdlIH0gPSB1c2VMb2dpbk9yUmVnaXN0ZXJVdGlscygpXHJcbmNvbnN0IHsgaXNMb2dnZWRJbiB9ID0gdXNlQWN0aXZlVXNlcigpXHJcbmNvbnN0IHsgaW52aXRlVG9rZW4gfSA9IHVzZUF1dGhNYW5hZ2VyKClcclxuY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcclxuY29uc3QgaXNXb3Jrc3BhY2VzRW5hYmxlZCA9IHVzZUlzV29ya3NwYWNlc0VuYWJsZWQoKVxyXG5jb25zdCBpc1Nzb0VuYWJsZWQgPSB1c2VJc1dvcmtzcGFjZXNTc29FbmFibGVkKClcclxuXHJcbmNvbnN0IHsgcmVzdWx0IH0gPSB1c2VRdWVyeShhdXRoTG9naW5QYW5lbFF1ZXJ5KVxyXG5cclxuY29uc3QgeyByZXN1bHQ6IHdvcmtzcGFjZUludml0ZVJlc3VsdCB9ID0gdXNlUXVlcnkoXHJcbiAgYXV0aExvZ2luUGFuZWxXb3Jrc3BhY2VJbnZpdGVRdWVyeSxcclxuICAoKSA9PiAoe1xyXG4gICAgdG9rZW46IGludml0ZVRva2VuLnZhbHVlXHJcbiAgfSksXHJcbiAgKCkgPT4gKHtcclxuICAgIGVuYWJsZWQ6IGlzV29ya3NwYWNlc0VuYWJsZWQudmFsdWVcclxuICB9KVxyXG4pXHJcblxyXG5jb25zdCBmaW5hbFJlZ2lzdGVyUm91dGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gcm91dGVyLnJlc29sdmUoe1xyXG4gICAgcGF0aDogcmVnaXN0ZXJSb3V0ZSxcclxuICAgIHF1ZXJ5OiBpbnZpdGVUb2tlbi52YWx1ZSA/IHsgdG9rZW46IGludml0ZVRva2VuLnZhbHVlIH0gOiB7fVxyXG4gIH0pXHJcbiAgcmV0dXJuIHJlc3VsdC5mdWxsUGF0aFxyXG59KVxyXG5cclxuY29uc3QgY29uY3JldGVDb21wb25lbnQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIHByb3BzLmRpYWxvZ01vZGUgPyBMYXlvdXREaWFsb2cgOiAnZGl2J1xyXG59KVxyXG5cclxuY29uc3Qgd29ya3NwYWNlSW52aXRlID0gY29tcHV0ZWQoKCkgPT4gd29ya3NwYWNlSW52aXRlUmVzdWx0LnZhbHVlPy53b3Jrc3BhY2VJbnZpdGUpXHJcbmNvbnN0IGZvcmNlZEludml0ZUVtYWlsID0gY29tcHV0ZWQoKCkgPT4gd29ya3NwYWNlSW52aXRlLnZhbHVlPy5lbWFpbClcclxuXHJcbmNvbnN0IHNlcnZlckluZm8gPSBjb21wdXRlZCgoKSA9PiByZXN1bHQudmFsdWU/LnNlcnZlckluZm8pXHJcbmNvbnN0IGhhc0xvY2FsU3RyYXRlZ3kgPSBjb21wdXRlZCgoKSA9PlxyXG4gIChzZXJ2ZXJJbmZvLnZhbHVlPy5hdXRoU3RyYXRlZ2llcyB8fCBbXSkuc29tZSgocykgPT4gcy5pZCA9PT0gQXV0aFN0cmF0ZWd5LkxvY2FsKVxyXG4pXHJcblxyXG5jb25zdCBoYXNUaGlyZFBhcnR5U3RyYXRlZ2llcyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgc2VydmVySW5mby52YWx1ZT8uYXV0aFN0cmF0ZWdpZXMuc29tZSgocykgPT4gcy5pZCAhPT0gQXV0aFN0cmF0ZWd5LkxvY2FsKVxyXG4pXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlIn0= |