epicenter-libs 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +345 -0
- package/LICENSE.md +37 -0
- package/README.md +134 -0
- package/dist/browser/AckExtension-e67c6a28.js +129 -0
- package/dist/browser/AckExtension-e67c6a28.js.map +1 -0
- package/dist/browser/ReloadExtension-b1e50033.js +253 -0
- package/dist/browser/ReloadExtension-b1e50033.js.map +1 -0
- package/dist/browser/cometd-eeabdcd4.js +3438 -0
- package/dist/browser/cometd-eeabdcd4.js.map +1 -0
- package/dist/browser/epicenter-2cce2971.js +6086 -0
- package/dist/browser/epicenter-2cce2971.js.map +1 -0
- package/dist/browser/epicenter.js +2 -0
- package/dist/browser/epicenter.js.map +1 -0
- package/dist/cjs/AckExtension-f5178e19.js +131 -0
- package/dist/cjs/AckExtension-f5178e19.js.map +1 -0
- package/dist/cjs/ReloadExtension-65b036ba.js +255 -0
- package/dist/cjs/ReloadExtension-65b036ba.js.map +1 -0
- package/dist/cjs/cometd-473408f4.js +3441 -0
- package/dist/cjs/cometd-473408f4.js.map +1 -0
- package/dist/cjs/epicenter-12ceb814.js +7248 -0
- package/dist/cjs/epicenter-12ceb814.js.map +1 -0
- package/dist/cjs/epicenter.js +54 -0
- package/dist/cjs/epicenter.js.map +1 -0
- package/dist/epicenter.js +9895 -0
- package/dist/epicenter.js.map +1 -0
- package/dist/epicenter.min.js +2 -0
- package/dist/epicenter.min.js.map +1 -0
- package/dist/module/AckExtension-6181d8b5.js +129 -0
- package/dist/module/AckExtension-6181d8b5.js.map +1 -0
- package/dist/module/ReloadExtension-eaa8c42c.js +253 -0
- package/dist/module/ReloadExtension-eaa8c42c.js.map +1 -0
- package/dist/module/cometd-af78008d.js +3438 -0
- package/dist/module/cometd-af78008d.js.map +1 -0
- package/dist/module/epicenter-9b8c92a9.js +7213 -0
- package/dist/module/epicenter-9b8c92a9.js.map +1 -0
- package/dist/module/epicenter.js +7 -0
- package/dist/module/epicenter.js.map +1 -0
- package/dist/types/adapters/account.d.ts +44 -0
- package/dist/types/adapters/admin.d.ts +33 -0
- package/dist/types/adapters/asset.d.ts +46 -0
- package/dist/types/adapters/authentication.d.ts +62 -0
- package/dist/types/adapters/channel.d.ts +39 -0
- package/dist/types/adapters/chat.d.ts +105 -0
- package/dist/types/adapters/cometd.d.ts +25 -0
- package/dist/types/adapters/email.d.ts +86 -0
- package/dist/types/adapters/episode.d.ts +91 -0
- package/dist/types/adapters/group.d.ts +273 -0
- package/dist/types/adapters/index.d.ts +21 -0
- package/dist/types/adapters/leaderboard.d.ts +68 -0
- package/dist/types/adapters/presence.d.ts +35 -0
- package/dist/types/adapters/project.d.ts +99 -0
- package/dist/types/adapters/recaptcha.d.ts +1 -0
- package/dist/types/adapters/run.d.ts +253 -0
- package/dist/types/adapters/task.d.ts +154 -0
- package/dist/types/adapters/time.d.ts +2 -0
- package/dist/types/adapters/user.d.ts +38 -0
- package/dist/types/adapters/vault.d.ts +94 -0
- package/dist/types/adapters/world.d.ts +230 -0
- package/dist/types/epicenter.d.ts +10 -0
- package/dist/types/utils/config.d.ts +90 -0
- package/dist/types/utils/constants.d.ts +290 -0
- package/dist/types/utils/cookies.d.ts +16 -0
- package/dist/types/utils/error-manager.d.ts +21 -0
- package/dist/types/utils/error.d.ts +4 -0
- package/dist/types/utils/fault.d.ts +17 -0
- package/dist/types/utils/helpers.d.ts +4 -0
- package/dist/types/utils/identification.d.ts +47 -0
- package/dist/types/utils/index.d.ts +11 -0
- package/dist/types/utils/result.d.ts +6 -0
- package/dist/types/utils/router.d.ts +157 -0
- package/dist/types/utils/store.d.ts +31 -0
- package/package.json +103 -0
- package/src/adapters/account.ts +104 -0
- package/src/adapters/admin.ts +53 -0
- package/src/adapters/asset.ts +195 -0
- package/src/adapters/authentication.ts +173 -0
- package/src/adapters/channel.ts +83 -0
- package/src/adapters/chat.ts +186 -0
- package/src/adapters/cometd.ts +297 -0
- package/src/adapters/email.ts +146 -0
- package/src/adapters/episode.ts +163 -0
- package/src/adapters/group.ts +511 -0
- package/src/adapters/index.ts +43 -0
- package/src/adapters/leaderboard.ts +122 -0
- package/src/adapters/presence.ts +63 -0
- package/src/adapters/project.ts +123 -0
- package/src/adapters/recaptcha.ts +11 -0
- package/src/adapters/run.ts +726 -0
- package/src/adapters/task.ts +213 -0
- package/src/adapters/time.ts +36 -0
- package/src/adapters/user.ts +75 -0
- package/src/adapters/vault.ts +232 -0
- package/src/adapters/world.ts +412 -0
- package/src/epicenter.ts +96 -0
- package/src/globals.d.ts +16 -0
- package/src/utils/config.ts +168 -0
- package/src/utils/constants.ts +324 -0
- package/src/utils/cookies.ts +71 -0
- package/src/utils/error-manager.ts +66 -0
- package/src/utils/error.ts +9 -0
- package/src/utils/fault.ts +39 -0
- package/src/utils/helpers.ts +7 -0
- package/src/utils/identification.ts +128 -0
- package/src/utils/index.ts +11 -0
- package/src/utils/result.ts +15 -0
- package/src/utils/router.ts +547 -0
- package/src/utils/store.ts +82 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epicenter-2cce2971.js","sources":["../../node_modules/regenerator-runtime/runtime.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/cross-fetch/dist/browser-ponyfill.js","../../src/utils/error.ts","../../src/utils/fault.ts","../../src/utils/result.ts","../../src/utils/cookies.ts","../../src/utils/store.ts","../../src/utils/constants.ts","../../src/utils/helpers.ts","../../src/utils/config.ts","../../src/utils/identification.ts","../../src/utils/error-manager.ts","../../src/utils/router.ts","../../src/adapters/account.ts","../../src/adapters/admin.ts","../../src/adapters/project.ts","../../src/adapters/cometd.ts","../../src/adapters/authentication.ts","../../src/adapters/asset.ts","../../src/adapters/email.ts","../../src/adapters/episode.ts","../../src/adapters/group.ts","../../src/adapters/leaderboard.ts","../../src/adapters/presence.ts","../../src/adapters/recaptcha.ts","../../src/adapters/run.ts","../../src/adapters/user.ts","../../src/adapters/vault.ts","../../src/adapters/world.ts","../../src/adapters/time.ts","../../src/adapters/task.ts","../../src/adapters/chat.ts","../../src/adapters/channel.ts","../../src/epicenter.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = self.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.onabort = function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!self.fetch) {\n self.fetch = fetch;\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n}({}));\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n","\n/* Generic throwable error */\nexport default class EpicenterError extends Error {\n code?: string\n constructor(message?: string, code?: string) {\n super(message);\n this.code = code;\n }\n}","import EpicenterError from './error';\n\ninterface ErrorBody {\n status?: number,\n message: string,\n information?: {\n code: string,\n [key: string]: unknown,\n },\n cause?: unknown,\n}\n\n\n/* For failed network calls */\nexport default class Fault extends EpicenterError {\n status?: number;\n information?: Record<string, unknown>;\n cause?: unknown;\n\n constructor(body: ErrorBody, response?: Response) {\n super(\n body.message,\n body.information?.code\n );\n\n const { information, message, cause, status } = body;\n this.status = status ?? response?.status;\n this.message = message;\n\n if (information) {\n const { code, ...rest } = information;\n this.code = code;\n this.information = rest;\n }\n if (cause) {\n this.cause = cause;\n }\n }\n}","\n\n/* For network call responses */\nexport default class Result {\n status;\n headers;\n body;\n\n constructor(body: any, response: Response) {\n const { status, headers } = response;\n this.status = status;\n this.headers = headers;\n this.body = body;\n }\n}","\n\ntype End = number | string | Date | undefined;\n\n// Modified version of https://github.com/madmurphy/cookies.js\nconst getExpiration = (vEnd: End) => {\n if (!vEnd) return '';\n switch (vEnd.constructor) {\n case Number: return vEnd === Infinity ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT' : `; max-age=${vEnd}`;\n /*\n Note: Despite officially defined in RFC 6265, the use of `max-age` is not compatible with any\n version of Internet Explorer, Edge and some mobile browsers. Therefore passing a number to\n the end parameter might not work as expected. A possible solution might be to convert the the\n relative time to an absolute time. For instance, replacing the previous line with:\n */\n /*\n case Number: return vEnd === Infinity ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT' : `; expires=${(new Date(vEnd * 1e3 + Date.now())).toUTCString()}`;\n */\n case String: return `; expires=${vEnd}`;\n case Date: return `; expires=${new Date(vEnd).toUTCString()}`;\n default: return '';\n }\n};\n\ninterface EditCookieOptions {\n path?: string,\n domain?: string,\n end?: End,\n secure?: boolean,\n samesite?: boolean,\n}\n\nexport default {\n getItem(key: string): null | string {\n if (!key) return null;\n return decodeURIComponent(document.cookie.replace(new RegExp(`(?:(?:^|.*;)\\\\s*${encodeURIComponent(key).replace(/[-.+*]/g, '\\\\$&')}\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$`), '$1')) || null;\n },\n setItem(key: string, value: string | number | boolean, options: EditCookieOptions = {}): boolean {\n if (!key || (/^(?:expires|max-age|path|domain|secure)$/i).test(key)) return false;\n const { path, domain, end, secure, samesite } = options;\n const expireStr = getExpiration(end);\n const domainStr = domain ? `; domain=${domain}` : '';\n const pathStr = path ? `; path=${path}` : '';\n const secureStr = secure ? '; secure' : '';\n const samesiteStr = samesite ? `; samesite=${samesite}` : '';\n\n document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}${expireStr}${domainStr}${pathStr}${secureStr}${samesiteStr}`;\n return true;\n },\n removeItem(key: string, options: EditCookieOptions = {}): boolean {\n if (!this.hasItem(key)) return false;\n const { path, domain } = options;\n const domainStr = domain ? `; domain=${domain}` : '';\n const pathStr = path ? `; path=${path}` : '';\n document.cookie = `${encodeURIComponent(key)}=; expires=Thu, 01 Jan 1970 00:00:00 GMT${domainStr}${pathStr}`;\n return true;\n },\n hasItem(key: string): boolean {\n if (!key || (/^(?:expires|max-age|path|domain|secure)$/i).test(key)) return false;\n\n return (new RegExp(`(?:^|;\\\\s*)${encodeURIComponent(key).replace(/[-.+*]/g, '\\\\$&')}\\\\s*\\\\=`)).test(document.cookie);\n },\n clear(): string[] {\n const aKeys = document.cookie.replace(/((?:^|\\s*;)[^=]+)(?=;|$)|^\\s*|\\s*(?:=[^;]*)?(?:\\1|$)/g, '').split(/\\s*(?:=[^;]*)?;\\s*/);\n for (let nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) {\n aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);\n this.removeItem(aKeys[nIdx]);\n }\n return aKeys;\n },\n};\n","import cookies from './cookies';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype NodeMap = Record<any, any>\ntype JavaScriptObject = Record<string, any>;\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\ntype EpicenterStore = NodeMap | Storage;\n\n\nclass Store {\n _store: EpicenterStore;\n constructor(store: EpicenterStore) {\n this._store = store;\n }\n clear() {\n this._store.clear();\n }\n get store() {\n return this._store;\n }\n set store(store) {\n this._store = store;\n }\n}\n\nconst nodeMap = new Map();\nexport class NodeStore extends Store {\n constructor() {\n super(nodeMap);\n }\n getItem(key: string): NodeMap {\n return super.store.get(key);\n }\n setItem(key: string, value: JavaScriptObject): NodeMap {\n return super.store.set(key, value);\n }\n removeItem(key: string): boolean {\n return super.store.delete(key);\n }\n}\n\nexport class SessionStore extends Store {\n constructor() {\n super(window.sessionStorage);\n }\n getItem(key: string): JavaScriptObject {\n return JSON.parse(super.store.getItem(key));\n }\n setItem(key: string, value: JavaScriptObject): void {\n return super.store.setItem(key, JSON.stringify(value));\n }\n removeItem(key: string): void {\n return super.store.removeItem(key);\n }\n}\n\nexport class CookieStore {\n options = {};\n constructor(options = {}) {\n const hostname = window.location.hostname;\n // We have to explicitly not set domain in the cookie when it's localhost (for Chrome)\n // https://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain\n const defaults = hostname !== 'localhost' ?\n { path: '/', domain: `.${hostname}` } :\n { path: '/' };\n this.options = { ...defaults, ...options };\n }\n getItem(key: string): JavaScriptObject {\n const item = cookies.getItem(key);\n return item ? JSON.parse(item) : null;\n }\n setItem(key: string, value: JavaScriptObject): boolean {\n return cookies.setItem(key, JSON.stringify(value), this.options);\n }\n removeItem(key: string): boolean {\n return cookies.removeItem(key, this.options);\n }\n clear(): string[] {\n return cookies.clear();\n }\n}\n","\nexport enum BROWSER_STORAGE_TYPE {\n COOKIE = 'COOKIE',\n SESSION = 'SESSION',\n}\n\n\n/**\n * Scope boundaries are values associated with runs. They help to define the *default* user permissions used when a run is created, althought further permission configuration can be done with {@link #ROLE lock types}. Scopes also provide an index that in which a run can be queried for.\n *\n * Three parts -- boundary: level of hierarchy (ontology) that a piece of data belongs to. Specifically, a run, an asset, or a vault data\n * Boundary in which a piece of data (run, asset, vault) is ID-ed to (see scopeKey).\n *\n * pseudonymKey, goes in tandem w/ permit (lock types) --\n * Data lives and dies with scope, delete the scope, you lose the data and associated scopes\n * @enum {string}\n */\nexport enum SCOPE_BOUNDARY {\n /**\n * Runs scoped by project, users and facilitators are allowed access so long as they are a user in a group on the project.\n * @constant\n * @type {string}\n */\n PROJECT = 'PROJECT',\n /**\n * Runs scoped by group, users and facilitators are allowed access only if they are in the associated group\n * Groups are scoped by projects\n * @constant\n * @type {string}\n */\n GROUP = 'GROUP',\n /**\n * Runs scoped by episode, not sure what this one is permission-wise\n * Episodes are scoped by groups\n * @constant\n * @type {string}\n */\n EPISODE = 'EPISODE',\n /**\n * Runs scoped by world, users are only allowed access to the if they are assigned to the associated world. Facilitators need only to belong on the group that created the world\n * Worlds can be scoped by group or episode\n * @constant\n * @type {string}\n */\n WORLD = 'WORLD',\n}\n\n/**\n * Rituals are used to define the way in which the Epicenter stores a run while running actions like getting variables, saving meta data, and call model operations. Runs can exist in-memory for a certain amount of time before expiring, and requiring their revival again before use.\n * @enum {string}\n */\nexport enum RITUAL {\n /**\n * Allow GET action against archive, no revival of run\n * @constant\n * @type {string}\n */\n NONE = 'NONE',\n /**\n * A run with this ritual will be pulled into memory as needed, and will stay in memory until it's lifespan (defined in your project Settings) has expired.\n * @constant\n * @type {string}\n */\n REANIMATE = 'REANIMATE',\n /**\n * A run with this ritual will be pulled into memory as needed, and removed from memory afterwards.\n * @constant\n * @type {string}\n */\n EXORCISE = 'EXORCISE',\n}\n\n/**\n * Push categories are pre-defined channels types in which one might use to receive push channel updates\n * @enum {string}\n */\nexport enum PUSH_CATEGORY {\n /**\n * intended for messaging users\n * yes pub\n * @constant\n * @type {string} */\n CHAT = 'CHAT',\n /**\n * Used for the {@link https://github.com/forio Consensus API}\n * no pub\n * @constant\n * @type {string} */\n CONSENSUS = 'CONSENSUS',\n /**\n * intended for general non-chat, sim-level communication\n * yes pub\n * @constant\n * @type {string} */\n CONTROL = 'CONTROL',\n /**\n * Used for the {@link https://github.com/forio Presence API}\n * no pub\n * @constant\n * @type {string} */\n PRESENCE = 'PRESENCE',\n /**\n * intended for awaiting entering games\n * yes pub\n * @constant\n * @type {string} */\n LOBBY = 'LOBBY',\n /**\n * Used for the {@link https://github.com/forio Run API}\n * no pub\n * @constant\n * @type {string} */\n RUN = 'RUN',\n /**\n * Used for the {@link https://github.com/forio Vault API}\n * no pub\n * @constant\n * @type {string}\n */\n VAULT = 'VAULT',\n /**\n * Used for the {@link https://github.com/forio World API}\n * no pub\n * @constant\n * @type {string}\n */\n WORLD = 'WORLD',\n /**\n * For group related things; assignments, unassignments\n * @constant\n * @type {string}\n */\n GROUP = 'GROUP',\n /**\n * internal\n * @constant\n * @type {string} */\n SYSTEM = 'SYSTEM',\n}\n\nexport enum INTERNAL_ROLE {\n /**\n * System -- Epicenter Manager\n * @constant\n * @type {string}\n */\n SYSTEM = 'SYSTEM',\n /**\n * System minus -- read-only system access, write for certain accounts; think Geromel\n * @constant\n * @type {string}\n */\n MONITOR = 'MONITOR',\n /**\n * Author -- Team Members (and node server API keys)\n * tied to one account (personal + current account)\n * @constant\n * @type {string}\n */\n}\n\nexport enum ACCOUNT_ROLE {\n /**\n * Author -- Team Members (and node server API keys)\n * tied to one account (personal + current account)\n * @constant\n * @type {string}\n */\n AUTHOR = 'AUTHOR',\n /**\n * Author minus\n * @constant\n * @type {string}\n */\n SUPPORT = 'SUPPORT',\n}\n\nexport enum PROJECT_ROLE {\n /**\n * Intended role for admin users who should only have access to a specific project\n * @constant\n * @type {string}\n */\n ASSOCIATE = 'ASSOCIATE',\n}\n\nexport enum GROUP_ROLE {\n /**\n * Facilitators\n * @constant\n * @type {string}\n */\n FACILITATOR = 'FACILITATOR',\n /**\n * Reviewers (weaker facilitator)\n * Facilitator minus\n * @constant\n * @type {string}\n */\n REVIEWER = 'REVIEWER',\n /**\n * Users -- psuedonymKey (userKey) required in scope\n * e.g., an avatar -- GROUP scope, PARTICIPANT read, USER write, userKey pseudonymKey\n * @constant\n * @type {string}\n */\n USER = 'USER',\n /**\n * Leader\n * Participant plus\n * @constant\n * @type {string}\n */\n LEADER = 'LEADER',\n /**\n * Participant\n * @constant\n * @type {string}\n */\n PARTICIPANT = 'PARTICIPANT',\n /**\n * Anonymous\n * @constant\n * @type {string}\n */\n ANONYMOUS = 'ANONYMOUS',\n}\n\n\n/**\n * Roles are used to define permissions on resources in Epicenter.\n * @enum {string}\n */\nexport enum ROLE {\n /**\n * System -- Epicenter Manager\n * @constant\n * @type {string}\n */\n SYSTEM = 'SYSTEM',\n /**\n * System minus -- read-only system access, write for certain accounts; think Geromel\n * @constant\n * @type {string}\n */\n MONITOR = 'MONITOR',\n /**\n * Author -- Team Members (and node server API keys)\n * tied to one account (personal + current account)\n * @constant\n * @type {string}\n */\n AUTHOR = 'AUTHOR',\n /**\n * Author minus\n * @constant\n * @type {string}\n */\n SUPPORT = 'SUPPORT',\n /**\n * Facilitators\n * @constant\n * @type {string}\n */\n FACILITATOR = 'FACILITATOR',\n /**\n * Reviewers (weaker facilitator)\n * Facilitator minus\n * @constant\n * @type {string}\n */\n REVIEWER = 'REVIEWER',\n /**\n * Users -- psuedonymKey (userKey) required in scope\n * e.g., an avatar -- GROUP scope, PARTICIPANT read, USER write, userKey pseudonymKey\n * @constant\n * @type {string}\n */\n USER = 'USER',\n /**\n * Leader\n * Participant plus\n * @constant\n * @type {string}\n */\n LEADER = 'LEADER',\n /**\n * Participant\n * @constant\n * @type {string}\n */\n PARTICIPANT = 'PARTICIPANT',\n /**\n * Anonymous\n * @constant\n * @type {string}\n */\n ANONYMOUS = 'ANONYMOUS',\n}\n\n\n// /**\n// * Roles are used to define permissions on resources in Epicenter.\n// * @enum {string}\n// */\n// export const ROLE = {\n// ...INTERNAL_ROLE,\n// ...ACCOUNT_ROLE,\n// ...PROJECT_ROLE,\n// ...GROUP_ROLE,\n// };\n\n// export type ROLE = INTERNAL_ROLE | ACCOUNT_ROLE | PROJECT_ROLE | GROUP_ROLE;\n\n\nexport interface GenericScope {\n scopeBoundary: keyof typeof SCOPE_BOUNDARY,\n scopeKey: string,\n}\n\nexport interface Permit {\n readLock: keyof typeof ROLE,\n writeLock: keyof typeof ROLE,\n}\n","/* eslint-disable no-new-func */\nexport const isBrowser = new Function('try {return this===window;}catch(e){ return false;}');\nexport const isNode = new Function('try {return this===global;}catch(e){return false;}');\n\n\nexport const last = (strOrArr: string | Array<unknown>): unknown => strOrArr[strOrArr.length - 1];\nexport const prefix = (pre: string, str: string): string => str.startsWith(pre) ? str : `${pre}${str}`;\n","import EpicenterError from './error';\nimport { isBrowser, isNode } from './helpers';\n\n\nconst API_VERSION = 3;\nclass Config {\n _apiVersion = API_VERSION;\n _apiProtocol = '';\n _apiHost = '';\n _accountShortName = '';\n _projectShortName = '';\n\n authOverride?: string\n\n constructor() {\n if (isBrowser()) {\n this.loadBrowser();\n return;\n }\n if (isNode()) {\n this.loadNode();\n return;\n }\n throw new EpicenterError('Could not identify environment; no configuration was setup');\n }\n\n /**\n * Protocol used to make network requests (whether `http://` or `https://`). It is typically set on-load based on your browser's URL. For local development, this is defaulted to `https`, and can be overwritten if desired.\n * @memberof config\n * @type {string}\n * */\n get apiProtocol() {\n return this._apiProtocol;\n }\n\n set apiProtocol(apiProtocol) {\n if (!apiProtocol.startsWith('http')) return;\n if (apiProtocol.endsWith(':')) {\n apiProtocol = apiProtocol.slice(0, -1);\n }\n this._apiProtocol = apiProtocol;\n }\n\n /**\n * Hostname used to make network requests. It is typically set on-load based on your browser's URL. For local development, this is defaulted to `forio.com`, and can be overwritten if desired.\n * @memberof config\n * @type {string}\n * */\n get apiHost() {\n return this._apiHost;\n }\n\n set apiHost(apiHost) {\n this._apiHost = apiHost;\n }\n\n /**\n * Version used to make network requests. This is read-only variable intended for internal use.\n * @memberof config\n * @type {number}\n */\n get apiVersion() {\n return this._apiVersion;\n }\n\n set apiVersion(_apiVersion) {\n return;\n }\n\n /**\n * Account name used for making network requests. This is the default value used by Epicenter API adapters when making network requests without explicitly defining an account to use. It is defined on-load based on your browser's URL, and can be overwritten for local development.\n * @example\n * // with browser URL: https://forio.com/app/acme-simulations/foobar-game\n *\n * console.log(epicenter.config.accountShortName);\n * // should log 'acme-simulations'\n *\n * epicenter.runAdapter.get(123);\n * // instantiates a GET call with the URL: https://forio.com/api/v3/acme-simulations/foobar-game/run/123\n *\n * epicenter.config.accountShortName = 'globex-simuations';\n * epicenter.runAdapter.get(123);\n * // now instantiates a GET with the URL: https://forio.com/api/v3/globex-simulations/foobar-game/run/123\n *\n * epicenter.runAdapter.get(123, { accountShortName: 'initech-simulations' });\n * // now instantiates a GET with the URL: https://forio.com/api/v3/initech-simulations/foobar-game/run/123\n *\n * @memberof config\n * @type {string}\n */\n get accountShortName() {\n return this._accountShortName;\n }\n\n set accountShortName(accountShortName) {\n this._accountShortName = accountShortName;\n }\n /**\n * Project name used for making network requests. This is the default value used by Epicenter API adapters when making network requests without explicitly defining an account to use. It is defined on-load based on your browser's URL, and can be overwritten for local development.\n * @example\n * // with browser URL: https://forio.com/app/acme-simulations/foobar-game\n *\n * console.log(epicenter.config.projectShortName);\n * // should log 'foobar-game'\n *\n * epicenter.runAdapter.get(123);\n * // instantiates a GET call with the URL: https://forio.com/api/v3/acme-simulations/foobar-game/run/123\n *\n * epicenter.config.projectShortName = 'barfoo-game';\n * epicenter.runAdapter.get(123);\n * // now instantiates a GET with the URL: https://forio.com/api/v3/acme-simulations/barfoo-game/run/123\n *\n * epicenter.runAdapter.get(123, { projectShortName: 'barbaz-game' });\n * // now instantiates a GET with the URL: https://forio.com/api/v3/acme-simulations/barbaz-game/run/123\n *\n * @memberof config\n * @type {string}\n */\n get projectShortName() {\n return this._projectShortName;\n }\n\n set projectShortName(projectShortName) {\n this._projectShortName = projectShortName;\n }\n\n /**\n * Use to determines whether or not the environment is local.\n * @memberof config\n * @return whether or not environment is local.\n */\n isLocal() {\n if (!isBrowser()) return false;\n const host = window.location.host;\n return host === '127.0.0.1' ||\n host.indexOf('local.') === 0 ||\n host.indexOf('ngrok') !== -1 ||\n host.indexOf('localhost') === 0;\n }\n\n loadNode() {\n // TODO -- use process env variables instead here for Node server\n this.apiProtocol = 'https';\n this.apiHost = 'forio.com';\n return;\n }\n\n loadBrowser() {\n const isLocal = this.isLocal();\n const { protocol, pathname, host } = window.location;\n this.apiProtocol = isLocal ? 'https' : protocol;\n this.apiHost = isLocal ? 'forio.com' : host;\n\n const match = pathname.match(/\\/app\\/([\\w-]+)\\/([\\w-]+)/);\n if (match) {\n const [account, project] = match.slice(1);\n this.accountShortName = account;\n this.projectShortName = project;\n }\n }\n}\n\nconst config = new Config();\n/**\n * Configuration -- used to set up and configure global settings for Epicenter JS libs.\n * @namespace config\n */\nexport default config;\n","import EpicenterError from './error';\nimport cookies from './cookies';\nimport { NodeStore, SessionStore, CookieStore } from './store';\nimport { BROWSER_STORAGE_TYPE, ROLE } from './constants';\nimport { isNode } from './helpers';\nimport config from './config';\nconst { COOKIE, SESSION } = BROWSER_STORAGE_TYPE;\n\nexport interface UserSession {\n token: string,\n userKey: string,\n groupKey?: string,\n groupName?: string,\n groupRole?: string,\n multipleGroups?: boolean,\n accountShortName: string,\n projectShortName?: string, // undefined when multipleGroups: true\n projectKey?: string,\n displayName: string,\n objectType: 'user',\n loginMethod: {\n objectType: string,\n },\n}\n\nexport interface AdminSession {\n adminHandle: string,\n adminKey: string,\n expires: boolean,\n multipleAccounts: boolean,\n objectType: 'admin'\n teamAccountRole: ROLE.AUTHOR | ROLE.SUPPORT,\n teamAccountShortName: string,\n projectShortName?:string,\n projectKey?: string,\n timeoutMinutes: number,\n token: string,\n}\n\nexport type Session = UserSession | AdminSession;\n\n\nconst SESSION_KEY = 'com.forio.epicenter.session';\nconst EPI_SSO_KEY = 'epicenter.v3.sso';\nclass Identification {\n type\n\n constructor(storeType: keyof typeof BROWSER_STORAGE_TYPE) {\n if (storeType !== COOKIE && storeType !== SESSION) {\n throw new EpicenterError(`Invalid Storage Type: \"${storeType}\", please use \"${COOKIE}\" or \"${SESSION}\".`);\n }\n this.type = storeType;\n this.consumeSSO();\n }\n get session() {\n const Store = this.getStore();\n return new Store().getItem(SESSION_KEY) as Session;\n }\n set session(session: Session | undefined) {\n const Store = this.getStore();\n const options = this.getStoreOptions(session);\n\n if (session) {\n new Store(options).setItem(SESSION_KEY, session as Session);\n } else if (this.session) {\n new Store(options).removeItem(SESSION_KEY);\n }\n }\n getStore() {\n if (isNode()) return NodeStore;\n switch (this.type) {\n case SESSION: return SessionStore;\n case COOKIE:\n default: return CookieStore;\n }\n }\n /* Generates the appropriate path for storing your session (applicable only to cookies) */\n getStoreOptions(session?: Session) {\n const mySession = session || this.session;\n if (!mySession || isNode()) return '';\n\n const { objectType } = mySession;\n const isLocal = config.isLocal();\n const base = { samesite: isLocal ? 'lax' : 'none', secure: !isLocal };\n const isCustomDomain = !isLocal && window.location.pathname.split('/')[1] !== 'app';\n const isEpicenterDomain = !isLocal && !isCustomDomain;\n if (objectType === 'user' && isEpicenterDomain) {\n const { accountShortName, projectShortName } = mySession;\n const account = accountShortName ? `/${accountShortName}` : '';\n const project = account && projectShortName ? `/${projectShortName}` : '';\n return { ...base, path: `/app${account}${project}` };\n }\n /* Admins and any custom domains (ones that don't use 'app/account/project') get the root path */\n return { ...base, path: '/' };\n }\n consumeSSO() {\n if (isNode()) return;\n\n // Occasionally, the backend might already wrap the cookie in quotes, have to handle\n // both cases, where we get string serialized content w/ quotes and without\n let cookieContent = cookies.getItem(EPI_SSO_KEY);\n if (\n typeof cookieContent === 'string' &&\n cookieContent.charAt(0) !== '\"' &&\n cookieContent.charAt(cookieContent.length - 1) !== '\"'\n ) {\n cookieContent = `\"${cookieContent}\"`;\n }\n\n /* Double parse here b/c the backend serializes it as a string; the first parse\n * converts it into a json string, the second parse converts the json string into\n * json. Yes, it's weird, no, we can't change it (unless we want to rewrite\n * Interface Builder code to accommodate) */\n const session = JSON.parse(JSON.parse(cookieContent ?? '\"null\"'));\n\n if (session) {\n const { accountShortName, projectShortName } = session;\n const account = accountShortName ? `/${accountShortName}` : '';\n const project = account && projectShortName ? `/${projectShortName}` : '';\n this.session = session;\n cookies.removeItem(EPI_SSO_KEY, { domain: `.${window.location.hostname}`, path: `/app${account}${project}` });\n }\n }\n}\n\nconst identification = new Identification(COOKIE);\nexport default identification;\n\n","import type { RetryFunction } from './router';\nimport Fault from './fault';\n\n\ntype Identifier = (error: Fault) => boolean\ntype HandleFunction = <T>(error: Fault, retry: RetryFunction<T>) => Promise<T>\n\ninterface Handler {\n identifier: Identifier,\n handle: HandleFunction,\n}\n\nclass ErrorManager {\n _handlers: Handler[] = [];\n\n get handlers() {\n return this._handlers;\n }\n\n clearHandlers() {\n this._handlers = [];\n }\n\n registerHandler(\n identifier: Identifier,\n handleFn: HandleFunction\n ) {\n this.handlers.unshift({\n identifier,\n handle: handleFn,\n });\n }\n\n async handle<Output>(\n error: Fault,\n retryFn: RetryFunction<Output>,\n handlers?: Handler[]\n ): Promise<Output> {\n handlers = handlers || this.handlers;\n const index = handlers.findIndex(({ identifier }) => identifier(error));\n const handler = handlers[index];\n if (!handler) throw error;\n let promise;\n try {\n promise = await handler.handle(error, retryFn).catch((err) => {\n /* This catch call ensures that handle always returns a promise,\n otherwise it'd be caught in the catch block below */\n throw err;\n });\n } catch (e) {\n console.error('Handler failed due to error', e);\n const remainingHandlers = index > -1 ? [...handlers.slice(0, index), ...handlers.slice(index + 1)] : [];\n // Try to handle the new error with the remaining handlers, otherwise keep trying to handle the original error\n const handleableError = e instanceof Fault ? e : error;\n promise = await this.handle(handleableError, retryFn, remainingHandlers);\n }\n return promise;\n }\n}\n\nconst errorManager = new ErrorManager();\n/**\n * Configuration -- used to set up and configure global settings for Epicenter JS libs.\n * @namespace errorManager\n */\nexport default errorManager;\n","import fetch from 'cross-fetch';\nimport EpicenterError from './error';\nimport Fault from './fault';\nimport Result from './result';\nimport identification from './identification';\nimport errorManager from './error-manager';\nimport config from './config';\nimport { prefix, isBrowser } from './helpers';\n\n\ntype Version = number | undefined;\ntype Server = string | undefined;\ntype AccountShortName = string | undefined;\ntype ProjectShortName = string | undefined;\ntype Authorization = string | undefined;\ntype QueryObject = Record<string, unknown>;\ntype SearchParams = string | string[][] | URLSearchParams | QueryObject;\n\nexport interface RoutingOptions {\n authorization?: Authorization,\n server?: Server,\n accountShortName?: AccountShortName,\n projectShortName?: ProjectShortName,\n query?: SearchParams,\n headers?: Record<string, string>,\n body?: unknown,\n includeAuthorization?: boolean,\n inert?: boolean,\n paginated?: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parsePage?: (values: any[]) => any[],\n}\n\ninterface RequestOptions extends RoutingOptions {\n method: string,\n}\n\nexport interface RetryFunction<Output> {\n (): Promise<Output>,\n requestArguments?: { url: URL } & RequestOptions,\n}\n\nexport interface Page<Item> {\n firstResult: number,\n maxResults: number,\n totalResults: number,\n values: Item[],\n prev: () => Promise<Item[]>,\n next: () => Promise<Item[]>,\n all: (first?: number, allValues?: Item[]) => Promise<Item[]>,\n}\n\nexport interface GenericSearchOptions {\n filter?: string[],\n sort?: string[],\n first?: number,\n max?: number,\n}\n\nconst MAX_URL_LENGTH = 2048;\nfunction paginate(json: Page<unknown>, url: URL, options: RequestOptions) {\n const parsePage = options.parsePage ?? (<T>(i: T) => i);\n const page = {...json, values: parsePage(json.values)};\n const prev = async function() {\n const searchParams = new URLSearchParams(url.search);\n if (page.firstResult === 0) {\n console.warn('Pagination: cannot call \"prev\" on first page');\n return [];\n }\n\n const first = page.firstResult - page.maxResults;\n const max = page.maxResults + (first < 0 ? first : 0);\n\n searchParams.set('first', Math.max(first, 0).toString());\n searchParams.set('max', max.toString());\n url.search = searchParams.toString();\n // eslint-disable-next-line no-use-before-define\n const prevPage = await request(url, {...options, paginated: false}).then(({body}) => body);\n prevPage.values = parsePage(prevPage.values);\n Object.assign(page, prevPage);\n return page.values;\n };\n\n const next = async function() {\n const searchParams = new URLSearchParams(url.search);\n const first = page.firstResult + page.maxResults;\n if (first >= page.totalResults) {\n console.warn('Pagination: cannot call \"next\" on final page');\n return [];\n }\n\n searchParams.set('first', first.toString());\n url.search = searchParams.toString();\n // eslint-disable-next-line no-use-before-define\n const nextPage = await request(url, {...options, paginated: false}).then(({body}) => body);\n nextPage.values = parsePage(nextPage.values);\n Object.assign(page, nextPage);\n return page.values;\n };\n\n const initialTotal = json.totalResults;\n const all = async function(first = 0, allValues: unknown[] = []): Promise<unknown[]> {\n if (first >= initialTotal) return allValues;\n\n const searchParams = new URLSearchParams(url.search);\n searchParams.set('first', first.toString());\n searchParams.delete('max');\n url.search = searchParams.toString();\n // eslint-disable-next-line no-use-before-define\n const nextPage = await request(url, {...options, paginated: false}).then(({body}) => body);\n allValues.push(...parsePage(nextPage.values));\n return all(first + nextPage.maxResults, allValues);\n };\n\n page.prev = prev;\n page.next = next;\n page.all = all;\n return page;\n}\n\ninterface Message {\n headers: HeadersInit,\n body: BodyInit | null,\n}\n\nconst createMessage = (\n headersRaw?: Record<string, string>,\n bodyRaw?: unknown,\n includeAuthorization?: boolean,\n authorization?: string,\n): Message => {\n const headers = Object.assign({}, headersRaw);\n let body = null;\n if (isBrowser() && bodyRaw instanceof FormData) {\n body = bodyRaw;\n } else if (bodyRaw) {\n headers['Content-type'] = 'application/json; charset=UTF-8';\n body = JSON.stringify(bodyRaw);\n }\n\n if (!includeAuthorization) {\n delete headers.Authorization;\n return { headers, body };\n }\n\n const { session } = identification;\n if (!headers.Authorization) { // \"headers\" option as primary everything\n if (session) headers.Authorization = `Bearer ${session.token}`; // session token should be default\n if (authorization) headers.Authorization = authorization; // Router option as tertiary override\n if (config.authOverride) headers.Authorization = config.authOverride; // config fallback as secondary override\n }\n return { headers, body };\n};\n\nconst NO_CONTENT = 204;\nconst BAD_REQUEST = 400;\nconst OK = 200;\nasync function request(\n url: URL,\n options: RequestOptions,\n): Promise<Result> {\n const { method, headers, body, includeAuthorization, inert, paginated, authorization } = options;\n const message = createMessage(\n headers,\n body,\n includeAuthorization,\n authorization,\n );\n\n const response = await fetch(url.toString(), {\n method,\n cache: 'no-cache',\n redirect: 'follow',\n headers: message.headers,\n body: message.body,\n });\n\n if (response.status === NO_CONTENT) {\n return new Result(undefined, response);\n }\n\n const resContentType = response.headers.get('content-type');\n if (!resContentType || !resContentType.includes('application/json')) {\n throw new EpicenterError(`Response content-type '${resContentType}' does not include 'application/json' and my url is ${url.toString()}, ${method}`);\n }\n\n const json = await response.json();\n if ((response.status >= OK) && (response.status < BAD_REQUEST)) {\n const result = new Result(\n paginated ? paginate(json, url, options) : json,\n response\n );\n return result;\n }\n\n const fault = new Fault(json, response);\n if (inert) throw fault;\n\n const retryOptions = {...options, inert: true};\n const retry = () => request(url, retryOptions);\n retry.requestArguments = {\n url,\n ...retryOptions,\n };\n return errorManager.handle<Result>(fault, retry);\n}\n\n/**\n * Used to make the network calls in all API adapters\n */\nexport default class Router {\n _version: Version = undefined\n _server: Server = undefined\n _accountShortName: AccountShortName = undefined;\n _projectShortName: ProjectShortName = undefined;\n _authorization: Authorization = undefined;\n _searchParams = new URLSearchParams();\n\n /**\n * The version of the Epicenter APIs being invoked; expected to stay at `3`\n */\n get version(): Version {\n return this._version;\n }\n\n set version(value: Version) {\n this._version = value;\n }\n\n /**\n * The root path used for the call, essentially protocol + hostname\n * @type {string}\n */\n get server(): Server {\n return this._server;\n }\n\n set server(value: Server) {\n this._server = value;\n }\n\n /**\n * Name of the account; for administrative use, this value should be set to 'epicenter'\n * @type {string}\n */\n get accountShortName(): AccountShortName {\n return this._accountShortName;\n }\n\n set accountShortName(value: AccountShortName) {\n this._accountShortName = value;\n }\n\n /**\n * Name of the project; for administrative use, this value should be set to 'manager'\n * @type {string}\n */\n get projectShortName(): ProjectShortName {\n return this._projectShortName;\n }\n\n set projectShortName(value: ProjectShortName) {\n this._projectShortName = value;\n }\n\n /**\n * Auth header; looks like `Bearer TOKEN` or `Basic TOKEN`\n * @type {string}\n */\n get authorization(): Authorization {\n return this._authorization;\n }\n\n set authorization(value: Authorization) {\n this._authorization = value;\n }\n\n /**\n * The search parameters for to use when making a network request. This property has should always return an instance of URLSearchParams or undefined. It has unique properties when used with the assignment operator (`=`); see the examples below for more details.\n * @type {URLSearchParams}\n *\n * @example\n * const router = new Router();\n * router.searchParams = '?foo=123';\n * console.log(router.searchParams); // always returns an instance object: URLSearchParams {}\n * console.log(router.searchParams.toString()); // logs 'foo=123'\n *\n * router.searchParams = 'foo=123'; // can omit the question mark\n * console.log(router.searchParams.toString()); // logs 'foo=123'\n *\n * router.searchParams = [['foo', '123'], ['bar', '456']]; // can accept arrays\n * console.log(router.searchParams.toString()); // logs 'foo=123&bar=456'\n *\n * router.searchParams = { foo: '123', bar: '456' }; // can accept objects\n * console.log(router.searchParams.toString()); // logs 'foo=123&bar=456'\n *\n * router.searchParams = { foo: '123', bar: ['4', '5', '6'] }; // can accept objects with arrayed values\n * console.log(router.searchParams.toString()); // logs 'foo=123&bar=4&bar=5&bar=6'\n *\n * router.searchParams = new URLSearchParams('foo=123'); // can accept instances of URLSearchParams\n * console.log(router.searchParams.toString()); // logs 'foo=123'\n *\n * @param {object|array|string|URLSearchParams} query Value used to set the search parameters\n */\n get searchParams(): SearchParams {\n return this._searchParams;\n }\n\n set searchParams(query: SearchParams) {\n if (query.constructor === URLSearchParams) {\n this._searchParams = query;\n return;\n }\n\n /* 'query' should be either an array, or string. Objects will be coerced into [key, value] arrays */\n if (typeof query === 'object' && query.constructor === Object) {\n query = Object.entries(query).reduce((arr, [key, value]) => {\n if (Array.isArray(value)) {\n /* Special case for arrayed param values: use duplicated params here */\n return [...arr, ...value.map((v) => [key, v])];\n }\n if (value === undefined || value === null) {\n /* Skip nullish values */\n return arr;\n }\n arr.push([key, value.toString()]);\n return arr;\n }, [] as string[][]);\n }\n this._searchParams = new URLSearchParams(query as string | string[][] | URLSearchParams);\n }\n\n /**\n * Sets the version. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [version] Version to use\n * @returns {Router} The Router instance\n */\n withVersion(version?: Version): Router {\n if (typeof version !== 'undefined') this.version = version;\n return this;\n }\n\n /**\n * Sets the root path. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [server] Root path to use\n * @returns {Router} The Router instance\n */\n withServer(server?: Server): Router {\n if (typeof server !== 'undefined') this.server = server;\n return this;\n }\n\n /**\n * Sets the account. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [accountShortName] Account name to use\n * @returns {Router} The Router instance\n */\n withAccountShortName(accountShortName?: AccountShortName): Router {\n if (typeof accountShortName !== 'undefined') this.accountShortName = accountShortName;\n return this;\n }\n\n /**\n * Sets the project. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [projectShortName] Project name to use\n * @returns {Router} The Router instance\n */\n withProjectShortName(projectShortName?: ProjectShortName): Router {\n if (typeof projectShortName !== 'undefined') this.projectShortName = projectShortName;\n return this;\n }\n\n /**\n * Sets the project. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string} [projectShortName] Project name to use\n * @returns {Router} The Router instance\n */\n withAuthorization(authorization?: Authorization): Router {\n if (typeof authorization !== 'undefined') this.authorization = authorization;\n return this;\n }\n\n /**\n * Sets the search parameters. Does nothing if invoked with no input. This is a part of a series of convenience functions for chaining sets on values.\n * @param {string|array|object|URLSearchParams} [searchParams] Search parameters to use, utilizes the same setter as [searchParams](#Router-searchParams)\n * @returns {Router} The Router instance\n */\n withSearchParams(searchParams?: SearchParams): Router {\n if (typeof searchParams !== 'undefined') this.searchParams = searchParams;\n return this;\n }\n\n getURL(uriComponent: string): URL {\n const server = this.server ?? `${config.apiProtocol}://${config.apiHost}`;\n const accountShortName = this.accountShortName ?? config.accountShortName;\n const projectShortName = this.projectShortName ?? config.projectShortName;\n const version = this.version ?? config.apiVersion;\n\n const url = new URL(`${server}`);\n url.pathname = `api/v${version}/${accountShortName}/${projectShortName}${prefix('/', uriComponent)}`;\n url.search = (this.searchParams ?? new URLSearchParams()).toString();\n return url;\n }\n\n //Network Requests\n async get(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query,\n headers, includeAuthorization, inert, paginated, parsePage,\n } = options;\n\n this.withAuthorization(authorization)\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .withSearchParams(query);\n\n const url = this.getURL(uriComponent);\n\n /* Handle sufficiently large GET requests with POST calls instead */\n if (url.href.length > MAX_URL_LENGTH) {\n const searchParams = (this.searchParams ?? new URLSearchParams()) as URLSearchParams;\n const entries = Array.from(searchParams.entries()) as Array<[string, string]>;\n const searchObject = entries.reduce((searchObject, [key, value]) => {\n // Store values that only occur once as the value itself\n if (!searchObject[key]) {\n searchObject[key] = value;\n return searchObject;\n }\n // Store values that that appear more than once in an array\n if (!Array.isArray(searchObject[key])) {\n // Make existing value an array\n searchObject[key] = [searchObject[key] as string];\n }\n (searchObject[key] as string[]).push(value);\n\n return searchObject;\n }, {} as Record<string, string | string[]>);\n this.searchParams = '';\n return this.post(uriComponent, {\n ...options,\n body: searchObject,\n });\n }\n\n return request(url, {\n method: 'GET',\n headers,\n includeAuthorization: includeAuthorization ?? true,\n authorization: this.authorization,\n inert,\n paginated,\n parsePage,\n });\n }\n\n async delete(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query,\n headers, includeAuthorization, inert,\n } = options;\n\n this.withAuthorization(authorization)\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .withSearchParams(query);\n\n const url = this.getURL(uriComponent);\n return request(url, {\n method: 'DELETE',\n headers,\n includeAuthorization: includeAuthorization ?? true,\n authorization: this.authorization,\n inert,\n });\n }\n\n async patch(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query,\n headers, body, includeAuthorization, inert,\n } = options;\n\n this.withAuthorization(authorization)\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .withSearchParams(query);\n\n const url = this.getURL(uriComponent);\n return request(url, {\n method: 'PATCH',\n headers,\n body,\n includeAuthorization: includeAuthorization ?? true,\n authorization: this.authorization,\n inert,\n });\n }\n\n async post(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query,\n headers, body, includeAuthorization, inert,\n } = options;\n\n this.withAuthorization(authorization)\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .withSearchParams(query);\n\n const url = this.getURL(uriComponent);\n return request(url, {\n method: 'POST',\n headers,\n body,\n includeAuthorization: includeAuthorization ?? true,\n authorization: this.authorization,\n inert,\n });\n }\n\n async put(uriComponent: string, options: RoutingOptions = {}): Promise<Result> {\n const {\n accountShortName, projectShortName, authorization, server, query,\n headers, body, includeAuthorization, inert,\n } = options;\n\n this.withAuthorization(authorization)\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .withSearchParams(query);\n\n const url = this.getURL(uriComponent);\n return request(url, {\n method: 'PUT',\n headers,\n body,\n includeAuthorization: includeAuthorization ?? true,\n authorization: this.authorization,\n inert,\n });\n }\n}\n","import type { RoutingOptions } from 'utils/router';\nimport Router from 'utils/router';\n\n\ninterface AccountReadView {\n name: string;\n objectType: string;\n}\n\ninterface AccountCreateView {\n adminKey: string;\n name: string;\n shortName: string;\n sharedSecret?: string;\n workerPartition?: string;\n active?: boolean;\n}\n\ninterface PersonalAccountCreateView extends AccountCreateView {\n objectType: 'personal';\n}\n\ninterface TeamAccountCreateView extends AccountCreateView {\n objectType: 'team';\n billingInterval: string;\n subscriptionPlan: string;\n}\n\ninterface AccountUpdateView {\n name?: string;\n workerPartition?: string;\n active?: boolean;\n}\n\ninterface PersonalAccountUpdateView extends AccountUpdateView {\n objectType: 'personal';\n}\n\ninterface TeamAccountUpdateView extends AccountUpdateView {\n objectType: 'team';\n billingInterval?: string;\n}\n\nexport async function getAccount(accountShortName: string): Promise<AccountReadView> {\n return await new Router()\n .withAccountShortName(accountShortName)\n .get('/account')\n .then(({body}) => body);\n}\n\nexport async function createAccount(view: PersonalAccountCreateView | TeamAccountCreateView): Promise<AccountReadView> {\n\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .post('/account', {\n body: view,\n }).then(({body}) => body);\n}\n\nexport async function updateAccount(\n view: PersonalAccountUpdateView | TeamAccountUpdateView,\n optionals: RoutingOptions = {},\n): Promise<AccountReadView> {\n return await new Router()\n .patch('/account', {\n body: view,\n ...optionals,\n }).then(({body}) => body);\n}\n\nexport async function removeAccount(\n accountShortName: string\n): Promise<void> {\n return await new Router()\n .withAccountShortName(accountShortName)\n .delete('/account')\n .then(({body}) => body);\n}\n\nexport async function teamForAdmin(\n adminKey: string,\n optionals: {\n includeAllMembers?: boolean,\n filter?: string,\n first?: number,\n max?: number,\n } & RoutingOptions = {},\n): Promise<AccountReadView[]> {\n const {\n includeAllMembers, filter, first, max,\n ...routingOptions\n } = optionals;\n const searchParams = {\n includeAllMembers, filter, first, max,\n };\n\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .withSearchParams(searchParams)\n .get(`/account/team/for/${adminKey}`, routingOptions)\n .then(({body}) => body);\n}","import type { RoutingOptions } from '../utils/router';\nimport Router from '../utils/router';\n\nexport interface Secret {\n password: string;\n}\n\nexport interface AdminCreateView {\n [key: string]: unknown,\n handle: string;\n email: string;\n givenName?: string;\n familyName?: string;\n verified: true;\n active?: true;\n}\n\ninterface Admin {\n lastUpdated: string,\n lastLogin: string,\n created: string,\n familyName: string,\n givenName: string,\n verified: boolean,\n handle: string,\n active: boolean,\n adminKey: string,\n email: string,\n objectType: 'external' | 'native',\n}\n\nexport interface NativeAdminCreateView extends AdminCreateView {\n objectType: 'native';\n secret: Secret;\n}\n\nexport async function createAdmin(view: AdminCreateView): Promise<Admin> {\n\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .post('/admin', {\n body: view,\n }).then(({body}) => body);\n}\n\nexport async function getWithHandle(handle: string, optionals: RoutingOptions = {}) {\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .get(`/admin/with/${handle}`, optionals)\n .then(({body}) => body);\n}","import type { RoutingOptions } from '../utils/router';\nimport { ROLE, Router } from '../utils';\n\nenum ACCESS_TYPE {\n PUBLIC = 'PUBLIC',\n PRIVATE = 'PRIVATE',\n AUTHENTICATED = 'AUTHENTICATED',\n}\n\nenum WORKER_PARTITION {\n NONE = 'NONE',\n ALL = 'ALL',\n FREE = 'FREE',\n LICENSED = 'LICENSED',\n ACCOUNT = 'ACCOUNT',\n}\n\nenum PHYLOGENY {\n ORIGINAL = 'ORIGINAL',\n HISTORICAL = 'HISTORICAL',\n REFERENTIAL = 'REFERENTIAL',\n ORDERED = 'ORDERED',\n EVENTUAL = 'EVENTUAL',\n}\n\nenum FILE_TYPE {\n INSENSITIVE = 'INSENSITIVE',\n SENSITIVE = 'SENSITIVE',\n}\n\ninterface Member {\n role: ROLE.AUTHOR,\n adminKey: string,\n objectType: 'project',\n}\n\ninterface Deployment {\n defaultGroupName: string,\n autoCreatePlayer: boolean,\n loginFile: string,\n welcomeFile: string,\n groupFile: string,\n}\n\ninterface TeamProject {\n concurrentRunLimit: number,\n modelFile: string,\n available: boolean,\n allowWorldSelfAssign: boolean,\n legacySettings: {\n blockDirectApiCalls: boolean,\n channelAuthorizationRequired: boolean,\n filePermissionsActive: boolean,\n showEmail: boolean,\n transmogrifierActive: boolean,\n dataApiAllowAnonymousAccess: boolean,\n channelVersion: number,\n authorizationMode: 'LEGACY' | 'USER',\n dataApiEnforceScope: boolean,\n },\n objectType: 'team',\n accessType: keyof typeof ACCESS_TYPE,\n sessionTimeoutSeconds: number,\n projectKey: string,\n members: Member[],\n channelEnabled: boolean,\n workerPartition: keyof typeof WORKER_PARTITION,\n name: string,\n phylogeny: keyof typeof PHYLOGENY,\n multiPlayerEnabled: boolean,\n shortName: string,\n approximateRunCount: number,\n pricing: {\n amount: number,\n },\n dataRetentionDays: number,\n fileType: keyof typeof FILE_TYPE,\n dimensions: 'UNIVERSE' | 'MULTIVERSE',\n deployment: Deployment,\n}\n\ninterface PersonalProject {\n concurrentRunLimit: number,\n available: boolean,\n objectType: 'personal',\n accessType: keyof typeof ACCESS_TYPE,\n sessionTimeoutSeconds: number,\n projectKey: string,\n workerPartition: keyof typeof WORKER_PARTITION,\n name: string,\n phylogeny: keyof typeof PHYLOGENY,\n shortName: string,\n approximateRunCount: number,\n fileType: keyof typeof FILE_TYPE,\n deployment: Deployment,\n}\n\ntype Project =\n | TeamProject\n | PersonalProject;\n\n/**\n * Checks to see if the project currently has the push channels enabled\n * @example\n * epicenter.projectAdapter.channelsEnabled();\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise resolving true/false whether or not the project supports the use of push channels\n */\nexport async function channelsEnabled(\n optionals: RoutingOptions = {}\n): Promise<boolean> {\n return await new Router()\n .get('/project/channel/isEnabled', optionals)\n .then(({ body }) => body);\n}\n\nexport async function get(\n optionals: RoutingOptions = {}\n): Promise<Project> {\n return await new Router()\n .get('/project', optionals)\n .then(({ body }) => body);\n}\n","import type { CometD, Message, SubscribeMessage, SubscriptionHandle } from 'cometd';\nimport type Channel from './channel';\n\nimport { EpicenterError, Fault, identification, isBrowser, errorManager, config } from '../utils';\nimport { channelsEnabled } from './project';\n\nconst AUTH_TOKEN_KEY = 'com.forio.epicenter.token';\n\nconst DISCONNECTED = 'disconnected';\nconst CONNECTED = 'connected';\nconst UNAUTHORIZED = 401;\n\ninterface ChannelUpdate {\n data: string | Record<string, unknown>,\n}\n\nlet cometdInstance: CometD | undefined;\nclass CometdAdapter {\n\n url = '';\n initialization = false;\n subscriptions = new Map();\n\n get cometd() {\n if (!cometdInstance) {\n throw new EpicenterError('Tried to get non-existent cometd');\n }\n return cometdInstance;\n }\n set cometd(instance) {\n cometdInstance = instance;\n }\n\n async startup() {\n const enabled = await channelsEnabled();\n if (!enabled) throw new EpicenterError('Push Channels are not enabled on this project');\n\n const { CometD } = await import('cometd');\n const AckExtension = (await import('cometd/AckExtension')).default;\n const ReloadExtension = (await import('cometd/ReloadExtension')).default;\n\n this.cometd = new CometD();\n const { apiProtocol, apiHost, apiVersion, accountShortName, projectShortName } = config;\n const accountProject = (accountShortName && projectShortName) ?\n `/${accountShortName}/${projectShortName}` :\n '/epicenter/manager';\n this.url = `${apiProtocol}://${apiHost}/push/v${apiVersion}${accountProject}/cometd`;\n\n this.cometd.registerExtension('ack', new AckExtension());\n if (isBrowser()) {\n this.cometd.registerExtension('reload', new ReloadExtension());\n\n window.onunload = () => {\n if (this.cometd.getStatus() === CONNECTED) {\n if (this.cometd.reload) this.cometd.reload();\n const transport = this.cometd.getTransport();\n if (transport) transport.abort();\n }\n };\n }\n\n // Current don't want to support CometD on node servers\n // if (isNode()) {\n // const { adapt } = await import('cometd-nodejs-client');\n // adapt();\n // }\n\n this.cometd.configure({\n url: this.url,\n logLevel: 'debug',\n });\n return true;\n }\n\n async init() {\n if (!this.initialization) {\n this.initialization = await this.startup();\n }\n return this.initialization;\n }\n\n // Connects to CometD server\n async handshake(options: { inert?: boolean } = {}) {\n await this.init();\n\n if (this.cometd.getStatus() !== DISCONNECTED) {\n return Promise.resolve();\n }\n\n let handshakeProps = {};\n const { session } = identification;\n\n if (session) {\n handshakeProps = {\n ext: {\n [AUTH_TOKEN_KEY]: session.token,\n ack: true,\n },\n };\n }\n\n // TODO -- this was line in the old libs, don't know why; probably not needed so commenting out for now.\n // this.cometd.ackEnabled = true;\n this.cometd.websocketEnabled = true;\n return new Promise((resolve, reject) => this.cometd.handshake(handshakeProps, (handshakeReply) => {\n if (handshakeReply.successful) {\n resolve(handshakeReply);\n return;\n }\n\n const errorMessage = handshakeReply.error ?? '';\n const error = new Fault({\n status: errorMessage.includes('403') ? UNAUTHORIZED : undefined,\n message: errorMessage,\n information: {\n code: 'COMETD_ERROR',\n ...handshakeReply,\n },\n });\n\n if (options.inert) {\n reject(error);\n return;\n }\n\n const retry = () => this.handshake({ inert: true });\n try {\n const result = errorManager.handle(error, retry);\n resolve(result);\n } catch (e) {\n reject(e);\n }\n }));\n }\n\n async disconnect() {\n if (!this.initialization) return Promise.resolve();\n\n await this.init();\n await this.empty();\n if (this.cometd.getStatus() !== CONNECTED) return Promise.resolve();\n\n return new Promise((resolve, reject) => this.cometd.disconnect((disconnectReply: Message) => {\n if (!disconnectReply.successful) {\n reject(new EpicenterError('Unable to disconnect from CometD server'));\n } else {\n resolve(undefined);\n }\n }));\n }\n\n async add(\n channel: Channel | Channel[],\n update: (data: unknown) => unknown,\n options: { inert?: boolean } = {}\n ): Promise<SubscriptionHandle | SubscriptionHandle[]> {\n await this.init();\n const channels = ([] as Channel[]).concat(channel);\n\n if (this.cometd?.getStatus() !== CONNECTED) {\n await this.handshake();\n }\n const { session } = identification;\n const subscriptionProps = !session ? {} :\n { ext: { [AUTH_TOKEN_KEY]: session.token } };\n\n const handleCometdUpdate = ({ data }: ChannelUpdate) => {\n // TODO -- figure out why there's ambiguity here and try to remove it\n data = typeof data === 'string' ? JSON.parse(data) : data;\n return update(data);\n };\n\n const promises: Promise<SubscriptionHandle>[] = [];\n this.cometd.batch(() => channels.forEach(({ path }) => promises.push(new Promise((resolve, reject) => {\n const subscription = this.cometd.subscribe(path, handleCometdUpdate, subscriptionProps, (subscribeReply: SubscribeMessage) => {\n if (subscribeReply.successful) {\n this.subscriptions.set(subscription.channel, subscription);\n resolve(subscription);\n return;\n }\n\n const errorMessage = subscribeReply.error ?? '';\n const error = new Fault({\n status: errorMessage.includes('403') ? UNAUTHORIZED : undefined,\n message: errorMessage,\n information: {\n code: 'COMETD_ERROR',\n ...subscribeReply,\n },\n });\n\n if (options.inert) {\n reject(error);\n return;\n }\n\n const retry = () => this.add(channel, update, { inert: true });\n try {\n const result = errorManager.handle<SubscriptionHandle | SubscriptionHandle[]>(error, retry);\n const sub = Array.isArray(result) ? result[0] : result;\n resolve(sub);\n } catch (e) {\n reject(e);\n }\n });\n }))));\n return promises.length === 1 ?\n Promise.all(promises).then(([res]) => res) :\n Promise.all(promises);\n }\n\n async publish(\n channel: Channel | Channel[],\n content: Record<string, unknown>,\n options: { inert?: boolean } = {}\n ) {\n await this.init();\n const channels = ([] as Channel[]).concat(channel);\n\n if (this.cometd.getStatus() !== CONNECTED) {\n await this.handshake();\n }\n const { session } = identification;\n const publishProps = {\n ext: session ? { [AUTH_TOKEN_KEY]: session.token } : undefined,\n };\n const promises: Promise<Message>[] = [];\n this.cometd.batch(() => channels.forEach(({ path }) => promises.push(new Promise((resolve, reject) => {\n this.cometd.publish(path, content, publishProps, (publishReply: Message) => {\n if (publishReply.successful) {\n resolve(publishReply);\n return;\n }\n\n const errorMessage = publishReply.error ?? '';\n const error = new Fault({\n status: errorMessage.includes('403') ? UNAUTHORIZED : undefined,\n message: errorMessage,\n information: {\n code: 'COMETD_ERROR',\n ...publishReply,\n },\n });\n\n if (options.inert) {\n reject(error);\n return;\n }\n\n const retry = () => this.publish(channel, content, { inert: true });\n try {\n const result = errorManager.handle<Message | Message[]>(error, retry);\n const message = Array.isArray(result) ? result[0] : result;\n resolve(message);\n } catch (e) {\n reject(e);\n }\n });\n }))));\n return promises.length === 1 ?\n Promise.all(promises).then(([res]) => res) :\n Promise.all(promises);\n }\n\n async remove(subscription: SubscriptionHandle) {\n await this.init();\n this.subscriptions.delete(subscription.channel);\n return new Promise((resolve, reject) => this.cometd.unsubscribe(subscription, (unsubscribeReply: Message) => {\n if (unsubscribeReply.successful) {\n resolve(unsubscribeReply);\n }\n const errorMessage = unsubscribeReply.error ?? '';\n const error = new Fault({\n status: errorMessage.includes('403') ? UNAUTHORIZED : undefined,\n message: errorMessage,\n information: {\n code: 'COMETD_ERROR',\n ...unsubscribeReply,\n },\n });\n reject(error);\n /* Not using error handling here yet -- should we? */\n }));\n }\n\n async empty() {\n await this.init();\n const promises: Promise<unknown>[] = [];\n this.cometd.batch(() => this.subscriptions.forEach((subscription) => {\n promises.push(this.remove(subscription));\n }));\n return Promise.all(promises);\n }\n}\nconst cometdAdapter = new CometdAdapter();\nexport default cometdAdapter;\n\n","import type { RoutingOptions } from '../utils/router';\nimport type { Session } from '../utils/identification';\n\nimport { Router, identification } from '../utils';\nimport cometdAdapter from './cometd';\n\n\ninterface UserCredentials {\n handle: string,\n password: string,\n groupKey?: string,\n}\ninterface AppCredentials {\n secretKey: string,\n}\n\n/**\n * Run API adapters -- use this to create, update, delete, and manage your runs\n * @namespace authAdapter\n */\n\n/**\n * Logs out of current Epicenter session.\n * @example\n * epicenter.authAdapter.logout()\n * @returns promise resolving to successful logout\n */\nexport async function logout(): Promise<void> {\n identification.session = undefined;\n await cometdAdapter.disconnect();\n}\n\nexport async function login(\n credentials: UserCredentials | AppCredentials,\n optionals: { objectType?: string } & RoutingOptions = {}\n): Promise<Session> {\n const { objectType, ...routingOptions } = optionals;\n let payload;\n if (Object.prototype.hasOwnProperty.call(credentials, 'handle')) {\n const { handle, password, groupKey } = credentials as UserCredentials;\n payload = { objectType: objectType ?? 'user', handle, password, groupKey: groupKey || undefined };\n }\n if (Object.prototype.hasOwnProperty.call(credentials, 'secretKey')) {\n const { secretKey } = credentials as AppCredentials;\n payload = { objectType: objectType ?? 'account', secretKey };\n }\n const session = await new Router()\n .post('/authentication', {\n inert: true,\n includeAuthorization: false,\n body: payload,\n ...routingOptions,\n }).then(({ body }) => body);\n await logout();\n identification.session = session;\n return session;\n}\n\n/**\n * Regenerates your epicenter session with the appropriate context. Allows users to update their session to the correct group, and admins to update their session with the correct account name. Will fail if the user/admin does not already belong to the group/account.\n * @example\n * // Changes the current user session to have a group context associated with the provided key\n * epicenter.authAdapter.regenerate('00000165ad4e6a3cd22b993340b963820239');\n * // Changes the current admin session to use the account context for the 'acme' account.\n * epicenter.authAdapter.regenerate('acme', { objectType: 'admin' });\n * @param groupOrAccount Group key or account name\n * @param [optionals] Optional parameters\n * @param [optionals.objectType] The object type to regenerate for. Uses objectType: 'user' by default.\n * @returns promise resolving to the new session object\n */\nexport async function regenerate(\n groupOrAccount: string,\n optionals: {\n objectType?: string,\n } & RoutingOptions = {}\n): Promise<Session> {\n const {\n objectType = 'user',\n accountShortName,\n ...routingOptions\n } = optionals;\n\n const session = await new Router()\n .patch('/authentication', {\n accountShortName: objectType === 'admin' ?\n groupOrAccount :\n accountShortName,\n body: {\n objectType,\n groupKey: objectType === 'user' ?\n groupOrAccount :\n undefined,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n\n await logout();\n identification.session = session;\n return session;\n}\n\nexport async function sso(\n optionals: RoutingOptions = {},\n): Promise<Session> {\n const session = await new Router()\n .get('/registration/sso', optionals)\n .then(({ body }) => body);\n\n identification.session = session;\n return session;\n}\n\nexport async function getSession(): Promise<Session> {\n const { body } = await new Router().get('/authentication');\n identification.session = body;\n return body;\n}\n\nexport function getLocalSession(): Session | undefined {\n return identification.session;\n}\n\nexport function setLocalSession(session: Session): Session {\n return identification.session = session;\n}\n\n/**\n * Sends a link to reset a user's password to their email\n * @example\n * const subject = 'Please reset your password for the Acme simulation';\n * const url = 'https://forio.com/app/acme/simulations';\n * const handle = 'testUser@test.com'\n * epicenter.authAdapter.resetPassword(handle, { redirectURL, subject });\n * @param handle Handle that user would use to login\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.redirectURL] Url to redirect to after password reset is completed. Must be in the forio domain otherwise an error will be thrown\n * @param [optionals.subject] The subject of the email that will be sent\n * @returns promise that resolves to undefined (indicating success)\n */\nexport async function resetPassword(\n handle: string,\n optionals: {\n redirectURL?: string,\n subject?: string,\n } & RoutingOptions = {}\n): Promise<void> {\n const {\n redirectURL, subject,\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .post(`/authentication/password/user/${handle}`, {\n ...routingOptions,\n body: {\n redirectUrl: redirectURL,\n subject,\n },\n })\n .then(({ body }) => body);\n}\n\nexport async function verify(\n token: string,\n optionals: RoutingOptions = {},\n): Promise<Session> {\n return await new Router()\n .get('/verification', {\n authorization: `Bearer ${token}`,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n","import type { RoutingOptions } from '../utils/router';\nimport type { GenericScope } from '../utils/constants';\n\nimport fetch from 'cross-fetch';\nimport { Fault, Router, ROLE } from '../utils';\n\ninterface AssetScope extends GenericScope {\n userKey?: string,\n}\n\ninterface Asset {\n file: string,\n address: {\n projectShortName: string,\n groupName: string,\n accountShortName: string,\n worldKey: string,\n episodeName: string,\n },\n scope: AssetScope,\n}\n\ninterface AssetTicket {\n url: string,\n}\n\n\nexport async function create(\n file: string,\n scope: AssetScope,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: number,\n } & RoutingOptions = {}\n): Promise<AssetTicket> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n readLock, writeLock, ttlSeconds,\n ...routingOptions\n } = optionals;\n return await new Router()\n .post('/asset', {\n body: {\n file,\n scope: {\n scopeBoundary,\n scopeKey,\n userKey,\n },\n permit: {\n readLock: readLock ?? ROLE.USER,\n writeLock: writeLock ?? ROLE.USER,\n },\n ttlSeconds,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function update(\n file: string,\n scope: AssetScope,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: number,\n } & RoutingOptions = {}\n): Promise<AssetTicket> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n readLock, writeLock, ttlSeconds,\n ...routingOptions\n } = optionals;\n return await new Router()\n .patch('/asset', {\n body: {\n file,\n scope: {\n scopeBoundary,\n scopeKey,\n userKey,\n },\n permit: {\n readLock: readLock ?? ROLE.USER,\n writeLock: writeLock ?? ROLE.USER,\n },\n ttlSeconds,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function remove(\n assetKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n return await new Router()\n .delete(`/asset/${assetKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function removeFromScope(\n scope: AssetScope,\n optionals: RoutingOptions = {}\n): Promise<void> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const uriComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .delete(`/asset/in/${scopeBoundary}/${scopeKey}${uriComponent}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function get(\n assetKey: string,\n optionals: RoutingOptions = {}\n): Promise<Asset> {\n const { server, accountShortName, projectShortName } = optionals;\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .get(`/asset/${assetKey}`)\n .then(({ body }) => body);\n}\n\nexport async function list(\n scope: AssetScope,\n optionals: {\n filter?: string,\n } & RoutingOptions = {}\n): Promise<Asset[]> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n filter,\n ...routingOptions\n } = optionals;\n const uriComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/asset/in/${scopeBoundary}/${scopeKey}${uriComponent}/${filter ?? '*'}`, routingOptions)\n .then(({ body }) => body);\n}\n\nexport async function getURL(\n assetKey: string,\n optionals: RoutingOptions = {}\n): Promise<string> {\n return await new Router()\n .get(`/asset/url/${assetKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function getURLWithScope(\n file: string,\n scope: AssetScope,\n optionals: RoutingOptions = {}\n): Promise<string> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const uriComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/asset/url/with/${scopeBoundary}/${scopeKey}${uriComponent}/${file}`, optionals)\n .then(({ body }) => body);\n}\n\nconst CONFLICT = 409;\nexport async function store(\n file: File,\n scope: AssetScope,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: number,\n overwrite?: boolean,\n fileName?: string,\n } & RoutingOptions = {}\n): Promise<void> {\n const { overwrite, fileName, ...remaining } = optionals;\n const name = fileName ?? file.name;\n let presignedUrl = '';\n try {\n const response = await create(name, scope, remaining);\n presignedUrl = response.url;\n } catch (error) {\n if (error instanceof Fault) {\n const shouldUpdate = error.status === CONFLICT && overwrite;\n if (!shouldUpdate) throw error;\n const response = await update(name, scope, remaining);\n presignedUrl = response.url;\n } else {\n throw error;\n }\n }\n await fetch(presignedUrl, { method: 'PUT', body: file });\n return;\n}","import type { RoutingOptions } from '../utils/router';\nimport { Router } from 'utils/index';\n\nenum ENCODING {\n HEX = 'HEX',\n BASE_64 = 'BASE_64',\n}\n\n/**\n * Sends an email to an individual user; available to participants\n * @example\n * //Sends an email with a smiley face png attachment\n * const groupKey = epicenter.authAdapter.getLocalSession().groupKey;\n * const subject = \"check out this drawing!\"\n * const body = \"I hope you enjoy this smiley face!\"\n * const attachements = [{\n * encoding: 'BASE_64',\n * name: 'testPic',\n * contentType: 'image/png',\n * data: 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAIxJREFUWEdjZBhgwDjA9jMQ5YAvzmb/efaewquWGDXYPDvqgNEQGA2B0RAYGiFAy+KaqBAYdcDICgFQtQryMaHql1qhgjURklu3IzuKWDNwOoCSUCAlFHFmQ2J9gB4VpFgO0kvVZhaplhPlAJgPCSVKciwn6ACY5TDD8aV8Qg7EpXe0KB4NgdEQGA0BAF7VgCFTeobfAAAAAElFTkSuQmCC',\n * }];\n *\n * // Sends an email to the address associated with the provided user key, sender will be seen as \"System\"\n * epicenter.emailAdapter.sendEmail(groupKey, '000001796733eef0842f4d6d960997018a3b', subject, body, { attachments });\n * // Sends an email to the address associated with the provided user key, sender will be seen as be the address provided by the \"from\" field\n * epicenter.emailAdapter.sendEmail(groupKey, '000001796733eef0842f4d6d960997018a3b', subject, body, { attachments, from: 'sender@test.com' });\n * // Sends an email to the address defined at \"replyTo\", sender will be seen as be the address provided by the \"from\" field\n * epicenter.emailAdapter.sendEmail(groupKey, '000001796733eef0842f4d6d960997018a3b', subject, body, { attachments, from: 'sender@test.com', replyTo: 'receiver@test.com' });\n * // Sends an email to the address associated with the provided user key, sender will be seen as the user associated with the \"fromUserKey\"\n * epicenter.emailAdapter.sendEmail(groupKey, '000001796733eef0842f4d6d960997018a3b', subject, body, { attachments, fromUserKey: '000001796733eef0842f4d6d960997018a33' });\n * @param groupKey The groupKey in which the email target user exists\n * @param userKey The unique userKey for the email target user\n * @param subject The subject line for the email.\n * @param emailBody The body for the email\n * @param [optionals] Optional parameters\n * @param [optionals.familyNameFirst] Specifies whether email target's family name will come before their given name. Defaults to false.\n * @param [optionals.html] Whether to treat the body as HTML (true) or as plain text (false). Defaults to false.\n * @param [optionals.body] The content of the email.\n * @param [optionals.from] The email address from which the message will appear to have been sent from. Will be overriden by fromUserKey.\n * @param [optionals.replyTo] The email address that will be replyed to by the recipient. Must be used in conjunction with optionals.from.\n * @param [optionals.fromUserKey] The userKey from which the email will appear to have been sent. The default response address will also be this email.\n * @param [optionals.attachments] An array of (binary) objects to include as attachments. All four properties must be included.\n * @param [optionals.attachments[].encoding] A string specifying the encoding method. See ENCODING for possible values.\n * @param [optionals.attachments[].data] A string containing the data for the attachment.\n * @param [optionals.attachments[].name] A string containing the name of the attachment.\n * @param [optionals.attachments[].contentType] A string specifying the attachment MIME Type.\n * @returns undefined indicating success\n */\nexport async function sendEmail(\n groupKey: string,\n userKey: string,\n subject: string,\n emailBody: string,\n optionals: {\n familyNameFirst?: string,\n html?: boolean,\n body?: string,\n from?: string,\n replyTo?: string,\n fromUserKey?: string,\n attachments?: {\n encoding: keyof typeof ENCODING,\n data: string,\n name: string,\n contentType: string,\n }[]\n } & RoutingOptions = {}\n): Promise<void> {\n const { accountShortName, projectShortName, server, familyNameFirst, html, attachments, from, replyTo, fromUserKey } =\n optionals;\n\n let fromString = '';\n if (fromUserKey) {\n fromString += `/as/${fromUserKey}`;\n } else if (from) {\n fromString += `/from/${from}`;\n if (replyTo) {\n fromString += `/${replyTo}`;\n }\n }\n\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .post(`/email/user/${groupKey}/${userKey}${fromString}`, {\n body: {\n subject,\n body: emailBody,\n familyNameFirst,\n html,\n attachments,\n },\n })\n .then(({ body }) => body);\n}\n\n/**\n * Sends an email to an individual admin (someone with epicenter account); Requires support level authentication\n * @param adminKey The unique adminKey for the email target\n * @param subject The subject line for the email.\n * @param [optionals] Optional parameter\n * @param [optionals.familyNameFirst] Specifies whether email target's family name will come before their given name. Defaults to false.\n * @param [optionals.html] Whether to treat the body as HTML (true) or as plain text (false). Defaults to false.\n * @param [optionals.body] The content of the email.\n * @param [optionals.attachments] An array of (binary) objects to include as attachments. All four properties must be included.\n * @param [optionals.attachments[].encoding] A string specifying the encoding method. See ENCODING for possible values.\n * @param [optionals.attachments[].data] A string containing the data for the attachment.\n * @param [optionals.attachments[].name] A string containing the name of the attachment.\n * @param [optionals.attachments[].contentType] A string specifying the attachment MIME Type.\n * @returns undefined indicating success\n */\nexport async function sendEmailToAdmin(\n adminKey: string,\n subject: string,\n emailBody: string,\n optionals: {\n familyNameFirst?: string,\n html?: boolean,\n body?: string,\n attachments?: {\n encoding: keyof typeof ENCODING,\n data: string,\n name: string,\n contentType: string,\n }\n } & RoutingOptions = {}\n): Promise<void> {\n const { accountShortName, projectShortName, server, familyNameFirst, html, attachments } =\n optionals;\n\n return await new Router()\n .withServer(server)\n .withAccountShortName(accountShortName)\n .withProjectShortName(projectShortName)\n .post(`/email/admin/${adminKey}`, {\n body: {\n subject,\n body: emailBody,\n familyNameFirst,\n html,\n attachments,\n },\n })\n .then(({ body }) => body);\n}","import type { UserSession } from 'utils/identification';\nimport type { RoutingOptions, Page, GenericSearchOptions } from 'utils/router';\nimport { identification, Router } from 'utils';\n\n\ninterface Episode {\n name: string,\n episodeKey: string,\n}\n\n/**\n * Create an episode.\n * @example\n * epicenter.episodeAdapter.create('myEpisode', 'myGroupName', {\n * runLimit: 20,\n * draft: true,\n * });\n * @param name Episode name\n * @param groupName Group to make the episode under\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.draft] Flag to indicate the episode is a draft (intended when used for settings scoping)\n * @param [optionals.runLimit] Optional argument to define the number of runs that can be made using this episode as the scope\n * @returns promise that resolves to the newly created episode\n */\nexport async function create(\n name: string,\n groupName: string,\n optionals: {\n draft?: boolean,\n runLimit?: number,\n } & RoutingOptions = {}\n): Promise<Episode> {\n const {\n draft, runLimit,\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/episode/${groupName}`, {\n body: { name, draft, runLimit },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n/**\n * Gets a specific episode.\n * @example\n * epicenter.episodeAdapter.get('000001796733eef0842f4d6d960997018a37');\n *\n * @param episodeKey The episode key\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to an episode\n */\nexport async function get(\n episodeKey: string,\n optionals: RoutingOptions = {}\n): Promise<Episode> {\n return await new Router()\n .get(`/episode/${episodeKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Gets episodes.\n * @example\n * const filter = [\n * 'name|=one|two', // searches only for episodes named 'one' or 'two'\n * 'draft=false', // searches only for episodes that aren't drafts\n * 'created>=2022-01-03T20:30:53.054Z', // looks for any episodes created after Jan 3rd 2022\n * // 'account.shortName=acme' // specifies the account, intended for admin use\n * // 'project.shortName=simulations' // specifies the project, intended for admin use\n * // 'group.name=my-group-name', // specifies a group name, intended for admin use\n * // 'group.groupKey=0000017dd3bf540e5ada5b1e058f08f20461', // specifies a group key, intended for admin use\n * ];\n * epicenter.episodeAdapter.query({\n * filter,\n * sort: ['+episode.created'], // sort all findings by the 'created' field (ascending)\n * first: 3, // page should start with the 4th item found (will default to 0)\n * max: 10, // page should only include the first 10 items\n * });\n * @param searchOptions Search options for the query\n * @param [searchOptions.filter] Filters for searching\n * @param [searchOptions.sort] Sorting criteria\n * @param [searchOptions.first] The starting index of the page returned\n * @param [searchOptions.max] The number of entries per page\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a page of episodes\n */\nexport async function query(\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Page<Episode>> {\n const { filter = [], sort = [], first = 0, max } = searchOptions;\n\n return await new Router()\n .withSearchParams({\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max,\n })\n .get('/episode/search', {\n paginated: true,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Gets episodes based on a group key\n * @example\n * epicenter.episodeAdapter.withGroup('0000017dd3bf540e5ada5b1e058f08f20461');\n *\n * @param groupKey The group key\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise resolving to a list of episodes\n */\nexport async function forGroup(\n groupKey: string,\n optionals: RoutingOptions = {}\n): Promise<Episode[]> {\n return await new Router()\n .get(`/episode/in/${groupKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Gets episode based on group name and episode name\n * @example\n * epicenter.episodeAdapter.withName('myEpisodeName');\n * @param name The episode name\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupName] Name of the group, if omitted will use the group name associated with the current session\n * @returns promise that resolves to an episode\n */\nexport async function withName(\n name: string,\n optionals: { groupName?: string } & RoutingOptions = {}\n): Promise<Episode> {\n const {\n groupName,\n ...routingOptions\n } = optionals;\n\n const session = identification.session as UserSession;\n return await new Router()\n .get(`/episode/with/${groupName ?? session?.groupName}/${name}`, routingOptions)\n .then(({ body }) => body);\n}\n\n/**\n * Deletes an episode\n * @example\n * epicenter.episodeAdapter.remove('000001796733eef0842f4d6d960997018a3b');\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to undefined if successful\n */\nexport async function remove(\n episodeKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n return await new Router()\n .delete(`/episode/${episodeKey}`, optionals)\n .then(({ body }) => body);\n}\n","import type { UserSession } from '../utils/identification';\nimport type { RoutingOptions, Page, GenericSearchOptions } from '../utils/router';\nimport type { User } from './user';\n\nimport { Router, EpicenterError, identification, ROLE } from '../utils';\n\nenum AUGMENT {\n MEMBERS = 'MEMBERS',\n QUANTIZED = 'QUANTIZED',\n}\n\ninterface Pricing {\n amount: number\n}\n\ninterface FlightRecorder {\n start: number,\n stop: number,\n enabled: boolean,\n}\n\ninterface GroupUpdate {\n runLimit?: number,\n organization?: string,\n allowSelfRegistration?: boolean,\n flightRecorder?: FlightRecorder,\n event?: string,\n allowMembershipChanges?: boolean,\n pricing?: Pricing,\n startDate?: Date,\n expirationDate?: Date,\n capacity?: number,\n}\n\ninterface GroupPermission {\n available: boolean,\n objectType: 'group',\n role: keyof typeof ROLE,\n}\n\nexport interface Member extends GroupPermission {\n user: User,\n}\n\nexport interface Group extends GroupUpdate {\n name: string,\n groupKey: string,\n members?: Member[],\n}\n\n\n/**\n * Provides information on a particular Epicenter group.\n * @example\n * import { authAdapter, groupAdapter } from 'epicenter';\n * const session = authAdapter.getLocalSession();\n * // include members of the group in the response\n * const group = await groupAdapter.get(session.groupKey, { augment: 'MEMBERS' });\n * // include metrics relating to the group in the response\n * const group = await groupAdapter.get(session.groupKey, { augment: 'QUANTIZED' });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.augment] Specifies which additional information you'd like returned with the group\n * @param [optionals.groupKey] Group key, if omitted will attempt to use the group associated with the current session\n * @returns promise that resolves to a group\n */\nexport async function get(\n optionals: {\n augment?: keyof typeof AUGMENT,\n groupKey?: string,\n } & RoutingOptions = {}\n): Promise<Group> {\n const {\n groupKey, augment,\n ...routingOptions\n } = optionals;\n let uriComponent = '';\n if (augment === AUGMENT.MEMBERS) uriComponent = '/member';\n if (augment === AUGMENT.QUANTIZED) uriComponent = '/quantized';\n const session = identification.session as UserSession;\n return await new Router()\n .get(`/group${uriComponent}/${groupKey ?? session?.groupKey}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Deletes the group; available only to Epicenter admins\n * @example\n * epicenter.groupAdapter.destroy('0000017dd3bf540e5ada5b1e058f08f20461');\n * @param groupKey Key associated with group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to undefined if successful\n */\nexport async function destroy(\n groupKey: string,\n optionals: RoutingOptions = {},\n): Promise<void> {\n\n return await new Router()\n .delete(`/group/${groupKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Provides information on for all groups in the project\n * @example\n * const groups = await epicenter.groupAdapter.gather();\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.includeExpired] Indicates whether to include expired groups in the query\n * @returns promise that resolves to a list of groups\n */\nexport async function gather(\n optionals: { includeExpired?: boolean } & RoutingOptions = {}\n): Promise<Group[]> {\n const {\n includeExpired,\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .withSearchParams({ includeExpired })\n .get('/group', routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Updates fields for a particular group; available only to Epicenter admins.\n * @example\n * epicenter.groupAdapter.update('0000017dd3bf540e5ada5b1e058f08f20461', { event: 'Orientation Day' });\n * @param groupKey Key associated with group\n * @param update Attributes you wish to update\n * @param [update.runLimit] Defines the upper limit of runs allowed in the group\n * @param [update.organization] Name of the organization owning the group\n * @param [update.allowSelfRegistration] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.flightRecorder] Diagnostic tool for logging http requests for the server\n * @param [update.flightRecorder].start Start time (epoch time)\n * @param [update.flightRecorder].stop End time (epoch time)\n * @param [update.flightRecorder].enabled Enabled flag for the flight recorder\n * @param [update.event] Name of the event the group is playing for\n * @param [update.allowMembershipChanges] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.pricing] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.pricing].number TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.startDate] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [update.expirationDate] Date the group expires\n * @param [update.capacity] Defines the upper limit on the number of users allowed in the group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the updated group\n */\nexport async function update(\n groupKey: string,\n update: GroupUpdate,\n optionals: RoutingOptions = {}\n): Promise<Group> {\n const {\n runLimit, organization, allowSelfRegistration, flightRecorder,\n event, allowMembershipChanges, pricing,\n startDate, expirationDate, capacity,\n } = update;\n\n return await new Router()\n .patch(`/group/${groupKey}`, {\n body: {\n runLimit, organization, allowSelfRegistration, flightRecorder,\n event, allowMembershipChanges, pricing,\n startDate, expirationDate, capacity,\n },\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Creates a new group; available only to Epicenter admins\n * @example\n * epicenter.groupAdapter.create({\n * runLimit: 10,\n * name: 'my-group-name',\n * });\n * @param group Group object\n * @param group.name Group name (required)\n * @param [group.runLimit] Defines the upper limit on the number of runs allowed in the group\n * @param [group.organization] Name of the organization owning the group\n * @param [group.allowSelfRegistration] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [group.flightRecorder] Diagnostic tool for loggin http requests for the server\n * @param [group.flightRecorder.start] Start time (epoch time)\n * @param [group.flightRecorder.stop] End time (epoch time)\n * @param [group.flightRecorder.enabled] Enabled flag for the flight recorder\n * @param [group.event] Name of the event the group is playing for\n * @param [group.allowMembershipChanges] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [group.pricing] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [group.startDate] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [group.expirationDate] Date the group expires\n * @param [group.capacity] Defines the upper limit on the number of users allowed in the group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the newly created group\n */\nexport async function create(\n group: Group,\n optionals: RoutingOptions = {}\n): Promise<Group> {\n const {\n name, runLimit, organization, allowSelfRegistration,\n flightRecorder, event, allowMembershipChanges, pricing,\n startDate, expirationDate, capacity,\n } = group;\n if (!name) throw new EpicenterError('Cannot create a group with no name');\n return await new Router()\n .post('/group', {\n body: {\n name, runLimit, organization, allowSelfRegistration,\n flightRecorder, event, allowMembershipChanges, pricing,\n startDate, expirationDate, capacity,\n },\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Queries for groups\n * @example\n * import { groupAdapter } from 'epicenter';\n * const filter = [\n * 'name|=group1|group2', // look for groups whose name is 'group1' or 'group2'\n * 'groupKey=0000017dd3bf540e5ada5b1e058f08f20461', // look for groups with the specific group key\n * 'approximateMemberCount>30', // look for groups larger than 30\n * 'startDate<2022-01-03T20:30:53.054Z', // look for groups with start date before Jan 3rd 2022\n * 'expirationDate<2022-01-03T20:30:53.054Z', // look for groups with expiration date before Jan 3rd 2022\n * // 'account.shortName=acme', // specifies account, intended for admin use\n * // 'project.shortName=simulations', // specifies project, intended for admin use\n * ];\n * groupAdapter.query({\n * filter,\n * sort: ['+group.name'] // sort all findings by group name ascending (lexigraphically)\n * first: 3, // page should start with the 4th item found (will default to 0)\n * max: 10, // page should only include the first 10 items\n * });\n * @param searchOptions Search options for the query\n * @param [searchOptions.filter] Filters for searching\n * @param [searchOptions.sort] Sorting criteria\n * @param [searchOptions.first] The starting index of the page returned\n * @param [searchOptions.max] The number of entries per page\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a page of groups\n */\nexport async function query(\n searchOptions: { quantized?: boolean } & GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Page<Group>> {\n const { filter = [], sort = [], first, max, quantized } = searchOptions;\n\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/group${quantized ? '/quantized' : ''}/search`, {\n paginated: true,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n/** DEPRECATED -- use groupAdapter.query instead */\nexport async function search(\n optionals: { quantized?: boolean } & GenericSearchOptions & RoutingOptions = {}\n): Promise<Page<Group>> {\n console.warn('DEPRECATION WARNING: groupAdapter.search is deprecated and will be removed with the next release. Use groupAdapter.query instead.');\n const { filter = [], sort = [], first, max, quantized, ...routingOptions } = optionals;\n const searchOptions = { filter, sort, first, max, quantized };\n return await query(searchOptions, routingOptions);\n}\n\n\n/**\n * Retrieves a group with given group name\n * @example\n * epicenter.groupAdapter.withGroupName('my-group-name');\n * @param name Name associated with the group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a group\n */\nexport async function withGroupName(\n name: string,\n optionals: RoutingOptions = {}\n): Promise<Group> {\n\n return await new Router()\n .get(`/group/with/${name}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Retrieves the list of groups a particular user is in; intended for admin use\n * @example\n * epicenter.groupAdapter.forUser(\n * '000001796733eef0842f4d6d960997018a3b', // get groups where this user is a member of\n * { role: ['FACILITATOR'] } // where this user is a facilitator in the group\n * );\n * @param userKey Name associated with the group\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.includeExpired] Indicates whether to include expired groups in the query\n * @param [optionals.includeAllMembers] Indicates whether to include the other members in the group (by default, only the requested user appears)\n * @param [optionals.role] Role or list of possible roles the user holds in the group\n * @returns promise that resolves to a list of groups\n */\nexport async function forUser(\n userKey: string,\n optionals: {\n includeAllMembers?: boolean,\n includeExpired?: boolean,\n role?: string | string[],\n } & RoutingOptions = {},\n): Promise<Group[]> {\n const {\n includeExpired, includeAllMembers, role,\n ...routingOptions\n } = optionals;\n const isMultiple = Array.isArray(role) && role.length > 0;\n const roleList = isMultiple ? role : [role];\n const searchParams = {\n includeExpired,\n includeAllMembers,\n role: role ? roleList : undefined,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/group/member/for/${userKey}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Retrieves the list of groups particular to the current session\n * @example\n * const groups = await epicenter.groupAdapter.getSessionGroups();\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.includeExpired] Indicates whether to include expired groups in the query\n * @param [optionals.includeAllMembers] Indicates whether to include the other members in the group (by default, only the requested user appears)\n * @param [optionals.role] Role or list of possible roles the user holds in the group\n * @returns promise that resolves to a list of groups\n */\nexport async function getSessionGroups(\n optionals: {\n includeAllMembers?: boolean,\n includeExpired?: boolean,\n role?: string | string[],\n } & RoutingOptions = {},\n): Promise<Group[]> {\n const {\n includeExpired, role,\n ...routingOptions\n } = optionals;\n const isMultiple = Array.isArray(role) && role.length > 0;\n const roleList = isMultiple ? role : [role];\n const searchParams = {\n includeExpired,\n role: role ? roleList : undefined,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get('/group/member', routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Self-application for membership in a group; will only work if the group has the self-registration setting turned on.\n * @example\n * epicenter.groupAdapter.register('0000017dd3bf540e5ada5b1e058f08f20461');\n * @param groupKey Key associated with group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves in a group\n */\nexport async function register(\n groupKey: string,\n optionals: RoutingOptions = {}\n): Promise<Group> {\n\n return await new Router()\n .post(`/group/selfRegistration/${groupKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\ntype UserInput = string | { userKey: string, role?: keyof typeof ROLE, available?: boolean };\n/**\n * Adds user(s) to the group\n * @example\n * epicenter.groupAdapter.addUser('000001796733eef0842f4d6d960997018a3b');\n * epicenter.groupAdapter.addUser([{\n * userKey: '000001796733eef0842f4d6d960997018a3b',\n * role: 'REVIEWER',\n * available: false,\n * }]);\n * @param usersInput List of user keys or user input objects (properties defined below)\n * @param usersInput[].userKey User key\n * @param [usersInput[].role] User's role -- defaults to PARTICIPANT if unset; See [ROLE](#ROLE) for all types\n * @param [usersInput[].available] Indicates whether or not the user is 'active' (for semantic labeling) -- defaults to true if unset\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupKey] Group key to do indicate the group; will default to the group key associated with the current session\n * @returns promise that resolves to the group the user was added to\n */\nexport async function addUser(\n usersInput: UserInput | UserInput[],\n optionals: { groupKey?: string } & RoutingOptions = {}\n):Promise<Group> {\n const { groupKey, ...routingOptions } = optionals;\n\n const users = Array.isArray(usersInput) ? usersInput : [usersInput];\n const session = identification.session as UserSession;\n return await new Router()\n .post(`/group/member/${groupKey ?? session?.groupKey}`, {\n body: users.map((u) => {\n const userKey = typeof u === 'string' ? u : u.userKey;\n const role = typeof u === 'string' ? ROLE.PARTICIPANT : u.role;\n const available = typeof u === 'string' ? true : u.available;\n\n return {\n role,\n userKey,\n objectType: 'group',\n available: available ?? true,\n };\n }),\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Updates a user's group membership information\n * @example\n * epicenter.groupAdapter.updateUser('000001796733eef0842f4d6d960997018a3b', { role: 'LEADER' });\n * @param userKey User key\n * @param update Object containing the updates to a user's group membership information\n * @param [update.role] User's role; See [ROLE](#ROLE) for all types\n * @param [update.available] Indicates whether or not the user is 'active' (for semantic labeling)\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the membership information that was updated\n */\nexport async function updateUser(\n userKey: string,\n update: { role?: keyof typeof ROLE, available?: boolean },\n optionals: { groupKey?: string } & RoutingOptions = {}\n):Promise<GroupPermission> {\n const { role, available } = update;\n const { groupKey, ...routingOptions } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .patch(`/group/member/${groupKey ?? session?.groupKey}/${userKey}`, {\n body: {\n objectType: 'group',\n role,\n available,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Removes user(s) from the group\n * @example\n * const userKeys = members.map(({ userKey }) => userKey);\n * epicenter.groupAdapter.removeUsers(userKeys)\n * @param userKey Key associated with the user or an array of user keys to remove from group\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupKey] Group key for the group you want to remove from; defaults to the group in the current session\n * @returns promise that resolves to undefined when successful\n */\nexport async function removeUser(\n userKey: string | string[],\n optionals: { groupKey?: string } & RoutingOptions = {}\n): Promise<void> {\n const { groupKey, ...routingOptions } = optionals;\n const hasMultiple = Array.isArray(userKey) && userKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${userKey.length === 1 ? userKey[0] : userKey}`;\n const searchParams = hasMultiple ? { userKey } : undefined;\n const session = identification.session as UserSession;\n return await new Router()\n .withSearchParams(searchParams)\n .delete(`/group/member/${groupKey ?? session?.groupKey}${uriComponent}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\nexport async function statusUpdate(\n code: string,\n message: string,\n optionals: { groupKey?: string } & RoutingOptions = {}\n): Promise<Group> {\n const { groupKey, ...routingOptions } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .patch(`/group/status/${groupKey ?? session?.groupKey}`, {\n body: { code, message },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n","import type { UserSession } from 'utils/identification';\nimport type { RoutingOptions, GenericSearchOptions } from 'utils/router';\nimport type { GenericScope } from 'utils/constants';\n\nimport { identification, Router } from 'utils';\n\n\ninterface Score {\n name: string,\n quantity: number,\n}\n\ninterface Tag {\n label: string,\n content: string,\n}\n\ninterface Leaderboard {\n lastUpdated: Date,\n}\n\n\n/**\n * Creates a leaderboard entry.\n * @example\n * import { leaderboardAdapter } from 'epicenter';\n * const leaderboard = await leaderboardAdapter.post(\n * 'class-23-leaderboard',\n * [{ name: 'total', quantity: 20 }, { name: 'extraCredit', quantity: 2 }],\n * { scopeBoundary: SCOPE_BOUNDARY.GROUP, scopeKey: '0000017dd3bf540e5ada5b1e058f08f20461' },\n * { tags: [{ label: 'role', content: 'doctor' }] }\n * );\n * @param collection Name of the leaderboard\n * @param scope Scope attached to the leaderboard entry; allows for scoping\n * @param scope.scopeBoundary Can be a couple things, commonly group, project, episode, or world\n * @param scope.scopeKey Key of the resource defined by the scope boundary\n * @param scope.userKey User key for the user creating the entry, if omitted will use the one in current session\n * @param scores List of score objects\n * @param scores[].name Name of the score\n * @param scores[].quantity Value of the score\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @params [optionals.tags] Tags for the leaderboard entry, helps to provide another layer of scope if needed\n * @returns promise that resolves to the leaderboard entry created\n */\nexport async function update(\n collection: string,\n scope: { userKey?: string } & GenericScope,\n scores: Score[],\n optionals: { tags?: Tag[] } & RoutingOptions = {}\n): Promise<Leaderboard> {\n const { tags, ...routingOptions } = optionals;\n const { scopeBoundary, scopeKey, userKey } = scope;\n const session = identification.session as UserSession;\n return await new Router()\n .post('/leaderboard', {\n body: {\n scope: {\n scopeBoundary,\n scopeKey,\n userKey: userKey ?? session?.userKey,\n },\n collection,\n scores, tags,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n/**\n * Gathers leaderboard information; not paginable (hence named 'list' and not 'query'). Technically there is no leader\n * @example\n * import { leaderboardAdapter } from 'epicenter';\n * const leaderboard = await leaderboardAdapter.list('myLeaderboard', scope, {\n * filter: [\n * 'tag.role=doctor', // look for leaderboard entries tagged with role=doctor\n * 'score.total>0' // where the users scored a total higher than 0\n * ],\n * sort: ['+score.total'], // sort results by 'total' in ascending order,\n * first: 0,\n * max: 20 // retrieve only the first 20 entries\n * });\n * @param collection Name of the leaderboard\n * @param scope Scope attached to the leaderboard entry; allows for scoping\n * @param scope.scopeBoundary Can be a couple things, commonly group, project, episode, or world\n * @param scope.scopeKey Key of the resource defined by the scope boundary\n * @param searchOptions Search options for the query\n * @param [searchOptions.filter] Filters for searching\n * @param [searchOptions.sort] Sorting criteria\n * @param [searchOptions.first] The starting index of the list returned\n * @param [searchOptions.max] The maximum number of entries in the list\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to to a list of leaderboard entries\n */\nexport async function list(\n collection: string,\n scope: GenericScope,\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Leaderboard[]> {\n const { scopeBoundary, scopeKey } = scope;\n const { filter = [], sort = [], first, max } = searchOptions;\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/leaderboard/${scopeBoundary}/${scopeKey}/${collection}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function get(\n collection: string,\n scope: GenericScope,\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Leaderboard[]> {\n console.warn('DEPRECATION WARNING: leaderboardAdapter.get is deprecated and will be removed with the next release. Use leaderboardAdapter.list instead.');\n return await list(collection, scope, searchOptions, optionals);\n}","import type { RoutingOptions } from '../utils/router';\nimport type { User } from './user';\n\nimport Router from '../utils/router';\nimport cometdAdapter from './cometd';\n\n\ninterface Presence {\n lastUpdated: number,\n ttlSeconds: number,\n groupRole: 'FACILITATOR' | 'REVIEWER' | 'LEADER' | 'PARTICIPANT',\n user: User,\n}\n\n\n/**\n * Makes a connection request to the cometd server; effectively marking the user as online. This isn't required to be called in order to be considered online. Subscribe to a CometD channel will do the same as well. This is just a convenience method for when you don't need to utilize the channels expect specifically for presence.\n * Using [logout](#authAdapter-logout) will automatically disconnect for you.\n * @example\n * epicenter.presenceAdapter.connect()\n * @returns promise indicating whether or not the connection was successful\n */\nexport async function connect(): Promise<void> {\n await cometdAdapter.handshake();\n return;\n}\n\n\n/**\n * Retrieves the presence information for a particular group\n * @example\n * epicenter.presenceAdapter.forGroup('0000017dd3bf540e5ada5b1e058f08f20461');\n * @param groupKey Key associated with group\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a list of users online\n */\nexport async function forGroup(\n groupKey: string,\n optionals: RoutingOptions = {}\n): Promise<Presence[]> {\n return await new Router()\n .get(`/presence/group/${groupKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Retrieves the presence information for a particular world\n * @example\n * epicenter.presenceAdapter.forWorld('0000017a445032dc38cb2cecd5fc13708314')\n * @param worldKey Key associated with world\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a list of users online\n */\nexport async function forWorld(\n worldKey: string,\n optionals: RoutingOptions = {},\n): Promise<Presence[]> {\n return await new Router()\n .get(`/presence/world/${worldKey}`, optionals)\n .then(({ body }) => body);\n}\n\n","import {Router} from 'utils/index';\n\nexport async function google(humanKey: string) {\n return await new Router()\n .withAccountShortName('epicenter')\n .withProjectShortName('manager')\n .post('/recaptcha/google', {\n body: {humanKey: humanKey},\n })\n .then(({body}) => body);\n}","import type { UserSession } from 'utils/identification';\nimport type { GenericScope } from 'utils/constants';\nimport type { RoutingOptions, Page, GenericSearchOptions } from 'utils/router';\n\nimport {\n Router, identification,\n ROLE, SCOPE_BOUNDARY, RITUAL,\n EpicenterError,\n} from 'utils';\n\n\ninterface ModelContext {\n version: string,\n}\ninterface ExecutionContext {\n version: string,\n}\n\ninterface ProcAction {\n name: string,\n arguments?: unknown[],\n objectType: 'execute',\n}\ninterface GetAction {\n name: string,\n objectType: 'get',\n}\ninterface SetAction {\n name: string,\n value: unknown,\n objectType: 'set',\n}\ntype Action =\n | ProcAction\n | GetAction\n | SetAction;\n\ninterface Run {\n runKey: string,\n variables?: Record<string, unknown>,\n}\n\ntype RunCreateOptions = {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ephemeral?: boolean,\n trackingKey?: string,\n modelContext?: ModelContext,\n executionContext?: ExecutionContext,\n} & RoutingOptions;\n\ntype RunStrategy =\n | 'reuse-across-sessions'\n | 'reuse-never'\n | 'reuse-by-tracking-key'\n | 'multiplayer'\n\n/**\n * Creates a run. By default, all runs are created with the user's ID (`userKey`) and user-only read-write permissions, except in the case of world-scoped runs. For more information on scopes,\n * @example\n * import { runAdapter, SCOPE_BOUNDARY } from 'epicenter';\n * runAdapter.create('model.py', {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: '0000017dd3bf540e5ada5b1e058f08f20461'\n * });\n * @param model Name of your model file\n * @param scope Scope associated with your run\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.readLock] Read permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.writeLock] Write permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.trackingKey] Tracking key\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by clone operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by clone operations.\n * @returns promise that resolves to the newly created run\n */\nexport async function create(\n model: string,\n scope: { userKey?: string } & GenericScope,\n optionals: RunCreateOptions = {},\n): Promise<Run> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n readLock, writeLock, ephemeral,\n trackingKey, modelContext, executionContext,\n ...routingOptions\n } = optionals;\n\n const { WORLD } = SCOPE_BOUNDARY;\n const { PARTICIPANT, USER } = ROLE;\n const defaultLock = scopeBoundary === WORLD ? PARTICIPANT : USER;\n const session = identification.session as UserSession;\n return await new Router()\n .post('/run', {\n body: {\n scope: {\n scopeBoundary,\n scopeKey,\n userKey: scopeBoundary === WORLD ?\n undefined :\n userKey ?? session?.userKey,\n },\n permit: {\n readLock: readLock || defaultLock,\n writeLock: writeLock || defaultLock,\n },\n morphology: 'MANY',\n trackingKey,\n modelFile: model,\n modelContext: modelContext || {/* Is not recorded for clone. Overrides model ctx2 file. */},\n executionContext: executionContext || {/* Affected by clone. Carries arguments for model file worker on model initialization */},\n ephemeral,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n/**\n * Clone a run\n * @param runKey Run key for the run you want to clone\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.trackingKey] Tracking key\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by clone operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by clone operations.\n * @returns promise that resolves to the cloned run\n */\nexport async function clone(\n runKey: string,\n optionals: {\n ephemeral?: boolean,\n trackingKey?: string,\n modelContext?: ModelContext,\n executionContext?: ExecutionContext,\n } & RoutingOptions = {}\n): Promise<Run> {\n const {\n ephemeral, trackingKey, modelContext = {}, executionContext = {},\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/run/clone/${runKey}`, {\n body: {\n trackingKey,\n modelContext,\n executionContext,\n ephemeral,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function restore(\n runKey: string,\n optionals: {\n ephemeral?: boolean,\n modelContext?: ModelContext,\n executionContext?: ExecutionContext,\n } & RoutingOptions = {}\n): Promise<Run> {\n const {\n ephemeral, modelContext = {}, executionContext = {},\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/run/restore/${runKey}`, {\n body: {\n modelContext,\n executionContext,\n ephemeral,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function rewind(\n runKey: string,\n steps: number,\n optionals: {\n ephemeral?: boolean,\n modelContext?: ModelContext,\n } & RoutingOptions = {}\n): Promise<Run> {\n const {\n ephemeral, modelContext = {},\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(`/run/rewind/${runKey}`, {\n body: {\n rewindCount: steps,\n modelContext,\n ephemeral,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function update(\n runKey: string,\n update: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n trackingKey?: string,\n marked?: boolean, /* analogous to v2's 'saved' */\n hidden?: boolean, /* analogous to v2's 'trashed' */\n closed?: boolean, /* Closed is a flag that means do not restore, the run is done, no more play */\n },\n optionals: RoutingOptions = {}\n): Promise<Run> {\n const { readLock, writeLock, trackingKey, marked, hidden, closed } = update;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const permit = (readLock || writeLock) ? { readLock, writeLock } : undefined;\n\n return await new Router()\n .withSearchParams(hasMultiple ? { runKey } : '')\n .patch(`/run${uriComponent}`, {\n body: {\n permit,\n trackingKey,\n marked,\n hidden,\n closed,\n },\n ...optionals,\n }).then(({ body }) => body);\n}\n\n\n/**\n * *Does not actually delete the run*. The run is instead removed from memory. This can be used as a means of preserving server CPUs, and should be used when you do not expect to perform any addtional actions that would bring the run back into memory. (TODO: see David for details; is it just operations that bring the run into memory? what about clone... etc.)\n * @example\n * epicenter.runAdapter.remove('00000173078afb05b4ae4c726637167a1a9e');\n * @param runKey Key associated with the run\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns promise that resolve to undefined if successful\n */\nexport async function remove(\n runKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n return await new Router()\n .delete(`/run/${runKey}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function get(\n runKey: string,\n optionals: RoutingOptions = {}\n): Promise<Run> {\n return await new Router()\n .get(`/run/${runKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Queries for runs.\n * @example\n * import { runAdapter } from 'epicenter';\n * runAdapter.query({\n * filter: [\n * 'var.foo|=1|2|3', // look for runs with a variable 'foo' with the values 1, 2, or 3\n * 'var.score>=24', // looks for runs with a variable 'score' higher than or equal to 24\n * 'var.certified*=true' // looks for runs where the variable 'certified' exists,\n * 'run.hidden=false', // where the run's 'hidden' attribute is false\n * 'meta.classification~=bar-*' // where the run metadata contains a 'classification' that begins with 'bar-',\n * 'meta.categorization~=*-baz' // where the run metadata contains a 'categorization' that does not end with '-baz',\n * ],\n * sort: ['+run.created'] // sort all findings by the 'created' field (ascending)\n * variables: ['foo', 'baz'], // include the run variables for 'foo' and 'baz' in the response\n * metadata: ['classification'] // include the run metadata for 'classification' in the response\n * });\n * @param model Name of your model file\n * @param searchOptions Search options\n * @param [searchOptions.scope.scopeBoundary] Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param [searchOptions.scope.scopeKey] Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [searchOptions.scope.userKey] User attached to scope if necessary\n * @param [searchOptions.filter] List of conditionals to filter for\n * @param [searchOptions.sort] List of values to sort by (applies only to run attributes)\n * @param [searchOptions.variables] List of variables to include with the runs found\n * @param [searchOptions.metadata] List of metadata to include with the runs found\n * @param [searchOptions.first] The index from which we collect our runs from\n * @param [searchOptions.max] The maximum number of runs to return (upper limit: 200)\n * @param [searchOptions.timeout] Number of seconds we're willing to wait for the response from the server\n * @param [searchOptions.includeEpisodes] Only used for the `run/in/groupName` endpoint\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to a page of runs\n */\nexport async function query(\n model: string,\n searchOptions: {\n timeout?: number,\n variables?: string[],\n metadata?: string[],\n scope?: { userKey?: string } & GenericScope,\n groupName?: string,\n episodeName?: string,\n includeEpisodes?: boolean,\n } & GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Page<Run>> {\n const {\n filter = [], sort = [], first, max, timeout, variables = [], metadata = [],\n scope, groupName, episodeName, includeEpisodes,\n } = searchOptions;\n const session = identification.session as UserSession;\n const uriComponent = scope ?\n `${scope.scopeBoundary}/${scope.scopeKey}` :\n `in/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`;\n if (scope?.userKey) filter.push(`run.userKey=${scope.userKey}`);\n\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n var: variables.join(';') || undefined,\n meta: metadata.join(';') || undefined,\n first, max, timeout, includeEpisodes,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/run/${uriComponent}/${model}`, {\n paginated: true,\n parsePage: (values: Run[]) => {\n return values.map((run) => {\n run.variables = variables.reduce((variableMap, key, index) => {\n // TODO -- add a test case to run.spec that makes sure it does not error if it receives run w/o 'variables'\n variableMap[key] = run.variables?.[index];\n return variableMap;\n }, {} as Record<string, unknown>);\n return run;\n });\n },\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\nexport async function introspect(\n model: string,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n\n return await new Router()\n .get(`/run/introspect/${model}`, optionals)\n .then(({ body }) => body);\n}\n\nexport async function operation(\n runKey: string | string[],\n name: string,\n args: unknown[] = [],\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<unknown> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout } : { ritual, timeout };\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n return await new Router()\n .withSearchParams(searchParams)\n .post(`/run/operation${uriComponent}`, {\n body: {\n name,\n arguments: args,\n objectType: 'execute', // TODO: remove this when platform fixes this so that it's not manually required\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nexport async function getVariables(\n runKey: string | string[],\n variables: string[],\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<Record<string, unknown> | Record<string, unknown>[]> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n const include = variables.join(';');\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout, include } : { ritual, timeout, include };\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n const mappify = (values: unknown[]) => variables.reduce((variableMap, key, index) => {\n variableMap[key] = values[index];\n return variableMap;\n }, {} as Record<string, unknown>);\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/run/variable${uriComponent}`, routingOptions)\n .then(({ body }) => {\n return (!hasMultiple ?\n mappify(body) :\n Object.keys(body).map((runKey) => ({\n runKey,\n variables: mappify(body[runKey]),\n }))\n );\n });\n}\n\nexport async function getVariable(\n runKey: string | string[],\n variable: string | string[],\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<unknown> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n\n if (Array.isArray(runKey) || Array.isArray(variable)) {\n const variables = Array.isArray(variable) ? variable : [variable];\n return getVariables(runKey, variables, optionals);\n }\n\n return await new Router()\n .withSearchParams({ timeout, ritual })\n .get(`/run/variable/${runKey}/${variable}`, routingOptions)\n .then(({ body }) => body);\n\n}\n/**\n * Updates model variables for the run\n * @param runKey Identifier for your run\n * @param update Object with the key-value pairs you would like to update in the model\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.timeout] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @param [optionals.ritual] TODO -- this does something, it's just that the frontend devs don't know what yet\n * @returns promise that resolve to an object with the variables & new values that were updated\n */\nexport async function updateVariables(\n runKey: string | string[],\n update: Record<string, unknown>,\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout } : { ritual, timeout };\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n return await new Router()\n .withSearchParams(searchParams)\n .patch(`/run/variable${uriComponent}`, {\n body: update,\n ...routingOptions,\n })\n .then(({ body }) => body);\n\n}\n\nexport async function getMetadata(\n runKey: string | string[],\n metadata: string[],\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n const include = metadata.join(';');\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout, include } : { ritual, timeout, include };\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/run/meta${uriComponent}`, routingOptions)\n .then(({ body }) => body);\n}\n\nexport async function updateMetadata(\n runKey: string | string[],\n update: Record<string, unknown>,\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout } : { ritual, timeout };\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n return await new Router()\n .withSearchParams(searchParams)\n .patch(`/run/meta${uriComponent}`, {\n body: update,\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\nexport async function action(\n runKey: string | string[],\n actionList: Action[],\n optionals: {\n timeout?: number,\n ritual?: keyof typeof RITUAL,\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n timeout, ritual,\n ...routingOptions\n } = optionals;\n const hasMultiple = Array.isArray(runKey) && runKey.length > 1;\n const uriComponent = hasMultiple ? '' : `/${runKey.length === 1 ? runKey[0] : runKey}`;\n const searchParams = hasMultiple ? { runKey, timeout } : { ritual, timeout };\n\n if (ritual !== RITUAL.EXORCISE && hasMultiple) {\n console.warn(`Detected ritual: ${ritual} usage with multiple runKeys; this not allowed. Defaulting to ritual: EXORCISE`);\n }\n\n return await new Router()\n .withSearchParams(searchParams)\n .post(`/run/action${uriComponent}`, {\n body: actionList,\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Returns the run associated with the given world key; brings the run into memory, if the run does not exist, it will create it.\n * @example\n * import { runAdapter } from 'epicenter';\n * const run = await runAdapter.retrieveFromWorld('0000017a445032dc38cb2cecd5fc13708314', 'model.py');\n * @param worldKey Key associated with the world you'd like a run from\n * @param model Name of model file you'd use to create the run if needed\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.readLock] Read permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.writeLock] Write permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.trackingKey] Tracking key\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by clone operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by clone operations.\n * @returns promise that resolves to the run retrieved from, or created for the world\n */\nexport async function retrieveFromWorld(\n worldKey: string,\n model: string,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ephemeral?: boolean,\n trackingKey?: string,\n modelContext?: ModelContext,\n executionContext?: ExecutionContext,\n } & RoutingOptions = {}\n): Promise<Run> {\n const {\n readLock, writeLock, ephemeral, trackingKey,\n modelContext, executionContext,\n ...routingOptions\n } = optionals;\n const { PARTICIPANT } = ROLE;\n\n return await new Router()\n .post(`/run/world/${worldKey}`, {\n body: {\n permit: {\n readLock: readLock || PARTICIPANT,\n writeLock: writeLock || PARTICIPANT,\n },\n morphology: 'MANY',\n trackingKey,\n modelFile: model,\n modelContext: modelContext || {},\n executionContext: executionContext || {},\n ephemeral,\n },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Removes the run associated with the given world key\n * @example\n * epicenter.runAdapter.removeFromWorld('0000017a445032dc38cb2cecd5fc13708314');\n * @param worldKey Key associated with the world\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to undefined when successful\n */\nexport async function removeFromWorld(\n worldKey: string,\n optionals: RoutingOptions = {},\n): Promise<void> {\n\n return await new Router()\n .delete(`/run/world/${worldKey}`, optionals)\n .then(({ body }) => body);\n}\n\n// TODO -- revisit the code below when considering reimplmenting v2 run strategies\n// async function serial(runKey: string, operations, optionals = {}) {\n// const normalizedOps = operations.map((item) => ({\n// name: typeof item === 'string' ? item : item.name,\n// params: item.params,\n// }));\n\n// //Perform all operations, sequentially\n// return normalizedOps.reduce((promise, { name, params }) => {\n// return promise.then(() => operation(runKey, name, params, optionals = {}));\n// }, Promise.resolve());\n// }\n\n/**\n * Queries for and/or creates a run, depending on the strategy provided.\n *\n * 'reuse-across-sessions' -- will get the most recent run for the given scope, creating it if it does not exist\n * 'reuse-never' -- will create a new run every time\n *\n * @example\n *\n * import { runAdapter } from 'epicenter';\n * runAdapter.getWithStrategy(\n * 'reuse-across-sessions',\n * 'model.py',\n * {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: '123456789',\n * },\n * );\n *\n * @param strategy Strategy to use when retrieving the run\n * @param model Name of your model file\n * @param scope Scope associated with your run\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.readLock] Read permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.writeLock] Write permission role; one of the strings defined in epicenter.ROLE\n * @param [optionals.ephemeral] Used for testing. If true, the run will only exist so long as its in memory; makes it so that nothing is written to the database, history, or variables.\n * @param [optionals.trackingKey] Tracking key\n * @param [optionals.modelContext] .ctx2 file overrides, this is not tracked by clone operations\n * @param [optionals.executionContext] Carries arguments for model file worker on model initialization. This is tracked by clone operations.\n * @returns promise that resolves to a run\n */\n\nexport async function getWithStrategy(\n strategy: RunStrategy,\n model: string,\n scope: GenericScope,\n optionals: {\n // initOperations?: Array<string | { name: string, params?: unknown[]}>,\n } & RunCreateOptions = {}\n): Promise<Run> {\n // const { initOperations = [] } = optionals;\n if (strategy === 'reuse-across-sessions') {\n const searchOptions = {\n scope,\n sort: ['-run.created'],\n max: 1,\n };\n const { values: [lastRun] } = await query(model, searchOptions);\n if (!lastRun) {\n const newRun = await create(model, scope, optionals);\n // await serial(newRun.runKey, initOperations, optionals = {});\n return newRun;\n }\n return lastRun;\n } else if (strategy === 'reuse-never') {\n const newRun = await create(model, scope, optionals);\n // await serial(newRun.runKey, initOperations, optionals = {});\n return newRun;\n } else if (strategy === 'reuse-by-tracking-key') {\n //TBD write out if needed\n //Platform plans to introduce run limits into episode scope, differing from v2's implementation of runLimit via 'reuse-by-tracking-key'\n } else if (strategy === 'multiplayer') {\n //TODO when multiplayer API is ready\n //check the current world for this end user, return the current run for that world (if there is none, create a run for the world)\n }\n throw new EpicenterError('Invalid run strategy.');\n}","import type { RoutingOptions } from 'utils/router';\nimport Router from 'utils/router';\n\ninterface Secret {\n password: string;\n}\n\nexport interface UserCreateView {\n [key: string]: unknown,\n handle: string;\n email?: string;\n givenName?: string;\n familyName?: string;\n active?: true;\n}\n\nexport interface User {\n lastUpdated: string,\n displayName: string,\n givenName: string,\n familyName: string,\n handle: string,\n created: string,\n detail: Record<string, unknown>,\n userId: number,\n userKey: string,\n objectType: 'external' | 'native',\n}\n\ninterface UploadOptions extends RoutingOptions {\n groupKey?: string,\n overwrite?: boolean,\n}\n\nexport interface NativeUserCreateView extends UserCreateView {\n objectType: 'native';\n secret: Secret;\n}\n\nexport interface ExternalUserCreateView extends UserCreateView {\n objectType: 'external';\n}\n\nexport async function uploadCSV(\n file: File,\n optionals: UploadOptions = {}\n): Promise<void> {\n const {\n overwrite,\n ...routingOptions\n } = optionals;\n\n const formdata = new FormData();\n formdata.append('file', file);\n\n return await new Router()\n .withSearchParams({ overwrite })\n .post('/user/upload', {\n body: formdata,\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\nexport async function createUser(\n view: ExternalUserCreateView | NativeUserCreateView,\n optionals: RoutingOptions = {}\n): Promise<User> {\n return await new Router()\n .post('/user', {\n body: view,\n ...optionals,\n })\n .then(({ body }) => body);\n}","import type { UserSession } from '../utils/identification';\nimport type { GenericSearchOptions, RoutingOptions } from '../utils/router'; // needs to be relative b/c TS hates me\nimport type { GenericScope, Permit } from '../utils/constants';\n\nimport {\n identification, Router,\n ROLE, SCOPE_BOUNDARY,\n} from 'utils';\n\n\nexport interface Vault<Items> {\n created: string,\n lastUpdated: string,\n mutationKey: string,\n address: unknown,\n scope: { userKey?: string } & GenericScope,\n name: string,\n permit: Permit,\n vaultKey: string,\n expiration: string,\n items?: Items,\n changed?: boolean\n}\n\ninterface Items {\n set?: Record<string, unknown>,\n push?: Record<string, unknown>,\n pop?: Record<string, unknown>,\n}\n\n/**\n * Updates a vault,\n * @example\n * // Change the name of the first student object in the list of students in the vault to \"Bob\"\n * epicenter.vaultAdapter.update('00000166d59adcb0f497ddc1aad0270c0a62', { set: { 'students.0.name': 'Bob' } })\n * @param vaultKey Vault key\n * @param items Object with a set/push/pop field to update the vault with\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the vault\n */\nexport async function update(\n vaultKey: string,\n items: Items,\n optionals: { mutationKey?: string } & RoutingOptions = {},\n): Promise<Vault<unknown>> {\n const {\n mutationKey,\n ...routingOptions\n } = optionals;\n\n return await new Router()\n .withSearchParams({ MutationKey: mutationKey })\n .put(`/vault/${vaultKey}`, {\n body: {\n set: items.set ?? {},\n push: items.push ?? {},\n pop: items.pop ?? {},\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\nconst NOT_FOUND = 404;\nexport async function get(\n vaultKey: string,\n optionals: RoutingOptions = {}\n): Promise<Vault<unknown>> {\n return await new Router()\n .get(`/vault/${vaultKey}`, optionals)\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n }).then(({ body }) => body);\n}\n\n\nexport async function withScope(\n name: string,\n scope: { userKey?: string } & GenericScope,\n optionals: RoutingOptions = {}\n): Promise<Vault<unknown>> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const uriComponent = userKey ? `/${userKey}` : '';\n return await new Router()\n .get(`/vault/with/${scopeBoundary}/${scopeKey}${uriComponent}/${name}`, optionals)\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n }).then(({ body }) => body);\n}\n\nexport async function byName(\n name: string,\n optionals: {\n groupName?: string,\n episodeName?: string,\n userKey?: string,\n includeEpisodes?: boolean,\n } & RoutingOptions = {}\n): Promise<Vault<unknown>[]> {\n const {\n groupName, episodeName,\n userKey, includeEpisodes,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n\n const searchParams = {\n userKey,\n includeEpisodes,\n };\n\n return await new Router()\n .withSearchParams(searchParams)\n .get(`/vault/in/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}/${name}`, {\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\nexport async function remove(\n vaultKey: string,\n optionals: { mutationKey?: string } & RoutingOptions = {}\n): Promise<void> {\n const {\n mutationKey,\n ...routingOptions\n } = optionals;\n return await new Router()\n .withSearchParams({ MutationKey: mutationKey })\n .delete(`/vault/${vaultKey}`, routingOptions)\n .then(({ body }) => body);\n}\n\n/**\n * Defines vault properties, used to create or modify a vault. Vault names are unique to within their scope.\n * Base URL: POST `https://forio.com/api/v3/{ACCOUNT}/{PROJECT}/vault/{COLLECTION_NAME}`\n *\n * @example\n * import { vaultAdapter, SCOPE_BOUNDARY } from 'epicenter';\n * vaultAdapter.define('my-vault-name', {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: 'GROUP_KEY'\n * });\n *\n * @param name Name of the vault\n * @param scope Scope associated with your run\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [scope.userKey] Optional key to scope the vault to a user\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @param [optionals.items] Optional items parameter for updating vault contents\n * @param [optionals.items.set] Sets a field in the vault, where `[name]: [value]`, send `[name]: null` to delete\n * @param [optionals.items.push] Adds an item to a list in the vault, it the list does not exist it will create one\n * @param [optionals.items.pop] Use to remove items lists in a vault; TODO: how to use is unclear, elucidate\n * @param [optionals.readLock] Role allowed to read\n * @param [optionals.writeLock] Role allowed to write\n * @param [optionals.ttlSeconds] Life span of the vault -- default to null, minimum value of 1800 (30 minutes)\n * @param [optionals.mutationKey] Setting a mutation key ensures that the platform will try to find the vault w/ the making scope, name, and mutation key. If one does not exist, it will try to create a vault with the same scope and name, erroring if one already exists. If the mutation key is omitted, it will simply search by scope and name; updating if it exists, creating if not.\n * @returns the vault (created or modified) */\nexport async function define(\n name: string,\n scope: { userKey?: string } & GenericScope,\n optionals: {\n items?: Items,\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: string,\n mutationKey?: string,\n } & RoutingOptions = {}\n): Promise<Vault<unknown>> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n const {\n readLock, writeLock, items,\n ttlSeconds, mutationKey,\n ...routingOptions\n } = optionals;\n const { WORLD } = SCOPE_BOUNDARY;\n const { PARTICIPANT, USER } = ROLE;\n const defaultLock = scopeBoundary === WORLD ? PARTICIPANT : USER;\n\n return await new Router()\n .post(`/vault/${name}`, {\n body: {\n scope: {\n scopeBoundary,\n scopeKey,\n userKey,\n },\n permit: {\n readLock: readLock || defaultLock,\n writeLock: writeLock || defaultLock,\n },\n ttlSeconds,\n mutationKey,\n items,\n },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n\nexport async function create(\n name: string,\n scope: { userKey?: string } & GenericScope,\n items: Items,\n optionals: {\n readLock?: keyof typeof ROLE,\n writeLock?: keyof typeof ROLE,\n ttlSeconds?: string,\n mutationKey?: string,\n } & RoutingOptions = {}\n): Promise<Vault<unknown>> {\n console.warn('DEPRECATION WARNING: vaultAdapter.create is deprecated and will be removed with the next release. Use vaultAdapter.define instead.');\n return await define(name, scope, { items, ...optionals });\n}\n\nexport async function list(\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Vault<unknown>[]> {\n const { first, filter = [], max } = searchOptions;\n const searchParams = {\n filter: filter.join(';') || undefined,\n first, max,\n };\n\n return new Router()\n .withSearchParams(searchParams)\n .get('/vault/search', optionals)\n .then(({ body }) => body);\n}\n","import type { UserSession } from 'utils/identification';\nimport type { RoutingOptions } from 'utils/router';\nimport type { GenericScope } from 'utils/constants';\nimport type { User } from './user';\n\nimport {\n Router, identification,\n SCOPE_BOUNDARY,\n} from 'utils';\n\n\nenum OBJECTIVE {\n MINIMUM = 'MINIMUM',\n MAXIMUM = 'MAXIMUM',\n}\n\nenum ORBIT_TYPE {\n GROUP = 'GROUP',\n EPISODE = 'EPISODE',\n}\n\ninterface UserAssignment {\n userKey: string,\n role?: string,\n}\n\ninterface Persona {\n role: string,\n minimum: number,\n maximum?: number,\n}\n\ninterface Assignment {\n role: string,\n user: User,\n}\n\ninterface World {\n lastUpdated: string,\n personae: Persona[],\n assignments: Assignment[],\n orbitKey: string,\n worldKey: string,\n created: string,\n orbitType: keyof typeof ORBIT_TYPE,\n runKey: string,\n}\n\n/**\n * Updates fields for a particular world.\n * @example\n * epicenter.worldAdapter.update('0000017a445032dc38cb2cecd5fc13708314', { name: 'World A1' });\n * @param worldKey Key associated with world\n * @param update Attributes you wish to update\n * @param [update.name] Name of the world\n * @param [update.runKey] Key for the run you want to attach to the world\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise wiworld with updated attributes\n */\nexport async function update(\n worldKey: string,\n update: { name?: string, runKey?: string },\n optionals: RoutingOptions = {}\n): Promise<World> {\n const { name, runKey } = update;\n\n return await new Router()\n .patch(`/world/${worldKey}`, {\n body: { name, runKey },\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Deletes a world\n * @example\n * epicenter.worldAdapter.destroy('0000017a445032dc38cb2cecd5fc13708314');\n * @param worldKey Key associated with world\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns\n */\nexport async function destroy(\n worldKey: string,\n optionals: RoutingOptions = {}\n): Promise<void> {\n\n return await new Router()\n .delete(`/world/${worldKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Creates a world\n * @example\n * epicenter.worldAdapter.create({ name: 'Whole New World' });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.name] Name of the new world -- if omitted one will be provided by Epicenter\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoping\n * @returns promise that resolves to the newly created world\n */\nexport async function create(\n optionals: {\n name?: string,\n groupName?: string,\n episodeName?: string,\n } & RoutingOptions = {}\n): Promise<World> {\n const {\n name, groupName, episodeName,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .post(`/world/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, {\n body: { name },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n\n/**\n * Fetches the worlds in a group or episode if specified\n * @example\n * // Gets all the worlds in the group attached to the session\n * epicenter.worldAdapter.get();\n * // Gets all the worlds in the group attached to the session that the user is assigned to\n * epicenter.worldAdapter.get({ mine: true });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.mine] Flag for indicating to get only the worlds the requesting user is in (based on session token)\n * @returns promise that resolves to a list of worlds\n */\nexport async function get(\n optionals: {\n groupName?: string,\n episodeName?: string,\n mine?: boolean,\n } & RoutingOptions = {}\n): Promise<World> {\n const {\n groupName, episodeName, mine,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .withSearchParams({ mine })\n .get(`/world/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Fetches the assignments (plus some world info) in a group or episode if specified\n * @example\n * epicenter.worldAdapter.getAssignments({ mine: true });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.mine] Flag for indicating to get only the worlds the requesting user is in (based on session token)\n * @returns promise that resolves to a list of worlds the user is assigned to\n *\n */\nexport async function getAssignments(\n optionals: {\n groupName?: string,\n episodeName?: string,\n mine?: boolean,\n } & RoutingOptions = {}\n): Promise<World[]> {\n const {\n groupName, episodeName, mine,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .withSearchParams({ mine })\n .get(`/world/assignment/for/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, routingOptions)\n .then(({ body }) => body);\n}\n\nexport async function getSessionWorlds(\n optionals: RoutingOptions = {}\n): Promise<World> {\n return await new Router()\n .get('/world/assignment', optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Automatically assigns the current session's user a world\n * @example\n * // Assigns user to a group-scoped world\n * epicenter.worldAdapter.selfAssign();\n * // Assigns user to a group-scoped world with role \"cartographer\"\n * epicenter.worldAdapter.selfAssign({ role: 'cartographer' });\n * // Assigns user to an episode-scoped world with role \"cartographer\"\n * epicenter.worldAdapter.selfAssign({ role: 'cartographer', episodeName: 'my-episode-name' });\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.role] Role constaint -- will put the user in a world with a role\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.objective] Allows platform to assign users beyond minimum amount\n * @returns promise that resolves to the world the user was assigned to\n */\nexport async function selfAssign(\n optionals: {\n role?: string,\n groupName?: string,\n episodeName?: string,\n objective?: keyof typeof OBJECTIVE,\n } & RoutingOptions = {}\n): Promise<World> {\n const {\n role, groupName, episodeName, objective = OBJECTIVE.MINIMUM,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .post(`/world/selfassign/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, {\n body: { role, objective },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * (Auto assign) -- makes worlds given a list of users.\n * @example\n * import { worldAdapter } from 'epicenter';\n * const worlds = await worldAdapter.assignUsers([\n * { userKey: '000001796733eef0842f4d6d960997018a43', role: 'locksmith' },\n * { userKey: '000001796733eef0842f4d6d960997018a3b' },\n * ]);\n *\n * @param assignments List of users assignment objects\n * @param assignments[].userKey User key\n * @param [assignments[].role] Role to assign to the user\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.role] Role constaint -- will put the user in a world with a role\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.objective] Allows platform to assign users beyond minimum amount\n * @param [optionals.requireAllAssignments] Have the server return w/ an error whenever an assignment was not made (instead of silently leaving the user as unassigned)\n * @returns promise that resolves to the list of worlds created by the assignment\n */\nexport async function autoAssignUsers(\n assignments: UserAssignment[],\n optionals: {\n groupName?: string,\n episodeName?: string,\n objective?: keyof typeof OBJECTIVE,\n requireAllAssignments?: boolean,\n } & RoutingOptions = {}\n): Promise<World[]> {\n const {\n groupName, episodeName, objective = OBJECTIVE.MINIMUM, requireAllAssignments,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .post(`/world/assignment/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, {\n body: { assignments, objective, requireAllAssignments },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\ntype WorldKey = string;\nexport async function editAssignments(\n assignments: Record<WorldKey, UserAssignment[]>,\n optionals: {\n groupName?: string,\n episodeName?: string,\n objective?: keyof typeof OBJECTIVE,\n keepEmptyWorlds?: boolean,\n requireAllAssignments?: boolean,\n } & RoutingOptions = {}\n): Promise<World[]> {\n const {\n groupName, episodeName, objective = OBJECTIVE.MINIMUM, requireAllAssignments, keepEmptyWorlds,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .put(`/world/assignment/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, {\n body: { assignments, objective, requireAllAssignments, keepEmptyWorlds },\n ...routingOptions,\n })\n .then(({ body }) => body);\n}\n\n\n/**\n * Retrieves the current assignment information for a given world\n *\n * @example\n * import { worldAdapter } from 'epicenter';\n * const assignments = await worldAdapter.getAssignmentsByKey(world.worldKey);\n *\n * @param worldKey Key associated with the world\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the world containing the assignment object\n */\nexport async function getAssignmentsByKey(\n worldKey: string,\n optionals: RoutingOptions = {}\n): Promise<World> {\n\n return await new Router()\n .get(`/world/assignment/${worldKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Removes a user or list of users the all worlds in a given group or episode. Any worlds that do not contain users within them will be automatically deleted in the process.\n * @example\n * import { worldAdapter } from 'epicenter';\n * await worldAdapter.removeUser(user.userKey);\n *\n * @param userKeys List of keys associated with users to remove from worlds\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.groupName] Name of the group (defaults to name of group associated with session)\n * @param [optionals.episodeName] Name of the episode for episode scoped worlds\n * @param [optionals.keepEmptyWorlds] If the unassignment results in an empty world, whether to delete it\n * @returns promise that resolves to undefined when successful\n */\nexport async function removeUsers(\n userKeys: string[],\n optionals: {\n groupName?: string,\n episodeName?: string,\n keepEmptyWorlds?: boolean,\n } & RoutingOptions = {}\n): Promise<void> {\n const {\n groupName, episodeName, keepEmptyWorlds,\n ...routingOptions\n } = optionals;\n const session = identification.session as UserSession;\n return await new Router()\n .withSearchParams({ userKey: userKeys, keepEmptyWorlds: Boolean(keepEmptyWorlds) })\n .delete(`/world/assignment/${groupName ?? session?.groupName}${episodeName ? `/${episodeName}` : ''}`, routingOptions)\n .then(({ body }) => body);\n}\n\n\n/**\n * Sets the personas of a given scope (project, group, episode, world). Personas correspond to a role the a user in the world can be assigned to.\n * A null value for minimum is 0, but a null maximum is uncapped. Personas with greater specificity override more general ones (which are by default PROJECT scoped).\n *\n * @example\n * import { worldAdapter } from 'epicenter';\n * await worldAdapter.editPersonas([\n * { role: 'leader', minimum: 1 },\n * ]);\n * @param personas List of role description objects (personas)\n * @param personas[].role Name of the role\n * @param [personas[].minimum] The minimum number of users that required for this role\n * @param [personas[].maximum] The maximum number of users that can be assigned to this role\n * @param scope Scope associated with the persona set (by default the scope used will be the current project). Use this to do any specific overrides.\n * @param scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves with undefined when successful\n */\nexport async function setPersonas(\n personas: { role: string, minimum?: number, maximum?: number }[],\n scope: GenericScope,\n optionals: RoutingOptions = {}\n): Promise<void> {\n const { scopeBoundary, scopeKey } = scope;\n const boundary = scopeBoundary || SCOPE_BOUNDARY.PROJECT;\n const uriComponent = boundary === SCOPE_BOUNDARY.PROJECT ? '' : `/${scopeKey}`;\n\n return await new Router()\n /* We will at some point remove the need to explicitly lower case this */\n .put(`/world/persona/${boundary.toLowerCase()}${uriComponent}`, {\n body: personas,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Assigns an existing run to the given world.\n * @example\n * import { worldAdapter } from 'epicenter';\n * await worldAdapter.assignRun(world.worldKey, { runKey: run.runKey });\n * @param worldKey Key associated with the world\n * @param runKey Key associated with the run\n * @param [optionals] Optional arguments; pass network call options overrides here.\n * @returns promise that resolves to the newly resolved world\n */\nexport async function assignRun(\n worldKey: string,\n runKey: string,\n optionals: RoutingOptions = {}\n): Promise<World> {\n\n return await new Router()\n .patch(`/world/run/${worldKey}`, {\n body: { runKey },\n ...optionals,\n })\n .then(({ body }) => body);\n}","import type { RoutingOptions } from 'utils/router';\nimport Router from 'utils/router';\n\n/**\n * Time API adapter -- handles getting the current server time\n * @namespace timeAdapter\n */\n\n/**\n * Fetches the current server time\n *\n * Base URL: GET `https://forio.com/api/v3/{ACCOUNT}/{PROJECT}/time`\n *\n * @memberof timeAdapter\n * @example\n *\n * import { timeAdapter } from 'epicenter';\n * const worlds = await timeAdapter.get();\n *\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @returns {string} The current server time, in ISO 8601 format\n */\n\nconst NOT_FOUND = 404;\nexport async function get(\n optionals: RoutingOptions = {}\n):Promise<void | string> {\n return await new Router()\n .get('/time', optionals)\n .catch((error) => {\n if (error.status === NOT_FOUND) return { body: undefined };\n return Promise.reject(error);\n }).then(({ body }) => body);\n}\n","import type { RoutingOptions } from 'utils/router';\nimport type { GenericScope } from 'utils/constants';\nimport { Router } from 'utils/index';\n\nenum RETRY_POLICY {\n DO_NOTHING = 'DO_NOTHING', //If the task fails, do nothing (this is the default)\n RESCHEDULE = 'RESCHEDULE', //If the task fails retry at the next scheduled time point\n FIRE_ON_FAIL_SAFE = 'FIRE_ON_FAIL_SAFE', //Will re-execute the task after it fails; how long until this occurs is equal to ttlSeconds\n}\n/**\n * Creates a task; requires support level authentication\n *\n * Base URL: POST `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task`\n * Base URL with pseudonym: POST `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/{scopeBoundary}/{scopeKey}/{userKey}/{name}`\n *\n * @example\n * const scope = {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: session.groupKey,\n * };\n * const name = 'task-1-send-emails'\n * const payload = {\n * method: 'POST',\n * url: 'https://forio.com/app/forio-dev/test-project/send-out-emails',\n * }\n * const trigger = {\n * value: '0 7 15 * * ?', //triggers on day 15 7am of each month\n * objectType: 'cron',\n * }\n *\n * epicenter.taskAdapter.create(scope, name, payload, trigger);\n *\n * @param {object} scope Scope associated with your run\n * @param {string} scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param {string} scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param {string} scope.userKey Key associated with the user. Optional\n * @param {object} payload An HTTP task object that will be executed when the task is triggered\n * @param {string} [payload.method] Type of method to use with the HTTP request (i.e. 'GET', 'POST', 'PATCH', etc.)\n * @param {string} [payload.url] The url the HTTP request will be sent to; Will follow format <host>/app/<account>/<project>/url. host, account, and project are automatically entered\n * @param {object} [payload.body] The body of the HTTP request. This is optional\n * @param {object} [payload.headers] Headers to send along with the HTTP request. Write as key-value pairs like you would with fetch. This is optional\n *\n * @param {object} trigger One of three types of objects that determine when to run the task\n *\n * trigger option 1, Cron Object: Specifies a task that will execute once a set amount of time passes. This is the ONLY trigger that can be repeated\n * @param {string} [trigger.value] Cron order for the task. Should include only time specifications (i.e. '0 7 * * * ?' => trigger at 7am UTC everyday) https://en.wikipedia.org/wiki/Cron\n * @param {string} [trigger.objectType] Specifies object being used. Should be a constant value of 'cron'\n *\n * trigger option 2, Offset Object: Specifies a task that will execute ONCE after the specified offset time has passed\n * @param {number} [trigger.minutes] Number of minutes until the task triggers\n * @param {number} [trigger.hours] Number of hours until the task triggers\n * @param {number} [trigger.days] Number of days until the task triggers\n * @param {string} [trigger.objectType] Specifies object being used. Should be a constant value of 'offset'\n *\n * trigger option 3, Date Object: Specifies a singular date for the task to be carried out; will execute ONCE\n * @param {string} [trigger.value] A string in ISO-8601 date-time format (i.e. 2023-11-05T08:15:30-04:00 => November 5, 2023, 8:15:30 am, US EDT)\n * @param {string} [trigger.objectType] Specifies object being used. Should be a constant value of 'date'\n *\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @param {string} [optionals.retryPolicy] Specifies what to do should the task fail; see RETRY_POLICY\n * @param {string} [optionals.failSafeTermination] The ISO-8601 date-time when the task will be deleted regardless of any tiggers; defaults to null\n * @param {number} [optionals.ttlSeconds] Max life expectancy of the task; used to determine if retrying the task is necessary\n * @returns {taskObject} Returns a promise that resolves to the task object including the taskKey\n */\nexport async function create(\n scope: { userKey?: string } & GenericScope,\n name: string,\n payload: {\n method: string;\n url: string;\n body?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n },\n trigger: Record<string, unknown>,\n optionals: {\n retryPolicy?: keyof typeof RETRY_POLICY;\n failSafeTermination?: number;\n ttlSeconds?: number;\n } & RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const {\n retryPolicy,\n failSafeTermination,\n ttlSeconds,\n ...routingOptions\n } = optionals;\n return await new Router()\n .post(\n '/task',\n {\n body: {\n payload: { objectType: 'http', ...payload },\n trigger,\n retryPolicy,\n failSafeTermination,\n ttlSeconds,\n scope,\n name,\n },\n ...routingOptions,\n }\n )\n .then(({ body }) => body);\n}\n\n/**\n * Deletes a task (changes status to cancelled); requires support level authentication\n * Sends a 204 on successful deletion\n * Base URL: DELETE `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/{taskKey}`\n *\n * @memberof taskAdapter\n * @example\n *\n * epicenter.taskAdapter.destroy(taskKey);\n *\n * @param {string} taskKey Unique key associated with a task\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @returns {undefined}\n */\nexport async function destroy(taskKey: string, optionals: RoutingOptions = {}):Promise<void> {\n return await new Router()\n .delete(`/task/${taskKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Gets a task by taskKey; requires support level authentication\n * Base URL: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/{taskKey}`\n *\n * @memberof taskAdapter\n * @example\n *\n * epicenter.taskAdapter.get(taskKey);\n *\n * @param {string} taskKey Unique key associated with a task\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @returns {taskObject} Returns a promise that resolves to the task object including the taskKey\n */\nexport async function get(taskKey: string, optionals: RoutingOptions = {}): Promise<Record<string, unknown>> {\n return await new Router()\n .get(`/task/${taskKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * Gets a the history (100 most recent times it has triggered) of a task by taskKey; requires support level authentication\n * Base URL: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/history/{taskKey}`\n *\n * @memberof taskAdapter\n * @example\n *\n * epicenter.taskAdapter.getHistory(taskKey);\n *\n * @param {string} taskKey Unique key associated with a task\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @returns {taskObject} Returns a promise that resolves to the task object including the taskKey\n */\nexport async function getHistory(\n taskKey: string,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n return await new Router()\n .get(`/task/history/${taskKey}`, optionals)\n .then(({ body }) => body);\n}\n\n/**\n * TODO: fix this; this call seems to be paginated, but isn't somehow?\n *\n * Gets most recent 100 tasks related to the selected scope; requires support level authentication\n * Base URL: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/in/{scopeBoundary}/{scopeKey}`\n * Base URL with userKey: GET `https://forio.com/api/v3/{accountShortName}/{projectShortName}/task/in/{scopeBoundary}/{scopeKey}/{userKey}`\n * Will retrieve all tasks that were CREATED in the specified scope. If something was created with episode scope, it will not be retrievable through group scoping\n * @memberof taskAdapter\n * @example\n *\n * const scope = {\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: session.groupKey,\n * };\n * epicenter.taskAdapter.getTaskIn(scope);\n *\n * @param {object} scope Scope associated with your run\n * @param {string} scope.scopeBoundary Scope boundary, defines the type of scope; See [scope boundary](#SCOPE_BOUNDARY) for all types\n * @param {string} scope.scopeKey Scope key, a unique identifier tied to the scope. E.g., if your `scopeBoundary` is `GROUP`, your `scopeKey` will be your `groupKey`; for `EPISODE`, `episodeKey`, etc.\n * @param {object} [optionals={}] Optional parameters\n * @param {string} [optionals.accountShortName] Name of account (by default will be the account associated with the session)\n * @param {string} [optionals.projectShortName] Name of project (by default will be the project associated with the session)\n * @param {string} [optionals.userKey] Key associated with the user; Will retrieve tasks in the scope that were made by the specified user\n * @returns {taskObject} Returns a promise that resolves to the task object including the taskKey\n */\nexport async function getTaskIn(\n scope: { userKey?: string } & GenericScope,\n optionals: RoutingOptions = {}\n): Promise<Record<string, unknown>> {\n const { scopeBoundary, scopeKey, userKey } = scope;\n return await new Router()\n .get(\n `/task/in/${scopeBoundary}/${scopeKey}${\n userKey ? `/${userKey}` : ''\n }`,\n optionals\n )\n .then(({ body }) => body);\n}\n","import type { GenericScope, Permit } from 'utils/constants';\nimport type { RoutingOptions, Page, GenericSearchOptions } from 'utils/router';\nimport Router from 'utils/router';\n\ninterface ChatMessage {\n senderKey: string,\n receiverKey: string,\n created: string,\n id: string,\n message: string,\n}\n\ninterface Chat {\n permit: Permit,\n chatKey: string,\n messages: ChatMessage[],\n room: string,\n scope: GenericScope,\n}\n\n/**\n * Updates the permissions of a chat\n * @param chatKey Key associated with the chat\n * @param permit Permit object with the updated permissions\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns the newly updated chat\n */\nexport async function updatePermit(\n chatKey: string,\n permit: Permit,\n optionals: RoutingOptions = {}\n): Promise<Chat> {\n return new Router()\n .patch(`/chat/${chatKey}`, {\n ...optionals,\n body: { permit },\n }).then(({ body }) => body);\n}\n\n/**\n * Creates a chat\n * @example\n * import { chatAdapter, SCOPE_BOUNDARY, ROLE } from 'epicenter';\n * chatAdapter.create(\n * 'my-chat-room',\n * { scopeBoundary: SCOPE_BOUNDARY.GROUP, scopeKey: '00000165ad4e6a3cd22b993340b963820239' },\n * { readLock: ROLE.PARTICIPANT, writeLock: ROLE.PARTICIPANT }\n * );\n * @param room Name of the chat\n * @param scope Scope of the chat; will not accept user scope\n * @param permit Permissions for the chat\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns The chat created\n */\nexport async function create(\n room: string,\n scope: GenericScope,\n permit: Permit,\n optionals: RoutingOptions = {}\n): Promise<Chat> {\n return new Router()\n .post('/chat', {\n body: {\n scope: {\n scopeBoundary: scope.scopeBoundary,\n scopeKey: scope.scopeKey,\n },\n permit,\n room,\n },\n ...optionals,\n }).then(({ body }) => body);\n}\n\n\n/**\n * Gets a chat\n * @example\n * epicenter.chatAdapter.get('00000165ad4e6a3cd22b993340b963820239');\n * @param chatKey Key of the associated chat\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns The chat corresponding with the provided key\n */\nexport async function get(\n chatKey: string,\n optionals: RoutingOptions = {}\n): Promise<Chat> {\n return new Router()\n .get(`/chat/${chatKey}`, optionals)\n .then(({ body }) => body);\n}\n\n\n/**\n * Open search for chats, returns a page\n * @example\n * epicenter.chatAdapter.query({\n * filter: [\n * 'room|=my-chat-room|my-other-chat|room-three', // looks for any rooms with the names provided\n * 'scopeBoundary=GROUP', // keeps the search within the group scope\n * // 'scopeKey=00000165ad4e6a3cd22b993340b963820239', // used in conjunction with the scopeBoundary\n * // 'chatKey=0000017dd3bf540e5ada5b1e058f08f20461', // searches for a specific chat\n * // 'accountShortName=acme', // specifies the account, typically unnecessary\n * // 'projectShortName=simulations', // specifies the project, typically unnecessary\n * // 'groupName=my-group-name', // search based on group name\n * // 'episodeName=my-episode-name', // search based on episode name\n * 'created>=2022-01-03T20:30:53.054Z', // looks for any chats created after Jan 3rd 2022\n * ],\n * sort: ['+chat.created'], // sort all findings by the 'created' field (ascending)\n * first: 3, // page should start with the 4th item found (defaults to 0)\n * max: 10, // page should only include the first 10 items\n * });\n * @param searchOptions Search options -- for more on Epicenter search options go [here](NOOP link)\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @returns A page for the list of chats found\n */\nexport async function query(\n searchOptions: GenericSearchOptions,\n optionals: RoutingOptions = {}\n): Promise<Page<Chat>> {\n const { filter = [], sort = [], first = 0, max } = searchOptions;\n const searchParams = {\n filter: filter.join(';') || undefined,\n sort: sort.join(';') || undefined,\n first, max,\n };\n return await new Router()\n .withSearchParams(searchParams)\n .get('/chat', {\n paginated: true,\n ...optionals,\n })\n .then(({ body }) => body);\n}\n\n/**\n * Sends a message to a chat\n * @example\n * epicenter.chatAdapter.sendMessage('0000017dd3bf540e5ada5b1e058f08f20461', 'hello');\n * epicenter.chatAdapter.sendMessage('0000017dd3bf540e5ada5b1e058f08f20461', 'hello, privately', { userKey: '000001796733eef0842f4d6d960997018a33' });\n * @param chatKey Key associated with the chat\n * @param message Message text to send\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.userKey] Key of the user to send the message to. If omitted, will send as a public message\n * @returns The chat message created\n */\nexport async function sendMessage(\n chatKey: string,\n message: string,\n optionals: { userKey?: string } & RoutingOptions = {}\n): Promise<ChatMessage> {\n const { userKey, ...routingOptions } = optionals;\n const uriComponent = userKey ? `/${userKey}` : '';\n return new Router()\n .put(`/chat/message/${chatKey}${uriComponent}`, {\n body: { message },\n ...routingOptions,\n }).then(({ body }) => body);\n}\n\n/**\n * Retrieves messages from for a given chat\n * @example\n * // gets the chat message with id: 5\n * epicenter.chatAdapter.getMessages('0000017dd3bf540e5ada5b1e058f08f20461', { horizon: 5, maxRecords: 1 });\n * // gets the 10 chat messages starting from id 5 (inclusive)\n * epicenter.chatAdapter.getMessages('0000017dd3bf540e5ada5b1e058f08f20461', { horizon: 5, maxRecords: 10 });\n * @param chatKey Key associated with the chat\n * @param [optionals] Optional arguments; pass network call options overrides here. Special arguments specific to this method are listed below if they exist.\n * @param [optionals.maxRecords] Maximum number of messages to get\n * @param [optionals.horizon] The message ID from which to start with; works backwards so if `maxRecords=20` and `horizon=50`, it will get the 20 messages starting from message ID 50, working backwards (50, 49, 48..., etc.). If this value is omitted the platform assumes it is the most recent message in the chat\n * @returns The list chat messages requested\n */\nexport async function getMessages(\n chatKey: string,\n optionals: {\n maxRecords?: number,\n horizon?: number,\n } & RoutingOptions = {}\n): Promise<ChatMessage[]> {\n const { maxRecords, horizon, ...routingOptions } = optionals;\n return new Router()\n .withSearchParams({ maxRecords, horizon })\n .get(`/chat/message/${chatKey}`, routingOptions)\n .then(({ body }) => body);\n}\n","import type { Callback, SubscriptionHandle, Message } from 'cometd';\nimport type { GenericScope } from '../utils/constants';\n\nimport { EpicenterError, SCOPE_BOUNDARY, PUSH_CATEGORY } from '../utils';\nimport cometdAdapter from './cometd';\n\ninterface ChannelScope extends GenericScope {\n pushCategory: string,\n}\n\nconst validateScope = (scope: ChannelScope) => {\n if (!scope) throw new EpicenterError('No scope found where one was required');\n const { scopeBoundary, scopeKey, pushCategory } = scope;\n if (!scopeBoundary) throw new EpicenterError('Missing scope component: scopeBoundary');\n if (!scopeKey) throw new EpicenterError('Missing scope component: scopeKey');\n if (!pushCategory) throw new EpicenterError('Missing scope component: pushCategory');\n if (!Object.prototype.hasOwnProperty.call(SCOPE_BOUNDARY, scopeBoundary)) throw new EpicenterError(`Invalid scope boundary: ${scopeBoundary}`);\n if (!Object.prototype.hasOwnProperty.call(PUSH_CATEGORY, pushCategory)) throw new EpicenterError(`Invalid push category: ${pushCategory}`);\n};\n\n/**\n * Used to subscribe to CometD channels. Pass in a channel scope to instantiate, if a subscription to that scope already exists it will use it.\n * */\nexport default class Channel {\n\n path: string;\n update: Callback | undefined;\n subscription: SubscriptionHandle | null = null;\n\n /**\n * Channel constructor\n * @param scope object with the scope boundary, scope key, and push category. Defines the namespace for the channel\n */\n constructor(scope: ChannelScope) {\n const { scopeBoundary, scopeKey, pushCategory } = scope;\n validateScope(scope);\n this.path = `/${scopeBoundary.toLowerCase()}/${scopeKey}/${pushCategory.toLowerCase()}`;\n if (cometdAdapter.subscriptions.has(this.path)) {\n this.subscription = cometdAdapter.subscriptions.get(this.path);\n }\n }\n\n publish(content: FIXME): Promise<Message | Message[]> {\n return cometdAdapter.publish(this, content);\n }\n\n /**\n * Subscribes to the CometD channel, attaching a handler for any channel updates. If a subscription already exists it will first unsubscribe, ensuring that only one subscription is ever attached to the channel.\n * @example\n * import { Channel, authAdapter, SCOPE_BOUNDARY, PUSH_CATEGORY } from 'epicenter';\n * const session = authAdapter.getLocalSession();\n * const channel = new Channel({\n * scopeBoundary: SCOPE_BOUNDARY.GROUP,\n * scopeKey: session.groupKey,\n * pushCategory: PUSH_CATEGORY.CHAT,\n * }).subscribe((data) => {\n * console.log(data.content);\n * })\n * @param update function that is called whenever a channel update occurs.\n * @returns the subscription object returned by CometD after a sucessful subscribe.\n */\n async subscribe(\n update: (data: unknown) => unknown,\n options: { inert?: boolean } = {},\n ): Promise<SubscriptionHandle> {\n if (this.subscription) await this.unsubscribe();\n this.update = update;\n return cometdAdapter.add(this, update, options).then((subscription) => {\n if (Array.isArray(subscription)) subscription = subscription[0];\n this.subscription = subscription;\n return subscription;\n });\n }\n\n async unsubscribe(): Promise<void> {\n if (this.subscription) {\n await cometdAdapter.remove(this.subscription);\n this.subscription = null;\n }\n }\n}\n\n\n","import 'regenerator-runtime/runtime';\n\n/* yes, this string template literal is weird;\n * it's cause rollup does not recogize __VERSION__ as an individual token otherwise */\nconst version = `Epicenter (v${'__VERSION__'}) for __BUILD__ | Build Date: __DATE__`;\n\nimport type { RetryFunction } from './utils/router';\nimport { authAdapter } from './adapters';\nimport { errorManager, identification, isBrowser, Fault, EpicenterError } from './utils';\n\nconst UNAUTHORIZED = 401;\nerrorManager.registerHandler(\n (error: Fault) => error.status === UNAUTHORIZED && error.code === 'AUTHENTICATION_EXPIRED',\n async(error: Fault) => {\n await authAdapter.logout();\n if (isBrowser()) {\n // eslint-disable-next-line no-alert\n alert('Session token has expired, try logging in again.');\n }\n throw error;\n },\n);\nerrorManager.registerHandler(\n (error: Fault) => error.status === UNAUTHORIZED && error.code === 'AUTHENTICATION_GROUP_EXPIRED',\n async(error: Fault) => {\n if (isBrowser()) {\n // eslint-disable-next-line no-alert\n alert('This group has expired. Try logging into a different group');\n }\n throw error;\n },\n);\nerrorManager.registerHandler(\n (error) => error.status === UNAUTHORIZED && error.code === 'AUTHENTICATION_INVALIDATED',\n async<T>(error: Fault, retry: RetryFunction<T>) => {\n try {\n const session = identification.session;\n if (session?.objectType === 'admin') {\n throw new EpicenterError('Unhandled error: admin session was somehow invalidated');\n }\n const groupKey = session?.groupKey ?? '';\n await authAdapter.regenerate(groupKey, { objectType: 'user', inert: true });\n return await retry();\n } catch (e) {\n await authAdapter.logout();\n throw error;\n }\n }\n);\n\nexport { version };\n\n/* Interfaces & Types */\nexport type { Session, UserSession, AdminSession } from './utils/identification';\nexport type { Group, Member } from './adapters/group';\nexport type { Vault } from './adapters/vault';\nexport type { GenericScope } from './utils/constants';\n\n\n/* Constants */\nexport {\n SCOPE_BOUNDARY,\n RITUAL,\n PUSH_CATEGORY,\n ROLE,\n} from './utils/constants';\n/* Utilities */\nexport {\n config,\n errorManager,\n Router,\n Fault,\n} from './utils';\n/* Adapters */\nexport {\n accountAdapter,\n adminAdapter,\n assetAdapter,\n // consensusAdapter,\n emailAdapter,\n authAdapter,\n chatAdapter,\n episodeAdapter,\n groupAdapter,\n leaderboardAdapter,\n presenceAdapter,\n projectAdapter,\n recaptchaAdapter,\n runAdapter,\n taskAdapter,\n timeAdapter,\n userAdapter,\n vaultAdapter,\n worldAdapter,\n Channel,\n} from './adapters';\n"],"names":["undefined","this","EpicenterError","Error","constructor","message","code","Fault","body","response","information","cause","status","rest","Result","headers","getExpiration","vEnd","Number","Infinity","String","Date","toUTCString","getItem","key","decodeURIComponent","document","cookie","replace","RegExp","encodeURIComponent","setItem","value","options","test","path","domain","end","secure","samesite","expireStr","domainStr","pathStr","secureStr","samesiteStr","removeItem","hasItem","clear","aKeys","split","nLen","length","nIdx","Store","store","_store","nodeMap","Map","NodeStore","get","set","delete","SessionStore","window","sessionStorage","JSON","parse","stringify","CookieStore","hostname","location","defaults","item","cookies","BROWSER_STORAGE_TYPE","SCOPE_BOUNDARY","RITUAL","PUSH_CATEGORY","INTERNAL_ROLE","ACCOUNT_ROLE","PROJECT_ROLE","GROUP_ROLE","ROLE","isBrowser","Function","isNode","prefix","pre","str","startsWith","API_VERSION","Config","loadBrowser","loadNode","apiProtocol","_apiProtocol","endsWith","slice","apiHost","_apiHost","apiVersion","_apiVersion","accountShortName","_accountShortName","projectShortName","_projectShortName","isLocal","host","indexOf","protocol","pathname","match","account","project","config","COOKIE","SESSION","SESSION_KEY","EPI_SSO_KEY","Identification","storeType","type","consumeSSO","session","getStore","getStoreOptions","mySession","objectType","base","isCustomDomain","isEpicenterDomain","cookieContent","charAt","identification","ErrorManager","handlers","_handlers","clearHandlers","registerHandler","identifier","handleFn","unshift","handle","error","retryFn","index","findIndex","handler","promise","catch","err","e","console","remainingHandlers","handleableError","errorManager","MAX_URL_LENGTH","paginate","json","url","parsePage","i","page","values","prev","searchParams","URLSearchParams","search","firstResult","warn","first","maxResults","max","Math","toString","prevPage","request","paginated","then","Object","assign","next","totalResults","nextPage","initialTotal","all","allValues","push","createMessage","headersRaw","bodyRaw","includeAuthorization","authorization","FormData","Authorization","token","authOverride","NO_CONTENT","BAD_REQUEST","OK","method","inert","fetch","cache","redirect","resContentType","includes","result","fault","retryOptions","retry","requestArguments","Router","version","_version","server","_server","_authorization","_searchParams","query","entries","reduce","arr","Array","isArray","map","v","withVersion","withServer","withAccountShortName","withProjectShortName","withAuthorization","withSearchParams","getURL","uriComponent","URL","href","from","searchObject","post","patch","put","getAccount","createAccount","view","updateAccount","optionals","removeAccount","teamForAdmin","adminKey","includeAllMembers","filter","routingOptions","createAdmin","getWithHandle","ACCESS_TYPE","WORKER_PARTITION","PHYLOGENY","FILE_TYPE","channelsEnabled","AUTH_TOKEN_KEY","DISCONNECTED","CONNECTED","UNAUTHORIZED","cometdInstance","CometdAdapter","cometd","instance","startup","enabled","CometD","AckExtension","default","ReloadExtension","accountProject","registerExtension","onunload","getStatus","reload","transport","getTransport","abort","configure","logLevel","init","initialization","handshake","Promise","resolve","handshakeProps","ext","ack","websocketEnabled","reject","handshakeReply","successful","errorMessage","disconnect","empty","disconnectReply","add","channel","update","channels","concat","subscriptionProps","handleCometdUpdate","data","promises","batch","forEach","subscription","subscribe","subscribeReply","subscriptions","sub","res","publish","content","publishProps","publishReply","remove","unsubscribe","unsubscribeReply","cometdAdapter","logout","login","credentials","payload","prototype","hasOwnProperty","call","password","groupKey","secretKey","regenerate","groupOrAccount","sso","getSession","getLocalSession","setLocalSession","resetPassword","redirectURL","subject","redirectUrl","verify","create","file","scope","scopeBoundary","scopeKey","userKey","readLock","writeLock","ttlSeconds","permit","USER","assetKey","removeFromScope","list","getURLWithScope","CONFLICT","overwrite","fileName","remaining","name","presignedUrl","shouldUpdate","ENCODING","sendEmail","emailBody","familyNameFirst","html","attachments","replyTo","fromUserKey","fromString","sendEmailToAdmin","groupName","draft","runLimit","episodeKey","searchOptions","sort","join","forGroup","withName","AUGMENT","augment","MEMBERS","QUANTIZED","destroy","gather","includeExpired","organization","allowSelfRegistration","flightRecorder","event","allowMembershipChanges","pricing","startDate","expirationDate","capacity","group","quantized","withGroupName","forUser","role","isMultiple","roleList","getSessionGroups","register","addUser","usersInput","users","u","PARTICIPANT","available","updateUser","removeUser","hasMultiple","statusUpdate","collection","scores","tags","connect","forWorld","worldKey","google","humanKey","model","ephemeral","trackingKey","modelContext","executionContext","WORLD","defaultLock","morphology","modelFile","clone","runKey","restore","rewind","steps","rewindCount","marked","hidden","closed","timeout","variables","metadata","episodeName","includeEpisodes","var","meta","run","variableMap","introspect","operation","args","ritual","EXORCISE","arguments","getVariables","include","mappify","keys","getVariable","variable","updateVariables","getMetadata","updateMetadata","action","actionList","retrieveFromWorld","removeFromWorld","getWithStrategy","strategy","lastRun","newRun","uploadCSV","formdata","append","createUser","vaultKey","items","mutationKey","MutationKey","pop","NOT_FOUND","withScope","byName","define","OBJECTIVE","ORBIT_TYPE","mine","getAssignments","getSessionWorlds","selfAssign","objective","MINIMUM","autoAssignUsers","assignments","requireAllAssignments","editAssignments","keepEmptyWorlds","getAssignmentsByKey","removeUsers","userKeys","Boolean","setPersonas","personas","boundary","PROJECT","toLowerCase","assignRun","RETRY_POLICY","trigger","retryPolicy","failSafeTermination","taskKey","getHistory","getTaskIn","updatePermit","chatKey","room","sendMessage","getMessages","maxRecords","horizon","validateScope","pushCategory","Channel","has","authAdapter","alert"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,IAAI,UAAU,OAAO,EAAE;AAElC;AACA,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC;AACjC,EAAE,IAAIA,WAAS,CAAC;AAChB,EAAE,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;AAC3D,EAAE,IAAI,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC;AACxD,EAAE,IAAI,mBAAmB,GAAG,OAAO,CAAC,aAAa,IAAI,iBAAiB,CAAC;AACvE,EAAE,IAAI,iBAAiB,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC;AACjE;AACA,EAAE,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;AACnC,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;AACpC,MAAM,KAAK,EAAE,KAAK;AAClB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,QAAQ,EAAE,IAAI;AACpB,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACpB,GAAG;AACH,EAAE,IAAI;AACN;AACA,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACnB,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;AACvC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC9B,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;AACrD;AACA,IAAI,IAAI,cAAc,GAAG,OAAO,IAAI,OAAO,CAAC,SAAS,YAAY,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AACjG,IAAI,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAC5D,IAAI,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AACjD;AACA;AACA;AACA,IAAI,SAAS,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjE;AACA,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC,IAAI,IAAI;AACR,MAAM,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AACxD,KAAK,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACzC,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,sBAAsB,GAAG,gBAAgB,CAAC;AAChD,EAAE,IAAI,sBAAsB,GAAG,gBAAgB,CAAC;AAChD,EAAE,IAAI,iBAAiB,GAAG,WAAW,CAAC;AACtC,EAAE,IAAI,iBAAiB,GAAG,WAAW,CAAC;AACtC;AACA;AACA;AACA,EAAE,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,SAAS,GAAG,EAAE;AACzB,EAAE,SAAS,iBAAiB,GAAG,EAAE;AACjC,EAAE,SAAS,0BAA0B,GAAG,EAAE;AAC1C;AACA;AACA;AACA,EAAE,IAAI,iBAAiB,GAAG,EAAE,CAAC;AAC7B,EAAE,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,YAAY;AACxD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,EAAE,IAAI,uBAAuB,GAAG,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,EAAE,IAAI,uBAAuB;AAC7B,MAAM,uBAAuB,KAAK,EAAE;AACpC,MAAM,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,EAAE;AAC5D;AACA;AACA,IAAI,iBAAiB,GAAG,uBAAuB,CAAC;AAChD,GAAG;AACH;AACA,EAAE,IAAI,EAAE,GAAG,0BAA0B,CAAC,SAAS;AAC/C,IAAI,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC3D,EAAE,iBAAiB,CAAC,SAAS,GAAG,0BAA0B,CAAC;AAC3D,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,0BAA0B,CAAC,CAAC;AACxD,EAAE,MAAM,CAAC,0BAA0B,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;AACvE,EAAE,iBAAiB,CAAC,WAAW,GAAG,MAAM;AACxC,IAAI,0BAA0B;AAC9B,IAAI,iBAAiB;AACrB,IAAI,mBAAmB;AACvB,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,SAAS,qBAAqB,CAAC,SAAS,EAAE;AAC5C,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;AACzD,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE;AAC9C,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACzC,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,OAAO,CAAC,mBAAmB,GAAG,SAAS,MAAM,EAAE;AACjD,IAAI,IAAI,IAAI,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC;AAClE,IAAI,OAAO,IAAI;AACf,QAAQ,IAAI,KAAK,iBAAiB;AAClC;AACA;AACA,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,MAAM,mBAAmB;AAC/D,QAAQ,KAAK,CAAC;AACd,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;AAClC,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE;AAC/B,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;AAChE,KAAK,MAAM;AACX,MAAM,MAAM,CAAC,SAAS,GAAG,0BAA0B,CAAC;AACpD,MAAM,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AAC7D,KAAK;AACL,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACzC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE;AAChC,IAAI,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAC5B,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE;AACjD,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;AAClD,MAAM,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAC/D,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,OAAO,MAAM;AACb,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AAChC,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,QAAQ,IAAI,KAAK;AACjB,YAAY,OAAO,KAAK,KAAK,QAAQ;AACrC,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AAC3C,UAAU,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE;AACzE,YAAY,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACnD,WAAW,EAAE,SAAS,GAAG,EAAE;AAC3B,YAAY,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,WAAW,CAAC,CAAC;AACb,SAAS;AACT;AACA,QAAQ,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,EAAE;AACnE;AACA;AACA;AACA,UAAU,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;AACnC,UAAU,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1B,SAAS,EAAE,SAAS,KAAK,EAAE;AAC3B;AACA;AACA,UAAU,OAAO,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACzD,SAAS,CAAC,CAAC;AACX,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,eAAe,CAAC;AACxB;AACA,IAAI,SAAS,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;AAClC,MAAM,SAAS,0BAA0B,GAAG;AAC5C,QAAQ,OAAO,IAAI,WAAW,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;AACzD,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC/C,SAAS,CAAC,CAAC;AACX,OAAO;AACP;AACA,MAAM,OAAO,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAe,GAAG,eAAe,CAAC,IAAI;AAC9C,UAAU,0BAA0B;AACpC;AACA;AACA,UAAU,0BAA0B;AACpC,SAAS,GAAG,0BAA0B,EAAE,CAAC;AACzC,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,GAAG;AACH;AACA,EAAE,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACjD,EAAE,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,mBAAmB,EAAE,YAAY;AACnE,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;AACxC;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;AAC7E,IAAI,IAAI,WAAW,KAAK,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;AACtD;AACA,IAAI,IAAI,IAAI,GAAG,IAAI,aAAa;AAChC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC;AAC/C,MAAM,WAAW;AACjB,KAAK,CAAC;AACN;AACA,IAAI,OAAO,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/C,QAAQ,IAAI;AACZ,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;AAC1C,UAAU,OAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1D,SAAS,CAAC,CAAC;AACX,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AACpD,IAAI,IAAI,KAAK,GAAG,sBAAsB,CAAC;AACvC;AACA,IAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE;AACxC,MAAM,IAAI,KAAK,KAAK,iBAAiB,EAAE;AACvC,QAAQ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;AACxD,OAAO;AACP;AACA,MAAM,IAAI,KAAK,KAAK,iBAAiB,EAAE;AACvC,QAAQ,IAAI,MAAM,KAAK,OAAO,EAAE;AAChC,UAAU,MAAM,GAAG,CAAC;AACpB,SAAS;AACT;AACA;AACA;AACA,QAAQ,OAAO,UAAU,EAAE,CAAC;AAC5B,OAAO;AACP;AACA,MAAM,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC9B,MAAM,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AACxB;AACA,MAAM,OAAO,IAAI,EAAE;AACnB,QAAQ,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,QAAQ,EAAE;AACtB,UAAU,IAAI,cAAc,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtE,UAAU,IAAI,cAAc,EAAE;AAC9B,YAAY,IAAI,cAAc,KAAK,gBAAgB,EAAE,SAAS;AAC9D,YAAY,OAAO,cAAc,CAAC;AAClC,WAAW;AACX,SAAS;AACT;AACA,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;AACvC;AACA;AACA,UAAU,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;AACrD;AACA,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AAC/C,UAAU,IAAI,KAAK,KAAK,sBAAsB,EAAE;AAChD,YAAY,KAAK,GAAG,iBAAiB,CAAC;AACtC,YAAY,MAAM,OAAO,CAAC,GAAG,CAAC;AAC9B,WAAW;AACX;AACA,UAAU,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACjD;AACA,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AAChD,UAAU,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAChD,SAAS;AACT;AACA,QAAQ,KAAK,GAAG,iBAAiB,CAAC;AAClC;AACA,QAAQ,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACtD,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACtC;AACA;AACA,UAAU,KAAK,GAAG,OAAO,CAAC,IAAI;AAC9B,cAAc,iBAAiB;AAC/B,cAAc,sBAAsB,CAAC;AACrC;AACA,UAAU,IAAI,MAAM,CAAC,GAAG,KAAK,gBAAgB,EAAE;AAC/C,YAAY,SAAS;AACrB,WAAW;AACX;AACA,UAAU,OAAO;AACjB,YAAY,KAAK,EAAE,MAAM,CAAC,GAAG;AAC7B,YAAY,IAAI,EAAE,OAAO,CAAC,IAAI;AAC9B,WAAW,CAAC;AACZ;AACA,SAAS,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AAC5C,UAAU,KAAK,GAAG,iBAAiB,CAAC;AACpC;AACA;AACA,UAAU,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;AACnC,UAAU,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACnC,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE;AAClD,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnD,IAAI,IAAI,MAAM,KAAKA,WAAS,EAAE;AAC9B;AACA;AACA,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC9B;AACA,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AACtC;AACA,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACzC;AACA;AACA,UAAU,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;AACpC,UAAU,OAAO,CAAC,GAAG,GAAGA,WAAS,CAAC;AAClC,UAAU,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjD;AACA,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AAC1C;AACA;AACA,YAAY,OAAO,gBAAgB,CAAC;AACpC,WAAW;AACX,SAAS;AACT;AACA,QAAQ,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;AACjC,QAAQ,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS;AACnC,UAAU,gDAAgD,CAAC,CAAC;AAC5D,OAAO;AACP;AACA,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAClE;AACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACjC,MAAM,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;AAC/B,MAAM,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAC/B,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC9B,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1B;AACA,IAAI,IAAI,EAAE,IAAI,EAAE;AAChB,MAAM,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;AAC/B,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;AACtE,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC9B,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACnB;AACA;AACA,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAChD;AACA;AACA,MAAM,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AACvC,QAAQ,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC,QAAQ,OAAO,CAAC,GAAG,GAAGA,WAAS,CAAC;AAChC,OAAO;AACP;AACA,KAAK,MAAM;AACX;AACA,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA;AACA;AACA,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC5B,IAAI,OAAO,gBAAgB,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;AAC5B;AACA,EAAE,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW;AACxC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW;AACpC,IAAI,OAAO,oBAAoB,CAAC;AAChC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,SAAS,YAAY,CAAC,IAAI,EAAE;AAC9B,IAAI,IAAI,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC;AACA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACnB,MAAM,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACnB,MAAM,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,MAAM,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,SAAS,aAAa,CAAC,KAAK,EAAE;AAChC,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;AACxC,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;AAC3B,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC;AACtB,IAAI,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;AAC9B,GAAG;AACH;AACA,EAAE,SAAS,OAAO,CAAC,WAAW,EAAE;AAChC;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3C,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,GAAG;AACH;AACA,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;AAClC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;AAClB,IAAI,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;AAC5B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,KAAK;AACL,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB;AACA;AACA;AACA,IAAI,OAAO,SAAS,IAAI,GAAG;AAC3B,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE;AAC1B,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,QAAQ,IAAI,GAAG,IAAI,MAAM,EAAE;AAC3B,UAAU,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AAC3B,UAAU,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AAC5B,UAAU,OAAO,IAAI,CAAC;AACtB,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,MAAM,CAAC,QAAQ,EAAE;AAC5B,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;AACpD,MAAM,IAAI,cAAc,EAAE;AAC1B,QAAQ,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7C,OAAO;AACP;AACA,MAAM,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/C,QAAQ,OAAO,QAAQ,CAAC;AACxB,OAAO;AACP;AACA,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACnC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,IAAI,GAAG;AAC3C,UAAU,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE;AACxC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;AAC1C,cAAc,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvC,cAAc,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AAChC,cAAc,OAAO,IAAI,CAAC;AAC1B,aAAa;AACb,WAAW;AACX;AACA,UAAU,IAAI,CAAC,KAAK,GAAGA,WAAS,CAAC;AACjC,UAAU,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC3B;AACA,UAAU,OAAO,IAAI,CAAC;AACtB,SAAS,CAAC;AACV;AACA,QAAQ,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAChC,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAChC,GAAG;AACH,EAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1B;AACA,EAAE,SAAS,UAAU,GAAG;AACxB,IAAI,OAAO,EAAE,KAAK,EAAEA,WAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5C,GAAG;AACH;AACA,EAAE,OAAO,CAAC,SAAS,GAAG;AACtB,IAAI,WAAW,EAAE,OAAO;AACxB;AACA,IAAI,KAAK,EAAE,SAAS,aAAa,EAAE;AACnC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACpB,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACpB;AACA;AACA,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAGA,WAAS,CAAC;AACzC,MAAM,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AACxB,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B;AACA,MAAM,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC3B,MAAM,IAAI,CAAC,GAAG,GAAGA,WAAS,CAAC;AAC3B;AACA,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC7C;AACA,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,QAAQ,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;AAC/B;AACA,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;AACpC,cAAc,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AACrC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AACtC,YAAY,IAAI,CAAC,IAAI,CAAC,GAAGA,WAAS,CAAC;AACnC,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,EAAE,WAAW;AACrB,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB;AACA,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzC,MAAM,IAAI,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;AAC5C,MAAM,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;AACvC,QAAQ,MAAM,UAAU,CAAC,GAAG,CAAC;AAC7B,OAAO;AACP;AACA,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC;AACvB,KAAK;AACL;AACA,IAAI,iBAAiB,EAAE,SAAS,SAAS,EAAE;AAC3C,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AACrB,QAAQ,MAAM,SAAS,CAAC;AACxB,OAAO;AACP;AACA,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC;AACzB,MAAM,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE;AACnC,QAAQ,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;AAC9B,QAAQ,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;AAC/B,QAAQ,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;AAC3B;AACA,QAAQ,IAAI,MAAM,EAAE;AACpB;AACA;AACA,UAAU,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAClC,UAAU,OAAO,CAAC,GAAG,GAAGA,WAAS,CAAC;AAClC,SAAS;AACT;AACA,QAAQ,OAAO,CAAC,EAAE,MAAM,CAAC;AACzB,OAAO;AACP;AACA,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;AACtC;AACA,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AACrC;AACA;AACA;AACA,UAAU,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAS;AACT;AACA,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AACvC,UAAU,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACxD,UAAU,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAC5D;AACA,UAAU,IAAI,QAAQ,IAAI,UAAU,EAAE;AACtC,YAAY,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5C,cAAc,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClD,aAAa,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;AACrD,cAAc,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC9C,aAAa;AACb;AACA,WAAW,MAAM,IAAI,QAAQ,EAAE;AAC/B,YAAY,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5C,cAAc,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClD,aAAa;AACb;AACA,WAAW,MAAM,IAAI,UAAU,EAAE;AACjC,YAAY,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;AAC9C,cAAc,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC9C,aAAa;AACb;AACA,WAAW,MAAM;AACjB,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AACtE,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,MAAM,EAAE,SAAS,IAAI,EAAE,GAAG,EAAE;AAChC,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;AACrC,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;AAC5C,YAAY,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;AAC1C,UAAU,IAAI,YAAY,GAAG,KAAK,CAAC;AACnC,UAAU,MAAM;AAChB,SAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,YAAY;AACtB,WAAW,IAAI,KAAK,OAAO;AAC3B,WAAW,IAAI,KAAK,UAAU,CAAC;AAC/B,UAAU,YAAY,CAAC,MAAM,IAAI,GAAG;AACpC,UAAU,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE;AAC1C;AACA;AACA,QAAQ,YAAY,GAAG,IAAI,CAAC;AAC5B,OAAO;AACP;AACA,MAAM,IAAI,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC,UAAU,GAAG,EAAE,CAAC;AAC/D,MAAM,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,MAAM,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;AACvB;AACA,MAAM,IAAI,YAAY,EAAE;AACxB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;AAC5C,QAAQ,OAAO,gBAAgB,CAAC;AAChC,OAAO;AACP;AACA,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnC,KAAK;AACL;AACA,IAAI,QAAQ,EAAE,SAAS,MAAM,EAAE,QAAQ,EAAE;AACzC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACnC,QAAQ,MAAM,MAAM,CAAC,GAAG,CAAC;AACzB,OAAO;AACP;AACA,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;AACjC,UAAU,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AACtC,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;AAC/B,OAAO,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC3C,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1C,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC/B,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AAC1B,OAAO,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,EAAE;AACvD,QAAQ,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AAC7B,OAAO;AACP;AACA,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,MAAM,EAAE,SAAS,UAAU,EAAE;AACjC,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;AAC7C,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC1D,UAAU,aAAa,CAAC,KAAK,CAAC,CAAC;AAC/B,UAAU,OAAO,gBAAgB,CAAC;AAClC,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,EAAE,SAAS,MAAM,EAAE;AAC9B,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AACrC,UAAU,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;AACxC,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACvC,YAAY,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AACpC,YAAY,aAAa,CAAC,KAAK,CAAC,CAAC;AACjC,WAAW;AACX,UAAU,OAAO,MAAM,CAAC;AACxB,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,MAAM,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC/C,KAAK;AACL;AACA,IAAI,aAAa,EAAE,SAAS,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;AAC3D,MAAM,IAAI,CAAC,QAAQ,GAAG;AACtB,QAAQ,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAClC,QAAQ,UAAU,EAAE,UAAU;AAC9B,QAAQ,OAAO,EAAE,OAAO;AACxB,OAAO,CAAC;AACR;AACA,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AAClC;AACA;AACA,QAAQ,IAAI,CAAC,GAAG,GAAGA,WAAS,CAAC;AAC7B,OAAO;AACP;AACA,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,OAAO,CAAC;AACjB;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,EAA+B,MAAM,CAAC,OAAO,CAAK;AAClD,CAAC,CAAC,CAAC;AACH;AACA,IAAI;AACJ,EAAE,kBAAkB,GAAG,OAAO,CAAC;AAC/B,CAAC,CAAC,OAAO,oBAAoB,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACtC,IAAI,UAAU,CAAC,kBAAkB,GAAG,OAAO,CAAC;AAC5C,GAAG,MAAM;AACT,IAAI,QAAQ,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC;AACrD,GAAG;AACH;;;;ACjvBA,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;AAC1C,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;AAClB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;AACpC,MAAM,KAAK,EAAE,KAAK;AAClB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,QAAQ,EAAE,IAAI;AACpB,KAAK,CAAC,CAAC;AACP,GAAG,MAAM;AACT,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrB,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;AACD;AACA,cAAc,GAAG,eAAe,CAAC;AACjC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;;;;;;AChB5E,IAAI,MAAM,GAAG,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,GAAGC,cAAI,CAAC;AACvD,IAAI,QAAQ,GAAG,CAAC,YAAY;AAC5B,SAAS,CAAC,GAAG;AACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,aAAY;AACvC,CAAC;AACD,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC;AACrB,OAAO,IAAI,CAAC,EAAE,CAAC;AACf,CAAC,GAAG,CAAC;AACL,CAAC,SAAS,IAAI,EAAE;AAChB;EACkB,UAAU,OAAO,EAAE;AACrC;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,YAAY,EAAE,iBAAiB,IAAI,IAAI;AAC3C,IAAI,QAAQ,EAAE,QAAQ,IAAI,IAAI,IAAI,UAAU,IAAI,MAAM;AACtD,IAAI,IAAI;AACR,MAAM,YAAY,IAAI,IAAI;AAC1B,MAAM,MAAM,IAAI,IAAI;AACpB,MAAM,CAAC,WAAW;AAClB,QAAQ,IAAI;AACZ,UAAU,IAAI,IAAI,EAAE,CAAC;AACrB,UAAU,OAAO,IAAI;AACrB,SAAS,CAAC,OAAO,CAAC,EAAE;AACpB,UAAU,OAAO,KAAK;AACtB,SAAS;AACT,OAAO,GAAG;AACV,IAAI,QAAQ,EAAE,UAAU,IAAI,IAAI;AAChC,IAAI,WAAW,EAAE,aAAa,IAAI,IAAI;AACtC,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,UAAU,CAAC,GAAG,EAAE;AAC3B,IAAI,OAAO,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC;AACvD,GAAG;AACH;AACA,EAAE,IAAI,OAAO,CAAC,WAAW,EAAE;AAC3B,IAAI,IAAI,WAAW,GAAG;AACtB,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAC3B,MAAM,4BAA4B;AAClC,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAC7B,MAAM,uBAAuB;AAC7B,KAAK,CAAC;AACN;AACA,IAAI,IAAI,iBAAiB;AACzB,MAAM,WAAW,CAAC,MAAM;AACxB,MAAM,SAAS,GAAG,EAAE;AACpB,QAAQ,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnF,OAAO,CAAC;AACR,GAAG;AACH;AACA,EAAE,SAAS,aAAa,CAAC,IAAI,EAAE;AAC/B,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1B,KAAK;AACL,IAAI,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAChD,MAAM,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;AACnE,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE;AAC7B,GAAG;AACH;AACA,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE;AACjC,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,KAAK;AACL,IAAI,OAAO,KAAK;AAChB,GAAG;AACH;AACA;AACA,EAAE,SAAS,WAAW,CAAC,KAAK,EAAE;AAC9B,IAAI,IAAI,QAAQ,GAAG;AACnB,MAAM,IAAI,EAAE,WAAW;AACvB,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;AAClC,QAAQ,OAAO,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;AACxD,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE;AAC1B,MAAM,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW;AAC7C,QAAQ,OAAO,QAAQ;AACvB,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,OAAO,QAAQ;AACnB,GAAG;AACH;AACA,EAAE,SAAS,OAAO,CAAC,OAAO,EAAE;AAC5B,IAAI,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AAClB;AACA,IAAI,IAAI,OAAO,YAAY,OAAO,EAAE;AACpC,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE;AAC5C,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACjC,OAAO,EAAE,IAAI,CAAC,CAAC;AACf,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACvC,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;AACvC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,OAAO,EAAE,IAAI,CAAC,CAAC;AACf,KAAK,MAAM,IAAI,OAAO,EAAE;AACxB,MAAM,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;AACjE,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,OAAO,EAAE,IAAI,CAAC,CAAC;AACf,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE;AACnD,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAI,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAClC,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;AAChE,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS,IAAI,EAAE;AAC/C,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE;AACzC,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI;AACjD,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE;AACzC,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvD,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE;AAChD,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAC1D,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,QAAQ,EAAE,OAAO,EAAE;AAC1D,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;AAC/B,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AACzC,QAAQ,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3D,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,WAAW;AACtC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE;AACvC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,WAAW,CAAC,KAAK,CAAC;AAC7B,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,WAAW;AACxC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;AACjC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,WAAW,CAAC,KAAK,CAAC;AAC7B,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,WAAW;AACzC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE;AACvC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAChC,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,WAAW,CAAC,KAAK,CAAC;AAC7B,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE;AACxB,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;AACnE,GAAG;AACH;AACA,EAAE,SAAS,QAAQ,CAAC,IAAI,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;AAC1D,KAAK;AACL,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB,GAAG;AACH;AACA,EAAE,SAAS,eAAe,CAAC,MAAM,EAAE;AACnC,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;AACjD,MAAM,MAAM,CAAC,MAAM,GAAG,WAAW;AACjC,QAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,OAAO,CAAC;AACR,MAAM,MAAM,CAAC,OAAO,GAAG,WAAW;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7B,OAAO,CAAC;AACR,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,SAAS,qBAAqB,CAAC,IAAI,EAAE;AACvC,IAAI,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAClC,IAAI,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACnC,IAAI,OAAO,OAAO;AAClB,GAAG;AACH;AACA,EAAE,SAAS,cAAc,CAAC,IAAI,EAAE;AAChC,IAAI,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAClC,IAAI,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAI,OAAO,OAAO;AAClB,GAAG;AACH;AACA,EAAE,SAAS,qBAAqB,CAAC,GAAG,EAAE;AACtC,IAAI,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AACnC,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,GAAG;AACH;AACA,EAAE,SAAS,WAAW,CAAC,GAAG,EAAE;AAC5B,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE;AACnB,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,KAAK,MAAM;AACX,MAAM,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAChD,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,MAAM,OAAO,IAAI,CAAC,MAAM;AACxB,KAAK;AACL,GAAG;AACH;AACA,EAAE,SAAS,IAAI,GAAG;AAClB,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC1B;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE;AACpC,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC5B,MAAM,IAAI,CAAC,IAAI,EAAE;AACjB,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AAC5B,OAAO,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC3C,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9B,OAAO,MAAM,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AACrE,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9B,OAAO,MAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC7E,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAClC,OAAO,MAAM,IAAI,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AACxF,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzC,OAAO,MAAM,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AAC1E,QAAQ,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzD;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC3D,OAAO,MAAM,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE;AAChH,QAAQ,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAClD,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrE,OAAO;AACP;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;AAC7C,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACtC,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;AACvE,SAAS,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AAC1D,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChE,SAAS,MAAM,IAAI,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC1F,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,iDAAiD,CAAC,CAAC;AAC9F,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;AACtB,MAAM,IAAI,CAAC,IAAI,GAAG,WAAW;AAC7B,QAAQ,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,QAAQ,IAAI,QAAQ,EAAE;AACtB,UAAU,OAAO,QAAQ;AACzB,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,UAAU,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,SAAS,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC1C,UAAU,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACnE,SAAS,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;AACvC,UAAU,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;AACjE,SAAS,MAAM;AACf,UAAU,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5D,SAAS;AACT,OAAO,CAAC;AACR;AACA,MAAM,IAAI,CAAC,WAAW,GAAG,WAAW;AACpC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACnC,UAAU,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACzE,SAAS,MAAM;AACf,UAAU,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACxD,SAAS;AACT,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW;AAC3B,MAAM,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpC,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,OAAO,QAAQ;AACvB,OAAO;AACP;AACA,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE;AAC1B,QAAQ,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C,OAAO,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAQ,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC5E,OAAO,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;AACrC,QAAQ,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;AAC/D,OAAO,MAAM;AACb,QAAQ,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9C,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE;AAC1B,MAAM,IAAI,CAAC,QAAQ,GAAG,WAAW;AACjC,QAAQ,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AACvC,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW;AAC3B,MAAM,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,KAAK,CAAC;AACN;AACA,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA;AACA,EAAE,IAAI,OAAO,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACpE;AACA,EAAE,SAAS,eAAe,CAAC,MAAM,EAAE;AACnC,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;AACvC,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM;AAC3D,GAAG;AACH;AACA,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;AACnC,IAAI,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC5B,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAC5B;AACA,IAAI,IAAI,KAAK,YAAY,OAAO,EAAE;AAClC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC1B,QAAQ,MAAM,IAAI,SAAS,CAAC,cAAc,CAAC;AAC3C,OAAO;AACP,MAAM,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AAC3B,MAAM,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;AAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC5B,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAClD,OAAO;AACP,MAAM,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AACjC,MAAM,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC7B,MAAM,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AACjC,MAAM,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE;AAC5C,QAAQ,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;AAC/B,QAAQ,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC9B,OAAO;AACP,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC;AAChF,IAAI,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAC1C,MAAM,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAClD,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;AAC1E,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;AAClD,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;AAChD,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,KAAK,IAAI,EAAE;AACnE,MAAM,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC;AACtE,KAAK;AACL,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,GAAG;AACH;AACA,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW;AACvC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACpD,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE;AACxB,IAAI,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;AAC9B,IAAI,IAAI;AACR,OAAO,IAAI,EAAE;AACb,OAAO,KAAK,CAAC,GAAG,CAAC;AACjB,OAAO,OAAO,CAAC,SAAS,KAAK,EAAE;AAC/B,QAAQ,IAAI,KAAK,EAAE;AACnB,UAAU,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,UAAU,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvD,UAAU,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC1D,UAAU,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E,SAAS;AACT,OAAO,CAAC,CAAC;AACT,IAAI,OAAO,IAAI;AACf,GAAG;AACH;AACA,EAAE,SAAS,YAAY,CAAC,UAAU,EAAE;AACpC,IAAI,IAAI,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAChC;AACA;AACA,IAAI,IAAI,mBAAmB,GAAG,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AACtE,IAAI,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;AAC9D,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;AACrC,MAAM,IAAI,GAAG,EAAE;AACf,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,QAAQ,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnC,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,OAAO;AAClB,GAAG;AACH;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC/B;AACA,EAAE,SAAS,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE;AACvC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;AACtE,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;AACtD,IAAI,IAAI,CAAC,UAAU,GAAG,YAAY,IAAI,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;AAC1E,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;AACjC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,GAAG;AACH;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAChC;AACA,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW;AACxC,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE;AACxC,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,MAAM,UAAU,EAAE,IAAI,CAAC,UAAU;AACjC,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACxC,MAAM,GAAG,EAAE,IAAI,CAAC,GAAG;AACnB,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;AACA,EAAE,QAAQ,CAAC,KAAK,GAAG,WAAW;AAC9B,IAAI,IAAI,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;AACnE,IAAI,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;AAC5B,IAAI,OAAO,QAAQ;AACnB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD;AACA,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,GAAG,EAAE,MAAM,EAAE;AAC5C,IAAI,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACjD,MAAM,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC;AACjD,KAAK;AACL;AACA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AACzE,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AAC3C,EAAE,IAAI;AACN,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;AAC/B,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,OAAO,EAAE,IAAI,EAAE;AACnD,MAAM,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC7B,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB,MAAM,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AACjC,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAC/B,KAAK,CAAC;AACN,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACpE,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;AACtE,GAAG;AACH;AACA,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;AACjD,MAAM,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7C;AACA,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;AACpD,QAAQ,OAAO,MAAM,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACxE,OAAO;AACP;AACA,MAAM,IAAI,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;AACrC;AACA,MAAM,SAAS,QAAQ,GAAG;AAC1B,QAAQ,GAAG,CAAC,KAAK,EAAE,CAAC;AACpB,OAAO;AACP;AACA,MAAM,GAAG,CAAC,MAAM,GAAG,WAAW;AAC9B,QAAQ,IAAI,OAAO,GAAG;AACtB,UAAU,MAAM,EAAE,GAAG,CAAC,MAAM;AAC5B,UAAU,UAAU,EAAE,GAAG,CAAC,UAAU;AACpC,UAAU,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;AAClE,SAAS,CAAC;AACV,QAAQ,OAAO,CAAC,GAAG,GAAG,aAAa,IAAI,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACpG,QAAQ,IAAI,IAAI,GAAG,UAAU,IAAI,GAAG,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC;AACvE,QAAQ,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7C,OAAO,CAAC;AACR;AACA,MAAM,GAAG,CAAC,OAAO,GAAG,WAAW;AAC/B,QAAQ,MAAM,CAAC,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACxD,OAAO,CAAC;AACR;AACA,MAAM,GAAG,CAAC,SAAS,GAAG,WAAW;AACjC,QAAQ,MAAM,CAAC,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACxD,OAAO,CAAC;AACR;AACA,MAAM,GAAG,CAAC,OAAO,GAAG,WAAW;AAC/B,QAAQ,MAAM,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;AAClE,OAAO,CAAC;AACR;AACA,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAClD;AACA,MAAM,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE;AAC7C,QAAQ,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;AACnC,OAAO,MAAM,IAAI,OAAO,CAAC,WAAW,KAAK,MAAM,EAAE;AACjD,QAAQ,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC;AACpC,OAAO;AACP;AACA,MAAM,IAAI,cAAc,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;AACjD,QAAQ,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC;AAClC,OAAO;AACP;AACA,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE;AACpD,QAAQ,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,OAAO,CAAC,CAAC;AACT;AACA,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;AAC1B,QAAQ,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC3D;AACA,QAAQ,GAAG,CAAC,kBAAkB,GAAG,WAAW;AAC5C;AACA,UAAU,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE;AACpC,YAAY,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAClE,WAAW;AACX,SAAS,CAAC;AACV,OAAO;AACP;AACA,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,SAAS,KAAK,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACpF,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AACxB;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,GAAG;AACH;AACA,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAC5B,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AAC5B,EAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC9B,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB;AACA,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE;AACA,EAAE,OAAO,OAAO,CAAC;AACjB;AACA,EAAC,CAAC,EAAE,CAAC,EAAE;AACP,CAAC,EAAE,QAAQ,CAAC,CAAC;AACb,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC/B;AACA,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC/B;AACA;AACA,IAAI,GAAG,GAAG,QAAQ,CAAC;AACnB,OAAO,GAAG,GAAG,CAAC,MAAK;AACnB,eAAe,GAAG,GAAG,CAAC,MAAK;AAC3B,aAAa,GAAG,GAAG,CAAC,MAAK;AACzB,eAAe,GAAG,GAAG,CAAC,QAAO;AAC7B,eAAe,GAAG,GAAG,CAAC,QAAO;AAC7B,gBAAgB,GAAG,GAAG,CAAC,SAAQ;AAC/B,cAAc,GAAG;;;;;ACxiBjB;AACe,MAAMC,cAAN,SAA6BC,KAA7B,CAAmC;AAE9CC,EAAAA,WAAW,CAACC,OAAD,EAAmBC,IAAnB,EAAkC;AACzC,UAAMD,OAAN;;AADyC;;AAEzC,SAAKC,IAAL,GAAYA,IAAZ;AACH;;AAL6C;;ACWlD;AACe,MAAMC,KAAN,SAAoBL,cAApB,CAAmC;AAK9CE,EAAAA,WAAW,CAACI,IAAD,EAAkBC,QAAlB,EAAuC;AAAA;;AAC9C,UACID,IAAI,CAACH,OADT,uBAEIG,IAAI,CAACE,WAFT,sDAEI,kBAAkBJ,IAFtB;;AAD8C;;AAAA;;AAAA;;AAM9C,UAAM;AAAEI,MAAAA,WAAF;AAAeL,MAAAA,OAAf;AAAwBM,MAAAA,KAAxB;AAA+BC,MAAAA;AAA/B,QAA0CJ,IAAhD;AACA,SAAKI,MAAL,GAAcA,MAAd,aAAcA,MAAd,cAAcA,MAAd,GAAwBH,QAAxB,aAAwBA,QAAxB,uBAAwBA,QAAQ,CAAEG,MAAlC;AACA,SAAKP,OAAL,GAAeA,OAAf;;AAEA,QAAIK,WAAJ,EAAiB;AACb,YAAM;AAAEJ,QAAAA,IAAF;AAAQ,WAAGO;AAAX,UAAoBH,WAA1B;AACA,WAAKJ,IAAL,GAAYA,IAAZ;AACA,WAAKI,WAAL,GAAmBG,IAAnB;AACH;;AACD,QAAIF,KAAJ,EAAW;AACP,WAAKA,KAAL,GAAaA,KAAb;AACH;AACJ;;AAvB6C;;ACZlD;AACe,MAAMG,MAAN,CAAa;AAKxBV,EAAAA,WAAW,CAACI,IAAD,EAAYC,QAAZ,EAAgC;AAAA;;AAAA;;AAAA;;AACvC,UAAM;AAAEG,MAAAA,MAAF;AAAUG,MAAAA;AAAV,QAAsBN,QAA5B;AACA,SAAKG,MAAL,GAAcA,MAAd;AACA,SAAKG,OAAL,GAAeA,OAAf;AACA,SAAKP,IAAL,GAAYA,IAAZ;AACH;;AAVuB;;ACC5B;AACA,MAAMQ,aAAa,GAAIC,IAAD,IAAe;AACjC,MAAI,CAACA,IAAL,EAAW,OAAO,EAAP;;AACX,UAAQA,IAAI,CAACb,WAAb;AACI,SAAKc,MAAL;AAAa,aAAOD,IAAI,KAAKE,QAAT,GAAoB,yCAApB,uBAA6EF,IAA7E,CAAP;;AACb;AACR;AACA;AACA;AACA;AACA;;AACQ;AACR;AACA;;AACQ,SAAKG,MAAL;AAAa,iCAAoBH,IAApB;;AACb,SAAKI,IAAL;AAAW,iCAAoB,IAAIA,IAAJ,CAASJ,IAAT,EAAeK,WAAf,EAApB;;AACX;AAAS,aAAO,EAAP;AAbb;AAeH,CAjBD;;AA2BA,cAAe;AACXC,EAAAA,OAAO,CAACC,GAAD,EAA6B;AAChC,QAAI,CAACA,GAAL,EAAU,OAAO,IAAP;AACV,WAAOC,kBAAkB,CAACC,QAAQ,CAACC,MAAT,CAAgBC,OAAhB,CAAwB,IAAIC,MAAJ,2BAA8BC,kBAAkB,CAACN,GAAD,CAAlB,CAAwBI,OAAxB,CAAgC,SAAhC,EAA2C,MAA3C,CAA9B,iCAAxB,EAAwI,IAAxI,CAAD,CAAlB,IAAqK,IAA5K;AACH,GAJU;;AAKXG,EAAAA,OAAO,CAACP,GAAD,EAAcQ,KAAd,EAAgDC,OAA0B,GAAG,EAA7E,EAA0F;AAC7F,QAAI,CAACT,GAAD,IAAS,2CAAD,CAA8CU,IAA9C,CAAmDV,GAAnD,CAAZ,EAAqE,OAAO,KAAP;AACrE,UAAM;AAAEW,MAAAA,IAAF;AAAQC,MAAAA,MAAR;AAAgBC,MAAAA,GAAhB;AAAqBC,MAAAA,MAArB;AAA6BC,MAAAA;AAA7B,QAA0CN,OAAhD;AACA,UAAMO,SAAS,GAAGxB,aAAa,CAACqB,GAAD,CAA/B;AACA,UAAMI,SAAS,GAAGL,MAAM,sBAAeA,MAAf,IAA0B,EAAlD;AACA,UAAMM,OAAO,GAAGP,IAAI,oBAAaA,IAAb,IAAsB,EAA1C;AACA,UAAMQ,SAAS,GAAGL,MAAM,GAAG,UAAH,GAAgB,EAAxC;AACA,UAAMM,WAAW,GAAGL,QAAQ,wBAAiBA,QAAjB,IAA8B,EAA1D;AAEAb,IAAAA,QAAQ,CAACC,MAAT,aAAqBG,kBAAkB,CAACN,GAAD,CAAvC,cAAgDM,kBAAkB,CAACE,KAAD,CAAlE,SAA4EQ,SAA5E,SAAwFC,SAAxF,SAAoGC,OAApG,SAA8GC,SAA9G,SAA0HC,WAA1H;AACA,WAAO,IAAP;AACH,GAhBU;;AAiBXC,EAAAA,UAAU,CAACrB,GAAD,EAAcS,OAA0B,GAAG,EAA3C,EAAwD;AAC9D,QAAI,CAAC,KAAKa,OAAL,CAAatB,GAAb,CAAL,EAAwB,OAAO,KAAP;AACxB,UAAM;AAAEW,MAAAA,IAAF;AAAQC,MAAAA;AAAR,QAAmBH,OAAzB;AACA,UAAMQ,SAAS,GAAGL,MAAM,sBAAeA,MAAf,IAA0B,EAAlD;AACA,UAAMM,OAAO,GAAGP,IAAI,oBAAaA,IAAb,IAAsB,EAA1C;AACAT,IAAAA,QAAQ,CAACC,MAAT,aAAqBG,kBAAkB,CAACN,GAAD,CAAvC,qDAAuFiB,SAAvF,SAAmGC,OAAnG;AACA,WAAO,IAAP;AACH,GAxBU;;AAyBXI,EAAAA,OAAO,CAACtB,GAAD,EAAuB;AAC1B,QAAI,CAACA,GAAD,IAAS,2CAAD,CAA8CU,IAA9C,CAAmDV,GAAnD,CAAZ,EAAqE,OAAO,KAAP;AAErE,WAAQ,IAAIK,MAAJ,sBAAyBC,kBAAkB,CAACN,GAAD,CAAlB,CAAwBI,OAAxB,CAAgC,SAAhC,EAA2C,MAA3C,CAAzB,aAAD,CAAwFM,IAAxF,CAA6FR,QAAQ,CAACC,MAAtG,CAAP;AACH,GA7BU;;AA8BXoB,EAAAA,KAAK,GAAa;AACd,UAAMC,KAAK,GAAGtB,QAAQ,CAACC,MAAT,CAAgBC,OAAhB,CAAwB,uDAAxB,EAAiF,EAAjF,EAAqFqB,KAArF,CAA2F,oBAA3F,CAAd;;AACA,SAAK,IAAIC,IAAI,GAAGF,KAAK,CAACG,MAAjB,EAAyBC,IAAI,GAAG,CAArC,EAAwCA,IAAI,GAAGF,IAA/C,EAAqDE,IAAI,EAAzD,EAA6D;AACzDJ,MAAAA,KAAK,CAACI,IAAD,CAAL,GAAc3B,kBAAkB,CAACuB,KAAK,CAACI,IAAD,CAAN,CAAhC;AACA,WAAKP,UAAL,CAAgBG,KAAK,CAACI,IAAD,CAArB;AACH;;AACD,WAAOJ,KAAP;AACH;;AArCU,CAAf;;AC9BA;;AAQA,MAAMK,KAAN,CAAY;AAERjD,EAAAA,WAAW,CAACkD,KAAD,EAAwB;AAAA;;AAC/B,SAAKC,MAAL,GAAcD,KAAd;AACH;;AACDP,EAAAA,KAAK,GAAG;AACJ,SAAKQ,MAAL,CAAYR,KAAZ;AACH;;AACQ,MAALO,KAAK,GAAG;AACR,WAAO,KAAKC,MAAZ;AACH;;AACQ,MAALD,KAAK,CAACA,KAAD,EAAQ;AACb,SAAKC,MAAL,GAAcD,KAAd;AACH;;AAbO;;AAgBZ,MAAME,OAAO,GAAG,IAAIC,GAAJ,EAAhB;AACO,MAAMC,SAAN,SAAwBL,KAAxB,CAA8B;AACjCjD,EAAAA,WAAW,GAAG;AACV,UAAMoD,OAAN;AACH;;AACDjC,EAAAA,OAAO,CAACC,GAAD,EAAuB;AAC1B,WAAO,MAAM8B,KAAN,CAAYK,GAAZ,CAAgBnC,GAAhB,CAAP;AACH;;AACDO,EAAAA,OAAO,CAACP,GAAD,EAAcQ,KAAd,EAAgD;AACnD,WAAO,MAAMsB,KAAN,CAAYM,GAAZ,CAAgBpC,GAAhB,EAAqBQ,KAArB,CAAP;AACH;;AACDa,EAAAA,UAAU,CAACrB,GAAD,EAAuB;AAC7B,WAAO,MAAM8B,KAAN,CAAYO,MAAZ,CAAmBrC,GAAnB,CAAP;AACH;;AAZgC;AAe9B,MAAMsC,YAAN,SAA2BT,KAA3B,CAAiC;AACpCjD,EAAAA,WAAW,GAAG;AACV,UAAM2D,MAAM,CAACC,cAAb;AACH;;AACDzC,EAAAA,OAAO,CAACC,GAAD,EAAgC;AACnC,WAAOyC,IAAI,CAACC,KAAL,CAAW,MAAMZ,KAAN,CAAY/B,OAAZ,CAAoBC,GAApB,CAAX,CAAP;AACH;;AACDO,EAAAA,OAAO,CAACP,GAAD,EAAcQ,KAAd,EAA6C;AAChD,WAAO,MAAMsB,KAAN,CAAYvB,OAAZ,CAAoBP,GAApB,EAAyByC,IAAI,CAACE,SAAL,CAAenC,KAAf,CAAzB,CAAP;AACH;;AACDa,EAAAA,UAAU,CAACrB,GAAD,EAAoB;AAC1B,WAAO,MAAM8B,KAAN,CAAYT,UAAZ,CAAuBrB,GAAvB,CAAP;AACH;;AAZmC;AAejC,MAAM4C,WAAN,CAAkB;AAErBhE,EAAAA,WAAW,CAAC6B,OAAO,GAAG,EAAX,EAAe;AAAA,qCADhB,EACgB;;AACtB,UAAMoC,QAAQ,GAAGN,MAAM,CAACO,QAAP,CAAgBD,QAAjC,CADsB;AAGtB;;AACA,UAAME,QAAQ,GAAGF,QAAQ,KAAK,WAAb,GACb;AAAElC,MAAAA,IAAI,EAAE,GAAR;AAAaC,MAAAA,MAAM,aAAMiC,QAAN;AAAnB,KADa,GAEb;AAAElC,MAAAA,IAAI,EAAE;AAAR,KAFJ;AAGA,SAAKF,OAAL,GAAe,EAAE,GAAGsC,QAAL;AAAe,SAAGtC;AAAlB,KAAf;AACH;;AACDV,EAAAA,OAAO,CAACC,GAAD,EAAgC;AACnC,UAAMgD,IAAI,GAAGC,OAAO,CAAClD,OAAR,CAAgBC,GAAhB,CAAb;AACA,WAAOgD,IAAI,GAAGP,IAAI,CAACC,KAAL,CAAWM,IAAX,CAAH,GAAsB,IAAjC;AACH;;AACDzC,EAAAA,OAAO,CAACP,GAAD,EAAcQ,KAAd,EAAgD;AACnD,WAAOyC,OAAO,CAAC1C,OAAR,CAAgBP,GAAhB,EAAqByC,IAAI,CAACE,SAAL,CAAenC,KAAf,CAArB,EAA4C,KAAKC,OAAjD,CAAP;AACH;;AACDY,EAAAA,UAAU,CAACrB,GAAD,EAAuB;AAC7B,WAAOiD,OAAO,CAAC5B,UAAR,CAAmBrB,GAAnB,EAAwB,KAAKS,OAA7B,CAAP;AACH;;AACDc,EAAAA,KAAK,GAAa;AACd,WAAO0B,OAAO,CAAC1B,KAAR,EAAP;AACH;;AAvBoB;;ICxDb2B,oBAAZ;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;WAfYA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,yBAAAA;;IAgBAC;AA8BZ;AACA;AACA;AACA;;WAjCYA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,mBAAAA;;IAkCAC;AAqBZ;AACA;AACA;AACA;;WAxBYA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,WAAAA;;IAyBAC;;WAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,kBAAAA;;IAgEAC,aAAZ;;WAAYA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,kBAAAA;;IAqBAC,YAAZ;;WAAYA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,iBAAAA;;IAgBAC,YAAZ;;WAAYA;AAAAA,EAAAA;GAAAA,iBAAAA;;IASAC,UAAZ;AA2CA;AACA;AACA;AACA;;WA9CYA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,eAAAA;;IA+CAC;AAqEZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;WA/EYA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,SAAAA;;ACzOZ;AACO,MAAMC,SAAS,GAAG,IAAIC,QAAJ,CAAa,qDAAb,CAAlB;AACA,MAAMC,MAAM,GAAG,IAAID,QAAJ,CAAa,oDAAb,CAAf;AAIA,MAAME,MAAM,GAAG,CAACC,GAAD,EAAcC,GAAd,KAAsCA,GAAG,CAACC,UAAJ,CAAeF,GAAf,IAAsBC,GAAtB,aAA+BD,GAA/B,SAAqCC,GAArC,CAArD;;ACFP,MAAME,WAAW,GAAG,CAApB;;AACA,MAAMC,MAAN,CAAa;AASTvF,EAAAA,WAAW,GAAG;AAAA,yCARAsF,WAQA;;AAAA,0CAPC,EAOD;;AAAA,sCANH,EAMG;;AAAA,+CALM,EAKN;;AAAA,+CAJM,EAIN;;AAAA;;AACV,QAAIP,SAAS,EAAb,EAAiB;AACb,WAAKS,WAAL;AACA;AACH;;AACD,QAAIP,MAAM,EAAV,EAAc;AACV,WAAKQ,QAAL;AACA;AACH;;AACD,UAAM,IAAI3F,cAAJ,CAAmB,4DAAnB,CAAN;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACmB,MAAX4F,WAAW,GAAG;AACd,WAAO,KAAKC,YAAZ;AACH;;AAEc,MAAXD,WAAW,CAACA,WAAD,EAAc;AACzB,QAAI,CAACA,WAAW,CAACL,UAAZ,CAAuB,MAAvB,CAAL,EAAqC;;AACrC,QAAIK,WAAW,CAACE,QAAZ,CAAqB,GAArB,CAAJ,EAA+B;AAC3BF,MAAAA,WAAW,GAAGA,WAAW,CAACG,KAAZ,CAAkB,CAAlB,EAAqB,CAAC,CAAtB,CAAd;AACH;;AACD,SAAKF,YAAL,GAAoBD,WAApB;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACe,MAAPI,OAAO,GAAG;AACV,WAAO,KAAKC,QAAZ;AACH;;AAEU,MAAPD,OAAO,CAACA,OAAD,EAAU;AACjB,SAAKC,QAAL,GAAgBD,OAAhB;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACkB,MAAVE,UAAU,GAAG;AACb,WAAO,KAAKC,WAAZ;AACH;;AAEa,MAAVD,UAAU,CAACC,WAAD,EAAc;AACxB;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACwB,MAAhBC,gBAAgB,GAAG;AACnB,WAAO,KAAKC,iBAAZ;AACH;;AAEmB,MAAhBD,gBAAgB,CAACA,gBAAD,EAAmB;AACnC,SAAKC,iBAAL,GAAyBD,gBAAzB;AACH;AACD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACwB,MAAhBE,gBAAgB,GAAG;AACnB,WAAO,KAAKC,iBAAZ;AACH;;AAEmB,MAAhBD,gBAAgB,CAACA,gBAAD,EAAmB;AACnC,SAAKC,iBAAL,GAAyBD,gBAAzB;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACIE,EAAAA,OAAO,GAAG;AACN,QAAI,CAACvB,SAAS,EAAd,EAAkB,OAAO,KAAP;AAClB,UAAMwB,IAAI,GAAG5C,MAAM,CAACO,QAAP,CAAgBqC,IAA7B;AACA,WAAOA,IAAI,KAAK,WAAT,IACHA,IAAI,CAACC,OAAL,CAAa,QAAb,MAA2B,CADxB,IAEHD,IAAI,CAACC,OAAL,CAAa,OAAb,MAA0B,CAAC,CAFxB,IAGHD,IAAI,CAACC,OAAL,CAAa,WAAb,MAA8B,CAHlC;AAIH;;AAEDf,EAAAA,QAAQ,GAAG;AACP;AACA,SAAKC,WAAL,GAAmB,OAAnB;AACA,SAAKI,OAAL,GAAe,WAAf;AACA;AACH;;AAEDN,EAAAA,WAAW,GAAG;AACV,UAAMc,OAAO,GAAG,KAAKA,OAAL,EAAhB;AACA,UAAM;AAAEG,MAAAA,QAAF;AAAYC,MAAAA,QAAZ;AAAsBH,MAAAA;AAAtB,QAA+B5C,MAAM,CAACO,QAA5C;AACA,SAAKwB,WAAL,GAAmBY,OAAO,GAAG,OAAH,GAAaG,QAAvC;AACA,SAAKX,OAAL,GAAeQ,OAAO,GAAG,WAAH,GAAiBC,IAAvC;AAEA,UAAMI,KAAK,GAAGD,QAAQ,CAACC,KAAT,CAAe,2BAAf,CAAd;;AACA,QAAIA,KAAJ,EAAW;AACP,YAAM,CAACC,OAAD,EAAUC,OAAV,IAAqBF,KAAK,CAACd,KAAN,CAAY,CAAZ,CAA3B;AACA,WAAKK,gBAAL,GAAwBU,OAAxB;AACA,WAAKR,gBAAL,GAAwBS,OAAxB;AACH;AACJ;;AA1JQ;;MA6JPC,MAAM,GAAG,IAAIvB,MAAJ;;AC5Jf,MAAM;AAAEwB,EAAAA,MAAF;AAAUC,EAAAA;AAAV,IAAsB1C,oBAA5B;AAoCA,MAAM2C,WAAW,GAAG,6BAApB;AACA,MAAMC,WAAW,GAAG,kBAApB;;AACA,MAAMC,cAAN,CAAqB;AAGjBnH,EAAAA,WAAW,CAACoH,SAAD,EAA+C;AAAA;;AACtD,QAAIA,SAAS,KAAKL,MAAd,IAAwBK,SAAS,KAAKJ,OAA1C,EAAmD;AAC/C,YAAM,IAAIlH,cAAJ,mCAA6CsH,SAA7C,8BAAwEL,MAAxE,qBAAuFC,OAAvF,SAAN;AACH;;AACD,SAAKK,IAAL,GAAYD,SAAZ;AACA,SAAKE,UAAL;AACH;;AACU,MAAPC,OAAO,GAAG;AACV,UAAMtE,KAAK,GAAG,KAAKuE,QAAL,EAAd;AACA,WAAO,IAAIvE,KAAJ,GAAY9B,OAAZ,CAAoB8F,WAApB,CAAP;AACH;;AACU,MAAPM,OAAO,CAACA,OAAD,EAA+B;AACtC,UAAMtE,KAAK,GAAG,KAAKuE,QAAL,EAAd;AACA,UAAM3F,OAAO,GAAG,KAAK4F,eAAL,CAAqBF,OAArB,CAAhB;;AAEA,QAAIA,OAAJ,EAAa;AACT,UAAItE,KAAJ,CAAUpB,OAAV,EAAmBF,OAAnB,CAA2BsF,WAA3B,EAAwCM,OAAxC;AACH,KAFD,MAEO,IAAI,KAAKA,OAAT,EAAkB;AACrB,UAAItE,KAAJ,CAAUpB,OAAV,EAAmBY,UAAnB,CAA8BwE,WAA9B;AACH;AACJ;;AACDO,EAAAA,QAAQ,GAAG;AACP,QAAIvC,MAAM,EAAV,EAAc,OAAO3B,SAAP;;AACd,YAAQ,KAAK+D,IAAb;AACI,WAAKL,OAAL;AAAc,eAAOtD,YAAP;;AACd,WAAKqD,MAAL;AACA;AAAS,eAAO/C,WAAP;AAHb;AAKH;AACD;;;AACAyD,EAAAA,eAAe,CAACF,OAAD,EAAoB;AAC/B,UAAMG,SAAS,GAAGH,OAAO,IAAI,KAAKA,OAAlC;AACA,QAAI,CAACG,SAAD,IAAczC,MAAM,EAAxB,EAA4B,OAAO,EAAP;AAE5B,UAAM;AAAE0C,MAAAA;AAAF,QAAiBD,SAAvB;AACA,UAAMpB,OAAO,GAAGQ,MAAM,CAACR,OAAP,EAAhB;AACA,UAAMsB,IAAI,GAAG;AAAEzF,MAAAA,QAAQ,EAAEmE,OAAO,GAAG,KAAH,GAAW,MAA9B;AAAsCpE,MAAAA,MAAM,EAAE,CAACoE;AAA/C,KAAb;AACA,UAAMuB,cAAc,GAAG,CAACvB,OAAD,IAAY3C,MAAM,CAACO,QAAP,CAAgBwC,QAAhB,CAAyB7D,KAAzB,CAA+B,GAA/B,EAAoC,CAApC,MAA2C,KAA9E;AACA,UAAMiF,iBAAiB,GAAG,CAACxB,OAAD,IAAY,CAACuB,cAAvC;;AACA,QAAIF,UAAU,KAAK,MAAf,IAAyBG,iBAA7B,EAAgD;AAC5C,YAAM;AAAE5B,QAAAA,gBAAF;AAAoBE,QAAAA;AAApB,UAAyCsB,SAA/C;AACA,YAAMd,OAAO,GAAGV,gBAAgB,cAAOA,gBAAP,IAA4B,EAA5D;AACA,YAAMW,OAAO,GAAGD,OAAO,IAAIR,gBAAX,cAAkCA,gBAAlC,IAAuD,EAAvE;AACA,aAAO,EAAE,GAAGwB,IAAL;AAAW7F,QAAAA,IAAI,gBAAS6E,OAAT,SAAmBC,OAAnB;AAAf,OAAP;AACH;AACD;;;AACA,WAAO,EAAE,GAAGe,IAAL;AAAW7F,MAAAA,IAAI,EAAE;AAAjB,KAAP;AACH;;AACDuF,EAAAA,UAAU,GAAG;AAAA;;AACT,QAAIrC,MAAM,EAAV,EAAc,OADL;AAIT;;AACA,QAAI8C,aAAa,GAAG1D,OAAO,CAAClD,OAAR,CAAgB+F,WAAhB,CAApB;;AACA,QACI,OAAOa,aAAP,KAAyB,QAAzB,IACAA,aAAa,CAACC,MAAd,CAAqB,CAArB,MAA4B,GAD5B,IAEAD,aAAa,CAACC,MAAd,CAAqBD,aAAa,CAAChF,MAAd,GAAuB,CAA5C,MAAmD,GAHvD,EAIE;AACEgF,MAAAA,aAAa,eAAOA,aAAP,OAAb;AACH;AAED;AACR;AACA;AACA;;;AACQ,UAAMR,OAAO,GAAG1D,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACC,KAAL,mBAAWiE,aAAX,2DAA4B,QAA5B,CAAX,CAAhB;;AAEA,QAAIR,OAAJ,EAAa;AACT,YAAM;AAAErB,QAAAA,gBAAF;AAAoBE,QAAAA;AAApB,UAAyCmB,OAA/C;AACA,YAAMX,OAAO,GAAGV,gBAAgB,cAAOA,gBAAP,IAA4B,EAA5D;AACA,YAAMW,OAAO,GAAGD,OAAO,IAAIR,gBAAX,cAAkCA,gBAAlC,IAAuD,EAAvE;AACA,WAAKmB,OAAL,GAAeA,OAAf;AACAlD,MAAAA,OAAO,CAAC5B,UAAR,CAAmByE,WAAnB,EAAgC;AAAElF,QAAAA,MAAM,aAAM2B,MAAM,CAACO,QAAP,CAAgBD,QAAtB,CAAR;AAA0ClC,QAAAA,IAAI,gBAAS6E,OAAT,SAAmBC,OAAnB;AAA9C,OAAhC;AACH;AACJ;;AA9EgB;;AAiFrB,MAAMoB,cAAc,GAAG,IAAId,cAAJ,CAAmBJ,MAAnB,CAAvB;;ACjHA,MAAMmB,YAAN,CAAmB;AAAA;AAAA,uCACQ,EADR;AAAA;;AAGH,MAARC,QAAQ,GAAG;AACX,WAAO,KAAKC,SAAZ;AACH;;AAEDC,EAAAA,aAAa,GAAG;AACZ,SAAKD,SAAL,GAAiB,EAAjB;AACH;;AAEDE,EAAAA,eAAe,CACXC,UADW,EAEXC,QAFW,EAGb;AACE,SAAKL,QAAL,CAAcM,OAAd,CAAsB;AAClBF,MAAAA,UADkB;AAElBG,MAAAA,MAAM,EAAEF;AAFU,KAAtB;AAIH;;AAEW,QAANE,MAAM,CACRC,KADQ,EAERC,OAFQ,EAGRT,QAHQ,EAIO;AACfA,IAAAA,QAAQ,GAAGA,QAAQ,IAAI,KAAKA,QAA5B;AACA,UAAMU,KAAK,GAAGV,QAAQ,CAACW,SAAT,CAAmB,CAAC;AAAEP,MAAAA;AAAF,KAAD,KAAoBA,UAAU,CAACI,KAAD,CAAjD,CAAd;AACA,UAAMI,OAAO,GAAGZ,QAAQ,CAACU,KAAD,CAAxB;AACA,QAAI,CAACE,OAAL,EAAc,MAAMJ,KAAN;AACd,QAAIK,OAAJ;;AACA,QAAI;AACAA,MAAAA,OAAO,GAAG,MAAMD,OAAO,CAACL,MAAR,CAAeC,KAAf,EAAsBC,OAAtB,EAA+BK,KAA/B,CAAsCC,GAAD,IAAS;AAC1D;AAChB;AACgB,cAAMA,GAAN;AACH,OAJe,CAAhB;AAKH,KAND,CAME,OAAOC,CAAP,EAAU;AACRC,MAAAA,OAAO,CAACT,KAAR,CAAc,6BAAd,EAA6CQ,CAA7C;AACA,YAAME,iBAAiB,GAAGR,KAAK,GAAG,CAAC,CAAT,GAAa,CAAC,GAAGV,QAAQ,CAACtC,KAAT,CAAe,CAAf,EAAkBgD,KAAlB,CAAJ,EAA8B,GAAGV,QAAQ,CAACtC,KAAT,CAAegD,KAAK,GAAG,CAAvB,CAAjC,CAAb,GAA2E,EAArG,CAFQ;;AAIR,YAAMS,eAAe,GAAGH,CAAC,YAAYhJ,KAAb,GAAqBgJ,CAArB,GAAyBR,KAAjD;AACAK,MAAAA,OAAO,GAAG,MAAM,KAAKN,MAAL,CAAYY,eAAZ,EAA6BV,OAA7B,EAAsCS,iBAAtC,CAAhB;AACH;;AACD,WAAOL,OAAP;AACH;;AA7Cc;;MAgDbO,YAAY,GAAG,IAAIrB,YAAJ;;ACDrB,MAAMsB,cAAc,GAAG,IAAvB;;AACA,SAASC,QAAT,CAAkBC,IAAlB,EAAuCC,GAAvC,EAAiD9H,OAAjD,EAA0E;AAAA;;AACtE,QAAM+H,SAAS,yBAAG/H,OAAO,CAAC+H,SAAX,mEAA6BC,CAAJ,IAAaA,CAArD;AACA,QAAMC,IAAI,GAAG,EAAC,GAAGJ,IAAJ;AAAUK,IAAAA,MAAM,EAAEH,SAAS,CAACF,IAAI,CAACK,MAAN;AAA3B,GAAb;;AACA,QAAMC,IAAI,GAAG,kBAAiB;AAC1B,UAAMC,YAAY,GAAG,IAAIC,eAAJ,CAAoBP,GAAG,CAACQ,MAAxB,CAArB;;AACA,QAAIL,IAAI,CAACM,WAAL,KAAqB,CAAzB,EAA4B;AACxBhB,MAAAA,OAAO,CAACiB,IAAR,CAAa,8CAAb;AACA,aAAO,EAAP;AACH;;AAED,UAAMC,KAAK,GAAGR,IAAI,CAACM,WAAL,GAAmBN,IAAI,CAACS,UAAtC;AACA,UAAMC,GAAG,GAAGV,IAAI,CAACS,UAAL,IAAmBD,KAAK,GAAG,CAAR,GAAYA,KAAZ,GAAoB,CAAvC,CAAZ;AAEAL,IAAAA,YAAY,CAACzG,GAAb,CAAiB,OAAjB,EAA0BiH,IAAI,CAACD,GAAL,CAASF,KAAT,EAAgB,CAAhB,EAAmBI,QAAnB,EAA1B;AACAT,IAAAA,YAAY,CAACzG,GAAb,CAAiB,KAAjB,EAAwBgH,GAAG,CAACE,QAAJ,EAAxB;AACAf,IAAAA,GAAG,CAACQ,MAAJ,GAAaF,YAAY,CAACS,QAAb,EAAb,CAZ0B;;AAc1B,UAAMC,QAAQ,GAAG,MAAMC,OAAO,CAACjB,GAAD,EAAM,EAAC,GAAG9H,OAAJ;AAAagJ,MAAAA,SAAS,EAAE;AAAxB,KAAN,CAAP,CAA6CC,IAA7C,CAAkD,CAAC;AAAC1K,MAAAA;AAAD,KAAD,KAAYA,IAA9D,CAAvB;AACAuK,IAAAA,QAAQ,CAACZ,MAAT,GAAkBH,SAAS,CAACe,QAAQ,CAACZ,MAAV,CAA3B;AACAgB,IAAAA,MAAM,CAACC,MAAP,CAAclB,IAAd,EAAoBa,QAApB;AACA,WAAOb,IAAI,CAACC,MAAZ;AACH,GAlBD;;AAoBA,QAAMkB,IAAI,GAAG,kBAAiB;AAC1B,UAAMhB,YAAY,GAAG,IAAIC,eAAJ,CAAoBP,GAAG,CAACQ,MAAxB,CAArB;AACA,UAAMG,KAAK,GAAGR,IAAI,CAACM,WAAL,GAAmBN,IAAI,CAACS,UAAtC;;AACA,QAAID,KAAK,IAAIR,IAAI,CAACoB,YAAlB,EAAgC;AAC5B9B,MAAAA,OAAO,CAACiB,IAAR,CAAa,8CAAb;AACA,aAAO,EAAP;AACH;;AAEDJ,IAAAA,YAAY,CAACzG,GAAb,CAAiB,OAAjB,EAA0B8G,KAAK,CAACI,QAAN,EAA1B;AACAf,IAAAA,GAAG,CAACQ,MAAJ,GAAaF,YAAY,CAACS,QAAb,EAAb,CAT0B;;AAW1B,UAAMS,QAAQ,GAAG,MAAMP,OAAO,CAACjB,GAAD,EAAM,EAAC,GAAG9H,OAAJ;AAAagJ,MAAAA,SAAS,EAAE;AAAxB,KAAN,CAAP,CAA6CC,IAA7C,CAAkD,CAAC;AAAC1K,MAAAA;AAAD,KAAD,KAAYA,IAA9D,CAAvB;AACA+K,IAAAA,QAAQ,CAACpB,MAAT,GAAkBH,SAAS,CAACuB,QAAQ,CAACpB,MAAV,CAA3B;AACAgB,IAAAA,MAAM,CAACC,MAAP,CAAclB,IAAd,EAAoBqB,QAApB;AACA,WAAOrB,IAAI,CAACC,MAAZ;AACH,GAfD;;AAiBA,QAAMqB,YAAY,GAAG1B,IAAI,CAACwB,YAA1B;;AACA,QAAMG,GAAG,GAAG,gBAAef,KAAK,GAAG,CAAvB,EAA0BgB,SAAoB,GAAG,EAAjD,EAAyE;AACjF,QAAIhB,KAAK,IAAIc,YAAb,EAA2B,OAAOE,SAAP;AAE3B,UAAMrB,YAAY,GAAG,IAAIC,eAAJ,CAAoBP,GAAG,CAACQ,MAAxB,CAArB;AACAF,IAAAA,YAAY,CAACzG,GAAb,CAAiB,OAAjB,EAA0B8G,KAAK,CAACI,QAAN,EAA1B;AACAT,IAAAA,YAAY,CAACxG,MAAb,CAAoB,KAApB;AACAkG,IAAAA,GAAG,CAACQ,MAAJ,GAAaF,YAAY,CAACS,QAAb,EAAb,CANiF;;AAQjF,UAAMS,QAAQ,GAAG,MAAMP,OAAO,CAACjB,GAAD,EAAM,EAAC,GAAG9H,OAAJ;AAAagJ,MAAAA,SAAS,EAAE;AAAxB,KAAN,CAAP,CAA6CC,IAA7C,CAAkD,CAAC;AAAC1K,MAAAA;AAAD,KAAD,KAAYA,IAA9D,CAAvB;AACAkL,IAAAA,SAAS,CAACC,IAAV,CAAe,GAAG3B,SAAS,CAACuB,QAAQ,CAACpB,MAAV,CAA3B;AACA,WAAOsB,GAAG,CAACf,KAAK,GAAGa,QAAQ,CAACZ,UAAlB,EAA8Be,SAA9B,CAAV;AACH,GAXD;;AAaAxB,EAAAA,IAAI,CAACE,IAAL,GAAYA,IAAZ;AACAF,EAAAA,IAAI,CAACmB,IAAL,GAAYA,IAAZ;AACAnB,EAAAA,IAAI,CAACuB,GAAL,GAAWA,GAAX;AACA,SAAOvB,IAAP;AACH;;AAOD,MAAM0B,aAAa,GAAG,CAClBC,UADkB,EAElBC,OAFkB,EAGlBC,oBAHkB,EAIlBC,aAJkB,KAKR;AACV,QAAMjL,OAAO,GAAGoK,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBS,UAAlB,CAAhB;AACA,MAAIrL,IAAI,GAAG,IAAX;;AACA,MAAI2E,SAAS,MAAM2G,OAAO,YAAYG,QAAtC,EAAgD;AAC5CzL,IAAAA,IAAI,GAAGsL,OAAP;AACH,GAFD,MAEO,IAAIA,OAAJ,EAAa;AAChB/K,IAAAA,OAAO,CAAC,cAAD,CAAP,GAA0B,iCAA1B;AACAP,IAAAA,IAAI,GAAGyD,IAAI,CAACE,SAAL,CAAe2H,OAAf,CAAP;AACH;;AAED,MAAI,CAACC,oBAAL,EAA2B;AACvB,WAAOhL,OAAO,CAACmL,aAAf;AACA,WAAO;AAAEnL,MAAAA,OAAF;AAAWP,MAAAA;AAAX,KAAP;AACH;;AAED,QAAM;AAAEmH,IAAAA;AAAF,MAAcU,cAApB;;AACA,MAAI,CAACtH,OAAO,CAACmL,aAAb,EAA4B;AAAgD;AACxE,QAAIvE,OAAJ,EAAa5G,OAAO,CAACmL,aAAR,oBAAkCvE,OAAO,CAACwE,KAA1C,EADW;;AAExB,QAAIH,aAAJ,EAAmBjL,OAAO,CAACmL,aAAR,GAAwBF,aAAxB,CAFK;;AAGxB,QAAI9E,MAAM,CAACkF,YAAX,EAAyBrL,OAAO,CAACmL,aAAR,GAAwBhF,MAAM,CAACkF,YAA/B,CAHD;AAI3B;;AACD,SAAO;AAAErL,IAAAA,OAAF;AAAWP,IAAAA;AAAX,GAAP;AACH,CA3BD;;AA6BA,MAAM6L,UAAU,GAAG,GAAnB;AACA,MAAMC,WAAW,GAAG,GAApB;AACA,MAAMC,EAAE,GAAG,GAAX;;AACA,eAAevB,OAAf,CACIjB,GADJ,EAEI9H,OAFJ,EAGmB;AACf,QAAM;AAAEuK,IAAAA,MAAF;AAAUzL,IAAAA,OAAV;AAAmBP,IAAAA,IAAnB;AAAyBuL,IAAAA,oBAAzB;AAA+CU,IAAAA,KAA/C;AAAsDxB,IAAAA,SAAtD;AAAiEe,IAAAA;AAAjE,MAAmF/J,OAAzF;AACA,QAAM5B,OAAO,GAAGuL,aAAa,CACzB7K,OADyB,EAEzBP,IAFyB,EAGzBuL,oBAHyB,EAIzBC,aAJyB,CAA7B;AAOA,QAAMvL,QAAQ,GAAG,MAAMiM,KAAK,CAAC3C,GAAG,CAACe,QAAJ,EAAD,EAAiB;AACzC0B,IAAAA,MADyC;AAEzCG,IAAAA,KAAK,EAAE,UAFkC;AAGzCC,IAAAA,QAAQ,EAAE,QAH+B;AAIzC7L,IAAAA,OAAO,EAAEV,OAAO,CAACU,OAJwB;AAKzCP,IAAAA,IAAI,EAAEH,OAAO,CAACG;AAL2B,GAAjB,CAA5B;;AAQA,MAAIC,QAAQ,CAACG,MAAT,KAAoByL,UAAxB,EAAoC;AAChC,WAAO,IAAIvL,MAAJ,CAAWd,SAAX,EAAsBS,QAAtB,CAAP;AACH;;AAED,QAAMoM,cAAc,GAAGpM,QAAQ,CAACM,OAAT,CAAiB4C,GAAjB,CAAqB,cAArB,CAAvB;;AACA,MAAI,CAACkJ,cAAD,IAAmB,CAACA,cAAc,CAACC,QAAf,CAAwB,kBAAxB,CAAxB,EAAqE;AACjE,UAAM,IAAI5M,cAAJ,kCAA6C2M,cAA7C,iEAAkH9C,GAAG,CAACe,QAAJ,EAAlH,eAAqI0B,MAArI,EAAN;AACH;;AAED,QAAM1C,IAAI,GAAG,MAAMrJ,QAAQ,CAACqJ,IAAT,EAAnB;;AACA,MAAKrJ,QAAQ,CAACG,MAAT,IAAmB2L,EAApB,IAA4B9L,QAAQ,CAACG,MAAT,GAAkB0L,WAAlD,EAAgE;AAC5D,UAAMS,MAAM,GAAG,IAAIjM,MAAJ,CACXmK,SAAS,GAAGpB,QAAQ,CAACC,IAAD,EAAOC,GAAP,EAAY9H,OAAZ,CAAX,GAAkC6H,IADhC,EAEXrJ,QAFW,CAAf;AAIA,WAAOsM,MAAP;AACH;;AAED,QAAMC,KAAK,GAAG,IAAIzM,KAAJ,CAAUuJ,IAAV,EAAgBrJ,QAAhB,CAAd;AACA,MAAIgM,KAAJ,EAAW,MAAMO,KAAN;AAEX,QAAMC,YAAY,GAAG,EAAC,GAAGhL,OAAJ;AAAawK,IAAAA,KAAK,EAAE;AAApB,GAArB;;AACA,QAAMS,KAAK,GAAG,MAAMlC,OAAO,CAACjB,GAAD,EAAMkD,YAAN,CAA3B;;AACAC,EAAAA,KAAK,CAACC,gBAAN,GAAyB;AACrBpD,IAAAA,GADqB;AAErB,OAAGkD;AAFkB,GAAzB;AAIA,SAAOtD,YAAY,CAACb,MAAb,CAA4BkE,KAA5B,EAAmCE,KAAnC,CAAP;AACH;AAED;AACA;AACA;;;AACe,MAAME,MAAN,CAAa;AAAA;AAAA,sCACJpN,SADI;;AAAA,qCAENA,SAFM;;AAAA,+CAGcA,SAHd;;AAAA,+CAIcA,SAJd;;AAAA,4CAKQA,SALR;;AAAA,2CAMR,IAAIsK,eAAJ,EANQ;AAAA;;AAQxB;AACJ;AACA;AACe,MAAP+C,OAAO,GAAY;AACnB,WAAO,KAAKC,QAAZ;AACH;;AAEU,MAAPD,OAAO,CAACrL,KAAD,EAAiB;AACxB,SAAKsL,QAAL,GAAgBtL,KAAhB;AACH;AAED;AACJ;AACA;AACA;;;AACc,MAANuL,MAAM,GAAW;AACjB,WAAO,KAAKC,OAAZ;AACH;;AAES,MAAND,MAAM,CAACvL,KAAD,EAAgB;AACtB,SAAKwL,OAAL,GAAexL,KAAf;AACH;AAED;AACJ;AACA;AACA;;;AACwB,MAAhBsE,gBAAgB,GAAqB;AACrC,WAAO,KAAKC,iBAAZ;AACH;;AAEmB,MAAhBD,gBAAgB,CAACtE,KAAD,EAA0B;AAC1C,SAAKuE,iBAAL,GAAyBvE,KAAzB;AACH;AAED;AACJ;AACA;AACA;;;AACwB,MAAhBwE,gBAAgB,GAAqB;AACrC,WAAO,KAAKC,iBAAZ;AACH;;AAEmB,MAAhBD,gBAAgB,CAACxE,KAAD,EAA0B;AAC1C,SAAKyE,iBAAL,GAAyBzE,KAAzB;AACH;AAED;AACJ;AACA;AACA;;;AACqB,MAAbgK,aAAa,GAAkB;AAC/B,WAAO,KAAKyB,cAAZ;AACH;;AAEgB,MAAbzB,aAAa,CAAChK,KAAD,EAAuB;AACpC,SAAKyL,cAAL,GAAsBzL,KAAtB;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACoB,MAAZqI,YAAY,GAAiB;AAC7B,WAAO,KAAKqD,aAAZ;AACH;;AAEe,MAAZrD,YAAY,CAACsD,KAAD,EAAsB;AAClC,QAAIA,KAAK,CAACvN,WAAN,KAAsBkK,eAA1B,EAA2C;AACvC,WAAKoD,aAAL,GAAqBC,KAArB;AACA;AACH;AAED;;;AACA,QAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACvN,WAAN,KAAsB+K,MAAvD,EAA+D;AAC3DwC,MAAAA,KAAK,GAAGxC,MAAM,CAACyC,OAAP,CAAeD,KAAf,EAAsBE,MAAtB,CAA6B,CAACC,GAAD,EAAM,CAACtM,GAAD,EAAMQ,KAAN,CAAN,KAAuB;AACxD,YAAI+L,KAAK,CAACC,OAAN,CAAchM,KAAd,CAAJ,EAA0B;AACtB;AACA,iBAAO,CAAC,GAAG8L,GAAJ,EAAS,GAAG9L,KAAK,CAACiM,GAAN,CAAWC,CAAD,IAAO,CAAC1M,GAAD,EAAM0M,CAAN,CAAjB,CAAZ,CAAP;AACH;;AACD,YAAIlM,KAAK,KAAKhC,SAAV,IAAuBgC,KAAK,KAAK,IAArC,EAA2C;AACvC;AACA,iBAAO8L,GAAP;AACH;;AACDA,QAAAA,GAAG,CAACnC,IAAJ,CAAS,CAACnK,GAAD,EAAMQ,KAAK,CAAC8I,QAAN,EAAN,CAAT;AACA,eAAOgD,GAAP;AACH,OAXO,EAWL,EAXK,CAAR;AAYH;;AACD,SAAKJ,aAAL,GAAqB,IAAIpD,eAAJ,CAAoBqD,KAApB,CAArB;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACIQ,EAAAA,WAAW,CAACd,OAAD,EAA4B;AACnC,QAAI,OAAOA,OAAP,KAAmB,WAAvB,EAAoC,KAAKA,OAAL,GAAeA,OAAf;AACpC,WAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACIe,EAAAA,UAAU,CAACb,MAAD,EAA0B;AAChC,QAAI,OAAOA,MAAP,KAAkB,WAAtB,EAAmC,KAAKA,MAAL,GAAcA,MAAd;AACnC,WAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACIc,EAAAA,oBAAoB,CAAC/H,gBAAD,EAA8C;AAC9D,QAAI,OAAOA,gBAAP,KAA4B,WAAhC,EAA6C,KAAKA,gBAAL,GAAwBA,gBAAxB;AAC7C,WAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACIgI,EAAAA,oBAAoB,CAAC9H,gBAAD,EAA8C;AAC9D,QAAI,OAAOA,gBAAP,KAA4B,WAAhC,EAA6C,KAAKA,gBAAL,GAAwBA,gBAAxB;AAC7C,WAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACI+H,EAAAA,iBAAiB,CAACvC,aAAD,EAAwC;AACrD,QAAI,OAAOA,aAAP,KAAyB,WAA7B,EAA0C,KAAKA,aAAL,GAAqBA,aAArB;AAC1C,WAAO,IAAP;AACH;AAED;AACJ;AACA;AACA;AACA;;;AACIwC,EAAAA,gBAAgB,CAACnE,YAAD,EAAsC;AAClD,QAAI,OAAOA,YAAP,KAAwB,WAA5B,EAAyC,KAAKA,YAAL,GAAoBA,YAApB;AACzC,WAAO,IAAP;AACH;;AAEDoE,EAAAA,MAAM,CAACC,YAAD,EAA4B;AAAA;;AAC9B,UAAMnB,MAAM,mBAAG,KAAKA,MAAR,iEAAqBrG,MAAM,CAACpB,WAA5B,gBAA6CoB,MAAM,CAAChB,OAApD,CAAZ;AACA,UAAMI,gBAAgB,4BAAG,KAAKA,gBAAR,yEAA4BY,MAAM,CAACZ,gBAAzD;AACA,UAAME,gBAAgB,4BAAG,KAAKA,gBAAR,yEAA4BU,MAAM,CAACV,gBAAzD;AACA,UAAM6G,OAAO,oBAAG,KAAKA,OAAR,yDAAmBnG,MAAM,CAACd,UAAvC;AAEA,UAAM2D,GAAG,GAAG,IAAI4E,GAAJ,WAAWpB,MAAX,EAAZ;AACAxD,IAAAA,GAAG,CAACjD,QAAJ,kBAAuBuG,OAAvB,cAAkC/G,gBAAlC,cAAsDE,gBAAtD,SAAyElB,MAAM,CAAC,GAAD,EAAMoJ,YAAN,CAA/E;AACA3E,IAAAA,GAAG,CAACQ,MAAJ,GAAa,uBAAC,KAAKF,YAAN,mEAAsB,IAAIC,eAAJ,EAAtB,EAA6CQ,QAA7C,EAAb;AACA,WAAOf,GAAP;AACH,GAhMuB;;;AAmMf,QAAHpG,GAAG,CAAC+K,YAAD,EAAuBzM,OAAuB,GAAG,EAAjD,EAAsE;AAC3E,UAAM;AACFqE,MAAAA,gBADE;AACgBE,MAAAA,gBADhB;AACkCwF,MAAAA,aADlC;AACiDuB,MAAAA,MADjD;AACyDI,MAAAA,KADzD;AAEF5M,MAAAA,OAFE;AAEOgL,MAAAA,oBAFP;AAE6BU,MAAAA,KAF7B;AAEoCxB,MAAAA,SAFpC;AAE+CjB,MAAAA;AAF/C,QAGF/H,OAHJ;AAKA,SAAKsM,iBAAL,CAAuBvC,aAAvB,EACKoC,UADL,CACgBb,MADhB,EAEKc,oBAFL,CAE0B/H,gBAF1B,EAGKgI,oBAHL,CAG0B9H,gBAH1B,EAIKgI,gBAJL,CAIsBb,KAJtB;AAMA,UAAM5D,GAAG,GAAG,KAAK0E,MAAL,CAAYC,YAAZ,CAAZ;AAEA;;AACA,QAAI3E,GAAG,CAAC6E,IAAJ,CAASzL,MAAT,GAAkByG,cAAtB,EAAsC;AAAA;;AAClC,YAAMS,YAAY,0BAAI,KAAKA,YAAT,qEAAyB,IAAIC,eAAJ,EAA3C;AACA,YAAMsD,OAAO,GAAGG,KAAK,CAACc,IAAN,CAAWxE,YAAY,CAACuD,OAAb,EAAX,CAAhB;AACA,YAAMkB,YAAY,GAAGlB,OAAO,CAACC,MAAR,CAAe,CAACiB,YAAD,EAAe,CAACtN,GAAD,EAAMQ,KAAN,CAAf,KAAgC;AAChE;AACA,YAAI,CAAC8M,YAAY,CAACtN,GAAD,CAAjB,EAAwB;AACpBsN,UAAAA,YAAY,CAACtN,GAAD,CAAZ,GAAoBQ,KAApB;AACA,iBAAO8M,YAAP;AACH,SAL+D;;;AAOhE,YAAI,CAACf,KAAK,CAACC,OAAN,CAAcc,YAAY,CAACtN,GAAD,CAA1B,CAAL,EAAuC;AACnC;AACAsN,UAAAA,YAAY,CAACtN,GAAD,CAAZ,GAAoB,CAACsN,YAAY,CAACtN,GAAD,CAAb,CAApB;AACH;;AACAsN,QAAAA,YAAY,CAACtN,GAAD,CAAb,CAAgCmK,IAAhC,CAAqC3J,KAArC;AAEA,eAAO8M,YAAP;AACH,OAdoB,EAclB,EAdkB,CAArB;AAeA,WAAKzE,YAAL,GAAoB,EAApB;AACA,aAAO,KAAK0E,IAAL,CAAUL,YAAV,EAAwB,EAC3B,GAAGzM,OADwB;AAE3BzB,QAAAA,IAAI,EAAEsO;AAFqB,OAAxB,CAAP;AAIH;;AAED,WAAO9D,OAAO,CAACjB,GAAD,EAAM;AAChByC,MAAAA,MAAM,EAAE,KADQ;AAEhBzL,MAAAA,OAFgB;AAGhBgL,MAAAA,oBAAoB,EAAEA,oBAAF,aAAEA,oBAAF,cAAEA,oBAAF,GAA0B,IAH9B;AAIhBC,MAAAA,aAAa,EAAE,KAAKA,aAJJ;AAKhBS,MAAAA,KALgB;AAMhBxB,MAAAA,SANgB;AAOhBjB,MAAAA;AAPgB,KAAN,CAAd;AASH;;AAEW,QAANnG,MAAM,CAAC6K,YAAD,EAAuBzM,OAAuB,GAAG,EAAjD,EAAsE;AAC9E,UAAM;AACFqE,MAAAA,gBADE;AACgBE,MAAAA,gBADhB;AACkCwF,MAAAA,aADlC;AACiDuB,MAAAA,MADjD;AACyDI,MAAAA,KADzD;AAEF5M,MAAAA,OAFE;AAEOgL,MAAAA,oBAFP;AAE6BU,MAAAA;AAF7B,QAGFxK,OAHJ;AAKA,SAAKsM,iBAAL,CAAuBvC,aAAvB,EACKoC,UADL,CACgBb,MADhB,EAEKc,oBAFL,CAE0B/H,gBAF1B,EAGKgI,oBAHL,CAG0B9H,gBAH1B,EAIKgI,gBAJL,CAIsBb,KAJtB;AAMA,UAAM5D,GAAG,GAAG,KAAK0E,MAAL,CAAYC,YAAZ,CAAZ;AACA,WAAO1D,OAAO,CAACjB,GAAD,EAAM;AAChByC,MAAAA,MAAM,EAAE,QADQ;AAEhBzL,MAAAA,OAFgB;AAGhBgL,MAAAA,oBAAoB,EAAEA,oBAAF,aAAEA,oBAAF,cAAEA,oBAAF,GAA0B,IAH9B;AAIhBC,MAAAA,aAAa,EAAE,KAAKA,aAJJ;AAKhBS,MAAAA;AALgB,KAAN,CAAd;AAOH;;AAEU,QAALuC,KAAK,CAACN,YAAD,EAAuBzM,OAAuB,GAAG,EAAjD,EAAsE;AAC7E,UAAM;AACFqE,MAAAA,gBADE;AACgBE,MAAAA,gBADhB;AACkCwF,MAAAA,aADlC;AACiDuB,MAAAA,MADjD;AACyDI,MAAAA,KADzD;AAEF5M,MAAAA,OAFE;AAEOP,MAAAA,IAFP;AAEauL,MAAAA,oBAFb;AAEmCU,MAAAA;AAFnC,QAGFxK,OAHJ;AAKA,SAAKsM,iBAAL,CAAuBvC,aAAvB,EACKoC,UADL,CACgBb,MADhB,EAEKc,oBAFL,CAE0B/H,gBAF1B,EAGKgI,oBAHL,CAG0B9H,gBAH1B,EAIKgI,gBAJL,CAIsBb,KAJtB;AAMA,UAAM5D,GAAG,GAAG,KAAK0E,MAAL,CAAYC,YAAZ,CAAZ;AACA,WAAO1D,OAAO,CAACjB,GAAD,EAAM;AAChByC,MAAAA,MAAM,EAAE,OADQ;AAEhBzL,MAAAA,OAFgB;AAGhBP,MAAAA,IAHgB;AAIhBuL,MAAAA,oBAAoB,EAAEA,oBAAF,aAAEA,oBAAF,cAAEA,oBAAF,GAA0B,IAJ9B;AAKhBC,MAAAA,aAAa,EAAE,KAAKA,aALJ;AAMhBS,MAAAA;AANgB,KAAN,CAAd;AAQH;;AAES,QAAJsC,IAAI,CAACL,YAAD,EAAuBzM,OAAuB,GAAG,EAAjD,EAAsE;AAC5E,UAAM;AACFqE,MAAAA,gBADE;AACgBE,MAAAA,gBADhB;AACkCwF,MAAAA,aADlC;AACiDuB,MAAAA,MADjD;AACyDI,MAAAA,KADzD;AAEF5M,MAAAA,OAFE;AAEOP,MAAAA,IAFP;AAEauL,MAAAA,oBAFb;AAEmCU,MAAAA;AAFnC,QAGFxK,OAHJ;AAKA,SAAKsM,iBAAL,CAAuBvC,aAAvB,EACKoC,UADL,CACgBb,MADhB,EAEKc,oBAFL,CAE0B/H,gBAF1B,EAGKgI,oBAHL,CAG0B9H,gBAH1B,EAIKgI,gBAJL,CAIsBb,KAJtB;AAMA,UAAM5D,GAAG,GAAG,KAAK0E,MAAL,CAAYC,YAAZ,CAAZ;AACA,WAAO1D,OAAO,CAACjB,GAAD,EAAM;AAChByC,MAAAA,MAAM,EAAE,MADQ;AAEhBzL,MAAAA,OAFgB;AAGhBP,MAAAA,IAHgB;AAIhBuL,MAAAA,oBAAoB,EAAEA,oBAAF,aAAEA,oBAAF,cAAEA,oBAAF,GAA0B,IAJ9B;AAKhBC,MAAAA,aAAa,EAAE,KAAKA,aALJ;AAMhBS,MAAAA;AANgB,KAAN,CAAd;AAQH;;AAEQ,QAAHwC,GAAG,CAACP,YAAD,EAAuBzM,OAAuB,GAAG,EAAjD,EAAsE;AAC3E,UAAM;AACFqE,MAAAA,gBADE;AACgBE,MAAAA,gBADhB;AACkCwF,MAAAA,aADlC;AACiDuB,MAAAA,MADjD;AACyDI,MAAAA,KADzD;AAEF5M,MAAAA,OAFE;AAEOP,MAAAA,IAFP;AAEauL,MAAAA,oBAFb;AAEmCU,MAAAA;AAFnC,QAGFxK,OAHJ;AAKA,SAAKsM,iBAAL,CAAuBvC,aAAvB,EACKoC,UADL,CACgBb,MADhB,EAEKc,oBAFL,CAE0B/H,gBAF1B,EAGKgI,oBAHL,CAG0B9H,gBAH1B,EAIKgI,gBAJL,CAIsBb,KAJtB;AAMA,UAAM5D,GAAG,GAAG,KAAK0E,MAAL,CAAYC,YAAZ,CAAZ;AACA,WAAO1D,OAAO,CAACjB,GAAD,EAAM;AAChByC,MAAAA,MAAM,EAAE,KADQ;AAEhBzL,MAAAA,OAFgB;AAGhBP,MAAAA,IAHgB;AAIhBuL,MAAAA,oBAAoB,EAAEA,oBAAF,aAAEA,oBAAF,cAAEA,oBAAF,GAA0B,IAJ9B;AAKhBC,MAAAA,aAAa,EAAE,KAAKA,aALJ;AAMhBS,MAAAA;AANgB,KAAN,CAAd;AAQH;;AA/UuB;;ACvKrB,eAAeyC,UAAf,CAA0B5I,gBAA1B,EAA8E;AACjF,SAAO,MAAM,IAAI8G,MAAJ,GACRiB,oBADQ,CACa/H,gBADb,EAER3C,GAFQ,CAEJ,UAFI,EAGRuH,IAHQ,CAGH,CAAC;AAAC1K,IAAAA;AAAD,GAAD,KAAYA,IAHT,CAAb;AAIH;AAEM,eAAe2O,aAAf,CAA6BC,IAA7B,EAAgH;AAEnH,SAAO,MAAM,IAAIhC,MAAJ,GACRiB,oBADQ,CACa,WADb,EAERC,oBAFQ,CAEa,SAFb,EAGRS,IAHQ,CAGH,UAHG,EAGS;AACdvO,IAAAA,IAAI,EAAE4O;AADQ,GAHT,EAKNlE,IALM,CAKD,CAAC;AAAC1K,IAAAA;AAAD,GAAD,KAAYA,IALX,CAAb;AAMH;AAEM,eAAe6O,aAAf,CACHD,IADG,EAEHE,SAAyB,GAAG,EAFzB,EAGqB;AACxB,SAAO,MAAM,IAAIlC,MAAJ,GACR4B,KADQ,CACF,UADE,EACU;AACfxO,IAAAA,IAAI,EAAE4O,IADS;AAEf,OAAGE;AAFY,GADV,EAINpE,IAJM,CAID,CAAC;AAAC1K,IAAAA;AAAD,GAAD,KAAYA,IAJX,CAAb;AAKH;AAEM,eAAe+O,aAAf,CACHjJ,gBADG,EAEU;AACb,SAAO,MAAM,IAAI8G,MAAJ,GACRiB,oBADQ,CACa/H,gBADb,EAERzC,MAFQ,CAED,UAFC,EAGRqH,IAHQ,CAGH,CAAC;AAAC1K,IAAAA;AAAD,GAAD,KAAYA,IAHT,CAAb;AAIH;AAEM,eAAegP,YAAf,CACHC,QADG,EAEHH,SAKkB,GAAG,EAPlB,EAQuB;AAC1B,QAAM;AACFI,IAAAA,iBADE;AACiBC,IAAAA,MADjB;AACyBjF,IAAAA,KADzB;AACgCE,IAAAA,GADhC;AAEF,OAAGgF;AAFD,MAGFN,SAHJ;AAIA,QAAMjF,YAAY,GAAG;AACjBqF,IAAAA,iBADiB;AACEC,IAAAA,MADF;AACUjF,IAAAA,KADV;AACiBE,IAAAA;AADjB,GAArB;AAIA,SAAO,MAAM,IAAIwC,MAAJ,GACRiB,oBADQ,CACa,WADb,EAERC,oBAFQ,CAEa,SAFb,EAGRE,gBAHQ,CAGSnE,YAHT,EAIR1G,GAJQ,6BAIiB8L,QAJjB,GAI6BG,cAJ7B,EAKR1E,IALQ,CAKH,CAAC;AAAC1K,IAAAA;AAAD,GAAD,KAAYA,IALT,CAAb;AAMH;;;;;;;;;;;ACnEM,eAAeqP,WAAf,CAA2BT,IAA3B,EAAkE;AAErE,SAAO,MAAM,IAAIhC,MAAJ,GACRiB,oBADQ,CACa,WADb,EAERC,oBAFQ,CAEa,SAFb,EAGRS,IAHQ,CAGH,QAHG,EAGO;AACZvO,IAAAA,IAAI,EAAE4O;AADM,GAHP,EAKNlE,IALM,CAKD,CAAC;AAAC1K,IAAAA;AAAD,GAAD,KAAYA,IALX,CAAb;AAMH;AAEM,eAAesP,aAAf,CAA6BhH,MAA7B,EAA6CwG,SAAyB,GAAG,EAAzE,EAA6E;AAChF,SAAO,MAAM,IAAIlC,MAAJ,GACRiB,oBADQ,CACa,WADb,EAERC,oBAFQ,CAEa,SAFb,EAGR3K,GAHQ,uBAGWmF,MAHX,GAGqBwG,SAHrB,EAIRpE,IAJQ,CAIH,CAAC;AAAC1K,IAAAA;AAAD,GAAD,KAAYA,IAJT,CAAb;AAKH;;;;;;;;ICjDIuP;;WAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,gBAAAA;;IAMAC;;WAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,qBAAAA;;IAQAC;;WAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,cAAAA;;IAQAC;;WAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,cAAAA;;AA4EL;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeC,eAAf,CACHb,SAAyB,GAAG,EADzB,EAEa;AAChB,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,CACJ,4BADI,EAC0B2L,SAD1B,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAEM,eAAemD,KAAf,CACH2L,SAAyB,GAAG,EADzB,EAEa;AAChB,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,CACJ,UADI,EACQ2L,SADR,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;;;;;;;;ACpHD,MAAM4P,cAAc,GAAG,2BAAvB;AAEA,MAAMC,YAAY,GAAG,cAArB;AACA,MAAMC,SAAS,GAAG,WAAlB;AACA,MAAMC,cAAY,GAAG,GAArB;AAMA,IAAIC,cAAJ;;AACA,MAAMC,aAAN,CAAoB;AAAA;AAAA,iCAEV,EAFU;;AAAA,4CAGC,KAHD;;AAAA,2CAIA,IAAIhN,GAAJ,EAJA;AAAA;;AAMN,MAANiN,MAAM,GAAG;AACT,QAAI,CAACF,cAAL,EAAqB;AACjB,YAAM,IAAItQ,cAAJ,CAAmB,kCAAnB,CAAN;AACH;;AACD,WAAOsQ,cAAP;AACH;;AACS,MAANE,MAAM,CAACC,QAAD,EAAW;AACjBH,IAAAA,cAAc,GAAGG,QAAjB;AACH;;AAEY,QAAPC,OAAO,GAAG;AACZ,UAAMC,OAAO,GAAG,MAAMV,eAAe,EAArC;AACA,QAAI,CAACU,OAAL,EAAc,MAAM,IAAI3Q,cAAJ,CAAmB,+CAAnB,CAAN;AAEd,UAAM;AAAE4Q,MAAAA;AAAF,QAAa,MAAM,OAAO,sBAAP,oCAAzB;AACA,UAAMC,YAAY,GAAG,CAAC,MAAM,OAAO,4BAAP,oCAAP,EAAsCC,OAA3D;AACA,UAAMC,eAAe,GAAG,CAAC,MAAM,OAAO,+BAAP,oCAAP,EAAyCD,OAAjE;AAEA,SAAKN,MAAL,GAAc,IAAII,MAAJ,EAAd;AACA,UAAM;AAAEhL,MAAAA,WAAF;AAAeI,MAAAA,OAAf;AAAwBE,MAAAA,UAAxB;AAAoCE,MAAAA,gBAApC;AAAsDE,MAAAA;AAAtD,QAA2EU,MAAjF;AACA,UAAMgK,cAAc,GAAI5K,gBAAgB,IAAIE,gBAArB,cACfF,gBADe,cACKE,gBADL,IAEnB,oBAFJ;AAGA,SAAKuD,GAAL,aAAcjE,WAAd,gBAA+BI,OAA/B,oBAAgDE,UAAhD,SAA6D8K,cAA7D;AAEA,SAAKR,MAAL,CAAYS,iBAAZ,CAA8B,KAA9B,EAAqC,IAAIJ,YAAJ,EAArC;;AACA,QAAI5L,SAAS,EAAb,EAAiB;AACb,WAAKuL,MAAL,CAAYS,iBAAZ,CAA8B,QAA9B,EAAwC,IAAIF,eAAJ,EAAxC;;AAEAlN,MAAAA,MAAM,CAACqN,QAAP,GAAkB,MAAM;AACpB,YAAI,KAAKV,MAAL,CAAYW,SAAZ,OAA4Bf,SAAhC,EAA2C;AACvC,cAAI,KAAKI,MAAL,CAAYY,MAAhB,EAAwB,KAAKZ,MAAL,CAAYY,MAAZ;AACxB,gBAAMC,SAAS,GAAG,KAAKb,MAAL,CAAYc,YAAZ,EAAlB;AACA,cAAID,SAAJ,EAAeA,SAAS,CAACE,KAAV;AAClB;AACJ,OAND;AAOH,KA1BW;AA6BZ;AACA;AACA;AACA;;;AAEA,SAAKf,MAAL,CAAYgB,SAAZ,CAAsB;AAClB3H,MAAAA,GAAG,EAAE,KAAKA,GADQ;AAElB4H,MAAAA,QAAQ,EAAE;AAFQ,KAAtB;AAIA,WAAO,IAAP;AACH;;AAES,QAAJC,IAAI,GAAG;AACT,QAAI,CAAC,KAAKC,cAAV,EAA0B;AACtB,WAAKA,cAAL,GAAsB,MAAM,KAAKjB,OAAL,EAA5B;AACH;;AACD,WAAO,KAAKiB,cAAZ;AACH,GA9De;;;AAiED,QAATC,SAAS,CAAC7P,OAA4B,GAAG,EAAhC,EAAoC;AAC/C,UAAM,KAAK2P,IAAL,EAAN;;AAEA,QAAI,KAAKlB,MAAL,CAAYW,SAAZ,OAA4BhB,YAAhC,EAA8C;AAC1C,aAAO0B,OAAO,CAACC,OAAR,EAAP;AACH;;AAED,QAAIC,cAAc,GAAG,EAArB;AACA,UAAM;AAAEtK,MAAAA;AAAF,QAAcU,cAApB;;AAEA,QAAIV,OAAJ,EAAa;AACTsK,MAAAA,cAAc,GAAG;AACbC,QAAAA,GAAG,EAAE;AACD,WAAC9B,cAAD,GAAkBzI,OAAO,CAACwE,KADzB;AAEDgG,UAAAA,GAAG,EAAE;AAFJ;AADQ,OAAjB;AAMH,KAjB8C;AAoB/C;;;AACA,SAAKzB,MAAL,CAAY0B,gBAAZ,GAA+B,IAA/B;AACA,WAAO,IAAIL,OAAJ,CAAY,CAACC,OAAD,EAAUK,MAAV,KAAqB,KAAK3B,MAAL,CAAYoB,SAAZ,CAAsBG,cAAtB,EAAuCK,cAAD,IAAoB;AAAA;;AAC9F,UAAIA,cAAc,CAACC,UAAnB,EAA+B;AAC3BP,QAAAA,OAAO,CAACM,cAAD,CAAP;AACA;AACH;;AAED,YAAME,YAAY,4BAAGF,cAAc,CAACvJ,KAAlB,yEAA2B,EAA7C;AACA,YAAMA,KAAK,GAAG,IAAIxI,KAAJ,CAAU;AACpBK,QAAAA,MAAM,EAAE4R,YAAY,CAAC1F,QAAb,CAAsB,KAAtB,IAA+ByD,cAA/B,GAA8CvQ,SADlC;AAEpBK,QAAAA,OAAO,EAAEmS,YAFW;AAGpB9R,QAAAA,WAAW,EAAE;AACTJ,UAAAA,IAAI,EAAE,cADG;AAET,aAAGgS;AAFM;AAHO,OAAV,CAAd;;AASA,UAAIrQ,OAAO,CAACwK,KAAZ,EAAmB;AACf4F,QAAAA,MAAM,CAACtJ,KAAD,CAAN;AACA;AACH;;AAED,YAAMmE,KAAK,GAAG,MAAM,KAAK4E,SAAL,CAAe;AAAErF,QAAAA,KAAK,EAAE;AAAT,OAAf,CAApB;;AACA,UAAI;AACA,cAAMM,MAAM,GAAGpD,YAAY,CAACb,MAAb,CAAoBC,KAApB,EAA2BmE,KAA3B,CAAf;AACA8E,QAAAA,OAAO,CAACjF,MAAD,CAAP;AACH,OAHD,CAGE,OAAOxD,CAAP,EAAU;AACR8I,QAAAA,MAAM,CAAC9I,CAAD,CAAN;AACH;AACJ,KA5BuC,CAAjC,CAAP;AA6BH;;AAEe,QAAVkJ,UAAU,GAAG;AACf,QAAI,CAAC,KAAKZ,cAAV,EAA0B,OAAOE,OAAO,CAACC,OAAR,EAAP;AAE1B,UAAM,KAAKJ,IAAL,EAAN;AACA,UAAM,KAAKc,KAAL,EAAN;AACA,QAAI,KAAKhC,MAAL,CAAYW,SAAZ,OAA4Bf,SAAhC,EAA2C,OAAOyB,OAAO,CAACC,OAAR,EAAP;AAE3C,WAAO,IAAID,OAAJ,CAAY,CAACC,OAAD,EAAUK,MAAV,KAAqB,KAAK3B,MAAL,CAAY+B,UAAZ,CAAwBE,eAAD,IAA8B;AACzF,UAAI,CAACA,eAAe,CAACJ,UAArB,EAAiC;AAC7BF,QAAAA,MAAM,CAAC,IAAInS,cAAJ,CAAmB,yCAAnB,CAAD,CAAN;AACH,OAFD,MAEO;AACH8R,QAAAA,OAAO,CAAChS,SAAD,CAAP;AACH;AACJ,KANuC,CAAjC,CAAP;AAOH;;AAEQ,QAAH4S,GAAG,CACLC,OADK,EAELC,MAFK,EAGL7Q,OAA4B,GAAG,EAH1B,EAI6C;AAAA;;AAClD,UAAM,KAAK2P,IAAL,EAAN;AACA,UAAMmB,QAAQ,GAAI,EAAD,CAAkBC,MAAlB,CAAyBH,OAAzB,CAAjB;;AAEA,QAAI,sBAAKnC,MAAL,8DAAaW,SAAb,QAA6Bf,SAAjC,EAA4C;AACxC,YAAM,KAAKwB,SAAL,EAAN;AACH;;AACD,UAAM;AAAEnK,MAAAA;AAAF,QAAcU,cAApB;AACA,UAAM4K,iBAAiB,GAAG,CAACtL,OAAD,GAAW,EAAX,GACtB;AAAEuK,MAAAA,GAAG,EAAE;AAAE,SAAC9B,cAAD,GAAkBzI,OAAO,CAACwE;AAA5B;AAAP,KADJ;;AAGA,UAAM+G,kBAAkB,GAAG,CAAC;AAAEC,MAAAA;AAAF,KAAD,KAA6B;AACpD;AACAA,MAAAA,IAAI,GAAG,OAAOA,IAAP,KAAgB,QAAhB,GAA2BlP,IAAI,CAACC,KAAL,CAAWiP,IAAX,CAA3B,GAA8CA,IAArD;AACA,aAAOL,MAAM,CAACK,IAAD,CAAb;AACH,KAJD;;AAMA,UAAMC,QAAuC,GAAG,EAAhD;AACA,SAAK1C,MAAL,CAAY2C,KAAZ,CAAkB,MAAMN,QAAQ,CAACO,OAAT,CAAiB,CAAC;AAAEnR,MAAAA;AAAF,KAAD,KAAciR,QAAQ,CAACzH,IAAT,CAAc,IAAIoG,OAAJ,CAAY,CAACC,OAAD,EAAUK,MAAV,KAAqB;AAClG,YAAMkB,YAAY,GAAG,KAAK7C,MAAL,CAAY8C,SAAZ,CAAsBrR,IAAtB,EAA4B+Q,kBAA5B,EAAgDD,iBAAhD,EAAoEQ,cAAD,IAAsC;AAAA;;AAC1H,YAAIA,cAAc,CAAClB,UAAnB,EAA+B;AAC3B,eAAKmB,aAAL,CAAmB9P,GAAnB,CAAuB2P,YAAY,CAACV,OAApC,EAA6CU,YAA7C;AACAvB,UAAAA,OAAO,CAACuB,YAAD,CAAP;AACA;AACH;;AAED,cAAMf,YAAY,4BAAGiB,cAAc,CAAC1K,KAAlB,yEAA2B,EAA7C;AACA,cAAMA,KAAK,GAAG,IAAIxI,KAAJ,CAAU;AACpBK,UAAAA,MAAM,EAAE4R,YAAY,CAAC1F,QAAb,CAAsB,KAAtB,IAA+ByD,cAA/B,GAA8CvQ,SADlC;AAEpBK,UAAAA,OAAO,EAAEmS,YAFW;AAGpB9R,UAAAA,WAAW,EAAE;AACTJ,YAAAA,IAAI,EAAE,cADG;AAET,eAAGmT;AAFM;AAHO,SAAV,CAAd;;AASA,YAAIxR,OAAO,CAACwK,KAAZ,EAAmB;AACf4F,UAAAA,MAAM,CAACtJ,KAAD,CAAN;AACA;AACH;;AAED,cAAMmE,KAAK,GAAG,MAAM,KAAK0F,GAAL,CAASC,OAAT,EAAkBC,MAAlB,EAA0B;AAAErG,UAAAA,KAAK,EAAE;AAAT,SAA1B,CAApB;;AACA,YAAI;AACA,gBAAMM,MAAM,GAAGpD,YAAY,CAACb,MAAb,CAA+DC,KAA/D,EAAsEmE,KAAtE,CAAf;AACA,gBAAMyG,GAAG,GAAG5F,KAAK,CAACC,OAAN,CAAcjB,MAAd,IAAwBA,MAAM,CAAC,CAAD,CAA9B,GAAoCA,MAAhD;AACAiF,UAAAA,OAAO,CAAC2B,GAAD,CAAP;AACH,SAJD,CAIE,OAAOpK,CAAP,EAAU;AACR8I,UAAAA,MAAM,CAAC9I,CAAD,CAAN;AACH;AACJ,OA9BoB,CAArB;AA+BH,KAhCoE,CAAd,CAA/B,CAAxB;AAiCA,WAAO6J,QAAQ,CAACjQ,MAAT,KAAoB,CAApB,GACH4O,OAAO,CAACtG,GAAR,CAAY2H,QAAZ,EAAsBlI,IAAtB,CAA2B,CAAC,CAAC0I,GAAD,CAAD,KAAWA,GAAtC,CADG,GAEH7B,OAAO,CAACtG,GAAR,CAAY2H,QAAZ,CAFJ;AAGH;;AAEY,QAAPS,OAAO,CACThB,OADS,EAETiB,OAFS,EAGT7R,OAA4B,GAAG,EAHtB,EAIX;AACE,UAAM,KAAK2P,IAAL,EAAN;AACA,UAAMmB,QAAQ,GAAI,EAAD,CAAkBC,MAAlB,CAAyBH,OAAzB,CAAjB;;AAEA,QAAI,KAAKnC,MAAL,CAAYW,SAAZ,OAA4Bf,SAAhC,EAA2C;AACvC,YAAM,KAAKwB,SAAL,EAAN;AACH;;AACD,UAAM;AAAEnK,MAAAA;AAAF,QAAcU,cAApB;AACA,UAAM0L,YAAY,GAAG;AACjB7B,MAAAA,GAAG,EAAEvK,OAAO,GAAG;AAAE,SAACyI,cAAD,GAAkBzI,OAAO,CAACwE;AAA5B,OAAH,GAAyCnM;AADpC,KAArB;AAGA,UAAMoT,QAA4B,GAAG,EAArC;AACA,SAAK1C,MAAL,CAAY2C,KAAZ,CAAkB,MAAMN,QAAQ,CAACO,OAAT,CAAiB,CAAC;AAAEnR,MAAAA;AAAF,KAAD,KAAciR,QAAQ,CAACzH,IAAT,CAAc,IAAIoG,OAAJ,CAAY,CAACC,OAAD,EAAUK,MAAV,KAAqB;AAClG,WAAK3B,MAAL,CAAYmD,OAAZ,CAAoB1R,IAApB,EAA0B2R,OAA1B,EAAmCC,YAAnC,EAAkDC,YAAD,IAA2B;AAAA;;AACxE,YAAIA,YAAY,CAACzB,UAAjB,EAA6B;AACzBP,UAAAA,OAAO,CAACgC,YAAD,CAAP;AACA;AACH;;AAED,cAAMxB,YAAY,0BAAGwB,YAAY,CAACjL,KAAhB,qEAAyB,EAA3C;AACA,cAAMA,KAAK,GAAG,IAAIxI,KAAJ,CAAU;AACpBK,UAAAA,MAAM,EAAE4R,YAAY,CAAC1F,QAAb,CAAsB,KAAtB,IAA+ByD,cAA/B,GAA8CvQ,SADlC;AAEpBK,UAAAA,OAAO,EAAEmS,YAFW;AAGpB9R,UAAAA,WAAW,EAAE;AACTJ,YAAAA,IAAI,EAAE,cADG;AAET,eAAG0T;AAFM;AAHO,SAAV,CAAd;;AASA,YAAI/R,OAAO,CAACwK,KAAZ,EAAmB;AACf4F,UAAAA,MAAM,CAACtJ,KAAD,CAAN;AACA;AACH;;AAED,cAAMmE,KAAK,GAAG,MAAM,KAAK2G,OAAL,CAAahB,OAAb,EAAsBiB,OAAtB,EAA+B;AAAErH,UAAAA,KAAK,EAAE;AAAT,SAA/B,CAApB;;AACA,YAAI;AACA,gBAAMM,MAAM,GAAGpD,YAAY,CAACb,MAAb,CAAyCC,KAAzC,EAAgDmE,KAAhD,CAAf;AACA,gBAAM7M,OAAO,GAAG0N,KAAK,CAACC,OAAN,CAAcjB,MAAd,IAAwBA,MAAM,CAAC,CAAD,CAA9B,GAAoCA,MAApD;AACAiF,UAAAA,OAAO,CAAC3R,OAAD,CAAP;AACH,SAJD,CAIE,OAAOkJ,CAAP,EAAU;AACR8I,UAAAA,MAAM,CAAC9I,CAAD,CAAN;AACH;AACJ,OA7BD;AA8BH,KA/BoE,CAAd,CAA/B,CAAxB;AAgCA,WAAO6J,QAAQ,CAACjQ,MAAT,KAAoB,CAApB,GACH4O,OAAO,CAACtG,GAAR,CAAY2H,QAAZ,EAAsBlI,IAAtB,CAA2B,CAAC,CAAC0I,GAAD,CAAD,KAAWA,GAAtC,CADG,GAEH7B,OAAO,CAACtG,GAAR,CAAY2H,QAAZ,CAFJ;AAGH;;AAEW,QAANa,MAAM,CAACV,YAAD,EAAmC;AAC3C,UAAM,KAAK3B,IAAL,EAAN;AACA,SAAK8B,aAAL,CAAmB7P,MAAnB,CAA0B0P,YAAY,CAACV,OAAvC;AACA,WAAO,IAAId,OAAJ,CAAY,CAACC,OAAD,EAAUK,MAAV,KAAqB,KAAK3B,MAAL,CAAYwD,WAAZ,CAAwBX,YAAxB,EAAuCY,gBAAD,IAA+B;AAAA;;AACzG,UAAIA,gBAAgB,CAAC5B,UAArB,EAAiC;AAC7BP,QAAAA,OAAO,CAACmC,gBAAD,CAAP;AACH;;AACD,YAAM3B,YAAY,4BAAG2B,gBAAgB,CAACpL,KAApB,yEAA6B,EAA/C;AACA,YAAMA,KAAK,GAAG,IAAIxI,KAAJ,CAAU;AACpBK,QAAAA,MAAM,EAAE4R,YAAY,CAAC1F,QAAb,CAAsB,KAAtB,IAA+ByD,cAA/B,GAA8CvQ,SADlC;AAEpBK,QAAAA,OAAO,EAAEmS,YAFW;AAGpB9R,QAAAA,WAAW,EAAE;AACTJ,UAAAA,IAAI,EAAE,cADG;AAET,aAAG6T;AAFM;AAHO,OAAV,CAAd;AAQA9B,MAAAA,MAAM,CAACtJ,KAAD,CAAN;AACA;AACH,KAfuC,CAAjC,CAAP;AAgBH;;AAEU,QAAL2J,KAAK,GAAG;AACV,UAAM,KAAKd,IAAL,EAAN;AACA,UAAMwB,QAA4B,GAAG,EAArC;AACA,SAAK1C,MAAL,CAAY2C,KAAZ,CAAkB,MAAM,KAAKK,aAAL,CAAmBJ,OAAnB,CAA4BC,YAAD,IAAkB;AACjEH,MAAAA,QAAQ,CAACzH,IAAT,CAAc,KAAKsI,MAAL,CAAYV,YAAZ,CAAd;AACH,KAFuB,CAAxB;AAGA,WAAOxB,OAAO,CAACtG,GAAR,CAAY2H,QAAZ,CAAP;AACH;;AAnRe;;AAqRpB,MAAMgB,aAAa,GAAG,IAAI3D,aAAJ,EAAtB;;ACtRA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe4D,MAAf,GAAuC;AAC1ChM,EAAAA,cAAc,CAACV,OAAf,GAAyB3H,SAAzB;AACA,QAAMoU,aAAa,CAAC3B,UAAd,EAAN;AACH;AAEM,eAAe6B,KAAf,CACHC,WADG,EAEHjF,SAAmD,GAAG,EAFnD,EAGa;AAChB,QAAM;AAAEvH,IAAAA,UAAF;AAAc,OAAG6H;AAAjB,MAAoCN,SAA1C;AACA,MAAIkF,OAAJ;;AACA,MAAIrJ,MAAM,CAACsJ,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCJ,WAArC,EAAkD,QAAlD,CAAJ,EAAiE;AAC7D,UAAM;AAAEzL,MAAAA,MAAF;AAAU8L,MAAAA,QAAV;AAAoBC,MAAAA;AAApB,QAAiCN,WAAvC;AACAC,IAAAA,OAAO,GAAG;AAAEzM,MAAAA,UAAU,EAAEA,UAAF,aAAEA,UAAF,cAAEA,UAAF,GAAgB,MAA5B;AAAoCe,MAAAA,MAApC;AAA4C8L,MAAAA,QAA5C;AAAsDC,MAAAA,QAAQ,EAAEA,QAAQ,IAAI7U;AAA5E,KAAV;AACH;;AACD,MAAImL,MAAM,CAACsJ,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCJ,WAArC,EAAkD,WAAlD,CAAJ,EAAoE;AAChE,UAAM;AAAEO,MAAAA;AAAF,QAAgBP,WAAtB;AACAC,IAAAA,OAAO,GAAG;AAAEzM,MAAAA,UAAU,EAAEA,UAAF,aAAEA,UAAF,cAAEA,UAAF,GAAgB,SAA5B;AAAuC+M,MAAAA;AAAvC,KAAV;AACH;;AACD,QAAMnN,OAAO,GAAG,MAAM,IAAIyF,MAAJ,GACjB2B,IADiB,CACZ,iBADY,EACO;AACrBtC,IAAAA,KAAK,EAAE,IADc;AAErBV,IAAAA,oBAAoB,EAAE,KAFD;AAGrBvL,IAAAA,IAAI,EAAEgU,OAHe;AAIrB,OAAG5E;AAJkB,GADP,EAMf1E,IANe,CAMV,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IANJ,CAAtB;AAOA,QAAM6T,MAAM,EAAZ;AACAhM,EAAAA,cAAc,CAACV,OAAf,GAAyBA,OAAzB;AACA,SAAOA,OAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeoN,UAAf,CACHC,cADG,EAEH1F,SAEkB,GAAG,EAJlB,EAKa;AAChB,QAAM;AACFvH,IAAAA,UAAU,GAAG,MADX;AAEFzB,IAAAA,gBAFE;AAGF,OAAGsJ;AAHD,MAIFN,SAJJ;AAMA,QAAM3H,OAAO,GAAG,MAAM,IAAIyF,MAAJ,GACjB4B,KADiB,CACX,iBADW,EACQ;AACtB1I,IAAAA,gBAAgB,EAAEyB,UAAU,KAAK,OAAf,GACdiN,cADc,GAEd1O,gBAHkB;AAItB9F,IAAAA,IAAI,EAAE;AACFuH,MAAAA,UADE;AAEF8M,MAAAA,QAAQ,EAAE9M,UAAU,KAAK,MAAf,GACNiN,cADM,GAENhV;AAJF,KAJgB;AAUtB,OAAG4P;AAVmB,GADR,EAYf1E,IAZe,CAYV,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAZJ,CAAtB;AAcA,QAAM6T,MAAM,EAAZ;AACAhM,EAAAA,cAAc,CAACV,OAAf,GAAyBA,OAAzB;AACA,SAAOA,OAAP;AACH;AAEM,eAAesN,GAAf,CACH3F,SAAyB,GAAG,EADzB,EAEa;AAChB,QAAM3H,OAAO,GAAG,MAAM,IAAIyF,MAAJ,GACjBzJ,GADiB,CACb,mBADa,EACQ2L,SADR,EAEjBpE,IAFiB,CAEZ,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFF,CAAtB;AAIA6H,EAAAA,cAAc,CAACV,OAAf,GAAyBA,OAAzB;AACA,SAAOA,OAAP;AACH;AAEM,eAAeuN,UAAf,GAA8C;AACjD,QAAM;AAAE1U,IAAAA;AAAF,MAAW,MAAM,IAAI4M,MAAJ,GAAazJ,GAAb,CAAiB,iBAAjB,CAAvB;AACA0E,EAAAA,cAAc,CAACV,OAAf,GAAyBnH,IAAzB;AACA,SAAOA,IAAP;AACH;AAEM,SAAS2U,eAAT,GAAgD;AACnD,SAAO9M,cAAc,CAACV,OAAtB;AACH;AAEM,SAASyN,eAAT,CAAyBzN,OAAzB,EAAoD;AACvD,SAAOU,cAAc,CAACV,OAAf,GAAyBA,OAAhC;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe0N,aAAf,CACHvM,MADG,EAEHwG,SAGkB,GAAG,EALlB,EAMU;AACb,QAAM;AACFgG,IAAAA,WADE;AACWC,IAAAA,OADX;AAEF,OAAG3F;AAFD,MAGFN,SAHJ;AAKA,SAAO,MAAM,IAAIlC,MAAJ,GACR2B,IADQ,yCAC8BjG,MAD9B,GACwC,EAC7C,GAAG8G,cAD0C;AAE7CpP,IAAAA,IAAI,EAAE;AACFgV,MAAAA,WAAW,EAAEF,WADX;AAEFC,MAAAA;AAFE;AAFuC,GADxC,EAQRrK,IARQ,CAQH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IARX,CAAb;AASH;AAEM,eAAeiV,MAAf,CACHtJ,KADG,EAEHmD,SAAyB,GAAG,EAFzB,EAGa;AAChB,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,CACJ,eADI,EACa;AAClBqI,IAAAA,aAAa,mBAAYG,KAAZ,CADK;AAElB,OAAGmD;AAFe,GADb,EAKRpE,IALQ,CAKH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALX,CAAb;AAMH;;;;;;;;;;;;;;;ACjJM,eAAekV,QAAf,CACHC,IADG,EAEHC,KAFG,EAGHtG,SAIkB,GAAG,EAPlB,EAQiB;AACpB,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,QAAM;AACFI,IAAAA,QADE;AACQC,IAAAA,SADR;AACmBC,IAAAA,UADnB;AAEF,OAAGtG;AAFD,MAGFN,SAHJ;AAIA,SAAO,MAAM,IAAIlC,MAAJ,GACR2B,IADQ,CACH,QADG,EACO;AACZvO,IAAAA,IAAI,EAAE;AACFmV,MAAAA,IADE;AAEFC,MAAAA,KAAK,EAAE;AACHC,QAAAA,aADG;AAEHC,QAAAA,QAFG;AAGHC,QAAAA;AAHG,OAFL;AAOFI,MAAAA,MAAM,EAAE;AACJH,QAAAA,QAAQ,EAAEA,QAAF,aAAEA,QAAF,cAAEA,QAAF,GAAc9Q,IAAI,CAACkR,IADvB;AAEJH,QAAAA,SAAS,EAAEA,SAAF,aAAEA,SAAF,cAAEA,SAAF,GAAe/Q,IAAI,CAACkR;AAFzB,OAPN;AAWFF,MAAAA;AAXE,KADM;AAcZ,OAAGtG;AAdS,GADP,EAgBN1E,IAhBM,CAgBD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAhBb,CAAb;AAiBH;AAEM,eAAesS,QAAf,CACH6C,IADG,EAEHC,KAFG,EAGHtG,SAIkB,GAAG,EAPlB,EAQiB;AACpB,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,QAAM;AACFI,IAAAA,QADE;AACQC,IAAAA,SADR;AACmBC,IAAAA,UADnB;AAEF,OAAGtG;AAFD,MAGFN,SAHJ;AAIA,SAAO,MAAM,IAAIlC,MAAJ,GACR4B,KADQ,CACF,QADE,EACQ;AACbxO,IAAAA,IAAI,EAAE;AACFmV,MAAAA,IADE;AAEFC,MAAAA,KAAK,EAAE;AACHC,QAAAA,aADG;AAEHC,QAAAA,QAFG;AAGHC,QAAAA;AAHG,OAFL;AAOFI,MAAAA,MAAM,EAAE;AACJH,QAAAA,QAAQ,EAAEA,QAAF,aAAEA,QAAF,cAAEA,QAAF,GAAc9Q,IAAI,CAACkR,IADvB;AAEJH,QAAAA,SAAS,EAAEA,SAAF,aAAEA,SAAF,cAAEA,SAAF,GAAe/Q,IAAI,CAACkR;AAFzB,OAPN;AAWFF,MAAAA;AAXE,KADO;AAcb,OAAGtG;AAdU,GADR,EAgBN1E,IAhBM,CAgBD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAhBb,CAAb;AAiBH;AAEM,eAAeyT,QAAf,CACHoC,QADG,EAEH/G,SAAyB,GAAG,EAFzB,EAGU;AACb,SAAO,MAAM,IAAIlC,MAAJ,GACRvJ,MADQ,kBACSwS,QADT,GACqB/G,SADrB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAEM,eAAe8V,eAAf,CACHV,KADG,EAEHtG,SAAyB,GAAG,EAFzB,EAGU;AACb,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,QAAMlH,YAAY,GAAGqH,OAAO,cAAOA,OAAP,IAAmB,EAA/C;AACA,SAAO,MAAM,IAAI3I,MAAJ,GACRvJ,MADQ,qBACYgS,aADZ,cAC6BC,QAD7B,SACwCpH,YADxC,GACwDY,SADxD,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAEM,eAAemD,KAAf,CACH0S,QADG,EAEH/G,SAAyB,GAAG,EAFzB,EAGW;AACd,QAAM;AAAE/B,IAAAA,MAAF;AAAUjH,IAAAA,gBAAV;AAA4BE,IAAAA;AAA5B,MAAiD8I,SAAvD;AACA,SAAO,MAAM,IAAIlC,MAAJ,GACRgB,UADQ,CACGb,MADH,EAERc,oBAFQ,CAEa/H,gBAFb,EAGRgI,oBAHQ,CAGa9H,gBAHb,EAIR7C,GAJQ,kBAIM0S,QAJN,GAKRnL,IALQ,CAKH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALX,CAAb;AAMH;AAEM,eAAe+V,MAAf,CACHX,KADG,EAEHtG,SAEkB,GAAG,EAJlB,EAKa;AAChB,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,QAAM;AACFjG,IAAAA,MADE;AAEF,OAAGC;AAFD,MAGFN,SAHJ;AAIA,QAAMZ,YAAY,GAAGqH,OAAO,cAAOA,OAAP,IAAmB,EAA/C;AACA,SAAO,MAAM,IAAI3I,MAAJ,GACRzJ,GADQ,qBACSkS,aADT,cAC0BC,QAD1B,SACqCpH,YADrC,cACqDiB,MADrD,aACqDA,MADrD,cACqDA,MADrD,GAC+D,GAD/D,GACsEC,cADtE,EAER1E,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAEM,eAAeiO,MAAf,CACH4H,QADG,EAEH/G,SAAyB,GAAG,EAFzB,EAGY;AACf,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,sBACU0S,QADV,GACsB/G,SADtB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAEM,eAAegW,eAAf,CACHb,IADG,EAEHC,KAFG,EAGHtG,SAAyB,GAAG,EAHzB,EAIY;AACf,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,QAAMlH,YAAY,GAAGqH,OAAO,cAAOA,OAAP,IAAmB,EAA/C;AACA,SAAO,MAAM,IAAI3I,MAAJ,GACRzJ,GADQ,2BACekS,aADf,cACgCC,QADhC,SAC2CpH,YAD3C,cAC2DiH,IAD3D,GACmErG,SADnE,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAED,MAAMiW,QAAQ,GAAG,GAAjB;AACO,eAAenT,KAAf,CACHqS,IADG,EAEHC,KAFG,EAGHtG,SAMkB,GAAG,EATlB,EAUU;AACb,QAAM;AAAEoH,IAAAA,SAAF;AAAaC,IAAAA,QAAb;AAAuB,OAAGC;AAA1B,MAAwCtH,SAA9C;AACA,QAAMuH,IAAI,GAAGF,QAAH,aAAGA,QAAH,cAAGA,QAAH,GAAehB,IAAI,CAACkB,IAA9B;AACA,MAAIC,YAAY,GAAG,EAAnB;;AACA,MAAI;AACA,UAAMrW,QAAQ,GAAG,MAAMiV,QAAM,CAACmB,IAAD,EAAOjB,KAAP,EAAcgB,SAAd,CAA7B;AACAE,IAAAA,YAAY,GAAGrW,QAAQ,CAACsJ,GAAxB;AACH,GAHD,CAGE,OAAOhB,KAAP,EAAc;AACZ,QAAIA,KAAK,YAAYxI,KAArB,EAA4B;AACxB,YAAMwW,YAAY,GAAGhO,KAAK,CAACnI,MAAN,KAAiB6V,QAAjB,IAA6BC,SAAlD;AACA,UAAI,CAACK,YAAL,EAAmB,MAAMhO,KAAN;AACnB,YAAMtI,QAAQ,GAAG,MAAMqS,QAAM,CAAC+D,IAAD,EAAOjB,KAAP,EAAcgB,SAAd,CAA7B;AACAE,MAAAA,YAAY,GAAGrW,QAAQ,CAACsJ,GAAxB;AACH,KALD,MAKO;AACH,YAAMhB,KAAN;AACH;AACJ;;AACD,QAAM2D,KAAK,CAACoK,YAAD,EAAe;AAAEtK,IAAAA,MAAM,EAAE,KAAV;AAAiBhM,IAAAA,IAAI,EAAEmV;AAAvB,GAAf,CAAX;AACA;AACH;;;;;;;;;;;;;;;IC/LIqB;AAKL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;WA5CKA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,aAAAA;;AA6CE,eAAeC,SAAf,CACHpC,QADG,EAEHkB,OAFG,EAGHR,OAHG,EAIH2B,SAJG,EAKH5H,SAakB,GAAG,EAlBlB,EAmBU;AACb,QAAM;AAAEhJ,IAAAA,gBAAF;AAAoBE,IAAAA,gBAApB;AAAsC+G,IAAAA,MAAtC;AAA8C4J,IAAAA,eAA9C;AAA+DC,IAAAA,IAA/D;AAAqEC,IAAAA,WAArE;AAAkFxI,IAAAA,IAAlF;AAAwFyI,IAAAA,OAAxF;AAAiGC,IAAAA;AAAjG,MACFjI,SADJ;AAGA,MAAIkI,UAAU,GAAG,EAAjB;;AACA,MAAID,WAAJ,EAAiB;AACbC,IAAAA,UAAU,kBAAWD,WAAX,CAAV;AACH,GAFD,MAEO,IAAI1I,IAAJ,EAAU;AACb2I,IAAAA,UAAU,oBAAa3I,IAAb,CAAV;;AACA,QAAIyI,OAAJ,EAAa;AACTE,MAAAA,UAAU,eAAQF,OAAR,CAAV;AACH;AACJ;;AAED,SAAO,MAAM,IAAIlK,MAAJ,GACRgB,UADQ,CACGb,MADH,EAERc,oBAFQ,CAEa/H,gBAFb,EAGRgI,oBAHQ,CAGa9H,gBAHb,EAIRuI,IAJQ,uBAIY8F,QAJZ,cAIwBkB,OAJxB,SAIkCyB,UAJlC,GAIgD;AACrDhX,IAAAA,IAAI,EAAE;AACF+U,MAAAA,OADE;AAEF/U,MAAAA,IAAI,EAAE0W,SAFJ;AAGFC,MAAAA,eAHE;AAIFC,MAAAA,IAJE;AAKFC,MAAAA;AALE;AAD+C,GAJhD,EAaRnM,IAbQ,CAaH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAbX,CAAb;AAcH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeiX,gBAAf,CACHhI,QADG,EAEH8F,OAFG,EAGH2B,SAHG,EAIH5H,SAUkB,GAAG,EAdlB,EAeU;AACb,QAAM;AAAEhJ,IAAAA,gBAAF;AAAoBE,IAAAA,gBAApB;AAAsC+G,IAAAA,MAAtC;AAA8C4J,IAAAA,eAA9C;AAA+DC,IAAAA,IAA/D;AAAqEC,IAAAA;AAArE,MACF/H,SADJ;AAGA,SAAO,MAAM,IAAIlC,MAAJ,GACRgB,UADQ,CACGb,MADH,EAERc,oBAFQ,CAEa/H,gBAFb,EAGRgI,oBAHQ,CAGa9H,gBAHb,EAIRuI,IAJQ,wBAIaU,QAJb,GAIyB;AAC9BjP,IAAAA,IAAI,EAAE;AACF+U,MAAAA,OADE;AAEF/U,MAAAA,IAAI,EAAE0W,SAFJ;AAGFC,MAAAA,eAHE;AAIFC,MAAAA,IAJE;AAKFC,MAAAA;AALE;AADwB,GAJzB,EAaRnM,IAbQ,CAaH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAbX,CAAb;AAcH;;;;;;;;ACvID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAekV,QAAf,CACHmB,IADG,EAEHa,SAFG,EAGHpI,SAGkB,GAAG,EANlB,EAOa;AAChB,QAAM;AACFqI,IAAAA,KADE;AACKC,IAAAA,QADL;AAEF,OAAGhI;AAFD,MAGFN,SAHJ;AAIA,SAAO,MAAM,IAAIlC,MAAJ,GACR2B,IADQ,oBACS2I,SADT,GACsB;AAC3BlX,IAAAA,IAAI,EAAE;AAAEqW,MAAAA,IAAF;AAAQc,MAAAA,KAAR;AAAeC,MAAAA;AAAf,KADqB;AAE3B,OAAGhI;AAFwB,GADtB,EAIN1E,IAJM,CAID,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAJb,CAAb;AAKH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemD,KAAf,CACHkU,UADG,EAEHvI,SAAyB,GAAG,EAFzB,EAGa;AAChB,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,oBACQkU,UADR,GACsBvI,SADtB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemN,OAAf,CACHmK,aADG,EAEHxI,SAAyB,GAAG,EAFzB,EAGmB;AACtB,QAAM;AAAEK,IAAAA,MAAM,GAAG,EAAX;AAAeoI,IAAAA,IAAI,GAAG,EAAtB;AAA0BrN,IAAAA,KAAK,GAAG,CAAlC;AAAqCE,IAAAA;AAArC,MAA6CkN,aAAnD;AAEA,SAAO,MAAM,IAAI1K,MAAJ,GACRoB,gBADQ,CACS;AACdmB,IAAAA,MAAM,EAAEA,MAAM,CAACqI,IAAP,CAAY,GAAZ,KAAoBhY,SADd;AAEd+X,IAAAA,IAAI,EAAEA,IAAI,CAACC,IAAL,CAAU,GAAV,KAAkBhY,SAFV;AAGd0K,IAAAA,KAHc;AAGPE,IAAAA;AAHO,GADT,EAMRjH,GANQ,CAMJ,iBANI,EAMe;AACpBsH,IAAAA,SAAS,EAAE,IADS;AAEpB,OAAGqE;AAFiB,GANf,EAURpE,IAVQ,CAUH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAVX,CAAb;AAWH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeyX,UAAf,CACHpD,QADG,EAEHvF,SAAyB,GAAG,EAFzB,EAGe;AAClB,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,uBACWkR,QADX,GACuBvF,SADvB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe0X,QAAf,CACHrB,IADG,EAEHvH,SAAkD,GAAG,EAFlD,EAGa;AAChB,QAAM;AACFoI,IAAAA,SADE;AAEF,OAAG9H;AAFD,MAGFN,SAHJ;AAKA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACRzJ,GADQ,yBACa+T,SADb,aACaA,SADb,cACaA,SADb,GAC0B/P,OAD1B,aAC0BA,OAD1B,uBAC0BA,OAAO,CAAE+P,SADnC,cACgDb,IADhD,GACwDjH,cADxD,EAER1E,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeyT,QAAf,CACH4D,UADG,EAEHvI,SAAyB,GAAG,EAFzB,EAGU;AACb,SAAO,MAAM,IAAIlC,MAAJ,GACRvJ,MADQ,oBACWgU,UADX,GACyBvI,SADzB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;;;;;;;;;;;;IC5JI2X;;WAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,YAAAA;;AA6CL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAexU,KAAf,CACH2L,SAGkB,GAAG,EAJlB,EAKW;AACd,QAAM;AACFuF,IAAAA,QADE;AACQuD,IAAAA,OADR;AAEF,OAAGxI;AAFD,MAGFN,SAHJ;AAIA,MAAIZ,YAAY,GAAG,EAAnB;AACA,MAAI0J,OAAO,KAAKD,OAAO,CAACE,OAAxB,EAAiC3J,YAAY,GAAG,SAAf;AACjC,MAAI0J,OAAO,KAAKD,OAAO,CAACG,SAAxB,EAAmC5J,YAAY,GAAG,YAAf;AACnC,QAAM/G,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACRzJ,GADQ,iBACK+K,YADL,cACqBmG,QADrB,aACqBA,QADrB,cACqBA,QADrB,GACiClN,OADjC,aACiCA,OADjC,uBACiCA,OAAO,CAAEkN,QAD1C,GACsDjF,cADtD,EAER1E,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe+X,SAAf,CACH1D,QADG,EAEHvF,SAAyB,GAAG,EAFzB,EAGU;AAEb,SAAO,MAAM,IAAIlC,MAAJ,GACRvJ,MADQ,kBACSgR,QADT,GACqBvF,SADrB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAegY,MAAf,CACHlJ,SAAwD,GAAG,EADxD,EAEa;AAChB,QAAM;AACFmJ,IAAAA,cADE;AAEF,OAAG7I;AAFD,MAGFN,SAHJ;AAKA,SAAO,MAAM,IAAIlC,MAAJ,GACRoB,gBADQ,CACS;AAAEiK,IAAAA;AAAF,GADT,EAER9U,GAFQ,CAEJ,QAFI,EAEMiM,cAFN,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAesS,QAAf,CACH+B,QADG,EAEH/B,MAFG,EAGHxD,SAAyB,GAAG,EAHzB,EAIW;AACd,QAAM;AACFsI,IAAAA,QADE;AACQc,IAAAA,YADR;AACsBC,IAAAA,qBADtB;AAC6CC,IAAAA,cAD7C;AAEFC,IAAAA,KAFE;AAEKC,IAAAA,sBAFL;AAE6BC,IAAAA,OAF7B;AAGFC,IAAAA,SAHE;AAGSC,IAAAA,cAHT;AAGyBC,IAAAA;AAHzB,MAIFpG,MAJJ;AAMA,SAAO,MAAM,IAAI1F,MAAJ,GACR4B,KADQ,kBACQ6F,QADR,GACoB;AACzBrU,IAAAA,IAAI,EAAE;AACFoX,MAAAA,QADE;AACQc,MAAAA,YADR;AACsBC,MAAAA,qBADtB;AAC6CC,MAAAA,cAD7C;AAEFC,MAAAA,KAFE;AAEKC,MAAAA,sBAFL;AAE6BC,MAAAA,OAF7B;AAGFC,MAAAA,SAHE;AAGSC,MAAAA,cAHT;AAGyBC,MAAAA;AAHzB,KADmB;AAMzB,OAAG5J;AANsB,GADpB,EASRpE,IATQ,CASH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IATX,CAAb;AAUH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAekV,QAAf,CACHyD,KADG,EAEH7J,SAAyB,GAAG,EAFzB,EAGW;AACd,QAAM;AACFuH,IAAAA,IADE;AACIe,IAAAA,QADJ;AACcc,IAAAA,YADd;AAC4BC,IAAAA,qBAD5B;AAEFC,IAAAA,cAFE;AAEcC,IAAAA,KAFd;AAEqBC,IAAAA,sBAFrB;AAE6CC,IAAAA,OAF7C;AAGFC,IAAAA,SAHE;AAGSC,IAAAA,cAHT;AAGyBC,IAAAA;AAHzB,MAIFC,KAJJ;AAKA,MAAI,CAACtC,IAAL,EAAW,MAAM,IAAI3W,cAAJ,CAAmB,oCAAnB,CAAN;AACX,SAAO,MAAM,IAAIkN,MAAJ,GACR2B,IADQ,CACH,QADG,EACO;AACZvO,IAAAA,IAAI,EAAE;AACFqW,MAAAA,IADE;AACIe,MAAAA,QADJ;AACcc,MAAAA,YADd;AAC4BC,MAAAA,qBAD5B;AAEFC,MAAAA,cAFE;AAEcC,MAAAA,KAFd;AAEqBC,MAAAA,sBAFrB;AAE6CC,MAAAA,OAF7C;AAGFC,MAAAA,SAHE;AAGSC,MAAAA,cAHT;AAGyBC,MAAAA;AAHzB,KADM;AAMZ,OAAG5J;AANS,GADP,EASRpE,IATQ,CASH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IATX,CAAb;AAUH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemN,OAAf,CACHmK,aADG,EAEHxI,SAAyB,GAAG,EAFzB,EAGiB;AACpB,QAAM;AAAEK,IAAAA,MAAM,GAAG,EAAX;AAAeoI,IAAAA,IAAI,GAAG,EAAtB;AAA0BrN,IAAAA,KAA1B;AAAiCE,IAAAA,GAAjC;AAAsCwO,IAAAA;AAAtC,MAAoDtB,aAA1D;AAEA,QAAMzN,YAAY,GAAG;AACjBsF,IAAAA,MAAM,EAAEA,MAAM,CAACqI,IAAP,CAAY,GAAZ,KAAoBhY,SADX;AAEjB+X,IAAAA,IAAI,EAAEA,IAAI,CAACC,IAAL,CAAU,GAAV,KAAkBhY,SAFP;AAGjB0K,IAAAA,KAHiB;AAGVE,IAAAA;AAHU,GAArB;AAMA,SAAO,MAAM,IAAIwC,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER1G,GAFQ,iBAEKyV,SAAS,GAAG,YAAH,GAAkB,EAFhC,cAE6C;AAClDnO,IAAAA,SAAS,EAAE,IADuC;AAElD,OAAGqE;AAF+C,GAF7C,EAMRpE,IANQ,CAMH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IANX,CAAb;AAOH;AACD;;AACO,eAAe+J,MAAf,CACH+E,SAA0E,GAAG,EAD1E,EAEiB;AACpB9F,EAAAA,OAAO,CAACiB,IAAR,CAAa,mIAAb;AACA,QAAM;AAAEkF,IAAAA,MAAM,GAAG,EAAX;AAAeoI,IAAAA,IAAI,GAAG,EAAtB;AAA0BrN,IAAAA,KAA1B;AAAiCE,IAAAA,GAAjC;AAAsCwO,IAAAA,SAAtC;AAAiD,OAAGxJ;AAApD,MAAuEN,SAA7E;AACA,QAAMwI,aAAa,GAAG;AAAEnI,IAAAA,MAAF;AAAUoI,IAAAA,IAAV;AAAgBrN,IAAAA,KAAhB;AAAuBE,IAAAA,GAAvB;AAA4BwO,IAAAA;AAA5B,GAAtB;AACA,SAAO,MAAMzL,OAAK,CAACmK,aAAD,EAAgBlI,cAAhB,CAAlB;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeyJ,aAAf,CACHxC,IADG,EAEHvH,SAAyB,GAAG,EAFzB,EAGW;AAEd,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,uBACWkT,IADX,GACmBvH,SADnB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe8Y,OAAf,CACHvD,OADG,EAEHzG,SAIkB,GAAG,EANlB,EAOa;AAChB,QAAM;AACFmJ,IAAAA,cADE;AACc/I,IAAAA,iBADd;AACiC6J,IAAAA,IADjC;AAEF,OAAG3J;AAFD,MAGFN,SAHJ;AAIA,QAAMkK,UAAU,GAAGzL,KAAK,CAACC,OAAN,CAAcuL,IAAd,KAAuBA,IAAI,CAACpW,MAAL,GAAc,CAAxD;AACA,QAAMsW,QAAQ,GAAGD,UAAU,GAAGD,IAAH,GAAU,CAACA,IAAD,CAArC;AACA,QAAMlP,YAAY,GAAG;AACjBoO,IAAAA,cADiB;AAEjB/I,IAAAA,iBAFiB;AAGjB6J,IAAAA,IAAI,EAAEA,IAAI,GAAGE,QAAH,GAAczZ;AAHP,GAArB;AAMA,SAAO,MAAM,IAAIoN,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER1G,GAFQ,6BAEiBoS,OAFjB,GAE4BnG,cAF5B,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAekZ,gBAAf,CACHpK,SAIkB,GAAG,EALlB,EAMa;AAChB,QAAM;AACFmJ,IAAAA,cADE;AACcc,IAAAA,IADd;AAEF,OAAG3J;AAFD,MAGFN,SAHJ;AAIA,QAAMkK,UAAU,GAAGzL,KAAK,CAACC,OAAN,CAAcuL,IAAd,KAAuBA,IAAI,CAACpW,MAAL,GAAc,CAAxD;AACA,QAAMsW,QAAQ,GAAGD,UAAU,GAAGD,IAAH,GAAU,CAACA,IAAD,CAArC;AACA,QAAMlP,YAAY,GAAG;AACjBoO,IAAAA,cADiB;AAEjBc,IAAAA,IAAI,EAAEA,IAAI,GAAGE,QAAH,GAAczZ;AAFP,GAArB;AAKA,SAAO,MAAM,IAAIoN,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER1G,GAFQ,CAEJ,eAFI,EAEaiM,cAFb,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemZ,QAAf,CACH9E,QADG,EAEHvF,SAAyB,GAAG,EAFzB,EAGW;AAEd,SAAO,MAAM,IAAIlC,MAAJ,GACR2B,IADQ,mCACwB8F,QADxB,GACoCvF,SADpC,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeoZ,OAAf,CACHC,UADG,EAEHvK,SAAiD,GAAG,EAFjD,EAGU;AACb,QAAM;AAAEuF,IAAAA,QAAF;AAAY,OAAGjF;AAAf,MAAkCN,SAAxC;AAEA,QAAMwK,KAAK,GAAG/L,KAAK,CAACC,OAAN,CAAc6L,UAAd,IAA4BA,UAA5B,GAAyC,CAACA,UAAD,CAAvD;AACA,QAAMlS,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACR2B,IADQ,yBACc8F,QADd,aACcA,QADd,cACcA,QADd,GAC0BlN,OAD1B,aAC0BA,OAD1B,uBAC0BA,OAAO,CAAEkN,QADnC,GAC+C;AACpDrU,IAAAA,IAAI,EAAEsZ,KAAK,CAAC7L,GAAN,CAAW8L,CAAD,IAAO;AACnB,YAAMhE,OAAO,GAAG,OAAOgE,CAAP,KAAa,QAAb,GAAwBA,CAAxB,GAA4BA,CAAC,CAAChE,OAA9C;AACA,YAAMwD,IAAI,GAAG,OAAOQ,CAAP,KAAa,QAAb,GAAwB7U,IAAI,CAAC8U,WAA7B,GAA2CD,CAAC,CAACR,IAA1D;AACA,YAAMU,SAAS,GAAG,OAAOF,CAAP,KAAa,QAAb,GAAwB,IAAxB,GAA+BA,CAAC,CAACE,SAAnD;AAEA,aAAO;AACHV,QAAAA,IADG;AAEHxD,QAAAA,OAFG;AAGHhO,QAAAA,UAAU,EAAE,OAHT;AAIHkS,QAAAA,SAAS,EAAEA,SAAF,aAAEA,SAAF,cAAEA,SAAF,GAAe;AAJrB,OAAP;AAMH,KAXK,CAD8C;AAapD,OAAGrK;AAbiD,GAD/C,EAgBR1E,IAhBQ,CAgBH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAhBX,CAAb;AAiBH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe0Z,UAAf,CACHnE,OADG,EAEHjD,MAFG,EAGHxD,SAAiD,GAAG,EAHjD,EAIoB;AACvB,QAAM;AAAEiK,IAAAA,IAAF;AAAQU,IAAAA;AAAR,MAAsBnH,MAA5B;AACA,QAAM;AAAE+B,IAAAA,QAAF;AAAY,OAAGjF;AAAf,MAAkCN,SAAxC;AACA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACR4B,KADQ,yBACe6F,QADf,aACeA,QADf,cACeA,QADf,GAC2BlN,OAD3B,aAC2BA,OAD3B,uBAC2BA,OAAO,CAAEkN,QADpC,cACgDkB,OADhD,GAC2D;AAChEvV,IAAAA,IAAI,EAAE;AACFuH,MAAAA,UAAU,EAAE,OADV;AAEFwR,MAAAA,IAFE;AAGFU,MAAAA;AAHE,KAD0D;AAMhE,OAAGrK;AAN6D,GAD3D,EASR1E,IATQ,CASH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IATX,CAAb;AAUH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe2Z,UAAf,CACHpE,OADG,EAEHzG,SAAiD,GAAG,EAFjD,EAGU;AACb,QAAM;AAAEuF,IAAAA,QAAF;AAAY,OAAGjF;AAAf,MAAkCN,SAAxC;AACA,QAAM8K,WAAW,GAAGrM,KAAK,CAACC,OAAN,CAAc+H,OAAd,KAA0BA,OAAO,CAAC5S,MAAR,GAAiB,CAA/D;AACA,QAAMuL,YAAY,GAAG0L,WAAW,GAAG,EAAH,cAAYrE,OAAO,CAAC5S,MAAR,KAAmB,CAAnB,GAAuB4S,OAAO,CAAC,CAAD,CAA9B,GAAoCA,OAAhD,CAAhC;AACA,QAAM1L,YAAY,GAAG+P,WAAW,GAAG;AAAErE,IAAAA;AAAF,GAAH,GAAiB/V,SAAjD;AACA,QAAM2H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAERxG,MAFQ,yBAEgBgR,QAFhB,aAEgBA,QAFhB,cAEgBA,QAFhB,GAE4BlN,OAF5B,aAE4BA,OAF5B,uBAE4BA,OAAO,CAAEkN,QAFrC,SAEgDnG,YAFhD,GAEgEkB,cAFhE,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAGM,eAAe6Z,YAAf,CACH/Z,IADG,EAEHD,OAFG,EAGHiP,SAAiD,GAAG,EAHjD,EAIW;AACd,QAAM;AAAEuF,IAAAA,QAAF;AAAY,OAAGjF;AAAf,MAAkCN,SAAxC;AACA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACR4B,KADQ,yBACe6F,QADf,aACeA,QADf,cACeA,QADf,GAC2BlN,OAD3B,aAC2BA,OAD3B,uBAC2BA,OAAO,CAAEkN,QADpC,GACgD;AACrDrU,IAAAA,IAAI,EAAE;AAAEF,MAAAA,IAAF;AAAQD,MAAAA;AAAR,KAD+C;AAErD,OAAGuP;AAFkD,GADhD,EAIN1E,IAJM,CAID,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAJb,CAAb;AAKH;;;;;;;;;;;;;;;;;;;;;ACxeD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAesS,QAAf,CACHwH,UADG,EAEH1E,KAFG,EAGH2E,MAHG,EAIHjL,SAA4C,GAAG,EAJ5C,EAKiB;AACpB,QAAM;AAAEkL,IAAAA,IAAF;AAAQ,OAAG5K;AAAX,MAA8BN,SAApC;AACA,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,QAAMjO,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACR2B,IADQ,CACH,cADG,EACa;AAClBvO,IAAAA,IAAI,EAAE;AACFoV,MAAAA,KAAK,EAAE;AACHC,QAAAA,aADG;AAEHC,QAAAA,QAFG;AAGHC,QAAAA,OAAO,EAAEA,OAAF,aAAEA,OAAF,cAAEA,OAAF,GAAapO,OAAb,aAAaA,OAAb,uBAAaA,OAAO,CAAEoO;AAH1B,OADL;AAMFuE,MAAAA,UANE;AAOFC,MAAAA,MAPE;AAOMC,MAAAA;AAPN,KADY;AAUlB,OAAG5K;AAVe,GADb,EAYN1E,IAZM,CAYD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAZb,CAAb;AAaH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe+V,MAAf,CACH+D,UADG,EAEH1E,KAFG,EAGHkC,aAHG,EAIHxI,SAAyB,GAAG,EAJzB,EAKmB;AACtB,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA;AAAjB,MAA8BF,KAApC;AACA,QAAM;AAAEjG,IAAAA,MAAM,GAAG,EAAX;AAAeoI,IAAAA,IAAI,GAAG,EAAtB;AAA0BrN,IAAAA,KAA1B;AAAiCE,IAAAA;AAAjC,MAAyCkN,aAA/C;AACA,QAAMzN,YAAY,GAAG;AACjBsF,IAAAA,MAAM,EAAEA,MAAM,CAACqI,IAAP,CAAY,GAAZ,KAAoBhY,SADX;AAEjB+X,IAAAA,IAAI,EAAEA,IAAI,CAACC,IAAL,CAAU,GAAV,KAAkBhY,SAFP;AAGjB0K,IAAAA,KAHiB;AAGVE,IAAAA;AAHU,GAArB;AAMA,SAAO,MAAM,IAAIwC,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER1G,GAFQ,wBAEYkS,aAFZ,cAE6BC,QAF7B,cAEyCwE,UAFzC,GAEuDhL,SAFvD,EAGRpE,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAEM,eAAemD,KAAf,CACH2W,UADG,EAEH1E,KAFG,EAGHkC,aAHG,EAIHxI,SAAyB,GAAG,EAJzB,EAKmB;AACtB9F,EAAAA,OAAO,CAACiB,IAAR,CAAa,2IAAb;AACA,SAAO,MAAM8L,MAAI,CAAC+D,UAAD,EAAa1E,KAAb,EAAoBkC,aAApB,EAAmCxI,SAAnC,CAAjB;AACH;;;;;;;;;AC1GD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAemL,OAAf,GAAwC;AAC3C,QAAMrG,aAAa,CAACtC,SAAd,EAAN;AACA;AACH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemG,QAAf,CACHpD,QADG,EAEHvF,SAAyB,GAAG,EAFzB,EAGgB;AACnB,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,2BACekR,QADf,GAC2BvF,SAD3B,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeka,QAAf,CACHC,QADG,EAEHrL,SAAyB,GAAG,EAFzB,EAGgB;AACnB,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,2BACegX,QADf,GAC2BrL,SAD3B,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;;;;;;;;;AC3DM,eAAeoa,MAAf,CAAsBC,QAAtB,EAAwC;AAC3C,SAAO,MAAM,IAAIzN,MAAJ,GACRiB,oBADQ,CACa,WADb,EAERC,oBAFQ,CAEa,SAFb,EAGRS,IAHQ,CAGH,mBAHG,EAGkB;AACvBvO,IAAAA,IAAI,EAAE;AAACqa,MAAAA,QAAQ,EAAEA;AAAX;AADiB,GAHlB,EAMR3P,IANQ,CAMH,CAAC;AAAC1K,IAAAA;AAAD,GAAD,KAAYA,IANT,CAAb;AAOH;;;;;;;AC+CD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAekV,QAAf,CACHoF,KADG,EAEHlF,KAFG,EAGHtG,SAA2B,GAAG,EAH3B,EAIS;AACZ,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,QAAM;AACFI,IAAAA,QADE;AACQC,IAAAA,SADR;AACmB8E,IAAAA,SADnB;AAEFC,IAAAA,WAFE;AAEWC,IAAAA,YAFX;AAEyBC,IAAAA,gBAFzB;AAGF,OAAGtL;AAHD,MAIFN,SAJJ;AAMA,QAAM;AAAE6L,IAAAA;AAAF,MAAYxW,cAAlB;AACA,QAAM;AAAEqV,IAAAA,WAAF;AAAe5D,IAAAA;AAAf,MAAwBlR,IAA9B;AACA,QAAMkW,WAAW,GAAGvF,aAAa,KAAKsF,KAAlB,GAA0BnB,WAA1B,GAAwC5D,IAA5D;AACA,QAAMzO,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACR2B,IADQ,CACH,MADG,EACK;AACVvO,IAAAA,IAAI,EAAE;AACFoV,MAAAA,KAAK,EAAE;AACHC,QAAAA,aADG;AAEHC,QAAAA,QAFG;AAGHC,QAAAA,OAAO,EAAEF,aAAa,KAAKsF,KAAlB,GACLnb,SADK,GAEL+V,OAFK,aAELA,OAFK,cAELA,OAFK,GAEMpO,OAFN,aAEMA,OAFN,uBAEMA,OAAO,CAAEoO;AALrB,OADL;AAQFI,MAAAA,MAAM,EAAE;AACJH,QAAAA,QAAQ,EAAEA,QAAQ,IAAIoF,WADlB;AAEJnF,QAAAA,SAAS,EAAEA,SAAS,IAAImF;AAFpB,OARN;AAYFC,MAAAA,UAAU,EAAE,MAZV;AAaFL,MAAAA,WAbE;AAcFM,MAAAA,SAAS,EAAER,KAdT;AAeFG,MAAAA,YAAY,EAAEA,YAAY,IAAI;AAAC;AAAD,OAf5B;AAgBFC,MAAAA,gBAAgB,EAAEA,gBAAgB,IAAI;AAAC;AAAD,OAhBpC;AAiBFH,MAAAA;AAjBE,KADI;AAoBV,OAAGnL;AApBO,GADL,EAsBN1E,IAtBM,CAsBD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAtBb,CAAb;AAuBH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe+a,KAAf,CACHC,MADG,EAEHlM,SAKkB,GAAG,EAPlB,EAQS;AACZ,QAAM;AACFyL,IAAAA,SADE;AACSC,IAAAA,WADT;AACsBC,IAAAA,YAAY,GAAG,EADrC;AACyCC,IAAAA,gBAAgB,GAAG,EAD5D;AAEF,OAAGtL;AAFD,MAGFN,SAHJ;AAIA,SAAO,MAAM,IAAIlC,MAAJ,GACR2B,IADQ,sBACWyM,MADX,GACqB;AAC1Bhb,IAAAA,IAAI,EAAE;AACFwa,MAAAA,WADE;AAEFC,MAAAA,YAFE;AAGFC,MAAAA,gBAHE;AAIFH,MAAAA;AAJE,KADoB;AAO1B,OAAGnL;AAPuB,GADrB,EASN1E,IATM,CASD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IATb,CAAb;AAUH;AAEM,eAAeib,OAAf,CACHD,MADG,EAEHlM,SAIkB,GAAG,EANlB,EAOS;AACZ,QAAM;AACFyL,IAAAA,SADE;AACSE,IAAAA,YAAY,GAAG,EADxB;AAC4BC,IAAAA,gBAAgB,GAAG,EAD/C;AAEF,OAAGtL;AAFD,MAGFN,SAHJ;AAIA,SAAO,MAAM,IAAIlC,MAAJ,GACR2B,IADQ,wBACayM,MADb,GACuB;AAC5Bhb,IAAAA,IAAI,EAAE;AACFya,MAAAA,YADE;AAEFC,MAAAA,gBAFE;AAGFH,MAAAA;AAHE,KADsB;AAM5B,OAAGnL;AANyB,GADvB,EAQN1E,IARM,CAQD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IARb,CAAb;AASH;AAEM,eAAekb,MAAf,CACHF,MADG,EAEHG,KAFG,EAGHrM,SAGkB,GAAG,EANlB,EAOS;AACZ,QAAM;AACFyL,IAAAA,SADE;AACSE,IAAAA,YAAY,GAAG,EADxB;AAEF,OAAGrL;AAFD,MAGFN,SAHJ;AAIA,SAAO,MAAM,IAAIlC,MAAJ,GACR2B,IADQ,uBACYyM,MADZ,GACsB;AAC3Bhb,IAAAA,IAAI,EAAE;AACFob,MAAAA,WAAW,EAAED,KADX;AAEFV,MAAAA,YAFE;AAGFF,MAAAA;AAHE,KADqB;AAM3B,OAAGnL;AANwB,GADtB,EAQN1E,IARM,CAQD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IARb,CAAb;AASH;AAEM,eAAesS,QAAf,CACH0I,MADG,EAEH1I,MAFG,EAUHxD,SAAyB,GAAG,EAVzB,EAWS;AACZ,QAAM;AAAE0G,IAAAA,QAAF;AAAYC,IAAAA,SAAZ;AAAuB+E,IAAAA,WAAvB;AAAoCa,IAAAA,MAApC;AAA4CC,IAAAA,MAA5C;AAAoDC,IAAAA;AAApD,MAA+DjJ,MAArE;AACA,QAAMsH,WAAW,GAAGrM,KAAK,CAACC,OAAN,CAAcwN,MAAd,KAAyBA,MAAM,CAACrY,MAAP,GAAgB,CAA7D;AACA,QAAMuL,YAAY,GAAG0L,WAAW,GAAG,EAAH,cAAYoB,MAAM,CAACrY,MAAP,KAAkB,CAAlB,GAAsBqY,MAAM,CAAC,CAAD,CAA5B,GAAkCA,MAA9C,CAAhC;AACA,QAAMrF,MAAM,GAAIH,QAAQ,IAAIC,SAAb,GAA0B;AAAED,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAA1B,GAAoDjW,SAAnE;AAEA,SAAO,MAAM,IAAIoN,MAAJ,GACRoB,gBADQ,CACS4L,WAAW,GAAG;AAAEoB,IAAAA;AAAF,GAAH,GAAgB,EADpC,EAERxM,KAFQ,eAEKN,YAFL,GAEqB;AAC1BlO,IAAAA,IAAI,EAAE;AACF2V,MAAAA,MADE;AAEF6E,MAAAA,WAFE;AAGFa,MAAAA,MAHE;AAIFC,MAAAA,MAJE;AAKFC,MAAAA;AALE,KADoB;AAQ1B,OAAGzM;AARuB,GAFrB,EAWNpE,IAXM,CAWD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAXb,CAAb;AAYH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeyT,QAAf,CACHuH,MADG,EAEHlM,SAAyB,GAAG,EAFzB,EAGU;AACb,SAAO,MAAM,IAAIlC,MAAJ,GACRvJ,MADQ,gBACO2X,MADP,GACiBlM,SADjB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAEM,eAAemD,KAAf,CACH6X,MADG,EAEHlM,SAAyB,GAAG,EAFzB,EAGS;AACZ,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,gBACI6X,MADJ,GACclM,SADd,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemN,OAAf,CACHmN,KADG,EAEHhD,aAFG,EAWHxI,SAAyB,GAAG,EAXzB,EAYe;AAClB,QAAM;AACFK,IAAAA,MAAM,GAAG,EADP;AACWoI,IAAAA,IAAI,GAAG,EADlB;AACsBrN,IAAAA,KADtB;AAC6BE,IAAAA,GAD7B;AACkCoR,IAAAA,OADlC;AAC2CC,IAAAA,SAAS,GAAG,EADvD;AAC2DC,IAAAA,QAAQ,GAAG,EADtE;AAEFtG,IAAAA,KAFE;AAEK8B,IAAAA,SAFL;AAEgByE,IAAAA,WAFhB;AAE6BC,IAAAA;AAF7B,MAGFtE,aAHJ;AAIA,QAAMnQ,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,QAAM+G,YAAY,GAAGkH,KAAK,aACnBA,KAAK,CAACC,aADa,cACID,KAAK,CAACE,QADV,iBAEhB4B,SAFgB,aAEhBA,SAFgB,cAEhBA,SAFgB,GAEH/P,OAFG,aAEHA,OAFG,uBAEHA,OAAO,CAAE+P,SAFN,SAEkByE,WAAW,cAAOA,WAAP,IAAuB,EAFpD,CAA1B;AAGA,MAAIvG,KAAJ,aAAIA,KAAJ,eAAIA,KAAK,CAAEG,OAAX,EAAoBpG,MAAM,CAAChE,IAAP,uBAA2BiK,KAAK,CAACG,OAAjC;AAEpB,QAAM1L,YAAY,GAAG;AACjBsF,IAAAA,MAAM,EAAEA,MAAM,CAACqI,IAAP,CAAY,GAAZ,KAAoBhY,SADX;AAEjB+X,IAAAA,IAAI,EAAEA,IAAI,CAACC,IAAL,CAAU,GAAV,KAAkBhY,SAFP;AAGjBqc,IAAAA,GAAG,EAAEJ,SAAS,CAACjE,IAAV,CAAe,GAAf,KAAuBhY,SAHX;AAIjBsc,IAAAA,IAAI,EAAEJ,QAAQ,CAAClE,IAAT,CAAc,GAAd,KAAsBhY,SAJX;AAKjB0K,IAAAA,KALiB;AAKVE,IAAAA,GALU;AAKLoR,IAAAA,OALK;AAKII,IAAAA;AALJ,GAArB;AAQA,SAAO,MAAM,IAAIhP,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER1G,GAFQ,gBAEI+K,YAFJ,cAEoBoM,KAFpB,GAE6B;AAClC7P,IAAAA,SAAS,EAAE,IADuB;AAElCjB,IAAAA,SAAS,EAAGG,MAAD,IAAmB;AAC1B,aAAOA,MAAM,CAAC8D,GAAP,CAAYsO,GAAD,IAAS;AACvBA,QAAAA,GAAG,CAACN,SAAJ,GAAgBA,SAAS,CAACpO,MAAV,CAAiB,CAAC2O,WAAD,EAAchb,GAAd,EAAmByH,KAAnB,KAA6B;AAAA;;AAC1D;AACAuT,UAAAA,WAAW,CAAChb,GAAD,CAAX,qBAAmB+a,GAAG,CAACN,SAAvB,mDAAmB,eAAgBhT,KAAhB,CAAnB;AACA,iBAAOuT,WAAP;AACH,SAJe,EAIb,EAJa,CAAhB;AAKA,eAAOD,GAAP;AACH,OAPM,CAAP;AAQH,KAXiC;AAYlC,OAAGjN;AAZ+B,GAF7B,EAgBRpE,IAhBQ,CAgBH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAhBX,CAAb;AAiBH;AAEM,eAAeic,UAAf,CACH3B,KADG,EAEHxL,SAAyB,GAAG,EAFzB,EAG6B;AAEhC,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,2BACemX,KADf,GACwBxL,SADxB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAEM,eAAekc,SAAf,CACHlB,MADG,EAEH3E,IAFG,EAGH8F,IAAe,GAAG,EAHf,EAIHrN,SAGkB,GAAG,EAPlB,EAQa;AAChB,QAAM;AACF0M,IAAAA,OADE;AACOY,IAAAA,MADP;AAEF,OAAGhN;AAFD,MAGFN,SAHJ;AAIA,QAAM8K,WAAW,GAAGrM,KAAK,CAACC,OAAN,CAAcwN,MAAd,KAAyBA,MAAM,CAACrY,MAAP,GAAgB,CAA7D;AACA,QAAMuL,YAAY,GAAG0L,WAAW,GAAG,EAAH,cAAYoB,MAAM,CAACrY,MAAP,KAAkB,CAAlB,GAAsBqY,MAAM,CAAC,CAAD,CAA5B,GAAkCA,MAA9C,CAAhC;AACA,QAAMnR,YAAY,GAAG+P,WAAW,GAAG;AAAEoB,IAAAA,MAAF;AAAUQ,IAAAA;AAAV,GAAH,GAAyB;AAAEY,IAAAA,MAAF;AAAUZ,IAAAA;AAAV,GAAzD;;AAEA,MAAIY,MAAM,KAAKhY,MAAM,CAACiY,QAAlB,IAA8BzC,WAAlC,EAA+C;AAC3C5Q,IAAAA,OAAO,CAACiB,IAAR,4BAAiCmS,MAAjC;AACH;;AAED,SAAO,MAAM,IAAIxP,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER0E,IAFQ,yBAEcL,YAFd,GAE8B;AACnClO,IAAAA,IAAI,EAAE;AACFqW,MAAAA,IADE;AAEFiG,MAAAA,SAAS,EAAEH,IAFT;AAGF5U,MAAAA,UAAU,EAAE,SAHV;;AAAA,KAD6B;AAMnC,OAAG6H;AANgC,GAF9B,EASN1E,IATM,CASD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IATb,CAAb;AAUH;AAEM,eAAeuc,YAAf,CACHvB,MADG,EAEHS,SAFG,EAGH3M,SAGkB,GAAG,EANlB,EAOyD;AAC5D,QAAM;AACF0M,IAAAA,OADE;AACOY,IAAAA,MADP;AAEF,OAAGhN;AAFD,MAGFN,SAHJ;AAIA,QAAM0N,OAAO,GAAGf,SAAS,CAACjE,IAAV,CAAe,GAAf,CAAhB;AACA,QAAMoC,WAAW,GAAGrM,KAAK,CAACC,OAAN,CAAcwN,MAAd,KAAyBA,MAAM,CAACrY,MAAP,GAAgB,CAA7D;AACA,QAAMuL,YAAY,GAAG0L,WAAW,GAAG,EAAH,cAAYoB,MAAM,CAACrY,MAAP,KAAkB,CAAlB,GAAsBqY,MAAM,CAAC,CAAD,CAA5B,GAAkCA,MAA9C,CAAhC;AACA,QAAMnR,YAAY,GAAG+P,WAAW,GAAG;AAAEoB,IAAAA,MAAF;AAAUQ,IAAAA,OAAV;AAAmBgB,IAAAA;AAAnB,GAAH,GAAkC;AAAEJ,IAAAA,MAAF;AAAUZ,IAAAA,OAAV;AAAmBgB,IAAAA;AAAnB,GAAlE;;AAEA,MAAIJ,MAAM,KAAKhY,MAAM,CAACiY,QAAlB,IAA8BzC,WAAlC,EAA+C;AAC3C5Q,IAAAA,OAAO,CAACiB,IAAR,4BAAiCmS,MAAjC;AACH;;AAED,QAAMK,OAAO,GAAI9S,MAAD,IAAuB8R,SAAS,CAACpO,MAAV,CAAiB,CAAC2O,WAAD,EAAchb,GAAd,EAAmByH,KAAnB,KAA6B;AACjFuT,IAAAA,WAAW,CAAChb,GAAD,CAAX,GAAmB2I,MAAM,CAAClB,KAAD,CAAzB;AACA,WAAOuT,WAAP;AACH,GAHsC,EAGpC,EAHoC,CAAvC;;AAKA,SAAO,MAAM,IAAIpP,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER1G,GAFQ,wBAEY+K,YAFZ,GAE4BkB,cAF5B,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAc;AAChB,WAAQ,CAAC4Z,WAAD,GACJ6C,OAAO,CAACzc,IAAD,CADH,GAEJ2K,MAAM,CAAC+R,IAAP,CAAY1c,IAAZ,EAAkByN,GAAlB,CAAuBuN,MAAD,KAAa;AAC/BA,MAAAA,MAD+B;AAE/BS,MAAAA,SAAS,EAAEgB,OAAO,CAACzc,IAAI,CAACgb,MAAD,CAAL;AAFa,KAAb,CAAtB,CAFJ;AAOH,GAXQ,CAAb;AAYH;AAEM,eAAe2B,WAAf,CACH3B,MADG,EAEH4B,QAFG,EAGH9N,SAGkB,GAAG,EANlB,EAOa;AAChB,QAAM;AACF0M,IAAAA,OADE;AACOY,IAAAA,MADP;AAEF,OAAGhN;AAFD,MAGFN,SAHJ;;AAKA,MAAIvB,KAAK,CAACC,OAAN,CAAcwN,MAAd,KAAyBzN,KAAK,CAACC,OAAN,CAAcoP,QAAd,CAA7B,EAAsD;AAClD,UAAMnB,SAAS,GAAGlO,KAAK,CAACC,OAAN,CAAcoP,QAAd,IAA0BA,QAA1B,GAAqC,CAACA,QAAD,CAAvD;AACA,WAAOL,YAAY,CAACvB,MAAD,EAASS,SAAT,EAAoB3M,SAApB,CAAnB;AACH;;AAED,SAAO,MAAM,IAAIlC,MAAJ,GACRoB,gBADQ,CACS;AAAEwN,IAAAA,OAAF;AAAWY,IAAAA;AAAX,GADT,EAERjZ,GAFQ,yBAEa6X,MAFb,cAEuB4B,QAFvB,GAEmCxN,cAFnC,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAKH;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe6c,eAAf,CACH7B,MADG,EAEH1I,MAFG,EAGHxD,SAGkB,GAAG,EANlB,EAO6B;AAChC,QAAM;AACF0M,IAAAA,OADE;AACOY,IAAAA,MADP;AAEF,OAAGhN;AAFD,MAGFN,SAHJ;AAIA,QAAM8K,WAAW,GAAGrM,KAAK,CAACC,OAAN,CAAcwN,MAAd,KAAyBA,MAAM,CAACrY,MAAP,GAAgB,CAA7D;AACA,QAAMuL,YAAY,GAAG0L,WAAW,GAAG,EAAH,cAAYoB,MAAM,CAACrY,MAAP,KAAkB,CAAlB,GAAsBqY,MAAM,CAAC,CAAD,CAA5B,GAAkCA,MAA9C,CAAhC;AACA,QAAMnR,YAAY,GAAG+P,WAAW,GAAG;AAAEoB,IAAAA,MAAF;AAAUQ,IAAAA;AAAV,GAAH,GAAyB;AAAEY,IAAAA,MAAF;AAAUZ,IAAAA;AAAV,GAAzD;;AAEA,MAAIY,MAAM,KAAKhY,MAAM,CAACiY,QAAlB,IAA8BzC,WAAlC,EAA+C;AAC3C5Q,IAAAA,OAAO,CAACiB,IAAR,4BAAiCmS,MAAjC;AACH;;AAED,SAAO,MAAM,IAAIxP,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER2E,KAFQ,wBAEcN,YAFd,GAE8B;AACnClO,IAAAA,IAAI,EAAEsS,MAD6B;AAEnC,OAAGlD;AAFgC,GAF9B,EAMR1E,IANQ,CAMH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IANX,CAAb;AAQH;AAEM,eAAe8c,WAAf,CACH9B,MADG,EAEHU,QAFG,EAGH5M,SAGkB,GAAG,EANlB,EAO6B;AAChC,QAAM;AACF0M,IAAAA,OADE;AACOY,IAAAA,MADP;AAEF,OAAGhN;AAFD,MAGFN,SAHJ;AAIA,QAAM0N,OAAO,GAAGd,QAAQ,CAAClE,IAAT,CAAc,GAAd,CAAhB;AACA,QAAMoC,WAAW,GAAGrM,KAAK,CAACC,OAAN,CAAcwN,MAAd,KAAyBA,MAAM,CAACrY,MAAP,GAAgB,CAA7D;AACA,QAAMuL,YAAY,GAAG0L,WAAW,GAAG,EAAH,cAAYoB,MAAM,CAACrY,MAAP,KAAkB,CAAlB,GAAsBqY,MAAM,CAAC,CAAD,CAA5B,GAAkCA,MAA9C,CAAhC;AACA,QAAMnR,YAAY,GAAG+P,WAAW,GAAG;AAAEoB,IAAAA,MAAF;AAAUQ,IAAAA,OAAV;AAAmBgB,IAAAA;AAAnB,GAAH,GAAkC;AAAEJ,IAAAA,MAAF;AAAUZ,IAAAA,OAAV;AAAmBgB,IAAAA;AAAnB,GAAlE;;AAEA,MAAIJ,MAAM,KAAKhY,MAAM,CAACiY,QAAlB,IAA8BzC,WAAlC,EAA+C;AAC3C5Q,IAAAA,OAAO,CAACiB,IAAR,4BAAiCmS,MAAjC;AACH;;AAED,SAAO,MAAM,IAAIxP,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER1G,GAFQ,oBAEQ+K,YAFR,GAEwBkB,cAFxB,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAEM,eAAe+c,cAAf,CACH/B,MADG,EAEH1I,MAFG,EAGHxD,SAGkB,GAAG,EANlB,EAO6B;AAChC,QAAM;AACF0M,IAAAA,OADE;AACOY,IAAAA,MADP;AAEF,OAAGhN;AAFD,MAGFN,SAHJ;AAIA,QAAM8K,WAAW,GAAGrM,KAAK,CAACC,OAAN,CAAcwN,MAAd,KAAyBA,MAAM,CAACrY,MAAP,GAAgB,CAA7D;AACA,QAAMuL,YAAY,GAAG0L,WAAW,GAAG,EAAH,cAAYoB,MAAM,CAACrY,MAAP,KAAkB,CAAlB,GAAsBqY,MAAM,CAAC,CAAD,CAA5B,GAAkCA,MAA9C,CAAhC;AACA,QAAMnR,YAAY,GAAG+P,WAAW,GAAG;AAAEoB,IAAAA,MAAF;AAAUQ,IAAAA;AAAV,GAAH,GAAyB;AAAEY,IAAAA,MAAF;AAAUZ,IAAAA;AAAV,GAAzD;;AAEA,MAAIY,MAAM,KAAKhY,MAAM,CAACiY,QAAlB,IAA8BzC,WAAlC,EAA+C;AAC3C5Q,IAAAA,OAAO,CAACiB,IAAR,4BAAiCmS,MAAjC;AACH;;AAED,SAAO,MAAM,IAAIxP,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER2E,KAFQ,oBAEUN,YAFV,GAE0B;AAC/BlO,IAAAA,IAAI,EAAEsS,MADyB;AAE/B,OAAGlD;AAF4B,GAF1B,EAMR1E,IANQ,CAMH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IANX,CAAb;AAOH;AAEM,eAAegd,MAAf,CACHhC,MADG,EAEHiC,UAFG,EAGHnO,SAGkB,GAAG,EANlB,EAO6B;AAChC,QAAM;AACF0M,IAAAA,OADE;AACOY,IAAAA,MADP;AAEF,OAAGhN;AAFD,MAGFN,SAHJ;AAIA,QAAM8K,WAAW,GAAGrM,KAAK,CAACC,OAAN,CAAcwN,MAAd,KAAyBA,MAAM,CAACrY,MAAP,GAAgB,CAA7D;AACA,QAAMuL,YAAY,GAAG0L,WAAW,GAAG,EAAH,cAAYoB,MAAM,CAACrY,MAAP,KAAkB,CAAlB,GAAsBqY,MAAM,CAAC,CAAD,CAA5B,GAAkCA,MAA9C,CAAhC;AACA,QAAMnR,YAAY,GAAG+P,WAAW,GAAG;AAAEoB,IAAAA,MAAF;AAAUQ,IAAAA;AAAV,GAAH,GAAyB;AAAEY,IAAAA,MAAF;AAAUZ,IAAAA;AAAV,GAAzD;;AAEA,MAAIY,MAAM,KAAKhY,MAAM,CAACiY,QAAlB,IAA8BzC,WAAlC,EAA+C;AAC3C5Q,IAAAA,OAAO,CAACiB,IAAR,4BAAiCmS,MAAjC;AACH;;AAED,SAAO,MAAM,IAAIxP,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER0E,IAFQ,sBAEWL,YAFX,GAE2B;AAChClO,IAAAA,IAAI,EAAEid,UAD0B;AAEhC,OAAG7N;AAF6B,GAF3B,EAMR1E,IANQ,CAMH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IANX,CAAb;AAOH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAekd,iBAAf,CACH/C,QADG,EAEHG,KAFG,EAGHxL,SAOkB,GAAG,EAVlB,EAWS;AACZ,QAAM;AACF0G,IAAAA,QADE;AACQC,IAAAA,SADR;AACmB8E,IAAAA,SADnB;AAC8BC,IAAAA,WAD9B;AAEFC,IAAAA,YAFE;AAEYC,IAAAA,gBAFZ;AAGF,OAAGtL;AAHD,MAIFN,SAJJ;AAKA,QAAM;AAAE0K,IAAAA;AAAF,MAAkB9U,IAAxB;AAEA,SAAO,MAAM,IAAIkI,MAAJ,GACR2B,IADQ,sBACW4L,QADX,GACuB;AAC5Bna,IAAAA,IAAI,EAAE;AACF2V,MAAAA,MAAM,EAAE;AACJH,QAAAA,QAAQ,EAAEA,QAAQ,IAAIgE,WADlB;AAEJ/D,QAAAA,SAAS,EAAEA,SAAS,IAAI+D;AAFpB,OADN;AAKFqB,MAAAA,UAAU,EAAE,MALV;AAMFL,MAAAA,WANE;AAOFM,MAAAA,SAAS,EAAER,KAPT;AAQFG,MAAAA,YAAY,EAAEA,YAAY,IAAI,EAR5B;AASFC,MAAAA,gBAAgB,EAAEA,gBAAgB,IAAI,EATpC;AAUFH,MAAAA;AAVE,KADsB;AAa5B,OAAGnL;AAbyB,GADvB,EAgBR1E,IAhBQ,CAgBH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAhBX,CAAb;AAiBH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemd,eAAf,CACHhD,QADG,EAEHrL,SAAyB,GAAG,EAFzB,EAGU;AAEb,SAAO,MAAM,IAAIlC,MAAJ,GACRvJ,MADQ,sBACa8W,QADb,GACyBrL,SADzB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAGD;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,eAAeod,eAAf,CACHC,QADG,EAEH/C,KAFG,EAGHlF,KAHG,EAIHtG,SAEoB,GAAG,EANpB,EAOS;AACZ;AACA,MAAIuO,QAAQ,KAAK,uBAAjB,EAA0C;AACtC,UAAM/F,aAAa,GAAG;AAClBlC,MAAAA,KADkB;AAElBmC,MAAAA,IAAI,EAAE,CAAC,cAAD,CAFY;AAGlBnN,MAAAA,GAAG,EAAE;AAHa,KAAtB;AAKA,UAAM;AAAET,MAAAA,MAAM,EAAE,CAAC2T,OAAD;AAAV,QAAwB,MAAMnQ,OAAK,CAACmN,KAAD,EAAQhD,aAAR,CAAzC;;AACA,QAAI,CAACgG,OAAL,EAAc;AACV,YAAMC,MAAM,GAAG,MAAMrI,QAAM,CAACoF,KAAD,EAAQlF,KAAR,EAAetG,SAAf,CAA3B,CADU;;AAGV,aAAOyO,MAAP;AACH;;AACD,WAAOD,OAAP;AACH,GAbD,MAaO,IAAID,QAAQ,KAAK,aAAjB,EAAgC;AACnC,UAAME,MAAM,GAAG,MAAMrI,QAAM,CAACoF,KAAD,EAAQlF,KAAR,EAAetG,SAAf,CAA3B,CADmC;;AAGnC,WAAOyO,MAAP;AACH,GAJM,MAIA;;AAOP,QAAM,IAAI7d,cAAJ,CAAmB,uBAAnB,CAAN;AACH;;;;;;;;;;;;;;;;;;;;;;;;;AC1qBM,eAAe8d,SAAf,CACHrI,IADG,EAEHrG,SAAwB,GAAG,EAFxB,EAGU;AACb,QAAM;AACFoH,IAAAA,SADE;AAEF,OAAG9G;AAFD,MAGFN,SAHJ;AAKA,QAAM2O,QAAQ,GAAG,IAAIhS,QAAJ,EAAjB;AACAgS,EAAAA,QAAQ,CAACC,MAAT,CAAgB,MAAhB,EAAwBvI,IAAxB;AAEA,SAAO,MAAM,IAAIvI,MAAJ,GACRoB,gBADQ,CACS;AAAEkI,IAAAA;AAAF,GADT,EAER3H,IAFQ,CAEH,cAFG,EAEa;AAClBvO,IAAAA,IAAI,EAAEyd,QADY;AAElB,OAAGrO;AAFe,GAFb,EAMR1E,IANQ,CAMH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IANX,CAAb;AAOH;AAEM,eAAe2d,UAAf,CACH/O,IADG,EAEHE,SAAyB,GAAG,EAFzB,EAGU;AACb,SAAO,MAAM,IAAIlC,MAAJ,GACR2B,IADQ,CACH,OADG,EACM;AACXvO,IAAAA,IAAI,EAAE4O,IADK;AAEX,OAAGE;AAFQ,GADN,EAKRpE,IALQ,CAKH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALX,CAAb;AAMH;;;;;;;;ACzE4E;;AA6B7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAesS,QAAf,CACHsL,QADG,EAEHC,KAFG,EAGH/O,SAAoD,GAAG,EAHpD,EAIoB;AAAA;;AACvB,QAAM;AACFgP,IAAAA,WADE;AAEF,OAAG1O;AAFD,MAGFN,SAHJ;AAKA,SAAO,MAAM,IAAIlC,MAAJ,GACRoB,gBADQ,CACS;AAAE+P,IAAAA,WAAW,EAAED;AAAf,GADT,EAERrP,GAFQ,kBAEMmP,QAFN,GAEkB;AACvB5d,IAAAA,IAAI,EAAE;AACFoD,MAAAA,GAAG,gBAAEya,KAAK,CAACza,GAAR,mDAAe,EADhB;AAEF+H,MAAAA,IAAI,iBAAE0S,KAAK,CAAC1S,IAAR,qDAAgB,EAFlB;AAGF6S,MAAAA,GAAG,gBAAEH,KAAK,CAACG,GAAR,mDAAe;AAHhB,KADiB;AAMvB,OAAG5O;AANoB,GAFlB,EASN1E,IATM,CASD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IATb,CAAb;AAUH;AAED,MAAMie,WAAS,GAAG,GAAlB;AACO,eAAe9a,KAAf,CACHya,QADG,EAEH9O,SAAyB,GAAG,EAFzB,EAGoB;AACvB,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,kBACMya,QADN,GACkB9O,SADlB,EAERjG,KAFQ,CAEDN,KAAD,IAAW;AACd,QAAIA,KAAK,CAACnI,MAAN,KAAiB6d,WAArB,EAAgC,OAAO;AAAEje,MAAAA,IAAI,EAAER;AAAR,KAAP;AAChC,WAAO+R,OAAO,CAACM,MAAR,CAAetJ,KAAf,CAAP;AACH,GALQ,EAKNmC,IALM,CAKD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALb,CAAb;AAMH;AAGM,eAAeke,SAAf,CACH7H,IADG,EAEHjB,KAFG,EAGHtG,SAAyB,GAAG,EAHzB,EAIoB;AACvB,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,QAAMlH,YAAY,GAAGqH,OAAO,cAAOA,OAAP,IAAmB,EAA/C;AACA,SAAO,MAAM,IAAI3I,MAAJ,GACRzJ,GADQ,uBACWkS,aADX,cAC4BC,QAD5B,SACuCpH,YADvC,cACuDmI,IADvD,GAC+DvH,SAD/D,EAERjG,KAFQ,CAEDN,KAAD,IAAW;AACd,QAAIA,KAAK,CAACnI,MAAN,KAAiB6d,WAArB,EAAgC,OAAO;AAAEje,MAAAA,IAAI,EAAER;AAAR,KAAP;AAChC,WAAO+R,OAAO,CAACM,MAAR,CAAetJ,KAAf,CAAP;AACH,GALQ,EAKNmC,IALM,CAKD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALb,CAAb;AAMH;AAEM,eAAeme,MAAf,CACH9H,IADG,EAEHvH,SAKkB,GAAG,EAPlB,EAQsB;AACzB,QAAM;AACFoI,IAAAA,SADE;AACSyE,IAAAA,WADT;AAEFpG,IAAAA,OAFE;AAEOqG,IAAAA,eAFP;AAGF,OAAGxM;AAHD,MAIFN,SAJJ;AAKA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AAEA,QAAM0C,YAAY,GAAG;AACjB0L,IAAAA,OADiB;AAEjBqG,IAAAA;AAFiB,GAArB;AAKA,SAAO,MAAM,IAAIhP,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER1G,GAFQ,qBAES+T,SAFT,aAESA,SAFT,cAESA,SAFT,GAEsB/P,OAFtB,aAEsBA,OAFtB,uBAEsBA,OAAO,CAAE+P,SAF/B,SAE2CyE,WAAW,cAAOA,WAAP,IAAuB,EAF7E,cAEmFtF,IAFnF,GAE2F,EAChG,GAAGjH;AAD6F,GAF3F,EAKR1E,IALQ,CAKH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALX,CAAb;AAMH;AAEM,eAAeyT,MAAf,CACHmK,QADG,EAEH9O,SAAoD,GAAG,EAFpD,EAGU;AACb,QAAM;AACFgP,IAAAA,WADE;AAEF,OAAG1O;AAFD,MAGFN,SAHJ;AAIA,SAAO,MAAM,IAAIlC,MAAJ,GACRoB,gBADQ,CACS;AAAE+P,IAAAA,WAAW,EAAED;AAAf,GADT,EAERza,MAFQ,kBAESua,QAFT,GAEqBxO,cAFrB,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeoe,MAAf,CACH/H,IADG,EAEHjB,KAFG,EAGHtG,SAMkB,GAAG,EATlB,EAUoB;AACvB,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,QAAM;AACFI,IAAAA,QADE;AACQC,IAAAA,SADR;AACmBoI,IAAAA,KADnB;AAEFnI,IAAAA,UAFE;AAEUoI,IAAAA,WAFV;AAGF,OAAG1O;AAHD,MAIFN,SAJJ;AAKA,QAAM;AAAE6L,IAAAA;AAAF,MAAYxW,cAAlB;AACA,QAAM;AAAEqV,IAAAA,WAAF;AAAe5D,IAAAA;AAAf,MAAwBlR,IAA9B;AACA,QAAMkW,WAAW,GAAGvF,aAAa,KAAKsF,KAAlB,GAA0BnB,WAA1B,GAAwC5D,IAA5D;AAEA,SAAO,MAAM,IAAIhJ,MAAJ,GACR2B,IADQ,kBACO8H,IADP,GACe;AACpBrW,IAAAA,IAAI,EAAE;AACFoV,MAAAA,KAAK,EAAE;AACHC,QAAAA,aADG;AAEHC,QAAAA,QAFG;AAGHC,QAAAA;AAHG,OADL;AAMFI,MAAAA,MAAM,EAAE;AACJH,QAAAA,QAAQ,EAAEA,QAAQ,IAAIoF,WADlB;AAEJnF,QAAAA,SAAS,EAAEA,SAAS,IAAImF;AAFpB,OANN;AAUFlF,MAAAA,UAVE;AAWFoI,MAAAA,WAXE;AAYFD,MAAAA;AAZE,KADc;AAepB,OAAGzO;AAfiB,GADf,EAiBN1E,IAjBM,CAiBD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAjBb,CAAb;AAkBH;AAGM,eAAekV,QAAf,CACHmB,IADG,EAEHjB,KAFG,EAGHyI,KAHG,EAIH/O,SAKkB,GAAG,EATlB,EAUoB;AACvB9F,EAAAA,OAAO,CAACiB,IAAR,CAAa,oIAAb;AACA,SAAO,MAAMmU,MAAM,CAAC/H,IAAD,EAAOjB,KAAP,EAAc;AAAEyI,IAAAA,KAAF;AAAS,OAAG/O;AAAZ,GAAd,CAAnB;AACH;AAEM,eAAeiH,IAAf,CACHuB,aADG,EAEHxI,SAAyB,GAAG,EAFzB,EAGsB;AACzB,QAAM;AAAE5E,IAAAA,KAAF;AAASiF,IAAAA,MAAM,GAAG,EAAlB;AAAsB/E,IAAAA;AAAtB,MAA8BkN,aAApC;AACA,QAAMzN,YAAY,GAAG;AACjBsF,IAAAA,MAAM,EAAEA,MAAM,CAACqI,IAAP,CAAY,GAAZ,KAAoBhY,SADX;AAEjB0K,IAAAA,KAFiB;AAEVE,IAAAA;AAFU,GAArB;AAKA,SAAO,IAAIwC,MAAJ,GACFoB,gBADE,CACenE,YADf,EAEF1G,GAFE,CAEE,eAFF,EAEmB2L,SAFnB,EAGFpE,IAHE,CAGG,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHjB,CAAP;AAIH;;;;;;;;;;;;;;IC5NIqe;;WAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,cAAAA;;IAKAC;;WAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,eAAAA;;AAgCL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAehM,MAAf,CACH6H,QADG,EAEH7H,MAFG,EAGHxD,SAAyB,GAAG,EAHzB,EAIW;AACd,QAAM;AAAEuH,IAAAA,IAAF;AAAQ2E,IAAAA;AAAR,MAAmB1I,MAAzB;AAEA,SAAO,MAAM,IAAI1F,MAAJ,GACR4B,KADQ,kBACQ2L,QADR,GACoB;AACzBna,IAAAA,IAAI,EAAE;AAAEqW,MAAAA,IAAF;AAAQ2E,MAAAA;AAAR,KADmB;AAEzB,OAAGlM;AAFsB,GADpB,EAKRpE,IALQ,CAKH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALX,CAAb;AAMH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe+X,SAAf,CACHoC,QADG,EAEHrL,SAAyB,GAAG,EAFzB,EAGU;AAEb,SAAO,MAAM,IAAIlC,MAAJ,GACRvJ,MADQ,kBACS8W,QADT,GACqBrL,SADrB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAekV,QAAf,CACHpG,SAIkB,GAAG,EALlB,EAMW;AACd,QAAM;AACFuH,IAAAA,IADE;AACIa,IAAAA,SADJ;AACeyE,IAAAA,WADf;AAEF,OAAGvM;AAFD,MAGFN,SAHJ;AAIA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACR2B,IADQ,kBACO2I,SADP,aACOA,SADP,cACOA,SADP,GACoB/P,OADpB,aACoBA,OADpB,uBACoBA,OAAO,CAAE+P,SAD7B,SACyCyE,WAAW,cAAOA,WAAP,IAAuB,EAD3E,GACiF;AACtF3b,IAAAA,IAAI,EAAE;AAAEqW,MAAAA;AAAF,KADgF;AAEtF,OAAGjH;AAFmF,GADjF,EAIN1E,IAJM,CAID,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAJb,CAAb;AAKH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemD,KAAf,CACH2L,SAIkB,GAAG,EALlB,EAMW;AACd,QAAM;AACFoI,IAAAA,SADE;AACSyE,IAAAA,WADT;AACsB4C,IAAAA,IADtB;AAEF,OAAGnP;AAFD,MAGFN,SAHJ;AAIA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACRoB,gBADQ,CACS;AAAEuQ,IAAAA;AAAF,GADT,EAERpb,GAFQ,kBAEM+T,SAFN,aAEMA,SAFN,cAEMA,SAFN,GAEmB/P,OAFnB,aAEmBA,OAFnB,uBAEmBA,OAAO,CAAE+P,SAF5B,SAEwCyE,WAAW,cAAOA,WAAP,IAAuB,EAF1E,GAEgFvM,cAFhF,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAewe,cAAf,CACH1P,SAIkB,GAAG,EALlB,EAMa;AAChB,QAAM;AACFoI,IAAAA,SADE;AACSyE,IAAAA,WADT;AACsB4C,IAAAA,IADtB;AAEF,OAAGnP;AAFD,MAGFN,SAHJ;AAIA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACRoB,gBADQ,CACS;AAAEuQ,IAAAA;AAAF,GADT,EAERpb,GAFQ,iCAEqB+T,SAFrB,aAEqBA,SAFrB,cAEqBA,SAFrB,GAEkC/P,OAFlC,aAEkCA,OAFlC,uBAEkCA,OAAO,CAAE+P,SAF3C,SAEuDyE,WAAW,cAAOA,WAAP,IAAuB,EAFzF,GAE+FvM,cAF/F,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAEM,eAAeye,gBAAf,CACH3P,SAAyB,GAAG,EADzB,EAEW;AACd,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,CACJ,mBADI,EACiB2L,SADjB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe0e,UAAf,CACH5P,SAKkB,GAAG,EANlB,EAOW;AACd,QAAM;AACFiK,IAAAA,IADE;AACI7B,IAAAA,SADJ;AACeyE,IAAAA,WADf;AAC4BgD,IAAAA,SAAS,GAAGN,SAAS,CAACO,OADlD;AAEF,OAAGxP;AAFD,MAGFN,SAHJ;AAIA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACR2B,IADQ,6BACkB2I,SADlB,aACkBA,SADlB,cACkBA,SADlB,GAC+B/P,OAD/B,aAC+BA,OAD/B,uBAC+BA,OAAO,CAAE+P,SADxC,SACoDyE,WAAW,cAAOA,WAAP,IAAuB,EADtF,GAC4F;AACjG3b,IAAAA,IAAI,EAAE;AAAE+Y,MAAAA,IAAF;AAAQ4F,MAAAA;AAAR,KAD2F;AAEjG,OAAGvP;AAF8F,GAD5F,EAKR1E,IALQ,CAKH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALX,CAAb;AAMH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe6e,eAAf,CACHC,WADG,EAEHhQ,SAKkB,GAAG,EAPlB,EAQa;AAChB,QAAM;AACFoI,IAAAA,SADE;AACSyE,IAAAA,WADT;AACsBgD,IAAAA,SAAS,GAAGN,SAAS,CAACO,OAD5C;AACqDG,IAAAA,qBADrD;AAEF,OAAG3P;AAFD,MAGFN,SAHJ;AAIA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACR2B,IADQ,6BACkB2I,SADlB,aACkBA,SADlB,cACkBA,SADlB,GAC+B/P,OAD/B,aAC+BA,OAD/B,uBAC+BA,OAAO,CAAE+P,SADxC,SACoDyE,WAAW,cAAOA,WAAP,IAAuB,EADtF,GAC4F;AACjG3b,IAAAA,IAAI,EAAE;AAAE8e,MAAAA,WAAF;AAAeH,MAAAA,SAAf;AAA0BI,MAAAA;AAA1B,KAD2F;AAEjG,OAAG3P;AAF8F,GAD5F,EAKR1E,IALQ,CAKH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALX,CAAb;AAMH;AAGM,eAAegf,eAAf,CACHF,WADG,EAEHhQ,SAMkB,GAAG,EARlB,EASa;AAChB,QAAM;AACFoI,IAAAA,SADE;AACSyE,IAAAA,WADT;AACsBgD,IAAAA,SAAS,GAAGN,SAAS,CAACO,OAD5C;AACqDG,IAAAA,qBADrD;AAC4EE,IAAAA,eAD5E;AAEF,OAAG7P;AAFD,MAGFN,SAHJ;AAIA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACR6B,GADQ,6BACiByI,SADjB,aACiBA,SADjB,cACiBA,SADjB,GAC8B/P,OAD9B,aAC8BA,OAD9B,uBAC8BA,OAAO,CAAE+P,SADvC,SACmDyE,WAAW,cAAOA,WAAP,IAAuB,EADrF,GAC2F;AAChG3b,IAAAA,IAAI,EAAE;AAAE8e,MAAAA,WAAF;AAAeH,MAAAA,SAAf;AAA0BI,MAAAA,qBAA1B;AAAiDE,MAAAA;AAAjD,KAD0F;AAEhG,OAAG7P;AAF6F,GAD3F,EAKR1E,IALQ,CAKH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALX,CAAb;AAMH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAekf,mBAAf,CACH/E,QADG,EAEHrL,SAAyB,GAAG,EAFzB,EAGW;AAEd,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,6BACiBgX,QADjB,GAC6BrL,SAD7B,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemf,WAAf,CACHC,QADG,EAEHtQ,SAIkB,GAAG,EANlB,EAOU;AACb,QAAM;AACFoI,IAAAA,SADE;AACSyE,IAAAA,WADT;AACsBsD,IAAAA,eADtB;AAEF,OAAG7P;AAFD,MAGFN,SAHJ;AAIA,QAAM3H,OAAO,GAAGU,cAAc,CAACV,OAA/B;AACA,SAAO,MAAM,IAAIyF,MAAJ,GACRoB,gBADQ,CACS;AAAEuH,IAAAA,OAAO,EAAE6J,QAAX;AAAqBH,IAAAA,eAAe,EAAEI,OAAO,CAACJ,eAAD;AAA7C,GADT,EAER5b,MAFQ,6BAEoB6T,SAFpB,aAEoBA,SAFpB,cAEoBA,SAFpB,GAEiC/P,OAFjC,aAEiCA,OAFjC,uBAEiCA,OAAO,CAAE+P,SAF1C,SAEsDyE,WAAW,cAAOA,WAAP,IAAuB,EAFxF,GAE8FvM,cAF9F,EAGR1E,IAHQ,CAGH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHX,CAAb;AAIH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAesf,WAAf,CACHC,QADG,EAEHnK,KAFG,EAGHtG,SAAyB,GAAG,EAHzB,EAIU;AACb,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA;AAAjB,MAA8BF,KAApC;AACA,QAAMoK,QAAQ,GAAGnK,aAAa,IAAIlR,cAAc,CAACsb,OAAjD;AACA,QAAMvR,YAAY,GAAGsR,QAAQ,KAAKrb,cAAc,CAACsb,OAA5B,GAAsC,EAAtC,cAA+CnK,QAA/C,CAArB;AAEA,SAAO,MAAM,IAAI1I,MAAJ;AACT;AADS,GAER6B,GAFQ,0BAEc+Q,QAAQ,CAACE,WAAT,EAFd,SAEuCxR,YAFvC,GAEuD;AAC5DlO,IAAAA,IAAI,EAAEuf,QADsD;AAE5D,OAAGzQ;AAFyD,GAFvD,EAMRpE,IANQ,CAMH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IANX,CAAb;AAOH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe2f,SAAf,CACHxF,QADG,EAEHa,MAFG,EAGHlM,SAAyB,GAAG,EAHzB,EAIW;AAEd,SAAO,MAAM,IAAIlC,MAAJ,GACR4B,KADQ,sBACY2L,QADZ,GACwB;AAC7Bna,IAAAA,IAAI,EAAE;AAAEgb,MAAAA;AAAF,KADuB;AAE7B,OAAGlM;AAF0B,GADxB,EAKRpE,IALQ,CAKH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALX,CAAb;AAMH;;;;;;;;;;;;;;;;;;;ACxZD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMie,SAAS,GAAG,GAAlB;AACO,eAAe9a,KAAf,CACH2L,SAAyB,GAAG,EADzB,EAEkB;AACrB,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,CACJ,OADI,EACK2L,SADL,EAERjG,KAFQ,CAEDN,KAAD,IAAW;AACd,QAAIA,KAAK,CAACnI,MAAN,KAAiB6d,SAArB,EAAgC,OAAO;AAAEje,MAAAA,IAAI,EAAER;AAAR,KAAP;AAChC,WAAO+R,OAAO,CAACM,MAAR,CAAetJ,KAAf,CAAP;AACH,GALQ,EAKNmC,IALM,CAKD,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IALb,CAAb;AAMH;;;;;;;IC/BI4f;AAKL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;WA7DKA;AAAAA,EAAAA;AAAAA,EAAAA;AAAAA,EAAAA;GAAAA,iBAAAA;;AA8DE,eAAe1K,QAAf,CACHE,KADG,EAEHiB,IAFG,EAGHrC,OAHG,EASH6L,OATG,EAUH/Q,SAIkB,GAAG,EAdlB,EAe6B;AAChC,QAAM;AACFgR,IAAAA,WADE;AAEFC,IAAAA,mBAFE;AAGFrK,IAAAA,UAHE;AAIF,OAAGtG;AAJD,MAKFN,SALJ;AAMA,SAAO,MAAM,IAAIlC,MAAJ,GACR2B,IADQ,CAEL,OAFK,EAGL;AACIvO,IAAAA,IAAI,EAAE;AACFgU,MAAAA,OAAO,EAAE;AAAEzM,QAAAA,UAAU,EAAE,MAAd;AAAsB,WAAGyM;AAAzB,OADP;AAEF6L,MAAAA,OAFE;AAGFC,MAAAA,WAHE;AAIFC,MAAAA,mBAJE;AAKFrK,MAAAA,UALE;AAMFN,MAAAA,KANE;AAOFiB,MAAAA;AAPE,KADV;AAUI,OAAGjH;AAVP,GAHK,EAgBR1E,IAhBQ,CAgBH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAhBX,CAAb;AAiBH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAe+X,OAAf,CAAuBiI,OAAvB,EAAwClR,SAAyB,GAAG,EAApE,EAAsF;AACzF,SAAO,MAAM,IAAIlC,MAAJ,GACRvJ,MADQ,iBACQ2c,OADR,GACmBlR,SADnB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemD,KAAf,CAAmB6c,OAAnB,EAAoClR,SAAyB,GAAG,EAAhE,EAAsG;AACzG,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,iBACK6c,OADL,GACgBlR,SADhB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeigB,UAAf,CACHD,OADG,EAEHlR,SAAyB,GAAG,EAFzB,EAG6B;AAChC,SAAO,MAAM,IAAIlC,MAAJ,GACRzJ,GADQ,yBACa6c,OADb,GACwBlR,SADxB,EAERpE,IAFQ,CAEH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFX,CAAb;AAGH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAekgB,SAAf,CACH9K,KADG,EAEHtG,SAAyB,GAAG,EAFzB,EAG6B;AAChC,QAAM;AAAEuG,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BC,IAAAA;AAA3B,MAAuCH,KAA7C;AACA,SAAO,MAAM,IAAIxI,MAAJ,GACRzJ,GADQ,oBAEOkS,aAFP,cAEwBC,QAFxB,SAGDC,OAAO,cAAOA,OAAP,IAAmB,EAHzB,GAKLzG,SALK,EAORpE,IAPQ,CAOH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAPX,CAAb;AAQH;;;;;;;;;;;AChMD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAemgB,YAAf,CACHC,OADG,EAEHzK,MAFG,EAGH7G,SAAyB,GAAG,EAHzB,EAIU;AACb,SAAO,IAAIlC,MAAJ,GACF4B,KADE,iBACa4R,OADb,GACwB,EACvB,GAAGtR,SADoB;AAEvB9O,IAAAA,IAAI,EAAE;AAAE2V,MAAAA;AAAF;AAFiB,GADxB,EAIAjL,IAJA,CAIK,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAJnB,CAAP;AAKH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAekV,MAAf,CACHmL,IADG,EAEHjL,KAFG,EAGHO,MAHG,EAIH7G,SAAyB,GAAG,EAJzB,EAKU;AACb,SAAO,IAAIlC,MAAJ,GACF2B,IADE,CACG,OADH,EACY;AACXvO,IAAAA,IAAI,EAAE;AACFoV,MAAAA,KAAK,EAAE;AACHC,QAAAA,aAAa,EAAED,KAAK,CAACC,aADlB;AAEHC,QAAAA,QAAQ,EAAEF,KAAK,CAACE;AAFb,OADL;AAKFK,MAAAA,MALE;AAMF0K,MAAAA;AANE,KADK;AASX,OAAGvR;AATQ,GADZ,EAWApE,IAXA,CAWK,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAXnB,CAAP;AAYH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemD,GAAf,CACHid,OADG,EAEHtR,SAAyB,GAAG,EAFzB,EAGU;AACb,SAAO,IAAIlC,MAAJ,GACFzJ,GADE,iBACWid,OADX,GACsBtR,SADtB,EAEFpE,IAFE,CAEG,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAFjB,CAAP;AAGH;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAemN,KAAf,CACHmK,aADG,EAEHxI,SAAyB,GAAG,EAFzB,EAGgB;AACnB,QAAM;AAAEK,IAAAA,MAAM,GAAG,EAAX;AAAeoI,IAAAA,IAAI,GAAG,EAAtB;AAA0BrN,IAAAA,KAAK,GAAG,CAAlC;AAAqCE,IAAAA;AAArC,MAA6CkN,aAAnD;AACA,QAAMzN,YAAY,GAAG;AACjBsF,IAAAA,MAAM,EAAEA,MAAM,CAACqI,IAAP,CAAY,GAAZ,KAAoBhY,SADX;AAEjB+X,IAAAA,IAAI,EAAEA,IAAI,CAACC,IAAL,CAAU,GAAV,KAAkBhY,SAFP;AAGjB0K,IAAAA,KAHiB;AAGVE,IAAAA;AAHU,GAArB;AAKA,SAAO,MAAM,IAAIwC,MAAJ,GACRoB,gBADQ,CACSnE,YADT,EAER1G,GAFQ,CAEJ,OAFI,EAEK;AACVsH,IAAAA,SAAS,EAAE,IADD;AAEV,OAAGqE;AAFO,GAFL,EAMRpE,IANQ,CAMH,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IANX,CAAb;AAOH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAesgB,WAAf,CACHF,OADG,EAEHvgB,OAFG,EAGHiP,SAAgD,GAAG,EAHhD,EAIiB;AACpB,QAAM;AAAEyG,IAAAA,OAAF;AAAW,OAAGnG;AAAd,MAAiCN,SAAvC;AACA,QAAMZ,YAAY,GAAGqH,OAAO,cAAOA,OAAP,IAAmB,EAA/C;AACA,SAAO,IAAI3I,MAAJ,GACF6B,GADE,yBACmB2R,OADnB,SAC6BlS,YAD7B,GAC6C;AAC5ClO,IAAAA,IAAI,EAAE;AAAEH,MAAAA;AAAF,KADsC;AAE5C,OAAGuP;AAFyC,GAD7C,EAIA1E,IAJA,CAIK,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAJnB,CAAP;AAKH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,eAAeugB,WAAf,CACHH,OADG,EAEHtR,SAGkB,GAAG,EALlB,EAMmB;AACtB,QAAM;AAAE0R,IAAAA,UAAF;AAAcC,IAAAA,OAAd;AAAuB,OAAGrR;AAA1B,MAA6CN,SAAnD;AACA,SAAO,IAAIlC,MAAJ,GACFoB,gBADE,CACe;AAAEwS,IAAAA,UAAF;AAAcC,IAAAA;AAAd,GADf,EAEFtd,GAFE,yBAEmBid,OAFnB,GAE8BhR,cAF9B,EAGF1E,IAHE,CAGG,CAAC;AAAE1K,IAAAA;AAAF,GAAD,KAAcA,IAHjB,CAAP;AAIH;;;;;;;;;;;;AC/KD,MAAM0gB,aAAa,GAAItL,KAAD,IAAyB;AAC3C,MAAI,CAACA,KAAL,EAAY,MAAM,IAAI1V,cAAJ,CAAmB,uCAAnB,CAAN;AACZ,QAAM;AAAE2V,IAAAA,aAAF;AAAiBC,IAAAA,QAAjB;AAA2BqL,IAAAA;AAA3B,MAA4CvL,KAAlD;AACA,MAAI,CAACC,aAAL,EAAoB,MAAM,IAAI3V,cAAJ,CAAmB,wCAAnB,CAAN;AACpB,MAAI,CAAC4V,QAAL,EAAe,MAAM,IAAI5V,cAAJ,CAAmB,mCAAnB,CAAN;AACf,MAAI,CAACihB,YAAL,EAAmB,MAAM,IAAIjhB,cAAJ,CAAmB,uCAAnB,CAAN;AACnB,MAAI,CAACiL,MAAM,CAACsJ,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqChQ,cAArC,EAAqDkR,aAArD,CAAL,EAA0E,MAAM,IAAI3V,cAAJ,mCAA8C2V,aAA9C,EAAN;AAC1E,MAAI,CAAC1K,MAAM,CAACsJ,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqC9P,aAArC,EAAoDsc,YAApD,CAAL,EAAwE,MAAM,IAAIjhB,cAAJ,kCAA6CihB,YAA7C,EAAN;AAC3E,CARD;AAUA;AACA;AACA;;;AACe,MAAMC,OAAN,CAAc;AAMzB;AACJ;AACA;AACA;AACIhhB,EAAAA,WAAW,CAACwV,KAAD,EAAsB;AAAA;;AAAA;;AAAA,0CANS,IAMT;;AAC7B,UAAM;AAAEC,MAAAA,aAAF;AAAiBC,MAAAA,QAAjB;AAA2BqL,MAAAA;AAA3B,QAA4CvL,KAAlD;AACAsL,IAAAA,aAAa,CAACtL,KAAD,CAAb;AACA,SAAKzT,IAAL,cAAgB0T,aAAa,CAACqK,WAAd,EAAhB,cAA+CpK,QAA/C,cAA2DqL,YAAY,CAACjB,WAAb,EAA3D;;AACA,QAAI9L,aAAa,CAACV,aAAd,CAA4B2N,GAA5B,CAAgC,KAAKlf,IAArC,CAAJ,EAAgD;AAC5C,WAAKoR,YAAL,GAAoBa,aAAa,CAACV,aAAd,CAA4B/P,GAA5B,CAAgC,KAAKxB,IAArC,CAApB;AACH;AACJ;;AAED0R,EAAAA,OAAO,CAACC,OAAD,EAA+C;AAClD,WAAOM,aAAa,CAACP,OAAd,CAAsB,IAAtB,EAA4BC,OAA5B,CAAP;AACH;AAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACmB,QAATN,SAAS,CACXV,MADW,EAEX7Q,OAA4B,GAAG,EAFpB,EAGgB;AAC3B,QAAI,KAAKsR,YAAT,EAAuB,MAAM,KAAKW,WAAL,EAAN;AACvB,SAAKpB,MAAL,GAAcA,MAAd;AACA,WAAOsB,aAAa,CAACxB,GAAd,CAAkB,IAAlB,EAAwBE,MAAxB,EAAgC7Q,OAAhC,EAAyCiJ,IAAzC,CAA+CqI,YAAD,IAAkB;AACnE,UAAIxF,KAAK,CAACC,OAAN,CAAcuF,YAAd,CAAJ,EAAiCA,YAAY,GAAGA,YAAY,CAAC,CAAD,CAA3B;AACjC,WAAKA,YAAL,GAAoBA,YAApB;AACA,aAAOA,YAAP;AACH,KAJM,CAAP;AAKH;;AAEgB,QAAXW,WAAW,GAAkB;AAC/B,QAAI,KAAKX,YAAT,EAAuB;AACnB,YAAMa,aAAa,CAACH,MAAd,CAAqB,KAAKV,YAA1B,CAAN;AACA,WAAKA,YAAL,GAAoB,IAApB;AACH;AACJ;;AAxDwB;;ACrB7B;AACA;;MACMlG,OAAO,yBAAkB,QAAlB;AAMb,MAAMkD,YAAY,GAAG,GAArB;AACA5G,YAAY,CAACjB,eAAb,CACKK,KAAD,IAAkBA,KAAK,CAACnI,MAAN,KAAiB2P,YAAjB,IAAiCxH,KAAK,CAACzI,IAAN,KAAe,wBADtE,EAEI,MAAMyI,KAAN,IAAuB;AACnB,QAAMuY,MAAA,EAAN;;AACA,MAAInc,SAAS,EAAb,EAAiB;AACb;AACAoc,IAAAA,KAAK,CAAC,kDAAD,CAAL;AACH;;AACD,QAAMxY,KAAN;AACH,CATL;AAWAY,YAAY,CAACjB,eAAb,CACKK,KAAD,IAAkBA,KAAK,CAACnI,MAAN,KAAiB2P,YAAjB,IAAiCxH,KAAK,CAACzI,IAAN,KAAe,8BADtE,EAEI,MAAMyI,KAAN,IAAuB;AACnB,MAAI5D,SAAS,EAAb,EAAiB;AACb;AACAoc,IAAAA,KAAK,CAAC,4DAAD,CAAL;AACH;;AACD,QAAMxY,KAAN;AACH,CARL;AAUAY,YAAY,CAACjB,eAAb,CACKK,KAAD,IAAWA,KAAK,CAACnI,MAAN,KAAiB2P,YAAjB,IAAiCxH,KAAK,CAACzI,IAAN,KAAe,4BAD/D,EAEI,OAASyI,KAAT,EAAuBmE,KAAvB,KAAmD;AAC/C,MAAI;AAAA;;AACA,UAAMvF,OAAO,GAAGU,cAAc,CAACV,OAA/B;;AACA,QAAI,CAAAA,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEI,UAAT,MAAwB,OAA5B,EAAqC;AACjC,YAAM,IAAI7H,cAAJ,CAAmB,wDAAnB,CAAN;AACH;;AACD,UAAM2U,QAAQ,wBAAGlN,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAEkN,QAAZ,iEAAwB,EAAtC;AACA,UAAMyM,UAAA,CAAuBzM,QAAvB,EAAiC;AAAE9M,MAAAA,UAAU,EAAE,MAAd;AAAsB0E,MAAAA,KAAK,EAAE;AAA7B,KAAjC,CAAN;AACA,WAAO,MAAMS,KAAK,EAAlB;AACH,GARD,CAQE,OAAO3D,CAAP,EAAU;AACR,UAAM+X,MAAA,EAAN;AACA,UAAMvY,KAAN;AACH;AACJ,CAfL;;;;"}
|