@openc3/js-common 6.7.0 → 6.8.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"services.cjs","sources":["../../../node_modules/axios/lib/helpers/bind.js","../../../node_modules/axios/lib/utils.js","../../../node_modules/axios/lib/core/AxiosError.js","../../../node_modules/axios/lib/helpers/null.js","../../../node_modules/axios/lib/helpers/toFormData.js","../../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../../node_modules/axios/lib/helpers/buildURL.js","../../../node_modules/axios/lib/core/InterceptorManager.js","../../../node_modules/axios/lib/defaults/transitional.js","../../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../../node_modules/axios/lib/platform/browser/classes/FormData.js","../../../node_modules/axios/lib/platform/browser/classes/Blob.js","../../../node_modules/axios/lib/platform/browser/index.js","../../../node_modules/axios/lib/platform/common/utils.js","../../../node_modules/axios/lib/platform/index.js","../../../node_modules/axios/lib/helpers/toURLEncodedForm.js","../../../node_modules/axios/lib/helpers/formDataToJSON.js","../../../node_modules/axios/lib/defaults/index.js","../../../node_modules/axios/lib/helpers/parseHeaders.js","../../../node_modules/axios/lib/core/AxiosHeaders.js","../../../node_modules/axios/lib/core/transformData.js","../../../node_modules/axios/lib/cancel/isCancel.js","../../../node_modules/axios/lib/cancel/CanceledError.js","../../../node_modules/axios/lib/core/settle.js","../../../node_modules/axios/lib/helpers/parseProtocol.js","../../../node_modules/axios/lib/helpers/speedometer.js","../../../node_modules/axios/lib/helpers/throttle.js","../../../node_modules/axios/lib/helpers/progressEventReducer.js","../../../node_modules/axios/lib/helpers/isURLSameOrigin.js","../../../node_modules/axios/lib/helpers/cookies.js","../../../node_modules/axios/lib/helpers/isAbsoluteURL.js","../../../node_modules/axios/lib/helpers/combineURLs.js","../../../node_modules/axios/lib/core/buildFullPath.js","../../../node_modules/axios/lib/core/mergeConfig.js","../../../node_modules/axios/lib/helpers/resolveConfig.js","../../../node_modules/axios/lib/adapters/xhr.js","../../../node_modules/axios/lib/helpers/composeSignals.js","../../../node_modules/axios/lib/helpers/trackStream.js","../../../node_modules/axios/lib/adapters/fetch.js","../../../node_modules/axios/lib/adapters/adapters.js","../../../node_modules/axios/lib/core/dispatchRequest.js","../../../node_modules/axios/lib/env/data.js","../../../node_modules/axios/lib/helpers/validator.js","../../../node_modules/axios/lib/core/Axios.js","../../../node_modules/axios/lib/cancel/CancelToken.js","../../../node_modules/axios/lib/helpers/spread.js","../../../node_modules/axios/lib/helpers/isAxiosError.js","../../../node_modules/axios/lib/helpers/HttpStatusCode.js","../../../node_modules/axios/lib/axios.js","../../../node_modules/axios/index.js","../src/services/axios.js","../src/services/api.js","../../../node_modules/nanoevents/index.js","../../../node_modules/@anycable/core/protocol/index.js","../../../node_modules/@anycable/core/stringify-params/index.js","../../../node_modules/@anycable/core/channel/presence.js","../../../node_modules/@anycable/core/channel/index.js","../../../node_modules/@anycable/core/hub/index.js","../../../node_modules/@anycable/core/logger/index.js","../../../node_modules/@anycable/core/encoder/index.js","../../../node_modules/@anycable/core/action_cable/index.js","../../../node_modules/@anycable/core/action_cable_ext/index.js","../../../node_modules/@anycable/core/cable/index.js","../../../node_modules/@anycable/core/monitor/index.js","../../../node_modules/@anycable/core/transport/index.js","../../../node_modules/@anycable/core/websocket/index.js","../../../node_modules/@anycable/core/create-cable/index.js","../../../node_modules/@anycable/web/logger/index.js","../../../node_modules/@anycable/web/monitor/index.js","../../../node_modules/@anycable/web/index.js","../src/services/cable.js","../src/services/configParser.js","../../../node_modules/lossless-json/lib/esm/utils.js","../../../node_modules/lossless-json/lib/esm/LosslessNumber.js","../../../node_modules/lossless-json/lib/esm/numberParsers.js","../../../node_modules/lossless-json/lib/esm/revive.js","../../../node_modules/lossless-json/lib/esm/parse.js","../../../node_modules/lossless-json/lib/esm/stringify.js","../src/services/openc3Api.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n \n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request, fetchOptions);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.11.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport axios from 'axios'\n\nconst axiosInstance = axios.create({\n baseURL: location.origin,\n timeout: 60000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n if (error.response.status === 401) {\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity, true).then(\n function (refreshed) {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n },\n )\n }\n // Individual tools can set 'Ignore-Errors' to an error code\n // they potentially expect, e.g. '500', in which case we ignore it\n // For example in CommandSender.vue:\n // obs = this.api.cmd(targetName, commandName, paramList, {\n // headers: {\n // 'Ignore-Errors': '404',\n // },\n // })\n if (\n error.response.config.headers['Ignore-Errors'] &&\n error.response.config.headers['Ignore-Errors'].includes(\n error.response.status.toString(),\n )\n ) {\n return Promise.reject(error)\n }\n let body = `HTTP ${error.response.status} - `\n if (error.response?.statusText) {\n body += `${error.response.statusText} `\n }\n if (error.response?.config?.data) {\n body += `${error.response.config.data} `\n }\n if (error.response?.data?.message) {\n body += `${error.response.data.message}`\n } else if (error.response?.data?.exception) {\n body += `${error.response.data.exception}`\n } else if (error.response?.data?.error?.message) {\n if (error.response.data.error.class) {\n body += `${error.response.data.error.class} `\n }\n body += `${error.response.data.error.message}`\n } else {\n body += `${error.response?.data}`\n }\n const { $cosmosNotify } = window\n if ($cosmosNotify) {\n $cosmosNotify.serious({\n title: 'Network error',\n body,\n })\n }\n throw error\n } else {\n throw error\n }\n },\n)\n\nexport default axiosInstance\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport axios from './axios'\n\nconst request = async function (\n method,\n url,\n {\n data,\n params = {},\n headers,\n noAuth = false,\n noScope = false,\n onUploadProgress = false,\n } = {},\n) {\n if (!noAuth) {\n try {\n let refreshed = await OpenC3Auth.updateToken(\n OpenC3Auth.defaultMinValidity,\n )\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n } catch (error) {\n OpenC3Auth.login()\n }\n headers['Authorization'] = localStorage.openc3Token\n }\n // Everything from the front-end is manual by default\n // The various api methods decide whether to pass the manual\n // flag to the authorize routine\n headers['manual'] = true\n if (!noScope && !params['scope']) {\n params['scope'] = window.openc3Scope\n }\n return axios({\n method,\n url,\n data,\n params,\n headers,\n onUploadProgress,\n })\n}\n\nconst acceptOnlyDefaultHeaders = {\n Accept: 'application/json',\n}\n\nconst fullDefaultHeaders = {\n ...acceptOnlyDefaultHeaders,\n 'Content-Type': 'application/json',\n}\n\nexport default {\n get: function (\n path,\n {\n params,\n headers = acceptOnlyDefaultHeaders,\n noScope,\n noAuth,\n onUploadProgress,\n } = {},\n ) {\n return request('get', path, {\n params,\n headers,\n noScope,\n noAuth,\n onUploadProgress,\n })\n },\n\n put: function (\n path,\n {\n data,\n params,\n headers = fullDefaultHeaders,\n noScope,\n noAuth,\n onUploadProgress,\n } = {},\n ) {\n return request('put', path, {\n data,\n params,\n headers,\n noScope,\n noAuth,\n onUploadProgress,\n })\n },\n\n post: function (\n path,\n {\n data,\n params,\n headers = fullDefaultHeaders,\n noScope,\n noAuth,\n onUploadProgress,\n } = {},\n ) {\n return request('post', path, {\n data,\n params,\n headers,\n noScope,\n noAuth,\n onUploadProgress,\n })\n },\n\n delete: function (\n path,\n {\n params,\n headers = acceptOnlyDefaultHeaders,\n noScope,\n noAuth,\n onUploadProgress,\n } = {},\n ) {\n return request('delete', path, {\n params,\n headers,\n noScope,\n noAuth,\n onUploadProgress,\n })\n },\n}\n","export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","export class ReasonError extends Error {\n constructor(msg, reason) {\n if (msg instanceof Error) {\n super(msg.message)\n this.cause = msg\n } else {\n super(msg)\n }\n\n this.reason = reason\n this.name = 'ReasonError'\n }\n}\n\nexport class SubscriptionRejectedError extends ReasonError {\n constructor(reason) {\n super('Rejected', reason)\n this.name = 'SubscriptionRejectedError'\n }\n}\n\nexport class SubscriptionTimeoutError extends ReasonError {\n constructor(msg) {\n super(msg || 'Timed out to receive subscription ack')\n this.name = 'SubscriptionTimeoutError'\n }\n}\n\nexport class DisconnectedError extends ReasonError {\n constructor(error, reason) {\n if (reason) {\n super(error, reason)\n } else {\n super('Disconnected', error)\n }\n this.name = 'DisconnectedError'\n }\n}\n\nexport class CommandError extends Error {\n constructor(msg) {\n super(msg)\n this.name = 'CommandError'\n }\n}\n\nexport class StaleConnectionError extends DisconnectedError {\n constructor(msg) {\n super(msg, 'stale_connection')\n this.name = 'StaleConnectionError'\n }\n}\n","export function stringifyParams(params) {\n if (!params) return ''\n\n let parts = Object.keys(params)\n .sort()\n .filter(k => params[k] !== undefined)\n .map(k => {\n let v = JSON.stringify(params[k])\n return `${JSON.stringify(k)}:${v}`\n })\n\n return `{${parts.join(',')}}`\n}\n","// Presence encapsulates the presence tracking logic for the channel.\nexport class Presence {\n constructor(channel) {\n this.channel = channel\n this.listeners = []\n }\n\n watch() {\n this.listeners.push(\n this.channel.on('presence', msg => {\n if (msg.type === 'info') {\n if (!this._state) {\n this._state = this.stateFromInfo(msg)\n }\n return\n }\n\n if (!this._state) return\n\n if (msg.type === 'join') {\n this._state[msg.id] = msg.info\n } else if (msg.type === 'leave') {\n delete this._state[msg.id]\n }\n })\n )\n }\n\n // Reset the state to make sure the fresh one is\n // requested the next time info() is called\n reset() {\n delete this._state\n }\n\n dispose() {\n delete this._info\n delete this._state\n\n this.listeners.forEach(listener => listener())\n this.listeners.length = 0\n }\n\n async join(id, info) {\n if (this._info) return undefined\n\n this._info = { id, info }\n return this.channel.perform('$presence:join', this._info)\n }\n\n async leave() {\n if (!this._info) return undefined\n\n let res = await this.channel.perform('$presence:leave')\n\n delete this._info\n\n return res\n }\n\n async info() {\n if (this._state) return this._state\n\n if (!this._promise) {\n this._promise = this._sync()\n }\n\n await this._promise\n\n return this._state\n }\n\n async _sync() {\n this.watch()\n\n try {\n let presence = await this.channel.perform('$presence:info', {})\n\n this._state = this.stateFromInfo(presence)\n\n return this._state\n } finally {\n delete this._promise\n }\n }\n\n stateFromInfo(presence) {\n return presence.records.reduce((acc, { id, info }) => {\n acc[id] = info\n return acc\n }, {})\n }\n}\n","/*eslint n/no-unsupported-features/es-syntax: [\"error\", {version: \"14.0\"}] */\nimport { createNanoEvents } from 'nanoevents'\n\nimport { ReasonError } from '../protocol/index.js'\nimport { stringifyParams } from '../stringify-params/index.js'\nimport { Presence } from './presence.js'\n\nconst STATE = Symbol('state')\n\nexport class Channel {\n // Unique channel identifier\n // static identifier = ''\n\n constructor(params = {}) {\n this.emitter = createNanoEvents()\n this.params = Object.freeze(params)\n this.presence = new Presence(this)\n\n this.initialConnect = true\n\n this[STATE] = 'idle'\n }\n\n get identifier() {\n if (this._identifier) return this._identifier\n\n // Use Action Cable identifiers as internal identifiers for channels\n this._identifier = stringifyParams({\n channel: this.channelId,\n ...this.params\n })\n\n return this._identifier\n }\n\n get channelId() {\n return this.constructor.identifier\n }\n\n get state() {\n return this[STATE]\n }\n\n attached(receiver) {\n if (this.receiver) {\n if (this.receiver !== receiver) {\n throw Error('Already connected to a different receiver')\n }\n\n return false\n }\n\n this.receiver = receiver\n return true\n }\n\n connecting() {\n this[STATE] = 'connecting'\n }\n\n connected() {\n if (this.state === 'connected') return\n if (this.state === 'closed') return\n\n this[STATE] = 'connected'\n\n let restored = false\n\n if (this.initialConnect) {\n this.initialConnect = false\n this.emit('connect', { reconnect: false, restored })\n } else {\n this.emit('connect', { reconnect: true, restored })\n }\n }\n\n restored() {\n if (this.state === 'connected') throw Error('Already connected')\n\n this[STATE] = 'connected'\n\n let restored = true\n let reconnect = true\n\n this.initialConnect = false\n\n this.emit('connect', { reconnect, restored })\n }\n\n disconnected(err) {\n if (this.state === 'disconnected' || this.state === 'closed') return\n\n this[STATE] = 'disconnected'\n\n this.presence.reset()\n\n this.emit('disconnect', err)\n }\n\n closed(err) {\n if (this.state === 'closed') return\n\n this[STATE] = 'closed'\n delete this.receiver\n\n this.initialConnect = true\n\n this.presence.dispose()\n\n this.emit('close', err)\n }\n\n disconnect() {\n if (this.state === 'idle' || this.state === 'closed') {\n return\n }\n\n this.receiver.unsubscribe(this)\n }\n\n async perform(action, payload) {\n if (this.state === 'idle' || this.state === 'closed') {\n throw Error('Channel is not subscribed')\n }\n\n return this.receiver.perform(this.identifier, action, payload)\n }\n\n async send(payload) {\n return this.perform(undefined, payload)\n }\n\n async whisper(payload) {\n try {\n await this.perform('$whisper', payload)\n } catch (e) {\n let logger = this.receiver ? this.receiver.logger : null\n if (logger) {\n logger.warn('whisper failed: ', e)\n }\n }\n }\n\n receive(msg, meta) {\n this.emit('message', msg, meta)\n }\n\n on(event, callback) {\n return this.emitter.on(event, callback)\n }\n\n once(event, callback) {\n let unbind = this.emitter.on(event, (...args) => {\n unbind()\n callback(...args)\n })\n return unbind\n }\n\n emit(event, ...args) {\n return this.emitter.emit(event, ...args)\n }\n\n ensureSubscribed() {\n if (this.state === 'connected') return Promise.resolve()\n\n if (this.state === 'closed') {\n return Promise.reject(Error('Channel is unsubscribed'))\n }\n\n return this.pendingSubscribe()\n }\n\n // This promise resolves when subscription is confirmed\n // and rejects when rejected or closed.\n // It ignores disconnect events.\n pendingSubscribe() {\n if (this._pendingSubscribe) return this._pendingSubscribe\n\n this._pendingSubscribe = new Promise((resolve, reject) => {\n let unbind = [() => delete this._pendingSubscribe]\n\n unbind.push(\n this.on('connect', () => {\n unbind.forEach(clbk => clbk())\n resolve()\n })\n )\n unbind.push(\n this.on('close', err => {\n unbind.forEach(clbk => clbk())\n reject(\n err ||\n new ReasonError(\n 'Channel was disconnected before subscribing',\n 'canceled'\n )\n )\n })\n )\n })\n\n return this._pendingSubscribe\n }\n}\n","export class Subscription {\n constructor(id) {\n this.id = id\n this.intent = 'unsubscribed'\n this.state = 'idle'\n this.channels = []\n this.disposed = false\n this._pendings = []\n }\n\n add(channel) {\n if (this.channels.includes(channel)) return\n\n this.channels.push(channel)\n }\n\n remove(channel) {\n let ind = this.channels.indexOf(channel)\n\n if (ind > -1) this.channels.splice(ind, 1)\n }\n\n notify(state, ...args) {\n // TODO: Should we get rid of restored state completely?\n this.state = state === 'restored' ? 'connected' : state\n\n if (args.length === 1) {\n this.channels.forEach(channel => channel[state](args[0]))\n } else {\n this.channels.forEach(channel => channel[state]())\n }\n }\n\n pending(intent) {\n this._checkIntent(intent)\n\n let nextPending = this._pendings[0]\n\n if (!nextPending || nextPending.intent !== intent) return Promise.resolve()\n\n return nextPending.promise\n }\n\n ensureResubscribed() {\n if (this.disposed) return\n\n this.intent = undefined\n\n this.ensureSubscribed()\n }\n\n ensureSubscribed() {\n if (this.intent === 'subscribed') return\n if (this.disposed) throw Error('Subscription is disposed')\n\n this.intent = 'subscribed'\n\n let merged = this._mergeWithPending('unsubscribed')\n if (merged) return\n\n this.subscriber(this)\n }\n\n maybeUnsubscribe() {\n if (this.disposed) return\n if (this.intent === 'unsubscribed') return\n\n if (this.channels.length > 0) return\n\n this.intent = 'unsubscribed'\n\n let merged = this._mergeWithPending('subscribed')\n if (merged) return\n\n this.unsubscriber(this)\n }\n\n async acquire(intent) {\n this._checkIntent(intent)\n\n let resolver\n let promise = new Promise(resolve => {\n resolver = resolve\n })\n\n let lock = {\n promise,\n intent,\n release: () => {\n this._pendings.splice(this._pendings.indexOf(lock), 1)\n resolver(lock)\n },\n canceled: false,\n acquired: false\n }\n\n let top = this._pendingTop\n\n this._pendings.push(lock)\n\n if (top) {\n await top.promise\n }\n\n if (this.gvl) {\n await this.gvl.acquire(lock, intent)\n }\n\n lock.acquired = true\n return lock\n }\n\n close(err) {\n this.disposed = true\n this.intent = undefined\n this.notify('closed', err)\n }\n\n _checkIntent(event) {\n if (event === 'unsubscribed' || event === 'subscribed') return\n\n throw Error(`Unknown subscription intent: ${event}`)\n }\n\n get _pendingTop() {\n return this._pendings.length\n ? this._pendings[this._pendings.length - 1]\n : undefined\n }\n\n _mergeWithPending(intent) {\n let top = this._pendingTop\n if (!top) return false\n if (top.acquired) return false\n if (top.intent !== intent) return false\n\n this._pendings.pop()\n top.canceled = true\n return true\n }\n}\n\n// Use to limit concurrent actions\nclass GlobalLock {\n constructor() {\n this.queue = []\n }\n\n async acquire(lock, intent) {\n // We currently only limit subscribe commands\n if (intent !== 'subscribed') return\n\n this.queue.push(\n lock.promise.then(() => {\n this.queue.splice(this.queue.indexOf(lock), 1)\n })\n )\n\n if (this.queue.length > 1) {\n await this.queue[this.queue.length - 2]\n }\n }\n}\n\nexport class Subscriptions {\n constructor(opts) {\n if (opts.concurrentSubscribes === false) {\n this.glv = new GlobalLock()\n }\n this._subscriptions = {}\n this._localToRemote = {}\n }\n\n all() {\n return Object.values(this._subscriptions)\n }\n\n get(id) {\n return this._subscriptions[id]\n }\n\n create(id, { subscribe, unsubscribe }) {\n let sub = (this._subscriptions[id] = new Subscription(id))\n sub.remoteId = this._localToRemote[id]\n sub.subscriber = subscribe\n sub.unsubscriber = unsubscribe\n sub.gvl = this.glv\n\n return sub\n }\n\n remove(id) {\n delete this._subscriptions[id]\n delete this._localToRemote[id]\n }\n\n storeRemoteId(localId, remoteId) {\n this._localToRemote[localId] = remoteId\n\n let sub = this.get(localId)\n if (sub) sub.remoteId = remoteId\n }\n}\n\nexport class Hub {\n constructor(opts = {}) {\n this.subscriptions = new Subscriptions(opts)\n this._pendingMessages = []\n this._remoteToLocal = {}\n }\n\n subscribe(localId, remoteId) {\n this._remoteToLocal[remoteId] = localId\n\n this.subscriptions.storeRemoteId(localId, remoteId)\n\n this.flush(remoteId)\n }\n\n unsubscribe(localId) {\n let sub = this.subscriptions.get(localId)\n if (!sub) return\n\n let remoteId = sub.remoteId\n if (remoteId) delete this._remoteToLocal[remoteId]\n\n this.subscriptions.remove(localId)\n }\n\n transmit(id, msg, meta) {\n let localId = this._remoteToLocal[id]\n\n if (!localId) {\n this._pendingMessages.push([id, msg, meta])\n return\n }\n\n let sub = this.subscriptions.get(localId)\n\n if (!sub) return\n\n sub.channels.forEach(channel => {\n channel.receive(msg, meta)\n })\n }\n\n notify(id, event, payload) {\n let localId = this._remoteToLocal[id]\n\n if (!localId) {\n return\n }\n\n let sub = this.subscriptions.get(localId)\n\n if (!sub) return\n\n sub.channels.forEach(channel => channel.emit(event, payload))\n }\n\n close() {\n this._pendingMessages.length = 0\n }\n\n get size() {\n return this.channels.length\n }\n\n get channels() {\n return this.subscriptions.all().flatMap(sub => sub.channels)\n }\n\n flush(id) {\n let left = []\n\n for (let item of this._pendingMessages) {\n if (item[0] === id) this.transmit(item[0], item[1], item[2])\n else left.push(item)\n }\n\n this._pendingMessages = left\n }\n}\n","const LEVEL_TO_NAME = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3\n}\n\nexport class BaseLogger {\n constructor(level) {\n this.level = level || 'warn'\n }\n\n log(level, msg, details) {\n if (LEVEL_TO_NAME[level] < LEVEL_TO_NAME[this.level]) return\n\n this.writeLogEntry(level, msg, details)\n }\n\n writeLogEntry() {\n throw Error('Not implemented')\n }\n\n debug(msg, details) {\n this.log('debug', msg, details)\n }\n\n info(msg, details) {\n this.log('info', msg, details)\n }\n\n warn(msg, details) {\n this.log('warn', msg, details)\n }\n\n error(msg, details) {\n this.log('error', msg, details)\n }\n}\n\nexport class NoopLogger extends BaseLogger {\n writeLogEntry() {}\n}\n","/* eslint-disable consistent-return */\n\nexport class JSONEncoder {\n encode(msg) {\n return JSON.stringify(msg)\n }\n\n decode(raw) {\n try {\n return JSON.parse(raw)\n } catch (_e) {}\n }\n}\n","import {\n SubscriptionRejectedError,\n SubscriptionTimeoutError,\n DisconnectedError\n} from '../protocol/index.js'\nimport { stringifyParams } from '../stringify-params/index.js'\nimport { NoopLogger } from '../logger/index.js'\n\nlet commandID = 0\n\nexport class ActionCableProtocol {\n constructor(opts = {}) {\n let { logger } = opts\n this.logger = logger || new NoopLogger()\n this.pendingSubscriptions = {}\n this.pendingUnsubscriptions = {}\n // For how long to wait before sending `subscribe` command\n // in case `unsubscribe` was sent for the same identifier\n this.subscribeCooldownInterval = opts.subscribeCooldownInterval || 250\n // For how long to wait for subscription acknoledgement before trying again\n // (just once).\n this.subscribeRetryInterval = opts.subscribeRetryInterval || 5000\n }\n\n attached(cable) {\n this.cable = cable\n }\n\n subscribe(channel, params) {\n let subscriptionPayload = { channel }\n if (params) {\n Object.assign(subscriptionPayload, params)\n }\n\n let identifier = stringifyParams(subscriptionPayload)\n\n if (this.pendingUnsubscriptions[identifier]) {\n let cooldown = this.subscribeCooldownInterval * 1.5\n this.logger.debug(\n `unsubscribed recently, cooldown for ${cooldown}`,\n identifier\n )\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(this.subscribe(channel, params))\n }, cooldown)\n })\n }\n\n if (this.pendingSubscriptions[identifier]) {\n this.logger.warn('subscription is already pending, skipping', identifier)\n return Promise.reject(Error('Already subscribing'))\n }\n\n let retryInterval = this.subscribeRetryInterval\n\n return new Promise((resolve, reject) => {\n let id = ++commandID\n this.pendingSubscriptions[identifier] = {\n resolve,\n reject,\n id\n }\n\n this.cable.send(this.buildSubscribeRequest(identifier))\n\n this.maybeRetrySubscribe(id, identifier, retryInterval)\n })\n }\n\n buildSubscribeRequest(identifier) {\n return {\n command: 'subscribe',\n identifier\n }\n }\n\n maybeRetrySubscribe(id, identifier, retryInterval) {\n setTimeout(() => {\n let sub = this.pendingSubscriptions[identifier]\n if (!sub) return\n if (sub.id !== id) return\n\n this.logger.warn(\n `no subscription ack received in ${retryInterval}ms, retrying subscribe`,\n identifier\n )\n\n this.cable.send(this.buildSubscribeRequest(identifier))\n\n this.maybeExpireSubscribe(id, identifier, retryInterval)\n }, retryInterval)\n }\n\n maybeExpireSubscribe(id, identifier, retryInterval) {\n setTimeout(() => {\n let sub = this.pendingSubscriptions[identifier]\n if (!sub) return\n if (sub.id !== id) return\n\n delete this.pendingSubscriptions[identifier]\n\n sub.reject(\n new SubscriptionTimeoutError(\n `Haven't received subscription ack in ${\n retryInterval * 2\n }ms for ${identifier}`\n )\n )\n }, retryInterval)\n }\n\n unsubscribe(identifier) {\n this.cable.send({\n command: 'unsubscribe',\n identifier\n })\n\n this.pendingUnsubscriptions[identifier] = true\n\n setTimeout(() => {\n delete this.pendingUnsubscriptions[identifier]\n }, this.subscribeCooldownInterval)\n\n return Promise.resolve()\n }\n\n perform(identifier, action, payload) {\n // Handle whispering separately\n if (action === '$whisper') {\n return this.whisper(identifier, payload)\n }\n\n if (!payload) {\n payload = {}\n }\n\n payload.action = action\n\n this.cable.send({\n command: 'message',\n identifier,\n data: JSON.stringify(payload)\n })\n\n return Promise.resolve()\n }\n\n whisper(identifier, data) {\n this.cable.send({\n command: 'whisper',\n identifier,\n data\n })\n\n return Promise.resolve()\n }\n\n receive(msg) {\n /* eslint-disable consistent-return */\n if (typeof msg !== 'object') {\n this.logger.error('unsupported message format', { message: msg })\n return\n }\n\n let { type, identifier, message, reason, reconnect } = msg\n\n if (type === 'ping') {\n return this.cable.keepalive(msg.message)\n } else {\n // Any incoming message may be considered as a heartbeat\n this.cable.keepalive()\n }\n\n if (type === 'welcome') {\n let sessionId = msg.sid\n\n if (sessionId) this.cable.setSessionId(sessionId)\n\n return this.cable.connected()\n }\n\n if (type === 'disconnect') {\n let err = new DisconnectedError(reason)\n this.reset(err)\n\n if (reconnect === false) {\n this.cable.closed(err)\n } else {\n this.cable.disconnected(err)\n }\n return\n }\n\n if (type === 'confirm_subscription') {\n let subscription = this.pendingSubscriptions[identifier]\n if (!subscription) {\n this.logger.error('subscription not found, unsubscribing', {\n type,\n identifier\n })\n this.unsubscribe(identifier)\n return\n }\n\n delete this.pendingSubscriptions[identifier]\n\n return subscription.resolve(identifier)\n }\n\n if (type === 'reject_subscription') {\n let subscription = this.pendingSubscriptions[identifier]\n if (!subscription) {\n return this.logger.error('subscription not found', { type, identifier })\n }\n\n delete this.pendingSubscriptions[identifier]\n\n return subscription.reject(new SubscriptionRejectedError())\n }\n\n if (message) {\n return { identifier, message }\n }\n\n this.logger.warn(`unknown message type: ${type}`, { message: msg })\n }\n\n reset(err) {\n // Reject pending subscriptions\n for (let identifier in this.pendingSubscriptions) {\n this.pendingSubscriptions[identifier].reject(err)\n }\n\n this.pendingSubscriptions = {}\n }\n\n recoverableClosure() {\n return false\n }\n}\n","import { ActionCableProtocol } from '../action_cable/index.js'\n\nconst now = () => (Date.now() / 1000) | 0\n\nexport class ActionCableExtendedProtocol extends ActionCableProtocol {\n constructor(opts = {}) {\n super(opts)\n\n this.streamsPositions = {}\n this.subscriptionStreams = {}\n this.pendingHistory = {}\n this.pendingPresence = {}\n this.presenceInfo = {}\n this.restoreSince = opts.historyTimestamp\n this.disableSessionRecovery = opts.disableSessionRecovery\n if (this.restoreSince === undefined) this.restoreSince = now()\n this.sessionId = undefined\n this.sendPongs = opts.pongs\n }\n\n reset(err) {\n // Reject pending presence\n for (let identifier in this.pendingPresence) {\n this.pendingPresence[identifier].reject(err)\n }\n\n this.pendingPresence = {}\n\n return super.reset()\n }\n\n receive(msg) {\n /* eslint-disable consistent-return */\n if (typeof msg !== 'object') {\n this.logger.error('unsupported message format', { message: msg })\n return\n }\n\n let { type, identifier, message } = msg\n\n if (type === 'disconnect') {\n // delete sessionID to avoid recovery\n delete this.sessionId\n this.cable.setSessionId('')\n return super.receive(msg)\n }\n\n if (type === 'reject_subscription') {\n return super.receive(msg)\n }\n\n if (type === 'confirm_subscription') {\n if (!this.subscriptionStreams[identifier]) {\n this.subscriptionStreams[identifier] = new Set()\n }\n\n return super.receive(msg)\n }\n\n if (type === 'ping') {\n if (!this.restoreSince === false) {\n this.restoreSince = now()\n }\n\n if (this.sendPongs) {\n this.sendPong()\n }\n\n return this.cable.keepalive(msg.message)\n } else {\n // Any incoming message may be considered as a heartbeat\n this.cable.keepalive()\n }\n\n if (type === 'confirm_history') {\n this.logger.debug('history result received', msg)\n this.cable.notify('history_received', identifier)\n return\n }\n\n if (type === 'reject_history') {\n this.logger.warn('failed to retrieve history', msg)\n this.cable.notify('history_not_found', identifier)\n return\n }\n\n if (type === 'welcome') {\n if (!this.disableSessionRecovery) {\n this.sessionId = msg.sid\n\n if (this.sessionId) this.cable.setSessionId(this.sessionId)\n }\n\n if (msg.restored) {\n let restoredIds =\n msg.restored_ids || Object.keys(this.subscriptionStreams)\n for (let restoredId of restoredIds) {\n this.cable.send({\n identifier: restoredId,\n command: 'history',\n history: this.historyRequestFor(restoredId)\n })\n\n if (this.presenceInfo[restoredId]) {\n this.cable.send({\n identifier: restoredId,\n command: 'join',\n presence: this.presenceInfo[restoredId]\n })\n }\n }\n\n return this.cable.restored(restoredIds)\n }\n\n return this.cable.connected(this.sessionId)\n }\n\n if (type === 'presence') {\n let presenceType = message.type\n\n if (presenceType === 'info') {\n let pending = this.pendingPresence[identifier]\n\n if (pending) {\n delete this.pendingPresence[identifier]\n pending.resolve(message)\n }\n } else if (presenceType === 'error') {\n let pending = this.pendingPresence[identifier]\n\n if (pending) {\n delete this.pendingPresence[identifier]\n pending.reject(new Error('failed to retrieve presence'))\n }\n }\n\n return {\n type,\n identifier,\n message\n }\n }\n\n if (message) {\n let meta = this.trackStreamPosition(\n identifier,\n msg.stream_id,\n msg.epoch,\n msg.offset\n )\n return { identifier, message, meta }\n }\n\n this.logger.warn(`unknown message type: ${type}`, { message: msg })\n }\n\n perform(identifier, action, payload) {\n // Handle presence actions\n switch (action) {\n case '$presence:join':\n return this.join(identifier, payload)\n case '$presence:leave':\n return this.leave(identifier, payload)\n case '$presence:info':\n return this.presence(identifier, payload)\n }\n\n return super.perform(identifier, action, payload)\n }\n\n unsubscribe(identifier) {\n delete this.presenceInfo[identifier]\n\n return super.unsubscribe(identifier)\n }\n\n buildSubscribeRequest(identifier) {\n let req = super.buildSubscribeRequest(identifier)\n\n let historyReq = this.historyRequestFor(identifier)\n\n if (historyReq) {\n req.history = historyReq\n\n this.pendingHistory[identifier] = true\n }\n\n let presence = this.presenceInfo[identifier]\n\n if (presence) {\n req.presence = presence\n }\n\n return req\n }\n\n // TODO: Which error can be non-recoverable?\n recoverableClosure() {\n return !!this.sessionId\n }\n\n historyRequestFor(identifier) {\n let streams = {}\n let hasStreams = false\n\n if (this.subscriptionStreams[identifier]) {\n for (let stream of this.subscriptionStreams[identifier]) {\n let record = this.streamsPositions[stream]\n if (record) {\n hasStreams = true\n streams[stream] = record\n }\n }\n }\n\n if (!hasStreams && !this.restoreSince) return\n\n return { since: this.restoreSince, streams }\n }\n\n trackStreamPosition(identifier, stream, epoch, offset) {\n if (!stream || !epoch) return\n\n if (!this.subscriptionStreams[identifier]) {\n this.subscriptionStreams[identifier] = new Set()\n }\n\n this.subscriptionStreams[identifier].add(stream)\n\n this.streamsPositions[stream] = { epoch, offset }\n\n return { stream, epoch, offset }\n }\n\n // Send pongs asynchrounously—no need to block the main thread\n async sendPong() {\n await new Promise(resolve => setTimeout(resolve, 0))\n // Only send pong if the connection is still open\n if (this.cable.state === 'connected') {\n this.cable.send({ command: 'pong' })\n }\n }\n\n async join(identifier, presence) {\n this.presenceInfo[identifier] = presence\n\n this.cable.send({\n command: 'join',\n identifier,\n presence\n })\n\n return Promise.resolve()\n }\n\n async leave(identifier, presence) {\n delete this.presenceInfo[identifier]\n\n this.cable.send({\n command: 'leave',\n identifier,\n presence\n })\n\n return Promise.resolve()\n }\n\n presence(identifier, data) {\n if (this.pendingPresence[identifier]) {\n this.logger.warn('presence is already pending, skipping', identifier)\n return Promise.reject(Error('presence request is already pending'))\n }\n\n return new Promise((resolve, reject) => {\n this.pendingPresence[identifier] = {\n resolve,\n reject\n }\n\n this.cable.send({\n command: 'presence',\n identifier,\n data\n })\n })\n }\n}\n","/*eslint n/no-unsupported-features/es-syntax: [\"error\", {version: \"14.0\"}] */\nimport { createNanoEvents } from 'nanoevents'\n\nimport { Hub } from '../hub/index.js'\nimport {\n ReasonError,\n DisconnectedError,\n SubscriptionRejectedError\n} from '../protocol/index.js'\nimport { NoopLogger } from '../logger/index.js'\nimport { Channel } from '../channel/index.js'\n\nexport class NoConnectionError extends ReasonError {\n constructor() {\n super('No connection', 'closed')\n this.name = 'NoConnectionError'\n }\n}\n\nexport class GhostChannel extends Channel {\n static identifier = '__ghost__'\n constructor(channelId, params) {\n super(params)\n this.channelId = channelId\n }\n\n set channelId(val) {\n this._channelId = val\n }\n\n get channelId() {\n return this._channelId\n }\n}\n\nexport const PUBSUB_CHANNEL = '$pubsub'\n\nexport class PubSubChannel extends Channel {\n static identifier = PUBSUB_CHANNEL\n\n async perform(action, payload) {\n if (action.startsWith('$')) {\n return super.perform(action, payload)\n }\n\n throw Error('not implemented')\n }\n}\n\nexport const STATE = Symbol('state')\n\nexport class Cable {\n constructor({\n transport,\n protocol,\n encoder,\n logger,\n lazy,\n hubOptions,\n performFailures,\n transportConfigurator\n }) {\n this.emitter = createNanoEvents()\n this.transport = transport\n this.encoder = encoder\n this.logger = logger || new NoopLogger()\n this.protocol = protocol\n this.performFailures = performFailures || 'throw'\n\n this.protocol.attached(this)\n\n this.hub = new Hub(hubOptions || {})\n\n this[STATE] = 'idle'\n\n this.handleClose = this.handleClose.bind(this)\n this.handleIncoming = this.handleIncoming.bind(this)\n\n this.transportConfigurator = transportConfigurator\n this.transport.on('close', this.handleClose)\n this.transport.on('data', this.handleIncoming)\n\n this.initialConnect = true\n this.recovering = false\n\n if (lazy === false) {\n this.connect().catch(() => {})\n }\n }\n\n get state() {\n return this[STATE]\n }\n\n async connect() {\n if (this.state === 'connected') return Promise.resolve()\n if (this.state === 'connecting') {\n return this.pendingConnect()\n }\n\n let wasIdle = this.state === 'idle'\n\n this[STATE] = 'connecting'\n let promise = this.pendingConnect()\n\n this.logger.debug('connecting')\n\n try {\n if (this.transportConfigurator) {\n await this.transportConfigurator(this.transport, {\n initial: wasIdle\n })\n }\n await this.transport.open()\n } catch (err) {\n this.handleClose(err)\n }\n\n return promise\n }\n\n setSessionId(sessionId) {\n this.sessionId = sessionId\n this.transport.setParam('sid', sessionId)\n }\n\n connected() {\n if (this.state === 'connected') return\n\n this.logger.info('connected')\n\n this[STATE] = 'connected'\n\n if (this.recovering) {\n // Make sure channels moved to disconnect state\n this.hub.subscriptions\n .all()\n .forEach(subscription =>\n subscription.notify(\n 'disconnected',\n new DisconnectedError('recovery_failed')\n )\n )\n }\n\n // Re-subscribe channels\n this.hub.subscriptions\n .all()\n .forEach(subscription => this._resubscribe(subscription))\n\n let restored = false\n this.recovering = false\n\n if (this.initialConnect) {\n this.initialConnect = false\n this.emit('connect', { reconnect: false, restored })\n } else {\n this.emit('connect', { reconnect: true, restored })\n }\n }\n\n restored(remoteIds) {\n this.logger.info('connection recovered', { remoteIds })\n\n this[STATE] = 'connected'\n\n this.hub.subscriptions.all().forEach(subscription => {\n if (\n remoteIds &&\n subscription.remoteId &&\n remoteIds.includes(subscription.remoteId)\n ) {\n subscription.notify('restored')\n } else {\n subscription.notify(\n 'disconnected',\n new DisconnectedError('recovery_failed')\n )\n this._resubscribe(subscription)\n }\n })\n\n let reconnect = !this.initialConnect\n let restored = true\n\n this.recovering = false\n this.initialConnect = false\n\n this.emit('connect', { reconnect, restored })\n }\n\n notify(event, identifier, data) {\n if (identifier && typeof identifier !== 'string') {\n data = identifier\n identifier = undefined\n }\n\n // If identifier is present then it's a channel-level notification\n if (!identifier) {\n this.emit('info', { type: event, data })\n } else {\n this.hub.notify(identifier, 'info', { type: event, data })\n }\n }\n\n handleClose(err) {\n this.logger.debug('transport closed', { error: err })\n\n this.disconnected(new DisconnectedError(err, 'transport_closed'))\n }\n\n disconnected(err) {\n if (!(this.state === 'connected' || this.state === 'connecting')) {\n return\n }\n\n this.logger.info('disconnected', { reason: err })\n\n this[STATE] = 'disconnected'\n\n this.recovering = this.protocol.recoverableClosure(err)\n\n if (this.recovering) {\n this.hub.subscriptions\n .all()\n .forEach(subscription => subscription.notify('connecting'))\n } else {\n this.hub.subscriptions.all().forEach(subscription => {\n subscription.notify('disconnected', err)\n })\n }\n\n this.protocol.reset(err)\n this.hub.close()\n this.transport.close()\n\n this.emit('disconnect', err)\n }\n\n closed(reason) {\n if (this.state === 'closed' || this.state === 'idle') return\n\n let err\n\n if (reason) {\n err =\n reason instanceof DisconnectedError\n ? reason\n : new DisconnectedError(reason, undefined)\n }\n\n this.logger.info('closed', { reason: reason || 'user' })\n\n this[STATE] = 'closed'\n\n // Channels must transition to the disconnected phase,\n // since they got reconnected as soon as cable reconnects\n let channelErr = err || new DisconnectedError('cable_closed')\n this.hub.subscriptions\n .all()\n .forEach(subscription => subscription.notify('disconnected', channelErr))\n\n this.hub.close()\n this.protocol.reset()\n this.transport.close()\n\n this.initialConnect = true\n\n this.emit('close', err)\n }\n\n disconnect() {\n this.closed()\n }\n\n handleIncoming(raw) {\n if (this.state === 'closed' || this.state === 'idle') {\n return\n }\n\n let data = this.encoder.decode(raw)\n\n if (data === undefined) {\n this.logger.error('failed to decode message', { message: raw })\n return\n }\n\n this.logger.debug('incoming data', data)\n\n let processed = this.protocol.receive(data)\n\n if (processed) {\n this.logger.debug('processed incoming message', processed)\n\n let { type, identifier, message, meta } = processed\n\n if (type) {\n this.hub.notify(identifier, type, message)\n } else {\n this.hub.transmit(identifier, message, meta)\n }\n }\n }\n\n send(msg) {\n if (this.state === 'closed') {\n throw Error('Cable is closed')\n }\n\n let data = this.encoder.encode(msg)\n\n if (data === undefined) {\n this.logger.error('failed to encode message', { message: msg })\n return\n }\n\n this.logger.debug('outgoing message', msg)\n\n this.transport.send(data)\n }\n\n keepalive(msg) {\n this.emit('keepalive', msg)\n }\n\n streamFrom(name) {\n let channel = new PubSubChannel({ stream_name: name })\n\n return this.subscribe(channel)\n }\n\n streamFromSigned(name) {\n let channel = new PubSubChannel({ signed_stream_name: name })\n\n return this.subscribe(channel)\n }\n\n subscribeTo(ChannelClass, params) {\n let channel\n let ghostName\n\n if (typeof ChannelClass === 'string') {\n ghostName = ChannelClass\n ChannelClass = GhostChannel\n }\n\n channel = ghostName\n ? new ChannelClass(ghostName, params)\n : new ChannelClass(params)\n\n return this.subscribe(channel)\n }\n\n subscribe(channel) {\n // Return if channel has been already attached to the cable\n if (!channel.attached(this)) return channel\n\n let identifier = channel.identifier\n\n channel.connecting()\n\n let subscription =\n this.hub.subscriptions.get(identifier) ||\n this.hub.subscriptions.create(identifier, {\n subscribe: sub => {\n return this._subscribe(sub, channel.channelId, channel.params)\n },\n unsubscribe: sub => this._unsubscribe(sub)\n })\n\n subscription.add(channel)\n\n if (\n subscription.intent === 'subscribed' &&\n subscription.state === 'connected'\n ) {\n channel.connected()\n }\n\n subscription.ensureSubscribed()\n\n return channel\n }\n\n async _resubscribe(subscription) {\n if (subscription.intent !== 'subscribed') return\n\n let channel = subscription.channels[0]\n\n if (!channel) return\n\n subscription.notify('connecting')\n subscription.ensureResubscribed()\n }\n\n async _subscribe(subscription, channelId, params) {\n let identifier = subscription.id\n\n if (this.state === 'idle') {\n // Trigger connection initialization if it is lazy\n this.connect().catch(() => {})\n }\n\n // We will call _subscribe again as soon as cable connected\n if (this.state !== 'connected') {\n this.logger.debug('cancel subscribe, no connection', { identifier })\n return\n }\n\n this.logger.debug('acquiring subscribe lock', { identifier })\n\n let lock = await subscription.acquire('subscribed')\n if (lock.canceled) {\n this.logger.debug('subscribe lock has been canceled', { identifier })\n lock.release()\n return\n }\n\n this.logger.debug('subscribe lock has been acquired', { identifier })\n\n if (subscription.intent !== 'subscribed') {\n this.logger.debug('cancel subscribe request, already unsubscribed')\n lock.release()\n return\n }\n\n // We need to check one more time after a lock has been acquired\n if (this.state !== 'connected') {\n this.logger.debug('cancel subscribe, no connection', { identifier })\n lock.release()\n return\n }\n\n // Finally, check whether we already connected — then we can skip the action\n if (subscription.state === 'connected') {\n this.logger.debug('already connected, skip subscribe command', {\n identifier\n })\n subscription.notify('connected')\n lock.release()\n return\n }\n\n let channelMeta = {\n identifier: channelId,\n params\n }\n\n this.logger.debug('subscribing', channelMeta)\n\n try {\n let remoteId = await this.protocol.subscribe(channelId, params)\n\n this.hub.subscribe(identifier, remoteId)\n\n this.logger.debug('subscribed', { ...channelMeta, remoteId })\n subscription.notify('connected')\n } catch (err) {\n if (err) {\n if (err instanceof SubscriptionRejectedError) {\n this.logger.warn('rejected', channelMeta)\n }\n\n if (err instanceof DisconnectedError) {\n this.logger.debug(\n 'disconnected during subscription; will retry on connect',\n channelMeta\n )\n lock.release()\n return\n }\n\n this.logger.error('failed to subscribe', {\n error: err,\n ...channelMeta\n })\n }\n\n subscription.close(err)\n this.hub.unsubscribe(identifier)\n }\n\n lock.release()\n }\n\n unsubscribe(channel) {\n let identifier = channel.identifier\n\n let subscription = this.hub.subscriptions.get(identifier)\n\n if (!subscription) {\n throw Error(`Subscription not found: ${identifier}`)\n }\n\n subscription.remove(channel)\n channel.closed()\n\n subscription.maybeUnsubscribe()\n }\n\n async _unsubscribe(subscription) {\n let identifier = subscription.id\n\n this.logger.debug('acquiring unsubscribe lock', { identifier })\n\n let lock = await subscription.acquire('unsubscribed')\n if (lock.canceled) {\n this.logger.debug('unsubscribe lock has been canceled', { identifier })\n lock.release()\n return\n }\n\n this.logger.debug('unsubscribe lock has been acquired', { identifier })\n\n // Check if we still want to unsubscribe\n if (subscription.intent !== 'unsubscribed') {\n this.logger.debug('cancel unsubscribe, no longer needed', {\n identifier,\n intent: subscription.intent\n })\n lock.release()\n return\n }\n\n // Finally, check whether we already disconnected — then we can skip the action\n if (\n subscription.state === 'disconnected' ||\n subscription.state === 'closed'\n ) {\n this.logger.debug(\n `already ${subscription.state} connected, skip unsubscribe command`,\n { identifier }\n )\n lock.release()\n return\n }\n\n let remoteId = subscription.remoteId\n\n this.logger.debug('unsubscribing...', { remoteId })\n\n if (this.state !== 'connected') {\n this.logger.debug('unsubscribe skipped (cable is not connected)', {\n id: identifier\n })\n subscription.close()\n this.hub.unsubscribe(identifier)\n lock.release()\n return\n }\n\n try {\n await this.protocol.unsubscribe(remoteId)\n this.logger.debug('unsubscribed remotely', { id: identifier })\n } catch (err) {\n if (err) {\n // We assume that server unsubscribes subscriptions on disconnect,\n // So we can mark it as closed locally.\n if (err instanceof DisconnectedError) {\n this.logger.debug(\n 'cable disconnected during the unsubscribe command execution',\n { id: identifier, error: err }\n )\n } else {\n this.logger.error('unsubscribe failed', {\n id: identifier,\n error: err\n })\n }\n }\n }\n\n if (subscription.intent === 'unsubscribed') {\n subscription.close()\n this.hub.unsubscribe(identifier)\n } else {\n // We rely on state when performing commands,\n // make sure it's set to closed here (it shouldn't stay connected)\n subscription.state = 'closed'\n }\n\n lock.release()\n }\n\n async perform(identifier, action, payload) {\n if (this.performFailures === 'throw') {\n return this._perform(identifier, action, payload)\n }\n\n try {\n return await this._perform(identifier, action, payload)\n } catch (err) {\n if (this.performFailures === 'warn') {\n this.logger.warn('perform failed', { error: err })\n }\n return undefined\n }\n }\n\n async _perform(identifier, action, payload) {\n if (this.state === 'connecting') {\n await this.pendingConnect()\n }\n\n if (this.state === 'closed' || this.state === 'disconnected') {\n throw new NoConnectionError()\n }\n\n let subscription = this.hub.subscriptions.get(identifier)\n\n if (!subscription) {\n throw Error(`Subscription not found: ${identifier}`)\n }\n\n await subscription.pending('subscribed')\n\n if (subscription.intent !== 'subscribed') {\n throw Error(`Subscription is closed: ${identifier}`)\n }\n\n let remoteId = subscription.remoteId\n\n let performMeta = {\n id: remoteId,\n action,\n payload\n }\n\n this.logger.debug('perform', performMeta)\n\n try {\n let res = await this.protocol.perform(remoteId, action, payload)\n\n if (res) {\n this.logger.debug('perform result', {\n message: res,\n request: performMeta\n })\n }\n\n return res\n } catch (err) {\n this.logger.error('perform failed', {\n error: err,\n request: performMeta\n })\n\n throw err\n }\n }\n\n on(event, callback) {\n return this.emitter.on(event, callback)\n }\n\n once(event, callback) {\n let unbind = this.emitter.on(event, (...args) => {\n unbind()\n callback(...args)\n })\n return unbind\n }\n\n emit(event, ...args) {\n return this.emitter.emit(event, ...args)\n }\n\n pendingConnect() {\n if (this._pendingConnect) return this._pendingConnect\n\n this._pendingConnect = new Promise((resolve, reject) => {\n let unbind = [() => delete this._pendingConnect]\n\n unbind.push(\n this.on('connect', () => {\n unbind.forEach(clbk => clbk())\n resolve()\n })\n )\n unbind.push(\n this.on('close', err => {\n unbind.forEach(clbk => clbk())\n reject(err)\n })\n )\n unbind.push(\n this.on('disconnect', err => {\n unbind.forEach(clbk => clbk())\n reject(err)\n })\n )\n })\n\n return this._pendingConnect\n }\n}\n","/*eslint n/no-unsupported-features/es-syntax: [\"error\", {version: \"14.0\"}] */\nimport { StaleConnectionError } from '../protocol/index.js'\nimport { NoopLogger } from '../logger/index.js'\n\nconst defaults = {\n maxMissingPings: 2,\n maxReconnectAttempts: Infinity\n}\n\nconst now = () => Date.now()\n\nexport const backoffWithJitter = (interval, opts) => {\n opts = opts || {}\n let { backoffRate, jitterRatio, maxInterval } = opts\n backoffRate = backoffRate || 2\n if (jitterRatio === undefined) jitterRatio = 0.5\n\n return attempts => {\n let left = interval * backoffRate ** attempts\n let right = left * backoffRate\n\n let delay = left + (right - left) * Math.random()\n\n let deviation = 2 * (Math.random() - 0.5) * jitterRatio\n\n delay = delay * (1 + deviation)\n\n if (maxInterval && maxInterval < delay) delay = maxInterval\n\n return delay\n }\n}\n\nexport class Monitor {\n constructor({ pingInterval, ...opts }) {\n this.pingInterval = pingInterval\n\n if (!this.pingInterval) {\n throw Error(`Incorrect pingInterval is provided: ${pingInterval}`)\n }\n\n opts = Object.assign({}, defaults, opts)\n\n this.strategy = opts.reconnectStrategy\n if (!this.strategy) {\n throw Error('Reconnect strategy must be provided')\n }\n\n this.maxMissingPings = opts.maxMissingPings\n this.maxReconnectAttempts = opts.maxReconnectAttempts\n this.logger = opts.logger || new NoopLogger()\n\n this.state = 'pending_connect'\n this.attempts = 0\n this.disconnectedAt = now()\n }\n\n watch(target) {\n this.target = target\n this.initListeners()\n }\n\n reconnectNow() {\n if (\n this.state === 'connected' ||\n this.state === 'pending_connect' ||\n this.state === 'closed'\n ) {\n return false\n }\n\n this.cancelReconnect()\n\n this.state = 'pending_connect'\n this.target.connect().catch(err => {\n this.logger.info('Failed at reconnecting: ' + err)\n })\n\n return true\n }\n\n initListeners() {\n this.unbind = []\n\n this.unbind.push(\n this.target.on('connect', () => {\n this.attempts = 0\n this.pingedAt = now()\n this.state = 'connected'\n\n this.cancelReconnect()\n this.startPolling()\n })\n )\n\n this.unbind.push(\n this.target.on('disconnect', () => {\n this.disconnectedAt = now()\n this.state = 'disconnected'\n\n this.stopPolling()\n this.scheduleReconnect()\n })\n )\n\n this.unbind.push(\n this.target.on('close', () => {\n this.disconnectedAt = now()\n this.state = 'closed'\n\n this.cancelReconnect()\n this.stopPolling()\n })\n )\n\n this.unbind.push(\n this.target.on('keepalive', () => {\n this.pingedAt = now()\n })\n )\n\n this.unbind.push(() => {\n this.cancelReconnect()\n this.stopPolling()\n })\n }\n\n dispose() {\n delete this.target\n if (this.unbind) {\n this.unbind.forEach(clbk => clbk())\n }\n delete this.unbind\n }\n\n startPolling() {\n if (this.pollId) {\n clearTimeout(this.pollId)\n }\n\n let pollDelay =\n this.pingInterval + (Math.random() - 0.5) * this.pingInterval * 0.5\n\n this.pollId = setTimeout(() => {\n this.checkStale()\n if (this.state === 'connected') this.startPolling()\n }, pollDelay)\n }\n\n stopPolling() {\n if (this.pollId) {\n clearTimeout(this.pollId)\n }\n }\n\n checkStale() {\n let diff = now() - this.pingedAt\n\n if (diff > this.maxMissingPings * this.pingInterval) {\n this.logger.warn(`Stale connection: ${diff}ms without pings`)\n this.state = 'pending_disconnect'\n this.target.disconnected(new StaleConnectionError())\n }\n }\n\n scheduleReconnect() {\n if (this.attempts >= this.maxReconnectAttempts) {\n this.target.close()\n return\n }\n\n let delay = this.strategy(this.attempts)\n\n this.attempts++\n\n this.logger.info(`Reconnecting in ${delay}ms (${this.attempts} attempt)`)\n\n this.state = 'pending_reconnect'\n\n this.reconnnectId = setTimeout(() => this.reconnectNow(), delay)\n }\n\n cancelReconnect() {\n if (this.reconnnectId) {\n clearTimeout(this.reconnnectId)\n delete this.reconnnectId\n }\n }\n}\n","import { createNanoEvents } from 'nanoevents'\n\nimport { NoopLogger } from '../logger/index.js'\n\nexport class FallbackTransport {\n constructor(transports, opts = {}) {\n this.transports = transports\n this.transport = null\n this.emitter = createNanoEvents()\n this.unbind = []\n\n this.logger = opts.logger || new NoopLogger()\n }\n\n displayName() {\n return 'fallbacked transport'\n }\n\n async open() {\n for (let i = 0; i < this.transports.length; i++) {\n let transport = this.transports[i]\n try {\n this.transport = transport\n this.resetListeners()\n this.logger.debug(`Trying to connect via ${transport.displayName()}`)\n await transport.open()\n this.logger.debug(`Connected via ${transport.displayName()}`)\n return\n } catch (e) {\n this.logger.debug(\n `Failed to connect via ${transport.displayName()}: ${e.message}`\n )\n }\n }\n\n this.transport = null\n this.resetListeners()\n throw new Error(`Couldn't connect via any available transport`)\n }\n\n send(data) {\n if (!this.transport) {\n throw new Error('No transport is open')\n }\n\n this.transport.send(data)\n }\n\n async close() {\n if (!this.transport) {\n throw new Error('No transport is open')\n }\n\n await this.transport.close()\n this.transport = null\n }\n\n setURL() {\n throw new Error('Not implemented. Set URL for each transport separately')\n }\n\n setParam(key, val) {\n this.transports.forEach(transport => {\n transport.setParam(key, val)\n })\n }\n\n setToken(val, name) {\n this.transports.forEach(transport => {\n transport.setToken(val, name)\n })\n }\n\n on(event, callback) {\n return this.emitter.on(event, callback)\n }\n\n once(event, callback) {\n let unbind = this.emitter.on(event, (...args) => {\n unbind()\n callback(...args)\n })\n return unbind\n }\n\n get url() {\n if (!this.transport) return ''\n\n return this.transport.url\n }\n\n resetListeners() {\n this.unbind.forEach(clbk => clbk())\n this.unbind.length = 0\n\n if (!this.transport) return\n\n this.unbind.push(\n this.transport.on('open', () => {\n this.emitter.emit('open')\n }),\n this.transport.on('data', data => {\n this.emitter.emit('data', data)\n }),\n this.transport.on('close', ev => {\n this.emitter.emit('close', ev)\n }),\n this.transport.on('error', ev => {\n this.emitter.emit('error', ev)\n })\n )\n }\n}\n","import { createNanoEvents } from 'nanoevents'\n\nexport class WebSocketTransport {\n constructor(url, opts = {}) {\n this.url = url\n\n let Impl = opts.websocketImplementation\n\n if (Impl) {\n this.Impl = Impl\n } else if (typeof WebSocket !== 'undefined') {\n this.Impl = WebSocket\n } else {\n throw new Error('No WebSocket support')\n }\n\n this.connected = false\n this.emitter = createNanoEvents()\n\n let { format, subprotocol, authStrategy } = opts\n\n this.format = format || 'text'\n this.connectionOptions = opts.websocketOptions\n this.authStrategy = authStrategy || 'param'\n this.authProtocol = ''\n this.subprotocol = subprotocol\n }\n\n displayName() {\n return 'WebSocket(' + this.url + ')'\n }\n\n open() {\n let protocols = this.subprotocol\n if (this.authStrategy === 'sub-protocol') {\n protocols = [this.subprotocol, this.authProtocol]\n }\n if (this.connectionOptions) {\n this.ws = new this.Impl(this.url, protocols, this.connectionOptions)\n } else {\n this.ws = new this.Impl(this.url, protocols)\n }\n this.ws.binaryType = 'arraybuffer'\n this.initListeners()\n\n return new Promise((resolve, reject) => {\n let unbind = []\n\n unbind.push(\n this.once('open', () => {\n unbind.forEach(clbk => clbk())\n resolve()\n })\n )\n\n unbind.push(\n this.once('close', () => {\n unbind.forEach(clbk => clbk())\n reject(Error('WS connection closed'))\n })\n )\n })\n }\n\n setURL(url) {\n this.url = url\n }\n\n setParam(key, val) {\n let url = new URL(this.url)\n url.searchParams.set(key, val)\n let newURL = `${url.protocol}//${url.host}${url.pathname}?${url.searchParams}`\n this.setURL(newURL)\n }\n\n setToken(val, key = 'jid') {\n if (this.authStrategy === 'param') {\n this.setParam(key, val)\n } else if (this.authStrategy === 'header') {\n this.connectionOptions = this.connectionOptions || {}\n this.connectionOptions.headers = this.connectionOptions.headers || {}\n\n let authHeaderKey = `x-${key}`.toLowerCase()\n\n // find existing auth header key (it could have a different case)\n let existingKey = Object.keys(this.connectionOptions.headers).find(\n k => k.toLowerCase() === authHeaderKey\n )\n authHeaderKey = existingKey || authHeaderKey\n\n this.connectionOptions.headers[authHeaderKey] = val\n } else if (this.authStrategy === 'sub-protocol') {\n this.authProtocol = `anycable-token.${val}`\n } else {\n throw new Error('Unknown auth strategy: ' + this.authStrategy)\n }\n }\n\n send(data) {\n if (!this.ws || !this.connected) {\n throw Error('WebSocket is not connected')\n } else {\n this.ws.send(data)\n }\n }\n\n close() {\n if (this.ws) {\n this.onclose()\n } else {\n this.connected = false\n }\n }\n\n on(event, callback) {\n return this.emitter.on(event, callback)\n }\n\n once(event, callback) {\n let unbind = this.emitter.on(event, (...args) => {\n unbind()\n callback(...args)\n })\n return unbind\n }\n\n initListeners() {\n this.ws.onerror = event => {\n // Only emit errors if the socket hasn't been closed\n if (this.connected) {\n this.emitter.emit('error', event.error || new Error('WS Error'))\n }\n }\n\n this.ws.onclose = () => {\n this.onclose()\n }\n\n this.ws.onmessage = event => {\n let data = event.data\n if (this.format === 'binary') {\n data = new Uint8Array(data)\n }\n\n this.emitter.emit('data', data)\n }\n\n this.ws.onopen = () => {\n this.connected = true\n this.emitter.emit('open')\n }\n }\n\n onclose() {\n this.ws.onclose = undefined\n this.ws.onmessage = undefined\n this.ws.onopen = undefined\n this.ws.close()\n delete this.ws\n this.connected = false\n\n this.emitter.emit('close')\n }\n}\n","import { Cable, GhostChannel } from '../cable/index.js'\nimport { ActionCableProtocol } from '../action_cable/index.js'\nimport { ActionCableExtendedProtocol } from '../action_cable_ext/index.js'\nimport { JSONEncoder } from '../encoder/index.js'\nimport { NoopLogger } from '../logger/index.js'\nimport { WebSocketTransport } from '../websocket/index.js'\nimport { Monitor, backoffWithJitter } from '../monitor/index.js'\nimport { SubscriptionRejectedError } from '../protocol/index.js'\nimport { FallbackTransport } from '../transport/index.js'\n\nexport const DEFAULT_OPTIONS = {\n protocol: 'actioncable-v1-json',\n pingInterval: 3000,\n maxReconnectAttempts: Infinity,\n maxMissingPings: 2,\n logLevel: 'warn',\n lazy: true\n}\n\nexport function createCable(url, opts) {\n if (typeof url === 'object' && typeof opts === 'undefined') {\n opts = url\n url = undefined\n }\n\n opts = opts || {}\n\n if (!url && !opts.transport) throw Error('URL or transport must be specified')\n\n opts = Object.assign({}, DEFAULT_OPTIONS, opts)\n\n let {\n protocol,\n websocketImplementation,\n websocketFormat,\n websocketOptions,\n websocketAuthStrategy,\n fallbacks,\n logLevel,\n logger,\n transport,\n encoder,\n lazy,\n monitor,\n pingInterval,\n reconnectStrategy,\n maxMissingPings,\n maxReconnectAttempts,\n subprotocol,\n tokenRefresher,\n historyTimestamp,\n protocolOptions,\n concurrentSubscribes,\n performFailures,\n transportConfigurator,\n auth\n } = opts\n\n logger = logger || new NoopLogger(logLevel)\n\n if (typeof protocol === 'string') {\n subprotocol = subprotocol || protocol\n\n // split protocol into two parts by last '-' symbol\n // e.g. actioncable-v1-json -> actioncable-v1, json\n let protocolName = protocol.substring(0, protocol.lastIndexOf('-'))\n let protocolEncoderName = protocol.substring(protocol.lastIndexOf('-') + 1)\n\n protocolOptions = protocolOptions || {}\n\n if (protocolName === 'actioncable-v1') {\n protocol = new ActionCableProtocol({ logger, ...protocolOptions })\n } else if (protocolName === 'actioncable-v1-ext') {\n protocol = new ActionCableExtendedProtocol({\n logger,\n historyTimestamp,\n ...protocolOptions\n })\n } else {\n throw Error(`Protocol is not supported yet: ${protocol}`)\n }\n\n if (protocolEncoderName === 'json') {\n encoder = encoder || new JSONEncoder()\n websocketFormat = websocketFormat || 'text'\n } else if (protocolEncoderName === 'msgpack') {\n websocketFormat = 'binary'\n if (!encoder) {\n throw Error(\n 'Msgpack encoder must be specified explicitly. Use `@anycable/msgpack-encoder` package or build your own'\n )\n }\n } else if (protocolEncoderName === 'protobuf') {\n websocketFormat = websocketFormat || 'binary'\n if (!encoder) {\n throw Error(\n 'Protobuf encoder must be specified explicitly. Use `@anycable/protobuf-encoder` package or build your own'\n )\n }\n } else {\n throw Error(`Protocol is not supported yet: ${protocol}`)\n }\n }\n\n if (!protocol) throw Error('Protocol must be specified')\n\n transport =\n transport ||\n new WebSocketTransport(url, {\n websocketImplementation,\n websocketOptions,\n subprotocol,\n authStrategy: websocketAuthStrategy,\n format: websocketFormat\n })\n\n if (fallbacks) {\n transport = new FallbackTransport([transport, ...fallbacks], { logger })\n }\n\n if (auth && auth.token) {\n transport.setToken(auth.token, auth.param || 'jid')\n }\n\n reconnectStrategy = reconnectStrategy || backoffWithJitter(pingInterval)\n\n if (monitor !== false) {\n monitor =\n monitor ||\n new Monitor({\n pingInterval,\n reconnectStrategy,\n maxMissingPings,\n maxReconnectAttempts,\n logger\n })\n }\n\n let hubOptions = { concurrentSubscribes }\n\n let cable = new Cable({\n protocol,\n transport,\n encoder,\n logger,\n lazy,\n hubOptions,\n performFailures,\n transportConfigurator\n })\n\n if (monitor) {\n monitor.watch(cable)\n cable.monitor = monitor\n }\n\n if (tokenRefresher) {\n watchForExpiredToken(cable, async () => {\n try {\n await tokenRefresher(transport)\n } catch (err) {\n logger.error('Failed to refresh authentication token: ' + err)\n return false\n }\n\n // Initiate cable connection.\n // No need to wait for it to complete, it could\n // fail due to network errors (which is not our responsibility)\n cable.connect().catch(() => {})\n\n return true\n })\n }\n\n return cable\n}\n\nfunction watchForExpiredToken(cable, callback) {\n let attempted = false\n\n cable.on('connect', () => (attempted = false))\n\n cable.on('close', async ev => {\n if (!ev) return\n\n // If we closed by server two times in a row\n if (attempted) {\n cable.logger.warn('Token auto-refresh is disabled', ev)\n return\n }\n\n if (ev.reason === 'token_expired') {\n attempted = true\n\n await callback()\n }\n })\n}\n\n// Wrapper over ActionCableChannel that acts like an Action Cable subscription object\nclass ActionCableSubscription {\n constructor(channel) {\n this.channel = channel\n }\n\n notify(callback, ...args) {\n if (typeof this[callback] !== 'function') return\n\n this[callback](...args)\n }\n\n perform(action, data = {}) {\n this.channel.perform(action, data)\n }\n\n send(data) {\n this.channel.send(data)\n }\n\n get identifier() {\n return this.channel.identifier\n }\n\n unsubscribe() {\n return this.channel.disconnect()\n }\n}\n\nclass ActionCableChannel extends GhostChannel {\n constructor(channelName, params, mixin) {\n super(channelName, params)\n\n this.subscription = new ActionCableSubscription(this)\n Object.assign(this.subscription, mixin)\n\n this.on('connect', ({ reconnect }) =>\n this.subscription.notify('connected', { reconnected: reconnect })\n )\n this.on('disconnect', () =>\n this.subscription.notify('disconnected', { allowReconnect: true })\n )\n this.on('message', val => this.subscription.notify('received', val))\n this.on('close', err => {\n if (err && err instanceof SubscriptionRejectedError) {\n this.subscription.notify('rejected')\n } else {\n this.subscription.notify('disconnected', { allowReconnect: false })\n }\n })\n }\n}\n\nexport class ActionCableSubscriptions {\n constructor(cable) {\n this.cable = cable\n }\n\n create(channel, mixin) {\n let channelName\n let params\n\n if (typeof channel === 'object') {\n channelName = channel.channel\n delete channel.channel\n params = channel\n } else {\n channelName = channel\n params = {}\n }\n\n let cableChannel = new ActionCableChannel(channelName, params, mixin)\n cableChannel.subscription.notify('initialized')\n\n this.cable.subscribe(cableChannel)\n\n return cableChannel.subscription\n }\n\n findAll(identifier) {\n return this.cable.hub.channels\n .filter(channel => channel.identifier === identifier)\n .map(channel => channel.subscription)\n }\n}\n\nexport class ActionCableConsumer {\n constructor(cable) {\n this.cable = cable\n this.subscriptions = new ActionCableSubscriptions(cable)\n }\n}\n\nexport function createConsumer(url, opts) {\n let cable = createCable(url, opts)\n\n return new ActionCableConsumer(cable)\n}\n","import { BaseLogger } from '@anycable/core'\n\n/* eslint-disable no-console */\nexport class Logger extends BaseLogger {\n writeLogEntry(level, msg, details) {\n if (details) {\n console[level](msg, details)\n } else {\n console[level](msg)\n }\n }\n}\n","import { Monitor as BaseMonitor, DisconnectedError } from '@anycable/core'\n\nexport class Monitor extends BaseMonitor {\n watch(cable) {\n super.watch(cable)\n\n this.initActivityListeners()\n }\n\n initActivityListeners() {\n if (\n typeof document !== 'undefined' &&\n typeof window !== 'undefined' &&\n document.addEventListener &&\n window.addEventListener\n ) {\n let visibility = () => {\n if (!document.hidden) {\n if (this.reconnectNow()) {\n this.logger.debug('Trigger reconnect due to visibility change')\n }\n }\n }\n let connect = event => {\n if (this.reconnectNow()) {\n this.logger.debug('Trigger reconnect', { event })\n }\n }\n let disconnectFrozen = () =>\n this.disconnect(new DisconnectedError('page_frozen'))\n\n document.addEventListener('visibilitychange', visibility, false)\n window.addEventListener('focus', connect, false)\n window.addEventListener('online', connect, false)\n window.addEventListener('resume', connect, false)\n window.addEventListener('freeze', disconnectFrozen, false)\n\n this.unbind.push(() => {\n document.removeEventListener('visibilitychange', visibility, false)\n window.removeEventListener('focus', connect, false)\n window.removeEventListener('online', connect, false)\n window.removeEventListener('resume', connect, false)\n window.removeEventListener('freeze', disconnectFrozen, false)\n })\n }\n }\n\n disconnect(err) {\n if (this.state === 'disconnected' || this.state === 'closed') return\n\n this.logger.info('Disconnecting', { reason: err.message })\n\n this.cancelReconnect()\n this.stopPolling()\n\n this.state = 'pending_disconnect'\n this.target.disconnected(err)\n }\n}\n","import {\n createCable as coreCreateCable,\n backoffWithJitter,\n DEFAULT_OPTIONS as DEFAULTS,\n ActionCableConsumer\n} from '@anycable/core'\n\nimport { Logger } from './logger/index.js'\nimport { Monitor } from './monitor/index.js'\n\nexport { Channel } from '@anycable/core'\n\nconst metaPrefixes = ['cable', 'action-cable']\n\nconst defaultUrl = '/cable'\n\n/* eslint-disable consistent-return */\nconst fetchMeta = (doc, key) => {\n for (let prefix of metaPrefixes) {\n let element = doc.head.querySelector(`meta[name='${prefix}-${key}']`)\n\n if (element) {\n return element.getAttribute('content')\n }\n }\n}\n\nconst absoluteWSUrl = path => {\n if (path.match(/wss?:\\/\\//)) return path\n\n if (typeof window !== 'undefined') {\n let proto = window.location.protocol.replace('http', 'ws')\n\n return `${proto}//${window.location.host}${path}`\n }\n\n return path\n}\n\n/* eslint-disable consistent-return */\nconst generateUrlFromDOM = () => {\n if (typeof document !== 'undefined' && document.head) {\n let url = fetchMeta(document, 'url')\n if (url) {\n return absoluteWSUrl(url)\n }\n }\n\n return absoluteWSUrl(defaultUrl)\n}\n\nconst historyTimestampFromMeta = () => {\n if (typeof document !== 'undefined' && document.head) {\n let value = fetchMeta(document, 'history-timestamp')\n\n if (value) {\n return value | 0\n }\n }\n}\n\nconst tokenFromMeta = () => {\n if (typeof document !== 'undefined' && document.head) {\n return fetchMeta(document, 'token')\n }\n}\n\nconst tokenParamFromMeta = () => {\n if (typeof document !== 'undefined' && document.head) {\n return fetchMeta(document, 'token-param')\n }\n}\n\nexport function createCable(url, opts) {\n if (typeof url === 'object' && typeof opts === 'undefined') {\n opts = url\n url = undefined\n }\n\n url = url || generateUrlFromDOM()\n opts = opts || {}\n\n opts.historyTimestamp ||= historyTimestampFromMeta()\n\n let token = tokenFromMeta()\n\n if (token) {\n let param = tokenParamFromMeta()\n opts.auth = Object.assign({ token, param }, opts.auth || {})\n }\n\n opts = Object.assign({}, DEFAULTS, opts)\n\n let {\n logLevel,\n logger,\n pingInterval,\n reconnectStrategy,\n maxMissingPings,\n maxReconnectAttempts\n } = opts\n\n logger = opts.logger = opts.logger || new Logger(logLevel)\n reconnectStrategy = opts.reconnectStrategy =\n opts.reconnectStrategy || backoffWithJitter(pingInterval)\n\n if (opts.monitor !== false) {\n opts.monitor =\n opts.monitor ||\n new Monitor({\n pingInterval,\n reconnectStrategy,\n maxMissingPings,\n maxReconnectAttempts,\n logger\n })\n }\n\n return coreCreateCable(url, opts)\n}\n\nexport function createConsumer(url, opts) {\n let cable = createCable(url, opts)\n\n return new ActionCableConsumer(cable)\n}\n\nexport function fetchTokenFromHTML(opts) {\n let url = opts ? opts.url : undefined\n\n if (!url) {\n if (typeof window !== 'undefined') {\n url = window.location.href\n } else {\n throw Error('An URL to fetch the HTML with a token MUST be specified')\n }\n }\n\n return async transport => {\n let response = await fetch(url, {\n credentials: 'same-origin',\n cache: 'no-cache',\n headers: {\n 'Accept': 'text/html, application/xhtml+xml',\n 'X-ANYCABLE-OPERATION': 'token-refresh'\n }\n })\n\n if (!response.ok) {\n throw Error(\n 'Failed to fetch a page to refresh a token: ' + response.status\n )\n }\n\n let html = await response.text()\n\n let doc = new DOMParser().parseFromString(html, 'text/html')\n\n let newURL = fetchMeta(doc, 'url')\n let newToken = fetchMeta(doc, 'token')\n let newTokenParam = fetchMeta(doc, 'token-param')\n\n if (newURL || newToken) {\n if (newURL) transport.setURL(newURL)\n if (newToken) transport.setToken(newToken, newTokenParam)\n } else {\n throw Error(\"Couldn't find a token on the page\")\n }\n }\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { createConsumer } from '@anycable/web'\n\nexport default class Cable {\n constructor(url = '/openc3-api/cable') {\n this._cable = null\n this._url = url\n }\n disconnect() {\n if (this._cable) {\n this._cable.cable.disconnect()\n this._cable = null\n }\n }\n createSubscription(channel, scope, callbacks = {}, additionalOptions = {}) {\n return OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(\n (refreshed) => {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n if (this._cable == null) {\n let final_url =\n this._url +\n '?scope=' +\n encodeURIComponent(window.openc3Scope) +\n '&authorization=' +\n encodeURIComponent(localStorage.openc3Token)\n final_url = new URL(final_url, document.baseURI).href\n this._cable = createConsumer(final_url)\n }\n return this._cable.subscriptions.create(\n {\n channel,\n ...additionalOptions,\n },\n callbacks,\n )\n },\n )\n }\n recordPing() {\n // Noop with Anycable\n }\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nexport class ConfigParserError {\n constructor(config_parser, message, usage = '', url = '') {\n this.keyword = config_parser.keyword\n this.parameters = config_parser.parameters\n this.filename = config_parser.filename\n this.line = config_parser.line\n this.lineNumber = config_parser.lineNumber\n this.message = message\n this.usage = usage\n this.url = url\n }\n}\n\nexport class ConfigParserService {\n keyword = null\n parameters = []\n filename = ''\n line = ''\n lineNumber = 0\n url = 'https://docs.openc3.com/docs/configuration'\n\n constructor() {}\n\n verify_num_parameters(min_num_params, max_num_params, usage = '') {\n // This syntax works with 0 because each doesn't return any values\n // for a backwards range\n for (let index = 1; index <= min_num_params; index++) {\n // If the parameter is nil (0 based) then we have a problem\n if (this.parameters[index - 1] === undefined) {\n throw new ConfigParserError(\n this,\n `Not enough parameters for ${this.keyword}.`,\n usage,\n this.url,\n )\n }\n }\n // If they pass null for max_params we don't check for a maximum number\n if (max_num_params && this.parameters[max_num_params] !== undefined) {\n throw new ConfigParserError(\n this,\n `Too many parameters for ${this.keyword}.`,\n usage,\n this.url,\n )\n }\n }\n\n remove_quotes(string) {\n if (string.length < 2) {\n return string\n }\n let first_char = string.charAt(0)\n if (first_char !== '\"' && first_char !== \"'\") {\n return string\n }\n let last_char = string.charAt(string.length - 1)\n if (first_char !== last_char) {\n return string\n }\n return string.substring(1, string.length - 1)\n }\n\n scan_string(string, rx) {\n if (!rx.global) throw \"rx must have 'global' flag set\"\n let r = []\n string.replace(rx, function (match) {\n r.push(match)\n return match\n })\n return r\n }\n\n parse_string(\n input_string,\n original_filename,\n yield_non_keyword_lines,\n remove_quotes,\n handler,\n ) {\n let string_concat = false\n this.line = ''\n this.keyword = null\n this.parameters = []\n this.filename = original_filename\n\n // Break string into lines\n let lines = input_string.split('\\n')\n let numLines = lines.length\n\n for (let i = 0; i < numLines; i++) {\n this.lineNumber = i + 1\n let line = lines[i].trim()\n // Ensure the line length is not 0\n if (line.length === 0) {\n if (yield_non_keyword_lines) {\n handler(null, [], this.line, this.lineNumber)\n }\n continue\n }\n\n if (string_concat === true) {\n // Skip comment lines after a string concatenation\n if (line[0] === '#') {\n continue\n }\n // Remove the opening quote if we're continuing the line\n line = line.substring(1, line.length)\n }\n\n // Check for string continuation\n let last_char = line.charAt(line.length - 1)\n let newline = false\n switch (last_char) {\n case '+': // String concatenation with newlines\n newline = true\n // Deliberate fall through\n case '\\\\': // String concatenation\n // Trim off the concat character plus any spaces, e.g. \"line\" \\\n let trim = line.substring(0, line.length - 1).trim()\n // Now trim off the last quote so it will flow into the next line\n this.line += trim.substring(0, trim.length - 1)\n if (newline) {\n this.line += '\\n'\n }\n string_concat = true\n continue\n case '&': // Line continuation\n this.line += line.substring(0, line.length - 1)\n continue\n default:\n this.line += line\n }\n string_concat = false\n\n let rx = /(\"([^\\\\\"]|\\\\.)*\")|('([^\\\\']|\\\\.)*')|\\S+/g\n let data = this.scan_string(this.line, rx)\n let first_item = ''\n if (data.length > 0) {\n first_item = first_item + data[0]\n }\n\n if (first_item.length === 0 || first_item.charAt(0) === '#') {\n this.keyword = null\n } else {\n this.keyword = first_item.toUpperCase()\n }\n this.parameters = []\n\n // Ignore lines without keywords: comments and blank lines\n if (this.keyword === null) {\n if (yield_non_keyword_lines) {\n handler(this.keyword, this.parameters, this.line, this.lineNumber)\n }\n this.line = ''\n continue\n }\n\n let length = data.length\n if (length > 1) {\n for (let index = 1; index < length; index++) {\n let string = data[index]\n\n // Don't process trailing comments such as:\n // KEYWORD PARAM #This is a comment\n if (string.length > 0 && string.charAt(0) === '#') {\n break\n }\n if (remove_quotes) {\n this.parameters.push(this.remove_quotes(string))\n } else {\n this.parameters.push(string)\n }\n }\n }\n handler(this.keyword, this.parameters, this.line, this.lineNumber)\n this.line = ''\n } // for all the lines\n } // parse_string\n} // class ConfigParserService\n","/**\n * Test whether a string contains an integer number\n */\nexport function isInteger(value) {\n return INTEGER_REGEX.test(value);\n}\nconst INTEGER_REGEX = /^-?[0-9]+$/;\n\n/**\n * Test whether a string contains a number\n * http://stackoverflow.com/questions/13340717/json-numbers-regular-expression\n */\nexport function isNumber(value) {\n return NUMBER_REGEX.test(value);\n}\nconst NUMBER_REGEX = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/;\n\n/**\n * Test whether a string can be safely represented with a number\n * without information loss.\n *\n * When approx is true, floating point numbers that lose a few digits but\n * are still approximately equal in value are considered safe too.\n * Integer numbers must still be exactly equal.\n */\nexport function isSafeNumber(value, config) {\n const num = Number.parseFloat(value);\n const parsed = String(num);\n if (value === parsed) {\n return true;\n }\n const valueDigits = extractSignificantDigits(value);\n const parsedDigits = extractSignificantDigits(parsed);\n if (valueDigits === parsedDigits) {\n return true;\n }\n if (config?.approx === true) {\n // A value is approximately equal when:\n // 1. it is a floating point number, not an integer\n // 2. it has at least 14 digits\n // 3. the first 14 digits are equal\n const requiredDigits = 14;\n if (!isInteger(value) && parsedDigits.length >= requiredDigits && valueDigits.startsWith(parsedDigits.substring(0, requiredDigits))) {\n return true;\n }\n }\n return false;\n}\nexport let UnsafeNumberReason = /*#__PURE__*/function (UnsafeNumberReason) {\n UnsafeNumberReason[\"underflow\"] = \"underflow\";\n UnsafeNumberReason[\"overflow\"] = \"overflow\";\n UnsafeNumberReason[\"truncate_integer\"] = \"truncate_integer\";\n UnsafeNumberReason[\"truncate_float\"] = \"truncate_float\";\n return UnsafeNumberReason;\n}({});\n\n/**\n * When the provided value is an unsafe number, describe what the reason is:\n * overflow, underflow, truncate_integer, or truncate_float.\n * Returns undefined when the value is safe.\n */\nexport function getUnsafeNumberReason(value) {\n if (isSafeNumber(value, {\n approx: false\n })) {\n return undefined;\n }\n if (isInteger(value)) {\n return UnsafeNumberReason.truncate_integer;\n }\n const num = Number.parseFloat(value);\n if (!Number.isFinite(num)) {\n return UnsafeNumberReason.overflow;\n }\n if (num === 0) {\n return UnsafeNumberReason.underflow;\n }\n return UnsafeNumberReason.truncate_float;\n}\n\n/**\n * Convert a string into a number when it is safe to do so.\n * Throws an error otherwise, explaining the reason.\n */\nexport function toSafeNumberOrThrow(value, config) {\n const number = Number.parseFloat(value);\n const unsafeReason = getUnsafeNumberReason(value);\n if (config?.approx === true ? unsafeReason && unsafeReason !== UnsafeNumberReason.truncate_float : unsafeReason) {\n const unsafeReasonText = unsafeReason?.replace(/_\\w+$/, '');\n throw new Error(`Cannot safely convert to number: the value '${value}' would ${unsafeReasonText} and become ${number}`);\n }\n return number;\n}\n\n/**\n * Split a number into sign, digits, and exponent.\n * The value can be constructed again from a split number by inserting a dot\n * at the second character of the digits if there is more than one digit,\n * prepending it with the sign, and appending the exponent like `e${exponent}`\n */\nexport function splitNumber(value) {\n const match = value.match(/^(-?)(\\d+\\.?\\d*)([eE]([+-]?\\d+))?$/);\n if (!match) {\n throw new SyntaxError(`Invalid number: ${value}`);\n }\n const sign = match[1];\n const digitsStr = match[2];\n let exponent = match[4] !== undefined ? Number.parseInt(match[4]) : 0;\n const dot = digitsStr.indexOf('.');\n exponent += dot !== -1 ? dot - 1 : digitsStr.length - 1;\n const digits = digitsStr.replace('.', '') // remove the dot (must be removed before removing leading zeros)\n .replace(/^0*/, zeros => {\n // remove leading zeros, add their count to the exponent\n exponent -= zeros.length;\n return '';\n }).replace(/0*$/, ''); // remove trailing zeros\n\n return digits.length > 0 ? {\n sign,\n digits,\n exponent\n } : {\n sign,\n digits: '0',\n exponent: exponent + 1\n };\n}\n\n/**\n * Compare two strings containing a numeric value\n * Returns 1 when a is larger than b, 0 when they are equal,\n * and -1 when a is smaller than b.\n */\nexport function compareNumber(a, b) {\n if (a === b) {\n return 0;\n }\n const aa = splitNumber(a);\n const bb = splitNumber(b);\n const sign = aa.sign === '-' ? -1 : 1;\n if (aa.sign !== bb.sign) {\n if (aa.digits === '0' && bb.digits === '0') {\n return 0;\n }\n return sign;\n }\n if (aa.exponent !== bb.exponent) {\n return aa.exponent > bb.exponent ? sign : aa.exponent < bb.exponent ? -sign : 0;\n }\n return aa.digits > bb.digits ? sign : aa.digits < bb.digits ? -sign : 0;\n}\n\n/**\n * Count the significant digits of a number.\n *\n * For example:\n * '2.34' returns 3\n * '-77' returns 2\n * '0.003400' returns 2\n * '120.5e+30' returns 4\n **/\nexport function countSignificantDigits(value) {\n const {\n start,\n end\n } = getSignificantDigitRange(value);\n const dot = value.indexOf('.');\n if (dot === -1 || dot < start || dot > end) {\n return end - start;\n }\n return end - start - 1;\n}\n\n/**\n * Get the significant digits of a number.\n *\n * For example:\n * '2.34' returns '234'\n * '-77' returns '77'\n * '0.003400' returns '34'\n * '120.5e+30' returns '1205'\n **/\nexport function extractSignificantDigits(value) {\n const {\n start,\n end\n } = getSignificantDigitRange(value);\n const digits = value.substring(start, end);\n const dot = digits.indexOf('.');\n if (dot === -1) {\n return digits;\n }\n return digits.substring(0, dot) + digits.substring(dot + 1);\n}\n\n/**\n * Returns the range (start to end) of the significant digits of a value.\n * Note that this range _may_ contain the decimal dot.\n *\n * For example:\n *\n * getSignificantDigitRange('0.0325900') // { start: 3, end: 7 }\n * getSignificantDigitRange('2.0300') // { start: 0, end: 3 }\n * getSignificantDigitRange('0.0') // { start: 3, end: 3 }\n *\n */\nfunction getSignificantDigitRange(value) {\n let start = 0;\n if (value[0] === '-') {\n start++;\n }\n while (value[start] === '0' || value[start] === '.') {\n start++;\n }\n let end = value.lastIndexOf('e');\n if (end === -1) {\n end = value.lastIndexOf('E');\n }\n if (end === -1) {\n end = value.length;\n }\n while ((value[end - 1] === '0' || value[end - 1] === '.') && end > start) {\n end--;\n }\n return {\n start,\n end\n };\n}\n//# sourceMappingURL=utils.js.map","import { UnsafeNumberReason, compareNumber, countSignificantDigits, getUnsafeNumberReason, isInteger, isNumber } from './utils.js';\n\n/**\n * A lossless number. Stores its numeric value as string\n */\nexport class LosslessNumber {\n // numeric value as string\n\n // type information\n isLosslessNumber = true;\n constructor(value) {\n if (!isNumber(value)) {\n throw new Error(`Invalid number (value: \"${value}\")`);\n }\n this.value = value;\n }\n\n /**\n * Get the value of the LosslessNumber as number or bigint.\n *\n * - a number is returned for safe numbers and decimal values that only lose some insignificant digits\n * - a bigint is returned for big integer numbers\n * - an Error is thrown for values that will overflow or underflow\n *\n * Note that you can implement your own strategy for conversion by just getting the value as string\n * via .toString(), and using util functions like isInteger, isSafeNumber, getUnsafeNumberReason,\n * and toSafeNumberOrThrow to convert it to a numeric value.\n */\n valueOf() {\n const unsafeReason = getUnsafeNumberReason(this.value);\n\n // safe or truncate_float\n if (unsafeReason === undefined || unsafeReason === UnsafeNumberReason.truncate_float) {\n return Number.parseFloat(this.value);\n }\n\n // truncate_integer\n if (isInteger(this.value)) {\n return BigInt(this.value);\n }\n\n // overflow or underflow\n throw new Error(`Cannot safely convert to number: the value '${this.value}' would ${unsafeReason} and become ${Number.parseFloat(this.value)}`);\n }\n\n /**\n * Get the value of the LosslessNumber as string.\n */\n toString() {\n return this.value;\n }\n\n // Note: we do NOT implement a .toJSON() method, and you should not implement\n // or use that, it cannot safely turn the numeric value in the string into\n // stringified JSON since it has to be parsed into a number first.\n}\n\n/**\n * Test whether a value is a LosslessNumber\n */\nexport function isLosslessNumber(value) {\n // @ts-ignore\n return value && typeof value === 'object' && value.isLosslessNumber || false;\n}\n\n/**\n * Convert a number into a LosslessNumber if this is possible in a safe way\n * If the value has too many digits, or is NaN or Infinity, an error will be thrown\n */\nexport function toLosslessNumber(value) {\n const maxDigits = 15;\n if (countSignificantDigits(String(value)) > maxDigits) {\n throw new Error(`Invalid number: contains more than 15 digits and is most likely truncated and unsafe by itself (value: ${value})`);\n }\n if (Number.isNaN(value)) {\n throw new Error('Invalid number: NaN');\n }\n if (!Number.isFinite(value)) {\n throw new Error(`Invalid number: ${value}`);\n }\n return new LosslessNumber(String(value));\n}\n\n/**\n * Compare two lossless numbers.\n * Returns 1 when a is larger than b, 0 when they are equal,\n * and -1 when a is smaller than b.\n */\nexport function compareLosslessNumber(a, b) {\n return compareNumber(a.value, b.value);\n}\n//# sourceMappingURL=LosslessNumber.js.map","import { LosslessNumber } from './LosslessNumber.js';\nimport { isInteger } from './utils.js';\nexport function parseLosslessNumber(value) {\n return new LosslessNumber(value);\n}\nexport function parseNumberAndBigInt(value) {\n return isInteger(value) ? BigInt(value) : Number.parseFloat(value);\n}\n//# sourceMappingURL=numberParsers.js.map","import { isLosslessNumber } from './LosslessNumber.js';\n/**\n * Revive a json object.\n * Applies the reviver function recursively on all values in the JSON object.\n * @param json A JSON Object, Array, or value\n * @param reviver\n * A reviver function invoked with arguments `key` and `value`,\n * which must return a replacement value. The function context\n * (`this`) is the Object or Array that contains the currently\n * handled value.\n */\nexport function revive(json, reviver) {\n return reviveValue({\n '': json\n }, '', json, reviver);\n}\n\n/**\n * Revive a value\n */\nfunction reviveValue(context, key, value, reviver) {\n if (Array.isArray(value)) {\n return reviver.call(context, key, reviveArray(value, reviver));\n }\n if (value && typeof value === 'object' && !isLosslessNumber(value)) {\n // note the special case for LosslessNumber,\n // we don't want to iterate over the internals of a LosslessNumber\n return reviver.call(context, key, reviveObject(value, reviver));\n }\n return reviver.call(context, key, value);\n}\n\n/**\n * Revive the properties of an object\n */\nfunction reviveObject(object, reviver) {\n for (const key of Object.keys(object)) {\n const value = reviveValue(object, key, object[key], reviver);\n if (value !== undefined) {\n object[key] = value;\n } else {\n delete object[key];\n }\n }\n return object;\n}\n\n/**\n * Revive the properties of an Array\n */\nfunction reviveArray(array, reviver) {\n for (let i = 0; i < array.length; i++) {\n array[i] = reviveValue(array, String(i), array[i], reviver);\n }\n return array;\n}\n//# sourceMappingURL=revive.js.map","import { parseLosslessNumber } from './numberParsers.js';\nimport { revive } from './revive.js';\n/**\n * The LosslessJSON.parse() method parses a string as JSON, optionally transforming\n * the value produced by parsing.\n *\n * The parser is based on the parser of Tan Li Hou shared in\n * https://lihautan.com/json-parser-with-javascript/\n *\n * @param text\n * The string to parse as JSON. See the JSON object for a description of JSON syntax.\n *\n * @param [reviver]\n * If a function, prescribes how the value originally produced by parsing is\n * transformed, before being returned.\n *\n * @param [parseNumber=parseLosslessNumber]\n * Pass a custom number parser. Input is a string, and the output can be unknown\n * numeric value: number, bigint, LosslessNumber, or a custom BigNumber library.\n *\n * @returns Returns the Object corresponding to the given JSON text.\n *\n * @throws Throws a SyntaxError exception if the string to parse is not valid JSON.\n */\nexport function parse(text, reviver) {\n let parseNumber = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : parseLosslessNumber;\n let i = 0;\n const value = parseValue();\n expectValue(value);\n expectEndOfInput();\n return reviver ? revive(value, reviver) : value;\n function parseObject() {\n if (text.charCodeAt(i) === codeOpeningBrace) {\n i++;\n skipWhitespace();\n const object = {};\n let initial = true;\n while (i < text.length && text.charCodeAt(i) !== codeClosingBrace) {\n if (!initial) {\n eatComma();\n skipWhitespace();\n } else {\n initial = false;\n }\n const start = i;\n const key = parseString();\n if (key === undefined) {\n throwObjectKeyExpected();\n return; // To make TS happy\n }\n skipWhitespace();\n eatColon();\n const value = parseValue();\n if (value === undefined) {\n throwObjectValueExpected();\n return; // To make TS happy\n }\n\n // TODO: test deep equal instead of strict equal\n if (Object.prototype.hasOwnProperty.call(object, key) && !isDeepEqual(value, object[key])) {\n // Note that we could also test `if(key in object) {...}`\n // or `if (object[key] !== 'undefined') {...}`, but that is slower.\n throwDuplicateKey(key, start + 1);\n }\n object[key] = value;\n }\n if (text.charCodeAt(i) !== codeClosingBrace) {\n throwObjectKeyOrEndExpected();\n }\n i++;\n return object;\n }\n }\n function parseArray() {\n if (text.charCodeAt(i) === codeOpeningBracket) {\n i++;\n skipWhitespace();\n const array = [];\n let initial = true;\n while (i < text.length && text.charCodeAt(i) !== codeClosingBracket) {\n if (!initial) {\n eatComma();\n } else {\n initial = false;\n }\n const value = parseValue();\n expectArrayItem(value);\n array.push(value);\n }\n if (text.charCodeAt(i) !== codeClosingBracket) {\n throwArrayItemOrEndExpected();\n }\n i++;\n return array;\n }\n }\n function parseValue() {\n skipWhitespace();\n const value = parseString() ?? parseNumeric() ?? parseObject() ?? parseArray() ?? parseKeyword('true', true) ?? parseKeyword('false', false) ?? parseKeyword('null', null);\n skipWhitespace();\n return value;\n }\n function parseKeyword(name, value) {\n if (text.slice(i, i + name.length) === name) {\n i += name.length;\n return value;\n }\n }\n function skipWhitespace() {\n while (isWhitespace(text.charCodeAt(i))) {\n i++;\n }\n }\n function parseString() {\n if (text.charCodeAt(i) === codeDoubleQuote) {\n i++;\n let result = '';\n while (i < text.length && text.charCodeAt(i) !== codeDoubleQuote) {\n if (text.charCodeAt(i) === codeBackslash) {\n const char = text[i + 1];\n const escapeChar = escapeCharacters[char];\n if (escapeChar !== undefined) {\n result += escapeChar;\n i++;\n } else if (char === 'u') {\n if (isHex(text.charCodeAt(i + 2)) && isHex(text.charCodeAt(i + 3)) && isHex(text.charCodeAt(i + 4)) && isHex(text.charCodeAt(i + 5))) {\n result += String.fromCharCode(Number.parseInt(text.slice(i + 2, i + 6), 16));\n i += 5;\n } else {\n throwInvalidUnicodeCharacter(i);\n }\n } else {\n throwInvalidEscapeCharacter(i);\n }\n } else {\n if (isValidStringCharacter(text.charCodeAt(i))) {\n result += text[i];\n } else {\n throwInvalidCharacter(text[i]);\n }\n }\n i++;\n }\n expectEndOfString();\n i++;\n return result;\n }\n }\n function parseNumeric() {\n const start = i;\n if (text.charCodeAt(i) === codeMinus) {\n i++;\n expectDigit(start);\n }\n if (text.charCodeAt(i) === codeZero) {\n i++;\n } else if (isNonZeroDigit(text.charCodeAt(i))) {\n i++;\n while (isDigit(text.charCodeAt(i))) {\n i++;\n }\n }\n if (text.charCodeAt(i) === codeDot) {\n i++;\n expectDigit(start);\n while (isDigit(text.charCodeAt(i))) {\n i++;\n }\n }\n if (text.charCodeAt(i) === codeLowercaseE || text.charCodeAt(i) === codeUppercaseE) {\n i++;\n if (text.charCodeAt(i) === codeMinus || text.charCodeAt(i) === codePlus) {\n i++;\n }\n expectDigit(start);\n while (isDigit(text.charCodeAt(i))) {\n i++;\n }\n }\n if (i > start) {\n return parseNumber(text.slice(start, i));\n }\n }\n function eatComma() {\n if (text.charCodeAt(i) !== codeComma) {\n throw new SyntaxError(`Comma ',' expected after value ${gotAt()}`);\n }\n i++;\n }\n function eatColon() {\n if (text.charCodeAt(i) !== codeColon) {\n throw new SyntaxError(`Colon ':' expected after property name ${gotAt()}`);\n }\n i++;\n }\n function expectValue(value) {\n if (value === undefined) {\n throw new SyntaxError(`JSON value expected ${gotAt()}`);\n }\n }\n function expectArrayItem(value) {\n if (value === undefined) {\n throw new SyntaxError(`Array item expected ${gotAt()}`);\n }\n }\n function expectEndOfInput() {\n if (i < text.length) {\n throw new SyntaxError(`Expected end of input ${gotAt()}`);\n }\n }\n function expectDigit(start) {\n if (!isDigit(text.charCodeAt(i))) {\n const numSoFar = text.slice(start, i);\n throw new SyntaxError(`Invalid number '${numSoFar}', expecting a digit ${gotAt()}`);\n }\n }\n function expectEndOfString() {\n if (text.charCodeAt(i) !== codeDoubleQuote) {\n throw new SyntaxError(`End of string '\"' expected ${gotAt()}`);\n }\n }\n function throwObjectKeyExpected() {\n throw new SyntaxError(`Quoted object key expected ${gotAt()}`);\n }\n function throwDuplicateKey(key, pos) {\n throw new SyntaxError(`Duplicate key '${key}' encountered at position ${pos}`);\n }\n function throwObjectKeyOrEndExpected() {\n throw new SyntaxError(`Quoted object key or end of object '}' expected ${gotAt()}`);\n }\n function throwArrayItemOrEndExpected() {\n throw new SyntaxError(`Array item or end of array ']' expected ${gotAt()}`);\n }\n function throwInvalidCharacter(char) {\n throw new SyntaxError(`Invalid character '${char}' ${pos()}`);\n }\n function throwInvalidEscapeCharacter(start) {\n const chars = text.slice(start, start + 2);\n throw new SyntaxError(`Invalid escape character '${chars}' ${pos()}`);\n }\n function throwObjectValueExpected() {\n throw new SyntaxError(`Object value expected after ':' ${pos()}`);\n }\n function throwInvalidUnicodeCharacter(start) {\n const chars = text.slice(start, start + 6);\n throw new SyntaxError(`Invalid unicode character '${chars}' ${pos()}`);\n }\n\n // zero based character position\n function pos() {\n return `at position ${i}`;\n }\n function got() {\n return i < text.length ? `but got '${text[i]}'` : 'but reached end of input';\n }\n function gotAt() {\n return `${got()} ${pos()}`;\n }\n}\nfunction isWhitespace(code) {\n return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn;\n}\nfunction isHex(code) {\n return code >= codeZero && code <= codeNine || code >= codeUppercaseA && code <= codeUppercaseF || code >= codeLowercaseA && code <= codeLowercaseF;\n}\nfunction isDigit(code) {\n return code >= codeZero && code <= codeNine;\n}\nfunction isNonZeroDigit(code) {\n return code >= codeOne && code <= codeNine;\n}\nexport function isValidStringCharacter(code) {\n return code >= 0x20 && code <= 0x10ffff;\n}\nexport function isDeepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((item, index) => isDeepEqual(item, b[index]));\n }\n if (isObject(a) && isObject(b)) {\n const keys = [...new Set([...Object.keys(a), ...Object.keys(b)])];\n return keys.every(key => isDeepEqual(a[key], b[key]));\n }\n return false;\n}\nfunction isObject(value) {\n return typeof value === 'object' && value !== null;\n}\n\n// map with all escape characters\nconst escapeCharacters = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n};\nconst codeBackslash = 0x5c; // \"\\\"\nconst codeOpeningBrace = 0x7b; // \"{\"\nconst codeClosingBrace = 0x7d; // \"}\"\nconst codeOpeningBracket = 0x5b; // \"[\"\nconst codeClosingBracket = 0x5d; // \"]\"\nconst codeSpace = 0x20; // \" \"\nconst codeNewline = 0xa; // \"\\n\"\nconst codeTab = 0x9; // \"\\t\"\nconst codeReturn = 0xd; // \"\\r\"\nconst codeDoubleQuote = 0x0022; // \"\nconst codePlus = 0x2b; // \"+\"\nconst codeMinus = 0x2d; // \"-\"\nconst codeZero = 0x30;\nconst codeOne = 0x31;\nconst codeNine = 0x39;\nconst codeComma = 0x2c; // \",\"\nconst codeDot = 0x2e; // \".\" (dot, period)\nconst codeColon = 0x3a; // \":\"\nexport const codeUppercaseA = 0x41; // \"A\"\nexport const codeLowercaseA = 0x61; // \"a\"\nexport const codeUppercaseE = 0x45; // \"E\"\nexport const codeLowercaseE = 0x65; // \"e\"\nexport const codeUppercaseF = 0x46; // \"F\"\nexport const codeLowercaseF = 0x66; // \"f\"\n//# sourceMappingURL=parse.js.map","import { isNumber } from './utils.js';\n\n/**\n * The LosslessJSON.stringify() method converts a JavaScript value to a JSON string,\n * optionally replacing values if a replacer function is specified, or\n * optionally including only the specified properties if a replacer array is specified.\n *\n * @param value\n * The value to convert to a JSON string.\n *\n * @param [replacer]\n * A function that alters the behavior of the stringification process,\n * or an array of String and Number objects that serve as a whitelist for\n * selecting the properties of the value object to be included in the JSON string.\n * If this value is null or not provided, all properties of the object are\n * included in the resulting JSON string.\n *\n * @param [space]\n * A String or Number object that's used to insert white space into the output\n * JSON string for readability purposes. If this is a Number, it indicates the\n * number of space characters to use as white space; this number is capped at 10\n * if it's larger than that. Values less than 1 indicate that no space should be\n * used. If this is a String, the string (or the first 10 characters of the string,\n * if it's longer than that) is used as white space. If this parameter is not\n * provided (or is null), no white space is used.\n *\n * @param [numberStringifiers]\n * An optional list with additional number stringifiers, for example to serialize\n * a BigNumber. The output of the function must be valid stringified JSON.\n * When `undefined` is returned, the property will be deleted from the object.\n * The difference with using a `replacer` is that the output of a `replacer`\n * must be JSON and will be stringified afterwards, whereas the output of the\n * `numberStringifiers` is already stringified JSON.\n *\n * @returns Returns the string representation of the JSON object.\n */\nexport function stringify(value, replacer, space, numberStringifiers) {\n const resolvedSpace = resolveSpace(space);\n const replacedValue = typeof replacer === 'function' ? replacer.call({\n '': value\n }, '', value) : value;\n return stringifyValue(replacedValue, '');\n\n /**\n * Stringify a value\n */\n function stringifyValue(value, indent) {\n if (Array.isArray(numberStringifiers)) {\n const stringifier = numberStringifiers.find(item => item.test(value));\n if (stringifier) {\n const str = stringifier.stringify(value);\n if (typeof str !== 'string' || !isNumber(str)) {\n throw new Error(`Invalid JSON number: output of a number stringifier must be a string containing a JSON number (output: ${str})`);\n }\n return str;\n }\n }\n\n // boolean, null, number, string, or date\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string' || value === null || value instanceof Date || value instanceof Boolean || value instanceof Number || value instanceof String) {\n return JSON.stringify(value);\n }\n\n // lossless number, the secret ingredient :)\n // @ts-ignore\n if (value?.isLosslessNumber) {\n return value.toString();\n }\n\n // BigInt\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n // Array\n if (Array.isArray(value)) {\n return stringifyArray(value, indent);\n }\n\n // Object (test lastly!)\n if (value && typeof value === 'object') {\n return stringifyObject(value, indent);\n }\n return undefined;\n }\n\n /**\n * Stringify an array\n */\n function stringifyArray(array, indent) {\n if (array.length === 0) {\n return '[]';\n }\n const childIndent = resolvedSpace ? indent + resolvedSpace : undefined;\n let str = resolvedSpace ? '[\\n' : '[';\n for (let i = 0; i < array.length; i++) {\n const item = typeof replacer === 'function' ? replacer.call(array, String(i), array[i]) : array[i];\n if (resolvedSpace) {\n str += childIndent;\n }\n if (typeof item !== 'undefined' && typeof item !== 'function') {\n str += stringifyValue(item, childIndent);\n } else {\n str += 'null';\n }\n if (i < array.length - 1) {\n str += resolvedSpace ? ',\\n' : ',';\n }\n }\n str += resolvedSpace ? `\\n${indent}]` : ']';\n return str;\n }\n\n /**\n * Stringify an object\n */\n function stringifyObject(object, indent) {\n if (typeof object.toJSON === 'function') {\n return stringify(object.toJSON(), replacer, space, undefined);\n }\n const keys = Array.isArray(replacer) ? replacer.map(String) : Object.keys(object);\n if (keys.length === 0) {\n return '{}';\n }\n const childIndent = resolvedSpace ? indent + resolvedSpace : undefined;\n let first = true;\n let str = resolvedSpace ? '{\\n' : '{';\n for (const key of keys) {\n const value = typeof replacer === 'function' ? replacer.call(object, key, object[key]) : object[key];\n if (includeProperty(key, value)) {\n if (first) {\n first = false;\n } else {\n str += resolvedSpace ? ',\\n' : ',';\n }\n const keyStr = JSON.stringify(key);\n str += resolvedSpace ? `${childIndent + keyStr}: ` : `${keyStr}:`;\n str += stringifyValue(value, childIndent);\n }\n }\n str += resolvedSpace ? `\\n${indent}}` : '}';\n return str;\n }\n\n /**\n * Test whether to include a property in a stringified object or not.\n */\n function includeProperty(_key, value) {\n return typeof value !== 'undefined' && typeof value !== 'function' && typeof value !== 'symbol';\n }\n}\n\n/**\n * Resolve a JSON stringify space:\n * replace a number with a string containing that number of spaces\n */\nfunction resolveSpace(space) {\n if (typeof space === 'number') {\n return ' '.repeat(space);\n }\n if (typeof space === 'string' && space !== '') {\n return space;\n }\n return undefined;\n}\n//# sourceMappingURL=stringify.js.map","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n\n# A portion of this file was funded by Blue Origin Enterprises, L.P.\n# See https://github.com/OpenC3/cosmos/pull/1957\n*/\n\nimport axios from './axios.js'\nimport { parse, stringify, isInteger, isSafeNumber } from 'lossless-json'\n\n// parse huge integer values into a bigint, and use a regular number otherwise\nexport function customNumberParser(value) {\n if (isInteger(value) && !isSafeNumber(value)) {\n return BigInt(value)\n } else {\n return parseFloat(value)\n }\n}\nexport default class OpenC3Api {\n id = 1\n\n constructor() {}\n\n async exec(\n method,\n params,\n kwparams = {},\n headerOptions = {},\n timeout = 60000,\n ) {\n try {\n let refreshed = await OpenC3Auth.updateToken(\n OpenC3Auth.defaultMinValidity,\n )\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n } catch (error) {\n OpenC3Auth.login()\n }\n this.id = this.id + 1\n try {\n kwparams['scope'] = window.openc3Scope\n // Everything from the front-end is manual by default\n // The various api methods decide whether to pass the manual\n // flag to the authorize routine\n headerOptions['manual'] = true\n const response = await axios.post(\n '/openc3-api/api',\n {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: this.id,\n keyword_params: kwparams,\n },\n {\n headers: {\n Authorization: localStorage.openc3Token,\n 'Content-Type': 'application/json-rpc',\n ...headerOptions,\n },\n timeout: timeout,\n transformRequest: [\n (data, headers) => {\n // stringify the data with lossless-json\n return stringify(data)\n },\n ],\n transformResponse: [\n (data) => {\n // parse the data with lossless-json ensuring that large numbers are parsed as BigInts\n // but all other numbers are parsed as regular numbers\n return parse(data, undefined, customNumberParser)\n },\n ],\n },\n )\n // let data = response.data\n // if (data.error) {\n // let err = new Error()\n // err.name = data.error.data.class\n // err.message = data.error.data.message\n // console.log(data.error.data.backtrace.join('\\n'))\n // throw err\n // }\n return response.data.result\n } catch (error) {\n let err = new Error()\n if (error.response) {\n // The request was made and the server responded with a\n // status code that falls out of the range of 2xx\n err.name = error.response.data.error.data.class\n err.message = error.response.data.error.data.message\n err.object = error.response.data.error\n } else if (error.request) {\n // The request was made but no response was received, `error.request`\n // is an instance of XMLHttpRequest in the browser and an instance\n // of http.ClientRequest in Node.js\n err.name = 'Request error'\n // NOTE: Openc3Screen.vue uses this specific message to determine\n // if the CmdTlmApi server is down. Don't change unless also changing there.\n err.message = 'Request error, no response received'\n } else {\n // Something happened in setting up the request and triggered an Error\n // Simply return the original error so we don't lose information\n err = error\n }\n throw err\n }\n }\n\n decode_openc3_type(val) {\n if (val !== null && typeof val === 'object') {\n if (val.json_class == 'Float' && val.raw) {\n if (val.raw == 'NaN') {\n return NaN\n } else if (val.raw == 'Infinity') {\n return Infinity\n } else if (val.raw == '-Infinity') {\n return -Infinity\n }\n }\n }\n return null\n }\n\n encode_openc3_type(val) {\n if (Number.isNaN(val)) {\n return { json_class: 'Float', raw: 'NaN' }\n } else if (val == Number.POSITIVE_INFINITY) {\n return { json_class: 'Float', raw: 'Infinity' }\n } else if (val == Number.NEGATIVE_INFINITY) {\n return { json_class: 'Float', raw: '-Infinity' }\n }\n return null\n }\n\n ensure_offline_access() {\n this.offline_access_needed().then((needed) => {\n if (needed) {\n if (localStorage.openc3OfflineToken) {\n this.set_offline_access(localStorage.openc3OfflineToken).then(() => {\n delete localStorage.openc3OfflineToken\n })\n } else {\n OpenC3Auth.getOfflineAccess()\n }\n }\n })\n }\n\n // ***********************************************\n // The following APIs are used by the CmdTlmServer\n // ***********************************************\n\n offline_access_needed() {\n return this.exec('offline_access_needed', [])\n }\n\n set_offline_access(offline_access_token) {\n return this.exec('set_offline_access', [offline_access_token])\n }\n\n get_all_interface_info() {\n return this.exec('get_all_interface_info', [])\n }\n\n map_target_to_interface(target_name, interface_name) {\n return this.exec('map_target_to_interface', [target_name, interface_name])\n }\n\n connect_interface(interface_name, ...interface_params) {\n if (interface_params.length > 0) {\n return this.exec('connect_interface', [\n interface_name,\n ...interface_params,\n ])\n } else {\n return this.exec('connect_interface', [interface_name])\n }\n }\n\n disconnect_interface(interface_name) {\n return this.exec('disconnect_interface', [interface_name])\n }\n\n interface_cmd(interface_name, command_name, ...command_params) {\n return this.exec('interface_cmd', [\n interface_name,\n command_name,\n ...command_params,\n ])\n }\n\n get_all_router_info() {\n return this.exec('get_all_router_info', [])\n }\n\n connect_router(router_name) {\n return this.exec('connect_router', [router_name])\n }\n\n disconnect_router(router_name) {\n return this.exec('disconnect_router', [router_name])\n }\n\n get_target_interfaces() {\n return this.exec('get_target_interfaces', [])\n }\n\n get_tlm_cnts(target_commands) {\n return this.exec('get_tlm_cnts', [target_commands])\n }\n\n get_item(target, packet, item) {\n return this.exec('get_item', [target, packet, item])\n }\n\n get_param(target, packet, item) {\n return this.exec('get_param', [target, packet, item])\n }\n // DEPRECATED for get_param\n get_parameter(target, packet, item) {\n return this.exec('get_param', [target, packet, item])\n }\n\n get_limits_sets() {\n return this.exec('get_limits_sets', [])\n }\n\n get_limits_set() {\n return this.exec('get_limits_set', [])\n }\n\n set_limits_set(limits_set) {\n return this.exec('set_limits_set', [limits_set])\n }\n\n // ***********************************************\n // End CmdTlmServer APIs\n // ***********************************************\n\n get_target(target_name) {\n return this.exec('get_target', [target_name])\n }\n\n get_target_names() {\n return this.exec('get_target_names', [])\n }\n // DEPRECATED for get_target_names\n get_target_list() {\n return this.exec('get_target_names', [])\n }\n\n get_tlm(target_name, packet_name) {\n return this.exec('get_tlm', [target_name, packet_name])\n }\n // DEPRECATED for get_tlm\n get_telemetry(target_name, packet_name) {\n return this.exec('get_tlm', [target_name, packet_name])\n }\n\n get_all_tlm(target_name) {\n return this.exec('get_all_tlm', [target_name])\n }\n // DEPRECATED for get_all_tlm\n get_all_telemetry(target_name) {\n return this.exec('get_all_tlm', [target_name])\n }\n\n get_all_tlm_names(target_name, hidden = false) {\n return this.exec('get_all_tlm_names', [target_name], { hidden: hidden })\n }\n // DEPRECATED for get_all_tlm_names\n get_all_telemetry_names(target_name) {\n return this.exec('get_all_tlm_names', [target_name])\n }\n\n get_all_tlm_item_names(target_name) {\n return this.exec('get_all_tlm_item_names', [target_name])\n }\n\n async get_tlm_packet(target_name, packet_name, value_type, stale_time = 30) {\n const data = await this.exec('get_tlm_packet', [target_name, packet_name], {\n type: value_type,\n stale_time: stale_time,\n })\n // Make sure data isn't null or undefined. Note this is the only valid use of == or !=\n if (data != null) {\n let len = data.length\n let converted = null\n for (let i = 0; i < len; i++) {\n converted = this.decode_openc3_type(data[i][1])\n if (converted !== null) {\n data[i][1] = converted\n }\n }\n }\n return data\n }\n\n get_packet_derived_items(target_name, packet_name) {\n return this.exec('get_packet_derived_items', [target_name, packet_name])\n }\n\n get_tlm_buffer(target_name, packet_name) {\n return this.exec('get_tlm_buffer', [target_name, packet_name])\n }\n\n get_tlm_available(items) {\n return this.exec('get_tlm_available', [items])\n }\n\n async get_tlm_values(\n items,\n stale_time = 30,\n cache_timeout = null,\n start_time = null,\n end_time = null,\n ) {\n let kw_args = {\n stale_time: stale_time,\n }\n if (cache_timeout !== null) {\n kw_args['cache_timeout'] = cache_timeout\n }\n if (start_time !== null) {\n kw_args['start_time'] = start_time.toISOString()\n }\n if (end_time !== null) {\n kw_args['end_time'] = end_time.toISOString()\n }\n const data = await this.exec(\n 'get_tlm_values',\n [items],\n kw_args,\n {},\n 10000, // 10s timeout ... should never be this long\n )\n if (data && data.length > 0) {\n let len = data[0].length\n let converted = null\n for (let i = 0; i < len; i++) {\n converted = this.decode_openc3_type(data[0][i])\n if (converted !== null) {\n data[0][i] = converted\n }\n }\n }\n return data\n }\n\n get_limits(target_name, packet_name, item_name) {\n return this.exec('get_limits', [target_name, packet_name, item_name])\n }\n\n async tlm(target_name, packet_name, item_name, value_type = 'CONVERTED') {\n let data = null\n // Check for the single string syntax: tlm(\"TGT PKT ITEM\")\n if (packet_name === undefined) {\n data = await this.exec('tlm', [target_name])\n // Check for the single string syntax with type: tlm(\"TGT PKT ITEM\", \"RAW\")\n } else if (item_name === undefined) {\n if (\n ['RAW', 'CONVERTED', 'FORMATTED', 'WITH_UNITS'].includes(packet_name)\n ) {\n data = await this.exec('tlm', [target_name], { type: packet_name })\n } else {\n let err = new Error()\n err.name = 'TypeError'\n err.message = `Invalid data type ${packet_name}. Valid options are RAW, CONVERTED, FORMATTED, and WITH_UNITS.`\n throw err\n }\n } else {\n data = await this.exec('tlm', [target_name, packet_name, item_name], {\n type: value_type,\n })\n }\n let converted = this.decode_openc3_type(data)\n if (converted !== null) {\n data = converted\n }\n return data\n }\n\n async inject_tlm(\n target_name,\n packet_name,\n item_hash = null,\n value_type = 'CONVERTED',\n ) {\n await this.exec('inject_tlm', [target_name, packet_name, item_hash], {\n type: value_type,\n })\n }\n\n set_tlm(target_name, packet_name, item_name, value_type) {\n return this.exec('set_tlm', [target_name, packet_name, item_name], {\n type: value_type,\n })\n }\n\n override_tlm(target_name, packet_name, item_name, value_type) {\n return this.exec('override_tlm', [target_name, packet_name, item_name], {\n type: value_type,\n })\n }\n\n get_overrides() {\n return this.exec('get_overrides')\n }\n\n normalize_tlm(target_name, packet_name, item_name, value_type) {\n return this.exec('normalize_tlm', [target_name, packet_name, item_name], {\n type: value_type,\n })\n }\n\n get_all_cmds(target_name) {\n return this.exec('get_all_cmds', [target_name])\n }\n // DEPRECATED for get_all_cmds\n get_all_commands(target_name) {\n return this.exec('get_all_cmds', [target_name])\n }\n\n get_all_cmd_names(target_name, hidden = false) {\n return this.exec('get_all_cmd_names', [target_name], { hidden: hidden })\n }\n // DEPRECATED for get_all_cmd_names\n get_all_command_names(target_name) {\n return this.exec('get_all_cmd_names', [target_name])\n }\n\n get_cmd(target_name, command_name) {\n return this.exec('get_cmd', [target_name, command_name])\n }\n // DEPRECATED for get_cmd\n get_command(target_name, command_name) {\n return this.exec('get_cmd', [target_name, command_name])\n }\n\n get_cmd_cnts(target_commands) {\n return this.exec('get_cmd_cnts', [target_commands])\n }\n\n get_cmd_value(\n target_name,\n packet_name,\n parameter_name,\n value_type = 'CONVERTED',\n ) {\n return this.exec('get_cmd_value', [\n target_name,\n packet_name,\n parameter_name,\n value_type,\n ])\n }\n\n get_cmd_buffer(target_name, packet_name) {\n return this.exec('get_cmd_buffer', [target_name, packet_name])\n }\n\n // Implementation of functionality shared by cmd methods with param_lists.\n _cmd(method, target_name, command_name, param_list, headerOptions) {\n let converted = null\n for (let key in param_list) {\n if (Object.prototype.hasOwnProperty.call(param_list, key)) {\n converted = this.encode_openc3_type(param_list[key])\n if (converted !== null) {\n param_list[key] = converted\n }\n }\n }\n return this.exec(\n method,\n [target_name, command_name, param_list],\n {},\n headerOptions,\n )\n }\n\n get_cmd_hazardous(target_name, command_name, param_list, headerOptions = {}) {\n if (command_name === undefined) {\n return this.exec('get_cmd_hazardous', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'get_cmd_hazardous',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n cmd(target_name, command_name, param_list, headerOptions = {}) {\n if (command_name === undefined) {\n return this.exec('cmd', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'cmd',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n cmd_no_range_check(\n target_name,\n command_name,\n param_list,\n headerOptions = {},\n ) {\n if (command_name === undefined) {\n return this.exec('cmd_no_range_check', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'cmd_no_range_check',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n cmd_raw(target_name, command_name, param_list, headerOptions = {}) {\n if (command_name === undefined) {\n return this.exec('cmd_raw', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'cmd_raw',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n cmd_raw_no_range_check(\n target_name,\n command_name,\n param_list,\n headerOptions = {},\n ) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_range_check', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'cmd_raw_no_range_check',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n cmd_no_hazardous_check(\n target_name,\n command_name,\n param_list,\n headerOptions = {},\n ) {\n if (command_name === undefined) {\n return this.exec('cmd_no_hazardous_check', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'cmd_no_hazardous_check',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n cmd_no_checks(target_name, command_name, param_list, headerOptions = {}) {\n if (command_name === undefined) {\n return this.exec('cmd_no_checks', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'cmd_no_checks',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n cmd_raw_no_hazardous_check(\n target_name,\n command_name,\n param_list,\n headerOptions = {},\n ) {\n if (command_name === undefined) {\n return this.exec(\n 'cmd_raw_no_hazardous_check',\n target_name,\n {},\n headerOptions,\n )\n } else {\n return this._cmd(\n 'cmd_raw_no_hazardous_check',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n cmd_raw_no_checks(target_name, command_name, param_list, headerOptions = {}) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_checks', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'cmd_raw_no_checks',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n build_cmd(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('build_cmd', target_name)\n } else {\n return this._cmd('build_cmd', target_name, command_name, param_list)\n }\n }\n // DEPRECATED for build_cmd\n build_command(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('build_cmd', target_name)\n } else {\n return this._cmd('build_cmd', target_name, command_name, param_list)\n }\n }\n\n get_interface_names() {\n return this.exec('get_interface_names', [])\n }\n\n send_raw(interface_name, data) {\n return this.exec('send_raw', [interface_name, data])\n }\n\n list_configs(tool) {\n return this.exec('list_configs', [tool])\n }\n\n load_config(tool, name) {\n return this.exec('load_config', [tool, name])\n }\n\n save_config(tool, name, data) {\n return this.exec('save_config', [tool, name, data])\n }\n\n delete_config(tool, name) {\n return this.exec('delete_config', [tool, name])\n }\n\n enable_limits(target, packet, item) {\n return this.exec('enable_limits', [target, packet, item])\n }\n\n disable_limits(target, packet, item) {\n return this.exec('disable_limits', [target, packet, item])\n }\n\n get_out_of_limits() {\n return this.exec('get_out_of_limits', [])\n }\n\n get_overall_limits_state(ignored) {\n return this.exec('get_overall_limits_state', [ignored])\n }\n\n list_settings() {\n return this.exec('list_settings', [])\n }\n\n get_all_settings() {\n return this.exec('get_all_settings', [])\n }\n\n get_setting(name, kwparams) {\n return this.exec('get_setting', [name], kwparams)\n }\n\n get_settings(array, kwparams) {\n return this.exec('get_settings', array, kwparams)\n }\n\n set_setting(name, data) {\n return this.exec('set_setting', [name, data])\n }\n\n update_news() {\n return this.exec('update_news', [])\n }\n\n update_plugin_store() {\n return this.exec('update_plugin_store', [])\n }\n\n // DEPRECATED for set_setting\n save_setting(name, data) {\n return this.exec('set_setting', [name, data])\n }\n\n get_metrics() {\n return this.exec('get_metrics', [])\n }\n\n // TODO: Currently unused but seemed like a useful function\n async hashString(string) {\n if (window.isSecureContext) {\n // Encode the string as an arrayBuffer which the subtle crypto API uses\n const arrayBuffer = new TextEncoder().encode(string)\n // Use the subtle crypto API to perform a SHA256 Sum of the array buffer\n // The resulting hash is stored in an array buffer\n const hashAsArrayBuffer = await crypto.subtle.digest(\n 'SHA-256',\n arrayBuffer,\n )\n // To create a string we will get the hexadecimal value of each byte of the array buffer\n // This gets us an array where each byte of the array buffer becomes one item in the array\n const uint8ViewOfHash = new Uint8Array(hashAsArrayBuffer)\n // We then convert it to a regular array so we can convert each item to hexadecimal strings\n // Where to characters of 0-9 or a-f represent a number between 0 and 16, containing 4 bits of information, so 2 of them is 8 bits (1 byte).\n return Array.from(uint8ViewOfHash)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n // else ?\n }\n}\n"],"names":["bind","fn","thisArg","toString","getPrototypeOf","iterator","toStringTag","kindOf","cache","thing","str","kindOfTest","type","typeOfTest","isArray","isUndefined","isBuffer","val","isFunction","isArrayBuffer","isArrayBufferView","result","isString","isNumber","isObject","isBoolean","isPlainObject","prototype","isEmptyObject","isDate","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","trim","forEach","obj","allOwnKeys","i","l","keys","len","key","findKey","_key","_global","isContextDefined","context","merge","caseless","assignValue","targetKey","extend","a","b","stripBOM","content","inherits","constructor","superConstructor","props","descriptors","toFlatObject","sourceObj","destObj","filter","propFilter","prop","merged","endsWith","searchString","position","lastIndex","toArray","arr","isTypedArray","TypedArray","forEachEntry","_iterator","pair","matchAll","regExp","matches","isHTMLForm","toCamelCase","m","p1","p2","hasOwnProperty","isRegExp","reduceDescriptors","reducer","reducedDescriptors","descriptor","name","ret","freezeMethods","value","toObjectSet","arrayOrString","delimiter","define","noop","toFiniteNumber","defaultValue","isSpecCompliantForm","toJSONObject","stack","visit","source","target","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","token","callbacks","data","cb","asap","isIterable","utils$1","AxiosError","message","code","config","request","response","utils","error","customProps","axiosError","httpAdapter","isVisitable","removeBrackets","renderKey","path","dots","isFlatArray","predicates","toFormData","formData","options","option","metaTokens","visitor","defaultVisitor","indexes","useBlob","convertValue","el","index","exposedHelpers","build","encode","charMap","match","AxiosURLSearchParams","params","encoder","_encode","buildURL","url","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","fulfilled","rejected","id","h","transitionalDefaults","URLSearchParams$1","FormData$1","Blob$1","platform$1","URLSearchParams","FormData","Blob","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","origin","platform","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","stringifySafely","rawValue","parser","e","defaults","headers","contentType","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","status","method","ignoreDuplicateOf","parseHeaders","rawHeaders","parsed","line","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","w","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders$1","valueOrRewrite","rewrite","self","setHeader","_value","_header","_rewrite","lHeader","setHeaders","dest","entry","matcher","deleted","deleteHeader","format","normalized","targets","asStrings","first","computed","accessors","defineAccessor","AxiosHeaders","mapped","headerValue","transformData","fns","isCancel","CanceledError","settle","resolve","reject","validateStatus","parseProtocol","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","now","startedAt","bytesCount","passed","throttle","freq","timestamp","threshold","lastArgs","timer","invoke","args","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","loaded","total","progressBytes","rate","inRange","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","isMSIE","cookies","expires","domain","secure","cookie","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","resolveConfig","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","auth","xsrfValue","isXHRAdapterSupported","xhrAdapter","_config","requestData","requestHeaders","responseType","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","done","onloadend","responseHeaders","err","timeoutErrorMessage","cancel","protocol","composeSignals","signals","timeout","length","controller","aborted","onabort","reason","unsubscribe","signal","streamChunk","chunk","chunkSize","pos","end","readBytes","iterable","readStream","stream","reader","trackStream","onProgress","onFinish","_onFinish","loadedBytes","isFetchSupported","isReadableStreamSupported","encodeText","test","supportsRequestStream","duplexAccessed","hasContentType","DEFAULT_CHUNK_SIZE","supportsResponseStream","resolvers","res","_","getBodyLength","body","resolveBodyLength","fetchAdapter","cancelToken","withCredentials","fetchOptions","composedSignal","requestContentLength","_request","contentTypeHeader","flush","isCredentialsSupported","isStreamResponse","responseContentLength","responseData","knownAdapters","renderReason","isResolvedHandle","adapter","adapters","nameOrAdapter","rejectedReasons","reasons","state","s","throwIfCancellationRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","correctSpelling","assertOptions","schema","allowUnknown","Axios$1","instanceConfig","configOrUrl","dummy","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","fullPath","Axios","generateHTTPMethod","isForm","CancelToken$1","CancelToken","executor","resolvePromise","onfulfilled","_resolve","abort","c","spread","callback","isAxiosError","payload","HttpStatusCode","createInstance","defaultConfig","instance","axios","promises","all","Cancel","formToJSON","getAdapter","axiosInstance","refreshed","_a","_c","_b","_e","_d","_g","_f","_j","_i","_h","_k","$cosmosNotify","noAuth","noScope","acceptOnlyDefaultHeaders","fullDefaultHeaders","api","createNanoEvents","event","ReasonError","msg","SubscriptionRejectedError","SubscriptionTimeoutError","DisconnectedError","StaleConnectionError","stringifyParams","k","v","Presence","channel","info","presence","acc","STATE","Channel","receiver","restored","reconnect","action","logger","meta","unbind","clbk","Subscription","ind","intent","nextPending","resolver","lock","top","GlobalLock","Subscriptions","subscribe","sub","localId","remoteId","Hub","left","item","LEVEL_TO_NAME","BaseLogger","level","details","NoopLogger","JSONEncoder","raw","commandID","ActionCableProtocol","cable","subscriptionPayload","identifier","cooldown","retryInterval","sessionId","subscription","ActionCableExtendedProtocol","restoredIds","restoredId","presenceType","pending","req","historyReq","streams","hasStreams","record","epoch","offset","NoConnectionError","GhostChannel","channelId","__publicField","PUBSUB_CHANNEL","PubSubChannel","Cable$1","transport","lazy","hubOptions","performFailures","transportConfigurator","wasIdle","remoteIds","channelErr","processed","ChannelClass","ghostName","channelMeta","performMeta","backoffWithJitter","interval","backoffRate","jitterRatio","maxInterval","attempts","right","delay","deviation","Monitor$1","pingInterval","pollDelay","diff","FallbackTransport","transports","ev","WebSocketTransport","Impl","subprotocol","authStrategy","protocols","newURL","authHeaderKey","DEFAULT_OPTIONS","createCable","websocketImplementation","websocketFormat","websocketOptions","websocketAuthStrategy","fallbacks","logLevel","monitor","reconnectStrategy","maxMissingPings","maxReconnectAttempts","tokenRefresher","historyTimestamp","protocolOptions","concurrentSubscribes","protocolName","protocolEncoderName","Monitor","Cable","watchForExpiredToken","attempted","ActionCableSubscription","ActionCableChannel","channelName","mixin","ActionCableSubscriptions","cableChannel","ActionCableConsumer","Logger","BaseMonitor","visibility","connect","disconnectFrozen","metaPrefixes","defaultUrl","fetchMeta","doc","prefix","element","absoluteWSUrl","generateUrlFromDOM","historyTimestampFromMeta","tokenFromMeta","tokenParamFromMeta","param","DEFAULTS","coreCreateCable","createConsumer","scope","additionalOptions","final_url","ConfigParserError","config_parser","usage","ConfigParserService","min_num_params","max_num_params","string","first_char","last_char","rx","r","input_string","original_filename","yield_non_keyword_lines","remove_quotes","handler","string_concat","lines","numLines","newline","first_item","isInteger","INTEGER_REGEX","NUMBER_REGEX","isSafeNumber","num","valueDigits","extractSignificantDigits","parsedDigits","UnsafeNumberReason","getUnsafeNumberReason","start","getSignificantDigitRange","digits","dot","LosslessNumber","unsafeReason","isLosslessNumber","parseLosslessNumber","revive","json","reviver","reviveValue","reviveArray","reviveObject","object","array","parse","text","parseNumber","parseValue","expectValue","expectEndOfInput","parseObject","codeOpeningBrace","skipWhitespace","initial","codeClosingBrace","eatComma","parseString","throwObjectKeyExpected","eatColon","throwObjectValueExpected","isDeepEqual","throwDuplicateKey","throwObjectKeyOrEndExpected","parseArray","codeOpeningBracket","codeClosingBracket","expectArrayItem","throwArrayItemOrEndExpected","parseNumeric","parseKeyword","isWhitespace","codeDoubleQuote","codeBackslash","escapeChar","escapeCharacters","isHex","throwInvalidUnicodeCharacter","throwInvalidEscapeCharacter","isValidStringCharacter","throwInvalidCharacter","expectEndOfString","codeMinus","expectDigit","codeZero","isNonZeroDigit","isDigit","codeDot","codeLowercaseE","codeUppercaseE","codePlus","codeComma","gotAt","codeColon","numSoFar","chars","got","codeSpace","codeNewline","codeTab","codeReturn","codeNine","codeUppercaseA","codeUppercaseF","codeLowercaseA","codeLowercaseF","codeOne","stringify","replacer","space","numberStringifiers","resolvedSpace","stringifyValue","indent","stringifier","stringifyArray","stringifyObject","childIndent","includeProperty","keyStr","customNumberParser","OpenC3Api","kwparams","headerOptions","needed","offline_access_token","target_name","interface_name","interface_params","command_name","command_params","router_name","target_commands","packet","limits_set","packet_name","hidden","value_type","stale_time","converted","items","cache_timeout","start_time","end_time","kw_args","item_name","item_hash","parameter_name","param_list","tool","ignored","arrayBuffer","hashAsArrayBuffer","uint8ViewOfHash"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,72,73,74,75,76,77]}
1
+ {"version":3,"file":"services.cjs","sources":["../../../node_modules/axios/lib/helpers/bind.js","../../../node_modules/axios/lib/utils.js","../../../node_modules/axios/lib/core/AxiosError.js","../../../node_modules/axios/lib/helpers/null.js","../../../node_modules/axios/lib/helpers/toFormData.js","../../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../../node_modules/axios/lib/helpers/buildURL.js","../../../node_modules/axios/lib/core/InterceptorManager.js","../../../node_modules/axios/lib/defaults/transitional.js","../../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../../node_modules/axios/lib/platform/browser/classes/FormData.js","../../../node_modules/axios/lib/platform/browser/classes/Blob.js","../../../node_modules/axios/lib/platform/browser/index.js","../../../node_modules/axios/lib/platform/common/utils.js","../../../node_modules/axios/lib/platform/index.js","../../../node_modules/axios/lib/helpers/toURLEncodedForm.js","../../../node_modules/axios/lib/helpers/formDataToJSON.js","../../../node_modules/axios/lib/defaults/index.js","../../../node_modules/axios/lib/helpers/parseHeaders.js","../../../node_modules/axios/lib/core/AxiosHeaders.js","../../../node_modules/axios/lib/core/transformData.js","../../../node_modules/axios/lib/cancel/isCancel.js","../../../node_modules/axios/lib/cancel/CanceledError.js","../../../node_modules/axios/lib/core/settle.js","../../../node_modules/axios/lib/helpers/parseProtocol.js","../../../node_modules/axios/lib/helpers/speedometer.js","../../../node_modules/axios/lib/helpers/throttle.js","../../../node_modules/axios/lib/helpers/progressEventReducer.js","../../../node_modules/axios/lib/helpers/isURLSameOrigin.js","../../../node_modules/axios/lib/helpers/cookies.js","../../../node_modules/axios/lib/helpers/isAbsoluteURL.js","../../../node_modules/axios/lib/helpers/combineURLs.js","../../../node_modules/axios/lib/core/buildFullPath.js","../../../node_modules/axios/lib/core/mergeConfig.js","../../../node_modules/axios/lib/helpers/resolveConfig.js","../../../node_modules/axios/lib/adapters/xhr.js","../../../node_modules/axios/lib/helpers/composeSignals.js","../../../node_modules/axios/lib/helpers/trackStream.js","../../../node_modules/axios/lib/adapters/fetch.js","../../../node_modules/axios/lib/adapters/adapters.js","../../../node_modules/axios/lib/core/dispatchRequest.js","../../../node_modules/axios/lib/env/data.js","../../../node_modules/axios/lib/helpers/validator.js","../../../node_modules/axios/lib/core/Axios.js","../../../node_modules/axios/lib/cancel/CancelToken.js","../../../node_modules/axios/lib/helpers/spread.js","../../../node_modules/axios/lib/helpers/isAxiosError.js","../../../node_modules/axios/lib/helpers/HttpStatusCode.js","../../../node_modules/axios/lib/axios.js","../../../node_modules/axios/index.js","../src/services/axios.js","../src/services/api.js","../../../node_modules/nanoevents/index.js","../../../node_modules/@anycable/core/protocol/index.js","../../../node_modules/@anycable/core/stringify-params/index.js","../../../node_modules/@anycable/core/channel/presence.js","../../../node_modules/@anycable/core/channel/index.js","../../../node_modules/@anycable/core/hub/index.js","../../../node_modules/@anycable/core/logger/index.js","../../../node_modules/@anycable/core/encoder/index.js","../../../node_modules/@anycable/core/action_cable/index.js","../../../node_modules/@anycable/core/action_cable_ext/index.js","../../../node_modules/@anycable/core/cable/index.js","../../../node_modules/@anycable/core/monitor/index.js","../../../node_modules/@anycable/core/transport/index.js","../../../node_modules/@anycable/core/websocket/index.js","../../../node_modules/@anycable/core/create-cable/index.js","../../../node_modules/@anycable/web/logger/index.js","../../../node_modules/@anycable/web/monitor/index.js","../../../node_modules/@anycable/web/index.js","../src/services/cable.js","../src/services/configParser.js","../../../node_modules/lossless-json/lib/esm/utils.js","../../../node_modules/lossless-json/lib/esm/LosslessNumber.js","../../../node_modules/lossless-json/lib/esm/numberParsers.js","../../../node_modules/lossless-json/lib/esm/revive.js","../../../node_modules/lossless-json/lib/esm/parse.js","../../../node_modules/lossless-json/lib/esm/stringify.js","../src/services/openc3Api.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({fetch, Request, Response}) => ({\n fetch, Request, Response\n }))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n const {fetch, Request, Response} = Object.assign({}, globalFetchAPI, env);\n const isFetchSupported = isFunction(fetch);\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? fetch(request, fetchOptions) : fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, config ? config.env : null);\n\n const {fetch, Request, Response} = env;\n\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters, config) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.12.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport axios from 'axios'\n\nconst axiosInstance = axios.create({\n baseURL: location.origin,\n timeout: 60000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n if (error.response.status === 401) {\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity, true).then(\n function (refreshed) {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n },\n )\n }\n // Individual tools can set 'Ignore-Errors' to an error code\n // they potentially expect, e.g. '500', in which case we ignore it\n // For example in CommandSender.vue:\n // obs = this.api.cmd(targetName, commandName, paramList, {\n // headers: {\n // 'Ignore-Errors': '404',\n // },\n // })\n if (\n error.response.config.headers['Ignore-Errors'] &&\n error.response.config.headers['Ignore-Errors'].includes(\n error.response.status.toString(),\n )\n ) {\n return Promise.reject(error)\n }\n let body = `HTTP ${error.response.status} - `\n if (error.response?.statusText) {\n body += `${error.response.statusText} `\n }\n if (error.response?.config?.data) {\n body += `${error.response.config.data} `\n }\n if (error.response?.data?.message) {\n body += `${error.response.data.message}`\n } else if (error.response?.data?.exception) {\n body += `${error.response.data.exception}`\n } else if (error.response?.data?.error?.message) {\n if (error.response.data.error.class) {\n body += `${error.response.data.error.class} `\n }\n body += `${error.response.data.error.message}`\n } else {\n body += `${error.response?.data}`\n }\n const { $cosmosNotify } = window\n if ($cosmosNotify) {\n $cosmosNotify.serious({\n title: 'Network error',\n body,\n })\n }\n throw error\n } else {\n throw error\n }\n },\n)\n\nexport default axiosInstance\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport axios from './axios'\n\nconst request = async function (\n method,\n url,\n {\n data,\n params = {},\n headers,\n noAuth = false,\n noScope = false,\n onUploadProgress = false,\n } = {},\n) {\n if (!noAuth) {\n try {\n let refreshed = await OpenC3Auth.updateToken(\n OpenC3Auth.defaultMinValidity,\n )\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n } catch (error) {\n OpenC3Auth.login()\n }\n headers['Authorization'] = localStorage.openc3Token\n }\n // Everything from the front-end is manual by default\n // The various api methods decide whether to pass the manual\n // flag to the authorize routine\n headers['manual'] = true\n if (!noScope && !params['scope']) {\n params['scope'] = window.openc3Scope\n }\n return axios({\n method,\n url,\n data,\n params,\n headers,\n onUploadProgress,\n })\n}\n\nconst acceptOnlyDefaultHeaders = {\n Accept: 'application/json',\n}\n\nconst fullDefaultHeaders = {\n ...acceptOnlyDefaultHeaders,\n 'Content-Type': 'application/json',\n}\n\nexport default {\n get: function (\n path,\n {\n params,\n headers = acceptOnlyDefaultHeaders,\n noScope,\n noAuth,\n onUploadProgress,\n } = {},\n ) {\n return request('get', path, {\n params,\n headers,\n noScope,\n noAuth,\n onUploadProgress,\n })\n },\n\n put: function (\n path,\n {\n data,\n params,\n headers = fullDefaultHeaders,\n noScope,\n noAuth,\n onUploadProgress,\n } = {},\n ) {\n return request('put', path, {\n data,\n params,\n headers,\n noScope,\n noAuth,\n onUploadProgress,\n })\n },\n\n post: function (\n path,\n {\n data,\n params,\n headers = fullDefaultHeaders,\n noScope,\n noAuth,\n onUploadProgress,\n } = {},\n ) {\n return request('post', path, {\n data,\n params,\n headers,\n noScope,\n noAuth,\n onUploadProgress,\n })\n },\n\n delete: function (\n path,\n {\n params,\n headers = acceptOnlyDefaultHeaders,\n noScope,\n noAuth,\n onUploadProgress,\n } = {},\n ) {\n return request('delete', path, {\n params,\n headers,\n noScope,\n noAuth,\n onUploadProgress,\n })\n },\n}\n","export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","export class ReasonError extends Error {\n constructor(msg, reason) {\n if (msg instanceof Error) {\n super(msg.message)\n this.cause = msg\n } else {\n super(msg)\n }\n\n this.reason = reason\n this.name = 'ReasonError'\n }\n}\n\nexport class SubscriptionRejectedError extends ReasonError {\n constructor(reason) {\n super('Rejected', reason)\n this.name = 'SubscriptionRejectedError'\n }\n}\n\nexport class SubscriptionTimeoutError extends ReasonError {\n constructor(msg) {\n super(msg || 'Timed out to receive subscription ack')\n this.name = 'SubscriptionTimeoutError'\n }\n}\n\nexport class DisconnectedError extends ReasonError {\n constructor(error, reason) {\n if (reason) {\n super(error, reason)\n } else {\n super('Disconnected', error)\n }\n this.name = 'DisconnectedError'\n }\n}\n\nexport class CommandError extends Error {\n constructor(msg) {\n super(msg)\n this.name = 'CommandError'\n }\n}\n\nexport class StaleConnectionError extends DisconnectedError {\n constructor(msg) {\n super(msg, 'stale_connection')\n this.name = 'StaleConnectionError'\n }\n}\n","export function stringifyParams(params) {\n if (!params) return ''\n\n let parts = Object.keys(params)\n .sort()\n .filter(k => params[k] !== undefined)\n .map(k => {\n let v = JSON.stringify(params[k])\n return `${JSON.stringify(k)}:${v}`\n })\n\n return `{${parts.join(',')}}`\n}\n","// Presence encapsulates the presence tracking logic for the channel.\nexport class Presence {\n constructor(channel) {\n this.channel = channel\n this.listeners = []\n }\n\n watch() {\n this.listeners.push(\n this.channel.on('presence', msg => {\n if (msg.type === 'info') {\n if (!this._state) {\n this._state = this.stateFromInfo(msg)\n }\n return\n }\n\n if (!this._state) return\n\n if (msg.type === 'join') {\n this._state[msg.id] = msg.info\n } else if (msg.type === 'leave') {\n delete this._state[msg.id]\n }\n })\n )\n }\n\n // Reset the state to make sure the fresh one is\n // requested the next time info() is called\n reset() {\n delete this._state\n }\n\n dispose() {\n delete this._info\n delete this._state\n\n this.listeners.forEach(listener => listener())\n this.listeners.length = 0\n }\n\n async join(id, info) {\n if (this._info) return undefined\n\n this._info = { id, info }\n return this.channel.perform('$presence:join', this._info)\n }\n\n async leave() {\n if (!this._info) return undefined\n\n let res = await this.channel.perform('$presence:leave')\n\n delete this._info\n\n return res\n }\n\n async info() {\n if (this._state) return this._state\n\n if (!this._promise) {\n this._promise = this._sync()\n }\n\n await this._promise\n\n return this._state\n }\n\n async _sync() {\n this.watch()\n\n try {\n let presence = await this.channel.perform('$presence:info', {})\n\n this._state = this.stateFromInfo(presence)\n\n return this._state\n } finally {\n delete this._promise\n }\n }\n\n stateFromInfo(presence) {\n return presence.records.reduce((acc, { id, info }) => {\n acc[id] = info\n return acc\n }, {})\n }\n}\n","/*eslint n/no-unsupported-features/es-syntax: [\"error\", {version: \"14.0\"}] */\nimport { createNanoEvents } from 'nanoevents'\n\nimport { ReasonError } from '../protocol/index.js'\nimport { stringifyParams } from '../stringify-params/index.js'\nimport { Presence } from './presence.js'\n\nconst STATE = Symbol('state')\n\nexport class Channel {\n // Unique channel identifier\n // static identifier = ''\n\n constructor(params = {}) {\n this.emitter = createNanoEvents()\n this.params = Object.freeze(params)\n this.presence = new Presence(this)\n\n this.initialConnect = true\n\n this[STATE] = 'idle'\n }\n\n get identifier() {\n if (this._identifier) return this._identifier\n\n // Use Action Cable identifiers as internal identifiers for channels\n this._identifier = stringifyParams({\n channel: this.channelId,\n ...this.params\n })\n\n return this._identifier\n }\n\n get channelId() {\n return this.constructor.identifier\n }\n\n get state() {\n return this[STATE]\n }\n\n attached(receiver) {\n if (this.receiver) {\n if (this.receiver !== receiver) {\n throw Error('Already connected to a different receiver')\n }\n\n return false\n }\n\n this.receiver = receiver\n return true\n }\n\n connecting() {\n this[STATE] = 'connecting'\n }\n\n connected() {\n if (this.state === 'connected') return\n if (this.state === 'closed') return\n\n this[STATE] = 'connected'\n\n let restored = false\n\n if (this.initialConnect) {\n this.initialConnect = false\n this.emit('connect', { reconnect: false, restored })\n } else {\n this.emit('connect', { reconnect: true, restored })\n }\n }\n\n restored() {\n if (this.state === 'connected') throw Error('Already connected')\n\n this[STATE] = 'connected'\n\n let restored = true\n let reconnect = true\n\n this.initialConnect = false\n\n this.emit('connect', { reconnect, restored })\n }\n\n disconnected(err) {\n if (this.state === 'disconnected' || this.state === 'closed') return\n\n this[STATE] = 'disconnected'\n\n this.presence.reset()\n\n this.emit('disconnect', err)\n }\n\n closed(err) {\n if (this.state === 'closed') return\n\n this[STATE] = 'closed'\n delete this.receiver\n\n this.initialConnect = true\n\n this.presence.dispose()\n\n this.emit('close', err)\n }\n\n disconnect() {\n if (this.state === 'idle' || this.state === 'closed') {\n return\n }\n\n this.receiver.unsubscribe(this)\n }\n\n async perform(action, payload) {\n if (this.state === 'idle' || this.state === 'closed') {\n throw Error('Channel is not subscribed')\n }\n\n return this.receiver.perform(this.identifier, action, payload)\n }\n\n async send(payload) {\n return this.perform(undefined, payload)\n }\n\n async whisper(payload) {\n try {\n await this.perform('$whisper', payload)\n } catch (e) {\n let logger = this.receiver ? this.receiver.logger : null\n if (logger) {\n logger.warn('whisper failed: ', e)\n }\n }\n }\n\n receive(msg, meta) {\n this.emit('message', msg, meta)\n }\n\n on(event, callback) {\n return this.emitter.on(event, callback)\n }\n\n once(event, callback) {\n let unbind = this.emitter.on(event, (...args) => {\n unbind()\n callback(...args)\n })\n return unbind\n }\n\n emit(event, ...args) {\n return this.emitter.emit(event, ...args)\n }\n\n ensureSubscribed() {\n if (this.state === 'connected') return Promise.resolve()\n\n if (this.state === 'closed') {\n return Promise.reject(Error('Channel is unsubscribed'))\n }\n\n return this.pendingSubscribe()\n }\n\n // This promise resolves when subscription is confirmed\n // and rejects when rejected or closed.\n // It ignores disconnect events.\n pendingSubscribe() {\n if (this._pendingSubscribe) return this._pendingSubscribe\n\n this._pendingSubscribe = new Promise((resolve, reject) => {\n let unbind = [() => delete this._pendingSubscribe]\n\n unbind.push(\n this.on('connect', () => {\n unbind.forEach(clbk => clbk())\n resolve()\n })\n )\n unbind.push(\n this.on('close', err => {\n unbind.forEach(clbk => clbk())\n reject(\n err ||\n new ReasonError(\n 'Channel was disconnected before subscribing',\n 'canceled'\n )\n )\n })\n )\n })\n\n return this._pendingSubscribe\n }\n}\n","export class Subscription {\n constructor(id) {\n this.id = id\n this.intent = 'unsubscribed'\n this.state = 'idle'\n this.channels = []\n this.disposed = false\n this._pendings = []\n }\n\n add(channel) {\n if (this.channels.includes(channel)) return\n\n this.channels.push(channel)\n }\n\n remove(channel) {\n let ind = this.channels.indexOf(channel)\n\n if (ind > -1) this.channels.splice(ind, 1)\n }\n\n notify(state, ...args) {\n // TODO: Should we get rid of restored state completely?\n this.state = state === 'restored' ? 'connected' : state\n\n if (args.length === 1) {\n this.channels.forEach(channel => channel[state](args[0]))\n } else {\n this.channels.forEach(channel => channel[state]())\n }\n }\n\n pending(intent) {\n this._checkIntent(intent)\n\n let nextPending = this._pendings[0]\n\n if (!nextPending || nextPending.intent !== intent) return Promise.resolve()\n\n return nextPending.promise\n }\n\n ensureResubscribed() {\n if (this.disposed) return\n\n this.intent = undefined\n\n this.ensureSubscribed()\n }\n\n ensureSubscribed() {\n if (this.intent === 'subscribed') return\n if (this.disposed) throw Error('Subscription is disposed')\n\n this.intent = 'subscribed'\n\n let merged = this._mergeWithPending('unsubscribed')\n if (merged) return\n\n this.subscriber(this)\n }\n\n maybeUnsubscribe() {\n if (this.disposed) return\n if (this.intent === 'unsubscribed') return\n\n if (this.channels.length > 0) return\n\n this.intent = 'unsubscribed'\n\n let merged = this._mergeWithPending('subscribed')\n if (merged) return\n\n this.unsubscriber(this)\n }\n\n async acquire(intent) {\n this._checkIntent(intent)\n\n let resolver\n let promise = new Promise(resolve => {\n resolver = resolve\n })\n\n let lock = {\n promise,\n intent,\n release: () => {\n this._pendings.splice(this._pendings.indexOf(lock), 1)\n resolver(lock)\n },\n canceled: false,\n acquired: false\n }\n\n let top = this._pendingTop\n\n this._pendings.push(lock)\n\n if (top) {\n await top.promise\n }\n\n if (this.gvl) {\n await this.gvl.acquire(lock, intent)\n }\n\n lock.acquired = true\n return lock\n }\n\n close(err) {\n this.disposed = true\n this.intent = undefined\n this.notify('closed', err)\n }\n\n _checkIntent(event) {\n if (event === 'unsubscribed' || event === 'subscribed') return\n\n throw Error(`Unknown subscription intent: ${event}`)\n }\n\n get _pendingTop() {\n return this._pendings.length\n ? this._pendings[this._pendings.length - 1]\n : undefined\n }\n\n _mergeWithPending(intent) {\n let top = this._pendingTop\n if (!top) return false\n if (top.acquired) return false\n if (top.intent !== intent) return false\n\n this._pendings.pop()\n top.canceled = true\n return true\n }\n}\n\n// Use to limit concurrent actions\nclass GlobalLock {\n constructor() {\n this.queue = []\n }\n\n async acquire(lock, intent) {\n // We currently only limit subscribe commands\n if (intent !== 'subscribed') return\n\n this.queue.push(\n lock.promise.then(() => {\n this.queue.splice(this.queue.indexOf(lock), 1)\n })\n )\n\n if (this.queue.length > 1) {\n await this.queue[this.queue.length - 2]\n }\n }\n}\n\nexport class Subscriptions {\n constructor(opts) {\n if (opts.concurrentSubscribes === false) {\n this.glv = new GlobalLock()\n }\n this._subscriptions = {}\n this._localToRemote = {}\n }\n\n all() {\n return Object.values(this._subscriptions)\n }\n\n get(id) {\n return this._subscriptions[id]\n }\n\n create(id, { subscribe, unsubscribe }) {\n let sub = (this._subscriptions[id] = new Subscription(id))\n sub.remoteId = this._localToRemote[id]\n sub.subscriber = subscribe\n sub.unsubscriber = unsubscribe\n sub.gvl = this.glv\n\n return sub\n }\n\n remove(id) {\n delete this._subscriptions[id]\n delete this._localToRemote[id]\n }\n\n storeRemoteId(localId, remoteId) {\n this._localToRemote[localId] = remoteId\n\n let sub = this.get(localId)\n if (sub) sub.remoteId = remoteId\n }\n}\n\nexport class Hub {\n constructor(opts = {}) {\n this.subscriptions = new Subscriptions(opts)\n this._pendingMessages = []\n this._remoteToLocal = {}\n }\n\n subscribe(localId, remoteId) {\n this._remoteToLocal[remoteId] = localId\n\n this.subscriptions.storeRemoteId(localId, remoteId)\n\n this.flush(remoteId)\n }\n\n unsubscribe(localId) {\n let sub = this.subscriptions.get(localId)\n if (!sub) return\n\n let remoteId = sub.remoteId\n if (remoteId) delete this._remoteToLocal[remoteId]\n\n this.subscriptions.remove(localId)\n }\n\n transmit(id, msg, meta) {\n let localId = this._remoteToLocal[id]\n\n if (!localId) {\n this._pendingMessages.push([id, msg, meta])\n return\n }\n\n let sub = this.subscriptions.get(localId)\n\n if (!sub) return\n\n sub.channels.forEach(channel => {\n channel.receive(msg, meta)\n })\n }\n\n notify(id, event, payload) {\n let localId = this._remoteToLocal[id]\n\n if (!localId) {\n return\n }\n\n let sub = this.subscriptions.get(localId)\n\n if (!sub) return\n\n sub.channels.forEach(channel => channel.emit(event, payload))\n }\n\n close() {\n this._pendingMessages.length = 0\n }\n\n get size() {\n return this.channels.length\n }\n\n get channels() {\n return this.subscriptions.all().flatMap(sub => sub.channels)\n }\n\n flush(id) {\n let left = []\n\n for (let item of this._pendingMessages) {\n if (item[0] === id) this.transmit(item[0], item[1], item[2])\n else left.push(item)\n }\n\n this._pendingMessages = left\n }\n}\n","const LEVEL_TO_NAME = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3\n}\n\nexport class BaseLogger {\n constructor(level) {\n this.level = level || 'warn'\n }\n\n log(level, msg, details) {\n if (LEVEL_TO_NAME[level] < LEVEL_TO_NAME[this.level]) return\n\n this.writeLogEntry(level, msg, details)\n }\n\n writeLogEntry() {\n throw Error('Not implemented')\n }\n\n debug(msg, details) {\n this.log('debug', msg, details)\n }\n\n info(msg, details) {\n this.log('info', msg, details)\n }\n\n warn(msg, details) {\n this.log('warn', msg, details)\n }\n\n error(msg, details) {\n this.log('error', msg, details)\n }\n}\n\nexport class NoopLogger extends BaseLogger {\n writeLogEntry() {}\n}\n","/* eslint-disable consistent-return */\n\nexport class JSONEncoder {\n encode(msg) {\n return JSON.stringify(msg)\n }\n\n decode(raw) {\n try {\n return JSON.parse(raw)\n } catch (_e) {}\n }\n}\n","import {\n SubscriptionRejectedError,\n SubscriptionTimeoutError,\n DisconnectedError\n} from '../protocol/index.js'\nimport { stringifyParams } from '../stringify-params/index.js'\nimport { NoopLogger } from '../logger/index.js'\n\nlet commandID = 0\n\nexport class ActionCableProtocol {\n constructor(opts = {}) {\n let { logger } = opts\n this.logger = logger || new NoopLogger()\n this.pendingSubscriptions = {}\n this.pendingUnsubscriptions = {}\n // For how long to wait before sending `subscribe` command\n // in case `unsubscribe` was sent for the same identifier\n this.subscribeCooldownInterval = opts.subscribeCooldownInterval || 250\n // For how long to wait for subscription acknoledgement before trying again\n // (just once).\n this.subscribeRetryInterval = opts.subscribeRetryInterval || 5000\n }\n\n attached(cable) {\n this.cable = cable\n }\n\n subscribe(channel, params) {\n let subscriptionPayload = { channel }\n if (params) {\n Object.assign(subscriptionPayload, params)\n }\n\n let identifier = stringifyParams(subscriptionPayload)\n\n if (this.pendingUnsubscriptions[identifier]) {\n let cooldown = this.subscribeCooldownInterval * 1.5\n this.logger.debug(\n `unsubscribed recently, cooldown for ${cooldown}`,\n identifier\n )\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(this.subscribe(channel, params))\n }, cooldown)\n })\n }\n\n if (this.pendingSubscriptions[identifier]) {\n this.logger.warn('subscription is already pending, skipping', identifier)\n return Promise.reject(Error('Already subscribing'))\n }\n\n let retryInterval = this.subscribeRetryInterval\n\n return new Promise((resolve, reject) => {\n let id = ++commandID\n this.pendingSubscriptions[identifier] = {\n resolve,\n reject,\n id\n }\n\n this.cable.send(this.buildSubscribeRequest(identifier))\n\n this.maybeRetrySubscribe(id, identifier, retryInterval)\n })\n }\n\n buildSubscribeRequest(identifier) {\n return {\n command: 'subscribe',\n identifier\n }\n }\n\n maybeRetrySubscribe(id, identifier, retryInterval) {\n setTimeout(() => {\n let sub = this.pendingSubscriptions[identifier]\n if (!sub) return\n if (sub.id !== id) return\n\n this.logger.warn(\n `no subscription ack received in ${retryInterval}ms, retrying subscribe`,\n identifier\n )\n\n this.cable.send(this.buildSubscribeRequest(identifier))\n\n this.maybeExpireSubscribe(id, identifier, retryInterval)\n }, retryInterval)\n }\n\n maybeExpireSubscribe(id, identifier, retryInterval) {\n setTimeout(() => {\n let sub = this.pendingSubscriptions[identifier]\n if (!sub) return\n if (sub.id !== id) return\n\n delete this.pendingSubscriptions[identifier]\n\n sub.reject(\n new SubscriptionTimeoutError(\n `Haven't received subscription ack in ${\n retryInterval * 2\n }ms for ${identifier}`\n )\n )\n }, retryInterval)\n }\n\n unsubscribe(identifier) {\n this.cable.send({\n command: 'unsubscribe',\n identifier\n })\n\n this.pendingUnsubscriptions[identifier] = true\n\n setTimeout(() => {\n delete this.pendingUnsubscriptions[identifier]\n }, this.subscribeCooldownInterval)\n\n return Promise.resolve()\n }\n\n perform(identifier, action, payload) {\n // Handle whispering separately\n if (action === '$whisper') {\n return this.whisper(identifier, payload)\n }\n\n if (!payload) {\n payload = {}\n }\n\n payload.action = action\n\n this.cable.send({\n command: 'message',\n identifier,\n data: JSON.stringify(payload)\n })\n\n return Promise.resolve()\n }\n\n whisper(identifier, data) {\n this.cable.send({\n command: 'whisper',\n identifier,\n data\n })\n\n return Promise.resolve()\n }\n\n receive(msg) {\n /* eslint-disable consistent-return */\n if (typeof msg !== 'object') {\n this.logger.error('unsupported message format', { message: msg })\n return\n }\n\n let { type, identifier, message, reason, reconnect } = msg\n\n if (type === 'ping') {\n return this.cable.keepalive(msg.message)\n } else {\n // Any incoming message may be considered as a heartbeat\n this.cable.keepalive()\n }\n\n if (type === 'welcome') {\n let sessionId = msg.sid\n\n if (sessionId) this.cable.setSessionId(sessionId)\n\n return this.cable.connected()\n }\n\n if (type === 'disconnect') {\n let err = new DisconnectedError(reason)\n this.reset(err)\n\n if (reconnect === false) {\n this.cable.closed(err)\n } else {\n this.cable.disconnected(err)\n }\n return\n }\n\n if (type === 'confirm_subscription') {\n let subscription = this.pendingSubscriptions[identifier]\n if (!subscription) {\n this.logger.error('subscription not found, unsubscribing', {\n type,\n identifier\n })\n this.unsubscribe(identifier)\n return\n }\n\n delete this.pendingSubscriptions[identifier]\n\n return subscription.resolve(identifier)\n }\n\n if (type === 'reject_subscription') {\n let subscription = this.pendingSubscriptions[identifier]\n if (!subscription) {\n return this.logger.error('subscription not found', { type, identifier })\n }\n\n delete this.pendingSubscriptions[identifier]\n\n return subscription.reject(new SubscriptionRejectedError())\n }\n\n if (message) {\n return { identifier, message }\n }\n\n this.logger.warn(`unknown message type: ${type}`, { message: msg })\n }\n\n reset(err) {\n // Reject pending subscriptions\n for (let identifier in this.pendingSubscriptions) {\n this.pendingSubscriptions[identifier].reject(err)\n }\n\n this.pendingSubscriptions = {}\n }\n\n recoverableClosure() {\n return false\n }\n}\n","import { ActionCableProtocol } from '../action_cable/index.js'\n\nconst now = () => (Date.now() / 1000) | 0\n\nexport class ActionCableExtendedProtocol extends ActionCableProtocol {\n constructor(opts = {}) {\n super(opts)\n\n this.streamsPositions = {}\n this.subscriptionStreams = {}\n this.pendingHistory = {}\n this.pendingPresence = {}\n this.presenceInfo = {}\n this.restoreSince = opts.historyTimestamp\n this.disableSessionRecovery = opts.disableSessionRecovery\n if (this.restoreSince === undefined) this.restoreSince = now()\n this.sessionId = undefined\n this.sendPongs = opts.pongs\n }\n\n reset(err) {\n // Reject pending presence\n for (let identifier in this.pendingPresence) {\n this.pendingPresence[identifier].reject(err)\n }\n\n this.pendingPresence = {}\n\n return super.reset()\n }\n\n receive(msg) {\n /* eslint-disable consistent-return */\n if (typeof msg !== 'object') {\n this.logger.error('unsupported message format', { message: msg })\n return\n }\n\n let { type, identifier, message } = msg\n\n if (type === 'disconnect') {\n // delete sessionID to avoid recovery\n delete this.sessionId\n this.cable.setSessionId('')\n return super.receive(msg)\n }\n\n if (type === 'reject_subscription') {\n return super.receive(msg)\n }\n\n if (type === 'confirm_subscription') {\n if (!this.subscriptionStreams[identifier]) {\n this.subscriptionStreams[identifier] = new Set()\n }\n\n return super.receive(msg)\n }\n\n if (type === 'ping') {\n if (!this.restoreSince === false) {\n this.restoreSince = now()\n }\n\n if (this.sendPongs) {\n this.sendPong()\n }\n\n return this.cable.keepalive(msg.message)\n } else {\n // Any incoming message may be considered as a heartbeat\n this.cable.keepalive()\n }\n\n if (type === 'confirm_history') {\n this.logger.debug('history result received', msg)\n this.cable.notify('history_received', identifier)\n return\n }\n\n if (type === 'reject_history') {\n this.logger.warn('failed to retrieve history', msg)\n this.cable.notify('history_not_found', identifier)\n return\n }\n\n if (type === 'welcome') {\n if (!this.disableSessionRecovery) {\n this.sessionId = msg.sid\n\n if (this.sessionId) this.cable.setSessionId(this.sessionId)\n }\n\n if (msg.restored) {\n let restoredIds =\n msg.restored_ids || Object.keys(this.subscriptionStreams)\n for (let restoredId of restoredIds) {\n this.cable.send({\n identifier: restoredId,\n command: 'history',\n history: this.historyRequestFor(restoredId)\n })\n\n if (this.presenceInfo[restoredId]) {\n this.cable.send({\n identifier: restoredId,\n command: 'join',\n presence: this.presenceInfo[restoredId]\n })\n }\n }\n\n return this.cable.restored(restoredIds)\n }\n\n return this.cable.connected(this.sessionId)\n }\n\n if (type === 'presence') {\n let presenceType = message.type\n\n if (presenceType === 'info') {\n let pending = this.pendingPresence[identifier]\n\n if (pending) {\n delete this.pendingPresence[identifier]\n pending.resolve(message)\n }\n } else if (presenceType === 'error') {\n let pending = this.pendingPresence[identifier]\n\n if (pending) {\n delete this.pendingPresence[identifier]\n pending.reject(new Error('failed to retrieve presence'))\n }\n }\n\n return {\n type,\n identifier,\n message\n }\n }\n\n if (message) {\n let meta = this.trackStreamPosition(\n identifier,\n msg.stream_id,\n msg.epoch,\n msg.offset\n )\n return { identifier, message, meta }\n }\n\n this.logger.warn(`unknown message type: ${type}`, { message: msg })\n }\n\n perform(identifier, action, payload) {\n // Handle presence actions\n switch (action) {\n case '$presence:join':\n return this.join(identifier, payload)\n case '$presence:leave':\n return this.leave(identifier, payload)\n case '$presence:info':\n return this.presence(identifier, payload)\n }\n\n return super.perform(identifier, action, payload)\n }\n\n unsubscribe(identifier) {\n delete this.presenceInfo[identifier]\n\n return super.unsubscribe(identifier)\n }\n\n buildSubscribeRequest(identifier) {\n let req = super.buildSubscribeRequest(identifier)\n\n let historyReq = this.historyRequestFor(identifier)\n\n if (historyReq) {\n req.history = historyReq\n\n this.pendingHistory[identifier] = true\n }\n\n let presence = this.presenceInfo[identifier]\n\n if (presence) {\n req.presence = presence\n }\n\n return req\n }\n\n // TODO: Which error can be non-recoverable?\n recoverableClosure() {\n return !!this.sessionId\n }\n\n historyRequestFor(identifier) {\n let streams = {}\n let hasStreams = false\n\n if (this.subscriptionStreams[identifier]) {\n for (let stream of this.subscriptionStreams[identifier]) {\n let record = this.streamsPositions[stream]\n if (record) {\n hasStreams = true\n streams[stream] = record\n }\n }\n }\n\n if (!hasStreams && !this.restoreSince) return\n\n return { since: this.restoreSince, streams }\n }\n\n trackStreamPosition(identifier, stream, epoch, offset) {\n if (!stream || !epoch) return\n\n if (!this.subscriptionStreams[identifier]) {\n this.subscriptionStreams[identifier] = new Set()\n }\n\n this.subscriptionStreams[identifier].add(stream)\n\n this.streamsPositions[stream] = { epoch, offset }\n\n return { stream, epoch, offset }\n }\n\n // Send pongs asynchrounously—no need to block the main thread\n async sendPong() {\n await new Promise(resolve => setTimeout(resolve, 0))\n // Only send pong if the connection is still open\n if (this.cable.state === 'connected') {\n this.cable.send({ command: 'pong' })\n }\n }\n\n async join(identifier, presence) {\n this.presenceInfo[identifier] = presence\n\n this.cable.send({\n command: 'join',\n identifier,\n presence\n })\n\n return Promise.resolve()\n }\n\n async leave(identifier, presence) {\n delete this.presenceInfo[identifier]\n\n this.cable.send({\n command: 'leave',\n identifier,\n presence\n })\n\n return Promise.resolve()\n }\n\n presence(identifier, data) {\n if (this.pendingPresence[identifier]) {\n this.logger.warn('presence is already pending, skipping', identifier)\n return Promise.reject(Error('presence request is already pending'))\n }\n\n return new Promise((resolve, reject) => {\n this.pendingPresence[identifier] = {\n resolve,\n reject\n }\n\n this.cable.send({\n command: 'presence',\n identifier,\n data\n })\n })\n }\n}\n","/*eslint n/no-unsupported-features/es-syntax: [\"error\", {version: \"14.0\"}] */\nimport { createNanoEvents } from 'nanoevents'\n\nimport { Hub } from '../hub/index.js'\nimport {\n ReasonError,\n DisconnectedError,\n SubscriptionRejectedError\n} from '../protocol/index.js'\nimport { NoopLogger } from '../logger/index.js'\nimport { Channel } from '../channel/index.js'\n\nexport class NoConnectionError extends ReasonError {\n constructor() {\n super('No connection', 'closed')\n this.name = 'NoConnectionError'\n }\n}\n\nexport class GhostChannel extends Channel {\n static identifier = '__ghost__'\n constructor(channelId, params) {\n super(params)\n this.channelId = channelId\n }\n\n set channelId(val) {\n this._channelId = val\n }\n\n get channelId() {\n return this._channelId\n }\n}\n\nexport const PUBSUB_CHANNEL = '$pubsub'\n\nexport class PubSubChannel extends Channel {\n static identifier = PUBSUB_CHANNEL\n\n async perform(action, payload) {\n if (action.startsWith('$')) {\n return super.perform(action, payload)\n }\n\n throw Error('not implemented')\n }\n}\n\nexport const STATE = Symbol('state')\n\nexport class Cable {\n constructor({\n transport,\n protocol,\n encoder,\n logger,\n lazy,\n hubOptions,\n performFailures,\n transportConfigurator\n }) {\n this.emitter = createNanoEvents()\n this.transport = transport\n this.encoder = encoder\n this.logger = logger || new NoopLogger()\n this.protocol = protocol\n this.performFailures = performFailures || 'throw'\n\n this.protocol.attached(this)\n\n this.hub = new Hub(hubOptions || {})\n\n this[STATE] = 'idle'\n\n this.handleClose = this.handleClose.bind(this)\n this.handleIncoming = this.handleIncoming.bind(this)\n\n this.transportConfigurator = transportConfigurator\n this.transport.on('close', this.handleClose)\n this.transport.on('data', this.handleIncoming)\n\n this.initialConnect = true\n this.recovering = false\n\n if (lazy === false) {\n this.connect().catch(() => {})\n }\n }\n\n get state() {\n return this[STATE]\n }\n\n async connect() {\n if (this.state === 'connected') return Promise.resolve()\n if (this.state === 'connecting') {\n return this.pendingConnect()\n }\n\n let wasIdle = this.state === 'idle'\n\n this[STATE] = 'connecting'\n let promise = this.pendingConnect()\n\n this.logger.debug('connecting')\n\n try {\n if (this.transportConfigurator) {\n await this.transportConfigurator(this.transport, {\n initial: wasIdle\n })\n }\n await this.transport.open()\n } catch (err) {\n this.handleClose(err)\n }\n\n return promise\n }\n\n setSessionId(sessionId) {\n this.sessionId = sessionId\n this.transport.setParam('sid', sessionId)\n }\n\n connected() {\n if (this.state === 'connected') return\n\n this.logger.info('connected')\n\n this[STATE] = 'connected'\n\n if (this.recovering) {\n // Make sure channels moved to disconnect state\n this.hub.subscriptions\n .all()\n .forEach(subscription =>\n subscription.notify(\n 'disconnected',\n new DisconnectedError('recovery_failed')\n )\n )\n }\n\n // Re-subscribe channels\n this.hub.subscriptions\n .all()\n .forEach(subscription => this._resubscribe(subscription))\n\n let restored = false\n this.recovering = false\n\n if (this.initialConnect) {\n this.initialConnect = false\n this.emit('connect', { reconnect: false, restored })\n } else {\n this.emit('connect', { reconnect: true, restored })\n }\n }\n\n restored(remoteIds) {\n this.logger.info('connection recovered', { remoteIds })\n\n this[STATE] = 'connected'\n\n this.hub.subscriptions.all().forEach(subscription => {\n if (\n remoteIds &&\n subscription.remoteId &&\n remoteIds.includes(subscription.remoteId)\n ) {\n subscription.notify('restored')\n } else {\n subscription.notify(\n 'disconnected',\n new DisconnectedError('recovery_failed')\n )\n this._resubscribe(subscription)\n }\n })\n\n let reconnect = !this.initialConnect\n let restored = true\n\n this.recovering = false\n this.initialConnect = false\n\n this.emit('connect', { reconnect, restored })\n }\n\n notify(event, identifier, data) {\n if (identifier && typeof identifier !== 'string') {\n data = identifier\n identifier = undefined\n }\n\n // If identifier is present then it's a channel-level notification\n if (!identifier) {\n this.emit('info', { type: event, data })\n } else {\n this.hub.notify(identifier, 'info', { type: event, data })\n }\n }\n\n handleClose(err) {\n this.logger.debug('transport closed', { error: err })\n\n this.disconnected(new DisconnectedError(err, 'transport_closed'))\n }\n\n disconnected(err) {\n if (!(this.state === 'connected' || this.state === 'connecting')) {\n return\n }\n\n this.logger.info('disconnected', { reason: err })\n\n this[STATE] = 'disconnected'\n\n this.recovering = this.protocol.recoverableClosure(err)\n\n if (this.recovering) {\n this.hub.subscriptions\n .all()\n .forEach(subscription => subscription.notify('connecting'))\n } else {\n this.hub.subscriptions.all().forEach(subscription => {\n subscription.notify('disconnected', err)\n })\n }\n\n this.protocol.reset(err)\n this.hub.close()\n this.transport.close()\n\n this.emit('disconnect', err)\n }\n\n closed(reason) {\n if (this.state === 'closed' || this.state === 'idle') return\n\n let err\n\n if (reason) {\n err =\n reason instanceof DisconnectedError\n ? reason\n : new DisconnectedError(reason, undefined)\n }\n\n this.logger.info('closed', { reason: reason || 'user' })\n\n this[STATE] = 'closed'\n\n // Channels must transition to the disconnected phase,\n // since they got reconnected as soon as cable reconnects\n let channelErr = err || new DisconnectedError('cable_closed')\n this.hub.subscriptions\n .all()\n .forEach(subscription => subscription.notify('disconnected', channelErr))\n\n this.hub.close()\n this.protocol.reset()\n this.transport.close()\n\n this.initialConnect = true\n\n this.emit('close', err)\n }\n\n disconnect() {\n this.closed()\n }\n\n handleIncoming(raw) {\n if (this.state === 'closed' || this.state === 'idle') {\n return\n }\n\n let data = this.encoder.decode(raw)\n\n if (data === undefined) {\n this.logger.error('failed to decode message', { message: raw })\n return\n }\n\n this.logger.debug('incoming data', data)\n\n let processed = this.protocol.receive(data)\n\n if (processed) {\n this.logger.debug('processed incoming message', processed)\n\n let { type, identifier, message, meta } = processed\n\n if (type) {\n this.hub.notify(identifier, type, message)\n } else {\n this.hub.transmit(identifier, message, meta)\n }\n }\n }\n\n send(msg) {\n if (this.state === 'closed') {\n throw Error('Cable is closed')\n }\n\n let data = this.encoder.encode(msg)\n\n if (data === undefined) {\n this.logger.error('failed to encode message', { message: msg })\n return\n }\n\n this.logger.debug('outgoing message', msg)\n\n this.transport.send(data)\n }\n\n keepalive(msg) {\n this.emit('keepalive', msg)\n }\n\n streamFrom(name) {\n let channel = new PubSubChannel({ stream_name: name })\n\n return this.subscribe(channel)\n }\n\n streamFromSigned(name) {\n let channel = new PubSubChannel({ signed_stream_name: name })\n\n return this.subscribe(channel)\n }\n\n subscribeTo(ChannelClass, params) {\n let channel\n let ghostName\n\n if (typeof ChannelClass === 'string') {\n ghostName = ChannelClass\n ChannelClass = GhostChannel\n }\n\n channel = ghostName\n ? new ChannelClass(ghostName, params)\n : new ChannelClass(params)\n\n return this.subscribe(channel)\n }\n\n subscribe(channel) {\n // Return if channel has been already attached to the cable\n if (!channel.attached(this)) return channel\n\n let identifier = channel.identifier\n\n channel.connecting()\n\n let subscription =\n this.hub.subscriptions.get(identifier) ||\n this.hub.subscriptions.create(identifier, {\n subscribe: sub => {\n return this._subscribe(sub, channel.channelId, channel.params)\n },\n unsubscribe: sub => this._unsubscribe(sub)\n })\n\n subscription.add(channel)\n\n if (\n subscription.intent === 'subscribed' &&\n subscription.state === 'connected'\n ) {\n channel.connected()\n }\n\n subscription.ensureSubscribed()\n\n return channel\n }\n\n async _resubscribe(subscription) {\n if (subscription.intent !== 'subscribed') return\n\n let channel = subscription.channels[0]\n\n if (!channel) return\n\n subscription.notify('connecting')\n subscription.ensureResubscribed()\n }\n\n async _subscribe(subscription, channelId, params) {\n let identifier = subscription.id\n\n if (this.state === 'idle') {\n // Trigger connection initialization if it is lazy\n this.connect().catch(() => {})\n }\n\n // We will call _subscribe again as soon as cable connected\n if (this.state !== 'connected') {\n this.logger.debug('cancel subscribe, no connection', { identifier })\n return\n }\n\n this.logger.debug('acquiring subscribe lock', { identifier })\n\n let lock = await subscription.acquire('subscribed')\n if (lock.canceled) {\n this.logger.debug('subscribe lock has been canceled', { identifier })\n lock.release()\n return\n }\n\n this.logger.debug('subscribe lock has been acquired', { identifier })\n\n if (subscription.intent !== 'subscribed') {\n this.logger.debug('cancel subscribe request, already unsubscribed')\n lock.release()\n return\n }\n\n // We need to check one more time after a lock has been acquired\n if (this.state !== 'connected') {\n this.logger.debug('cancel subscribe, no connection', { identifier })\n lock.release()\n return\n }\n\n // Finally, check whether we already connected — then we can skip the action\n if (subscription.state === 'connected') {\n this.logger.debug('already connected, skip subscribe command', {\n identifier\n })\n subscription.notify('connected')\n lock.release()\n return\n }\n\n let channelMeta = {\n identifier: channelId,\n params\n }\n\n this.logger.debug('subscribing', channelMeta)\n\n try {\n let remoteId = await this.protocol.subscribe(channelId, params)\n\n this.hub.subscribe(identifier, remoteId)\n\n this.logger.debug('subscribed', { ...channelMeta, remoteId })\n subscription.notify('connected')\n } catch (err) {\n if (err) {\n if (err instanceof SubscriptionRejectedError) {\n this.logger.warn('rejected', channelMeta)\n }\n\n if (err instanceof DisconnectedError) {\n this.logger.debug(\n 'disconnected during subscription; will retry on connect',\n channelMeta\n )\n lock.release()\n return\n }\n\n this.logger.error('failed to subscribe', {\n error: err,\n ...channelMeta\n })\n }\n\n subscription.close(err)\n this.hub.unsubscribe(identifier)\n }\n\n lock.release()\n }\n\n unsubscribe(channel) {\n let identifier = channel.identifier\n\n let subscription = this.hub.subscriptions.get(identifier)\n\n if (!subscription) {\n throw Error(`Subscription not found: ${identifier}`)\n }\n\n subscription.remove(channel)\n channel.closed()\n\n subscription.maybeUnsubscribe()\n }\n\n async _unsubscribe(subscription) {\n let identifier = subscription.id\n\n this.logger.debug('acquiring unsubscribe lock', { identifier })\n\n let lock = await subscription.acquire('unsubscribed')\n if (lock.canceled) {\n this.logger.debug('unsubscribe lock has been canceled', { identifier })\n lock.release()\n return\n }\n\n this.logger.debug('unsubscribe lock has been acquired', { identifier })\n\n // Check if we still want to unsubscribe\n if (subscription.intent !== 'unsubscribed') {\n this.logger.debug('cancel unsubscribe, no longer needed', {\n identifier,\n intent: subscription.intent\n })\n lock.release()\n return\n }\n\n // Finally, check whether we already disconnected — then we can skip the action\n if (\n subscription.state === 'disconnected' ||\n subscription.state === 'closed'\n ) {\n this.logger.debug(\n `already ${subscription.state} connected, skip unsubscribe command`,\n { identifier }\n )\n lock.release()\n return\n }\n\n let remoteId = subscription.remoteId\n\n this.logger.debug('unsubscribing...', { remoteId })\n\n if (this.state !== 'connected') {\n this.logger.debug('unsubscribe skipped (cable is not connected)', {\n id: identifier\n })\n subscription.close()\n this.hub.unsubscribe(identifier)\n lock.release()\n return\n }\n\n try {\n await this.protocol.unsubscribe(remoteId)\n this.logger.debug('unsubscribed remotely', { id: identifier })\n } catch (err) {\n if (err) {\n // We assume that server unsubscribes subscriptions on disconnect,\n // So we can mark it as closed locally.\n if (err instanceof DisconnectedError) {\n this.logger.debug(\n 'cable disconnected during the unsubscribe command execution',\n { id: identifier, error: err }\n )\n } else {\n this.logger.error('unsubscribe failed', {\n id: identifier,\n error: err\n })\n }\n }\n }\n\n if (subscription.intent === 'unsubscribed') {\n subscription.close()\n this.hub.unsubscribe(identifier)\n } else {\n // We rely on state when performing commands,\n // make sure it's set to closed here (it shouldn't stay connected)\n subscription.state = 'closed'\n }\n\n lock.release()\n }\n\n async perform(identifier, action, payload) {\n if (this.performFailures === 'throw') {\n return this._perform(identifier, action, payload)\n }\n\n try {\n return await this._perform(identifier, action, payload)\n } catch (err) {\n if (this.performFailures === 'warn') {\n this.logger.warn('perform failed', { error: err })\n }\n return undefined\n }\n }\n\n async _perform(identifier, action, payload) {\n if (this.state === 'connecting') {\n await this.pendingConnect()\n }\n\n if (this.state === 'closed' || this.state === 'disconnected') {\n throw new NoConnectionError()\n }\n\n let subscription = this.hub.subscriptions.get(identifier)\n\n if (!subscription) {\n throw Error(`Subscription not found: ${identifier}`)\n }\n\n await subscription.pending('subscribed')\n\n if (subscription.intent !== 'subscribed') {\n throw Error(`Subscription is closed: ${identifier}`)\n }\n\n let remoteId = subscription.remoteId\n\n let performMeta = {\n id: remoteId,\n action,\n payload\n }\n\n this.logger.debug('perform', performMeta)\n\n try {\n let res = await this.protocol.perform(remoteId, action, payload)\n\n if (res) {\n this.logger.debug('perform result', {\n message: res,\n request: performMeta\n })\n }\n\n return res\n } catch (err) {\n this.logger.error('perform failed', {\n error: err,\n request: performMeta\n })\n\n throw err\n }\n }\n\n on(event, callback) {\n return this.emitter.on(event, callback)\n }\n\n once(event, callback) {\n let unbind = this.emitter.on(event, (...args) => {\n unbind()\n callback(...args)\n })\n return unbind\n }\n\n emit(event, ...args) {\n return this.emitter.emit(event, ...args)\n }\n\n pendingConnect() {\n if (this._pendingConnect) return this._pendingConnect\n\n this._pendingConnect = new Promise((resolve, reject) => {\n let unbind = [() => delete this._pendingConnect]\n\n unbind.push(\n this.on('connect', () => {\n unbind.forEach(clbk => clbk())\n resolve()\n })\n )\n unbind.push(\n this.on('close', err => {\n unbind.forEach(clbk => clbk())\n reject(err)\n })\n )\n unbind.push(\n this.on('disconnect', err => {\n unbind.forEach(clbk => clbk())\n reject(err)\n })\n )\n })\n\n return this._pendingConnect\n }\n}\n","/*eslint n/no-unsupported-features/es-syntax: [\"error\", {version: \"14.0\"}] */\nimport { StaleConnectionError } from '../protocol/index.js'\nimport { NoopLogger } from '../logger/index.js'\n\nconst defaults = {\n maxMissingPings: 2,\n maxReconnectAttempts: Infinity\n}\n\nconst now = () => Date.now()\n\nexport const backoffWithJitter = (interval, opts) => {\n opts = opts || {}\n let { backoffRate, jitterRatio, maxInterval } = opts\n backoffRate = backoffRate || 2\n if (jitterRatio === undefined) jitterRatio = 0.5\n\n return attempts => {\n let left = interval * backoffRate ** attempts\n let right = left * backoffRate\n\n let delay = left + (right - left) * Math.random()\n\n let deviation = 2 * (Math.random() - 0.5) * jitterRatio\n\n delay = delay * (1 + deviation)\n\n if (maxInterval && maxInterval < delay) delay = maxInterval\n\n return delay\n }\n}\n\nexport class Monitor {\n constructor({ pingInterval, ...opts }) {\n this.pingInterval = pingInterval\n\n if (!this.pingInterval) {\n throw Error(`Incorrect pingInterval is provided: ${pingInterval}`)\n }\n\n opts = Object.assign({}, defaults, opts)\n\n this.strategy = opts.reconnectStrategy\n if (!this.strategy) {\n throw Error('Reconnect strategy must be provided')\n }\n\n this.maxMissingPings = opts.maxMissingPings\n this.maxReconnectAttempts = opts.maxReconnectAttempts\n this.logger = opts.logger || new NoopLogger()\n\n this.state = 'pending_connect'\n this.attempts = 0\n this.disconnectedAt = now()\n }\n\n watch(target) {\n this.target = target\n this.initListeners()\n }\n\n reconnectNow() {\n if (\n this.state === 'connected' ||\n this.state === 'pending_connect' ||\n this.state === 'closed'\n ) {\n return false\n }\n\n this.cancelReconnect()\n\n this.state = 'pending_connect'\n this.target.connect().catch(err => {\n this.logger.info('Failed at reconnecting: ' + err)\n })\n\n return true\n }\n\n initListeners() {\n this.unbind = []\n\n this.unbind.push(\n this.target.on('connect', () => {\n this.attempts = 0\n this.pingedAt = now()\n this.state = 'connected'\n\n this.cancelReconnect()\n this.startPolling()\n })\n )\n\n this.unbind.push(\n this.target.on('disconnect', () => {\n this.disconnectedAt = now()\n this.state = 'disconnected'\n\n this.stopPolling()\n this.scheduleReconnect()\n })\n )\n\n this.unbind.push(\n this.target.on('close', () => {\n this.disconnectedAt = now()\n this.state = 'closed'\n\n this.cancelReconnect()\n this.stopPolling()\n })\n )\n\n this.unbind.push(\n this.target.on('keepalive', () => {\n this.pingedAt = now()\n })\n )\n\n this.unbind.push(() => {\n this.cancelReconnect()\n this.stopPolling()\n })\n }\n\n dispose() {\n delete this.target\n if (this.unbind) {\n this.unbind.forEach(clbk => clbk())\n }\n delete this.unbind\n }\n\n startPolling() {\n if (this.pollId) {\n clearTimeout(this.pollId)\n }\n\n let pollDelay =\n this.pingInterval + (Math.random() - 0.5) * this.pingInterval * 0.5\n\n this.pollId = setTimeout(() => {\n this.checkStale()\n if (this.state === 'connected') this.startPolling()\n }, pollDelay)\n }\n\n stopPolling() {\n if (this.pollId) {\n clearTimeout(this.pollId)\n }\n }\n\n checkStale() {\n let diff = now() - this.pingedAt\n\n if (diff > this.maxMissingPings * this.pingInterval) {\n this.logger.warn(`Stale connection: ${diff}ms without pings`)\n this.state = 'pending_disconnect'\n this.target.disconnected(new StaleConnectionError())\n }\n }\n\n scheduleReconnect() {\n if (this.attempts >= this.maxReconnectAttempts) {\n this.target.close()\n return\n }\n\n let delay = this.strategy(this.attempts)\n\n this.attempts++\n\n this.logger.info(`Reconnecting in ${delay}ms (${this.attempts} attempt)`)\n\n this.state = 'pending_reconnect'\n\n this.reconnnectId = setTimeout(() => this.reconnectNow(), delay)\n }\n\n cancelReconnect() {\n if (this.reconnnectId) {\n clearTimeout(this.reconnnectId)\n delete this.reconnnectId\n }\n }\n}\n","import { createNanoEvents } from 'nanoevents'\n\nimport { NoopLogger } from '../logger/index.js'\n\nexport class FallbackTransport {\n constructor(transports, opts = {}) {\n this.transports = transports\n this.transport = null\n this.emitter = createNanoEvents()\n this.unbind = []\n\n this.logger = opts.logger || new NoopLogger()\n }\n\n displayName() {\n return 'fallbacked transport'\n }\n\n async open() {\n for (let i = 0; i < this.transports.length; i++) {\n let transport = this.transports[i]\n try {\n this.transport = transport\n this.resetListeners()\n this.logger.debug(`Trying to connect via ${transport.displayName()}`)\n await transport.open()\n this.logger.debug(`Connected via ${transport.displayName()}`)\n return\n } catch (e) {\n this.logger.debug(\n `Failed to connect via ${transport.displayName()}: ${e.message}`\n )\n }\n }\n\n this.transport = null\n this.resetListeners()\n throw new Error(`Couldn't connect via any available transport`)\n }\n\n send(data) {\n if (!this.transport) {\n throw new Error('No transport is open')\n }\n\n this.transport.send(data)\n }\n\n async close() {\n if (!this.transport) {\n throw new Error('No transport is open')\n }\n\n await this.transport.close()\n this.transport = null\n }\n\n setURL() {\n throw new Error('Not implemented. Set URL for each transport separately')\n }\n\n setParam(key, val) {\n this.transports.forEach(transport => {\n transport.setParam(key, val)\n })\n }\n\n setToken(val, name) {\n this.transports.forEach(transport => {\n transport.setToken(val, name)\n })\n }\n\n on(event, callback) {\n return this.emitter.on(event, callback)\n }\n\n once(event, callback) {\n let unbind = this.emitter.on(event, (...args) => {\n unbind()\n callback(...args)\n })\n return unbind\n }\n\n get url() {\n if (!this.transport) return ''\n\n return this.transport.url\n }\n\n resetListeners() {\n this.unbind.forEach(clbk => clbk())\n this.unbind.length = 0\n\n if (!this.transport) return\n\n this.unbind.push(\n this.transport.on('open', () => {\n this.emitter.emit('open')\n }),\n this.transport.on('data', data => {\n this.emitter.emit('data', data)\n }),\n this.transport.on('close', ev => {\n this.emitter.emit('close', ev)\n }),\n this.transport.on('error', ev => {\n this.emitter.emit('error', ev)\n })\n )\n }\n}\n","import { createNanoEvents } from 'nanoevents'\n\nexport class WebSocketTransport {\n constructor(url, opts = {}) {\n this.url = url\n\n let Impl = opts.websocketImplementation\n\n if (Impl) {\n this.Impl = Impl\n } else if (typeof WebSocket !== 'undefined') {\n this.Impl = WebSocket\n } else {\n throw new Error('No WebSocket support')\n }\n\n this.connected = false\n this.emitter = createNanoEvents()\n\n let { format, subprotocol, authStrategy } = opts\n\n this.format = format || 'text'\n this.connectionOptions = opts.websocketOptions\n this.authStrategy = authStrategy || 'param'\n this.authProtocol = ''\n this.subprotocol = subprotocol\n }\n\n displayName() {\n return 'WebSocket(' + this.url + ')'\n }\n\n open() {\n let protocols = this.subprotocol\n if (this.authStrategy === 'sub-protocol') {\n protocols = [this.subprotocol, this.authProtocol]\n }\n if (this.connectionOptions) {\n this.ws = new this.Impl(this.url, protocols, this.connectionOptions)\n } else {\n this.ws = new this.Impl(this.url, protocols)\n }\n this.ws.binaryType = 'arraybuffer'\n this.initListeners()\n\n return new Promise((resolve, reject) => {\n let unbind = []\n\n unbind.push(\n this.once('open', () => {\n unbind.forEach(clbk => clbk())\n resolve()\n })\n )\n\n unbind.push(\n this.once('close', () => {\n unbind.forEach(clbk => clbk())\n reject(Error('WS connection closed'))\n })\n )\n })\n }\n\n setURL(url) {\n this.url = url\n }\n\n setParam(key, val) {\n let url = new URL(this.url)\n url.searchParams.set(key, val)\n let newURL = `${url.protocol}//${url.host}${url.pathname}?${url.searchParams}`\n this.setURL(newURL)\n }\n\n setToken(val, key = 'jid') {\n if (this.authStrategy === 'param') {\n this.setParam(key, val)\n } else if (this.authStrategy === 'header') {\n this.connectionOptions = this.connectionOptions || {}\n this.connectionOptions.headers = this.connectionOptions.headers || {}\n\n let authHeaderKey = `x-${key}`.toLowerCase()\n\n // find existing auth header key (it could have a different case)\n let existingKey = Object.keys(this.connectionOptions.headers).find(\n k => k.toLowerCase() === authHeaderKey\n )\n authHeaderKey = existingKey || authHeaderKey\n\n this.connectionOptions.headers[authHeaderKey] = val\n } else if (this.authStrategy === 'sub-protocol') {\n this.authProtocol = `anycable-token.${val}`\n } else {\n throw new Error('Unknown auth strategy: ' + this.authStrategy)\n }\n }\n\n send(data) {\n if (!this.ws || !this.connected) {\n throw Error('WebSocket is not connected')\n } else {\n this.ws.send(data)\n }\n }\n\n close() {\n if (this.ws) {\n this.onclose()\n } else {\n this.connected = false\n }\n }\n\n on(event, callback) {\n return this.emitter.on(event, callback)\n }\n\n once(event, callback) {\n let unbind = this.emitter.on(event, (...args) => {\n unbind()\n callback(...args)\n })\n return unbind\n }\n\n initListeners() {\n this.ws.onerror = event => {\n // Only emit errors if the socket hasn't been closed\n if (this.connected) {\n this.emitter.emit('error', event.error || new Error('WS Error'))\n }\n }\n\n this.ws.onclose = () => {\n this.onclose()\n }\n\n this.ws.onmessage = event => {\n let data = event.data\n if (this.format === 'binary') {\n data = new Uint8Array(data)\n }\n\n this.emitter.emit('data', data)\n }\n\n this.ws.onopen = () => {\n this.connected = true\n this.emitter.emit('open')\n }\n }\n\n onclose() {\n this.ws.onclose = undefined\n this.ws.onmessage = undefined\n this.ws.onopen = undefined\n this.ws.close()\n delete this.ws\n this.connected = false\n\n this.emitter.emit('close')\n }\n}\n","import { Cable, GhostChannel } from '../cable/index.js'\nimport { ActionCableProtocol } from '../action_cable/index.js'\nimport { ActionCableExtendedProtocol } from '../action_cable_ext/index.js'\nimport { JSONEncoder } from '../encoder/index.js'\nimport { NoopLogger } from '../logger/index.js'\nimport { WebSocketTransport } from '../websocket/index.js'\nimport { Monitor, backoffWithJitter } from '../monitor/index.js'\nimport { SubscriptionRejectedError } from '../protocol/index.js'\nimport { FallbackTransport } from '../transport/index.js'\n\nexport const DEFAULT_OPTIONS = {\n protocol: 'actioncable-v1-json',\n pingInterval: 3000,\n maxReconnectAttempts: Infinity,\n maxMissingPings: 2,\n logLevel: 'warn',\n lazy: true\n}\n\nexport function createCable(url, opts) {\n if (typeof url === 'object' && typeof opts === 'undefined') {\n opts = url\n url = undefined\n }\n\n opts = opts || {}\n\n if (!url && !opts.transport) throw Error('URL or transport must be specified')\n\n opts = Object.assign({}, DEFAULT_OPTIONS, opts)\n\n let {\n protocol,\n websocketImplementation,\n websocketFormat,\n websocketOptions,\n websocketAuthStrategy,\n fallbacks,\n logLevel,\n logger,\n transport,\n encoder,\n lazy,\n monitor,\n pingInterval,\n reconnectStrategy,\n maxMissingPings,\n maxReconnectAttempts,\n subprotocol,\n tokenRefresher,\n historyTimestamp,\n protocolOptions,\n concurrentSubscribes,\n performFailures,\n transportConfigurator,\n auth\n } = opts\n\n logger = logger || new NoopLogger(logLevel)\n\n if (typeof protocol === 'string') {\n subprotocol = subprotocol || protocol\n\n // split protocol into two parts by last '-' symbol\n // e.g. actioncable-v1-json -> actioncable-v1, json\n let protocolName = protocol.substring(0, protocol.lastIndexOf('-'))\n let protocolEncoderName = protocol.substring(protocol.lastIndexOf('-') + 1)\n\n protocolOptions = protocolOptions || {}\n\n if (protocolName === 'actioncable-v1') {\n protocol = new ActionCableProtocol({ logger, ...protocolOptions })\n } else if (protocolName === 'actioncable-v1-ext') {\n protocol = new ActionCableExtendedProtocol({\n logger,\n historyTimestamp,\n ...protocolOptions\n })\n } else {\n throw Error(`Protocol is not supported yet: ${protocol}`)\n }\n\n if (protocolEncoderName === 'json') {\n encoder = encoder || new JSONEncoder()\n websocketFormat = websocketFormat || 'text'\n } else if (protocolEncoderName === 'msgpack') {\n websocketFormat = 'binary'\n if (!encoder) {\n throw Error(\n 'Msgpack encoder must be specified explicitly. Use `@anycable/msgpack-encoder` package or build your own'\n )\n }\n } else if (protocolEncoderName === 'protobuf') {\n websocketFormat = websocketFormat || 'binary'\n if (!encoder) {\n throw Error(\n 'Protobuf encoder must be specified explicitly. Use `@anycable/protobuf-encoder` package or build your own'\n )\n }\n } else {\n throw Error(`Protocol is not supported yet: ${protocol}`)\n }\n }\n\n if (!protocol) throw Error('Protocol must be specified')\n\n transport =\n transport ||\n new WebSocketTransport(url, {\n websocketImplementation,\n websocketOptions,\n subprotocol,\n authStrategy: websocketAuthStrategy,\n format: websocketFormat\n })\n\n if (fallbacks) {\n transport = new FallbackTransport([transport, ...fallbacks], { logger })\n }\n\n if (auth && auth.token) {\n transport.setToken(auth.token, auth.param || 'jid')\n }\n\n reconnectStrategy = reconnectStrategy || backoffWithJitter(pingInterval)\n\n if (monitor !== false) {\n monitor =\n monitor ||\n new Monitor({\n pingInterval,\n reconnectStrategy,\n maxMissingPings,\n maxReconnectAttempts,\n logger\n })\n }\n\n let hubOptions = { concurrentSubscribes }\n\n let cable = new Cable({\n protocol,\n transport,\n encoder,\n logger,\n lazy,\n hubOptions,\n performFailures,\n transportConfigurator\n })\n\n if (monitor) {\n monitor.watch(cable)\n cable.monitor = monitor\n }\n\n if (tokenRefresher) {\n watchForExpiredToken(cable, async () => {\n try {\n await tokenRefresher(transport)\n } catch (err) {\n logger.error('Failed to refresh authentication token: ' + err)\n return false\n }\n\n // Initiate cable connection.\n // No need to wait for it to complete, it could\n // fail due to network errors (which is not our responsibility)\n cable.connect().catch(() => {})\n\n return true\n })\n }\n\n return cable\n}\n\nfunction watchForExpiredToken(cable, callback) {\n let attempted = false\n\n cable.on('connect', () => (attempted = false))\n\n cable.on('close', async ev => {\n if (!ev) return\n\n // If we closed by server two times in a row\n if (attempted) {\n cable.logger.warn('Token auto-refresh is disabled', ev)\n return\n }\n\n if (ev.reason === 'token_expired') {\n attempted = true\n\n await callback()\n }\n })\n}\n\n// Wrapper over ActionCableChannel that acts like an Action Cable subscription object\nclass ActionCableSubscription {\n constructor(channel) {\n this.channel = channel\n }\n\n notify(callback, ...args) {\n if (typeof this[callback] !== 'function') return\n\n this[callback](...args)\n }\n\n perform(action, data = {}) {\n this.channel.perform(action, data)\n }\n\n send(data) {\n this.channel.send(data)\n }\n\n get identifier() {\n return this.channel.identifier\n }\n\n unsubscribe() {\n return this.channel.disconnect()\n }\n}\n\nclass ActionCableChannel extends GhostChannel {\n constructor(channelName, params, mixin) {\n super(channelName, params)\n\n this.subscription = new ActionCableSubscription(this)\n Object.assign(this.subscription, mixin)\n\n this.on('connect', ({ reconnect }) =>\n this.subscription.notify('connected', { reconnected: reconnect })\n )\n this.on('disconnect', () =>\n this.subscription.notify('disconnected', { allowReconnect: true })\n )\n this.on('message', val => this.subscription.notify('received', val))\n this.on('close', err => {\n if (err && err instanceof SubscriptionRejectedError) {\n this.subscription.notify('rejected')\n } else {\n this.subscription.notify('disconnected', { allowReconnect: false })\n }\n })\n }\n}\n\nexport class ActionCableSubscriptions {\n constructor(cable) {\n this.cable = cable\n }\n\n create(channel, mixin) {\n let channelName\n let params\n\n if (typeof channel === 'object') {\n channelName = channel.channel\n delete channel.channel\n params = channel\n } else {\n channelName = channel\n params = {}\n }\n\n let cableChannel = new ActionCableChannel(channelName, params, mixin)\n cableChannel.subscription.notify('initialized')\n\n this.cable.subscribe(cableChannel)\n\n return cableChannel.subscription\n }\n\n findAll(identifier) {\n return this.cable.hub.channels\n .filter(channel => channel.identifier === identifier)\n .map(channel => channel.subscription)\n }\n}\n\nexport class ActionCableConsumer {\n constructor(cable) {\n this.cable = cable\n this.subscriptions = new ActionCableSubscriptions(cable)\n }\n}\n\nexport function createConsumer(url, opts) {\n let cable = createCable(url, opts)\n\n return new ActionCableConsumer(cable)\n}\n","import { BaseLogger } from '@anycable/core'\n\n/* eslint-disable no-console */\nexport class Logger extends BaseLogger {\n writeLogEntry(level, msg, details) {\n if (details) {\n console[level](msg, details)\n } else {\n console[level](msg)\n }\n }\n}\n","import { Monitor as BaseMonitor, DisconnectedError } from '@anycable/core'\n\nexport class Monitor extends BaseMonitor {\n watch(cable) {\n super.watch(cable)\n\n this.initActivityListeners()\n }\n\n initActivityListeners() {\n if (\n typeof document !== 'undefined' &&\n typeof window !== 'undefined' &&\n document.addEventListener &&\n window.addEventListener\n ) {\n let visibility = () => {\n if (!document.hidden) {\n if (this.reconnectNow()) {\n this.logger.debug('Trigger reconnect due to visibility change')\n }\n }\n }\n let connect = event => {\n if (this.reconnectNow()) {\n this.logger.debug('Trigger reconnect', { event })\n }\n }\n let disconnectFrozen = () =>\n this.disconnect(new DisconnectedError('page_frozen'))\n\n document.addEventListener('visibilitychange', visibility, false)\n window.addEventListener('focus', connect, false)\n window.addEventListener('online', connect, false)\n window.addEventListener('resume', connect, false)\n window.addEventListener('freeze', disconnectFrozen, false)\n\n this.unbind.push(() => {\n document.removeEventListener('visibilitychange', visibility, false)\n window.removeEventListener('focus', connect, false)\n window.removeEventListener('online', connect, false)\n window.removeEventListener('resume', connect, false)\n window.removeEventListener('freeze', disconnectFrozen, false)\n })\n }\n }\n\n disconnect(err) {\n if (this.state === 'disconnected' || this.state === 'closed') return\n\n this.logger.info('Disconnecting', { reason: err.message })\n\n this.cancelReconnect()\n this.stopPolling()\n\n this.state = 'pending_disconnect'\n this.target.disconnected(err)\n }\n}\n","import {\n createCable as coreCreateCable,\n backoffWithJitter,\n DEFAULT_OPTIONS as DEFAULTS,\n ActionCableConsumer\n} from '@anycable/core'\n\nimport { Logger } from './logger/index.js'\nimport { Monitor } from './monitor/index.js'\n\nexport { Channel } from '@anycable/core'\n\nconst metaPrefixes = ['cable', 'action-cable']\n\nconst defaultUrl = '/cable'\n\n/* eslint-disable consistent-return */\nconst fetchMeta = (doc, key) => {\n for (let prefix of metaPrefixes) {\n let element = doc.head.querySelector(`meta[name='${prefix}-${key}']`)\n\n if (element) {\n return element.getAttribute('content')\n }\n }\n}\n\nconst absoluteWSUrl = path => {\n if (path.match(/wss?:\\/\\//)) return path\n\n if (typeof window !== 'undefined') {\n let proto = window.location.protocol.replace('http', 'ws')\n\n return `${proto}//${window.location.host}${path}`\n }\n\n return path\n}\n\n/* eslint-disable consistent-return */\nconst generateUrlFromDOM = () => {\n if (typeof document !== 'undefined' && document.head) {\n let url = fetchMeta(document, 'url')\n if (url) {\n return absoluteWSUrl(url)\n }\n }\n\n return absoluteWSUrl(defaultUrl)\n}\n\nconst historyTimestampFromMeta = () => {\n if (typeof document !== 'undefined' && document.head) {\n let value = fetchMeta(document, 'history-timestamp')\n\n if (value) {\n return value | 0\n }\n }\n}\n\nconst tokenFromMeta = () => {\n if (typeof document !== 'undefined' && document.head) {\n return fetchMeta(document, 'token')\n }\n}\n\nconst tokenParamFromMeta = () => {\n if (typeof document !== 'undefined' && document.head) {\n return fetchMeta(document, 'token-param')\n }\n}\n\nexport function createCable(url, opts) {\n if (typeof url === 'object' && typeof opts === 'undefined') {\n opts = url\n url = undefined\n }\n\n url = url || generateUrlFromDOM()\n opts = opts || {}\n\n opts.historyTimestamp ||= historyTimestampFromMeta()\n\n let token = tokenFromMeta()\n\n if (token) {\n let param = tokenParamFromMeta()\n opts.auth = Object.assign({ token, param }, opts.auth || {})\n }\n\n opts = Object.assign({}, DEFAULTS, opts)\n\n let {\n logLevel,\n logger,\n pingInterval,\n reconnectStrategy,\n maxMissingPings,\n maxReconnectAttempts\n } = opts\n\n logger = opts.logger = opts.logger || new Logger(logLevel)\n reconnectStrategy = opts.reconnectStrategy =\n opts.reconnectStrategy || backoffWithJitter(pingInterval)\n\n if (opts.monitor !== false) {\n opts.monitor =\n opts.monitor ||\n new Monitor({\n pingInterval,\n reconnectStrategy,\n maxMissingPings,\n maxReconnectAttempts,\n logger\n })\n }\n\n return coreCreateCable(url, opts)\n}\n\nexport function createConsumer(url, opts) {\n let cable = createCable(url, opts)\n\n return new ActionCableConsumer(cable)\n}\n\nexport function fetchTokenFromHTML(opts) {\n let url = opts ? opts.url : undefined\n\n if (!url) {\n if (typeof window !== 'undefined') {\n url = window.location.href\n } else {\n throw Error('An URL to fetch the HTML with a token MUST be specified')\n }\n }\n\n return async transport => {\n let response = await fetch(url, {\n credentials: 'same-origin',\n cache: 'no-cache',\n headers: {\n 'Accept': 'text/html, application/xhtml+xml',\n 'X-ANYCABLE-OPERATION': 'token-refresh'\n }\n })\n\n if (!response.ok) {\n throw Error(\n 'Failed to fetch a page to refresh a token: ' + response.status\n )\n }\n\n let html = await response.text()\n\n let doc = new DOMParser().parseFromString(html, 'text/html')\n\n let newURL = fetchMeta(doc, 'url')\n let newToken = fetchMeta(doc, 'token')\n let newTokenParam = fetchMeta(doc, 'token-param')\n\n if (newURL || newToken) {\n if (newURL) transport.setURL(newURL)\n if (newToken) transport.setToken(newToken, newTokenParam)\n } else {\n throw Error(\"Couldn't find a token on the page\")\n }\n }\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { createConsumer } from '@anycable/web'\n\nexport default class Cable {\n constructor(url = '/openc3-api/cable') {\n this._cable = null\n this._url = url\n }\n disconnect() {\n if (this._cable) {\n this._cable.cable.disconnect()\n this._cable = null\n }\n }\n createSubscription(channel, scope, callbacks = {}, additionalOptions = {}) {\n return OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(\n (refreshed) => {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n if (this._cable == null) {\n let final_url =\n this._url +\n '?scope=' +\n encodeURIComponent(scope) +\n '&authorization=' +\n encodeURIComponent(localStorage.openc3Token)\n final_url = new URL(final_url, document.baseURI).href\n this._cable = createConsumer(final_url)\n }\n return this._cable.subscriptions.create(\n {\n channel,\n ...additionalOptions,\n },\n callbacks,\n )\n },\n )\n }\n recordPing() {\n // Noop with Anycable\n }\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nexport class ConfigParserError {\n constructor(config_parser, message, usage = '', url = '') {\n this.keyword = config_parser.keyword\n this.parameters = config_parser.parameters\n this.filename = config_parser.filename\n this.line = config_parser.line\n this.lineNumber = config_parser.lineNumber\n this.message = message\n this.usage = usage\n this.url = url\n }\n}\n\nexport class ConfigParserService {\n keyword = null\n parameters = []\n filename = ''\n line = ''\n lineNumber = 0\n url = 'https://docs.openc3.com/docs/configuration'\n\n constructor() {}\n\n verify_num_parameters(min_num_params, max_num_params, usage = '') {\n // This syntax works with 0 because each doesn't return any values\n // for a backwards range\n for (let index = 1; index <= min_num_params; index++) {\n // If the parameter is nil (0 based) then we have a problem\n if (this.parameters[index - 1] === undefined) {\n throw new ConfigParserError(\n this,\n `Not enough parameters for ${this.keyword}.`,\n usage,\n this.url,\n )\n }\n }\n // If they pass null for max_params we don't check for a maximum number\n if (max_num_params && this.parameters[max_num_params] !== undefined) {\n throw new ConfigParserError(\n this,\n `Too many parameters for ${this.keyword}.`,\n usage,\n this.url,\n )\n }\n }\n\n remove_quotes(string) {\n if (string.length < 2) {\n return string\n }\n let first_char = string.charAt(0)\n if (first_char !== '\"' && first_char !== \"'\") {\n return string\n }\n let last_char = string.charAt(string.length - 1)\n if (first_char !== last_char) {\n return string\n }\n return string.substring(1, string.length - 1)\n }\n\n scan_string(string, rx) {\n if (!rx.global) throw \"rx must have 'global' flag set\"\n let r = []\n string.replace(rx, function (match) {\n r.push(match)\n return match\n })\n return r\n }\n\n parse_string(\n input_string,\n original_filename,\n yield_non_keyword_lines,\n remove_quotes,\n handler,\n ) {\n let string_concat = false\n this.line = ''\n this.keyword = null\n this.parameters = []\n this.filename = original_filename\n\n // Break string into lines\n let lines = input_string.split('\\n')\n let numLines = lines.length\n\n for (let i = 0; i < numLines; i++) {\n this.lineNumber = i + 1\n let line = lines[i].trim()\n // Ensure the line length is not 0\n if (line.length === 0) {\n if (yield_non_keyword_lines) {\n handler(null, [], this.line, this.lineNumber)\n }\n continue\n }\n\n if (string_concat === true) {\n // Skip comment lines after a string concatenation\n if (line[0] === '#') {\n continue\n }\n // Remove the opening quote if we're continuing the line\n line = line.substring(1, line.length)\n }\n\n // Check for string continuation\n let last_char = line.charAt(line.length - 1)\n let newline = false\n switch (last_char) {\n case '+': // String concatenation with newlines\n newline = true\n // Deliberate fall through\n case '\\\\': // String concatenation\n // Trim off the concat character plus any spaces, e.g. \"line\" \\\n let trim = line.substring(0, line.length - 1).trim()\n // Now trim off the last quote so it will flow into the next line\n this.line += trim.substring(0, trim.length - 1)\n if (newline) {\n this.line += '\\n'\n }\n string_concat = true\n continue\n case '&': // Line continuation\n this.line += line.substring(0, line.length - 1)\n continue\n default:\n this.line += line\n }\n string_concat = false\n\n let rx = /(\"([^\\\\\"]|\\\\.)*\")|('([^\\\\']|\\\\.)*')|\\S+/g\n let data = this.scan_string(this.line, rx)\n let first_item = ''\n if (data.length > 0) {\n first_item = first_item + data[0]\n }\n\n if (first_item.length === 0 || first_item.charAt(0) === '#') {\n this.keyword = null\n } else {\n this.keyword = first_item.toUpperCase()\n }\n this.parameters = []\n\n // Ignore lines without keywords: comments and blank lines\n if (this.keyword === null) {\n if (yield_non_keyword_lines) {\n handler(this.keyword, this.parameters, this.line, this.lineNumber)\n }\n this.line = ''\n continue\n }\n\n let length = data.length\n if (length > 1) {\n for (let index = 1; index < length; index++) {\n let string = data[index]\n\n // Don't process trailing comments such as:\n // KEYWORD PARAM #This is a comment\n if (string.length > 0 && string.charAt(0) === '#') {\n break\n }\n if (remove_quotes) {\n this.parameters.push(this.remove_quotes(string))\n } else {\n this.parameters.push(string)\n }\n }\n }\n handler(this.keyword, this.parameters, this.line, this.lineNumber)\n this.line = ''\n } // for all the lines\n } // parse_string\n} // class ConfigParserService\n","/**\n * Test whether a string contains an integer number\n */\nexport function isInteger(value) {\n return INTEGER_REGEX.test(value);\n}\nconst INTEGER_REGEX = /^-?[0-9]+$/;\n\n/**\n * Test whether a string contains a number\n * http://stackoverflow.com/questions/13340717/json-numbers-regular-expression\n */\nexport function isNumber(value) {\n return NUMBER_REGEX.test(value);\n}\nconst NUMBER_REGEX = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/;\n\n/**\n * Test whether a string can be safely represented with a number\n * without information loss.\n *\n * When approx is true, floating point numbers that lose a few digits but\n * are still approximately equal in value are considered safe too.\n * Integer numbers must still be exactly equal.\n */\nexport function isSafeNumber(value, config) {\n if (isInteger(value)) {\n return Number.isSafeInteger(Number.parseInt(value, 10));\n }\n const num = Number.parseFloat(value);\n const parsed = String(num);\n if (value === parsed) {\n return true;\n }\n const valueDigits = extractSignificantDigits(value);\n const parsedDigits = extractSignificantDigits(parsed);\n if (valueDigits === parsedDigits) {\n return true;\n }\n if (config?.approx === true) {\n // A value is approximately equal when:\n // 1. it is a floating point number, not an integer\n // 2. it has at least 14 digits\n // 3. the first 14 digits are equal\n const requiredDigits = 14;\n if (!isInteger(value) && parsedDigits.length >= requiredDigits && valueDigits.startsWith(parsedDigits.substring(0, requiredDigits))) {\n return true;\n }\n }\n return false;\n}\nexport let UnsafeNumberReason = /*#__PURE__*/function (UnsafeNumberReason) {\n UnsafeNumberReason[\"underflow\"] = \"underflow\";\n UnsafeNumberReason[\"overflow\"] = \"overflow\";\n UnsafeNumberReason[\"truncate_integer\"] = \"truncate_integer\";\n UnsafeNumberReason[\"truncate_float\"] = \"truncate_float\";\n return UnsafeNumberReason;\n}({});\n\n/**\n * When the provided value is an unsafe number, describe what the reason is:\n * overflow, underflow, truncate_integer, or truncate_float.\n * Returns undefined when the value is safe.\n */\nexport function getUnsafeNumberReason(value) {\n if (isSafeNumber(value, {\n approx: false\n })) {\n return undefined;\n }\n if (isInteger(value)) {\n return UnsafeNumberReason.truncate_integer;\n }\n const num = Number.parseFloat(value);\n if (!Number.isFinite(num)) {\n return UnsafeNumberReason.overflow;\n }\n if (num === 0) {\n return UnsafeNumberReason.underflow;\n }\n return UnsafeNumberReason.truncate_float;\n}\n\n/**\n * Convert a string into a number when it is safe to do so.\n * Throws an error otherwise, explaining the reason.\n */\nexport function toSafeNumberOrThrow(value, config) {\n const number = Number.parseFloat(value);\n const unsafeReason = getUnsafeNumberReason(value);\n if (config?.approx === true ? unsafeReason && unsafeReason !== UnsafeNumberReason.truncate_float : unsafeReason) {\n const unsafeReasonText = unsafeReason?.replace(/_\\w+$/, '');\n throw new Error(`Cannot safely convert to number: the value '${value}' would ${unsafeReasonText} and become ${number}`);\n }\n return number;\n}\n\n/**\n * Split a number into sign, digits, and exponent.\n * The value can be constructed again from a split number by inserting a dot\n * at the second character of the digits if there is more than one digit,\n * prepending it with the sign, and appending the exponent like `e${exponent}`\n */\nexport function splitNumber(value) {\n const match = value.match(/^(-?)(\\d+\\.?\\d*)([eE]([+-]?\\d+))?$/);\n if (!match) {\n throw new SyntaxError(`Invalid number: ${value}`);\n }\n const sign = match[1];\n const digitsStr = match[2];\n let exponent = match[4] !== undefined ? Number.parseInt(match[4], 10) : 0;\n const dot = digitsStr.indexOf('.');\n exponent += dot !== -1 ? dot - 1 : digitsStr.length - 1;\n const digits = digitsStr.replace('.', '') // remove the dot (must be removed before removing leading zeros)\n .replace(/^0*/, zeros => {\n // remove leading zeros, add their count to the exponent\n exponent -= zeros.length;\n return '';\n }).replace(/0*$/, ''); // remove trailing zeros\n\n return digits.length > 0 ? {\n sign,\n digits,\n exponent\n } : {\n sign,\n digits: '0',\n exponent: exponent + 1\n };\n}\n\n/**\n * Compare two strings containing a numeric value\n * Returns 1 when a is larger than b, 0 when they are equal,\n * and -1 when a is smaller than b.\n */\nexport function compareNumber(a, b) {\n if (a === b) {\n return 0;\n }\n const aa = splitNumber(a);\n const bb = splitNumber(b);\n const sign = aa.sign === '-' ? -1 : 1;\n if (aa.sign !== bb.sign) {\n if (aa.digits === '0' && bb.digits === '0') {\n return 0;\n }\n return sign;\n }\n if (aa.exponent !== bb.exponent) {\n return aa.exponent > bb.exponent ? sign : aa.exponent < bb.exponent ? -sign : 0;\n }\n return aa.digits > bb.digits ? sign : aa.digits < bb.digits ? -sign : 0;\n}\n\n/**\n * Count the significant digits of a number.\n *\n * For example:\n * '2.34' returns 3\n * '-77' returns 2\n * '0.003400' returns 2\n * '120.5e+30' returns 4\n **/\nexport function countSignificantDigits(value) {\n const {\n start,\n end\n } = getSignificantDigitRange(value);\n const dot = value.indexOf('.');\n if (dot === -1 || dot < start || dot > end) {\n return end - start;\n }\n return end - start - 1;\n}\n\n/**\n * Get the significant digits of a number.\n *\n * For example:\n * '2.34' returns '234'\n * '-77' returns '77'\n * '0.003400' returns '34'\n * '120.5e+30' returns '1205'\n **/\nexport function extractSignificantDigits(value) {\n const {\n start,\n end\n } = getSignificantDigitRange(value);\n const digits = value.substring(start, end);\n const dot = digits.indexOf('.');\n if (dot === -1) {\n return digits;\n }\n return digits.substring(0, dot) + digits.substring(dot + 1);\n}\n\n/**\n * Returns the range (start to end) of the significant digits of a value.\n * Note that this range _may_ contain the decimal dot.\n *\n * For example:\n *\n * getSignificantDigitRange('0.0325900') // { start: 3, end: 7 }\n * getSignificantDigitRange('2.0300') // { start: 0, end: 3 }\n * getSignificantDigitRange('0.0') // { start: 3, end: 3 }\n *\n */\nfunction getSignificantDigitRange(value) {\n let start = 0;\n if (value[0] === '-') {\n start++;\n }\n while (value[start] === '0' || value[start] === '.') {\n start++;\n }\n let end = value.lastIndexOf('e');\n if (end === -1) {\n end = value.lastIndexOf('E');\n }\n if (end === -1) {\n end = value.length;\n }\n while ((value[end - 1] === '0' || value[end - 1] === '.') && end > start) {\n end--;\n }\n return {\n start,\n end\n };\n}\n//# sourceMappingURL=utils.js.map","import { compareNumber, countSignificantDigits, getUnsafeNumberReason, isInteger, isNumber, UnsafeNumberReason } from './utils.js';\n\n/**\n * A lossless number. Stores its numeric value as string\n */\nexport class LosslessNumber {\n // numeric value as string\n\n // type information\n isLosslessNumber = true;\n constructor(value) {\n if (!isNumber(value)) {\n throw new Error(`Invalid number (value: \"${value}\")`);\n }\n this.value = value;\n }\n\n /**\n * Get the value of the LosslessNumber as number or bigint.\n *\n * - a number is returned for safe numbers and decimal values that only lose some insignificant digits\n * - a bigint is returned for big integer numbers\n * - an Error is thrown for values that will overflow or underflow\n *\n * Note that you can implement your own strategy for conversion by just getting the value as string\n * via .toString(), and using util functions like isInteger, isSafeNumber, getUnsafeNumberReason,\n * and toSafeNumberOrThrow to convert it to a numeric value.\n */\n valueOf() {\n const unsafeReason = getUnsafeNumberReason(this.value);\n\n // safe or truncate_float\n if (unsafeReason === undefined || unsafeReason === UnsafeNumberReason.truncate_float) {\n return Number.parseFloat(this.value);\n }\n\n // truncate_integer\n if (isInteger(this.value)) {\n return BigInt(this.value);\n }\n\n // overflow or underflow\n throw new Error(`Cannot safely convert to number: the value '${this.value}' would ${unsafeReason} and become ${Number.parseFloat(this.value)}`);\n }\n\n /**\n * Get the value of the LosslessNumber as string.\n */\n toString() {\n return this.value;\n }\n\n // Note: we do NOT implement a .toJSON() method, and you should not implement\n // or use that, it cannot safely turn the numeric value in the string into\n // stringified JSON since it has to be parsed into a number first.\n}\n\n/**\n * Test whether a value is a LosslessNumber\n */\nexport function isLosslessNumber(value) {\n // @ts-expect-error\n return value && typeof value === 'object' && value.isLosslessNumber || false;\n}\n\n/**\n * Convert a number into a LosslessNumber if this is possible in a safe way\n * If the value has too many digits, or is NaN or Infinity, an error will be thrown\n */\nexport function toLosslessNumber(value) {\n const maxDigits = 15;\n if (countSignificantDigits(String(value)) > maxDigits) {\n throw new Error(`Invalid number: contains more than 15 digits and is most likely truncated and unsafe by itself (value: ${value})`);\n }\n if (Number.isNaN(value)) {\n throw new Error('Invalid number: NaN');\n }\n if (!Number.isFinite(value)) {\n throw new Error(`Invalid number: ${value}`);\n }\n return new LosslessNumber(String(value));\n}\n\n/**\n * Compare two lossless numbers.\n * Returns 1 when a is larger than b, 0 when they are equal,\n * and -1 when a is smaller than b.\n */\nexport function compareLosslessNumber(a, b) {\n return compareNumber(a.value, b.value);\n}\n//# sourceMappingURL=LosslessNumber.js.map","import { LosslessNumber } from './LosslessNumber.js';\nimport { isInteger } from './utils.js';\nexport function parseLosslessNumber(value) {\n return new LosslessNumber(value);\n}\nexport function parseNumberAndBigInt(value) {\n return isInteger(value) ? BigInt(value) : Number.parseFloat(value);\n}\n//# sourceMappingURL=numberParsers.js.map","import { isLosslessNumber } from './LosslessNumber.js';\n/**\n * Revive a json object.\n * Applies the reviver function recursively on all values in the JSON object.\n * @param json A JSON Object, Array, or value\n * @param reviver\n * A reviver function invoked with arguments `key` and `value`,\n * which must return a replacement value. The function context\n * (`this`) is the Object or Array that contains the currently\n * handled value.\n */\nexport function revive(json, reviver) {\n return reviveValue({\n '': json\n }, '', json, reviver);\n}\n\n/**\n * Revive a value\n */\nfunction reviveValue(context, key, value, reviver) {\n if (Array.isArray(value)) {\n return reviver.call(context, key, reviveArray(value, reviver));\n }\n if (value && typeof value === 'object' && !isLosslessNumber(value)) {\n // note the special case for LosslessNumber,\n // we don't want to iterate over the internals of a LosslessNumber\n return reviver.call(context, key, reviveObject(value, reviver));\n }\n return reviver.call(context, key, value);\n}\n\n/**\n * Revive the properties of an object\n */\nfunction reviveObject(object, reviver) {\n for (const key of Object.keys(object)) {\n const value = reviveValue(object, key, object[key], reviver);\n if (value !== undefined) {\n object[key] = value;\n } else {\n delete object[key];\n }\n }\n return object;\n}\n\n/**\n * Revive the properties of an Array\n */\nfunction reviveArray(array, reviver) {\n for (let i = 0; i < array.length; i++) {\n array[i] = reviveValue(array, String(i), array[i], reviver);\n }\n return array;\n}\n//# sourceMappingURL=revive.js.map","import { parseLosslessNumber } from './numberParsers.js';\nimport { revive } from './revive.js';\n/**\n * The LosslessJSON.parse() method parses a string as JSON, optionally transforming\n * the value produced by parsing.\n *\n * The parser is based on the parser of Tan Li Hou shared in\n * https://lihautan.com/json-parser-with-javascript/\n *\n * @param text\n * The string to parse as JSON. See the JSON object for a description of JSON syntax.\n *\n * @param [reviver]\n * If a function, prescribes how the value originally produced by parsing is\n * transformed, before being returned.\n *\n * @param [parseNumber=parseLosslessNumber]\n * Pass a custom number parser. Input is a string, and the output can be unknown\n * numeric value: number, bigint, LosslessNumber, or a custom BigNumber library.\n *\n * @returns Returns the Object corresponding to the given JSON text.\n *\n * @throws Throws a SyntaxError exception if the string to parse is not valid JSON.\n */\nexport function parse(text, reviver) {\n let parseNumber = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : parseLosslessNumber;\n let i = 0;\n const value = parseValue();\n expectValue(value);\n expectEndOfInput();\n return reviver ? revive(value, reviver) : value;\n function parseObject() {\n if (text.charCodeAt(i) === codeOpeningBrace) {\n i++;\n skipWhitespace();\n const object = {};\n let initial = true;\n while (i < text.length && text.charCodeAt(i) !== codeClosingBrace) {\n if (!initial) {\n eatComma();\n skipWhitespace();\n } else {\n initial = false;\n }\n const start = i;\n const key = parseString();\n if (key === undefined) {\n throwObjectKeyExpected();\n return; // To make TS happy\n }\n skipWhitespace();\n eatColon();\n const value = parseValue();\n if (value === undefined) {\n throwObjectValueExpected();\n return; // To make TS happy\n }\n\n // biome-ignore lint/suspicious/noPrototypeBuiltins: TODO: replace with hasOwn one day, when browser support is high enough\n if (Object.prototype.hasOwnProperty.call(object, key) && !isDeepEqual(value, object[key])) {\n // Note that we could also test `if(key in object) {...}`\n // or `if (object[key] !== 'undefined') {...}`, but that is slower.\n throwDuplicateKey(key, start + 1);\n }\n object[key] = value;\n }\n if (text.charCodeAt(i) !== codeClosingBrace) {\n throwObjectKeyOrEndExpected();\n }\n i++;\n return object;\n }\n }\n function parseArray() {\n if (text.charCodeAt(i) === codeOpeningBracket) {\n i++;\n skipWhitespace();\n const array = [];\n let initial = true;\n while (i < text.length && text.charCodeAt(i) !== codeClosingBracket) {\n if (!initial) {\n eatComma();\n } else {\n initial = false;\n }\n const value = parseValue();\n expectArrayItem(value);\n array.push(value);\n }\n if (text.charCodeAt(i) !== codeClosingBracket) {\n throwArrayItemOrEndExpected();\n }\n i++;\n return array;\n }\n }\n function parseValue() {\n skipWhitespace();\n const value = parseString() ?? parseNumeric() ?? parseObject() ?? parseArray() ?? parseKeyword('true', true) ?? parseKeyword('false', false) ?? parseKeyword('null', null);\n skipWhitespace();\n return value;\n }\n function parseKeyword(name, value) {\n if (text.slice(i, i + name.length) === name) {\n i += name.length;\n return value;\n }\n }\n function skipWhitespace() {\n while (isWhitespace(text.charCodeAt(i))) {\n i++;\n }\n }\n function parseString() {\n if (text.charCodeAt(i) === codeDoubleQuote) {\n i++;\n let result = '';\n while (i < text.length && text.charCodeAt(i) !== codeDoubleQuote) {\n if (text.charCodeAt(i) === codeBackslash) {\n const char = text[i + 1];\n const escapeChar = escapeCharacters[char];\n if (escapeChar !== undefined) {\n result += escapeChar;\n i++;\n } else if (char === 'u') {\n if (isHex(text.charCodeAt(i + 2)) && isHex(text.charCodeAt(i + 3)) && isHex(text.charCodeAt(i + 4)) && isHex(text.charCodeAt(i + 5))) {\n result += String.fromCharCode(Number.parseInt(text.slice(i + 2, i + 6), 16));\n i += 5;\n } else {\n throwInvalidUnicodeCharacter(i);\n }\n } else {\n throwInvalidEscapeCharacter(i);\n }\n } else {\n if (isValidStringCharacter(text.charCodeAt(i))) {\n result += text[i];\n } else {\n throwInvalidCharacter(text[i]);\n }\n }\n i++;\n }\n expectEndOfString();\n i++;\n return result;\n }\n }\n function parseNumeric() {\n const start = i;\n if (text.charCodeAt(i) === codeMinus) {\n i++;\n expectDigit(start);\n }\n if (text.charCodeAt(i) === codeZero) {\n i++;\n } else if (isNonZeroDigit(text.charCodeAt(i))) {\n i++;\n while (isDigit(text.charCodeAt(i))) {\n i++;\n }\n }\n if (text.charCodeAt(i) === codeDot) {\n i++;\n expectDigit(start);\n while (isDigit(text.charCodeAt(i))) {\n i++;\n }\n }\n if (text.charCodeAt(i) === codeLowercaseE || text.charCodeAt(i) === codeUppercaseE) {\n i++;\n if (text.charCodeAt(i) === codeMinus || text.charCodeAt(i) === codePlus) {\n i++;\n }\n expectDigit(start);\n while (isDigit(text.charCodeAt(i))) {\n i++;\n }\n }\n if (i > start) {\n return parseNumber(text.slice(start, i));\n }\n }\n function eatComma() {\n if (text.charCodeAt(i) !== codeComma) {\n throw new SyntaxError(`Comma ',' expected after value ${gotAt()}`);\n }\n i++;\n }\n function eatColon() {\n if (text.charCodeAt(i) !== codeColon) {\n throw new SyntaxError(`Colon ':' expected after property name ${gotAt()}`);\n }\n i++;\n }\n function expectValue(value) {\n if (value === undefined) {\n throw new SyntaxError(`JSON value expected ${gotAt()}`);\n }\n }\n function expectArrayItem(value) {\n if (value === undefined) {\n throw new SyntaxError(`Array item expected ${gotAt()}`);\n }\n }\n function expectEndOfInput() {\n if (i < text.length) {\n throw new SyntaxError(`Expected end of input ${gotAt()}`);\n }\n }\n function expectDigit(start) {\n if (!isDigit(text.charCodeAt(i))) {\n const numSoFar = text.slice(start, i);\n throw new SyntaxError(`Invalid number '${numSoFar}', expecting a digit ${gotAt()}`);\n }\n }\n function expectEndOfString() {\n if (text.charCodeAt(i) !== codeDoubleQuote) {\n throw new SyntaxError(`End of string '\"' expected ${gotAt()}`);\n }\n }\n function throwObjectKeyExpected() {\n throw new SyntaxError(`Quoted object key expected ${gotAt()}`);\n }\n function throwDuplicateKey(key, pos) {\n throw new SyntaxError(`Duplicate key '${key}' encountered at position ${pos}`);\n }\n function throwObjectKeyOrEndExpected() {\n throw new SyntaxError(`Quoted object key or end of object '}' expected ${gotAt()}`);\n }\n function throwArrayItemOrEndExpected() {\n throw new SyntaxError(`Array item or end of array ']' expected ${gotAt()}`);\n }\n function throwInvalidCharacter(char) {\n throw new SyntaxError(`Invalid character '${char}' ${pos()}`);\n }\n function throwInvalidEscapeCharacter(start) {\n const chars = text.slice(start, start + 2);\n throw new SyntaxError(`Invalid escape character '${chars}' ${pos()}`);\n }\n function throwObjectValueExpected() {\n throw new SyntaxError(`Object value expected after ':' ${pos()}`);\n }\n function throwInvalidUnicodeCharacter(start) {\n const chars = text.slice(start, start + 6);\n throw new SyntaxError(`Invalid unicode character '${chars}' ${pos()}`);\n }\n\n // zero based character position\n function pos() {\n return `at position ${i}`;\n }\n function got() {\n return i < text.length ? `but got '${text[i]}'` : 'but reached end of input';\n }\n function gotAt() {\n return `${got()} ${pos()}`;\n }\n}\nfunction isWhitespace(code) {\n return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn;\n}\nfunction isHex(code) {\n return code >= codeZero && code <= codeNine || code >= codeUppercaseA && code <= codeUppercaseF || code >= codeLowercaseA && code <= codeLowercaseF;\n}\nfunction isDigit(code) {\n return code >= codeZero && code <= codeNine;\n}\nfunction isNonZeroDigit(code) {\n return code >= codeOne && code <= codeNine;\n}\nexport function isValidStringCharacter(code) {\n return code >= 0x20 && code <= 0x10ffff;\n}\nexport function isDeepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((item, index) => isDeepEqual(item, b[index]));\n }\n if (isObject(a) && isObject(b)) {\n const keys = [...new Set([...Object.keys(a), ...Object.keys(b)])];\n return keys.every(key => isDeepEqual(a[key], b[key]));\n }\n return false;\n}\nfunction isObject(value) {\n return typeof value === 'object' && value !== null;\n}\n\n// map with all escape characters\nconst escapeCharacters = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n // note that \\u is handled separately in parseString()\n};\nconst codeBackslash = 0x5c; // \"\\\"\nconst codeOpeningBrace = 0x7b; // \"{\"\nconst codeClosingBrace = 0x7d; // \"}\"\nconst codeOpeningBracket = 0x5b; // \"[\"\nconst codeClosingBracket = 0x5d; // \"]\"\nconst codeSpace = 0x20; // \" \"\nconst codeNewline = 0xa; // \"\\n\"\nconst codeTab = 0x9; // \"\\t\"\nconst codeReturn = 0xd; // \"\\r\"\nconst codeDoubleQuote = 0x0022; // \"\nconst codePlus = 0x2b; // \"+\"\nconst codeMinus = 0x2d; // \"-\"\nconst codeZero = 0x30;\nconst codeOne = 0x31;\nconst codeNine = 0x39;\nconst codeComma = 0x2c; // \",\"\nconst codeDot = 0x2e; // \".\" (dot, period)\nconst codeColon = 0x3a; // \":\"\nexport const codeUppercaseA = 0x41; // \"A\"\nexport const codeLowercaseA = 0x61; // \"a\"\nexport const codeUppercaseE = 0x45; // \"E\"\nexport const codeLowercaseE = 0x65; // \"e\"\nexport const codeUppercaseF = 0x46; // \"F\"\nexport const codeLowercaseF = 0x66; // \"f\"\n//# sourceMappingURL=parse.js.map","import { isNumber } from './utils.js';\n\n/**\n * The LosslessJSON.stringify() method converts a JavaScript value to a JSON string,\n * optionally replacing values if a replacer function is specified, or\n * optionally including only the specified properties if a replacer array is specified.\n *\n * @param value\n * The value to convert to a JSON string.\n *\n * @param [replacer]\n * A function that alters the behavior of the stringification process,\n * or an array of String and Number objects that serve as a whitelist for\n * selecting the properties of the value object to be included in the JSON string.\n * If this value is null or not provided, all properties of the object are\n * included in the resulting JSON string.\n *\n * @param [space]\n * A String or Number object that's used to insert white space into the output\n * JSON string for readability purposes. If this is a Number, it indicates the\n * number of space characters to use as white space; this number is capped at 10\n * if it's larger than that. Values less than 1 indicate that no space should be\n * used. If this is a String, the string (or the first 10 characters of the string,\n * if it's longer than that) is used as white space. If this parameter is not\n * provided (or is null), no white space is used.\n *\n * @param [numberStringifiers]\n * An optional list with additional number stringifiers, for example to serialize\n * a BigNumber. The output of the function must be valid stringified JSON.\n * When `undefined` is returned, the property will be deleted from the object.\n * The difference with using a `replacer` is that the output of a `replacer`\n * must be JSON and will be stringified afterwards, whereas the output of the\n * `numberStringifiers` is already stringified JSON.\n *\n * @returns Returns the string representation of the JSON object.\n */\nexport function stringify(value, replacer, space, numberStringifiers) {\n const resolvedSpace = resolveSpace(space);\n const replacedValue = typeof replacer === 'function' ? replacer.call({\n '': value\n }, '', value) : value;\n return stringifyValue(replacedValue, '');\n\n /**\n * Stringify a value\n */\n function stringifyValue(value, indent) {\n if (Array.isArray(numberStringifiers)) {\n const stringifier = numberStringifiers.find(item => item.test(value));\n if (stringifier) {\n const str = stringifier.stringify(value);\n if (typeof str !== 'string' || !isNumber(str)) {\n throw new Error(`Invalid JSON number: output of a number stringifier must be a string containing a JSON number (output: ${str})`);\n }\n return str;\n }\n }\n\n // boolean, null, number, string, or date\n if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string' || value === null || value instanceof Date || value instanceof Boolean || value instanceof Number || value instanceof String) {\n return JSON.stringify(value);\n }\n\n // lossless number, the secret ingredient :)\n // @ts-expect-error\n if (value?.isLosslessNumber) {\n return value.toString();\n }\n\n // BigInt\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n // Array\n if (Array.isArray(value)) {\n return stringifyArray(value, indent);\n }\n\n // Object (test lastly!)\n if (value && typeof value === 'object') {\n return stringifyObject(value, indent);\n }\n return undefined;\n }\n\n /**\n * Stringify an array\n */\n function stringifyArray(array, indent) {\n if (array.length === 0) {\n return '[]';\n }\n const childIndent = resolvedSpace ? indent + resolvedSpace : undefined;\n let str = resolvedSpace ? '[\\n' : '[';\n for (let i = 0; i < array.length; i++) {\n const item = typeof replacer === 'function' ? replacer.call(array, String(i), array[i]) : array[i];\n if (resolvedSpace) {\n str += childIndent;\n }\n if (typeof item !== 'undefined' && typeof item !== 'function') {\n str += stringifyValue(item, childIndent);\n } else {\n str += 'null';\n }\n if (i < array.length - 1) {\n str += resolvedSpace ? ',\\n' : ',';\n }\n }\n str += resolvedSpace ? `\\n${indent}]` : ']';\n return str;\n }\n\n /**\n * Stringify an object\n */\n function stringifyObject(object, indent) {\n if (typeof object.toJSON === 'function') {\n return stringify(object.toJSON(), replacer, space, undefined);\n }\n const keys = Array.isArray(replacer) ? replacer.map(String) : Object.keys(object);\n if (keys.length === 0) {\n return '{}';\n }\n const childIndent = resolvedSpace ? indent + resolvedSpace : undefined;\n let first = true;\n let str = resolvedSpace ? '{\\n' : '{';\n for (const key of keys) {\n const value = typeof replacer === 'function' ? replacer.call(object, key, object[key]) : object[key];\n if (includeProperty(key, value)) {\n if (first) {\n first = false;\n } else {\n str += resolvedSpace ? ',\\n' : ',';\n }\n const keyStr = JSON.stringify(key);\n str += resolvedSpace ? `${childIndent + keyStr}: ` : `${keyStr}:`;\n str += stringifyValue(value, childIndent);\n }\n }\n str += resolvedSpace ? `\\n${indent}}` : '}';\n return str;\n }\n\n /**\n * Test whether to include a property in a stringified object or not.\n */\n function includeProperty(_key, value) {\n return typeof value !== 'undefined' && typeof value !== 'function' && typeof value !== 'symbol';\n }\n}\n\n/**\n * Resolve a JSON stringify space:\n * replace a number with a string containing that number of spaces\n */\nfunction resolveSpace(space) {\n if (typeof space === 'number') {\n return ' '.repeat(space);\n }\n if (typeof space === 'string' && space !== '') {\n return space;\n }\n return undefined;\n}\n//# sourceMappingURL=stringify.js.map","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n\n# A portion of this file was funded by Blue Origin Enterprises, L.P.\n# See https://github.com/OpenC3/cosmos/pull/1957\n*/\n\nimport axios from './axios.js'\nimport { parse, stringify, isInteger, isSafeNumber } from 'lossless-json'\n\n// parse huge integer values into a bigint, and use a regular number otherwise\nexport function customNumberParser(value) {\n if (isInteger(value) && !isSafeNumber(value)) {\n return BigInt(value)\n } else {\n return parseFloat(value)\n }\n}\nexport default class OpenC3Api {\n id = 1\n\n constructor() {}\n\n async exec(\n method,\n params,\n kwparams = {},\n headerOptions = {},\n timeout = 60000,\n ) {\n try {\n let refreshed = await OpenC3Auth.updateToken(\n OpenC3Auth.defaultMinValidity,\n )\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n } catch (error) {\n OpenC3Auth.login()\n }\n this.id = this.id + 1\n try {\n kwparams['scope'] = window.openc3Scope\n // Everything from the front-end is manual by default\n // The various api methods decide whether to pass the manual\n // flag to the authorize routine\n headerOptions['manual'] = true\n const response = await axios.post(\n '/openc3-api/api',\n {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: this.id,\n keyword_params: kwparams,\n },\n {\n headers: {\n Authorization: localStorage.openc3Token,\n 'Content-Type': 'application/json-rpc',\n ...headerOptions,\n },\n timeout: timeout,\n transformRequest: [\n (data, headers) => {\n // stringify the data with lossless-json\n return stringify(data)\n },\n ],\n transformResponse: [\n (data) => {\n // parse the data with lossless-json ensuring that large numbers are parsed as BigInts\n // but all other numbers are parsed as regular numbers\n return parse(data, undefined, customNumberParser)\n },\n ],\n },\n )\n // let data = response.data\n // if (data.error) {\n // let err = new Error()\n // err.name = data.error.data.class\n // err.message = data.error.data.message\n // console.log(data.error.data.backtrace.join('\\n'))\n // throw err\n // }\n return response.data.result\n } catch (error) {\n let err = new Error()\n if (error.response) {\n // The request was made and the server responded with a\n // status code that falls out of the range of 2xx\n err.name = error.response.data.error.data.class\n err.message = error.response.data.error.data.message\n err.object = error.response.data.error\n } else if (error.request) {\n // The request was made but no response was received, `error.request`\n // is an instance of XMLHttpRequest in the browser and an instance\n // of http.ClientRequest in Node.js\n err.name = 'Request error'\n // NOTE: Openc3Screen.vue uses this specific message to determine\n // if the CmdTlmApi server is down. Don't change unless also changing there.\n err.message = 'Request error, no response received'\n } else {\n // Something happened in setting up the request and triggered an Error\n // Simply return the original error so we don't lose information\n err = error\n }\n throw err\n }\n }\n\n decode_openc3_type(val) {\n if (val !== null && typeof val === 'object') {\n if (val.json_class == 'Float' && val.raw) {\n if (val.raw == 'NaN') {\n return NaN\n } else if (val.raw == 'Infinity') {\n return Infinity\n } else if (val.raw == '-Infinity') {\n return -Infinity\n }\n }\n }\n return null\n }\n\n encode_openc3_type(val) {\n if (Number.isNaN(val)) {\n return { json_class: 'Float', raw: 'NaN' }\n } else if (val == Number.POSITIVE_INFINITY) {\n return { json_class: 'Float', raw: 'Infinity' }\n } else if (val == Number.NEGATIVE_INFINITY) {\n return { json_class: 'Float', raw: '-Infinity' }\n }\n return null\n }\n\n ensure_offline_access() {\n this.offline_access_needed().then((needed) => {\n if (needed) {\n if (localStorage.openc3OfflineToken) {\n this.set_offline_access(localStorage.openc3OfflineToken).then(() => {\n delete localStorage.openc3OfflineToken\n })\n } else {\n OpenC3Auth.getOfflineAccess()\n }\n }\n })\n }\n\n // ***********************************************\n // The following APIs are used by the CmdTlmServer\n // ***********************************************\n\n offline_access_needed() {\n return this.exec('offline_access_needed', [])\n }\n\n set_offline_access(offline_access_token) {\n return this.exec('set_offline_access', [offline_access_token])\n }\n\n get_all_interface_info() {\n return this.exec('get_all_interface_info', [])\n }\n\n map_target_to_interface(target_name, interface_name) {\n return this.exec('map_target_to_interface', [target_name, interface_name])\n }\n\n connect_interface(interface_name, ...interface_params) {\n if (interface_params.length > 0) {\n return this.exec('connect_interface', [\n interface_name,\n ...interface_params,\n ])\n } else {\n return this.exec('connect_interface', [interface_name])\n }\n }\n\n disconnect_interface(interface_name) {\n return this.exec('disconnect_interface', [interface_name])\n }\n\n interface_cmd(interface_name, command_name, ...command_params) {\n return this.exec('interface_cmd', [\n interface_name,\n command_name,\n ...command_params,\n ])\n }\n\n get_all_router_info() {\n return this.exec('get_all_router_info', [])\n }\n\n connect_router(router_name) {\n return this.exec('connect_router', [router_name])\n }\n\n disconnect_router(router_name) {\n return this.exec('disconnect_router', [router_name])\n }\n\n get_target_interfaces() {\n return this.exec('get_target_interfaces', [])\n }\n\n get_tlm_cnts(target_commands) {\n return this.exec('get_tlm_cnts', [target_commands])\n }\n\n get_item(target, packet, item) {\n return this.exec('get_item', [target, packet, item])\n }\n\n get_param(target, packet, item) {\n return this.exec('get_param', [target, packet, item])\n }\n // DEPRECATED for get_param\n get_parameter(target, packet, item) {\n return this.exec('get_param', [target, packet, item])\n }\n\n get_limits_sets() {\n return this.exec('get_limits_sets', [])\n }\n\n get_limits_set() {\n return this.exec('get_limits_set', [])\n }\n\n set_limits_set(limits_set) {\n return this.exec('set_limits_set', [limits_set])\n }\n\n // ***********************************************\n // End CmdTlmServer APIs\n // ***********************************************\n\n get_target(target_name) {\n return this.exec('get_target', [target_name])\n }\n\n get_target_names() {\n return this.exec('get_target_names', [])\n }\n // DEPRECATED for get_target_names\n get_target_list() {\n return this.exec('get_target_names', [])\n }\n\n get_tlm(target_name, packet_name) {\n return this.exec('get_tlm', [target_name, packet_name])\n }\n // DEPRECATED for get_tlm\n get_telemetry(target_name, packet_name) {\n return this.exec('get_tlm', [target_name, packet_name])\n }\n\n get_all_tlm(target_name) {\n return this.exec('get_all_tlm', [target_name])\n }\n // DEPRECATED for get_all_tlm\n get_all_telemetry(target_name) {\n return this.exec('get_all_tlm', [target_name])\n }\n\n get_all_tlm_names(target_name, hidden = false) {\n return this.exec('get_all_tlm_names', [target_name], { hidden: hidden })\n }\n // DEPRECATED for get_all_tlm_names\n get_all_telemetry_names(target_name) {\n return this.exec('get_all_tlm_names', [target_name])\n }\n\n get_all_tlm_item_names(target_name) {\n return this.exec('get_all_tlm_item_names', [target_name])\n }\n\n async get_tlm_packet(target_name, packet_name, value_type, stale_time = 30) {\n const data = await this.exec('get_tlm_packet', [target_name, packet_name], {\n type: value_type,\n stale_time: stale_time,\n })\n // Make sure data isn't null or undefined. Note this is the only valid use of == or !=\n if (data != null) {\n let len = data.length\n let converted = null\n for (let i = 0; i < len; i++) {\n converted = this.decode_openc3_type(data[i][1])\n if (converted !== null) {\n data[i][1] = converted\n }\n }\n }\n return data\n }\n\n get_packet_derived_items(target_name, packet_name) {\n return this.exec('get_packet_derived_items', [target_name, packet_name])\n }\n\n get_tlm_buffer(target_name, packet_name) {\n return this.exec('get_tlm_buffer', [target_name, packet_name])\n }\n\n get_tlm_available(items) {\n return this.exec('get_tlm_available', [items])\n }\n\n async get_tlm_values(\n items,\n stale_time = 30,\n cache_timeout = null,\n start_time = null,\n end_time = null,\n ) {\n let kw_args = {\n stale_time: stale_time,\n }\n if (cache_timeout !== null) {\n kw_args['cache_timeout'] = cache_timeout\n }\n if (start_time !== null) {\n kw_args['start_time'] = start_time.toISOString()\n }\n if (end_time !== null) {\n kw_args['end_time'] = end_time.toISOString()\n }\n const data = await this.exec(\n 'get_tlm_values',\n [items],\n kw_args,\n {},\n 10000, // 10s timeout ... should never be this long\n )\n if (data && data.length > 0) {\n let len = data[0].length\n let converted = null\n for (let i = 0; i < len; i++) {\n converted = this.decode_openc3_type(data[0][i])\n if (converted !== null) {\n data[0][i] = converted\n }\n }\n }\n return data\n }\n\n get_limits(target_name, packet_name, item_name) {\n return this.exec('get_limits', [target_name, packet_name, item_name])\n }\n\n async tlm(target_name, packet_name, item_name, value_type = 'CONVERTED') {\n let data = null\n // Check for the single string syntax: tlm(\"TGT PKT ITEM\")\n if (packet_name === undefined) {\n data = await this.exec('tlm', [target_name])\n // Check for the single string syntax with type: tlm(\"TGT PKT ITEM\", \"RAW\")\n } else if (item_name === undefined) {\n if (\n ['RAW', 'CONVERTED', 'FORMATTED', 'WITH_UNITS'].includes(packet_name)\n ) {\n data = await this.exec('tlm', [target_name], { type: packet_name })\n } else {\n let err = new Error()\n err.name = 'TypeError'\n err.message = `Invalid data type ${packet_name}. Valid options are RAW, CONVERTED, FORMATTED, and WITH_UNITS.`\n throw err\n }\n } else {\n data = await this.exec('tlm', [target_name, packet_name, item_name], {\n type: value_type,\n })\n }\n let converted = this.decode_openc3_type(data)\n if (converted !== null) {\n data = converted\n }\n return data\n }\n\n async inject_tlm(\n target_name,\n packet_name,\n item_hash = null,\n value_type = 'CONVERTED',\n ) {\n await this.exec('inject_tlm', [target_name, packet_name, item_hash], {\n type: value_type,\n })\n }\n\n set_tlm(target_name, packet_name, item_name, value_type) {\n return this.exec('set_tlm', [target_name, packet_name, item_name], {\n type: value_type,\n })\n }\n\n override_tlm(target_name, packet_name, item_name, value_type) {\n return this.exec('override_tlm', [target_name, packet_name, item_name], {\n type: value_type,\n })\n }\n\n get_overrides() {\n return this.exec('get_overrides')\n }\n\n normalize_tlm(target_name, packet_name, item_name, value_type) {\n return this.exec('normalize_tlm', [target_name, packet_name, item_name], {\n type: value_type,\n })\n }\n\n get_all_cmds(target_name) {\n return this.exec('get_all_cmds', [target_name])\n }\n // DEPRECATED for get_all_cmds\n get_all_commands(target_name) {\n return this.exec('get_all_cmds', [target_name])\n }\n\n get_all_cmd_names(target_name, hidden = false) {\n return this.exec('get_all_cmd_names', [target_name], { hidden: hidden })\n }\n // DEPRECATED for get_all_cmd_names\n get_all_command_names(target_name) {\n return this.exec('get_all_cmd_names', [target_name])\n }\n\n get_cmd(target_name, command_name) {\n return this.exec('get_cmd', [target_name, command_name])\n }\n // DEPRECATED for get_cmd\n get_command(target_name, command_name) {\n return this.exec('get_cmd', [target_name, command_name])\n }\n\n get_cmd_cnts(target_commands) {\n return this.exec('get_cmd_cnts', [target_commands])\n }\n\n get_cmd_value(\n target_name,\n packet_name,\n parameter_name,\n value_type = 'CONVERTED',\n ) {\n return this.exec('get_cmd_value', [\n target_name,\n packet_name,\n parameter_name,\n value_type,\n ])\n }\n\n get_cmd_buffer(target_name, packet_name) {\n return this.exec('get_cmd_buffer', [target_name, packet_name])\n }\n\n // Implementation of functionality shared by cmd methods with param_lists.\n _cmd(method, target_name, command_name, param_list, headerOptions, kwparams = {}) {\n let converted = null\n for (let key in param_list) {\n if (Object.prototype.hasOwnProperty.call(param_list, key)) {\n converted = this.encode_openc3_type(param_list[key])\n if (converted !== null) {\n param_list[key] = converted\n }\n }\n }\n return this.exec(\n method,\n [target_name, command_name, param_list],\n kwparams,\n headerOptions,\n )\n }\n\n get_cmd_hazardous(target_name, command_name, param_list, headerOptions = {}) {\n if (command_name === undefined) {\n return this.exec('get_cmd_hazardous', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'get_cmd_hazardous',\n target_name,\n command_name,\n param_list,\n headerOptions,\n )\n }\n }\n\n cmd(target_name, command_name, param_list, headerOptions = {}, kwparams = {}) {\n if (command_name === undefined) {\n return this.exec('cmd', target_name, {}, headerOptions)\n } else {\n return this._cmd(\n 'cmd',\n target_name,\n command_name,\n param_list,\n headerOptions,\n kwparams\n )\n }\n }\n\n cmd_no_range_check(\n target_name,\n command_name,\n param_list,\n headerOptions = {},\n kwparams = {},\n ) {\n if (command_name === undefined) {\n return this.exec('cmd_no_range_check', target_name, {}, headerOptions, kwparams)\n } else {\n return this._cmd(\n 'cmd_no_range_check',\n target_name,\n command_name,\n param_list,\n headerOptions,\n kwparams\n )\n }\n }\n\n cmd_raw(target_name, command_name, param_list, headerOptions = {}, kwparams = {}) {\n if (command_name === undefined) {\n return this.exec('cmd_raw', target_name, {}, headerOptions, kwparams)\n } else {\n return this._cmd(\n 'cmd_raw',\n target_name,\n command_name,\n param_list,\n headerOptions,\n kwparams,\n )\n }\n }\n\n cmd_raw_no_range_check(\n target_name,\n command_name,\n param_list,\n headerOptions = {},\n kwparams = {},\n ) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_range_check', target_name, {}, headerOptions, kwparams)\n } else {\n return this._cmd(\n 'cmd_raw_no_range_check',\n target_name,\n command_name,\n param_list,\n headerOptions,\n kwparams,\n )\n }\n }\n\n cmd_no_hazardous_check(\n target_name,\n command_name,\n param_list,\n headerOptions = {},\n kwparams = {}\n ) {\n if (command_name === undefined) {\n return this.exec('cmd_no_hazardous_check', target_name, {}, headerOptions, kwparams)\n } else {\n return this._cmd(\n 'cmd_no_hazardous_check',\n target_name,\n command_name,\n param_list,\n headerOptions,\n kwparams,\n )\n }\n }\n\n cmd_no_checks(target_name, command_name, param_list, headerOptions = {}, kwparams = {}) {\n if (command_name === undefined) {\n return this.exec('cmd_no_checks', target_name, {}, headerOptions, kwparams)\n } else {\n return this._cmd(\n 'cmd_no_checks',\n target_name,\n command_name,\n param_list,\n headerOptions,\n kwparams,\n )\n }\n }\n\n cmd_raw_no_hazardous_check(\n target_name,\n command_name,\n param_list,\n headerOptions = {},\n kwparams = {}\n ) {\n if (command_name === undefined) {\n return this.exec(\n 'cmd_raw_no_hazardous_check',\n target_name,\n {},\n headerOptions,\n kwparams,\n )\n } else {\n return this._cmd(\n 'cmd_raw_no_hazardous_check',\n target_name,\n command_name,\n param_list,\n headerOptions,\n kwparams,\n )\n }\n }\n\n cmd_raw_no_checks(target_name, command_name, param_list, headerOptions = {}, kwparams = {}) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_checks', target_name, {}, headerOptions, kwparams)\n } else {\n return this._cmd(\n 'cmd_raw_no_checks',\n target_name,\n command_name,\n param_list,\n headerOptions,\n kwparams,\n )\n }\n }\n\n build_cmd(target_name, command_name, param_list, headerOptions = {}, kwparams = {}) {\n if (command_name === undefined) {\n return this.exec('build_cmd', target_name)\n } else {\n return this._cmd('build_cmd', target_name, command_name, param_list, headerOptions, kwparams)\n }\n }\n // DEPRECATED for build_cmd\n build_command(target_name, command_name, param_list, headerOptions = {}, kwparams = {}) {\n if (command_name === undefined) {\n return this.exec('build_cmd', target_name)\n } else {\n return this._cmd('build_cmd', target_name, command_name, param_list, headerOptions, kwparams)\n }\n }\n\n get_interface_names() {\n return this.exec('get_interface_names', [])\n }\n\n send_raw(interface_name, data) {\n return this.exec('send_raw', [interface_name, data])\n }\n\n list_configs(tool) {\n return this.exec('list_configs', [tool])\n }\n\n load_config(tool, name) {\n return this.exec('load_config', [tool, name])\n }\n\n save_config(tool, name, data) {\n return this.exec('save_config', [tool, name, data])\n }\n\n delete_config(tool, name) {\n return this.exec('delete_config', [tool, name])\n }\n\n enable_limits(target, packet, item) {\n return this.exec('enable_limits', [target, packet, item])\n }\n\n disable_limits(target, packet, item) {\n return this.exec('disable_limits', [target, packet, item])\n }\n\n get_out_of_limits() {\n return this.exec('get_out_of_limits', [])\n }\n\n get_overall_limits_state(ignored) {\n return this.exec('get_overall_limits_state', [ignored])\n }\n\n list_settings() {\n return this.exec('list_settings', [])\n }\n\n get_all_settings() {\n return this.exec('get_all_settings', [])\n }\n\n get_setting(name, kwparams) {\n return this.exec('get_setting', [name], kwparams)\n }\n\n get_settings(array, kwparams) {\n return this.exec('get_settings', array, kwparams)\n }\n\n set_setting(name, data) {\n return this.exec('set_setting', [name, data])\n }\n\n update_news() {\n return this.exec('update_news', [])\n }\n\n update_plugin_store() {\n return this.exec('update_plugin_store', [])\n }\n\n // DEPRECATED for set_setting\n save_setting(name, data) {\n return this.exec('set_setting', [name, data])\n }\n\n get_metrics() {\n return this.exec('get_metrics', [])\n }\n\n // TODO: Currently unused but seemed like a useful function\n async hashString(string) {\n if (window.isSecureContext) {\n // Encode the string as an arrayBuffer which the subtle crypto API uses\n const arrayBuffer = new TextEncoder().encode(string)\n // Use the subtle crypto API to perform a SHA256 Sum of the array buffer\n // The resulting hash is stored in an array buffer\n const hashAsArrayBuffer = await crypto.subtle.digest(\n 'SHA-256',\n arrayBuffer,\n )\n // To create a string we will get the hexadecimal value of each byte of the array buffer\n // This gets us an array where each byte of the array buffer becomes one item in the array\n const uint8ViewOfHash = new Uint8Array(hashAsArrayBuffer)\n // We then convert it to a regular array so we can convert each item to hexadecimal strings\n // Where to characters of 0-9 or a-f represent a number between 0 and 16, containing 4 bits of information, so 2 of them is 8 bits (1 byte).\n return Array.from(uint8ViewOfHash)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n // else ?\n }\n}\n"],"names":["bind","fn","thisArg","toString","getPrototypeOf","iterator","toStringTag","kindOf","cache","thing","str","kindOfTest","type","typeOfTest","isArray","isUndefined","isBuffer","val","isFunction","isArrayBuffer","isArrayBufferView","result","isString","isNumber","isObject","isBoolean","isPlainObject","prototype","isEmptyObject","isDate","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","trim","forEach","obj","allOwnKeys","i","l","keys","len","key","findKey","_key","_global","isContextDefined","context","merge","caseless","skipUndefined","assignValue","targetKey","extend","a","b","stripBOM","content","inherits","constructor","superConstructor","props","descriptors","toFlatObject","sourceObj","destObj","filter","propFilter","prop","merged","endsWith","searchString","position","lastIndex","toArray","arr","isTypedArray","TypedArray","forEachEntry","_iterator","pair","matchAll","regExp","matches","isHTMLForm","toCamelCase","m","p1","p2","hasOwnProperty","isRegExp","reduceDescriptors","reducer","reducedDescriptors","descriptor","name","ret","freezeMethods","value","toObjectSet","arrayOrString","delimiter","define","noop","toFiniteNumber","defaultValue","isSpecCompliantForm","toJSONObject","stack","visit","source","target","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","token","callbacks","data","cb","asap","isIterable","utils$1","AxiosError","message","code","config","request","response","utils","error","customProps","axiosError","msg","errCode","httpAdapter","isVisitable","removeBrackets","renderKey","path","dots","isFlatArray","predicates","toFormData","formData","options","option","metaTokens","visitor","defaultVisitor","indexes","useBlob","convertValue","el","index","exposedHelpers","build","encode","charMap","match","AxiosURLSearchParams","params","encoder","_encode","buildURL","url","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","fulfilled","rejected","id","h","transitionalDefaults","URLSearchParams$1","FormData$1","Blob$1","platform$1","URLSearchParams","FormData","Blob","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","origin","platform","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","stringifySafely","rawValue","parser","e","defaults","headers","contentType","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","status","method","ignoreDuplicateOf","parseHeaders","rawHeaders","parsed","line","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","w","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders$1","valueOrRewrite","rewrite","self","setHeader","_value","_header","_rewrite","lHeader","setHeaders","dest","entry","matcher","deleted","deleteHeader","format","normalized","targets","asStrings","first","computed","accessors","defineAccessor","AxiosHeaders","mapped","headerValue","transformData","fns","isCancel","CanceledError","settle","resolve","reject","validateStatus","parseProtocol","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","now","startedAt","bytesCount","passed","throttle","freq","timestamp","threshold","lastArgs","timer","invoke","args","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","loaded","total","progressBytes","rate","inRange","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","isMSIE","cookies","expires","domain","secure","cookie","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","resolveConfig","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","auth","formHeaders","allowedHeaders","xsrfValue","isXHRAdapterSupported","xhrAdapter","_config","requestData","requestHeaders","responseType","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","done","onloadend","responseHeaders","err","event","timeoutErrorMessage","cancel","protocol","composeSignals","signals","timeout","length","controller","aborted","onabort","reason","unsubscribe","signal","streamChunk","chunk","chunkSize","pos","end","readBytes","iterable","readStream","stream","reader","trackStream","onProgress","onFinish","_onFinish","loadedBytes","DEFAULT_CHUNK_SIZE","globalFetchAPI","fetch","Request","Response","ReadableStream","TextEncoder","test","factory","env","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","supportsResponseStream","resolvers","res","getBodyLength","body","resolveBodyLength","cancelToken","withCredentials","fetchOptions","composedSignal","requestContentLength","_request","contentTypeHeader","flush","isCredentialsSupported","resolvedOptions","isStreamResponse","responseContentLength","responseData","seedCache","getFetch","seeds","seed","map","knownAdapters","fetchAdapter.getFetch","renderReason","isResolvedHandle","adapter","adapters","nameOrAdapter","rejectedReasons","reasons","state","s","throwIfCancellationRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","correctSpelling","assertOptions","schema","allowUnknown","Axios$1","instanceConfig","configOrUrl","dummy","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","fullPath","Axios","generateHTTPMethod","isForm","CancelToken$1","CancelToken","executor","resolvePromise","onfulfilled","_resolve","abort","c","spread","callback","isAxiosError","payload","HttpStatusCode","createInstance","defaultConfig","instance","axios","promises","all","Cancel","formToJSON","getAdapter","axiosInstance","refreshed","_a","_c","_b","_e","_d","_g","_f","_j","_i","_h","_k","$cosmosNotify","noAuth","noScope","acceptOnlyDefaultHeaders","fullDefaultHeaders","api","createNanoEvents","ReasonError","SubscriptionRejectedError","SubscriptionTimeoutError","DisconnectedError","StaleConnectionError","stringifyParams","k","v","Presence","channel","info","presence","acc","STATE","Channel","receiver","restored","reconnect","action","logger","meta","unbind","clbk","Subscription","ind","intent","nextPending","resolver","lock","top","GlobalLock","Subscriptions","subscribe","sub","localId","remoteId","Hub","left","item","LEVEL_TO_NAME","BaseLogger","level","details","NoopLogger","JSONEncoder","raw","commandID","ActionCableProtocol","cable","subscriptionPayload","identifier","cooldown","retryInterval","sessionId","subscription","ActionCableExtendedProtocol","restoredIds","restoredId","presenceType","pending","req","historyReq","streams","hasStreams","record","epoch","offset","NoConnectionError","GhostChannel","channelId","__publicField","PUBSUB_CHANNEL","PubSubChannel","Cable$1","transport","lazy","hubOptions","performFailures","transportConfigurator","wasIdle","remoteIds","channelErr","processed","ChannelClass","ghostName","channelMeta","performMeta","backoffWithJitter","interval","backoffRate","jitterRatio","maxInterval","attempts","right","delay","deviation","Monitor$1","pingInterval","pollDelay","diff","FallbackTransport","transports","ev","WebSocketTransport","Impl","subprotocol","authStrategy","protocols","newURL","authHeaderKey","DEFAULT_OPTIONS","createCable","websocketImplementation","websocketFormat","websocketOptions","websocketAuthStrategy","fallbacks","logLevel","monitor","reconnectStrategy","maxMissingPings","maxReconnectAttempts","tokenRefresher","historyTimestamp","protocolOptions","concurrentSubscribes","protocolName","protocolEncoderName","Monitor","Cable","watchForExpiredToken","attempted","ActionCableSubscription","ActionCableChannel","channelName","mixin","ActionCableSubscriptions","cableChannel","ActionCableConsumer","Logger","BaseMonitor","visibility","connect","disconnectFrozen","metaPrefixes","defaultUrl","fetchMeta","doc","prefix","element","absoluteWSUrl","generateUrlFromDOM","historyTimestampFromMeta","tokenFromMeta","tokenParamFromMeta","param","DEFAULTS","coreCreateCable","createConsumer","scope","additionalOptions","final_url","ConfigParserError","config_parser","usage","ConfigParserService","min_num_params","max_num_params","string","first_char","last_char","rx","r","input_string","original_filename","yield_non_keyword_lines","remove_quotes","handler","string_concat","lines","numLines","newline","first_item","isInteger","INTEGER_REGEX","NUMBER_REGEX","isSafeNumber","num","valueDigits","extractSignificantDigits","parsedDigits","UnsafeNumberReason","getUnsafeNumberReason","start","getSignificantDigitRange","digits","dot","LosslessNumber","unsafeReason","isLosslessNumber","parseLosslessNumber","revive","json","reviver","reviveValue","reviveArray","reviveObject","object","array","parse","text","parseNumber","parseValue","expectValue","expectEndOfInput","parseObject","codeOpeningBrace","skipWhitespace","initial","codeClosingBrace","eatComma","parseString","throwObjectKeyExpected","eatColon","throwObjectValueExpected","isDeepEqual","throwDuplicateKey","throwObjectKeyOrEndExpected","parseArray","codeOpeningBracket","codeClosingBracket","expectArrayItem","throwArrayItemOrEndExpected","parseNumeric","parseKeyword","isWhitespace","codeDoubleQuote","codeBackslash","escapeChar","escapeCharacters","isHex","throwInvalidUnicodeCharacter","throwInvalidEscapeCharacter","isValidStringCharacter","throwInvalidCharacter","expectEndOfString","codeMinus","expectDigit","codeZero","isNonZeroDigit","isDigit","codeDot","codeLowercaseE","codeUppercaseE","codePlus","codeComma","gotAt","codeColon","numSoFar","chars","got","codeSpace","codeNewline","codeTab","codeReturn","codeNine","codeUppercaseA","codeUppercaseF","codeLowercaseA","codeLowercaseF","codeOne","stringify","replacer","space","numberStringifiers","resolvedSpace","stringifyValue","indent","stringifier","stringifyArray","stringifyObject","childIndent","includeProperty","keyStr","customNumberParser","OpenC3Api","kwparams","headerOptions","needed","offline_access_token","target_name","interface_name","interface_params","command_name","command_params","router_name","target_commands","packet","limits_set","packet_name","hidden","value_type","stale_time","converted","items","cache_timeout","start_time","end_time","kw_args","item_name","item_hash","parameter_name","param_list","tool","ignored","arrayBuffer","hashAsArrayBuffer","uint8ViewOfHash"],"mappings":"wPAEe,SAASA,GAAKC,EAAIC,EAAS,CACxC,OAAO,UAAgB,CACrB,OAAOD,EAAG,MAAMC,EAAS,SAAS,CACpC,CACF,CCAA,KAAM,CAAC,SAAAC,EAAQ,EAAI,OAAO,UACpB,CAAC,eAAAC,EAAc,EAAI,OACnB,CAAC,SAAAC,GAAU,YAAAC,EAAW,EAAI,OAE1BC,IAAUC,GAASC,GAAS,CAC9B,MAAMC,EAAMP,GAAS,KAAKM,CAAK,EAC/B,OAAOD,EAAME,CAAG,IAAMF,EAAME,CAAG,EAAIA,EAAI,MAAM,EAAG,EAAE,EAAE,YAAW,EACnE,GAAG,OAAO,OAAO,IAAI,CAAC,EAEhBC,EAAcC,IAClBA,EAAOA,EAAK,YAAW,EACfH,GAAUF,GAAOE,CAAK,IAAMG,GAGhCC,GAAaD,GAAQH,GAAS,OAAOA,IAAUG,EAS/C,CAAC,QAAAE,EAAO,EAAI,MASZC,EAAcF,GAAW,WAAW,EAS1C,SAASG,GAASC,EAAK,CACrB,OAAOA,IAAQ,MAAQ,CAACF,EAAYE,CAAG,GAAKA,EAAI,cAAgB,MAAQ,CAACF,EAAYE,EAAI,WAAW,GAC/FC,EAAWD,EAAI,YAAY,QAAQ,GAAKA,EAAI,YAAY,SAASA,CAAG,CAC3E,CASA,MAAME,GAAgBR,EAAW,aAAa,EAU9C,SAASS,GAAkBH,EAAK,CAC9B,IAAII,EACJ,OAAK,OAAO,YAAgB,KAAiB,YAAY,OACvDA,EAAS,YAAY,OAAOJ,CAAG,EAE/BI,EAAUJ,GAASA,EAAI,QAAYE,GAAcF,EAAI,MAAM,EAEtDI,CACT,CASA,MAAMC,GAAWT,GAAW,QAAQ,EAQ9BK,EAAaL,GAAW,UAAU,EASlCU,GAAWV,GAAW,QAAQ,EAS9BW,GAAYf,GAAUA,IAAU,MAAQ,OAAOA,GAAU,SAQzDgB,GAAYhB,GAASA,IAAU,IAAQA,IAAU,GASjDiB,GAAiBT,GAAQ,CAC7B,GAAIV,GAAOU,CAAG,IAAM,SAClB,MAAO,GAGT,MAAMU,EAAYvB,GAAea,CAAG,EACpC,OAAQU,IAAc,MAAQA,IAAc,OAAO,WAAa,OAAO,eAAeA,CAAS,IAAM,OAAS,EAAErB,MAAeW,IAAQ,EAAEZ,MAAYY,EACvJ,EASMW,GAAiBX,GAAQ,CAE7B,GAAI,CAACO,GAASP,CAAG,GAAKD,GAASC,CAAG,EAChC,MAAO,GAGT,GAAI,CACF,OAAO,OAAO,KAAKA,CAAG,EAAE,SAAW,GAAK,OAAO,eAAeA,CAAG,IAAM,OAAO,SAChF,MAAY,CAEV,MAAO,EACT,CACF,EASMY,GAASlB,EAAW,MAAM,EAS1BmB,GAASnB,EAAW,MAAM,EAS1BoB,GAASpB,EAAW,MAAM,EAS1BqB,GAAarB,EAAW,UAAU,EASlCsB,GAAYhB,GAAQO,GAASP,CAAG,GAAKC,EAAWD,EAAI,IAAI,EASxDiB,GAAczB,GAAU,CAC5B,IAAI0B,EACJ,OAAO1B,IACJ,OAAO,UAAa,YAAcA,aAAiB,UAClDS,EAAWT,EAAM,MAAM,KACpB0B,EAAO5B,GAAOE,CAAK,KAAO,YAE1B0B,IAAS,UAAYjB,EAAWT,EAAM,QAAQ,GAAKA,EAAM,SAAQ,IAAO,qBAIjF,EASM2B,GAAoBzB,EAAW,iBAAiB,EAEhD,CAAC0B,GAAkBC,GAAWC,GAAYC,EAAS,EAAI,CAAC,iBAAkB,UAAW,WAAY,SAAS,EAAE,IAAI7B,CAAU,EAS1H8B,GAAQ/B,GAAQA,EAAI,KACxBA,EAAI,KAAI,EAAKA,EAAI,QAAQ,qCAAsC,EAAE,EAiBnE,SAASgC,GAAQC,EAAK1C,EAAI,CAAC,WAAA2C,EAAa,EAAK,EAAI,GAAI,CAEnD,GAAID,IAAQ,MAAQ,OAAOA,EAAQ,IACjC,OAGF,IAAIE,EACAC,EAQJ,GALI,OAAOH,GAAQ,WAEjBA,EAAM,CAACA,CAAG,GAGR7B,GAAQ6B,CAAG,EAEb,IAAKE,EAAI,EAAGC,EAAIH,EAAI,OAAQE,EAAIC,EAAGD,IACjC5C,EAAG,KAAK,KAAM0C,EAAIE,CAAC,EAAGA,EAAGF,CAAG,MAEzB,CAEL,GAAI3B,GAAS2B,CAAG,EACd,OAIF,MAAMI,EAAOH,EAAa,OAAO,oBAAoBD,CAAG,EAAI,OAAO,KAAKA,CAAG,EACrEK,EAAMD,EAAK,OACjB,IAAIE,EAEJ,IAAKJ,EAAI,EAAGA,EAAIG,EAAKH,IACnBI,EAAMF,EAAKF,CAAC,EACZ5C,EAAG,KAAK,KAAM0C,EAAIM,CAAG,EAAGA,EAAKN,CAAG,CAEpC,CACF,CAEA,SAASO,GAAQP,EAAKM,EAAK,CACzB,GAAIjC,GAAS2B,CAAG,EACd,OAAO,KAGTM,EAAMA,EAAI,YAAW,EACrB,MAAMF,EAAO,OAAO,KAAKJ,CAAG,EAC5B,IAAIE,EAAIE,EAAK,OACTI,EACJ,KAAON,KAAM,GAEX,GADAM,EAAOJ,EAAKF,CAAC,EACTI,IAAQE,EAAK,cACf,OAAOA,EAGX,OAAO,IACT,CAEA,MAAMC,EAEA,OAAO,WAAe,IAAoB,WACvC,OAAO,KAAS,IAAc,KAAQ,OAAO,OAAW,IAAc,OAAS,OAGlFC,GAAoBC,GAAY,CAACvC,EAAYuC,CAAO,GAAKA,IAAYF,EAoB3E,SAASG,IAAmC,CAC1C,KAAM,CAAC,SAAAC,EAAU,cAAAC,CAAa,EAAIJ,GAAiB,IAAI,GAAK,MAAQ,CAAA,EAC9DhC,EAAS,CAAA,EACTqC,EAAc,CAACzC,EAAKgC,IAAQ,CAChC,MAAMU,EAAYH,GAAYN,GAAQ7B,EAAQ4B,CAAG,GAAKA,EAClDvB,GAAcL,EAAOsC,CAAS,CAAC,GAAKjC,GAAcT,CAAG,EACvDI,EAAOsC,CAAS,EAAIJ,GAAMlC,EAAOsC,CAAS,EAAG1C,CAAG,EACvCS,GAAcT,CAAG,EAC1BI,EAAOsC,CAAS,EAAIJ,GAAM,CAAA,EAAItC,CAAG,EACxBH,GAAQG,CAAG,EACpBI,EAAOsC,CAAS,EAAI1C,EAAI,MAAK,GAEzB,CAACwC,GAAiB,CAAC1C,EAAYE,CAAG,KACpCI,EAAOsC,CAAS,EAAI1C,EAG1B,EAEA,QAAS4B,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IAC3C,UAAUA,CAAC,GAAKH,GAAQ,UAAUG,CAAC,EAAGa,CAAW,EAEnD,OAAOrC,CACT,CAYA,MAAMuC,GAAS,CAACC,EAAGC,EAAG5D,EAAS,CAAC,WAAA0C,CAAU,EAAG,MAC3CF,GAAQoB,EAAG,CAAC7C,EAAKgC,IAAQ,CACnB/C,GAAWgB,EAAWD,CAAG,EAC3B4C,EAAEZ,CAAG,EAAIjD,GAAKiB,EAAKf,CAAO,EAE1B2D,EAAEZ,CAAG,EAAIhC,CAEb,EAAG,CAAC,WAAA2B,CAAU,CAAC,EACRiB,GAUHE,GAAYC,IACZA,EAAQ,WAAW,CAAC,IAAM,QAC5BA,EAAUA,EAAQ,MAAM,CAAC,GAEpBA,GAYHC,GAAW,CAACC,EAAaC,EAAkBC,EAAOC,IAAgB,CACtEH,EAAY,UAAY,OAAO,OAAOC,EAAiB,UAAWE,CAAW,EAC7EH,EAAY,UAAU,YAAcA,EACpC,OAAO,eAAeA,EAAa,QAAS,CAC1C,MAAOC,EAAiB,SAC5B,CAAG,EACDC,GAAS,OAAO,OAAOF,EAAY,UAAWE,CAAK,CACrD,EAWME,GAAe,CAACC,EAAWC,EAASC,EAAQC,IAAe,CAC/D,IAAIN,EACA,EACAO,EACJ,MAAMC,EAAS,CAAA,EAIf,GAFAJ,EAAUA,GAAW,CAAA,EAEjBD,GAAa,KAAM,OAAOC,EAE9B,EAAG,CAGD,IAFAJ,EAAQ,OAAO,oBAAoBG,CAAS,EAC5C,EAAIH,EAAM,OACH,KAAM,GACXO,EAAOP,EAAM,CAAC,GACT,CAACM,GAAcA,EAAWC,EAAMJ,EAAWC,CAAO,IAAM,CAACI,EAAOD,CAAI,IACvEH,EAAQG,CAAI,EAAIJ,EAAUI,CAAI,EAC9BC,EAAOD,CAAI,EAAI,IAGnBJ,EAAYE,IAAW,IAASrE,GAAemE,CAAS,CAC1D,OAASA,IAAc,CAACE,GAAUA,EAAOF,EAAWC,CAAO,IAAMD,IAAc,OAAO,WAEtF,OAAOC,CACT,EAWMK,GAAW,CAACnE,EAAKoE,EAAcC,IAAa,CAChDrE,EAAM,OAAOA,CAAG,GACZqE,IAAa,QAAaA,EAAWrE,EAAI,UAC3CqE,EAAWrE,EAAI,QAEjBqE,GAAYD,EAAa,OACzB,MAAME,EAAYtE,EAAI,QAAQoE,EAAcC,CAAQ,EACpD,OAAOC,IAAc,IAAMA,IAAcD,CAC3C,EAUME,GAAWxE,GAAU,CACzB,GAAI,CAACA,EAAO,OAAO,KACnB,GAAIK,GAAQL,CAAK,EAAG,OAAOA,EAC3B,IAAIoC,EAAIpC,EAAM,OACd,GAAI,CAACc,GAASsB,CAAC,EAAG,OAAO,KACzB,MAAMqC,EAAM,IAAI,MAAMrC,CAAC,EACvB,KAAOA,KAAM,GACXqC,EAAIrC,CAAC,EAAIpC,EAAMoC,CAAC,EAElB,OAAOqC,CACT,EAWMC,IAAgBC,GAEb3E,GACE2E,GAAc3E,aAAiB2E,GAEvC,OAAO,WAAe,KAAehF,GAAe,UAAU,CAAC,EAU5DiF,GAAe,CAAC1C,EAAK1C,IAAO,CAGhC,MAAMqF,GAFY3C,GAAOA,EAAItC,EAAQ,GAET,KAAKsC,CAAG,EAEpC,IAAItB,EAEJ,MAAQA,EAASiE,EAAU,KAAI,IAAO,CAACjE,EAAO,MAAM,CAClD,MAAMkE,EAAOlE,EAAO,MACpBpB,EAAG,KAAK0C,EAAK4C,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAC/B,CACF,EAUMC,GAAW,CAACC,EAAQ/E,IAAQ,CAChC,IAAIgF,EACJ,MAAMR,EAAM,CAAA,EAEZ,MAAQQ,EAAUD,EAAO,KAAK/E,CAAG,KAAO,MACtCwE,EAAI,KAAKQ,CAAO,EAGlB,OAAOR,CACT,EAGMS,GAAahF,EAAW,iBAAiB,EAEzCiF,GAAclF,GACXA,EAAI,cAAc,QAAQ,wBAC/B,SAAkBmF,EAAGC,EAAIC,EAAI,CAC3B,OAAOD,EAAG,YAAW,EAAKC,CAC5B,CACJ,EAIMC,IAAkB,CAAC,CAAC,eAAAA,CAAc,IAAM,CAACrD,EAAKgC,IAASqB,EAAe,KAAKrD,EAAKgC,CAAI,GAAG,OAAO,SAAS,EASvGsB,GAAWtF,EAAW,QAAQ,EAE9BuF,GAAoB,CAACvD,EAAKwD,IAAY,CAC1C,MAAM9B,EAAc,OAAO,0BAA0B1B,CAAG,EAClDyD,EAAqB,CAAA,EAE3B1D,GAAQ2B,EAAa,CAACgC,EAAYC,IAAS,CACzC,IAAIC,GACCA,EAAMJ,EAAQE,EAAYC,EAAM3D,CAAG,KAAO,KAC7CyD,EAAmBE,CAAI,EAAIC,GAAOF,EAEtC,CAAC,EAED,OAAO,iBAAiB1D,EAAKyD,CAAkB,CACjD,EAOMI,GAAiB7D,GAAQ,CAC7BuD,GAAkBvD,EAAK,CAAC0D,EAAYC,IAAS,CAE3C,GAAIpF,EAAWyB,CAAG,GAAK,CAAC,YAAa,SAAU,QAAQ,EAAE,QAAQ2D,CAAI,IAAM,GACzE,MAAO,GAGT,MAAMG,EAAQ9D,EAAI2D,CAAI,EAEtB,GAAKpF,EAAWuF,CAAK,EAIrB,IAFAJ,EAAW,WAAa,GAEpB,aAAcA,EAAY,CAC5BA,EAAW,SAAW,GACtB,MACF,CAEKA,EAAW,MACdA,EAAW,IAAM,IAAM,CACrB,MAAM,MAAM,qCAAwCC,EAAO,GAAI,CACjE,GAEJ,CAAC,CACH,EAEMI,GAAc,CAACC,EAAeC,IAAc,CAChD,MAAMjE,EAAM,CAAA,EAENkE,EAAU3B,GAAQ,CACtBA,EAAI,QAAQuB,GAAS,CACnB9D,EAAI8D,CAAK,EAAI,EACf,CAAC,CACH,EAEA,OAAA3F,GAAQ6F,CAAa,EAAIE,EAAOF,CAAa,EAAIE,EAAO,OAAOF,CAAa,EAAE,MAAMC,CAAS,CAAC,EAEvFjE,CACT,EAEMmE,GAAO,IAAM,CAAC,EAEdC,GAAiB,CAACN,EAAOO,IACtBP,GAAS,MAAQ,OAAO,SAASA,EAAQ,CAACA,CAAK,EAAIA,EAAQO,EAYpE,SAASC,GAAoBxG,EAAO,CAClC,MAAO,CAAC,EAAEA,GAASS,EAAWT,EAAM,MAAM,GAAKA,EAAMH,EAAW,IAAM,YAAcG,EAAMJ,EAAQ,EACpG,CAEA,MAAM6G,GAAgBvE,GAAQ,CAC5B,MAAMwE,EAAQ,IAAI,MAAM,EAAE,EAEpBC,EAAQ,CAACC,EAAQxE,IAAM,CAE3B,GAAIrB,GAAS6F,CAAM,EAAG,CACpB,GAAIF,EAAM,QAAQE,CAAM,GAAK,EAC3B,OAIF,GAAIrG,GAASqG,CAAM,EACjB,OAAOA,EAGT,GAAG,EAAE,WAAYA,GAAS,CACxBF,EAAMtE,CAAC,EAAIwE,EACX,MAAMC,EAASxG,GAAQuG,CAAM,EAAI,CAAA,EAAK,CAAA,EAEtC,OAAA3E,GAAQ2E,EAAQ,CAACZ,EAAOxD,IAAQ,CAC9B,MAAMsE,EAAeH,EAAMX,EAAO5D,EAAI,CAAC,EACvC,CAAC9B,EAAYwG,CAAY,IAAMD,EAAOrE,CAAG,EAAIsE,EAC/C,CAAC,EAEDJ,EAAMtE,CAAC,EAAI,OAEJyE,CACT,CACF,CAEA,OAAOD,CACT,EAEA,OAAOD,EAAMzE,EAAK,CAAC,CACrB,EAEM6E,GAAY7G,EAAW,eAAe,EAEtC8G,GAAchH,GAClBA,IAAUe,GAASf,CAAK,GAAKS,EAAWT,CAAK,IAAMS,EAAWT,EAAM,IAAI,GAAKS,EAAWT,EAAM,KAAK,EAK/FiH,IAAiB,CAACC,EAAuBC,IACzCD,EACK,aAGFC,GAAwB,CAACC,EAAOC,KACrC1E,EAAQ,iBAAiB,UAAW,CAAC,CAAC,OAAAiE,EAAQ,KAAAU,CAAI,IAAM,CAClDV,IAAWjE,GAAW2E,IAASF,GACjCC,EAAU,QAAUA,EAAU,QAAO,CAEzC,EAAG,EAAK,EAEAE,GAAO,CACbF,EAAU,KAAKE,CAAE,EACjB5E,EAAQ,YAAYyE,EAAO,GAAG,CAChC,IACC,SAAS,KAAK,OAAM,CAAE,GAAI,CAAA,CAAE,EAAKG,GAAO,WAAWA,CAAE,GAExD,OAAO,cAAiB,WACxB9G,EAAWkC,EAAQ,WAAW,CAChC,EAEM6E,GAAO,OAAO,eAAmB,IACrC,eAAe,KAAK7E,CAAO,EAAM,OAAO,QAAY,KAAe,QAAQ,UAAYsE,GAKnFQ,GAAczH,GAAUA,GAAS,MAAQS,EAAWT,EAAMJ,EAAQ,CAAC,EAGzE8H,EAAe,CACb,QAAArH,GACA,cAAAK,GACA,SAAAH,GACA,WAAAkB,GACA,kBAAAd,GACA,SAAAE,GACF,SAAEC,GACA,UAAAE,GACF,SAAED,GACA,cAAAE,GACA,cAAAE,GACA,iBAAAS,GACA,UAAAC,GACA,WAAAC,GACA,UAAAC,GACA,YAAAzB,EACA,OAAAc,GACA,OAAAC,GACA,OAAAC,GACA,SAAAkE,GACF,WAAE/E,EACA,SAAAe,GACA,kBAAAG,GACA,aAAA+C,GACA,WAAAnD,GACA,QAAAU,GACA,MAAAa,GACA,OAAAK,GACA,KAAAnB,GACA,SAAAsB,GACA,SAAAE,GACA,aAAAK,GACA,OAAA/D,GACA,WAAAI,EACA,SAAAkE,GACA,QAAAI,GACA,aAAAI,GACA,SAAAG,GACA,WAAAG,GACA,eAAAK,GACA,WAAYA,GACZ,kBAAAE,GACA,cAAAM,GACA,YAAAE,GACA,YAAAd,GACA,KAAAkB,GACA,eAAAC,GACA,QAAA7D,GACA,OAAQE,EACR,iBAAAC,GACA,oBAAA4D,GACA,aAAAC,GACA,UAAAM,GACA,WAAAC,GACA,aAAcC,GACd,KAAAO,GACA,WAAAC,EACF,EChwBA,SAASE,EAAWC,EAASC,EAAMC,EAAQC,EAASC,EAAU,CAC5D,MAAM,KAAK,IAAI,EAEX,MAAM,kBACR,MAAM,kBAAkB,KAAM,KAAK,WAAW,EAE9C,KAAK,MAAS,IAAI,MAAK,EAAI,MAG7B,KAAK,QAAUJ,EACf,KAAK,KAAO,aACZC,IAAS,KAAK,KAAOA,GACrBC,IAAW,KAAK,OAASA,GACzBC,IAAY,KAAK,QAAUA,GACvBC,IACF,KAAK,SAAWA,EAChB,KAAK,OAASA,EAAS,OAASA,EAAS,OAAS,KAEtD,CAEAC,EAAM,SAASN,EAAY,MAAO,CAChC,OAAQ,UAAkB,CACxB,MAAO,CAEL,QAAS,KAAK,QACd,KAAM,KAAK,KAEX,YAAa,KAAK,YAClB,OAAQ,KAAK,OAEb,SAAU,KAAK,SACf,WAAY,KAAK,WACjB,aAAc,KAAK,aACnB,MAAO,KAAK,MAEZ,OAAQM,EAAM,aAAa,KAAK,MAAM,EACtC,KAAM,KAAK,KACX,OAAQ,KAAK,MACnB,CACE,CACF,CAAC,EAED,MAAM/G,GAAYyG,EAAW,UACvB/D,GAAc,CAAA,EAEpB,CACE,uBACA,iBACA,eACA,YACA,cACA,4BACA,iBACA,mBACA,kBACA,eACA,kBACA,iBAEF,EAAE,QAAQiE,GAAQ,CAChBjE,GAAYiE,CAAI,EAAI,CAAC,MAAOA,CAAI,CAClC,CAAC,EAED,OAAO,iBAAiBF,EAAY/D,EAAW,EAC/C,OAAO,eAAe1C,GAAW,eAAgB,CAAC,MAAO,EAAI,CAAC,EAG9DyG,EAAW,KAAO,CAACO,EAAOL,EAAMC,EAAQC,EAASC,EAAUG,IAAgB,CACzE,MAAMC,EAAa,OAAO,OAAOlH,EAAS,EAE1C+G,EAAM,aAAaC,EAAOE,EAAY,SAAgBlG,EAAK,CACzD,OAAOA,IAAQ,MAAM,SACvB,EAAGgC,GACMA,IAAS,cACjB,EAED,MAAMmE,EAAMH,GAASA,EAAM,QAAUA,EAAM,QAAU,QAG/CI,EAAUT,GAAQ,MAAQK,EAAQA,EAAM,KAAOL,EACrDF,OAAAA,EAAW,KAAKS,EAAYC,EAAKC,EAASR,EAAQC,EAASC,CAAQ,EAG/DE,GAASE,EAAW,OAAS,MAC/B,OAAO,eAAeA,EAAY,QAAS,CAAE,MAAOF,EAAO,aAAc,GAAM,EAGjFE,EAAW,KAAQF,GAASA,EAAM,MAAS,QAE3CC,GAAe,OAAO,OAAOC,EAAYD,CAAW,EAE7CC,CACT,EC1GA,MAAAG,GAAe,KCaf,SAASC,GAAYxI,EAAO,CAC1B,OAAOiI,EAAM,cAAcjI,CAAK,GAAKiI,EAAM,QAAQjI,CAAK,CAC1D,CASA,SAASyI,GAAejG,EAAK,CAC3B,OAAOyF,EAAM,SAASzF,EAAK,IAAI,EAAIA,EAAI,MAAM,EAAG,EAAE,EAAIA,CACxD,CAWA,SAASkG,GAAUC,EAAMnG,EAAKoG,EAAM,CAClC,OAAKD,EACEA,EAAK,OAAOnG,CAAG,EAAE,IAAI,SAAc4E,EAAO,EAAG,CAElD,OAAAA,EAAQqB,GAAerB,CAAK,EACrB,CAACwB,GAAQ,EAAI,IAAMxB,EAAQ,IAAMA,CAC1C,CAAC,EAAE,KAAKwB,EAAO,IAAM,EAAE,EALLpG,CAMpB,CASA,SAASqG,GAAYpE,EAAK,CACxB,OAAOwD,EAAM,QAAQxD,CAAG,GAAK,CAACA,EAAI,KAAK+D,EAAW,CACpD,CAEA,MAAMM,GAAab,EAAM,aAAaA,EAAO,CAAA,EAAI,KAAM,SAAgB/D,EAAM,CAC3E,MAAO,WAAW,KAAKA,CAAI,CAC7B,CAAC,EAyBD,SAAS6E,GAAW7G,EAAK8G,EAAUC,EAAS,CAC1C,GAAI,CAAChB,EAAM,SAAS/F,CAAG,EACrB,MAAM,IAAI,UAAU,0BAA0B,EAIhD8G,EAAWA,GAAY,IAAyB,SAGhDC,EAAUhB,EAAM,aAAagB,EAAS,CACpC,WAAY,GACZ,KAAM,GACN,QAAS,EACb,EAAK,GAAO,SAAiBC,EAAQtC,EAAQ,CAEzC,MAAO,CAACqB,EAAM,YAAYrB,EAAOsC,CAAM,CAAC,CAC1C,CAAC,EAED,MAAMC,EAAaF,EAAQ,WAErBG,EAAUH,EAAQ,SAAWI,EAC7BT,EAAOK,EAAQ,KACfK,EAAUL,EAAQ,QAElBM,GADQN,EAAQ,MAAQ,OAAO,KAAS,KAAe,OACpChB,EAAM,oBAAoBe,CAAQ,EAE3D,GAAI,CAACf,EAAM,WAAWmB,CAAO,EAC3B,MAAM,IAAI,UAAU,4BAA4B,EAGlD,SAASI,EAAaxD,EAAO,CAC3B,GAAIA,IAAU,KAAM,MAAO,GAE3B,GAAIiC,EAAM,OAAOjC,CAAK,EACpB,OAAOA,EAAM,YAAW,EAG1B,GAAIiC,EAAM,UAAUjC,CAAK,EACvB,OAAOA,EAAM,SAAQ,EAGvB,GAAI,CAACuD,GAAWtB,EAAM,OAAOjC,CAAK,EAChC,MAAM,IAAI2B,EAAW,8CAA8C,EAGrE,OAAIM,EAAM,cAAcjC,CAAK,GAAKiC,EAAM,aAAajC,CAAK,EACjDuD,GAAW,OAAO,MAAS,WAAa,IAAI,KAAK,CAACvD,CAAK,CAAC,EAAI,OAAO,KAAKA,CAAK,EAG/EA,CACT,CAYA,SAASqD,EAAerD,EAAOxD,EAAKmG,EAAM,CACxC,IAAIlE,EAAMuB,EAEV,GAAIA,GAAS,CAAC2C,GAAQ,OAAO3C,GAAU,UACrC,GAAIiC,EAAM,SAASzF,EAAK,IAAI,EAE1BA,EAAM2G,EAAa3G,EAAMA,EAAI,MAAM,EAAG,EAAE,EAExCwD,EAAQ,KAAK,UAAUA,CAAK,UAE3BiC,EAAM,QAAQjC,CAAK,GAAK6C,GAAY7C,CAAK,IACxCiC,EAAM,WAAWjC,CAAK,GAAKiC,EAAM,SAASzF,EAAK,IAAI,KAAOiC,EAAMwD,EAAM,QAAQjC,CAAK,GAGrF,OAAAxD,EAAMiG,GAAejG,CAAG,EAExBiC,EAAI,QAAQ,SAAcgF,EAAIC,EAAO,CACnC,EAAEzB,EAAM,YAAYwB,CAAE,GAAKA,IAAO,OAAST,EAAS,OAElDM,IAAY,GAAOZ,GAAU,CAAClG,CAAG,EAAGkH,EAAOd,CAAI,EAAKU,IAAY,KAAO9G,EAAMA,EAAM,KACnFgH,EAAaC,CAAE,CAC3B,CACQ,CAAC,EACM,GAIX,OAAIjB,GAAYxC,CAAK,EACZ,IAGTgD,EAAS,OAAON,GAAUC,EAAMnG,EAAKoG,CAAI,EAAGY,EAAaxD,CAAK,CAAC,EAExD,GACT,CAEA,MAAMU,EAAQ,CAAA,EAERiD,EAAiB,OAAO,OAAOb,GAAY,CAC/C,eAAAO,EACA,aAAAG,EACA,YAAAhB,EACJ,CAAG,EAED,SAASoB,EAAM5D,EAAO2C,EAAM,CAC1B,GAAIV,CAAAA,EAAM,YAAYjC,CAAK,EAE3B,IAAIU,EAAM,QAAQV,CAAK,IAAM,GAC3B,MAAM,MAAM,kCAAoC2C,EAAK,KAAK,GAAG,CAAC,EAGhEjC,EAAM,KAAKV,CAAK,EAEhBiC,EAAM,QAAQjC,EAAO,SAAcyD,EAAIjH,EAAK,EAC3B,EAAEyF,EAAM,YAAYwB,CAAE,GAAKA,IAAO,OAASL,EAAQ,KAChEJ,EAAUS,EAAIxB,EAAM,SAASzF,CAAG,EAAIA,EAAI,KAAI,EAAKA,EAAKmG,EAAMgB,CACpE,KAEqB,IACbC,EAAMH,EAAId,EAAOA,EAAK,OAAOnG,CAAG,EAAI,CAACA,CAAG,CAAC,CAE7C,CAAC,EAEDkE,EAAM,IAAG,EACX,CAEA,GAAI,CAACuB,EAAM,SAAS/F,CAAG,EACrB,MAAM,IAAI,UAAU,wBAAwB,EAG9C,OAAA0H,EAAM1H,CAAG,EAEF8G,CACT,CChNA,SAASa,GAAO5J,EAAK,CACnB,MAAM6J,EAAU,CACd,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,MAAO,IACP,MAAO,IACX,EACE,OAAO,mBAAmB7J,CAAG,EAAE,QAAQ,mBAAoB,SAAkB8J,EAAO,CAClF,OAAOD,EAAQC,CAAK,CACtB,CAAC,CACH,CAUA,SAASC,GAAqBC,EAAQhB,EAAS,CAC7C,KAAK,OAAS,CAAA,EAEdgB,GAAUlB,GAAWkB,EAAQ,KAAMhB,CAAO,CAC5C,CAEA,MAAM/H,GAAY8I,GAAqB,UAEvC9I,GAAU,OAAS,SAAgB2E,EAAMG,EAAO,CAC9C,KAAK,OAAO,KAAK,CAACH,EAAMG,CAAK,CAAC,CAChC,EAEA9E,GAAU,SAAW,SAAkBgJ,EAAS,CAC9C,MAAMC,EAAUD,EAAU,SAASlE,EAAO,CACxC,OAAOkE,EAAQ,KAAK,KAAMlE,EAAO6D,EAAM,CACzC,EAAIA,GAEJ,OAAO,KAAK,OAAO,IAAI,SAAc/E,EAAM,CACzC,OAAOqF,EAAQrF,EAAK,CAAC,CAAC,EAAI,IAAMqF,EAAQrF,EAAK,CAAC,CAAC,CACjD,EAAG,EAAE,EAAE,KAAK,GAAG,CACjB,EC1CA,SAAS+E,GAAOrJ,EAAK,CACnB,OAAO,mBAAmBA,CAAG,EAC3B,QAAQ,QAAS,GAAG,EACpB,QAAQ,OAAQ,GAAG,EACnB,QAAQ,QAAS,GAAG,EACpB,QAAQ,OAAQ,GAAG,CACvB,CAWe,SAAS4J,GAASC,EAAKJ,EAAQhB,EAAS,CAErD,GAAI,CAACgB,EACH,OAAOI,EAGT,MAAMF,EAAUlB,GAAWA,EAAQ,QAAUY,GAEzC5B,EAAM,WAAWgB,CAAO,IAC1BA,EAAU,CACR,UAAWA,CACjB,GAGE,MAAMqB,EAAcrB,GAAWA,EAAQ,UAEvC,IAAIsB,EAUJ,GARID,EACFC,EAAmBD,EAAYL,EAAQhB,CAAO,EAE9CsB,EAAmBtC,EAAM,kBAAkBgC,CAAM,EAC/CA,EAAO,SAAQ,EACf,IAAID,GAAqBC,EAAQhB,CAAO,EAAE,SAASkB,CAAO,EAG1DI,EAAkB,CACpB,MAAMC,EAAgBH,EAAI,QAAQ,GAAG,EAEjCG,IAAkB,KACpBH,EAAMA,EAAI,MAAM,EAAGG,CAAa,GAElCH,IAAQA,EAAI,QAAQ,GAAG,IAAM,GAAK,IAAM,KAAOE,CACjD,CAEA,OAAOF,CACT,CC9DA,MAAMI,EAAmB,CACvB,aAAc,CACZ,KAAK,SAAW,CAAA,CAClB,CAUA,IAAIC,EAAWC,EAAU1B,EAAS,CAChC,YAAK,SAAS,KAAK,CACjB,UAAAyB,EACA,SAAAC,EACA,YAAa1B,EAAUA,EAAQ,YAAc,GAC7C,QAASA,EAAUA,EAAQ,QAAU,IAC3C,CAAK,EACM,KAAK,SAAS,OAAS,CAChC,CASA,MAAM2B,EAAI,CACJ,KAAK,SAASA,CAAE,IAClB,KAAK,SAASA,CAAE,EAAI,KAExB,CAOA,OAAQ,CACF,KAAK,WACP,KAAK,SAAW,CAAA,EAEpB,CAYA,QAAQpL,EAAI,CACVyI,EAAM,QAAQ,KAAK,SAAU,SAAwB4C,EAAG,CAClDA,IAAM,MACRrL,EAAGqL,CAAC,CAER,CAAC,CACH,CACF,CClEA,MAAAC,GAAe,CACb,kBAAmB,GACnB,kBAAmB,GACnB,oBAAqB,EACvB,ECHAC,GAAe,OAAO,gBAAoB,IAAc,gBAAkBf,GCD1EgB,GAAe,OAAO,SAAa,IAAc,SAAW,KCA5DC,GAAe,OAAO,KAAS,IAAc,KAAO,KCEpDC,GAAe,CACb,UAAW,GACX,QAAS,CACX,gBAAIC,GACJ,SAAIC,GACJ,KAAIC,EACJ,EACE,UAAW,CAAC,OAAQ,QAAS,OAAQ,OAAQ,MAAO,MAAM,CAC5D,ECZMC,GAAgB,OAAO,OAAW,KAAe,OAAO,SAAa,IAErEC,GAAa,OAAO,WAAc,UAAY,WAAa,OAmB3DC,GAAwBF,KAC3B,CAACC,IAAc,CAAC,cAAe,eAAgB,IAAI,EAAE,QAAQA,GAAW,OAAO,EAAI,GAWhFE,GAEF,OAAO,kBAAsB,KAE7B,gBAAgB,mBAChB,OAAO,KAAK,eAAkB,WAI5BC,GAASJ,IAAiB,OAAO,SAAS,MAAQ,oNCvCxDK,EAAe,CACb,GAAG1D,GACH,GAAG0D,EACL,ECAe,SAASC,GAAiBtE,EAAM2B,EAAS,CACtD,OAAOF,GAAWzB,EAAM,IAAIqE,EAAS,QAAQ,gBAAmB,CAC9D,QAAS,SAAS3F,EAAOxD,EAAKmG,EAAMkD,EAAS,CAC3C,OAAIF,EAAS,QAAU1D,EAAM,SAASjC,CAAK,GACzC,KAAK,OAAOxD,EAAKwD,EAAM,SAAS,QAAQ,CAAC,EAClC,IAGF6F,EAAQ,eAAe,MAAM,KAAM,SAAS,CACrD,EACA,GAAG5C,CACP,CAAG,CACH,CCPA,SAAS6C,GAAcjG,EAAM,CAK3B,OAAOoC,EAAM,SAAS,gBAAiBpC,CAAI,EAAE,IAAIkE,GACxCA,EAAM,CAAC,IAAM,KAAO,GAAKA,EAAM,CAAC,GAAKA,EAAM,CAAC,CACpD,CACH,CASA,SAASgC,GAActH,EAAK,CAC1B,MAAMvC,EAAM,CAAA,EACNI,EAAO,OAAO,KAAKmC,CAAG,EAC5B,IAAIrC,EACJ,MAAMG,EAAMD,EAAK,OACjB,IAAIE,EACJ,IAAKJ,EAAI,EAAGA,EAAIG,EAAKH,IACnBI,EAAMF,EAAKF,CAAC,EACZF,EAAIM,CAAG,EAAIiC,EAAIjC,CAAG,EAEpB,OAAON,CACT,CASA,SAAS8J,GAAehD,EAAU,CAChC,SAASiD,EAAUtD,EAAM3C,EAAOa,EAAQ6C,EAAO,CAC7C,IAAI7D,EAAO8C,EAAKe,GAAO,EAEvB,GAAI7D,IAAS,YAAa,MAAO,GAEjC,MAAMqG,EAAe,OAAO,SAAS,CAACrG,CAAI,EACpCsG,EAASzC,GAASf,EAAK,OAG7B,OAFA9C,EAAO,CAACA,GAAQoC,EAAM,QAAQpB,CAAM,EAAIA,EAAO,OAAShB,EAEpDsG,GACElE,EAAM,WAAWpB,EAAQhB,CAAI,EAC/BgB,EAAOhB,CAAI,EAAI,CAACgB,EAAOhB,CAAI,EAAGG,CAAK,EAEnCa,EAAOhB,CAAI,EAAIG,EAGV,CAACkG,KAGN,CAACrF,EAAOhB,CAAI,GAAK,CAACoC,EAAM,SAASpB,EAAOhB,CAAI,CAAC,KAC/CgB,EAAOhB,CAAI,EAAI,CAAA,GAGFoG,EAAUtD,EAAM3C,EAAOa,EAAOhB,CAAI,EAAG6D,CAAK,GAE3CzB,EAAM,QAAQpB,EAAOhB,CAAI,CAAC,IACtCgB,EAAOhB,CAAI,EAAIkG,GAAclF,EAAOhB,CAAI,CAAC,GAGpC,CAACqG,EACV,CAEA,GAAIjE,EAAM,WAAWe,CAAQ,GAAKf,EAAM,WAAWe,EAAS,OAAO,EAAG,CACpE,MAAM9G,EAAM,CAAA,EAEZ+F,OAAAA,EAAM,aAAae,EAAU,CAACnD,EAAMG,IAAU,CAC5CiG,EAAUH,GAAcjG,CAAI,EAAGG,EAAO9D,EAAK,CAAC,CAC9C,CAAC,EAEMA,CACT,CAEA,OAAO,IACT,CCxEA,SAASkK,GAAgBC,EAAUC,EAAQpC,EAAS,CAClD,GAAIjC,EAAM,SAASoE,CAAQ,EACzB,GAAI,CACF,OAACC,GAAU,KAAK,OAAOD,CAAQ,EACxBpE,EAAM,KAAKoE,CAAQ,CAC5B,OAASE,EAAG,CACV,GAAIA,EAAE,OAAS,cACb,MAAMA,CAEV,CAGF,OAAQrC,GAAW,KAAK,WAAWmC,CAAQ,CAC7C,CAEA,MAAMG,GAAW,CAEf,aAAc1B,GAEd,QAAS,CAAC,MAAO,OAAQ,OAAO,EAEhC,iBAAkB,CAAC,SAA0BxD,EAAMmF,EAAS,CAC1D,MAAMC,EAAcD,EAAQ,eAAc,GAAM,GAC1CE,EAAqBD,EAAY,QAAQ,kBAAkB,EAAI,GAC/DE,EAAkB3E,EAAM,SAASX,CAAI,EAQ3C,GANIsF,GAAmB3E,EAAM,WAAWX,CAAI,IAC1CA,EAAO,IAAI,SAASA,CAAI,GAGPW,EAAM,WAAWX,CAAI,EAGtC,OAAOqF,EAAqB,KAAK,UAAUX,GAAe1E,CAAI,CAAC,EAAIA,EAGrE,GAAIW,EAAM,cAAcX,CAAI,GAC1BW,EAAM,SAASX,CAAI,GACnBW,EAAM,SAASX,CAAI,GACnBW,EAAM,OAAOX,CAAI,GACjBW,EAAM,OAAOX,CAAI,GACjBW,EAAM,iBAAiBX,CAAI,EAE3B,OAAOA,EAET,GAAIW,EAAM,kBAAkBX,CAAI,EAC9B,OAAOA,EAAK,OAEd,GAAIW,EAAM,kBAAkBX,CAAI,EAC9B,OAAAmF,EAAQ,eAAe,kDAAmD,EAAK,EACxEnF,EAAK,SAAQ,EAGtB,IAAI/F,EAEJ,GAAIqL,EAAiB,CACnB,GAAIF,EAAY,QAAQ,mCAAmC,EAAI,GAC7D,OAAOd,GAAiBtE,EAAM,KAAK,cAAc,EAAE,SAAQ,EAG7D,IAAK/F,EAAa0G,EAAM,WAAWX,CAAI,IAAMoF,EAAY,QAAQ,qBAAqB,EAAI,GAAI,CAC5F,MAAMG,EAAY,KAAK,KAAO,KAAK,IAAI,SAEvC,OAAO9D,GACLxH,EAAa,CAAC,UAAW+F,CAAI,EAAIA,EACjCuF,GAAa,IAAIA,EACjB,KAAK,cACf,CACM,CACF,CAEA,OAAID,GAAmBD,GACrBF,EAAQ,eAAe,mBAAoB,EAAK,EACzCL,GAAgB9E,CAAI,GAGtBA,CACT,CAAC,EAED,kBAAmB,CAAC,SAA2BA,EAAM,CACnD,MAAMwF,EAAe,KAAK,cAAgBN,GAAS,aAC7CO,EAAoBD,GAAgBA,EAAa,kBACjDE,EAAgB,KAAK,eAAiB,OAE5C,GAAI/E,EAAM,WAAWX,CAAI,GAAKW,EAAM,iBAAiBX,CAAI,EACvD,OAAOA,EAGT,GAAIA,GAAQW,EAAM,SAASX,CAAI,IAAOyF,GAAqB,CAAC,KAAK,cAAiBC,GAAgB,CAEhG,MAAMC,EAAoB,EADAH,GAAgBA,EAAa,oBACPE,EAEhD,GAAI,CACF,OAAO,KAAK,MAAM1F,EAAM,KAAK,YAAY,CAC3C,OAASiF,EAAG,CACV,GAAIU,EACF,MAAIV,EAAE,OAAS,cACP5E,EAAW,KAAK4E,EAAG5E,EAAW,iBAAkB,KAAM,KAAM,KAAK,QAAQ,EAE3E4E,CAEV,CACF,CAEA,OAAOjF,CACT,CAAC,EAMD,QAAS,EAET,eAAgB,aAChB,eAAgB,eAEhB,iBAAkB,GAClB,cAAe,GAEf,IAAK,CACH,SAAUqE,EAAS,QAAQ,SAC3B,KAAMA,EAAS,QAAQ,IAC3B,EAEE,eAAgB,SAAwBuB,EAAQ,CAC9C,OAAOA,GAAU,KAAOA,EAAS,GACnC,EAEA,QAAS,CACP,OAAQ,CACN,OAAU,oCACV,eAAgB,MACtB,CACA,CACA,EAEAjF,EAAM,QAAQ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,OAAO,EAAIkF,GAAW,CAC3EX,GAAS,QAAQW,CAAM,EAAI,CAAA,CAC7B,CAAC,ECxJD,MAAMC,GAAoBnF,EAAM,YAAY,CAC1C,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,YAC5B,CAAC,EAgBDoF,GAAeC,GAAc,CAC3B,MAAMC,EAAS,CAAA,EACf,IAAI/K,EACAhC,EACA4B,EAEJ,OAAAkL,GAAcA,EAAW,MAAM;AAAA,CAAI,EAAE,QAAQ,SAAgBE,EAAM,CACjEpL,EAAIoL,EAAK,QAAQ,GAAG,EACpBhL,EAAMgL,EAAK,UAAU,EAAGpL,CAAC,EAAE,KAAI,EAAG,YAAW,EAC7C5B,EAAMgN,EAAK,UAAUpL,EAAI,CAAC,EAAE,KAAI,EAE5B,GAACI,GAAQ+K,EAAO/K,CAAG,GAAK4K,GAAkB5K,CAAG,KAI7CA,IAAQ,aACN+K,EAAO/K,CAAG,EACZ+K,EAAO/K,CAAG,EAAE,KAAKhC,CAAG,EAEpB+M,EAAO/K,CAAG,EAAI,CAAChC,CAAG,EAGpB+M,EAAO/K,CAAG,EAAI+K,EAAO/K,CAAG,EAAI+K,EAAO/K,CAAG,EAAI,KAAOhC,EAAMA,EAE3D,CAAC,EAEM+M,CACT,ECjDME,GAAa,OAAO,WAAW,EAErC,SAASC,GAAgBC,EAAQ,CAC/B,OAAOA,GAAU,OAAOA,CAAM,EAAE,KAAI,EAAG,YAAW,CACpD,CAEA,SAASC,GAAe5H,EAAO,CAC7B,OAAIA,IAAU,IAASA,GAAS,KACvBA,EAGFiC,EAAM,QAAQjC,CAAK,EAAIA,EAAM,IAAI4H,EAAc,EAAI,OAAO5H,CAAK,CACxE,CAEA,SAAS6H,GAAY5N,EAAK,CACxB,MAAM6N,EAAS,OAAO,OAAO,IAAI,EAC3BC,EAAW,mCACjB,IAAIhE,EAEJ,KAAQA,EAAQgE,EAAS,KAAK9N,CAAG,GAC/B6N,EAAO/D,EAAM,CAAC,CAAC,EAAIA,EAAM,CAAC,EAG5B,OAAO+D,CACT,CAEA,MAAME,GAAqB/N,GAAQ,iCAAiC,KAAKA,EAAI,MAAM,EAEnF,SAASgO,GAAiBpL,EAASmD,EAAO2H,EAAQ3J,EAAQkK,EAAoB,CAC5E,GAAIjG,EAAM,WAAWjE,CAAM,EACzB,OAAOA,EAAO,KAAK,KAAMgC,EAAO2H,CAAM,EAOxC,GAJIO,IACFlI,EAAQ2H,GAGN,EAAC1F,EAAM,SAASjC,CAAK,EAEzB,IAAIiC,EAAM,SAASjE,CAAM,EACvB,OAAOgC,EAAM,QAAQhC,CAAM,IAAM,GAGnC,GAAIiE,EAAM,SAASjE,CAAM,EACvB,OAAOA,EAAO,KAAKgC,CAAK,EAE5B,CAEA,SAASmI,GAAaR,EAAQ,CAC5B,OAAOA,EAAO,KAAI,EACf,YAAW,EAAG,QAAQ,kBAAmB,CAACS,EAAGC,EAAMpO,IAC3CoO,EAAK,YAAW,EAAKpO,CAC7B,CACL,CAEA,SAASqO,GAAepM,EAAKyL,EAAQ,CACnC,MAAMY,EAAetG,EAAM,YAAY,IAAM0F,CAAM,EAEnD,CAAC,MAAO,MAAO,KAAK,EAAE,QAAQa,GAAc,CAC1C,OAAO,eAAetM,EAAKsM,EAAaD,EAAc,CACpD,MAAO,SAASE,EAAMC,EAAMC,EAAM,CAChC,OAAO,KAAKH,CAAU,EAAE,KAAK,KAAMb,EAAQc,EAAMC,EAAMC,CAAI,CAC7D,EACA,aAAc,EACpB,CAAK,CACH,CAAC,CACH,CAEA,IAAAC,EAAA,KAAmB,CACjB,YAAYnC,EAAS,CACnBA,GAAW,KAAK,IAAIA,CAAO,CAC7B,CAEA,IAAIkB,EAAQkB,EAAgBC,EAAS,CACnC,MAAMC,EAAO,KAEb,SAASC,EAAUC,EAAQC,EAASC,EAAU,CAC5C,MAAMC,EAAU1B,GAAgBwB,CAAO,EAEvC,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,wCAAwC,EAG1D,MAAM5M,EAAMyF,EAAM,QAAQ8G,EAAMK,CAAO,GAEpC,CAAC5M,GAAOuM,EAAKvM,CAAG,IAAM,QAAa2M,IAAa,IAASA,IAAa,QAAaJ,EAAKvM,CAAG,IAAM,MAClGuM,EAAKvM,GAAO0M,CAAO,EAAItB,GAAeqB,CAAM,EAEhD,CAEA,MAAMI,EAAa,CAAC5C,EAAS0C,IAC3BlH,EAAM,QAAQwE,EAAS,CAACwC,EAAQC,IAAYF,EAAUC,EAAQC,EAASC,CAAQ,CAAC,EAElF,GAAIlH,EAAM,cAAc0F,CAAM,GAAKA,aAAkB,KAAK,YACxD0B,EAAW1B,EAAQkB,CAAc,UACzB5G,EAAM,SAAS0F,CAAM,IAAMA,EAASA,EAAO,KAAI,IAAO,CAACK,GAAkBL,CAAM,EACvF0B,EAAWhC,GAAaM,CAAM,EAAGkB,CAAc,UACtC5G,EAAM,SAAS0F,CAAM,GAAK1F,EAAM,WAAW0F,CAAM,EAAG,CAC7D,IAAIzL,EAAM,GAAIoN,EAAM9M,EACpB,UAAW+M,KAAS5B,EAAQ,CAC1B,GAAI,CAAC1F,EAAM,QAAQsH,CAAK,EACtB,MAAM,UAAU,8CAA8C,EAGhErN,EAAIM,EAAM+M,EAAM,CAAC,CAAC,GAAKD,EAAOpN,EAAIM,CAAG,GAClCyF,EAAM,QAAQqH,CAAI,EAAI,CAAC,GAAGA,EAAMC,EAAM,CAAC,CAAC,EAAI,CAACD,EAAMC,EAAM,CAAC,CAAC,EAAKA,EAAM,CAAC,CAC5E,CAEAF,EAAWnN,EAAK2M,CAAc,CAChC,MACElB,GAAU,MAAQqB,EAAUH,EAAgBlB,EAAQmB,CAAO,EAG7D,OAAO,IACT,CAEA,IAAInB,EAAQrB,EAAQ,CAGlB,GAFAqB,EAASD,GAAgBC,CAAM,EAE3BA,EAAQ,CACV,MAAMnL,EAAMyF,EAAM,QAAQ,KAAM0F,CAAM,EAEtC,GAAInL,EAAK,CACP,MAAMwD,EAAQ,KAAKxD,CAAG,EAEtB,GAAI,CAAC8J,EACH,OAAOtG,EAGT,GAAIsG,IAAW,GACb,OAAOuB,GAAY7H,CAAK,EAG1B,GAAIiC,EAAM,WAAWqE,CAAM,EACzB,OAAOA,EAAO,KAAK,KAAMtG,EAAOxD,CAAG,EAGrC,GAAIyF,EAAM,SAASqE,CAAM,EACvB,OAAOA,EAAO,KAAKtG,CAAK,EAG1B,MAAM,IAAI,UAAU,wCAAwC,CAC9D,CACF,CACF,CAEA,IAAI2H,EAAQ6B,EAAS,CAGnB,GAFA7B,EAASD,GAAgBC,CAAM,EAE3BA,EAAQ,CACV,MAAMnL,EAAMyF,EAAM,QAAQ,KAAM0F,CAAM,EAEtC,MAAO,CAAC,EAAEnL,GAAO,KAAKA,CAAG,IAAM,SAAc,CAACgN,GAAWvB,GAAiB,KAAM,KAAKzL,CAAG,EAAGA,EAAKgN,CAAO,GACzG,CAEA,MAAO,EACT,CAEA,OAAO7B,EAAQ6B,EAAS,CACtB,MAAMT,EAAO,KACb,IAAIU,EAAU,GAEd,SAASC,EAAaR,EAAS,CAG7B,GAFAA,EAAUxB,GAAgBwB,CAAO,EAE7BA,EAAS,CACX,MAAM1M,EAAMyF,EAAM,QAAQ8G,EAAMG,CAAO,EAEnC1M,IAAQ,CAACgN,GAAWvB,GAAiBc,EAAMA,EAAKvM,CAAG,EAAGA,EAAKgN,CAAO,KACpE,OAAOT,EAAKvM,CAAG,EAEfiN,EAAU,GAEd,CACF,CAEA,OAAIxH,EAAM,QAAQ0F,CAAM,EACtBA,EAAO,QAAQ+B,CAAY,EAE3BA,EAAa/B,CAAM,EAGd8B,CACT,CAEA,MAAMD,EAAS,CACb,MAAMlN,EAAO,OAAO,KAAK,IAAI,EAC7B,IAAIF,EAAIE,EAAK,OACTmN,EAAU,GAEd,KAAOrN,KAAK,CACV,MAAMI,EAAMF,EAAKF,CAAC,GACf,CAACoN,GAAWvB,GAAiB,KAAM,KAAKzL,CAAG,EAAGA,EAAKgN,EAAS,EAAI,KACjE,OAAO,KAAKhN,CAAG,EACfiN,EAAU,GAEd,CAEA,OAAOA,CACT,CAEA,UAAUE,EAAQ,CAChB,MAAMZ,EAAO,KACPtC,EAAU,CAAA,EAEhBxE,OAAAA,EAAM,QAAQ,KAAM,CAACjC,EAAO2H,IAAW,CACrC,MAAMnL,EAAMyF,EAAM,QAAQwE,EAASkB,CAAM,EAEzC,GAAInL,EAAK,CACPuM,EAAKvM,CAAG,EAAIoL,GAAe5H,CAAK,EAChC,OAAO+I,EAAKpB,CAAM,EAClB,MACF,CAEA,MAAMiC,EAAaD,EAASxB,GAAaR,CAAM,EAAI,OAAOA,CAAM,EAAE,KAAI,EAElEiC,IAAejC,GACjB,OAAOoB,EAAKpB,CAAM,EAGpBoB,EAAKa,CAAU,EAAIhC,GAAe5H,CAAK,EAEvCyG,EAAQmD,CAAU,EAAI,EACxB,CAAC,EAEM,IACT,CAEA,UAAUC,EAAS,CACjB,OAAO,KAAK,YAAY,OAAO,KAAM,GAAGA,CAAO,CACjD,CAEA,OAAOC,EAAW,CAChB,MAAM5N,EAAM,OAAO,OAAO,IAAI,EAE9B+F,OAAAA,EAAM,QAAQ,KAAM,CAACjC,EAAO2H,IAAW,CACrC3H,GAAS,MAAQA,IAAU,KAAU9D,EAAIyL,CAAM,EAAImC,GAAa7H,EAAM,QAAQjC,CAAK,EAAIA,EAAM,KAAK,IAAI,EAAIA,EAC5G,CAAC,EAEM9D,CACT,CAEA,CAAC,OAAO,QAAQ,GAAI,CAClB,OAAO,OAAO,QAAQ,KAAK,OAAM,CAAE,EAAE,OAAO,QAAQ,EAAC,CACvD,CAEA,UAAW,CACT,OAAO,OAAO,QAAQ,KAAK,OAAM,CAAE,EAAE,IAAI,CAAC,CAACyL,EAAQ3H,CAAK,IAAM2H,EAAS,KAAO3H,CAAK,EAAE,KAAK;AAAA,CAAI,CAChG,CAEA,cAAe,CACb,OAAO,KAAK,IAAI,YAAY,GAAK,CAAA,CACnC,CAEA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,cACT,CAEA,OAAO,KAAKhG,EAAO,CACjB,OAAOA,aAAiB,KAAOA,EAAQ,IAAI,KAAKA,CAAK,CACvD,CAEA,OAAO,OAAO+P,KAAUF,EAAS,CAC/B,MAAMG,EAAW,IAAI,KAAKD,CAAK,EAE/B,OAAAF,EAAQ,QAAShJ,GAAWmJ,EAAS,IAAInJ,CAAM,CAAC,EAEzCmJ,CACT,CAEA,OAAO,SAASrC,EAAQ,CAKtB,MAAMsC,GAJY,KAAKxC,EAAU,EAAK,KAAKA,EAAU,EAAI,CACvD,UAAW,CAAA,CACjB,GAEgC,UACtBvM,EAAY,KAAK,UAEvB,SAASgP,EAAehB,EAAS,CAC/B,MAAME,EAAU1B,GAAgBwB,CAAO,EAElCe,EAAUb,CAAO,IACpBd,GAAepN,EAAWgO,CAAO,EACjCe,EAAUb,CAAO,EAAI,GAEzB,CAEAnH,OAAAA,EAAM,QAAQ0F,CAAM,EAAIA,EAAO,QAAQuC,CAAc,EAAIA,EAAevC,CAAM,EAEvE,IACT,CACF,EAEAwC,EAAa,SAAS,CAAC,eAAgB,iBAAkB,SAAU,kBAAmB,aAAc,eAAe,CAAC,EAGpHlI,EAAM,kBAAkBkI,EAAa,UAAW,CAAC,CAAC,MAAAnK,CAAK,EAAGxD,IAAQ,CAChE,IAAI4N,EAAS5N,EAAI,CAAC,EAAE,YAAW,EAAKA,EAAI,MAAM,CAAC,EAC/C,MAAO,CACL,IAAK,IAAMwD,EACX,IAAIqK,EAAa,CACf,KAAKD,CAAM,EAAIC,CACjB,CACJ,CACA,CAAC,EAEDpI,EAAM,cAAckI,CAAY,ECzSjB,SAASG,GAAcC,EAAKvI,EAAU,CACnD,MAAMF,EAAS,MAAQ0E,GACjB3J,EAAUmF,GAAYF,EACtB2E,EAAU0D,EAAa,KAAKtN,EAAQ,OAAO,EACjD,IAAIyE,EAAOzE,EAAQ,KAEnBoF,OAAAA,EAAM,QAAQsI,EAAK,SAAmB/Q,EAAI,CACxC8H,EAAO9H,EAAG,KAAKsI,EAAQR,EAAMmF,EAAQ,UAAS,EAAIzE,EAAWA,EAAS,OAAS,MAAS,CAC1F,CAAC,EAEDyE,EAAQ,UAAS,EAEVnF,CACT,CCzBe,SAASkJ,GAASxK,EAAO,CACtC,MAAO,CAAC,EAAEA,GAASA,EAAM,WAC3B,CCUA,SAASyK,GAAc7I,EAASE,EAAQC,EAAS,CAE/CJ,EAAW,KAAK,KAAMC,GAAkB,WAAsBD,EAAW,aAAcG,EAAQC,CAAO,EACtG,KAAK,KAAO,eACd,CAEAE,EAAM,SAASwI,GAAe9I,EAAY,CACxC,WAAY,EACd,CAAC,ECTc,SAAS+I,GAAOC,EAASC,EAAQ5I,EAAU,CACxD,MAAM6I,EAAiB7I,EAAS,OAAO,eACnC,CAACA,EAAS,QAAU,CAAC6I,GAAkBA,EAAe7I,EAAS,MAAM,EACvE2I,EAAQ3I,CAAQ,EAEhB4I,EAAO,IAAIjJ,EACT,mCAAqCK,EAAS,OAC9C,CAACL,EAAW,gBAAiBA,EAAW,gBAAgB,EAAE,KAAK,MAAMK,EAAS,OAAS,GAAG,EAAI,CAAC,EAC/FA,EAAS,OACTA,EAAS,QACTA,CACN,CAAK,CAEL,CCxBe,SAAS8I,GAAczG,EAAK,CACzC,MAAMN,EAAQ,4BAA4B,KAAKM,CAAG,EAClD,OAAON,GAASA,EAAM,CAAC,GAAK,EAC9B,CCGA,SAASgH,GAAYC,EAAcC,EAAK,CACtCD,EAAeA,GAAgB,GAC/B,MAAME,EAAQ,IAAI,MAAMF,CAAY,EAC9BG,EAAa,IAAI,MAAMH,CAAY,EACzC,IAAII,EAAO,EACPC,EAAO,EACPC,EAEJ,OAAAL,EAAMA,IAAQ,OAAYA,EAAM,IAEzB,SAAcM,EAAa,CAChC,MAAMC,EAAM,KAAK,IAAG,EAEdC,EAAYN,EAAWE,CAAI,EAE5BC,IACHA,EAAgBE,GAGlBN,EAAME,CAAI,EAAIG,EACdJ,EAAWC,CAAI,EAAII,EAEnB,IAAIpP,EAAIiP,EACJK,EAAa,EAEjB,KAAOtP,IAAMgP,GACXM,GAAcR,EAAM9O,GAAG,EACvBA,EAAIA,EAAI4O,EASV,GANAI,GAAQA,EAAO,GAAKJ,EAEhBI,IAASC,IACXA,GAAQA,EAAO,GAAKL,GAGlBQ,EAAMF,EAAgBL,EACxB,OAGF,MAAMU,EAASF,GAAaD,EAAMC,EAElC,OAAOE,EAAS,KAAK,MAAMD,EAAa,IAAOC,CAAM,EAAI,MAC3D,CACF,CC9CA,SAASC,GAASpS,EAAIqS,EAAM,CAC1B,IAAIC,EAAY,EACZC,EAAY,IAAOF,EACnBG,EACAC,EAEJ,MAAMC,EAAS,CAACC,EAAMX,EAAM,KAAK,IAAG,IAAO,CACzCM,EAAYN,EACZQ,EAAW,KACPC,IACF,aAAaA,CAAK,EAClBA,EAAQ,MAEVzS,EAAG,GAAG2S,CAAI,CACZ,EAoBA,MAAO,CAlBW,IAAIA,IAAS,CAC7B,MAAMX,EAAM,KAAK,IAAG,EACdG,EAASH,EAAMM,EAChBH,GAAUI,EACbG,EAAOC,EAAMX,CAAG,GAEhBQ,EAAWG,EACNF,IACHA,EAAQ,WAAW,IAAM,CACvBA,EAAQ,KACRC,EAAOF,CAAQ,CACjB,EAAGD,EAAYJ,CAAM,GAG3B,EAEc,IAAMK,GAAYE,EAAOF,CAAQ,CAEvB,CAC1B,CCrCO,MAAMI,GAAuB,CAACC,EAAUC,EAAkBT,EAAO,IAAM,CAC5E,IAAIU,EAAgB,EACpB,MAAMC,EAAezB,GAAY,GAAI,GAAG,EAExC,OAAOa,GAASrF,GAAK,CACnB,MAAMkG,EAASlG,EAAE,OACXmG,EAAQnG,EAAE,iBAAmBA,EAAE,MAAQ,OACvCoG,EAAgBF,EAASF,EACzBK,EAAOJ,EAAaG,CAAa,EACjCE,EAAUJ,GAAUC,EAE1BH,EAAgBE,EAEhB,MAAMnL,EAAO,CACX,OAAAmL,EACA,MAAAC,EACA,SAAUA,EAASD,EAASC,EAAS,OACrC,MAAOC,EACP,KAAMC,GAAc,OACpB,UAAWA,GAAQF,GAASG,GAAWH,EAAQD,GAAUG,EAAO,OAChE,MAAOrG,EACP,iBAAkBmG,GAAS,KAC3B,CAACJ,EAAmB,WAAa,QAAQ,EAAG,EAClD,EAEID,EAAS/K,CAAI,CACf,EAAGuK,CAAI,CACT,EAEaiB,GAAyB,CAACJ,EAAOK,IAAc,CAC1D,MAAMC,EAAmBN,GAAS,KAElC,MAAO,CAAED,GAAWM,EAAU,CAAC,EAAE,CAC/B,iBAAAC,EACA,MAAAN,EACA,OAAAD,CACJ,CAAG,EAAGM,EAAU,CAAC,CAAC,CAClB,EAEaE,GAAkBzT,GAAO,IAAI2S,IAASlK,EAAM,KAAK,IAAMzI,EAAG,GAAG2S,CAAI,CAAC,ECzC/Ee,GAAevH,EAAS,uBAAyB,CAACD,EAAQyH,IAAY9I,IACpEA,EAAM,IAAI,IAAIA,EAAKsB,EAAS,MAAM,EAGhCD,EAAO,WAAarB,EAAI,UACxBqB,EAAO,OAASrB,EAAI,OACnB8I,GAAUzH,EAAO,OAASrB,EAAI,QAGjC,IAAI,IAAIsB,EAAS,MAAM,EACvBA,EAAS,WAAa,kBAAkB,KAAKA,EAAS,UAAU,SAAS,CAC3E,EAAI,IAAM,GCVVyH,GAAezH,EAAS,sBAGtB,CACE,MAAM9F,EAAMG,EAAOqN,EAAS1K,EAAM2K,EAAQC,EAAQ,CAChD,MAAMC,EAAS,CAAC3N,EAAO,IAAM,mBAAmBG,CAAK,CAAC,EAEtDiC,EAAM,SAASoL,CAAO,GAAKG,EAAO,KAAK,WAAa,IAAI,KAAKH,CAAO,EAAE,YAAW,CAAE,EAEnFpL,EAAM,SAASU,CAAI,GAAK6K,EAAO,KAAK,QAAU7K,CAAI,EAElDV,EAAM,SAASqL,CAAM,GAAKE,EAAO,KAAK,UAAYF,CAAM,EAExDC,IAAW,IAAQC,EAAO,KAAK,QAAQ,EAEvC,SAAS,OAASA,EAAO,KAAK,IAAI,CACpC,EAEA,KAAK3N,EAAM,CACT,MAAMkE,EAAQ,SAAS,OAAO,MAAM,IAAI,OAAO,aAAelE,EAAO,WAAW,CAAC,EACjF,OAAQkE,EAAQ,mBAAmBA,EAAM,CAAC,CAAC,EAAI,IACjD,EAEA,OAAOlE,EAAM,CACX,KAAK,MAAMA,EAAM,GAAI,KAAK,IAAG,EAAK,KAAQ,CAC5C,CACJ,EAKE,CACE,OAAQ,CAAC,EACT,MAAO,CACL,OAAO,IACT,EACA,QAAS,CAAC,CACd,EC/Be,SAAS4N,GAAcpJ,EAAK,CAIzC,MAAO,8BAA8B,KAAKA,CAAG,CAC/C,CCJe,SAASqJ,GAAYC,EAASC,EAAa,CACxD,OAAOA,EACHD,EAAQ,QAAQ,SAAU,EAAE,EAAI,IAAMC,EAAY,QAAQ,OAAQ,EAAE,EACpED,CACN,CCCe,SAASE,GAAcF,EAASG,EAAcC,EAAmB,CAC9E,IAAIC,EAAgB,CAACP,GAAcK,CAAY,EAC/C,OAAIH,IAAYK,GAAiBD,GAAqB,IAC7CL,GAAYC,EAASG,CAAY,EAEnCA,CACT,CChBA,MAAMG,GAAmBjU,GAAUA,aAAiBmQ,EAAe,CAAE,GAAGnQ,CAAK,EAAKA,EAWnE,SAASkU,EAAYC,EAASC,EAAS,CAEpDA,EAAUA,GAAW,CAAA,EACrB,MAAMtM,EAAS,CAAA,EAEf,SAASuM,EAAexN,EAAQD,EAAQ1C,EAAMnB,EAAU,CACtD,OAAIkF,EAAM,cAAcpB,CAAM,GAAKoB,EAAM,cAAcrB,CAAM,EACpDqB,EAAM,MAAM,KAAK,CAAC,SAAAlF,CAAQ,EAAG8D,EAAQD,CAAM,EACzCqB,EAAM,cAAcrB,CAAM,EAC5BqB,EAAM,MAAM,CAAA,EAAIrB,CAAM,EACpBqB,EAAM,QAAQrB,CAAM,EACtBA,EAAO,MAAK,EAEdA,CACT,CAGA,SAAS0N,EAAoBlR,EAAGC,EAAGa,EAAOnB,EAAU,CAClD,GAAKkF,EAAM,YAAY5E,CAAC,GAEjB,GAAI,CAAC4E,EAAM,YAAY7E,CAAC,EAC7B,OAAOiR,EAAe,OAAWjR,EAAGc,EAAOnB,CAAQ,MAFnD,QAAOsR,EAAejR,EAAGC,EAAGa,EAAOnB,CAAQ,CAI/C,CAGA,SAASwR,EAAiBnR,EAAGC,EAAG,CAC9B,GAAI,CAAC4E,EAAM,YAAY5E,CAAC,EACtB,OAAOgR,EAAe,OAAWhR,CAAC,CAEtC,CAGA,SAASmR,EAAiBpR,EAAGC,EAAG,CAC9B,GAAK4E,EAAM,YAAY5E,CAAC,GAEjB,GAAI,CAAC4E,EAAM,YAAY7E,CAAC,EAC7B,OAAOiR,EAAe,OAAWjR,CAAC,MAFlC,QAAOiR,EAAe,OAAWhR,CAAC,CAItC,CAGA,SAASoR,EAAgBrR,EAAGC,EAAGa,EAAM,CACnC,GAAIA,KAAQkQ,EACV,OAAOC,EAAejR,EAAGC,CAAC,EACrB,GAAIa,KAAQiQ,EACjB,OAAOE,EAAe,OAAWjR,CAAC,CAEtC,CAEA,MAAMsR,EAAW,CACf,IAAKH,EACL,OAAQA,EACR,KAAMA,EACN,QAASC,EACT,iBAAkBA,EAClB,kBAAmBA,EACnB,iBAAkBA,EAClB,QAASA,EACT,eAAgBA,EAChB,gBAAiBA,EACjB,cAAeA,EACf,QAASA,EACT,aAAcA,EACd,eAAgBA,EAChB,eAAgBA,EAChB,iBAAkBA,EAClB,mBAAoBA,EACpB,WAAYA,EACZ,iBAAkBA,EAClB,cAAeA,EACf,eAAgBA,EAChB,UAAWA,EACX,UAAWA,EACX,WAAYA,EACZ,YAAaA,EACb,WAAYA,EACZ,iBAAkBA,EAClB,eAAgBC,EAChB,QAAS,CAACrR,EAAGC,EAAIa,IAASoQ,EAAoBL,GAAgB7Q,CAAC,EAAG6Q,GAAgB5Q,CAAC,EAAEa,EAAM,EAAI,CACnG,EAEE+D,OAAAA,EAAM,QAAQ,OAAO,KAAK,CAAC,GAAGkM,EAAS,GAAGC,CAAO,CAAC,EAAG,SAA4BlQ,EAAM,CACrF,MAAMpB,EAAQ4R,EAASxQ,CAAI,GAAKoQ,EAC1BK,EAAc7R,EAAMqR,EAAQjQ,CAAI,EAAGkQ,EAAQlQ,CAAI,EAAGA,CAAI,EAC3D+D,EAAM,YAAY0M,CAAW,GAAK7R,IAAU2R,IAAqB3M,EAAO5D,CAAI,EAAIyQ,EACnF,CAAC,EAEM7M,CACT,CChGA,MAAA8M,GAAgB9M,GAAW,CACzB,MAAM+M,EAAYX,EAAY,CAAA,EAAIpM,CAAM,EAExC,GAAI,CAAE,KAAAR,EAAM,cAAAwN,EAAe,eAAAC,EAAgB,eAAAC,EAAgB,QAAAvI,EAAS,KAAAwI,CAAI,EAAKJ,EAa7E,GAXAA,EAAU,QAAUpI,EAAU0D,EAAa,KAAK1D,CAAO,EAEvDoI,EAAU,IAAMzK,GAASyJ,GAAcgB,EAAU,QAASA,EAAU,IAAKA,EAAU,iBAAiB,EAAG/M,EAAO,OAAQA,EAAO,gBAAgB,EAGzImN,GACFxI,EAAQ,IAAI,gBAAiB,SAC3B,MAAMwI,EAAK,UAAY,IAAM,KAAOA,EAAK,SAAW,SAAS,mBAAmBA,EAAK,QAAQ,CAAC,EAAI,GAAG,CAC3G,EAGMhN,EAAM,WAAWX,CAAI,GACvB,GAAIqE,EAAS,uBAAyBA,EAAS,+BAC7Cc,EAAQ,eAAe,MAAS,UACvBxE,EAAM,WAAWX,EAAK,UAAU,EAAG,CAE5C,MAAM4N,EAAc5N,EAAK,WAAU,EAE7B6N,EAAiB,CAAC,eAAgB,gBAAgB,EACxD,OAAO,QAAQD,CAAW,EAAE,QAAQ,CAAC,CAAC1S,EAAKhC,CAAG,IAAM,CAC9C2U,EAAe,SAAS3S,EAAI,YAAW,CAAE,GAC3CiK,EAAQ,IAAIjK,EAAKhC,CAAG,CAExB,CAAC,CACH,EAOF,GAAImL,EAAS,wBACXmJ,GAAiB7M,EAAM,WAAW6M,CAAa,IAAMA,EAAgBA,EAAcD,CAAS,GAExFC,GAAkBA,IAAkB,IAAS5B,GAAgB2B,EAAU,GAAG,GAAI,CAEhF,MAAMO,EAAYL,GAAkBC,GAAkB5B,GAAQ,KAAK4B,CAAc,EAE7EI,GACF3I,EAAQ,IAAIsI,EAAgBK,CAAS,CAEzC,CAGF,OAAOP,CACT,EChDMQ,GAAwB,OAAO,eAAmB,IAExDC,GAAeD,IAAyB,SAAUvN,EAAQ,CACxD,OAAO,IAAI,QAAQ,SAA4B6I,EAASC,EAAQ,CAC9D,MAAM2E,EAAUX,GAAc9M,CAAM,EACpC,IAAI0N,EAAcD,EAAQ,KAC1B,MAAME,EAAiBtF,EAAa,KAAKoF,EAAQ,OAAO,EAAE,UAAS,EACnE,GAAI,CAAC,aAAAG,EAAc,iBAAAC,EAAkB,mBAAAC,CAAkB,EAAIL,EACvDM,EACAC,EAAiBC,EACjBC,EAAaC,EAEjB,SAASC,GAAO,CACdF,GAAeA,EAAW,EAC1BC,GAAiBA,EAAa,EAE9BV,EAAQ,aAAeA,EAAQ,YAAY,YAAYM,CAAU,EAEjEN,EAAQ,QAAUA,EAAQ,OAAO,oBAAoB,QAASM,CAAU,CAC1E,CAEA,IAAI9N,EAAU,IAAI,eAElBA,EAAQ,KAAKwN,EAAQ,OAAO,YAAW,EAAIA,EAAQ,IAAK,EAAI,EAG5DxN,EAAQ,QAAUwN,EAAQ,QAE1B,SAASY,GAAY,CACnB,GAAI,CAACpO,EACH,OAGF,MAAMqO,EAAkBjG,EAAa,KACnC,0BAA2BpI,GAAWA,EAAQ,sBAAqB,CAC3E,EAGYC,EAAW,CACf,KAHmB,CAAC0N,GAAgBA,IAAiB,QAAUA,IAAiB,OAChF3N,EAAQ,aAAeA,EAAQ,SAG/B,OAAQA,EAAQ,OAChB,WAAYA,EAAQ,WACpB,QAASqO,EACT,OAAAtO,EACA,QAAAC,CACR,EAEM2I,GAAO,SAAkB1K,EAAO,CAC9B2K,EAAQ3K,CAAK,EACbkQ,EAAI,CACN,EAAG,SAAiBG,EAAK,CACvBzF,EAAOyF,CAAG,EACVH,EAAI,CACN,EAAGlO,CAAQ,EAGXD,EAAU,IACZ,CAEI,cAAeA,EAEjBA,EAAQ,UAAYoO,EAGpBpO,EAAQ,mBAAqB,UAAsB,CAC7C,CAACA,GAAWA,EAAQ,aAAe,GAQnCA,EAAQ,SAAW,GAAK,EAAEA,EAAQ,aAAeA,EAAQ,YAAY,QAAQ,OAAO,IAAM,IAK9F,WAAWoO,CAAS,CACtB,EAIFpO,EAAQ,QAAU,UAAuB,CAClCA,IAIL6I,EAAO,IAAIjJ,EAAW,kBAAmBA,EAAW,aAAcG,EAAQC,CAAO,CAAC,EAGlFA,EAAU,KACZ,EAGFA,EAAQ,QAAU,SAAqBuO,EAAO,CAIzC,MAAMjO,EAAMiO,GAASA,EAAM,QAAUA,EAAM,QAAU,gBAC/CD,EAAM,IAAI1O,EAAWU,EAAKV,EAAW,YAAaG,EAAQC,CAAO,EAEvEsO,EAAI,MAAQC,GAAS,KACrB1F,EAAOyF,CAAG,EACVtO,EAAU,IACb,EAGAA,EAAQ,UAAY,UAAyB,CAC3C,IAAIwO,EAAsBhB,EAAQ,QAAU,cAAgBA,EAAQ,QAAU,cAAgB,mBAC9F,MAAMzI,EAAeyI,EAAQ,cAAgBzK,GACzCyK,EAAQ,sBACVgB,EAAsBhB,EAAQ,qBAEhC3E,EAAO,IAAIjJ,EACT4O,EACAzJ,EAAa,oBAAsBnF,EAAW,UAAYA,EAAW,aACrEG,EACAC,CAAO,CAAC,EAGVA,EAAU,IACZ,EAGAyN,IAAgB,QAAaC,EAAe,eAAe,IAAI,EAG3D,qBAAsB1N,GACxBE,EAAM,QAAQwN,EAAe,OAAM,EAAI,SAA0BjV,EAAKgC,EAAK,CACzEuF,EAAQ,iBAAiBvF,EAAKhC,CAAG,CACnC,CAAC,EAIEyH,EAAM,YAAYsN,EAAQ,eAAe,IAC5CxN,EAAQ,gBAAkB,CAAC,CAACwN,EAAQ,iBAIlCG,GAAgBA,IAAiB,SACnC3N,EAAQ,aAAewN,EAAQ,cAI7BK,IACD,CAACG,EAAmBE,CAAa,EAAI7D,GAAqBwD,EAAoB,EAAI,EACnF7N,EAAQ,iBAAiB,WAAYgO,CAAiB,GAIpDJ,GAAoB5N,EAAQ,SAC7B,CAAC+N,EAAiBE,CAAW,EAAI5D,GAAqBuD,CAAgB,EAEvE5N,EAAQ,OAAO,iBAAiB,WAAY+N,CAAe,EAE3D/N,EAAQ,OAAO,iBAAiB,UAAWiO,CAAW,IAGpDT,EAAQ,aAAeA,EAAQ,UAGjCM,EAAaW,GAAU,CAChBzO,IAGL6I,EAAO,CAAC4F,GAAUA,EAAO,KAAO,IAAI/F,GAAc,KAAM3I,EAAQC,CAAO,EAAIyO,CAAM,EACjFzO,EAAQ,MAAK,EACbA,EAAU,KACZ,EAEAwN,EAAQ,aAAeA,EAAQ,YAAY,UAAUM,CAAU,EAC3DN,EAAQ,SACVA,EAAQ,OAAO,QAAUM,EAAU,EAAKN,EAAQ,OAAO,iBAAiB,QAASM,CAAU,IAI/F,MAAMY,EAAW3F,GAAcyE,EAAQ,GAAG,EAE1C,GAAIkB,GAAY9K,EAAS,UAAU,QAAQ8K,CAAQ,IAAM,GAAI,CAC3D7F,EAAO,IAAIjJ,EAAW,wBAA0B8O,EAAW,IAAK9O,EAAW,gBAAiBG,CAAM,CAAC,EACnG,MACF,CAIAC,EAAQ,KAAKyN,GAAe,IAAI,CAClC,CAAC,CACH,ECnMMkB,GAAiB,CAACC,EAASC,IAAY,CAC3C,KAAM,CAAC,OAAAC,CAAM,EAAKF,EAAUA,EAAUA,EAAQ,OAAO,OAAO,EAAI,GAEhE,GAAIC,GAAWC,EAAQ,CACrB,IAAIC,EAAa,IAAI,gBAEjBC,EAEJ,MAAMC,EAAU,SAAUC,EAAQ,CAChC,GAAI,CAACF,EAAS,CACZA,EAAU,GACVG,EAAW,EACX,MAAMb,EAAMY,aAAkB,MAAQA,EAAS,KAAK,OACpDH,EAAW,MAAMT,aAAe1O,EAAa0O,EAAM,IAAI5F,GAAc4F,aAAe,MAAQA,EAAI,QAAUA,CAAG,CAAC,CAChH,CACF,EAEA,IAAIpE,EAAQ2E,GAAW,WAAW,IAAM,CACtC3E,EAAQ,KACR+E,EAAQ,IAAIrP,EAAW,WAAWiP,CAAO,kBAAmBjP,EAAW,SAAS,CAAC,CACnF,EAAGiP,CAAO,EAEV,MAAMM,EAAc,IAAM,CACpBP,IACF1E,GAAS,aAAaA,CAAK,EAC3BA,EAAQ,KACR0E,EAAQ,QAAQQ,GAAU,CACxBA,EAAO,YAAcA,EAAO,YAAYH,CAAO,EAAIG,EAAO,oBAAoB,QAASH,CAAO,CAChG,CAAC,EACDL,EAAU,KAEd,EAEAA,EAAQ,QAASQ,GAAWA,EAAO,iBAAiB,QAASH,CAAO,CAAC,EAErE,KAAM,CAAC,OAAAG,CAAM,EAAIL,EAEjB,OAAAK,EAAO,YAAc,IAAMlP,EAAM,KAAKiP,CAAW,EAE1CC,CACT,CACF,EC5CaC,GAAc,UAAWC,EAAOC,EAAW,CACtD,IAAI/U,EAAM8U,EAAM,WAEhB,GAAkB9U,EAAM+U,EAAW,CACjC,MAAMD,EACN,MACF,CAEA,IAAIE,EAAM,EACNC,EAEJ,KAAOD,EAAMhV,GACXiV,EAAMD,EAAMD,EACZ,MAAMD,EAAM,MAAME,EAAKC,CAAG,EAC1BD,EAAMC,CAEV,EAEaC,GAAY,gBAAiBC,EAAUJ,EAAW,CAC7D,gBAAiBD,KAASM,GAAWD,CAAQ,EAC3C,MAAON,GAAYC,EAAOC,CAAS,CAEvC,EAEMK,GAAa,gBAAiBC,EAAQ,CAC1C,GAAIA,EAAO,OAAO,aAAa,EAAG,CAChC,MAAOA,EACP,MACF,CAEA,MAAMC,EAASD,EAAO,UAAS,EAC/B,GAAI,CACF,OAAS,CACP,KAAM,CAAC,KAAA1B,EAAM,MAAAlQ,CAAK,EAAI,MAAM6R,EAAO,KAAI,EACvC,GAAI3B,EACF,MAEF,MAAMlQ,CACR,CACF,QAAC,CACC,MAAM6R,EAAO,OAAM,CACrB,CACF,EAEaC,GAAc,CAACF,EAAQN,EAAWS,EAAYC,IAAa,CACtE,MAAMpY,EAAW6X,GAAUG,EAAQN,CAAS,EAE5C,IAAIpG,EAAQ,EACRgF,EACA+B,EAAa1L,GAAM,CAChB2J,IACHA,EAAO,GACP8B,GAAYA,EAASzL,CAAC,EAE1B,EAEA,OAAO,IAAI,eAAe,CACxB,MAAM,KAAKuK,EAAY,CACrB,GAAI,CACF,KAAM,CAAC,KAAAZ,EAAM,MAAAlQ,CAAK,EAAI,MAAMpG,EAAS,KAAI,EAEzC,GAAIsW,EAAM,CACT+B,EAAS,EACRnB,EAAW,MAAK,EAChB,MACF,CAEA,IAAIvU,EAAMyD,EAAM,WAChB,GAAI+R,EAAY,CACd,IAAIG,EAAchH,GAAS3O,EAC3BwV,EAAWG,CAAW,CACxB,CACApB,EAAW,QAAQ,IAAI,WAAW9Q,CAAK,CAAC,CAC1C,OAASqQ,EAAK,CACZ,MAAA4B,EAAU5B,CAAG,EACPA,CACR,CACF,EACA,OAAOY,EAAQ,CACb,OAAAgB,EAAUhB,CAAM,EACTrX,EAAS,OAAM,CACxB,CACJ,EAAK,CACD,cAAe,CACnB,CAAG,CACH,EC5EMuY,GAAqB,GAAK,KAE1B,CAAC,WAAA1X,EAAU,EAAIwH,EAEfmQ,IAAkB,CAAC,CAAC,MAAAC,EAAO,QAAAC,EAAS,SAAAC,CAAQ,KAAO,CACrD,MAAAF,EAAO,QAAAC,EAAS,SAAAC,CACpB,IAAMtQ,EAAM,MAAM,EAEZ,CACN,eAAEuQ,GAAc,YAAEC,EAClB,EAAIxQ,EAAM,OAGJyQ,GAAO,CAAClZ,KAAO2S,IAAS,CAC5B,GAAI,CACF,MAAO,CAAC,CAAC3S,EAAG,GAAG2S,CAAI,CACrB,MAAY,CACV,MAAO,EACT,CACF,EAEMwG,GAAWC,GAAQ,CACvB,KAAM,CAAC,MAAAP,EAAO,QAAAC,EAAS,SAAAC,CAAQ,EAAI,OAAO,OAAO,CAAA,EAAIH,GAAgBQ,CAAG,EAClEC,EAAmBpY,GAAW4X,CAAK,EACnCS,EAAqBrY,GAAW6X,CAAO,EACvCS,EAAsBtY,GAAW8X,CAAQ,EAE/C,GAAI,CAACM,EACH,MAAO,GAGT,MAAMG,EAA4BH,GAAoBpY,GAAW+X,EAAc,EAEzES,EAAaJ,IAAqB,OAAOJ,IAAgB,YACzDvO,GAAajK,GAAQiK,EAAQ,OAAOjK,CAAG,GAAG,IAAIwY,EAAa,EAC7D,MAAOxY,GAAQ,IAAI,WAAW,MAAM,IAAIqY,EAAQrY,CAAG,EAAE,YAAW,CAAE,GAGhEiZ,EAAwBJ,GAAsBE,GAA6BN,GAAK,IAAM,CAC1F,IAAIS,EAAiB,GAErB,MAAMC,EAAiB,IAAId,EAAQ3M,EAAS,OAAQ,CAClD,KAAM,IAAI6M,GACV,OAAQ,OACR,IAAI,QAAS,CACX,OAAAW,EAAiB,GACV,MACT,CACN,CAAK,EAAE,QAAQ,IAAI,cAAc,EAE7B,OAAOA,GAAkB,CAACC,CAC5B,CAAC,EAEKC,EAAyBN,GAAuBC,GACpDN,GAAK,IAAMzQ,EAAM,iBAAiB,IAAIsQ,EAAS,EAAE,EAAE,IAAI,CAAC,EAEpDe,EAAY,CAChB,OAAQD,IAA4BE,GAAQA,EAAI,KACpD,EAEEV,GACE,CAAC,OAAQ,cAAe,OAAQ,WAAY,QAAQ,EAAE,QAAQ1Y,GAAQ,CACpE,CAACmZ,EAAUnZ,CAAI,IAAMmZ,EAAUnZ,CAAI,EAAI,CAACoZ,EAAKzR,IAAW,CACtD,IAAIqF,EAASoM,GAAOA,EAAIpZ,CAAI,EAE5B,GAAIgN,EACF,OAAOA,EAAO,KAAKoM,CAAG,EAGxB,MAAM,IAAI5R,EAAW,kBAAkBxH,CAAI,qBAAsBwH,EAAW,gBAAiBG,CAAM,CACrG,EACF,CAAC,EAGH,MAAM0R,EAAgB,MAAOC,GAAS,CACpC,GAAIA,GAAQ,KACV,MAAO,GAGT,GAAIxR,EAAM,OAAOwR,CAAI,EACnB,OAAOA,EAAK,KAGd,GAAIxR,EAAM,oBAAoBwR,CAAI,EAKhC,OAAQ,MAJS,IAAInB,EAAQ3M,EAAS,OAAQ,CAC5C,OAAQ,OACR,KAAA8N,CACR,CAAO,EACsB,YAAW,GAAI,WAGxC,GAAIxR,EAAM,kBAAkBwR,CAAI,GAAKxR,EAAM,cAAcwR,CAAI,EAC3D,OAAOA,EAAK,WAOd,GAJIxR,EAAM,kBAAkBwR,CAAI,IAC9BA,EAAOA,EAAO,IAGZxR,EAAM,SAASwR,CAAI,EACrB,OAAQ,MAAMR,EAAWQ,CAAI,GAAG,UAEpC,EAEMC,EAAoB,MAAOjN,EAASgN,IAAS,CACjD,MAAM5C,EAAS5O,EAAM,eAAewE,EAAQ,iBAAgB,CAAE,EAE9D,OAAOoK,GAAiB2C,EAAcC,CAAI,CAC5C,EAEA,MAAO,OAAO3R,GAAW,CACvB,GAAI,CACF,IAAAuC,EACA,OAAA8C,EACA,KAAA7F,EACA,OAAA6P,EACA,YAAAwC,EACA,QAAA/C,EACA,mBAAAhB,EACA,iBAAAD,EACA,aAAAD,EACA,QAAAjJ,EACA,gBAAAmN,EAAkB,cAClB,aAAAC,CACN,EAAQjF,GAAc9M,CAAM,EAExB4N,EAAeA,GAAgBA,EAAe,IAAI,YAAW,EAAK,OAElE,IAAIoE,EAAiBpD,GAAe,CAACS,EAAQwC,GAAeA,EAAY,eAAe,EAAG/C,CAAO,EAE7F7O,EAAU,KAEd,MAAMmP,EAAc4C,GAAkBA,EAAe,cAAgB,IAAM,CACzEA,EAAe,YAAW,CAC5B,GAEA,IAAIC,EAEJ,GAAI,CACF,GACEpE,GAAoBuD,GAAyB/L,IAAW,OAASA,IAAW,SAC3E4M,EAAuB,MAAML,EAAkBjN,EAASnF,CAAI,KAAO,EACpE,CACA,IAAI0S,EAAW,IAAI1B,EAAQjO,EAAK,CAC9B,OAAQ,OACR,KAAM/C,EACN,OAAQ,MAClB,CAAS,EAEG2S,EAMJ,GAJIhS,EAAM,WAAWX,CAAI,IAAM2S,EAAoBD,EAAS,QAAQ,IAAI,cAAc,IACpFvN,EAAQ,eAAewN,CAAiB,EAGtCD,EAAS,KAAM,CACjB,KAAM,CAACjC,GAAYmC,EAAK,EAAIpH,GAC1BiH,EACA3H,GAAqBa,GAAe0C,CAAgB,CAAC,CACjE,EAEUrO,EAAOwQ,GAAYkC,EAAS,KAAM7B,GAAoBJ,GAAYmC,EAAK,CACzE,CACF,CAEKjS,EAAM,SAAS2R,CAAe,IACjCA,EAAkBA,EAAkB,UAAY,QAKlD,MAAMO,EAAyBrB,GAAsB,gBAAiBR,EAAQ,UAExE8B,EAAkB,CACtB,GAAGP,EACH,OAAQC,EACR,OAAQ3M,EAAO,YAAW,EAC1B,QAASV,EAAQ,UAAS,EAAG,OAAM,EACnC,KAAMnF,EACN,OAAQ,OACR,YAAa6S,EAAyBP,EAAkB,MAChE,EAEM7R,EAAU+Q,GAAsB,IAAIR,EAAQjO,EAAK+P,CAAe,EAEhE,IAAIpS,EAAW,MAAO8Q,EAAqBT,EAAMtQ,EAAS8R,CAAY,EAAIxB,EAAMhO,EAAK+P,CAAe,GAEpG,MAAMC,EAAmBhB,IAA2B3D,IAAiB,UAAYA,IAAiB,YAElG,GAAI2D,IAA2BzD,GAAuByE,GAAoBnD,GAAe,CACvF,MAAMjO,EAAU,CAAA,EAEhB,CAAC,SAAU,aAAc,SAAS,EAAE,QAAQ/E,IAAQ,CAClD+E,EAAQ/E,EAAI,EAAI8D,EAAS9D,EAAI,CAC/B,CAAC,EAED,MAAMoW,EAAwBrS,EAAM,eAAeD,EAAS,QAAQ,IAAI,gBAAgB,CAAC,EAEnF,CAAC+P,GAAYmC,EAAK,EAAItE,GAAsB9C,GAChDwH,EACAlI,GAAqBa,GAAe2C,CAAkB,EAAG,EAAI,CACvE,GAAa,CAAA,EAEL5N,EAAW,IAAIuQ,EACbT,GAAY9P,EAAS,KAAMmQ,GAAoBJ,GAAY,IAAM,CAC/DmC,IAASA,GAAK,EACdhD,GAAeA,EAAW,CAC5B,CAAC,EACDjO,CACV,CACM,CAEAyM,EAAeA,GAAgB,OAE/B,IAAI6E,GAAe,MAAMjB,EAAUrR,EAAM,QAAQqR,EAAW5D,CAAY,GAAK,MAAM,EAAE1N,EAAUF,CAAM,EAErG,OAACuS,GAAoBnD,GAAeA,EAAW,EAExC,MAAM,IAAI,QAAQ,CAACvG,EAASC,IAAW,CAC5CF,GAAOC,EAASC,EAAQ,CACtB,KAAM2J,GACN,QAASpK,EAAa,KAAKnI,EAAS,OAAO,EAC3C,OAAQA,EAAS,OACjB,WAAYA,EAAS,WACrB,OAAAF,EACA,QAAAC,CACV,CAAS,CACH,CAAC,CACH,OAASsO,EAAK,CAGZ,MAFAa,GAAeA,EAAW,EAEtBb,GAAOA,EAAI,OAAS,aAAe,qBAAqB,KAAKA,EAAI,OAAO,EACpE,OAAO,OACX,IAAI1O,EAAW,gBAAiBA,EAAW,YAAaG,EAAQC,CAAO,EACvE,CACE,MAAOsO,EAAI,OAASA,CAChC,CACA,EAGY1O,EAAW,KAAK0O,EAAKA,GAAOA,EAAI,KAAMvO,EAAQC,CAAO,CAC7D,CACF,CACF,EAEMyS,GAAY,IAAI,IAETC,GAAY3S,GAAW,CAClC,IAAI8Q,EAAM3Q,EAAM,MAAM,KAAK,CACzB,cAAe,EACnB,EAAKmQ,GAAgBtQ,EAASA,EAAO,IAAM,IAAI,EAE7C,KAAM,CAAC,MAAAuQ,EAAO,QAAAC,EAAS,SAAAC,CAAQ,EAAIK,EAE7B8B,EAAQ,CACZpC,EAASC,EAAUF,CACvB,EAEE,IAAI9V,EAAMmY,EAAM,OAAQtY,EAAIG,EAC1BoY,EAAM9T,EAAQ+T,EAAMJ,GAEtB,KAAOpY,KACLuY,EAAOD,EAAMtY,CAAC,EACdyE,EAAS+T,EAAI,IAAID,CAAI,EAErB9T,IAAW,QAAa+T,EAAI,IAAID,EAAM9T,EAAUzE,EAAI,IAAI,IAAQuW,GAAQC,CAAG,CAAE,EAE7EgC,EAAM/T,EAGR,OAAOA,CACT,EAEgB4T,GAAQ,ECrRxB,MAAMI,GAAgB,CACpB,KAAMtS,GACN,IAAK+M,GACL,MAAO,CACL,IAAKwF,EACT,CACA,EAEA7S,EAAM,QAAQ4S,GAAe,CAACrb,EAAIwG,IAAU,CAC1C,GAAIxG,EAAI,CACN,GAAI,CACF,OAAO,eAAeA,EAAI,OAAQ,CAAC,MAAAwG,CAAK,CAAC,CAC3C,MAAY,CAEZ,CACA,OAAO,eAAexG,EAAI,cAAe,CAAC,MAAAwG,CAAK,CAAC,CAClD,CACF,CAAC,EAED,MAAM+U,GAAgB9D,GAAW,KAAKA,CAAM,GAEtC+D,GAAoBC,GAAYhT,EAAM,WAAWgT,CAAO,GAAKA,IAAY,MAAQA,IAAY,GAEnGC,GAAe,CACb,WAAY,CAACA,EAAUpT,IAAW,CAChCoT,EAAWjT,EAAM,QAAQiT,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EAEzD,KAAM,CAAC,OAAArE,CAAM,EAAIqE,EACjB,IAAIC,EACAF,EAEJ,MAAMG,EAAkB,CAAA,EAExB,QAAShZ,EAAI,EAAGA,EAAIyU,EAAQzU,IAAK,CAC/B+Y,EAAgBD,EAAS9Y,CAAC,EAC1B,IAAIwI,EAIJ,GAFAqQ,EAAUE,EAEN,CAACH,GAAiBG,CAAa,IACjCF,EAAUJ,IAAejQ,EAAK,OAAOuQ,CAAa,GAAG,aAAa,EAE9DF,IAAY,QACd,MAAM,IAAItT,EAAW,oBAAoBiD,CAAE,GAAG,EAIlD,GAAIqQ,IAAYhT,EAAM,WAAWgT,CAAO,IAAMA,EAAUA,EAAQ,IAAInT,CAAM,IACxE,MAGFsT,EAAgBxQ,GAAM,IAAMxI,CAAC,EAAI6Y,CACnC,CAEA,GAAI,CAACA,EAAS,CAEZ,MAAMI,EAAU,OAAO,QAAQD,CAAe,EAC3C,IAAI,CAAC,CAACxQ,EAAI0Q,CAAK,IAAM,WAAW1Q,CAAE,KAChC0Q,IAAU,GAAQ,sCAAwC,gCACrE,EAEM,IAAIC,EAAI1E,EACLwE,EAAQ,OAAS,EAAI;AAAA,EAAcA,EAAQ,IAAIN,EAAY,EAAE,KAAK;AAAA,CAAI,EAAI,IAAMA,GAAaM,EAAQ,CAAC,CAAC,EACxG,0BAEF,MAAM,IAAI1T,EACR,wDAA0D4T,EAC1D,iBACR,CACI,CAEA,OAAON,CACT,EACA,SAAUJ,EACZ,EChEA,SAASW,GAA6B1T,EAAQ,CAK5C,GAJIA,EAAO,aACTA,EAAO,YAAY,iBAAgB,EAGjCA,EAAO,QAAUA,EAAO,OAAO,QACjC,MAAM,IAAI2I,GAAc,KAAM3I,CAAM,CAExC,CASe,SAAS2T,GAAgB3T,EAAQ,CAC9C,OAAA0T,GAA6B1T,CAAM,EAEnCA,EAAO,QAAUqI,EAAa,KAAKrI,EAAO,OAAO,EAGjDA,EAAO,KAAOwI,GAAc,KAC1BxI,EACAA,EAAO,gBACX,EAEM,CAAC,OAAQ,MAAO,OAAO,EAAE,QAAQA,EAAO,MAAM,IAAM,IACtDA,EAAO,QAAQ,eAAe,oCAAqC,EAAK,EAG1DoT,GAAS,WAAWpT,EAAO,SAAW0E,GAAS,QAAS1E,CAAM,EAE/DA,CAAM,EAAE,KAAK,SAA6BE,EAAU,CACjE,OAAAwT,GAA6B1T,CAAM,EAGnCE,EAAS,KAAOsI,GAAc,KAC5BxI,EACAA,EAAO,kBACPE,CACN,EAEIA,EAAS,QAAUmI,EAAa,KAAKnI,EAAS,OAAO,EAE9CA,CACT,EAAG,SAA4BiP,EAAQ,CACrC,OAAKzG,GAASyG,CAAM,IAClBuE,GAA6B1T,CAAM,EAG/BmP,GAAUA,EAAO,WACnBA,EAAO,SAAS,KAAO3G,GAAc,KACnCxI,EACAA,EAAO,kBACPmP,EAAO,QACjB,EACQA,EAAO,SAAS,QAAU9G,EAAa,KAAK8G,EAAO,SAAS,OAAO,IAIhE,QAAQ,OAAOA,CAAM,CAC9B,CAAC,CACH,CChFO,MAAMyE,GAAU,SCKjBC,GAAa,CAAA,EAGnB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,QAAQ,EAAE,QAAQ,CAACxb,EAAMiC,IAAM,CACnFuZ,GAAWxb,CAAI,EAAI,SAAmBH,EAAO,CAC3C,OAAO,OAAOA,IAAUG,GAAQ,KAAOiC,EAAI,EAAI,KAAO,KAAOjC,CAC/D,CACF,CAAC,EAED,MAAMyb,GAAqB,CAAA,EAW3BD,GAAW,aAAe,SAAsBE,EAAWC,EAASlU,EAAS,CAC3E,SAASmU,EAAcC,EAAKC,EAAM,CAChC,MAAO,WAAaP,GAAU,0BAA6BM,EAAM,IAAOC,GAAQrU,EAAU,KAAOA,EAAU,GAC7G,CAGA,MAAO,CAAC5B,EAAOgW,EAAKE,IAAS,CAC3B,GAAIL,IAAc,GAChB,MAAM,IAAIlU,EACRoU,EAAcC,EAAK,qBAAuBF,EAAU,OAASA,EAAU,GAAG,EAC1EnU,EAAW,cACnB,EAGI,OAAImU,GAAW,CAACF,GAAmBI,CAAG,IACpCJ,GAAmBI,CAAG,EAAI,GAE1B,QAAQ,KACND,EACEC,EACA,+BAAiCF,EAAU,yCACrD,CACA,GAGWD,EAAYA,EAAU7V,EAAOgW,EAAKE,CAAI,EAAI,EACnD,CACF,EAEAP,GAAW,SAAW,SAAkBQ,EAAiB,CACvD,MAAO,CAACnW,EAAOgW,KAEb,QAAQ,KAAK,GAAGA,CAAG,+BAA+BG,CAAe,EAAE,EAC5D,GAEX,EAYA,SAASC,GAAcnT,EAASoT,EAAQC,EAAc,CACpD,GAAI,OAAOrT,GAAY,SACrB,MAAM,IAAItB,EAAW,4BAA6BA,EAAW,oBAAoB,EAEnF,MAAMrF,EAAO,OAAO,KAAK2G,CAAO,EAChC,IAAI7G,EAAIE,EAAK,OACb,KAAOF,KAAM,GAAG,CACd,MAAM4Z,EAAM1Z,EAAKF,CAAC,EACZyZ,EAAYQ,EAAOL,CAAG,EAC5B,GAAIH,EAAW,CACb,MAAM7V,EAAQiD,EAAQ+S,CAAG,EACnBpb,EAASoF,IAAU,QAAa6V,EAAU7V,EAAOgW,EAAK/S,CAAO,EACnE,GAAIrI,IAAW,GACb,MAAM,IAAI+G,EAAW,UAAYqU,EAAM,YAAcpb,EAAQ+G,EAAW,oBAAoB,EAE9F,QACF,CACA,GAAI2U,IAAiB,GACnB,MAAM,IAAI3U,EAAW,kBAAoBqU,EAAKrU,EAAW,cAAc,CAE3E,CACF,CAEA,MAAAkU,GAAe,CACb,cAAAO,GACF,WAAET,EACF,ECvFMA,EAAaE,GAAU,WAS7B,IAAAU,EAAA,KAAY,CACV,YAAYC,EAAgB,CAC1B,KAAK,SAAWA,GAAkB,CAAA,EAClC,KAAK,aAAe,CAClB,QAAS,IAAI/R,GACb,SAAU,IAAIA,EACpB,CACE,CAUA,MAAM,QAAQgS,EAAa3U,EAAQ,CACjC,GAAI,CACF,OAAO,MAAM,KAAK,SAAS2U,EAAa3U,CAAM,CAChD,OAASuO,EAAK,CACZ,GAAIA,aAAe,MAAO,CACxB,IAAIqG,EAAQ,CAAA,EAEZ,MAAM,kBAAoB,MAAM,kBAAkBA,CAAK,EAAKA,EAAQ,IAAI,MAGxE,MAAMhW,EAAQgW,EAAM,MAAQA,EAAM,MAAM,QAAQ,QAAS,EAAE,EAAI,GAC/D,GAAI,CACGrG,EAAI,MAGE3P,GAAS,CAAC,OAAO2P,EAAI,KAAK,EAAE,SAAS3P,EAAM,QAAQ,YAAa,EAAE,CAAC,IAC5E2P,EAAI,OAAS;AAAA,EAAO3P,GAHpB2P,EAAI,MAAQ3P,CAKhB,MAAY,CAEZ,CACF,CAEA,MAAM2P,CACR,CACF,CAEA,SAASoG,EAAa3U,EAAQ,CAGxB,OAAO2U,GAAgB,UACzB3U,EAASA,GAAU,CAAA,EACnBA,EAAO,IAAM2U,GAEb3U,EAAS2U,GAAe,CAAA,EAG1B3U,EAASoM,EAAY,KAAK,SAAUpM,CAAM,EAE1C,KAAM,CAAC,aAAAgF,EAAc,iBAAA6P,EAAkB,QAAAlQ,CAAO,EAAI3E,EAE9CgF,IAAiB,QACnB+O,GAAU,cAAc/O,EAAc,CACpC,kBAAmB6O,EAAW,aAAaA,EAAW,OAAO,EAC7D,kBAAmBA,EAAW,aAAaA,EAAW,OAAO,EAC7D,oBAAqBA,EAAW,aAAaA,EAAW,OAAO,CACvE,EAAS,EAAK,EAGNgB,GAAoB,OAClB1U,EAAM,WAAW0U,CAAgB,EACnC7U,EAAO,iBAAmB,CACxB,UAAW6U,CACrB,EAEQd,GAAU,cAAcc,EAAkB,CACxC,OAAQhB,EAAW,SACnB,UAAWA,EAAW,QAChC,EAAW,EAAI,GAKP7T,EAAO,oBAAsB,SAEtB,KAAK,SAAS,oBAAsB,OAC7CA,EAAO,kBAAoB,KAAK,SAAS,kBAEzCA,EAAO,kBAAoB,IAG7B+T,GAAU,cAAc/T,EAAQ,CAC9B,QAAS6T,EAAW,SAAS,SAAS,EACtC,cAAeA,EAAW,SAAS,eAAe,CACxD,EAAO,EAAI,EAGP7T,EAAO,QAAUA,EAAO,QAAU,KAAK,SAAS,QAAU,OAAO,YAAW,EAG5E,IAAI8U,EAAiBnQ,GAAWxE,EAAM,MACpCwE,EAAQ,OACRA,EAAQ3E,EAAO,MAAM,CAC3B,EAEI2E,GAAWxE,EAAM,QACf,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,QAAQ,EACzDkF,GAAW,CACV,OAAOV,EAAQU,CAAM,CACvB,CACN,EAEIrF,EAAO,QAAUqI,EAAa,OAAOyM,EAAgBnQ,CAAO,EAG5D,MAAMoQ,EAA0B,CAAA,EAChC,IAAIC,EAAiC,GACrC,KAAK,aAAa,QAAQ,QAAQ,SAAoCC,EAAa,CAC7E,OAAOA,EAAY,SAAY,YAAcA,EAAY,QAAQjV,CAAM,IAAM,KAIjFgV,EAAiCA,GAAkCC,EAAY,YAE/EF,EAAwB,QAAQE,EAAY,UAAWA,EAAY,QAAQ,EAC7E,CAAC,EAED,MAAMC,EAA2B,CAAA,EACjC,KAAK,aAAa,SAAS,QAAQ,SAAkCD,EAAa,CAChFC,EAAyB,KAAKD,EAAY,UAAWA,EAAY,QAAQ,CAC3E,CAAC,EAED,IAAIE,EACA7a,EAAI,EACJG,EAEJ,GAAI,CAACua,EAAgC,CACnC,MAAMI,EAAQ,CAACzB,GAAgB,KAAK,IAAI,EAAG,MAAS,EAOpD,IANAyB,EAAM,QAAQ,GAAGL,CAAuB,EACxCK,EAAM,KAAK,GAAGF,CAAwB,EACtCza,EAAM2a,EAAM,OAEZD,EAAU,QAAQ,QAAQnV,CAAM,EAEzB1F,EAAIG,GACT0a,EAAUA,EAAQ,KAAKC,EAAM9a,GAAG,EAAG8a,EAAM9a,GAAG,CAAC,EAG/C,OAAO6a,CACT,CAEA1a,EAAMsa,EAAwB,OAE9B,IAAIhI,EAAY/M,EAIhB,IAFA1F,EAAI,EAEGA,EAAIG,GAAK,CACd,MAAM4a,EAAcN,EAAwBza,GAAG,EACzCgb,EAAaP,EAAwBza,GAAG,EAC9C,GAAI,CACFyS,EAAYsI,EAAYtI,CAAS,CACnC,OAAS3M,EAAO,CACdkV,EAAW,KAAK,KAAMlV,CAAK,EAC3B,KACF,CACF,CAEA,GAAI,CACF+U,EAAUxB,GAAgB,KAAK,KAAM5G,CAAS,CAChD,OAAS3M,EAAO,CACd,OAAO,QAAQ,OAAOA,CAAK,CAC7B,CAKA,IAHA9F,EAAI,EACJG,EAAMya,EAAyB,OAExB5a,EAAIG,GACT0a,EAAUA,EAAQ,KAAKD,EAAyB5a,GAAG,EAAG4a,EAAyB5a,GAAG,CAAC,EAGrF,OAAO6a,CACT,CAEA,OAAOnV,EAAQ,CACbA,EAASoM,EAAY,KAAK,SAAUpM,CAAM,EAC1C,MAAMuV,EAAWxJ,GAAc/L,EAAO,QAASA,EAAO,IAAKA,EAAO,iBAAiB,EACnF,OAAOsC,GAASiT,EAAUvV,EAAO,OAAQA,EAAO,gBAAgB,CAClE,CACF,EAGAG,EAAM,QAAQ,CAAC,SAAU,MAAO,OAAQ,SAAS,EAAG,SAA6BkF,EAAQ,CAEvFmQ,EAAM,UAAUnQ,CAAM,EAAI,SAAS9C,EAAKvC,EAAQ,CAC9C,OAAO,KAAK,QAAQoM,EAAYpM,GAAU,CAAA,EAAI,CAC5C,OAAAqF,EACA,IAAA9C,EACA,MAAOvC,GAAU,IAAI,IAC3B,CAAK,CAAC,CACJ,CACF,CAAC,EAEDG,EAAM,QAAQ,CAAC,OAAQ,MAAO,OAAO,EAAG,SAA+BkF,EAAQ,CAG7E,SAASoQ,EAAmBC,EAAQ,CAClC,OAAO,SAAoBnT,EAAK/C,EAAMQ,EAAQ,CAC5C,OAAO,KAAK,QAAQoM,EAAYpM,GAAU,CAAA,EAAI,CAC5C,OAAAqF,EACA,QAASqQ,EAAS,CAChB,eAAgB,qBAC1B,EAAY,CAAA,EACJ,IAAAnT,EACA,KAAA/C,CACR,CAAO,CAAC,CACJ,CACF,CAEAgW,EAAM,UAAUnQ,CAAM,EAAIoQ,EAAkB,EAE5CD,EAAM,UAAUnQ,EAAS,MAAM,EAAIoQ,EAAmB,EAAI,CAC5D,CAAC,ECpOD,IAAAE,GAAA,MAAMC,EAAY,CAChB,YAAYC,EAAU,CACpB,GAAI,OAAOA,GAAa,WACtB,MAAM,IAAI,UAAU,8BAA8B,EAGpD,IAAIC,EAEJ,KAAK,QAAU,IAAI,QAAQ,SAAyBjN,EAAS,CAC3DiN,EAAiBjN,CACnB,CAAC,EAED,MAAMvJ,EAAQ,KAGd,KAAK,QAAQ,KAAKoP,GAAU,CAC1B,GAAI,CAACpP,EAAM,WAAY,OAEvB,IAAI,EAAIA,EAAM,WAAW,OAEzB,KAAO,KAAM,GACXA,EAAM,WAAW,CAAC,EAAEoP,CAAM,EAE5BpP,EAAM,WAAa,IACrB,CAAC,EAGD,KAAK,QAAQ,KAAOyW,GAAe,CACjC,IAAIC,EAEJ,MAAMb,EAAU,IAAI,QAAQtM,GAAW,CACrCvJ,EAAM,UAAUuJ,CAAO,EACvBmN,EAAWnN,CACb,CAAC,EAAE,KAAKkN,CAAW,EAEnB,OAAAZ,EAAQ,OAAS,UAAkB,CACjC7V,EAAM,YAAY0W,CAAQ,CAC5B,EAEOb,CACT,EAEAU,EAAS,SAAgB/V,EAASE,EAAQC,EAAS,CAC7CX,EAAM,SAKVA,EAAM,OAAS,IAAIqJ,GAAc7I,EAASE,EAAQC,CAAO,EACzD6V,EAAexW,EAAM,MAAM,EAC7B,CAAC,CACH,CAKA,kBAAmB,CACjB,GAAI,KAAK,OACP,MAAM,KAAK,MAEf,CAMA,UAAUiL,EAAU,CAClB,GAAI,KAAK,OAAQ,CACfA,EAAS,KAAK,MAAM,EACpB,MACF,CAEI,KAAK,WACP,KAAK,WAAW,KAAKA,CAAQ,EAE7B,KAAK,WAAa,CAACA,CAAQ,CAE/B,CAMA,YAAYA,EAAU,CACpB,GAAI,CAAC,KAAK,WACR,OAEF,MAAM3I,EAAQ,KAAK,WAAW,QAAQ2I,CAAQ,EAC1C3I,IAAU,IACZ,KAAK,WAAW,OAAOA,EAAO,CAAC,CAEnC,CAEA,eAAgB,CACd,MAAMoN,EAAa,IAAI,gBAEjBiH,EAAS1H,GAAQ,CACrBS,EAAW,MAAMT,CAAG,CACtB,EAEA,YAAK,UAAU0H,CAAK,EAEpBjH,EAAW,OAAO,YAAc,IAAM,KAAK,YAAYiH,CAAK,EAErDjH,EAAW,MACpB,CAMA,OAAO,QAAS,CACd,IAAIN,EAIJ,MAAO,CACL,MAJY,IAAIkH,GAAY,SAAkBM,EAAG,CACjDxH,EAASwH,CACX,CAAC,EAGC,OAAAxH,CACN,CACE,CACF,EC7Ge,SAASyH,GAAOC,EAAU,CACvC,OAAO,SAAczZ,EAAK,CACxB,OAAOyZ,EAAS,MAAM,KAAMzZ,CAAG,CACjC,CACF,CChBe,SAAS0Z,GAAaC,EAAS,CAC5C,OAAOnW,EAAM,SAASmW,CAAO,GAAMA,EAAQ,eAAiB,EAC9D,CCbA,MAAMC,GAAiB,CACrB,SAAU,IACV,mBAAoB,IACpB,WAAY,IACZ,WAAY,IACZ,GAAI,IACJ,QAAS,IACT,SAAU,IACV,4BAA6B,IAC7B,UAAW,IACX,aAAc,IACd,eAAgB,IAChB,YAAa,IACb,gBAAiB,IACjB,OAAQ,IACR,gBAAiB,IACjB,iBAAkB,IAClB,MAAO,IACP,SAAU,IACV,YAAa,IACb,SAAU,IACV,OAAQ,IACR,kBAAmB,IACnB,kBAAmB,IACnB,WAAY,IACZ,aAAc,IACd,gBAAiB,IACjB,UAAW,IACX,SAAU,IACV,iBAAkB,IAClB,cAAe,IACf,4BAA6B,IAC7B,eAAgB,IAChB,SAAU,IACV,KAAM,IACN,eAAgB,IAChB,mBAAoB,IACpB,gBAAiB,IACjB,WAAY,IACZ,qBAAsB,IACtB,oBAAqB,IACrB,kBAAmB,IACnB,UAAW,IACX,mBAAoB,IACpB,oBAAqB,IACrB,OAAQ,IACR,iBAAkB,IAClB,SAAU,IACV,gBAAiB,IACjB,qBAAsB,IACtB,gBAAiB,IACjB,4BAA6B,IAC7B,2BAA4B,IAC5B,oBAAqB,IACrB,eAAgB,IAChB,WAAY,IACZ,mBAAoB,IACpB,eAAgB,IAChB,wBAAyB,IACzB,sBAAuB,IACvB,oBAAqB,IACrB,aAAc,IACd,YAAa,IACb,8BAA+B,GACjC,EAEA,OAAO,QAAQA,EAAc,EAAE,QAAQ,CAAC,CAAC7b,EAAKwD,CAAK,IAAM,CACvDqY,GAAerY,CAAK,EAAIxD,CAC1B,CAAC,ECzCD,SAAS8b,GAAeC,EAAe,CACrC,MAAM1b,EAAU,IAAIya,EAAMiB,CAAa,EACjCC,EAAWjf,GAAK+d,EAAM,UAAU,QAASza,CAAO,EAGtDoF,OAAAA,EAAM,OAAOuW,EAAUlB,EAAM,UAAWza,EAAS,CAAC,WAAY,EAAI,CAAC,EAGnEoF,EAAM,OAAOuW,EAAU3b,EAAS,KAAM,CAAC,WAAY,EAAI,CAAC,EAGxD2b,EAAS,OAAS,SAAgBhC,EAAgB,CAChD,OAAO8B,GAAepK,EAAYqK,EAAe/B,CAAc,CAAC,CAClE,EAEOgC,CACT,CAGA,MAAMC,EAAQH,GAAe9R,EAAQ,EAGrCiS,EAAM,MAAQnB,EAGdmB,EAAM,cAAgBhO,GACtBgO,EAAM,YAAcf,GACpBe,EAAM,SAAWjO,GACjBiO,EAAM,QAAU/C,GAChB+C,EAAM,WAAa1V,GAGnB0V,EAAM,WAAa9W,EAGnB8W,EAAM,OAASA,EAAM,cAGrBA,EAAM,IAAM,SAAaC,EAAU,CACjC,OAAO,QAAQ,IAAIA,CAAQ,CAC7B,EAEAD,EAAM,OAASR,GAGfQ,EAAM,aAAeN,GAGrBM,EAAM,YAAcvK,EAEpBuK,EAAM,aAAetO,EAErBsO,EAAM,WAAaze,GAASgM,GAAe/D,EAAM,WAAWjI,CAAK,EAAI,IAAI,SAASA,CAAK,EAAIA,CAAK,EAEhGye,EAAM,WAAavD,GAAS,WAE5BuD,EAAM,eAAiBJ,GAEvBI,EAAM,QAAUA,EChFhB,KAAM,CACJ,MAAAnB,GACA,WAAA3V,GACA,cAAA8I,GACA,SAAAD,GACA,YAAAkN,GACA,QAAAhC,GACA,IAAAiD,GACA,OAAAC,GACA,aAAAT,GACA,OAAAF,GACA,WAAAlV,GACA,aAAAoH,GACA,eAAAkO,GACA,WAAAQ,GACA,WAAAC,GACA,YAAA5K,EACF,EAAIuK,ECEEM,GAAgBN,EAAM,OAAO,CACjC,QAAS,SAAS,OAClB,QAAS,IACT,OAAQ,CAAA,CACV,CAAC,EAEDM,GAAc,aAAa,SAAS,IACjC/W,GAAaA,EACbE,GAAU,2BACT,GAAIA,EAAM,SAAU,CAkBlB,GAjBIA,EAAM,SAAS,SAAW,KAC5B,WAAW,YAAY,WAAW,mBAAoB,EAAI,EAAE,KAC1D,SAAU8W,EAAW,CACfA,GACF,WAAW,UAAS,CAExB,CACV,EAWQ9W,EAAM,SAAS,OAAO,QAAQ,eAAe,GAC7CA,EAAM,SAAS,OAAO,QAAQ,eAAe,EAAE,SAC7CA,EAAM,SAAS,OAAO,SAAQ,CACxC,EAEQ,OAAO,QAAQ,OAAOA,CAAK,EAE7B,IAAIuR,EAAO,QAAQvR,EAAM,SAAS,MAAM,OACpC+W,EAAA/W,EAAM,WAAN,MAAA+W,EAAgB,aAClBxF,GAAQ,GAAGvR,EAAM,SAAS,UAAU,MAElCgX,GAAAC,EAAAjX,EAAM,WAAN,YAAAiX,EAAgB,SAAhB,MAAAD,EAAwB,OAC1BzF,GAAQ,GAAGvR,EAAM,SAAS,OAAO,IAAI,MAEnCkX,GAAAC,EAAAnX,EAAM,WAAN,YAAAmX,EAAgB,OAAhB,MAAAD,EAAsB,QACxB3F,GAAQ,GAAGvR,EAAM,SAAS,KAAK,OAAO,IAC7BoX,GAAAC,EAAArX,EAAM,WAAN,YAAAqX,EAAgB,OAAhB,MAAAD,EAAsB,UAC/B7F,GAAQ,GAAGvR,EAAM,SAAS,KAAK,SAAS,IAC/BsX,GAAAC,GAAAC,EAAAxX,EAAM,WAAN,YAAAwX,EAAgB,OAAhB,YAAAD,EAAsB,QAAtB,MAAAD,EAA6B,SAClCtX,EAAM,SAAS,KAAK,MAAM,QAC5BuR,GAAQ,GAAGvR,EAAM,SAAS,KAAK,MAAM,KAAK,KAE5CuR,GAAQ,GAAGvR,EAAM,SAAS,KAAK,MAAM,OAAO,IAE5CuR,GAAQ,IAAGkG,EAAAzX,EAAM,WAAN,YAAAyX,EAAgB,IAAI,GAEjC,KAAM,CAAE,cAAAC,CAAa,EAAK,OAC1B,MAAIA,GACFA,EAAc,QAAQ,CACpB,MAAO,gBACP,KAAAnG,CACV,CAAS,EAEGvR,CACR,KACE,OAAMA,CAEV,CACF,EClEA,MAAMH,GAAU,eACdoF,EACA9C,EACA,CACE,KAAA/C,EACA,OAAA2C,EAAS,CAAA,EACT,QAAAwC,EACA,OAAAoT,EAAS,GACT,QAAAC,EAAU,GACV,iBAAAnK,EAAmB,EACvB,EAAM,CAAA,EACJ,CACA,GAAI,CAACkK,EAAQ,CACX,GAAI,CACc,MAAM,WAAW,YAC/B,WAAW,kBACnB,GAEQ,WAAW,UAAS,CAExB,MAAgB,CACd,WAAW,MAAK,CAClB,CACApT,EAAQ,cAAmB,aAAa,WAC1C,CAIA,OAAAA,EAAQ,OAAY,GAChB,CAACqT,GAAW,CAAC7V,EAAO,QACtBA,EAAO,MAAW,OAAO,aAEpBwU,GAAM,CACX,OAAAtR,EACA,IAAA9C,EACA,KAAA/C,EACA,OAAA2C,EACA,QAAAwC,EACA,iBAAAkJ,CACJ,CAAG,CACH,EAEMoK,GAA2B,CAC/B,OAAQ,kBACV,EAEMC,GAAqB,CACzB,GAAGD,GACH,eAAgB,kBAClB,EAEAE,GAAe,CACb,IAAK,SACHtX,EACA,CACE,OAAAsB,EACA,QAAAwC,EAAUsT,GACV,QAAAD,EACA,OAAAD,EACA,iBAAAlK,CACN,EAAQ,CAAA,EACJ,CACA,OAAO5N,GAAQ,MAAOY,EAAM,CAC1B,OAAAsB,EACA,QAAAwC,EACA,QAAAqT,EACA,OAAAD,EACA,iBAAAlK,CACN,CAAK,CACH,EAEA,IAAK,SACHhN,EACA,CACE,KAAArB,EACA,OAAA2C,EACA,QAAAwC,EAAUuT,GACV,QAAAF,EACA,OAAAD,EACA,iBAAAlK,CACN,EAAQ,CAAA,EACJ,CACA,OAAO5N,GAAQ,MAAOY,EAAM,CAC1B,KAAArB,EACA,OAAA2C,EACA,QAAAwC,EACA,QAAAqT,EACA,OAAAD,EACA,iBAAAlK,CACN,CAAK,CACH,EAEA,KAAM,SACJhN,EACA,CACE,KAAArB,EACA,OAAA2C,EACA,QAAAwC,EAAUuT,GACV,QAAAF,EACA,OAAAD,EACA,iBAAAlK,CACN,EAAQ,CAAA,EACJ,CACA,OAAO5N,GAAQ,OAAQY,EAAM,CAC3B,KAAArB,EACA,OAAA2C,EACA,QAAAwC,EACA,QAAAqT,EACA,OAAAD,EACA,iBAAAlK,CACN,CAAK,CACH,EAEA,OAAQ,SACNhN,EACA,CACE,OAAAsB,EACA,QAAAwC,EAAUsT,GACV,QAAAD,EACA,OAAAD,EACA,iBAAAlK,CACN,EAAQ,CAAA,EACJ,CACA,OAAO5N,GAAQ,SAAUY,EAAM,CAC7B,OAAAsB,EACA,QAAAwC,EACA,QAAAqT,EACA,OAAAD,EACA,iBAAAlK,CACN,CAAK,CACH,CACF,EC3JO,IAAIuK,GAAmB,KAAO,CACnC,KAAK5J,KAAUnE,EAAM,CACnB,QACM9K,EAAY,KAAK,OAAOiP,CAAK,GAAK,CAAA,EACpClU,EAAI,EACJyU,EAASxP,EAAU,OACrBjF,EAAIyU,EACJzU,IAEAiF,EAAUjF,CAAC,EAAE,GAAG+P,CAAI,CAExB,EACA,OAAQ,CAAA,EACR,GAAGmE,EAAO/O,EAAI,OACX,QAAC0X,EAAA,KAAK,QAAL3I,KAAA2I,EAAA3I,GAAuB,CAAA,IAAI,KAAK/O,CAAE,EAC7B,IAAM,OACX,KAAK,OAAO+O,CAAK,GAAI2I,EAAA,KAAK,OAAO3I,CAAK,IAAjB,YAAA2I,EAAoB,OAAO7c,GAAKmF,IAAOnF,EAC9D,CACF,CACF,GCnBO,MAAM+d,WAAoB,KAAM,CACrC,YAAY9X,EAAK4O,EAAQ,CACnB5O,aAAe,OACjB,MAAMA,EAAI,OAAO,EACjB,KAAK,MAAQA,GAEb,MAAMA,CAAG,EAGX,KAAK,OAAS4O,EACd,KAAK,KAAO,aACd,CACF,CAEO,MAAMmJ,WAAkCD,EAAY,CACzD,YAAYlJ,EAAQ,CAClB,MAAM,WAAYA,CAAM,EACxB,KAAK,KAAO,2BACd,CACF,CAEO,MAAMoJ,WAAiCF,EAAY,CACxD,YAAY9X,EAAK,CACf,MAAMA,GAAO,uCAAuC,EACpD,KAAK,KAAO,0BACd,CACF,CAEO,MAAMiY,UAA0BH,EAAY,CACjD,YAAYjY,EAAO+O,EAAQ,CACrBA,EACF,MAAM/O,EAAO+O,CAAM,EAEnB,MAAM,eAAgB/O,CAAK,EAE7B,KAAK,KAAO,mBACd,CACF,CASO,MAAMqY,WAA6BD,CAAkB,CAC1D,YAAYjY,EAAK,CACf,MAAMA,EAAK,kBAAkB,EAC7B,KAAK,KAAO,sBACd,CACF,CCnDO,SAASmY,GAAgBvW,EAAQ,CACtC,OAAKA,EAUE,IARK,OAAO,KAAKA,CAAM,EAC3B,KAAI,EACJ,OAAOwW,GAAKxW,EAAOwW,CAAC,IAAM,MAAS,EACnC,IAAIA,GAAK,CACR,IAAIC,EAAI,KAAK,UAAUzW,EAAOwW,CAAC,CAAC,EAChC,MAAO,GAAG,KAAK,UAAUA,CAAC,CAAC,IAAIC,CAAC,EAClC,CAAC,EAEc,KAAK,GAAG,CAAC,IAVN,EAWtB,CCXO,MAAMC,EAAS,CACpB,YAAYC,EAAS,CACnB,KAAK,QAAUA,EACf,KAAK,UAAY,CAAA,CACnB,CAEA,OAAQ,CACN,KAAK,UAAU,KACb,KAAK,QAAQ,GAAG,WAAYvY,GAAO,CACjC,GAAIA,EAAI,OAAS,OAAQ,CAClB,KAAK,SACR,KAAK,OAAS,KAAK,cAAcA,CAAG,GAEtC,MACF,CAEK,KAAK,SAENA,EAAI,OAAS,OACf,KAAK,OAAOA,EAAI,EAAE,EAAIA,EAAI,KACjBA,EAAI,OAAS,SACtB,OAAO,KAAK,OAAOA,EAAI,EAAE,EAE7B,CAAC,CACP,CACE,CAIA,OAAQ,CACN,OAAO,KAAK,MACd,CAEA,SAAU,CACR,OAAO,KAAK,MACZ,OAAO,KAAK,OAEZ,KAAK,UAAU,QAAQgK,GAAYA,EAAQ,CAAE,EAC7C,KAAK,UAAU,OAAS,CAC1B,CAEA,MAAM,KAAKzH,EAAIiW,EAAM,CACnB,GAAI,MAAK,MAET,YAAK,MAAQ,CAAE,GAAAjW,EAAI,KAAAiW,CAAI,EAChB,KAAK,QAAQ,QAAQ,iBAAkB,KAAK,KAAK,CAC1D,CAEA,MAAM,OAAQ,CACZ,GAAI,CAAC,KAAK,MAAO,OAEjB,IAAItH,EAAM,MAAM,KAAK,QAAQ,QAAQ,iBAAiB,EAEtD,cAAO,KAAK,MAELA,CACT,CAEA,MAAM,MAAO,CACX,OAAI,KAAK,OAAe,KAAK,QAExB,KAAK,WACR,KAAK,SAAW,KAAK,MAAK,GAG5B,MAAM,KAAK,SAEJ,KAAK,OACd,CAEA,MAAM,OAAQ,CACZ,KAAK,MAAK,EAEV,GAAI,CACF,IAAIuH,EAAW,MAAM,KAAK,QAAQ,QAAQ,iBAAkB,CAAA,CAAE,EAE9D,YAAK,OAAS,KAAK,cAAcA,CAAQ,EAElC,KAAK,MACd,QAAC,CACC,OAAO,KAAK,QACd,CACF,CAEA,cAAcA,EAAU,CACtB,OAAOA,EAAS,QAAQ,OAAO,CAACC,EAAK,CAAE,GAAAnW,EAAI,KAAAiW,MACzCE,EAAInW,CAAE,EAAIiW,EACHE,GACN,CAAA,CAAE,CACP,CACF,CCpFA,MAAMC,EAAQ,OAAO,OAAO,EAErB,MAAMC,EAAQ,CAInB,YAAYhX,EAAS,GAAI,CACvB,KAAK,QAAUiW,GAAgB,EAC/B,KAAK,OAAS,OAAO,OAAOjW,CAAM,EAClC,KAAK,SAAW,IAAI0W,GAAS,IAAI,EAEjC,KAAK,eAAiB,GAEtB,KAAKK,CAAK,EAAI,MAChB,CAEA,IAAI,YAAa,CACf,OAAI,KAAK,YAAoB,KAAK,aAGlC,KAAK,YAAcR,GAAgB,CACjC,QAAS,KAAK,UACd,GAAG,KAAK,MACd,CAAK,EAEM,KAAK,YACd,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,YAAY,UAC1B,CAEA,IAAI,OAAQ,CACV,OAAO,KAAKQ,CAAK,CACnB,CAEA,SAASE,EAAU,CACjB,GAAI,KAAK,SAAU,CACjB,GAAI,KAAK,WAAaA,EACpB,MAAM,MAAM,2CAA2C,EAGzD,MAAO,EACT,CAEA,YAAK,SAAWA,EACT,EACT,CAEA,YAAa,CACX,KAAKF,CAAK,EAAI,YAChB,CAEA,WAAY,CAEV,GADI,KAAK,QAAU,aACf,KAAK,QAAU,SAAU,OAE7B,KAAKA,CAAK,EAAI,YAEd,IAAIG,EAAW,GAEX,KAAK,gBACP,KAAK,eAAiB,GACtB,KAAK,KAAK,UAAW,CAAE,UAAW,GAAO,SAAAA,CAAQ,CAAE,GAEnD,KAAK,KAAK,UAAW,CAAE,UAAW,GAAM,SAAAA,CAAQ,CAAE,CAEtD,CAEA,UAAW,CACT,GAAI,KAAK,QAAU,YAAa,MAAM,MAAM,mBAAmB,EAE/D,KAAKH,CAAK,EAAI,YAEd,IAAIG,EAAW,GACXC,EAAY,GAEhB,KAAK,eAAiB,GAEtB,KAAK,KAAK,UAAW,CAAE,UAAAA,EAAW,SAAAD,CAAQ,CAAE,CAC9C,CAEA,aAAa9K,EAAK,CACZ,KAAK,QAAU,gBAAkB,KAAK,QAAU,WAEpD,KAAK2K,CAAK,EAAI,eAEd,KAAK,SAAS,MAAK,EAEnB,KAAK,KAAK,aAAc3K,CAAG,EAC7B,CAEA,OAAOA,EAAK,CACN,KAAK,QAAU,WAEnB,KAAK2K,CAAK,EAAI,SACd,OAAO,KAAK,SAEZ,KAAK,eAAiB,GAEtB,KAAK,SAAS,QAAO,EAErB,KAAK,KAAK,QAAS3K,CAAG,EACxB,CAEA,YAAa,CACP,KAAK,QAAU,QAAU,KAAK,QAAU,UAI5C,KAAK,SAAS,YAAY,IAAI,CAChC,CAEA,MAAM,QAAQgL,EAAQjD,EAAS,CAC7B,GAAI,KAAK,QAAU,QAAU,KAAK,QAAU,SAC1C,MAAM,MAAM,2BAA2B,EAGzC,OAAO,KAAK,SAAS,QAAQ,KAAK,WAAYiD,EAAQjD,CAAO,CAC/D,CAEA,MAAM,KAAKA,EAAS,CAClB,OAAO,KAAK,QAAQ,OAAWA,CAAO,CACxC,CAEA,MAAM,QAAQA,EAAS,CACrB,GAAI,CACF,MAAM,KAAK,QAAQ,WAAYA,CAAO,CACxC,OAAS7R,EAAG,CACV,IAAI+U,EAAS,KAAK,SAAW,KAAK,SAAS,OAAS,KAChDA,GACFA,EAAO,KAAK,mBAAoB/U,CAAC,CAErC,CACF,CAEA,QAAQlE,EAAKkZ,EAAM,CACjB,KAAK,KAAK,UAAWlZ,EAAKkZ,CAAI,CAChC,CAEA,GAAGjL,EAAO4H,EAAU,CAClB,OAAO,KAAK,QAAQ,GAAG5H,EAAO4H,CAAQ,CACxC,CAEA,KAAK5H,EAAO4H,EAAU,CACpB,IAAIsD,EAAS,KAAK,QAAQ,GAAGlL,EAAO,IAAInE,IAAS,CAC/CqP,EAAM,EACNtD,EAAS,GAAG/L,CAAI,CAClB,CAAC,EACD,OAAOqP,CACT,CAEA,KAAKlL,KAAUnE,EAAM,CACnB,OAAO,KAAK,QAAQ,KAAKmE,EAAO,GAAGnE,CAAI,CACzC,CAEA,kBAAmB,CACjB,OAAI,KAAK,QAAU,YAAoB,QAAQ,QAAO,EAElD,KAAK,QAAU,SACV,QAAQ,OAAO,MAAM,yBAAyB,CAAC,EAGjD,KAAK,iBAAgB,CAC9B,CAKA,kBAAmB,CACjB,OAAI,KAAK,kBAA0B,KAAK,mBAExC,KAAK,kBAAoB,IAAI,QAAQ,CAACxB,EAASC,IAAW,CACxD,IAAI4Q,EAAS,CAAC,IAAM,OAAO,KAAK,iBAAiB,EAEjDA,EAAO,KACL,KAAK,GAAG,UAAW,IAAM,CACvBA,EAAO,QAAQC,GAAQA,EAAI,CAAE,EAC7B9Q,EAAO,CACT,CAAC,CACT,EACM6Q,EAAO,KACL,KAAK,GAAG,QAASnL,GAAO,CACtBmL,EAAO,QAAQC,GAAQA,EAAI,CAAE,EAC7B7Q,EACEyF,GACE,IAAI8J,GACF,8CACA,UAChB,CACA,CACQ,CAAC,CACT,CACI,CAAC,EAEM,KAAK,kBACd,CACF,CC5MO,MAAMuB,EAAa,CACxB,YAAY9W,EAAI,CACd,KAAK,GAAKA,EACV,KAAK,OAAS,eACd,KAAK,MAAQ,OACb,KAAK,SAAW,CAAA,EAChB,KAAK,SAAW,GAChB,KAAK,UAAY,CAAA,CACnB,CAEA,IAAIgW,EAAS,CACP,KAAK,SAAS,SAASA,CAAO,GAElC,KAAK,SAAS,KAAKA,CAAO,CAC5B,CAEA,OAAOA,EAAS,CACd,IAAIe,EAAM,KAAK,SAAS,QAAQf,CAAO,EAEnCe,EAAM,IAAI,KAAK,SAAS,OAAOA,EAAK,CAAC,CAC3C,CAEA,OAAOrG,KAAUnJ,EAAM,CAErB,KAAK,MAAQmJ,IAAU,WAAa,YAAcA,EAE9CnJ,EAAK,SAAW,EAClB,KAAK,SAAS,QAAQyO,GAAWA,EAAQtF,CAAK,EAAEnJ,EAAK,CAAC,CAAC,CAAC,EAExD,KAAK,SAAS,QAAQyO,GAAWA,EAAQtF,CAAK,EAAC,CAAE,CAErD,CAEA,QAAQsG,EAAQ,CACd,KAAK,aAAaA,CAAM,EAExB,IAAIC,EAAc,KAAK,UAAU,CAAC,EAElC,MAAI,CAACA,GAAeA,EAAY,SAAWD,EAAe,QAAQ,QAAO,EAElEC,EAAY,OACrB,CAEA,oBAAqB,CACf,KAAK,WAET,KAAK,OAAS,OAEd,KAAK,iBAAgB,EACvB,CAEA,kBAAmB,CACjB,GAAI,KAAK,SAAW,aAAc,OAClC,GAAI,KAAK,SAAU,MAAM,MAAM,0BAA0B,EAEzD,KAAK,OAAS,aAED,MAAK,kBAAkB,cAAc,GAGlD,KAAK,WAAW,IAAI,CACtB,CAEA,kBAAmB,CACb,KAAK,UACL,KAAK,SAAW,gBAEhB,KAAK,SAAS,OAAS,IAE3B,KAAK,OAAS,eAED,KAAK,kBAAkB,YAAY,IAGhD,KAAK,aAAa,IAAI,CACxB,CAEA,MAAM,QAAQD,EAAQ,CACpB,KAAK,aAAaA,CAAM,EAExB,IAAIE,EAKAC,EAAO,CACT,QALY,IAAI,QAAQpR,GAAW,CACnCmR,EAAWnR,CACb,CAAC,EAIC,OAAAiR,EACA,QAAS,IAAM,CACb,KAAK,UAAU,OAAO,KAAK,UAAU,QAAQG,CAAI,EAAG,CAAC,EACrDD,EAASC,CAAI,CACf,EACA,SAAU,GACV,SAAU,EAChB,EAEQC,EAAM,KAAK,YAEf,YAAK,UAAU,KAAKD,CAAI,EAEpBC,GACF,MAAMA,EAAI,QAGR,KAAK,KACP,MAAM,KAAK,IAAI,QAAQD,EAAMH,CAAM,EAGrCG,EAAK,SAAW,GACTA,CACT,CAEA,MAAM1L,EAAK,CACT,KAAK,SAAW,GAChB,KAAK,OAAS,OACd,KAAK,OAAO,SAAUA,CAAG,CAC3B,CAEA,aAAaC,EAAO,CAClB,GAAI,EAAAA,IAAU,gBAAkBA,IAAU,cAE1C,MAAM,MAAM,gCAAgCA,CAAK,EAAE,CACrD,CAEA,IAAI,aAAc,CAChB,OAAO,KAAK,UAAU,OAClB,KAAK,UAAU,KAAK,UAAU,OAAS,CAAC,EACxC,MACN,CAEA,kBAAkBsL,EAAQ,CACxB,IAAII,EAAM,KAAK,YAGf,MAFI,CAACA,GACDA,EAAI,UACJA,EAAI,SAAWJ,EAAe,IAElC,KAAK,UAAU,IAAG,EAClBI,EAAI,SAAW,GACR,GACT,CACF,CAGA,MAAMC,EAAW,CACf,aAAc,CACZ,KAAK,MAAQ,CAAA,CACf,CAEA,MAAM,QAAQF,EAAMH,EAAQ,CAEtBA,IAAW,eAEf,KAAK,MAAM,KACTG,EAAK,QAAQ,KAAK,IAAM,CACtB,KAAK,MAAM,OAAO,KAAK,MAAM,QAAQA,CAAI,EAAG,CAAC,CAC/C,CAAC,CACP,EAEQ,KAAK,MAAM,OAAS,GACtB,MAAM,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAE1C,CACF,CAEO,MAAMG,EAAc,CACzB,YAAYhG,EAAM,CACZA,EAAK,uBAAyB,KAChC,KAAK,IAAM,IAAI+F,IAEjB,KAAK,eAAiB,CAAA,EACtB,KAAK,eAAiB,CAAA,CACxB,CAEA,KAAM,CACJ,OAAO,OAAO,OAAO,KAAK,cAAc,CAC1C,CAEA,IAAIrX,EAAI,CACN,OAAO,KAAK,eAAeA,CAAE,CAC/B,CAEA,OAAOA,EAAI,CAAE,UAAAuX,EAAW,YAAAjL,CAAW,EAAI,CACrC,IAAIkL,EAAO,KAAK,eAAexX,CAAE,EAAI,IAAI8W,GAAa9W,CAAE,EACxD,OAAAwX,EAAI,SAAW,KAAK,eAAexX,CAAE,EACrCwX,EAAI,WAAaD,EACjBC,EAAI,aAAelL,EACnBkL,EAAI,IAAM,KAAK,IAERA,CACT,CAEA,OAAOxX,EAAI,CACT,OAAO,KAAK,eAAeA,CAAE,EAC7B,OAAO,KAAK,eAAeA,CAAE,CAC/B,CAEA,cAAcyX,EAASC,EAAU,CAC/B,KAAK,eAAeD,CAAO,EAAIC,EAE/B,IAAIF,EAAM,KAAK,IAAIC,CAAO,EACtBD,IAAKA,EAAI,SAAWE,EAC1B,CACF,CAEO,MAAMC,EAAI,CACf,YAAYrG,EAAO,GAAI,CACrB,KAAK,cAAgB,IAAIgG,GAAchG,CAAI,EAC3C,KAAK,iBAAmB,CAAA,EACxB,KAAK,eAAiB,CAAA,CACxB,CAEA,UAAUmG,EAASC,EAAU,CAC3B,KAAK,eAAeA,CAAQ,EAAID,EAEhC,KAAK,cAAc,cAAcA,EAASC,CAAQ,EAElD,KAAK,MAAMA,CAAQ,CACrB,CAEA,YAAYD,EAAS,CACnB,IAAID,EAAM,KAAK,cAAc,IAAIC,CAAO,EACxC,GAAI,CAACD,EAAK,OAEV,IAAIE,EAAWF,EAAI,SACfE,GAAU,OAAO,KAAK,eAAeA,CAAQ,EAEjD,KAAK,cAAc,OAAOD,CAAO,CACnC,CAEA,SAASzX,EAAIvC,EAAKkZ,EAAM,CACtB,IAAIc,EAAU,KAAK,eAAezX,CAAE,EAEpC,GAAI,CAACyX,EAAS,CACZ,KAAK,iBAAiB,KAAK,CAACzX,EAAIvC,EAAKkZ,CAAI,CAAC,EAC1C,MACF,CAEA,IAAIa,EAAM,KAAK,cAAc,IAAIC,CAAO,EAEnCD,GAELA,EAAI,SAAS,QAAQxB,GAAW,CAC9BA,EAAQ,QAAQvY,EAAKkZ,CAAI,CAC3B,CAAC,CACH,CAEA,OAAO3W,EAAI0L,EAAO8H,EAAS,CACzB,IAAIiE,EAAU,KAAK,eAAezX,CAAE,EAEpC,GAAI,CAACyX,EACH,OAGF,IAAID,EAAM,KAAK,cAAc,IAAIC,CAAO,EAEnCD,GAELA,EAAI,SAAS,QAAQxB,GAAWA,EAAQ,KAAKtK,EAAO8H,CAAO,CAAC,CAC9D,CAEA,OAAQ,CACN,KAAK,iBAAiB,OAAS,CACjC,CAEA,IAAI,MAAO,CACT,OAAO,KAAK,SAAS,MACvB,CAEA,IAAI,UAAW,CACb,OAAO,KAAK,cAAc,IAAG,EAAG,QAAQgE,GAAOA,EAAI,QAAQ,CAC7D,CAEA,MAAMxX,EAAI,CACR,IAAI4X,EAAO,CAAA,EAEX,QAASC,KAAQ,KAAK,iBAChBA,EAAK,CAAC,IAAM7X,EAAI,KAAK,SAAS6X,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EACtDD,EAAK,KAAKC,CAAI,EAGrB,KAAK,iBAAmBD,CAC1B,CACF,CC1RA,MAAME,GAAgB,CACpB,MAAO,EACP,KAAM,EACN,KAAM,EACN,MAAO,CACT,EAEO,MAAMC,EAAW,CACtB,YAAYC,EAAO,CACjB,KAAK,MAAQA,GAAS,MACxB,CAEA,IAAIA,EAAOva,EAAKwa,EAAS,CACnBH,GAAcE,CAAK,EAAIF,GAAc,KAAK,KAAK,GAEnD,KAAK,cAAcE,EAAOva,EAAKwa,CAAO,CACxC,CAEA,eAAgB,CACd,MAAM,MAAM,iBAAiB,CAC/B,CAEA,MAAMxa,EAAKwa,EAAS,CAClB,KAAK,IAAI,QAASxa,EAAKwa,CAAO,CAChC,CAEA,KAAKxa,EAAKwa,EAAS,CACjB,KAAK,IAAI,OAAQxa,EAAKwa,CAAO,CAC/B,CAEA,KAAKxa,EAAKwa,EAAS,CACjB,KAAK,IAAI,OAAQxa,EAAKwa,CAAO,CAC/B,CAEA,MAAMxa,EAAKwa,EAAS,CAClB,KAAK,IAAI,QAASxa,EAAKwa,CAAO,CAChC,CACF,CAEO,MAAMC,WAAmBH,EAAW,CACzC,eAAgB,CAAC,CACnB,CCvCO,MAAMI,EAAY,CACvB,OAAO1a,EAAK,CACV,OAAO,KAAK,UAAUA,CAAG,CAC3B,CAEA,OAAO2a,EAAK,CACV,GAAI,CACF,OAAO,KAAK,MAAMA,CAAG,CACvB,MAAa,CAAC,CAChB,CACF,CCJA,IAAIC,GAAY,EAET,MAAMC,EAAoB,CAC/B,YAAYhH,EAAO,GAAI,CACrB,GAAI,CAAE,OAAAoF,CAAM,EAAKpF,EACjB,KAAK,OAASoF,GAAU,IAAIwB,GAC5B,KAAK,qBAAuB,CAAA,EAC5B,KAAK,uBAAyB,CAAA,EAG9B,KAAK,0BAA4B5G,EAAK,2BAA6B,IAGnE,KAAK,uBAAyBA,EAAK,wBAA0B,GAC/D,CAEA,SAASiH,EAAO,CACd,KAAK,MAAQA,CACf,CAEA,UAAUvC,EAAS3W,EAAQ,CACzB,IAAImZ,EAAsB,CAAE,QAAAxC,CAAO,EAC/B3W,GACF,OAAO,OAAOmZ,EAAqBnZ,CAAM,EAG3C,IAAIoZ,EAAa7C,GAAgB4C,CAAmB,EAEpD,GAAI,KAAK,uBAAuBC,CAAU,EAAG,CAC3C,IAAIC,EAAW,KAAK,0BAA4B,IAChD,YAAK,OAAO,MACV,uCAAuCA,CAAQ,GAC/CD,CACR,EACa,IAAI,QAAQ1S,GAAW,CAC5B,WAAW,IAAM,CACfA,EAAQ,KAAK,UAAUiQ,EAAS3W,CAAM,CAAC,CACzC,EAAGqZ,CAAQ,CACb,CAAC,CACH,CAEA,GAAI,KAAK,qBAAqBD,CAAU,EACtC,YAAK,OAAO,KAAK,4CAA6CA,CAAU,EACjE,QAAQ,OAAO,MAAM,qBAAqB,CAAC,EAGpD,IAAIE,EAAgB,KAAK,uBAEzB,OAAO,IAAI,QAAQ,CAAC5S,EAASC,IAAW,CACtC,IAAIhG,EAAK,EAAEqY,GACX,KAAK,qBAAqBI,CAAU,EAAI,CACtC,QAAA1S,EACA,OAAAC,EACA,GAAAhG,CACR,EAEM,KAAK,MAAM,KAAK,KAAK,sBAAsByY,CAAU,CAAC,EAEtD,KAAK,oBAAoBzY,EAAIyY,EAAYE,CAAa,CACxD,CAAC,CACH,CAEA,sBAAsBF,EAAY,CAChC,MAAO,CACL,QAAS,YACT,WAAAA,CACN,CACE,CAEA,oBAAoBzY,EAAIyY,EAAYE,EAAe,CACjD,WAAW,IAAM,CACf,IAAInB,EAAM,KAAK,qBAAqBiB,CAAU,EACzCjB,GACDA,EAAI,KAAOxX,IAEf,KAAK,OAAO,KACV,mCAAmC2Y,CAAa,yBAChDF,CACR,EAEM,KAAK,MAAM,KAAK,KAAK,sBAAsBA,CAAU,CAAC,EAEtD,KAAK,qBAAqBzY,EAAIyY,EAAYE,CAAa,EACzD,EAAGA,CAAa,CAClB,CAEA,qBAAqB3Y,EAAIyY,EAAYE,EAAe,CAClD,WAAW,IAAM,CACf,IAAInB,EAAM,KAAK,qBAAqBiB,CAAU,EACzCjB,GACDA,EAAI,KAAOxX,IAEf,OAAO,KAAK,qBAAqByY,CAAU,EAE3CjB,EAAI,OACF,IAAI/B,GACF,wCACEkD,EAAgB,CAC5B,UAAoBF,CAAU,EAC9B,CACA,EACI,EAAGE,CAAa,CAClB,CAEA,YAAYF,EAAY,CACtB,YAAK,MAAM,KAAK,CACd,QAAS,cACT,WAAAA,CACN,CAAK,EAED,KAAK,uBAAuBA,CAAU,EAAI,GAE1C,WAAW,IAAM,CACf,OAAO,KAAK,uBAAuBA,CAAU,CAC/C,EAAG,KAAK,yBAAyB,EAE1B,QAAQ,QAAO,CACxB,CAEA,QAAQA,EAAYhC,EAAQjD,EAAS,CAEnC,OAAIiD,IAAW,WACN,KAAK,QAAQgC,EAAYjF,CAAO,GAGpCA,IACHA,EAAU,CAAA,GAGZA,EAAQ,OAASiD,EAEjB,KAAK,MAAM,KAAK,CACd,QAAS,UACT,WAAAgC,EACA,KAAM,KAAK,UAAUjF,CAAO,CAClC,CAAK,EAEM,QAAQ,QAAO,EACxB,CAEA,QAAQiF,EAAY/b,EAAM,CACxB,YAAK,MAAM,KAAK,CACd,QAAS,UACT,WAAA+b,EACA,KAAA/b,CACN,CAAK,EAEM,QAAQ,QAAO,CACxB,CAEA,QAAQe,EAAK,CAEX,GAAI,OAAOA,GAAQ,SAAU,CAC3B,KAAK,OAAO,MAAM,6BAA8B,CAAE,QAASA,CAAG,CAAE,EAChE,MACF,CAEA,GAAI,CAAE,KAAAlI,EAAM,WAAAkjB,EAAY,QAAAzb,EAAS,OAAAqP,EAAQ,UAAAmK,CAAS,EAAK/Y,EAEvD,GAAIlI,IAAS,OACX,OAAO,KAAK,MAAM,UAAUkI,EAAI,OAAO,EAMzC,GAHE,KAAK,MAAM,UAAS,EAGlBlI,IAAS,UAAW,CACtB,IAAIqjB,EAAYnb,EAAI,IAEpB,OAAImb,GAAW,KAAK,MAAM,aAAaA,CAAS,EAEzC,KAAK,MAAM,UAAS,CAC7B,CAEA,GAAIrjB,IAAS,aAAc,CACzB,IAAIkW,EAAM,IAAIiK,EAAkBrJ,CAAM,EACtC,KAAK,MAAMZ,CAAG,EAEV+K,IAAc,GAChB,KAAK,MAAM,OAAO/K,CAAG,EAErB,KAAK,MAAM,aAAaA,CAAG,EAE7B,MACF,CAEA,GAAIlW,IAAS,uBAAwB,CACnC,IAAIsjB,EAAe,KAAK,qBAAqBJ,CAAU,EACvD,GAAI,CAACI,EAAc,CACjB,KAAK,OAAO,MAAM,wCAAyC,CACzD,KAAAtjB,EACA,WAAAkjB,CACV,CAAS,EACD,KAAK,YAAYA,CAAU,EAC3B,MACF,CAEA,cAAO,KAAK,qBAAqBA,CAAU,EAEpCI,EAAa,QAAQJ,CAAU,CACxC,CAEA,GAAIljB,IAAS,sBAAuB,CAClC,IAAIsjB,EAAe,KAAK,qBAAqBJ,CAAU,EACvD,OAAKI,GAIL,OAAO,KAAK,qBAAqBJ,CAAU,EAEpCI,EAAa,OAAO,IAAIrD,EAA2B,GALjD,KAAK,OAAO,MAAM,yBAA0B,CAAE,KAAAjgB,EAAM,WAAAkjB,CAAU,CAAE,CAM3E,CAEA,GAAIzb,EACF,MAAO,CAAE,WAAAyb,EAAY,QAAAzb,CAAO,EAG9B,KAAK,OAAO,KAAK,yBAAyBzH,CAAI,GAAI,CAAE,QAASkI,CAAG,CAAE,CACpE,CAEA,MAAMgO,EAAK,CAET,QAASgN,KAAc,KAAK,qBAC1B,KAAK,qBAAqBA,CAAU,EAAE,OAAOhN,CAAG,EAGlD,KAAK,qBAAuB,CAAA,CAC9B,CAEA,oBAAqB,CACnB,MAAO,EACT,CACF,CC9OA,MAAM7E,GAAM,IAAO,KAAK,IAAG,EAAK,IAAQ,EAEjC,MAAMkS,WAAoCR,EAAoB,CACnE,YAAYhH,EAAO,GAAI,CACrB,MAAMA,CAAI,EAEV,KAAK,iBAAmB,CAAA,EACxB,KAAK,oBAAsB,CAAA,EAC3B,KAAK,eAAiB,CAAA,EACtB,KAAK,gBAAkB,CAAA,EACvB,KAAK,aAAe,CAAA,EACpB,KAAK,aAAeA,EAAK,iBACzB,KAAK,uBAAyBA,EAAK,uBAC/B,KAAK,eAAiB,SAAW,KAAK,aAAe1K,GAAG,GAC5D,KAAK,UAAY,OACjB,KAAK,UAAY0K,EAAK,KACxB,CAEA,MAAM7F,EAAK,CAET,QAASgN,KAAc,KAAK,gBAC1B,KAAK,gBAAgBA,CAAU,EAAE,OAAOhN,CAAG,EAG7C,YAAK,gBAAkB,CAAA,EAEhB,MAAM,MAAK,CACpB,CAEA,QAAQhO,EAAK,CAEX,GAAI,OAAOA,GAAQ,SAAU,CAC3B,KAAK,OAAO,MAAM,6BAA8B,CAAE,QAASA,CAAG,CAAE,EAChE,MACF,CAEA,GAAI,CAAE,KAAAlI,EAAM,WAAAkjB,EAAY,QAAAzb,GAAYS,EAEpC,GAAIlI,IAAS,aAEX,cAAO,KAAK,UACZ,KAAK,MAAM,aAAa,EAAE,EACnB,MAAM,QAAQkI,CAAG,EAG1B,GAAIlI,IAAS,sBACX,OAAO,MAAM,QAAQkI,CAAG,EAG1B,GAAIlI,IAAS,uBACX,OAAK,KAAK,oBAAoBkjB,CAAU,IACtC,KAAK,oBAAoBA,CAAU,EAAI,IAAI,KAGtC,MAAM,QAAQhb,CAAG,EAG1B,GAAIlI,IAAS,OACX,OAAK,KAAK,eACR,KAAK,aAAeqR,GAAG,GAGrB,KAAK,WACP,KAAK,SAAQ,EAGR,KAAK,MAAM,UAAUnJ,EAAI,OAAO,EAMzC,GAHE,KAAK,MAAM,UAAS,EAGlBlI,IAAS,kBAAmB,CAC9B,KAAK,OAAO,MAAM,0BAA2BkI,CAAG,EAChD,KAAK,MAAM,OAAO,mBAAoBgb,CAAU,EAChD,MACF,CAEA,GAAIljB,IAAS,iBAAkB,CAC7B,KAAK,OAAO,KAAK,6BAA8BkI,CAAG,EAClD,KAAK,MAAM,OAAO,oBAAqBgb,CAAU,EACjD,MACF,CAEA,GAAIljB,IAAS,UAAW,CAOtB,GANK,KAAK,yBACR,KAAK,UAAYkI,EAAI,IAEjB,KAAK,WAAW,KAAK,MAAM,aAAa,KAAK,SAAS,GAGxDA,EAAI,SAAU,CAChB,IAAIsb,EACFtb,EAAI,cAAgB,OAAO,KAAK,KAAK,mBAAmB,EAC1D,QAASub,KAAcD,EACrB,KAAK,MAAM,KAAK,CACd,WAAYC,EACZ,QAAS,UACT,QAAS,KAAK,kBAAkBA,CAAU,CACtD,CAAW,EAEG,KAAK,aAAaA,CAAU,GAC9B,KAAK,MAAM,KAAK,CACd,WAAYA,EACZ,QAAS,OACT,SAAU,KAAK,aAAaA,CAAU,CACpD,CAAa,EAIL,OAAO,KAAK,MAAM,SAASD,CAAW,CACxC,CAEA,OAAO,KAAK,MAAM,UAAU,KAAK,SAAS,CAC5C,CAEA,GAAIxjB,IAAS,WAAY,CACvB,IAAI0jB,EAAejc,EAAQ,KAE3B,GAAIic,IAAiB,OAAQ,CAC3B,IAAIC,EAAU,KAAK,gBAAgBT,CAAU,EAEzCS,IACF,OAAO,KAAK,gBAAgBT,CAAU,EACtCS,EAAQ,QAAQlc,CAAO,EAE3B,SAAWic,IAAiB,QAAS,CACnC,IAAIC,EAAU,KAAK,gBAAgBT,CAAU,EAEzCS,IACF,OAAO,KAAK,gBAAgBT,CAAU,EACtCS,EAAQ,OAAO,IAAI,MAAM,6BAA6B,CAAC,EAE3D,CAEA,MAAO,CACL,KAAA3jB,EACA,WAAAkjB,EACA,QAAAzb,CACR,CACI,CAEA,GAAIA,EAAS,CACX,IAAI2Z,EAAO,KAAK,oBACd8B,EACAhb,EAAI,UACJA,EAAI,MACJA,EAAI,MACZ,EACM,MAAO,CAAE,WAAAgb,EAAY,QAAAzb,EAAS,KAAA2Z,CAAI,CACpC,CAEA,KAAK,OAAO,KAAK,yBAAyBphB,CAAI,GAAI,CAAE,QAASkI,CAAG,CAAE,CACpE,CAEA,QAAQgb,EAAYhC,EAAQjD,EAAS,CAEnC,OAAQiD,EAAM,CACZ,IAAK,iBACH,OAAO,KAAK,KAAKgC,EAAYjF,CAAO,EACtC,IAAK,kBACH,OAAO,KAAK,MAAMiF,EAAYjF,CAAO,EACvC,IAAK,iBACH,OAAO,KAAK,SAASiF,EAAYjF,CAAO,CAChD,CAEI,OAAO,MAAM,QAAQiF,EAAYhC,EAAQjD,CAAO,CAClD,CAEA,YAAYiF,EAAY,CACtB,cAAO,KAAK,aAAaA,CAAU,EAE5B,MAAM,YAAYA,CAAU,CACrC,CAEA,sBAAsBA,EAAY,CAChC,IAAIU,EAAM,MAAM,sBAAsBV,CAAU,EAE5CW,EAAa,KAAK,kBAAkBX,CAAU,EAE9CW,IACFD,EAAI,QAAUC,EAEd,KAAK,eAAeX,CAAU,EAAI,IAGpC,IAAIvC,EAAW,KAAK,aAAauC,CAAU,EAE3C,OAAIvC,IACFiD,EAAI,SAAWjD,GAGViD,CACT,CAGA,oBAAqB,CACnB,MAAO,CAAC,CAAC,KAAK,SAChB,CAEA,kBAAkBV,EAAY,CAC5B,IAAIY,EAAU,CAAA,EACVC,EAAa,GAEjB,GAAI,KAAK,oBAAoBb,CAAU,EACrC,QAASzL,KAAU,KAAK,oBAAoByL,CAAU,EAAG,CACvD,IAAIc,EAAS,KAAK,iBAAiBvM,CAAM,EACrCuM,IACFD,EAAa,GACbD,EAAQrM,CAAM,EAAIuM,EAEtB,CAGF,GAAI,GAACD,GAAc,CAAC,KAAK,cAEzB,MAAO,CAAE,MAAO,KAAK,aAAc,QAAAD,CAAO,CAC5C,CAEA,oBAAoBZ,EAAYzL,EAAQwM,EAAOC,EAAQ,CACrD,GAAI,GAACzM,GAAU,CAACwM,GAEhB,OAAK,KAAK,oBAAoBf,CAAU,IACtC,KAAK,oBAAoBA,CAAU,EAAI,IAAI,KAG7C,KAAK,oBAAoBA,CAAU,EAAE,IAAIzL,CAAM,EAE/C,KAAK,iBAAiBA,CAAM,EAAI,CAAE,MAAAwM,EAAO,OAAAC,CAAM,EAExC,CAAE,OAAAzM,EAAQ,MAAAwM,EAAO,OAAAC,CAAM,CAChC,CAGA,MAAM,UAAW,CACf,MAAM,IAAI,QAAQ1T,GAAW,WAAWA,EAAS,CAAC,CAAC,EAE/C,KAAK,MAAM,QAAU,aACvB,KAAK,MAAM,KAAK,CAAE,QAAS,MAAM,CAAE,CAEvC,CAEA,MAAM,KAAK0S,EAAYvC,EAAU,CAC/B,YAAK,aAAauC,CAAU,EAAIvC,EAEhC,KAAK,MAAM,KAAK,CACd,QAAS,OACT,WAAAuC,EACA,SAAAvC,CACN,CAAK,EAEM,QAAQ,QAAO,CACxB,CAEA,MAAM,MAAMuC,EAAYvC,EAAU,CAChC,cAAO,KAAK,aAAauC,CAAU,EAEnC,KAAK,MAAM,KAAK,CACd,QAAS,QACT,WAAAA,EACA,SAAAvC,CACN,CAAK,EAEM,QAAQ,QAAO,CACxB,CAEA,SAASuC,EAAY/b,EAAM,CACzB,OAAI,KAAK,gBAAgB+b,CAAU,GACjC,KAAK,OAAO,KAAK,wCAAyCA,CAAU,EAC7D,QAAQ,OAAO,MAAM,qCAAqC,CAAC,GAG7D,IAAI,QAAQ,CAAC1S,EAASC,IAAW,CACtC,KAAK,gBAAgByS,CAAU,EAAI,CACjC,QAAA1S,EACA,OAAAC,CACR,EAEM,KAAK,MAAM,KAAK,CACd,QAAS,WACT,WAAAyS,EACA,KAAA/b,CACR,CAAO,CACH,CAAC,CACH,CACF,CCnRO,MAAMgd,WAA0BnE,EAAY,CACjD,aAAc,CACZ,MAAM,gBAAiB,QAAQ,EAC/B,KAAK,KAAO,mBACd,CACF,CAEO,MAAMoE,WAAqBtD,EAAQ,CAExC,YAAYuD,EAAWva,EAAQ,CAC7B,MAAMA,CAAM,EACZ,KAAK,UAAYua,CACnB,CAEA,IAAI,UAAUhkB,EAAK,CACjB,KAAK,WAAaA,CACpB,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CACF,CAbEikB,EADWF,GACJ,aAAa,aAef,MAAMG,GAAiB,UAEvB,MAAMC,WAAsB1D,EAAQ,CAGzC,MAAM,QAAQI,EAAQjD,EAAS,CAC7B,GAAIiD,EAAO,WAAW,GAAG,EACvB,OAAO,MAAM,QAAQA,EAAQjD,CAAO,EAGtC,MAAM,MAAM,iBAAiB,CAC/B,CACF,CATEqG,EADWE,GACJ,aAAaD,IAWf,MAAM1D,EAAQ,OAAO,OAAO,EAE5B,IAAA4D,GAAA,KAAY,CACjB,YAAY,CACV,UAAAC,EACA,SAAApO,EACA,QAAAvM,EACA,OAAAoX,EACA,KAAAwD,EACA,WAAAC,EACA,gBAAAC,EACA,sBAAAC,CACJ,EAAK,CACD,KAAK,QAAU/E,GAAgB,EAC/B,KAAK,UAAY2E,EACjB,KAAK,QAAU3a,EACf,KAAK,OAASoX,GAAU,IAAIwB,GAC5B,KAAK,SAAWrM,EAChB,KAAK,gBAAkBuO,GAAmB,QAE1C,KAAK,SAAS,SAAS,IAAI,EAE3B,KAAK,IAAM,IAAIzC,GAAIwC,GAAc,CAAA,CAAE,EAEnC,KAAK/D,CAAK,EAAI,OAEd,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EAEnD,KAAK,sBAAwBiE,EAC7B,KAAK,UAAU,GAAG,QAAS,KAAK,WAAW,EAC3C,KAAK,UAAU,GAAG,OAAQ,KAAK,cAAc,EAE7C,KAAK,eAAiB,GACtB,KAAK,WAAa,GAEdH,IAAS,IACX,KAAK,QAAO,EAAG,MAAM,IAAM,CAAC,CAAC,CAEjC,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK9D,CAAK,CACnB,CAEA,MAAM,SAAU,CACd,GAAI,KAAK,QAAU,YAAa,OAAO,QAAQ,QAAO,EACtD,GAAI,KAAK,QAAU,aACjB,OAAO,KAAK,eAAc,EAG5B,IAAIkE,EAAU,KAAK,QAAU,OAE7B,KAAKlE,CAAK,EAAI,aACd,IAAI/D,EAAU,KAAK,eAAc,EAEjC,KAAK,OAAO,MAAM,YAAY,EAE9B,GAAI,CACE,KAAK,uBACP,MAAM,KAAK,sBAAsB,KAAK,UAAW,CAC/C,QAASiI,CACnB,CAAS,EAEH,MAAM,KAAK,UAAU,KAAI,CAC3B,OAAS7O,EAAK,CACZ,KAAK,YAAYA,CAAG,CACtB,CAEA,OAAO4G,CACT,CAEA,aAAauG,EAAW,CACtB,KAAK,UAAYA,EACjB,KAAK,UAAU,SAAS,MAAOA,CAAS,CAC1C,CAEA,WAAY,CACV,GAAI,KAAK,QAAU,YAAa,OAEhC,KAAK,OAAO,KAAK,WAAW,EAE5B,KAAKxC,CAAK,EAAI,YAEV,KAAK,YAEP,KAAK,IAAI,cACN,IAAG,EACH,QAAQyC,GACPA,EAAa,OACX,eACA,IAAInD,EAAkB,iBAAiB,CACnD,CACA,EAII,KAAK,IAAI,cACN,IAAG,EACH,QAAQmD,GAAgB,KAAK,aAAaA,CAAY,CAAC,EAE1D,IAAItC,EAAW,GACf,KAAK,WAAa,GAEd,KAAK,gBACP,KAAK,eAAiB,GACtB,KAAK,KAAK,UAAW,CAAE,UAAW,GAAO,SAAAA,CAAQ,CAAE,GAEnD,KAAK,KAAK,UAAW,CAAE,UAAW,GAAM,SAAAA,CAAQ,CAAE,CAEtD,CAEA,SAASgE,EAAW,CAClB,KAAK,OAAO,KAAK,uBAAwB,CAAE,UAAAA,CAAS,CAAE,EAEtD,KAAKnE,CAAK,EAAI,YAEd,KAAK,IAAI,cAAc,IAAG,EAAG,QAAQyC,GAAgB,CAEjD0B,GACA1B,EAAa,UACb0B,EAAU,SAAS1B,EAAa,QAAQ,EAExCA,EAAa,OAAO,UAAU,GAE9BA,EAAa,OACX,eACA,IAAInD,EAAkB,iBAAiB,CACjD,EACQ,KAAK,aAAamD,CAAY,EAElC,CAAC,EAED,IAAIrC,EAAY,CAAC,KAAK,eAClBD,EAAW,GAEf,KAAK,WAAa,GAClB,KAAK,eAAiB,GAEtB,KAAK,KAAK,UAAW,CAAE,UAAAC,EAAW,SAAAD,CAAQ,CAAE,CAC9C,CAEA,OAAO7K,EAAO+M,EAAY/b,EAAM,CAC1B+b,GAAc,OAAOA,GAAe,WACtC/b,EAAO+b,EACPA,EAAa,QAIVA,EAGH,KAAK,IAAI,OAAOA,EAAY,OAAQ,CAAE,KAAM/M,EAAO,KAAAhP,CAAI,CAAE,EAFzD,KAAK,KAAK,OAAQ,CAAE,KAAMgP,EAAO,KAAAhP,CAAI,CAAE,CAI3C,CAEA,YAAY+O,EAAK,CACf,KAAK,OAAO,MAAM,mBAAoB,CAAE,MAAOA,CAAG,CAAE,EAEpD,KAAK,aAAa,IAAIiK,EAAkBjK,EAAK,kBAAkB,CAAC,CAClE,CAEA,aAAaA,EAAK,EACV,KAAK,QAAU,aAAe,KAAK,QAAU,gBAInD,KAAK,OAAO,KAAK,eAAgB,CAAE,OAAQA,CAAG,CAAE,EAEhD,KAAK2K,CAAK,EAAI,eAEd,KAAK,WAAa,KAAK,SAAS,mBAAmB3K,CAAG,EAElD,KAAK,WACP,KAAK,IAAI,cACN,IAAG,EACH,QAAQoN,GAAgBA,EAAa,OAAO,YAAY,CAAC,EAE5D,KAAK,IAAI,cAAc,IAAG,EAAG,QAAQA,GAAgB,CACnDA,EAAa,OAAO,eAAgBpN,CAAG,CACzC,CAAC,EAGH,KAAK,SAAS,MAAMA,CAAG,EACvB,KAAK,IAAI,MAAK,EACd,KAAK,UAAU,MAAK,EAEpB,KAAK,KAAK,aAAcA,CAAG,EAC7B,CAEA,OAAOY,EAAQ,CACb,GAAI,KAAK,QAAU,UAAY,KAAK,QAAU,OAAQ,OAEtD,IAAIZ,EAEAY,IACFZ,EACEY,aAAkBqJ,EACdrJ,EACA,IAAIqJ,EAAkBrJ,EAAQ,MAAS,GAG/C,KAAK,OAAO,KAAK,SAAU,CAAE,OAAQA,GAAU,MAAM,CAAE,EAEvD,KAAK+J,CAAK,EAAI,SAId,IAAIoE,EAAa/O,GAAO,IAAIiK,EAAkB,cAAc,EAC5D,KAAK,IAAI,cACN,IAAG,EACH,QAAQmD,GAAgBA,EAAa,OAAO,eAAgB2B,CAAU,CAAC,EAE1E,KAAK,IAAI,MAAK,EACd,KAAK,SAAS,MAAK,EACnB,KAAK,UAAU,MAAK,EAEpB,KAAK,eAAiB,GAEtB,KAAK,KAAK,QAAS/O,CAAG,CACxB,CAEA,YAAa,CACX,KAAK,OAAM,CACb,CAEA,eAAe2M,EAAK,CAClB,GAAI,KAAK,QAAU,UAAY,KAAK,QAAU,OAC5C,OAGF,IAAI1b,EAAO,KAAK,QAAQ,OAAO0b,CAAG,EAElC,GAAI1b,IAAS,OAAW,CACtB,KAAK,OAAO,MAAM,2BAA4B,CAAE,QAAS0b,CAAG,CAAE,EAC9D,MACF,CAEA,KAAK,OAAO,MAAM,gBAAiB1b,CAAI,EAEvC,IAAI+d,EAAY,KAAK,SAAS,QAAQ/d,CAAI,EAE1C,GAAI+d,EAAW,CACb,KAAK,OAAO,MAAM,6BAA8BA,CAAS,EAEzD,GAAI,CAAE,KAAAllB,EAAM,WAAAkjB,EAAY,QAAAzb,EAAS,KAAA2Z,CAAI,EAAK8D,EAEtCllB,EACF,KAAK,IAAI,OAAOkjB,EAAYljB,EAAMyH,CAAO,EAEzC,KAAK,IAAI,SAASyb,EAAYzb,EAAS2Z,CAAI,CAE/C,CACF,CAEA,KAAKlZ,EAAK,CACR,GAAI,KAAK,QAAU,SACjB,MAAM,MAAM,iBAAiB,EAG/B,IAAIf,EAAO,KAAK,QAAQ,OAAOe,CAAG,EAElC,GAAIf,IAAS,OAAW,CACtB,KAAK,OAAO,MAAM,2BAA4B,CAAE,QAASe,CAAG,CAAE,EAC9D,MACF,CAEA,KAAK,OAAO,MAAM,mBAAoBA,CAAG,EAEzC,KAAK,UAAU,KAAKf,CAAI,CAC1B,CAEA,UAAUe,EAAK,CACb,KAAK,KAAK,YAAaA,CAAG,CAC5B,CAEA,WAAWxC,EAAM,CACf,IAAI+a,EAAU,IAAI+D,GAAc,CAAE,YAAa9e,CAAI,CAAE,EAErD,OAAO,KAAK,UAAU+a,CAAO,CAC/B,CAEA,iBAAiB/a,EAAM,CACrB,IAAI+a,EAAU,IAAI+D,GAAc,CAAE,mBAAoB9e,CAAI,CAAE,EAE5D,OAAO,KAAK,UAAU+a,CAAO,CAC/B,CAEA,YAAY0E,EAAcrb,EAAQ,CAChC,IAAI2W,EACA2E,EAEJ,OAAI,OAAOD,GAAiB,WAC1BC,EAAYD,EACZA,EAAef,IAGjB3D,EAAU2E,EACN,IAAID,EAAaC,EAAWtb,CAAM,EAClC,IAAIqb,EAAarb,CAAM,EAEpB,KAAK,UAAU2W,CAAO,CAC/B,CAEA,UAAUA,EAAS,CAEjB,GAAI,CAACA,EAAQ,SAAS,IAAI,EAAG,OAAOA,EAEpC,IAAIyC,EAAazC,EAAQ,WAEzBA,EAAQ,WAAU,EAElB,IAAI6C,EACF,KAAK,IAAI,cAAc,IAAIJ,CAAU,GACrC,KAAK,IAAI,cAAc,OAAOA,EAAY,CACxC,UAAWjB,GACF,KAAK,WAAWA,EAAKxB,EAAQ,UAAWA,EAAQ,MAAM,EAE/D,YAAawB,GAAO,KAAK,aAAaA,CAAG,CACjD,CAAO,EAEH,OAAAqB,EAAa,IAAI7C,CAAO,EAGtB6C,EAAa,SAAW,cACxBA,EAAa,QAAU,aAEvB7C,EAAQ,UAAS,EAGnB6C,EAAa,iBAAgB,EAEtB7C,CACT,CAEA,MAAM,aAAa6C,EAAc,CAC3BA,EAAa,SAAW,cAIxB,CAFUA,EAAa,SAAS,CAAC,IAIrCA,EAAa,OAAO,YAAY,EAChCA,EAAa,mBAAkB,EACjC,CAEA,MAAM,WAAWA,EAAce,EAAWva,EAAQ,CAChD,IAAIoZ,EAAaI,EAAa,GAQ9B,GANI,KAAK,QAAU,QAEjB,KAAK,QAAO,EAAG,MAAM,IAAM,CAAC,CAAC,EAI3B,KAAK,QAAU,YAAa,CAC9B,KAAK,OAAO,MAAM,kCAAmC,CAAE,WAAAJ,CAAU,CAAE,EACnE,MACF,CAEA,KAAK,OAAO,MAAM,2BAA4B,CAAE,WAAAA,CAAU,CAAE,EAE5D,IAAItB,EAAO,MAAM0B,EAAa,QAAQ,YAAY,EAClD,GAAI1B,EAAK,SAAU,CACjB,KAAK,OAAO,MAAM,mCAAoC,CAAE,WAAAsB,CAAU,CAAE,EACpEtB,EAAK,QAAO,EACZ,MACF,CAIA,GAFA,KAAK,OAAO,MAAM,mCAAoC,CAAE,WAAAsB,CAAU,CAAE,EAEhEI,EAAa,SAAW,aAAc,CACxC,KAAK,OAAO,MAAM,gDAAgD,EAClE1B,EAAK,QAAO,EACZ,MACF,CAGA,GAAI,KAAK,QAAU,YAAa,CAC9B,KAAK,OAAO,MAAM,kCAAmC,CAAE,WAAAsB,CAAU,CAAE,EACnEtB,EAAK,QAAO,EACZ,MACF,CAGA,GAAI0B,EAAa,QAAU,YAAa,CACtC,KAAK,OAAO,MAAM,4CAA6C,CAC7D,WAAAJ,CACR,CAAO,EACDI,EAAa,OAAO,WAAW,EAC/B1B,EAAK,QAAO,EACZ,MACF,CAEA,IAAIyD,EAAc,CAChB,WAAYhB,EACZ,OAAAva,CACN,EAEI,KAAK,OAAO,MAAM,cAAeub,CAAW,EAE5C,GAAI,CACF,IAAIlD,EAAW,MAAM,KAAK,SAAS,UAAUkC,EAAWva,CAAM,EAE9D,KAAK,IAAI,UAAUoZ,EAAYf,CAAQ,EAEvC,KAAK,OAAO,MAAM,aAAc,CAAE,GAAGkD,EAAa,SAAAlD,CAAQ,CAAE,EAC5DmB,EAAa,OAAO,WAAW,CACjC,OAASpN,EAAK,CACZ,GAAIA,EAAK,CAKP,GAJIA,aAAe+J,IACjB,KAAK,OAAO,KAAK,WAAYoF,CAAW,EAGtCnP,aAAeiK,EAAmB,CACpC,KAAK,OAAO,MACV,0DACAkF,CACZ,EACUzD,EAAK,QAAO,EACZ,MACF,CAEA,KAAK,OAAO,MAAM,sBAAuB,CACvC,MAAO1L,EACP,GAAGmP,CACb,CAAS,CACH,CAEA/B,EAAa,MAAMpN,CAAG,EACtB,KAAK,IAAI,YAAYgN,CAAU,CACjC,CAEAtB,EAAK,QAAO,CACd,CAEA,YAAYnB,EAAS,CACnB,IAAIyC,EAAazC,EAAQ,WAErB6C,EAAe,KAAK,IAAI,cAAc,IAAIJ,CAAU,EAExD,GAAI,CAACI,EACH,MAAM,MAAM,2BAA2BJ,CAAU,EAAE,EAGrDI,EAAa,OAAO7C,CAAO,EAC3BA,EAAQ,OAAM,EAEd6C,EAAa,iBAAgB,CAC/B,CAEA,MAAM,aAAaA,EAAc,CAC/B,IAAIJ,EAAaI,EAAa,GAE9B,KAAK,OAAO,MAAM,6BAA8B,CAAE,WAAAJ,CAAU,CAAE,EAE9D,IAAItB,EAAO,MAAM0B,EAAa,QAAQ,cAAc,EACpD,GAAI1B,EAAK,SAAU,CACjB,KAAK,OAAO,MAAM,qCAAsC,CAAE,WAAAsB,CAAU,CAAE,EACtEtB,EAAK,QAAO,EACZ,MACF,CAKA,GAHA,KAAK,OAAO,MAAM,qCAAsC,CAAE,WAAAsB,CAAU,CAAE,EAGlEI,EAAa,SAAW,eAAgB,CAC1C,KAAK,OAAO,MAAM,uCAAwC,CACxD,WAAAJ,EACA,OAAQI,EAAa,MAC7B,CAAO,EACD1B,EAAK,QAAO,EACZ,MACF,CAGA,GACE0B,EAAa,QAAU,gBACvBA,EAAa,QAAU,SACvB,CACA,KAAK,OAAO,MACV,WAAWA,EAAa,KAAK,uCAC7B,CAAE,WAAAJ,CAAU,CACpB,EACMtB,EAAK,QAAO,EACZ,MACF,CAEA,IAAIO,EAAWmB,EAAa,SAI5B,GAFA,KAAK,OAAO,MAAM,mBAAoB,CAAE,SAAAnB,CAAQ,CAAE,EAE9C,KAAK,QAAU,YAAa,CAC9B,KAAK,OAAO,MAAM,+CAAgD,CAChE,GAAIe,CACZ,CAAO,EACDI,EAAa,MAAK,EAClB,KAAK,IAAI,YAAYJ,CAAU,EAC/BtB,EAAK,QAAO,EACZ,MACF,CAEA,GAAI,CACF,MAAM,KAAK,SAAS,YAAYO,CAAQ,EACxC,KAAK,OAAO,MAAM,wBAAyB,CAAE,GAAIe,CAAU,CAAE,CAC/D,OAAShN,EAAK,CACRA,IAGEA,aAAeiK,EACjB,KAAK,OAAO,MACV,8DACA,CAAE,GAAI+C,EAAY,MAAOhN,CAAG,CACxC,EAEU,KAAK,OAAO,MAAM,qBAAsB,CACtC,GAAIgN,EACJ,MAAOhN,CACnB,CAAW,EAGP,CAEIoN,EAAa,SAAW,gBAC1BA,EAAa,MAAK,EAClB,KAAK,IAAI,YAAYJ,CAAU,GAI/BI,EAAa,MAAQ,SAGvB1B,EAAK,QAAO,CACd,CAEA,MAAM,QAAQsB,EAAYhC,EAAQjD,EAAS,CACzC,GAAI,KAAK,kBAAoB,QAC3B,OAAO,KAAK,SAASiF,EAAYhC,EAAQjD,CAAO,EAGlD,GAAI,CACF,OAAO,MAAM,KAAK,SAASiF,EAAYhC,EAAQjD,CAAO,CACxD,OAAS/H,EAAK,CACR,KAAK,kBAAoB,QAC3B,KAAK,OAAO,KAAK,iBAAkB,CAAE,MAAOA,CAAG,CAAE,EAEnD,MACF,CACF,CAEA,MAAM,SAASgN,EAAYhC,EAAQjD,EAAS,CAK1C,GAJI,KAAK,QAAU,cACjB,MAAM,KAAK,eAAc,EAGvB,KAAK,QAAU,UAAY,KAAK,QAAU,eAC5C,MAAM,IAAIkG,GAGZ,IAAIb,EAAe,KAAK,IAAI,cAAc,IAAIJ,CAAU,EAExD,GAAI,CAACI,EACH,MAAM,MAAM,2BAA2BJ,CAAU,EAAE,EAKrD,GAFA,MAAMI,EAAa,QAAQ,YAAY,EAEnCA,EAAa,SAAW,aAC1B,MAAM,MAAM,2BAA2BJ,CAAU,EAAE,EAGrD,IAAIf,EAAWmB,EAAa,SAExBgC,EAAc,CAChB,GAAInD,EACJ,OAAAjB,EACA,QAAAjD,CACN,EAEI,KAAK,OAAO,MAAM,UAAWqH,CAAW,EAExC,GAAI,CACF,IAAIlM,EAAM,MAAM,KAAK,SAAS,QAAQ+I,EAAUjB,EAAQjD,CAAO,EAE/D,OAAI7E,GACF,KAAK,OAAO,MAAM,iBAAkB,CAClC,QAASA,EACT,QAASkM,CACnB,CAAS,EAGIlM,CACT,OAASlD,EAAK,CACZ,WAAK,OAAO,MAAM,iBAAkB,CAClC,MAAOA,EACP,QAASoP,CACjB,CAAO,EAEKpP,CACR,CACF,CAEA,GAAGC,EAAO4H,EAAU,CAClB,OAAO,KAAK,QAAQ,GAAG5H,EAAO4H,CAAQ,CACxC,CAEA,KAAK5H,EAAO4H,EAAU,CACpB,IAAIsD,EAAS,KAAK,QAAQ,GAAGlL,EAAO,IAAInE,IAAS,CAC/CqP,EAAM,EACNtD,EAAS,GAAG/L,CAAI,CAClB,CAAC,EACD,OAAOqP,CACT,CAEA,KAAKlL,KAAUnE,EAAM,CACnB,OAAO,KAAK,QAAQ,KAAKmE,EAAO,GAAGnE,CAAI,CACzC,CAEA,gBAAiB,CACf,OAAI,KAAK,gBAAwB,KAAK,iBAEtC,KAAK,gBAAkB,IAAI,QAAQ,CAACxB,EAASC,IAAW,CACtD,IAAI4Q,EAAS,CAAC,IAAM,OAAO,KAAK,eAAe,EAE/CA,EAAO,KACL,KAAK,GAAG,UAAW,IAAM,CACvBA,EAAO,QAAQC,GAAQA,EAAI,CAAE,EAC7B9Q,EAAO,CACT,CAAC,CACT,EACM6Q,EAAO,KACL,KAAK,GAAG,QAASnL,GAAO,CACtBmL,EAAO,QAAQC,GAAQA,EAAI,CAAE,EAC7B7Q,EAAOyF,CAAG,CACZ,CAAC,CACT,EACMmL,EAAO,KACL,KAAK,GAAG,aAAcnL,GAAO,CAC3BmL,EAAO,QAAQC,GAAQA,EAAI,CAAE,EAC7B7Q,EAAOyF,CAAG,CACZ,CAAC,CACT,CACI,CAAC,EAEM,KAAK,gBACd,CACF,ECnrBA,MAAM7J,GAAW,CACf,gBAAiB,EACjB,qBAAsB,GACxB,EAEMgF,EAAM,IAAM,KAAK,IAAG,EAEbkU,GAAoB,CAACC,EAAUzJ,IAAS,CACnDA,EAAOA,GAAQ,CAAA,EACf,GAAI,CAAE,YAAA0J,EAAa,YAAAC,EAAa,YAAAC,GAAgB5J,EAChD,OAAA0J,EAAcA,GAAe,EACzBC,IAAgB,SAAWA,EAAc,IAEtCE,GAAY,CACjB,IAAIvD,EAAOmD,EAAWC,GAAeG,EACjCC,EAAQxD,EAAOoD,EAEfK,EAAQzD,GAAQwD,EAAQxD,GAAQ,KAAK,OAAM,EAE3C0D,EAAY,GAAK,KAAK,OAAM,EAAK,IAAOL,EAE5C,OAAAI,EAAQA,GAAS,EAAIC,GAEjBJ,GAAeA,EAAcG,IAAOA,EAAQH,GAEzCG,CACT,CACF,EAEO,IAAAE,GAAA,KAAc,CACnB,YAAY,CAAE,aAAAC,EAAc,GAAGlK,GAAQ,CAGrC,GAFA,KAAK,aAAekK,EAEhB,CAAC,KAAK,aACR,MAAM,MAAM,uCAAuCA,CAAY,EAAE,EAMnE,GAHAlK,EAAO,OAAO,OAAO,CAAA,EAAI1P,GAAU0P,CAAI,EAEvC,KAAK,SAAWA,EAAK,kBACjB,CAAC,KAAK,SACR,MAAM,MAAM,qCAAqC,EAGnD,KAAK,gBAAkBA,EAAK,gBAC5B,KAAK,qBAAuBA,EAAK,qBACjC,KAAK,OAASA,EAAK,QAAU,IAAI4G,GAEjC,KAAK,MAAQ,kBACb,KAAK,SAAW,EAChB,KAAK,eAAiBtR,EAAG,CAC3B,CAEA,MAAM3K,EAAQ,CACZ,KAAK,OAASA,EACd,KAAK,cAAa,CACpB,CAEA,cAAe,CACb,OACE,KAAK,QAAU,aACf,KAAK,QAAU,mBACf,KAAK,QAAU,SAER,IAGT,KAAK,gBAAe,EAEpB,KAAK,MAAQ,kBACb,KAAK,OAAO,UAAU,MAAMwP,GAAO,CACjC,KAAK,OAAO,KAAK,2BAA6BA,CAAG,CACnD,CAAC,EAEM,GACT,CAEA,eAAgB,CACd,KAAK,OAAS,CAAA,EAEd,KAAK,OAAO,KACV,KAAK,OAAO,GAAG,UAAW,IAAM,CAC9B,KAAK,SAAW,EAChB,KAAK,SAAW7E,EAAG,EACnB,KAAK,MAAQ,YAEb,KAAK,gBAAe,EACpB,KAAK,aAAY,CACnB,CAAC,CACP,EAEI,KAAK,OAAO,KACV,KAAK,OAAO,GAAG,aAAc,IAAM,CACjC,KAAK,eAAiBA,EAAG,EACzB,KAAK,MAAQ,eAEb,KAAK,YAAW,EAChB,KAAK,kBAAiB,CACxB,CAAC,CACP,EAEI,KAAK,OAAO,KACV,KAAK,OAAO,GAAG,QAAS,IAAM,CAC5B,KAAK,eAAiBA,EAAG,EACzB,KAAK,MAAQ,SAEb,KAAK,gBAAe,EACpB,KAAK,YAAW,CAClB,CAAC,CACP,EAEI,KAAK,OAAO,KACV,KAAK,OAAO,GAAG,YAAa,IAAM,CAChC,KAAK,SAAWA,EAAG,CACrB,CAAC,CACP,EAEI,KAAK,OAAO,KAAK,IAAM,CACrB,KAAK,gBAAe,EACpB,KAAK,YAAW,CAClB,CAAC,CACH,CAEA,SAAU,CACR,OAAO,KAAK,OACR,KAAK,QACP,KAAK,OAAO,QAAQiQ,GAAQA,EAAI,CAAE,EAEpC,OAAO,KAAK,MACd,CAEA,cAAe,CACT,KAAK,QACP,aAAa,KAAK,MAAM,EAG1B,IAAI4E,EACF,KAAK,cAAgB,KAAK,OAAM,EAAK,IAAO,KAAK,aAAe,GAElE,KAAK,OAAS,WAAW,IAAM,CAC7B,KAAK,WAAU,EACX,KAAK,QAAU,aAAa,KAAK,aAAY,CACnD,EAAGA,CAAS,CACd,CAEA,aAAc,CACR,KAAK,QACP,aAAa,KAAK,MAAM,CAE5B,CAEA,YAAa,CACX,IAAIC,EAAO9U,EAAG,EAAK,KAAK,SAEpB8U,EAAO,KAAK,gBAAkB,KAAK,eACrC,KAAK,OAAO,KAAK,qBAAqBA,CAAI,kBAAkB,EAC5D,KAAK,MAAQ,qBACb,KAAK,OAAO,aAAa,IAAI/F,EAAsB,EAEvD,CAEA,mBAAoB,CAClB,GAAI,KAAK,UAAY,KAAK,qBAAsB,CAC9C,KAAK,OAAO,MAAK,EACjB,MACF,CAEA,IAAI0F,EAAQ,KAAK,SAAS,KAAK,QAAQ,EAEvC,KAAK,WAEL,KAAK,OAAO,KAAK,mBAAmBA,CAAK,OAAO,KAAK,QAAQ,WAAW,EAExE,KAAK,MAAQ,oBAEb,KAAK,aAAe,WAAW,IAAM,KAAK,aAAY,EAAIA,CAAK,CACjE,CAEA,iBAAkB,CACZ,KAAK,eACP,aAAa,KAAK,YAAY,EAC9B,OAAO,KAAK,aAEhB,CACF,ECxLO,MAAMM,EAAkB,CAC7B,YAAYC,EAAYtK,EAAO,GAAI,CACjC,KAAK,WAAasK,EAClB,KAAK,UAAY,KACjB,KAAK,QAAUtG,GAAgB,EAC/B,KAAK,OAAS,CAAA,EAEd,KAAK,OAAShE,EAAK,QAAU,IAAI4G,EACnC,CAEA,aAAc,CACZ,MAAO,sBACT,CAEA,MAAM,MAAO,CACX,QAAS1gB,EAAI,EAAGA,EAAI,KAAK,WAAW,OAAQA,IAAK,CAC/C,IAAIyiB,EAAY,KAAK,WAAWziB,CAAC,EACjC,GAAI,CACF,KAAK,UAAYyiB,EACjB,KAAK,eAAc,EACnB,KAAK,OAAO,MAAM,yBAAyBA,EAAU,YAAW,CAAE,EAAE,EACpE,MAAMA,EAAU,KAAI,EACpB,KAAK,OAAO,MAAM,iBAAiBA,EAAU,YAAW,CAAE,EAAE,EAC5D,MACF,OAAStY,EAAG,CACV,KAAK,OAAO,MACV,yBAAyBsY,EAAU,YAAW,CAAE,KAAKtY,EAAE,OAAO,EACxE,CACM,CACF,CAEA,WAAK,UAAY,KACjB,KAAK,eAAc,EACb,IAAI,MAAM,8CAA8C,CAChE,CAEA,KAAKjF,EAAM,CACT,GAAI,CAAC,KAAK,UACR,MAAM,IAAI,MAAM,sBAAsB,EAGxC,KAAK,UAAU,KAAKA,CAAI,CAC1B,CAEA,MAAM,OAAQ,CACZ,GAAI,CAAC,KAAK,UACR,MAAM,IAAI,MAAM,sBAAsB,EAGxC,MAAM,KAAK,UAAU,MAAK,EAC1B,KAAK,UAAY,IACnB,CAEA,QAAS,CACP,MAAM,IAAI,MAAM,wDAAwD,CAC1E,CAEA,SAAS9E,EAAKhC,EAAK,CACjB,KAAK,WAAW,QAAQqkB,GAAa,CACnCA,EAAU,SAASriB,EAAKhC,CAAG,CAC7B,CAAC,CACH,CAEA,SAASA,EAAKqF,EAAM,CAClB,KAAK,WAAW,QAAQgf,GAAa,CACnCA,EAAU,SAASrkB,EAAKqF,CAAI,CAC9B,CAAC,CACH,CAEA,GAAGyQ,EAAO4H,EAAU,CAClB,OAAO,KAAK,QAAQ,GAAG5H,EAAO4H,CAAQ,CACxC,CAEA,KAAK5H,EAAO4H,EAAU,CACpB,IAAIsD,EAAS,KAAK,QAAQ,GAAGlL,EAAO,IAAInE,IAAS,CAC/CqP,EAAM,EACNtD,EAAS,GAAG/L,CAAI,CAClB,CAAC,EACD,OAAOqP,CACT,CAEA,IAAI,KAAM,CACR,OAAK,KAAK,UAEH,KAAK,UAAU,IAFM,EAG9B,CAEA,gBAAiB,CACf,KAAK,OAAO,QAAQC,GAAQA,EAAI,CAAE,EAClC,KAAK,OAAO,OAAS,EAEhB,KAAK,WAEV,KAAK,OAAO,KACV,KAAK,UAAU,GAAG,OAAQ,IAAM,CAC9B,KAAK,QAAQ,KAAK,MAAM,CAC1B,CAAC,EACD,KAAK,UAAU,GAAG,OAAQna,GAAQ,CAChC,KAAK,QAAQ,KAAK,OAAQA,CAAI,CAChC,CAAC,EACD,KAAK,UAAU,GAAG,QAASmf,GAAM,CAC/B,KAAK,QAAQ,KAAK,QAASA,CAAE,CAC/B,CAAC,EACD,KAAK,UAAU,GAAG,QAASA,GAAM,CAC/B,KAAK,QAAQ,KAAK,QAASA,CAAE,CAC/B,CAAC,CACP,CACE,CACF,CC9GO,MAAMC,EAAmB,CAC9B,YAAYrc,EAAK6R,EAAO,GAAI,CAC1B,KAAK,IAAM7R,EAEX,IAAIsc,EAAOzK,EAAK,wBAEhB,GAAIyK,EACF,KAAK,KAAOA,UACH,OAAO,UAAc,IAC9B,KAAK,KAAO,cAEZ,OAAM,IAAI,MAAM,sBAAsB,EAGxC,KAAK,UAAY,GACjB,KAAK,QAAUzG,GAAgB,EAE/B,GAAI,CAAE,OAAAvQ,EAAQ,YAAAiX,EAAa,aAAAC,GAAiB3K,EAE5C,KAAK,OAASvM,GAAU,OACxB,KAAK,kBAAoBuM,EAAK,iBAC9B,KAAK,aAAe2K,GAAgB,QACpC,KAAK,aAAe,GACpB,KAAK,YAAcD,CACrB,CAEA,aAAc,CACZ,MAAO,aAAe,KAAK,IAAM,GACnC,CAEA,MAAO,CACL,IAAIE,EAAY,KAAK,YACrB,OAAI,KAAK,eAAiB,iBACxBA,EAAY,CAAC,KAAK,YAAa,KAAK,YAAY,GAE9C,KAAK,kBACP,KAAK,GAAK,IAAI,KAAK,KAAK,KAAK,IAAKA,EAAW,KAAK,iBAAiB,EAEnE,KAAK,GAAK,IAAI,KAAK,KAAK,KAAK,IAAKA,CAAS,EAE7C,KAAK,GAAG,WAAa,cACrB,KAAK,cAAa,EAEX,IAAI,QAAQ,CAACnW,EAASC,IAAW,CACtC,IAAI4Q,EAAS,CAAA,EAEbA,EAAO,KACL,KAAK,KAAK,OAAQ,IAAM,CACtBA,EAAO,QAAQC,GAAQA,EAAI,CAAE,EAC7B9Q,EAAO,CACT,CAAC,CACT,EAEM6Q,EAAO,KACL,KAAK,KAAK,QAAS,IAAM,CACvBA,EAAO,QAAQC,GAAQA,EAAI,CAAE,EAC7B7Q,EAAO,MAAM,sBAAsB,CAAC,CACtC,CAAC,CACT,CACI,CAAC,CACH,CAEA,OAAOvG,EAAK,CACV,KAAK,IAAMA,CACb,CAEA,SAAS7H,EAAKhC,EAAK,CACjB,IAAI6J,EAAM,IAAI,IAAI,KAAK,GAAG,EAC1BA,EAAI,aAAa,IAAI7H,EAAKhC,CAAG,EAC7B,IAAIumB,EAAS,GAAG1c,EAAI,QAAQ,KAAKA,EAAI,IAAI,GAAGA,EAAI,QAAQ,IAAIA,EAAI,YAAY,GAC5E,KAAK,OAAO0c,CAAM,CACpB,CAEA,SAASvmB,EAAKgC,EAAM,MAAO,CACzB,GAAI,KAAK,eAAiB,QACxB,KAAK,SAASA,EAAKhC,CAAG,UACb,KAAK,eAAiB,SAAU,CACzC,KAAK,kBAAoB,KAAK,mBAAqB,CAAA,EACnD,KAAK,kBAAkB,QAAU,KAAK,kBAAkB,SAAW,CAAA,EAEnE,IAAIwmB,EAAgB,KAAKxkB,CAAG,GAAG,YAAW,EAM1CwkB,EAHkB,OAAO,KAAK,KAAK,kBAAkB,OAAO,EAAE,KAC5DvG,GAAKA,EAAE,gBAAkBuG,CACjC,GACqCA,EAE/B,KAAK,kBAAkB,QAAQA,CAAa,EAAIxmB,CAClD,SAAW,KAAK,eAAiB,eAC/B,KAAK,aAAe,kBAAkBA,CAAG,OAEzC,OAAM,IAAI,MAAM,0BAA4B,KAAK,YAAY,CAEjE,CAEA,KAAK8G,EAAM,CACT,GAAI,CAAC,KAAK,IAAM,CAAC,KAAK,UACpB,MAAM,MAAM,4BAA4B,EAExC,KAAK,GAAG,KAAKA,CAAI,CAErB,CAEA,OAAQ,CACF,KAAK,GACP,KAAK,QAAO,EAEZ,KAAK,UAAY,EAErB,CAEA,GAAGgP,EAAO4H,EAAU,CAClB,OAAO,KAAK,QAAQ,GAAG5H,EAAO4H,CAAQ,CACxC,CAEA,KAAK5H,EAAO4H,EAAU,CACpB,IAAIsD,EAAS,KAAK,QAAQ,GAAGlL,EAAO,IAAInE,IAAS,CAC/CqP,EAAM,EACNtD,EAAS,GAAG/L,CAAI,CAClB,CAAC,EACD,OAAOqP,CACT,CAEA,eAAgB,CACd,KAAK,GAAG,QAAUlL,GAAS,CAErB,KAAK,WACP,KAAK,QAAQ,KAAK,QAASA,EAAM,OAAS,IAAI,MAAM,UAAU,CAAC,CAEnE,EAEA,KAAK,GAAG,QAAU,IAAM,CACtB,KAAK,QAAO,CACd,EAEA,KAAK,GAAG,UAAYA,GAAS,CAC3B,IAAIhP,EAAOgP,EAAM,KACb,KAAK,SAAW,WAClBhP,EAAO,IAAI,WAAWA,CAAI,GAG5B,KAAK,QAAQ,KAAK,OAAQA,CAAI,CAChC,EAEA,KAAK,GAAG,OAAS,IAAM,CACrB,KAAK,UAAY,GACjB,KAAK,QAAQ,KAAK,MAAM,CAC1B,CACF,CAEA,SAAU,CACR,KAAK,GAAG,QAAU,OAClB,KAAK,GAAG,UAAY,OACpB,KAAK,GAAG,OAAS,OACjB,KAAK,GAAG,MAAK,EACb,OAAO,KAAK,GACZ,KAAK,UAAY,GAEjB,KAAK,QAAQ,KAAK,OAAO,CAC3B,CACF,CCzJO,MAAM2f,GAAkB,CAC7B,SAAU,sBACV,aAAc,IACd,qBAAsB,IACtB,gBAAiB,EACjB,SAAU,OACV,KAAM,EACR,EAEO,SAASC,GAAY7c,EAAK6R,EAAM,CAQrC,GAPI,OAAO7R,GAAQ,UAAY,OAAO6R,EAAS,MAC7CA,EAAO7R,EACPA,EAAM,QAGR6R,EAAOA,GAAQ,CAAA,EAEX,CAAC7R,GAAO,CAAC6R,EAAK,UAAW,MAAM,MAAM,oCAAoC,EAE7EA,EAAO,OAAO,OAAO,CAAA,EAAI+K,GAAiB/K,CAAI,EAE9C,GAAI,CACF,SAAAzF,EACA,wBAAA0Q,EACA,gBAAAC,EACA,iBAAAC,EACA,sBAAAC,EACA,UAAAC,EACA,SAAAC,EACA,OAAAlG,EACA,UAAAuD,EACA,QAAA3a,EACA,KAAA4a,EACA,QAAA2C,EACA,aAAArB,EACA,kBAAAsB,EACA,gBAAAC,EACA,qBAAAC,EACA,YAAAhB,EACA,eAAAiB,EACA,iBAAAC,EACA,gBAAAC,EACA,qBAAAC,EACA,gBAAAhD,EACA,sBAAAC,EACA,KAAAhQ,CACJ,EAAMiH,EAIJ,GAFAoF,EAASA,GAAU,IAAIwB,GAAW0E,CAAQ,EAEtC,OAAO/Q,GAAa,SAAU,CAChCmQ,EAAcA,GAAenQ,EAI7B,IAAIwR,EAAexR,EAAS,UAAU,EAAGA,EAAS,YAAY,GAAG,CAAC,EAC9DyR,EAAsBzR,EAAS,UAAUA,EAAS,YAAY,GAAG,EAAI,CAAC,EAI1E,GAFAsR,EAAkBA,GAAmB,CAAA,EAEjCE,IAAiB,iBACnBxR,EAAW,IAAIyM,GAAoB,CAAE,OAAA5B,EAAQ,GAAGyG,CAAe,CAAE,UACxDE,IAAiB,qBAC1BxR,EAAW,IAAIiN,GAA4B,CACzC,OAAApC,EACA,iBAAAwG,EACA,GAAGC,CACX,CAAO,MAED,OAAM,MAAM,kCAAkCtR,CAAQ,EAAE,EAG1D,GAAIyR,IAAwB,OAC1Bhe,EAAUA,GAAW,IAAI6Y,GACzBqE,EAAkBA,GAAmB,eAC5Bc,IAAwB,WAEjC,GADAd,EAAkB,SACd,CAACld,EACH,MAAM,MACJ,yGACV,UAEege,IAAwB,YAEjC,GADAd,EAAkBA,GAAmB,SACjC,CAACld,EACH,MAAM,MACJ,2GACV,MAGM,OAAM,MAAM,kCAAkCuM,CAAQ,EAAE,CAE5D,CAEA,GAAI,CAACA,EAAU,MAAM,MAAM,4BAA4B,EAEvDoO,EACEA,GACA,IAAI6B,GAAmBrc,EAAK,CAC1B,wBAAA8c,EACA,iBAAAE,EACA,YAAAT,EACA,aAAcU,EACd,OAAQF,CACd,CAAK,EAECG,IACF1C,EAAY,IAAI0B,GAAkB,CAAC1B,EAAW,GAAG0C,CAAS,EAAG,CAAE,OAAAjG,CAAM,CAAE,GAGrErM,GAAQA,EAAK,OACf4P,EAAU,SAAS5P,EAAK,MAAOA,EAAK,OAAS,KAAK,EAGpDyS,EAAoBA,GAAqBhC,GAAkBU,CAAY,EAEnEqB,IAAY,KACdA,EACEA,GACA,IAAIU,GAAQ,CACV,aAAA/B,EACA,kBAAAsB,EACA,gBAAAC,EACA,qBAAAC,EACA,OAAAtG,CACR,CAAO,GAGL,IAAIyD,EAAa,CAAE,qBAAAiD,CAAoB,EAEnC7E,EAAQ,IAAIiF,GAAM,CACpB,SAAA3R,EACA,UAAAoO,EACA,QAAA3a,EACA,OAAAoX,EACA,KAAAwD,EACA,WAAAC,EACA,gBAAAC,EACA,sBAAAC,CACJ,CAAG,EAED,OAAIwC,IACFA,EAAQ,MAAMtE,CAAK,EACnBA,EAAM,QAAUsE,GAGdI,GACFQ,GAAqBlF,EAAO,SAAY,CACtC,GAAI,CACF,MAAM0E,EAAehD,CAAS,CAChC,OAASxO,EAAK,CACZ,OAAAiL,EAAO,MAAM,2CAA6CjL,CAAG,EACtD,EACT,CAKA,OAAA8M,EAAM,QAAO,EAAG,MAAM,IAAM,CAAC,CAAC,EAEvB,EACT,CAAC,EAGIA,CACT,CAEA,SAASkF,GAAqBlF,EAAOjF,EAAU,CAC7C,IAAIoK,EAAY,GAEhBnF,EAAM,GAAG,UAAW,IAAOmF,EAAY,EAAM,EAE7CnF,EAAM,GAAG,QAAS,MAAMsD,GAAM,CAC5B,GAAKA,EAGL,IAAI6B,EAAW,CACbnF,EAAM,OAAO,KAAK,iCAAkCsD,CAAE,EACtD,MACF,CAEIA,EAAG,SAAW,kBAChB6B,EAAY,GAEZ,MAAMpK,EAAQ,GAElB,CAAC,CACH,CAGA,MAAMqK,EAAwB,CAC5B,YAAY3H,EAAS,CACnB,KAAK,QAAUA,CACjB,CAEA,OAAO1C,KAAa/L,EAAM,CACpB,OAAO,KAAK+L,CAAQ,GAAM,YAE9B,KAAKA,CAAQ,EAAE,GAAG/L,CAAI,CACxB,CAEA,QAAQkP,EAAQ/Z,EAAO,GAAI,CACzB,KAAK,QAAQ,QAAQ+Z,EAAQ/Z,CAAI,CACnC,CAEA,KAAKA,EAAM,CACT,KAAK,QAAQ,KAAKA,CAAI,CACxB,CAEA,IAAI,YAAa,CACf,OAAO,KAAK,QAAQ,UACtB,CAEA,aAAc,CACZ,OAAO,KAAK,QAAQ,WAAU,CAChC,CACF,CAEA,MAAMkhB,WAA2BjE,EAAa,CAC5C,YAAYkE,EAAaxe,EAAQye,EAAO,CACtC,MAAMD,EAAaxe,CAAM,EAEzB,KAAK,aAAe,IAAIse,GAAwB,IAAI,EACpD,OAAO,OAAO,KAAK,aAAcG,CAAK,EAEtC,KAAK,GAAG,UAAW,CAAC,CAAE,UAAAtH,CAAS,IAC7B,KAAK,aAAa,OAAO,YAAa,CAAE,YAAaA,CAAS,CAAE,CACtE,EACI,KAAK,GAAG,aAAc,IACpB,KAAK,aAAa,OAAO,eAAgB,CAAE,eAAgB,EAAI,CAAE,CACvE,EACI,KAAK,GAAG,UAAW5gB,GAAO,KAAK,aAAa,OAAO,WAAYA,CAAG,CAAC,EACnE,KAAK,GAAG,QAAS6V,GAAO,CAClBA,GAAOA,aAAe+J,GACxB,KAAK,aAAa,OAAO,UAAU,EAEnC,KAAK,aAAa,OAAO,eAAgB,CAAE,eAAgB,EAAK,CAAE,CAEtE,CAAC,CACH,CACF,CAEO,MAAMuI,EAAyB,CACpC,YAAYxF,EAAO,CACjB,KAAK,MAAQA,CACf,CAEA,OAAOvC,EAAS8H,EAAO,CACrB,IAAID,EACAxe,EAEA,OAAO2W,GAAY,UACrB6H,EAAc7H,EAAQ,QACtB,OAAOA,EAAQ,QACf3W,EAAS2W,IAET6H,EAAc7H,EACd3W,EAAS,CAAA,GAGX,IAAI2e,EAAe,IAAIJ,GAAmBC,EAAaxe,EAAQye,CAAK,EACpE,OAAAE,EAAa,aAAa,OAAO,aAAa,EAE9C,KAAK,MAAM,UAAUA,CAAY,EAE1BA,EAAa,YACtB,CAEA,QAAQvF,EAAY,CAClB,OAAO,KAAK,MAAM,IAAI,SACnB,OAAOzC,GAAWA,EAAQ,aAAeyC,CAAU,EACnD,IAAIzC,GAAWA,EAAQ,YAAY,CACxC,CACF,CAEO,MAAMiI,EAAoB,CAC/B,YAAY1F,EAAO,CACjB,KAAK,MAAQA,EACb,KAAK,cAAgB,IAAIwF,GAAyBxF,CAAK,CACzD,CACF,CC/RO,MAAM2F,WAAenG,EAAW,CACrC,cAAcC,EAAOva,EAAKwa,EAAS,CAC7BA,EACF,QAAQD,CAAK,EAAEva,EAAKwa,CAAO,EAE3B,QAAQD,CAAK,EAAEva,CAAG,CAEtB,CACF,CCTO,MAAM8f,WAAgBY,EAAY,CACvC,MAAM5F,EAAO,CACX,MAAM,MAAMA,CAAK,EAEjB,KAAK,sBAAqB,CAC5B,CAEA,uBAAwB,CACtB,GACE,OAAO,SAAa,KACpB,OAAO,OAAW,KAClB,SAAS,kBACT,OAAO,iBACP,CACA,IAAI6F,EAAa,IAAM,CAChB,SAAS,QACR,KAAK,gBACP,KAAK,OAAO,MAAM,4CAA4C,CAGpE,EACIC,EAAU3S,GAAS,CACjB,KAAK,gBACP,KAAK,OAAO,MAAM,oBAAqB,CAAE,MAAAA,CAAK,CAAE,CAEpD,EACI4S,EAAmB,IACrB,KAAK,WAAW,IAAI5I,EAAkB,aAAa,CAAC,EAEtD,SAAS,iBAAiB,mBAAoB0I,EAAY,EAAK,EAC/D,OAAO,iBAAiB,QAASC,EAAS,EAAK,EAC/C,OAAO,iBAAiB,SAAUA,EAAS,EAAK,EAChD,OAAO,iBAAiB,SAAUA,EAAS,EAAK,EAChD,OAAO,iBAAiB,SAAUC,EAAkB,EAAK,EAEzD,KAAK,OAAO,KAAK,IAAM,CACrB,SAAS,oBAAoB,mBAAoBF,EAAY,EAAK,EAClE,OAAO,oBAAoB,QAASC,EAAS,EAAK,EAClD,OAAO,oBAAoB,SAAUA,EAAS,EAAK,EACnD,OAAO,oBAAoB,SAAUA,EAAS,EAAK,EACnD,OAAO,oBAAoB,SAAUC,EAAkB,EAAK,CAC9D,CAAC,CACH,CACF,CAEA,WAAW7S,EAAK,CACV,KAAK,QAAU,gBAAkB,KAAK,QAAU,WAEpD,KAAK,OAAO,KAAK,gBAAiB,CAAE,OAAQA,EAAI,OAAO,CAAE,EAEzD,KAAK,gBAAe,EACpB,KAAK,YAAW,EAEhB,KAAK,MAAQ,qBACb,KAAK,OAAO,aAAaA,CAAG,EAC9B,CACF,CC9CA,MAAM8S,GAAe,CAAC,QAAS,cAAc,EAEvCC,GAAa,SAGbC,GAAY,CAACC,EAAK9mB,IAAQ,CAC9B,QAAS+mB,KAAUJ,GAAc,CAC/B,IAAIK,EAAUF,EAAI,KAAK,cAAc,cAAcC,CAAM,IAAI/mB,CAAG,IAAI,EAEpE,GAAIgnB,EACF,OAAOA,EAAQ,aAAa,SAAS,CAEzC,CACF,EAEMC,GAAgB9gB,GAChBA,EAAK,MAAM,WAAW,EAAUA,EAEhC,OAAO,OAAW,IAGb,GAFK,OAAO,SAAS,SAAS,QAAQ,OAAQ,IAAI,CAE1C,KAAK,OAAO,SAAS,IAAI,GAAGA,CAAI,GAG1CA,EAIH+gB,GAAqB,IAAM,CAC/B,GAAI,OAAO,SAAa,KAAe,SAAS,KAAM,CACpD,IAAIrf,EAAMgf,GAAU,SAAU,KAAK,EACnC,GAAIhf,EACF,OAAOof,GAAcpf,CAAG,CAE5B,CAEA,OAAOof,GAAcL,EAAU,CACjC,EAEMO,GAA2B,IAAM,CACrC,GAAI,OAAO,SAAa,KAAe,SAAS,KAAM,CACpD,IAAI3jB,EAAQqjB,GAAU,SAAU,mBAAmB,EAEnD,GAAIrjB,EACF,OAAOA,EAAQ,CAEnB,CACF,EAEM4jB,GAAgB,IAAM,CAC1B,GAAI,OAAO,SAAa,KAAe,SAAS,KAC9C,OAAOP,GAAU,SAAU,OAAO,CAEtC,EAEMQ,GAAqB,IAAM,CAC/B,GAAI,OAAO,SAAa,KAAe,SAAS,KAC9C,OAAOR,GAAU,SAAU,aAAa,CAE5C,EAEO,SAASnC,GAAY7c,EAAK6R,EAAM,CACjC,OAAO7R,GAAQ,UAAY,OAAO6R,EAAS,MAC7CA,EAAO7R,EACPA,EAAM,QAGRA,EAAMA,GAAOqf,GAAkB,EAC/BxN,EAAOA,GAAQ,CAAA,EAEfA,EAAK,mBAALA,EAAK,iBAAqByN,GAAwB,GAElD,IAAIviB,EAAQwiB,GAAa,EAEzB,GAAIxiB,EAAO,CACT,IAAI0iB,EAAQD,GAAkB,EAC9B3N,EAAK,KAAO,OAAO,OAAO,CAAE,MAAA9U,EAAO,MAAA0iB,CAAK,EAAI5N,EAAK,MAAQ,CAAA,CAAE,CAC7D,CAEAA,EAAO,OAAO,OAAO,CAAA,EAAI6N,GAAU7N,CAAI,EAEvC,GAAI,CACF,SAAAsL,EACA,OAAAlG,EACA,aAAA8E,EACA,kBAAAsB,EACA,gBAAAC,EACA,qBAAAC,CACJ,EAAM1L,EAEJ,OAAAoF,EAASpF,EAAK,OAASA,EAAK,QAAU,IAAI4M,GAAOtB,CAAQ,EACzDE,EAAoBxL,EAAK,kBACvBA,EAAK,mBAAqBwJ,GAAkBU,CAAY,EAEtDlK,EAAK,UAAY,KACnBA,EAAK,QACHA,EAAK,SACL,IAAIiM,GAAQ,CACV,aAAA/B,EACA,kBAAAsB,EACA,gBAAAC,EACA,qBAAAC,EACA,OAAAtG,CACR,CAAO,GAGE0I,GAAgB3f,EAAK6R,CAAI,CAClC,CAEO,SAAS+N,GAAe5f,EAAK6R,EAAM,CACxC,IAAIiH,EAAQ+D,GAAY7c,EAAK6R,CAAI,EAEjC,OAAO,IAAI2M,GAAoB1F,CAAK,CACtC,CCrGe,MAAMiF,EAAM,CACzB,YAAY/d,EAAM,oBAAqB,CACrC,KAAK,OAAS,KACd,KAAK,KAAOA,CACd,CACA,YAAa,CACP,KAAK,SACP,KAAK,OAAO,MAAM,WAAU,EAC5B,KAAK,OAAS,KAElB,CACA,mBAAmBuW,EAASsJ,EAAO7iB,EAAY,CAAA,EAAI8iB,EAAoB,GAAI,CACzE,OAAO,WAAW,YAAY,WAAW,kBAAkB,EAAE,KAC1DnL,GAAc,CAIb,GAHIA,GACF,WAAW,UAAS,EAElB,KAAK,QAAU,KAAM,CACvB,IAAIoL,EACF,KAAK,KACL,UACA,mBAAmBF,CAAK,EACxB,kBACA,mBAAmB,aAAa,WAAW,EAC7CE,EAAY,IAAI,IAAIA,EAAW,SAAS,OAAO,EAAE,KACjD,KAAK,OAASH,GAAeG,CAAS,CACxC,CACA,OAAO,KAAK,OAAO,cAAc,OAC/B,CACE,QAAAxJ,EACA,GAAGuJ,CACf,EACU9iB,CACV,CACM,CACN,CACE,CACA,YAAa,CAEb,CACF,CC1CO,MAAMgjB,EAAkB,CAC7B,YAAYC,EAAe1iB,EAAS2iB,EAAQ,GAAIlgB,EAAM,GAAI,CACxD,KAAK,QAAUigB,EAAc,QAC7B,KAAK,WAAaA,EAAc,WAChC,KAAK,SAAWA,EAAc,SAC9B,KAAK,KAAOA,EAAc,KAC1B,KAAK,WAAaA,EAAc,WAChC,KAAK,QAAU1iB,EACf,KAAK,MAAQ2iB,EACb,KAAK,IAAMlgB,CACb,CACF,CAEO,MAAMmgB,EAAoB,CAQ/B,aAAc,CAPd/F,EAAA,eAAU,MACVA,EAAA,kBAAa,CAAA,GACbA,EAAA,gBAAW,IACXA,EAAA,YAAO,IACPA,EAAA,kBAAa,GACbA,EAAA,WAAM,6CAES,CAEf,sBAAsBgG,EAAgBC,EAAgBH,EAAQ,GAAI,CAGhE,QAAS7gB,EAAQ,EAAGA,GAAS+gB,EAAgB/gB,IAE3C,GAAI,KAAK,WAAWA,EAAQ,CAAC,IAAM,OACjC,MAAM,IAAI2gB,GACR,KACA,6BAA6B,KAAK,OAAO,IACzCE,EACA,KAAK,GACf,EAII,GAAIG,GAAkB,KAAK,WAAWA,CAAc,IAAM,OACxD,MAAM,IAAIL,GACR,KACA,2BAA2B,KAAK,OAAO,IACvCE,EACA,KAAK,GACb,CAEE,CAEA,cAAcI,EAAQ,CACpB,GAAIA,EAAO,OAAS,EAClB,OAAOA,EAET,IAAIC,EAAaD,EAAO,OAAO,CAAC,EAChC,GAAIC,IAAe,KAAOA,IAAe,IACvC,OAAOD,EAET,IAAIE,EAAYF,EAAO,OAAOA,EAAO,OAAS,CAAC,EAC/C,OAAIC,IAAeC,EACVF,EAEFA,EAAO,UAAU,EAAGA,EAAO,OAAS,CAAC,CAC9C,CAEA,YAAYA,EAAQG,EAAI,CACtB,GAAI,CAACA,EAAG,OAAQ,KAAM,iCACtB,IAAIC,EAAI,CAAA,EACR,OAAAJ,EAAO,QAAQG,EAAI,SAAU/gB,EAAO,CAClC,OAAAghB,EAAE,KAAKhhB,CAAK,EACLA,CACT,CAAC,EACMghB,CACT,CAEA,aACEC,EACAC,EACAC,EACAC,EACAC,EACA,CACA,IAAIC,EAAgB,GACpB,KAAK,KAAO,GACZ,KAAK,QAAU,KACf,KAAK,WAAa,CAAA,EAClB,KAAK,SAAWJ,EAGhB,IAAIK,EAAQN,EAAa,MAAM;AAAA,CAAI,EAC/BO,EAAWD,EAAM,OAErB,QAASlpB,EAAI,EAAGA,EAAImpB,EAAUnpB,IAAK,CACjC,KAAK,WAAaA,EAAI,EACtB,IAAIoL,EAAO8d,EAAMlpB,CAAC,EAAE,KAAI,EAExB,GAAIoL,EAAK,SAAW,EAAG,CACjB0d,GACFE,EAAQ,KAAM,CAAA,EAAI,KAAK,KAAM,KAAK,UAAU,EAE9C,QACF,CAEA,GAAIC,IAAkB,GAAM,CAE1B,GAAI7d,EAAK,CAAC,IAAM,IACd,SAGFA,EAAOA,EAAK,UAAU,EAAGA,EAAK,MAAM,CACtC,CAGA,IAAIqd,EAAYrd,EAAK,OAAOA,EAAK,OAAS,CAAC,EACvCge,EAAU,GACd,OAAQX,EAAS,CACf,IAAK,IACHW,EAAU,GAEZ,IAAK,KAEH,IAAIxpB,EAAOwL,EAAK,UAAU,EAAGA,EAAK,OAAS,CAAC,EAAE,KAAI,EAElD,KAAK,MAAQxL,EAAK,UAAU,EAAGA,EAAK,OAAS,CAAC,EAC1CwpB,IACF,KAAK,MAAQ;AAAA,GAEfH,EAAgB,GAChB,SACF,IAAK,IACH,KAAK,MAAQ7d,EAAK,UAAU,EAAGA,EAAK,OAAS,CAAC,EAC9C,SACF,QACE,KAAK,MAAQA,CACvB,CACM6d,EAAgB,GAEhB,IAAIP,EAAK,2CACLxjB,EAAO,KAAK,YAAY,KAAK,KAAMwjB,CAAE,EACrCW,EAAa,GAajB,GAZInkB,EAAK,OAAS,IAChBmkB,EAAaA,EAAankB,EAAK,CAAC,GAG9BmkB,EAAW,SAAW,GAAKA,EAAW,OAAO,CAAC,IAAM,IACtD,KAAK,QAAU,KAEf,KAAK,QAAUA,EAAW,YAAW,EAEvC,KAAK,WAAa,CAAA,EAGd,KAAK,UAAY,KAAM,CACrBP,GACFE,EAAQ,KAAK,QAAS,KAAK,WAAY,KAAK,KAAM,KAAK,UAAU,EAEnE,KAAK,KAAO,GACZ,QACF,CAEA,IAAIvU,EAASvP,EAAK,OAClB,GAAIuP,EAAS,EACX,QAASnN,EAAQ,EAAGA,EAAQmN,EAAQnN,IAAS,CAC3C,IAAIihB,EAASrjB,EAAKoC,CAAK,EAIvB,GAAIihB,EAAO,OAAS,GAAKA,EAAO,OAAO,CAAC,IAAM,IAC5C,MAEEQ,EACF,KAAK,WAAW,KAAK,KAAK,cAAcR,CAAM,CAAC,EAE/C,KAAK,WAAW,KAAKA,CAAM,CAE/B,CAEFS,EAAQ,KAAK,QAAS,KAAK,WAAY,KAAK,KAAM,KAAK,UAAU,EACjE,KAAK,KAAO,EACd,CACF,CACF,CCtMO,SAASM,GAAU1lB,EAAO,CAC/B,OAAO2lB,GAAc,KAAK3lB,CAAK,CACjC,CACA,MAAM2lB,GAAgB,aAMf,SAAS7qB,GAASkF,EAAO,CAC9B,OAAO4lB,GAAa,KAAK5lB,CAAK,CAChC,CACA,MAAM4lB,GAAe,gDAUd,SAASC,GAAa7lB,EAAO8B,EAAQ,CAC1C,GAAI4jB,GAAU1lB,CAAK,EACjB,OAAO,OAAO,cAAc,OAAO,SAASA,EAAO,EAAE,CAAC,EAExD,MAAM8lB,EAAM,OAAO,WAAW9lB,CAAK,EAC7BuH,EAAS,OAAOue,CAAG,EACzB,GAAI9lB,IAAUuH,EACZ,MAAO,GAET,MAAMwe,EAAcC,GAAyBhmB,CAAK,EAC5CimB,EAAeD,GAAyBze,CAAM,EAIpD,MAHI,GAAAwe,IAAgBE,IAGhBnkB,GAAA,YAAAA,EAAQ,UAAW,IAMjB,CAAC4jB,GAAU1lB,CAAK,GAAKimB,EAAa,QAAU,IAAkBF,EAAY,WAAWE,EAAa,UAAU,EAAG,EAAc,CAAC,EAKtI,CACO,IAAIC,IAAkC,SAAUA,EAAoB,CACzE,OAAAA,EAAmB,UAAe,YAClCA,EAAmB,SAAc,WACjCA,EAAmB,iBAAsB,mBACzCA,EAAmB,eAAoB,iBAChCA,CACT,GAAE,EAAE,EAOG,SAASC,GAAsBnmB,EAAO,CAC3C,GAAI6lB,GAAa7lB,EAAO,CACtB,OAAQ,EACZ,CAAG,EACC,OAEF,GAAI0lB,GAAU1lB,CAAK,EACjB,OAAOkmB,GAAmB,iBAE5B,MAAMJ,EAAM,OAAO,WAAW9lB,CAAK,EACnC,OAAK,OAAO,SAAS8lB,CAAG,EAGpBA,IAAQ,EACHI,GAAmB,UAErBA,GAAmB,eALjBA,GAAmB,QAM9B,CAwGO,SAASF,GAAyBhmB,EAAO,CAC9C,KAAM,CACJ,MAAAomB,EACA,IAAA5U,CACJ,EAAM6U,GAAyBrmB,CAAK,EAC5BsmB,EAAStmB,EAAM,UAAUomB,EAAO5U,CAAG,EACnC+U,EAAMD,EAAO,QAAQ,GAAG,EAC9B,OAAIC,IAAQ,GACHD,EAEFA,EAAO,UAAU,EAAGC,CAAG,EAAID,EAAO,UAAUC,EAAM,CAAC,CAC5D,CAaA,SAASF,GAAyBrmB,EAAO,CACvC,IAAIomB,EAAQ,EAIZ,IAHIpmB,EAAM,CAAC,IAAM,KACfomB,IAEKpmB,EAAMomB,CAAK,IAAM,KAAOpmB,EAAMomB,CAAK,IAAM,KAC9CA,IAEF,IAAI5U,EAAMxR,EAAM,YAAY,GAAG,EAO/B,IANIwR,IAAQ,KACVA,EAAMxR,EAAM,YAAY,GAAG,GAEzBwR,IAAQ,KACVA,EAAMxR,EAAM,SAENA,EAAMwR,EAAM,CAAC,IAAM,KAAOxR,EAAMwR,EAAM,CAAC,IAAM,MAAQA,EAAM4U,GACjE5U,IAEF,MAAO,CACL,MAAA4U,EACA,IAAA5U,CACJ,CACA,CClOO,MAAMgV,EAAe,CAK1B,YAAYxmB,EAAO,CADnBye,EAAA,wBAAmB,IAEjB,GAAI,CAAC3jB,GAASkF,CAAK,EACjB,MAAM,IAAI,MAAM,2BAA2BA,CAAK,IAAI,EAEtD,KAAK,MAAQA,CACf,CAaA,SAAU,CACR,MAAMymB,EAAeN,GAAsB,KAAK,KAAK,EAGrD,GAAIM,IAAiB,QAAaA,IAAiBP,GAAmB,eACpE,OAAO,OAAO,WAAW,KAAK,KAAK,EAIrC,GAAIR,GAAU,KAAK,KAAK,EACtB,OAAO,OAAO,KAAK,KAAK,EAI1B,MAAM,IAAI,MAAM,+CAA+C,KAAK,KAAK,WAAWe,CAAY,eAAe,OAAO,WAAW,KAAK,KAAK,CAAC,EAAE,CAChJ,CAKA,UAAW,CACT,OAAO,KAAK,KACd,CAKF,CAKO,SAASC,GAAiB1mB,EAAO,CAEtC,OAAOA,GAAS,OAAOA,GAAU,UAAYA,EAAM,kBAAoB,EACzE,CC7DO,SAAS2mB,GAAoB3mB,EAAO,CACzC,OAAO,IAAIwmB,GAAexmB,CAAK,CACjC,CCOO,SAAS4mB,GAAOC,EAAMC,EAAS,CACpC,OAAOC,GAAY,CACjB,GAAIF,CACR,EAAK,GAAIA,EAAMC,CAAO,CACtB,CAKA,SAASC,GAAYlqB,EAASL,EAAKwD,EAAO8mB,EAAS,CACjD,OAAI,MAAM,QAAQ9mB,CAAK,EACd8mB,EAAQ,KAAKjqB,EAASL,EAAKwqB,GAAYhnB,EAAO8mB,CAAO,CAAC,EAE3D9mB,GAAS,OAAOA,GAAU,UAAY,CAAC0mB,GAAiB1mB,CAAK,EAGxD8mB,EAAQ,KAAKjqB,EAASL,EAAKyqB,GAAajnB,EAAO8mB,CAAO,CAAC,EAEzDA,EAAQ,KAAKjqB,EAASL,EAAKwD,CAAK,CACzC,CAKA,SAASinB,GAAaC,EAAQJ,EAAS,CACrC,UAAWtqB,KAAO,OAAO,KAAK0qB,CAAM,EAAG,CACrC,MAAMlnB,EAAQ+mB,GAAYG,EAAQ1qB,EAAK0qB,EAAO1qB,CAAG,EAAGsqB,CAAO,EACvD9mB,IAAU,OACZknB,EAAO1qB,CAAG,EAAIwD,EAEd,OAAOknB,EAAO1qB,CAAG,CAErB,CACA,OAAO0qB,CACT,CAKA,SAASF,GAAYG,EAAOL,EAAS,CACnC,QAAS1qB,EAAI,EAAGA,EAAI+qB,EAAM,OAAQ/qB,IAChC+qB,EAAM/qB,CAAC,EAAI2qB,GAAYI,EAAO,OAAO/qB,CAAC,EAAG+qB,EAAM/qB,CAAC,EAAG0qB,CAAO,EAE5D,OAAOK,CACT,CC/BO,SAASC,GAAMC,EAAMP,EAAS,CACnC,IAAIQ,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIX,GAClFvqB,EAAI,EACR,MAAM4D,EAAQunB,EAAU,EACxB,OAAAC,EAAYxnB,CAAK,EACjBynB,EAAgB,EACTX,EAAUF,GAAO5mB,EAAO8mB,CAAO,EAAI9mB,EAC1C,SAAS0nB,GAAc,CACrB,GAAIL,EAAK,WAAWjrB,CAAC,IAAMurB,GAAkB,CAC3CvrB,IACAwrB,EAAc,EACd,MAAMV,EAAS,CAAA,EACf,IAAIW,EAAU,GACd,KAAOzrB,EAAIirB,EAAK,QAAUA,EAAK,WAAWjrB,CAAC,IAAM0rB,IAAkB,CAC5DD,EAIHA,EAAU,IAHVE,EAAQ,EACRH,EAAc,GAIhB,MAAMxB,EAAQhqB,EACRI,EAAMwrB,EAAW,EACvB,GAAIxrB,IAAQ,OAAW,CACrByrB,EAAsB,EACtB,MACF,CACAL,EAAc,EACdM,EAAQ,EACR,MAAMloB,EAAQunB,EAAU,EACxB,GAAIvnB,IAAU,OAAW,CACvBmoB,EAAwB,EACxB,MACF,CAGI,OAAO,UAAU,eAAe,KAAKjB,EAAQ1qB,CAAG,GAAK,CAAC4rB,GAAYpoB,EAAOknB,EAAO1qB,CAAG,CAAC,GAGtF6rB,EAAkB7rB,EAAK4pB,EAAQ,CAAC,EAElCc,EAAO1qB,CAAG,EAAIwD,CAChB,CACA,OAAIqnB,EAAK,WAAWjrB,CAAC,IAAM0rB,IACzBQ,EAA2B,EAE7BlsB,IACO8qB,CACT,CACF,CACA,SAASqB,GAAa,CACpB,GAAIlB,EAAK,WAAWjrB,CAAC,IAAMosB,GAAoB,CAC7CpsB,IACAwrB,EAAc,EACd,MAAMT,EAAQ,CAAA,EACd,IAAIU,EAAU,GACd,KAAOzrB,EAAIirB,EAAK,QAAUA,EAAK,WAAWjrB,CAAC,IAAMqsB,IAAoB,CAC9DZ,EAGHA,EAAU,GAFVE,EAAQ,EAIV,MAAM/nB,EAAQunB,EAAU,EACxBmB,EAAgB1oB,CAAK,EACrBmnB,EAAM,KAAKnnB,CAAK,CAClB,CACA,OAAIqnB,EAAK,WAAWjrB,CAAC,IAAMqsB,IACzBE,EAA2B,EAE7BvsB,IACO+qB,CACT,CACF,CACA,SAASI,GAAa,CACpBK,EAAc,EACd,MAAM5nB,EAAQgoB,KAAiBY,EAAY,GAAMlB,EAAW,GAAMa,EAAU,GAAMM,EAAa,OAAQ,EAAI,GAAKA,EAAa,QAAS,EAAK,GAAKA,EAAa,OAAQ,IAAI,EACzK,OAAAjB,EAAc,EACP5nB,CACT,CACA,SAAS6oB,EAAahpB,EAAMG,EAAO,CACjC,GAAIqnB,EAAK,MAAMjrB,EAAGA,EAAIyD,EAAK,MAAM,IAAMA,EACrC,OAAAzD,GAAKyD,EAAK,OACHG,CAEX,CACA,SAAS4nB,GAAiB,CACxB,KAAOkB,GAAazB,EAAK,WAAWjrB,CAAC,CAAC,GACpCA,GAEJ,CACA,SAAS4rB,GAAc,CACrB,GAAIX,EAAK,WAAWjrB,CAAC,IAAM2sB,GAAiB,CAC1C3sB,IACA,IAAIxB,EAAS,GACb,KAAOwB,EAAIirB,EAAK,QAAUA,EAAK,WAAWjrB,CAAC,IAAM2sB,IAAiB,CAChE,GAAI1B,EAAK,WAAWjrB,CAAC,IAAM4sB,GAAe,CACxC,MAAM3gB,EAAOgf,EAAKjrB,EAAI,CAAC,EACjB6sB,EAAaC,GAAiB7gB,CAAI,EACpC4gB,IAAe,QACjBruB,GAAUquB,EACV7sB,KACSiM,IAAS,IACd8gB,GAAM9B,EAAK,WAAWjrB,EAAI,CAAC,CAAC,GAAK+sB,GAAM9B,EAAK,WAAWjrB,EAAI,CAAC,CAAC,GAAK+sB,GAAM9B,EAAK,WAAWjrB,EAAI,CAAC,CAAC,GAAK+sB,GAAM9B,EAAK,WAAWjrB,EAAI,CAAC,CAAC,GACjIxB,GAAU,OAAO,aAAa,OAAO,SAASysB,EAAK,MAAMjrB,EAAI,EAAGA,EAAI,CAAC,EAAG,EAAE,CAAC,EAC3EA,GAAK,GAELgtB,EAA6BhtB,CAAC,EAGhCitB,EAA4BjtB,CAAC,CAEjC,MACMktB,GAAuBjC,EAAK,WAAWjrB,CAAC,CAAC,EAC3CxB,GAAUysB,EAAKjrB,CAAC,EAEhBmtB,EAAsBlC,EAAKjrB,CAAC,CAAC,EAGjCA,GACF,CACA,OAAAotB,EAAiB,EACjBptB,IACOxB,CACT,CACF,CACA,SAASguB,GAAe,CACtB,MAAMxC,EAAQhqB,EAKd,GAJIirB,EAAK,WAAWjrB,CAAC,IAAMqtB,KACzBrtB,IACAstB,EAAYtD,CAAK,GAEfiB,EAAK,WAAWjrB,CAAC,IAAMutB,GACzBvtB,YACSwtB,GAAevC,EAAK,WAAWjrB,CAAC,CAAC,EAE1C,IADAA,IACOytB,GAAQxC,EAAK,WAAWjrB,CAAC,CAAC,GAC/BA,IAGJ,GAAIirB,EAAK,WAAWjrB,CAAC,IAAM0tB,GAGzB,IAFA1tB,IACAstB,EAAYtD,CAAK,EACVyD,GAAQxC,EAAK,WAAWjrB,CAAC,CAAC,GAC/BA,IAGJ,GAAIirB,EAAK,WAAWjrB,CAAC,IAAM2tB,IAAkB1C,EAAK,WAAWjrB,CAAC,IAAM4tB,GAMlE,IALA5tB,KACIirB,EAAK,WAAWjrB,CAAC,IAAMqtB,IAAapC,EAAK,WAAWjrB,CAAC,IAAM6tB,KAC7D7tB,IAEFstB,EAAYtD,CAAK,EACVyD,GAAQxC,EAAK,WAAWjrB,CAAC,CAAC,GAC/BA,IAGJ,GAAIA,EAAIgqB,EACN,OAAOkB,EAAYD,EAAK,MAAMjB,EAAOhqB,CAAC,CAAC,CAE3C,CACA,SAAS2rB,GAAW,CAClB,GAAIV,EAAK,WAAWjrB,CAAC,IAAM8tB,GACzB,MAAM,IAAI,YAAY,kCAAkCC,EAAK,CAAE,EAAE,EAEnE/tB,GACF,CACA,SAAS8rB,GAAW,CAClB,GAAIb,EAAK,WAAWjrB,CAAC,IAAMguB,GACzB,MAAM,IAAI,YAAY,0CAA0CD,EAAK,CAAE,EAAE,EAE3E/tB,GACF,CACA,SAASorB,EAAYxnB,EAAO,CAC1B,GAAIA,IAAU,OACZ,MAAM,IAAI,YAAY,uBAAuBmqB,EAAK,CAAE,EAAE,CAE1D,CACA,SAASzB,EAAgB1oB,EAAO,CAC9B,GAAIA,IAAU,OACZ,MAAM,IAAI,YAAY,uBAAuBmqB,EAAK,CAAE,EAAE,CAE1D,CACA,SAAS1C,GAAmB,CAC1B,GAAIrrB,EAAIirB,EAAK,OACX,MAAM,IAAI,YAAY,yBAAyB8C,EAAK,CAAE,EAAE,CAE5D,CACA,SAAST,EAAYtD,EAAO,CAC1B,GAAI,CAACyD,GAAQxC,EAAK,WAAWjrB,CAAC,CAAC,EAAG,CAChC,MAAMiuB,EAAWhD,EAAK,MAAMjB,EAAOhqB,CAAC,EACpC,MAAM,IAAI,YAAY,mBAAmBiuB,CAAQ,wBAAwBF,EAAK,CAAE,EAAE,CACpF,CACF,CACA,SAASX,GAAoB,CAC3B,GAAInC,EAAK,WAAWjrB,CAAC,IAAM2sB,GACzB,MAAM,IAAI,YAAY,8BAA8BoB,EAAK,CAAE,EAAE,CAEjE,CACA,SAASlC,GAAyB,CAChC,MAAM,IAAI,YAAY,8BAA8BkC,EAAK,CAAE,EAAE,CAC/D,CACA,SAAS9B,EAAkB7rB,EAAK+U,EAAK,CACnC,MAAM,IAAI,YAAY,kBAAkB/U,CAAG,6BAA6B+U,CAAG,EAAE,CAC/E,CACA,SAAS+W,GAA8B,CACrC,MAAM,IAAI,YAAY,mDAAmD6B,EAAK,CAAE,EAAE,CACpF,CACA,SAASxB,GAA8B,CACrC,MAAM,IAAI,YAAY,2CAA2CwB,EAAK,CAAE,EAAE,CAC5E,CACA,SAASZ,EAAsBlhB,EAAM,CACnC,MAAM,IAAI,YAAY,sBAAsBA,CAAI,KAAKkJ,EAAG,CAAE,EAAE,CAC9D,CACA,SAAS8X,EAA4BjD,EAAO,CAC1C,MAAMkE,EAAQjD,EAAK,MAAMjB,EAAOA,EAAQ,CAAC,EACzC,MAAM,IAAI,YAAY,6BAA6BkE,CAAK,KAAK/Y,EAAG,CAAE,EAAE,CACtE,CACA,SAAS4W,GAA2B,CAClC,MAAM,IAAI,YAAY,mCAAmC5W,EAAG,CAAE,EAAE,CAClE,CACA,SAAS6X,EAA6BhD,EAAO,CAC3C,MAAMkE,EAAQjD,EAAK,MAAMjB,EAAOA,EAAQ,CAAC,EACzC,MAAM,IAAI,YAAY,8BAA8BkE,CAAK,KAAK/Y,EAAG,CAAE,EAAE,CACvE,CAGA,SAASA,GAAM,CACb,MAAO,eAAenV,CAAC,EACzB,CACA,SAASmuB,GAAM,CACb,OAAOnuB,EAAIirB,EAAK,OAAS,YAAYA,EAAKjrB,CAAC,CAAC,IAAM,0BACpD,CACA,SAAS+tB,GAAQ,CACf,MAAO,GAAGI,EAAG,CAAE,IAAIhZ,EAAG,CAAE,EAC1B,CACF,CACA,SAASuX,GAAajnB,EAAM,CAC1B,OAAOA,IAAS2oB,IAAa3oB,IAAS4oB,IAAe5oB,IAAS6oB,IAAW7oB,IAAS8oB,EACpF,CACA,SAASxB,GAAMtnB,EAAM,CACnB,OAAOA,GAAQ8nB,IAAY9nB,GAAQ+oB,IAAY/oB,GAAQgpB,IAAkBhpB,GAAQipB,IAAkBjpB,GAAQkpB,IAAkBlpB,GAAQmpB,EACvI,CACA,SAASnB,GAAQhoB,EAAM,CACrB,OAAOA,GAAQ8nB,IAAY9nB,GAAQ+oB,EACrC,CACA,SAAShB,GAAe/nB,EAAM,CAC5B,OAAOA,GAAQopB,IAAWppB,GAAQ+oB,EACpC,CACO,SAAStB,GAAuBznB,EAAM,CAC3C,OAAOA,GAAQ,IAAQA,GAAQ,OACjC,CACO,SAASumB,GAAYhrB,EAAGC,EAAG,CAChC,OAAID,IAAMC,EACD,GAEL,MAAM,QAAQD,CAAC,GAAK,MAAM,QAAQC,CAAC,EAC9BD,EAAE,SAAWC,EAAE,QAAUD,EAAE,MAAM,CAACqf,EAAM/Y,IAAU0kB,GAAY3L,EAAMpf,EAAEqG,CAAK,CAAC,CAAC,EAElF3I,GAASqC,CAAC,GAAKrC,GAASsC,CAAC,EACd,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,OAAO,KAAKD,CAAC,EAAG,GAAG,OAAO,KAAKC,CAAC,CAAC,CAAC,CAAC,EACpD,MAAMb,GAAO4rB,GAAYhrB,EAAEZ,CAAG,EAAGa,EAAEb,CAAG,CAAC,CAAC,EAE/C,EACT,CACA,SAASzB,GAASiF,EAAO,CACvB,OAAO,OAAOA,GAAU,UAAYA,IAAU,IAChD,CAGA,MAAMkpB,GAAmB,CACvB,IAAK,IACL,KAAM,KACN,IAAK,IACL,EAAG,KACH,EAAG,KACH,EAAG;AAAA,EACH,EAAG,KACH,EAAG,GAEL,EACMF,GAAgB,GAChBrB,GAAmB,IACnBG,GAAmB,IACnBU,GAAqB,GACrBC,GAAqB,GACrB+B,GAAY,GACZC,GAAc,GACdC,GAAU,EACVC,GAAa,GACb5B,GAAkB,GAClBkB,GAAW,GACXR,GAAY,GACZE,GAAW,GACXsB,GAAU,GACVL,GAAW,GACXV,GAAY,GACZJ,GAAU,GACVM,GAAY,GACLS,GAAiB,GACjBE,GAAiB,GACjBf,GAAiB,GACjBD,GAAiB,IACjBe,GAAiB,GACjBE,GAAiB,IClSvB,SAASE,GAAUlrB,EAAOmrB,EAAUC,EAAOC,EAAoB,CACpE,MAAMC,EAAgB,OAItB,OAAOC,EADSvrB,EACqB,EAAE,EAKvC,SAASurB,EAAevrB,EAAOwrB,EAAQ,CACrC,GAAI,MAAM,QAAQH,CAAkB,EAAG,CACrC,MAAMI,EAAcJ,EAAmB,KAAK5O,GAAQA,EAAK,KAAKzc,CAAK,CAAC,EACpE,GAAIyrB,EAAa,CACf,MAAMxxB,EAAMwxB,EAAY,UAAUzrB,CAAK,EACvC,GAAI,OAAO/F,GAAQ,UAAY,CAACa,GAASb,CAAG,EAC1C,MAAM,IAAI,MAAM,0GAA0GA,CAAG,GAAG,EAElI,OAAOA,CACT,CACF,CAGA,GAAI,OAAO+F,GAAU,WAAa,OAAOA,GAAU,UAAY,OAAOA,GAAU,UAAYA,IAAU,MAAQA,aAAiB,MAAQA,aAAiB,SAAWA,aAAiB,QAAUA,aAAiB,OAC7M,OAAO,KAAK,UAAUA,CAAK,EAU7B,GALIA,GAAA,MAAAA,EAAO,kBAKP,OAAOA,GAAU,SACnB,OAAOA,EAAM,SAAQ,EAIvB,GAAI,MAAM,QAAQA,CAAK,EACrB,OAAO0rB,EAAe1rB,EAAOwrB,CAAM,EAIrC,GAAIxrB,GAAS,OAAOA,GAAU,SAC5B,OAAO2rB,EAAgB3rB,EAAOwrB,CAAM,CAGxC,CAKA,SAASE,EAAevE,EAAOqE,EAAQ,CACrC,GAAIrE,EAAM,SAAW,EACnB,MAAO,KAET,MAAMyE,EAAcN,EAAgBE,EAASF,EAAgB,OAC7D,IAAIrxB,EAAMqxB,EAAgB;AAAA,EAAQ,IAClC,QAASlvB,EAAI,EAAGA,EAAI+qB,EAAM,OAAQ/qB,IAAK,CACrC,MAAMqgB,EAAoF0K,EAAM/qB,CAAC,EAC7FkvB,IACFrxB,GAAO2xB,GAEL,OAAOnP,EAAS,KAAe,OAAOA,GAAS,WACjDxiB,GAAOsxB,EAAe9O,EAAMmP,CAAW,EAEvC3xB,GAAO,OAELmC,EAAI+qB,EAAM,OAAS,IACrBltB,GAAOqxB,EAAgB;AAAA,EAAQ,IAEnC,CACA,OAAArxB,GAAOqxB,EAAgB;AAAA,EAAKE,CAAM,IAAM,IACjCvxB,CACT,CAKA,SAAS0xB,EAAgBzE,EAAQsE,EAAQ,CACvC,GAAI,OAAOtE,EAAO,QAAW,WAC3B,OAAOgE,GAAUhE,EAAO,OAAM,EAAIiE,EAAUC,EAAO,MAAS,EAE9D,MAAM9uB,EAAO,MAAM,QAAQ6uB,CAAQ,EAAIA,EAAS,IAAI,MAAM,EAAI,OAAO,KAAKjE,CAAM,EAChF,GAAI5qB,EAAK,SAAW,EAClB,MAAO,KAET,MAAMsvB,EAAcN,EAAgBE,EAASF,EAAgB,OAC7D,IAAIvhB,EAAQ,GACR9P,EAAMqxB,EAAgB;AAAA,EAAQ,IAClC,UAAW9uB,KAAOF,EAAM,CACtB,MAAM0D,EAAmFknB,EAAO1qB,CAAG,EACnG,GAAIqvB,EAAgBrvB,EAAKwD,CAAK,EAAG,CAC3B+J,EACFA,EAAQ,GAER9P,GAAOqxB,EAAgB;AAAA,EAAQ,IAEjC,MAAMQ,EAAS,KAAK,UAAUtvB,CAAG,EACjCvC,GAAOqxB,EAAgB,GAAGM,EAAcE,CAAM,KAAO,GAAGA,CAAM,IAC9D7xB,GAAOsxB,EAAevrB,EAAO4rB,CAAW,CAC1C,CACF,CACA,OAAA3xB,GAAOqxB,EAAgB;AAAA,EAAKE,CAAM,IAAM,IACjCvxB,CACT,CAKA,SAAS4xB,EAAgBnvB,EAAMsD,EAAO,CACpC,OAAO,OAAOA,EAAU,KAAe,OAAOA,GAAU,YAAc,OAAOA,GAAU,QACzF,CACF,CCzHO,SAAS+rB,GAAmB/rB,EAAO,CACxC,OAAI0lB,GAAU1lB,CAAK,GAAK,CAAC6lB,GAAa7lB,CAAK,EAClC,OAAOA,CAAK,EAEZ,WAAWA,CAAK,CAE3B,CACe,MAAMgsB,EAAU,CAG7B,aAAc,CAFdvN,EAAA,UAAK,EAEU,CAEf,MAAM,KACJtX,EACAlD,EACAgoB,EAAW,CAAA,EACXC,EAAgB,CAAA,EAChBtb,EAAU,IACV,CACA,GAAI,CACc,MAAM,WAAW,YAC/B,WAAW,kBACnB,GAEQ,WAAW,UAAS,CAExB,MAAgB,CACd,WAAW,MAAK,CAClB,CACA,KAAK,GAAK,KAAK,GAAK,EACpB,GAAI,CACF,OAAAqb,EAAS,MAAW,OAAO,YAI3BC,EAAc,OAAY,IACT,MAAMzT,GAAM,KAC3B,kBACA,CACE,QAAS,MACT,OAAQtR,EACR,OAAQlD,EACR,GAAI,KAAK,GACT,eAAgBgoB,CAC1B,EACQ,CACE,QAAS,CACP,cAAe,aAAa,YAC5B,eAAgB,uBAChB,GAAGC,CACf,EACU,QAAStb,EACT,iBAAkB,CAChB,CAACtP,EAAMmF,IAEEykB,GAAU5pB,CAAI,CAEnC,EACU,kBAAmB,CAChBA,GAGQ8lB,GAAM9lB,EAAM,OAAWyqB,EAAkB,CAE9D,CACA,CACA,GASsB,KAAK,MACvB,OAAS7pB,EAAO,CACd,IAAImO,EAAM,IAAI,MACd,MAAInO,EAAM,UAGRmO,EAAI,KAAOnO,EAAM,SAAS,KAAK,MAAM,KAAK,MAC1CmO,EAAI,QAAUnO,EAAM,SAAS,KAAK,MAAM,KAAK,QAC7CmO,EAAI,OAASnO,EAAM,SAAS,KAAK,OACxBA,EAAM,SAIfmO,EAAI,KAAO,gBAGXA,EAAI,QAAU,uCAIdA,EAAMnO,EAEFmO,CACR,CACF,CAEA,mBAAmB7V,EAAK,CACtB,GAAIA,IAAQ,MAAQ,OAAOA,GAAQ,UAC7BA,EAAI,YAAc,SAAWA,EAAI,IAAK,CACxC,GAAIA,EAAI,KAAO,MACb,MAAO,KACF,GAAIA,EAAI,KAAO,WACpB,MAAO,KACF,GAAIA,EAAI,KAAO,YACpB,MAAO,IAEX,CAEF,OAAO,IACT,CAEA,mBAAmBA,EAAK,CACtB,OAAI,OAAO,MAAMA,CAAG,EACX,CAAE,WAAY,QAAS,IAAK,KAAK,EAC/BA,GAAO,OAAO,kBAChB,CAAE,WAAY,QAAS,IAAK,UAAU,EACpCA,GAAO,OAAO,kBAChB,CAAE,WAAY,QAAS,IAAK,WAAW,EAEzC,IACT,CAEA,uBAAwB,CACtB,KAAK,sBAAqB,EAAG,KAAM2xB,GAAW,CACxCA,IACE,aAAa,mBACf,KAAK,mBAAmB,aAAa,kBAAkB,EAAE,KAAK,IAAM,CAClE,OAAO,aAAa,kBACtB,CAAC,EAED,WAAW,iBAAgB,EAGjC,CAAC,CACH,CAMA,uBAAwB,CACtB,OAAO,KAAK,KAAK,wBAAyB,CAAA,CAAE,CAC9C,CAEA,mBAAmBC,EAAsB,CACvC,OAAO,KAAK,KAAK,qBAAsB,CAACA,CAAoB,CAAC,CAC/D,CAEA,wBAAyB,CACvB,OAAO,KAAK,KAAK,yBAA0B,CAAA,CAAE,CAC/C,CAEA,wBAAwBC,EAAaC,EAAgB,CACnD,OAAO,KAAK,KAAK,0BAA2B,CAACD,EAAaC,CAAc,CAAC,CAC3E,CAEA,kBAAkBA,KAAmBC,EAAkB,CACrD,OAAIA,EAAiB,OAAS,EACrB,KAAK,KAAK,oBAAqB,CACpCD,EACA,GAAGC,CACX,CAAO,EAEM,KAAK,KAAK,oBAAqB,CAACD,CAAc,CAAC,CAE1D,CAEA,qBAAqBA,EAAgB,CACnC,OAAO,KAAK,KAAK,uBAAwB,CAACA,CAAc,CAAC,CAC3D,CAEA,cAAcA,EAAgBE,KAAiBC,EAAgB,CAC7D,OAAO,KAAK,KAAK,gBAAiB,CAChCH,EACAE,EACA,GAAGC,CACT,CAAK,CACH,CAEA,qBAAsB,CACpB,OAAO,KAAK,KAAK,sBAAuB,CAAA,CAAE,CAC5C,CAEA,eAAeC,EAAa,CAC1B,OAAO,KAAK,KAAK,iBAAkB,CAACA,CAAW,CAAC,CAClD,CAEA,kBAAkBA,EAAa,CAC7B,OAAO,KAAK,KAAK,oBAAqB,CAACA,CAAW,CAAC,CACrD,CAEA,uBAAwB,CACtB,OAAO,KAAK,KAAK,wBAAyB,CAAA,CAAE,CAC9C,CAEA,aAAaC,EAAiB,CAC5B,OAAO,KAAK,KAAK,eAAgB,CAACA,CAAe,CAAC,CACpD,CAEA,SAAS9rB,EAAQ+rB,EAAQnQ,EAAM,CAC7B,OAAO,KAAK,KAAK,WAAY,CAAC5b,EAAQ+rB,EAAQnQ,CAAI,CAAC,CACrD,CAEA,UAAU5b,EAAQ+rB,EAAQnQ,EAAM,CAC9B,OAAO,KAAK,KAAK,YAAa,CAAC5b,EAAQ+rB,EAAQnQ,CAAI,CAAC,CACtD,CAEA,cAAc5b,EAAQ+rB,EAAQnQ,EAAM,CAClC,OAAO,KAAK,KAAK,YAAa,CAAC5b,EAAQ+rB,EAAQnQ,CAAI,CAAC,CACtD,CAEA,iBAAkB,CAChB,OAAO,KAAK,KAAK,kBAAmB,CAAA,CAAE,CACxC,CAEA,gBAAiB,CACf,OAAO,KAAK,KAAK,iBAAkB,CAAA,CAAE,CACvC,CAEA,eAAeoQ,EAAY,CACzB,OAAO,KAAK,KAAK,iBAAkB,CAACA,CAAU,CAAC,CACjD,CAMA,WAAWR,EAAa,CACtB,OAAO,KAAK,KAAK,aAAc,CAACA,CAAW,CAAC,CAC9C,CAEA,kBAAmB,CACjB,OAAO,KAAK,KAAK,mBAAoB,CAAA,CAAE,CACzC,CAEA,iBAAkB,CAChB,OAAO,KAAK,KAAK,mBAAoB,CAAA,CAAE,CACzC,CAEA,QAAQA,EAAaS,EAAa,CAChC,OAAO,KAAK,KAAK,UAAW,CAACT,EAAaS,CAAW,CAAC,CACxD,CAEA,cAAcT,EAAaS,EAAa,CACtC,OAAO,KAAK,KAAK,UAAW,CAACT,EAAaS,CAAW,CAAC,CACxD,CAEA,YAAYT,EAAa,CACvB,OAAO,KAAK,KAAK,cAAe,CAACA,CAAW,CAAC,CAC/C,CAEA,kBAAkBA,EAAa,CAC7B,OAAO,KAAK,KAAK,cAAe,CAACA,CAAW,CAAC,CAC/C,CAEA,kBAAkBA,EAAaU,EAAS,GAAO,CAC7C,OAAO,KAAK,KAAK,oBAAqB,CAACV,CAAW,EAAG,CAAE,OAAQU,CAAM,CAAE,CACzE,CAEA,wBAAwBV,EAAa,CACnC,OAAO,KAAK,KAAK,oBAAqB,CAACA,CAAW,CAAC,CACrD,CAEA,uBAAuBA,EAAa,CAClC,OAAO,KAAK,KAAK,yBAA0B,CAACA,CAAW,CAAC,CAC1D,CAEA,MAAM,eAAeA,EAAaS,EAAaE,EAAYC,EAAa,GAAI,CAC1E,MAAM3rB,EAAO,MAAM,KAAK,KAAK,iBAAkB,CAAC+qB,EAAaS,CAAW,EAAG,CACzE,KAAME,EACN,WAAYC,CAClB,CAAK,EAED,GAAI3rB,GAAQ,KAAM,CAChB,IAAI/E,EAAM+E,EAAK,OACX4rB,EAAY,KAChB,QAAS9wB,EAAI,EAAGA,EAAIG,EAAKH,IACvB8wB,EAAY,KAAK,mBAAmB5rB,EAAKlF,CAAC,EAAE,CAAC,CAAC,EAC1C8wB,IAAc,OAChB5rB,EAAKlF,CAAC,EAAE,CAAC,EAAI8wB,EAGnB,CACA,OAAO5rB,CACT,CAEA,yBAAyB+qB,EAAaS,EAAa,CACjD,OAAO,KAAK,KAAK,2BAA4B,CAACT,EAAaS,CAAW,CAAC,CACzE,CAEA,eAAeT,EAAaS,EAAa,CACvC,OAAO,KAAK,KAAK,iBAAkB,CAACT,EAAaS,CAAW,CAAC,CAC/D,CAEA,kBAAkBK,EAAO,CACvB,OAAO,KAAK,KAAK,oBAAqB,CAACA,CAAK,CAAC,CAC/C,CAEA,MAAM,eACJA,EACAF,EAAa,GACbG,EAAgB,KAChBC,EAAa,KACbC,EAAW,KACX,CACA,IAAIC,EAAU,CACZ,WAAYN,CAClB,EACQG,IAAkB,OACpBG,EAAQ,cAAmBH,GAEzBC,IAAe,OACjBE,EAAQ,WAAgBF,EAAW,YAAW,GAE5CC,IAAa,OACfC,EAAQ,SAAcD,EAAS,YAAW,GAE5C,MAAMhsB,EAAO,MAAM,KAAK,KACtB,iBACA,CAAC6rB,CAAK,EACNI,EACA,CAAA,EACA,GACN,EACI,GAAIjsB,GAAQA,EAAK,OAAS,EAAG,CAC3B,IAAI/E,EAAM+E,EAAK,CAAC,EAAE,OACd4rB,EAAY,KAChB,QAAS9wB,EAAI,EAAGA,EAAIG,EAAKH,IACvB8wB,EAAY,KAAK,mBAAmB5rB,EAAK,CAAC,EAAElF,CAAC,CAAC,EAC1C8wB,IAAc,OAChB5rB,EAAK,CAAC,EAAElF,CAAC,EAAI8wB,EAGnB,CACA,OAAO5rB,CACT,CAEA,WAAW+qB,EAAaS,EAAaU,EAAW,CAC9C,OAAO,KAAK,KAAK,aAAc,CAACnB,EAAaS,EAAaU,CAAS,CAAC,CACtE,CAEA,MAAM,IAAInB,EAAaS,EAAaU,EAAWR,EAAa,YAAa,CACvE,IAAI1rB,EAAO,KAEX,GAAIwrB,IAAgB,OAClBxrB,EAAO,MAAM,KAAK,KAAK,MAAO,CAAC+qB,CAAW,CAAC,UAElCmB,IAAc,OACvB,GACE,CAAC,MAAO,YAAa,YAAa,YAAY,EAAE,SAASV,CAAW,EAEpExrB,EAAO,MAAM,KAAK,KAAK,MAAO,CAAC+qB,CAAW,EAAG,CAAE,KAAMS,CAAW,CAAE,MAC7D,CACL,IAAIzc,EAAM,IAAI,MACd,MAAAA,EAAI,KAAO,YACXA,EAAI,QAAU,qBAAqByc,CAAW,iEACxCzc,CACR,MAEA/O,EAAO,MAAM,KAAK,KAAK,MAAO,CAAC+qB,EAAaS,EAAaU,CAAS,EAAG,CACnE,KAAMR,CACd,CAAO,EAEH,IAAIE,EAAY,KAAK,mBAAmB5rB,CAAI,EAC5C,OAAI4rB,IAAc,OAChB5rB,EAAO4rB,GAEF5rB,CACT,CAEA,MAAM,WACJ+qB,EACAS,EACAW,EAAY,KACZT,EAAa,YACb,CACA,MAAM,KAAK,KAAK,aAAc,CAACX,EAAaS,EAAaW,CAAS,EAAG,CACnE,KAAMT,CACZ,CAAK,CACH,CAEA,QAAQX,EAAaS,EAAaU,EAAWR,EAAY,CACvD,OAAO,KAAK,KAAK,UAAW,CAACX,EAAaS,EAAaU,CAAS,EAAG,CACjE,KAAMR,CACZ,CAAK,CACH,CAEA,aAAaX,EAAaS,EAAaU,EAAWR,EAAY,CAC5D,OAAO,KAAK,KAAK,eAAgB,CAACX,EAAaS,EAAaU,CAAS,EAAG,CACtE,KAAMR,CACZ,CAAK,CACH,CAEA,eAAgB,CACd,OAAO,KAAK,KAAK,eAAe,CAClC,CAEA,cAAcX,EAAaS,EAAaU,EAAWR,EAAY,CAC7D,OAAO,KAAK,KAAK,gBAAiB,CAACX,EAAaS,EAAaU,CAAS,EAAG,CACvE,KAAMR,CACZ,CAAK,CACH,CAEA,aAAaX,EAAa,CACxB,OAAO,KAAK,KAAK,eAAgB,CAACA,CAAW,CAAC,CAChD,CAEA,iBAAiBA,EAAa,CAC5B,OAAO,KAAK,KAAK,eAAgB,CAACA,CAAW,CAAC,CAChD,CAEA,kBAAkBA,EAAaU,EAAS,GAAO,CAC7C,OAAO,KAAK,KAAK,oBAAqB,CAACV,CAAW,EAAG,CAAE,OAAQU,CAAM,CAAE,CACzE,CAEA,sBAAsBV,EAAa,CACjC,OAAO,KAAK,KAAK,oBAAqB,CAACA,CAAW,CAAC,CACrD,CAEA,QAAQA,EAAaG,EAAc,CACjC,OAAO,KAAK,KAAK,UAAW,CAACH,EAAaG,CAAY,CAAC,CACzD,CAEA,YAAYH,EAAaG,EAAc,CACrC,OAAO,KAAK,KAAK,UAAW,CAACH,EAAaG,CAAY,CAAC,CACzD,CAEA,aAAaG,EAAiB,CAC5B,OAAO,KAAK,KAAK,eAAgB,CAACA,CAAe,CAAC,CACpD,CAEA,cACEN,EACAS,EACAY,EACAV,EAAa,YACb,CACA,OAAO,KAAK,KAAK,gBAAiB,CAChCX,EACAS,EACAY,EACAV,CACN,CAAK,CACH,CAEA,eAAeX,EAAaS,EAAa,CACvC,OAAO,KAAK,KAAK,iBAAkB,CAACT,EAAaS,CAAW,CAAC,CAC/D,CAGA,KAAK3lB,EAAQklB,EAAaG,EAAcmB,EAAYzB,EAAeD,EAAW,GAAI,CAChF,IAAIiB,EAAY,KAChB,QAAS1wB,KAAOmxB,EACV,OAAO,UAAU,eAAe,KAAKA,EAAYnxB,CAAG,IACtD0wB,EAAY,KAAK,mBAAmBS,EAAWnxB,CAAG,CAAC,EAC/C0wB,IAAc,OAChBS,EAAWnxB,CAAG,EAAI0wB,IAIxB,OAAO,KAAK,KACV/lB,EACA,CAACklB,EAAaG,EAAcmB,CAAU,EACtC1B,EACAC,CACN,CACE,CAEA,kBAAkBG,EAAaG,EAAcmB,EAAYzB,EAAgB,CAAA,EAAI,CAC3E,OAAIM,IAAiB,OACZ,KAAK,KAAK,oBAAqBH,EAAa,CAAA,EAAIH,CAAa,EAE7D,KAAK,KACV,oBACAG,EACAG,EACAmB,EACAzB,CACR,CAEE,CAEA,IAAIG,EAAaG,EAAcmB,EAAYzB,EAAgB,CAAA,EAAID,EAAW,GAAI,CAC5E,OAAIO,IAAiB,OACZ,KAAK,KAAK,MAAOH,EAAa,CAAA,EAAIH,CAAa,EAE/C,KAAK,KACV,MACAG,EACAG,EACAmB,EACAzB,EACAD,CACR,CAEE,CAEA,mBACEI,EACAG,EACAmB,EACAzB,EAAgB,CAAA,EAChBD,EAAW,CAAA,EACX,CACA,OAAIO,IAAiB,OACZ,KAAK,KAAK,qBAAsBH,EAAa,CAAA,EAAIH,EAAeD,CAAQ,EAExE,KAAK,KACV,qBACAI,EACAG,EACAmB,EACAzB,EACAD,CACR,CAEE,CAEA,QAAQI,EAAaG,EAAcmB,EAAYzB,EAAgB,CAAA,EAAID,EAAW,GAAI,CAChF,OAAIO,IAAiB,OACZ,KAAK,KAAK,UAAWH,EAAa,CAAA,EAAIH,EAAeD,CAAQ,EAE7D,KAAK,KACV,UACAI,EACAG,EACAmB,EACAzB,EACAD,CACR,CAEE,CAEA,uBACEI,EACAG,EACAmB,EACAzB,EAAgB,CAAA,EAChBD,EAAW,CAAA,EACX,CACA,OAAIO,IAAiB,OACZ,KAAK,KAAK,yBAA0BH,EAAa,CAAA,EAAIH,EAAeD,CAAQ,EAE5E,KAAK,KACV,yBACAI,EACAG,EACAmB,EACAzB,EACAD,CACR,CAEE,CAEA,uBACEI,EACAG,EACAmB,EACAzB,EAAgB,CAAA,EAChBD,EAAW,CAAA,EACX,CACA,OAAIO,IAAiB,OACZ,KAAK,KAAK,yBAA0BH,EAAa,CAAA,EAAIH,EAAeD,CAAQ,EAE5E,KAAK,KACV,yBACAI,EACAG,EACAmB,EACAzB,EACAD,CACR,CAEE,CAEA,cAAcI,EAAaG,EAAcmB,EAAYzB,EAAgB,CAAA,EAAID,EAAW,GAAI,CACtF,OAAIO,IAAiB,OACZ,KAAK,KAAK,gBAAiBH,EAAa,CAAA,EAAIH,EAAeD,CAAQ,EAEnE,KAAK,KACV,gBACAI,EACAG,EACAmB,EACAzB,EACAD,CACR,CAEE,CAEA,2BACEI,EACAG,EACAmB,EACAzB,EAAgB,CAAA,EAChBD,EAAW,CAAA,EACX,CACA,OAAIO,IAAiB,OACZ,KAAK,KACV,6BACAH,EACA,CAAA,EACAH,EACAD,CACR,EAEa,KAAK,KACV,6BACAI,EACAG,EACAmB,EACAzB,EACAD,CACR,CAEE,CAEA,kBAAkBI,EAAaG,EAAcmB,EAAYzB,EAAgB,CAAA,EAAID,EAAW,GAAI,CAC1F,OAAIO,IAAiB,OACZ,KAAK,KAAK,oBAAqBH,EAAa,CAAA,EAAIH,EAAeD,CAAQ,EAEvE,KAAK,KACV,oBACAI,EACAG,EACAmB,EACAzB,EACAD,CACR,CAEE,CAEA,UAAUI,EAAaG,EAAcmB,EAAYzB,EAAgB,CAAA,EAAID,EAAW,GAAI,CAClF,OAAIO,IAAiB,OACZ,KAAK,KAAK,YAAaH,CAAW,EAElC,KAAK,KAAK,YAAaA,EAAaG,EAAcmB,EAAYzB,EAAeD,CAAQ,CAEhG,CAEA,cAAcI,EAAaG,EAAcmB,EAAYzB,EAAgB,CAAA,EAAID,EAAW,GAAI,CACtF,OAAIO,IAAiB,OACZ,KAAK,KAAK,YAAaH,CAAW,EAElC,KAAK,KAAK,YAAaA,EAAaG,EAAcmB,EAAYzB,EAAeD,CAAQ,CAEhG,CAEA,qBAAsB,CACpB,OAAO,KAAK,KAAK,sBAAuB,CAAA,CAAE,CAC5C,CAEA,SAASK,EAAgBhrB,EAAM,CAC7B,OAAO,KAAK,KAAK,WAAY,CAACgrB,EAAgBhrB,CAAI,CAAC,CACrD,CAEA,aAAassB,EAAM,CACjB,OAAO,KAAK,KAAK,eAAgB,CAACA,CAAI,CAAC,CACzC,CAEA,YAAYA,EAAM/tB,EAAM,CACtB,OAAO,KAAK,KAAK,cAAe,CAAC+tB,EAAM/tB,CAAI,CAAC,CAC9C,CAEA,YAAY+tB,EAAM/tB,EAAMyB,EAAM,CAC5B,OAAO,KAAK,KAAK,cAAe,CAACssB,EAAM/tB,EAAMyB,CAAI,CAAC,CACpD,CAEA,cAAcssB,EAAM/tB,EAAM,CACxB,OAAO,KAAK,KAAK,gBAAiB,CAAC+tB,EAAM/tB,CAAI,CAAC,CAChD,CAEA,cAAcgB,EAAQ+rB,EAAQnQ,EAAM,CAClC,OAAO,KAAK,KAAK,gBAAiB,CAAC5b,EAAQ+rB,EAAQnQ,CAAI,CAAC,CAC1D,CAEA,eAAe5b,EAAQ+rB,EAAQnQ,EAAM,CACnC,OAAO,KAAK,KAAK,iBAAkB,CAAC5b,EAAQ+rB,EAAQnQ,CAAI,CAAC,CAC3D,CAEA,mBAAoB,CAClB,OAAO,KAAK,KAAK,oBAAqB,CAAA,CAAE,CAC1C,CAEA,yBAAyBoR,EAAS,CAChC,OAAO,KAAK,KAAK,2BAA4B,CAACA,CAAO,CAAC,CACxD,CAEA,eAAgB,CACd,OAAO,KAAK,KAAK,gBAAiB,CAAA,CAAE,CACtC,CAEA,kBAAmB,CACjB,OAAO,KAAK,KAAK,mBAAoB,CAAA,CAAE,CACzC,CAEA,YAAYhuB,EAAMosB,EAAU,CAC1B,OAAO,KAAK,KAAK,cAAe,CAACpsB,CAAI,EAAGosB,CAAQ,CAClD,CAEA,aAAa9E,EAAO8E,EAAU,CAC5B,OAAO,KAAK,KAAK,eAAgB9E,EAAO8E,CAAQ,CAClD,CAEA,YAAYpsB,EAAMyB,EAAM,CACtB,OAAO,KAAK,KAAK,cAAe,CAACzB,EAAMyB,CAAI,CAAC,CAC9C,CAEA,aAAc,CACZ,OAAO,KAAK,KAAK,cAAe,CAAA,CAAE,CACpC,CAEA,qBAAsB,CACpB,OAAO,KAAK,KAAK,sBAAuB,CAAA,CAAE,CAC5C,CAGA,aAAazB,EAAMyB,EAAM,CACvB,OAAO,KAAK,KAAK,cAAe,CAACzB,EAAMyB,CAAI,CAAC,CAC9C,CAEA,aAAc,CACZ,OAAO,KAAK,KAAK,cAAe,CAAA,CAAE,CACpC,CAGA,MAAM,WAAWqjB,EAAQ,CACvB,GAAI,OAAO,gBAAiB,CAE1B,MAAMmJ,EAAc,IAAI,YAAW,EAAG,OAAOnJ,CAAM,EAG7CoJ,EAAoB,MAAM,OAAO,OAAO,OAC5C,UACAD,CACR,EAGYE,EAAkB,IAAI,WAAWD,CAAiB,EAGxD,OAAO,MAAM,KAAKC,CAAe,EAC9B,IAAK3wB,GAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAC1C,KAAK,EAAE,CACZ,CAEF,CACF","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,72,73,74,75,76,77]}