329 lines
30 KiB
Plaintext
329 lines
30 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/automate/viewer/panel/FunctionRunRow.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/automate/function/Logo.vue";
|
|
import { default as __nuxt_component_1 } from "/_nuxt/components/automate/runs/AttachmentButton.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/automate/viewer/panel/FunctionRunRowObjectResult.vue";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createBlock as __createBlock,createElementVNode as __createElementVNode,createVNode as __createVNode,createElementBlock as __createElementBlock } 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 _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...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 { ChevronDownIcon } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_outline.js?v=e4f18c29";
|
|
import { AutomateRunStatus } from "/_nuxt/lib/common/generated/gql/graphql.ts";
|
|
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
|
|
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
|
|
import { useAutomationFunctionRunResults } from "/_nuxt/lib/automate/composables/runs.ts";
|
|
import { useRunStatusMetadata } from "/_nuxt/lib/automate/composables/runStatus.ts";
|
|
import { doesRouteFitTarget } from "/_nuxt/lib/common/helpers/route.ts";
|
|
|
|
import { computed, ref } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { useRoute } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "AutomateViewerPanelFunctionRunRow",
|
|
props: {
|
|
functionRun: { type: Object, required: true },
|
|
automationName: { type: String, required: true }
|
|
},
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
graphql(`
|
|
fragment AutomateViewerPanelFunctionRunRow_AutomateFunctionRun on AutomateFunctionRun {
|
|
id
|
|
results
|
|
status
|
|
statusMessage
|
|
contextView
|
|
function {
|
|
id
|
|
logo
|
|
name
|
|
}
|
|
createdAt
|
|
updatedAt
|
|
}
|
|
`);
|
|
const props = __props;
|
|
const { projectId } = useInjectedViewerState();
|
|
const results = useAutomationFunctionRunResults({
|
|
results: computed(() => props.functionRun.results)
|
|
});
|
|
const { metadata: statusMetaData } = useRunStatusMetadata({
|
|
status: computed(() => props.functionRun.status)
|
|
});
|
|
const route = useRoute();
|
|
const pageRunLimit = ref(5);
|
|
const expanded = ref(false);
|
|
const attachments = computed(
|
|
() => (results.value?.values.blobIds || []).filter((b) => !!b)
|
|
);
|
|
const objectResults = computed(() => results.value?.values.objectResults ?? []);
|
|
const hasValidContextView = computed(() => {
|
|
const ctxView = props.functionRun.contextView;
|
|
if (!ctxView?.length) return false;
|
|
const currentPath = route.fullPath;
|
|
return !doesRouteFitTarget(ctxView, currentPath);
|
|
});
|
|
const statusMessage = computed(() => {
|
|
const isFinished = ![
|
|
AutomateRunStatus.Initializing,
|
|
AutomateRunStatus.Running,
|
|
AutomateRunStatus.Pending
|
|
].includes(props.functionRun.status);
|
|
return isFinished ? props.functionRun.statusMessage ?? "No status message" : `Function is ${props.functionRun.status.toLowerCase()}.`;
|
|
});
|
|
const __returned__ = { props, projectId, results, statusMetaData, route, pageRunLimit, expanded, attachments, objectResults, hasValidContextView, statusMessage, get ChevronDownIcon() {
|
|
return ChevronDownIcon;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, openBlock as _openBlock, withDirectives as _withDirectives, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createTextVNode as _createTextVNode, withCtx as _withCtx } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "border border-outline-2 rounded-md space-y-2 overflow-hidden bg-foundation shadow-sm",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:2:3"
|
|
};
|
|
const _hoisted_2 = { "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:9:7" };
|
|
const _hoisted_3 = {
|
|
class: "font-medium text-body-2xs truncate",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:17:7"
|
|
};
|
|
const _hoisted_4 = {
|
|
class: "h-full grow flex justify-end",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:22:7"
|
|
};
|
|
const _hoisted_5 = {
|
|
class: "hover:bg-primary-muted hover:text-primary flex h-full items-center justify-center rounded",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:23:9"
|
|
};
|
|
const _hoisted_6 = {
|
|
key: 0,
|
|
class: "px-3 pb-2 space-y-4",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:32:5"
|
|
};
|
|
const _hoisted_7 = {
|
|
class: "space-y-1",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:34:7"
|
|
};
|
|
const _hoisted_8 = {
|
|
class: "text-body-2xs text-foreground-2 whitespace-pre-wrap",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:36:9"
|
|
};
|
|
const _hoisted_9 = {
|
|
key: 0,
|
|
class: "border-t pt-2 border-outline-2 space-y-1",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:42:7"
|
|
};
|
|
const _hoisted_10 = {
|
|
class: "ml-[2px] justify-start",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:47:9"
|
|
};
|
|
const _hoisted_11 = {
|
|
key: 1,
|
|
class: "border-t pt-2 border-outline-2",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:60:7"
|
|
};
|
|
const _hoisted_12 = { "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:61:9" };
|
|
const _hoisted_13 = {
|
|
key: 2,
|
|
class: "border-t pt-2 border-outline-2",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:73:7"
|
|
};
|
|
const _hoisted_14 = {
|
|
class: "space-y-1",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:75:9"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_AutomateFunctionLogo = __nuxt_component_0;
|
|
const _component_AutomateRunsAttachmentButton = __nuxt_component_1;
|
|
const _component_FormButton = __nuxt_component_2;
|
|
const _component_AutomateViewerPanelFunctionRunRowObjectResult = __nuxt_component_3;
|
|
const _directive_tippy = _resolveDirective("tippy");
|
|
return _openBlock(), _createElementBlock("div", _hoisted_1, [
|
|
_createElementVNode("button", {
|
|
class: "flex space-x-1.5 items-center max-w-full w-full px-2 py-1 h-8 transition hover:bg-primary-muted bg-foundation",
|
|
onClick: _cache[0] || (_cache[0] = ($event) => $setup.expanded = !$setup.expanded),
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:5:5"
|
|
}, [
|
|
_createElementVNode("div", _hoisted_2, [
|
|
_withDirectives((_openBlock(), _createBlock(_resolveDynamicComponent($setup.statusMetaData.icon), {
|
|
class: _normalizeClass(["h-4 w-4 outline-none", $setup.statusMetaData.iconColor]),
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:10:9"
|
|
}, null, 8, ["class"])), [
|
|
[_directive_tippy, $props.functionRun.status]
|
|
])
|
|
]),
|
|
_createVNode(_component_AutomateFunctionLogo, {
|
|
logo: $props.functionRun.function?.logo,
|
|
size: "xs",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:16:7"
|
|
}, null, 8, ["logo"]),
|
|
_createElementVNode(
|
|
"div",
|
|
_hoisted_3,
|
|
_toDisplayString($props.automationName ? $props.automationName + " / " : "") + _toDisplayString($props.functionRun.function?.name || "Unknown function"),
|
|
1
|
|
/* TEXT */
|
|
),
|
|
_createElementVNode("div", _hoisted_4, [
|
|
_createElementVNode("button", _hoisted_5, [
|
|
_createVNode($setup["ChevronDownIcon"], {
|
|
class: _normalizeClass(`h-3 w-3 transition ${!$setup.expanded ? "-rotate-90" : "rotate-0"}`),
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:26:11"
|
|
}, null, 8, ["class"])
|
|
])
|
|
])
|
|
]),
|
|
$setup.expanded ? (_openBlock(), _createElementBlock("div", _hoisted_6, [
|
|
_createCommentVNode(" Status message "),
|
|
_createElementVNode("div", _hoisted_7, [
|
|
_cache[2] || (_cache[2] = _createElementVNode(
|
|
"div",
|
|
{
|
|
class: "text-body-2xs font-medium text-foreground",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:35:9"
|
|
},
|
|
"Status",
|
|
-1
|
|
/* CACHED */
|
|
)),
|
|
_createElementVNode(
|
|
"div",
|
|
_hoisted_8,
|
|
_toDisplayString($setup.statusMessage),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_createCommentVNode(" Attachments "),
|
|
$setup.attachments.length !== 0 ? (_openBlock(), _createElementBlock("div", _hoisted_9, [
|
|
_cache[3] || (_cache[3] = _createElementVNode(
|
|
"div",
|
|
{
|
|
class: "text-body-2xs font-medium text-foreground-2",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:46:9"
|
|
},
|
|
"Attachments",
|
|
-1
|
|
/* CACHED */
|
|
)),
|
|
_createElementVNode("div", _hoisted_10, [
|
|
(_openBlock(true), _createElementBlock(
|
|
_Fragment,
|
|
null,
|
|
_renderList($setup.attachments, (id) => {
|
|
return _openBlock(), _createBlock(_component_AutomateRunsAttachmentButton, {
|
|
key: id,
|
|
"blob-id": id,
|
|
"project-id": $setup.projectId,
|
|
size: "xs",
|
|
link: "",
|
|
class: "mr-2",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:48:11"
|
|
}, null, 8, ["blob-id", "project-id"]);
|
|
}),
|
|
128
|
|
/* KEYED_FRAGMENT */
|
|
))
|
|
])
|
|
])) : _createCommentVNode("v-if", true),
|
|
_createCommentVNode(" Context view "),
|
|
$setup.hasValidContextView ? (_openBlock(), _createElementBlock("div", _hoisted_11, [
|
|
_createElementVNode("div", _hoisted_12, [
|
|
_createVNode(_component_FormButton, {
|
|
size: "sm",
|
|
color: "outline",
|
|
class: "truncate max-w-full",
|
|
to: $props.functionRun.contextView || "",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:62:11"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[4] || (_cache[4] = [
|
|
_createTextVNode(
|
|
" Open view ",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["to"])
|
|
])
|
|
])) : _createCommentVNode("v-if", true),
|
|
_createCommentVNode(" Results "),
|
|
!!$setup.objectResults.length ? (_openBlock(), _createElementBlock("div", _hoisted_13, [
|
|
_cache[5] || (_cache[5] = _createElementVNode(
|
|
"div",
|
|
{
|
|
class: "text-body-2xs font-medium text-foreground-2 mb-2",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:74:9"
|
|
},
|
|
"Results",
|
|
-1
|
|
/* CACHED */
|
|
)),
|
|
_createElementVNode("div", _hoisted_14, [
|
|
(_openBlock(true), _createElementBlock(
|
|
_Fragment,
|
|
null,
|
|
_renderList($setup.objectResults.slice(0, $setup.pageRunLimit), (result, index) => {
|
|
return _openBlock(), _createBlock(_component_AutomateViewerPanelFunctionRunRowObjectResult, {
|
|
key: index,
|
|
"function-id": $props.functionRun.function?.id,
|
|
result,
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:76:11"
|
|
}, null, 8, ["function-id", "result"]);
|
|
}),
|
|
128
|
|
/* KEYED_FRAGMENT */
|
|
)),
|
|
$setup.pageRunLimit < $setup.objectResults.length ? (_openBlock(), _createBlock(_component_FormButton, {
|
|
key: 0,
|
|
size: "sm",
|
|
color: "outline",
|
|
class: "w-full",
|
|
onClick: _cache[1] || (_cache[1] = ($event) => $setup.pageRunLimit += 10),
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:82:11"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createTextVNode(
|
|
" Load more (" + _toDisplayString($setup.objectResults.length - $setup.pageRunLimit) + " hidden results) ",
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
})) : _createCommentVNode("v-if", true)
|
|
])
|
|
])) : _createCommentVNode("v-if", true)
|
|
])) : _createCommentVNode("v-if", true)
|
|
]);
|
|
}
|
|
_sfc_main.__hmrId = "5b776507";
|
|
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/automate/viewer/panel/FunctionRunRow.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpR0EsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyx5QkFBeUI7QUFFbEMsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsdUNBQXVDO0FBQ2hELFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsMEJBQTBCOzs7Ozs7Ozs7Ozs7QUFFbkMsWUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxDQWVQO0FBRUQsVUFBTSxRQUFRO0FBS2QsVUFBTSxFQUFFLFVBQVUsSUFBSSx1QkFBdUI7QUFDN0MsVUFBTSxVQUFVLGdDQUFnQztBQUFBLE1BQzlDLFNBQVMsU0FBUyxNQUFNLE1BQU0sWUFBWSxPQUFPO0FBQUEsSUFDbkQsQ0FBQztBQUNELFVBQU0sRUFBRSxVQUFVLGVBQWUsSUFBSSxxQkFBcUI7QUFBQSxNQUN4RCxRQUFRLFNBQVMsTUFBTSxNQUFNLFlBQVksTUFBTTtBQUFBLElBQ2pELENBQUM7QUFDRCxVQUFNLFFBQVEsU0FBUztBQUV2QixVQUFNLGVBQWUsSUFBSSxDQUFDO0FBQzFCLFVBQU0sV0FBVyxJQUFJLEtBQUs7QUFFMUIsVUFBTSxjQUFjO0FBQUEsTUFBUyxPQUMxQixRQUFRLE9BQU8sT0FBTyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUFBLElBQ3pEO0FBQ0EsVUFBTSxnQkFBZ0IsU0FBUyxNQUFNLFFBQVEsT0FBTyxPQUFPLGlCQUFpQixDQUFDLENBQUM7QUFDOUUsVUFBTSxzQkFBc0IsU0FBUyxNQUFNO0FBQ3pDLFlBQU0sVUFBVSxNQUFNLFlBQVk7QUFDbEMsVUFBSSxDQUFDLFNBQVMsT0FBUSxRQUFPO0FBRTdCLFlBQU0sY0FBYyxNQUFNO0FBQzFCLGFBQU8sQ0FBQyxtQkFBbUIsU0FBUyxXQUFXO0FBQUEsSUFDakQsQ0FBQztBQUVELFVBQU0sZ0JBQWdCLFNBQVMsTUFBTTtBQUNuQyxZQUFNLGFBQWEsQ0FDakI7QUFBQSxRQUNFLGtCQUFrQjtBQUFBLFFBQ2xCLGtCQUFrQjtBQUFBLFFBQ2xCLGtCQUFrQjtBQUFBLE1BQ3BCLEVBQ0EsU0FBUyxNQUFNLFlBQVksTUFBTTtBQUVuQyxhQUFPLGFBQ0gsTUFBTSxZQUFZLGlCQUFpQixzQkFDbkMsZUFBZSxNQUFNLFlBQVksT0FBTyxZQUFZLENBQUM7QUFBQSxJQUMzRCxDQUFDOzs7Ozs7Ozs7O0VBbEtHLE9BQU07QUFBQSxFQUF1RixvQkFBaUI7O3FCQU12RyxvQkFBaUIsMERBQXlEOztFQVExRSxPQUFNO0FBQUEsRUFBcUMsb0JBQWlCOzs7RUFLNUQsT0FBTTtBQUFBLEVBQStCLG9CQUFpQjs7O0VBRXZELE9BQU07QUFBQSxFQUE0RixvQkFBaUI7Ozs7RUFRcEcsT0FBTTtBQUFBLEVBQXNCLG9CQUFpQjs7O0VBRTNELE9BQU07QUFBQSxFQUFZLG9CQUFpQjs7O0VBRWpDLE9BQU07QUFBQSxFQUFzRCxvQkFBaUI7Ozs7RUFRbEYsT0FBTTtBQUFBLEVBQTJDLG9CQUFpQjs7O0VBRzdELE9BQU07QUFBQSxFQUF5QixvQkFBaUI7Ozs7RUFhdkIsT0FBTTtBQUFBLEVBQWlDLG9CQUFpQjs7c0JBQ2pGLG9CQUFpQiwyREFBMEQ7OztFQVkvQyxPQUFNO0FBQUEsRUFBaUMsb0JBQWlCOzs7RUFFcEYsT0FBTTtBQUFBLEVBQVksb0JBQWlCOzs7Ozs7Ozt1QkF6RTlDLG9CQTZGTSxPQTdGTixZQTZGTTtBQUFBLElBMUZKLG9CQTBCUztBQUFBLE1BekJQLE9BQU07QUFBQSxNQUNMLFNBQUssc0NBQUUsa0JBQVEsQ0FBSTtBQUFBLE1BQVUsb0JBQWlCO0FBQUE7TUFFL0Msb0JBTU0sT0FOTixZQU1NO0FBQUEsdUNBTEosYUFJRSx5QkFISyxzQkFBZSxJQUFJO0FBQUEsVUFFdkIsT0FBSyx5Q0FBMkIsc0JBQWUsU0FBUztBQUFBLFVBQUcsb0JBQWlCO0FBQUE7NkJBRHBFLG1CQUFZLE1BQU07QUFBQTs7TUFJL0IsYUFBaUo7QUFBQSxRQUExSCxNQUFNLG1CQUFZLFVBQVU7QUFBQSxRQUFNLE1BQUs7QUFBQSxRQUFLLG9CQUFpQjtBQUFBO01BQ3BGO0FBQUEsUUFHTTtBQUFBLFFBSE47QUFBQSxRQUdNLGlCQUZELHdCQUFpQix3QkFBYywrQkFDN0IsbUJBQVksVUFBVSxRQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFHakMsb0JBUU0sT0FSTixZQVFNO0FBQUEsUUFQSixvQkFNUyxVQU5ULFlBTVM7QUFBQSxVQUhQLGFBRUU7QUFBQSxZQURDLE9BQUssdUNBQXlCLGtCQUFRO0FBQUEsWUFBZ0Msb0JBQWlCO0FBQUE7Ozs7SUFLckYsaUNBQVgsb0JBOERNLE9BOUROLFlBOERNO0FBQUEsTUE3REo7QUFBQSxNQUNBLG9CQUtNLE9BTE4sWUFLTTtBQUFBLGtDQUpKO0FBQUEsVUFBK0k7QUFBQTtBQUFBLFlBQTFJLE9BQU07QUFBQSxZQUE0QyxvQkFBaUI7QUFBQTtVQUEyRDtBQUFBLFVBQU07QUFBQTtBQUFBO0FBQUEsUUFDekk7QUFBQSxVQUVNO0FBQUEsVUFGTjtBQUFBLFVBRU0saUJBREQsb0JBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtNQUlwQjtBQUFBLE1BRVEsbUJBQVksV0FBTSxtQkFEMUIsb0JBZ0JNLE9BaEJOLFlBZ0JNO0FBQUEsa0NBWko7QUFBQSxVQUFzSjtBQUFBO0FBQUEsWUFBakosT0FBTTtBQUFBLFlBQThDLG9CQUFpQjtBQUFBO1VBQTJEO0FBQUEsVUFBVztBQUFBO0FBQUE7QUFBQSxRQUNoSixvQkFVTSxPQVZOLGFBVU07QUFBQSw2QkFUSjtBQUFBLFlBUUU7QUFBQTtBQUFBLHdCQVBhLG9CQUFXLENBQWpCLE9BQUU7bUNBRFgsYUFRRTtBQUFBLGdCQU5DLEtBQUs7QUFBQSxnQkFDTCxXQUFTO0FBQUEsZ0JBQ1QsY0FBWTtBQUFBLGdCQUNiLE1BQUs7QUFBQSxnQkFDTDtBQUFBLGdCQUNBLE9BQU07QUFBQSxnQkFBTyxvQkFBaUI7QUFBQTs7Ozs7OztNQUlwQztBQUFBLE1BQ1csNENBQVgsb0JBV00sT0FYTixhQVdNO0FBQUEsUUFWSixvQkFTTSxPQVROLGFBU007QUFBQSxVQVJKLGFBT2E7QUFBQSxZQU5YLE1BQUs7QUFBQSxZQUNMLE9BQU07QUFBQSxZQUNOLE9BQU07QUFBQSxZQUNMLElBQUksbUJBQVksZUFBVztBQUFBLFlBQVEsb0JBQWlCO0FBQUE7OEJBQ3RELE1BRUQ7QUFBQTtnQkFGQztBQUFBLGdCQUVEO0FBQUE7QUFBQTtBQUFBOzs7Ozs7TUFHSjtBQUFBLFFBQ2EscUJBQWMsd0JBQTNCLG9CQW9CTSxPQXBCTixhQW9CTTtBQUFBLGtDQW5CSjtBQUFBLFVBQXVKO0FBQUE7QUFBQSxZQUFsSixPQUFNO0FBQUEsWUFBbUQsb0JBQWlCO0FBQUE7VUFBMkQ7QUFBQSxVQUFPO0FBQUE7QUFBQTtBQUFBLFFBQ2pKLG9CQWlCTSxPQWpCTixhQWlCTTtBQUFBLDZCQWhCSjtBQUFBLFlBS0U7QUFBQTtBQUFBLHdCQUowQixxQkFBYyxNQUFLLEdBQUksbUJBQVksSUFBckQsUUFBUSxVQUFLO21DQUR2QixhQUtFO0FBQUEsZ0JBSEMsS0FBSztBQUFBLGdCQUNMLGVBQWEsbUJBQVksVUFBVTtBQUFBLGdCQUNuQztBQUFBLGdCQUFnQixvQkFBaUI7QUFBQTs7Ozs7VUFHNUIsc0JBQWUscUJBQWMsd0JBRHJDLGFBU2E7QUFBQTtZQVBYLE1BQUs7QUFBQSxZQUNMLE9BQU07QUFBQSxZQUNOLE9BQU07QUFBQSxZQUNMLFNBQUssc0NBQUUsdUJBQVk7QUFBQSxZQUFRLG9CQUFpQjtBQUFBOzhCQUM5QyxNQUNZO0FBQUE7Z0JBRFosaUJBQ1ksaUJBQUcscUJBQWMsU0FBUyxtQkFBWSxJQUFHO0FBQUEsZ0JBRXREO0FBQUE7QUFBQTtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJGdW5jdGlvblJ1blJvdy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vdXRsaW5lLTIgcm91bmRlZC1tZCBzcGFjZS15LTIgb3ZlcmZsb3ctaGlkZGVuIGJnLWZvdW5kYXRpb24gc2hhZG93LXNtXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZToyOjNcIlxyXG4gID5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJmbGV4IHNwYWNlLXgtMS41IGl0ZW1zLWNlbnRlciBtYXgtdy1mdWxsIHctZnVsbCBweC0yIHB5LTEgaC04IHRyYW5zaXRpb24gaG92ZXI6YmctcHJpbWFyeS1tdXRlZCBiZy1mb3VuZGF0aW9uXCJcclxuICAgICAgQGNsaWNrPVwiZXhwYW5kZWQgPSAhZXhwYW5kZWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjU6NVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo5OjdcIj5cclxuICAgICAgICA8Q29tcG9uZW50XHJcbiAgICAgICAgICA6aXM9XCJzdGF0dXNNZXRhRGF0YS5pY29uXCJcclxuICAgICAgICAgIHYtdGlwcHk9XCJmdW5jdGlvblJ1bi5zdGF0dXNcIlxyXG4gICAgICAgICAgOmNsYXNzPVwiWydoLTQgdy00IG91dGxpbmUtbm9uZScsIHN0YXR1c01ldGFEYXRhLmljb25Db2xvcl1cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjEwOjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QXV0b21hdGVGdW5jdGlvbkxvZ28gOmxvZ289XCJmdW5jdGlvblJ1bi5mdW5jdGlvbj8ubG9nb1wiIHNpemU9XCJ4c1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6MTY6N1wiIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWJvZHktMnhzIHRydW5jYXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZToxNzo3XCI+XHJcbiAgICAgICAge3sgYXV0b21hdGlvbk5hbWUgPyBhdXRvbWF0aW9uTmFtZSArICcgLyAnIDogJydcclxuICAgICAgICB9fXt7IGZ1bmN0aW9uUnVuLmZ1bmN0aW9uPy5uYW1lIHx8ICdVbmtub3duIGZ1bmN0aW9uJyB9fVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgZ3JvdyBmbGV4IGp1c3RpZnktZW5kXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZToyMjo3XCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJob3ZlcjpiZy1wcmltYXJ5LW11dGVkIGhvdmVyOnRleHQtcHJpbWFyeSBmbGV4IGgtZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6MjM6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPENoZXZyb25Eb3duSWNvblxyXG4gICAgICAgICAgICA6Y2xhc3M9XCJgaC0zIHctMyB0cmFuc2l0aW9uICR7IWV4cGFuZGVkID8gJy1yb3RhdGUtOTAnIDogJ3JvdGF0ZS0wJ31gXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZToyNjoxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGRpdiB2LWlmPVwiZXhwYW5kZWRcIiBjbGFzcz1cInB4LTMgcGItMiBzcGFjZS15LTRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjMyOjVcIj5cclxuICAgICAgPCEtLSBTdGF0dXMgbWVzc2FnZSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6MzQ6N1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6MzU6OVwiPlN0YXR1czwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIHRleHQtZm9yZWdyb3VuZC0yIHdoaXRlc3BhY2UtcHJlLXdyYXBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjM2OjlcIj5cclxuICAgICAgICAgIHt7IHN0YXR1c01lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEF0dGFjaG1lbnRzIC0tPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgdi1pZj1cImF0dGFjaG1lbnRzLmxlbmd0aCAhPT0gMFwiXHJcbiAgICAgICAgY2xhc3M9XCJib3JkZXItdCBwdC0yIGJvcmRlci1vdXRsaW5lLTIgc3BhY2UteS0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo0Mjo3XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo0Njo5XCI+QXR0YWNobWVudHM8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzJweF0ganVzdGlmeS1zdGFydFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6NDc6OVwiPlxyXG4gICAgICAgICAgPEF1dG9tYXRlUnVuc0F0dGFjaG1lbnRCdXR0b25cclxuICAgICAgICAgICAgdi1mb3I9XCJpZCBpbiBhdHRhY2htZW50c1wiXHJcbiAgICAgICAgICAgIDprZXk9XCJpZFwiXHJcbiAgICAgICAgICAgIDpibG9iLWlkPVwiaWRcIlxyXG4gICAgICAgICAgICA6cHJvamVjdC1pZD1cInByb2plY3RJZFwiXHJcbiAgICAgICAgICAgIHNpemU9XCJ4c1wiXHJcbiAgICAgICAgICAgIGxpbmtcclxuICAgICAgICAgICAgY2xhc3M9XCJtci0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo0ODoxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBDb250ZXh0IHZpZXcgLS0+XHJcbiAgICAgIDxkaXYgdi1pZj1cImhhc1ZhbGlkQ29udGV4dFZpZXdcIiBjbGFzcz1cImJvcmRlci10IHB0LTIgYm9yZGVyLW91dGxpbmUtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6NjA6N1wiPlxyXG4gICAgICAgIDxkaXYgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo2MTo5XCI+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICBjb2xvcj1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRydW5jYXRlIG1heC13LWZ1bGxcIlxyXG4gICAgICAgICAgICA6dG89XCJmdW5jdGlvblJ1bi5jb250ZXh0VmlldyB8fCAnJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6NjI6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBPcGVuIHZpZXdcclxuICAgICAgICAgIDwvRm9ybUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gUmVzdWx0cyAtLT5cclxuICAgICAgPGRpdiB2LWlmPVwiISFvYmplY3RSZXN1bHRzLmxlbmd0aFwiIGNsYXNzPVwiYm9yZGVyLXQgcHQtMiBib3JkZXItb3V0bGluZS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo3Mzo3XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYm9keS0yeHMgZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kLTIgbWItMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6NzQ6OVwiPlJlc3VsdHM8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo3NTo5XCI+XHJcbiAgICAgICAgICA8QXV0b21hdGVWaWV3ZXJQYW5lbEZ1bmN0aW9uUnVuUm93T2JqZWN0UmVzdWx0XHJcbiAgICAgICAgICAgIHYtZm9yPVwiKHJlc3VsdCwgaW5kZXgpIGluIG9iamVjdFJlc3VsdHMuc2xpY2UoMCwgcGFnZVJ1bkxpbWl0KVwiXHJcbiAgICAgICAgICAgIDprZXk9XCJpbmRleFwiXHJcbiAgICAgICAgICAgIDpmdW5jdGlvbi1pZD1cImZ1bmN0aW9uUnVuLmZ1bmN0aW9uPy5pZFwiXHJcbiAgICAgICAgICAgIDpyZXN1bHQ9XCJyZXN1bHRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjc2OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICB2LWlmPVwicGFnZVJ1bkxpbWl0IDwgb2JqZWN0UmVzdWx0cy5sZW5ndGhcIlxyXG4gICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICBjb2xvcj1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXHJcbiAgICAgICAgICAgIEBjbGljaz1cInBhZ2VSdW5MaW1pdCArPSAxMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6ODI6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBMb2FkIG1vcmUgKHt7IG9iamVjdFJlc3VsdHMubGVuZ3RoIC0gcGFnZVJ1bkxpbWl0IH19XHJcbiAgICAgICAgICAgIGhpZGRlbiByZXN1bHRzKVxyXG4gICAgICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBDaGV2cm9uRG93bkljb24gfSBmcm9tICdAaGVyb2ljb25zL3Z1ZS8yNC9vdXRsaW5lJ1xyXG5pbXBvcnQgeyBBdXRvbWF0ZVJ1blN0YXR1cyB9IGZyb20gJ35+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbC9ncmFwaHFsJ1xyXG5pbXBvcnQgdHlwZSB7IEF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuRnJhZ21lbnQgfSBmcm9tICd+fi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuaW1wb3J0IHsgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB7IGdyYXBocWwgfSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbCdcclxuaW1wb3J0IHsgdXNlQXV0b21hdGlvbkZ1bmN0aW9uUnVuUmVzdWx0cyB9IGZyb20gJ34vbGliL2F1dG9tYXRlL2NvbXBvc2FibGVzL3J1bnMnXHJcbmltcG9ydCB7IHVzZVJ1blN0YXR1c01ldGFkYXRhIH0gZnJvbSAnfi9saWIvYXV0b21hdGUvY29tcG9zYWJsZXMvcnVuU3RhdHVzJ1xyXG5pbXBvcnQgeyBkb2VzUm91dGVGaXRUYXJnZXQgfSBmcm9tICd+L2xpYi9jb21tb24vaGVscGVycy9yb3V0ZSdcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IEF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuIG9uIEF1dG9tYXRlRnVuY3Rpb25SdW4ge1xyXG4gICAgaWRcclxuICAgIHJlc3VsdHNcclxuICAgIHN0YXR1c1xyXG4gICAgc3RhdHVzTWVzc2FnZVxyXG4gICAgY29udGV4dFZpZXdcclxuICAgIGZ1bmN0aW9uIHtcclxuICAgICAgaWRcclxuICAgICAgbG9nb1xyXG4gICAgICBuYW1lXHJcbiAgICB9XHJcbiAgICBjcmVhdGVkQXRcclxuICAgIHVwZGF0ZWRBdFxyXG4gIH1cclxuYClcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIGZ1bmN0aW9uUnVuOiBBdXRvbWF0ZVZpZXdlclBhbmVsRnVuY3Rpb25SdW5Sb3dfQXV0b21hdGVGdW5jdGlvblJ1bkZyYWdtZW50XHJcbiAgYXV0b21hdGlvbk5hbWU6IHN0cmluZ1xyXG59PigpXHJcblxyXG5jb25zdCB7IHByb2plY3RJZCB9ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcbmNvbnN0IHJlc3VsdHMgPSB1c2VBdXRvbWF0aW9uRnVuY3Rpb25SdW5SZXN1bHRzKHtcclxuICByZXN1bHRzOiBjb21wdXRlZCgoKSA9PiBwcm9wcy5mdW5jdGlvblJ1bi5yZXN1bHRzKVxyXG59KVxyXG5jb25zdCB7IG1ldGFkYXRhOiBzdGF0dXNNZXRhRGF0YSB9ID0gdXNlUnVuU3RhdHVzTWV0YWRhdGEoe1xyXG4gIHN0YXR1czogY29tcHV0ZWQoKCkgPT4gcHJvcHMuZnVuY3Rpb25SdW4uc3RhdHVzKVxyXG59KVxyXG5jb25zdCByb3V0ZSA9IHVzZVJvdXRlKClcclxuXHJcbmNvbnN0IHBhZ2VSdW5MaW1pdCA9IHJlZig1KVxyXG5jb25zdCBleHBhbmRlZCA9IHJlZihmYWxzZSlcclxuXHJcbmNvbnN0IGF0dGFjaG1lbnRzID0gY29tcHV0ZWQoKCkgPT5cclxuICAocmVzdWx0cy52YWx1ZT8udmFsdWVzLmJsb2JJZHMgfHwgW10pLmZpbHRlcigoYikgPT4gISFiKVxyXG4pXHJcbmNvbnN0IG9iamVjdFJlc3VsdHMgPSBjb21wdXRlZCgoKSA9PiByZXN1bHRzLnZhbHVlPy52YWx1ZXMub2JqZWN0UmVzdWx0cyA/PyBbXSlcclxuY29uc3QgaGFzVmFsaWRDb250ZXh0VmlldyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBjb25zdCBjdHhWaWV3ID0gcHJvcHMuZnVuY3Rpb25SdW4uY29udGV4dFZpZXdcclxuICBpZiAoIWN0eFZpZXc/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGN1cnJlbnRQYXRoID0gcm91dGUuZnVsbFBhdGhcclxuICByZXR1cm4gIWRvZXNSb3V0ZUZpdFRhcmdldChjdHhWaWV3LCBjdXJyZW50UGF0aClcclxufSlcclxuXHJcbmNvbnN0IHN0YXR1c01lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgaXNGaW5pc2hlZCA9ICEoXHJcbiAgICBbXHJcbiAgICAgIEF1dG9tYXRlUnVuU3RhdHVzLkluaXRpYWxpemluZyxcclxuICAgICAgQXV0b21hdGVSdW5TdGF0dXMuUnVubmluZyxcclxuICAgICAgQXV0b21hdGVSdW5TdGF0dXMuUGVuZGluZ1xyXG4gICAgXSBhcyBzdHJpbmdbXVxyXG4gICkuaW5jbHVkZXMocHJvcHMuZnVuY3Rpb25SdW4uc3RhdHVzKVxyXG5cclxuICByZXR1cm4gaXNGaW5pc2hlZFxyXG4gICAgPyBwcm9wcy5mdW5jdGlvblJ1bi5zdGF0dXNNZXNzYWdlID8/ICdObyBzdGF0dXMgbWVzc2FnZSdcclxuICAgIDogYEZ1bmN0aW9uIGlzICR7cHJvcHMuZnVuY3Rpb25SdW4uc3RhdHVzLnRvTG93ZXJDYXNlKCl9LmBcclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWUifQ== |