jiuyiUniapp/jiuyi2/node_modules/unplugin-vue2-script-setup/dist/esbuild.js

936 lines
130 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var unplugin$1 = require('unplugin');
var pluginutils = require('@rollup/pluginutils');
var MagicString = require('magic-string');
var reactivityTransform = require('@vue/reactivity-transform');
var utils = require('@antfu/utils');
var compilerCore = require('@vue/compiler-core');
var compilerDom = require('@vue/compiler-dom');
var shared = require('@vue/shared');
var babel = require('@babel/core');
var parser = require('@babel/parser');
var g = require('@babel/generator');
var babel_traverse = require('@babel/traverse');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var babel__namespace = /*#__PURE__*/_interopNamespaceDefault(babel);
var babel_traverse__namespace = /*#__PURE__*/_interopNamespaceDefault(babel_traverse);
var _a, _b, _c;
const t = (babel__namespace.default || babel__namespace).types;
const generate = g.default || g;
const traverse = (_c = (_b = (_a = babel_traverse__namespace == null ? void 0 : babel_traverse__namespace.default) == null ? void 0 : _a.default) != null ? _b : babel_traverse__namespace == null ? void 0 : babel_traverse__namespace.default) != null ? _c : babel_traverse__namespace;
function getIdentifierDeclarations(nodes) {
let result;
let programScopeUid;
traverse(t.file(t.program(nodes)), {
Program(path) {
result = new Set(Object.keys(path.scope.bindings));
programScopeUid = path.scope.uid;
},
// FIXME: babel bug, temporary add TSEnumDeclaration and TSModuleDeclaration logic
TSEnumDeclaration(path) {
if (path.scope.uid === programScopeUid)
result.add(path.node.id.name);
},
TSModuleDeclaration(path) {
if (path.scope.uid === programScopeUid) {
const id = path.node.id;
if (id.type === "Identifier")
result.add(id.name);
}
}
});
return Array.from(result);
}
function getFileGlobals(result) {
let globals;
let programScopeUid;
traverse(result, {
Program(path) {
globals = new Set(Object.keys(path.scope.globals));
programScopeUid = path.scope.uid;
},
// FIXME: babel bug, temporary add TSEnumDeclaration and TSModuleDeclaration logic
TSEnumDeclaration(path) {
if (path.scope.uid === programScopeUid)
globals.delete(path.node.id.name);
},
TSModuleDeclaration(path) {
if (path.scope.uid === programScopeUid) {
const id = path.node.id;
if (id.type === "Identifier")
globals.delete(id.name);
}
}
});
return Array.from(globals);
}
const pascalize = (str) => shared.capitalize(shared.camelize(str));
function exhaustiveCheckReturnUndefined(_param) {
return void 0;
}
var NodeTypes;
((NodeTypes2) => {
NodeTypes2.ROOT = 0;
NodeTypes2.ELEMENT = 1;
NodeTypes2.TEXT = 2;
NodeTypes2.COMMENT = 3;
NodeTypes2.SIMPLE_EXPRESSION = 4;
NodeTypes2.INTERPOLATION = 5;
NodeTypes2.ATTRIBUTE = 6;
NodeTypes2.DIRECTIVE = 7;
NodeTypes2.COMPOUND_EXPRESSION = 8;
NodeTypes2.IF = 9;
NodeTypes2.IF_BRANCH = 10;
NodeTypes2.FOR = 11;
NodeTypes2.TEXT_CALL = 12;
NodeTypes2.VNODE_CALL = 13;
NodeTypes2.JS_CALL_EXPRESSION = 14;
NodeTypes2.JS_OBJECT_EXPRESSION = 15;
NodeTypes2.JS_PROPERTY = 16;
NodeTypes2.JS_ARRAY_EXPRESSION = 17;
NodeTypes2.JS_FUNCTION_EXPRESSION = 18;
NodeTypes2.JS_CONDITIONAL_EXPRESSION = 19;
NodeTypes2.JS_CACHE_EXPRESSION = 20;
NodeTypes2.JS_BLOCK_STATEMENT = 21;
NodeTypes2.JS_TEMPLATE_LITERAL = 22;
NodeTypes2.JS_IF_STATEMENT = 23;
NodeTypes2.JS_ASSIGNMENT_EXPRESSION = 24;
NodeTypes2.JS_SEQUENCE_EXPRESSION = 25;
NodeTypes2.JS_RETURN_STATEMENT = 26;
})(NodeTypes || (NodeTypes = {}));
var ElementTypes;
((ElementTypes2) => {
ElementTypes2.ELEMENT = 0;
ElementTypes2.COMPONENT = 1;
ElementTypes2.SLOT = 2;
ElementTypes2.TEMPLATE = 3;
})(ElementTypes || (ElementTypes = {}));
const BUILD_IN_DIRECTIVES = /* @__PURE__ */ new Set([
"if",
"else",
"else-if",
"for",
"once",
"model",
"on",
"bind",
"slot",
"slot-scope",
"key",
"ref",
"text",
"html",
"show",
"pre",
"cloak"
// 'el',
// 'ref',
]);
function getComponents(node) {
var _a;
const current = node.type === NodeTypes.ELEMENT && node.tagType === ElementTypes.COMPONENT ? [node.tag] : node.type === NodeTypes.ELEMENT && node.tagType === ElementTypes.ELEMENT ? [node.tag] : [];
const children = node.type === NodeTypes.IF ? node.branches : node.type === NodeTypes.ELEMENT || node.type === NodeTypes.IF_BRANCH || node.type === NodeTypes.FOR ? node.children : node.type === NodeTypes.TEXT || node.type === NodeTypes.COMMENT || node.type === NodeTypes.COMPOUND_EXPRESSION || node.type === NodeTypes.TEXT_CALL || node.type === NodeTypes.INTERPOLATION ? [] : (_a = exhaustiveCheckReturnUndefined()) != null ? _a : [];
return [...current, ...children.flatMap(getComponents)];
}
function getDirectiveNames(node) {
if (node.type === NodeTypes.ELEMENT) {
const directives = node.props.flatMap(
(x) => x.type === NodeTypes.DIRECTIVE ? [x.name] : []
);
return [...directives, ...node.children.flatMap(getDirectiveNames)];
} else if (node.type === NodeTypes.IF) {
return node.branches.flatMap(getDirectiveNames);
} else if (node.type === NodeTypes.IF_BRANCH || node.type === NodeTypes.FOR) {
return node.children.flatMap(getDirectiveNames);
} else if (node.type === NodeTypes.INTERPOLATION || node.type === NodeTypes.COMPOUND_EXPRESSION || node.type === NodeTypes.TEXT || node.type === NodeTypes.COMMENT || node.type === NodeTypes.TEXT_CALL) {
return [];
} else {
return [];
}
}
function getFreeVariablesForText(input) {
const inputWithPrefix = input.trimStart()[0] === "{" ? `(${input})` : input;
return getFileGlobals(parser.parse(inputWithPrefix));
}
function getFreeVariablesForPropsNode(node) {
if (node.type === NodeTypes.DIRECTIVE) {
const arg = node.arg === void 0 ? [] : getFreeVariablesForNode(node.arg);
const exp = node.exp === void 0 ? [] : getFreeVariablesForNode(node.exp);
return [...arg, ...exp];
}
return [];
}
function getFreeVariablesForNode(node) {
var _a, _b, _c;
if (node.type === NodeTypes.SIMPLE_EXPRESSION) {
return node.isStatic ? [] : getFreeVariablesForText(node.content);
} else if (node.type === NodeTypes.COMPOUND_EXPRESSION) {
return node.children.flatMap(
(x) => typeof x !== "object" ? [] : getFreeVariablesForNode(x)
);
} else if (node.type === NodeTypes.INTERPOLATION) {
return getFreeVariablesForNode(node.content);
} else if (node.type === NodeTypes.ELEMENT) {
const children = node.children.flatMap(getFreeVariablesForNode);
const directiveProps = node.props.flatMap(
(x) => x.type === NodeTypes.DIRECTIVE ? [x] : []
);
const attributeProps = node.props.flatMap(
(x) => x.type === NodeTypes.ATTRIBUTE ? [x] : []
);
const refNode = attributeProps.find(
(node2) => node2.name === "ref" && node2.value !== void 0
);
const refIdentifier = (_a = refNode == null ? void 0 : refNode.value) == null ? void 0 : _a.content;
const vSlotNode = directiveProps.find((node2) => node2.name === "slot");
const vSlotArgIdentifiers = (vSlotNode == null ? void 0 : vSlotNode.arg) === void 0 ? [] : getFreeVariablesForNode(vSlotNode.arg);
const vSlotExpVariableShadowingIdentifiers = [];
const vForNode = directiveProps.find((node2) => node2.name === "for");
const vForIdentifiers = ((_b = vForNode == null ? void 0 : vForNode.exp) == null ? void 0 : _b.type) === NodeTypes.SIMPLE_EXPRESSION ? getFreeVariablesForText(
vForNode.exp.content.replace(/^.*\s(?:in|of)\s/, "")
) : [];
const vForExpVariableShadowingIdentifiers = [];
const props = directiveProps.filter(({ name }) => name !== "slot" && name !== "for").flatMap(getFreeVariablesForPropsNode);
const shadowingIdentifiers = /* @__PURE__ */ new Set([
...vSlotExpVariableShadowingIdentifiers,
...vForExpVariableShadowingIdentifiers
]);
return [
...vSlotArgIdentifiers,
refIdentifier,
...vForIdentifiers,
...[...children, ...props].filter((x) => !shadowingIdentifiers.has(x))
].filter(utils.notNullish);
} else if (node.type === NodeTypes.FOR) {
return [node.source, ...node.children].flatMap(getFreeVariablesForNode);
} else if (node.type === NodeTypes.IF) {
return ((_c = node.branches) != null ? _c : []).flatMap(getFreeVariablesForNode);
} else if (node.type === NodeTypes.IF_BRANCH) {
return [node.condition, ...node.children].filter(utils.notNullish).flatMap(getFreeVariablesForNode);
} else if (node.type === NodeTypes.TEXT || node.type === NodeTypes.COMMENT || node.type === NodeTypes.TEXT_CALL) {
return [];
} else {
return [];
}
}
function findReferencesForSFC(templateNode) {
var _a, _b, _c;
const components = (_a = templateNode == null ? void 0 : templateNode.children.flatMap(getComponents)) != null ? _a : [];
const directives = (_b = templateNode == null ? void 0 : templateNode.children.flatMap(getDirectiveNames)) != null ? _b : [];
const identifiers = (_c = templateNode == null ? void 0 : templateNode.children.flatMap(getFreeVariablesForNode)) != null ? _c : [];
return {
components,
directives,
identifiers
};
}
function getBabelParserOptions(lang) {
lang = lang || "js";
const pluginsDict = {
js: [],
ts: ["typescript"],
jsx: ["jsx"],
tsx: ["jsx", "typescript"]
};
const plugins = pluginsDict[lang];
if (plugins === void 0)
throw new SyntaxError(`Unsupported script language: ${lang}`);
return {
sourceType: "module",
plugins
};
}
async function parseSFC(code, id, options) {
var _a, _b, _c;
const elementChildren = compilerCore.baseParse(code, compilerDom.parserOptions).children.flatMap(
(x) => x.type === NodeTypes.ELEMENT && x.tagType === ElementTypes.ELEMENT ? [x] : []
);
const templateNode = elementChildren.find((x) => x.tag === "template");
const [scriptSetupChildNodes, scriptChildNodes] = utils.partition(
elementChildren.filter((x) => x.tag === "script"),
(x) => x.props.some((p) => p.type === NodeTypes.ATTRIBUTE && p.name === "setup")
);
const getScriptTagMeta = (n, astTransforms = (x) => x) => {
var _a2, _b2, _c2, _d, _e, _f;
if (n === void 0) {
const content2 = "";
const ast2 = parser.parse(content2, {
sourceType: "module",
plugins: []
}).program;
return {
start: 0,
end: 0,
contentStart: 0,
contentEnd: 0,
content: content2,
attrs: {},
found: false,
ast: ast2
};
}
const attrs = Object.fromEntries(
n.props.flatMap(
(x) => {
var _a3;
return !(x.type === NodeTypes.ATTRIBUTE && typeof ((_a3 = x.value) == null ? void 0 : _a3.content) === "string") ? [] : [[x.name, x.value.content]];
}
)
);
const content = (_b2 = (_a2 = n.children[0]) == null ? void 0 : _a2.loc.source) != null ? _b2 : "";
const contentStart = (_d = (_c2 = n.children[0]) == null ? void 0 : _c2.loc.start.offset) != null ? _d : 0;
const contentEnd = (_f = (_e = n.children[0]) == null ? void 0 : _e.loc.end.offset) != null ? _f : 0;
const ast = astTransforms(
parser.parse(content, getBabelParserOptions(attrs.lang)).program
);
return {
start: n.loc.start.offset,
end: n.loc.end.offset,
contentStart,
contentEnd,
content,
attrs,
found: true,
ast
};
};
const scriptSetup = getScriptTagMeta(
scriptSetupChildNodes[0],
(_a = options == null ? void 0 : options.astTransforms) == null ? void 0 : _a.scriptSetup
);
const script = getScriptTagMeta(
scriptChildNodes[0],
(_b = options == null ? void 0 : options.astTransforms) == null ? void 0 : _b.script
);
if (script.found && scriptSetup.found && scriptSetup.attrs.lang !== script.attrs.lang) {
throw new SyntaxError(
"<script setup> language must be the same as <script>"
);
}
const codeOfTemplate = templateNode == null ? void 0 : templateNode.props.some(
(p) => {
var _a2;
return p.type === NodeTypes.ATTRIBUTE && p.name === "lang" && ((_a2 = p.value) == null ? void 0 : _a2.type) === NodeTypes.TEXT && p.value.content === "pug";
}
) ? compilerCore.baseParse(
(await import('pug')).compile(
templateNode.children.map((x) => x.loc.source).join(""),
{
filename: id
}
)(),
compilerDom.parserOptions
) : templateNode;
const result = codeOfTemplate ? findReferencesForSFC(codeOfTemplate) : void 0;
return {
id,
template: {
components: new Set(result == null ? void 0 : result.components.map(pascalize)),
directives: new Set(
result == null ? void 0 : result.directives.filter((x) => !BUILD_IN_DIRECTIVES.has(x)).map(shared.camelize)
),
identifiers: new Set(result == null ? void 0 : result.identifiers)
},
scriptSetup,
script,
parserOptions: getBabelParserOptions(
(_c = script.attrs.lang) != null ? _c : scriptSetup.attrs.lang
),
extraDeclarations: []
};
}
const DEFINE_PROPS = "defineProps";
const DEFINE_EMITS = "defineEmits";
const DEFINE_EXPOSE = "defineExpose";
const WITH_DEFAULTS = "withDefaults";
function applyMacros(nodes) {
let hasDefinePropsCall = false;
let hasDefineEmitCall = false;
let propsRuntimeDecl;
let propsRuntimeDefaults;
let propsTypeDecl;
let propsTypeDeclRaw;
let emitsRuntimeDecl;
let emitsTypeDecl;
let emitsTypeDeclRaw;
let exposeDecl;
const typeDeclaredProps = {};
const declaredTypes = {};
function error(msg, _node) {
throw new Error(msg);
}
function processDefineProps(node) {
if (!isCallOf(node, DEFINE_PROPS))
return false;
if (hasDefinePropsCall)
error(`duplicate ${DEFINE_PROPS}() call`);
hasDefinePropsCall = true;
propsRuntimeDecl = node.arguments[0];
if (node.typeParameters) {
if (propsRuntimeDecl) {
error(
`${DEFINE_PROPS}() cannot accept both type and non-type arguments at the same time. Use one or the other.`);
}
propsTypeDeclRaw = node.typeParameters.params[0];
propsTypeDecl = resolveQualifiedType(
propsTypeDeclRaw,
(node2) => node2.type === "TSTypeLiteral"
);
if (!propsTypeDecl) {
error(
`type argument passed to ${DEFINE_PROPS}() must be a literal type, or a reference to an interface or literal type.`);
}
}
return true;
}
function processWithDefaults(node) {
if (!isCallOf(node, WITH_DEFAULTS))
return false;
if (processDefineProps(node.arguments[0])) {
if (propsRuntimeDecl) {
error(
`${WITH_DEFAULTS} can only be used with type-based ${DEFINE_PROPS} declaration.`);
}
propsRuntimeDefaults = node.arguments[1];
} else {
error(
`${WITH_DEFAULTS}' first argument must be a ${DEFINE_PROPS} call.`,
node.arguments[0] || node
);
}
return true;
}
function processDefineEmits(node) {
if (!isCallOf(node, DEFINE_EMITS))
return false;
if (hasDefineEmitCall)
error(`duplicate ${DEFINE_EMITS}() call`);
hasDefineEmitCall = true;
emitsRuntimeDecl = node.arguments[0];
if (node.typeParameters) {
if (emitsRuntimeDecl) {
error(
`${DEFINE_EMITS}() cannot accept both type and non-type arguments at the same time. Use one or the other.`);
}
emitsTypeDeclRaw = node.typeParameters.params[0];
emitsTypeDecl = resolveQualifiedType(
emitsTypeDeclRaw,
(node2) => node2.type === "TSFunctionType" || node2.type === "TSTypeLiteral"
);
if (!emitsTypeDecl) {
error(
`type argument passed to ${DEFINE_EMITS}() must be a function type, a literal type with call signatures, or a reference to the above types.`);
}
}
return true;
}
function resolveQualifiedType(node, qualifier) {
if (qualifier(node))
return node;
if (node.type === "TSTypeReference" && node.typeName.type === "Identifier") {
const refName = node.typeName.name;
const isQualifiedType = (node2) => {
if (node2.type === "TSInterfaceDeclaration" && node2.id.name === refName)
return node2.body;
else if (node2.type === "TSTypeAliasDeclaration" && node2.id.name === refName && qualifier(node2.typeAnnotation))
return node2.typeAnnotation;
else if (node2.type === "ExportNamedDeclaration" && node2.declaration)
return isQualifiedType(node2.declaration);
};
for (const node2 of nodes) {
const qualified = isQualifiedType(node2);
if (qualified)
return qualified;
}
}
}
function processDefineExpose(node) {
if (!isCallOf(node, DEFINE_EXPOSE))
return false;
if (exposeDecl)
error(`duplicate ${DEFINE_EXPOSE}() call`);
if (node.arguments.length !== 1)
error(`${DEFINE_EXPOSE}() requires one argument`);
exposeDecl = node.arguments[0];
return true;
}
function genRuntimeProps(props) {
const keys = Object.keys(props);
if (!keys.length)
return void 0;
const hasStaticDefaults = propsRuntimeDefaults && propsRuntimeDefaults.type === "ObjectExpression" && propsRuntimeDefaults.properties.every(
(node) => node.type === "ObjectProperty" && !node.computed
);
return t.objectExpression(
Object.entries(props).map(([key, value]) => {
const prop = hasStaticDefaults ? propsRuntimeDefaults.properties.find((node) => node.key.name === key) : void 0;
if (prop)
value.required = false;
const entries = Object.entries(value).map(
([key2, value2]) => key2 === "type" ? t.objectProperty(t.identifier(key2), typeof value2 === "string" ? t.identifier(value2) : t.arrayExpression(value2.map((i) => t.identifier(i)))) : t.objectProperty(t.identifier(key2), parser.parseExpression(JSON.stringify(value2)))
);
if (prop)
entries.push(t.objectProperty(t.identifier("default"), prop.value));
return t.objectProperty(
t.identifier(key),
t.objectExpression(entries)
);
})
);
}
function getProps() {
if (propsRuntimeDecl)
return propsRuntimeDecl;
if (propsTypeDecl) {
extractRuntimeProps(propsTypeDecl, typeDeclaredProps, declaredTypes);
return genRuntimeProps(typeDeclaredProps);
}
}
function throwIfAwait(node) {
if (node.type === "AwaitExpression")
error("top-level await is not supported in Vue 2");
}
nodes = nodes.map((raw) => {
let node = raw;
if (raw.type === "ExpressionStatement")
node = raw.expression;
if (node.type === "VariableDeclaration" && !node.declare) {
const total = node.declarations.length;
for (let i = 0; i < total; i++) {
const decl = node.declarations[i];
if (decl.init) {
if (processDefineEmits(decl.init))
decl.init = t.memberExpression(t.identifier("__ctx"), t.identifier("emit"));
else if (processDefineProps(decl.init) || processWithDefaults(decl.init))
decl.init = t.identifier("__props");
else
throwIfAwait(decl.init);
}
}
}
if (processWithDefaults(node) || processDefineEmits(node) || processDefineProps(node) || processDefineExpose(node))
return null;
throwIfAwait(node);
return raw;
}).filter(Boolean);
return {
nodes,
props: getProps(),
expose: exposeDecl
};
}
function isCallOf(node, test) {
return !!(node && node.type === "CallExpression" && node.callee.type === "Identifier" && (typeof test === "string" ? node.callee.name === test : test(node.callee.name)));
}
function extractRuntimeProps(node, props, declaredTypes) {
const members = node.type === "TSTypeLiteral" ? node.members : node.body;
for (const m of members) {
if ((m.type === "TSPropertySignature" || m.type === "TSMethodSignature") && m.key.type === "Identifier") {
let type;
if (m.type === "TSMethodSignature") {
type = ["Function"];
} else if (m.typeAnnotation) {
type = inferRuntimeType(
m.typeAnnotation.typeAnnotation,
declaredTypes
);
}
props[m.key.name] = {
key: m.key.name,
required: !m.optional,
type: (type == null ? void 0 : type.length) === 1 ? type[0] : type || "null"
};
}
}
}
function inferRuntimeType(node, declaredTypes) {
switch (node.type) {
case "TSStringKeyword":
return ["String"];
case "TSNumberKeyword":
return ["Number"];
case "TSBooleanKeyword":
return ["Boolean"];
case "TSObjectKeyword":
return ["Object"];
case "TSTypeLiteral":
return ["Object"];
case "TSFunctionType":
return ["Function"];
case "TSArrayType":
case "TSTupleType":
return ["Array"];
case "TSLiteralType":
switch (node.literal.type) {
case "StringLiteral":
return ["String"];
case "BooleanLiteral":
return ["Boolean"];
case "NumericLiteral":
case "BigIntLiteral":
return ["Number"];
default:
return ["null"];
}
case "TSTypeReference":
if (node.typeName.type === "Identifier") {
if (declaredTypes[node.typeName.name])
return declaredTypes[node.typeName.name];
switch (node.typeName.name) {
case "Array":
case "Function":
case "Object":
case "Set":
case "Map":
case "WeakSet":
case "WeakMap":
return [node.typeName.name];
case "Record":
case "Partial":
case "Readonly":
case "Pick":
case "Omit":
case "Exclude":
case "Extract":
case "Required":
case "InstanceType":
return ["Object"];
}
}
return ["null"];
case "TSParenthesizedType":
return inferRuntimeType(node.typeAnnotation, declaredTypes);
case "TSUnionType":
return [
...new Set(
[].concat(
...node.types.map((t2) => inferRuntimeType(t2, declaredTypes))
)
)
];
case "TSIntersectionType":
return ["Object"];
default:
return ["null"];
}
}
function isAsyncImport(node) {
if (t.isVariableDeclaration(node)) {
const declaration = node.declarations[0];
return declaration !== void 0 && t.isCallExpression(declaration.init) && t.isIdentifier(declaration.init.callee) && declaration.init.callee.name === "defineAsyncComponent";
}
return false;
}
function transformScriptSetup(sfc, options) {
var _a, _b;
const { scriptSetup, script, template } = sfc;
const { nodes: body, props, expose } = applyMacros(scriptSetup.ast.body);
const [hoisted, setupBody] = utils.partition(
body,
(n) => isAsyncImport(n) || t.isImportDeclaration(n) || t.isExportNamedDeclaration(n) || n.type.startsWith("TS")
);
const declarationArray = utils.uniq([
...getIdentifierDeclarations(hoisted),
...getIdentifierDeclarations(setupBody),
...getIdentifierDeclarations(script.ast.body)
]).filter(utils.notNullish);
const returns = declarationArray.filter((i) => template.identifiers.has(i)).map((i) => {
const id = t.identifier(i);
return t.objectProperty(id, id, false, true);
});
const components = Array.from(template.components).map(
(component) => {
var _a2;
return (_a2 = declarationArray.find((declare) => declare === component)) != null ? _a2 : declarationArray.find((declare) => pascalize(declare) === component);
}
).filter(utils.notNullish);
const directiveDeclaration = Array.from(template.directives).map((directive) => {
const identifier = declarationArray.find(
(declaration) => declaration === `v${shared.capitalize(directive)}`
);
if (identifier === void 0)
return void 0;
return { identifier, directive };
}).filter(utils.notNullish);
const __sfc = t.identifier("__sfc_main");
let hasBody = false;
const bodyNodes = script.ast.body.map((node) => {
if (node.type === "ExportDefaultDeclaration") {
hasBody = true;
return t.variableDeclaration("const", [
t.variableDeclarator(__sfc, node.declaration)
]);
}
return node;
});
let ast = t.program([
...sfc.extraDeclarations,
...hoisted,
...bodyNodes
]);
if (!hasBody) {
ast.body.push(
t.variableDeclaration("const", [
t.variableDeclarator(__sfc, t.objectExpression([]))
])
);
}
if (props) {
hasBody = true;
ast.body.push(
t.expressionStatement(
t.assignmentExpression(
"=",
t.memberExpression(__sfc, t.identifier("props")),
props
)
)
);
}
if (body.length) {
hasBody = true;
const returnExpr = expose ? t.callExpression(
t.memberExpression(t.identifier("Object"), t.identifier("assign")),
[t.objectExpression(returns), expose]
) : t.objectExpression(returns);
const returnStatement = t.returnStatement(returnExpr);
ast.body.push(
t.expressionStatement(
t.assignmentExpression(
"=",
t.memberExpression(__sfc, t.identifier("setup")),
t.arrowFunctionExpression(
[t.identifier("__props"), t.identifier("__ctx")],
t.blockStatement([...setupBody, returnStatement])
)
)
)
);
}
if (components.length) {
hasBody = true;
const componentsObject = t.objectExpression(
components.map((i) => {
const id = t.identifier(i);
return t.objectProperty(id, id, false, true);
})
);
ast.body.push(
t.expressionStatement(
t.assignmentExpression(
"=",
t.memberExpression(__sfc, t.identifier("components")),
t.callExpression(
t.memberExpression(t.identifier("Object"), t.identifier("assign")),
[
componentsObject,
t.memberExpression(__sfc, t.identifier("components"))
]
)
)
)
);
}
if (directiveDeclaration.length) {
hasBody = true;
const directivesObject = t.objectExpression(
directiveDeclaration.map(
({ directive, identifier }) => t.objectProperty(
t.identifier(directive),
t.identifier(identifier),
false,
false
)
)
);
ast.body.push(
t.expressionStatement(
t.assignmentExpression(
"=",
t.memberExpression(__sfc, t.identifier("directives")),
t.callExpression(
t.memberExpression(t.identifier("Object"), t.identifier("assign")),
[
directivesObject,
t.memberExpression(__sfc, t.identifier("directives"))
]
)
)
)
);
}
if (!hasBody && !(options == null ? void 0 : options.astTransforms)) {
return {
ast: null,
code: ""
};
}
ast.body.push(t.exportDefaultDeclaration(__sfc));
ast = ((_b = (_a = options == null ? void 0 : options.astTransforms) == null ? void 0 : _a.post) == null ? void 0 : _b.call(_a, ast, sfc)) || ast;
return {
ast,
code: generate(ast).code
};
}
function transformSfcRefSugar(sfc, options) {
const importedHelpers = /* @__PURE__ */ new Set();
for (const script of [sfc.script, sfc.scriptSetup]) {
if (reactivityTransform.shouldTransform(script.content)) {
const s = new MagicString(script.content);
const { importedHelpers: imports } = reactivityTransform.transformAST(script.ast, s);
Array.from(imports).forEach((helper) => importedHelpers.add(helper));
script.content = s.toString();
script.ast = parser.parse(script.content, sfc.parserOptions).program;
}
}
if (importedHelpers.size) {
sfc.extraDeclarations = [
t.importDeclaration(
Array.from(importedHelpers).map((i) => t.importSpecifier(t.identifier(`_${i}`), t.identifier(i))),
t.stringLiteral(options.importHelpersFrom)
)
];
}
}
function resolveOptions(options = {}) {
return Object.assign(
{},
{
sourceMap: true,
reactivityTransform: false,
importHelpersFrom: "@vue/composition-api",
astTransforms: {}
},
options
);
}
var __defProp = Object.defineProperty;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
const scriptSetupRE = /<script\s(.*\s)?setup(\s.*)?>/;
function shouldTransform(code, id, options) {
if (code.includes("export default __sfc_main"))
return false;
return (options == null ? void 0 : options.reactivityTransform) && reactivityTransform.shouldTransform(code) || scriptSetupRE.test(code);
}
async function transform(input, id, options) {
if (!shouldTransform(input, id, options))
return null;
const resolved = resolveOptions(options);
if (id.endsWith(".vue") || id.includes(".vue?vue"))
return await transformVue(input, id, resolved);
else
return transformNonVue(input, id, resolved);
}
function transformNonVue(input, id, options) {
if (options.reactivityTransform && reactivityTransform.shouldTransform(input)) {
return reactivityTransform.transform(input, {
filename: id,
sourceMap: options.sourceMap,
importHelpersFrom: options.importHelpersFrom
});
}
return null;
}
async function transformVue(input, id, options) {
const s = new MagicString(input);
const sfc = await parseSFC(input, id);
if (options.reactivityTransform)
transformSfcRefSugar(sfc, options);
const { code } = transformScriptSetup(sfc, options);
const attributes = __spreadValues(__spreadValues({}, sfc.script.attrs), sfc.scriptSetup.attrs);
delete attributes.setup;
const attr = Object.entries(attributes).map(([key, value]) => value ? `${key}="${value}"` : key).join(" ");
if (code) {
const block = `<script ${attr}>
${code}
<\/script>`;
s.remove(sfc.script.start, sfc.script.end);
if (sfc.scriptSetup.start !== sfc.scriptSetup.end) {
s.overwrite(
sfc.scriptSetup.start,
sfc.scriptSetup.end,
block
);
} else {
s.prependLeft(0, `${block}
`);
}
}
return {
code: s.toString(),
map: options.sourceMap ? s.generateMap({
source: id,
includeContent: true
}) : null
};
}
const unplugin = unplugin$1.createUnplugin((options = {}) => {
const filter = pluginutils.createFilter(
options.include || (options.reactivityTransform ? [/\.vue$/, /\.vue\?vue/, /\.[jt]sx?$/] : [/\.vue$/, /\.vue\?vue/]),
options.exclude || [/node_modules/, /\.git/, /\.nuxt/]
);
return {
name: "unplugin-vue2-script-setup",
enforce: "pre",
transformInclude(id) {
return filter(id);
},
async transform(code, id) {
try {
return await transform(code, id, options);
} catch (e) {
this.error(e);
}
}
};
});
var esbuild = unplugin.esbuild;
exports.default = esbuild;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNidWlsZC5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NvcmUvYmFiZWwudHMiLCIuLi9zcmMvY29yZS9pZGVudGlmaWVycy50cyIsIi4uL3NyYy9jb3JlL3V0aWxzLnRzIiwiLi4vc3JjL2NvcmUvcGFyc2VTRkMudHMiLCIuLi9zcmMvY29yZS9tYWNyb3MudHMiLCIuLi9zcmMvY29yZS90cmFuc2Zvcm1TY3JpcHRTZXR1cC50cyIsIi4uL3NyYy9jb3JlL3RyYW5zZm9ybVNmY1JlZlN1Z2FyLnRzIiwiLi4vc3JjL2NvcmUvb3B0aW9ucy50cyIsIi4uL3NyYy9jb3JlL3RyYW5zZm9ybS50cyIsIi4uL3NyYy9pbmRleC50cyIsIi4uL3NyYy9lc2J1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJhYmVsIGZyb20gJ0BiYWJlbC9jb3JlJ1xuaW1wb3J0IHsgcGFyc2UsIHBhcnNlRXhwcmVzc2lvbiB9IGZyb20gJ0BiYWJlbC9wYXJzZXInXG5pbXBvcnQgZyBmcm9tICdAYmFiZWwvZ2VuZXJhdG9yJ1xuaW1wb3J0ICogYXMgYmFiZWxfdHJhdmVyc2UgZnJvbSAnQGJhYmVsL3RyYXZlcnNlJ1xuXG5leHBvcnQgY29uc3QgdDogdHlwZW9mIGJhYmVsWyd0eXBlcyddID0gKChiYWJlbCBhcyBhbnkpLmRlZmF1bHQgfHwgYmFiZWwpLnR5cGVzXG5leHBvcnQgY29uc3QgZ2VuZXJhdGU6IHR5cGVvZiBnID0gKChnIGFzIGFueSkuZGVmYXVsdCB8fCBnKVxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlID0gKChiYWJlbF90cmF2ZXJzZSBhcyBhbnkpPy5kZWZhdWx0Py5kZWZhdWx0IGFzIG51bGwpID8/IGJhYmVsX3RyYXZlcnNlPy5kZWZhdWx0ID8/IGJhYmVsX3RyYXZlcnNlXG5leHBvcnQgeyBwYXJzZUV4cHJlc3Npb24sIHBhcnNlIH1cbiIsImltcG9ydCB0eXBlIHtcbiAgRXhwcmVzc2lvbixcbiAgRmlsZSxcbiAgUHJpdmF0ZU5hbWUsXG4gIFNwcmVhZEVsZW1lbnQsXG4gIFN0YXRlbWVudCxcbiAgVFNUeXBlLFxufSBmcm9tICdAYmFiZWwvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFBhcnNlUmVzdWx0IH0gZnJvbSAnQGJhYmVsL3BhcnNlcidcbmltcG9ydCB7IHQsIHRyYXZlcnNlIH0gZnJvbSAnLi9iYWJlbCdcblxuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aWZpZXJEZWNsYXJhdGlvbnMobm9kZXM6IFN0YXRlbWVudFtdKSB7XG4gIGxldCByZXN1bHQhOiBTZXQ8c3RyaW5nPlxuICBsZXQgcHJvZ3JhbVNjb3BlVWlkOiBudW1iZXJcbiAgdHJhdmVyc2UodC5maWxlKHQucHJvZ3JhbShub2RlcykpLCB7XG4gICAgUHJvZ3JhbShwYXRoKSB7XG4gICAgICByZXN1bHQgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHBhdGguc2NvcGUuYmluZGluZ3MpKVxuICAgICAgcHJvZ3JhbVNjb3BlVWlkID0gKHBhdGguc2NvcGUgYXMgYW55KS51aWRcbiAgICB9LFxuICAgIC8vIEZJWE1FOiBiYWJlbCBidWcsIHRlbXBvcmFyeSBhZGQgVFNFbnVtRGVjbGFyYXRpb24gYW5kIFRTTW9kdWxlRGVjbGFyYXRpb24gbG9naWNcbiAgICBUU0VudW1EZWNsYXJhdGlvbihwYXRoKSB7XG4gICAgICBpZiAoKHBhdGguc2NvcGUgYXMgYW55KS51aWQgPT09IHByb2dyYW1TY29wZVVpZClcbiAgICAgICAgcmVzdWx0LmFkZChwYXRoLm5vZGUuaWQubmFtZSlcbiAgICB9LFxuICAgIFRTTW9kdWxlRGVjbGFyYXRpb24ocGF0aCkge1xuICAgICAgaWYgKChwYXRoLnNjb3BlIGFzIGFueSkudWlkID09PSBwcm9ncmFtU2NvcGVVaWQpIHtcbiAgICAgICAgY29uc3QgaWQgPSBwYXRoLm5vZGUuaWRcbiAgICAgICAgaWYgKGlkLnR5cGUgPT09ICdJZGVudGlmaWVyJylcbiAgICAgICAgICByZXN1bHQuYWRkKGlkLm5hbWUpXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbiAgcmV0dXJuIEFycmF5LmZyb20ocmVzdWx0KVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBgZ2V0RmlsZUdsb2JhbHNgIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aWZpZXJVc2FnZXMobm9kZT86IEV4cHJlc3Npb24gfCBUU1R5cGUgfCBTcHJlYWRFbGVtZW50IHwgUHJpdmF0ZU5hbWUgfCBTdGF0ZW1lbnQgfCBudWxsLCBpZGVudGlmaWVycyA9IG5ldyBTZXQ8c3RyaW5nPigpKSB7XG4gIGlmICghbm9kZSlcbiAgICByZXR1cm4gaWRlbnRpZmllcnNcblxuICBpZiAobm9kZS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnKSB7XG4gICAgbm9kZS5ib2R5LmZvckVhY2goY2hpbGQgPT4gZ2V0SWRlbnRpZmllclVzYWdlcyhjaGlsZCwgaWRlbnRpZmllcnMpKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0V4cHJlc3Npb25TdGF0ZW1lbnQnKSB7XG4gICAgZ2V0SWRlbnRpZmllclVzYWdlcyhub2RlLmV4cHJlc3Npb24sIGlkZW50aWZpZXJzKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgaWRlbnRpZmllcnMuYWRkKG5vZGUubmFtZSlcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyB8fCBub2RlLnR5cGUgPT09ICdPcHRpb25hbE1lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgZ2V0SWRlbnRpZmllclVzYWdlcyhub2RlLm9iamVjdCwgaWRlbnRpZmllcnMpXG4gICAgaWYgKG5vZGUuY29tcHV0ZWQpXG4gICAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUucHJvcGVydHksIGlkZW50aWZpZXJzKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyB8fCBub2RlLnR5cGUgPT09ICdPcHRpb25hbENhbGxFeHByZXNzaW9uJykge1xuICAgIGdldElkZW50aWZpZXJVc2FnZXMobm9kZS5jYWxsZWUgYXMgRXhwcmVzc2lvbiwgaWRlbnRpZmllcnMpXG4gICAgbm9kZS5hcmd1bWVudHMuZm9yRWFjaChhcmcgPT4gZ2V0SWRlbnRpZmllclVzYWdlcyhhcmcgYXMgRXhwcmVzc2lvbiwgaWRlbnRpZmllcnMpKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0JpbmFyeUV4cHJlc3Npb24nIHx8IG5vZGUudHlwZSA9PT0gJ0xvZ2ljYWxFeHByZXNzaW9uJykge1xuICAgIGdldElkZW50aWZpZXJVc2FnZXMobm9kZS5sZWZ0LCBpZGVudGlmaWVycylcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUucmlnaHQsIGlkZW50aWZpZXJzKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ1VuYXJ5RXhwcmVzc2lvbicpIHtcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUuYXJndW1lbnQsIGlkZW50aWZpZXJzKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0Zvck9mU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdGb3JJblN0YXRlbWVudCcpIHtcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUucmlnaHQsIGlkZW50aWZpZXJzKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicpIHtcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUudGVzdCwgaWRlbnRpZmllcnMpXG4gICAgZ2V0SWRlbnRpZmllclVzYWdlcyhub2RlLmNvbnNlcXVlbnQsIGlkZW50aWZpZXJzKVxuICAgIGdldElkZW50aWZpZXJVc2FnZXMobm9kZS5hbHRlcm5hdGUsIGlkZW50aWZpZXJzKVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgbm9kZS5wcm9wZXJ0aWVzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgIGlmIChwcm9wLnR5cGUgPT09ICdPYmplY3RQcm9wZXJ0eScpIHtcbiAgICAgICAgaWYgKHByb3AuY29tcHV0ZWQpXG4gICAgICAgICAgZ2V0SWRlbnRpZmllclVzYWdlcyhwcm9wLmtleSwgaWRlbnRpZmllcnMpXG4gICAgICAgIGdldElkZW50aWZpZXJVc2FnZXMocHJvcC52YWx1ZSBhcyBFeHByZXNzaW9uLCBpZGVudGlmaWVycylcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHByb3AudHlwZSA9PT0gJ1NwcmVhZEVsZW1lbnQnKSB7XG4gICAgICAgIGdldElkZW50aWZpZXJVc2FnZXMocHJvcCwgaWRlbnRpZmllcnMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdBcnJheUV4cHJlc3Npb24nKSB7XG4gICAgbm9kZS5lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4gZ2V0SWRlbnRpZmllclVzYWdlcyhlbGVtZW50LCBpZGVudGlmaWVycykpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSAnU3ByZWFkRWxlbWVudCcgfHwgbm9kZS50eXBlID09PSAnUmV0dXJuU3RhdGVtZW50Jykge1xuICAgIGdldElkZW50aWZpZXJVc2FnZXMobm9kZS5hcmd1bWVudCwgaWRlbnRpZmllcnMpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSAnTmV3RXhwcmVzc2lvbicpIHtcbiAgICBnZXRJZGVudGlmaWVyVXNhZ2VzKG5vZGUuY2FsbGVlIGFzIEV4cHJlc3Npb24sIGlkZW50aWZpZXJzKVxuICAgIG5vZGUuYXJndW1lbnRzLmZvckVhY2goYXJnID0+IGdldElkZW50aWZpZXJVc2FnZXMoYXJnIGFzIEV4cHJlc3Npb24sIGlkZW50aWZpZXJzKSlcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicgfHwgbm9kZS50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbicgfHwgbm9kZS50eXBlID09PSAnRnVuY3Rpb25FeHByZXNzaW9uJykge1xuICAgIGdldElkZW50aWZpZXJVc2FnZXMobm9kZS5ib2R5LCBpZGVudGlmaWVycylcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdUZW1wbGF0ZUxpdGVyYWwnKSB7XG4gICAgbm9kZS5leHByZXNzaW9ucy5mb3JFYWNoKGV4cHIgPT4gZ2V0SWRlbnRpZmllclVzYWdlcyhleHByLCBpZGVudGlmaWVycykpXG4gIH1cbiAgLy8gZWxzZSB7XG4gIC8vICAgY29uc29sZS5sb2cobm9kZSlcbiAgLy8gfVxuICByZXR1cm4gaWRlbnRpZmllcnNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVHbG9iYWxzKHJlc3VsdDogUGFyc2VSZXN1bHQ8RmlsZT4pIHtcbiAgbGV0IGdsb2JhbHMhOiBTZXQ8c3RyaW5nPlxuICBsZXQgcHJvZ3JhbVNjb3BlVWlkOiBudW1iZXJcbiAgdHJhdmVyc2UocmVzdWx0LCB7XG4gICAgUHJvZ3JhbShwYXRoKSB7XG4gICAgICBnbG9iYWxzID0gbmV3IFNldChPYmplY3Qua2V5cygocGF0aC5zY29wZSBhcyBhbnkpLmdsb2JhbHMpKVxuICAgICAgcHJvZ3JhbVNjb3BlVWlkID0gKHBhdGguc2NvcGUgYXMgYW55KS51aWRcbiAgICB9LFxuICAgIC8vIEZJWE1FOiBiYWJlbCBidWcsIHRlbXBvcmFyeSBhZGQgVFNFbnVtRGVjbGFyYXRpb24gYW5kIFRTTW9kdWxlRGVjbGFyYXRpb24gbG9naWNcbiAgICBUU0VudW1EZWNsYXJhdGlvbihwYXRoKSB7XG4gICAgICBpZiAoKHBhdGguc2NvcGUgYXMgYW55KS51aWQgPT09IHByb2dyYW1TY29wZVVpZClcbiAgICAgICAgZ2xvYmFscy5kZWxldGUocGF0aC5ub2RlLmlkLm5hbWUpXG4gICAgfSxcbiAgICBUU01vZHVsZURlY2xhcmF0aW9uKHBhdGgpIHtcbiAgICAgIGlmICgocGF0aC5zY29wZSBhcyBhbnkpLnVpZCA9PT0gcHJvZ3JhbVNjb3BlVWlkKSB7XG4gICAgICAgIGNvbnN0IGlkID0gcGF0aC5ub2RlLmlkXG4gICAgICAgIGlmIChpZC50eXBlID09PSAnSWRlbnRpZmllcicpXG4gICAgICAgICAgZ2xvYmFscy5kZWxldGUoaWQubmFtZSlcbiAgICAgIH1cbiAgICB9LFxuICB9KVxuICByZXR1cm4gQXJyYXkuZnJvbShnbG9iYWxzKVxufVxuIiwiaW1wb3J0IHsgY2FtZWxpemUsIGNhcGl0YWxpemUgfSBmcm9tICdAdnVlL3NoYXJlZCdcblxuZXhwb3J0IGNvbnN0IHBhc2NhbGl6ZSA9IChzdHI6IHN0cmluZykgPT4gY2FwaXRhbGl6ZShjYW1lbGl6ZShzdHIpKVxuXG5leHBvcnQgY29uc3QgaXNOb3ROaWwgPSA8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBOb25OdWxsYWJsZTxUPiA9PiB2YWx1ZSAhPSBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBleGhhdXN0aXZlQ2hlY2tSZXR1cm5VbmRlZmluZWQoX3BhcmFtOiBuZXZlcikge1xuICByZXR1cm4gdW5kZWZpbmVkIGFzIG5ldmVyXG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBvbmUtdmFyICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlICovXG5pbXBvcnQgeyBub3ROdWxsaXNoLCBwYXJ0aXRpb24gfSBmcm9tICdAYW50ZnUvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFByb2dyYW0gfSBmcm9tICdAYmFiZWwvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFBhcnNlclBsdWdpbiB9IGZyb20gJ0BiYWJlbC9wYXJzZXInXG5pbXBvcnQgdHlwZSB7XG4gIEF0dHJpYnV0ZU5vZGUsXG4gIERpcmVjdGl2ZU5vZGUsXG4gIEV4cHJlc3Npb25Ob2RlLFxuICBQbGFpbkVsZW1lbnROb2RlLFxuICBSb290Tm9kZSxcbiAgVGVtcGxhdGVDaGlsZE5vZGUsXG59IGZyb20gJ0B2dWUvY29tcGlsZXItY29yZSdcbmltcG9ydCB7IGJhc2VQYXJzZSB9IGZyb20gJ0B2dWUvY29tcGlsZXItY29yZSdcbmltcG9ydCB7IHBhcnNlck9wdGlvbnMgfSBmcm9tICdAdnVlL2NvbXBpbGVyLWRvbSdcbmltcG9ydCB7IGNhbWVsaXplIH0gZnJvbSAnQHZ1ZS9zaGFyZWQnXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlZFNGQyxcbiAgU2NyaXB0U2V0dXBUcmFuc2Zvcm1PcHRpb25zLFxuICBTY3JpcHRUYWdNZXRhLFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGdldEZpbGVHbG9iYWxzIH0gZnJvbSAnLi9pZGVudGlmaWVycydcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSAnLi9iYWJlbCdcbmltcG9ydCB7IGV4aGF1c3RpdmVDaGVja1JldHVyblVuZGVmaW5lZCwgcGFzY2FsaXplIH0gZnJvbSAnLi91dGlscydcblxubmFtZXNwYWNlIE5vZGVUeXBlcyB7XG4gIGV4cG9ydCBjb25zdCBST09UID0gMCxcbiAgICBFTEVNRU5UID0gMSxcbiAgICBURVhUID0gMixcbiAgICBDT01NRU5UID0gMyxcbiAgICBTSU1QTEVfRVhQUkVTU0lPTiA9IDQsXG4gICAgSU5URVJQT0xBVElPTiA9IDUsXG4gICAgQVRUUklCVVRFID0gNixcbiAgICBESVJFQ1RJVkUgPSA3LFxuICAgIENPTVBPVU5EX0VYUFJFU1NJT04gPSA4LFxuICAgIElGID0gOSxcbiAgICBJRl9CUkFOQ0ggPSAxMCxcbiAgICBGT1IgPSAxMSxcbiAgICBURVhUX0NBTEwgPSAxMixcbiAgICBWTk9ERV9DQUxMID0gMTMsXG4gICAgSlNfQ0FMTF9FWFBSRVNTSU9OID0gMTQsXG4gICAgSlNfT0JKRUNUX0VYUFJFU1NJT04gPSAxNSxcbiAgICBKU19QUk9QRVJUWSA9IDE2LFxuICAgIEpTX0FSUkFZX0VYUFJFU1NJT04gPSAxNyxcbiAgICBKU19GVU5DVElPTl9FWFBSRVNTSU9OID0gMTgsXG4gICAgSlNfQ09ORElUSU9OQUxfRVhQUkVTU0lPTiA9IDE5LFxuICAgIEpTX0NBQ0hFX0VYUFJFU1NJT04gPSAyMCxcbiAgICBKU19CTE9DS19TVEFURU1FTlQgPSAyMSxcbiAgICBKU19URU1QTEFURV9MSVRFUkFMID0gMjIsXG4gICAgSlNfSUZfU1RBVEVNRU5UID0gMjMsXG4gICAgSlNfQVNTSUdOTUVOVF9FWFBSRVNTSU9OID0gMjQsXG4gICAgSlNfU0VRVUVOQ0VfRVhQUkVTU0lPTiA9IDI1LFxuICAgIEpTX1JFVFVSTl9TVEFURU1FTlQgPSAyNlxufVxuXG5uYW1lc3BhY2UgRWxlbWVudFR5cGVzIHtcbiAgZXhwb3J0IGNvbnN0IEVMRU1FTlQgPSAwLFxuICAgIENPTVBPTkVOVCA9IDEsXG4gICAgU0xPVCA9IDIsXG4gICAgVEVNUExBVEUgPSAzXG59XG5cbmNvbnN0IEJVSUxEX0lOX0RJUkVDVElWRVMgPSBuZXcgU2V0KFtcbiAgJ2lmJyxcbiAgJ2Vsc2UnLFxuICAnZWxzZS1pZicsXG4gICdmb3InLFxuICAnb25jZScsXG4gICdtb2RlbCcsXG4gICdvbicsXG4gICdiaW5kJyxcbiAgJ3Nsb3QnLFxuICAnc2xvdC1zY29wZScsXG4gICdrZXknLFxuICAncmVmJyxcbiAgJ3RleHQnLFxuICAnaHRtbCcsXG4gICdzaG93JyxcbiAgJ3ByZScsXG4gICdjbG9haycsXG4gIC8vICdlbCcsXG4gIC8vICdyZWYnLFxuXSlcblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50cyhub2RlOiBUZW1wbGF0ZUNoaWxkTm9kZSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgY3VycmVudFxuICAgID0gbm9kZS50eXBlID09PSBOb2RlVHlwZXMuRUxFTUVOVCAmJiBub2RlLnRhZ1R5cGUgPT09IEVsZW1lbnRUeXBlcy5DT01QT05FTlRcbiAgICAgID8gW25vZGUudGFnXVxuICAgICAgOiBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5FTEVNRU5UICYmIG5vZGUudGFnVHlwZSA9PT0gRWxlbWVudFR5cGVzLkVMRU1FTlRcbiAgICAgICAgPyBbbm9kZS50YWddXG4gICAgICAgIDogW11cblxuICBjb25zdCBjaGlsZHJlblxuICAgID0gbm9kZS50eXBlID09PSBOb2RlVHlwZXMuSUZcbiAgICAgID8gbm9kZS5icmFuY2hlc1xuICAgICAgOiBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5FTEVNRU5UXG4gICAgICAgIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLklGX0JSQU5DSFxuICAgICAgICB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5GT1JcbiAgICAgICAgPyBub2RlLmNoaWxkcmVuXG4gICAgICAgIDogbm9kZS50eXBlID09PSBOb2RlVHlwZXMuVEVYVFxuICAgICAgICB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5DT01NRU5UXG4gICAgICAgIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLkNPTVBPVU5EX0VYUFJFU1NJT05cbiAgICAgICAgfHwgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuVEVYVF9DQUxMXG4gICAgICAgIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLklOVEVSUE9MQVRJT05cbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBleGhhdXN0aXZlQ2hlY2tSZXR1cm5VbmRlZmluZWQobm9kZSkgPz8gW11cblxuICByZXR1cm4gWy4uLmN1cnJlbnQsIC4uLmNoaWxkcmVuLmZsYXRNYXAoZ2V0Q29tcG9uZW50cyldXG59XG5cbmZ1bmN0aW9uIGdldERpcmVjdGl2ZU5hbWVzKG5vZGU6IFRlbXBsYXRlQ2hpbGROb2RlKTogc3RyaW5nW10ge1xuICBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZXMuRUxFTUVOVCkge1xuICAgIGNvbnN0IGRpcmVjdGl2ZXMgPSBub2RlLnByb3BzLmZsYXRNYXAoeCA9PlxuICAgICAgeC50eXBlID09PSBOb2RlVHlwZXMuRElSRUNUSVZFID8gW3gubmFtZV0gOiBbXSxcbiAgICApXG4gICAgcmV0dXJuIFsuLi5kaXJlY3RpdmVzLCAuLi5ub2RlLmNoaWxkcmVuLmZsYXRNYXAoZ2V0RGlyZWN0aXZlTmFtZXMpXVxuICB9XG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLklGKSB7XG4gICAgcmV0dXJuIG5vZGUuYnJhbmNoZXMuZmxhdE1hcChnZXREaXJlY3RpdmVOYW1lcylcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5JRl9CUkFOQ0ggfHwgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuRk9SKSB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uZmxhdE1hcChnZXREaXJlY3RpdmVOYW1lcylcbiAgfVxuICBlbHNlIGlmIChcbiAgICBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5JTlRFUlBPTEFUSU9OXG4gICAgfHwgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuQ09NUE9VTkRfRVhQUkVTU0lPTlxuICAgIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLlRFWFRcbiAgICB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5DT01NRU5UXG4gICAgfHwgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuVEVYVF9DQUxMXG4gICkge1xuICAgIHJldHVybiBbXVxuICB9XG4gIGVsc2Uge1xuICAgIGV4aGF1c3RpdmVDaGVja1JldHVyblVuZGVmaW5lZChub2RlKVxuICAgIHJldHVybiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEZyZWVWYXJpYWJsZXNGb3JUZXh0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGlucHV0V2l0aFByZWZpeCA9IGlucHV0LnRyaW1TdGFydCgpWzBdID09PSAneycgPyBgKCR7aW5wdXR9KWAgOiBpbnB1dFxuICByZXR1cm4gZ2V0RmlsZUdsb2JhbHMocGFyc2UoaW5wdXRXaXRoUHJlZml4KSlcbn1cblxuZnVuY3Rpb24gZ2V0RnJlZVZhcmlhYmxlc0ZvclByb3BzTm9kZShcbiAgbm9kZTogQXR0cmlidXRlTm9kZSB8IERpcmVjdGl2ZU5vZGUsXG4pOiBzdHJpbmdbXSB7XG4gIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5ESVJFQ1RJVkUpIHtcbiAgICBjb25zdCBhcmcgPSBub2RlLmFyZyA9PT0gdW5kZWZpbmVkID8gW10gOiBnZXRGcmVlVmFyaWFibGVzRm9yTm9kZShub2RlLmFyZylcbiAgICBjb25zdCBleHAgPSBub2RlLmV4cCA9PT0gdW5kZWZpbmVkID8gW10gOiBnZXRGcmVlVmFyaWFibGVzRm9yTm9kZShub2RlLmV4cClcbiAgICByZXR1cm4gWy4uLmFyZywgLi4uZXhwXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5mdW5jdGlvbiBnZXRGcmVlVmFyaWFibGVzRm9yTm9kZShcbiAgbm9kZTogVGVtcGxhdGVDaGlsZE5vZGUgfCBFeHByZXNzaW9uTm9kZSxcbik6IHN0cmluZ1tdIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLlNJTVBMRV9FWFBSRVNTSU9OKSB7XG4gICAgcmV0dXJuIG5vZGUuaXNTdGF0aWMgPyBbXSA6IGdldEZyZWVWYXJpYWJsZXNGb3JUZXh0KG5vZGUuY29udGVudClcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5DT01QT1VORF9FWFBSRVNTSU9OKSB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uZmxhdE1hcCh4ID0+XG4gICAgICB0eXBlb2YgeCAhPT0gJ29iamVjdCcgPyBbXSA6IGdldEZyZWVWYXJpYWJsZXNGb3JOb2RlKHgpLFxuICAgIClcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5JTlRFUlBPTEFUSU9OKSB7XG4gICAgcmV0dXJuIGdldEZyZWVWYXJpYWJsZXNGb3JOb2RlKG5vZGUuY29udGVudClcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5FTEVNRU5UKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmZsYXRNYXAoZ2V0RnJlZVZhcmlhYmxlc0Zvck5vZGUpXG5cbiAgICBjb25zdCBkaXJlY3RpdmVQcm9wcyA9IG5vZGUucHJvcHMuZmxhdE1hcCh4ID0+XG4gICAgICB4LnR5cGUgPT09IE5vZGVUeXBlcy5ESVJFQ1RJVkUgPyBbeF0gOiBbXSxcbiAgICApXG4gICAgY29uc3QgYXR0cmlidXRlUHJvcHMgPSBub2RlLnByb3BzLmZsYXRNYXAoeCA9PlxuICAgICAgeC50eXBlID09PSBOb2RlVHlwZXMuQVRUUklCVVRFID8gW3hdIDogW10sXG4gICAgKVxuXG4gICAgY29uc3QgcmVmTm9kZSA9IGF0dHJpYnV0ZVByb3BzLmZpbmQoXG4gICAgICBub2RlID0+IG5vZGUubmFtZSA9PT0gJ3JlZicgJiYgbm9kZS52YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgIClcbiAgICBjb25zdCByZWZJZGVudGlmaWVyID0gcmVmTm9kZT8udmFsdWU/LmNvbnRlbnRcblxuICAgIGNvbnN0IHZTbG90Tm9kZSA9IGRpcmVjdGl2ZVByb3BzLmZpbmQobm9kZSA9PiBub2RlLm5hbWUgPT09ICdzbG90JylcbiAgICBjb25zdCB2U2xvdEFyZ0lkZW50aWZpZXJzXG4gICAgICA9IHZTbG90Tm9kZT8uYXJnID09PSB1bmRlZmluZWQgPyBbXSA6IGdldEZyZWVWYXJpYWJsZXNGb3JOb2RlKHZTbG90Tm9kZS5hcmcpXG4gICAgLy8gVE9ETzogVmFyaWFibGUgc2hhZG93aW5nXG4gICAgY29uc3QgdlNsb3RFeHBWYXJpYWJsZVNoYWRvd2luZ0lkZW50aWZpZXJzOiBzdHJpbmdbXSA9IFtdXG5cbiAgICBjb25zdCB2Rm9yTm9kZSA9IGRpcmVjdGl2ZVByb3BzLmZpbmQobm9kZSA9PiBub2RlLm5hbWUgPT09ICdmb3InKVxuICAgIGNvbnN0IHZGb3JJZGVudGlmaWVyc1xuICAgICAgPSB2Rm9yTm9kZT8uZXhwPy50eXBlID09PSBOb2RlVHlwZXMuU0lNUExFX0VYUFJFU1NJT05cbiAgICAgICAgPyBnZXRGcmVlVmFyaWFibGVzRm9yVGV4dChcbiAgICAgICAgICB2Rm9yTm9kZS5leHAuY29udGVudC5yZXBsYWNlKC9eLipcXHMoPzppbnxvZilcXHMvLCAnJyksXG4gICAgICAgIClcbiAgICAgICAgOiBbXVxuICAgIC8vIFRPRE86IFZhcmlhYmxlIHNoYWRvd2luZ1xuICAgIGNvbnN0IHZGb3JFeHBWYXJpYWJsZVNoYWRvd2luZ0lkZW50aWZpZXJzOiBzdHJpbmdbXSA9IFtdXG5cbiAgICBjb25zdCBwcm9wcyA9IGRpcmVjdGl2ZVByb3BzXG4gICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gbmFtZSAhPT0gJ3Nsb3QnICYmIG5hbWUgIT09ICdmb3InKVxuICAgICAgLmZsYXRNYXAoZ2V0RnJlZVZhcmlhYmxlc0ZvclByb3BzTm9kZSlcblxuICAgIGNvbnN0IHNoYWRvd2luZ0lkZW50aWZpZXJzID0gbmV3IFNldChbXG4gICAgICAuLi52U2xvdEV4cFZhcmlhYmxlU2hhZG93aW5nSWRlbnRpZmllcnMsXG4gICAgICAuLi52Rm9yRXhwVmFyaWFibGVTaGFkb3dpbmdJZGVudGlmaWVycyxcbiAgICBdKVxuICAgIHJldHVybiBbXG4gICAgICAuLi52U2xvdEFyZ0lkZW50aWZpZXJzLFxuICAgICAgcmVmSWRlbnRpZmllcixcbiAgICAgIC4uLnZGb3JJZGVudGlmaWVycyxcbiAgICAgIC4uLlsuLi5jaGlsZHJlbiwgLi4ucHJvcHNdLmZpbHRlcih4ID0+ICFzaGFkb3dpbmdJZGVudGlmaWVycy5oYXMoeCkpLFxuICAgIF0uZmlsdGVyKG5vdE51bGxpc2gpXG4gIH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZXMuRk9SKSB7XG4gICAgLy8gSWYgd2UgdXNlIGBiYXNlQ29tcGlsZXJgLCB3ZSBuZWVkIGFkZCB2YXJpYWJsZSBzaGFkb3dpbmcgaGVyZVxuICAgIC8vIEJ1dCB3ZSB1c2UgYGJhc2VQYXJzZWAgbm93LiBTbyB0aGlzIGJyYW5jaCB3aWxsIG5ldmVyIGJlIHJlYWNoZWQuXG4gICAgLy8gYE5vZGVUeXBlcy5JRmAgYW5kIGBOb2RlVHlwZXMuSUZfQlJBTkNIYCB3aWxsIG5ldmVyIGJlIHJlYWNoZWQsIGFsc28uXG5cbiAgICAvLyBjb25zdCB7IGtleUFsaWFzLCB2YWx1ZUFsaWFzIH0gPSBub2RlXG4gICAgcmV0dXJuIFtub2RlLnNvdXJjZSwgLi4ubm9kZS5jaGlsZHJlbl0uZmxhdE1hcChnZXRGcmVlVmFyaWFibGVzRm9yTm9kZSlcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5JRikge1xuICAgIHJldHVybiAobm9kZS5icmFuY2hlcyA/PyBbXSkuZmxhdE1hcChnZXRGcmVlVmFyaWFibGVzRm9yTm9kZSlcbiAgfVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5JRl9CUkFOQ0gpIHtcbiAgICByZXR1cm4gW25vZGUuY29uZGl0aW9uLCAuLi5ub2RlLmNoaWxkcmVuXVxuICAgICAgLmZpbHRlcihub3ROdWxsaXNoKVxuICAgICAgLmZsYXRNYXAoZ2V0RnJlZVZhcmlhYmxlc0Zvck5vZGUpXG4gIH1cbiAgZWxzZSBpZiAoXG4gICAgbm9kZS50eXBlID09PSBOb2RlVHlwZXMuVEVYVFxuICAgIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGVzLkNPTU1FTlRcbiAgICB8fCBub2RlLnR5cGUgPT09IE5vZGVUeXBlcy5URVhUX0NBTExcbiAgKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgZWxzZSB7XG4gICAgZXhoYXVzdGl2ZUNoZWNrUmV0dXJuVW5kZWZpbmVkKG5vZGUpXG4gICAgcmV0dXJuIFtdXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRSZWZlcmVuY2VzRm9yU0ZDKFxuICB0ZW1wbGF0ZU5vZGU6IFJvb3ROb2RlIHwgUGxhaW5FbGVtZW50Tm9kZSB8IHVuZGVmaW5lZCxcbikge1xuICBjb25zdCBjb21wb25lbnRzID0gdGVtcGxhdGVOb2RlPy5jaGlsZHJlbi5mbGF0TWFwKGdldENvbXBvbmVudHMpID8/IFtdXG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSB0ZW1wbGF0ZU5vZGU/LmNoaWxkcmVuLmZsYXRNYXAoZ2V0RGlyZWN0aXZlTmFtZXMpID8/IFtdXG4gIGNvbnN0IGlkZW50aWZpZXJzXG4gICAgPSB0ZW1wbGF0ZU5vZGU/LmNoaWxkcmVuLmZsYXRNYXAoZ2V0RnJlZVZhcmlhYmxlc0Zvck5vZGUpID8/IFtdXG5cbiAgcmV0dXJuIHtcbiAgICBjb21wb25lbnRzLFxuICAgIGRpcmVjdGl2ZXMsXG4gICAgaWRlbnRpZmllcnMsXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmFiZWxQYXJzZXJPcHRpb25zKGxhbmc6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgbGFuZyA9IGxhbmcgfHwgJ2pzJ1xuICBjb25zdCBwbHVnaW5zRGljdDogUmVjb3JkPHN0cmluZywgQXJyYXk8UGFyc2VyUGx1Z2luPj4gPSB7XG4gICAganM6IFtdLFxuICAgIHRzOiBbJ3R5cGVzY3JpcHQnXSxcbiAgICBqc3g6IFsnanN4J10sXG4gICAgdHN4OiBbJ2pzeCcsICd0eXBlc2NyaXB0J10sXG4gIH1cbiAgY29uc3QgcGx1Z2lucyA9IHBsdWdpbnNEaWN0W2xhbmddXG4gIGlmIChwbHVnaW5zID09PSB1bmRlZmluZWQpXG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCBzY3JpcHQgbGFuZ3VhZ2U6ICR7bGFuZ31gKVxuICByZXR1cm4ge1xuICAgIHNvdXJjZVR5cGU6ICdtb2R1bGUnIGFzIGNvbnN0LFxuICAgIHBsdWdpbnMsXG4gIH1cbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZVNGQyhcbiAgY29kZTogc3RyaW5nLFxuICBpZD86IHN0cmluZyxcbiAgb3B0aW9ucz86IFNjcmlwdFNldHVwVHJhbnNmb3JtT3B0aW9ucyxcbik6IFByb21pc2U8UGFyc2VkU0ZDPiB7XG4gIGNvbnN0IGVsZW1lbnRDaGlsZHJlbiA9IGJhc2VQYXJzZShjb2RlLCBwYXJzZXJPcHRpb25zKS5jaGlsZHJlbi5mbGF0TWFwKHggPT5cbiAgICB4LnR5cGUgPT09IE5vZGVUeXBlcy5FTEVNRU5UICYmIHgudGFnVHlwZSA9PT0gRWxlbWVudFR5cGVzLkVMRU1FTlRcbiAgICAgID8gW3hdXG4gICAgICA6IFtdLFxuICApXG4gIGNvbnN0IHRlbXBsYXRlTm9kZSA9IGVsZW1lbnRDaGlsZHJlbi5maW5kKHggPT4geC50YWcgPT09ICd0ZW1wbGF0ZScpXG5cbiAgY29uc3QgW3NjcmlwdFNldHVwQ2hpbGROb2Rlcywgc2NyaXB0Q2hpbGROb2Rlc10gPSBwYXJ0aXRpb24oXG4gICAgZWxlbWVudENoaWxkcmVuLmZpbHRlcih4ID0+IHgudGFnID09PSAnc2NyaXB0JyksXG4gICAgeCA9PiB4LnByb3BzLnNvbWUocCA9PiBwLnR5cGUgPT09IE5vZGVUeXBlcy5BVFRSSUJVVEUgJiYgcC5uYW1lID09PSAnc2V0dXAnKSxcbiAgKVxuXG4gIGNvbnN0IGdldFNjcmlwdFRhZ01ldGEgPSAoXG4gICAgbjogUGxhaW5FbGVtZW50Tm9kZSB8IHVuZGVmaW5lZCxcbiAgICBhc3RUcmFuc2Zvcm1zOiAoYXN0OiBQcm9ncmFtKSA9PiBQcm9ncmFtID0geCA9PiB4LFxuICApOiBTY3JpcHRUYWdNZXRhID0+IHtcbiAgICBpZiAobiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gJydcbiAgICAgIGNvbnN0IGFzdCA9IHBhcnNlKGNvbnRlbnQsIHtcbiAgICAgICAgc291cmNlVHlwZTogJ21vZHVsZScsXG4gICAgICAgIHBsdWdpbnM6IFtdLFxuICAgICAgfSkucHJvZ3JhbVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgIGVuZDogMCxcbiAgICAgICAgY29udGVudFN0YXJ0OiAwLFxuICAgICAgICBjb250ZW50RW5kOiAwLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBhdHRyczoge30sXG4gICAgICAgIGZvdW5kOiBmYWxzZSxcbiAgICAgICAgYXN0LFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhdHRycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIG4ucHJvcHMuZmxhdE1hcCh4ID0+XG4gICAgICAgICEoXG4gICAgICAgICAgeC50eXBlID09PSBOb2RlVHlwZXMuQVRUUklCVVRFICYmIHR5cGVvZiB4LnZhbHVlPy5jb250ZW50ID09PSAnc3RyaW5nJ1xuICAgICAgICApXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogW1t4Lm5hbWUsIHgudmFsdWUuY29udGVudF1dLFxuICAgICAgKSxcbiAgICApXG4gICAgY29uc3QgY29udGVudCA9IG4uY2hpbGRyZW5bMF0/LmxvYy5zb3VyY2UgPz8gJydcbiAgICBjb25zdCBjb250ZW50U3RhcnQgPSBuLmNoaWxkcmVuWzBdPy5sb2Muc3RhcnQub2Zmc2V0ID8/IDBcbiAgICBjb25zdCBjb250ZW50RW5kID0gbi5jaGlsZHJlblswXT8ubG9jLmVuZC5vZmZzZXQgPz8gMFxuICAgIGNvbnN0IGFzdCA9IGFzdFRyYW5zZm9ybXMoXG4gICAgICBwYXJzZShjb250ZW50LCBnZXRCYWJlbFBhcnNlck9wdGlvbnMoYXR0cnMubGFuZykpLnByb2dyYW0sXG4gICAgKVxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogbi5sb2Muc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kOiBuLmxvYy5lbmQub2Zmc2V0LFxuICAgICAgY29udGVudFN0YXJ0LFxuICAgICAgY29udGVudEVuZCxcbiAgICAgIGNvbnRlbnQsXG4gICAgICBhdHRycyxcbiAgICAgIGZvdW5kOiB0cnVlLFxuICAgICAgYXN0LFxuICAgIH1cbiAgfVxuICBjb25zdCBzY3JpcHRTZXR1cCA9IGdldFNjcmlwdFRhZ01ldGEoXG4gICAgc2NyaXB0U2V0dXBDaGlsZE5vZGVzWzBdLFxuICAgIG9wdGlvbnM/LmFzdFRyYW5zZm9ybXM/LnNjcmlwdFNldHVwLFxuICApXG4gIGNvbnN0IHNjcmlwdCA9IGdldFNjcmlwdFRhZ01ldGEoXG4gICAgc2NyaXB0Q2hpbGROb2Rlc1swXSxcbiAgICBvcHRpb25zPy5hc3RUcmFuc2Zvcm1zPy5zY3JpcHQsXG4gIClcblxuICBpZiAoXG4gICAgc2NyaXB0LmZvdW5kXG4gICAgJiYgc2NyaXB0U2V0dXAuZm91bmRcbiAgICAmJiBzY3JpcHRTZXR1cC5hdHRycy5sYW5nICE9PSBzY3JpcHQuYXR0cnMubGFuZ1xuICApIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXG4gICAgICAnPHNjcmlwdCBzZXR1cD4gbGFuZ3VhZ2UgbXVzdCBiZSB0aGUgc2FtZSBhcyA8c2NyaXB0PicsXG4gICAgKVxuICB9XG5cbiAgY29uc3QgY29kZU9mVGVtcGxhdGVcbiAgICA9IHRlbXBsYXRlTm9kZSA9PSBudWxsXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB0ZW1wbGF0ZU5vZGUucHJvcHMuc29tZShcbiAgICAgICAgcCA9PlxuICAgICAgICAgIHAudHlwZSA9PT0gTm9kZVR5cGVzLkFUVFJJQlVURVxuICAgICAgICAgICAgJiYgcC5uYW1lID09PSAnbGFuZydcbiAgICAgICAgICAgICYmIHAudmFsdWU/LnR5cGUgPT09IE5vZGVUeXBlcy5URVhUXG4gICAgICAgICAgICAmJiBwLnZhbHVlLmNvbnRlbnQgPT09ICdwdWcnLFxuICAgICAgKVxuICAgICAgICA/IGJhc2VQYXJzZShcbiAgICAgICAgICAoYXdhaXQgaW1wb3J0KCdwdWcnKSkuY29tcGlsZShcbiAgICAgICAgICAgIHRlbXBsYXRlTm9kZS5jaGlsZHJlbi5tYXAoeCA9PiB4LmxvYy5zb3VyY2UpLmpvaW4oJycpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWxlbmFtZTogaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICkoKSxcbiAgICAgICAgICBwYXJzZXJPcHRpb25zLFxuICAgICAgICApXG4gICAgICAgIDogdGVtcGxhdGVOb2RlXG5cbiAgY29uc3QgcmVzdWx0ID0gY29kZU9mVGVtcGxhdGVcbiAgICA/IGZpbmRSZWZlcmVuY2VzRm9yU0ZDKGNvZGVPZlRlbXBsYXRlKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgY29tcG9uZW50czogbmV3IFNldChyZXN1bHQ/LmNvbXBvbmVudHMubWFwKHBhc2NhbGl6ZSkpLFxuICAgICAgZGlyZWN0aXZlczogbmV3IFNldChcbiAgICAgICAgcmVzdWx0Py5kaXJlY3RpdmVzXG4gICAgICAgICAgLmZpbHRlcih4ID0+ICFCVUlMRF9JTl9ESVJFQ1RJVkVTLmhhcyh4KSlcbiAgICAgICAgICAubWFwKGNhbWVsaXplKSxcbiAgICAgICksXG4gICAgICBpZGVudGlmaWVyczogbmV3IFNldChyZXN1bHQ/LmlkZW50aWZpZXJzKSxcbiAgICB9LFxuICAgIHNjcmlwdFNldHVwLFxuICAgIHNjcmlwdCxcbiAgICBwYXJzZXJPcHRpb25zOiBnZXRCYWJlbFBhcnNlck9wdGlvbnMoXG4gICAgICBzY3JpcHQuYXR0cnMubGFuZyA/PyBzY3JpcHRTZXR1cC5hdHRycy5sYW5nLFxuICAgICksXG4gICAgZXh0cmFEZWNsYXJhdGlvbnM6IFtdLFxuICB9XG59XG4iLCIvLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtbmV4dC9ibG9iL21haW4vcGFja2FnZXMvY29tcGlsZXItc2ZjL3NyYy9jb21waWxlU2NyaXB0LnRzXG5cbmltcG9ydCB0eXBlIHtcbiAgQ2FsbEV4cHJlc3Npb24sXG4gIE5vZGUsXG4gIE9iamVjdEV4cHJlc3Npb24sXG4gIE9iamVjdFByb3BlcnR5LFxuICBTdGF0ZW1lbnQsXG4gIFRTRnVuY3Rpb25UeXBlLFxuICBUU0ludGVyZmFjZUJvZHksXG4gIFRTVHlwZSxcbiAgVFNUeXBlTGl0ZXJhbCxcbn0gZnJvbSAnQGJhYmVsL3R5cGVzJ1xuaW1wb3J0IHsgcGFyc2VFeHByZXNzaW9uLCB0IH0gZnJvbSAnLi9iYWJlbCdcblxuLy8gU3BlY2lhbCBjb21waWxlciBtYWNyb3NcbmNvbnN0IERFRklORV9QUk9QUyA9ICdkZWZpbmVQcm9wcydcbmNvbnN0IERFRklORV9FTUlUUyA9ICdkZWZpbmVFbWl0cydcbmNvbnN0IERFRklORV9FWFBPU0UgPSAnZGVmaW5lRXhwb3NlJ1xuY29uc3QgV0lUSF9ERUZBVUxUUyA9ICd3aXRoRGVmYXVsdHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcFR5cGVEYXRhIHtcbiAga2V5OiBzdHJpbmdcbiAgdHlwZTogc3RyaW5nW10gfCBzdHJpbmdcbiAgcmVxdWlyZWQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWFjcm9zKG5vZGVzOiBTdGF0ZW1lbnRbXSkge1xuICBsZXQgaGFzRGVmaW5lUHJvcHNDYWxsID0gZmFsc2VcbiAgbGV0IGhhc0RlZmluZUVtaXRDYWxsID0gZmFsc2VcbiAgbGV0IHByb3BzUnVudGltZURlY2w6IE5vZGUgfCB1bmRlZmluZWRcbiAgbGV0IHByb3BzUnVudGltZURlZmF1bHRzOiBOb2RlIHwgdW5kZWZpbmVkXG4gIGxldCBwcm9wc1R5cGVEZWNsOiBUU1R5cGVMaXRlcmFsIHwgVFNJbnRlcmZhY2VCb2R5IHwgdW5kZWZpbmVkXG4gIGxldCBwcm9wc1R5cGVEZWNsUmF3OiBOb2RlIHwgdW5kZWZpbmVkXG4gIGxldCBlbWl0c1J1bnRpbWVEZWNsOiBOb2RlIHwgdW5kZWZpbmVkXG4gIGxldCBlbWl0c1R5cGVEZWNsOlxuICB8IFRTRnVuY3Rpb25UeXBlXG4gIHwgVFNUeXBlTGl0ZXJhbFxuICB8IFRTSW50ZXJmYWNlQm9keVxuICB8IHVuZGVmaW5lZFxuICBsZXQgZW1pdHNUeXBlRGVjbFJhdzogTm9kZSB8IHVuZGVmaW5lZFxuICBsZXQgZXhwb3NlRGVjbDogQ2FsbEV4cHJlc3Npb25bJ2FyZ3VtZW50cyddW251bWJlcl0gfCB1bmRlZmluZWRcblxuICAvLyBwcm9wcy9lbWl0cyBkZWNsYXJlZCB2aWEgdHlwZXNcbiAgY29uc3QgdHlwZURlY2xhcmVkUHJvcHM6IFJlY29yZDxzdHJpbmcsIFByb3BUeXBlRGF0YT4gPSB7fVxuICAvLyByZWNvcmQgZGVjbGFyZWQgdHlwZXMgZm9yIHJ1bnRpbWUgcHJvcHMgdHlwZSBnZW5lcmF0aW9uXG4gIGNvbnN0IGRlY2xhcmVkVHlwZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9XG5cbiAgZnVuY3Rpb24gZXJyb3IoXG4gICAgbXNnOiBzdHJpbmcsXG5cbiAgICBfbm9kZTogTm9kZSxcbiAgKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cpXG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzRGVmaW5lUHJvcHMobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNDYWxsT2Yobm9kZSwgREVGSU5FX1BST1BTKSlcbiAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgaWYgKGhhc0RlZmluZVByb3BzQ2FsbClcbiAgICAgIGVycm9yKGBkdXBsaWNhdGUgJHtERUZJTkVfUFJPUFN9KCkgY2FsbGAsIG5vZGUpXG5cbiAgICBoYXNEZWZpbmVQcm9wc0NhbGwgPSB0cnVlXG5cbiAgICBwcm9wc1J1bnRpbWVEZWNsID0gbm9kZS5hcmd1bWVudHNbMF1cblxuICAgIC8vIGNhbGwgaGFzIHR5cGUgcGFyYW1ldGVycyAtIGluZmVyIHJ1bnRpbWUgdHlwZXMgZnJvbSBpdFxuICAgIGlmIChub2RlLnR5cGVQYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAocHJvcHNSdW50aW1lRGVjbCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBgJHtERUZJTkVfUFJPUFN9KCkgY2Fubm90IGFjY2VwdCBib3RoIHR5cGUgYW5kIG5vbi10eXBlIGFyZ3VtZW50cyBgXG4gICAgICAgICAgICArICdhdCB0aGUgc2FtZSB0aW1lLiBVc2Ugb25lIG9yIHRoZSBvdGhlci4nLFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcHJvcHNUeXBlRGVjbFJhdyA9IG5vZGUudHlwZVBhcmFtZXRlcnMucGFyYW1zWzBdXG4gICAgICBwcm9wc1R5cGVEZWNsID0gcmVzb2x2ZVF1YWxpZmllZFR5cGUoXG4gICAgICAgIHByb3BzVHlwZURlY2xSYXcsXG4gICAgICAgIG5vZGUgPT4gbm9kZS50eXBlID09PSAnVFNUeXBlTGl0ZXJhbCcsXG4gICAgICApIGFzIFRTVHlwZUxpdGVyYWwgfCBUU0ludGVyZmFjZUJvZHkgfCB1bmRlZmluZWRcblxuICAgICAgaWYgKCFwcm9wc1R5cGVEZWNsKSB7XG4gICAgICAgIGVycm9yKFxuICAgICAgICAgIGB0eXBlIGFyZ3VtZW50IHBhc3NlZCB0byAke0RFRklORV9QUk9QU30oKSBtdXN0IGJlIGEgbGl0ZXJhbCB0eXBlLCBgXG4gICAgICAgICAgICArICdvciBhIHJlZmVyZW5jZSB0byBhbiBpbnRlcmZhY2Ugb3IgbGl0ZXJhbCB0eXBlLicsXG4gICAgICAgICAgcHJvcHNUeXBlRGVjbFJhdyxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzV2l0aERlZmF1bHRzKG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzQ2FsbE9mKG5vZGUsIFdJVEhfREVGQVVMVFMpKVxuICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICBpZiAocHJvY2Vzc0RlZmluZVByb3BzKG5vZGUuYXJndW1lbnRzWzBdKSkge1xuICAgICAgaWYgKHByb3BzUnVudGltZURlY2wpIHtcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgYCR7V0lUSF9ERUZBVUxUU30gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHR5cGUtYmFzZWQgYFxuICAgICAgICAgICAgKyBgJHtERUZJTkVfUFJPUFN9IGRlY2xhcmF0aW9uLmAsXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcHJvcHNSdW50aW1lRGVmYXVsdHMgPSBub2RlLmFyZ3VtZW50c1sxXVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGVycm9yKFxuICAgICAgICBgJHtXSVRIX0RFRkFVTFRTfScgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhICR7REVGSU5FX1BST1BTfSBjYWxsLmAsXG4gICAgICAgIG5vZGUuYXJndW1lbnRzWzBdIHx8IG5vZGUsXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzRGVmaW5lRW1pdHMobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNDYWxsT2Yobm9kZSwgREVGSU5FX0VNSVRTKSlcbiAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgaWYgKGhhc0RlZmluZUVtaXRDYWxsKVxuICAgICAgZXJyb3IoYGR1cGxpY2F0ZSAke0RFRklORV9FTUlUU30oKSBjYWxsYCwgbm9kZSlcblxuICAgIGhhc0RlZmluZUVtaXRDYWxsID0gdHJ1ZVxuICAgIGVtaXRzUnVudGltZURlY2wgPSBub2RlLmFyZ3VtZW50c1swXVxuICAgIGlmIChub2RlLnR5cGVQYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAoZW1pdHNSdW50aW1lRGVjbCkge1xuICAgICAgICBlcnJvcihcbiAgICAgICAgICBgJHtERUZJTkVfRU1JVFN9KCkgY2Fubm90IGFjY2VwdCBib3RoIHR5cGUgYW5kIG5vbi10eXBlIGFyZ3VtZW50cyBgXG4gICAgICAgICAgICArICdhdCB0aGUgc2FtZSB0aW1lLiBVc2Ugb25lIG9yIHRoZSBvdGhlci4nLFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgZW1pdHNUeXBlRGVjbFJhdyA9IG5vZGUudHlwZVBhcmFtZXRlcnMucGFyYW1zWzBdXG4gICAgICBlbWl0c1R5cGVEZWNsID0gcmVzb2x2ZVF1YWxpZmllZFR5cGUoXG4gICAgICAgIGVtaXRzVHlwZURlY2xSYXcsXG4gICAgICAgIG5vZGUgPT4gbm9kZS50eXBlID09PSAnVFNGdW5jdGlvblR5cGUnIHx8IG5vZGUudHlwZSA9PT0gJ1RTVHlwZUxpdGVyYWwnLFxuICAgICAgKSBhcyBUU0Z1bmN0aW9uVHlwZSB8IFRTVHlwZUxpdGVyYWwgfCBUU0ludGVyZmFjZUJvZHkgfCB1bmRlZmluZWRcblxuICAgICAgaWYgKCFlbWl0c1R5cGVEZWNsKSB7XG4gICAgICAgIGVycm9yKFxuICAgICAgICAgIGB0eXBlIGFyZ3VtZW50IHBhc3NlZCB0byAke0RFRklORV9FTUlUU30oKSBtdXN0IGJlIGEgZnVuY3Rpb24gdHlwZSwgYFxuICAgICAgICAgICAgKyAnYSBsaXRlcmFsIHR5cGUgd2l0aCBjYWxsIHNpZ25hdHVyZXMsIG9yIGEgcmVmZXJlbmNlIHRvIHRoZSBhYm92ZSB0eXBlcy4nLFxuICAgICAgICAgIGVtaXRzVHlwZURlY2xSYXcsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc29sdmVRdWFsaWZpZWRUeXBlKFxuICAgIG5vZGU6IE5vZGUsXG4gICAgcXVhbGlmaWVyOiAobm9kZTogTm9kZSkgPT4gYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKHF1YWxpZmllcihub2RlKSlcbiAgICAgIHJldHVybiBub2RlXG5cbiAgICBpZiAoXG4gICAgICBub2RlLnR5cGUgPT09ICdUU1R5cGVSZWZlcmVuY2UnXG4gICAgICAmJiBub2RlLnR5cGVOYW1lLnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgICkge1xuICAgICAgY29uc3QgcmVmTmFtZSA9IG5vZGUudHlwZU5hbWUubmFtZVxuICAgICAgY29uc3QgaXNRdWFsaWZpZWRUeXBlID0gKG5vZGU6IE5vZGUpOiBOb2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5vZGUudHlwZSA9PT0gJ1RTSW50ZXJmYWNlRGVjbGFyYXRpb24nXG4gICAgICAgICAgJiYgbm9kZS5pZC5uYW1lID09PSByZWZOYW1lXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbm9kZS5ib2R5XG5cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgbm9kZS50eXBlID09PSAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbidcbiAgICAgICAgICAmJiBub2RlLmlkLm5hbWUgPT09IHJlZk5hbWVcbiAgICAgICAgICAmJiBxdWFsaWZpZXIobm9kZS50eXBlQW5ub3RhdGlvbilcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBub2RlLnR5cGVBbm5vdGF0aW9uXG5cbiAgICAgICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicgJiYgbm9kZS5kZWNsYXJhdGlvbilcbiAgICAgICAgICByZXR1cm4gaXNRdWFsaWZpZWRUeXBlKG5vZGUuZGVjbGFyYXRpb24pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBjb25zdCBxdWFsaWZpZWQgPSBpc1F1YWxpZmllZFR5cGUobm9kZSlcbiAgICAgICAgaWYgKHF1YWxpZmllZClcbiAgICAgICAgICByZXR1cm4gcXVhbGlmaWVkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0RlZmluZUV4cG9zZShub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpc0NhbGxPZihub2RlLCBERUZJTkVfRVhQT1NFKSlcbiAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgaWYgKGV4cG9zZURlY2wpXG4gICAgICBlcnJvcihgZHVwbGljYXRlICR7REVGSU5FX0VYUE9TRX0oKSBjYWxsYCwgbm9kZSlcblxuICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDEpXG4gICAgICBlcnJvcihgJHtERUZJTkVfRVhQT1NFfSgpIHJlcXVpcmVzIG9uZSBhcmd1bWVudGAsIG5vZGUpXG5cbiAgICBleHBvc2VEZWNsID0gbm9kZS5hcmd1bWVudHNbMF1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBnZW5SdW50aW1lUHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIFByb3BUeXBlRGF0YT4pIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvcHMpXG4gICAgaWYgKCFrZXlzLmxlbmd0aClcbiAgICAgIHJldHVybiB1bmRlZmluZWRcblxuICAgIC8vIGNoZWNrIGRlZmF1bHRzLiBJZiB0aGUgZGVmYXVsdCBvYmplY3QgaXMgYW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBvbmx5XG4gICAgLy8gc3RhdGljIHByb3BlcnRpZXMsIHdlIGNhbiBkaXJlY3RseSBnZW5lcmF0ZSBtb3JlIG9wdGltemllZCBkZWZhdWx0XG4gICAgLy8gZGVjYWxyYXRpb25zLiBPdGhlcndpc2Ugd2Ugd2lsbCBoYXZlIHRvIGZhbGxiYWNrIHRvIHJ1bnRpbWUgbWVyZ2luZy5cbiAgICBjb25zdCBoYXNTdGF0aWNEZWZhdWx0cyA9IHByb3BzUnVudGltZURlZmF1bHRzXG4gICAgICAmJiBwcm9wc1J1bnRpbWVEZWZhdWx0cy50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbidcbiAgICAgICYmIHByb3BzUnVudGltZURlZmF1bHRzLnByb3BlcnRpZXMuZXZlcnkoXG4gICAgICAgIG5vZGUgPT4gbm9kZS50eXBlID09PSAnT2JqZWN0UHJvcGVydHknICYmICFub2RlLmNvbXB1dGVkLFxuICAgICAgKVxuXG4gICAgcmV0dXJuIHQub2JqZWN0RXhwcmVzc2lvbihcbiAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wID0gaGFzU3RhdGljRGVmYXVsdHNcbiAgICAgICAgICA/IChwcm9wc1J1bnRpbWVEZWZhdWx0cyBhcyBPYmplY3RFeHByZXNzaW9uKS5wcm9wZXJ0aWVzLmZpbmQoKG5vZGU6IGFueSkgPT4gbm9kZS5rZXkubmFtZSA9PT0ga2V5KSBhcyBPYmplY3RQcm9wZXJ0eVxuICAgICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgICAgaWYgKHByb3ApXG4gICAgICAgICAgdmFsdWUucmVxdWlyZWQgPSBmYWxzZVxuXG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChba2V5LCB2YWx1ZV0pID0+IGtleSA9PT0gJ3R5cGUnXG4gICAgICAgICAgPyB0Lm9iamVjdFByb3BlcnR5KHQuaWRlbnRpZmllcihrZXkpLCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdC5pZGVudGlmaWVyKHZhbHVlKSA6IHQuYXJyYXlFeHByZXNzaW9uKHZhbHVlLm1hcCgoaTogYW55KSA9PiB0LmlkZW50aWZpZXIoaSkpKSBhcyBhbnkpXG4gICAgICAgICAgOiB0Lm9iamVjdFByb3BlcnR5KHQuaWRlbnRpZmllcihrZXkpLCBwYXJzZUV4cHJlc3Npb24oSlNPTi5zdHJpbmdpZnkodmFsdWUpKSBhcyBhbnkpLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKHByb3ApXG4gICAgICAgICAgZW50cmllcy5wdXNoKHQub2JqZWN0UHJvcGVydHkodC5pZGVudGlmaWVyKCdkZWZhdWx0JyksIHByb3AudmFsdWUgYXMgYW55KSlcblxuICAgICAgICByZXR1cm4gdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICB0LmlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICB0Lm9iamVjdEV4cHJlc3Npb24oZW50cmllcyksXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFByb3BzKCkge1xuICAgIGlmIChwcm9wc1J1bnRpbWVEZWNsKVxuICAgICAgcmV0dXJuIHByb3BzUnVudGltZURlY2xcblxuICAgIGlmIChwcm9wc1R5cGVEZWNsKSB7XG4gICAgICBleHRyYWN0UnVudGltZVByb3BzKHByb3BzVHlwZURlY2wsIHR5cGVEZWNsYXJlZFByb3BzLCBkZWNsYXJlZFR5cGVzKVxuICAgICAgcmV0dXJuIGdlblJ1bnRpbWVQcm9wcyh0eXBlRGVjbGFyZWRQcm9wcylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0aHJvd0lmQXdhaXQobm9kZTogTm9kZSkge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICdBd2FpdEV4cHJlc3Npb24nKVxuICAgICAgZXJyb3IoJ3RvcC1sZXZlbCBhd2FpdCBpcyBub3Qgc3VwcG9ydGVkIGluIFZ1ZSAyJywgbm9kZSlcbiAgfVxuXG4gIG5vZGVzID0gbm9kZXNcbiAgICAubWFwKChyYXc6IE5vZGUpID0+IHtcbiAgICAgIGxldCBub2RlID0gcmF3XG4gICAgICBpZiAocmF3LnR5cGUgPT09ICdFeHByZXNzaW9uU3RhdGVtZW50JylcbiAgICAgICAgbm9kZSA9IHJhdy5leHByZXNzaW9uXG5cbiAgICAgIGlmIChub2RlLnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJyAmJiAhbm9kZS5kZWNsYXJlKSB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gbm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRlY2wgPSBub2RlLmRlY2xhcmF0aW9uc1tpXVxuICAgICAgICAgIGlmIChkZWNsLmluaXQpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzRGVmaW5lRW1pdHMoZGVjbC5pbml0KSlcbiAgICAgICAgICAgICAgZGVjbC5pbml0ID0gdC5tZW1iZXJFeHByZXNzaW9uKHQuaWRlbnRpZmllcignX19jdHgnKSwgdC5pZGVudGlmaWVyKCdlbWl0JykpIGFzIGFueVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzc0RlZmluZVByb3BzKGRlY2wuaW5pdCkgfHwgcHJvY2Vzc1dpdGhEZWZhdWx0cyhkZWNsLmluaXQpKVxuICAgICAgICAgICAgICBkZWNsLmluaXQgPSB0LmlkZW50aWZpZXIoJ19fcHJvcHMnKSBhcyBhbnlcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdGhyb3dJZkF3YWl0KGRlY2wuaW5pdClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3NXaXRoRGVmYXVsdHMobm9kZSkgfHwgcHJvY2Vzc0RlZmluZUVtaXRzKG5vZGUpIHx8IHByb2Nlc3NEZWZpbmVQcm9wcyhub2RlKSB8fCBwcm9jZXNzRGVmaW5lRXhwb3NlKG5vZGUpKVxuICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICB0aHJvd0lmQXdhaXQobm9kZSlcblxuICAgICAgcmV0dXJuIHJhd1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBTdGF0ZW1lbnRbXVxuXG4gIHJldHVybiB7XG4gICAgbm9kZXMsXG4gICAgcHJvcHM6IGdldFByb3BzKCksXG4gICAgZXhwb3NlOiBleHBvc2VEZWNsLFxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2FsbE9mKFxuICBub2RlOiBOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgdGVzdDogc3RyaW5nIHwgKChpZDogc3RyaW5nKSA9PiBib29sZWFuKSxcbik6IG5vZGUgaXMgQ2FsbEV4cHJlc3Npb24ge1xuICByZXR1cm4gISEoXG4gICAgbm9kZVxuICAgICYmIG5vZGUudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJ1xuICAgICYmIG5vZGUuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgICYmICh0eXBlb2YgdGVzdCA9PT0gJ3N0cmluZydcbiAgICAgID8gbm9kZS5jYWxsZWUubmFtZSA9PT0gdGVzdFxuICAgICAgOiB0ZXN0KG5vZGUuY2FsbGVlLm5hbWUpKVxuICApXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RSdW50aW1lUHJvcHMoXG4gIG5vZGU6IFRTVHlwZUxpdGVyYWwgfCBUU0ludGVyZmFjZUJvZHksXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wVHlwZURhdGE+LFxuICBkZWNsYXJlZFR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4sXG4pIHtcbiAgY29uc3QgbWVtYmVycyA9IG5vZGUudHlwZSA9PT0gJ1RTVHlwZUxpdGVyYWwnID8gbm9kZS5tZW1iZXJzIDogbm9kZS5ib2R5XG4gIGZvciAoY29uc3QgbSBvZiBtZW1iZXJzKSB7XG4gICAgaWYgKFxuICAgICAgKG0udHlwZSA9PT0gJ1RTUHJvcGVydHlTaWduYXR1cmUnIHx8IG0udHlwZSA9PT0gJ1RTTWV0aG9kU2lnbmF0dXJlJylcbiAgICAgICYmIG0ua2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgICkge1xuICAgICAgbGV0IHR5cGU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gICAgICBpZiAobS50eXBlID09PSAnVFNNZXRob2RTaWduYXR1cmUnKSB7XG4gICAgICAgIHR5cGUgPSBbJ0Z1bmN0aW9uJ11cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG0udHlwZUFubm90YXRpb24pIHtcbiAgICAgICAgdHlwZSA9IGluZmVyUnVudGltZVR5cGUoXG4gICAgICAgICAgbS50eXBlQW5ub3RhdGlvbi50eXBlQW5ub3RhdGlvbixcbiAgICAgICAgICBkZWNsYXJlZFR5cGVzLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBwcm9wc1ttLmtleS5uYW1lXSA9IHtcbiAgICAgICAga2V5OiBtLmtleS5uYW1lLFxuICAgICAgICByZXF1aXJlZDogIW0ub3B0aW9uYWwsXG4gICAgICAgIHR5cGU6IHR5cGU/Lmxlbmd0aCA9PT0gMSA/IHR5cGVbMF0gOiB0eXBlIHx8ICdudWxsJyxcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5mZXJSdW50aW1lVHlwZShcbiAgbm9kZTogVFNUeXBlLFxuICBkZWNsYXJlZFR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4sXG4pOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSAnVFNTdHJpbmdLZXl3b3JkJzpcbiAgICAgIHJldHVybiBbJ1N0cmluZyddXG4gICAgY2FzZSAnVFNOdW1iZXJLZXl3b3JkJzpcbiAgICAgIHJldHVybiBbJ051bWJlciddXG4gICAgY2FzZSAnVFNCb29sZWFuS2V5d29yZCc6XG4gICAgICByZXR1cm4gWydCb29sZWFuJ11cbiAgICBjYXNlICdUU09iamVjdEtleXdvcmQnOlxuICAgICAgcmV0dXJuIFsnT2JqZWN0J11cbiAgICBjYXNlICdUU1R5cGVMaXRlcmFsJzpcbiAgICAgIC8vIFRPRE8gKG5pY2UgdG8gaGF2ZSkgZ2VuZXJhdGUgcnVudGltZSBwcm9wZXJ0eSB2YWxpZGF0aW9uXG4gICAgICByZXR1cm4gWydPYmplY3QnXVxuICAgIGNhc2UgJ1RTRnVuY3Rpb25UeXBlJzpcbiAgICAgIHJldHVybiBbJ0Z1bmN0aW9uJ11cbiAgICBjYXNlICdUU0FycmF5VHlwZSc6XG4gICAgY2FzZSAnVFNUdXBsZVR5cGUnOlxuICAgICAgLy8gVE9ETyAobmljZSB0byBoYXZlKSBnZW5lcmF0ZSBydW50aW1lIGVsZW1lbnQgdHlwZS9sZW5ndGggY2hlY2tzXG4gICAgICByZXR1cm4gWydBcnJheSddXG5cbiAgICBjYXNlICdUU0xpdGVyYWxUeXBlJzpcbiAgICAgIHN3aXRjaCAobm9kZS5saXRlcmFsLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnU3RyaW5nTGl0ZXJhbCc6XG4gICAgICAgICAgcmV0dXJuIFsnU3RyaW5nJ11cbiAgICAgICAgY2FzZSAnQm9vbGVhbkxpdGVyYWwnOlxuICAgICAgICAgIHJldHVybiBbJ0Jvb2xlYW4nXVxuICAgICAgICBjYXNlICdOdW1lcmljTGl0ZXJhbCc6XG4gICAgICAgIGNhc2UgJ0JpZ0ludExpdGVyYWwnOlxuICAgICAgICAgIHJldHVybiBbJ051bWJlciddXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFsnbnVsbCddXG4gICAgICB9XG5cbiAgICBjYXNlICdUU1R5cGVSZWZlcmVuY2UnOlxuICAgICAgaWYgKG5vZGUudHlwZU5hbWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIGlmIChkZWNsYXJlZFR5cGVzW25vZGUudHlwZU5hbWUubmFtZV0pXG4gICAgICAgICAgcmV0dXJuIGRlY2xhcmVkVHlwZXNbbm9kZS50eXBlTmFtZS5uYW1lXVxuXG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlTmFtZS5uYW1lKSB7XG4gICAgICAgICAgY2FzZSAnQXJyYXknOlxuICAgICAgICAgIGNhc2UgJ0Z1bmN0aW9uJzpcbiAgICAgICAgICBjYXNlICdPYmplY3QnOlxuICAgICAgICAgIGNhc2UgJ1NldCc6XG4gICAgICAgICAgY2FzZSAnTWFwJzpcbiAgICAgICAgICBjYXNlICdXZWFrU2V0JzpcbiAgICAgICAgICBjYXNlICdXZWFrTWFwJzpcbiAgICAgICAgICAgIHJldHVybiBbbm9kZS50eXBlTmFtZS5uYW1lXVxuICAgICAgICAgIGNhc2UgJ1JlY29yZCc6XG4gICAgICAgICAgY2FzZSAnUGFydGlhbCc6XG4gICAgICAgICAgY2FzZSAnUmVhZG9ubHknOlxuICAgICAgICAgIGNhc2UgJ1BpY2snOlxuICAgICAgICAgIGNhc2UgJ09taXQnOlxuICAgICAgICAgIGNhc2UgJ0V4Y2x1ZGUnOlxuICAgICAgICAgIGNhc2UgJ0V4dHJhY3QnOlxuICAgICAgICAgIGNhc2UgJ1JlcXVpcmVkJzpcbiAgICAgICAgICBjYXNlICdJbnN0YW5jZVR5cGUnOlxuICAgICAgICAgICAgcmV0dXJuIFsnT2JqZWN0J11cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFsnbnVsbCddXG5cbiAgICBjYXNlICdUU1BhcmVudGhlc2l6ZWRUeXBlJzpcbiAgICAgIHJldHVybiBpbmZlclJ1bnRpbWVUeXBlKG5vZGUudHlwZUFubm90YXRpb24sIGRlY2xhcmVkVHlwZXMpXG4gICAgY2FzZSAnVFNVbmlvblR5cGUnOlxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICBbXS5jb25jYXQoXG4gICAgICAgICAgICAuLi4obm9kZS50eXBlcy5tYXAodCA9PiBpbmZlclJ1bnRpbWVUeXBlKHQsIGRlY2xhcmVkVHlwZXMpKSBhcyBhbnkpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICBdXG4gICAgY2FzZSAnVFNJbnRlcnNlY3Rpb25UeXBlJzpcbiAgICAgIHJldHVybiBbJ09iamVjdCddXG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFsnbnVsbCddIC8vIG5vIHJ1bnRpbWUgY2hlY2tcbiAgfVxufVxuIiwiaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0B2dWUvc2hhcmVkJ1xuaW1wb3J0IHR5cGUgeyBOb2RlLCBPYmplY3RFeHByZXNzaW9uLCBTdGF0ZW1lbnQgfSBmcm9tICdAYmFiZWwvdHlwZXMnXG5pbXBvcnQgeyBub3ROdWxsaXNoLCBwYXJ0aXRpb24sIHVuaXEgfSBmcm9tICdAYW50ZnUvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFBhcnNlZFNGQywgU2NyaXB0U2V0dXBUcmFuc2Zvcm1PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBhcHBseU1hY3JvcyB9IGZyb20gJy4vbWFjcm9zJ1xuaW1wb3J0IHsgZ2V0SWRlbnRpZmllckRlY2xhcmF0aW9ucyB9IGZyb20gJy4vaWRlbnRpZmllcnMnXG5pbXBvcnQgeyBnZW5lcmF0ZSwgdCB9IGZyb20gJy4vYmFiZWwnXG5pbXBvcnQgeyBwYXNjYWxpemUgfSBmcm9tICcuL3V0aWxzJ1xuXG5mdW5jdGlvbiBpc0FzeW5jSW1wb3J0KG5vZGU6IFN0YXRlbWVudCkge1xuICBpZiAodC5pc1ZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IG5vZGUuZGVjbGFyYXRpb25zWzBdXG5cbiAgICByZXR1cm4gKFxuICAgICAgZGVjbGFyYXRpb24gIT09IHVuZGVmaW5lZFxuICAgICAgJiYgdC5pc0NhbGxFeHByZXNzaW9uKGRlY2xhcmF0aW9uLmluaXQpXG4gICAgICAmJiB0LmlzSWRlbnRpZmllcihkZWNsYXJhdGlvbi5pbml0LmNhbGxlZSlcbiAgICAgICYmIGRlY2xhcmF0aW9uLmluaXQuY2FsbGVlLm5hbWUgPT09ICdkZWZpbmVBc3luY0NvbXBvbmVudCdcbiAgICApXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVNjcmlwdFNldHVwKFxuICBzZmM6IFBhcnNlZFNGQyxcbiAgb3B0aW9ucz86IFNjcmlwdFNldHVwVHJhbnNmb3JtT3B0aW9ucyxcbikge1xuICBjb25zdCB7IHNjcmlwdFNldHVwLCBzY3JpcHQsIHRlbXBsYXRlIH0gPSBzZmNcblxuICBjb25zdCB7IG5vZGVzOiBib2R5LCBwcm9wcywgZXhwb3NlIH0gPSBhcHBseU1hY3JvcyhzY3JpcHRTZXR1cC5hc3QuYm9keSlcblxuICBjb25zdCBbaG9pc3RlZCwgc2V0dXBCb2R5XSA9IHBhcnRpdGlvbihcbiAgICBib2R5LFxuICAgIG4gPT5cbiAgICAgIGlzQXN5bmNJbXBvcnQobilcbiAgICAgIHx8IHQuaXNJbXBvcnREZWNsYXJhdGlvbihuKVxuICAgICAgfHwgdC5pc0V4cG9ydE5hbWVkRGVjbGFyYXRpb24obilcbiAgICAgIHx8IG4udHlwZS5zdGFydHNXaXRoKCdUUycpLFxuICApXG5cbiAgLy8gZ2V0IGFsbCBpZGVudGlmaWVycyBpbiBgPHNjcmlwdCBzZXR1cD5gIGFuZCBgPHNjcmlwdD5gXG4gIGNvbnN0IGRlY2xhcmF0aW9uQXJyYXkgPSB1bmlxKFtcbiAgICAuLi5nZXRJZGVudGlmaWVyRGVjbGFyYXRpb25zKGhvaXN0ZWQpLFxuICAgIC4uLmdldElkZW50aWZpZXJEZWNsYXJhdGlvbnMoc2V0dXBCb2R5KSxcbiAgICAuLi5nZXRJZGVudGlmaWVyRGVjbGFyYXRpb25zKHNjcmlwdC5hc3QuYm9keSksXG4gIF0pLmZpbHRlcihub3ROdWxsaXNoKVxuXG4gIC8vIGZpbHRlciBvdXQgaWRlbnRpZmllcnMgdGhhdCBhcmUgdXNlZCBpbiBgPHRlbXBsYXRlPmBcbiAgY29uc3QgcmV0dXJuczogT2JqZWN0RXhwcmVzc2lvblsncHJvcGVydGllcyddID0gZGVjbGFyYXRpb25BcnJheVxuICAgIC5maWx0ZXIoaSA9PiB0ZW1wbGF0ZS5pZGVudGlmaWVycy5oYXMoaSkpXG4gICAgLm1hcCgoaSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB0LmlkZW50aWZpZXIoaSlcbiAgICAgIHJldHVybiB0Lm9iamVjdFByb3BlcnR5KGlkLCBpZCwgZmFsc2UsIHRydWUpXG4gICAgfSlcblxuICBjb25zdCBjb21wb25lbnRzID0gQXJyYXkuZnJvbSh0ZW1wbGF0ZS5jb21wb25lbnRzKVxuICAgIC5tYXAoXG4gICAgICBjb21wb25lbnQgPT5cbiAgICAgICAgZGVjbGFyYXRpb25BcnJheS5maW5kKGRlY2xhcmUgPT4gZGVjbGFyZSA9PT0gY29tcG9uZW50KVxuICAgICAgICA/PyBkZWNsYXJhdGlvbkFycmF5LmZpbmQoZGVjbGFyZSA9PiBwYXNjYWxpemUoZGVjbGFyZSkgPT09IGNvbXBvbmVudCksXG4gICAgKVxuICAgIC5maWx0ZXIobm90TnVsbGlzaClcblxuICBjb25zdCBkaXJlY3RpdmVEZWNsYXJhdGlvbiA9IEFycmF5LmZyb20odGVtcGxhdGUuZGlyZWN0aXZlcylcbiAgICAubWFwKChkaXJlY3RpdmUpID0+IHtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBkZWNsYXJhdGlvbkFycmF5LmZpbmQoXG4gICAgICAgIGRlY2xhcmF0aW9uID0+IGRlY2xhcmF0aW9uID09PSBgdiR7Y2FwaXRhbGl6ZShkaXJlY3RpdmUpfWAsXG4gICAgICApXG4gICAgICBpZiAoaWRlbnRpZmllciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiB7IGlkZW50aWZpZXIsIGRpcmVjdGl2ZSB9XG4gICAgfSlcbiAgICAuZmlsdGVyKG5vdE51bGxpc2gpXG5cbiAgLy8gYXBwZW5kIGA8c2NyaXB0IHNldHVwPmAgaW1wb3J0cyB0byBgPHNjcmlwdD5gXG5cbiAgY29uc3QgX19zZmMgPSB0LmlkZW50aWZpZXIoJ19fc2ZjX21haW4nKVxuXG4gIGxldCBoYXNCb2R5ID0gZmFsc2VcblxuICBjb25zdCBib2R5Tm9kZXMgPSBzY3JpcHQuYXN0LmJvZHkubWFwKChub2RlOiBOb2RlKSA9PiB7XG4gICAgLy8gcmVwbGFjZSBgZXhwb3J0IGRlZmF1bHRgIHdpdGggYSB0ZW1wcm9yYXkgdmFyaWFibGVcbiAgICAvLyBgY29uc3QgX19zZmNfbWFpbiA9IHsgLi4uIH1gXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicpIHtcbiAgICAgIGhhc0JvZHkgPSB0cnVlXG4gICAgICByZXR1cm4gdC52YXJpYWJsZURlY2xhcmF0aW9uKCdjb25zdCcsIFtcbiAgICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IoX19zZmMsIG5vZGUuZGVjbGFyYXRpb24gYXMgYW55KSxcbiAgICAgIF0pXG4gICAgfVxuICAgIHJldHVybiBub2RlXG4gIH0pXG5cbiAgbGV0IGFzdCA9IHQucHJvZ3JhbShbXG4gICAgLi4uc2ZjLmV4dHJhRGVjbGFyYXRpb25zLFxuICAgIC4uLmhvaXN0ZWQsXG4gICAgLi4uYm9keU5vZGVzLFxuICBdIGFzIFN0YXRlbWVudFtdKVxuXG4gIC8vIGluamVjdCBgY29uc3QgX19zZmNfbWFpbiA9IHt9YCBpZiBgPHNjcmlwdD5gIGhhcyBkZWZhdWx0IGV4cG9ydFxuICBpZiAoIWhhc0JvZHkpIHtcbiAgICBhc3QuYm9keS5wdXNoKFxuICAgICAgdC52YXJpYWJsZURlY2xhcmF0aW9uKCdjb25zdCcsIFtcbiAgICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IoX19zZmMsIHQub2JqZWN0RXhwcmVzc2lvbihbXSkpLFxuICAgICAgXSksXG4gICAgKVxuICB9XG5cbiAgLy8gaW5qZWN0IHByb3BzIGZ1bmN0aW9uXG4gIC8vIGBfX3NmY19tYWluLnByb3BzID0geyAuLi4gfWBcbiAgaWYgKHByb3BzKSB7XG4gICAgaGFzQm9keSA9IHRydWVcbiAgICBhc3QuYm9keS5wdXNoKFxuICAgICAgdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgICB0LmFzc2lnbm1lbnRFeHByZXNzaW9uKFxuICAgICAgICAgICc9JyxcbiAgICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24oX19zZmMsIHQuaWRlbnRpZmllcigncHJvcHMnKSksXG4gICAgICAgICAgcHJvcHMgYXMgYW55LFxuICAgICAgICApLFxuICAgICAgKSBhcyBhbnksXG4gICAgKVxuICB9XG5cbiAgLy8gaW5qZWN0IHNldHVwIGZ1bmN0aW9uXG4gIC8vIGBfX3NmY19tYWluLnNldHVwID0gKCkgPT4ge31gXG4gIGlmIChib2R5Lmxlbmd0aCkge1xuICAgIGhhc0JvZHkgPSB0cnVlXG4gICAgY29uc3QgcmV0dXJuRXhwciA9IGV4cG9zZVxuICAgICAgPyB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24odC5pZGVudGlmaWVyKCdPYmplY3QnKSwgdC5pZGVudGlmaWVyKCdhc3NpZ24nKSksXG4gICAgICAgIFt0Lm9iamVjdEV4cHJlc3Npb24ocmV0dXJucyksIGV4cG9zZV0sXG4gICAgICApXG4gICAgICA6IHQub2JqZWN0RXhwcmVzc2lvbihyZXR1cm5zKVxuICAgIGNvbnN0IHJldHVyblN0YXRlbWVudCA9IHQucmV0dXJuU3RhdGVtZW50KHJldHVybkV4cHIpXG5cbiAgICBhc3QuYm9keS5wdXNoKFxuICAgICAgdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgICB0LmFzc2lnbm1lbnRFeHByZXNzaW9uKFxuICAgICAgICAgICc9JyxcbiAgICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24oX19zZmMsIHQuaWRlbnRpZmllcignc2V0dXAnKSksXG4gICAgICAgICAgdC5hcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgICAgIFt0LmlkZW50aWZpZXIoJ19fcHJvcHMnKSwgdC5pZGVudGlmaWVyKCdfX2N0eCcpXSxcbiAgICAgICAgICAgIHQuYmxvY2tTdGF0ZW1lbnQoWy4uLnNldHVwQm9keSwgcmV0dXJuU3RhdGVtZW50IGFzIGFueV0pLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApIGFzIGFueSxcbiAgICApXG4gIH1cblxuICAvLyBpbmplY3QgY29tcG9uZW50c1xuICAvLyBgX19zZmNfbWFpbi5jb21wb25lbnRzID0gT2JqZWN0LmFzc2lnbih7IC4uLiB9LCBfX3NmY19tYWluLmNvbXBvbmVudHMpYFxuICBpZiAoY29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICBoYXNCb2R5ID0gdHJ1ZVxuICAgIGNvbnN0IGNvbXBvbmVudHNPYmplY3QgPSB0Lm9iamVjdEV4cHJlc3Npb24oXG4gICAgICBjb21wb25lbnRzLm1hcCgoaSkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHQuaWRlbnRpZmllcihpKVxuICAgICAgICByZXR1cm4gdC5vYmplY3RQcm9wZXJ0eShpZCwgaWQsIGZhbHNlLCB0cnVlKVxuICAgICAgfSksXG4gICAgKVxuXG4gICAgYXN0LmJvZHkucHVzaChcbiAgICAgIHQuZXhwcmVzc2lvblN0YXRlbWVudChcbiAgICAgICAgdC5hc3NpZ25tZW50RXhwcmVzc2lvbihcbiAgICAgICAgICAnPScsXG4gICAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKF9fc2ZjLCB0LmlkZW50aWZpZXIoJ2NvbXBvbmVudHMnKSksXG4gICAgICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoJ09iamVjdCcpLCB0LmlkZW50aWZpZXIoJ2Fzc2lnbicpKSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgY29tcG9uZW50c09iamVjdCxcbiAgICAgICAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKF9fc2ZjLCB0LmlkZW50aWZpZXIoJ2NvbXBvbmVudHMnKSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApIGFzIGFueSxcbiAgICApXG4gIH1cblxuICAvLyBpbmplY3QgZGlyZWN0aXZlc1xuICAvLyBgX19zZmNfbWFpbi5kaXJlY3RpdmVzID0gT2JqZWN0LmFzc2lnbih7IC4uLiB9LCBfX3NmY19tYWluLmRpcmVjdGl2ZXMpYFxuICBpZiAoZGlyZWN0aXZlRGVjbGFyYXRpb24ubGVuZ3RoKSB7XG4gICAgaGFzQm9keSA9IHRydWVcbiAgICBjb25zdCBkaXJlY3RpdmVzT2JqZWN0ID0gdC5vYmplY3RFeHByZXNzaW9uKFxuICAgICAgZGlyZWN0aXZlRGVjbGFyYXRpb24ubWFwKCh7IGRpcmVjdGl2ZSwgaWRlbnRpZmllciB9KSA9PlxuICAgICAgICB0Lm9iamVjdFByb3BlcnR5KFxuICAgICAgICAgIHQuaWRlbnRpZmllcihkaXJlY3RpdmUpLFxuICAgICAgICAgIHQuaWRlbnRpZmllcihpZGVudGlmaWVyKSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKVxuXG4gICAgYXN0LmJvZHkucHVzaChcbiAgICAgIHQuZXhwcmVzc2lvblN0YXRlbWVudChcbiAgICAgICAgdC5hc3NpZ25tZW50RXhwcmVzc2lvbihcbiAgICAgICAgICAnPScsXG4gICAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKF9fc2ZjLCB0LmlkZW50aWZpZXIoJ2RpcmVjdGl2ZXMnKSksXG4gICAgICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIoJ09iamVjdCcpLCB0LmlkZW50aWZpZXIoJ2Fzc2lnbicpKSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlc09iamVjdCxcbiAgICAgICAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKF9fc2ZjLCB0LmlkZW50aWZpZXIoJ2RpcmVjdGl2ZXMnKSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApIGFzIGFueSxcbiAgICApXG4gIH1cblxuICBpZiAoIWhhc0JvZHkgJiYgIW9wdGlvbnM/LmFzdFRyYW5zZm9ybXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXN0OiBudWxsLFxuICAgICAgY29kZTogJycsXG4gICAgfVxuICB9XG5cbiAgLy8gcmUtZXhwb3J0XG4gIC8vIGBleHBvcnQgZGVmYXVsdCBfX3NmY19tYWluYFxuICBhc3QuYm9keS5wdXNoKHQuZXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKF9fc2ZjKSBhcyBhbnkpXG5cbiAgYXN0ID0gb3B0aW9ucz8uYXN0VHJhbnNmb3Jtcz8ucG9zdD8uKGFzdCwgc2ZjKSB8fCBhc3RcblxuICByZXR1cm4ge1xuICAgIGFzdCxcbiAgICBjb2RlOiBnZW5lcmF0ZShhc3QpLmNvZGUsXG4gIH1cbn1cbiIsImltcG9ydCB7IHNob3VsZFRyYW5zZm9ybSwgdHJhbnNmb3JtQVNUIH0gZnJvbSAnQHZ1ZS9yZWFjdGl2aXR5LXRyYW5zZm9ybSdcbmltcG9ydCBNYWdpY1N0cmluZyBmcm9tICdtYWdpYy1zdHJpbmcnXG5pbXBvcnQgdHlwZSB7IFBhcnNlZFNGQywgUmVzb2x2ZWRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBwYXJzZSwgdCB9IGZyb20gJy4vYmFiZWwnXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1TZmNSZWZTdWdhcihzZmM6IFBhcnNlZFNGQywgb3B0aW9uczogUmVzb2x2ZWRPcHRpb25zKSB7XG4gIGNvbnN0IGltcG9ydGVkSGVscGVycyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgZm9yIChjb25zdCBzY3JpcHQgb2YgW3NmYy5zY3JpcHQsIHNmYy5zY3JpcHRTZXR1cF0pIHtcbiAgICBpZiAoc2hvdWxkVHJhbnNmb3JtKHNjcmlwdC5jb250ZW50KSkge1xuICAgICAgY29uc3QgcyA9IG5ldyBNYWdpY1N0cmluZyhzY3JpcHQuY29udGVudClcbiAgICAgIGNvbnN0IHsgaW1wb3J0ZWRIZWxwZXJzOiBpbXBvcnRzIH0gPSB0cmFuc2Zvcm1BU1Qoc2NyaXB0LmFzdCwgcylcbiAgICAgIEFycmF5LmZyb20oaW1wb3J0cykuZm9yRWFjaChoZWxwZXIgPT4gaW1wb3J0ZWRIZWxwZXJzLmFkZChoZWxwZXIpKVxuICAgICAgc2NyaXB0LmNvbnRlbnQgPSBzLnRvU3RyaW5nKClcbiAgICAgIHNjcmlwdC5hc3QgPSBwYXJzZShzY3JpcHQuY29udGVudCwgc2ZjLnBhcnNlck9wdGlvbnMpLnByb2dyYW1cbiAgICB9XG4gIH1cblxuICBpZiAoaW1wb3J0ZWRIZWxwZXJzLnNpemUpIHtcbiAgICBzZmMuZXh0cmFEZWNsYXJhdGlvbnMgPSBbXG4gICAgICB0LmltcG9ydERlY2xhcmF0aW9uKFxuICAgICAgICBBcnJheS5mcm9tKGltcG9ydGVkSGVscGVycykubWFwKGkgPT4gdC5pbXBvcnRTcGVjaWZpZXIodC5pZGVudGlmaWVyKGBfJHtpfWApLCB0LmlkZW50aWZpZXIoaSkpKSxcbiAgICAgICAgdC5zdHJpbmdMaXRlcmFsKG9wdGlvbnMuaW1wb3J0SGVscGVyc0Zyb20pLFxuICAgICAgKSxcbiAgICBdXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgUmVzb2x2ZWRPcHRpb25zLCBTY3JpcHRTZXR1cFRyYW5zZm9ybU9wdGlvbnMgfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVPcHRpb25zKG9wdGlvbnM6IFNjcmlwdFNldHVwVHJhbnNmb3JtT3B0aW9ucyA9IHt9KTogUmVzb2x2ZWRPcHRpb25zIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAge30sXG4gICAge1xuICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgcmVhY3Rpdml0eVRyYW5zZm9ybTogZmFsc2UsXG4gICAgICBpbXBvcnRIZWxwZXJzRnJvbTogJ0B2dWUvY29tcG9zaXRpb24tYXBpJyxcbiAgICAgIGFzdFRyYW5zZm9ybXM6IHt9LFxuICAgIH0sXG4gICAgb3B0aW9ucyxcbiAgKVxufVxuIiwiaW1wb3J0IE1hZ2ljU3RyaW5nIGZyb20gJ21hZ2ljLXN0cmluZydcbmltcG9ydCB7IHNob3VsZFRyYW5zZm9ybSBhcyBzaG91bGRUcmFuc2Zvcm1SZWZTdWdhciwgdHJhbnNmb3JtIGFzIHRyYW5zZm9ybVJlZiB9IGZyb20gJ0B2dWUvcmVhY3Rpdml0eS10cmFuc2Zvcm0nXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkT3B0aW9ucywgU2NyaXB0U2V0dXBUcmFuc2Zvcm1PcHRpb25zLCBUcmFuc2Zvcm1SZXN1bHQgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHBhcnNlU0ZDIH0gZnJvbSAnLi9wYXJzZVNGQydcbmltcG9ydCB7IHRyYW5zZm9ybVNjcmlwdFNldHVwIH0gZnJvbSAnLi90cmFuc2Zvcm1TY3JpcHRTZXR1cCdcbmltcG9ydCB7IHRyYW5zZm9ybVNmY1JlZlN1Z2FyIH0gZnJvbSAnLi90cmFuc2Zvcm1TZmNSZWZTdWdhcidcbmltcG9ydCB7IHJlc29sdmVPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJ1xuXG5jb25zdCBzY3JpcHRTZXR1cFJFID0gLzxzY3JpcHRcXHMoLipcXHMpP3NldHVwKFxccy4qKT8+L1xuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkVHJhbnNmb3JtKGNvZGU6IHN0cmluZywgaWQ6IHN0cmluZywgb3B0aW9ucz86IFNjcmlwdFNldHVwVHJhbnNmb3JtT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAvLyBhdm9pZCB0cmFuc2Zvcm1pbmcgdHdpY2VcbiAgaWYgKGNvZGUuaW5jbHVkZXMoJ2V4cG9ydCBkZWZhdWx0IF9fc2ZjX21haW4nKSlcbiAgICByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIChvcHRpb25zPy5yZWFjdGl2aXR5VHJhbnNmb3JtICYmIHNob3VsZFRyYW5zZm9ybVJlZlN1Z2FyKGNvZGUpKSB8fCBzY3JpcHRTZXR1cFJFLnRlc3QoY29kZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybShpbnB1dDogc3RyaW5nLCBpZDogc3RyaW5nLCBvcHRpb25zPzogU2NyaXB0U2V0dXBUcmFuc2Zvcm1PcHRpb25zKTogUHJvbWlzZTxUcmFuc2Zvcm1SZXN1bHQ+IHtcbiAgaWYgKCFzaG91bGRUcmFuc2Zvcm0oaW5wdXQsIGlkLCBvcHRpb25zKSlcbiAgICByZXR1cm4gbnVsbFxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpXG4gIGlmIChpZC5lbmRzV2l0aCgnLnZ1ZScpIHx8IGlkLmluY2x1ZGVzKCcudnVlP3Z1ZScpKVxuICAgIHJldHVybiBhd2FpdCB0cmFuc2Zvcm1WdWUoaW5wdXQsIGlkLCByZXNvbHZlZClcbiAgZWxzZVxuICAgIHJldHVybiB0cmFuc2Zvcm1Ob25WdWUoaW5wdXQsIGlkLCByZXNvbHZlZClcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtTm9uVnVlKGlucHV0OiBzdHJpbmcsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJlc29sdmVkT3B0aW9ucyk6IFRyYW5zZm9ybVJlc3VsdCB7XG4gIGlmIChvcHRpb25zLnJlYWN0aXZpdHlUcmFuc2Zvcm0gJiYgc2hvdWxkVHJhbnNmb3JtUmVmU3VnYXIoaW5wdXQpKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVJlZihpbnB1dCwge1xuICAgICAgZmlsZW5hbWU6IGlkLFxuICAgICAgc291cmNlTWFwOiBvcHRpb25zLnNvdXJjZU1hcCxcbiAgICAgIGltcG9ydEhlbHBlcnNGcm9tOiBvcHRpb25zLmltcG9ydEhlbHBlcnNGcm9tLFxuICAgIH0pIGFzIGFueVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybVZ1ZShpbnB1dDogc3RyaW5nLCBpZDogc3RyaW5nLCBvcHRpb25zOiBSZXNvbHZlZE9wdGlvbnMpOiBQcm9taXNlPFRyYW5zZm9ybVJlc3VsdD4ge1xuICBjb25zdCBzID0gbmV3IE1hZ2ljU3RyaW5nKGlucHV0KVxuXG4gIGNvbnN0IHNmYyA9IGF3YWl0IHBhcnNlU0ZDKGlucHV0LCBpZClcblxuICBpZiAob3B0aW9ucy5yZWFjdGl2aXR5VHJhbnNmb3JtKVxuICAgIHRyYW5zZm9ybVNmY1JlZlN1Z2FyKHNmYywgb3B0aW9ucylcblxuICBjb25zdCB7IGNvZGUgfSA9IHRyYW5zZm9ybVNjcmlwdFNldHVwKHNmYywgb3B0aW9ucylcblxuICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgIC4uLnNmYy5zY3JpcHQuYXR0cnMsXG4gICAgLi4uc2ZjLnNjcmlwdFNldHVwLmF0dHJzLFxuICB9XG4gIGRlbGV0ZSBhdHRyaWJ1dGVzLnNldHVwXG4gIGNvbnN0IGF0dHIgPSBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUgPyBgJHtrZXl9PVwiJHt2YWx1ZX1cImAgOiBrZXkpXG4gICAgLmpvaW4oJyAnKVxuXG4gIGlmIChjb2RlKSB7XG4gICAgY29uc3QgYmxvY2sgPSBgPHNjcmlwdCAke2F0dHJ9PlxcbiR7Y29kZX1cXG48L3NjcmlwdD5gXG5cbiAgICBzLnJlbW92ZShzZmMuc2NyaXB0LnN0YXJ0LCBzZmMuc2NyaXB0LmVuZClcbiAgICBpZiAoc2ZjLnNjcmlwdFNldHVwLnN0YXJ0ICE9PSBzZmMuc2NyaXB0U2V0dXAuZW5kKSB7XG4gICAgICBzLm92ZXJ3cml0ZShcbiAgICAgICAgc2ZjLnNjcmlwdFNldHVwLnN0YXJ0LFxuICAgICAgICBzZmMuc2NyaXB0U2V0dXAuZW5kLFxuICAgICAgICBibG9jayxcbiAgICAgIClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzLnByZXBlbmRMZWZ0KDAsIGAke2Jsb2NrfVxcbmApXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY29kZTogcy50b1N0cmluZygpLFxuICAgIG1hcDogb3B0aW9ucy5zb3VyY2VNYXBcbiAgICAgID8gcy5nZW5lcmF0ZU1hcCh7XG4gICAgICAgIHNvdXJjZTogaWQsXG4gICAgICAgIGluY2x1ZGVDb250ZW50OiB0cnVlLFxuICAgICAgfSkgYXMgYW55XG4gICAgICA6IG51bGwsXG4gIH1cbn1cbiIsImltcG9ydCB7IGNyZWF0ZVVucGx1Z2luIH0gZnJvbSAndW5wbHVnaW4nXG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXIgfSBmcm9tICdAcm9sbHVwL3BsdWdpbnV0aWxzJ1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb25zIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IHRyYW5zZm9ybSB9IGZyb20gJy4vY29yZSdcblxuZXhwb3J0ICogZnJvbSAnLi9jb3JlJ1xuXG5leHBvcnQgY29uc3QgdW5wbHVnaW4gPSBjcmVhdGVVbnBsdWdpbjxQbHVnaW5PcHRpb25zPigob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IGNyZWF0ZUZpbHRlcihcbiAgICBvcHRpb25zLmluY2x1ZGUgfHwgKG9wdGlvbnMucmVhY3Rpdml0eVRyYW5zZm9ybSA/IFsvXFwudnVlJC8sIC9cXC52dWVcXD92dWUvLCAvXFwuW2p0XXN4PyQvXSA6IFsvXFwudnVlJC8sIC9cXC52dWVcXD92dWUvXSksXG4gICAgb3B0aW9ucy5leGNsdWRlIHx8IFsvbm9kZV9tb2R1bGVzLywgL1xcLmdpdC8sIC9cXC5udXh0L10sXG4gIClcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd1bnBsdWdpbi12dWUyLXNjcmlwdC1zZXR1cCcsXG4gICAgZW5mb3JjZTogJ3ByZScsXG4gICAgdHJhbnNmb3JtSW5jbHVkZShpZCkge1xuICAgICAgcmV0dXJuIGZpbHRlcihpZClcbiAgICB9LFxuICAgIGFzeW5jIHRyYW5zZm9ybShjb2RlLCBpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRyYW5zZm9ybShjb2RlLCBpZCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5lcnJvcihlKVxuICAgICAgfVxuICAgIH0sXG4gIH1cbn0pXG5cbmV4cG9ydCBkZWZhdWx0IHVucGx1Z2luXG4iLCJpbXBvcnQgdW5wbHVnaW4gZnJvbSAnLidcblxuZXhwb3J0IGRlZmF1bHQgdW5wbHVnaW4uZXNidWlsZFxuIl0sIm5hbWVzIjpbImJhYmVsIiwiYmFiZWxfdHJhdmVyc2UiLCJjYXBpdGFsaXplIiwiY2FtZWxpemUiLCJOb2RlVHlwZXMiLCJFbGVtZW50VHlwZXMiLCJwYXJzZSIsIm5vZGUiLCJub3ROdWxsaXNoIiwiYmFzZVBhcnNlIiwicGFyc2VyT3B0aW9ucyIsInBhcnRpdGlvbiIsIl9hIiwiX2IiLCJfYyIsImNvbnRlbnQiLCJhc3QiLCJrZXkiLCJ2YWx1ZSIsInBhcnNlRXhwcmVzc2lvbiIsInQiLCJ1bmlxIiwic2hvdWxkVHJhbnNmb3JtIiwidHJhbnNmb3JtQVNUIiwic2hvdWxkVHJhbnNmb3JtUmVmU3VnYXIiLCJ0cmFuc2Zvcm1SZWYiLCJjcmVhdGVVbnBsdWdpbiIsImNyZWF0ZUZpbHRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQUE7QUFLYSxNQUFBLENBQUEsR0FBQSxDQUE2QkEsZ0JBQWMsQ0FBQSxPQUFBLElBQVdBLGdCQUFPLEVBQUEsS0FBQSxDQUFBO0FBQzdELE1BQUEsUUFBQSxHQUF1QixFQUFVLE9BQVcsSUFBQSxDQUFBLENBQUE7QUFDNUMsTUFBQSxRQUFBLEdBQUEsQ0FBYSx3RkFBd0IsT0FBeEIsS0FBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFpQyxZQUFqQyxJQUFxRCxHQUFBLEVBQUEsR0FBQUMseUJBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLHlCQUFBLENBQWdCLFlBQXJFLElBQWdGLEdBQUEsRUFBQSxHQUFBQSx5QkFBQTs7QUNJbkcsU0FBUywwQkFBMEIsS0FBb0IsRUFBQTtBQUM1RCxFQUFJLElBQUEsTUFBQSxDQUFBO0FBQ0osRUFBSSxJQUFBLGVBQUEsQ0FBQTtBQUNKLEVBQUEsUUFBQSxDQUFTLEVBQUUsSUFBSyxDQUFBLENBQUEsQ0FBRSxPQUFRLENBQUEsS0FBSyxDQUFDLENBQUcsRUFBQTtBQUFBLElBQ2pDLFFBQVEsSUFBTSxFQUFBO0FBQ1osTUFBQSxNQUFBLEdBQVMsSUFBSSxHQUFJLENBQUEsTUFBQSxDQUFPLEtBQUssSUFBSyxDQUFBLEtBQUEsQ0FBTSxRQUFRLENBQUMsQ0FBQSxDQUFBO0FBQ2pELE1BQUEsZUFBQSxHQUFtQixLQUFLLEtBQWMsQ0FBQSxHQUFBLENBQUE7QUFBQSxLQUN4QztBQUFBO0FBQUEsSUFFQSxrQkFBa0IsSUFBTSxFQUFBO0FBQ3RCLE1BQUssSUFBQSxJQUFBLENBQUssTUFBYyxHQUFRLEtBQUEsZUFBQTtBQUM5QixRQUFBLE1BQUEsQ0FBTyxHQUFJLENBQUEsSUFBQSxDQUFLLElBQUssQ0FBQSxFQUFBLENBQUcsSUFBSSxDQUFBLENBQUE7QUFBQSxLQUNoQztBQUFBLElBQ0Esb0JBQW9CLElBQU0sRUFBQTtBQUN4QixNQUFLLElBQUEsSUFBQSxDQUFLLEtBQWMsQ0FBQSxHQUFBLEtBQVEsZUFBaUIsRUFBQTtBQUMvQyxRQUFNLE1BQUEsRUFBQSxHQUFLLEtBQUssSUFBSyxDQUFBLEVBQUEsQ0FBQTtBQUNyQixRQUFBLElBQUksR0FBRyxJQUFTLEtBQUEsWUFBQTtBQUNkLFVBQU8sTUFBQSxDQUFBLEdBQUEsQ0FBSSxHQUFHLElBQUksQ0FBQSxDQUFBO0FBQUEsT0FDdEI7QUFBQSxLQUNGO0FBQUEsR0FDRCxDQUFBLENBQUE7QUFDRCxFQUFPLE9BQUEsS0FBQSxDQUFNLEtBQUssTUFBTSxDQUFBLENBQUE7QUFDMUIsQ0FBQTtBQTRFTyxTQUFTLGVBQWUsTUFBMkIsRUFBQTtBQUN4RCxFQUFJLElBQUEsT0FBQSxDQUFBO0FBQ0osRUFBSSxJQUFBLGVBQUEsQ0FBQTtBQUNKLEVBQUEsUUFBQSxDQUFTLE1BQVEsRUFBQTtBQUFBLElBQ2YsUUFBUSxJQUFNLEVBQUE7QUFDWixNQUFBLE9BQUEsR0FBVSxJQUFJLEdBQUksQ0FBQSxNQUFBLENBQU8sS0FBTSxJQUFLLENBQUEsS0FBQSxDQUFjLE9BQU8sQ0FBQyxDQUFBLENBQUE7QUFDMUQsTUFBQSxlQUFBLEdBQW1CLEtBQUssS0FBYyxDQUFBLEdBQUEsQ0FBQTtBQUFBLEtBQ3hDO0FBQUE7QUFBQSxJQUVBLGtCQUFrQixJQUFNLEVBQUE7QUFDdEIsTUFBSyxJQUFBLElBQUEsQ0FBSyxNQUFjLEdBQVEsS0FBQSxlQUFBO0FBQzlCLFFBQUEsT0FBQSxDQUFRLE1BQU8sQ0FBQSxJQUFBLENBQUssSUFBSyxDQUFBLEVBQUEsQ0FBRyxJQUFJLENBQUEsQ0FBQTtBQUFBLEtBQ3BDO0FBQUEsSUFDQSxvQkFBb0IsSUFBTSxFQUFBO0FBQ3hCLE1BQUssSUFBQSxJQUFBLENBQUssS0FBYyxDQUFBLEdBQUEsS0FBUSxlQUFpQixFQUFBO0FBQy9DLFFBQU0sTUFBQSxFQUFBLEdBQUssS0FBSyxJQUFLLENBQUEsRUFBQSxDQUFBO0FBQ3JCLFFBQUEsSUFBSSxHQUFHLElBQVMsS0FBQSxZQUFBO0FBQ2QsVUFBUSxPQUFBLENBQUEsTUFBQSxDQUFPLEdBQUcsSUFBSSxDQUFBLENBQUE7QUFBQSxPQUMxQjtBQUFBLEtBQ0Y7QUFBQSxHQUNELENBQUEsQ0FBQTtBQUNELEVBQU8sT0FBQSxLQUFBLENBQU0sS0FBSyxPQUFPLENBQUEsQ0FBQTtBQUMzQjs7QUNqSU8sTUFBTSxZQUFZLENBQUMsR0FBQSxLQUFnQkMsaUJBQVcsQ0FBQUMsZUFBQSxDQUFTLEdBQUcsQ0FBQyxDQUFBLENBQUE7QUFJM0QsU0FBUywrQkFBK0IsTUFBZSxFQUFBO0FBQzVELEVBQU8sT0FBQSxLQUFBLENBQUEsQ0FBQTtBQUNUOztBQ2lCQSxJQUFVLFNBQUEsQ0FBQTtBQUFBLENBQVYsQ0FBVUMsVUFBVixLQUFBO0FBQ1MsRUFBTUEsV0FBQSxJQUFPLEdBQUEsQ0FBQSxDQUFBO0FBQWIsRUFDTEEsV0FBQSxPQUFVLEdBQUEsQ0FBQSxDQUFBO0FBREwsRUFFTEEsV0FBQSxJQUFPLEdBQUEsQ0FBQSxDQUFBO0FBRkYsRUFHTEEsV0FBQSxPQUFVLEdBQUEsQ0FBQSxDQUFBO0FBSEwsRUFJTEEsV0FBQSxpQkFBb0IsR0FBQSxDQUFBLENBQUE7QUFKZixFQUtMQSxXQUFBLGFBQWdCLEdBQUEsQ0FBQSxDQUFBO0FBTFgsRUFNTEEsV0FBQSxTQUFZLEdBQUEsQ0FBQSxDQUFBO0FBTlAsRUFPTEEsV0FBQSxTQUFZLEdBQUEsQ0FBQSxDQUFBO0FBUFAsRUFRTEEsV0FBQSxtQkFBc0IsR0FBQSxDQUFBLENBQUE7QUFSakIsRUFTTEEsV0FBQSxFQUFLLEdBQUEsQ0FBQSxDQUFBO0FBVEEsRUFVTEEsV0FBQSxTQUFZLEdBQUEsRUFBQSxDQUFBO0FBVlAsRUFXTEEsV0FBQSxHQUFNLEdBQUEsRUFBQSxDQUFBO0FBWEQsRUFZTEEsV0FBQSxTQUFZLEdBQUEsRUFBQSxDQUFBO0FBWlAsRUFhTEEsV0FBQSxVQUFhLEdBQUEsRUFBQSxDQUFBO0FBYlIsRUFjTEEsV0FBQSxrQkFBcUIsR0FBQSxFQUFBLENBQUE7QUFkaEIsRUFlTEEsV0FBQSxvQkFBdUIsR0FBQSxFQUFBLENBQUE7QUFmbEIsRUFnQkxBLFdBQUEsV0FBYyxHQUFBLEVBQUEsQ0FBQTtBQWhCVCxFQWlCTEEsV0FBQSxtQkFBc0IsR0FBQSxFQUFBLENBQUE7QUFqQmpCLEVBa0JMQSxXQUFBLHNCQUF5QixHQUFBLEVBQUEsQ0FBQTtBQWxCcEIsRUFtQkxBLFdBQUEseUJBQTRCLEdBQUEsRUFBQSxDQUFBO0FBbkJ2QixFQW9CTEEsV0FBQSxtQkFBc0IsR0FBQSxFQUFBLENBQUE7QUFwQmpCLEVBcUJMQSxXQUFBLGtCQUFxQixHQUFBLEVBQUEsQ0FBQTtBQXJCaEIsRUFzQkxBLFdBQUEsbUJBQXNCLEdBQUEsRUFBQSxDQUFBO0FBdEJqQixFQXVCTEEsV0FBQSxlQUFrQixHQUFBLEVBQUEsQ0FBQTtBQXZCYixFQXdCTEEsV0FBQSx3QkFBMkIsR0FBQSxFQUFBLENBQUE7QUF4QnRCLEVBeUJMQSxXQUFBLHNCQUF5QixHQUFBLEVBQUEsQ0FBQTtBQXpCcEIsRUEwQkxBLFdBQUEsbUJBQXNCLEdBQUEsRUFBQSxDQUFBO0FBQUEsQ0EzQmhCLEVBQUEsU0FBQSxLQUFBLFNBQUEsR0FBQSxFQUFBLENBQUEsQ0FBQSxDQUFBO0FBOEJWLElBQVUsWUFBQSxDQUFBO0FBQUEsQ0FBVixDQUFVQyxhQUFWLEtBQUE7QUFDUyxFQUFNQSxjQUFBLE9BQVUsR0FBQSxDQUFBLENBQUE7QUFBaEIsRUFDTEEsY0FBQSxTQUFZLEdBQUEsQ0FBQSxDQUFBO0FBRFAsRUFFTEEsY0FBQSxJQUFPLEdBQUEsQ0FBQSxDQUFBO0FBRkYsRUFHTEEsY0FBQSxRQUFXLEdBQUEsQ0FBQSxDQUFBO0FBQUEsQ0FKTCxFQUFBLFlBQUEsS0FBQSxZQUFBLEdBQUEsRUFBQSxDQUFBLENBQUEsQ0FBQTtBQU9WLE1BQU0sbUJBQUEsdUJBQTBCLEdBQUksQ0FBQTtBQUFBLEVBQ2xDLElBQUE7QUFBQSxFQUNBLE1BQUE7QUFBQSxFQUNBLFNBQUE7QUFBQSxFQUNBLEtBQUE7QUFBQSxFQUNBLE1BQUE7QUFBQSxFQUNBLE9BQUE7QUFBQSxFQUNBLElBQUE7QUFBQSxFQUNBLE1BQUE7QUFBQSxFQUNBLE1BQUE7QUFBQSxFQUNBLFlBQUE7QUFBQSxFQUNBLEtBQUE7QUFBQSxFQUNBLEtBQUE7QUFBQSxFQUNBLE1BQUE7QUFBQSxFQUNBLE1BQUE7QUFBQSxFQUNBLE1BQUE7QUFBQSxFQUNBLEtBQUE7QUFBQSxFQUNBLE9BQUE7QUFBQTtBQUFBO0FBR0YsQ0FBQyxDQUFBLENBQUE7QUFFRCxTQUFTLGNBQWMsSUFBbUMsRUFBQTtBQXBGMUQsRUFBQSxJQUFBLEVBQUEsQ0FBQTtBQXFGRSxFQUFNLE1BQUEsT0FBQSxHQUNGLElBQUssQ0FBQSxJQUFBLEtBQVMsU0FBVSxDQUFBLE9BQUEsSUFBVyxLQUFLLE9BQVksS0FBQSxZQUFBLENBQWEsU0FDL0QsR0FBQSxDQUFDLElBQUssQ0FBQSxHQUFHLElBQ1QsSUFBSyxDQUFBLElBQUEsS0FBUyxTQUFVLENBQUEsT0FBQSxJQUFXLElBQUssQ0FBQSxPQUFBLEtBQVksWUFBYSxDQUFBLE9BQUEsR0FDL0QsQ0FBQyxJQUFBLENBQUssR0FBRyxDQUFBLEdBQ1QsRUFBQyxDQUFBO0FBRVQsRUFBTSxNQUFBLFFBQUEsR0FDRixLQUFLLElBQVMsS0FBQSxTQUFBLENBQVUsS0FDdEIsSUFBSyxDQUFBLFFBQUEsR0FDTCxLQUFLLElBQVMsS0FBQSxTQUFBLENBQVUsV0FDckIsSUFBSyxDQUFBLElBQUEsS0FBUyxVQUFVLFNBQ3hCLElBQUEsSUFBQSxDQUFLLFNBQVMsU0FBVSxDQUFBLEdBQUEsR0FDekIsSUFBSyxDQUFBLFFBQUEsR0FDTCxJQUFLLENBQUEsSUFBQSxLQUFTLFVBQVUsSUFDdkIsSUFBQSxJQUFBLENBQUssU0FBUyxTQUFVLENBQUEsT0FBQSxJQUN4QixLQUFLLElBQVMsS0FBQSxTQUFBLENBQVUsbUJBQ3hCLElBQUEsSUFBQSxDQUFLLElBQVMsS0FBQSxTQUFBLENBQVUsYUFDeEIsSUFBSyxDQUFBLElBQUEsS0FBUyxVQUFVLGFBQ3ZCLEdBQUEsTUFDQSxFQUErQixHQUFBLDhCQUFBLENBQUksQ0FBbkMsS0FBQSxJQUFBLEdBQUEsRUFBQSxHQUF3QyxFQUFDLENBQUE7QUFFbkQsRUFBQSxPQUFPLENBQUMsR0FBRyxPQUFBLEVBQVMsR0FBRyxRQUFTLENBQUEsT0FBQSxDQUFRLGFBQWEsQ0FBQyxDQUFBLENBQUE7QUFDeEQsQ0FBQTtBQUVBLFNBQVMsa0JBQWtCLElBQW1DLEVBQUE7QUFDNUQsRUFBSSxJQUFBLElBQUEsQ0FBSyxJQUFTLEtBQUEsU0FBQSxDQUFVLE9BQVMsRUFBQTtBQUNuQyxJQUFNLE1BQUEsVUFBQSxHQUFhLEtBQUssS0FBTSxDQUFBLE9BQUE7QUFBQSxNQUFRLENBQUEsQ0FBQSxLQUNwQyxFQUFFLElBQVMsS0FBQSxTQUFBLENBQVUsWUFBWSxDQUFDLENBQUEsQ0FBRSxJQUFJLENBQUEsR0FBSSxFQUFDO0FBQUEsS0FDL0MsQ0FBQTtBQUNBLElBQU8sT0FBQSxDQUFDLEdBQUcsVUFBWSxFQUFBLEdBQUcsS0FBSyxRQUFTLENBQUEsT0FBQSxDQUFRLGlCQUFpQixDQUFDLENBQUEsQ0FBQTtBQUFBLEdBRTNELE1BQUEsSUFBQSxJQUFBLENBQUssSUFBUyxLQUFBLFNBQUEsQ0FBVSxFQUFJLEVBQUE7QUFDbkMsSUFBTyxPQUFBLElBQUEsQ0FBSyxRQUFTLENBQUEsT0FBQSxDQUFRLGlCQUFpQixDQUFBLENBQUE7QUFBQSxHQUNoRCxNQUFBLElBQ1MsS0FBSyxJQUFTLEtBQUEsU0FBQSxDQUFVLGFBQWEsSUFBSyxDQUFBLElBQUEsS0FBUyxVQUFVLEdBQUssRUFBQTtBQUN6RSxJQUFPLE9BQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQSxPQUFBLENBQVEsaUJBQWlCLENBQUEsQ0FBQTtBQUFBLEdBQ2hELE1BQUEsSUFFRSxLQUFLLElBQVMsS0FBQSxTQUFBLENBQVUsaUJBQ3JCLElBQUssQ0FBQSxJQUFBLEtBQVMsVUFBVSxtQkFDeEIsSUFBQSxJQUFBLENBQUssU0FBUyxTQUFVLENBQUEsSUFBQSxJQUN4QixLQUFLLElBQVMsS0FBQSxTQUFBLENBQVUsV0FDeEIsSUFBSyxDQUFBLElBQUEsS0FBUyxVQUFVLFNBQzNCLEVBQUE7QUFDQSxJQUFBLE9BQU8sRUFBQyxDQUFBO0FBQUEsR0FFTCxNQUFBO0FBRUgsSUFBQSxPQUFPLEVBQUMsQ0FBQTtBQUFBLEdBQ1Y7QUFDRixDQUFBO0FBRUEsU0FBUyx3QkFBd0IsS0FBeUIsRUFBQTtBQUN4RCxFQUFNLE1BQUEsZUFBQSxHQUFrQixNQUFNLFNBQVUsRUFBQSxDQUFFLENBQUMsQ0FBTSxLQUFBLEdBQUEsR0FBTSxJQUFJLEtBQVcsQ0FBQSxDQUFBLENBQUEsR0FBQSxLQUFBLENBQUE7QUFDdEUsRUFBTyxPQUFBLGNBQUEsQ0FBZUMsWUFBTSxDQUFBLGVBQWUsQ0FBQyxDQUFBLENBQUE7QUFDOUMsQ0FBQTtBQUVBLFNBQVMsNkJBQ1AsSUFDVSxFQUFBO0FBQ1YsRUFBSSxJQUFBLElBQUEsQ0FBSyxJQUFTLEtBQUEsU0FBQSxDQUFVLFNBQVcsRUFBQTtBQUNyQyxJQUFNLE1BQUEsR0FBQSxHQUFNLEtBQUssR0FBUSxLQUFBLEtBQUEsQ0FBQSxHQUFZLEVBQUssR0FBQSx1QkFBQSxDQUF3QixLQUFLLEdBQUcsQ0FBQSxDQUFBO0FBQzFFLElBQU0sTUFBQSxHQUFBLEdBQU0sS0FBSyxHQUFRLEtBQUEsS0FBQSxDQUFBLEdBQVksRUFBSyxHQUFBLHVCQUFBLENBQXdCLEtBQUssR0FBRyxDQUFBLENBQUE7QUFDMUUsSUFBQSxPQUFPLENBQUMsR0FBRyxHQUFLLEVBQUEsR0FBRyxHQUFHLENBQUEsQ0FBQTtBQUFBLEdBQ3hCO0FBQ0EsRUFBQSxPQUFPLEVBQUMsQ0FBQTtBQUNWLENBQUE7QUFFQSxTQUFTLHdCQUNQLElBQ1UsRUFBQTtBQTVKWixFQUFBLElBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQUE7QUE2SkUsRUFBSSxJQUFBLElBQUEsQ0FBSyxJQUFTLEtBQUEsU0FBQSxDQUFVLGlCQUFtQixFQUFBO0FBQzdDLElBQUEsT0FBTyxLQUFLLFFBQVcsR0FBQSxFQUFLLEdBQUEsdUJBQUEsQ0FBd0IsS0FBSyxPQUFPLENBQUEsQ0FBQTtBQUFBLEdBRXpELE1BQUEsSUFBQSxJQUFBLENBQUssSUFBUyxLQUFBLFNBQUEsQ0FBVSxtQkFBcUIsRUFBQTtBQUNwRCxJQUFBLE9BQU8sS0FBSyxRQUFTLENBQUEsT0FBQTtBQUFBLE1BQVEsT0FDM0IsT0FBTyxDQUFBLEtBQU0sV0FBVyxFQUFDLEdBQUksd0JBQXdCLENBQUMsQ0FBQTtBQUFBLEtBQ3hELENBQUE7QUFBQSxHQUVPLE1BQUEsSUFBQSxJQUFBLENBQUssSUFBUyxLQUFBLFNBQUEsQ0FBVSxhQUFlLEVBQUE7QUFDOUMsSUFBTyxPQUFBLHVCQUFBLENBQXdCLEtBQUssT0FBTyxDQUFBLENBQUE7QUFBQSxHQUVwQyxNQUFBLElBQUEsSUFBQSxDQUFLLElBQVMsS0FBQSxTQUFBLENBQVUsT0FBUyxFQUFBO0FBQ3hDLElBQUEsTUFBTSxRQUFXLEdBQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQSxPQUFBLENBQVEsdUJBQXVCLENBQUEsQ0FBQTtBQUU5RCxJQUFNLE1BQUEsY0FBQSxHQUFpQixLQUFLLEtBQU0sQ0FBQSxPQUFBO0FBQUEsTUFBUSxDQUFBLENBQUEsS0FDeEMsRUFBRSxJQUFTLEtBQUEsU0FBQSxDQUFVLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBQztBQUFBLEtBQzFDLENBQUE7QUFDQSxJQUFNLE1BQUEsY0FBQSxHQUFpQixLQUFLLEtBQU0sQ0FBQSxPQUFBO0FBQUEsTUFBUSxDQUFBLENBQUEsS0FDeEMsRUFBRSxJQUFTLEtBQUEsU0FBQSxDQUFVLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBQztBQUFBLEtBQzFDLENBQUE7QUFFQSxJQUFBLE1BQU0sVUFBVSxjQUFlLENBQUEsSUFBQTtBQUFBLE1BQzdCLENBQUFDLEtBQVFBLEtBQUFBLEtBQUFBLENBQUssSUFBUyxLQUFBLEtBQUEsSUFBU0EsTUFBSyxLQUFVLEtBQUEsS0FBQSxDQUFBO0FBQUEsS0FDaEQsQ0FBQTtBQUNBLElBQU0sTUFBQSxhQUFBLEdBQUEsQ0FBZ0IsRUFBUyxHQUFBLE9BQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsT0FBQSxDQUFBLEtBQUEsS0FBVCxJQUFnQixHQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxPQUFBLENBQUE7QUFFdEMsSUFBQSxNQUFNLFlBQVksY0FBZSxDQUFBLElBQUEsQ0FBSyxDQUFBQSxLQUFRQSxLQUFBQSxLQUFBQSxDQUFLLFNBQVMsTUFBTSxDQUFBLENBQUE7QUFDbEUsSUFBTSxNQUFBLG1CQUFBLEdBQUEsQ0FDRix1Q0FBVyxHQUFRLE1BQUEsS0FBQSxDQUFBLEdBQVksRUFBSyxHQUFBLHVCQUFBLENBQXdCLFVBQVUsR0FBRyxDQUFBLENBQUE7QUFFN0UsSUFBQSxNQUFNLHVDQUFpRCxFQUFDLENBQUE7QUFFeEQsSUFBQSxNQUFNLFdBQVcsY0FBZSxDQUFBLElBQUEsQ0FBSyxDQUFBQSxLQUFRQSxLQUFBQSxLQUFBQSxDQUFLLFNBQVMsS0FBSyxDQUFBLENBQUE7QUFDaEUsSUFBQSxNQUFNLG9CQUNGLEVBQVUsR0FBQSxRQUFBLElBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBLFFBQUEsQ0FBQSxHQUFBLEtBQVYsSUFBZSxHQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxJQUFBLE1BQVMsVUFBVSxpQkFDaEMsR0FBQSx1QkFBQTtBQUFBLE1BQ0EsUUFBUyxDQUFBLEdBQUEsQ0FBSSxPQUFRLENBQUEsT0FBQSxDQUFRLG9CQUFvQixFQUFFLENBQUE7QUFBQSxRQUVuRCxFQUFDLENBQUE7QUFFUCxJQUFBLE1BQU0sc0NBQWdELEVBQUMsQ0FBQTtBQUV2RCxJQUFBLE1BQU0sS0FBUSxHQUFBLGNBQUEsQ0FDWCxNQUFPLENBQUEsQ0FBQyxFQUFFLElBQUEsRUFBVyxLQUFBLElBQUEsS0FBUyxNQUFVLElBQUEsSUFBQSxLQUFTLEtBQUssQ0FBQSxDQUN0RCxRQUFRLDRCQUE0QixDQUFBLENBQUE7QUFFdkMsSUFBTSxNQUFBLG9CQUFBLHVCQUEyQixHQUFJLENBQUE7QUFBQSxNQUNuQyxHQUFHLG9DQUFBO0FBQUEsTUFDSCxHQUFHLG1DQUFBO0FBQUEsS0FDSixDQUFBLENBQUE7QUFDRCxJQUFPLE9BQUE7QUFBQSxNQUNMLEdBQUcsbUJBQUE7QUFBQSxNQUNILGFBQUE7QUFBQSxNQUNBLEdBQUcsZUFBQTtBQUFBLE1BQ0gsR0FBRyxDQUFDLEdBQUcsUUFBQSxFQUFVLEdBQUcsS0FBSyxDQUFFLENBQUEsTUFBQSxDQUFPLENBQUssQ0FBQSxLQUFBLENBQUMsb0JBQXFCLENBQUEsR0FBQSxDQUFJLENBQUMsQ0FBQyxDQUFBO0FBQUEsS0FDckUsQ0FBRSxPQUFPQyxnQkFBVSxDQUFBLENBQUE7QUFBQSxHQUVaLE1BQUEsSUFBQSxJQUFBLENBQUssSUFBUyxLQUFBLFNBQUEsQ0FBVSxHQUFLLEVBQUE7QUFNcEMsSUFBTyxPQUFBLENBQUMsS0FBSyxNQUFRLEVBQUEsR0FBRyxLQUFLLFFBQVEsQ0FBQSxDQUFFLFFBQVEsdUJBQXVCLENBQUEsQ0FBQTtBQUFBLEdBRS9ELE1BQUEsSUFBQSxJQUFBLENBQUssSUFBUyxLQUFBLFNBQUEsQ0FBVSxFQUFJLEVBQUE7QUFDbkMsSUFBQSxPQUFBLENBQUEsQ0FBUSxVQUFLLFFBQUwsS0FBQSxJQUFBLEdBQUEsRUFBQSxHQUFpQixFQUFDLEVBQUcsUUFBUSx1QkFBdUIsQ0FBQSxDQUFBO0FBQUEsR0FFckQsTUFBQSxJQUFBLElBQUEsQ0FBSyxJQUFTLEtBQUEsU0FBQSxDQUFVLFNBQVcsRUFBQTtBQUMxQyxJQUFPLE9BQUEsQ0FBQyxJQUFLLENBQUEsU0FBQSxFQUFXLEdBQUcsSUFBQSxDQUFLLFFBQVEsQ0FBQSxDQUNyQyxNQUFPLENBQUFBLGdCQUFVLENBQ2pCLENBQUEsT0FBQSxDQUFRLHVCQUF1QixDQUFBLENBQUE7QUFBQSxHQUdsQyxNQUFBLElBQUEsSUFBQSxDQUFLLElBQVMsS0FBQSxTQUFBLENBQVUsSUFDckIsSUFBQSxJQUFBLENBQUssSUFBUyxLQUFBLFNBQUEsQ0FBVSxPQUN4QixJQUFBLElBQUEsQ0FBSyxJQUFTLEtBQUEsU0FBQSxDQUFVLFNBQzNCLEVBQUE7QUFDQSxJQUFBLE9BQU8sRUFBQyxDQUFBO0FBQUEsR0FFTCxNQUFBO0FBRUgsSUFBQSxPQUFPLEVBQUMsQ0FBQTtBQUFBLEdBQ1Y7QUFDRixDQUFBO0FBRU8sU0FBUyxxQkFDZCxZQUNBLEVBQUE7QUFyUEYsRUFBQSxJQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxDQUFBO0FBc1BFLEVBQUEsTUFBTSxjQUFhLEVBQWMsR0FBQSxZQUFBLElBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBLFlBQUEsQ0FBQSxRQUFBLENBQVMsT0FBUSxDQUFBLGFBQUEsQ0FBQSxLQUEvQixZQUFpRCxFQUFDLENBQUE7QUFDckUsRUFBQSxNQUFNLGNBQWEsRUFBYyxHQUFBLFlBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsWUFBQSxDQUFBLFFBQUEsQ0FBUyxPQUFRLENBQUEsaUJBQUEsQ0FBQSxLQUEvQixZQUFxRCxFQUFDLENBQUE7QUFDekUsRUFBQSxNQUFNLGVBQ0YsRUFBYyxHQUFBLFlBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsWUFBQSxDQUFBLFFBQUEsQ0FBUyxPQUFRLENBQUEsdUJBQUEsQ0FBQSxLQUEvQixZQUEyRCxFQUFDLENBQUE7QUFFaEUsRUFBTyxPQUFBO0FBQUEsSUFDTCxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFDQSxXQUFBO0FBQUEsR0FDRixDQUFBO0FBQ0YsQ0FBQTtBQUVBLFNBQVMsc0JBQXNCLElBQWlDLEVBQUE7QUFDOUQsRUFBQSxJQUFBLEdBQU8sSUFBUSxJQUFBLElBQUEsQ0FBQTtBQUNmLEVBQUEsTUFBTSxXQUFtRCxHQUFBO0FBQUEsSUFDdkQsSUFBSSxFQUFDO0FBQUEsSUFDTCxFQUFBLEVBQUksQ0FBQyxZQUFZLENBQUE7QUFBQSxJQUNqQixHQUFBLEVBQUssQ0FBQyxLQUFLLENBQUE7QUFBQSxJQUNYLEdBQUEsRUFBSyxDQUFDLEtBQUEsRUFBTyxZQUFZLENBQUE7QUFBQSxHQUMzQixDQUFBO0FBQ0EsRUFBTSxNQUFBLE9BQUEsR0FBVSxZQUFZLElBQUksQ0FBQSxDQUFBO0FBQ2hDLEVBQUEsSUFBSSxPQUFZLEtBQUEsS0FBQSxDQUFBO0FBQ2QsSUFBTSxNQUFBLElBQUksV0FBWSxDQUFBLENBQUEsNkJBQUEsRUFBZ0MsSUFBTSxDQUFBLENBQUEsQ0FBQSxDQUFBO0FBQzlELEVBQU8sT0FBQTtBQUFBLElBQ0wsVUFBWSxFQUFBLFFBQUE7QUFBQSxJQUNaLE9BQUE7QUFBQSxHQUNGLENBQUE7QUFDRixDQUFBO0FBQ3NCLGVBQUEsUUFBQSxDQUNwQixJQUNBLEVBQUEsRUFBQSxFQUNBLE9BQ29CLEVBQUE7QUF0UnRCLEVBQUEsSUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FBQTtBQXVSRSxFQUFBLE1BQU0sZUFBa0IsR0FBQUMsc0JBQUEsQ0FBVSxJQUFNLEVBQUFDLHlCQUFhLEVBQUUsUUFBUyxDQUFBLE9BQUE7QUFBQSxJQUFRLENBQ3RFLENBQUEsS0FBQSxDQUFBLENBQUUsSUFBUyxLQUFBLFNBQUEsQ0FBVSxPQUFXLElBQUEsQ0FBQSxDQUFFLE9BQVksS0FBQSxZQUFBLENBQWEsT0FDdkQsR0FBQSxDQUFDLENBQUMsQ0FBQSxHQUNGLEVBQUM7QUFBQSxHQUNQLENBQUE7QUFDQSxFQUFBLE1BQU0sZUFBZSxlQUFnQixDQUFBLElBQUEsQ0FBSyxDQUFLLENBQUEsS0FBQSxDQUFBLENBQUUsUUFBUSxVQUFVLENBQUEsQ0FBQTtBQUVuRSxFQUFNLE1BQUEsQ0FBQyxxQkFBdUIsRUFBQSxnQkFBZ0IsQ0FBSSxHQUFBQyxlQUFBO0FBQUEsSUFDaEQsZUFBZ0IsQ0FBQSxNQUFBLENBQU8sQ0FBSyxDQUFBLEtBQUEsQ0FBQSxDQUFFLFFBQVEsUUFBUSxDQUFBO0FBQUEsSUFDOUMsQ0FBQSxDQUFBLEtBQUssQ0FBRSxDQUFBLEtBQUEsQ0FBTSxJQUFLLENBQUEsQ0FBQSxDQUFBLEtBQUssQ0FBRSxDQUFBLElBQUEsS0FBUyxTQUFVLENBQUEsU0FBQSxJQUFhLENBQUUsQ0FBQSxJQUFBLEtBQVMsT0FBTyxDQUFBO0FBQUEsR0FDN0UsQ0FBQTtBQUVBLEVBQUEsTUFBTSxnQkFBbUIsR0FBQSxDQUN2QixDQUNBLEVBQUEsYUFBQSxHQUEyQyxPQUFLLENBQzlCLEtBQUE7QUF0U3RCLElBQUFDLElBQUFBLEdBQUFBLEVBQUFDLEtBQUFDLEdBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FBQTtBQXVTSSxJQUFBLElBQUksTUFBTSxLQUFXLENBQUEsRUFBQTtBQUNuQixNQUFBLE1BQU1DLFFBQVUsR0FBQSxFQUFBLENBQUE7QUFDaEIsTUFBTUMsTUFBQUEsSUFBQUEsR0FBTVYsYUFBTVMsUUFBUyxFQUFBO0FBQUEsUUFDekIsVUFBWSxFQUFBLFFBQUE7QUFBQSxRQUNaLFNBQVMsRUFBQztBQUFBLE9BQ1gsQ0FBRSxDQUFBLE9BQUEsQ0FBQTtBQUNILE1BQU8sT0FBQTtBQUFBLFFBQ0wsS0FBTyxFQUFBLENBQUE7QUFBQSxRQUNQLEdBQUssRUFBQSxDQUFBO0FBQUEsUUFDTCxZQUFjLEVBQUEsQ0FBQTtBQUFBLFFBQ2QsVUFBWSxFQUFBLENBQUE7QUFBQSxRQUNaLE9BQUFBLEVBQUFBLFFBQUFBO0FBQUEsUUFDQSxPQUFPLEVBQUM7QUFBQSxRQUNSLEtBQU8sRUFBQSxLQUFBO0FBQUEsUUFDUCxHQUFBQyxFQUFBQSxJQUFBQTtBQUFBLE9BQ0YsQ0FBQTtBQUFBLEtBQ0Y7QUFDQSxJQUFBLE1BQU0sUUFBUSxNQUFPLENBQUEsV0FBQTtBQUFBLE1BQ25CLEVBQUUsS0FBTSxDQUFBLE9BQUE7QUFBQSxRQUFRLENBQUUsQ0FBQSxLQUFBO0FBelR4QixVQUFBSixJQUFBQSxHQUFBQSxDQUFBQTtBQTBUUSxVQUNFLE9BQUEsRUFBQSxDQUFBLENBQUUsU0FBUyxTQUFVLENBQUEsU0FBQSxJQUFhLFNBQU9BLEdBQUEsR0FBQSxDQUFBLENBQUUsVUFBRixJQUFBQSxHQUFBQSxLQUFBQSxDQUFBQSxHQUFBQSxHQUFBQSxDQUFTLGFBQVksUUFFNUQsQ0FBQSxHQUFBLEtBQ0EsQ0FBQyxDQUFDLEVBQUUsSUFBTSxFQUFBLENBQUEsQ0FBRSxLQUFNLENBQUEsT0FBTyxDQUFDLENBQUEsQ0FBQTtBQUFBLFNBQUE7QUFBQSxPQUNoQztBQUFBLEtBQ0YsQ0FBQTtBQUNBLElBQUEsTUFBTSxPQUFVQyxHQUFBQSxDQUFBQSxHQUFBQSxHQUFBQSxDQUFBRCxHQUFBLEdBQUEsQ0FBQSxDQUFFLFFBQVMsQ0FBQSxDQUFDLENBQVosS0FBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEdBQWUsQ0FBQSxHQUFBLENBQUksTUFBbkIsS0FBQSxJQUFBLEdBQUFDLEdBQTZCLEdBQUEsRUFBQSxDQUFBO0FBQzdDLElBQUEsTUFBTSxZQUFlLEdBQUEsQ0FBQSxFQUFBLEdBQUEsQ0FBQUMsR0FBQSxHQUFBLENBQUEsQ0FBRSxRQUFTLENBQUEsQ0FBQyxDQUFaLEtBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxHQUFlLENBQUEsR0FBQSxDQUFJLEtBQU0sQ0FBQSxNQUFBLEtBQXpCLElBQW1DLEdBQUEsRUFBQSxHQUFBLENBQUEsQ0FBQTtBQUN4RCxJQUFNLE1BQUEsVUFBQSxHQUFBLENBQWEsYUFBRSxRQUFTLENBQUEsQ0FBQyxNQUFaLElBQWUsR0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsR0FBQSxDQUFJLEdBQUksQ0FBQSxNQUFBLEtBQXZCLElBQWlDLEdBQUEsRUFBQSxHQUFBLENBQUEsQ0FBQTtBQUNwRCxJQUFBLE1BQU0sR0FBTSxHQUFBLGFBQUE7QUFBQSxNQUNWUixhQUFNLE9BQVMsRUFBQSxxQkFBQSxDQUFzQixLQUFNLENBQUEsSUFBSSxDQUFDLENBQUUsQ0FBQSxPQUFBO0FBQUEsS0FDcEQsQ0FBQTtBQUNBLElBQU8sT0FBQTtBQUFBLE1BQ0wsS0FBQSxFQUFPLENBQUUsQ0FBQSxHQUFBLENBQUksS0FBTSxDQUFBLE1BQUE7QUFBQSxNQUNuQixHQUFBLEVBQUssQ0FBRSxDQUFBLEdBQUEsQ0FBSSxHQUFJLENBQUEsTUFBQTtBQUFBLE1BQ2YsWUFBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLE1BQ0EsT0FBQTtBQUFBLE1BQ0EsS0FBQTtBQUFBLE1BQ0EsS0FBTyxFQUFBLElBQUE7QUFBQSxNQUNQLEdBQUE7QUFBQSxLQUNGLENBQUE7QUFBQSxHQUNGLENBQUE7QUFDQSxFQUFBLE1BQU0sV0FBYyxHQUFBLGdCQUFBO0FBQUEsSUFDbEIsc0JBQXNCLENBQUMsQ0FBQTtBQUFBLElBQ3ZCLENBQUEsRUFBQSxHQUFBLE9BQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsT0FBQSxDQUFTLGtCQUFULElBQXdCLEdBQUEsS0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLFdBQUE7QUFBQSxHQUMxQixDQUFBO0FBQ0EsRUFBQSxNQUFNLE1BQVMsR0FBQSxnQkFBQTtBQUFBLElBQ2IsaUJBQWlCLENBQUMsQ0FBQTtBQUFBLElBQ2xCLENBQUEsRUFBQSxHQUFBLE9BQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsT0FBQSxDQUFTLGtCQUFULElBQXdCLEdBQUEsS0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLE1BQUE7QUFBQSxHQUMxQixDQUFBO0FBRUEsRUFDRSxJQUFBLE1BQUEsQ0FBTyxTQUNKLFdBQVksQ0FBQSxLQUFBLElBQ1osWUFBWSxLQUFNLENBQUEsSUFBQSxLQUFTLE1BQU8sQ0FBQSxLQUFBLENBQU0sSUFDM0MsRUFBQTtBQUNBLElBQUEsTUFBTSxJQUFJLFdBQUE7QUFBQSxNQUNSLHNEQUFBO0FBQUEsS0FDRixDQUFBO0FBQUEsR0FDRjtBQUVBLEVBQUEsTUFBTSxjQUNGLEdBQUEsWUFBQSxJQUFnQixJQUNkLEdBQUEsS0FBQSxDQUFBLEdBQ0EsYUFBYSxLQUFNLENBQUEsSUFBQTtBQUFBLElBQ25CLENBQUUsQ0FBQSxLQUFBO0FBeldWLE1BQUFNLElBQUFBLEdBQUFBLENBQUFBO0FBMFdVLE1BQUEsT0FBQSxDQUFBLENBQUUsU0FBUyxTQUFVLENBQUEsU0FBQSxJQUNoQixDQUFFLENBQUEsSUFBQSxLQUFTLFlBQ1hBLEdBQUEsR0FBQSxDQUFBLENBQUUsS0FBRixLQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsSUFBUyxJQUFTLE1BQUEsU0FBQSxDQUFVLElBQzVCLElBQUEsQ0FBQSxDQUFFLE1BQU0sT0FBWSxLQUFBLEtBQUEsQ0FBQTtBQUFBLEtBQUE7QUFBQSxHQUV6QixHQUFBSCxzQkFBQTtBQUFBLElBQ0MsQ0FBQSxNQUFNLE9BQU8sS0FBSyxDQUFHLEVBQUEsT0FBQTtBQUFBLE1BQ3BCLFlBQUEsQ0FBYSxTQUFTLEdBQUksQ0FBQSxDQUFBLENBQUEsS0FBSyxFQUFFLEdBQUksQ0FBQSxNQUFNLENBQUUsQ0FBQSxJQUFBLENBQUssRUFBRSxDQUFBO0FBQUEsTUFDcEQ7QUFBQSxRQUNFLFFBQVUsRUFBQSxFQUFBO0FBQUEsT0FDWjtBQUFBLEtBQ0EsRUFBQTtBQUFBLElBQ0ZDLHlCQUFBO0FBQUEsR0FFQSxHQUFBLFlBQUEsQ0FBQTtBQUVSLEVBQUEsTUFBTSxNQUFTLEdBQUEsY0FBQSxHQUNYLG9CQUFxQixDQUFBLGNBQWMsQ0FDbkMsR0FBQSxLQUFBLENBQUEsQ0FBQTtBQUVKLEVBQU8sT0FBQTtBQUFBLElBQ0wsRUFBQTtBQUFBLElBQ0EsUUFBVSxFQUFBO0FBQUEsTUFDUixZQUFZLElBQUksR0FBQSxDQUFJLE1BQVEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsTUFBQSxDQUFBLFVBQUEsQ0FBVyxJQUFJLFNBQVUsQ0FBQSxDQUFBO0FBQUEsTUFDckQsWUFBWSxJQUFJLEdBQUE7QUFBQSxRQUNkLE1BQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsTUFBQSxDQUFRLFdBQ0wsTUFBTyxDQUFBLENBQUEsQ0FBQSxLQUFLLENBQUMsbUJBQW9CLENBQUEsR0FBQSxDQUFJLENBQUMsQ0FBQSxDQUFBLENBQ3RDLEdBQUksQ0FBQVAsZUFBQSxDQUFBO0FBQUEsT0FDVDtBQUFBLE1BQ0EsV0FBYSxFQUFBLElBQUksR0FBSSxDQUFBLE1BQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUEsTUFBQSxDQUFRLFdBQVcsQ0FBQTtBQUFBLEtBQzFDO0FBQUEsSUFDQSxXQUFBO0FBQUEsSUFDQSxNQUFBO0FBQUEsSUFDQSxhQUFlLEVBQUEscUJBQUE7QUFBQSxNQUFBLENBQ2IsRUFBTyxHQUFBLE1BQUEsQ0FBQSxLQUFBLENBQU0sSUFBYixLQUFBLElBQUEsR0FBQSxFQUFBLEdBQXFCLFlBQVksS0FBTSxDQUFBLElBQUE7QUFBQSxLQUN6QztBQUFBLElBQ0EsbUJBQW1CLEVBQUM7QUFBQSxHQUN0QixDQUFBO0FBQ0Y7O0FDaFlBLE1BQU0sWUFBZSxHQUFBLGFBQUEsQ0FBQTtBQUNyQixNQUFNLFlBQWUsR0FBQSxhQUFBLENBQUE7QUFDckIsTUFBTSxhQUFnQixHQUFBLGNBQUEsQ0FBQTtBQUN0QixNQUFNLGFBQWdCLEdBQUEsY0FBQSxDQUFBO0FBUWYsU0FBUyxZQUFZLEtBQW9CLEVBQUE7QUFDOUMsRUFBQSxJQUFJLGtCQUFxQixHQUFBLEtBQUEsQ0FBQTtBQUN6QixFQUFBLElBQUksaUJBQW9CLEdBQUEsS0FBQSxDQUFBO0FBQ3hCLEVBQUksSUFBQSxnQkFBQSxDQUFBO0FBQ0osRUFBSSxJQUFBLG9CQUFBLENBQUE7QUFDSixFQUFJLElBQUEsYUFBQSxDQUFBO0FBQ0osRUFBSSxJQUFBLGdCQUFBLENBQUE7QUFDSixFQUFJLElBQUEsZ0JBQUEsQ0FBQTtBQUNKLEVBQUksSUFBQSxhQUFBLENBQUE7QUFLSixFQUFJLElBQUEsZ0JBQUEsQ0FBQTtBQUNKLEVBQUksSUFBQSxVQUFBLENBQUE7QUFHSixFQUFBLE1BQU0sb0JBQWtELEVBQUMsQ0FBQTtBQUV6RCxFQUFBLE1BQU0sZ0JBQTBDLEVBQUMsQ0FBQTtBQUVqRCxFQUFTLFNBQUEsS0FBQSxDQUNQLEtBRUEsS0FDTyxFQUFBO0FBQ1AsSUFBTSxNQUFBLElBQUksTUFBTSxHQUFHLENBQUEsQ0FBQTtBQUFBLEdBQ3JCO0FBRUEsRUFBQSxTQUFTLG1CQUFtQixJQUFxQixFQUFBO0FBQy9DLElBQUksSUFBQSxDQUFDLFFBQVMsQ0FBQSxJQUFBLEVBQU0sWUFBWSxDQUFBO0FBQzlCLE1BQU8sT0FBQSxLQUFBLENBQUE7QUFFVCxJQUFJLElBQUEsa0JBQUE7QUFDRixNQUFNLEtBQUEsQ0FBQSxDQUFBLFVBQUEsRUFBYSxxQkFBMkIsQ0FBQSxDQUFBO0FBRWhELElBQXFCLGtCQUFBLEdBQUEsSUFBQSxDQUFBO0FBRXJCLElBQW1CLGdCQUFBLEdBQUEsSUFBQSxDQUFLLFVBQVUsQ0FBQyxDQUFBLENBQUE7QUFHbkMsSUFBQSxJQUFJLEtBQUssY0FBZ0IsRUFBQTtBQUN2QixNQUFBLElBQUksZ0JBQWtCLEVBQUE7QUFDcEIsUUFBQSxLQUFBO0FBQUEsVUFDRSxDQUFHLEVBQUEsWUFBQSxDQUFBLHlGQUFBLENBR0wsQ0FBQSxDQUFBO0FBQUEsT0FDRjtBQUVBLE1BQW1CLGdCQUFBLEdBQUEsSUFBQSxDQUFLLGNBQWUsQ0FBQSxNQUFBLENBQU8sQ0FBQyxDQUFBLENBQUE7QUFDL0MsTUFBZ0IsYUFBQSxHQUFBLG9CQUFBO0FBQUEsUUFDZCxnQkFBQTtBQUFBLFFBQ0EsQ0FBQUksS0FBUUEsS0FBQUEsS0FBQUEsQ0FBSyxJQUFTLEtBQUEsZUFBQTtBQUFBLE9BQ3hCLENBQUE7QUFFQSxNQUFBLElBQUksQ0FBQyxhQUFlLEVBQUE7QUFDbEIsUUFBQSxLQUFBO0FBQUEsVUFDRSxDQUEyQix3QkFBQSxFQUFBLFlBQUEsQ0FBQSwwRUFBQSxDQUc3QixDQUFBLENBQUE7QUFBQSxPQUNGO0FBQUEsS0FDRjtBQUVBLElBQU8sT0FBQSxJQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxTQUFTLG9CQUFvQixJQUFxQixFQUFBO0FBQ2hELElBQUksSUFBQSxDQUFDLFFBQVMsQ0FBQSxJQUFBLEVBQU0sYUFBYSxDQUFBO0FBQy9CLE1BQU8sT0FBQSxLQUFBLENBQUE7QUFFVCxJQUFBLElBQUksa0JBQW1CLENBQUEsSUFBQSxDQUFLLFNBQVUsQ0FBQSxDQUFDLENBQUMsQ0FBRyxFQUFBO0FBQ3pDLE1BQUEsSUFBSSxnQkFBa0IsRUFBQTtBQUNwQixRQUFBLEtBQUE7QUFBQSxVQUNFLEdBQUcsYUFDSSxDQUFBLGtDQUFBLEVBQUEsWUFBQSxDQUFBLGFBQUEsQ0FFVCxDQUFBLENBQUE7QUFBQSxPQUNGO0FBQ0EsTUFBdUIsb0JBQUEsR0FBQSxJQUFBLENBQUssVUFBVSxDQUFDLENBQUEsQ0FBQTtBQUFBLEtBRXBDLE1BQUE7QUFDSCxNQUFBLEtBQUE7QUFBQSxRQUNFLEdBQUcsYUFBMkMsQ0FBQSwyQkFBQSxFQUFBLFlBQUEsQ0FBQSxNQUFBLENBQUE7QUFBQSxRQUM5QyxJQUFBLENBQUssU0FBVSxDQUFBLENBQUMsQ0FBSyxJQUFBLElBQUE7QUFBQSxPQUN2QixDQUFBO0FBQUEsS0FDRjtBQUNBLElBQU8sT0FBQSxJQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxTQUFTLG1CQUFtQixJQUFxQixFQUFBO0FBQy9DLElBQUksSUFBQSxDQUFDLFFBQVMsQ0FBQSxJQUFBLEVBQU0sWUFBWSxDQUFBO0FBQzlCLE1BQU8sT0FBQSxLQUFBLENBQUE7QUFFVCxJQUFJLElBQUEsaUJBQUE7QUFDRixNQUFNLEtBQUEsQ0FBQSxDQUFBLFVBQUEsRUFBYSxxQkFBMkIsQ0FBQSxDQUFBO0FBRWhELElBQW9CLGlCQUFBLEdBQUEsSUFBQSxDQUFBO0FBQ3BCLElBQW1CLGdCQUFBLEdBQUEsSUFBQSxDQUFLLFVBQVUsQ0FBQyxDQUFBLENBQUE7QUFDbkMsSUFBQSxJQUFJLEtBQUssY0FBZ0IsRUFBQTtBQUN2QixNQUFBLElBQUksZ0JBQWtCLEVBQUE7QUFDcEIsUUFBQSxLQUFBO0FBQUEsVUFDRSxDQUFHLEVBQUEsWUFBQSxDQUFBLHlGQUFBLENBR0wsQ0FBQSxDQUFBO0FBQUEsT0FDRjtBQUVBLE1BQW1CLGdCQUFBLEdBQUEsSUFBQSxDQUFLLGNBQWUsQ0FBQSxNQUFBLENBQU8sQ0FBQyxDQUFBLENBQUE7QUFDL0MsTUFBZ0IsYUFBQSxHQUFBLG9CQUFBO0FBQUEsUUFDZCxnQkFBQTtBQUFBLFFBQ0EsQ0FBQUEsS0FBUUEsS0FBQUEsS0FBQUEsQ0FBSyxJQUFTLEtBQUEsZ0JBQUEsSUFBb0JBLE1BQUssSUFBUyxLQUFBLGVBQUE7QUFBQSxPQUMxRCxDQUFBO0FBRUEsTUFBQSxJQUFJLENBQUMsYUFBZSxFQUFBO0FBQ2xCLFFBQUEsS0FBQTtBQUFBLFVBQ0UsQ0FBMkIsd0JBQUEsRUFBQSxZQUFBLENBQUEsbUdBQUEsQ0FHN0IsQ0FBQSxDQUFBO0FBQUEsT0FDRjtBQUFBLEtBQ0Y7QUFDQSxJQUFPLE9BQUEsSUFBQSxDQUFBO0FBQUEsR0FDVDtBQUVBLEVBQVMsU0FBQSxvQkFBQSxDQUNQLE1BQ0EsU0FDQSxFQUFBO0FBQ0EsSUFBQSxJQUFJLFVBQVUsSUFBSSxDQUFBO0FBQ2hCLE1BQU8sT0FBQSxJQUFBLENBQUE7QUFFVCxJQUFBLElBQ0UsS0FBSyxJQUFTLEtBQUEsaUJBQUEsSUFDWCxJQUFLLENBQUEsUUFBQSxDQUFTLFNBQVMsWUFDMUIsRUFBQTtBQUNBLE1BQU0sTUFBQSxPQUFBLEdBQVUsS0FBSyxRQUFTLENBQUEsSUFBQSxDQUFBO0FBQzlCLE1BQU0sTUFBQSxlQUFBLEdBQWtCLENBQUNBLEtBQWlDLEtBQUE7QUFDeEQsUUFBQSxJQUNFQSxLQUFLLENBQUEsSUFBQSxLQUFTLHdCQUNYQSxJQUFBQSxLQUFBQSxDQUFLLEdBQUcsSUFBUyxLQUFBLE9BQUE7QUFFcEIsVUFBQSxPQUFPQSxLQUFLLENBQUEsSUFBQSxDQUFBO0FBQUEsYUFHWkEsSUFBQUEsS0FBQUEsQ0FBSyxTQUFTLHdCQUNYQSxJQUFBQSxLQUFBQSxDQUFLLEdBQUcsSUFBUyxLQUFBLE9BQUEsSUFDakIsU0FBVUEsQ0FBQUEsS0FBQUEsQ0FBSyxjQUFjLENBQUE7QUFFaEMsVUFBQSxPQUFPQSxLQUFLLENBQUEsY0FBQSxDQUFBO0FBQUEsYUFFTEEsSUFBQUEsS0FBQUEsQ0FBSyxJQUFTLEtBQUEsd0JBQUEsSUFBNEJBLEtBQUssQ0FBQSxXQUFBO0FBQ3RELFVBQU8sT0FBQSxlQUFBLENBQWdCQSxNQUFLLFdBQVcsQ0FBQSxDQUFBO0FBQUEsT0FDM0MsQ0FBQTtBQUVBLE1BQUEsS0FBQSxNQUFXQSxTQUFRLEtBQU8sRUFBQTtBQUN4QixRQUFNLE1BQUEsU0FBQSxHQUFZLGdCQUFnQkEsS0FBSSxDQUFBLENBQUE7QUFDdEMsUUFBSSxJQUFBLFNBQUE7QUFDRixVQUFPLE9BQUEsU0FBQSxDQUFBO0FBQUEsT0FDWDtBQUFBLEtBQ0Y7QUFBQSxHQUNGO0FBRUEsRUFBQSxTQUFTLG9CQUFvQixJQUFxQixFQUFBO0FBQ2hELElBQUksSUFBQSxDQUFDLFFBQVMsQ0FBQSxJQUFBLEVBQU0sYUFBYSxDQUFBO0FBQy9CLE1BQU8sT0FBQSxLQUFBLENBQUE7QUFFVCxJQUFJLElBQUEsVUFBQTtBQUNGLE1BQU0sS0FBQSxDQUFBLENBQUEsVUFBQSxFQUFhLHNCQUE0QixDQUFBLENBQUE7QUFFakQsSUFBSSxJQUFBLElBQUEsQ0FBSyxVQUFVLE1BQVcsS0FBQSxDQUFBO0FBQzVCLE1BQU0sS0FBQSxDQUFBLENBQUEsRUFBRyx1Q0FBNkMsQ0FBQSxDQUFBO0FBRXhELElBQWEsVUFBQSxHQUFBLElBQUEsQ0FBSyxVQUFVLENBQUMsQ0FBQSxDQUFBO0FBRTdCLElBQU8sT0FBQSxJQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxTQUFTLGdCQUFnQixLQUFxQyxFQUFBO0FBQzVELElBQU0sTUFBQSxJQUFBLEdBQU8sTUFBTyxDQUFBLElBQUEsQ0FBSyxLQUFLLENBQUEsQ0FBQTtBQUM5QixJQUFBLElBQUksQ0FBQyxJQUFLLENBQUEsTUFBQTtBQUNSLE1BQU8sT0FBQSxLQUFBLENBQUEsQ0FBQTtBQUtULElBQUEsTUFBTSxvQkFBb0Isb0JBQ3JCLElBQUEsb0JBQUEsQ0FBcUIsSUFBUyxLQUFBLGtCQUFBLElBQzlCLHFCQUFxQixVQUFXLENBQUEsS0FBQTtBQUFBLE1BQ2pDLENBQVEsSUFBQSxLQUFBLElBQUEsQ0FBSyxJQUFTLEtBQUEsZ0JBQUEsSUFBb0IsQ0FBQyxJQUFLLENBQUEsUUFBQTtBQUFBLEtBQ2xELENBQUE7QUFFRixJQUFBLE9BQU8sQ0FBRSxDQUFBLGdCQUFBO0FBQUEsTUFDUCxNQUFBLENBQU8sUUFBUSxLQUFLLENBQUEsQ0FBRSxJQUFJLENBQUMsQ0FBQyxHQUFLLEVBQUEsS0FBSyxDQUFNLEtBQUE7QUFDMUMsUUFBTSxNQUFBLElBQUEsR0FBTyxpQkFDUixHQUFBLG9CQUFBLENBQTBDLFVBQVcsQ0FBQSxJQUFBLENBQUssQ0FBQyxJQUFBLEtBQWMsSUFBSyxDQUFBLEdBQUEsQ0FBSSxJQUFTLEtBQUEsR0FBRyxDQUMvRixHQUFBLEtBQUEsQ0FBQSxDQUFBO0FBRUosUUFBSSxJQUFBLElBQUE7QUFDRixVQUFBLEtBQUEsQ0FBTSxRQUFXLEdBQUEsS0FBQSxDQUFBO0FBRW5CLFFBQUEsTUFBTSxPQUFVLEdBQUEsTUFBQSxDQUFPLE9BQVEsQ0FBQSxLQUFLLENBQUUsQ0FBQSxHQUFBO0FBQUEsVUFBSSxDQUFDLENBQUNVLElBQUtDLEVBQUFBLE1BQUssTUFBTUQsSUFBUSxLQUFBLE1BQUEsR0FDaEUsRUFBRSxjQUFlLENBQUEsQ0FBQSxDQUFFLFdBQVdBLElBQUcsQ0FBQSxFQUFHLE9BQU9DLE1BQVUsS0FBQSxRQUFBLEdBQVcsRUFBRSxVQUFXQSxDQUFBQSxNQUFLLElBQUksQ0FBRSxDQUFBLGVBQUEsQ0FBZ0JBLE9BQU0sR0FBSSxDQUFBLENBQUMsTUFBVyxDQUFFLENBQUEsVUFBQSxDQUFXLENBQUMsQ0FBQyxDQUFDLENBQVEsQ0FDdEosR0FBQSxDQUFBLENBQUUsZUFBZSxDQUFFLENBQUEsVUFBQSxDQUFXRCxJQUFHLENBQUcsRUFBQUUsc0JBQUEsQ0FBZ0IsS0FBSyxTQUFVRCxDQUFBQSxNQUFLLENBQUMsQ0FBUSxDQUFBO0FBQUEsU0FDckYsQ0FBQTtBQUVBLFFBQUksSUFBQSxJQUFBO0FBQ0YsVUFBUSxPQUFBLENBQUEsSUFBQSxDQUFLLEVBQUUsY0FBZSxDQUFBLENBQUEsQ0FBRSxXQUFXLFNBQVMsQ0FBQSxFQUFHLElBQUssQ0FBQSxLQUFZLENBQUMsQ0FBQSxDQUFBO0FBRTNFLFFBQUEsT0FBTyxDQUFFLENBQUEsY0FBQTtBQUFBLFVBQ1AsQ0FBQSxDQUFFLFdBQVcsR0FBRyxDQUFBO0FBQUEsVUFDaEIsQ0FBQSxDQUFFLGlCQUFpQixPQUFPLENBQUE7QUFBQSxTQUM1QixDQUFBO0FBQUEsT0FDRCxDQUFBO0FBQUEsS0FDSCxDQUFBO0FBQUEsR0FDRjtBQUVBLEVBQUEsU0FBUyxRQUFXLEdBQUE7QUFDbEIsSUFBSSxJQUFBLGdCQUFBO0FBQ0YsTUFBTyxPQUFBLGdCQUFBLENBQUE7QUFFVCxJQUFBLElBQUksYUFBZSxFQUFBO0FBQ2pCLE1BQW9CLG1CQUFBLENBQUEsYUFBQSxFQUFlLG1CQUFtQixhQUFhLENBQUEsQ0FBQTtBQUNuRSxNQUFBLE9BQU8sZ0JBQWdCLGlCQUFpQixDQUFBLENBQUE7QUFBQSxLQUMxQztBQUFBLEdBQ0Y7QUFFQSxFQUFBLFNBQVMsYUFBYSxJQUFZLEVBQUE7QUFDaEMsSUFBQSxJQUFJLEtBQUssSUFBUyxLQUFBLGlCQUFBO0FBQ2hCLE1BQUEsS0FBQSxDQUFNLDJDQUFpRCxDQUFBLENBQUE7QUFBQSxHQUMzRDtBQUVBLEVBQVEsS0FBQSxHQUFBLEtBQUEsQ0FDTCxHQUFJLENBQUEsQ0FBQyxHQUFjLEtBQUE7QUFDbEIsSUFBQSxJQUFJLElBQU8sR0FBQSxHQUFBLENBQUE7QUFDWCxJQUFBLElBQUksSUFBSSxJQUFTLEtBQUEscUJBQUE7QUFDZixNQUFBLElBQUEsR0FBTyxHQUFJLENBQUEsVUFBQSxDQUFBO0FBRWIsSUFBQSxJQUFJLElBQUssQ0FBQSxJQUFBLEtBQVMscUJBQXlCLElBQUEsQ0FBQyxLQUFLLE9BQVMsRUFBQTtBQUN4RCxNQUFNLE1BQUEsS0FBQSxHQUFRLEtBQUssWUFBYSxDQUFBLE1BQUEsQ0FBQTtBQUNoQyxNQUFBLEtBQUEsSUFBUyxDQUFJLEdBQUEsQ0FBQSxFQUFHLENBQUksR0FBQSxLQUFBLEVBQU8sQ0FBSyxFQUFBLEVBQUE7QUFDOUIsUUFBTSxNQUFBLElBQUEsR0FBTyxJQUFLLENBQUEsWUFBQSxDQUFhLENBQUMsQ0FBQSxDQUFBO0FBQ2hDLFFBQUEsSUFBSSxLQUFLLElBQU0sRUFBQTtBQUNiLFVBQUksSUFBQSxrQkFBQSxDQUFtQixLQUFLLElBQUksQ0FBQTtBQUM5QixZQUFLLElBQUEsQ0FBQSxJQUFBLEdBQU8sQ0FBRSxDQUFBLGdCQUFBLENBQWlCLENBQUUsQ0FBQSxVQUFBLENBQVcsT0FBTyxDQUFHLEVBQUEsQ0FBQSxDQUFFLFVBQVcsQ0FBQSxNQUFNLENBQUMsQ0FBQSxDQUFBO0FBQUEsZUFBQSxJQUNuRSxtQkFBbUIsSUFBSyxDQUFBLElBQUksQ0FBSyxJQUFBLG1CQUFBLENBQW9CLEtBQUssSUFBSSxDQUFBO0FBQ3JFLFlBQUssSUFBQSxDQUFBLElBQUEsR0FBTyxDQUFFLENBQUEsVUFBQSxDQUFXLFNBQVMsQ0FBQSxDQUFBO0FBQUE7QUFFbEMsWUFBQSxZQUFBLENBQWEsS0FBSyxJQUFJLENBQUEsQ0FBQTtBQUFBLFNBQzFCO0FBQUEsT0FDRjtBQUFBLEtBQ0Y7QUFFQSxJQUFJLElBQUEsbUJBQUEsQ0FBb0IsSUFBSSxDQUFBLElBQUssa0JBQW1CLENBQUEsSUFBSSxLQUFLLGtCQUFtQixDQUFBLElBQUksQ0FBSyxJQUFBLG1CQUFBLENBQW9CLElBQUksQ0FBQTtBQUMvRyxNQUFPLE9BQUEsSUFBQSxDQUFBO0FBRVQsSUFBQSxZQUFBLENBQWEsSUFBSSxDQUFBLENBQUE7QUFFakIsSUFBTyxPQUFBLEdBQUEsQ0FBQTtBQUFBLEdBQ1IsQ0FDQSxDQUFBLE1BQUEsQ0FBTyxPQUFPLENBQUEsQ0FBQTtBQUVqQixFQUFPLE9BQUE7QUFBQSxJQUNMLEtBQUE7QUFBQSxJQUNBLE9BQU8sUUFBUyxFQUFBO0FBQUEsSUFDaEIsTUFBUSxFQUFBLFVBQUE7QUFBQSxHQUNWLENBQUE7QUFDRixDQUFBO0FBRUEsU0FBUyxRQUFBLENBQ1AsTUFDQSxJQUN3QixFQUFBO0FBQ3hCLEVBQU8sT0FBQSxDQUFDLEVBQ04sSUFDRyxJQUFBLElBQUEsQ0FBSyxTQUFTLGdCQUNkLElBQUEsSUFBQSxDQUFLLE9BQU8sSUFBUyxLQUFBLFlBQUEsS0FDcEIsT0FBTyxJQUFTLEtBQUEsUUFBQSxHQUNoQixLQUFLLE1BQU8sQ0FBQSxJQUFBLEtBQVMsT0FDckIsSUFBSyxDQUFBLElBQUEsQ0FBSyxPQUFPLElBQUksQ0FBQSxDQUFBLENBQUEsQ0FBQTtBQUU3QixDQUFBO0FBRUEsU0FBUyxtQkFBQSxDQUNQLElBQ0EsRUFBQSxLQUFBLEVBQ0EsYUFDQSxFQUFBO0FBQ0EsRUFBQSxNQUFNLFVBQVUsSUFBSyxDQUFBLElBQUEsS0FBUyxlQUFrQixHQUFBLElBQUEsQ0FBSyxVQUFVLElBQUssQ0FBQSxJQUFBLENBQUE7QUFDcEUsRUFBQSxLQUFBLE1BQVcsS0FBSyxPQUFTLEVBQUE7QUFDdkIsSUFDRyxJQUFBLENBQUEsQ0FBQSxDQUFFLFNBQVMscUJBQXlCLElBQUEsQ0FBQSxDQUFFLFNBQVMsbUJBQzdDLEtBQUEsQ0FBQSxDQUFFLEdBQUksQ0FBQSxJQUFBLEtBQVMsWUFDbEIsRUFBQTtBQUNBLE1BQUksSUFBQSxJQUFBLENBQUE7QUFDSixNQUFJLElBQUEsQ0FBQSxDQUFFLFNBQVMsbUJBQXFCLEVBQUE7QUFDbEMsUUFBQSxJQUFBLEdBQU8sQ0FBQyxVQUFVLENBQUEsQ0FBQTtBQUFBLE9BQ3BCLE1BQUEsSUFDUyxFQUFFLGNBQWdCLEVBQUE7QUFDekIsUUFBTyxJQUFBLEdBQUEsZ0JBQUE7QUFBQSxVQUNMLEVBQUUsY0FBZSxDQUFBLGNBQUE7QUFBQSxVQUNqQixhQUFBO0FBQUEsU0FDRixDQUFBO0FBQUEsT0FDRjtBQUNBLE1BQU0sS0FBQSxDQUFBLENBQUEsQ0FBRSxHQUFJLENBQUEsSUFBSSxDQUFJLEdBQUE7QUFBQSxRQUNsQixHQUFBLEVBQUssRUFBRSxHQUFJLENBQUEsSUFBQTtBQUFBLFFBQ1gsUUFBQSxFQUFVLENBQUMsQ0FBRSxDQUFBLFFBQUE7QUFBQSxRQUNiLE9BQU0sSUFBTSxJQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsTUFBQSxNQUFXLElBQUksSUFBSyxDQUFBLENBQUMsSUFBSSxJQUFRLElBQUEsTUFBQTtBQUFBLE9BQy9DLENBQUE7QUFBQSxLQUNGO0FBQUEsR0FDRjtBQUNGLENBQUE7QUFFQSxTQUFTLGdCQUFBLENBQ1AsTUFDQSxhQUNVLEVBQUE7QUFDVixFQUFBLFFBQVEsS0FBSyxJQUFNO0FBQUEsSUFDakIsS0FBSyxpQkFBQTtBQUNILE1BQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQSxDQUFBO0FBQUEsSUFDbEIsS0FBSyxpQkFBQTtBQUNILE1BQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQSxDQUFBO0FBQUEsSUFDbEIsS0FBSyxrQkFBQTtBQUNILE1BQUEsT0FBTyxDQUFDLFNBQVMsQ0FBQSxDQUFBO0FBQUEsSUFDbkIsS0FBSyxpQkFBQTtBQUNILE1BQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQSxDQUFBO0FBQUEsSUFDbEIsS0FBSyxlQUFBO0FBRUgsTUFBQSxPQUFPLENBQUMsUUFBUSxDQUFBLENBQUE7QUFBQSxJQUNsQixLQUFLLGdCQUFBO0FBQ0gsTUFBQSxPQUFPLENBQUMsVUFBVSxDQUFBLENBQUE7QUFBQSxJQUNwQixLQUFLLGFBQUEsQ0FBQTtBQUFBLElBQ0wsS0FBSyxhQUFBO0FBRUgsTUFBQSxPQUFPLENBQUMsT0FBTyxDQUFBLENBQUE7QUFBQSxJQUVqQixLQUFLLGVBQUE7QUFDSCxNQUFRLFFBQUEsSUFBQSxDQUFLLFFBQVEsSUFBTTtBQUFBLFFBQ3pCLEtBQUssZUFBQTtBQUNILFVBQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQSxDQUFBO0FBQUEsUUFDbEIsS0FBSyxnQkFBQTtBQUNILFVBQUEsT0FBTyxDQUFDLFNBQVMsQ0FBQSxDQUFBO0FBQUEsUUFDbkIsS0FBSyxnQkFBQSxDQUFBO0FBQUEsUUFDTCxLQUFLLGVBQUE7QUFDSCxVQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUEsQ0FBQTtBQUFBLFFBQ2xCO0FBQ0UsVUFBQSxPQUFPLENBQUMsTUFBTSxDQUFBLENBQUE7QUFBQSxPQUNsQjtBQUFBLElBRUYsS0FBSyxpQkFBQTtBQUNILE1BQUksSUFBQSxJQUFBLENBQUssUUFBUyxDQUFBLElBQUEsS0FBUyxZQUFjLEVBQUE7QUFDdkMsUUFBSSxJQUFBLGFBQUEsQ0FBYyxJQUFLLENBQUEsUUFBQSxDQUFTLElBQUksQ0FBQTtBQUNsQyxVQUFPLE9BQUEsYUFBQSxDQUFjLElBQUssQ0FBQSxRQUFBLENBQVMsSUFBSSxDQUFBLENBQUE7QUFFekMsUUFBUSxRQUFBLElBQUEsQ0FBSyxTQUFTLElBQU07QUFBQSxVQUMxQixLQUFLLE9BQUEsQ0FBQTtBQUFBLFVBQ0wsS0FBSyxVQUFBLENBQUE7QUFBQSxVQUNMLEtBQUssUUFBQSxDQUFBO0FBQUEsVUFDTCxLQUFLLEtBQUEsQ0FBQTtBQUFBLFVBQ0wsS0FBSyxLQUFBLENBQUE7QUFBQSxVQUNMLEtBQUssU0FBQSxDQUFBO0FBQUEsVUFDTCxLQUFLLFNBQUE7QUFDSCxZQUFPLE9BQUEsQ0FBQyxJQUFLLENBQUEsUUFBQSxDQUFTLElBQUksQ0FBQSxDQUFBO0FBQUEsVUFDNUIsS0FBSyxRQUFBLENBQUE7QUFBQSxVQUNMLEtBQUssU0FBQSxDQUFBO0FBQUEsVUFDTCxLQUFLLFVBQUEsQ0FBQTtBQUFBLFVBQ0wsS0FBSyxNQUFBLENBQUE7QUFBQSxVQUNMLEtBQUssTUFBQSxDQUFBO0FBQUEsVUFDTCxLQUFLLFNBQUEsQ0FBQTtBQUFBLFVBQ0wsS0FBSyxTQUFBLENBQUE7QUFBQSxVQUNMLEtBQUssVUFBQSxDQUFBO0FBQUEsVUFDTCxLQUFLLGNBQUE7QUFDSCxZQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUEsQ0FBQTtBQUFBLFNBQ3BCO0FBQUEsT0FDRjtBQUNBLE1BQUEsT0FBTyxDQUFDLE1BQU0sQ0FBQSxDQUFBO0FBQUEsSUFFaEIsS0FBSyxxQkFBQTtBQUNILE1BQU8sT0FBQSxnQkFBQSxDQUFpQixJQUFLLENBQUEsY0FBQSxFQUFnQixhQUFhLENBQUEsQ0FBQTtBQUFBLElBQzVELEtBQUssYUFBQTtBQUNILE1BQU8sT0FBQTtBQUFBLFFBQ0wsR0FBRyxJQUFJLEdBQUE7QUFBQSxVQUNMLEVBQUcsQ0FBQSxNQUFBO0FBQUEsWUFDRCxHQUFJLEtBQUssS0FBTSxDQUFBLEdBQUEsQ0FBSSxDQUFBRSxFQUFLLEtBQUEsZ0JBQUEsQ0FBaUJBLEVBQUcsRUFBQSxhQUFhLENBQUMsQ0FBQTtBQUFBLFdBQzVEO0FBQUEsU0FDRjtBQUFBLE9BQ0YsQ0FBQTtBQUFBLElBQ0YsS0FBSyxvQkFBQTtBQUNILE1BQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQSxDQUFBO0FBQUEsSUFFbEI7QUFDRSxNQUFBLE9BQU8sQ0FBQyxNQUFNLENBQUEsQ0FBQTtBQUFBLEdBQ2xCO0FBQ0Y7O0FDNVpBLFNBQVMsY0FBYyxJQUFpQixFQUFBO0FBQ3RDLEVBQUksSUFBQSxDQUFBLENBQUUscUJBQXNCLENBQUEsSUFBSSxDQUFHLEVBQUE7QUFDakMsSUFBTSxNQUFBLFdBQUEsR0FBYyxJQUFLLENBQUEsWUFBQSxDQUFhLENBQUMsQ0FBQSxDQUFBO0FBRXZDLElBQUEsT0FDRSxnQkFBZ0IsS0FDYixDQUFBLElBQUEsQ0FBQSxDQUFFLGdCQUFpQixDQUFBLFdBQUEsQ0FBWSxJQUFJLENBQ25DLElBQUEsQ0FBQSxDQUFFLFlBQWEsQ0FBQSxXQUFBLENBQVksS0FBSyxNQUFNLENBQUEsSUFDdEMsV0FBWSxDQUFBLElBQUEsQ0FBSyxPQUFPLElBQVMsS0FBQSxzQkFBQSxDQUFBO0FBQUEsR0FFeEM7QUFFQSxFQUFPLE9BQUEsS0FBQSxDQUFBO0FBQ1QsQ0FBQTtBQUVnQixTQUFBLG9CQUFBLENBQ2QsS0FDQSxPQUNBLEVBQUE7QUEzQkYsRUFBQSxJQUFBLEVBQUEsRUFBQSxFQUFBLENBQUE7QUE0QkUsRUFBQSxNQUFNLEVBQUUsV0FBQSxFQUFhLE1BQVEsRUFBQSxRQUFBLEVBQWEsR0FBQSxHQUFBLENBQUE7QUFFMUMsRUFBTSxNQUFBLEVBQUUsT0FBTyxJQUFNLEVBQUEsS0FBQSxFQUFPLFFBQVcsR0FBQSxXQUFBLENBQVksV0FBWSxDQUFBLEdBQUEsQ0FBSSxJQUFJLENBQUEsQ0FBQTtBQUV2RSxFQUFNLE1BQUEsQ0FBQyxPQUFTLEVBQUEsU0FBUyxDQUFJLEdBQUFULGVBQUE7QUFBQSxJQUMzQixJQUFBO0FBQUEsSUFDQSxDQUNFLENBQUEsS0FBQSxhQUFBLENBQWMsQ0FBQyxDQUFBLElBQ1osRUFBRSxtQkFBb0IsQ0FBQSxDQUFDLENBQ3ZCLElBQUEsQ0FBQSxDQUFFLHlCQUF5QixDQUFDLENBQUEsSUFDNUIsQ0FBRSxDQUFBLElBQUEsQ0FBSyxXQUFXLElBQUksQ0FBQTtBQUFBLEdBQzdCLENBQUE7QUFHQSxFQUFBLE1BQU0sbUJBQW1CVSxVQUFLLENBQUE7QUFBQSxJQUM1QixHQUFHLDBCQUEwQixPQUFPLENBQUE7QUFBQSxJQUNwQyxHQUFHLDBCQUEwQixTQUFTLENBQUE7QUFBQSxJQUN0QyxHQUFHLHlCQUFBLENBQTBCLE1BQU8sQ0FBQSxHQUFBLENBQUksSUFBSSxDQUFBO0FBQUEsR0FDN0MsQ0FBRSxDQUFBLE1BQUEsQ0FBT2IsZ0JBQVUsQ0FBQSxDQUFBO0FBR3BCLEVBQUEsTUFBTSxPQUEwQyxHQUFBLGdCQUFBLENBQzdDLE1BQU8sQ0FBQSxDQUFBLENBQUEsS0FBSyxRQUFTLENBQUEsV0FBQSxDQUFZLEdBQUksQ0FBQSxDQUFDLENBQUMsQ0FBQSxDQUN2QyxHQUFJLENBQUEsQ0FBQyxDQUFNLEtBQUE7QUFDVixJQUFNLE1BQUEsRUFBQSxHQUFLLENBQUUsQ0FBQSxVQUFBLENBQVcsQ0FBQyxDQUFBLENBQUE7QUFDekIsSUFBQSxPQUFPLENBQUUsQ0FBQSxjQUFBLENBQWUsRUFBSSxFQUFBLEVBQUEsRUFBSSxPQUFPLElBQUksQ0FBQSxDQUFBO0FBQUEsR0FDNUMsQ0FBQSxDQUFBO0FBRUgsRUFBQSxNQUFNLFVBQWEsR0FBQSxLQUFBLENBQU0sSUFBSyxDQUFBLFFBQUEsQ0FBUyxVQUFVLENBQzlDLENBQUEsR0FBQTtBQUFBLElBQ0MsQ0FBVSxTQUFBLEtBQUE7QUExRGhCLE1BQUFJLElBQUFBLEdBQUFBLENBQUFBO0FBMkRRLE1BQUEsT0FBQSxDQUFBQSxHQUFBLEdBQUEsZ0JBQUEsQ0FBaUIsSUFBSyxDQUFBLENBQUEsT0FBQSxLQUFXLFlBQVksU0FBUyxDQUFBLEtBQXRELElBQUFBLEdBQUFBLEdBQUFBLEdBQ0csaUJBQWlCLElBQUssQ0FBQSxDQUFBLE9BQUEsS0FBVyxTQUFVLENBQUEsT0FBTyxNQUFNLFNBQVMsQ0FBQSxDQUFBO0FBQUEsS0FBQTtBQUFBLEdBQ3hFLENBQ0MsT0FBT0osZ0JBQVUsQ0FBQSxDQUFBO0FBRXBCLEVBQU0sTUFBQSxvQkFBQSxHQUF1QixNQUFNLElBQUssQ0FBQSxRQUFBLENBQVMsVUFBVSxDQUN4RCxDQUFBLEdBQUEsQ0FBSSxDQUFDLFNBQWMsS0FBQTtBQUNsQixJQUFBLE1BQU0sYUFBYSxnQkFBaUIsQ0FBQSxJQUFBO0FBQUEsTUFDbEMsQ0FBZSxXQUFBLEtBQUEsV0FBQSxLQUFnQixDQUFJLENBQUEsRUFBQU4saUJBQUEsQ0FBVyxTQUFTLENBQUEsQ0FBQSxDQUFBO0FBQUEsS0FDekQsQ0FBQTtBQUNBLElBQUEsSUFBSSxVQUFlLEtBQUEsS0FBQSxDQUFBO0FBQ2pCLE1BQU8sT0FBQSxLQUFBLENBQUEsQ0FBQTtBQUVULElBQU8sT0FBQSxFQUFFLFlBQVksU0FBVSxFQUFBLENBQUE7QUFBQSxHQUNoQyxDQUNBLENBQUEsTUFBQSxDQUFPTSxnQkFBVSxDQUFBLENBQUE7QUFJcEIsRUFBTSxNQUFBLEtBQUEsR0FBUSxDQUFFLENBQUEsVUFBQSxDQUFXLFlBQVksQ0FBQSxDQUFBO0FBRXZDLEVBQUEsSUFBSSxPQUFVLEdBQUEsS0FBQSxDQUFBO0FBRWQsRUFBQSxNQUFNLFlBQVksTUFBTyxDQUFBLEdBQUEsQ0FBSSxJQUFLLENBQUEsR0FBQSxDQUFJLENBQUMsSUFBZSxLQUFBO0FBR3BELElBQUksSUFBQSxJQUFBLENBQUssU0FBUywwQkFBNEIsRUFBQTtBQUM1QyxNQUFVLE9BQUEsR0FBQSxJQUFBLENBQUE7QUFDVixNQUFPLE9BQUEsQ0FBQSxDQUFFLG9CQUFvQixPQUFTLEVBQUE7QUFBQSxRQUNwQyxDQUFFLENBQUEsa0JBQUEsQ0FBbUIsS0FBTyxFQUFBLElBQUEsQ0FBSyxXQUFrQixDQUFBO0FBQUEsT0FDcEQsQ0FBQSxDQUFBO0FBQUEsS0FDSDtBQUNBLElBQU8sT0FBQSxJQUFBLENBQUE7QUFBQSxHQUNSLENBQUEsQ0FBQTtBQUVELEVBQUksSUFBQSxHQUFBLEdBQU0sRUFBRSxPQUFRLENBQUE7QUFBQSxJQUNsQixHQUFHLEdBQUksQ0FBQSxpQkFBQTtBQUFBLElBQ1AsR0FBRyxPQUFBO0FBQUEsSUFDSCxHQUFHLFNBQUE7QUFBQSxHQUNXLENBQUEsQ0FBQTtBQUdoQixFQUFBLElBQUksQ0FBQyxPQUFTLEVBQUE7QUFDWixJQUFBLEdBQUEsQ0FBSSxJQUFLLENBQUEsSUFBQTtBQUFBLE1BQ1AsQ0FBQSxDQUFFLG9CQUFvQixPQUFTLEVBQUE7QUFBQSxRQUM3QixFQUFFLGtCQUFtQixDQUFBLEtBQUEsRUFBTyxFQUFFLGdCQUFpQixDQUFBLEVBQUUsQ0FBQyxDQUFBO0FBQUEsT0FDbkQsQ0FBQTtBQUFBLEtBQ0gsQ0FBQTtBQUFBLEdBQ0Y7QUFJQSxFQUFBLElBQUksS0FBTyxFQUFBO0FBQ1QsSUFBVSxPQUFBLEdBQUEsSUFBQSxDQUFBO0FBQ1YsSUFBQSxHQUFBLENBQUksSUFBSyxDQUFBLElBQUE7QUFBQSxNQUNQLENBQUUsQ0FBQSxtQkFBQTtBQUFBLFFBQ0EsQ0FBRSxDQUFBLG9CQUFBO0FBQUEsVUFDQSxHQUFBO0FBQUEsVUFDQSxFQUFFLGdCQUFpQixDQUFBLEtBQUEsRUFBTyxDQUFFLENBQUEsVUFBQSxDQUFXLE9BQU8sQ0FBQyxDQUFBO0FBQUEsVUFDL0MsS0FBQTtBQUFBLFNBQ0Y7QUFBQSxPQUNGO0FBQUEsS0FDRixDQUFBO0FBQUEsR0FDRjtBQUlBLEVBQUEsSUFBSSxLQUFLLE1BQVEsRUFBQTtBQUNmLElBQVUsT0FBQSxHQUFBLElBQUEsQ0FBQTtBQUNWLElBQU0sTUFBQSxVQUFBLEdBQWEsU0FDZixDQUFFLENBQUEsY0FBQTtBQUFBLE1BQ0YsQ0FBQSxDQUFFLGlCQUFpQixDQUFFLENBQUEsVUFBQSxDQUFXLFFBQVEsQ0FBRyxFQUFBLENBQUEsQ0FBRSxVQUFXLENBQUEsUUFBUSxDQUFDLENBQUE7QUFBQSxNQUNqRSxDQUFDLENBQUEsQ0FBRSxnQkFBaUIsQ0FBQSxPQUFPLEdBQUcsTUFBTSxDQUFBO0FBQUEsS0FDdEMsR0FDRSxDQUFFLENBQUEsZ0JBQUEsQ0FBaUIsT0FBTyxDQUFBLENBQUE7QUFDOUIsSUFBTSxNQUFBLGVBQUEsR0FBa0IsQ0FBRSxDQUFBLGVBQUEsQ0FBZ0IsVUFBVSxDQUFBLENBQUE7QUFFcEQsSUFBQSxHQUFBLENBQUksSUFBSyxDQUFBLElBQUE7QUFBQSxNQUNQLENBQUUsQ0FBQSxtQkFBQTtBQUFBLFFBQ0EsQ0FBRSxDQUFBLG9CQUFBO0FBQUEsVUFDQSxHQUFBO0FBQUEsVUFDQSxFQUFFLGdCQUFpQixDQUFBLEtBQUEsRUFBTyxDQUFFLENBQUEsVUFBQSxDQUFXLE9BQU8sQ0FBQyxDQUFBO0FBQUEsVUFDL0MsQ0FBRSxDQUFBLHVCQUFBO0FBQUEsWUFDQSxDQUFDLEVBQUUsVUFBVyxDQUFBLFNBQVMsR0FBRyxDQUFFLENBQUEsVUFBQSxDQUFXLE9BQU8sQ0FBQyxDQUFBO0FBQUEsWUFDL0MsRUFBRSxjQUFlLENBQUEsQ0FBQyxHQUFHLFNBQUEsRUFBVyxlQUFzQixDQUFDLENBQUE7QUFBQSxXQUN6RDtBQUFBLFNBQ0Y7QUFBQSxPQUNGO0FBQUEsS0FDRixDQUFBO0FBQUEsR0FDRjtBQUlBLEVBQUEsSUFBSSxXQUFXLE1BQVEsRUFBQTtBQUNyQixJQUFVLE9BQUEsR0FBQSxJQUFBLENBQUE7QUFDVixJQUFBLE1BQU0sbUJBQW1CLENBQUUsQ0FBQSxnQkFBQTtBQUFBLE1BQ3pCLFVBQUEsQ0FBVyxHQUFJLENBQUEsQ0FBQyxDQUFNLEtBQUE7QUFDcEIsUUFBTSxNQUFBLEVBQUEsR0FBSyxDQUFFLENBQUEsVUFBQSxDQUFXLENBQUMsQ0FBQSxDQUFBO0FBQ3pCLFFBQUEsT0FBTyxDQUFFLENBQUEsY0FBQSxDQUFlLEVBQUksRUFBQSxFQUFBLEVBQUksT0FBTyxJQUFJLENBQUEsQ0FBQTtBQUFBLE9BQzVDLENBQUE7QUFBQSxLQUNILENBQUE7QUFFQSxJQUFBLEdBQUEsQ0FBSSxJQUFLLENBQUEsSUFBQTtBQUFBLE1BQ1AsQ0FBRSxDQUFBLG1CQUFBO0FBQUEsUUFDQSxDQUFFLENBQUEsb0JBQUE7QUFBQSxVQUNBLEdBQUE7QUFBQSxVQUNBLEVBQUUsZ0JBQWlCLENBQUEsS0FBQSxFQUFPLENBQUUsQ0FBQSxVQUFBLENBQVcsWUFBWSxDQUFDLENBQUE7QUFBQSxVQUNwRCxDQUFFLENBQUEsY0FBQTtBQUFBLFlBQ0EsQ0FBQSxDQUFFLGlCQUFpQixDQUFFLENBQUEsVUFBQSxDQUFXLFFBQVEsQ0FBRyxFQUFBLENBQUEsQ0FBRSxVQUFXLENBQUEsUUFBUSxDQUFDLENBQUE7QUFBQSxZQUNqRTtBQUFBLGNBQ0UsZ0JBQUE7QUFBQSxjQUNBLEVBQUUsZ0JBQWlCLENBQUEsS0FBQSxFQUFPLENBQUUsQ0FBQSxVQUFBLENBQVcsWUFBWSxDQUFDLENBQUE7QUFBQSxhQUN0RDtBQUFBLFdBQ0Y7QUFBQSxTQUNGO0FBQUEsT0FDRjtBQUFBLEtBQ0YsQ0FBQTtBQUFBLEdBQ0Y7QUFJQSxFQUFBLElBQUkscUJBQXFCLE1BQVEsRUFBQTtBQUMvQixJQUFVLE9BQUEsR0FBQSxJQUFBLENBQUE7QUFDVixJQUFBLE1BQU0sbUJBQW1CLENBQUUsQ0FBQSxnQkFBQTtBQUFBLE1BQ3pCLG9CQUFxQixDQUFBLEdBQUE7QUFBQSxRQUFJLENBQUMsRUFBRSxTQUFXLEVBQUEsVUFBQSxPQUNyQyxDQUFFLENBQUEsY0FBQTtBQUFBLFVBQ0EsQ0FBQSxDQUFFLFdBQVcsU0FBUyxDQUFBO0FBQUEsVUFDdEIsQ0FBQSxDQUFFLFdBQVcsVUFBVSxDQUFBO0FBQUEsVUFDdkIsS0FBQTtBQUFBLFVBQ0EsS0FBQTtBQUFBLFNBQ0Y7QUFBQSxPQUNGO0FBQUEsS0FDRixDQUFBO0FBRUEsSUFBQSxHQUFBLENBQUksSUFBSyxDQUFBLElBQUE7QUFBQSxNQUNQLENBQUUsQ0FBQSxtQkFBQTtBQUFBLFFBQ0EsQ0FBRSxDQUFBLG9CQUFBO0FBQUEsVUFDQSxHQUFBO0FBQUEsVUFDQSxFQUFFLGdCQUFpQixDQUFBLEtBQUEsRUFBTyxDQUFFLENBQUEsVUFBQSxDQUFXLFlBQVksQ0FBQyxDQUFBO0FBQUEsVUFDcEQsQ0FBRSxDQUFBLGNBQUE7QUFBQSxZQUNBLENBQUEsQ0FBRSxpQkFBaUIsQ0FBRSxDQUFBLFVBQUEsQ0FBVyxRQUFRLENBQUcsRUFBQSxDQUFBLENBQUUsVUFBVyxDQUFBLFFBQVEsQ0FBQyxDQUFBO0FBQUEsWUFDakU7QUFBQSxjQUNFLGdCQUFBO0FBQUEsY0FDQSxFQUFFLGdCQUFpQixDQUFBLEtBQUEsRUFBTyxDQUFFLENBQUEsVUFBQSxDQUFXLFlBQVksQ0FBQyxDQUFBO0FBQUEsYUFDdEQ7QUFBQSxXQUNGO0FBQUEsU0FDRjtBQUFBLE9BQ0Y7QUFBQSxLQUNGLENBQUE7QUFBQSxHQUNGO0FBRUEsRUFBQSxJQUFJLENBQUMsT0FBQSxJQUFXLEVBQUMsT0FBQSxJQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsR0FBQSxPQUFBLENBQVMsYUFBZSxDQUFBLEVBQUE7QUFDdkMsSUFBTyxPQUFBO0FBQUEsTUFDTCxHQUFLLEVBQUEsSUFBQTtBQUFBLE1BQ0wsSUFBTSxFQUFBLEVBQUE7QUFBQSxLQUNSLENBQUE7QUFBQSxHQUNGO0FBSUEsRUFBQSxHQUFBLENBQUksSUFBSyxDQUFBLElBQUEsQ0FBSyxDQUFFLENBQUEsd0JBQUEsQ0FBeUIsS0FBSyxDQUFRLENBQUEsQ0FBQTtBQUV0RCxFQUFBLEdBQUEsR0FBQSxDQUFBLENBQU0sOENBQVMsYUFBVCxLQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLENBQXdCLElBQXhCLEtBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxFQUErQixLQUFLLEdBQVEsQ0FBQSxLQUFBLEdBQUEsQ0FBQTtBQUVsRCxFQUFPLE9BQUE7QUFBQSxJQUNMLEdBQUE7QUFBQSxJQUNBLElBQUEsRUFBTSxRQUFTLENBQUEsR0FBRyxDQUFFLENBQUEsSUFBQTtBQUFBLEdBQ3RCLENBQUE7QUFDRjs7QUM5TmdCLFNBQUEsb0JBQUEsQ0FBcUIsS0FBZ0IsT0FBMEIsRUFBQTtBQUM3RSxFQUFNLE1BQUEsZUFBQSx1QkFBc0IsR0FBWSxFQUFBLENBQUE7QUFFeEMsRUFBQSxLQUFBLE1BQVcsVUFBVSxDQUFDLEdBQUEsQ0FBSSxNQUFRLEVBQUEsR0FBQSxDQUFJLFdBQVcsQ0FBRyxFQUFBO0FBQ2xELElBQUksSUFBQWMsbUNBQUEsQ0FBZ0IsTUFBTyxDQUFBLE9BQU8sQ0FBRyxFQUFBO0FBQ25DLE1BQUEsTUFBTSxDQUFJLEdBQUEsSUFBSSxXQUFZLENBQUEsTUFBQSxDQUFPLE9BQU8sQ0FBQSxDQUFBO0FBQ3hDLE1BQUEsTUFBTSxFQUFFLGVBQWlCLEVBQUEsT0FBQSxLQUFZQyxnQ0FBYSxDQUFBLE1BQUEsQ0FBTyxLQUFLLENBQUMsQ0FBQSxDQUFBO0FBQy9ELE1BQU0sS0FBQSxDQUFBLElBQUEsQ0FBSyxPQUFPLENBQUUsQ0FBQSxPQUFBLENBQVEsWUFBVSxlQUFnQixDQUFBLEdBQUEsQ0FBSSxNQUFNLENBQUMsQ0FBQSxDQUFBO0FBQ2pFLE1BQU8sTUFBQSxDQUFBLE9BQUEsR0FBVSxFQUFFLFFBQVMsRUFBQSxDQUFBO0FBQzVCLE1BQUEsTUFBQSxDQUFPLE1BQU1qQixZQUFNLENBQUEsTUFBQSxDQUFPLE9BQVMsRUFBQSxHQUFBLENBQUksYUFBYSxDQUFFLENBQUEsT0FBQSxDQUFBO0FBQUEsS0FDeEQ7QUFBQSxHQUNGO0FBRUEsRUFBQSxJQUFJLGdCQUFnQixJQUFNLEVBQUE7QUFDeEIsSUFBQSxHQUFBLENBQUksaUJBQW9CLEdBQUE7QUFBQSxNQUN0QixDQUFFLENBQUEsaUJBQUE7QUFBQSxRQUNBLE1BQU0sSUFBSyxDQUFBLGVBQWUsQ0FBRSxDQUFBLEdBQUEsQ0FBSSxPQUFLLENBQUUsQ0FBQSxlQUFBLENBQWdCLENBQUUsQ0FBQSxVQUFBLENBQVcsSUFBSSxDQUFHLENBQUEsQ0FBQSxDQUFBLEVBQUcsRUFBRSxVQUFXLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUFBLFFBQzlGLENBQUEsQ0FBRSxhQUFjLENBQUEsT0FBQSxDQUFRLGlCQUFpQixDQUFBO0FBQUEsT0FDM0M7QUFBQSxLQUNGLENBQUE7QUFBQSxHQUNGO0FBQ0Y7O0FDeEJnQixTQUFBLGNBQUEsQ0FBZSxPQUF1QyxHQUFBLEVBQXFCLEVBQUE7QUFDekYsRUFBQSxPQUFPLE1BQU8sQ0FBQSxNQUFBO0FBQUEsSUFDWixFQUFDO0FBQUEsSUFDRDtBQUFBLE1BQ0UsU0FBVyxFQUFBLElBQUE7QUFBQSxNQUNYLG1CQUFxQixFQUFBLEtBQUE7QUFBQSxNQUNyQixpQkFBbUIsRUFBQSxzQkFBQTtBQUFBLE1BQ25CLGVBQWUsRUFBQztBQUFBLEtBQ2xCO0FBQUEsSUFDQSxPQUFBO0FBQUEsR0FDRixDQUFBO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0xBLE1BQU0sYUFBZ0IsR0FBQSwrQkFBQSxDQUFBO0FBRU4sU0FBQSxlQUFBLENBQWdCLElBQWMsRUFBQSxFQUFBLEVBQVksT0FBZ0QsRUFBQTtBQUV4RyxFQUFJLElBQUEsSUFBQSxDQUFLLFNBQVMsMkJBQTJCLENBQUE7QUFDM0MsSUFBTyxPQUFBLEtBQUEsQ0FBQTtBQUNULEVBQUEsT0FBQSxDQUFRLG1DQUFTLG1CQUF1QixLQUFBa0IsbUNBQUEsQ0FBd0IsSUFBSSxDQUFNLElBQUEsYUFBQSxDQUFjLEtBQUssSUFBSSxDQUFBLENBQUE7QUFDbkcsQ0FBQTtBQUVzQixlQUFBLFNBQUEsQ0FBVSxLQUFlLEVBQUEsRUFBQSxFQUFZLE9BQWlFLEVBQUE7QUFDMUgsRUFBQSxJQUFJLENBQUMsZUFBQSxDQUFnQixLQUFPLEVBQUEsRUFBQSxFQUFJLE9BQU8sQ0FBQTtBQUNyQyxJQUFPLE9BQUEsSUFBQSxDQUFBO0FBQ1QsRUFBTSxNQUFBLFFBQUEsR0FBVyxlQUFlLE9BQU8sQ0FBQSxDQUFBO0FBQ3ZDLEVBQUEsSUFBSSxHQUFHLFFBQVMsQ0FBQSxNQUFNLENBQUssSUFBQSxFQUFBLENBQUcsU0FBUyxVQUFVLENBQUE7QUFDL0MsSUFBQSxPQUFPLE1BQU0sWUFBQSxDQUFhLEtBQU8sRUFBQSxFQUFBLEVBQUksUUFBUSxDQUFBLENBQUE7QUFBQTtBQUU3QyxJQUFPLE9BQUEsZUFBQSxDQUFnQixLQUFPLEVBQUEsRUFBQSxFQUFJLFFBQVEsQ0FBQSxDQUFBO0FBQzlDLENBQUE7QUFFQSxTQUFTLGVBQUEsQ0FBZ0IsS0FBZSxFQUFBLEVBQUEsRUFBWSxPQUEyQyxFQUFBO0FBQzdGLEVBQUEsSUFBSSxPQUFRLENBQUEsbUJBQUEsSUFBdUJBLG1DQUF3QixDQUFBLEtBQUssQ0FBRyxFQUFBO0FBQ2pFLElBQUEsT0FBT0MsOEJBQWEsS0FBTyxFQUFBO0FBQUEsTUFDekIsUUFBVSxFQUFBLEVBQUE7QUFBQSxNQUNWLFdBQVcsT0FBUSxDQUFBLFNBQUE7QUFBQSxNQUNuQixtQkFBbUIsT0FBUSxDQUFBLGlCQUFBO0FBQUEsS0FDNUIsQ0FBQSxDQUFBO0FBQUEsR0FDSDtBQUNBLEVBQU8sT0FBQSxJQUFBLENBQUE7QUFDVCxDQUFBO0FBRUEsZUFBZSxZQUFBLENBQWEsS0FBZSxFQUFBLEVBQUEsRUFBWSxPQUFvRCxFQUFBO0FBQ3pHLEVBQU0sTUFBQSxDQUFBLEdBQUksSUFBSSxXQUFBLENBQVksS0FBSyxDQUFBLENBQUE7QUFFL0IsRUFBQSxNQUFNLEdBQU0sR0FBQSxNQUFNLFFBQVMsQ0FBQSxLQUFBLEVBQU8sRUFBRSxDQUFBLENBQUE7QUFFcEMsRUFBQSxJQUFJLE9BQVEsQ0FBQSxtQkFBQTtBQUNWLElBQUEsb0JBQUEsQ0FBcUIsS0FBSyxPQUFPLENBQUEsQ0FBQTtBQUVuQyxFQUFBLE1BQU0sRUFBRSxJQUFBLEVBQVMsR0FBQSxvQkFBQSxDQUFxQixLQUFLLE9BQU8sQ0FBQSxDQUFBO0FBRWxELEVBQUEsTUFBTSxhQUFhLGNBQ2QsQ0FBQSxjQUFBLENBQUEsRUFBQSxFQUFBLEdBQUEsQ0FBSSxNQUFPLENBQUEsS0FBQSxDQUFBLEVBQ1gsSUFBSSxXQUFZLENBQUEsS0FBQSxDQUFBLENBQUE7QUFFckIsRUFBQSxPQUFPLFVBQVcsQ0FBQSxLQUFBLENBQUE7QUFDbEIsRUFBQSxNQUFNLE9BQU8sTUFBTyxDQUFBLE9BQUEsQ0FBUSxVQUFVLENBQ25DLENBQUEsR0FBQSxDQUFJLENBQUMsQ0FBQyxHQUFBLEVBQUssS0FBSyxDQUFBLEtBQU0sUUFBUSxDQUFHLEVBQUEsR0FBQSxDQUFBLEVBQUEsRUFBUSxXQUFXLEdBQUcsQ0FBQSxDQUN2RCxLQUFLLEdBQUcsQ0FBQSxDQUFBO0FBRVgsRUFBQSxJQUFJLElBQU0sRUFBQTtBQUNSLElBQUEsTUFBTSxRQUFRLENBQVcsUUFBQSxFQUFBLElBQUEsQ0FBQTtBQUFBLEVBQVUsSUFBQSxDQUFBO0FBQUEsVUFBQSxDQUFBLENBQUE7QUFFbkMsSUFBQSxDQUFBLENBQUUsT0FBTyxHQUFJLENBQUEsTUFBQSxDQUFPLEtBQU8sRUFBQSxHQUFBLENBQUksT0FBTyxHQUFHLENBQUEsQ0FBQTtBQUN6QyxJQUFBLElBQUksR0FBSSxDQUFBLFdBQUEsQ0FBWSxLQUFVLEtBQUEsR0FBQSxDQUFJLFlBQVksR0FBSyxFQUFBO0FBQ2pELE1BQUUsQ0FBQSxDQUFBLFNBQUE7QUFBQSxRQUNBLElBQUksV0FBWSxDQUFBLEtBQUE7QUFBQSxRQUNoQixJQUFJLFdBQVksQ0FBQSxHQUFBO0FBQUEsUUFDaEIsS0FBQTtBQUFBLE9BQ0YsQ0FBQTtBQUFBLEtBRUcsTUFBQTtBQUNILE1BQUUsQ0FBQSxDQUFBLFdBQUEsQ0FBWSxHQUFHLENBQUcsRUFBQSxLQUFBLENBQUE7QUFBQSxDQUFTLENBQUEsQ0FBQTtBQUFBLEtBQy9CO0FBQUEsR0FDRjtBQUNBLEVBQU8sT0FBQTtBQUFBLElBQ0wsSUFBQSxFQUFNLEVBQUUsUUFBUyxFQUFBO0FBQUEsSUFDakIsR0FBSyxFQUFBLE9BQUEsQ0FBUSxTQUNULEdBQUEsQ0FBQSxDQUFFLFdBQVksQ0FBQTtBQUFBLE1BQ2QsTUFBUSxFQUFBLEVBQUE7QUFBQSxNQUNSLGNBQWdCLEVBQUEsSUFBQTtBQUFBLEtBQ2pCLENBQ0MsR0FBQSxJQUFBO0FBQUEsR0FDTixDQUFBO0FBQ0Y7O0FDMUVPLE1BQU0sUUFBVyxHQUFBQyx5QkFBQSxDQUE4QixDQUFDLE9BQUEsR0FBVSxFQUFPLEtBQUE7QUFDdEUsRUFBQSxNQUFNLE1BQVMsR0FBQUMsd0JBQUE7QUFBQSxJQUNiLE9BQUEsQ0FBUSxPQUFZLEtBQUEsT0FBQSxDQUFRLG1CQUFzQixHQUFBLENBQUMsUUFBVSxFQUFBLFlBQUEsRUFBYyxZQUFZLENBQUEsR0FBSSxDQUFDLFFBQUEsRUFBVSxZQUFZLENBQUEsQ0FBQTtBQUFBLElBQ2xILE9BQVEsQ0FBQSxPQUFBLElBQVcsQ0FBQyxjQUFBLEVBQWdCLFNBQVMsUUFBUSxDQUFBO0FBQUEsR0FDdkQsQ0FBQTtBQUVBLEVBQU8sT0FBQTtBQUFBLElBQ0wsSUFBTSxFQUFBLDRCQUFBO0FBQUEsSUFDTixPQUFTLEVBQUEsS0FBQTtBQUFBLElBQ1QsaUJBQWlCLEVBQUksRUFBQTtBQUNuQixNQUFBLE9BQU8sT0FBTyxFQUFFLENBQUEsQ0FBQTtBQUFBLEtBQ2xCO0FBQUEsSUFDQSxNQUFNLFNBQVUsQ0FBQSxJQUFBLEVBQU0sRUFBSSxFQUFBO0FBQ3hCLE1BQUksSUFBQTtBQUNGLFFBQUEsT0FBTyxNQUFNLFNBQUEsQ0FBVSxJQUFNLEVBQUEsRUFBQSxFQUFJLE9BQU8sQ0FBQSxDQUFBO0FBQUEsZUFFbkMsQ0FBUCxFQUFBO0FBQ0UsUUFBQSxJQUFBLENBQUssTUFBTSxDQUFDLENBQUEsQ0FBQTtBQUFBLE9BQ2Q7QUFBQSxLQUNGO0FBQUEsR0FDRixDQUFBO0FBQ0YsQ0FBQyxDQUFBOztBQzFCRCxjQUFlLFFBQVMsQ0FBQSxPQUFBOzs7OyJ9