{"version":3,"file":"karma.js","sources":["../../src/libs/libWrapper.js","../../src/module/KarmaData.js","../../src/module/KarmaDialog.js","../../src/module/karma.js"],"sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright © 2021 fvtt-lib-wrapper Rui Pinheiro\n\n\"use strict\";\n\n// A shim for the libWrapper library\nexport let libWrapper = undefined;\n\nexport const VERSIONS = [1, 12, 2];\nexport const TGT_SPLIT_RE = new RegExp(\"([^.[]+|\\\\[('([^'\\\\\\\\]|\\\\\\\\.)+?'|\\\"([^\\\"\\\\\\\\]|\\\\\\\\.)+?\\\")\\\\])\", \"g\");\nexport const TGT_CLEANUP_RE = new RegExp(\"(^\\\\['|'\\\\]$|^\\\\[\\\"|\\\"\\\\]$)\", \"g\");\n\n// Main shim code\nHooks.once(\"init\", () => {\n\t// Check if the real module is already loaded - if so, use it\n\tif (globalThis.libWrapper && !(globalThis.libWrapper.is_fallback ?? true)) {\n\t\tlibWrapper = globalThis.libWrapper;\n\t\treturn;\n\t}\n\n\t// Fallback implementation\n\tlibWrapper = class {\n\t\tstatic get is_fallback() {\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic get WRAPPER() {\n\t\t\treturn \"WRAPPER\";\n\t\t}\n\n\t\tstatic get MIXED() {\n\t\t\treturn \"MIXED\";\n\t\t}\n\n\t\tstatic get OVERRIDE() {\n\t\t\treturn \"OVERRIDE\";\n\t\t}\n\n\t\tstatic register(package_id, target, fn, type = \"MIXED\", { chain = undefined, bind = [] } = {}) {\n\t\t\tconst is_setter = target.endsWith(\"#set\");\n\t\t\ttarget = !is_setter ? target : target.slice(0, -4);\n\t\t\tconst split = target.match(TGT_SPLIT_RE).map((x) => x.replace(/\\\\(.)/g, \"$1\").replace(TGT_CLEANUP_RE, \"\"));\n\t\t\tconst root_nm = split.splice(0, 1)[0];\n\n\t\t\tlet obj; let fn_name;\n\t\t\tif (split.length === 0) {\n\t\t\t\tobj = globalThis;\n\t\t\t\tfn_name = root_nm;\n\t\t\t} else {\n\t\t\t\tconst _eval = eval;\n\t\t\t\tfn_name = split.pop();\n\t\t\t\tobj = split.reduce((x, y) => x[y], globalThis[root_nm] ?? _eval(root_nm));\n\t\t\t}\n\n\t\t\tlet iObj = obj;\n\t\t\tlet descriptor = null;\n\t\t\twhile (iObj) {\n\t\t\t\tdescriptor = Object.getOwnPropertyDescriptor(iObj, fn_name);\n\t\t\t\tif (descriptor) break;\n\t\t\t\tiObj = Object.getPrototypeOf(iObj);\n\t\t\t}\n\t\t\tif (!descriptor || descriptor?.configurable === false) throw new Error(\n\t\t\t\t\t`libWrapper Shim: '${target}' does not exist, could not be found, or has a non-configurable descriptor.`,\n\t\t\t\t);\n\n\t\t\tlet original = null;\n\t\t\tconst wrapper =\n\t\t\t\tchain ?? (type.toUpperCase?.() !== \"OVERRIDE\" && type !== 3)\n\t\t\t\t\t? function (...args) {\n\t\t\t\t\t\t\treturn fn.call(this, original.bind(this), ...bind, ...args);\n\t\t\t\t\t }\n\t\t\t\t\t: function (...args) {\n\t\t\t\t\t\t\treturn fn.call(this, ...bind, ...args);\n\t\t\t\t\t };\n\t\t\tif (!is_setter) {\n\t\t\t\tif (descriptor.value) {\n\t\t\t\t\toriginal = descriptor.value;\n\t\t\t\t\tdescriptor.value = wrapper;\n\t\t\t\t} else {\n\t\t\t\t\toriginal = descriptor.get;\n\t\t\t\t\tdescriptor.get = wrapper;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!descriptor.set) throw new Error(`libWrapper Shim: '${target}' does not have a setter`);\n\t\t\t\toriginal = descriptor.set;\n\t\t\t\tdescriptor.set = wrapper;\n\t\t\t}\n\n\t\t\tdescriptor.configurable = true;\n\t\t\tObject.defineProperty(obj, fn_name, descriptor);\n\t\t}\n\t};\n});\n","const { fields } = foundry.data;\n\nexport class KarmaData extends foundry.abstract.DataModel {\n\tstatic defineSchema() {\n\n\t\tconst maxDie = Math.max(\n\t\t\t...Object.keys(CONFIG.Dice.fulfillment.dice)\n\t\t\t\t.map((key) => Number(key.replace(/^d/, \"\")))\n\t\t);\n\t\treturn {\n\t\t\tid: new fields.DocumentIdField({ nullable: false }),\n\t\t\tenabled: new fields.BooleanField({ label: \"KARMA.Form.enabled\" }),\n\t\t\trecurring: new fields.BooleanField({ initial: true, label: \"KARMA.Form.Recurring.label\", hint: \"KARMA.Form.Recurring.hint\" }),\n\t\t\tname: new fields.StringField({ required: true, nullable: false, initial: \"New Karma\", label: \"Name\" }),\n\t\t\ttype: new fields.StringField({\n\t\t\t\trequired: true,\n\t\t\t\tinitial: \"simple\",\n\t\t\t\tchoices: {\n\t\t\t\t\tsimple: \"KARMA.Form.Type.simple\",\n\t\t\t\t\taverage: \"KARMA.Form.Type.average\",\n\t\t\t\t\tfudge: \"KARMA.Form.Type.fudge\"\n\t\t\t\t},\n\t\t\t\tlabel: \"KARMA.Form.Type.label\"\n\t\t\t}),\n\t\t\tdice: requiredInt({ initial: 20, min: 2, max: maxDie, label: \"KARMA.Form.Faces.label\" }),\n\t\t\tinequality: new fields.StringField({\n\t\t\t\trequired: true,\n\t\t\t\tinitial: \"≤\",\n\t\t\t\tchoices: Object.fromEntries([\"≤\", \"<\", \"≥\", \">\"].map((value) => [value, value])),\n\t\t\t\tlabel: \"KARMA.Form.Inequality.label\"\n\t\t\t}),\n\t\t\thistory: requiredInt({ initial: 2, min: 2, max: 100, label: \"KARMA.Form.History.label\" }),\n\t\t\t// Exclusive to Simple Karma\n\t\t\tthreshold: requiredInt({ initial: 7, label: \"KARMA.Form.Threshold.label\" }),\n\t\t\t// This used to be Floor-only, but now works for Ceiling\n\t\t\t// TODO rename to \"target\"\n\t\t\tfloor: requiredInt({ initial: 13, label: \"KARMA.Form.Floor.label\" }),\n\t\t\t// Exclusive to Average Karma\n\t\t\tnudge: requiredInt({initial: 5, label: \"KARMA.Form.Nudge.label\" }),\n\t\t\tcumulative: new fields.BooleanField({ label: \"KARMA.Form.Cumulative.label\" }),\n\t\t\t// User Configuration\n\t\t\tallGms: new fields.BooleanField({ initial: true }),\n\t\t\tallPlayers: new fields.BooleanField({ initial: true }),\n\t\t\tusers: new fields.TypedObjectField(new fields.BooleanField(),\n\t\t\t\t{validateKey: foundry.data.validators.isValidId}),\n\t\t};\n\t}\n\n\tstatic migrateData(source) {\n\t\tif (!source.id) {\n\t\t\tsource.id = foundry.utils.randomID(16);\n\t\t}\n\t}\n}\n\nfunction requiredInt(config) {\n\treturn new fields.NumberField({\n\t\tinteger: true,\n\t\tnullable: false,\n\t\tpositive: true,\n\t\trequired: true,\n\t\t...config\n\t});\n}\n","import { KarmaData } from \"./KarmaData.js\";\r\n\r\nconst { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;\r\nexport class KarmaApp extends HandlebarsApplicationMixin(ApplicationV2) {\r\n\tstatic DEFAULT_OPTIONS = {\r\n\t\tid: \"karma-config\",\r\n\t\tactions: {\r\n\t\t\taddKarma: KarmaApp.addKarma,\r\n\t\t\tdeleteKarma: KarmaApp.deleteKarma,\r\n\t\t\tmarkUsers: KarmaApp.markUsers,\r\n\t\t\tselectDice: KarmaApp.selectDice\r\n\t\t},\r\n\t\tform: {\r\n\t\t\thandler: KarmaApp.#onSubmit,\r\n\t\t\tcloseOnSubmit: false,\r\n\t\t\tsubmitOnChange: true,\r\n\t\t\tsubmitOnClose: true,\r\n\t\t},\r\n\t\tposition: {\r\n\t\t\twidth: 650\r\n\t\t},\r\n\t\ttag: \"form\",\r\n\t\twindow: {\r\n\t\t\tcontentClasses: [\"karma-config\", \"standard-form\"],\r\n\t\t\ticon: \"fas fa-praying-hands\",\r\n\t\t\ttitle: \"KARMA.Form.title\",\r\n\t\t},\r\n\t};\r\n\r\n\tstatic PARTS = {\r\n\t\ttabs: { template: \"templates/generic/tab-navigation.hbs\" },\r\n\t\tform: { template: \"modules/karma/templates/karma-config.hbs\" },\r\n\t\tbuttons: { template: \"templates/generic/form-footer.hbs\" }\r\n\t};\r\n\r\n\t_karma;\r\n\r\n\tget karma() {\r\n\t\treturn this._karma ??= foundry.utils.deepClone(game.settings.get(\"karma\", \"configs\"));\r\n\t}\r\n\r\n\tset karma(value) {\r\n\t\tthis._karma = value;\r\n\t}\r\n\r\n\ttabGroups = {\r\n\t\tmain: \"0\",\r\n\t\t...this.karma.reduce((types, _, index) => {\r\n\t\t\ttypes[index] = \"basics\";\r\n\t\t\treturn types;\r\n\t\t}, {})\r\n\t};\r\n\r\n\t#prepareTabs() {\r\n\t\treturn this.karma.reduce((tabs, tabData, index) => {\r\n\t\t\tconst active = this.tabGroups.main === String(index);\r\n\t\t\tconst { name, enabled, recurring, type } = tabData;\r\n\t\t\tconst cssClass = [];\r\n\t\t\tif (enabled) cssClass.push(\"enabled\");\r\n\t\t\tif (active) cssClass.push(\"active\");\r\n\t\t\tif (type === \"fudge\" && recurring !== false) cssClass.push(\"recurring\");\r\n\t\t\ttabs[index] = {\r\n\t\t\t\tid: index,\r\n\t\t\t\tgroup: \"main\",\r\n\t\t\t\tlabel: name,\r\n\t\t\t\tactive,\r\n\t\t\t\tcssClass: cssClass.join(\" \"),\r\n\t\t\t\tdata: tabData\r\n\t\t\t};\r\n\t\t\treturn tabs;\r\n\t\t}, {});\r\n\t}\r\n\r\n\t_prepareContext() {\r\n\t\tthis.karma.forEach((k) => {\r\n\t\t\tthis.getUsers(k);\r\n\t\t\tk.example = this.getExample(k);\r\n\t\t});\r\n\t\treturn {\r\n\t\t\tdiceList: Object.fromEntries(\r\n\t\t\t\tObject.entries(CONFIG.Dice.fulfillment.dice).map(([key, value]) => {\r\n\t\t\t\t\tconst number = key.replace(/^d/, \"\"); // Remove the 'd'\r\n\t\t\t\t\treturn [value.label, Number(number)];\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t\ttabs: this.#prepareTabs(),\r\n\t\t\tverticalTabs: true,\r\n\t\t\tfields: KarmaData.schema.fields,\r\n\t\t\tkarma: this.karma,\r\n\t\t\tbuttons: [\r\n\t\t\t\t{ type: \"submit\", icon: \"fa-solid fa-save\", label: \"SETTINGS.Save\" },\r\n\t\t\t\t{ type: \"button\", action: \"deleteKarma\", icon: \"fa-solid fa-trash\", label: \"KARMA.Form.DeleteKarma\" },\r\n\t\t\t]\r\n\t\t};\r\n\t}\r\n\r\n\tstatic markUsers(event, target) {\r\n\t\tconst checked = !target.classList.contains(\"checked\");\r\n\t\ttarget.classList.toggle(\"checked\", checked);\r\n\t\tconst users = target.dataset.users;\r\n\t\tfor (const element of target.closest(\".form-group\").querySelectorAll(`.user-picker .karma-checkbox.${users}:has(input)`)) {\r\n\t\t\telement.querySelector(\"input\").checked = checked;\r\n\t\t\telement.querySelector(\"label\")?.classList.toggle(\"checked\", checked);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic selectDice(event, target) {\r\n\t\tconst checked = !target.classList.contains(\"checked\");\r\n\t\tif (!checked) return;\r\n\t\tconst dice = target.dataset.dice;\r\n\t\ttarget.closest(\".form-group\").querySelector(\"range-picker\").value = dice;\r\n\t}\r\n\r\n\t/**\r\n\t *Return an array of all users (map of id and name), defaulting to ones currently active\r\n\t */\r\n\tgetUsers(karma, activeOnly = false) {\r\n\t\tkarma.gms = [];\r\n\t\tkarma.players = [];\r\n\t\tgame.users\r\n\t\t\t.filter(({ active }) => (!activeOnly || active))\r\n\t\t\t.forEach(({ id, name, isGM }) => {\r\n\t\t\t\tif (isGM) {\r\n\t\t\t\t\tkarma.gms.push({\r\n\t\t\t\t\t\tid,\r\n\t\t\t\t\t\tname: name,\r\n\t\t\t\t\t\tactive: Boolean(karma.users[id]) || karma.allGms\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tkarma.players.push({\r\n\t\t\t\t\t\tid,\r\n\t\t\t\t\t\tname: name,\r\n\t\t\t\t\t\tactive: Boolean(karma.users[id]) || karma.allPlayers\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\tgetExample(karma) {\r\n\t\tlet example = \"\";\r\n\t\tconst leastMost = game.i18n.localize(`KARMA.Form.${[\"≤\", \"<\"].includes(karma.inequality) ? \"least\" : \"most\"}`);\r\n\t\tconst term = game.i18n.localize(`KARMA.Form.Inequality.options.${karma.inequality}`);\r\n\t\tconst threshold = game.i18n.format(\"KARMA.Form.Threshold.hint\", { term, number: karma.threshold });\r\n\t\tconst target = game.i18n.format(\"KARMA.Form.Floor.hint\", { leastMost, number: karma.floor });\r\n\t\tif (karma.type === \"simple\") {\r\n\t\t\tconst history = game.i18n.format(\"KARMA.Form.History.hint.simple\", { number: karma.history });\r\n\t\t\texample = `${history} ${threshold} ${target}`;\r\n\t\t} else if (karma.type === \"average\") {\r\n\t\t\tconst history = game.i18n.format(\"KARMA.Form.History.hint.average\", { number: karma.history });\r\n\t\t\tlet adjustment = game.i18n.format(\"KARMA.Form.Nudge.hint\", { number: karma.nudge, threshold: karma.threshold });\r\n\t\t\tif (karma.cumulative) {\r\n\t\t\t\tadjustment = `${adjustment.slice(0, -1)}, ${karma.nudge * 2}, ${karma.nudge * 3}...`;\r\n\t\t\t}\r\n\t\t\texample = `${history} ${threshold} ${adjustment}`;\r\n\t\t} else if (karma.type === \"fudge\") {\r\n\t\t\texample = target.capitalize();\r\n\t\t}\r\n\t\treturn example;\r\n\t}\r\n\r\n\t_onRender(context, options) {\r\n\t\tconst a = document.createElement(\"a\");\r\n\t\ta.dataset.action = \"addKarma\";\r\n\t\ta.dataset.tab = \"\";\r\n\t\tconst span = document.createElement(\"span\");\r\n\t\tconst i = document.createElement(\"i\");\r\n\t\ti.className = \"far fa-plus\";\r\n\t\tspan.append(i);\r\n\t\tspan.innerText = game.i18n.localize(\"KARMA.Form.AddNewKarma\");\r\n\t\ta.append(span);\r\n\r\n\t\tthis.element.querySelector(\".sheet-tabs\").append(a);\r\n\t}\r\n\r\n\tstatic async addKarma(event) {\r\n\t\tevent.preventDefault();\r\n\t\tthis.tabGroups.main = String(this.karma.length);\r\n\t\tconst name = game.i18n.localize(\"KARMA.Form.NewKarma\");\r\n\t\tthis.karma.push({\r\n\t\t\t...game.settings.settings.get(\"karma.configs\").default[0],\r\n\t\t\tname,\r\n\t\t\tid: foundry.utils.randomID(16)\r\n\t\t});\r\n\t\tthis.render();\r\n\t}\r\n\r\n\tstatic async deleteKarma(event) {\r\n\t\tevent.preventDefault();\r\n\t\tthis.karma.splice(Number(this.tabGroups.main), 1);\r\n\t\tthis.tabGroups.main = String(Number(this.tabGroups.main) - 1);\r\n\t\tthis.render();\r\n\t}\r\n\r\n\tstatic async #onSubmit(event, form, formData) {\r\n\t\tconst expandForm = foundry.utils.expandObject(formData.object);\r\n\t\tconst config = [];\r\n\t\tObject.entries(expandForm).forEach(([id, karma]) => {\r\n\t\t\tconst gms = Object.entries(karma?.gms ?? {});\r\n\t\t\tconst players = Object.entries(karma?.players ?? {});\r\n\t\t\tkarma.allGms = gms.every(([id, bool]) => bool);\r\n\t\t\tkarma.allPlayers = players.every(([id, bool]) => bool);\r\n\t\t\tconst users = Object.fromEntries([...gms, ...players]);\r\n\r\n\t\t\tconst { floor, nudge, cumulative } = game.settings.settings.get(\"karma.configs\").default[0];\r\n\t\t\tconfig.push({ floor, nudge, cumulative, users, ...karma });\r\n\t\t});\r\n\t\tthis.karma = config;\r\n\r\n\t\tif (event.type === \"submit\") {\r\n\t\t\tawait game.settings.set(\"karma\", \"configs\", this.karma);\r\n\t\t\tthis.close();\r\n\t\t} else this.render();\r\n\t}\r\n}\r\n","import { libWrapper } from \"../libs/libWrapper.js\";\nimport { KarmaData } from \"./KarmaData.js\";\nimport { KarmaApp } from \"./KarmaDialog.js\";\n\nHooks.once(\"init\", () => {\n\tlibWrapper.register(\"karma\", \"CONFIG.Dice.termTypes.DiceTerm.prototype.roll\", wrapDiceTermRoll, \"MIXED\");\n\tgame.settings.registerMenu(\"karma\", \"KarmaDialog\", {\n\t\tname: \"KARMA.Karma\",\n\t\tlabel: \"KARMA.Settings.KarmaDialog.label\",\n\t\thint: \"KARMA.Settings.KarmaDialog.hint\",\n\t\ticon: \"fas fa-praying-hands\",\n\t\ttype: KarmaApp,\n\t\trestricted: true,\n\t});\n\n\tconst { ArrayField, EmbeddedDataField } = foundry.data.fields;\n\tgame.settings.register(\"karma\", \"configs\", {\n\t\tscope: \"world\",\n\t\tconfig: false,\n\t\ttype: new ArrayField(\n\t\t\tnew EmbeddedDataField(KarmaData),\n\t\t\t{\n\t\t\t\tempty: false,\n\t\t\t\tinitial: [{\n\t\t\t\t\tid: \"karma\".padEnd(16, \"0\"),\n\t\t\t\t\tenabled: false,\n\t\t\t\t\tname: \"d20\",\n\t\t\t\t\ttype: \"simple\",\n\t\t\t\t\tdice: 20,\n\t\t\t\t\tinequality: \"≤\",\n\t\t\t\t\thistory: 2,\n\t\t\t\t\tthreshold: 7,\n\t\t\t\t\tfloor: 13,\n\t\t\t\t\tnudge: 5,\n\t\t\t\t\tcumulative: false,\n\t\t\t\t\tusers: {},\n\t\t\t\t\tallGms: true,\n\t\t\t\t\tallPlayers: true,\n\t\t\t\t}]\n\t\t\t}\n\t\t)\n\t});\n\n\tgame.settings.register(\"karma\", \"showChatMessageIcon\", {\n\t\tname: \"KARMA.Settings.showChatMessageIcon.label\",\n\t\thint: \"KARMA.Settings.showChatMessageIcon.hint\",\n\t\tscope: \"world\",\n\t\tconfig: true,\n\t\ttype: Boolean,\n\t\tdefault: false,\n\t\tonChange: (value) => {\n\t\t\tgame.messages.contents\n\t\t\t\t.slice(-100)\n\t\t\t\t.filter((m) => m.rolls?.length && m.rolls.find((r) => r.terms.find((t) => t.options.karma)))\n\t\t\t\t.forEach((m) => ui.chat.updateMessage(m));\n\t\t},\n\t});\n\n\tgame.settings.register(\"karma\", \"controlsButton\", {\n\t\tname: \"KARMA.Settings.controlsButton.label\",\n\t\thint: \"KARMA.Settings.controlsButton.hint\",\n\t\tscope: \"world\",\n\t\tconfig: true,\n\t\ttype: Boolean,\n\t\tdefault: true,\n\t\tonChange: async () => await ui.controls.render({ reset: true }),\n\t});\n\n\tgame.keybindings.register(\"karma\", \"openKarmDialog\", {\n\t\tname: \"KARMA.Settings.KarmaDialog.label\",\n\t\tonDown: () => {\n\t\t\tnew KarmaApp().render(true);\n\t\t},\n\t\trestricted: true,\n\t});\n\n\tCONFIG.queries[\"karma-disable-fudge\"] = async ({ id }) => {\n\t\tconst settings = foundry.utils.deepClone(game.settings.get(\"karma\", \"configs\"));\n\t\tsettings.find((k) => k.id === id).enabled = false;\n\t\tawait game.settings.set(\"karma\", \"configs\", settings);\n\t};\n});\n\nHooks.on(\"getSceneControlButtons\", (controls) => {\n\tif (!game.user.isGM || !game.settings.get(\"karma\", \"controlsButton\")) return;\n\tcontrols.tokens.tools.karma = {\n\t\tname: \"karma\",\n\t\ttitle: \"KARMA.Karma\",\n\t\ticon: \"fas fa-praying-hands\",\n\t\tonChange: () => new KarmaApp().render(true),\n\t\tbutton: true,\n\t};\n});\n\nHooks.on(\"renderChatMessage\", (message, html, data) => {\n\tif (!game.user.isGM || !message.rolls?.length || !game.settings.get(\"karma\", \"showChatMessageIcon\")) return;\n\tconst terms = message.rolls.filter((r) => r.terms.some((t) => t.options?.karma));\n\tif (terms?.length) {\n\t\tconst karma = terms.flatMap((entry) => entry.terms)\n\t\t\t.map((term) => term.options.karma)\n\t\t\t.filterJoin(\"
\");\n\t\tconst button = $(\n\t\t\t`\n\t\t\t\t\n\t\t\t`\n\t\t);\n\t\thtml.find(\".message-metadata\").append(button);\n\t}\n});\n\nfunction clampHistory(history, karma) {\n\tif (history.length > karma.history) {\n\t\thistory.splice(0, history.length - karma.history);\n\t}\n}\n\n/**\n * Wrapper for raw dice\n * @param {function} wrapped\n * @param {object} options\n * @returns {{result: undefined, active: boolean}|*}\n */\nasync function wrapDiceTermRoll(wrapped, options) {\n\tconst karma = game.settings.get(\"karma\", \"configs\");\n\tconst roll = await wrapped(options);\n\tconst validKarma = karma.filter((k) => k.enabled && this.faces === k.dice);\n\tfor (const k of validKarma) {\n\t\tconst valid = (game.user.isGM && k.allGms) || (!game.user.isGM && k.allPlayers) || k.users[game.user.id];\n\t\tif (!valid) continue;\n\t\tconst userKarma = game.user.getFlag(\"karma\", \"stats\") ?? { [k.id]: { history: [], cumulative: 0 } };\n\t\tif (!userKarma[k.id]) userKarma[k.id] = { history: [], cumulative: 0 };\n\t\tconst history = userKarma[k.id].history;\n\t\thistory.push(roll.result);\n\t\tclampHistory(history, k);\n\n\t\tif (!options.maximize && !options.minimize) {\n\t\t\tconst oldRoll = roll.result;\n\t\t\tconst ineqCheck = (v1, v2) => {\n\t\t\t\tswitch (k.inequality) {\n\t\t\t\t\tcase \"≤\":\n\t\t\t\t\t\treturn v1 <= v2;\n\t\t\t\t\tcase \"<\":\n\t\t\t\t\t\treturn v1 < v2;\n\t\t\t\t\tcase \"≥\":\n\t\t\t\t\t\treturn v1 >= v2;\n\t\t\t\t\tcase \">\":\n\t\t\t\t\t\treturn v1 > v2;\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst floorCheck = [\"≤\", \"<\"].includes(k.inequality)\n\t\t\t\t? (result) => result < k.floor\n\t\t\t\t: (result) => result > k.floor;\n\t\t\tif (k.type === \"simple\") {\n\t\t\t\tconst tempResult = history.findIndex((element) => !ineqCheck(element, k.threshold));\n\n\t\t\t\tif (history.length === k.history && tempResult === -1) {\n\t\t\t\t\twhile (floorCheck(roll.result)) {\n\t\t\t\t\t\troll.result = Math.ceil(CONFIG.Dice.randomUniform() * this.faces);\n\t\t\t\t\t}\n\n\t\t\t\t\thistory.push(roll.result);\n\t\t\t\t}\n\t\t\t\tclampHistory(history, k);\n\t\t\t} else if (k.type === \"average\") {\n\t\t\t\tconst tempResult = history.reduce((a, b) => a + b, 0) / history.length;\n\n\t\t\t\tif (history.length === k.history && ineqCheck(tempResult, k.threshold)) {\n\t\t\t\t\tif (k.cumulative) userKarma[k.id].cumulative += 1;\n\t\t\t\t\telse userKarma[k.id].cumulative = 1;\n\n\t\t\t\t\tconst nudge = userKarma[k.id].cumulative * k.nudge;\n\t\t\t\t\tif ([\"≤\", \"<\"].includes(k.inequality)) roll.result += nudge;\n\t\t\t\t\telse roll.result -= nudge;\n\t\t\t\t\troll.result = Math.clamp(roll.result, 1, this.faces);\n\n\t\t\t\t\thistory.push(roll.result);\n\t\t\t\t} else userKarma[k.id].cumulative = 0;\n\t\t\t\tclampHistory(history, k);\n\t\t\t} else if (k.type === \"fudge\") {\n\t\t\t\tif (floorCheck(roll.result)) {\n\t\t\t\t\twhile (floorCheck(roll.result)) {\n\t\t\t\t\t\troll.result = Math.ceil(CONFIG.Dice.randomUniform() * this.faces);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!k.recurring) {\n\t\t\t\t\t\tawait game.users.activeGM.query(\"karma-disable-fudge\", { id: k.id });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (oldRoll !== roll.result) {\n\t\t\t\tconst message = game.i18n.format(\"KARMA.AdjustRoll\", { oldRoll, newRoll: roll.result });\n\t\t\t\tif (this.options.karma) this.options.karma.push(message);\n\t\t\t\telse this.options.karma = [message];\n\t\t\t}\n\t\t\tgame.user.setFlag(\"karma\", \"stats\", userKarma);\n\t\t\tthis.results[this.results.length - 1] = roll;\n\t\t}\n\t}\n\treturn roll;\n}\n"],"names":[],"mappings":"AAAA;AAIA;AACA;AACO,IAAI,UAAU,GAAG,SAAS,CAAC;AAG3B,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,+DAA+D,EAAE,GAAG,CAAC,CAAC;AACtG,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;AAC7E;AACA;AACA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;AACzB;AACA,CAAC,IAAI,UAAU,CAAC,UAAU,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE;AAC5E,EAAE,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;AACrC,EAAE,OAAO;AACT,EAAE;AACF;AACA;AACA,CAAC,UAAU,GAAG,MAAM;AACpB,EAAE,WAAW,WAAW,GAAG;AAC3B,GAAG,OAAO,IAAI,CAAC;AACf,GAAG;AACH;AACA,EAAE,WAAW,OAAO,GAAG;AACvB,GAAG,OAAO,SAAS,CAAC;AACpB,GAAG;AACH;AACA,EAAE,WAAW,KAAK,GAAG;AACrB,GAAG,OAAO,OAAO,CAAC;AAClB,GAAG;AACH;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,GAAG,OAAO,UAAU,CAAC;AACrB,GAAG;AACH;AACA,EAAE,OAAO,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,EAAE,EAAE,KAAK,GAAG,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;AACjG,GAAG,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7C,GAAG,MAAM,GAAG,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtD,GAAG,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9G,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC;AACA,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC;AACxB,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,IAAI,GAAG,GAAG,UAAU,CAAC;AACrB,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,MAAM;AACV,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC;AACvB,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAC1B,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9E,IAAI;AACJ;AACA,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC;AAClB,GAAG,IAAI,UAAU,GAAG,IAAI,CAAC;AACzB,GAAG,OAAO,IAAI,EAAE;AAChB,IAAI,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChE,IAAI,IAAI,UAAU,EAAE,MAAM;AAC1B,IAAI,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACvC,IAAI;AACJ,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE,YAAY,KAAK,KAAK,EAAE,MAAM,IAAI,KAAK;AACzE,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,2EAA2E,CAAC;AAC7G,KAAK,CAAC;AACN;AACA,GAAG,IAAI,QAAQ,GAAG,IAAI,CAAC;AACvB,GAAG,MAAM,OAAO;AAChB,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,CAAC,CAAC;AAChE,OAAO,UAAU,GAAG,IAAI,EAAE;AAC1B,OAAO,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AACnE,QAAQ;AACR,OAAO,UAAU,GAAG,IAAI,EAAE;AAC1B,OAAO,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAC9C,QAAQ,CAAC;AACT,GAAG,IAAI,CAAC,SAAS,EAAE;AACnB,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE;AAC1B,KAAK,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;AACjC,KAAK,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC;AAChC,KAAK,MAAM;AACX,KAAK,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC;AAC/B,KAAK,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC;AAC9B,KAAK;AACL,IAAI,MAAM;AACV,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAChG,IAAI,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC;AAC9B,IAAI,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC;AAC7B,IAAI;AACJ;AACA,GAAG,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;AAClC,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACnD,GAAG;AACH,EAAE,CAAC;AACH,CAAC,CAAC;;AC5FF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;AAChC;AACO,MAAM,SAAS,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC1D,CAAC,OAAO,YAAY,GAAG;AACvB;AACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG;AACzB,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/C,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAChD,GAAG,CAAC;AACJ,EAAE,OAAO;AACT,GAAG,EAAE,EAAE,IAAI,MAAM,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACtD,GAAG,OAAO,EAAE,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;AACpE,GAAG,SAAS,EAAE,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,4BAA4B,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;AAChI,GAAG,IAAI,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACzG,GAAG,IAAI,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC;AAChC,IAAI,QAAQ,EAAE,IAAI;AAClB,IAAI,OAAO,EAAE,QAAQ;AACrB,IAAI,OAAO,EAAE;AACb,KAAK,MAAM,EAAE,wBAAwB;AACrC,KAAK,OAAO,EAAE,yBAAyB;AACvC,KAAK,KAAK,EAAE,uBAAuB;AACnC,KAAK;AACL,IAAI,KAAK,EAAE,uBAAuB;AAClC,IAAI,CAAC;AACL,GAAG,IAAI,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;AAC3F,GAAG,UAAU,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC;AACtC,IAAI,QAAQ,EAAE,IAAI;AAClB,IAAI,OAAO,EAAE,GAAG;AAChB,IAAI,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACpF,IAAI,KAAK,EAAE,6BAA6B;AACxC,IAAI,CAAC;AACL,GAAG,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;AAC5F;AACA,GAAG,SAAS,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;AAC9E;AACA;AACA,GAAG,KAAK,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;AACvE;AACA,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;AACrE,GAAG,UAAU,EAAE,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;AAChF;AACA,GAAG,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrD,GAAG,UAAU,EAAE,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,GAAG,KAAK,EAAE,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE;AAC/D,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACrD,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,OAAO,WAAW,CAAC,MAAM,EAAE;AAC5B,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AAClB,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1C,GAAG;AACH,EAAE;AACF,CAAC;AACD;AACA,SAAS,WAAW,CAAC,MAAM,EAAE;AAC7B,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC;AAC/B,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,QAAQ,EAAE,KAAK;AACjB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,GAAG,MAAM;AACX,EAAE,CAAC,CAAC;AACJ;;AC7DA,MAAM,EAAE,aAAa,EAAE,0BAA0B,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;AACxE,MAAM,QAAQ,SAAS,0BAA0B,CAAC,aAAa,CAAC,CAAC;AACxE,CAAC,OAAO,eAAe,GAAG;AAC1B,EAAE,EAAE,EAAE,cAAc;AACpB,EAAE,OAAO,EAAE;AACX,GAAG,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AAC9B,GAAG,WAAW,EAAE,QAAQ,CAAC,WAAW;AACpC,GAAG,SAAS,EAAE,QAAQ,CAAC,SAAS;AAChC,GAAG,UAAU,EAAE,QAAQ,CAAC,UAAU;AAClC,GAAG;AACH,EAAE,IAAI,EAAE;AACR,GAAG,OAAO,EAAE,QAAQ,CAAC,SAAS;AAC9B,GAAG,aAAa,EAAE,KAAK;AACvB,GAAG,cAAc,EAAE,IAAI;AACvB,GAAG,aAAa,EAAE,IAAI;AACtB,GAAG;AACH,EAAE,QAAQ,EAAE;AACZ,GAAG,KAAK,EAAE,GAAG;AACb,GAAG;AACH,EAAE,GAAG,EAAE,MAAM;AACb,EAAE,MAAM,EAAE;AACV,GAAG,cAAc,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;AACpD,GAAG,IAAI,EAAE,sBAAsB;AAC/B,GAAG,KAAK,EAAE,kBAAkB;AAC5B,GAAG;AACH,EAAE,CAAC;AACH;AACA,CAAC,OAAO,KAAK,GAAG;AAChB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,sCAAsC,EAAE;AAC5D,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,0CAA0C,EAAE;AAChE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,mCAAmC,EAAE;AAC5D,EAAE,CAAC;AACH;AACA,CAAC,MAAM,CAAC;AACR;AACA,CAAC,IAAI,KAAK,GAAG;AACb,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AACxF,EAAE;AACF;AACA,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;AAClB,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB,EAAE;AACF;AACA,CAAC,SAAS,GAAG;AACb,EAAE,IAAI,EAAE,GAAG;AACX,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,KAAK;AAC5C,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;AAC3B,GAAG,OAAO,KAAK,CAAC;AAChB,GAAG,EAAE,EAAE,CAAC;AACR,EAAE,CAAC;AACH;AACA,CAAC,YAAY,GAAG;AAChB,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,KAAK;AACrD,GAAG,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AACtD,GAAG,MAAM,QAAQ,GAAG,EAAE,CAAC;AACvB,GAAG,IAAI,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,GAAG,IAAI,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvC,GAAG,IAAI,IAAI,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3E,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG;AACjB,IAAI,EAAE,EAAE,KAAK;AACb,IAAI,KAAK,EAAE,MAAM;AACjB,IAAI,KAAK,EAAE,IAAI;AACf,IAAI,MAAM;AACV,IAAI,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAChC,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,CAAC;AACL,GAAG,OAAO,IAAI,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE;AACF;AACA,CAAC,eAAe,GAAG;AACnB,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC5B,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpB,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClC,GAAG,CAAC,CAAC;AACL,EAAE,OAAO;AACT,GAAG,QAAQ,EAAE,MAAM,CAAC,WAAW;AAC/B,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AACvE,KAAK,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1C,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,KAAK,CAAC;AACN,IAAI;AACJ,GAAG,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;AAC5B,GAAG,YAAY,EAAE,IAAI;AACrB,GAAG,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM;AAClC,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK;AACpB,GAAG,OAAO,EAAE;AACZ,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,EAAE;AACxE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,wBAAwB,EAAE;AACzG,IAAI;AACJ,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,OAAO,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE;AACjC,EAAE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACxD,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9C,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,EAAE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,CAAC,6BAA6B,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE;AAC5H,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC;AACpD,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACxE,GAAG;AACH,EAAE;AACF;AACA,CAAC,OAAO,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;AAClC,EAAE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACxD,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO;AACvB,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AACnC,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;AAC3E,EAAE;AACF;AACA;AACA;AACA;AACA,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE;AACrC,EAAE,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;AACjB,EAAE,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AACrB,EAAE,IAAI,CAAC,KAAK;AACZ,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC;AACnD,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;AACpC,IAAI,IAAI,IAAI,EAAE;AACd,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,MAAM,EAAE;AACR,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM;AACtD,MAAM,CAAC,CAAC;AACR,KAAK,MAAM;AACX,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACxB,MAAM,EAAE;AACR,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU;AAC1D,MAAM,CAAC,CAAC;AACR,KAAK;AACL,IAAI,CAAC,CAAC;AACN,EAAE;AACF;AACA,CAAC,UAAU,CAAC,KAAK,EAAE;AACnB,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;AACnB,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACjH,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,8BAA8B,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvF,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACrG,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/F,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC/B,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gCAAgC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACjG,GAAG,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACjD,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AACvC,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAClG,GAAG,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnH,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE;AACzB,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACzF,IAAI;AACJ,GAAG,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AACrD,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AACrC,GAAG,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;AACjC,GAAG;AACH,EAAE,OAAO,OAAO,CAAC;AACjB,EAAE;AACF;AACA,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE;AAC7B,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACxC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;AAChC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;AACrB,EAAE,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC9C,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACxC,EAAE,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC;AAC9B,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjB,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAChE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjB;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtD,EAAE;AACF;AACA,CAAC,aAAa,QAAQ,CAAC,KAAK,EAAE;AAC9B,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAClD,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AACzD,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAClB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,GAAG,IAAI;AACP,GAAG,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjC,GAAG,CAAC,CAAC;AACL,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,EAAE;AACF;AACA,CAAC,aAAa,WAAW,CAAC,KAAK,EAAE;AACjC,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,EAAE;AACF;AACA,CAAC,aAAa,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC/C,EAAE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjE,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK;AACtD,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAChD,GAAG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;AACxD,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAClD,GAAG,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAC1D,GAAG,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AAC1D;AACA,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/F,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AAC9D,GAAG,CAAC,CAAC;AACL,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;AACtB;AACA,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC/B,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3D,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAChB,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,EAAE;AACF;;ACjNA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;AACzB,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,+CAA+C,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAC1G,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE;AACpD,EAAE,IAAI,EAAE,aAAa;AACrB,EAAE,KAAK,EAAE,kCAAkC;AAC3C,EAAE,IAAI,EAAE,iCAAiC;AACzC,EAAE,IAAI,EAAE,sBAAsB;AAC9B,EAAE,IAAI,EAAE,QAAQ;AAChB,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/D,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE;AAC5C,EAAE,KAAK,EAAE,OAAO;AAChB,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,IAAI,EAAE,IAAI,UAAU;AACtB,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC;AACnC,GAAG;AACH,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,OAAO,EAAE,CAAC;AACd,KAAK,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC;AAChC,KAAK,OAAO,EAAE,KAAK;AACnB,KAAK,IAAI,EAAE,KAAK;AAChB,KAAK,IAAI,EAAE,QAAQ;AACnB,KAAK,IAAI,EAAE,EAAE;AACb,KAAK,UAAU,EAAE,GAAG;AACpB,KAAK,OAAO,EAAE,CAAC;AACf,KAAK,SAAS,EAAE,CAAC;AACjB,KAAK,KAAK,EAAE,EAAE;AACd,KAAK,KAAK,EAAE,CAAC;AACb,KAAK,UAAU,EAAE,KAAK;AACtB,KAAK,KAAK,EAAE,EAAE;AACd,KAAK,MAAM,EAAE,IAAI;AACjB,KAAK,UAAU,EAAE,IAAI;AACrB,KAAK,CAAC;AACN,IAAI;AACJ,GAAG;AACH,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,EAAE;AACxD,EAAE,IAAI,EAAE,0CAA0C;AAClD,EAAE,IAAI,EAAE,yCAAyC;AACjD,EAAE,KAAK,EAAE,OAAO;AAChB,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,IAAI,EAAE,OAAO;AACf,EAAE,OAAO,EAAE,KAAK;AAChB,EAAE,QAAQ,EAAE,CAAC,KAAK,KAAK;AACvB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;AACzB,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC;AAChB,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,GAAG;AACH,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE;AACnD,EAAE,IAAI,EAAE,qCAAqC;AAC7C,EAAE,IAAI,EAAE,oCAAoC;AAC5C,EAAE,KAAK,EAAE,OAAO;AAChB,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,IAAI,EAAE,OAAO;AACf,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,QAAQ,EAAE,YAAY,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACjE,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE;AACtD,EAAE,IAAI,EAAE,kCAAkC;AAC1C,EAAE,MAAM,EAAE,MAAM;AAChB,GAAG,IAAI,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,GAAG;AACH,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,CAAC,CAAC;AACJ;AACA,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,OAAO,EAAE,EAAE,EAAE,KAAK;AAC3D,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAClF,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;AACpD,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACxD,EAAE,CAAC;AACH,CAAC,CAAC,CAAC;AACH;AACA,KAAK,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,QAAQ,KAAK;AACjD,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,OAAO;AAC9E,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG;AAC/B,EAAE,IAAI,EAAE,OAAO;AACf,EAAE,KAAK,EAAE,aAAa;AACtB,EAAE,IAAI,EAAE,sBAAsB;AAC9B,EAAE,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AAC7C,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,CAAC;AACH,CAAC,CAAC,CAAC;AACH;AACA,KAAK,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK;AACvD,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,OAAO;AAC7G,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAClF,CAAC,IAAI,KAAK,EAAE,MAAM,EAAE;AACpB,EAAE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AACrD,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AACvB,EAAE,MAAM,MAAM,GAAG,CAAC;AAClB,GAAG,CAAC;AACJ,iBAAiB,EAAE,KAAK,CAAC;AACzB;AACA;AACA,UAAU,CAAC;AACX,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAChD,EAAE;AACF,CAAC,CAAC,CAAC;AACH;AACA,SAAS,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE;AACtC,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE;AACrC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AACpD,EAAE;AACF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE;AAClD,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5E,CAAC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;AAC7B,EAAE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3G,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS;AACvB,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;AACtG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AACzE,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AAC1C,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3B;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC9C,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC/B,GAAG,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK;AACjC,IAAI,QAAQ,CAAC,CAAC,UAAU;AACxB,KAAK,KAAK,GAAG;AACb,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC;AACtB,KAAK,KAAK,GAAG;AACb,MAAM,OAAO,EAAE,GAAG,EAAE,CAAC;AACrB,KAAK,KAAK,GAAG;AACb,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC;AACtB,KAAK,KAAK,GAAG;AACb,MAAM,OAAO,EAAE,GAAG,EAAE,CAAC;AACrB,KAAK;AACL,IAAI,CAAC;AACL,GAAG,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;AACvD,MAAM,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK;AAClC,MAAM,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;AACnC,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5B,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACxF;AACA,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AAC3D,KAAK,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrC,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,MAAM;AACN;AACA,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,KAAK;AACL,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE;AACpC,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AAC3E;AACA,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE;AAC5E,KAAK,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;AACvD,UAAU,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;AACzC;AACA,KAAK,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;AACxD,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;AACjE,UAAU,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;AAC/B,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1D;AACA,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,KAAK,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;AAC1C,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;AAClC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACjC,KAAK,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrC,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,MAAM;AACN;AACA,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE;AACvB,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3E,MAAM;AACN,KAAK;AACL,IAAI;AACJ,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE;AAChC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5F,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7D,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;AACxC,IAAI;AACJ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAClD,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AAChD,GAAG;AACH,EAAE;AACF,CAAC,OAAO,IAAI,CAAC;AACb","preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FybWEuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWJzL2xpYldyYXBwZXIuanMiLCIuLi8uLi9zcmMvbW9kdWxlL0thcm1hRGF0YS5qcyIsIi4uLy4uL3NyYy9tb2R1bGUvS2FybWFEaWFsb2cuanMiLCIuLi8uLi9zcmMvbW9kdWxlL2thcm1hLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCDCqSAyMDIxIGZ2dHQtbGliLXdyYXBwZXIgUnVpIFBpbmhlaXJvXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBBIHNoaW0gZm9yIHRoZSBsaWJXcmFwcGVyIGxpYnJhcnlcbmV4cG9ydCBsZXQgbGliV3JhcHBlciA9IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IFZFUlNJT05TID0gWzEsIDEyLCAyXTtcbmV4cG9ydCBjb25zdCBUR1RfU1BMSVRfUkUgPSBuZXcgUmVnRXhwKFwiKFteLltdK3xcXFxcWygnKFteJ1xcXFxcXFxcXXxcXFxcXFxcXC4pKz8nfFxcXCIoW15cXFwiXFxcXFxcXFxdfFxcXFxcXFxcLikrP1xcXCIpXFxcXF0pXCIsIFwiZ1wiKTtcbmV4cG9ydCBjb25zdCBUR1RfQ0xFQU5VUF9SRSA9IG5ldyBSZWdFeHAoXCIoXlxcXFxbJ3wnXFxcXF0kfF5cXFxcW1xcXCJ8XFxcIlxcXFxdJClcIiwgXCJnXCIpO1xuXG4vLyBNYWluIHNoaW0gY29kZVxuSG9va3Mub25jZShcImluaXRcIiwgKCkgPT4ge1xuXHQvLyBDaGVjayBpZiB0aGUgcmVhbCBtb2R1bGUgaXMgYWxyZWFkeSBsb2FkZWQgLSBpZiBzbywgdXNlIGl0XG5cdGlmIChnbG9iYWxUaGlzLmxpYldyYXBwZXIgJiYgIShnbG9iYWxUaGlzLmxpYldyYXBwZXIuaXNfZmFsbGJhY2sgPz8gdHJ1ZSkpIHtcblx0XHRsaWJXcmFwcGVyID0gZ2xvYmFsVGhpcy5saWJXcmFwcGVyO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEZhbGxiYWNrIGltcGxlbWVudGF0aW9uXG5cdGxpYldyYXBwZXIgPSBjbGFzcyB7XG5cdFx0c3RhdGljIGdldCBpc19mYWxsYmFjaygpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHN0YXRpYyBnZXQgV1JBUFBFUigpIHtcblx0XHRcdHJldHVybiBcIldSQVBQRVJcIjtcblx0XHR9XG5cblx0XHRzdGF0aWMgZ2V0IE1JWEVEKCkge1xuXHRcdFx0cmV0dXJuIFwiTUlYRURcIjtcblx0XHR9XG5cblx0XHRzdGF0aWMgZ2V0IE9WRVJSSURFKCkge1xuXHRcdFx0cmV0dXJuIFwiT1ZFUlJJREVcIjtcblx0XHR9XG5cblx0XHRzdGF0aWMgcmVnaXN0ZXIocGFja2FnZV9pZCwgdGFyZ2V0LCBmbiwgdHlwZSA9IFwiTUlYRURcIiwgeyBjaGFpbiA9IHVuZGVmaW5lZCwgYmluZCA9IFtdIH0gPSB7fSkge1xuXHRcdFx0Y29uc3QgaXNfc2V0dGVyID0gdGFyZ2V0LmVuZHNXaXRoKFwiI3NldFwiKTtcblx0XHRcdHRhcmdldCA9ICFpc19zZXR0ZXIgPyB0YXJnZXQgOiB0YXJnZXQuc2xpY2UoMCwgLTQpO1xuXHRcdFx0Y29uc3Qgc3BsaXQgPSB0YXJnZXQubWF0Y2goVEdUX1NQTElUX1JFKS5tYXAoKHgpID0+IHgucmVwbGFjZSgvXFxcXCguKS9nLCBcIiQxXCIpLnJlcGxhY2UoVEdUX0NMRUFOVVBfUkUsIFwiXCIpKTtcblx0XHRcdGNvbnN0IHJvb3Rfbm0gPSBzcGxpdC5zcGxpY2UoMCwgMSlbMF07XG5cblx0XHRcdGxldCBvYmo7IGxldCBmbl9uYW1lO1xuXHRcdFx0aWYgKHNwbGl0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRvYmogPSBnbG9iYWxUaGlzO1xuXHRcdFx0XHRmbl9uYW1lID0gcm9vdF9ubTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IF9ldmFsID0gZXZhbDtcblx0XHRcdFx0Zm5fbmFtZSA9IHNwbGl0LnBvcCgpO1xuXHRcdFx0XHRvYmogPSBzcGxpdC5yZWR1Y2UoKHgsIHkpID0+IHhbeV0sIGdsb2JhbFRoaXNbcm9vdF9ubV0gPz8gX2V2YWwocm9vdF9ubSkpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgaU9iaiA9IG9iajtcblx0XHRcdGxldCBkZXNjcmlwdG9yID0gbnVsbDtcblx0XHRcdHdoaWxlIChpT2JqKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGlPYmosIGZuX25hbWUpO1xuXHRcdFx0XHRpZiAoZGVzY3JpcHRvcikgYnJlYWs7XG5cdFx0XHRcdGlPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaU9iaik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvcj8uY29uZmlndXJhYmxlID09PSBmYWxzZSkgdGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGBsaWJXcmFwcGVyIFNoaW06ICcke3RhcmdldH0nIGRvZXMgbm90IGV4aXN0LCBjb3VsZCBub3QgYmUgZm91bmQsIG9yIGhhcyBhIG5vbi1jb25maWd1cmFibGUgZGVzY3JpcHRvci5gLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRsZXQgb3JpZ2luYWwgPSBudWxsO1xuXHRcdFx0Y29uc3Qgd3JhcHBlciA9XG5cdFx0XHRcdGNoYWluID8/ICh0eXBlLnRvVXBwZXJDYXNlPy4oKSAhPT0gXCJPVkVSUklERVwiICYmIHR5cGUgIT09IDMpXG5cdFx0XHRcdFx0PyBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZm4uY2FsbCh0aGlzLCBvcmlnaW5hbC5iaW5kKHRoaXMpLCAuLi5iaW5kLCAuLi5hcmdzKTtcblx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQ6IGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmbi5jYWxsKHRoaXMsIC4uLmJpbmQsIC4uLmFyZ3MpO1xuXHRcdFx0XHRcdCAgfTtcblx0XHRcdGlmICghaXNfc2V0dGVyKSB7XG5cdFx0XHRcdGlmIChkZXNjcmlwdG9yLnZhbHVlKSB7XG5cdFx0XHRcdFx0b3JpZ2luYWwgPSBkZXNjcmlwdG9yLnZhbHVlO1xuXHRcdFx0XHRcdGRlc2NyaXB0b3IudmFsdWUgPSB3cmFwcGVyO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9yaWdpbmFsID0gZGVzY3JpcHRvci5nZXQ7XG5cdFx0XHRcdFx0ZGVzY3JpcHRvci5nZXQgPSB3cmFwcGVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoIWRlc2NyaXB0b3Iuc2V0KSB0aHJvdyBuZXcgRXJyb3IoYGxpYldyYXBwZXIgU2hpbTogJyR7dGFyZ2V0fScgZG9lcyBub3QgaGF2ZSBhIHNldHRlcmApO1xuXHRcdFx0XHRvcmlnaW5hbCA9IGRlc2NyaXB0b3Iuc2V0O1xuXHRcdFx0XHRkZXNjcmlwdG9yLnNldCA9IHdyYXBwZXI7XG5cdFx0XHR9XG5cblx0XHRcdGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGZuX25hbWUsIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn0pO1xuIiwiY29uc3QgeyBmaWVsZHMgfSA9IGZvdW5kcnkuZGF0YTtcblxuZXhwb3J0IGNsYXNzIEthcm1hRGF0YSBleHRlbmRzIGZvdW5kcnkuYWJzdHJhY3QuRGF0YU1vZGVsIHtcblx0c3RhdGljIGRlZmluZVNjaGVtYSgpIHtcblxuXHRcdGNvbnN0IG1heERpZSA9IE1hdGgubWF4KFxuXHRcdFx0Li4uT2JqZWN0LmtleXMoQ09ORklHLkRpY2UuZnVsZmlsbG1lbnQuZGljZSlcblx0XHRcdFx0Lm1hcCgoa2V5KSA9PiBOdW1iZXIoa2V5LnJlcGxhY2UoL15kLywgXCJcIikpKVxuXHRcdCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiBuZXcgZmllbGRzLkRvY3VtZW50SWRGaWVsZCh7IG51bGxhYmxlOiBmYWxzZSB9KSxcblx0XHRcdGVuYWJsZWQ6IG5ldyBmaWVsZHMuQm9vbGVhbkZpZWxkKHsgbGFiZWw6IFwiS0FSTUEuRm9ybS5lbmFibGVkXCIgfSksXG5cdFx0XHRyZWN1cnJpbmc6IG5ldyBmaWVsZHMuQm9vbGVhbkZpZWxkKHsgaW5pdGlhbDogdHJ1ZSwgbGFiZWw6IFwiS0FSTUEuRm9ybS5SZWN1cnJpbmcubGFiZWxcIiwgaGludDogXCJLQVJNQS5Gb3JtLlJlY3VycmluZy5oaW50XCIgfSksXG5cdFx0XHRuYW1lOiBuZXcgZmllbGRzLlN0cmluZ0ZpZWxkKHsgcmVxdWlyZWQ6IHRydWUsIG51bGxhYmxlOiBmYWxzZSwgaW5pdGlhbDogXCJOZXcgS2FybWFcIiwgbGFiZWw6IFwiTmFtZVwiIH0pLFxuXHRcdFx0dHlwZTogbmV3IGZpZWxkcy5TdHJpbmdGaWVsZCh7XG5cdFx0XHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdFx0XHRpbml0aWFsOiBcInNpbXBsZVwiLFxuXHRcdFx0XHRjaG9pY2VzOiB7XG5cdFx0XHRcdFx0c2ltcGxlOiBcIktBUk1BLkZvcm0uVHlwZS5zaW1wbGVcIixcblx0XHRcdFx0XHRhdmVyYWdlOiBcIktBUk1BLkZvcm0uVHlwZS5hdmVyYWdlXCIsXG5cdFx0XHRcdFx0ZnVkZ2U6IFwiS0FSTUEuRm9ybS5UeXBlLmZ1ZGdlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IFwiS0FSTUEuRm9ybS5UeXBlLmxhYmVsXCJcblx0XHRcdH0pLFxuXHRcdFx0ZGljZTogcmVxdWlyZWRJbnQoeyBpbml0aWFsOiAyMCwgbWluOiAyLCBtYXg6IG1heERpZSwgbGFiZWw6IFwiS0FSTUEuRm9ybS5GYWNlcy5sYWJlbFwiIH0pLFxuXHRcdFx0aW5lcXVhbGl0eTogbmV3IGZpZWxkcy5TdHJpbmdGaWVsZCh7XG5cdFx0XHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdFx0XHRpbml0aWFsOiBcIuKJpFwiLFxuXHRcdFx0XHRjaG9pY2VzOiBPYmplY3QuZnJvbUVudHJpZXMoW1wi4omkXCIsIFwiPFwiLCBcIuKJpVwiLCBcIj5cIl0ubWFwKCh2YWx1ZSkgPT4gW3ZhbHVlLCB2YWx1ZV0pKSxcblx0XHRcdFx0bGFiZWw6IFwiS0FSTUEuRm9ybS5JbmVxdWFsaXR5LmxhYmVsXCJcblx0XHRcdH0pLFxuXHRcdFx0aGlzdG9yeTogcmVxdWlyZWRJbnQoeyBpbml0aWFsOiAyLCBtaW46IDIsIG1heDogMTAwLCBsYWJlbDogXCJLQVJNQS5Gb3JtLkhpc3RvcnkubGFiZWxcIiB9KSxcblx0XHRcdC8vIEV4Y2x1c2l2ZSB0byBTaW1wbGUgS2FybWFcblx0XHRcdHRocmVzaG9sZDogcmVxdWlyZWRJbnQoeyBpbml0aWFsOiA3LCBsYWJlbDogXCJLQVJNQS5Gb3JtLlRocmVzaG9sZC5sYWJlbFwiIH0pLFxuXHRcdFx0Ly8gVGhpcyB1c2VkIHRvIGJlIEZsb29yLW9ubHksIGJ1dCBub3cgd29ya3MgZm9yIENlaWxpbmdcblx0XHRcdC8vIFRPRE8gcmVuYW1lIHRvIFwidGFyZ2V0XCJcblx0XHRcdGZsb29yOiByZXF1aXJlZEludCh7IGluaXRpYWw6IDEzLCBsYWJlbDogXCJLQVJNQS5Gb3JtLkZsb29yLmxhYmVsXCIgfSksXG5cdFx0XHQvLyBFeGNsdXNpdmUgdG8gQXZlcmFnZSBLYXJtYVxuXHRcdFx0bnVkZ2U6IHJlcXVpcmVkSW50KHtpbml0aWFsOiA1LCBsYWJlbDogXCJLQVJNQS5Gb3JtLk51ZGdlLmxhYmVsXCIgfSksXG5cdFx0XHRjdW11bGF0aXZlOiBuZXcgZmllbGRzLkJvb2xlYW5GaWVsZCh7IGxhYmVsOiBcIktBUk1BLkZvcm0uQ3VtdWxhdGl2ZS5sYWJlbFwiIH0pLFxuXHRcdFx0Ly8gVXNlciBDb25maWd1cmF0aW9uXG5cdFx0XHRhbGxHbXM6IG5ldyBmaWVsZHMuQm9vbGVhbkZpZWxkKHsgaW5pdGlhbDogdHJ1ZSB9KSxcblx0XHRcdGFsbFBsYXllcnM6IG5ldyBmaWVsZHMuQm9vbGVhbkZpZWxkKHsgaW5pdGlhbDogdHJ1ZSB9KSxcblx0XHRcdHVzZXJzOiBuZXcgZmllbGRzLlR5cGVkT2JqZWN0RmllbGQobmV3IGZpZWxkcy5Cb29sZWFuRmllbGQoKSxcblx0XHRcdFx0e3ZhbGlkYXRlS2V5OiBmb3VuZHJ5LmRhdGEudmFsaWRhdG9ycy5pc1ZhbGlkSWR9KSxcblx0XHR9O1xuXHR9XG5cblx0c3RhdGljIG1pZ3JhdGVEYXRhKHNvdXJjZSkge1xuXHRcdGlmICghc291cmNlLmlkKSB7XG5cdFx0XHRzb3VyY2UuaWQgPSBmb3VuZHJ5LnV0aWxzLnJhbmRvbUlEKDE2KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVxdWlyZWRJbnQoY29uZmlnKSB7XG5cdHJldHVybiBuZXcgZmllbGRzLk51bWJlckZpZWxkKHtcblx0XHRpbnRlZ2VyOiB0cnVlLFxuXHRcdG51bGxhYmxlOiBmYWxzZSxcblx0XHRwb3NpdGl2ZTogdHJ1ZSxcblx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHQuLi5jb25maWdcblx0fSk7XG59XG4iLCJpbXBvcnQgeyBLYXJtYURhdGEgfSBmcm9tIFwiLi9LYXJtYURhdGEuanNcIjtcclxuXHJcbmNvbnN0IHsgQXBwbGljYXRpb25WMiwgSGFuZGxlYmFyc0FwcGxpY2F0aW9uTWl4aW4gfSA9IGZvdW5kcnkuYXBwbGljYXRpb25zLmFwaTtcclxuZXhwb3J0IGNsYXNzIEthcm1hQXBwIGV4dGVuZHMgSGFuZGxlYmFyc0FwcGxpY2F0aW9uTWl4aW4oQXBwbGljYXRpb25WMikge1xyXG5cdHN0YXRpYyBERUZBVUxUX09QVElPTlMgPSB7XHJcblx0XHRpZDogXCJrYXJtYS1jb25maWdcIixcclxuXHRcdGFjdGlvbnM6IHtcclxuXHRcdFx0YWRkS2FybWE6IEthcm1hQXBwLmFkZEthcm1hLFxyXG5cdFx0XHRkZWxldGVLYXJtYTogS2FybWFBcHAuZGVsZXRlS2FybWEsXHJcblx0XHRcdG1hcmtVc2VyczogS2FybWFBcHAubWFya1VzZXJzLFxyXG5cdFx0XHRzZWxlY3REaWNlOiBLYXJtYUFwcC5zZWxlY3REaWNlXHJcblx0XHR9LFxyXG5cdFx0Zm9ybToge1xyXG5cdFx0XHRoYW5kbGVyOiBLYXJtYUFwcC4jb25TdWJtaXQsXHJcblx0XHRcdGNsb3NlT25TdWJtaXQ6IGZhbHNlLFxyXG5cdFx0XHRzdWJtaXRPbkNoYW5nZTogdHJ1ZSxcclxuXHRcdFx0c3VibWl0T25DbG9zZTogdHJ1ZSxcclxuXHRcdH0sXHJcblx0XHRwb3NpdGlvbjoge1xyXG5cdFx0XHR3aWR0aDogNjUwXHJcblx0XHR9LFxyXG5cdFx0dGFnOiBcImZvcm1cIixcclxuXHRcdHdpbmRvdzoge1xyXG5cdFx0XHRjb250ZW50Q2xhc3NlczogW1wia2FybWEtY29uZmlnXCIsIFwic3RhbmRhcmQtZm9ybVwiXSxcclxuXHRcdFx0aWNvbjogXCJmYXMgZmEtcHJheWluZy1oYW5kc1wiLFxyXG5cdFx0XHR0aXRsZTogXCJLQVJNQS5Gb3JtLnRpdGxlXCIsXHJcblx0XHR9LFxyXG5cdH07XHJcblxyXG5cdHN0YXRpYyBQQVJUUyA9IHtcclxuXHRcdHRhYnM6IHsgdGVtcGxhdGU6IFwidGVtcGxhdGVzL2dlbmVyaWMvdGFiLW5hdmlnYXRpb24uaGJzXCIgfSxcclxuXHRcdGZvcm06IHsgdGVtcGxhdGU6IFwibW9kdWxlcy9rYXJtYS90ZW1wbGF0ZXMva2FybWEtY29uZmlnLmhic1wiIH0sXHJcblx0XHRidXR0b25zOiB7IHRlbXBsYXRlOiBcInRlbXBsYXRlcy9nZW5lcmljL2Zvcm0tZm9vdGVyLmhic1wiIH1cclxuXHR9O1xyXG5cclxuXHRfa2FybWE7XHJcblxyXG5cdGdldCBrYXJtYSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9rYXJtYSA/Pz0gZm91bmRyeS51dGlscy5kZWVwQ2xvbmUoZ2FtZS5zZXR0aW5ncy5nZXQoXCJrYXJtYVwiLCBcImNvbmZpZ3NcIikpO1xyXG5cdH1cclxuXHJcblx0c2V0IGthcm1hKHZhbHVlKSB7XHJcblx0XHR0aGlzLl9rYXJtYSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0dGFiR3JvdXBzID0ge1xyXG5cdFx0bWFpbjogXCIwXCIsXHJcblx0XHQuLi50aGlzLmthcm1hLnJlZHVjZSgodHlwZXMsIF8sIGluZGV4KSA9PiB7XHJcblx0XHRcdHR5cGVzW2luZGV4XSA9IFwiYmFzaWNzXCI7XHJcblx0XHRcdHJldHVybiB0eXBlcztcclxuXHRcdH0sIHt9KVxyXG5cdH07XHJcblxyXG5cdCNwcmVwYXJlVGFicygpIHtcclxuXHRcdHJldHVybiB0aGlzLmthcm1hLnJlZHVjZSgodGFicywgdGFiRGF0YSwgaW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3QgYWN0aXZlID0gdGhpcy50YWJHcm91cHMubWFpbiA9PT0gU3RyaW5nKGluZGV4KTtcclxuXHRcdFx0Y29uc3QgeyBuYW1lLCBlbmFibGVkLCByZWN1cnJpbmcsIHR5cGUgfSA9IHRhYkRhdGE7XHJcblx0XHRcdGNvbnN0IGNzc0NsYXNzID0gW107XHJcblx0XHRcdGlmIChlbmFibGVkKSBjc3NDbGFzcy5wdXNoKFwiZW5hYmxlZFwiKTtcclxuXHRcdFx0aWYgKGFjdGl2ZSkgY3NzQ2xhc3MucHVzaChcImFjdGl2ZVwiKTtcclxuXHRcdFx0aWYgKHR5cGUgPT09IFwiZnVkZ2VcIiAmJiByZWN1cnJpbmcgIT09IGZhbHNlKSBjc3NDbGFzcy5wdXNoKFwicmVjdXJyaW5nXCIpO1xyXG5cdFx0XHR0YWJzW2luZGV4XSA9IHtcclxuXHRcdFx0XHRpZDogaW5kZXgsXHJcblx0XHRcdFx0Z3JvdXA6IFwibWFpblwiLFxyXG5cdFx0XHRcdGxhYmVsOiBuYW1lLFxyXG5cdFx0XHRcdGFjdGl2ZSxcclxuXHRcdFx0XHRjc3NDbGFzczogY3NzQ2xhc3Muam9pbihcIiBcIiksXHJcblx0XHRcdFx0ZGF0YTogdGFiRGF0YVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRyZXR1cm4gdGFicztcclxuXHRcdH0sIHt9KTtcclxuXHR9XHJcblxyXG5cdF9wcmVwYXJlQ29udGV4dCgpIHtcclxuXHRcdHRoaXMua2FybWEuZm9yRWFjaCgoaykgPT4ge1xyXG5cdFx0XHR0aGlzLmdldFVzZXJzKGspO1xyXG5cdFx0XHRrLmV4YW1wbGUgPSB0aGlzLmdldEV4YW1wbGUoayk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGRpY2VMaXN0OiBPYmplY3QuZnJvbUVudHJpZXMoXHJcblx0XHRcdFx0T2JqZWN0LmVudHJpZXMoQ09ORklHLkRpY2UuZnVsZmlsbG1lbnQuZGljZSkubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IG51bWJlciA9IGtleS5yZXBsYWNlKC9eZC8sIFwiXCIpOyAvLyBSZW1vdmUgdGhlICdkJ1xyXG5cdFx0XHRcdFx0cmV0dXJuIFt2YWx1ZS5sYWJlbCwgTnVtYmVyKG51bWJlcildO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHRhYnM6IHRoaXMuI3ByZXBhcmVUYWJzKCksXHJcblx0XHRcdHZlcnRpY2FsVGFiczogdHJ1ZSxcclxuXHRcdFx0ZmllbGRzOiBLYXJtYURhdGEuc2NoZW1hLmZpZWxkcyxcclxuXHRcdFx0a2FybWE6IHRoaXMua2FybWEsXHJcblx0XHRcdGJ1dHRvbnM6IFtcclxuXHRcdFx0XHR7IHR5cGU6IFwic3VibWl0XCIsIGljb246IFwiZmEtc29saWQgZmEtc2F2ZVwiLCBsYWJlbDogXCJTRVRUSU5HUy5TYXZlXCIgfSxcclxuXHRcdFx0XHR7IHR5cGU6IFwiYnV0dG9uXCIsIGFjdGlvbjogXCJkZWxldGVLYXJtYVwiLCBpY29uOiBcImZhLXNvbGlkIGZhLXRyYXNoXCIsIGxhYmVsOiBcIktBUk1BLkZvcm0uRGVsZXRlS2FybWFcIiB9LFxyXG5cdFx0XHRdXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hcmtVc2VycyhldmVudCwgdGFyZ2V0KSB7XHJcblx0XHRjb25zdCBjaGVja2VkID0gIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJjaGVja2VkXCIpO1xyXG5cdFx0dGFyZ2V0LmNsYXNzTGlzdC50b2dnbGUoXCJjaGVja2VkXCIsIGNoZWNrZWQpO1xyXG5cdFx0Y29uc3QgdXNlcnMgPSB0YXJnZXQuZGF0YXNldC51c2VycztcclxuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiB0YXJnZXQuY2xvc2VzdChcIi5mb3JtLWdyb3VwXCIpLnF1ZXJ5U2VsZWN0b3JBbGwoYC51c2VyLXBpY2tlciAua2FybWEtY2hlY2tib3guJHt1c2Vyc306aGFzKGlucHV0KWApKSB7XHJcblx0XHRcdGVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0XCIpLmNoZWNrZWQgPSBjaGVja2VkO1xyXG5cdFx0XHRlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJsYWJlbFwiKT8uY2xhc3NMaXN0LnRvZ2dsZShcImNoZWNrZWRcIiwgY2hlY2tlZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2VsZWN0RGljZShldmVudCwgdGFyZ2V0KSB7XHJcblx0XHRjb25zdCBjaGVja2VkID0gIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJjaGVja2VkXCIpO1xyXG5cdFx0aWYgKCFjaGVja2VkKSByZXR1cm47XHJcblx0XHRjb25zdCBkaWNlID0gdGFyZ2V0LmRhdGFzZXQuZGljZTtcclxuXHRcdHRhcmdldC5jbG9zZXN0KFwiLmZvcm0tZ3JvdXBcIikucXVlcnlTZWxlY3RvcihcInJhbmdlLXBpY2tlclwiKS52YWx1ZSA9IGRpY2U7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKlJldHVybiBhbiBhcnJheSBvZiBhbGwgdXNlcnMgKG1hcCBvZiBpZCBhbmQgbmFtZSksIGRlZmF1bHRpbmcgdG8gb25lcyBjdXJyZW50bHkgYWN0aXZlXHJcblx0ICovXHJcblx0Z2V0VXNlcnMoa2FybWEsIGFjdGl2ZU9ubHkgPSBmYWxzZSkge1xyXG5cdFx0a2FybWEuZ21zID0gW107XHJcblx0XHRrYXJtYS5wbGF5ZXJzID0gW107XHJcblx0XHRnYW1lLnVzZXJzXHJcblx0XHRcdC5maWx0ZXIoKHsgYWN0aXZlIH0pID0+ICghYWN0aXZlT25seSB8fCBhY3RpdmUpKVxyXG5cdFx0XHQuZm9yRWFjaCgoeyBpZCwgbmFtZSwgaXNHTSB9KSA9PiB7XHJcblx0XHRcdFx0aWYgKGlzR00pIHtcclxuXHRcdFx0XHRcdGthcm1hLmdtcy5wdXNoKHtcclxuXHRcdFx0XHRcdFx0aWQsXHJcblx0XHRcdFx0XHRcdG5hbWU6IG5hbWUsXHJcblx0XHRcdFx0XHRcdGFjdGl2ZTogQm9vbGVhbihrYXJtYS51c2Vyc1tpZF0pIHx8IGthcm1hLmFsbEdtc1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGthcm1hLnBsYXllcnMucHVzaCh7XHJcblx0XHRcdFx0XHRcdGlkLFxyXG5cdFx0XHRcdFx0XHRuYW1lOiBuYW1lLFxyXG5cdFx0XHRcdFx0XHRhY3RpdmU6IEJvb2xlYW4oa2FybWEudXNlcnNbaWRdKSB8fCBrYXJtYS5hbGxQbGF5ZXJzXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Z2V0RXhhbXBsZShrYXJtYSkge1xyXG5cdFx0bGV0IGV4YW1wbGUgPSBcIlwiO1xyXG5cdFx0Y29uc3QgbGVhc3RNb3N0ID0gZ2FtZS5pMThuLmxvY2FsaXplKGBLQVJNQS5Gb3JtLiR7W1wi4omkXCIsIFwiPFwiXS5pbmNsdWRlcyhrYXJtYS5pbmVxdWFsaXR5KSA/IFwibGVhc3RcIiA6IFwibW9zdFwifWApO1xyXG5cdFx0Y29uc3QgdGVybSA9IGdhbWUuaTE4bi5sb2NhbGl6ZShgS0FSTUEuRm9ybS5JbmVxdWFsaXR5Lm9wdGlvbnMuJHtrYXJtYS5pbmVxdWFsaXR5fWApO1xyXG5cdFx0Y29uc3QgdGhyZXNob2xkID0gZ2FtZS5pMThuLmZvcm1hdChcIktBUk1BLkZvcm0uVGhyZXNob2xkLmhpbnRcIiwgeyB0ZXJtLCBudW1iZXI6IGthcm1hLnRocmVzaG9sZCB9KTtcclxuXHRcdGNvbnN0IHRhcmdldCA9IGdhbWUuaTE4bi5mb3JtYXQoXCJLQVJNQS5Gb3JtLkZsb29yLmhpbnRcIiwgeyBsZWFzdE1vc3QsIG51bWJlcjoga2FybWEuZmxvb3IgfSk7XHJcblx0XHRpZiAoa2FybWEudHlwZSA9PT0gXCJzaW1wbGVcIikge1xyXG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gZ2FtZS5pMThuLmZvcm1hdChcIktBUk1BLkZvcm0uSGlzdG9yeS5oaW50LnNpbXBsZVwiLCB7IG51bWJlcjoga2FybWEuaGlzdG9yeSB9KTtcclxuXHRcdFx0ZXhhbXBsZSA9IGAke2hpc3Rvcnl9ICR7dGhyZXNob2xkfSAke3RhcmdldH1gO1xyXG5cdFx0fSBlbHNlIGlmIChrYXJtYS50eXBlID09PSBcImF2ZXJhZ2VcIikge1xyXG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gZ2FtZS5pMThuLmZvcm1hdChcIktBUk1BLkZvcm0uSGlzdG9yeS5oaW50LmF2ZXJhZ2VcIiwgeyBudW1iZXI6IGthcm1hLmhpc3RvcnkgfSk7XHJcblx0XHRcdGxldCBhZGp1c3RtZW50ID0gZ2FtZS5pMThuLmZvcm1hdChcIktBUk1BLkZvcm0uTnVkZ2UuaGludFwiLCB7IG51bWJlcjoga2FybWEubnVkZ2UsIHRocmVzaG9sZDoga2FybWEudGhyZXNob2xkIH0pO1xyXG5cdFx0XHRpZiAoa2FybWEuY3VtdWxhdGl2ZSkge1xyXG5cdFx0XHRcdGFkanVzdG1lbnQgPSBgJHthZGp1c3RtZW50LnNsaWNlKDAsIC0xKX0sICR7a2FybWEubnVkZ2UgKiAyfSwgJHtrYXJtYS5udWRnZSAqIDN9Li4uYDtcclxuXHRcdFx0fVxyXG5cdFx0XHRleGFtcGxlID0gYCR7aGlzdG9yeX0gJHt0aHJlc2hvbGR9ICR7YWRqdXN0bWVudH1gO1xyXG5cdFx0fSBlbHNlIGlmIChrYXJtYS50eXBlID09PSBcImZ1ZGdlXCIpIHtcclxuXHRcdFx0ZXhhbXBsZSA9IHRhcmdldC5jYXBpdGFsaXplKCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZXhhbXBsZTtcclxuXHR9XHJcblxyXG5cdF9vblJlbmRlcihjb250ZXh0LCBvcHRpb25zKSB7XHJcblx0XHRjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcblx0XHRhLmRhdGFzZXQuYWN0aW9uID0gXCJhZGRLYXJtYVwiO1xyXG5cdFx0YS5kYXRhc2V0LnRhYiA9IFwiXCI7XHJcblx0XHRjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcblx0XHRjb25zdCBpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlcIik7XHJcblx0XHRpLmNsYXNzTmFtZSA9IFwiZmFyIGZhLXBsdXNcIjtcclxuXHRcdHNwYW4uYXBwZW5kKGkpO1xyXG5cdFx0c3Bhbi5pbm5lclRleHQgPSBnYW1lLmkxOG4ubG9jYWxpemUoXCJLQVJNQS5Gb3JtLkFkZE5ld0thcm1hXCIpO1xyXG5cdFx0YS5hcHBlbmQoc3Bhbik7XHJcblxyXG5cdFx0dGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc2hlZXQtdGFic1wiKS5hcHBlbmQoYSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYXN5bmMgYWRkS2FybWEoZXZlbnQpIHtcclxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHR0aGlzLnRhYkdyb3Vwcy5tYWluID0gU3RyaW5nKHRoaXMua2FybWEubGVuZ3RoKTtcclxuXHRcdGNvbnN0IG5hbWUgPSBnYW1lLmkxOG4ubG9jYWxpemUoXCJLQVJNQS5Gb3JtLk5ld0thcm1hXCIpO1xyXG5cdFx0dGhpcy5rYXJtYS5wdXNoKHtcclxuXHRcdFx0Li4uZ2FtZS5zZXR0aW5ncy5zZXR0aW5ncy5nZXQoXCJrYXJtYS5jb25maWdzXCIpLmRlZmF1bHRbMF0sXHJcblx0XHRcdG5hbWUsXHJcblx0XHRcdGlkOiBmb3VuZHJ5LnV0aWxzLnJhbmRvbUlEKDE2KVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnJlbmRlcigpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFzeW5jIGRlbGV0ZUthcm1hKGV2ZW50KSB7XHJcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0dGhpcy5rYXJtYS5zcGxpY2UoTnVtYmVyKHRoaXMudGFiR3JvdXBzLm1haW4pLCAxKTtcclxuXHRcdHRoaXMudGFiR3JvdXBzLm1haW4gPSBTdHJpbmcoTnVtYmVyKHRoaXMudGFiR3JvdXBzLm1haW4pIC0gMSk7XHJcblx0XHR0aGlzLnJlbmRlcigpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFzeW5jICNvblN1Ym1pdChldmVudCwgZm9ybSwgZm9ybURhdGEpIHtcclxuXHRcdGNvbnN0IGV4cGFuZEZvcm0gPSBmb3VuZHJ5LnV0aWxzLmV4cGFuZE9iamVjdChmb3JtRGF0YS5vYmplY3QpO1xyXG5cdFx0Y29uc3QgY29uZmlnID0gW107XHJcblx0XHRPYmplY3QuZW50cmllcyhleHBhbmRGb3JtKS5mb3JFYWNoKChbaWQsIGthcm1hXSkgPT4ge1xyXG5cdFx0XHRjb25zdCBnbXMgPSBPYmplY3QuZW50cmllcyhrYXJtYT8uZ21zID8/IHt9KTtcclxuXHRcdFx0Y29uc3QgcGxheWVycyA9IE9iamVjdC5lbnRyaWVzKGthcm1hPy5wbGF5ZXJzID8/IHt9KTtcclxuXHRcdFx0a2FybWEuYWxsR21zID0gZ21zLmV2ZXJ5KChbaWQsIGJvb2xdKSA9PiBib29sKTtcclxuXHRcdFx0a2FybWEuYWxsUGxheWVycyA9IHBsYXllcnMuZXZlcnkoKFtpZCwgYm9vbF0pID0+IGJvb2wpO1xyXG5cdFx0XHRjb25zdCB1c2VycyA9IE9iamVjdC5mcm9tRW50cmllcyhbLi4uZ21zLCAuLi5wbGF5ZXJzXSk7XHJcblxyXG5cdFx0XHRjb25zdCB7IGZsb29yLCBudWRnZSwgY3VtdWxhdGl2ZSB9ID0gZ2FtZS5zZXR0aW5ncy5zZXR0aW5ncy5nZXQoXCJrYXJtYS5jb25maWdzXCIpLmRlZmF1bHRbMF07XHJcblx0XHRcdGNvbmZpZy5wdXNoKHsgZmxvb3IsIG51ZGdlLCBjdW11bGF0aXZlLCB1c2VycywgLi4ua2FybWEgfSk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMua2FybWEgPSBjb25maWc7XHJcblxyXG5cdFx0aWYgKGV2ZW50LnR5cGUgPT09IFwic3VibWl0XCIpIHtcclxuXHRcdFx0YXdhaXQgZ2FtZS5zZXR0aW5ncy5zZXQoXCJrYXJtYVwiLCBcImNvbmZpZ3NcIiwgdGhpcy5rYXJtYSk7XHJcblx0XHRcdHRoaXMuY2xvc2UoKTtcclxuXHRcdH0gZWxzZSB0aGlzLnJlbmRlcigpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBsaWJXcmFwcGVyIH0gZnJvbSBcIi4uL2xpYnMvbGliV3JhcHBlci5qc1wiO1xuaW1wb3J0IHsgS2FybWFEYXRhIH0gZnJvbSBcIi4vS2FybWFEYXRhLmpzXCI7XG5pbXBvcnQgeyBLYXJtYUFwcCB9IGZyb20gXCIuL0thcm1hRGlhbG9nLmpzXCI7XG5cbkhvb2tzLm9uY2UoXCJpbml0XCIsICgpID0+IHtcblx0bGliV3JhcHBlci5yZWdpc3RlcihcImthcm1hXCIsIFwiQ09ORklHLkRpY2UudGVybVR5cGVzLkRpY2VUZXJtLnByb3RvdHlwZS5yb2xsXCIsIHdyYXBEaWNlVGVybVJvbGwsIFwiTUlYRURcIik7XG5cdGdhbWUuc2V0dGluZ3MucmVnaXN0ZXJNZW51KFwia2FybWFcIiwgXCJLYXJtYURpYWxvZ1wiLCB7XG5cdFx0bmFtZTogXCJLQVJNQS5LYXJtYVwiLFxuXHRcdGxhYmVsOiBcIktBUk1BLlNldHRpbmdzLkthcm1hRGlhbG9nLmxhYmVsXCIsXG5cdFx0aGludDogXCJLQVJNQS5TZXR0aW5ncy5LYXJtYURpYWxvZy5oaW50XCIsXG5cdFx0aWNvbjogXCJmYXMgZmEtcHJheWluZy1oYW5kc1wiLFxuXHRcdHR5cGU6IEthcm1hQXBwLFxuXHRcdHJlc3RyaWN0ZWQ6IHRydWUsXG5cdH0pO1xuXG5cdGNvbnN0IHsgQXJyYXlGaWVsZCwgRW1iZWRkZWREYXRhRmllbGQgfSA9IGZvdW5kcnkuZGF0YS5maWVsZHM7XG5cdGdhbWUuc2V0dGluZ3MucmVnaXN0ZXIoXCJrYXJtYVwiLCBcImNvbmZpZ3NcIiwge1xuXHRcdHNjb3BlOiBcIndvcmxkXCIsXG5cdFx0Y29uZmlnOiBmYWxzZSxcblx0XHR0eXBlOiBuZXcgQXJyYXlGaWVsZChcblx0XHRcdG5ldyBFbWJlZGRlZERhdGFGaWVsZChLYXJtYURhdGEpLFxuXHRcdFx0e1xuXHRcdFx0XHRlbXB0eTogZmFsc2UsXG5cdFx0XHRcdGluaXRpYWw6IFt7XG5cdFx0XHRcdFx0aWQ6IFwia2FybWFcIi5wYWRFbmQoMTYsIFwiMFwiKSxcblx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRuYW1lOiBcImQyMFwiLFxuXHRcdFx0XHRcdHR5cGU6IFwic2ltcGxlXCIsXG5cdFx0XHRcdFx0ZGljZTogMjAsXG5cdFx0XHRcdFx0aW5lcXVhbGl0eTogXCLiiaRcIixcblx0XHRcdFx0XHRoaXN0b3J5OiAyLFxuXHRcdFx0XHRcdHRocmVzaG9sZDogNyxcblx0XHRcdFx0XHRmbG9vcjogMTMsXG5cdFx0XHRcdFx0bnVkZ2U6IDUsXG5cdFx0XHRcdFx0Y3VtdWxhdGl2ZTogZmFsc2UsXG5cdFx0XHRcdFx0dXNlcnM6IHt9LFxuXHRcdFx0XHRcdGFsbEdtczogdHJ1ZSxcblx0XHRcdFx0XHRhbGxQbGF5ZXJzOiB0cnVlLFxuXHRcdFx0XHR9XVxuXHRcdFx0fVxuXHRcdClcblx0fSk7XG5cblx0Z2FtZS5zZXR0aW5ncy5yZWdpc3RlcihcImthcm1hXCIsIFwic2hvd0NoYXRNZXNzYWdlSWNvblwiLCB7XG5cdFx0bmFtZTogXCJLQVJNQS5TZXR0aW5ncy5zaG93Q2hhdE1lc3NhZ2VJY29uLmxhYmVsXCIsXG5cdFx0aGludDogXCJLQVJNQS5TZXR0aW5ncy5zaG93Q2hhdE1lc3NhZ2VJY29uLmhpbnRcIixcblx0XHRzY29wZTogXCJ3b3JsZFwiLFxuXHRcdGNvbmZpZzogdHJ1ZSxcblx0XHR0eXBlOiBCb29sZWFuLFxuXHRcdGRlZmF1bHQ6IGZhbHNlLFxuXHRcdG9uQ2hhbmdlOiAodmFsdWUpID0+IHtcblx0XHRcdGdhbWUubWVzc2FnZXMuY29udGVudHNcblx0XHRcdFx0LnNsaWNlKC0xMDApXG5cdFx0XHRcdC5maWx0ZXIoKG0pID0+IG0ucm9sbHM/Lmxlbmd0aCAmJiBtLnJvbGxzLmZpbmQoKHIpID0+IHIudGVybXMuZmluZCgodCkgPT4gdC5vcHRpb25zLmthcm1hKSkpXG5cdFx0XHRcdC5mb3JFYWNoKChtKSA9PiB1aS5jaGF0LnVwZGF0ZU1lc3NhZ2UobSkpO1xuXHRcdH0sXG5cdH0pO1xuXG5cdGdhbWUuc2V0dGluZ3MucmVnaXN0ZXIoXCJrYXJtYVwiLCBcImNvbnRyb2xzQnV0dG9uXCIsIHtcblx0XHRuYW1lOiBcIktBUk1BLlNldHRpbmdzLmNvbnRyb2xzQnV0dG9uLmxhYmVsXCIsXG5cdFx0aGludDogXCJLQVJNQS5TZXR0aW5ncy5jb250cm9sc0J1dHRvbi5oaW50XCIsXG5cdFx0c2NvcGU6IFwid29ybGRcIixcblx0XHRjb25maWc6IHRydWUsXG5cdFx0dHlwZTogQm9vbGVhbixcblx0XHRkZWZhdWx0OiB0cnVlLFxuXHRcdG9uQ2hhbmdlOiBhc3luYyAoKSA9PiBhd2FpdCB1aS5jb250cm9scy5yZW5kZXIoeyByZXNldDogdHJ1ZSB9KSxcblx0fSk7XG5cblx0Z2FtZS5rZXliaW5kaW5ncy5yZWdpc3RlcihcImthcm1hXCIsIFwib3Blbkthcm1EaWFsb2dcIiwge1xuXHRcdG5hbWU6IFwiS0FSTUEuU2V0dGluZ3MuS2FybWFEaWFsb2cubGFiZWxcIixcblx0XHRvbkRvd246ICgpID0+IHtcblx0XHRcdG5ldyBLYXJtYUFwcCgpLnJlbmRlcih0cnVlKTtcblx0XHR9LFxuXHRcdHJlc3RyaWN0ZWQ6IHRydWUsXG5cdH0pO1xuXG5cdENPTkZJRy5xdWVyaWVzW1wia2FybWEtZGlzYWJsZS1mdWRnZVwiXSA9IGFzeW5jICh7IGlkIH0pID0+IHtcblx0XHRjb25zdCBzZXR0aW5ncyA9IGZvdW5kcnkudXRpbHMuZGVlcENsb25lKGdhbWUuc2V0dGluZ3MuZ2V0KFwia2FybWFcIiwgXCJjb25maWdzXCIpKTtcblx0XHRzZXR0aW5ncy5maW5kKChrKSA9PiBrLmlkID09PSBpZCkuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdGF3YWl0IGdhbWUuc2V0dGluZ3Muc2V0KFwia2FybWFcIiwgXCJjb25maWdzXCIsIHNldHRpbmdzKTtcblx0fTtcbn0pO1xuXG5Ib29rcy5vbihcImdldFNjZW5lQ29udHJvbEJ1dHRvbnNcIiwgKGNvbnRyb2xzKSA9PiB7XG5cdGlmICghZ2FtZS51c2VyLmlzR00gfHwgIWdhbWUuc2V0dGluZ3MuZ2V0KFwia2FybWFcIiwgXCJjb250cm9sc0J1dHRvblwiKSkgcmV0dXJuO1xuXHRjb250cm9scy50b2tlbnMudG9vbHMua2FybWEgPSB7XG5cdFx0bmFtZTogXCJrYXJtYVwiLFxuXHRcdHRpdGxlOiBcIktBUk1BLkthcm1hXCIsXG5cdFx0aWNvbjogXCJmYXMgZmEtcHJheWluZy1oYW5kc1wiLFxuXHRcdG9uQ2hhbmdlOiAoKSA9PiBuZXcgS2FybWFBcHAoKS5yZW5kZXIodHJ1ZSksXG5cdFx0YnV0dG9uOiB0cnVlLFxuXHR9O1xufSk7XG5cbkhvb2tzLm9uKFwicmVuZGVyQ2hhdE1lc3NhZ2VcIiwgKG1lc3NhZ2UsIGh0bWwsIGRhdGEpID0+IHtcblx0aWYgKCFnYW1lLnVzZXIuaXNHTSB8fCAhbWVzc2FnZS5yb2xscz8ubGVuZ3RoIHx8ICFnYW1lLnNldHRpbmdzLmdldChcImthcm1hXCIsIFwic2hvd0NoYXRNZXNzYWdlSWNvblwiKSkgcmV0dXJuO1xuXHRjb25zdCB0ZXJtcyA9IG1lc3NhZ2Uucm9sbHMuZmlsdGVyKChyKSA9PiByLnRlcm1zLnNvbWUoKHQpID0+IHQub3B0aW9ucz8ua2FybWEpKTtcblx0aWYgKHRlcm1zPy5sZW5ndGgpIHtcblx0XHRjb25zdCBrYXJtYSA9IHRlcm1zLmZsYXRNYXAoKGVudHJ5KSA9PiBlbnRyeS50ZXJtcylcblx0XHRcdC5tYXAoKHRlcm0pID0+IHRlcm0ub3B0aW9ucy5rYXJtYSlcblx0XHRcdC5maWx0ZXJKb2luKFwiPGJyPlwiKTtcblx0XHRjb25zdCBidXR0b24gPSAkKFxuXHRcdFx0YDxzcGFuXG5cdFx0XHRkYXRhLXRvb2x0aXA9XCIke2thcm1hfVwiXG5cdFx0XHRkYXRhLXRvb2x0aXAtZGlyZWN0aW9uPVwiTEVGVFwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhcyBmYS1wcmF5aW5nLWhhbmRzXCI+PC9pPlxuXHRcdFx0PC9zcGFuPmBcblx0XHQpO1xuXHRcdGh0bWwuZmluZChcIi5tZXNzYWdlLW1ldGFkYXRhXCIpLmFwcGVuZChidXR0b24pO1xuXHR9XG59KTtcblxuZnVuY3Rpb24gY2xhbXBIaXN0b3J5KGhpc3RvcnksIGthcm1hKSB7XG5cdGlmIChoaXN0b3J5Lmxlbmd0aCA+IGthcm1hLmhpc3RvcnkpIHtcblx0XHRoaXN0b3J5LnNwbGljZSgwLCBoaXN0b3J5Lmxlbmd0aCAtIGthcm1hLmhpc3RvcnkpO1xuXHR9XG59XG5cbi8qKlxuICogV3JhcHBlciBmb3IgcmF3IGRpY2VcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHdyYXBwZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJucyB7e3Jlc3VsdDogdW5kZWZpbmVkLCBhY3RpdmU6IGJvb2xlYW59fCp9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdyYXBEaWNlVGVybVJvbGwod3JhcHBlZCwgb3B0aW9ucykge1xuXHRjb25zdCBrYXJtYSA9IGdhbWUuc2V0dGluZ3MuZ2V0KFwia2FybWFcIiwgXCJjb25maWdzXCIpO1xuXHRjb25zdCByb2xsID0gYXdhaXQgd3JhcHBlZChvcHRpb25zKTtcblx0Y29uc3QgdmFsaWRLYXJtYSA9IGthcm1hLmZpbHRlcigoaykgPT4gay5lbmFibGVkICYmIHRoaXMuZmFjZXMgPT09IGsuZGljZSk7XG5cdGZvciAoY29uc3QgayBvZiB2YWxpZEthcm1hKSB7XG5cdFx0Y29uc3QgdmFsaWQgPSAoZ2FtZS51c2VyLmlzR00gJiYgay5hbGxHbXMpIHx8ICghZ2FtZS51c2VyLmlzR00gJiYgay5hbGxQbGF5ZXJzKSB8fCBrLnVzZXJzW2dhbWUudXNlci5pZF07XG5cdFx0aWYgKCF2YWxpZCkgY29udGludWU7XG5cdFx0Y29uc3QgdXNlckthcm1hID0gZ2FtZS51c2VyLmdldEZsYWcoXCJrYXJtYVwiLCBcInN0YXRzXCIpID8/IHsgW2suaWRdOiB7IGhpc3Rvcnk6IFtdLCBjdW11bGF0aXZlOiAwIH0gfTtcblx0XHRpZiAoIXVzZXJLYXJtYVtrLmlkXSkgdXNlckthcm1hW2suaWRdID0geyBoaXN0b3J5OiBbXSwgY3VtdWxhdGl2ZTogMCB9O1xuXHRcdGNvbnN0IGhpc3RvcnkgPSB1c2VyS2FybWFbay5pZF0uaGlzdG9yeTtcblx0XHRoaXN0b3J5LnB1c2gocm9sbC5yZXN1bHQpO1xuXHRcdGNsYW1wSGlzdG9yeShoaXN0b3J5LCBrKTtcblxuXHRcdGlmICghb3B0aW9ucy5tYXhpbWl6ZSAmJiAhb3B0aW9ucy5taW5pbWl6ZSkge1xuXHRcdFx0Y29uc3Qgb2xkUm9sbCA9IHJvbGwucmVzdWx0O1xuXHRcdFx0Y29uc3QgaW5lcUNoZWNrID0gKHYxLCB2MikgPT4ge1xuXHRcdFx0XHRzd2l0Y2ggKGsuaW5lcXVhbGl0eSkge1xuXHRcdFx0XHRcdGNhc2UgXCLiiaRcIjpcblx0XHRcdFx0XHRcdHJldHVybiB2MSA8PSB2Mjtcblx0XHRcdFx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHYxIDwgdjI7XG5cdFx0XHRcdFx0Y2FzZSBcIuKJpVwiOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHYxID49IHYyO1xuXHRcdFx0XHRcdGNhc2UgXCI+XCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gdjEgPiB2Mjtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZsb29yQ2hlY2sgPSBbXCLiiaRcIiwgXCI8XCJdLmluY2x1ZGVzKGsuaW5lcXVhbGl0eSlcblx0XHRcdFx0PyAocmVzdWx0KSA9PiByZXN1bHQgPCBrLmZsb29yXG5cdFx0XHRcdDogKHJlc3VsdCkgPT4gcmVzdWx0ID4gay5mbG9vcjtcblx0XHRcdGlmIChrLnR5cGUgPT09IFwic2ltcGxlXCIpIHtcblx0XHRcdFx0Y29uc3QgdGVtcFJlc3VsdCA9IGhpc3RvcnkuZmluZEluZGV4KChlbGVtZW50KSA9PiAhaW5lcUNoZWNrKGVsZW1lbnQsIGsudGhyZXNob2xkKSk7XG5cblx0XHRcdFx0aWYgKGhpc3RvcnkubGVuZ3RoID09PSBrLmhpc3RvcnkgJiYgdGVtcFJlc3VsdCA9PT0gLTEpIHtcblx0XHRcdFx0XHR3aGlsZSAoZmxvb3JDaGVjayhyb2xsLnJlc3VsdCkpIHtcblx0XHRcdFx0XHRcdHJvbGwucmVzdWx0ID0gTWF0aC5jZWlsKENPTkZJRy5EaWNlLnJhbmRvbVVuaWZvcm0oKSAqIHRoaXMuZmFjZXMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGhpc3RvcnkucHVzaChyb2xsLnJlc3VsdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2xhbXBIaXN0b3J5KGhpc3RvcnksIGspO1xuXHRcdFx0fSBlbHNlIGlmIChrLnR5cGUgPT09IFwiYXZlcmFnZVwiKSB7XG5cdFx0XHRcdGNvbnN0IHRlbXBSZXN1bHQgPSBoaXN0b3J5LnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gaGlzdG9yeS5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKGhpc3RvcnkubGVuZ3RoID09PSBrLmhpc3RvcnkgJiYgaW5lcUNoZWNrKHRlbXBSZXN1bHQsIGsudGhyZXNob2xkKSkge1xuXHRcdFx0XHRcdGlmIChrLmN1bXVsYXRpdmUpIHVzZXJLYXJtYVtrLmlkXS5jdW11bGF0aXZlICs9IDE7XG5cdFx0XHRcdFx0ZWxzZSB1c2VyS2FybWFbay5pZF0uY3VtdWxhdGl2ZSA9IDE7XG5cblx0XHRcdFx0XHRjb25zdCBudWRnZSA9IHVzZXJLYXJtYVtrLmlkXS5jdW11bGF0aXZlICogay5udWRnZTtcblx0XHRcdFx0XHRpZiAoW1wi4omkXCIsIFwiPFwiXS5pbmNsdWRlcyhrLmluZXF1YWxpdHkpKSByb2xsLnJlc3VsdCArPSBudWRnZTtcblx0XHRcdFx0XHRlbHNlIHJvbGwucmVzdWx0IC09IG51ZGdlO1xuXHRcdFx0XHRcdHJvbGwucmVzdWx0ID0gTWF0aC5jbGFtcChyb2xsLnJlc3VsdCwgMSwgdGhpcy5mYWNlcyk7XG5cblx0XHRcdFx0XHRoaXN0b3J5LnB1c2gocm9sbC5yZXN1bHQpO1xuXHRcdFx0XHR9IGVsc2UgdXNlckthcm1hW2suaWRdLmN1bXVsYXRpdmUgPSAwO1xuXHRcdFx0XHRjbGFtcEhpc3RvcnkoaGlzdG9yeSwgayk7XG5cdFx0XHR9IGVsc2UgaWYgKGsudHlwZSA9PT0gXCJmdWRnZVwiKSB7XG5cdFx0XHRcdGlmIChmbG9vckNoZWNrKHJvbGwucmVzdWx0KSkge1xuXHRcdFx0XHRcdHdoaWxlIChmbG9vckNoZWNrKHJvbGwucmVzdWx0KSkge1xuXHRcdFx0XHRcdFx0cm9sbC5yZXN1bHQgPSBNYXRoLmNlaWwoQ09ORklHLkRpY2UucmFuZG9tVW5pZm9ybSgpICogdGhpcy5mYWNlcyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFrLnJlY3VycmluZykge1xuXHRcdFx0XHRcdFx0YXdhaXQgZ2FtZS51c2Vycy5hY3RpdmVHTS5xdWVyeShcImthcm1hLWRpc2FibGUtZnVkZ2VcIiwgeyBpZDogay5pZCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvbGRSb2xsICE9PSByb2xsLnJlc3VsdCkge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZ2FtZS5pMThuLmZvcm1hdChcIktBUk1BLkFkanVzdFJvbGxcIiwgeyBvbGRSb2xsLCBuZXdSb2xsOiByb2xsLnJlc3VsdCB9KTtcblx0XHRcdFx0aWYgKHRoaXMub3B0aW9ucy5rYXJtYSkgdGhpcy5vcHRpb25zLmthcm1hLnB1c2gobWVzc2FnZSk7XG5cdFx0XHRcdGVsc2UgdGhpcy5vcHRpb25zLmthcm1hID0gW21lc3NhZ2VdO1xuXHRcdFx0fVxuXHRcdFx0Z2FtZS51c2VyLnNldEZsYWcoXCJrYXJtYVwiLCBcInN0YXRzXCIsIHVzZXJLYXJtYSk7XG5cdFx0XHR0aGlzLnJlc3VsdHNbdGhpcy5yZXN1bHRzLmxlbmd0aCAtIDFdID0gcm9sbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJvbGw7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFJQTtBQUNBO0FBQ08sSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBRzNCLE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLCtEQUEr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QUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUN0QyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFO0FBQ3JDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsRUFBRTtBQUNGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUNsRCxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRCxDQUFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLENBQUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVFLENBQUMsS0FBSyxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUU7QUFDN0IsRUFBRSxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNHLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTO0FBQ3ZCLEVBQUUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMs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Q0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzVFLEtBQUssSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUN2RCxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBLEtBQUssTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4RCxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNqRSxVQUFVLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQy9CLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRDtBQUNBLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0IsS0FBSyxNQUFNLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMxQyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDbEMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDakMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckMsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEUsTUFBTTtBQUNOO0FBQ0EsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUN2QixNQUFNLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLE1BQU07QUFDTixLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUcsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNoQyxJQUFJLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM1RixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdELFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxJQUFJO0FBQ0osR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xELEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsR0FBRztBQUNILEVBQUU7QUFDRixDQUFDLE9BQU8sSUFBSSxDQUFDO0FBQ2IifQ=="}