hypha-rpc 0.20.12 → 0.20.13
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":"hypha-rpc-websocket.min.js","mappings":"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","sources":["webpack://hypha-rpc/webpack/universalModuleDefinition","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/utils/prettyByte.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/ExtData.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/DecodeError.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/utils/int.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/timestamp.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/utils/utf8.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/ExtensionCodec.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/utils/typedArrays.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/CachedKeyDecoder.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/Decoder.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/decode.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/Encoder.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/encode.mjs","webpack://hypha-rpc/./src/rpc.js","webpack://hypha-rpc/./src/utils/index.js","webpack://hypha-rpc/./src/utils/schema.js","webpack://hypha-rpc/./src/webrtc-client.js","webpack://hypha-rpc/webpack/bootstrap","webpack://hypha-rpc/webpack/runtime/define property getters","webpack://hypha-rpc/webpack/runtime/hasOwnProperty shorthand","webpack://hypha-rpc/webpack/runtime/make namespace object","webpack://hypha-rpc/./src/websocket-client.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyphaWebsocketClient\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyphaWebsocketClient\"] = factory();\n\telse\n\t\troot[\"hyphaWebsocketClient\"] = factory();\n})(this, () => {\nreturn ","export function prettyByte(byte) {\n return \"\".concat(byte < 0 ? \"-\" : \"\", \"0x\").concat(Math.abs(byte).toString(16).padStart(2, \"0\"));\n}\n//# sourceMappingURL=prettyByte.mjs.map","/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nvar ExtData = /** @class */ (function () {\n function ExtData(type, data) {\n this.type = type;\n this.data = data;\n }\n return ExtData;\n}());\nexport { ExtData };\n//# sourceMappingURL=ExtData.mjs.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar DecodeError = /** @class */ (function (_super) {\n __extends(DecodeError, _super);\n function DecodeError(message) {\n var _this = _super.call(this, message) || this;\n // fix the prototype chain in a cross-platform way\n var proto = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(_this, proto);\n Object.defineProperty(_this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n return _this;\n }\n return DecodeError;\n}(Error));\nexport { DecodeError };\n//# sourceMappingURL=DecodeError.mjs.map","// Integer Utility\nexport var UINT32_MAX = 4294967295;\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\nexport function setUint64(view, offset, value) {\n var high = value / 4294967296;\n var low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function setInt64(view, offset, value) {\n var high = Math.floor(value / 4294967296);\n var low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function getInt64(view, offset) {\n var high = view.getInt32(offset);\n var low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\nexport function getUint64(view, offset) {\n var high = view.getUint32(offset);\n var low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\n//# sourceMappingURL=int.mjs.map","// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError.mjs\";\nimport { getInt64, setInt64 } from \"./utils/int.mjs\";\nexport var EXT_TIMESTAMP = -1;\nvar TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nvar TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\nexport function encodeTimeSpecToTimestamp(_a) {\n var sec = _a.sec, nsec = _a.nsec;\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n var rv = new Uint8Array(4);\n var view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n }\n else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n var secHigh = sec / 0x100000000;\n var secLow = sec & 0xffffffff;\n var rv = new Uint8Array(8);\n var view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n }\n else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n var rv = new Uint8Array(12);\n var view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\nexport function encodeDateToTimeSpec(date) {\n var msec = date.getTime();\n var sec = Math.floor(msec / 1e3);\n var nsec = (msec - sec * 1e3) * 1e6;\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n var nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\nexport function encodeTimestampExtension(object) {\n if (object instanceof Date) {\n var timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n }\n else {\n return null;\n }\n}\nexport function decodeTimestampToTimeSpec(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n var sec = view.getUint32(0);\n var nsec = 0;\n return { sec: sec, nsec: nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n var nsec30AndSecHigh2 = view.getUint32(0);\n var secLow32 = view.getUint32(4);\n var sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n var nsec = nsec30AndSecHigh2 >>> 2;\n return { sec: sec, nsec: nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n var sec = getInt64(view, 4);\n var nsec = view.getUint32(0);\n return { sec: sec, nsec: nsec };\n }\n default:\n throw new DecodeError(\"Unrecognized data size for timestamp (expected 4, 8, or 12): \".concat(data.length));\n }\n}\nexport function decodeTimestampExtension(data) {\n var timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\nexport var timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n//# sourceMappingURL=timestamp.mjs.map","var _a, _b, _c;\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { UINT32_MAX } from \"./int.mjs\";\nvar TEXT_ENCODING_AVAILABLE = (typeof process === \"undefined\" || ((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a[\"TEXT_ENCODING\"]) !== \"never\") &&\n typeof TextEncoder !== \"undefined\" &&\n typeof TextDecoder !== \"undefined\";\nexport function utf8Count(str) {\n var strLength = str.length;\n var byteLength = 0;\n var pos = 0;\n while (pos < strLength) {\n var value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n var extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n }\n else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\nexport function utf8EncodeJs(str, output, outputOffset) {\n var strLength = str.length;\n var offset = outputOffset;\n var pos = 0;\n while (pos < strLength) {\n var value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n var extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\nvar sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport var TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && ((_b = process === null || process === void 0 ? void 0 : process.env) === null || _b === void 0 ? void 0 : _b[\"TEXT_ENCODING\"]) !== \"force\"\n ? 200\n : 0;\nfunction utf8EncodeTEencode(str, output, outputOffset) {\n output.set(sharedTextEncoder.encode(str), outputOffset);\n}\nfunction utf8EncodeTEencodeInto(str, output, outputOffset) {\n sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));\n}\nexport var utf8EncodeTE = (sharedTextEncoder === null || sharedTextEncoder === void 0 ? void 0 : sharedTextEncoder.encodeInto) ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\nvar CHUNK_SIZE = 4096;\nexport function utf8DecodeJs(bytes, inputOffset, byteLength) {\n var offset = inputOffset;\n var end = offset + byteLength;\n var units = [];\n var result = \"\";\n while (offset < end) {\n var byte1 = bytes[offset++];\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n }\n else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n var byte2 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n }\n else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n var byte2 = bytes[offset++] & 0x3f;\n var byte3 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n }\n else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n var byte2 = bytes[offset++] & 0x3f;\n var byte3 = bytes[offset++] & 0x3f;\n var byte4 = bytes[offset++] & 0x3f;\n var unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n }\n else {\n units.push(byte1);\n }\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode.apply(String, units);\n units.length = 0;\n }\n }\n if (units.length > 0) {\n result += String.fromCharCode.apply(String, units);\n }\n return result;\n}\nvar sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport var TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && ((_c = process === null || process === void 0 ? void 0 : process.env) === null || _c === void 0 ? void 0 : _c[\"TEXT_DECODER\"]) !== \"force\"\n ? 200\n : 0;\nexport function utf8DecodeTD(bytes, inputOffset, byteLength) {\n var stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder.decode(stringBytes);\n}\n//# sourceMappingURL=utf8.mjs.map","// ExtensionCodec to handle MessagePack extensions\nimport { ExtData } from \"./ExtData.mjs\";\nimport { timestampExtension } from \"./timestamp.mjs\";\nvar ExtensionCodec = /** @class */ (function () {\n function ExtensionCodec() {\n // built-in extensions\n this.builtInEncoders = [];\n this.builtInDecoders = [];\n // custom extensions\n this.encoders = [];\n this.decoders = [];\n this.register(timestampExtension);\n }\n ExtensionCodec.prototype.register = function (_a) {\n var type = _a.type, encode = _a.encode, decode = _a.decode;\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n }\n else {\n // built-in extensions\n var index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n };\n ExtensionCodec.prototype.tryToEncode = function (object, context) {\n // built-in extensions\n for (var i = 0; i < this.builtInEncoders.length; i++) {\n var encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n var data = encodeExt(object, context);\n if (data != null) {\n var type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n // custom extensions\n for (var i = 0; i < this.encoders.length; i++) {\n var encodeExt = this.encoders[i];\n if (encodeExt != null) {\n var data = encodeExt(object, context);\n if (data != null) {\n var type = i;\n return new ExtData(type, data);\n }\n }\n }\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n };\n ExtensionCodec.prototype.decode = function (data, type, context) {\n var decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n }\n else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n };\n ExtensionCodec.defaultCodec = new ExtensionCodec();\n return ExtensionCodec;\n}());\nexport { ExtensionCodec };\n//# sourceMappingURL=ExtensionCodec.mjs.map","export function ensureUint8Array(buffer) {\n if (buffer instanceof Uint8Array) {\n return buffer;\n }\n else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n }\n else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\nexport function createDataView(buffer) {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n var bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n//# sourceMappingURL=typedArrays.mjs.map","import { utf8DecodeJs } from \"./utils/utf8.mjs\";\nvar DEFAULT_MAX_KEY_LENGTH = 16;\nvar DEFAULT_MAX_LENGTH_PER_KEY = 16;\nvar CachedKeyDecoder = /** @class */ (function () {\n function CachedKeyDecoder(maxKeyLength, maxLengthPerKey) {\n if (maxKeyLength === void 0) { maxKeyLength = DEFAULT_MAX_KEY_LENGTH; }\n if (maxLengthPerKey === void 0) { maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY; }\n this.maxKeyLength = maxKeyLength;\n this.maxLengthPerKey = maxLengthPerKey;\n this.hit = 0;\n this.miss = 0;\n // avoid `new Array(N)`, which makes a sparse array,\n // because a sparse array is typically slower than a non-sparse array.\n this.caches = [];\n for (var i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n CachedKeyDecoder.prototype.canBeCached = function (byteLength) {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n };\n CachedKeyDecoder.prototype.find = function (bytes, inputOffset, byteLength) {\n var records = this.caches[byteLength - 1];\n FIND_CHUNK: for (var _i = 0, records_1 = records; _i < records_1.length; _i++) {\n var record = records_1[_i];\n var recordBytes = record.bytes;\n for (var j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.str;\n }\n return null;\n };\n CachedKeyDecoder.prototype.store = function (bytes, value) {\n var records = this.caches[bytes.length - 1];\n var record = { bytes: bytes, str: value };\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to an arbitrary position.\n records[(Math.random() * records.length) | 0] = record;\n }\n else {\n records.push(record);\n }\n };\n CachedKeyDecoder.prototype.decode = function (bytes, inputOffset, byteLength) {\n var cachedValue = this.find(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n this.hit++;\n return cachedValue;\n }\n this.miss++;\n var str = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n var slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, str);\n return str;\n };\n return CachedKeyDecoder;\n}());\nexport { CachedKeyDecoder };\n//# sourceMappingURL=CachedKeyDecoder.mjs.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n};\nvar __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\nvar __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n};\nimport { prettyByte } from \"./utils/prettyByte.mjs\";\nimport { ExtensionCodec } from \"./ExtensionCodec.mjs\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int.mjs\";\nimport { utf8DecodeJs, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8.mjs\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays.mjs\";\nimport { CachedKeyDecoder } from \"./CachedKeyDecoder.mjs\";\nimport { DecodeError } from \"./DecodeError.mjs\";\nvar isValidMapKeyType = function (key) {\n var keyType = typeof key;\n return keyType === \"string\" || keyType === \"number\";\n};\nvar HEAD_BYTE_REQUIRED = -1;\nvar EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nvar EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport var DataViewIndexOutOfBoundsError = (function () {\n try {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n }\n catch (e) {\n return e.constructor;\n }\n throw new Error(\"never reached\");\n})();\nvar MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\nvar sharedCachedKeyDecoder = new CachedKeyDecoder();\nvar Decoder = /** @class */ (function () {\n function Decoder(extensionCodec, context, maxStrLength, maxBinLength, maxArrayLength, maxMapLength, maxExtLength, keyDecoder) {\n if (extensionCodec === void 0) { extensionCodec = ExtensionCodec.defaultCodec; }\n if (context === void 0) { context = undefined; }\n if (maxStrLength === void 0) { maxStrLength = UINT32_MAX; }\n if (maxBinLength === void 0) { maxBinLength = UINT32_MAX; }\n if (maxArrayLength === void 0) { maxArrayLength = UINT32_MAX; }\n if (maxMapLength === void 0) { maxMapLength = UINT32_MAX; }\n if (maxExtLength === void 0) { maxExtLength = UINT32_MAX; }\n if (keyDecoder === void 0) { keyDecoder = sharedCachedKeyDecoder; }\n this.extensionCodec = extensionCodec;\n this.context = context;\n this.maxStrLength = maxStrLength;\n this.maxBinLength = maxBinLength;\n this.maxArrayLength = maxArrayLength;\n this.maxMapLength = maxMapLength;\n this.maxExtLength = maxExtLength;\n this.keyDecoder = keyDecoder;\n this.totalPos = 0;\n this.pos = 0;\n this.view = EMPTY_VIEW;\n this.bytes = EMPTY_BYTES;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack = [];\n }\n Decoder.prototype.reinitializeState = function () {\n this.totalPos = 0;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack.length = 0;\n // view, bytes, and pos will be re-initialized in setBuffer()\n };\n Decoder.prototype.setBuffer = function (buffer) {\n this.bytes = ensureUint8Array(buffer);\n this.view = createDataView(this.bytes);\n this.pos = 0;\n };\n Decoder.prototype.appendBuffer = function (buffer) {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n this.setBuffer(buffer);\n }\n else {\n var remainingData = this.bytes.subarray(this.pos);\n var newData = ensureUint8Array(buffer);\n // concat remainingData + newData\n var newBuffer = new Uint8Array(remainingData.length + newData.length);\n newBuffer.set(remainingData);\n newBuffer.set(newData, remainingData.length);\n this.setBuffer(newBuffer);\n }\n };\n Decoder.prototype.hasRemaining = function (size) {\n return this.view.byteLength - this.pos >= size;\n };\n Decoder.prototype.createExtraByteError = function (posToShow) {\n var _a = this, view = _a.view, pos = _a.pos;\n return new RangeError(\"Extra \".concat(view.byteLength - pos, \" of \").concat(view.byteLength, \" byte(s) found at buffer[\").concat(posToShow, \"]\"));\n };\n /**\n * @throws {@link DecodeError}\n * @throws {@link RangeError}\n */\n Decoder.prototype.decode = function (buffer) {\n this.reinitializeState();\n this.setBuffer(buffer);\n var object = this.doDecodeSync();\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.pos);\n }\n return object;\n };\n Decoder.prototype.decodeMulti = function (buffer) {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.reinitializeState();\n this.setBuffer(buffer);\n _a.label = 1;\n case 1:\n if (!this.hasRemaining(1)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.doDecodeSync()];\n case 2:\n _a.sent();\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/];\n }\n });\n };\n Decoder.prototype.decodeAsync = function (stream) {\n var stream_1, stream_1_1;\n var e_1, _a;\n return __awaiter(this, void 0, void 0, function () {\n var decoded, object, buffer, e_1_1, _b, headByte, pos, totalPos;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n decoded = false;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 6, 7, 12]);\n stream_1 = __asyncValues(stream);\n _c.label = 2;\n case 2: return [4 /*yield*/, stream_1.next()];\n case 3:\n if (!(stream_1_1 = _c.sent(), !stream_1_1.done)) return [3 /*break*/, 5];\n buffer = stream_1_1.value;\n if (decoded) {\n throw this.createExtraByteError(this.totalPos);\n }\n this.appendBuffer(buffer);\n try {\n object = this.doDecodeSync();\n decoded = true;\n }\n catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n _c.label = 4;\n case 4: return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 12];\n case 6:\n e_1_1 = _c.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 12];\n case 7:\n _c.trys.push([7, , 10, 11]);\n if (!(stream_1_1 && !stream_1_1.done && (_a = stream_1.return))) return [3 /*break*/, 9];\n return [4 /*yield*/, _a.call(stream_1)];\n case 8:\n _c.sent();\n _c.label = 9;\n case 9: return [3 /*break*/, 11];\n case 10:\n if (e_1) throw e_1.error;\n return [7 /*endfinally*/];\n case 11: return [7 /*endfinally*/];\n case 12:\n if (decoded) {\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.totalPos);\n }\n return [2 /*return*/, object];\n }\n _b = this, headByte = _b.headByte, pos = _b.pos, totalPos = _b.totalPos;\n throw new RangeError(\"Insufficient data in parsing \".concat(prettyByte(headByte), \" at \").concat(totalPos, \" (\").concat(pos, \" in the current buffer)\"));\n }\n });\n });\n };\n Decoder.prototype.decodeArrayStream = function (stream) {\n return this.decodeMultiAsync(stream, true);\n };\n Decoder.prototype.decodeStream = function (stream) {\n return this.decodeMultiAsync(stream, false);\n };\n Decoder.prototype.decodeMultiAsync = function (stream, isArray) {\n return __asyncGenerator(this, arguments, function decodeMultiAsync_1() {\n var isArrayHeaderRequired, arrayItemsLeft, stream_2, stream_2_1, buffer, e_2, e_3_1;\n var e_3, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n isArrayHeaderRequired = isArray;\n arrayItemsLeft = -1;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 14, 19]);\n stream_2 = __asyncValues(stream);\n _b.label = 2;\n case 2: return [4 /*yield*/, __await(stream_2.next())];\n case 3:\n if (!(stream_2_1 = _b.sent(), !stream_2_1.done)) return [3 /*break*/, 12];\n buffer = stream_2_1.value;\n if (isArray && arrayItemsLeft === 0) {\n throw this.createExtraByteError(this.totalPos);\n }\n this.appendBuffer(buffer);\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n _b.label = 4;\n case 4:\n _b.trys.push([4, 9, , 10]);\n _b.label = 5;\n case 5:\n if (!true) return [3 /*break*/, 8];\n return [4 /*yield*/, __await(this.doDecodeSync())];\n case 6: return [4 /*yield*/, _b.sent()];\n case 7:\n _b.sent();\n if (--arrayItemsLeft === 0) {\n return [3 /*break*/, 8];\n }\n return [3 /*break*/, 5];\n case 8: return [3 /*break*/, 10];\n case 9:\n e_2 = _b.sent();\n if (!(e_2 instanceof DataViewIndexOutOfBoundsError)) {\n throw e_2; // rethrow\n }\n return [3 /*break*/, 10];\n case 10:\n this.totalPos += this.pos;\n _b.label = 11;\n case 11: return [3 /*break*/, 2];\n case 12: return [3 /*break*/, 19];\n case 13:\n e_3_1 = _b.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 19];\n case 14:\n _b.trys.push([14, , 17, 18]);\n if (!(stream_2_1 && !stream_2_1.done && (_a = stream_2.return))) return [3 /*break*/, 16];\n return [4 /*yield*/, __await(_a.call(stream_2))];\n case 15:\n _b.sent();\n _b.label = 16;\n case 16: return [3 /*break*/, 18];\n case 17:\n if (e_3) throw e_3.error;\n return [7 /*endfinally*/];\n case 18: return [7 /*endfinally*/];\n case 19: return [2 /*return*/];\n }\n });\n });\n };\n Decoder.prototype.doDecodeSync = function () {\n DECODE: while (true) {\n var headByte = this.readHeadByte();\n var object = void 0;\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n }\n else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n }\n else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n var size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = {};\n }\n }\n else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n var size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = [];\n }\n }\n else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n var byteLength = headByte - 0xa0;\n object = this.decodeUtf8String(byteLength, 0);\n }\n }\n else if (headByte === 0xc0) {\n // nil\n object = null;\n }\n else if (headByte === 0xc2) {\n // false\n object = false;\n }\n else if (headByte === 0xc3) {\n // true\n object = true;\n }\n else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n }\n else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n }\n else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n }\n else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n }\n else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n }\n else if (headByte === 0xcf) {\n // uint 64\n object = this.readU64();\n }\n else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n }\n else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n }\n else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n }\n else if (headByte === 0xd3) {\n // int 64\n object = this.readI64();\n }\n else if (headByte === 0xd9) {\n // str 8\n var byteLength = this.lookU8();\n object = this.decodeUtf8String(byteLength, 1);\n }\n else if (headByte === 0xda) {\n // str 16\n var byteLength = this.lookU16();\n object = this.decodeUtf8String(byteLength, 2);\n }\n else if (headByte === 0xdb) {\n // str 32\n var byteLength = this.lookU32();\n object = this.decodeUtf8String(byteLength, 4);\n }\n else if (headByte === 0xdc) {\n // array 16\n var size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = [];\n }\n }\n else if (headByte === 0xdd) {\n // array 32\n var size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = [];\n }\n }\n else if (headByte === 0xde) {\n // map 16\n var size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = {};\n }\n }\n else if (headByte === 0xdf) {\n // map 32\n var size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = {};\n }\n }\n else if (headByte === 0xc4) {\n // bin 8\n var size = this.lookU8();\n object = this.decodeBinary(size, 1);\n }\n else if (headByte === 0xc5) {\n // bin 16\n var size = this.lookU16();\n object = this.decodeBinary(size, 2);\n }\n else if (headByte === 0xc6) {\n // bin 32\n var size = this.lookU32();\n object = this.decodeBinary(size, 4);\n }\n else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n }\n else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n }\n else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n }\n else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n }\n else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n }\n else if (headByte === 0xc7) {\n // ext 8\n var size = this.lookU8();\n object = this.decodeExtension(size, 1);\n }\n else if (headByte === 0xc8) {\n // ext 16\n var size = this.lookU16();\n object = this.decodeExtension(size, 2);\n }\n else if (headByte === 0xc9) {\n // ext 32\n var size = this.lookU32();\n object = this.decodeExtension(size, 4);\n }\n else {\n throw new DecodeError(\"Unrecognized type byte: \".concat(prettyByte(headByte)));\n }\n this.complete();\n var stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n var state = stack[stack.length - 1];\n if (state.type === 0 /* State.ARRAY */) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n stack.pop();\n object = state.array;\n }\n else {\n continue DECODE;\n }\n }\n else if (state.type === 1 /* State.MAP_KEY */) {\n if (!isValidMapKeyType(object)) {\n throw new DecodeError(\"The type of key must be string or number but \" + typeof object);\n }\n if (object === \"__proto__\") {\n throw new DecodeError(\"The key __proto__ is not allowed\");\n }\n state.key = object;\n state.type = 2 /* State.MAP_VALUE */;\n continue DECODE;\n }\n else {\n // it must be `state.type === State.MAP_VALUE` here\n state.map[state.key] = object;\n state.readCount++;\n if (state.readCount === state.size) {\n stack.pop();\n object = state.map;\n }\n else {\n state.key = null;\n state.type = 1 /* State.MAP_KEY */;\n continue DECODE;\n }\n }\n }\n return object;\n }\n };\n Decoder.prototype.readHeadByte = function () {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n return this.headByte;\n };\n Decoder.prototype.complete = function () {\n this.headByte = HEAD_BYTE_REQUIRED;\n };\n Decoder.prototype.readArraySize = function () {\n var headByte = this.readHeadByte();\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n }\n else {\n throw new DecodeError(\"Unrecognized array type byte: \".concat(prettyByte(headByte)));\n }\n }\n }\n };\n Decoder.prototype.pushMapState = function (size) {\n if (size > this.maxMapLength) {\n throw new DecodeError(\"Max length exceeded: map length (\".concat(size, \") > maxMapLengthLength (\").concat(this.maxMapLength, \")\"));\n }\n this.stack.push({\n type: 1 /* State.MAP_KEY */,\n size: size,\n key: null,\n readCount: 0,\n map: {},\n });\n };\n Decoder.prototype.pushArrayState = function (size) {\n if (size > this.maxArrayLength) {\n throw new DecodeError(\"Max length exceeded: array length (\".concat(size, \") > maxArrayLength (\").concat(this.maxArrayLength, \")\"));\n }\n this.stack.push({\n type: 0 /* State.ARRAY */,\n size: size,\n array: new Array(size),\n position: 0,\n });\n };\n Decoder.prototype.decodeUtf8String = function (byteLength, headerOffset) {\n var _a;\n if (byteLength > this.maxStrLength) {\n throw new DecodeError(\"Max length exceeded: UTF-8 byte length (\".concat(byteLength, \") > maxStrLength (\").concat(this.maxStrLength, \")\"));\n }\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n var offset = this.pos + headerOffset;\n var object;\n if (this.stateIsMapKey() && ((_a = this.keyDecoder) === null || _a === void 0 ? void 0 : _a.canBeCached(byteLength))) {\n object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n }\n else if (byteLength > TEXT_DECODER_THRESHOLD) {\n object = utf8DecodeTD(this.bytes, offset, byteLength);\n }\n else {\n object = utf8DecodeJs(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n };\n Decoder.prototype.stateIsMapKey = function () {\n if (this.stack.length > 0) {\n var state = this.stack[this.stack.length - 1];\n return state.type === 1 /* State.MAP_KEY */;\n }\n return false;\n };\n Decoder.prototype.decodeBinary = function (byteLength, headOffset) {\n if (byteLength > this.maxBinLength) {\n throw new DecodeError(\"Max length exceeded: bin length (\".concat(byteLength, \") > maxBinLength (\").concat(this.maxBinLength, \")\"));\n }\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n var offset = this.pos + headOffset;\n var object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n };\n Decoder.prototype.decodeExtension = function (size, headOffset) {\n if (size > this.maxExtLength) {\n throw new DecodeError(\"Max length exceeded: ext length (\".concat(size, \") > maxExtLength (\").concat(this.maxExtLength, \")\"));\n }\n var extType = this.view.getInt8(this.pos + headOffset);\n var data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n };\n Decoder.prototype.lookU8 = function () {\n return this.view.getUint8(this.pos);\n };\n Decoder.prototype.lookU16 = function () {\n return this.view.getUint16(this.pos);\n };\n Decoder.prototype.lookU32 = function () {\n return this.view.getUint32(this.pos);\n };\n Decoder.prototype.readU8 = function () {\n var value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n };\n Decoder.prototype.readI8 = function () {\n var value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n };\n Decoder.prototype.readU16 = function () {\n var value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n };\n Decoder.prototype.readI16 = function () {\n var value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n };\n Decoder.prototype.readU32 = function () {\n var value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n };\n Decoder.prototype.readI32 = function () {\n var value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n };\n Decoder.prototype.readU64 = function () {\n var value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n };\n Decoder.prototype.readI64 = function () {\n var value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n };\n Decoder.prototype.readF32 = function () {\n var value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n };\n Decoder.prototype.readF64 = function () {\n var value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n };\n return Decoder;\n}());\nexport { Decoder };\n//# sourceMappingURL=Decoder.mjs.map","import { Decoder } from \"./Decoder.mjs\";\nexport var defaultDecodeOptions = {};\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync()}, {@link decodeStream()}, or {@link decodeArrayStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode(buffer, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n var decoder = new Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);\n return decoder.decode(buffer);\n}\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti(buffer, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n var decoder = new Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);\n return decoder.decodeMulti(buffer);\n}\n//# sourceMappingURL=decode.mjs.map","import { utf8EncodeJs, utf8Count, TEXT_ENCODER_THRESHOLD, utf8EncodeTE } from \"./utils/utf8.mjs\";\nimport { ExtensionCodec } from \"./ExtensionCodec.mjs\";\nimport { setInt64, setUint64 } from \"./utils/int.mjs\";\nimport { ensureUint8Array } from \"./utils/typedArrays.mjs\";\nexport var DEFAULT_MAX_DEPTH = 100;\nexport var DEFAULT_INITIAL_BUFFER_SIZE = 2048;\nvar Encoder = /** @class */ (function () {\n function Encoder(extensionCodec, context, maxDepth, initialBufferSize, sortKeys, forceFloat32, ignoreUndefined, forceIntegerToFloat) {\n if (extensionCodec === void 0) { extensionCodec = ExtensionCodec.defaultCodec; }\n if (context === void 0) { context = undefined; }\n if (maxDepth === void 0) { maxDepth = DEFAULT_MAX_DEPTH; }\n if (initialBufferSize === void 0) { initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE; }\n if (sortKeys === void 0) { sortKeys = false; }\n if (forceFloat32 === void 0) { forceFloat32 = false; }\n if (ignoreUndefined === void 0) { ignoreUndefined = false; }\n if (forceIntegerToFloat === void 0) { forceIntegerToFloat = false; }\n this.extensionCodec = extensionCodec;\n this.context = context;\n this.maxDepth = maxDepth;\n this.initialBufferSize = initialBufferSize;\n this.sortKeys = sortKeys;\n this.forceFloat32 = forceFloat32;\n this.ignoreUndefined = ignoreUndefined;\n this.forceIntegerToFloat = forceIntegerToFloat;\n this.pos = 0;\n this.view = new DataView(new ArrayBuffer(this.initialBufferSize));\n this.bytes = new Uint8Array(this.view.buffer);\n }\n Encoder.prototype.reinitializeState = function () {\n this.pos = 0;\n };\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n Encoder.prototype.encodeSharedRef = function (object) {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n };\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n Encoder.prototype.encode = function (object) {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n };\n Encoder.prototype.doEncode = function (object, depth) {\n if (depth > this.maxDepth) {\n throw new Error(\"Too deep objects in depth \".concat(depth));\n }\n if (object == null) {\n this.encodeNil();\n }\n else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n }\n else if (typeof object === \"number\") {\n this.encodeNumber(object);\n }\n else if (typeof object === \"string\") {\n this.encodeString(object);\n }\n else {\n this.encodeObject(object, depth);\n }\n };\n Encoder.prototype.ensureBufferSizeToWrite = function (sizeToWrite) {\n var requiredSize = this.pos + sizeToWrite;\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n };\n Encoder.prototype.resizeBuffer = function (newSize) {\n var newBuffer = new ArrayBuffer(newSize);\n var newBytes = new Uint8Array(newBuffer);\n var newView = new DataView(newBuffer);\n newBytes.set(this.bytes);\n this.view = newView;\n this.bytes = newBytes;\n };\n Encoder.prototype.encodeNil = function () {\n this.writeU8(0xc0);\n };\n Encoder.prototype.encodeBoolean = function (object) {\n if (object === false) {\n this.writeU8(0xc2);\n }\n else {\n this.writeU8(0xc3);\n }\n };\n Encoder.prototype.encodeNumber = function (object) {\n if (Number.isSafeInteger(object) && !this.forceIntegerToFloat) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n }\n else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n }\n else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n }\n else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n }\n else {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n }\n else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n }\n else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n }\n else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n }\n else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n }\n else {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n }\n }\n else {\n // non-integer numbers\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n }\n else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n };\n Encoder.prototype.writeStringHeader = function (byteLength) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n }\n else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n }\n else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n }\n else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n }\n else {\n throw new Error(\"Too long string: \".concat(byteLength, \" bytes in UTF-8\"));\n }\n };\n Encoder.prototype.encodeString = function (object) {\n var maxHeaderSize = 1 + 4;\n var strLength = object.length;\n if (strLength > TEXT_ENCODER_THRESHOLD) {\n var byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeTE(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n else {\n var byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeJs(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n };\n Encoder.prototype.encodeObject = function (object, depth) {\n // try to encode objects with custom codec first of non-primitives\n var ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n }\n else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n }\n else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n }\n else if (typeof object === \"object\") {\n this.encodeMap(object, depth);\n }\n else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(\"Unrecognized object: \".concat(Object.prototype.toString.apply(object)));\n }\n };\n Encoder.prototype.encodeBinary = function (object) {\n var size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large binary: \".concat(size));\n }\n var bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n };\n Encoder.prototype.encodeArray = function (object, depth) {\n var size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n }\n else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large array: \".concat(size));\n }\n for (var _i = 0, object_1 = object; _i < object_1.length; _i++) {\n var item = object_1[_i];\n this.doEncode(item, depth + 1);\n }\n };\n Encoder.prototype.countWithoutUndefined = function (object, keys) {\n var count = 0;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (object[key] !== undefined) {\n count++;\n }\n }\n return count;\n };\n Encoder.prototype.encodeMap = function (object, depth) {\n var keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n var size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n }\n else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large map object: \".concat(size));\n }\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var value = object[key];\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n };\n Encoder.prototype.encodeExtension = function (ext) {\n var size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n }\n else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n }\n else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n }\n else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n }\n else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n }\n else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large extension object: \".concat(size));\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n };\n Encoder.prototype.writeU8 = function (value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setUint8(this.pos, value);\n this.pos++;\n };\n Encoder.prototype.writeU8a = function (values) {\n var size = values.length;\n this.ensureBufferSizeToWrite(size);\n this.bytes.set(values, this.pos);\n this.pos += size;\n };\n Encoder.prototype.writeI8 = function (value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setInt8(this.pos, value);\n this.pos++;\n };\n Encoder.prototype.writeU16 = function (value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n };\n Encoder.prototype.writeI16 = function (value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n };\n Encoder.prototype.writeU32 = function (value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n };\n Encoder.prototype.writeI32 = function (value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n };\n Encoder.prototype.writeF32 = function (value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n };\n Encoder.prototype.writeF64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n };\n Encoder.prototype.writeU64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n };\n Encoder.prototype.writeI64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n };\n return Encoder;\n}());\nexport { Encoder };\n//# sourceMappingURL=Encoder.mjs.map","import { Encoder } from \"./Encoder.mjs\";\nvar defaultEncodeOptions = {};\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode(value, options) {\n if (options === void 0) { options = defaultEncodeOptions; }\n var encoder = new Encoder(options.extensionCodec, options.context, options.maxDepth, options.initialBufferSize, options.sortKeys, options.forceFloat32, options.ignoreUndefined, options.forceIntegerToFloat);\n return encoder.encodeSharedRef(value);\n}\n//# sourceMappingURL=encode.mjs.map","/**\n * Contains the RPC object used both by the application\n * site, and by each plugin\n */\nimport {\n randId,\n typedArrayToDtype,\n dtypeToTypedArray,\n MessageEmitter,\n assert,\n waitFor,\n convertCase,\n} from \"./utils\";\nimport { schemaFunction } from \"./utils/schema\";\n\nimport { encode as msgpack_packb, decodeMulti } from \"@msgpack/msgpack\";\n\nexport const API_VERSION = \"0.20.0\";\nconst CHUNK_SIZE = 1024 * 500;\n\nconst ArrayBufferView = Object.getPrototypeOf(\n Object.getPrototypeOf(new Uint8Array()),\n).constructor;\n\nfunction _appendBuffer(buffer1, buffer2) {\n const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n}\n\nfunction indexObject(obj, is) {\n if (!is) throw new Error(\"undefined index\");\n if (typeof is === \"string\") return indexObject(obj, is.split(\".\"));\n else if (is.length === 0) return obj;\n else return indexObject(obj[is[0]], is.slice(1));\n}\n\nfunction _get_schema(obj, name = null, skipContext = false) {\n if (obj instanceof Object) {\n let schema = {};\n for (let k in obj) {\n schema[k] = _get_schema(obj[k], k, skipContext);\n }\n return schema;\n }\n if (obj instanceof Array) {\n return obj.map((v, i) => _get_schema(v, null, skipContext));\n }\n if (typeof obj === \"function\") {\n if (obj.__schema__) {\n const schema = JSON.parse(JSON.stringify(obj.__schema__));\n if (name) {\n schema.name = name;\n obj.__schema__.name = name;\n }\n if (skipContext) {\n if (schema.parameters && schema.parameters.properties) {\n delete schema.parameters.properties[\"context\"];\n }\n }\n return { type: \"function\", function: schema };\n } else {\n return { type: \"function\" };\n }\n } else if (typeof obj === \"number\") {\n return { type: \"number\" };\n } else if (typeof obj === \"string\") {\n return { type: \"string\" };\n } else if (typeof obj === \"boolean\") {\n return { type: \"boolean\" };\n } else if (obj === null) {\n return { type: \"null\" };\n } else {\n return {};\n }\n}\n\nfunction _annotate_service(service, serviceTypeInfo) {\n function validateKeys(serviceDict, schemaDict, path = \"root\") {\n // Validate that all keys in schemaDict exist in serviceDict\n for (let key in schemaDict) {\n if (!serviceDict.hasOwnProperty(key)) {\n throw new Error(`Missing key '${key}' in service at path '${path}'`);\n }\n }\n\n // Check for any unexpected keys in serviceDict\n for (let key in serviceDict) {\n if (key !== \"type\" && !schemaDict.hasOwnProperty(key)) {\n throw new Error(`Unexpected key '${key}' in service at path '${path}'`);\n }\n }\n }\n\n function annotateRecursive(newService, schemaInfo, path = \"root\") {\n if (typeof newService === \"object\" && !Array.isArray(newService)) {\n validateKeys(newService, schemaInfo, path);\n for (let k in newService) {\n let v = newService[k];\n let newPath = `${path}.${k}`;\n if (typeof v === \"object\" && !Array.isArray(v)) {\n annotateRecursive(v, schemaInfo[k], newPath);\n } else if (typeof v === \"function\") {\n if (schemaInfo.hasOwnProperty(k)) {\n newService[k] = schemaFunction(v, {\n name: schemaInfo[k][\"name\"],\n description: schemaInfo[k].description || \"\",\n parameters: schemaInfo[k][\"parameters\"],\n });\n } else {\n throw new Error(\n `Missing schema for function '${k}' at path '${newPath}'`,\n );\n }\n }\n }\n } else if (Array.isArray(newService)) {\n if (newService.length !== schemaInfo.length) {\n throw new Error(`Length mismatch at path '${path}'`);\n }\n newService.forEach((v, i) => {\n let newPath = `${path}[${i}]`;\n if (typeof v === \"object\" && !Array.isArray(v)) {\n annotateRecursive(v, schemaInfo[i], newPath);\n } else if (typeof v === \"function\") {\n if (schemaInfo.hasOwnProperty(i)) {\n newService[i] = schemaFunction(v, {\n name: schemaInfo[i][\"name\"],\n description: schemaInfo[i].description || \"\",\n parameters: schemaInfo[i][\"parameters\"],\n });\n } else {\n throw new Error(\n `Missing schema for function at index ${i} in path '${newPath}'`,\n );\n }\n }\n });\n }\n }\n\n validateKeys(service, serviceTypeInfo[\"definition\"]);\n annotateRecursive(service, serviceTypeInfo[\"definition\"]);\n return service;\n}\n\nfunction getFunctionInfo(func) {\n const funcString = func.toString();\n\n // Extract function name\n const nameMatch = funcString.match(/function\\s*(\\w*)/);\n const name = (nameMatch && nameMatch[1]) || \"\";\n\n // Extract function parameters, excluding comments\n const paramsMatch = funcString.match(/\\(([^)]*)\\)/);\n let params = \"\";\n if (paramsMatch) {\n params = paramsMatch[1]\n .split(\",\")\n .map((p) =>\n p\n .replace(/\\/\\*.*?\\*\\//g, \"\") // Remove block comments\n .replace(/\\/\\/.*$/g, \"\"),\n ) // Remove line comments\n .filter((p) => p.trim().length > 0) // Remove empty strings after removing comments\n .map((p) => p.trim()) // Trim remaining whitespace\n .join(\", \");\n }\n\n // Extract function docstring (block comment)\n let docMatch = funcString.match(/\\)\\s*\\{\\s*\\/\\*([\\s\\S]*?)\\*\\//);\n const docstringBlock = (docMatch && docMatch[1].trim()) || \"\";\n\n // Extract function docstring (line comment)\n docMatch = funcString.match(/\\)\\s*\\{\\s*(\\/\\/[\\s\\S]*?)\\n\\s*[^\\s\\/]/);\n const docstringLine =\n (docMatch &&\n docMatch[1]\n .split(\"\\n\")\n .map((s) => s.replace(/^\\/\\/\\s*/, \"\").trim())\n .join(\"\\n\")) ||\n \"\";\n\n const docstring = docstringBlock || docstringLine;\n return (\n name &&\n params.length > 0 && {\n name: name,\n sig: params,\n doc: docstring,\n }\n );\n}\n\nfunction concatArrayBuffers(buffers) {\n var buffersLengths = buffers.map(function (b) {\n return b.byteLength;\n }),\n totalBufferlength = buffersLengths.reduce(function (p, c) {\n return p + c;\n }, 0),\n unit8Arr = new Uint8Array(totalBufferlength);\n buffersLengths.reduce(function (p, c, i) {\n unit8Arr.set(new Uint8Array(buffers[i]), p);\n return p + c;\n }, 0);\n return unit8Arr.buffer;\n}\n\nclass Timer {\n constructor(timeout, callback, args, label) {\n this._timeout = timeout;\n this._callback = callback;\n this._args = args;\n this._label = label || \"timer\";\n this._task = null;\n this.started = false;\n }\n\n start() {\n if (this.started) {\n this.reset();\n } else {\n this._task = setTimeout(() => {\n this._callback.apply(this, this._args);\n }, this._timeout * 1000);\n this.started = true;\n }\n }\n\n clear() {\n if (this._task) {\n clearTimeout(this._task);\n this._task = null;\n this.started = false;\n } else {\n console.warn(`Clearing a timer (${this._label}) which is not started`);\n }\n }\n\n reset() {\n if (this._task) {\n clearTimeout(this._task);\n }\n this._task = setTimeout(() => {\n this._callback.apply(this, this._args);\n }, this._timeout * 1000);\n this.started = true;\n }\n}\n\n/**\n * RPC object represents a single site in the\n * communication protocol between the application and the plugin\n *\n * @param {Object} connection a special object allowing to send\n * and receive messages from the opposite site (basically it\n * should only provide send() and onMessage() methods)\n */\nexport class RPC extends MessageEmitter {\n constructor(\n connection,\n {\n client_id = null,\n default_context = null,\n name = null,\n codecs = null,\n method_timeout = null,\n max_message_buffer_size = 0,\n debug = false,\n workspace = null,\n silent = false,\n app_id = null,\n },\n ) {\n super(debug);\n this._codecs = codecs || {};\n assert(client_id && typeof client_id === \"string\");\n assert(client_id, \"client_id is required\");\n this._client_id = client_id;\n this._name = name;\n this._app_id = app_id || \"*\";\n this._local_workspace = workspace;\n this._silent = silent;\n this.default_context = default_context || {};\n this._method_annotations = new WeakMap();\n this._max_message_buffer_size = max_message_buffer_size;\n this._chunk_store = {};\n this._method_timeout = method_timeout || 30;\n\n // make sure there is an execute function\n this._services = {};\n this._object_store = {\n services: this._services,\n };\n\n if (connection) {\n this.add_service({\n id: \"built-in\",\n type: \"built-in\",\n name: `Built-in services for ${this._local_workspace}/${this._client_id}`,\n config: { require_context: true, visibility: \"public\" },\n ping: this._ping.bind(this),\n get_service: this.get_local_service.bind(this),\n message_cache: {\n create: this._create_message.bind(this),\n append: this._append_message.bind(this),\n process: this._process_message.bind(this),\n remove: this._remove_message.bind(this),\n },\n });\n this.on(\"method\", this._handle_method.bind(this));\n this.on(\"error\", console.error);\n\n assert(connection.emit_message && connection.on_message);\n assert(\n connection.manager_id !== undefined,\n \"Connection must have manager_id\",\n );\n this._emit_message = connection.emit_message.bind(connection);\n connection.on_message(this._on_message.bind(this));\n this._connection = connection;\n const onConnected = async (connectionInfo) => {\n if (!this._silent && this._connection.manager_id) {\n console.log(\"Connection established, reporting services...\");\n const manager = await this.get_manager_service(10, \"camel\");\n for (let service of Object.values(this._services)) {\n const serviceInfo = this._extract_service_info(service);\n await manager.registerService(serviceInfo);\n }\n } else {\n console.log(\"Connection established\", connectionInfo);\n }\n this._fire(\"connected\", connectionInfo);\n };\n connection.on_connected(onConnected);\n onConnected();\n } else {\n this._emit_message = function () {\n console.log(\"No connection to emit message\");\n };\n }\n }\n\n register_codec(config) {\n if (!config[\"name\"] || (!config[\"encoder\"] && !config[\"decoder\"])) {\n throw new Error(\n \"Invalid codec format, please make sure you provide a name, type, encoder and decoder.\",\n );\n } else {\n if (config.type) {\n for (let k of Object.keys(this._codecs)) {\n if (this._codecs[k].type === config.type || k === config.name) {\n delete this._codecs[k];\n console.warn(\"Remove duplicated codec: \" + k);\n }\n }\n }\n this._codecs[config[\"name\"]] = config;\n }\n }\n\n async _ping(msg, context) {\n assert(msg == \"ping\");\n return \"pong\";\n }\n\n async ping(client_id, timeout) {\n let method = this._generate_remote_method({\n _rtarget: client_id,\n _rmethod: \"services.built-in.ping\",\n _rpromise: true,\n _rdoc: \"Ping a remote client\",\n });\n assert((await method(\"ping\", timeout)) == \"pong\");\n }\n\n _create_message(key, heartbeat, overwrite, context) {\n if (heartbeat) {\n if (!this._object_store[key]) {\n throw new Error(`session does not exist anymore: ${key}`);\n }\n this._object_store[key][\"timer\"].reset();\n }\n\n if (!this._object_store[\"message_cache\"]) {\n this._object_store[\"message_cache\"] = {};\n }\n if (!overwrite && this._object_store[\"message_cache\"][key]) {\n throw new Error(\n `Message with the same key (${key}) already exists in the cache store, please use overwrite=true or remove it first.`,\n );\n }\n\n this._object_store[\"message_cache\"][key] = [];\n }\n\n _append_message(key, data, heartbeat, context) {\n if (heartbeat) {\n if (!this._object_store[key]) {\n throw new Error(`session does not exist anymore: ${key}`);\n }\n this._object_store[key][\"timer\"].reset();\n }\n const cache = this._object_store[\"message_cache\"];\n if (!cache[key]) {\n throw new Error(`Message with key ${key} does not exists.`);\n }\n assert(data instanceof ArrayBufferView);\n cache[key].push(data);\n }\n\n _remove_message(key, context) {\n const cache = this._object_store[\"message_cache\"];\n if (!cache[key]) {\n throw new Error(`Message with key ${key} does not exists.`);\n }\n delete cache[key];\n }\n\n _process_message(key, heartbeat, context) {\n if (heartbeat) {\n if (!this._object_store[key]) {\n throw new Error(`session does not exist anymore: ${key}`);\n }\n this._object_store[key][\"timer\"].reset();\n }\n const cache = this._object_store[\"message_cache\"];\n assert(!!context, \"Context is required\");\n if (!cache[key]) {\n throw new Error(`Message with key ${key} does not exists.`);\n }\n cache[key] = concatArrayBuffers(cache[key]);\n console.debug(`Processing message ${key} (bytes=${cache[key].byteLength})`);\n let unpacker = decodeMulti(cache[key]);\n const { done, value } = unpacker.next();\n const main = value;\n // Make sure the fields are from trusted source\n Object.assign(main, {\n from: context.from,\n to: context.to,\n user: context.user,\n });\n main[\"ctx\"] = JSON.parse(JSON.stringify(main));\n Object.assign(main[\"ctx\"], this.default_context);\n if (!done) {\n let extra = unpacker.next();\n Object.assign(main, extra.value);\n }\n this._fire(main[\"type\"], main);\n console.debug(\n this._client_id,\n `Processed message ${key} (bytes=${cache[key].byteLength})`,\n );\n delete cache[key];\n }\n\n _on_message(message) {\n if (typeof message === \"string\") {\n const main = JSON.parse(message);\n this._fire(main[\"type\"], main);\n } else if (message instanceof ArrayBuffer) {\n let unpacker = decodeMulti(message);\n const { done, value } = unpacker.next();\n const main = value;\n // Add trusted context to the method call\n main[\"ctx\"] = JSON.parse(JSON.stringify(main));\n Object.assign(main[\"ctx\"], this.default_context);\n if (!done) {\n let extra = unpacker.next();\n Object.assign(main, extra.value);\n }\n this._fire(main[\"type\"], main);\n } else if (typeof message === \"object\") {\n this._fire(message[\"type\"], message);\n } else {\n throw new Error(\"Invalid message format\");\n }\n }\n\n reset() {\n this._event_handlers = {};\n this._services = {};\n }\n\n async disconnect() {\n this._fire(\"disconnected\");\n await this._connection.disconnect();\n }\n\n async get_manager_service(timeout, case_conversion = null) {\n assert(this._connection.manager_id, \"Manager id is not set\");\n const svc = await this.get_remote_service(\n `*/${this._connection.manager_id}:default`,\n timeout,\n case_conversion,\n );\n return svc;\n }\n\n get_all_local_services() {\n return this._services;\n }\n get_local_service(service_id, context) {\n assert(service_id);\n const [ws, client_id] = context[\"to\"].split(\"/\");\n assert(\n client_id === this._client_id,\n \"Services can only be accessed locally\",\n );\n\n const service = this._services[service_id];\n if (!service) {\n throw new Error(\"Service not found: \" + service_id);\n }\n\n service.config[\"workspace\"] = context[\"ws\"];\n // allow access for the same workspace\n if (service.config.visibility == \"public\") {\n return service;\n }\n\n // allow access for the same workspace\n if (context[\"ws\"] === ws) {\n return service;\n }\n\n throw new Error(\n `Permission denied for getting protected service: ${service_id}, workspace mismatch: ${ws} != ${context[\"ws\"]}`,\n );\n }\n async get_remote_service(service_uri, timeout, case_conversion = null) {\n timeout = timeout === undefined ? this._method_timeout : timeout;\n if (!service_uri && this._connection.manager_id) {\n service_uri = \"*/\" + this._connection.manager_id;\n } else if (!service_uri.includes(\":\")) {\n service_uri = this._client_id + \":\" + service_uri;\n }\n const provider = service_uri.split(\":\")[0];\n let service_id = service_uri.split(\":\")[1];\n if (service_id.includes(\"@\")) {\n service_id = service_id.split(\"@\")[0];\n const app_id = service_uri.split(\"@\")[1];\n if (this._app_id && this._app_id !== \"*\")\n assert(\n app_id === this._app_id,\n `Invalid app id: ${app_id} != ${this._app_id}`,\n );\n }\n assert(provider, `Invalid service uri: ${service_uri}`);\n\n try {\n const method = this._generate_remote_method({\n _rtarget: provider,\n _rmethod: \"services.built-in.get_service\",\n _rpromise: true,\n _rdoc: \"Get a remote service\",\n });\n const svc = await waitFor(\n method(service_id),\n timeout,\n \"Timeout Error: Failed to get remote service: \" + service_uri,\n );\n svc.id = `${provider}:${service_id}`;\n if (case_conversion) return convertCase(svc, case_conversion);\n else return svc;\n } catch (e) {\n console.warn(\"Failed to get remote service: \" + service_uri, e);\n throw e;\n }\n }\n _annotate_service_methods(\n aObject,\n object_id,\n require_context,\n run_in_executor,\n visibility,\n ) {\n if (typeof aObject === \"function\") {\n // mark the method as a remote method that requires context\n let method_name = object_id.split(\".\")[1];\n this._method_annotations.set(aObject, {\n require_context: Array.isArray(require_context)\n ? require_context.includes(method_name)\n : !!require_context,\n run_in_executor: run_in_executor,\n method_id: \"services.\" + object_id,\n visibility: visibility,\n });\n } else if (aObject instanceof Array || aObject instanceof Object) {\n for (let key of Object.keys(aObject)) {\n let val = aObject[key];\n if (typeof val === \"function\" && val.__rpc_object__) {\n let client_id = val.__rpc_object__._rtarget;\n if (client_id.includes(\"/\")) {\n client_id = client_id.split(\"/\")[1];\n }\n if (this._client_id === client_id) {\n if (aObject instanceof Array) {\n aObject = aObject.slice();\n }\n // recover local method\n aObject[key] = indexObject(\n this._object_store,\n val.__rpc_object__._rmethod,\n );\n val = aObject[key]; // make sure it's annotated later\n } else {\n throw new Error(\n `Local method not found: ${val.__rpc_object__._rmethod}, client id mismatch ${this._client_id} != ${client_id}`,\n );\n }\n }\n this._annotate_service_methods(\n val,\n object_id + \".\" + key,\n require_context,\n run_in_executor,\n visibility,\n );\n }\n }\n }\n add_service(api, overwrite) {\n if (!api || Array.isArray(api)) throw new Error(\"Invalid service object\");\n if (api.constructor === Object) {\n api = Object.assign({}, api);\n } else {\n const normApi = {};\n const props = Object.getOwnPropertyNames(api).concat(\n Object.getOwnPropertyNames(Object.getPrototypeOf(api)),\n );\n for (let k of props) {\n if (k !== \"constructor\") {\n if (typeof api[k] === \"function\") normApi[k] = api[k].bind(api);\n else normApi[k] = api[k];\n }\n }\n // For class instance, we need set a default id\n api.id = api.id || \"default\";\n api = normApi;\n }\n assert(\n api.id && typeof api.id === \"string\",\n `Service id not found: ${api}`,\n );\n if (!api.name) {\n api.name = api.id;\n }\n if (!api.config) {\n api.config = {};\n }\n if (!api.type) {\n api.type = \"generic\";\n }\n // require_context only applies to the top-level functions\n let require_context = false,\n run_in_executor = false;\n if (api.config.require_context)\n require_context = api.config.require_context;\n if (api.config.run_in_executor) run_in_executor = true;\n const visibility = api.config.visibility || \"protected\";\n assert([\"protected\", \"public\"].includes(visibility));\n this._annotate_service_methods(\n api,\n api[\"id\"],\n require_context,\n run_in_executor,\n visibility,\n );\n\n if (this._services[api.id]) {\n if (overwrite) {\n delete this._services[api.id];\n } else {\n throw new Error(\n `Service already exists: ${api.id}, please specify a different id (not ${api.id}) or overwrite=true`,\n );\n }\n }\n this._services[api.id] = api;\n return api;\n }\n\n _extract_service_info(service) {\n const config = service.config || {};\n config.workspace = config.workspace || self._local_workspace;\n const skipContext = config.require_context;\n const serviceSchema = _get_schema(service, null, skipContext);\n const serviceInfo = {\n config: config,\n id: `${this._client_id}:${service[\"id\"]}`,\n name: service.name || service[\"id\"],\n description: service.description || \"\",\n type: service.type || \"generic\",\n docs: service.docs || null,\n app_id: this._app_id,\n service_schema: serviceSchema,\n };\n return serviceInfo;\n }\n\n async get_service_schema(service) {\n const skipContext = service.config.require_context;\n return _get_schema(service, null, skipContext);\n }\n\n async register_service(api, overwrite, notify = true, check_type = false) {\n let manager;\n if (check_type && api.type) {\n try {\n manager = await this.get_manager_service(10, \"camel\");\n const type_info = await manager.get_service_type(api.type);\n api = _annotate_service(api, type_info);\n } catch (e) {\n throw new Error(`Failed to get service type ${api.type}, error: ${e}`);\n }\n }\n\n const service = this.add_service(api, overwrite);\n const serviceInfo = this._extract_service_info(service);\n if (notify) {\n try {\n manager = manager || (await this.get_manager_service(10, \"camel\"));\n await manager.registerService(serviceInfo);\n } catch (e) {\n throw new Error(`Failed to notify workspace manager: ${e}`);\n }\n }\n return serviceInfo;\n }\n\n async unregister_service(service, notify) {\n if (service instanceof Object) {\n service = service.id;\n }\n if (!this._services[service]) {\n throw new Error(`Service not found: ${service}`);\n }\n const api = this._services[service];\n delete this._services[service];\n if (notify) {\n const manager = await this.get_manager_service(10, \"camel\");\n await manager.registerService(api.id);\n }\n }\n\n _ndarray(typedArray, shape, dtype) {\n const _dtype = typedArrayToDtype(typedArray);\n if (dtype && dtype !== _dtype) {\n throw (\n \"dtype doesn't match the type of the array: \" + _dtype + \" != \" + dtype\n );\n }\n shape = shape || [typedArray.length];\n return {\n _rtype: \"ndarray\",\n _rvalue: typedArray.buffer,\n _rshape: shape,\n _rdtype: _dtype,\n };\n }\n\n _encode_callback(\n name,\n callback,\n session_id,\n clear_after_called,\n timer,\n local_workspace,\n ) {\n let method_id = `${session_id}.${name}`;\n let encoded = {\n _rtype: \"method\",\n _rtarget: local_workspace\n ? `${local_workspace}/${this._client_id}`\n : this._client_id,\n _rmethod: method_id,\n _rpromise: false,\n };\n\n const self = this;\n let wrapped_callback = function () {\n try {\n callback.apply(null, Array.prototype.slice.call(arguments));\n } catch (error) {\n console.error(\"Error in callback:\", method_id, error);\n } finally {\n if (clear_after_called && self._object_store[session_id]) {\n // console.log(\"Deleting session\", session_id, \"from\", self._client_id);\n delete self._object_store[session_id];\n }\n if (timer && timer.started) {\n timer.clear();\n }\n }\n };\n\n return [encoded, wrapped_callback];\n }\n\n async _encode_promise(\n resolve,\n reject,\n session_id,\n clear_after_called,\n timer,\n local_workspace,\n ) {\n let store = this._get_session_store(session_id, true);\n assert(\n store,\n `Failed to create session store ${session_id} due to invalid parent`,\n );\n let encoded = {};\n\n if (timer && reject && this._method_timeout) {\n encoded.heartbeat = await this._encode(\n timer.reset.bind(timer),\n session_id,\n local_workspace,\n );\n encoded.interval = this._method_timeout / 2;\n store.timer = timer;\n } else {\n timer = null;\n }\n\n [encoded.resolve, store.resolve] = this._encode_callback(\n \"resolve\",\n resolve,\n session_id,\n clear_after_called,\n timer,\n local_workspace,\n );\n [encoded.reject, store.reject] = this._encode_callback(\n \"reject\",\n reject,\n session_id,\n clear_after_called,\n timer,\n local_workspace,\n );\n return encoded;\n }\n\n async _send_chunks(data, target_id, session_id) {\n let remote_services = await this.get_remote_service(\n `${target_id}:built-in`,\n );\n assert(\n remote_services.message_cache,\n \"Remote client does not support message caching for long message.\",\n );\n let message_cache = remote_services.message_cache;\n let message_id = session_id || randId();\n await message_cache.create(message_id, !!session_id);\n let total_size = data.length;\n let chunk_num = Math.ceil(total_size / CHUNK_SIZE);\n for (let idx = 0; idx < chunk_num; idx++) {\n let start_byte = idx * CHUNK_SIZE;\n await message_cache.append(\n message_id,\n data.slice(start_byte, start_byte + CHUNK_SIZE),\n !!session_id,\n );\n console.log(\n `Sending chunk ${idx + 1}/${chunk_num} (${total_size} bytes)`,\n );\n }\n // console.log(`All chunks sent (${chunk_num})`);\n await message_cache.process(message_id, !!session_id);\n }\n\n emit(main_message, extra_data) {\n assert(\n typeof main_message === \"object\" && main_message.type,\n \"Invalid message, must be an object with a `type` fields.\",\n );\n if (!main_message.to) {\n this._fire(main_message.type, main_message);\n return;\n }\n let message_package = msgpack_packb(main_message);\n if (extra_data) {\n const extra = msgpack_packb(extra_data);\n message_package = new Uint8Array([...message_package, ...extra]);\n }\n const total_size = message_package.length;\n if (total_size <= CHUNK_SIZE + 1024) {\n return this._emit_message(message_package);\n } else {\n throw new Error(\"Message is too large to send in one go.\");\n }\n }\n\n _generate_remote_method(\n encoded_method,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n ) {\n let target_id = encoded_method._rtarget;\n if (remote_workspace && !target_id.includes(\"/\")) {\n if (remote_workspace !== target_id) {\n target_id = remote_workspace + \"/\" + target_id;\n }\n // Fix the target id to be an absolute id\n encoded_method._rtarget = target_id;\n }\n let method_id = encoded_method._rmethod;\n let with_promise = encoded_method._rpromise;\n const self = this;\n\n function remote_method() {\n return new Promise(async (resolve, reject) => {\n let local_session_id = randId();\n if (local_parent) {\n // Store the children session under the parent\n local_session_id = local_parent + \".\" + local_session_id;\n }\n let store = self._get_session_store(local_session_id, true);\n if (!store) {\n reject(\n new Error(\n `Runtime Error: Failed to get session store ${local_session_id}`,\n ),\n );\n return;\n }\n store[\"target_id\"] = target_id;\n const args = await self._encode(\n Array.prototype.slice.call(arguments),\n local_session_id,\n local_workspace,\n );\n const argLength = args.length;\n // if the last argument is an object, mark it as kwargs\n const withKwargs =\n argLength > 0 &&\n typeof args[argLength - 1] === \"object\" &&\n args[argLength - 1] !== null &&\n args[argLength - 1]._rkwargs;\n if (withKwargs) delete args[argLength - 1]._rkwargs;\n\n let from_client;\n if (!self._local_workspace) {\n from_client = self._client_id;\n } else {\n from_client = self._local_workspace + \"/\" + self._client_id;\n }\n\n let main_message = {\n type: \"method\",\n from: from_client,\n to: target_id,\n method: method_id,\n };\n let extra_data = {};\n if (args) {\n extra_data[\"args\"] = args;\n }\n if (withKwargs) {\n extra_data[\"with_kwargs\"] = withKwargs;\n }\n\n // console.log(\n // `Calling remote method ${target_id}:${method_id}, session: ${local_session_id}`\n // );\n if (remote_parent) {\n // Set the parent session\n // Note: It's a session id for the remote, not the current client\n main_message[\"parent\"] = remote_parent;\n }\n\n let timer = null;\n if (with_promise) {\n // Only pass the current session id to the remote\n // if we want to received the result\n // I.e. the session id won't be passed for promises themselves\n main_message[\"session\"] = local_session_id;\n let method_name = `${target_id}:${method_id}`;\n timer = new Timer(\n self._method_timeout,\n reject,\n [`Method call time out: ${method_name}`],\n method_name,\n );\n // By default, hypha will clear the session after the method is called\n // However, if the args contains _rintf === true, we will not clear the session\n let clear_after_called = true;\n for (let arg of args) {\n if (typeof arg === \"object\" && arg._rintf === true) {\n clear_after_called = false;\n break;\n }\n }\n extra_data[\"promise\"] = await self._encode_promise(\n resolve,\n reject,\n local_session_id,\n clear_after_called,\n timer,\n local_workspace,\n );\n }\n // The message consists of two segments, the main message and extra data\n let message_package = msgpack_packb(main_message);\n if (extra_data) {\n const extra = msgpack_packb(extra_data);\n message_package = new Uint8Array([...message_package, ...extra]);\n }\n const total_size = message_package.length;\n if (total_size <= CHUNK_SIZE + 1024) {\n self._emit_message(message_package).then(function () {\n if (timer) {\n // console.log(`Start watchdog timer.`);\n // Only start the timer after we send the message successfully\n timer.start();\n }\n });\n } else {\n // send chunk by chunk\n self\n ._send_chunks(message_package, target_id, remote_parent)\n .then(function () {\n if (timer) {\n // console.log(`Start watchdog timer.`);\n // Only start the timer after we send the message successfully\n timer.start();\n }\n })\n .catch(function (err) {\n console.error(\"Failed to send message\", err);\n reject(err);\n });\n }\n });\n }\n\n // Generate debugging information for the method\n remote_method.__rpc_object__ = encoded_method;\n const parts = method_id.split(\".\");\n remote_method.__name__ = parts[parts.length - 1];\n remote_method.__doc__ =\n encoded_method._rdoc || `Remote method: ${method_id}`;\n remote_method.__schema__ = encoded_method._rschema;\n return remote_method;\n }\n\n get_client_info() {\n const services = [];\n for (let service of Object.values(this._services)) {\n services.push(this._extract_service_info(service));\n }\n\n return {\n id: this._client_id,\n services: services,\n };\n }\n\n async _handle_method(data) {\n let reject = null;\n let heartbeat_task = null;\n try {\n assert(data.method && data.ctx && data.from);\n const method_name = data.from + \":\" + data.method;\n const remote_workspace = data.from.split(\"/\")[0];\n const remote_client_id = data.from.split(\"/\")[1];\n // Make sure the target id is an absolute id\n data[\"to\"] = data[\"to\"].includes(\"/\")\n ? data[\"to\"]\n : remote_workspace + \"/\" + data[\"to\"];\n data[\"ctx\"][\"to\"] = data[\"to\"];\n let local_workspace;\n if (!this._local_workspace) {\n local_workspace = data[\"to\"].split(\"/\")[0];\n } else {\n if (this._local_workspace && this._local_workspace !== \"*\") {\n assert(\n data[\"to\"].split(\"/\")[0] === this._local_workspace,\n \"Workspace mismatch: \" +\n data[\"to\"].split(\"/\")[0] +\n \" != \" +\n this._local_workspace,\n );\n }\n local_workspace = this._local_workspace;\n }\n const local_parent = data.parent;\n\n let resolve, reject;\n if (data.promise) {\n // Decode the promise with the remote session id\n // Such that the session id will be passed to the remote as a parent session id\n const promise = await this._decode(\n data.promise,\n data.session,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n resolve = promise.resolve;\n reject = promise.reject;\n if (promise.heartbeat && promise.interval) {\n async function heartbeat() {\n try {\n console.log(\"Reset heartbeat timer: \" + data.method);\n await promise.heartbeat();\n } catch (err) {\n console.error(err);\n }\n }\n heartbeat_task = setInterval(heartbeat, promise.interval * 1000);\n }\n }\n\n let method;\n\n try {\n method = indexObject(this._object_store, data[\"method\"]);\n } catch (e) {\n console.debug(\"Failed to find method\", method_name, this._client_id, e);\n throw new Error(\n `Method not found: ${method_name} at ${this._client_id}`,\n );\n }\n\n assert(\n method && typeof method === \"function\",\n \"Invalid method: \" + method_name,\n );\n\n // Check permission\n if (this._method_annotations.has(method)) {\n // For services, it should not be protected\n if (this._method_annotations.get(method).visibility === \"protected\") {\n if (\n local_workspace !== remote_workspace &&\n (remote_workspace !== \"*\" ||\n remote_client_id !== this._connection.manager_id)\n ) {\n throw new Error(\n \"Permission denied for invoking protected method \" +\n method_name +\n \", workspace mismatch: \" +\n local_workspace +\n \" != \" +\n remote_workspace,\n );\n }\n }\n } else {\n // For sessions, the target_id should match exactly\n let session_target_id =\n this._object_store[data.method.split(\".\")[0]].target_id;\n if (\n local_workspace === remote_workspace &&\n session_target_id &&\n session_target_id.indexOf(\"/\") === -1\n ) {\n session_target_id = local_workspace + \"/\" + session_target_id;\n }\n if (session_target_id !== data.from) {\n throw new Error(\n \"Access denied for method call (\" +\n method_name +\n \") from \" +\n data.from +\n \" to target \" +\n session_target_id,\n );\n }\n }\n\n // Make sure the parent session is still open\n if (local_parent) {\n // The parent session should be a session that generate the current method call\n assert(\n this._get_session_store(local_parent, true) !== null,\n \"Parent session was closed: \" + local_parent,\n );\n }\n let args;\n if (data.args) {\n args = await this._decode(\n data.args,\n data.session,\n null,\n remote_workspace,\n null,\n );\n } else {\n args = [];\n }\n if (\n this._method_annotations.has(method) &&\n this._method_annotations.get(method).require_context\n ) {\n // if args.length + 1 is less than the required number of arguments we will pad with undefined\n // so we make sure the last argument is the context\n if (args.length + 1 < method.length) {\n for (let i = args.length; i < method.length - 1; i++) {\n args.push(undefined);\n }\n }\n args.push(data.ctx);\n assert(\n args.length === method.length,\n `Runtime Error: Invalid number of arguments for method ${method_name}, expected ${method.length} but got ${args.length}`,\n );\n }\n // console.log(\"Executing method: \" + method_name);\n if (data.promise) {\n const result = method.apply(null, args);\n if (result instanceof Promise) {\n result\n .then((result) => {\n resolve(result);\n clearInterval(heartbeat_task);\n })\n .catch((err) => {\n reject(err);\n clearInterval(heartbeat_task);\n });\n } else {\n resolve(result);\n clearInterval(heartbeat_task);\n }\n } else {\n method.apply(null, args);\n clearInterval(heartbeat_task);\n }\n } catch (err) {\n if (reject) {\n reject(err);\n console.debug(\"Error during calling method: \", err);\n } else {\n console.error(\"Error during calling method: \", err);\n }\n // make sure we clear the heartbeat timer\n clearInterval(heartbeat_task);\n }\n }\n\n encode(aObject, session_id) {\n return this._encode(aObject, session_id);\n }\n\n _get_session_store(session_id, create) {\n let store = this._object_store;\n const levels = session_id.split(\".\");\n if (create) {\n const last_index = levels.length - 1;\n for (let level of levels.slice(0, last_index)) {\n if (!store[level]) {\n return null;\n }\n store = store[level];\n }\n // Create the last level\n if (!store[levels[last_index]]) {\n store[levels[last_index]] = {};\n }\n return store[levels[last_index]];\n } else {\n for (let level of levels) {\n if (!store[level]) {\n return null;\n }\n store = store[level];\n }\n return store;\n }\n }\n\n /**\n * Prepares the provided set of remote method arguments for\n * sending to the remote site, replaces all the callbacks with\n * identifiers\n *\n * @param {Array} args to wrap\n *\n * @returns {Array} wrapped arguments\n */\n async _encode(aObject, session_id, local_workspace) {\n const aType = typeof aObject;\n if (\n aType === \"number\" ||\n aType === \"string\" ||\n aType === \"boolean\" ||\n aObject === null ||\n aObject === undefined ||\n aObject instanceof Uint8Array\n ) {\n return aObject;\n }\n if (aObject instanceof ArrayBuffer) {\n return {\n _rtype: \"memoryview\",\n _rvalue: new Uint8Array(aObject),\n };\n }\n // Reuse the remote object\n if (aObject.__rpc_object__) {\n return aObject.__rpc_object__;\n }\n\n let bObject;\n\n // skip if already encoded\n if (aObject.constructor instanceof Object && aObject._rtype) {\n // make sure the interface functions are encoded\n const temp = aObject._rtype;\n delete aObject._rtype;\n bObject = await this._encode(aObject, session_id, local_workspace);\n bObject._rtype = temp;\n return bObject;\n }\n\n if (typeof aObject === \"function\") {\n if (this._method_annotations.has(aObject)) {\n let annotation = this._method_annotations.get(aObject);\n bObject = {\n _rtype: \"method\",\n _rtarget: this._client_id,\n _rmethod: annotation.method_id,\n _rpromise: true,\n };\n } else {\n assert(typeof session_id === \"string\");\n let object_id;\n if (aObject.__name__) {\n object_id = `${randId()}-${aObject.__name__}`;\n } else {\n object_id = randId();\n }\n bObject = {\n _rtype: \"method\",\n _rtarget: this._client_id,\n _rmethod: `${session_id}.${object_id}`,\n _rpromise: true,\n };\n let store = this._get_session_store(session_id, true);\n assert(\n store !== null,\n `Failed to create session store ${session_id} due to invalid parent`,\n );\n store[object_id] = aObject;\n }\n bObject._rdoc = aObject.__doc__;\n if (!bObject._rdoc) {\n try {\n const funcInfo = getFunctionInfo(aObject);\n if (funcInfo && !bObject._rdoc) {\n bObject._rdoc = `${funcInfo.doc}`;\n }\n } catch (e) {\n console.error(\"Failed to extract function docstring:\", aObject);\n }\n }\n bObject._rschema = aObject.__schema__;\n return bObject;\n }\n const isarray = Array.isArray(aObject);\n\n for (let tp of Object.keys(this._codecs)) {\n const codec = this._codecs[tp];\n if (codec.encoder && aObject instanceof codec.type) {\n // TODO: what if multiple encoders found\n let encodedObj = await Promise.resolve(codec.encoder(aObject));\n if (encodedObj && !encodedObj._rtype) encodedObj._rtype = codec.name;\n // encode the functions in the interface object\n if (typeof encodedObj === \"object\") {\n const temp = encodedObj._rtype;\n delete encodedObj._rtype;\n encodedObj = await this._encode(\n encodedObj,\n session_id,\n local_workspace,\n );\n encodedObj._rtype = temp;\n }\n bObject = encodedObj;\n return bObject;\n }\n }\n\n if (\n /*global tf*/\n typeof tf !== \"undefined\" &&\n tf.Tensor &&\n aObject instanceof tf.Tensor\n ) {\n const v_buffer = aObject.dataSync();\n bObject = {\n _rtype: \"ndarray\",\n _rvalue: new Uint8Array(v_buffer.buffer),\n _rshape: aObject.shape,\n _rdtype: aObject.dtype,\n };\n } else if (\n /*global nj*/\n typeof nj !== \"undefined\" &&\n nj.NdArray &&\n aObject instanceof nj.NdArray\n ) {\n const dtype = typedArrayToDtype(aObject.selection.data);\n bObject = {\n _rtype: \"ndarray\",\n _rvalue: new Uint8Array(aObject.selection.data.buffer),\n _rshape: aObject.shape,\n _rdtype: dtype,\n };\n } else if (aObject instanceof Error) {\n console.error(aObject);\n bObject = {\n _rtype: \"error\",\n _rvalue: aObject.toString(),\n _rtrace: aObject.stack,\n };\n }\n // send objects supported by structure clone algorithm\n // https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\n else if (\n aObject !== Object(aObject) ||\n aObject instanceof Boolean ||\n aObject instanceof String ||\n aObject instanceof Date ||\n aObject instanceof RegExp ||\n aObject instanceof ImageData ||\n (typeof FileList !== \"undefined\" && aObject instanceof FileList) ||\n (typeof FileSystemDirectoryHandle !== \"undefined\" &&\n aObject instanceof FileSystemDirectoryHandle) ||\n (typeof FileSystemFileHandle !== \"undefined\" &&\n aObject instanceof FileSystemFileHandle) ||\n (typeof FileSystemHandle !== \"undefined\" &&\n aObject instanceof FileSystemHandle) ||\n (typeof FileSystemWritableFileStream !== \"undefined\" &&\n aObject instanceof FileSystemWritableFileStream)\n ) {\n bObject = aObject;\n // TODO: avoid object such as DynamicPlugin instance.\n } else if (aObject instanceof Blob) {\n let _current_pos = 0;\n async function read(length) {\n let blob;\n if (length) {\n blob = aObject.slice(_current_pos, _current_pos + length);\n } else {\n blob = aObject.slice(_current_pos);\n }\n const ret = new Uint8Array(await blob.arrayBuffer());\n _current_pos = _current_pos + ret.byteLength;\n return ret;\n }\n function seek(pos) {\n _current_pos = pos;\n }\n bObject = {\n _rtype: \"iostream\",\n _rnative: \"js:blob\",\n type: aObject.type,\n name: aObject.name,\n size: aObject.size,\n path: aObject._path || aObject.webkitRelativePath,\n read: await this._encode(read, session_id, local_workspace),\n seek: await this._encode(seek, session_id, local_workspace),\n };\n } else if (aObject instanceof ArrayBufferView) {\n const dtype = typedArrayToDtype(aObject);\n bObject = {\n _rtype: \"typedarray\",\n _rvalue: new Uint8Array(aObject.buffer),\n _rdtype: dtype,\n };\n } else if (aObject instanceof DataView) {\n bObject = {\n _rtype: \"memoryview\",\n _rvalue: new Uint8Array(aObject.buffer),\n };\n } else if (aObject instanceof Set) {\n bObject = {\n _rtype: \"set\",\n _rvalue: await this._encode(\n Array.from(aObject),\n session_id,\n local_workspace,\n ),\n };\n } else if (aObject instanceof Map) {\n bObject = {\n _rtype: \"orderedmap\",\n _rvalue: await this._encode(\n Array.from(aObject),\n session_id,\n local_workspace,\n ),\n };\n } else if (\n aObject.constructor instanceof Object ||\n Array.isArray(aObject)\n ) {\n bObject = isarray ? [] : {};\n const keys = Object.keys(aObject);\n for (let k of keys) {\n bObject[k] = await this._encode(\n aObject[k],\n session_id,\n local_workspace,\n );\n }\n } else {\n throw `hypha-rpc: Unsupported data type: ${aObject}, you can register a custom codec to encode/decode the object.`;\n }\n\n if (!bObject) {\n throw new Error(\"Failed to encode object\");\n }\n return bObject;\n }\n\n async decode(aObject) {\n return await this._decode(aObject);\n }\n\n async _decode(\n aObject,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n ) {\n if (!aObject) {\n return aObject;\n }\n let bObject;\n if (aObject._rtype) {\n if (\n this._codecs[aObject._rtype] &&\n this._codecs[aObject._rtype].decoder\n ) {\n const temp = aObject._rtype;\n delete aObject._rtype;\n aObject = await this._decode(\n aObject,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n aObject._rtype = temp;\n\n bObject = await Promise.resolve(\n this._codecs[aObject._rtype].decoder(aObject),\n );\n } else if (aObject._rtype === \"method\") {\n bObject = this._generate_remote_method(\n aObject,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n } else if (aObject._rtype === \"ndarray\") {\n /*global nj tf*/\n //create build array/tensor if used in the plugin\n if (typeof nj !== \"undefined\" && nj.array) {\n if (Array.isArray(aObject._rvalue)) {\n aObject._rvalue = aObject._rvalue.reduce(_appendBuffer);\n }\n bObject = nj\n .array(new Uint8(aObject._rvalue), aObject._rdtype)\n .reshape(aObject._rshape);\n } else if (typeof tf !== \"undefined\" && tf.Tensor) {\n if (Array.isArray(aObject._rvalue)) {\n aObject._rvalue = aObject._rvalue.reduce(_appendBuffer);\n }\n const arraytype = dtypeToTypedArray[aObject._rdtype];\n bObject = tf.tensor(\n new arraytype(aObject._rvalue),\n aObject._rshape,\n aObject._rdtype,\n );\n } else {\n //keep it as regular if transfered to the main app\n bObject = aObject;\n }\n } else if (aObject._rtype === \"error\") {\n bObject = new Error(\n \"RemoteError: \" + aObject._rvalue + \"\\n\" + (aObject._rtrace || \"\"),\n );\n } else if (aObject._rtype === \"typedarray\") {\n const arraytype = dtypeToTypedArray[aObject._rdtype];\n if (!arraytype)\n throw new Error(\"unsupported dtype: \" + aObject._rdtype);\n const buffer = aObject._rvalue.buffer.slice(\n aObject._rvalue.byteOffset,\n aObject._rvalue.byteOffset + aObject._rvalue.byteLength,\n );\n bObject = new arraytype(buffer);\n } else if (aObject._rtype === \"memoryview\") {\n bObject = aObject._rvalue.buffer.slice(\n aObject._rvalue.byteOffset,\n aObject._rvalue.byteOffset + aObject._rvalue.byteLength,\n ); // ArrayBuffer\n } else if (aObject._rtype === \"iostream\") {\n if (aObject._rnative === \"js:blob\") {\n const read = await this._generate_remote_method(\n aObject.read,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n const bytes = await read();\n bObject = new Blob([bytes], {\n type: aObject.type,\n name: aObject.name,\n });\n } else {\n bObject = {};\n for (let k of Object.keys(aObject)) {\n if (!k.startsWith(\"_\")) {\n bObject[k] = await this._decode(\n aObject[k],\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n }\n }\n }\n bObject[\"__rpc_object__\"] = aObject;\n } else if (aObject._rtype === \"orderedmap\") {\n bObject = new Map(\n await this._decode(\n aObject._rvalue,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n ),\n );\n } else if (aObject._rtype === \"set\") {\n bObject = new Set(\n await this._decode(\n aObject._rvalue,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n ),\n );\n } else {\n const temp = aObject._rtype;\n delete aObject._rtype;\n bObject = await this._decode(\n aObject,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n bObject._rtype = temp;\n }\n } else if (aObject.constructor === Object || Array.isArray(aObject)) {\n const isarray = Array.isArray(aObject);\n bObject = isarray ? [] : {};\n for (let k of Object.keys(aObject)) {\n if (isarray || aObject.hasOwnProperty(k)) {\n const v = aObject[k];\n bObject[k] = await this._decode(\n v,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n }\n }\n } else {\n bObject = aObject;\n }\n if (bObject === undefined) {\n throw new Error(\"Failed to decode object\");\n }\n return bObject;\n }\n}\n","export function randId() {\n return Math.random().toString(36).substr(2, 10) + new Date().getTime();\n}\n\nexport function toCamelCase(str) {\n // Check if the string is already in camelCase\n if (!str.includes(\"_\")) {\n return str;\n }\n // Convert from snake_case to camelCase\n return str.replace(/_./g, (match) => match[1].toUpperCase());\n}\n\nexport function toSnakeCase(str) {\n // Convert from camelCase to snake_case\n return str.replace(/([A-Z])/g, \"_$1\").toLowerCase();\n}\n\nexport function convertCase(obj, caseType) {\n if (typeof obj !== \"object\" || obj === null || !caseType) {\n return obj; // Return the value if obj is not an object\n }\n\n const newObj = Array.isArray(obj) ? [] : {};\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n const value = obj[key];\n const camelKey = toCamelCase(key);\n const snakeKey = toSnakeCase(key);\n\n if (caseType === \"camel\") {\n newObj[camelKey] = convertCase(value, caseType);\n if (typeof value === \"function\") {\n newObj[camelKey].__name__ = camelKey;\n if (value.__schema__) {\n newObj[camelKey].__schema__ = { ...value.__schema__ };\n newObj[camelKey].__schema__.name = camelKey;\n }\n }\n } else if (caseType === \"snake\") {\n newObj[snakeKey] = convertCase(value, caseType);\n if (typeof value === \"function\") {\n newObj[snakeKey].__name__ = snakeKey;\n if (value.__schema__) {\n newObj[snakeKey].__schema__ = { ...value.__schema__ };\n newObj[snakeKey].__schema__.name = snakeKey;\n }\n }\n } else {\n // TODO handle schema for camel + snake\n if (caseType.includes(\"camel\")) {\n newObj[camelKey] = convertCase(value, \"camel\");\n }\n if (caseType.includes(\"snake\")) {\n newObj[snakeKey] = convertCase(value, \"snake\");\n }\n }\n }\n }\n\n return newObj;\n}\n\nexport const dtypeToTypedArray = {\n int8: Int8Array,\n int16: Int16Array,\n int32: Int32Array,\n uint8: Uint8Array,\n uint16: Uint16Array,\n uint32: Uint32Array,\n float32: Float32Array,\n float64: Float64Array,\n array: Array,\n};\n\nexport async function loadRequirementsInWindow(requirements) {\n function _importScript(url) {\n //url is URL of external file, implementationCode is the code\n //to be called from the file, location is the location to\n //insert the <script> element\n return new Promise((resolve, reject) => {\n var scriptTag = document.createElement(\"script\");\n scriptTag.src = url;\n scriptTag.type = \"text/javascript\";\n scriptTag.onload = resolve;\n scriptTag.onreadystatechange = function () {\n if (this.readyState === \"loaded\" || this.readyState === \"complete\") {\n resolve();\n }\n };\n scriptTag.onerror = reject;\n document.head.appendChild(scriptTag);\n });\n }\n\n // support importScripts outside web worker\n async function importScripts() {\n var args = Array.prototype.slice.call(arguments),\n len = args.length,\n i = 0;\n for (; i < len; i++) {\n await _importScript(args[i]);\n }\n }\n\n if (\n requirements &&\n (Array.isArray(requirements) || typeof requirements === \"string\")\n ) {\n try {\n var link_node;\n requirements =\n typeof requirements === \"string\" ? [requirements] : requirements;\n if (Array.isArray(requirements)) {\n for (var i = 0; i < requirements.length; i++) {\n if (\n requirements[i].toLowerCase().endsWith(\".css\") ||\n requirements[i].startsWith(\"css:\")\n ) {\n if (requirements[i].startsWith(\"css:\")) {\n requirements[i] = requirements[i].slice(4);\n }\n link_node = document.createElement(\"link\");\n link_node.rel = \"stylesheet\";\n link_node.href = requirements[i];\n document.head.appendChild(link_node);\n } else if (\n requirements[i].toLowerCase().endsWith(\".mjs\") ||\n requirements[i].startsWith(\"mjs:\")\n ) {\n // import esmodule\n if (requirements[i].startsWith(\"mjs:\")) {\n requirements[i] = requirements[i].slice(4);\n }\n await import(/* webpackIgnore: true */ requirements[i]);\n } else if (\n requirements[i].toLowerCase().endsWith(\".js\") ||\n requirements[i].startsWith(\"js:\")\n ) {\n if (requirements[i].startsWith(\"js:\")) {\n requirements[i] = requirements[i].slice(3);\n }\n await importScripts(requirements[i]);\n } else if (requirements[i].startsWith(\"http\")) {\n await importScripts(requirements[i]);\n } else if (requirements[i].startsWith(\"cache:\")) {\n //ignore cache\n } else {\n console.log(\"Unprocessed requirements url: \" + requirements[i]);\n }\n }\n } else {\n throw \"unsupported requirements definition\";\n }\n } catch (e) {\n throw \"failed to import required scripts: \" + requirements.toString();\n }\n }\n}\n\nexport async function loadRequirementsInWebworker(requirements) {\n if (\n requirements &&\n (Array.isArray(requirements) || typeof requirements === \"string\")\n ) {\n try {\n if (!Array.isArray(requirements)) {\n requirements = [requirements];\n }\n for (var i = 0; i < requirements.length; i++) {\n if (\n requirements[i].toLowerCase().endsWith(\".css\") ||\n requirements[i].startsWith(\"css:\")\n ) {\n throw \"unable to import css in a webworker\";\n } else if (\n requirements[i].toLowerCase().endsWith(\".js\") ||\n requirements[i].startsWith(\"js:\")\n ) {\n if (requirements[i].startsWith(\"js:\")) {\n requirements[i] = requirements[i].slice(3);\n }\n importScripts(requirements[i]);\n } else if (requirements[i].startsWith(\"http\")) {\n importScripts(requirements[i]);\n } else if (requirements[i].startsWith(\"cache:\")) {\n //ignore cache\n } else {\n console.log(\"Unprocessed requirements url: \" + requirements[i]);\n }\n }\n } catch (e) {\n throw \"failed to import required scripts: \" + requirements.toString();\n }\n }\n}\n\nexport function loadRequirements(requirements) {\n if (\n typeof WorkerGlobalScope !== \"undefined\" &&\n self instanceof WorkerGlobalScope\n ) {\n return loadRequirementsInWebworker(requirements);\n } else {\n return loadRequirementsInWindow(requirements);\n }\n}\n\nexport function normalizeConfig(config) {\n config.version = config.version || \"0.1.0\";\n config.description =\n config.description || `[TODO: add description for ${config.name} ]`;\n config.type = config.type || \"rpc-window\";\n config.id = config.id || randId();\n config.target_origin = config.target_origin || \"*\";\n config.allow_execution = config.allow_execution || false;\n // remove functions\n config = Object.keys(config).reduce((p, c) => {\n if (typeof config[c] !== \"function\") p[c] = config[c];\n return p;\n }, {});\n return config;\n}\nexport const typedArrayToDtypeMapping = {\n Int8Array: \"int8\",\n Int16Array: \"int16\",\n Int32Array: \"int32\",\n Uint8Array: \"uint8\",\n Uint16Array: \"uint16\",\n Uint32Array: \"uint32\",\n Float32Array: \"float32\",\n Float64Array: \"float64\",\n Array: \"array\",\n};\n\nconst typedArrayToDtypeKeys = [];\nfor (const arrType of Object.keys(typedArrayToDtypeMapping)) {\n typedArrayToDtypeKeys.push(eval(arrType));\n}\n\nexport function typedArrayToDtype(obj) {\n let dtype = typedArrayToDtypeMapping[obj.constructor.name];\n if (!dtype) {\n const pt = Object.getPrototypeOf(obj);\n for (const arrType of typedArrayToDtypeKeys) {\n if (pt instanceof arrType) {\n dtype = typedArrayToDtypeMapping[arrType.name];\n break;\n }\n }\n }\n return dtype;\n}\n\nfunction cacheUrlInServiceWorker(url) {\n return new Promise(function (resolve, reject) {\n const message = {\n command: \"add\",\n url: url,\n };\n if (!navigator.serviceWorker || !navigator.serviceWorker.register) {\n reject(\"Service worker is not supported.\");\n return;\n }\n const messageChannel = new MessageChannel();\n messageChannel.port1.onmessage = function (event) {\n if (event.data && event.data.error) {\n reject(event.data.error);\n } else {\n resolve(event.data && event.data.result);\n }\n };\n\n if (navigator.serviceWorker && navigator.serviceWorker.controller) {\n navigator.serviceWorker.controller.postMessage(message, [\n messageChannel.port2,\n ]);\n } else {\n reject(\"Service worker controller is not available\");\n }\n });\n}\n\nexport async function cacheRequirements(requirements) {\n requirements = requirements || [];\n if (!Array.isArray(requirements)) {\n requirements = [requirements];\n }\n for (let req of requirements) {\n //remove prefix\n if (req.startsWith(\"js:\")) req = req.slice(3);\n if (req.startsWith(\"css:\")) req = req.slice(4);\n if (req.startsWith(\"cache:\")) req = req.slice(6);\n if (!req.startsWith(\"http\")) continue;\n\n await cacheUrlInServiceWorker(req).catch((e) => {\n console.error(e);\n });\n }\n}\n\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || \"Assertion failed\");\n }\n}\n\n//#Source https://bit.ly/2neWfJ2\nexport function urlJoin(...args) {\n return args\n .join(\"/\")\n .replace(/[\\/]+/g, \"/\")\n .replace(/^(.+):\\//, \"$1://\")\n .replace(/^file:/, \"file:/\")\n .replace(/\\/(\\?|&|#[^!])/g, \"$1\")\n .replace(/\\?/g, \"&\")\n .replace(\"&\", \"?\");\n}\n\nexport function waitFor(prom, time, error) {\n let timer;\n return Promise.race([\n prom,\n new Promise(\n (_r, rej) =>\n (timer = setTimeout(() => {\n rej(error || \"Timeout Error\");\n }, time * 1000)),\n ),\n ]).finally(() => clearTimeout(timer));\n}\n\nexport class MessageEmitter {\n constructor(debug) {\n this._event_handlers = {};\n this._once_handlers = {};\n this._debug = debug;\n }\n emit() {\n throw new Error(\"emit is not implemented\");\n }\n on(event, handler) {\n if (!this._event_handlers[event]) {\n this._event_handlers[event] = [];\n }\n this._event_handlers[event].push(handler);\n }\n once(event, handler) {\n handler.___event_run_once = true;\n this.on(event, handler);\n }\n off(event, handler) {\n if (!event && !handler) {\n // remove all events handlers\n this._event_handlers = {};\n } else if (event && !handler) {\n // remove all hanlders for the event\n if (this._event_handlers[event]) this._event_handlers[event] = [];\n } else {\n // remove a specific handler\n if (this._event_handlers[event]) {\n const idx = this._event_handlers[event].indexOf(handler);\n if (idx >= 0) {\n this._event_handlers[event].splice(idx, 1);\n }\n }\n }\n }\n _fire(event, data) {\n if (this._event_handlers[event]) {\n var i = this._event_handlers[event].length;\n while (i--) {\n const handler = this._event_handlers[event][i];\n try {\n handler(data);\n } catch (e) {\n console.error(e);\n } finally {\n if (handler.___event_run_once) {\n this._event_handlers[event].splice(i, 1);\n }\n }\n }\n } else {\n if (this._debug) {\n console.warn(\"unhandled event\", event, data);\n }\n }\n }\n\n waitFor(event, timeout) {\n return new Promise((resolve, reject) => {\n const handler = (data) => {\n clearTimeout(timer);\n resolve(data);\n };\n this.once(event, handler);\n const timer = setTimeout(() => {\n this.off(event, handler);\n reject(new Error(\"Timeout\"));\n }, timeout);\n });\n }\n}\n","import { assert } from \".\";\n\nexport function schemaFunction(\n func,\n { schema_type = \"auto\", name = null, description = null, parameters = null },\n) {\n if (!func || typeof func !== \"function\") {\n throw Error(\"func should be a function\");\n }\n assert(schema_type === \"auto\", \"schema_type should be auto\");\n assert(name, \"name should not be null\");\n assert(\n parameters && parameters.type === \"object\",\n \"parameters should be an object\",\n );\n func.__schema__ = {\n name: name,\n description: description,\n parameters: parameters || [],\n };\n return func;\n}\n","import { RPC } from \"./rpc.js\";\nimport { assert, randId } from \"./utils\";\nimport { schemaFunction } from \"./utils/schema.js\";\n\nclass WebRTCConnection {\n constructor(channel) {\n this._data_channel = channel;\n this._handle_message = null;\n this._reconnection_token = null;\n this._handle_disconnected = null;\n this._handle_connected = () => {};\n this.manager_id = null;\n this._data_channel.onopen = async () => {\n this._handle_connected &&\n this._handle_connected({ channel: this._data_channel });\n };\n this._data_channel.onmessage = async (event) => {\n let data = event.data;\n if (data instanceof Blob) {\n data = await data.arrayBuffer();\n }\n this._handle_message(data);\n };\n const self = this;\n this._data_channel.onclose = function () {\n if (this._handle_disconnected) this._handle_disconnected(\"closed\");\n console.log(\"websocket closed\");\n self._data_channel = null;\n };\n }\n\n on_disconnected(handler) {\n this._handle_disconnected = handler;\n }\n\n on_connected(handler) {\n this._handle_connected = handler;\n }\n\n on_message(handler) {\n assert(handler, \"handler is required\");\n this._handle_message = handler;\n }\n\n async emit_message(data) {\n assert(this._handle_message, \"No handler for message\");\n try {\n this._data_channel.send(data);\n } catch (exp) {\n // data = msgpack_unpackb(data);\n console.error(`Failed to send data, error: ${exp}`);\n throw exp;\n }\n }\n\n async disconnect(reason) {\n this._data_channel = null;\n console.info(`data channel connection disconnected (${reason})`);\n }\n}\n\nasync function _setupRPC(config) {\n assert(config.channel, \"No channel provided\");\n assert(config.workspace, \"No workspace provided\");\n const channel = config.channel;\n const clientId = config.client_id || randId();\n const connection = new WebRTCConnection(channel);\n config.context = config.context || {};\n config.context.connection_type = \"webrtc\";\n const rpc = new RPC(connection, {\n client_id: clientId,\n default_context: config.context,\n name: config.name,\n method_timeout: config.method_timeout || 10.0,\n workspace: config.workspace,\n });\n return rpc;\n}\n\nasync function _createOffer(params, server, config, onInit, context) {\n config = config || {};\n let offer = new RTCSessionDescription({\n sdp: params.sdp,\n type: params.type,\n });\n\n let pc = new RTCPeerConnection({\n iceServers: config.ice_servers || [\n { urls: [\"stun:stun.l.google.com:19302\"] },\n ],\n sdpSemantics: \"unified-plan\",\n });\n\n if (server) {\n pc.addEventListener(\"datachannel\", async (event) => {\n const channel = event.channel;\n let ctx = null;\n if (context && context.user) ctx = { user: context.user, ws: context.ws };\n const rpc = await _setupRPC({\n channel: channel,\n client_id: channel.label,\n workspace: server.config.workspace,\n context: ctx,\n });\n // Map all the local services to the webrtc client\n rpc._services = server.rpc._services;\n });\n }\n\n if (onInit) {\n await onInit(pc);\n }\n\n await pc.setRemoteDescription(offer);\n\n let answer = await pc.createAnswer();\n await pc.setLocalDescription(answer);\n\n return {\n sdp: pc.localDescription.sdp,\n type: pc.localDescription.type,\n workspace: server.config.workspace,\n };\n}\n\nasync function getRTCService(server, service_id, config) {\n config = config || {};\n config.peer_id = config.peer_id || randId();\n\n const pc = new RTCPeerConnection({\n iceServers: config.ice_servers || [\n { urls: [\"stun:stun.l.google.com:19302\"] },\n ],\n sdpSemantics: \"unified-plan\",\n });\n\n return new Promise(async (resolve, reject) => {\n try {\n pc.addEventListener(\n \"connectionstatechange\",\n () => {\n if (pc.connectionState === \"failed\") {\n pc.close();\n reject(new Error(\"WebRTC Connection failed\"));\n } else if (pc.connectionState === \"closed\") {\n reject(new Error(\"WebRTC Connection closed\"));\n } else {\n console.log(\"WebRTC Connection state: \", pc.connectionState);\n }\n },\n false,\n );\n\n if (config.on_init) {\n await config.on_init(pc);\n delete config.on_init;\n }\n let channel = pc.createDataChannel(config.peer_id, { ordered: true });\n channel.binaryType = \"arraybuffer\";\n const offer = await pc.createOffer();\n await pc.setLocalDescription(offer);\n const svc = await server.getService(service_id);\n const answer = await svc.offer({\n sdp: pc.localDescription.sdp,\n type: pc.localDescription.type,\n });\n\n channel.onopen = () => {\n config.channel = channel;\n config.workspace = answer.workspace;\n // Wait for the channel to be open before returning the rpc\n // This is needed for safari to work\n setTimeout(async () => {\n const rpc = await _setupRPC(config);\n pc.rpc = rpc;\n async function get_service(name) {\n assert(\n !name.includes(\":\"),\n \"WebRTC service name should not contain ':'\",\n );\n assert(\n !name.includes(\"/\"),\n \"WebRTC service name should not contain '/'\",\n );\n return await rpc.get_remote_service(\n config.workspace + \"/\" + config.peer_id + \":\" + name,\n );\n }\n async function disconnect() {\n await rpc.disconnect();\n pc.close();\n }\n pc.getService = schemaFunction(get_service, {\n name: \"get_service\",\n description: \"Get a remote service via webrtc\",\n parameters: {\n type: \"object\",\n properties: {\n name: { type: \"string\", description: \"Name of the service\" },\n },\n },\n });\n pc.disconnect = schemaFunction(disconnect, {\n name: \"disconnect\",\n description: \"Disconnect from the webrtc connection via webrtc\",\n parameters: { type: \"object\", properties: {} },\n });\n pc.registerCodec = schemaFunction(rpc.register_codec, {\n name: \"registerCodec\",\n description: \"Register a codec for the webrtc connection\",\n parameters: {\n type: \"object\",\n properties: {\n codec: {\n type: \"object\",\n description: \"Codec to register\",\n properties: {\n name: { type: \"string\" },\n type: {},\n encoder: { type: \"function\" },\n decoder: { type: \"function\" },\n },\n },\n },\n },\n });\n resolve(pc);\n }, 500);\n };\n\n channel.onclose = () => reject(new Error(\"Data channel closed\"));\n\n await pc.setRemoteDescription(\n new RTCSessionDescription({\n sdp: answer.sdp,\n type: answer.type,\n }),\n );\n } catch (e) {\n reject(e);\n }\n });\n}\n\nasync function registerRTCService(server, service_id, config) {\n config = config || {\n visibility: \"protected\",\n require_context: true,\n };\n const onInit = config.on_init;\n delete config.on_init;\n return await server.registerService({\n id: service_id,\n config,\n offer: (params, context) =>\n _createOffer(params, server, config, onInit, context),\n });\n}\n\nexport { getRTCService, registerRTCService };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { RPC, API_VERSION } from \"./rpc.js\";\nimport { assert, randId, waitFor, loadRequirements } from \"./utils\";\nimport { schemaFunction } from \"./utils/schema.js\";\nimport { getRTCService, registerRTCService } from \"./webrtc-client.js\";\n\nexport { RPC, API_VERSION, schemaFunction };\nexport { loadRequirements };\nexport { getRTCService, registerRTCService };\n\nconst MAX_RETRY = 1000000;\n\nclass WebsocketRPCConnection {\n constructor(\n server_url,\n client_id,\n workspace,\n token,\n reconnection_token = null,\n timeout = 60,\n WebSocketClass = null,\n ) {\n assert(server_url && client_id, \"server_url and client_id are required\");\n this._server_url = server_url;\n this._client_id = client_id;\n this._workspace = workspace;\n this._token = token;\n this._reconnection_token = reconnection_token;\n this._websocket = null;\n this._handle_message = null;\n this._handle_connected = null; // Connection open event handler\n this._handle_disconnected = null; // Disconnection event handler\n this._timeout = timeout;\n this._WebSocketClass = WebSocketClass || WebSocket; // Allow overriding the WebSocket class\n this._closed = false;\n this._legacy_auth = null;\n this.connection_info = null;\n this._enable_reconnect = false;\n this.manager_id = null;\n }\n\n on_message(handler) {\n assert(handler, \"handler is required\");\n this._handle_message = handler;\n }\n\n on_connected(handler) {\n this._handle_connected = handler;\n }\n\n on_disconnected(handler) {\n this._handle_disconnected = handler;\n }\n\n async _attempt_connection(server_url, attempt_fallback = true) {\n return new Promise((resolve, reject) => {\n this._legacy_auth = false;\n const websocket = new this._WebSocketClass(server_url);\n websocket.binaryType = \"arraybuffer\";\n\n websocket.onopen = () => {\n console.info(\"WebSocket connection established\");\n resolve(websocket);\n };\n\n websocket.onerror = (event) => {\n console.error(\"WebSocket connection error:\", event);\n reject(new Error(`ConnectionAbortedError: ${event}`));\n };\n\n websocket.onclose = (event) => {\n if (event.code === 1003 && attempt_fallback) {\n console.info(\n \"Received 1003 error, attempting connection with query parameters.\",\n );\n this._legacy_auth = true;\n this._attempt_connection_with_query_params(server_url)\n .then(resolve)\n .catch(reject);\n } else if (this._handle_disconnected) {\n this._handle_disconnected(event.reason);\n }\n };\n });\n }\n\n async _attempt_connection_with_query_params(server_url) {\n // Initialize an array to hold parts of the query string\n const queryParamsParts = [];\n\n // Conditionally add each parameter if it has a non-empty value\n if (this._client_id)\n queryParamsParts.push(`client_id=${encodeURIComponent(this._client_id)}`);\n if (this._workspace)\n queryParamsParts.push(`workspace=${encodeURIComponent(this._workspace)}`);\n if (this._token)\n queryParamsParts.push(`token=${encodeURIComponent(this._token)}`);\n if (this._reconnection_token)\n queryParamsParts.push(\n `reconnection_token=${encodeURIComponent(this._reconnection_token)}`,\n );\n\n // Join the parts with '&' to form the final query string, prepend '?' if there are any parameters\n const queryString =\n queryParamsParts.length > 0 ? `?${queryParamsParts.join(\"&\")}` : \"\";\n\n // Construct the full URL by appending the query string if it exists\n const full_url = server_url + queryString;\n\n return await this._attempt_connection(full_url, false);\n }\n\n _establish_connection() {\n return new Promise((resolve, reject) => {\n this._websocket.onmessage = (event) => {\n const data = event.data;\n const first_message = JSON.parse(data);\n if (first_message.type == \"connection_info\") {\n this.connection_info = first_message;\n if (this._workspace) {\n assert(\n this.connection_info.workspace === this._workspace,\n `Connected to the wrong workspace: ${this.connection_info.workspace}, expected: ${this._workspace}`,\n );\n }\n if (this.connection_info.reconnection_token) {\n this._reconnection_token = this.connection_info.reconnection_token;\n }\n this.manager_id = this.connection_info.manager_id || null;\n console.log(\n `Successfully connected to the server, workspace: ${this.connection_info.workspace}, manager_id: ${this.manager_id}`,\n );\n if (this.connection_info.announcement) {\n console.log(`${this.connection_info.announcement}`);\n }\n resolve(this.connection_info);\n } else if (first_message.type == \"error\") {\n const error = \"ConnectionAbortedError: \" + first_message.message;\n console.error(\"Failed to connect, \" + error);\n reject(new Error(error));\n return;\n } else {\n console.error(\n \"ConnectionAbortedError: Unexpected message received from the server:\",\n data,\n );\n reject(\n new Error(\n \"ConnectionAbortedError: Unexpected message received from the server\",\n ),\n );\n return;\n }\n };\n });\n }\n\n async open() {\n console.log(\n \"Creating a new websocket connection to\",\n this._server_url.split(\"?\")[0],\n );\n try {\n this._websocket = await this._attempt_connection(this._server_url);\n if (this._legacy_auth) {\n throw new Error(\n \"NotImplementedError: Legacy authentication is not supported\",\n );\n }\n // Send authentication info as the first message if connected without query params\n const authInfo = JSON.stringify({\n client_id: this._client_id,\n workspace: this._workspace,\n token: this._token,\n reconnection_token: this._reconnection_token,\n });\n this._websocket.send(authInfo);\n // Wait for the first message from the server\n await waitFor(\n this._establish_connection(),\n this._timeout,\n \"Failed to receive the first message from the server\",\n );\n // Listen to messages from the server\n this._enable_reconnect = true;\n this._closed = false;\n this._websocket.onmessage = (event) => {\n this._handle_message(event.data);\n };\n\n this._websocket.onclose = this._handle_close.bind(this);\n\n if (this._handle_connected) {\n this._handle_connected(this.connection_info);\n }\n return this.connection_info;\n } catch (error) {\n console.error(\n \"Failed to connect to\",\n this._server_url.split(\"?\")[0],\n error,\n );\n throw error;\n }\n }\n\n _handle_close(event) {\n if (\n !this._closed &&\n this._websocket &&\n this._websocket.readyState === WebSocket.CLOSED\n ) {\n if ([1000, 1001].includes(event.code)) {\n console.info(\n `Websocket connection closed (code: ${event.code}): ${event.reason}`,\n );\n if (this._handle_disconnected) {\n this._handle_disconnected(event.reason);\n }\n this._closed = true;\n } else if (this._enable_reconnect) {\n console.warn(\n \"Websocket connection closed unexpectedly (code: %s): %s\",\n event.code,\n event.reason,\n );\n let retry = 0;\n const reconnect = async () => {\n try {\n console.warn(\n `Reconnecting to ${this._server_url.split(\"?\")[0]} (attempt #${retry})`,\n );\n await this.open();\n console.warn(\n `Successfully reconnected to server ${this._server_url}`,\n );\n } catch (e) {\n if (`${e}`.includes(\"ConnectionAbortedError:\")) {\n console.warn(\"Failed to reconnect, connection aborted:\", e);\n return;\n } else if (`${e}`.includes(\"NotImplementedError:\")) {\n console.error(\n `${e}\\nIt appears that you are trying to connect to a hypha server that is older than 0.20.0, please upgrade the hypha server or use the websocket client in imjoy-rpc(https://www.npmjs.com/package/imjoy-rpc) instead`,\n );\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 1000));\n if (\n this._websocket &&\n this._websocket.readyState === WebSocket.CONNECTED\n ) {\n return;\n }\n retry += 1;\n if (retry < MAX_RETRY) {\n await reconnect();\n } else {\n console.error(\"Failed to reconnect after\", MAX_RETRY, \"attempts\");\n }\n }\n };\n reconnect();\n }\n } else {\n if (this._handle_disconnected) {\n this._handle_disconnected(event.reason);\n }\n }\n }\n\n async emit_message(data) {\n if (this._closed) {\n throw new Error(\"Connection is closed\");\n }\n if (!this._websocket || this._websocket.readyState !== WebSocket.OPEN) {\n await this.open();\n }\n try {\n this._websocket.send(data);\n } catch (exp) {\n console.error(`Failed to send data, error: ${exp}`);\n throw exp;\n }\n }\n\n disconnect(reason) {\n this._closed = true;\n if (this._websocket && this._websocket.readyState === WebSocket.OPEN) {\n this._websocket.close(1000, reason);\n }\n console.info(`WebSocket connection disconnected (${reason})`);\n }\n}\n\nfunction normalizeServerUrl(server_url) {\n if (!server_url) throw new Error(\"server_url is required\");\n if (server_url.startsWith(\"http://\")) {\n server_url =\n server_url.replace(\"http://\", \"ws://\").replace(/\\/$/, \"\") + \"/ws\";\n } else if (server_url.startsWith(\"https://\")) {\n server_url =\n server_url.replace(\"https://\", \"wss://\").replace(/\\/$/, \"\") + \"/ws\";\n }\n return server_url;\n}\n\nexport async function login(config) {\n const service_id = config.login_service_id || \"public/*:hypha-login\";\n const timeout = config.login_timeout || 60;\n const callback = config.login_callback;\n const profile = config.profile;\n\n const server = await connectToServer({\n name: \"initial login client\",\n server_url: config.server_url,\n });\n try {\n const svc = await server.getService(service_id);\n assert(svc, `Failed to get the login service: ${service_id}`);\n const context = await svc.start();\n if (callback) {\n await callback(context);\n } else {\n console.log(`Please open your browser and login at ${context.login_url}`);\n }\n return await svc.check(context.key, timeout, profile);\n } catch (error) {\n throw error;\n } finally {\n await server.disconnect();\n }\n}\n\nasync function webrtcGetService(\n wm,\n rtc_service_id,\n query,\n webrtc,\n webrtc_config,\n) {\n assert(\n [undefined, true, false, \"auto\"].includes(webrtc),\n \"webrtc must be true, false or 'auto'\",\n );\n // pass other arguments to get_service\n const otherArgs = Array.prototype.slice.call(arguments, 3);\n const svc = await wm.getService(query, ...otherArgs);\n if (webrtc === true || webrtc === \"auto\") {\n if (svc.id.includes(\":\") && svc.id.includes(\"/\")) {\n try {\n // Assuming that the client registered a webrtc service with the client_id + \"-rtc\"\n const peer = await getRTCService(wm, rtc_service_id, webrtc_config);\n const rtcSvc = await peer.get_service(svc.id.split(\":\")[1]);\n rtcSvc._webrtc = true;\n rtcSvc._peer = peer;\n rtcSvc._service = svc;\n return rtcSvc;\n } catch (e) {\n console.warn(\n \"Failed to get webrtc service, using websocket connection\",\n e,\n );\n }\n }\n if (webrtc === true) {\n throw new Error(\"Failed to get the service via webrtc\");\n }\n }\n return svc;\n}\n\nexport async function connectToServer(config) {\n if (config.server) {\n config.server_url = config.server_url || config.server.url;\n config.WebSocketClass =\n config.WebSocketClass || config.server.WebSocketClass;\n }\n let clientId = config.client_id;\n if (!clientId) {\n clientId = randId();\n config.client_id = clientId;\n }\n\n let server_url = normalizeServerUrl(config.server_url);\n\n let connection = new WebsocketRPCConnection(\n server_url,\n clientId,\n config.workspace,\n config.token,\n config.reconnection_token,\n config.method_timeout || 60,\n config.WebSocketClass,\n );\n const connection_info = await connection.open();\n assert(\n connection_info,\n \"Failed to connect to the server, no connection info obtained. This issue is most likely due to an outdated Hypha server version. Please use `imjoy-rpc` for compatibility, or upgrade the Hypha server to the latest version.\",\n );\n if (config.workspace && connection_info.workspace !== config.workspace) {\n throw new Error(\n `Connected to the wrong workspace: ${connection_info.workspace}, expected: ${config.workspace}`,\n );\n }\n const workspace = connection_info.workspace;\n const rpc = new RPC(connection, {\n client_id: clientId,\n workspace,\n default_context: { connection_type: \"websocket\" },\n name: config.name,\n method_timeout: config.method_timeout,\n app_id: config.app_id,\n });\n const wm = await rpc.get_manager_service(config.method_timeout, \"camel\");\n wm.rpc = rpc;\n\n async function _export(api) {\n api.id = \"default\";\n api.name = api.name || config.name || api.id;\n api.description = api.description || config.description;\n await rpc.register_service(api, true);\n }\n\n async function getApp(clientId) {\n clientId = clientId || \"*\";\n assert(!clientId.includes(\":\"), \"clientId should not contain ':'\");\n let workspace;\n if (clientId.includes(\"/\")) {\n [workspace, clientId] = clientId.split(\"/\");\n } else {\n workspace = connection_info.workspace;\n }\n const query = {\n workspace: workspace,\n client_id: clientId,\n service_id: \"default\",\n };\n return await wm.getService(query);\n }\n\n async function listApps(ws) {\n ws = ws || workspace;\n assert(!ws.includes(\":\"), \"workspace should not contain ':'\");\n assert(!ws.includes(\"/\"), \"workspace should not contain '/'\");\n const query = { workspace: ws, service_id: \"default\" };\n return await wm.listServices(query);\n }\n\n if (connection_info) {\n wm.config = Object.assign(wm.config, connection_info);\n }\n wm.export = schemaFunction(_export, {\n name: \"export\",\n description: \"Export the api.\",\n parameters: {\n properties: { api: { description: \"The api to export\", type: \"object\" } },\n required: [\"api\"],\n type: \"object\",\n },\n });\n wm.getApp = schemaFunction(getApp, {\n name: \"getApp\",\n description: \"Get the app.\",\n parameters: {\n properties: {\n clientId: { default: \"*\", description: \"The clientId\", type: \"string\" },\n },\n type: \"object\",\n },\n });\n wm.listApps = schemaFunction(listApps, {\n name: \"listApps\",\n description: \"List the apps.\",\n parameters: {\n properties: {\n workspace: {\n default: workspace,\n description: \"The workspace\",\n type: \"string\",\n },\n },\n type: \"object\",\n },\n });\n wm.disconnect = schemaFunction(rpc.disconnect.bind(rpc), {\n name: \"disconnect\",\n description: \"Disconnect from the server.\",\n parameters: { type: \"object\", properties: {}, required: [] },\n });\n wm.registerCodec = schemaFunction(rpc.register_codec.bind(rpc), {\n name: \"registerCodec\",\n description: \"Register a codec for the webrtc connection\",\n parameters: {\n type: \"object\",\n properties: {\n codec: {\n type: \"object\",\n description: \"Codec to register\",\n properties: {\n name: { type: \"string\" },\n type: {},\n encoder: { type: \"function\" },\n decoder: { type: \"function\" },\n },\n },\n },\n },\n });\n wm.emit = schemaFunction(rpc.emit.bind(rpc), {\n name: \"emit\",\n description: \"Emit a message.\",\n parameters: {\n properties: { data: { description: \"The data to emit\", type: \"object\" } },\n required: [\"data\"],\n type: \"object\",\n },\n });\n wm.on = schemaFunction(rpc.on.bind(rpc), {\n name: \"on\",\n description: \"Register a message handler.\",\n parameters: {\n properties: {\n event: { description: \"The event to listen to\", type: \"string\" },\n handler: { description: \"The handler function\", type: \"function\" },\n },\n required: [\"event\", \"handler\"],\n type: \"object\",\n },\n });\n wm.getServiceSchema = schemaFunction(rpc.get_service_schema, {\n name: \"getServiceSchema\",\n description: \"Get the service schema.\",\n parameters: {\n properties: {\n service: {\n description: \"The service to extract schema\",\n type: \"object\",\n },\n },\n required: [\"service\"],\n type: \"object\",\n },\n });\n\n wm.registerService = schemaFunction(rpc.register_service.bind(rpc), {\n name: \"registerService\",\n description: \"Register a service.\",\n parameters: {\n properties: {\n service: { description: \"The service to register\", type: \"object\" },\n force: {\n default: false,\n description: \"Force to register the service\",\n type: \"boolean\",\n },\n },\n required: [\"service\"],\n type: \"object\",\n },\n });\n wm.unregisterService = schemaFunction(rpc.unregister_service.bind(rpc), {\n name: \"unregisterService\",\n description: \"Unregister a service.\",\n parameters: {\n properties: {\n service: {\n description: \"The service id to unregister\",\n type: \"string\",\n },\n notify: {\n default: true,\n description: \"Notify the workspace manager\",\n type: \"boolean\",\n },\n },\n required: [\"service\"],\n type: \"object\",\n },\n });\n if (connection.manager_id) {\n rpc.on(\"force-exit\", async (message) => {\n if (message.from === \"*/\" + connection.manager_id) {\n console.log(\"Disconnecting from server, reason:\", message.reason);\n await rpc.disconnect();\n }\n });\n }\n if (config.webrtc) {\n await registerRTCService(wm, clientId + \"-rtc\", config.webrtc_config);\n // make a copy of wm, so webrtc can use the original wm.getService\n const _wm = Object.assign({}, wm);\n wm.getService = schemaFunction(\n webrtcGetService.bind(null, _wm, clientId + \"-rtc\"),\n {\n name: \"getService\",\n description: \"Get a service via webrtc.\",\n parameters: {\n properties: {\n query: {\n description: \"The query to get the service\",\n type: \"object\",\n },\n webrtc: {\n default: \"auto\",\n description: \"Use webrtc to get the service\",\n type: [\"boolean\", \"string\"],\n },\n webrtc_config: {\n description: \"The webrtc configuration\",\n type: \"object\",\n },\n },\n required: [\"query\"],\n type: \"object\",\n },\n },\n );\n }\n\n return wm;\n}\n\nexport class LocalWebSocket {\n constructor(url, client_id, workspace) {\n this.url = url;\n this.onopen = () => {};\n this.onmessage = () => {};\n this.onclose = () => {};\n this.onerror = () => {};\n this.client_id = client_id;\n this.workspace = workspace;\n const context = typeof window !== \"undefined\" ? window : self;\n const isWindow = typeof window !== \"undefined\";\n this.postMessage = (message) => {\n if (isWindow) {\n window.parent.postMessage(message, \"*\");\n } else {\n self.postMessage(message);\n }\n };\n\n this.readyState = WebSocket.CONNECTING;\n context.addEventListener(\n \"message\",\n (event) => {\n const { type, data, to } = event.data;\n if (to !== this.client_id) {\n console.debug(\"message not for me\", to, this.client_id);\n return;\n }\n switch (type) {\n case \"message\":\n if (this.readyState === WebSocket.OPEN && this.onmessage) {\n this.onmessage({ data: data });\n }\n break;\n case \"connected\":\n this.readyState = WebSocket.OPEN;\n this.onopen(event);\n break;\n case \"closed\":\n this.readyState = WebSocket.CLOSED;\n this.onclose(event);\n break;\n default:\n break;\n }\n },\n false,\n );\n\n if (!this.client_id) throw new Error(\"client_id is required\");\n if (!this.workspace) throw new Error(\"workspace is required\");\n this.postMessage({\n type: \"connect\",\n url: this.url,\n from: this.client_id,\n workspace: this.workspace,\n });\n }\n\n send(data) {\n if (this.readyState === WebSocket.OPEN) {\n this.postMessage({\n type: \"message\",\n data: data,\n from: this.client_id,\n workspace: this.workspace,\n });\n }\n }\n\n close() {\n this.readyState = WebSocket.CLOSING;\n this.postMessage({\n type: \"close\",\n from: this.client_id,\n workspace: this.workspace,\n });\n this.onclose();\n }\n\n addEventListener(type, listener) {\n if (type === \"message\") {\n this.onmessage = listener;\n }\n if (type === \"open\") {\n this.onopen = listener;\n }\n if (type === \"close\") {\n this.onclose = listener;\n }\n if (type === \"error\") {\n this.onerror = listener;\n }\n }\n}\n\nexport function setupLocalClient({\n enable_execution = false,\n on_ready = null,\n}) {\n return new Promise((resolve, reject) => {\n const context = typeof window !== \"undefined\" ? window : self;\n const isWindow = typeof window !== \"undefined\";\n context.addEventListener(\n \"message\",\n (event) => {\n const {\n type,\n server_url,\n workspace,\n client_id,\n token,\n method_timeout,\n name,\n config,\n } = event.data;\n\n if (type === \"initializeHyphaClient\") {\n if (!server_url || !workspace || !client_id) {\n console.error(\"server_url, workspace, and client_id are required.\");\n return;\n }\n\n if (!server_url.startsWith(\"https://local-hypha-server:\")) {\n console.error(\n \"server_url should start with https://local-hypha-server:\",\n );\n return;\n }\n\n connectToServer({\n server_url,\n workspace,\n client_id,\n token,\n method_timeout,\n name,\n }).then(async (server) => {\n globalThis.api = server;\n try {\n // for iframe\n if (isWindow && enable_execution) {\n function loadScript(script) {\n return new Promise((resolve, reject) => {\n const scriptElement = document.createElement(\"script\");\n scriptElement.innerHTML = script.content;\n scriptElement.lang = script.lang;\n\n scriptElement.onload = () => resolve();\n scriptElement.onerror = (e) => reject(e);\n\n document.head.appendChild(scriptElement);\n });\n }\n if (config.styles && config.styles.length > 0) {\n for (const style of config.styles) {\n const styleElement = document.createElement(\"style\");\n styleElement.innerHTML = style.content;\n styleElement.lang = style.lang;\n document.head.appendChild(styleElement);\n }\n }\n if (config.links && config.links.length > 0) {\n for (const link of config.links) {\n const linkElement = document.createElement(\"a\");\n linkElement.href = link.url;\n linkElement.innerText = link.text;\n document.body.appendChild(linkElement);\n }\n }\n if (config.windows && config.windows.length > 0) {\n for (const w of config.windows) {\n document.body.innerHTML = w.content;\n break;\n }\n }\n if (config.scripts && config.scripts.length > 0) {\n for (const script of config.scripts) {\n if (script.lang !== \"javascript\")\n throw new Error(\"Only javascript scripts are supported\");\n await loadScript(script); // Await the loading of each script\n }\n }\n }\n // for web worker\n else if (\n !isWindow &&\n enable_execution &&\n config.scripts &&\n config.scripts.length > 0\n ) {\n for (const script of config.scripts) {\n if (script.lang !== \"javascript\")\n throw new Error(\"Only javascript scripts are supported\");\n eval(script.content);\n }\n }\n\n if (on_ready) {\n await on_ready(server, config);\n }\n resolve(server);\n } catch (e) {\n reject(e);\n }\n });\n }\n },\n false,\n );\n if (isWindow) {\n window.parent.postMessage({ type: \"hyphaClientReady\" }, \"*\");\n } else {\n self.postMessage({ type: \"hyphaClientReady\" });\n }\n });\n}\n"],"names":["root","factory","exports","module","define","amd","this","prettyByte","byte","concat","Math","abs","toString","padStart","extendStatics","ExtData","type","data","__extends","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","TypeError","String","__","constructor","create","DecodeError","_super","message","_this","proto","defineProperty","configurable","enumerable","value","name","Error","UINT32_MAX","setInt64","view","offset","high","floor","low","setUint32","getInt64","getInt32","getUint32","_a","_b","_c","timestampExtension","encode","object","msec","sec","nsec","nsecInSec","Date","rv","Uint8Array","DataView","buffer","secHigh","secLow","encodeTimeSpecToTimestamp","getTime","decode","timeSpec","byteOffset","byteLength","nsec30AndSecHigh2","length","decodeTimestampToTimeSpec","ExtensionCodec","builtInEncoders","builtInDecoders","encoders","decoders","register","index","tryToEncode","context","i","encodeExt","decodeExt","defaultCodec","TEXT_ENCODING_AVAILABLE","process","env","TextEncoder","TextDecoder","utf8Count","str","strLength","pos","charCodeAt","extra","sharedTextEncoder","undefined","TEXT_ENCODER_THRESHOLD","utf8EncodeTE","encodeInto","output","outputOffset","subarray","set","utf8DecodeJs","bytes","inputOffset","end","units","result","byte1","byte2","push","byte3","unit","fromCharCode","apply","sharedTextDecoder","TEXT_DECODER_THRESHOLD","ensureUint8Array","ArrayBuffer","isView","from","CachedKeyDecoder","maxKeyLength","maxLengthPerKey","hit","miss","caches","canBeCached","find","FIND_CHUNK","_i","records_1","record","recordBytes","j","store","records","random","cachedValue","slicedCopyOfBytes","slice","__generator","thisArg","body","f","y","t","g","_","label","sent","trys","ops","next","verb","Symbol","iterator","n","v","op","done","pop","e","step","__asyncValues","o","asyncIterator","m","__values","Promise","resolve","reject","then","settle","__await","EMPTY_VIEW","EMPTY_BYTES","DataViewIndexOutOfBoundsError","getInt8","MORE_DATA","sharedCachedKeyDecoder","Decoder","extensionCodec","maxStrLength","maxBinLength","maxArrayLength","maxMapLength","maxExtLength","keyDecoder","totalPos","headByte","stack","reinitializeState","setBuffer","bufferView","createDataView","appendBuffer","hasRemaining","remainingData","newData","newBuffer","size","createExtraByteError","posToShow","RangeError","doDecodeSync","decodeMulti","decodeAsync","stream","stream_1","stream_1_1","e_1","_arguments","P","generator","decoded","e_1_1","error","return","fulfilled","rejected","decodeArrayStream","decodeMultiAsync","decodeStream","isArray","q","a","resume","r","fulfill","shift","__asyncGenerator","arguments","isArrayHeaderRequired","arrayItemsLeft","stream_2","stream_2_1","e_2","e_3_1","e_3","readArraySize","complete","DECODE","readHeadByte","pushMapState","pushArrayState","decodeUtf8String","readF32","readF64","readU8","readU16","readU32","readU64","readI8","readI16","readI32","readI64","lookU8","lookU16","lookU32","decodeBinary","decodeExtension","state","array","position","keyType","key","map","readCount","headerOffset","stateIsMapKey","stringBytes","utf8DecodeTD","headOffset","extType","getUint8","getUint16","getInt16","getFloat32","getFloat64","defaultDecodeOptions","options","Encoder","maxDepth","initialBufferSize","sortKeys","forceFloat32","ignoreUndefined","forceIntegerToFloat","encodeSharedRef","doEncode","depth","encodeNil","encodeBoolean","encodeNumber","encodeString","encodeObject","ensureBufferSizeToWrite","sizeToWrite","requiredSize","resizeBuffer","newSize","newBytes","newView","writeU8","Number","isSafeInteger","writeU16","writeU32","writeU64","writeI8","writeI16","writeI32","writeI64","writeF32","writeF64","writeStringHeader","utf8EncodeJs","ext","encodeExtension","encodeArray","encodeBinary","encodeMap","writeU8a","object_1","item","countWithoutUndefined","keys","count","keys_1","sort","keys_2","setUint8","values","setInt8","setUint16","setInt16","setInt32","setFloat32","setFloat64","setUint64","defaultEncodeOptions","API_VERSION","ArrayBufferView","getPrototypeOf","_appendBuffer","buffer1","buffer2","tmp","indexObject","obj","is","split","_get_schema","skipContext","schema","k","__schema__","JSON","parse","stringify","parameters","properties","function","Timer","timeout","callback","args","_timeout","_callback","_args","_label","_task","started","start","reset","setTimeout","clear","clearTimeout","console","warn","RPC","connection","client_id","default_context","codecs","method_timeout","max_message_buffer_size","debug","workspace","silent","app_id","super","_codecs","_client_id","_name","_app_id","_local_workspace","_silent","_method_annotations","WeakMap","_max_message_buffer_size","_chunk_store","_method_timeout","_services","_object_store","services","add_service","id","config","require_context","visibility","ping","_ping","bind","get_service","get_local_service","message_cache","_create_message","append","_append_message","_process_message","remove","_remove_message","on","_handle_method","emit_message","on_message","manager_id","_emit_message","_on_message","_connection","onConnected","async","connectionInfo","log","manager","get_manager_service","service","serviceInfo","_extract_service_info","registerService","_fire","on_connected","register_codec","msg","method","_generate_remote_method","_rtarget","_rmethod","_rpromise","_rdoc","heartbeat","overwrite","cache","buffers","buffersLengths","totalBufferlength","unit8Arr","reduce","c","unpacker","main","assign","to","user","_event_handlers","disconnect","case_conversion","get_remote_service","get_all_local_services","service_id","ws","service_uri","includes","provider","svc","_annotate_service_methods","aObject","object_id","run_in_executor","method_name","method_id","val","__rpc_object__","api","normApi","props","getOwnPropertyNames","self","serviceSchema","description","docs","service_schema","get_service_schema","register_service","notify","check_type","serviceTypeInfo","validateKeys","serviceDict","schemaDict","path","annotateRecursive","newService","schemaInfo","forEach","newPath","_annotate_service","get_service_type","unregister_service","_ndarray","typedArray","shape","dtype","_dtype","_rtype","_rvalue","_rshape","_rdtype","_encode_callback","session_id","clear_after_called","timer","local_workspace","encoded","_encode_promise","_get_session_store","_encode","interval","_send_chunks","target_id","remote_services","message_id","total_size","chunk_num","ceil","idx","start_byte","emit","main_message","extra_data","message_package","encoded_method","remote_parent","local_parent","remote_workspace","with_promise","remote_method","local_session_id","argLength","withKwargs","_rkwargs","from_client","arg","_rintf","catch","err","parts","__name__","__doc__","_rschema","get_client_info","heartbeat_task","ctx","remote_client_id","parent","promise","_decode","session","setInterval","has","get","session_target_id","indexOf","clearInterval","levels","last_index","level","aType","bObject","temp","annotation","funcInfo","func","funcString","nameMatch","match","paramsMatch","params","replace","filter","trim","join","docMatch","docstringBlock","docstringLine","s","docstring","sig","doc","getFunctionInfo","isarray","tp","codec","encoder","encodedObj","tf","Tensor","v_buffer","dataSync","nj","NdArray","selection","_rtrace","Boolean","RegExp","ImageData","FileList","FileSystemDirectoryHandle","FileSystemFileHandle","FileSystemHandle","FileSystemWritableFileStream","Blob","_current_pos","read","blob","ret","arrayBuffer","seek","_rnative","_path","webkitRelativePath","Set","Map","decoder","Uint8","reshape","arraytype","tensor","startsWith","randId","substr","toCamelCase","toUpperCase","toSnakeCase","toLowerCase","convertCase","caseType","newObj","camelKey","snakeKey","dtypeToTypedArray","int8","Int8Array","int16","Int16Array","int32","Int32Array","uint8","uint16","Uint16Array","uint32","Uint32Array","float32","Float32Array","float64","Float64Array","loadRequirementsInWindow","requirements","_importScript","url","scriptTag","document","createElement","src","onload","onreadystatechange","readyState","onerror","head","appendChild","importScripts","len","link_node","endsWith","rel","href","import","loadRequirementsInWebworker","loadRequirements","WorkerGlobalScope","normalizeConfig","version","target_origin","allow_execution","typedArrayToDtypeMapping","typedArrayToDtypeKeys","arrType","eval","typedArrayToDtype","pt","cacheUrlInServiceWorker","command","navigator","serviceWorker","messageChannel","MessageChannel","port1","onmessage","event","controller","postMessage","port2","cacheRequirements","req","assert","condition","urlJoin","waitFor","prom","time","race","_r","rej","finally","MessageEmitter","_once_handlers","_debug","handler","once","___event_run_once","off","splice","schemaFunction","schema_type","WebRTCConnection","channel","_data_channel","_handle_message","_reconnection_token","_handle_disconnected","_handle_connected","onopen","onclose","on_disconnected","send","exp","reason","info","_setupRPC","clientId","connection_type","getRTCService","server","peer_id","pc","RTCPeerConnection","iceServers","ice_servers","urls","sdpSemantics","addEventListener","connectionState","close","on_init","createDataChannel","ordered","binaryType","offer","createOffer","setLocalDescription","getService","answer","sdp","localDescription","rpc","registerCodec","setRemoteDescription","RTCSessionDescription","registerRTCService","onInit","createAnswer","_createOffer","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","prop","toStringTag","MAX_RETRY","WebsocketRPCConnection","server_url","token","reconnection_token","WebSocketClass","_server_url","_workspace","_token","_websocket","_WebSocketClass","WebSocket","_closed","_legacy_auth","connection_info","_enable_reconnect","_attempt_connection","attempt_fallback","websocket","code","_attempt_connection_with_query_params","queryParamsParts","encodeURIComponent","full_url","_establish_connection","first_message","announcement","open","authInfo","_handle_close","CLOSED","retry","reconnect","CONNECTED","OPEN","normalizeServerUrl","login","login_service_id","login_timeout","login_callback","profile","connectToServer","login_url","check","webrtcGetService","wm","rtc_service_id","query","webrtc","webrtc_config","otherArgs","peer","rtcSvc","_webrtc","_peer","_service","export","required","getApp","default","listApps","listServices","getServiceSchema","force","unregisterService","_wm","LocalWebSocket","window","isWindow","CONNECTING","CLOSING","listener","setupLocalClient","globalThis","enable_execution","loadScript","script","scriptElement","innerHTML","content","lang","styles","style","styleElement","links","link","linkElement","innerText","text","windows","w","scripts","on_ready"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"hypha-rpc-websocket.min.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,uBAAwB,GAAIH,GACT,iBAAZC,QACdA,QAA8B,qBAAID,IAElCD,EAA2B,qBAAIC,GAChC,CATD,CASGK,MAAM,I,yGCTF,SAASC,EAAWC,GACvB,MAAO,GAAGC,OAAOD,EAAO,EAAI,IAAM,GAAI,MAAMC,OAAOC,KAAKC,IAAIH,GAAMI,SAAS,IAAIC,SAAS,EAAG,KAC/F,CCCA,ICFQC,EDEJC,EACA,SAAiBC,EAAMC,GACnBX,KAAKU,KAAOA,EACZV,KAAKW,KAAOA,CAChB,ECPAC,GACIJ,EAAgB,SAAUK,EAAGC,GAI7B,OAHAN,EAAgBO,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAG,GAC1E,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOC,OAAOK,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,GAAI,EAC7FX,EAAcK,EAAGC,EAC5B,EACO,SAAUD,EAAGC,GAChB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIS,UAAU,uBAAyBC,OAAOV,GAAK,iCAE7D,SAASW,IAAOzB,KAAK0B,YAAcb,CAAG,CADtCL,EAAcK,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOY,OAAOb,IAAMW,EAAGL,UAAYN,EAAEM,UAAW,IAAIK,EACnF,GAEAG,EAA6B,SAAUC,GAEvC,SAASD,EAAYE,GACjB,IAAIC,EAAQF,EAAOP,KAAKtB,KAAM8B,IAAY9B,KAEtCgC,EAAQjB,OAAOY,OAAOC,EAAYR,WAOtC,OANAL,OAAOC,eAAee,EAAOC,GAC7BjB,OAAOkB,eAAeF,EAAO,OAAQ,CACjCG,cAAc,EACdC,YAAY,EACZC,MAAOR,EAAYS,OAEhBN,CACX,CACA,OAbAnB,EAAUgB,EAAaC,GAahBD,CACX,CAfgC,CAe9BU,OC7BSC,EAAa,WASjB,SAASC,EAASC,EAAMC,EAAQN,GACnC,IAAIO,EAAOvC,KAAKwC,MAAMR,EAAQ,YAC1BS,EAAMT,EACVK,EAAKK,UAAUJ,EAAQC,GACvBF,EAAKK,UAAUJ,EAAS,EAAGG,EAC/B,CACO,SAASE,EAASN,EAAMC,GAG3B,OAAc,WAFHD,EAAKO,SAASN,GACfD,EAAKQ,UAAUP,EAAS,EAEtC,CCjBO,ICHHQ,EAAIC,EAAIC,ED2FDC,EAAqB,CAC5B3C,MAzFwB,EA0FxB4C,OA3CG,SAAkCC,GAEjC,IAZAC,EACAC,EACAC,EAEAC,EAOJ,OAAIJ,aAAkBK,KA7CnB,SAAmCV,GACtC,IA0BQT,EA1BJgB,EAAMP,EAAGO,IAAKC,EAAOR,EAAGQ,KAC5B,GAAID,GAAO,GAAKC,GAAQ,GAAKD,GAHP,YAGmC,CAErD,GAAa,IAATC,GAAcD,GANA,WAM4B,CAE1C,IAAII,EAAK,IAAIC,WAAW,GAGxB,OAFIrB,EAAO,IAAIsB,SAASF,EAAGG,SACtBlB,UAAU,EAAGW,GACXI,CACX,CAGI,IAAII,EAAUR,EAAM,WAChBS,EAAe,WAANT,EAOb,OANII,EAAK,IAAIC,WAAW,IACpBrB,EAAO,IAAIsB,SAASF,EAAGG,SAEtBlB,UAAU,EAAIY,GAAQ,EAAgB,EAAVO,GAEjCxB,EAAKK,UAAU,EAAGoB,GACXL,CAEf,CAOI,OAJIA,EAAK,IAAIC,WAAW,KACpBrB,EAAO,IAAIsB,SAASF,EAAGG,SACtBlB,UAAU,EAAGY,GAClBlB,EAASC,EAAM,EAAGgB,GACXI,CAEf,CAeeM,EAXPT,EAA4B,MAF5BF,EAYoCD,EAZxBa,WAES,KADrBX,EAAMrD,KAAKwC,MAAMY,EAAO,OAIrB,CACHC,IAAKA,GAFLE,EAAYvD,KAAKwC,MAAMc,EAAO,MAG9BA,KAAMA,EAAmB,IAAZC,KASN,IAEf,EAoCIU,OAPG,SAAkC1D,GACrC,IAAI2D,EA7BD,SAAmC3D,GACtC,IAAI8B,EAAO,IAAIsB,SAASpD,EAAKqD,OAAQrD,EAAK4D,WAAY5D,EAAK6D,YAE3D,OAAQ7D,EAAK6D,YACT,KAAK,EAID,MAAO,CAAEf,IAFChB,EAAKQ,UAAU,GAENS,KADR,GAGf,KAAK,EAED,IAAIe,EAAoBhC,EAAKQ,UAAU,GAIvC,MAAO,CAAEQ,IAF6B,YAAP,EAApBgB,GADIhC,EAAKQ,UAAU,GAGXS,KADRe,IAAsB,GAGrC,KAAK,GAID,MAAO,CAAEhB,IAFCV,EAASN,EAAM,GAENiB,KADRjB,EAAKQ,UAAU,IAG9B,QACI,MAAM,IAAIrB,EAAY,gEAAgEzB,OAAOQ,EAAK+D,SAE9G,CAEmBC,CAA0BhE,GACzC,OAAO,IAAIiD,KAAoB,IAAfU,EAASb,IAAYa,EAASZ,KAAO,IACzD,GEvFIkB,EAAgC,WAChC,SAASA,IAEL5E,KAAK6E,gBAAkB,GACvB7E,KAAK8E,gBAAkB,GAEvB9E,KAAK+E,SAAW,GAChB/E,KAAKgF,SAAW,GAChBhF,KAAKiF,SAAS5B,EAClB,CAuDA,OAtDAuB,EAAexD,UAAU6D,SAAW,SAAU/B,GAC1C,IAAIxC,EAAOwC,EAAGxC,KAAM4C,EAASJ,EAAGI,OAAQe,EAASnB,EAAGmB,OACpD,GAAI3D,GAAQ,EAERV,KAAK+E,SAASrE,GAAQ4C,EACtBtD,KAAKgF,SAAStE,GAAQ2D,MAErB,CAED,IAAIa,EAAQ,EAAIxE,EAChBV,KAAK6E,gBAAgBK,GAAS5B,EAC9BtD,KAAK8E,gBAAgBI,GAASb,CAClC,CACJ,EACAO,EAAexD,UAAU+D,YAAc,SAAU5B,EAAQ6B,GAErD,IAAK,IAAIC,EAAI,EAAGA,EAAIrF,KAAK6E,gBAAgBH,OAAQW,IAE7C,GAAiB,OADbC,EAAYtF,KAAK6E,gBAAgBQ,KAGrB,OADR1E,EAAO2E,EAAU/B,EAAQ6B,IAGzB,OAAO,IAAI3E,GADC,EAAI4E,EACS1E,GAKrC,IAAS0E,EAAI,EAAGA,EAAIrF,KAAK+E,SAASL,OAAQW,IAAK,CAC3C,IAAIC,EAEI3E,EADR,GAAiB,OADb2E,EAAYtF,KAAK+E,SAASM,KAGd,OADR1E,EAAO2E,EAAU/B,EAAQ6B,IAGzB,OAAO,IAAI3E,EADA4E,EACc1E,EAGrC,CACA,OAAI4C,aAAkB9C,EAEX8C,EAEJ,IACX,EACAqB,EAAexD,UAAUiD,OAAS,SAAU1D,EAAMD,EAAM0E,GACpD,IAAIG,EAAY7E,EAAO,EAAIV,KAAK8E,iBAAiB,EAAIpE,GAAQV,KAAKgF,SAAStE,GAC3E,OAAI6E,EACOA,EAAU5E,EAAMD,EAAM0E,GAItB,IAAI3E,EAAQC,EAAMC,EAEjC,EACAiE,EAAeY,aAAe,IAAIZ,EAC3BA,CACX,CAjEmC,GDA/Ba,GAA8C,oBAAZC,SAA+J,WAA1D,QAAxExC,EAAiB,OAAZwC,cAAgC,IAAZA,aAAqB,EAASA,QAAQC,WAAwB,IAAPzC,OAAgB,EAASA,EAAkB,iBACnK,oBAAhB0C,aACgB,oBAAhBC,YACJ,SAASC,EAAUC,GAItB,IAHA,IAAIC,EAAYD,EAAIrB,OAChBF,EAAa,EACbyB,EAAM,EACHA,EAAMD,GAAW,CACpB,IAAI5D,EAAQ2D,EAAIG,WAAWD,KAC3B,GAAa,WAAR7D,EAKA,GAAa,WAARA,EAIL,CAED,GAAIA,GAAS,OAAUA,GAAS,OAExB6D,EAAMD,EAAW,CACjB,IAAIG,EAAQJ,EAAIG,WAAWD,GACF,QAAZ,MAARE,OACCF,EACF7D,IAAkB,KAARA,IAAkB,KAAe,KAAR+D,GAAiB,MAE5D,CAQA3B,GANS,WAARpC,EAMa,EAJA,CAMtB,MAtBIoC,GAAc,OALdA,GA4BR,CACA,OAAOA,CACX,CA2CA,IAAI4B,EAAoBX,EAA0B,IAAIG,iBAAgBS,EAC3DC,EAA0Bb,EAEZ,oBAAZC,SAA+J,WAA1D,QAAxEvC,EAAiB,OAAZuC,cAAgC,IAAZA,aAAqB,EAASA,QAAQC,WAAwB,IAAPxC,OAAgB,EAASA,EAAkB,eAC3J,IACA,EAHJZ,EAUKgE,GAAgBH,aAA6D,EAASA,EAAkBI,YAHnH,SAAgCT,EAAKU,EAAQC,GACzCN,EAAkBI,WAAWT,EAAKU,EAAOE,SAASD,GACtD,EALA,SAA4BX,EAAKU,EAAQC,GACrCD,EAAOG,IAAIR,EAAkB9C,OAAOyC,GAAMW,EAC9C,EAMO,SAASG,EAAaC,EAAOC,EAAavC,GAK7C,IAJA,IAAI9B,EAASqE,EACTC,EAAMtE,EAAS8B,EACfyC,EAAQ,GACRC,EAAS,GACNxE,EAASsE,GAAK,CACjB,IAAIG,EAAQL,EAAMpE,KAClB,GAAa,IAARyE,EAIA,GAAuB,MAAV,IAARA,GAAwB,CAE9B,IAAIC,EAA0B,GAAlBN,EAAMpE,KAClBuE,EAAMI,MAAe,GAARF,IAAiB,EAAKC,EACvC,MACK,GAAuB,MAAV,IAARD,GAAwB,CAE1BC,EAA0B,GAAlBN,EAAMpE,KAAlB,IACI4E,EAA0B,GAAlBR,EAAMpE,KAClBuE,EAAMI,MAAe,GAARF,IAAiB,GAAOC,GAAS,EAAKE,EACvD,MACK,GAAuB,MAAV,IAARH,GAAwB,CAE9B,IAGII,GAAiB,EAARJ,IAAiB,IAH1BC,EAA0B,GAAlBN,EAAMpE,OAG8B,IAF5C4E,EAA0B,GAAlBR,EAAMpE,OAEgD,EADpC,GAAlBoE,EAAMpE,KAEd6E,EAAO,QACPA,GAAQ,MACRN,EAAMI,KAAOE,IAAS,GAAM,KAAS,OACrCA,EAAO,MAAiB,KAAPA,GAErBN,EAAMI,KAAKE,EACf,MAEIN,EAAMI,KAAKF,QA3BXF,EAAMI,KAAKF,GA6BXF,EAAMvC,QAvCD,OAwCLwC,GAAU1F,OAAOgG,aAAaC,MAAMjG,OAAQyF,GAC5CA,EAAMvC,OAAS,EAEvB,CAIA,OAHIuC,EAAMvC,OAAS,IACfwC,GAAU1F,OAAOgG,aAAaC,MAAMjG,OAAQyF,IAEzCC,CACX,CACA,IAAIQ,EAAoBjC,EAA0B,IAAII,YAAgB,KAC3D8B,EAA0BlC,EAEZ,oBAAZC,SAA8J,WAAzD,QAAxEtC,EAAiB,OAAZsC,cAAgC,IAAZA,aAAqB,EAASA,QAAQC,WAAwB,IAAPvC,OAAgB,EAASA,EAAiB,cAC1J,IACA,EAHJb,EEvJC,SAASqF,EAAiB5D,GAC7B,OAAIA,aAAkBF,WACXE,EAEF6D,YAAYC,OAAO9D,GACjB,IAAIF,WAAWE,EAAOA,OAAQA,EAAOO,WAAYP,EAAOQ,YAE1DR,aAAkB6D,YAChB,IAAI/D,WAAWE,GAIfF,WAAWiE,KAAK/D,EAE/B,CCbA,IAEIgE,EAAkC,WAClC,SAASA,EAAiBC,EAAcC,QACf,IAAjBD,IAA2BA,EAJV,SAKG,IAApBC,IAA8BA,EAJT,IAKzBlI,KAAKiI,aAAeA,EACpBjI,KAAKkI,gBAAkBA,EACvBlI,KAAKmI,IAAM,EACXnI,KAAKoI,KAAO,EAGZpI,KAAKqI,OAAS,GACd,IAAK,IAAIhD,EAAI,EAAGA,EAAIrF,KAAKiI,aAAc5C,IACnCrF,KAAKqI,OAAOhB,KAAK,GAEzB,CA2CA,OA1CAW,EAAiB5G,UAAUkH,YAAc,SAAU9D,GAC/C,OAAOA,EAAa,GAAKA,GAAcxE,KAAKiI,YAChD,EACAD,EAAiB5G,UAAUmH,KAAO,SAAUzB,EAAOC,EAAavC,GAE5DgE,EAAY,IAAK,IAAIC,EAAK,EAAGC,EADf1I,KAAKqI,OAAO7D,EAAa,GACWiE,EAAKC,EAAUhE,OAAQ+D,IAAM,CAG3E,IAFA,IAAIE,EAASD,EAAUD,GACnBG,EAAcD,EAAO7B,MAChB+B,EAAI,EAAGA,EAAIrE,EAAYqE,IAC5B,GAAID,EAAYC,KAAO/B,EAAMC,EAAc8B,GACvC,SAASL,EAGjB,OAAOG,EAAO5C,GAClB,CACA,OAAO,IACX,EACAiC,EAAiB5G,UAAU0H,MAAQ,SAAUhC,EAAO1E,GAChD,IAAI2G,EAAU/I,KAAKqI,OAAOvB,EAAMpC,OAAS,GACrCiE,EAAS,CAAE7B,MAAOA,EAAOf,IAAK3D,GAC9B2G,EAAQrE,QAAU1E,KAAKkI,gBAGvBa,EAAS3I,KAAK4I,SAAWD,EAAQrE,OAAU,GAAKiE,EAGhDI,EAAQ1B,KAAKsB,EAErB,EACAX,EAAiB5G,UAAUiD,OAAS,SAAUyC,EAAOC,EAAavC,GAC9D,IAAIyE,EAAcjJ,KAAKuI,KAAKzB,EAAOC,EAAavC,GAChD,GAAmB,MAAfyE,EAEA,OADAjJ,KAAKmI,MACEc,EAEXjJ,KAAKoI,OACL,IAAIrC,EAAMc,EAAaC,EAAOC,EAAavC,GAEvC0E,EAAoBpF,WAAW1C,UAAU+H,MAAM7H,KAAKwF,EAAOC,EAAaA,EAAcvC,GAE1F,OADAxE,KAAK8I,MAAMI,EAAmBnD,GACvBA,CACX,EACOiC,CACX,CA1DqC,GCMjCoB,EAA4C,SAAUC,EAASC,GAC/D,IAAsGC,EAAGC,EAAGC,EAAGC,EAA3GC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPJ,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,EAAI,EAAGK,KAAM,GAAIC,IAAK,IAChG,OAAOL,EAAI,CAAEM,KAAMC,EAAK,GAAI,MAASA,EAAK,GAAI,OAAUA,EAAK,IAAwB,mBAAXC,SAA0BR,EAAEQ,OAAOC,UAAY,WAAa,OAAOnK,IAAM,GAAI0J,EACvJ,SAASO,EAAKG,GAAK,OAAO,SAAUC,GAAK,OACzC,SAAcC,GACV,GAAIf,EAAG,MAAM,IAAIhI,UAAU,mCAC3B,KAAOoI,OACH,GAAIJ,EAAI,EAAGC,IAAMC,EAAY,EAARa,EAAG,GAASd,EAAU,OAAIc,EAAG,GAAKd,EAAS,SAAOC,EAAID,EAAU,SAAMC,EAAEnI,KAAKkI,GAAI,GAAKA,EAAEQ,SAAWP,EAAIA,EAAEnI,KAAKkI,EAAGc,EAAG,KAAKC,KAAM,OAAOd,EAE3J,OADID,EAAI,EAAGC,IAAGa,EAAK,CAAS,EAARA,EAAG,GAAQb,EAAErH,QACzBkI,EAAG,IACP,KAAK,EAAG,KAAK,EAAGb,EAAIa,EAAI,MACxB,KAAK,EAAc,OAAXX,EAAEC,QAAgB,CAAExH,MAAOkI,EAAG,GAAIC,MAAM,GAChD,KAAK,EAAGZ,EAAEC,QAASJ,EAAIc,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKX,EAAEI,IAAIS,MAAOb,EAAEG,KAAKU,MAAO,SACxC,QACI,MAAkBf,GAAZA,EAAIE,EAAEG,MAAYpF,OAAS,GAAK+E,EAAEA,EAAE/E,OAAS,KAAkB,IAAV4F,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEX,EAAI,EAAG,QAAU,CAC3G,GAAc,IAAVW,EAAG,MAAcb,GAAMa,EAAG,GAAKb,EAAE,IAAMa,EAAG,GAAKb,EAAE,IAAM,CAAEE,EAAEC,MAAQU,EAAG,GAAI,KAAO,CACrF,GAAc,IAAVA,EAAG,IAAYX,EAAEC,MAAQH,EAAE,GAAI,CAAEE,EAAEC,MAAQH,EAAE,GAAIA,EAAIa,EAAI,KAAO,CACpE,GAAIb,GAAKE,EAAEC,MAAQH,EAAE,GAAI,CAAEE,EAAEC,MAAQH,EAAE,GAAIE,EAAEI,IAAI1C,KAAKiD,GAAK,KAAO,CAC9Db,EAAE,IAAIE,EAAEI,IAAIS,MAChBb,EAAEG,KAAKU,MAAO,SAEtBF,EAAKhB,EAAKhI,KAAK+H,EAASM,EAC5B,CAAE,MAAOc,GAAKH,EAAK,CAAC,EAAGG,GAAIjB,EAAI,CAAG,CAAE,QAAUD,EAAIE,EAAI,CAAG,CACzD,GAAY,EAARa,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAElI,MAAOkI,EAAG,GAAKA,EAAG,QAAK,EAAQC,MAAM,EAC9E,CAtBgDG,CAAK,CAACN,EAAGC,GAAK,CAAG,CAuBrE,EACIM,EAAgD,SAAUC,GAC1D,IAAKV,OAAOW,cAAe,MAAM,IAAItJ,UAAU,wCAC/C,IAAiC8D,EAA7ByF,EAAIF,EAAEV,OAAOW,eACjB,OAAOC,EAAIA,EAAExJ,KAAKsJ,IAAMA,EAAwB,mBAAbG,SAA0BA,SAASH,GAAKA,EAAEV,OAAOC,YAAa9E,EAAI,CAAC,EAAG4E,EAAK,QAASA,EAAK,SAAUA,EAAK,UAAW5E,EAAE6E,OAAOW,eAAiB,WAAc,OAAO7K,IAAM,EAAGqF,GAC9M,SAAS4E,EAAKG,GAAK/E,EAAE+E,GAAKQ,EAAER,IAAM,SAAUC,GAAK,OAAO,IAAIW,SAAQ,SAAUC,EAASC,IACvF,SAAgBD,EAASC,EAAQrK,EAAGwJ,GAAKW,QAAQC,QAAQZ,GAAGc,MAAK,SAASd,GAAKY,EAAQ,CAAE7I,MAAOiI,EAAGE,KAAM1J,GAAM,GAAGqK,EAAS,CADbE,CAAOH,EAASC,GAA7Bb,EAAIO,EAAER,GAAGC,IAA8BE,KAAMF,EAAEjI,MAAQ,GAAI,CAAG,CAEnK,EACIiJ,EAAoC,SAAUhB,GAAK,OAAOrK,gBAAgBqL,GAAWrL,KAAKqK,EAAIA,EAAGrK,MAAQ,IAAIqL,EAAQhB,EAAI,EAwBzHiB,EAAa,IAAIvH,SAAS,IAAI8D,YAAY,IAC1C0D,EAAc,IAAIzH,WAAWwH,EAAWtH,QAGjCwH,EAAgC,WACvC,IAGIF,EAAWG,QAAQ,EACvB,CACA,MAAOhB,GACH,OAAOA,EAAE/I,WACb,CACA,MAAM,IAAIY,MAAM,gBACnB,CAV0C,GAWvCoJ,EAAY,IAAIF,EAA8B,qBAC9CG,EAAyB,IAAI3D,EAC7B,EAAyB,WACzB,SAAS4D,EAAQC,EAAgBzG,EAAS0G,EAAcC,EAAcC,EAAgBC,EAAcC,EAAcC,QACvF,IAAnBN,IAA6BA,EAAiBjH,EAAeY,mBACjD,IAAZJ,IAAsBA,OAAUiB,QACf,IAAjByF,IAA2BA,EAAevJ,QACzB,IAAjBwJ,IAA2BA,EAAexJ,QACvB,IAAnByJ,IAA6BA,EAAiBzJ,QAC7B,IAAjB0J,IAA2BA,EAAe1J,QACzB,IAAjB2J,IAA2BA,EAAe3J,QAC3B,IAAf4J,IAAyBA,EAAaR,GAC1C3L,KAAK6L,eAAiBA,EACtB7L,KAAKoF,QAAUA,EACfpF,KAAK8L,aAAeA,EACpB9L,KAAK+L,aAAeA,EACpB/L,KAAKgM,eAAiBA,EACtBhM,KAAKiM,aAAeA,EACpBjM,KAAKkM,aAAeA,EACpBlM,KAAKmM,WAAaA,EAClBnM,KAAKoM,SAAW,EAChBpM,KAAKiG,IAAM,EACXjG,KAAKyC,KAAO6I,EACZtL,KAAK8G,MAAQyE,EACbvL,KAAKqM,UAxCY,EAyCjBrM,KAAKsM,MAAQ,EACjB,CA8mBA,OA7mBAV,EAAQxK,UAAUmL,kBAAoB,WAClCvM,KAAKoM,SAAW,EAChBpM,KAAKqM,UA7CY,EA8CjBrM,KAAKsM,MAAM5H,OAAS,CAExB,EACAkH,EAAQxK,UAAUoL,UAAY,SAAUxI,GACpChE,KAAK8G,MAAQc,EAAiB5D,GAC9BhE,KAAKyC,KFtGN,SAAwBuB,GAC3B,GAAIA,aAAkB6D,YAClB,OAAO,IAAI9D,SAASC,GAExB,IAAIyI,EAAa7E,EAAiB5D,GAClC,OAAO,IAAID,SAAS0I,EAAWzI,OAAQyI,EAAWlI,WAAYkI,EAAWjI,WAC7E,CEgGoBkI,CAAe1M,KAAK8G,OAChC9G,KAAKiG,IAAM,CACf,EACA2F,EAAQxK,UAAUuL,aAAe,SAAU3I,GACvC,IAvDiB,IAuDbhE,KAAKqM,UAAoCrM,KAAK4M,aAAa,GAG1D,CACD,IAAIC,EAAgB7M,KAAK8G,MAAMH,SAAS3G,KAAKiG,KACzC6G,EAAUlF,EAAiB5D,GAE3B+I,EAAY,IAAIjJ,WAAW+I,EAAcnI,OAASoI,EAAQpI,QAC9DqI,EAAUnG,IAAIiG,GACdE,EAAUnG,IAAIkG,EAASD,EAAcnI,QACrC1E,KAAKwM,UAAUO,EACnB,MAVI/M,KAAKwM,UAAUxI,EAWvB,EACA4H,EAAQxK,UAAUwL,aAAe,SAAUI,GACvC,OAAOhN,KAAKyC,KAAK+B,WAAaxE,KAAKiG,KAAO+G,CAC9C,EACApB,EAAQxK,UAAU6L,qBAAuB,SAAUC,GAC/C,IAAezK,EAANzC,KAAgByC,KAAMwD,EAAtBjG,KAA+BiG,IACxC,OAAO,IAAIkH,WAAW,SAAShN,OAAOsC,EAAK+B,WAAayB,EAAK,QAAQ9F,OAAOsC,EAAK+B,WAAY,6BAA6BrE,OAAO+M,EAAW,KAChJ,EAKAtB,EAAQxK,UAAUiD,OAAS,SAAUL,GACjChE,KAAKuM,oBACLvM,KAAKwM,UAAUxI,GACf,IAAIT,EAASvD,KAAKoN,eAClB,GAAIpN,KAAK4M,aAAa,GAClB,MAAM5M,KAAKiN,qBAAqBjN,KAAKiG,KAEzC,OAAO1C,CACX,EACAqI,EAAQxK,UAAUiM,YAAc,SAAUrJ,GACtC,OAAOoF,EAAYpJ,MAAM,SAAUkD,GAC/B,OAAQA,EAAG0G,OACP,KAAK,EACD5J,KAAKuM,oBACLvM,KAAKwM,UAAUxI,GACfd,EAAG0G,MAAQ,EACf,KAAK,EACD,OAAK5J,KAAK4M,aAAa,GAChB,CAAC,EAAa5M,KAAKoN,gBADQ,CAAC,EAAa,GAEpD,KAAK,EAED,OADAlK,EAAG2G,OACI,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAExB,GACJ,EACA+B,EAAQxK,UAAUkM,YAAc,SAAUC,GACtC,IAAIC,EAAUC,EACVC,EAAKxK,EA7KqCmG,EAASsE,EAAYC,EAAGC,EA8KtE,OA9K8CxE,EA8K7BrJ,KA9KsC2N,OA8KhC,EA9K+CE,EA8K/B,WACnC,IAAIC,EAASvK,EAAQS,EAAQ+J,EAAO5K,EAAIkJ,EAAUpG,EAAKmG,EACvD,OAAOhD,EAAYpJ,MAAM,SAAUoD,GAC/B,OAAQA,EAAGwG,OACP,KAAK,EACDkE,GAAU,EACV1K,EAAGwG,MAAQ,EACf,KAAK,EACDxG,EAAG0G,KAAKzC,KAAK,CAAC,EAAG,EAAG,EAAG,KACvBmG,EAAW7C,EAAc4C,GACzBnK,EAAGwG,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAa4D,EAASxD,QACtC,KAAK,EACD,IAAMyD,EAAarK,EAAGyG,QAAoBU,KAAO,MAAO,CAAC,EAAa,GAEtE,GADAvG,EAASyJ,EAAWrL,MAChB0L,EACA,MAAM9N,KAAKiN,qBAAqBjN,KAAKoM,UAEzCpM,KAAK2M,aAAa3I,GAClB,IACIT,EAASvD,KAAKoN,eACdU,GAAU,CACd,CACA,MAAOrD,GACH,KAAMA,aAAae,GACf,MAAMf,CAGd,CACAzK,KAAKoM,UAAYpM,KAAKiG,IACtB7C,EAAGwG,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAa,GAC7B,KAAK,EAAG,MAAO,CAAC,EAAa,IAC7B,KAAK,EAGD,OAFAmE,EAAQ3K,EAAGyG,OACX6D,EAAM,CAAEM,MAAOD,GACR,CAAC,EAAa,IACzB,KAAK,EAED,OADA3K,EAAG0G,KAAKzC,KAAK,CAAC,EAAG,CAAE,GAAI,KACjBoG,IAAeA,EAAWlD,OAASrH,EAAKsK,EAASS,QAChD,CAAC,EAAa/K,EAAG5B,KAAKkM,IAD2C,CAAC,EAAa,GAE1F,KAAK,EACDpK,EAAGyG,OACHzG,EAAGwG,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAa,IAC7B,KAAK,GACD,GAAI8D,EAAK,MAAMA,EAAIM,MACnB,MAAO,CAAC,GACZ,KAAK,GAAI,MAAO,CAAC,GACjB,KAAK,GACD,GAAIF,EAAS,CACT,GAAI9N,KAAK4M,aAAa,GAClB,MAAM5M,KAAKiN,qBAAqBjN,KAAKoM,UAEzC,MAAO,CAAC,EAAc7I,EAC1B,CAEA,MADW8I,GAAXlJ,EAAKnD,MAAoBqM,SAAUpG,EAAM9C,EAAG8C,IAAKmG,EAAWjJ,EAAGiJ,SACzD,IAAIe,WAAW,gCAAgChN,OAAOF,EAAWoM,GAAW,QAAQlM,OAAOiM,EAAU,MAAMjM,OAAO8F,EAAK,4BAEzI,GACJ,EAxOG,KAFgE2H,OA8KpC,KA5KjBA,EAAI5C,WAAU,SAAUC,EAASC,GAC/C,SAASgD,EAAU9L,GAAS,IAAMsI,EAAKmD,EAAU7D,KAAK5H,GAAS,CAAE,MAAOqI,GAAKS,EAAOT,EAAI,CAAE,CAC1F,SAAS0D,EAAS/L,GAAS,IAAMsI,EAAKmD,EAAiB,MAAEzL,GAAS,CAAE,MAAOqI,GAAKS,EAAOT,EAAI,CAAE,CAC7F,SAASC,EAAKxD,GAJlB,IAAe9E,EAIa8E,EAAOqD,KAAOU,EAAQ/D,EAAO9E,QAJ1CA,EAIyD8E,EAAO9E,MAJhDA,aAAiBwL,EAAIxL,EAAQ,IAAIwL,GAAE,SAAU3C,GAAWA,EAAQ7I,EAAQ,KAIjB+I,KAAK+C,EAAWC,EAAW,CAC7GzD,GAAMmD,EAAYA,EAAUpG,MAAM4B,EAASsE,GAAc,KAAK3D,OAClE,GAoOA,EACA4B,EAAQxK,UAAUgN,kBAAoB,SAAUb,GAC5C,OAAOvN,KAAKqO,iBAAiBd,GAAQ,EACzC,EACA3B,EAAQxK,UAAUkN,aAAe,SAAUf,GACvC,OAAOvN,KAAKqO,iBAAiBd,GAAQ,EACzC,EACA3B,EAAQxK,UAAUiN,iBAAmB,SAAUd,EAAQgB,GACnD,OAvMkD,SAAUlF,EAASsE,EAAYE,GACrF,IAAK3D,OAAOW,cAAe,MAAM,IAAItJ,UAAU,wCAC/C,IAAoD8D,EAAhDqE,EAAImE,EAAUpG,MAAM4B,EAASsE,GAAc,IAAQa,EAAI,GAC3D,OAAOnJ,EAAI,CAAC,EAAG4E,EAAK,QAASA,EAAK,SAAUA,EAAK,UAAW5E,EAAE6E,OAAOW,eAAiB,WAAc,OAAO7K,IAAM,EAAGqF,EACpH,SAAS4E,EAAKG,GAASV,EAAEU,KAAI/E,EAAE+E,GAAK,SAAUC,GAAK,OAAO,IAAIW,SAAQ,SAAUyD,EAAG3N,GAAK0N,EAAEnH,KAAK,CAAC+C,EAAGC,EAAGoE,EAAG3N,IAAM,GAAK4N,EAAOtE,EAAGC,EAAI,GAAI,EAAG,CACzI,SAASqE,EAAOtE,EAAGC,GAAK,KACVsE,EADqBjF,EAAEU,GAAGC,IACnBjI,iBAAiBiJ,EAAUL,QAAQC,QAAQ0D,EAAEvM,MAAMiI,GAAGc,KAAKyD,EAAS1D,GAAUE,EAAOoD,EAAE,GAAG,GAAIG,EADtE,CAAE,MAAOlE,GAAKW,EAAOoD,EAAE,GAAG,GAAI/D,EAAI,CAC/E,IAAckE,CADmE,CAEjF,SAASC,EAAQxM,GAASsM,EAAO,OAAQtM,EAAQ,CACjD,SAAS8I,EAAO9I,GAASsM,EAAO,QAAStM,EAAQ,CACjD,SAASgJ,EAAO7B,EAAGc,GAASd,EAAEc,GAAImE,EAAEK,QAASL,EAAE9J,QAAQgK,EAAOF,EAAE,GAAG,GAAIA,EAAE,GAAG,GAAK,CACrF,CA6LeM,CAAiB9O,KAAM+O,WAAW,WACrC,IAAIC,EAAuBC,EAAgBC,EAAUC,EAAYnL,EAAQoL,EAAKC,EAC1EC,EAAKpM,EACT,OAAOkG,EAAYpJ,MAAM,SAAUmD,GAC/B,OAAQA,EAAGyG,OACP,KAAK,EACDoF,EAAwBT,EACxBU,GAAkB,EAClB9L,EAAGyG,MAAQ,EACf,KAAK,EACDzG,EAAG2G,KAAKzC,KAAK,CAAC,EAAG,GAAI,GAAI,KACzB6H,EAAWvE,EAAc4C,GACzBpK,EAAGyG,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAayB,EAAQ6D,EAASlF,SAC9C,KAAK,EACD,IAAMmF,EAAahM,EAAG0G,QAAoBU,KAAO,MAAO,CAAC,EAAa,IAEtE,GADAvG,EAASmL,EAAW/M,MAChBmM,GAA8B,IAAnBU,EACX,MAAMjP,KAAKiN,qBAAqBjN,KAAKoM,UAEzCpM,KAAK2M,aAAa3I,GACdgL,IACAC,EAAiBjP,KAAKuP,gBACtBP,GAAwB,EACxBhP,KAAKwP,YAETrM,EAAGyG,MAAQ,EACf,KAAK,EACDzG,EAAG2G,KAAKzC,KAAK,CAAC,EAAG,EAAG,CAAE,KACtBlE,EAAGyG,MAAQ,EACf,KAAK,EAED,MAAO,CAAC,EAAayB,EAAQrL,KAAKoN,iBACtC,KAAK,EAAG,MAAO,CAAC,EAAajK,EAAG0G,QAChC,KAAK,EAED,OADA1G,EAAG0G,OACsB,KAAnBoF,EACK,CAAC,EAAa,GAElB,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,EAAa,IAC7B,KAAK,EAED,MADAG,EAAMjM,EAAG0G,kBACY2B,GACjB,MAAM4D,EAEV,MAAO,CAAC,EAAa,IACzB,KAAK,GACDpP,KAAKoM,UAAYpM,KAAKiG,IACtB9C,EAAGyG,MAAQ,GACf,KAAK,GAAI,MAAO,CAAC,EAAa,GAC9B,KAAK,GAAI,MAAO,CAAC,EAAa,IAC9B,KAAK,GAGD,OAFAyF,EAAQlM,EAAG0G,OACXyF,EAAM,CAAEtB,MAAOqB,GACR,CAAC,EAAa,IACzB,KAAK,GAED,OADAlM,EAAG2G,KAAKzC,KAAK,CAAC,GAAI,CAAE,GAAI,KAClB8H,IAAeA,EAAW5E,OAASrH,EAAKgM,EAASjB,QAChD,CAAC,EAAa5C,EAAQnI,EAAG5B,KAAK4N,KADmC,CAAC,EAAa,IAE1F,KAAK,GACD/L,EAAG0G,OACH1G,EAAGyG,MAAQ,GACf,KAAK,GAAI,MAAO,CAAC,EAAa,IAC9B,KAAK,GACD,GAAI0F,EAAK,MAAMA,EAAItB,MACnB,MAAO,CAAC,GACZ,KAAK,GAAI,MAAO,CAAC,GACjB,KAAK,GAAI,MAAO,CAAC,GAEzB,GACJ,GACJ,EACApC,EAAQxK,UAAUgM,aAAe,WAC7BqC,EAAQ,OAAa,CACjB,IAAIpD,EAAWrM,KAAK0P,eAChBnM,OAAS,EACb,GAAI8I,GAAY,IAEZ9I,EAAS8I,EAAW,SAEnB,GAAIA,EAAW,IAChB,GAAIA,EAAW,IAEX9I,EAAS8I,OAER,GAAIA,EAAW,IAAM,CAGtB,GAAa,IADTW,EAAOX,EAAW,KACN,CACZrM,KAAK2P,aAAa3C,GAClBhN,KAAKwP,WACL,SAASC,CACb,CAEIlM,EAAS,CAAC,CAElB,MACK,GAAI8I,EAAW,IAAM,CAGtB,GAAa,IADTW,EAAOX,EAAW,KACN,CACZrM,KAAK4P,eAAe5C,GACpBhN,KAAKwP,WACL,SAASC,CACb,CAEIlM,EAAS,EAEjB,KACK,CAED,IAAIiB,EAAa6H,EAAW,IAC5B9I,EAASvD,KAAK6P,iBAAiBrL,EAAY,EAC/C,MAEC,GAAiB,MAAb6H,EAEL9I,EAAS,UAER,GAAiB,MAAb8I,EAEL9I,GAAS,OAER,GAAiB,MAAb8I,EAEL9I,GAAS,OAER,GAAiB,MAAb8I,EAEL9I,EAASvD,KAAK8P,eAEb,GAAiB,MAAbzD,EAEL9I,EAASvD,KAAK+P,eAEb,GAAiB,MAAb1D,EAEL9I,EAASvD,KAAKgQ,cAEb,GAAiB,MAAb3D,EAEL9I,EAASvD,KAAKiQ,eAEb,GAAiB,MAAb5D,EAEL9I,EAASvD,KAAKkQ,eAEb,GAAiB,MAAb7D,EAEL9I,EAASvD,KAAKmQ,eAEb,GAAiB,MAAb9D,EAEL9I,EAASvD,KAAKoQ,cAEb,GAAiB,MAAb/D,EAEL9I,EAASvD,KAAKqQ,eAEb,GAAiB,MAAbhE,EAEL9I,EAASvD,KAAKsQ,eAEb,GAAiB,MAAbjE,EAEL9I,EAASvD,KAAKuQ,eAEb,GAAiB,MAAblE,EAED7H,EAAaxE,KAAKwQ,SACtBjN,EAASvD,KAAK6P,iBAAiBrL,EAAY,QAE1C,GAAiB,MAAb6H,EAED7H,EAAaxE,KAAKyQ,UACtBlN,EAASvD,KAAK6P,iBAAiBrL,EAAY,QAE1C,GAAiB,MAAb6H,EAED7H,EAAaxE,KAAK0Q,UACtBnN,EAASvD,KAAK6P,iBAAiBrL,EAAY,QAE1C,GAAiB,MAAb6H,EAAmB,CAGxB,GAAa,KADTW,EAAOhN,KAAKiQ,WACA,CACZjQ,KAAK4P,eAAe5C,GACpBhN,KAAKwP,WACL,SAASC,CACb,CAEIlM,EAAS,EAEjB,MACK,GAAiB,MAAb8I,EAAmB,CAGxB,GAAa,KADTW,EAAOhN,KAAKkQ,WACA,CACZlQ,KAAK4P,eAAe5C,GACpBhN,KAAKwP,WACL,SAASC,CACb,CAEIlM,EAAS,EAEjB,MACK,GAAiB,MAAb8I,EAAmB,CAGxB,GAAa,KADTW,EAAOhN,KAAKiQ,WACA,CACZjQ,KAAK2P,aAAa3C,GAClBhN,KAAKwP,WACL,SAASC,CACb,CAEIlM,EAAS,CAAC,CAElB,MACK,GAAiB,MAAb8I,EAAmB,CAGxB,GAAa,KADTW,EAAOhN,KAAKkQ,WACA,CACZlQ,KAAK2P,aAAa3C,GAClBhN,KAAKwP,WACL,SAASC,CACb,CAEIlM,EAAS,CAAC,CAElB,MACK,GAAiB,MAAb8I,EAAmB,CAExB,IAAIW,EAAOhN,KAAKwQ,SAChBjN,EAASvD,KAAK2Q,aAAa3D,EAAM,EACrC,MACK,GAAiB,MAAbX,EAEDW,EAAOhN,KAAKyQ,UAChBlN,EAASvD,KAAK2Q,aAAa3D,EAAM,QAEhC,GAAiB,MAAbX,EAEDW,EAAOhN,KAAK0Q,UAChBnN,EAASvD,KAAK2Q,aAAa3D,EAAM,QAEhC,GAAiB,MAAbX,EAEL9I,EAASvD,KAAK4Q,gBAAgB,EAAG,QAEhC,GAAiB,MAAbvE,EAEL9I,EAASvD,KAAK4Q,gBAAgB,EAAG,QAEhC,GAAiB,MAAbvE,EAEL9I,EAASvD,KAAK4Q,gBAAgB,EAAG,QAEhC,GAAiB,MAAbvE,EAEL9I,EAASvD,KAAK4Q,gBAAgB,EAAG,QAEhC,GAAiB,MAAbvE,EAEL9I,EAASvD,KAAK4Q,gBAAgB,GAAI,QAEjC,GAAiB,MAAbvE,EAEDW,EAAOhN,KAAKwQ,SAChBjN,EAASvD,KAAK4Q,gBAAgB5D,EAAM,QAEnC,GAAiB,MAAbX,EAEDW,EAAOhN,KAAKyQ,UAChBlN,EAASvD,KAAK4Q,gBAAgB5D,EAAM,OAEnC,IAAiB,MAAbX,EAML,MAAM,IAAIzK,EAAY,2BAA2BzB,OAAOF,EAAWoM,KAJ/DW,EAAOhN,KAAK0Q,UAChBnN,EAASvD,KAAK4Q,gBAAgB5D,EAAM,EAIxC,CACAhN,KAAKwP,WAEL,IADA,IAAIlD,EAAQtM,KAAKsM,MACVA,EAAM5H,OAAS,GAAG,CAErB,IAAImM,EAAQvE,EAAMA,EAAM5H,OAAS,GACjC,GAAmB,IAAfmM,EAAMnQ,KAA8B,CAGpC,GAFAmQ,EAAMC,MAAMD,EAAME,UAAYxN,EAC9BsN,EAAME,WACFF,EAAME,WAAaF,EAAM7D,KAKzB,SAASyC,EAJTnD,EAAM9B,MACNjH,EAASsN,EAAMC,KAKvB,KACK,IAAmB,IAAfD,EAAMnQ,KAAgC,CAC3C,QAjeZsQ,EACe,WADfA,SAiemCzN,IAheI,WAAZyN,EAieX,MAAM,IAAIpP,EAAY,uDAAyD2B,GAEnF,GAAe,cAAXA,EACA,MAAM,IAAI3B,EAAY,oCAE1BiP,EAAMI,IAAM1N,EACZsN,EAAMnQ,KAAO,EACb,SAAS+O,CACb,CAKI,GAFAoB,EAAMK,IAAIL,EAAMI,KAAO1N,EACvBsN,EAAMM,YACFN,EAAMM,YAAcN,EAAM7D,KAIzB,CACD6D,EAAMI,IAAM,KACZJ,EAAMnQ,KAAO,EACb,SAAS+O,CACb,CAPInD,EAAM9B,MACNjH,EAASsN,EAAMK,GAOvB,CACJ,CACA,OAAO3N,CACX,CA5fgB,IAChByN,CA4fJ,EACApF,EAAQxK,UAAUsO,aAAe,WAK7B,OA/fiB,IA2fb1P,KAAKqM,WACLrM,KAAKqM,SAAWrM,KAAKgQ,UAGlBhQ,KAAKqM,QAChB,EACAT,EAAQxK,UAAUoO,SAAW,WACzBxP,KAAKqM,UAlgBY,CAmgBrB,EACAT,EAAQxK,UAAUmO,cAAgB,WAC9B,IAAIlD,EAAWrM,KAAK0P,eACpB,OAAQrD,GACJ,KAAK,IACD,OAAOrM,KAAKiQ,UAChB,KAAK,IACD,OAAOjQ,KAAKkQ,UAChB,QACI,GAAI7D,EAAW,IACX,OAAOA,EAAW,IAGlB,MAAM,IAAIzK,EAAY,iCAAiCzB,OAAOF,EAAWoM,KAIzF,EACAT,EAAQxK,UAAUuO,aAAe,SAAU3C,GACvC,GAAIA,EAAOhN,KAAKiM,aACZ,MAAM,IAAIrK,EAAY,oCAAoCzB,OAAO6M,EAAM,4BAA4B7M,OAAOH,KAAKiM,aAAc,MAEjIjM,KAAKsM,MAAMjF,KAAK,CACZ3G,KAAM,EACNsM,KAAMA,EACNiE,IAAK,KACLE,UAAW,EACXD,IAAK,CAAC,GAEd,EACAtF,EAAQxK,UAAUwO,eAAiB,SAAU5C,GACzC,GAAIA,EAAOhN,KAAKgM,eACZ,MAAM,IAAIpK,EAAY,sCAAsCzB,OAAO6M,EAAM,wBAAwB7M,OAAOH,KAAKgM,eAAgB,MAEjIhM,KAAKsM,MAAMjF,KAAK,CACZ3G,KAAM,EACNsM,KAAMA,EACN8D,MAAO,IAAI5P,MAAM8L,GACjB+D,SAAU,GAElB,EACAnF,EAAQxK,UAAUyO,iBAAmB,SAAUrL,EAAY4M,GACvD,IAAIlO,EACJ,GAAIsB,EAAaxE,KAAK8L,aAClB,MAAM,IAAIlK,EAAY,2CAA2CzB,OAAOqE,EAAY,sBAAsBrE,OAAOH,KAAK8L,aAAc,MAExI,GAAI9L,KAAK8G,MAAMtC,WAAaxE,KAAKiG,IAAMmL,EAAe5M,EAClD,MAAMkH,EAEV,IACInI,EADAb,EAAS1C,KAAKiG,IAAMmL,EAYxB,OATI7N,EADAvD,KAAKqR,kBAA+C,QAA1BnO,EAAKlD,KAAKmM,kBAA+B,IAAPjJ,OAAgB,EAASA,EAAGoF,YAAY9D,IAC3FxE,KAAKmM,WAAW9H,OAAOrE,KAAK8G,MAAOpE,EAAQ8B,GAE/CA,EAAamD,EJhevB,SAAsBb,EAAOC,EAAavC,GAC7C,IAAI8M,EAAcxK,EAAMH,SAASI,EAAaA,EAAcvC,GAC5D,OAAOkD,EAAkBrD,OAAOiN,EACpC,CI8dqBC,CAAavR,KAAK8G,MAAOpE,EAAQ8B,GAGjCqC,EAAa7G,KAAK8G,MAAOpE,EAAQ8B,GAE9CxE,KAAKiG,KAAOmL,EAAe5M,EACpBjB,CACX,EACAqI,EAAQxK,UAAUiQ,cAAgB,WAC9B,OAAIrR,KAAKsM,MAAM5H,OAAS,GAEE,IADV1E,KAAKsM,MAAMtM,KAAKsM,MAAM5H,OAAS,GAC9BhE,IAGrB,EACAkL,EAAQxK,UAAUuP,aAAe,SAAUnM,EAAYgN,GACnD,GAAIhN,EAAaxE,KAAK+L,aAClB,MAAM,IAAInK,EAAY,oCAAoCzB,OAAOqE,EAAY,sBAAsBrE,OAAOH,KAAK+L,aAAc,MAEjI,IAAK/L,KAAK4M,aAAapI,EAAagN,GAChC,MAAM9F,EAEV,IAAIhJ,EAAS1C,KAAKiG,IAAMuL,EACpBjO,EAASvD,KAAK8G,MAAMH,SAASjE,EAAQA,EAAS8B,GAElD,OADAxE,KAAKiG,KAAOuL,EAAahN,EAClBjB,CACX,EACAqI,EAAQxK,UAAUwP,gBAAkB,SAAU5D,EAAMwE,GAChD,GAAIxE,EAAOhN,KAAKkM,aACZ,MAAM,IAAItK,EAAY,oCAAoCzB,OAAO6M,EAAM,sBAAsB7M,OAAOH,KAAKkM,aAAc,MAE3H,IAAIuF,EAAUzR,KAAKyC,KAAKgJ,QAAQzL,KAAKiG,IAAMuL,GACvC7Q,EAAOX,KAAK2Q,aAAa3D,EAAMwE,EAAa,GAChD,OAAOxR,KAAK6L,eAAexH,OAAO1D,EAAM8Q,EAASzR,KAAKoF,QAC1D,EACAwG,EAAQxK,UAAUoP,OAAS,WACvB,OAAOxQ,KAAKyC,KAAKiP,SAAS1R,KAAKiG,IACnC,EACA2F,EAAQxK,UAAUqP,QAAU,WACxB,OAAOzQ,KAAKyC,KAAKkP,UAAU3R,KAAKiG,IACpC,EACA2F,EAAQxK,UAAUsP,QAAU,WACxB,OAAO1Q,KAAKyC,KAAKQ,UAAUjD,KAAKiG,IACpC,EACA2F,EAAQxK,UAAU4O,OAAS,WACvB,IAAI5N,EAAQpC,KAAKyC,KAAKiP,SAAS1R,KAAKiG,KAEpC,OADAjG,KAAKiG,MACE7D,CACX,EACAwJ,EAAQxK,UAAUgP,OAAS,WACvB,IAAIhO,EAAQpC,KAAKyC,KAAKgJ,QAAQzL,KAAKiG,KAEnC,OADAjG,KAAKiG,MACE7D,CACX,EACAwJ,EAAQxK,UAAU6O,QAAU,WACxB,IAAI7N,EAAQpC,KAAKyC,KAAKkP,UAAU3R,KAAKiG,KAErC,OADAjG,KAAKiG,KAAO,EACL7D,CACX,EACAwJ,EAAQxK,UAAUiP,QAAU,WACxB,IAAIjO,EAAQpC,KAAKyC,KAAKmP,SAAS5R,KAAKiG,KAEpC,OADAjG,KAAKiG,KAAO,EACL7D,CACX,EACAwJ,EAAQxK,UAAU8O,QAAU,WACxB,IAAI9N,EAAQpC,KAAKyC,KAAKQ,UAAUjD,KAAKiG,KAErC,OADAjG,KAAKiG,KAAO,EACL7D,CACX,EACAwJ,EAAQxK,UAAUkP,QAAU,WACxB,IAAIlO,EAAQpC,KAAKyC,KAAKO,SAAShD,KAAKiG,KAEpC,OADAjG,KAAKiG,KAAO,EACL7D,CACX,EACAwJ,EAAQxK,UAAU+O,QAAU,WACxB,INlrBkB1N,EAAMC,EMkrBpBN,GNlrBcK,EMkrBIzC,KAAKyC,KNlrBHC,EMkrBS1C,KAAKiG,IN/qB5B,WAFHxD,EAAKQ,UAAUP,GAChBD,EAAKQ,UAAUP,EAAS,IMkrB9B,OADA1C,KAAKiG,KAAO,EACL7D,CACX,EACAwJ,EAAQxK,UAAUmP,QAAU,WACxB,IAAInO,EAAQW,EAAS/C,KAAKyC,KAAMzC,KAAKiG,KAErC,OADAjG,KAAKiG,KAAO,EACL7D,CACX,EACAwJ,EAAQxK,UAAU0O,QAAU,WACxB,IAAI1N,EAAQpC,KAAKyC,KAAKoP,WAAW7R,KAAKiG,KAEtC,OADAjG,KAAKiG,KAAO,EACL7D,CACX,EACAwJ,EAAQxK,UAAU2O,QAAU,WACxB,IAAI3N,EAAQpC,KAAKyC,KAAKqP,WAAW9R,KAAKiG,KAEtC,OADAjG,KAAKiG,KAAO,EACL7D,CACX,EACOwJ,CACX,CAvoB4B,GCnFjBmG,EAAuB,CAAC,EAsB5B,SAAS1E,EAAYrJ,EAAQgO,GAGhC,YAFgB,IAAZA,IAAsBA,EAAUD,GACtB,IAAI,EAAQC,EAAQnG,eAAgBmG,EAAQ5M,QAAS4M,EAAQlG,aAAckG,EAAQjG,aAAciG,EAAQhG,eAAgBgG,EAAQ/F,aAAc+F,EAAQ9F,cACtJmB,YAAYrJ,EAC/B,CCvBO,IAEHiO,EAAyB,WACzB,SAASA,EAAQpG,EAAgBzG,EAAS8M,EAAUC,EAAmBC,EAAUC,EAAcC,EAAiBC,QACrF,IAAnB1G,IAA6BA,EAAiBjH,EAAeY,mBACjD,IAAZJ,IAAsBA,OAAUiB,QACnB,IAAb6L,IAAuBA,EANJ,UAOG,IAAtBC,IAAgCA,EANH,WAOhB,IAAbC,IAAuBA,GAAW,QACjB,IAAjBC,IAA2BA,GAAe,QACtB,IAApBC,IAA8BA,GAAkB,QACxB,IAAxBC,IAAkCA,GAAsB,GAC5DvS,KAAK6L,eAAiBA,EACtB7L,KAAKoF,QAAUA,EACfpF,KAAKkS,SAAWA,EAChBlS,KAAKmS,kBAAoBA,EACzBnS,KAAKoS,SAAWA,EAChBpS,KAAKqS,aAAeA,EACpBrS,KAAKsS,gBAAkBA,EACvBtS,KAAKuS,oBAAsBA,EAC3BvS,KAAKiG,IAAM,EACXjG,KAAKyC,KAAO,IAAIsB,SAAS,IAAI8D,YAAY7H,KAAKmS,oBAC9CnS,KAAK8G,MAAQ,IAAIhD,WAAW9D,KAAKyC,KAAKuB,OAC1C,CAkYA,OAjYAiO,EAAQ7Q,UAAUmL,kBAAoB,WAClCvM,KAAKiG,IAAM,CACf,EAMAgM,EAAQ7Q,UAAUoR,gBAAkB,SAAUjP,GAG1C,OAFAvD,KAAKuM,oBACLvM,KAAKyS,SAASlP,EAAQ,GACfvD,KAAK8G,MAAMH,SAAS,EAAG3G,KAAKiG,IACvC,EAIAgM,EAAQ7Q,UAAUkC,OAAS,SAAUC,GAGjC,OAFAvD,KAAKuM,oBACLvM,KAAKyS,SAASlP,EAAQ,GACfvD,KAAK8G,MAAMqC,MAAM,EAAGnJ,KAAKiG,IACpC,EACAgM,EAAQ7Q,UAAUqR,SAAW,SAAUlP,EAAQmP,GAC3C,GAAIA,EAAQ1S,KAAKkS,SACb,MAAM,IAAI5P,MAAM,6BAA6BnC,OAAOuS,IAE1C,MAAVnP,EACAvD,KAAK2S,YAEkB,kBAAXpP,EACZvD,KAAK4S,cAAcrP,GAEI,iBAAXA,EACZvD,KAAK6S,aAAatP,GAEK,iBAAXA,EACZvD,KAAK8S,aAAavP,GAGlBvD,KAAK+S,aAAaxP,EAAQmP,EAElC,EACAT,EAAQ7Q,UAAU4R,wBAA0B,SAAUC,GAClD,IAAIC,EAAelT,KAAKiG,IAAMgN,EAC1BjT,KAAKyC,KAAK+B,WAAa0O,GACvBlT,KAAKmT,aAA4B,EAAfD,EAE1B,EACAjB,EAAQ7Q,UAAU+R,aAAe,SAAUC,GACvC,IAAIrG,EAAY,IAAIlF,YAAYuL,GAC5BC,EAAW,IAAIvP,WAAWiJ,GAC1BuG,EAAU,IAAIvP,SAASgJ,GAC3BsG,EAASzM,IAAI5G,KAAK8G,OAClB9G,KAAKyC,KAAO6Q,EACZtT,KAAK8G,MAAQuM,CACjB,EACApB,EAAQ7Q,UAAUuR,UAAY,WAC1B3S,KAAKuT,QAAQ,IACjB,EACAtB,EAAQ7Q,UAAUwR,cAAgB,SAAUrP,IACzB,IAAXA,EACAvD,KAAKuT,QAAQ,KAGbvT,KAAKuT,QAAQ,IAErB,EACAtB,EAAQ7Q,UAAUyR,aAAe,SAAUtP,GACnCiQ,OAAOC,cAAclQ,KAAYvD,KAAKuS,oBAClChP,GAAU,EACNA,EAAS,IAETvD,KAAKuT,QAAQhQ,GAERA,EAAS,KAEdvD,KAAKuT,QAAQ,KACbvT,KAAKuT,QAAQhQ,IAERA,EAAS,OAEdvD,KAAKuT,QAAQ,KACbvT,KAAK0T,SAASnQ,IAETA,EAAS,YAEdvD,KAAKuT,QAAQ,KACbvT,KAAK2T,SAASpQ,KAIdvD,KAAKuT,QAAQ,KACbvT,KAAK4T,SAASrQ,IAIdA,IAAW,GAEXvD,KAAKuT,QAAQ,IAAQhQ,EAAS,IAEzBA,IAAW,KAEhBvD,KAAKuT,QAAQ,KACbvT,KAAK6T,QAAQtQ,IAERA,IAAW,OAEhBvD,KAAKuT,QAAQ,KACbvT,KAAK8T,SAASvQ,IAETA,IAAW,YAEhBvD,KAAKuT,QAAQ,KACbvT,KAAK+T,SAASxQ,KAIdvD,KAAKuT,QAAQ,KACbvT,KAAKgU,SAASzQ,IAMlBvD,KAAKqS,cAELrS,KAAKuT,QAAQ,KACbvT,KAAKiU,SAAS1Q,KAIdvD,KAAKuT,QAAQ,KACbvT,KAAKkU,SAAS3Q,GAG1B,EACA0O,EAAQ7Q,UAAU+S,kBAAoB,SAAU3P,GAC5C,GAAIA,EAAa,GAEbxE,KAAKuT,QAAQ,IAAO/O,QAEnB,GAAIA,EAAa,IAElBxE,KAAKuT,QAAQ,KACbvT,KAAKuT,QAAQ/O,QAEZ,GAAIA,EAAa,MAElBxE,KAAKuT,QAAQ,KACbvT,KAAK0T,SAASlP,OAEb,MAAIA,EAAa,YAMlB,MAAM,IAAIlC,MAAM,oBAAoBnC,OAAOqE,EAAY,oBAJvDxE,KAAKuT,QAAQ,KACbvT,KAAK2T,SAASnP,EAIlB,CACJ,EACAyN,EAAQ7Q,UAAU0R,aAAe,SAAUvP,GAGvC,GADgBA,EAAOmB,OACP4B,EAAwB,CACpC,IAAI9B,EAAasB,EAAUvC,GAC3BvD,KAAKgT,wBAJW,EAI6BxO,GAC7CxE,KAAKmU,kBAAkB3P,GACvB+B,EAAahD,EAAQvD,KAAK8G,MAAO9G,KAAKiG,KACtCjG,KAAKiG,KAAOzB,CAChB,MAEQA,EAAasB,EAAUvC,GAC3BvD,KAAKgT,wBAXW,EAW6BxO,GAC7CxE,KAAKmU,kBAAkB3P,GN3J5B,SAAsBuB,EAAKU,EAAQC,GAItC,IAHA,IAAIV,EAAYD,EAAIrB,OAChBhC,EAASgE,EACTT,EAAM,EACHA,EAAMD,GAAW,CACpB,IAAI5D,EAAQ2D,EAAIG,WAAWD,KAC3B,GAAa,WAAR7D,EAAL,CAKK,GAAa,WAARA,EAIL,CAED,GAAIA,GAAS,OAAUA,GAAS,OAExB6D,EAAMD,EAAW,CACjB,IAAIG,EAAQJ,EAAIG,WAAWD,GACF,QAAZ,MAARE,OACCF,EACF7D,IAAkB,KAARA,IAAkB,KAAe,KAAR+D,GAAiB,MAE5D,CAES,WAAR/D,GAODqE,EAAO/D,KAAcN,GAAS,GAAM,EAAQ,IAC5CqE,EAAO/D,KAAcN,GAAS,GAAM,GAAQ,IAC5CqE,EAAO/D,KAAcN,GAAS,EAAK,GAAQ,MAP3CqE,EAAO/D,KAAcN,GAAS,GAAM,GAAQ,IAC5CqE,EAAO/D,KAAcN,GAAS,EAAK,GAAQ,IAQnD,MAzBIqE,EAAO/D,KAAcN,GAAS,EAAK,GAAQ,IA0B/CqE,EAAO/D,KAAqB,GAARN,EAAgB,GADpC,MA9BIqE,EAAO/D,KAAYN,CAgC3B,CACJ,CMmHYgS,CAAa7Q,EAAQvD,KAAK8G,MAAO9G,KAAKiG,KACtCjG,KAAKiG,KAAOzB,CAEpB,EACAyN,EAAQ7Q,UAAU2R,aAAe,SAAUxP,EAAQmP,GAE/C,IAAI2B,EAAMrU,KAAK6L,eAAe1G,YAAY5B,EAAQvD,KAAKoF,SACvD,GAAW,MAAPiP,EACArU,KAAKsU,gBAAgBD,QAEpB,GAAInT,MAAMqN,QAAQhL,GACnBvD,KAAKuU,YAAYhR,EAAQmP,QAExB,GAAI7K,YAAYC,OAAOvE,GACxBvD,KAAKwU,aAAajR,OAEjB,IAAsB,iBAAXA,EAKZ,MAAM,IAAIjB,MAAM,wBAAwBnC,OAAOY,OAAOK,UAAUd,SAASmH,MAAMlE,KAJ/EvD,KAAKyU,UAAUlR,EAAQmP,EAK3B,CACJ,EACAT,EAAQ7Q,UAAUoT,aAAe,SAAUjR,GACvC,IAAIyJ,EAAOzJ,EAAOiB,WAClB,GAAIwI,EAAO,IAEPhN,KAAKuT,QAAQ,KACbvT,KAAKuT,QAAQvG,QAEZ,GAAIA,EAAO,MAEZhN,KAAKuT,QAAQ,KACbvT,KAAK0T,SAAS1G,OAEb,MAAIA,EAAO,YAMZ,MAAM,IAAI1K,MAAM,qBAAqBnC,OAAO6M,IAJ5ChN,KAAKuT,QAAQ,KACbvT,KAAK2T,SAAS3G,EAIlB,CACA,IAAIlG,EAAQc,EAAiBrE,GAC7BvD,KAAK0U,SAAS5N,EAClB,EACAmL,EAAQ7Q,UAAUmT,YAAc,SAAUhR,EAAQmP,GAC9C,IAAI1F,EAAOzJ,EAAOmB,OAClB,GAAIsI,EAAO,GAEPhN,KAAKuT,QAAQ,IAAOvG,QAEnB,GAAIA,EAAO,MAEZhN,KAAKuT,QAAQ,KACbvT,KAAK0T,SAAS1G,OAEb,MAAIA,EAAO,YAMZ,MAAM,IAAI1K,MAAM,oBAAoBnC,OAAO6M,IAJ3ChN,KAAKuT,QAAQ,KACbvT,KAAK2T,SAAS3G,EAIlB,CACA,IAAK,IAAIvE,EAAK,EAAGkM,EAAWpR,EAAQkF,EAAKkM,EAASjQ,OAAQ+D,IAAM,CAC5D,IAAImM,EAAOD,EAASlM,GACpBzI,KAAKyS,SAASmC,EAAMlC,EAAQ,EAChC,CACJ,EACAT,EAAQ7Q,UAAUyT,sBAAwB,SAAUtR,EAAQuR,GAExD,IADA,IAAIC,EAAQ,EACHtM,EAAK,EAAGuM,EAASF,EAAMrM,EAAKuM,EAAOtQ,OAAQ+D,SAE5BpC,IAAhB9C,EADMyR,EAAOvM,KAEbsM,IAGR,OAAOA,CACX,EACA9C,EAAQ7Q,UAAUqT,UAAY,SAAUlR,EAAQmP,GAC5C,IAAIoC,EAAO/T,OAAO+T,KAAKvR,GACnBvD,KAAKoS,UACL0C,EAAKG,OAET,IAAIjI,EAAOhN,KAAKsS,gBAAkBtS,KAAK6U,sBAAsBtR,EAAQuR,GAAQA,EAAKpQ,OAClF,GAAIsI,EAAO,GAEPhN,KAAKuT,QAAQ,IAAOvG,QAEnB,GAAIA,EAAO,MAEZhN,KAAKuT,QAAQ,KACbvT,KAAK0T,SAAS1G,OAEb,MAAIA,EAAO,YAMZ,MAAM,IAAI1K,MAAM,yBAAyBnC,OAAO6M,IAJhDhN,KAAKuT,QAAQ,KACbvT,KAAK2T,SAAS3G,EAIlB,CACA,IAAK,IAAIvE,EAAK,EAAGyM,EAASJ,EAAMrM,EAAKyM,EAAOxQ,OAAQ+D,IAAM,CACtD,IAAIwI,EAAMiE,EAAOzM,GACbrG,EAAQmB,EAAO0N,GACbjR,KAAKsS,sBAA6BjM,IAAVjE,IAC1BpC,KAAK8S,aAAa7B,GAClBjR,KAAKyS,SAASrQ,EAAOsQ,EAAQ,GAErC,CACJ,EACAT,EAAQ7Q,UAAUkT,gBAAkB,SAAUD,GAC1C,IAAIrH,EAAOqH,EAAI1T,KAAK+D,OACpB,GAAa,IAATsI,EAEAhN,KAAKuT,QAAQ,UAEZ,GAAa,IAATvG,EAELhN,KAAKuT,QAAQ,UAEZ,GAAa,IAATvG,EAELhN,KAAKuT,QAAQ,UAEZ,GAAa,IAATvG,EAELhN,KAAKuT,QAAQ,UAEZ,GAAa,KAATvG,EAELhN,KAAKuT,QAAQ,UAEZ,GAAIvG,EAAO,IAEZhN,KAAKuT,QAAQ,KACbvT,KAAKuT,QAAQvG,QAEZ,GAAIA,EAAO,MAEZhN,KAAKuT,QAAQ,KACbvT,KAAK0T,SAAS1G,OAEb,MAAIA,EAAO,YAMZ,MAAM,IAAI1K,MAAM,+BAA+BnC,OAAO6M,IAJtDhN,KAAKuT,QAAQ,KACbvT,KAAK2T,SAAS3G,EAIlB,CACAhN,KAAK6T,QAAQQ,EAAI3T,MACjBV,KAAK0U,SAASL,EAAI1T,KACtB,EACAsR,EAAQ7Q,UAAUmS,QAAU,SAAUnR,GAClCpC,KAAKgT,wBAAwB,GAC7BhT,KAAKyC,KAAK0S,SAASnV,KAAKiG,IAAK7D,GAC7BpC,KAAKiG,KACT,EACAgM,EAAQ7Q,UAAUsT,SAAW,SAAUU,GACnC,IAAIpI,EAAOoI,EAAO1Q,OAClB1E,KAAKgT,wBAAwBhG,GAC7BhN,KAAK8G,MAAMF,IAAIwO,EAAQpV,KAAKiG,KAC5BjG,KAAKiG,KAAO+G,CAChB,EACAiF,EAAQ7Q,UAAUyS,QAAU,SAAUzR,GAClCpC,KAAKgT,wBAAwB,GAC7BhT,KAAKyC,KAAK4S,QAAQrV,KAAKiG,IAAK7D,GAC5BpC,KAAKiG,KACT,EACAgM,EAAQ7Q,UAAUsS,SAAW,SAAUtR,GACnCpC,KAAKgT,wBAAwB,GAC7BhT,KAAKyC,KAAK6S,UAAUtV,KAAKiG,IAAK7D,GAC9BpC,KAAKiG,KAAO,CAChB,EACAgM,EAAQ7Q,UAAU0S,SAAW,SAAU1R,GACnCpC,KAAKgT,wBAAwB,GAC7BhT,KAAKyC,KAAK8S,SAASvV,KAAKiG,IAAK7D,GAC7BpC,KAAKiG,KAAO,CAChB,EACAgM,EAAQ7Q,UAAUuS,SAAW,SAAUvR,GACnCpC,KAAKgT,wBAAwB,GAC7BhT,KAAKyC,KAAKK,UAAU9C,KAAKiG,IAAK7D,GAC9BpC,KAAKiG,KAAO,CAChB,EACAgM,EAAQ7Q,UAAU2S,SAAW,SAAU3R,GACnCpC,KAAKgT,wBAAwB,GAC7BhT,KAAKyC,KAAK+S,SAASxV,KAAKiG,IAAK7D,GAC7BpC,KAAKiG,KAAO,CAChB,EACAgM,EAAQ7Q,UAAU6S,SAAW,SAAU7R,GACnCpC,KAAKgT,wBAAwB,GAC7BhT,KAAKyC,KAAKgT,WAAWzV,KAAKiG,IAAK7D,GAC/BpC,KAAKiG,KAAO,CAChB,EACAgM,EAAQ7Q,UAAU8S,SAAW,SAAU9R,GACnCpC,KAAKgT,wBAAwB,GAC7BhT,KAAKyC,KAAKiT,WAAW1V,KAAKiG,IAAK7D,GAC/BpC,KAAKiG,KAAO,CAChB,EACAgM,EAAQ7Q,UAAUwS,SAAW,SAAUxR,GACnCpC,KAAKgT,wBAAwB,GRhZ9B,SAAmBvQ,EAAMC,EAAQN,GACpC,IAAIO,EAAOP,EAAQ,WACfS,EAAMT,EACVK,EAAKK,UAAUJ,EAAQC,GACvBF,EAAKK,UAAUJ,EAAS,EAAGG,EAC/B,CQ4YQ8S,CAAU3V,KAAKyC,KAAMzC,KAAKiG,IAAK7D,GAC/BpC,KAAKiG,KAAO,CAChB,EACAgM,EAAQ7Q,UAAU4S,SAAW,SAAU5R,GACnCpC,KAAKgT,wBAAwB,GAC7BxQ,EAASxC,KAAKyC,KAAMzC,KAAKiG,IAAK7D,GAC9BpC,KAAKiG,KAAO,CAChB,EACOgM,CACX,CAxZ4B,GCLxB2D,EAAuB,CAAC,EAOrB,SAAStS,EAAOlB,EAAO4P,GAG1B,YAFgB,IAAZA,IAAsBA,EAAU4D,GACtB,IAAI3D,EAAQD,EAAQnG,eAAgBmG,EAAQ5M,QAAS4M,EAAQE,SAAUF,EAAQG,kBAAmBH,EAAQI,SAAUJ,EAAQK,aAAcL,EAAQM,gBAAiBN,EAAQO,qBAC1KC,gBAAgBpQ,EACnC,CCKO,MAAMyT,EAAc,SACrB,EAAa,MAEbC,EAAkB/U,OAAOgV,eAC7BhV,OAAOgV,eAAe,IAAIjS,aAC1BpC,YAEF,SAASsU,EAAcC,EAASC,GAC9B,MAAMC,EAAM,IAAIrS,WAAWmS,EAAQzR,WAAa0R,EAAQ1R,YAGxD,OAFA2R,EAAIvP,IAAI,IAAI9C,WAAWmS,GAAU,GACjCE,EAAIvP,IAAI,IAAI9C,WAAWoS,GAAUD,EAAQzR,YAClC2R,EAAInS,MACb,CAEA,SAASoS,EAAYC,EAAKC,GACxB,IAAKA,EAAI,MAAM,IAAIhU,MAAM,mBACzB,MAAkB,iBAAPgU,EAAwBF,EAAYC,EAAKC,EAAGC,MAAM,MACtC,IAAdD,EAAG5R,OAAqB2R,EACrBD,EAAYC,EAAIC,EAAG,IAAKA,EAAGnN,MAAM,GAC/C,CAEA,SAASqN,EAAYH,EAAKhU,EAAO,KAAMoU,GAAc,GACnD,GAAIJ,aAAetV,OAAQ,CACzB,IAAI2V,EAAS,CAAC,EACd,IAAK,IAAIC,KAAKN,EACZK,EAAOC,GAAKH,EAAYH,EAAIM,GAAIA,EAAGF,GAErC,OAAOC,CACT,CACA,GAAIL,aAAenV,MACjB,OAAOmV,EAAInF,KAAI,CAAC7G,EAAGhF,IAAMmR,EAAYnM,EAAG,KAAMoM,KAEhD,GAAmB,mBAARJ,EAAoB,CAC7B,GAAIA,EAAIO,WAAY,CAClB,MAAMF,EAASG,KAAKC,MAAMD,KAAKE,UAAUV,EAAIO,aAU7C,OATIvU,IACFqU,EAAOrU,KAAOA,EACdgU,EAAIO,WAAWvU,KAAOA,GAEpBoU,GACEC,EAAOM,YAAcN,EAAOM,WAAWC,mBAClCP,EAAOM,WAAWC,WAAoB,QAG1C,CAAEvW,KAAM,WAAYwW,SAAUR,EACvC,CACE,MAAO,CAAEhW,KAAM,WAEnB,CAAO,MAAmB,iBAAR2V,EACT,CAAE3V,KAAM,UACS,iBAAR2V,EACT,CAAE3V,KAAM,UACS,kBAAR2V,EACT,CAAE3V,KAAM,WACE,OAAR2V,EACF,CAAE3V,KAAM,QAER,CAAC,CAEZ,CAsIA,MAAMyW,EACJ,WAAAzV,CAAY0V,EAASC,EAAUC,EAAM1N,GACnC5J,KAAKuX,SAAWH,EAChBpX,KAAKwX,UAAYH,EACjBrX,KAAKyX,MAAQH,EACbtX,KAAK0X,OAAS9N,GAAS,QACvB5J,KAAK2X,MAAQ,KACb3X,KAAK4X,SAAU,CACjB,CAEA,KAAAC,GACM7X,KAAK4X,QACP5X,KAAK8X,SAEL9X,KAAK2X,MAAQI,YAAW,KACtB/X,KAAKwX,UAAU/P,MAAMzH,KAAMA,KAAKyX,MAAM,GACrB,IAAhBzX,KAAKuX,UACRvX,KAAK4X,SAAU,EAEnB,CAEA,KAAAI,GACMhY,KAAK2X,OACPM,aAAajY,KAAK2X,OAClB3X,KAAK2X,MAAQ,KACb3X,KAAK4X,SAAU,GAEfM,QAAQC,KAAK,qBAAqBnY,KAAK0X,+BAE3C,CAEA,KAAAI,GACM9X,KAAK2X,OACPM,aAAajY,KAAK2X,OAEpB3X,KAAK2X,MAAQI,YAAW,KACtB/X,KAAKwX,UAAU/P,MAAMzH,KAAMA,KAAKyX,MAAM,GACrB,IAAhBzX,KAAKuX,UACRvX,KAAK4X,SAAU,CACjB,EAWK,MAAMQ,UAAY,KACvB,WAAA1W,CACE2W,GACA,UACEC,EAAY,KAAI,gBAChBC,EAAkB,KAAI,KACtBlW,EAAO,KAAI,OACXmW,EAAS,KAAI,eACbC,EAAiB,KAAI,wBACrBC,EAA0B,EAAC,MAC3BC,GAAQ,EAAK,UACbC,EAAY,KAAI,OAChBC,GAAS,EAAK,OACdC,EAAS,OAwBX,GArBAC,MAAMJ,GACN3Y,KAAKgZ,QAAUR,GAAU,CAAC,GAC1B,QAAOF,GAAkC,iBAAdA,IAC3B,QAAOA,EAAW,yBAClBtY,KAAKiZ,WAAaX,EAClBtY,KAAKkZ,MAAQ7W,EACbrC,KAAKmZ,QAAUL,GAAU,IACzB9Y,KAAKoZ,iBAAmBR,EACxB5Y,KAAKqZ,QAAUR,EACf7Y,KAAKuY,gBAAkBA,GAAmB,CAAC,EAC3CvY,KAAKsZ,oBAAsB,IAAIC,QAC/BvZ,KAAKwZ,yBAA2Bd,EAChC1Y,KAAKyZ,aAAe,CAAC,EACrBzZ,KAAK0Z,gBAAkBjB,GAAkB,GAGzCzY,KAAK2Z,UAAY,CAAC,EAClB3Z,KAAK4Z,cAAgB,CACnBC,SAAU7Z,KAAK2Z,WAGbtB,EAAY,CACdrY,KAAK8Z,YAAY,CACfC,GAAI,WACJrZ,KAAM,WACN2B,KAAM,yBAAyBrC,KAAKoZ,oBAAoBpZ,KAAKiZ,aAC7De,OAAQ,CAAEC,iBAAiB,EAAMC,WAAY,UAC7CC,KAAMna,KAAKoa,MAAMC,KAAKra,MACtBsa,YAAata,KAAKua,kBAAkBF,KAAKra,MACzCwa,cAAe,CACb7Y,OAAQ3B,KAAKya,gBAAgBJ,KAAKra,MAClC0a,OAAQ1a,KAAK2a,gBAAgBN,KAAKra,MAClC0F,QAAS1F,KAAK4a,iBAAiBP,KAAKra,MACpC6a,OAAQ7a,KAAK8a,gBAAgBT,KAAKra,SAGtCA,KAAK+a,GAAG,SAAU/a,KAAKgb,eAAeX,KAAKra,OAC3CA,KAAK+a,GAAG,QAAS7C,QAAQlK,QAEzB,QAAOqK,EAAW4C,cAAgB5C,EAAW6C,aAC7C,aAC4B7U,IAA1BgS,EAAW8C,WACX,mCAEFnb,KAAKob,cAAgB/C,EAAW4C,aAAaZ,KAAKhC,GAClDA,EAAW6C,WAAWlb,KAAKqb,YAAYhB,KAAKra,OAC5CA,KAAKsb,YAAcjD,EACnB,MAAMkD,EAAcC,MAAOC,IACzB,IAAKzb,KAAKqZ,SAAWrZ,KAAKsb,YAAYH,WAAY,CAChDjD,QAAQwD,IAAI,iDACZ,MAAMC,QAAgB3b,KAAK4b,oBAAoB,GAAI,SACnD,IAAK,IAAIC,KAAW9a,OAAOqU,OAAOpV,KAAK2Z,WAAY,CACjD,MAAMmC,EAAc9b,KAAK+b,sBAAsBF,SACzCF,EAAQK,gBAAgBF,EAChC,CACF,MACE5D,QAAQwD,IAAI,yBAA0BD,GAExCzb,KAAKic,MAAM,YAAaR,EAAe,EAEzCpD,EAAW6D,aAAaX,GACxBA,GACF,MACEvb,KAAKob,cAAgB,WACnBlD,QAAQwD,IAAI,gCACd,CAEJ,CAEA,cAAAS,CAAenC,GACb,IAAKA,EAAa,OAAOA,EAAgB,UAAMA,EAAgB,QAC7D,MAAM,IAAI1X,MACR,yFAGF,GAAI0X,EAAOtZ,KACT,IAAK,IAAIiW,KAAK5V,OAAO+T,KAAK9U,KAAKgZ,SACzBhZ,KAAKgZ,QAAQrC,GAAGjW,OAASsZ,EAAOtZ,MAAQiW,IAAMqD,EAAO3X,cAChDrC,KAAKgZ,QAAQrC,GACpBuB,QAAQC,KAAK,4BAA8BxB,IAIjD3W,KAAKgZ,QAAQgB,EAAa,MAAKA,CAEnC,CAEA,WAAMI,CAAMgC,EAAKhX,GAEf,OADA,QAAc,QAAPgX,GACA,MACT,CAEA,UAAMjC,CAAK7B,EAAWlB,GACpB,IAAIiF,EAASrc,KAAKsc,wBAAwB,CACxCC,SAAUjE,EACVkE,SAAU,yBACVC,WAAW,EACXC,MAAO,0BAET,QAA0C,cAA5BL,EAAO,OAAQjF,GAC/B,CAEA,eAAAqD,CAAgBxJ,EAAK0L,EAAWC,EAAWxX,GACzC,GAAIuX,EAAW,CACb,IAAK3c,KAAK4Z,cAAc3I,GACtB,MAAM,IAAI3O,MAAM,mCAAmC2O,KAErDjR,KAAK4Z,cAAc3I,GAAY,MAAE6G,OACnC,CAKA,GAHK9X,KAAK4Z,cAA6B,gBACrC5Z,KAAK4Z,cAA6B,cAAI,CAAC,IAEpCgD,GAAa5c,KAAK4Z,cAA6B,cAAE3I,GACpD,MAAM,IAAI3O,MACR,8BAA8B2O,uFAIlCjR,KAAK4Z,cAA6B,cAAE3I,GAAO,EAC7C,CAEA,eAAA0J,CAAgB1J,EAAKtQ,EAAMgc,EAAWvX,GACpC,GAAIuX,EAAW,CACb,IAAK3c,KAAK4Z,cAAc3I,GACtB,MAAM,IAAI3O,MAAM,mCAAmC2O,KAErDjR,KAAK4Z,cAAc3I,GAAY,MAAE6G,OACnC,CACA,MAAM+E,EAAQ7c,KAAK4Z,cAA6B,cAChD,IAAKiD,EAAM5L,GACT,MAAM,IAAI3O,MAAM,oBAAoB2O,uBAEtC,QAAOtQ,aAAgBmV,GACvB+G,EAAM5L,GAAK5J,KAAK1G,EAClB,CAEA,eAAAma,CAAgB7J,EAAK7L,GACnB,MAAMyX,EAAQ7c,KAAK4Z,cAA6B,cAChD,IAAKiD,EAAM5L,GACT,MAAM,IAAI3O,MAAM,oBAAoB2O,6BAE/B4L,EAAM5L,EACf,CAEA,gBAAA2J,CAAiB3J,EAAK0L,EAAWvX,GAC/B,GAAIuX,EAAW,CACb,IAAK3c,KAAK4Z,cAAc3I,GACtB,MAAM,IAAI3O,MAAM,mCAAmC2O,KAErDjR,KAAK4Z,cAAc3I,GAAY,MAAE6G,OACnC,CACA,MAAM+E,EAAQ7c,KAAK4Z,cAA6B,cAEhD,IADA,UAASxU,EAAS,wBACbyX,EAAM5L,GACT,MAAM,IAAI3O,MAAM,oBAAoB2O,sBA5O1C,IAA4B6L,EACtBC,EAGFC,EAGAC,EAuOAJ,EAAM5L,IA1ON+L,GAHED,GADsBD,EA8OQD,EAAM5L,IA7OXC,KAAI,SAAUpQ,GACvC,OAAOA,EAAE0D,UACX,KACmC0Y,QAAO,SAAU/b,EAAGgc,GACrD,OAAOhc,EAAIgc,CACb,GAAG,GACHF,EAAW,IAAInZ,WAAWkZ,GAC5BD,EAAeG,QAAO,SAAU/b,EAAGgc,EAAG9X,GAEpC,OADA4X,EAASrW,IAAI,IAAI9C,WAAWgZ,EAAQzX,IAAKlE,GAClCA,EAAIgc,CACb,GAAG,GACIF,EAASjZ,QAmOdkU,QAAQS,MAAM,sBAAsB1H,YAAc4L,EAAM5L,GAAKzM,eAC7D,IAAI4Y,EAAW/P,EAAYwP,EAAM5L,IACjC,MAAM,KAAE1G,EAAI,MAAEnI,GAAUgb,EAASpT,OAC3BqT,EAAOjb,EASb,GAPArB,OAAOuc,OAAOD,EAAM,CAClBtV,KAAM3C,EAAQ2C,KACdwV,GAAInY,EAAQmY,GACZC,KAAMpY,EAAQoY,OAEhBH,EAAU,IAAIxG,KAAKC,MAAMD,KAAKE,UAAUsG,IACxCtc,OAAOuc,OAAOD,EAAU,IAAGrd,KAAKuY,kBAC3BhO,EAAM,CACT,IAAIpE,EAAQiX,EAASpT,OACrBjJ,OAAOuc,OAAOD,EAAMlX,EAAM/D,MAC5B,CACApC,KAAKic,MAAMoB,EAAW,KAAGA,GACzBnF,QAAQS,MACN3Y,KAAKiZ,WACL,qBAAqBhI,YAAc4L,EAAM5L,GAAKzM,sBAEzCqY,EAAM5L,EACf,CAEA,WAAAoK,CAAYvZ,GACV,GAAuB,iBAAZA,EAAsB,CAC/B,MAAMub,EAAOxG,KAAKC,MAAMhV,GACxB9B,KAAKic,MAAMoB,EAAW,KAAGA,EAC3B,MAAO,GAAIvb,aAAmB+F,YAAa,CACzC,IAAIuV,EAAW/P,EAAYvL,GAC3B,MAAM,KAAEyI,EAAI,MAAEnI,GAAUgb,EAASpT,OAC3BqT,EAAOjb,EAIb,GAFAib,EAAU,IAAIxG,KAAKC,MAAMD,KAAKE,UAAUsG,IACxCtc,OAAOuc,OAAOD,EAAU,IAAGrd,KAAKuY,kBAC3BhO,EAAM,CACT,IAAIpE,EAAQiX,EAASpT,OACrBjJ,OAAOuc,OAAOD,EAAMlX,EAAM/D,MAC5B,CACApC,KAAKic,MAAMoB,EAAW,KAAGA,EAC3B,KAAO,IAAuB,iBAAZvb,EAGhB,MAAM,IAAIQ,MAAM,0BAFhBtC,KAAKic,MAAMna,EAAc,KAAGA,EAG9B,CACF,CAEA,KAAAgW,GACE9X,KAAKyd,gBAAkB,CAAC,EACxBzd,KAAK2Z,UAAY,CAAC,CACpB,CAEA,gBAAM+D,GACJ1d,KAAKic,MAAM,sBACLjc,KAAKsb,YAAYoC,YACzB,CAEA,yBAAM9B,CAAoBxE,EAASuG,EAAkB,MAOnD,OANA,QAAO3d,KAAKsb,YAAYH,WAAY,+BAClBnb,KAAK4d,mBACrB,KAAK5d,KAAKsb,YAAYH,qBACtB/D,EACAuG,EAGJ,CAEA,sBAAAE,GACE,OAAO7d,KAAK2Z,SACd,CACA,iBAAAY,CAAkBuD,EAAY1Y,IAC5B,QAAO0Y,GACP,MAAOC,EAAIzF,GAAalT,EAAY,GAAEmR,MAAM,MAC5C,QACE+B,IAActY,KAAKiZ,WACnB,yCAGF,MAAM4C,EAAU7b,KAAK2Z,UAAUmE,GAC/B,IAAKjC,EACH,MAAM,IAAIvZ,MAAM,sBAAwBwb,GAK1C,GAFAjC,EAAQ7B,OAAkB,UAAI5U,EAAY,GAET,UAA7ByW,EAAQ7B,OAAOE,WACjB,OAAO2B,EAIT,GAAIzW,EAAY,KAAM2Y,EACpB,OAAOlC,EAGT,MAAM,IAAIvZ,MACR,oDAAoDwb,0BAAmCC,QAAS3Y,EAAY,KAEhH,CACA,wBAAMwY,CAAmBI,EAAa5G,EAASuG,EAAkB,MAC/DvG,OAAsB/Q,IAAZ+Q,EAAwBpX,KAAK0Z,gBAAkBtC,GACpD4G,GAAehe,KAAKsb,YAAYH,WACnC6C,EAAc,KAAOhe,KAAKsb,YAAYH,WAC5B6C,EAAYC,SAAS,OAC/BD,EAAche,KAAKiZ,WAAa,IAAM+E,GAExC,MAAME,EAAWF,EAAYzH,MAAM,KAAK,GACxC,IAAIuH,EAAaE,EAAYzH,MAAM,KAAK,GACxC,GAAIuH,EAAWG,SAAS,KAAM,CAC5BH,EAAaA,EAAWvH,MAAM,KAAK,GACnC,MAAMuC,EAASkF,EAAYzH,MAAM,KAAK,GAClCvW,KAAKmZ,SAA4B,MAAjBnZ,KAAKmZ,UACvB,QACEL,IAAW9Y,KAAKmZ,QAChB,mBAAmBL,QAAa9Y,KAAKmZ,UAE3C,EACA,QAAO+E,EAAU,wBAAwBF,KAEzC,IACE,MAAM3B,EAASrc,KAAKsc,wBAAwB,CAC1CC,SAAU2B,EACV1B,SAAU,gCACVC,WAAW,EACXC,MAAO,yBAEHyB,QAAY,QAChB9B,EAAOyB,GACP1G,EACA,gDAAkD4G,GAGpD,OADAG,EAAIpE,GAAK,GAAGmE,KAAYJ,IACpBH,GAAwB,QAAYQ,EAAKR,GACjCQ,CACd,CAAE,MAAO1T,GAEP,MADAyN,QAAQC,KAAK,iCAAmC6F,EAAavT,GACvDA,CACR,CACF,CACA,yBAAA2T,CACEC,EACAC,EACArE,EACAsE,EACArE,GAEA,GAAuB,mBAAZmE,EAAwB,CAEjC,IAAIG,EAAcF,EAAU/H,MAAM,KAAK,GACvCvW,KAAKsZ,oBAAoB1S,IAAIyX,EAAS,CACpCpE,gBAAiB/Y,MAAMqN,QAAQ0L,GAC3BA,EAAgBgE,SAASO,KACvBvE,EACNsE,gBAAiBA,EACjBE,UAAW,YAAcH,EACzBpE,WAAYA,GAEhB,MAAO,GAAImE,aAAmBnd,OAASmd,aAAmBtd,OACxD,IAAK,IAAIkQ,KAAOlQ,OAAO+T,KAAKuJ,GAAU,CACpC,IAAIK,EAAML,EAAQpN,GAClB,GAAmB,mBAARyN,GAAsBA,EAAIC,eAAgB,CACnD,IAAIrG,EAAYoG,EAAIC,eAAepC,SAInC,GAHIjE,EAAU2F,SAAS,OACrB3F,EAAYA,EAAU/B,MAAM,KAAK,IAE/BvW,KAAKiZ,aAAeX,EAWtB,MAAM,IAAIhW,MACR,2BAA2Boc,EAAIC,eAAenC,gCAAgCxc,KAAKiZ,iBAAiBX,KAXlG+F,aAAmBnd,QACrBmd,EAAUA,EAAQlV,SAGpBkV,EAAQpN,GAAOmF,EACbpW,KAAK4Z,cACL8E,EAAIC,eAAenC,UAErBkC,EAAML,EAAQpN,EAMlB,CACAjR,KAAKoe,0BACHM,EACAJ,EAAY,IAAMrN,EAClBgJ,EACAsE,EACArE,EAEJ,CAEJ,CACA,WAAAJ,CAAY8E,EAAKhC,GACf,IAAKgC,GAAO1d,MAAMqN,QAAQqQ,GAAM,MAAM,IAAItc,MAAM,0BAChD,GAAIsc,EAAIld,cAAgBX,OACtB6d,EAAM7d,OAAOuc,OAAO,CAAC,EAAGsB,OACnB,CACL,MAAMC,EAAU,CAAC,EACXC,EAAQ/d,OAAOge,oBAAoBH,GAAKze,OAC5CY,OAAOge,oBAAoBhe,OAAOgV,eAAe6I,KAEnD,IAAK,IAAIjI,KAAKmI,EACF,gBAANnI,IACoB,mBAAXiI,EAAIjI,GAAmBkI,EAAQlI,GAAKiI,EAAIjI,GAAG0D,KAAKuE,GACtDC,EAAQlI,GAAKiI,EAAIjI,IAI1BiI,EAAI7E,GAAK6E,EAAI7E,IAAM,UACnB6E,EAAMC,CACR,EACA,QACED,EAAI7E,IAAwB,iBAAX6E,EAAI7E,GACrB,yBAAyB6E,KAEtBA,EAAIvc,OACPuc,EAAIvc,KAAOuc,EAAI7E,IAEZ6E,EAAI5E,SACP4E,EAAI5E,OAAS,CAAC,GAEX4E,EAAIle,OACPke,EAAIle,KAAO,WAGb,IAAIuZ,GAAkB,EACpBsE,GAAkB,EAChBK,EAAI5E,OAAOC,kBACbA,EAAkB2E,EAAI5E,OAAOC,iBAC3B2E,EAAI5E,OAAOuE,kBAAiBA,GAAkB,GAClD,MAAMrE,EAAa0E,EAAI5E,OAAOE,YAAc,YAU5C,IATA,QAAO,CAAC,YAAa,UAAU+D,SAAS/D,IACxCla,KAAKoe,0BACHQ,EACAA,EAAQ,GACR3E,EACAsE,EACArE,GAGEla,KAAK2Z,UAAUiF,EAAI7E,IAAK,CAC1B,IAAI6C,EAGF,MAAM,IAAIta,MACR,2BAA2Bsc,EAAI7E,0CAA0C6E,EAAI7E,gCAHxE/Z,KAAK2Z,UAAUiF,EAAI7E,GAM9B,CAEA,OADA/Z,KAAK2Z,UAAUiF,EAAI7E,IAAM6E,EAClBA,CACT,CAEA,qBAAA7C,CAAsBF,GACpB,MAAM7B,EAAS6B,EAAQ7B,QAAU,CAAC,EAClCA,EAAOpB,UACLoB,EAAOpB,WAAa5Y,KAAKoZ,kBAAoBpZ,KAAKsb,YAAY1C,UAChE,MACMoG,EAAgBxI,EAAYqF,EAAS,KADvB7B,EAAOC,iBAY3B,MAVoB,CAClBD,OAAQA,EACRD,GAAI,GAAGC,EAAOpB,aAAa5Y,KAAKiZ,cAAc4C,EAAY,KAC1DxZ,KAAMwZ,EAAQxZ,MAAQwZ,EAAY,GAClCoD,YAAapD,EAAQoD,aAAe,GACpCve,KAAMmb,EAAQnb,MAAQ,UACtBwe,KAAMrD,EAAQqD,MAAQ,KACtBpG,OAAQ9Y,KAAKmZ,QACbgG,eAAgBH,EAGpB,CAEA,wBAAMI,CAAmBvD,GAEvB,OAAOrF,EAAYqF,EAAS,KADRA,EAAQ7B,OAAOC,gBAErC,CAEA,sBAAMoF,CAAiBT,EAAKhC,EAAW0C,GAAS,EAAMC,GAAa,GACjE,IAAI5D,EACJ,GAAI4D,GAAcX,EAAIle,KACpB,IACEib,QAAgB3b,KAAK4b,oBAAoB,GAAI,SAE7CgD,EA7nBR,SAA2B/C,EAAS2D,GAClC,SAASC,EAAaC,EAAaC,EAAYC,EAAO,QAEpD,IAAK,IAAI3O,KAAO0O,EACd,IAAKD,EAAYre,eAAe4P,GAC9B,MAAM,IAAI3O,MAAM,gBAAgB2O,0BAA4B2O,MAKhE,IAAK,IAAI3O,KAAOyO,EACd,GAAY,SAARzO,IAAmB0O,EAAWte,eAAe4P,GAC/C,MAAM,IAAI3O,MAAM,mBAAmB2O,0BAA4B2O,KAGrE,CAmDA,OAFAH,EAAa5D,EAAS2D,EAA4B,YA/ClD,SAASK,EAAkBC,EAAYC,EAAYH,EAAO,QACxD,GAA0B,iBAAfE,GAA4B5e,MAAMqN,QAAQuR,IAqB9C,GAAI5e,MAAMqN,QAAQuR,GAAa,CACpC,GAAIA,EAAWpb,SAAWqb,EAAWrb,OACnC,MAAM,IAAIpC,MAAM,4BAA4Bsd,MAE9CE,EAAWE,SAAQ,CAAC3V,EAAGhF,KACrB,IAAI4a,EAAU,GAAGL,KAAQva,KACzB,GAAiB,iBAANgF,GAAmBnJ,MAAMqN,QAAQlE,IAErC,GAAiB,mBAANA,EAAkB,CAClC,IAAI0V,EAAW1e,eAAegE,GAO5B,MAAM,IAAI/C,MACR,wCAAwC+C,cAAc4a,MAPxDH,EAAWza,IAAK,EAAAqR,EAAA,GAAerM,EAAG,CAChChI,KAAM0d,EAAW1a,GAAS,KAC1B4Z,YAAac,EAAW1a,GAAG4Z,aAAe,GAC1CjI,WAAY+I,EAAW1a,GAAe,YAO5C,OAbEwa,EAAkBxV,EAAG0V,EAAW1a,GAAI4a,EAatC,GAEJ,MA3CkE,CAChER,EAAaK,EAAYC,EAAYH,GACrC,IAAK,IAAIjJ,KAAKmJ,EAAY,CACxB,IAAIzV,EAAIyV,EAAWnJ,GACfsJ,EAAU,GAAGL,KAAQjJ,IACzB,GAAiB,iBAANtM,GAAmBnJ,MAAMqN,QAAQlE,IAErC,GAAiB,mBAANA,EAAkB,CAClC,IAAI0V,EAAW1e,eAAesV,GAO5B,MAAM,IAAIrU,MACR,gCAAgCqU,eAAesJ,MAPjDH,EAAWnJ,IAAK,EAAAD,EAAA,GAAerM,EAAG,CAChChI,KAAM0d,EAAWpJ,GAAS,KAC1BsI,YAAac,EAAWpJ,GAAGsI,aAAe,GAC1CjI,WAAY+I,EAAWpJ,GAAe,YAO5C,OAbEkJ,EAAkBxV,EAAG0V,EAAWpJ,GAAIsJ,EAcxC,CACF,CAuBF,CAGAJ,CAAkBhE,EAAS2D,EAA4B,YAChD3D,CACT,CA0jBcqE,CAAkBtB,QADAjD,EAAQwE,iBAAiBvB,EAAIle,MAEvD,CAAE,MAAO+J,GACP,MAAM,IAAInI,MAAM,8BAA8Bsc,EAAIle,gBAAgB+J,IACpE,CAGF,MAAMoR,EAAU7b,KAAK8Z,YAAY8E,EAAKhC,GAChCd,EAAc9b,KAAK+b,sBAAsBF,GAC/C,GAAIyD,EACF,IACE3D,EAAUA,SAAkB3b,KAAK4b,oBAAoB,GAAI,eACnDD,EAAQK,gBAAgBF,EAChC,CAAE,MAAOrR,GACP,MAAM,IAAInI,MAAM,uCAAuCmI,IACzD,CAEF,OAAOqR,CACT,CAEA,wBAAMsE,CAAmBvE,EAASyD,GAIhC,GAHIzD,aAAmB9a,SACrB8a,EAAUA,EAAQ9B,KAEf/Z,KAAK2Z,UAAUkC,GAClB,MAAM,IAAIvZ,MAAM,sBAAsBuZ,KAExC,MAAM+C,EAAM5e,KAAK2Z,UAAUkC,GAE3B,UADO7b,KAAK2Z,UAAUkC,GAClByD,EAAQ,CACV,MAAM3D,QAAgB3b,KAAK4b,oBAAoB,GAAI,eAC7CD,EAAQK,gBAAgB4C,EAAI7E,GACpC,CACF,CAEA,QAAAsG,CAASC,EAAYC,EAAOC,GAC1B,MAAMC,GAAS,QAAkBH,GACjC,GAAIE,GAASA,IAAUC,EACrB,KACE,8CAAgDA,EAAS,OAASD,EAItE,OADAD,EAAQA,GAAS,CAACD,EAAW5b,QACtB,CACLgc,OAAQ,UACRC,QAASL,EAAWtc,OACpB4c,QAASL,EACTM,QAASJ,EAEb,CAEA,gBAAAK,CACEze,EACAgV,EACA0J,EACAC,EACAC,EACAC,GAEA,IAAIzC,EAAY,GAAGsC,KAAc1e,IAC7B8e,EAAU,CACZT,OAAQ,SACRnE,SAAU2E,EACN,GAAGA,KAAmBlhB,KAAKiZ,aAC3BjZ,KAAKiZ,WACTuD,SAAUiC,EACVhC,WAAW,GAGb,MAAM2E,EAAOphB,KAiBb,MAAO,CAACmhB,EAhBe,WACrB,IACE9J,EAAS5P,MAAM,KAAMvG,MAAME,UAAU+H,MAAM7H,KAAKyN,WAClD,CAAE,MAAOf,GACPkK,QAAQlK,MAAM,qBAAsByQ,EAAWzQ,EACjD,CAAE,QACIgT,GAAsBI,EAAKxH,cAAcmH,WAEpCK,EAAKxH,cAAcmH,GAExBE,GAASA,EAAMrJ,SACjBqJ,EAAMjJ,OAEV,CACF,EAGF,CAEA,qBAAMqJ,CACJpW,EACAC,EACA6V,EACAC,EACAC,EACAC,GAEA,IAAIpY,EAAQ9I,KAAKshB,mBAAmBP,GAAY,IAChD,QACEjY,EACA,kCAAkCiY,2BAEpC,IAAII,EAAU,CAAC,EA8Bf,OA5BIF,GAAS/V,GAAUlL,KAAK0Z,iBAC1ByH,EAAQxE,gBAAkB3c,KAAKuhB,QAC7BN,EAAMnJ,MAAMuC,KAAK4G,GACjBF,EACAG,GAEFC,EAAQK,SAAWxhB,KAAK0Z,gBAAkB,EAC1C5Q,EAAMmY,MAAQA,GAEdA,EAAQ,MAGTE,EAAQlW,QAASnC,EAAMmC,SAAWjL,KAAK8gB,iBACtC,UACA7V,EACA8V,EACAC,EACAC,EACAC,IAEDC,EAAQjW,OAAQpC,EAAMoC,QAAUlL,KAAK8gB,iBACpC,SACA5V,EACA6V,EACAC,EACAC,EACAC,GAEKC,CACT,CAEA,kBAAMM,CAAa9gB,EAAM+gB,EAAWX,GAClC,IAAIY,QAAwB3hB,KAAK4d,mBAC/B,GAAG8D,eAEL,QACEC,EAAgBnH,cAChB,oEAEF,IAAIA,EAAgBmH,EAAgBnH,cAChCoH,EAAab,IAAc,gBACzBvG,EAAc7Y,OAAOigB,IAAcb,GACzC,IAAIc,EAAalhB,EAAK+D,OAClBod,EAAY1hB,KAAK2hB,KAAKF,EAAa,GACvC,IAAK,IAAIG,EAAM,EAAGA,EAAMF,EAAWE,IAAO,CACxC,IAAIC,EAAaD,EAAM,QACjBxH,EAAcE,OAClBkH,EACAjhB,EAAKwI,MAAM8Y,EAAYA,EAAa,KAClClB,GAEJ7I,QAAQwD,IACN,iBAAiBsG,EAAM,KAAKF,MAAcD,WAE9C,OAEMrH,EAAc9U,QAAQkc,IAAcb,EAC5C,CAEA,IAAAmB,CAAKC,EAAcC,GAKjB,IAJA,QAC0B,iBAAjBD,GAA6BA,EAAazhB,KACjD,6DAEGyhB,EAAa5E,GAEhB,YADAvd,KAAKic,MAAMkG,EAAazhB,KAAMyhB,GAGhC,IAAIE,EAAkB,EAAcF,GACpC,GAAIC,EAAY,CACd,MAAMjc,EAAQ,EAAcic,GAC5BC,EAAkB,IAAIve,WAAW,IAAIue,KAAoBlc,GAC3D,CAEA,GADmBkc,EAAgB3d,QACjB,OAChB,OAAO1E,KAAKob,cAAciH,GAE1B,MAAM,IAAI/f,MAAM,0CAEpB,CAEA,uBAAAga,CACEgG,EACAC,EACAC,EACAC,EACAvB,GAEA,IAAIQ,EAAYY,EAAe/F,SAC3BkG,IAAqBf,EAAUzD,SAAS,OACtCwE,IAAqBf,IACvBA,EAAYe,EAAmB,IAAMf,GAGvCY,EAAe/F,SAAWmF,GAE5B,IAAIjD,EAAY6D,EAAe9F,SAC3BkG,EAAeJ,EAAe7F,UAClC,MAAM2E,EAAOphB,KAEb,SAAS2iB,IACP,OAAO,IAAI3X,SAAQwQ,MAAOvQ,EAASC,KACjC,IAAI0X,GAAmB,UACnBJ,IAEFI,EAAmBJ,EAAe,IAAMI,GAE1C,IAAI9Z,EAAQsY,EAAKE,mBAAmBsB,GAAkB,GACtD,IAAK9Z,EAMH,YALAoC,EACE,IAAI5I,MACF,8CAA8CsgB,MAKpD9Z,EAAiB,UAAI4Y,EACrB,MAAMpK,QAAa8J,EAAKG,QACtBrgB,MAAME,UAAU+H,MAAM7H,KAAKyN,WAC3B6T,EACA1B,GAEI2B,EAAYvL,EAAK5S,OAEjBoe,EACJD,EAAY,GACmB,iBAAxBvL,EAAKuL,EAAY,IACA,OAAxBvL,EAAKuL,EAAY,IACjBvL,EAAKuL,EAAY,GAAGE,SAGtB,IAAIC,EAFAF,UAAmBxL,EAAKuL,EAAY,GAAGE,SAMzCC,EAHG5B,EAAKhI,iBAGMgI,EAAKhI,iBAAmB,IAAMgI,EAAKnI,WAFnCmI,EAAKnI,WAKrB,IAAIkJ,EAAe,CACjBzhB,KAAM,SACNqH,KAAMib,EACNzF,GAAImE,EACJrF,OAAQoC,GAEN2D,EAAa,CAAC,EACd9K,IACF8K,EAAiB,KAAI9K,GAEnBwL,IACFV,EAAwB,YAAIU,GAM1BP,IAGFJ,EAAqB,OAAII,GAG3B,IAAItB,EAAQ,KACZ,GAAIyB,EAAc,CAIhBP,EAAsB,QAAIS,EAC1B,IAAIpE,EAAc,GAAGkD,KAAajD,IAClCwC,EAAQ,IAAI9J,EACViK,EAAK1H,gBACLxO,EACA,CAAC,yBAAyBsT,KAC1BA,GAIF,IAAIwC,GAAqB,EACzB,IAAK,IAAIiC,KAAO3L,EACd,GAAmB,iBAAR2L,IAAmC,IAAfA,EAAIC,OAAiB,CAClDlC,GAAqB,EACrB,KACF,CAEFoB,EAAoB,cAAUhB,EAAKC,gBACjCpW,EACAC,EACA0X,EACA5B,EACAC,EACAC,EAEJ,CAEA,IAAImB,EAAkB,EAAcF,GACpC,GAAIC,EAAY,CACd,MAAMjc,EAAQ,EAAcic,GAC5BC,EAAkB,IAAIve,WAAW,IAAIue,KAAoBlc,GAC3D,CACmBkc,EAAgB3d,QACjB,OAChB0c,EAAKhG,cAAciH,GAAiBlX,MAAK,WACnC8V,GAGFA,EAAMpJ,OAEV,IAGAuJ,EACGK,aAAaY,EAAiBX,EAAWa,GACzCpX,MAAK,WACA8V,GAGFA,EAAMpJ,OAEV,IACCsL,OAAM,SAAUC,GACflL,QAAQlK,MAAM,yBAA0BoV,GACxClY,EAAOkY,EACT,GACJ,GAEJ,CAGAT,EAAchE,eAAiB2D,EAC/B,MAAMe,EAAQ5E,EAAUlI,MAAM,KAK9B,OAJAoM,EAAcW,SAAWD,EAAMA,EAAM3e,OAAS,GAC9Cie,EAAcY,QACZjB,EAAe5F,OAAS,kBAAkB+B,IAC5CkE,EAAc/L,WAAa0L,EAAekB,SACnCb,CACT,CAEA,eAAAc,GACE,MAAM5J,EAAW,GACjB,IAAK,IAAIgC,KAAW9a,OAAOqU,OAAOpV,KAAK2Z,WACrCE,EAASxS,KAAKrH,KAAK+b,sBAAsBF,IAG3C,MAAO,CACL9B,GAAI/Z,KAAKiZ,WACTY,SAAUA,EAEd,CAEA,oBAAMmB,CAAera,GACnB,IACI+iB,EAAiB,KACrB,KACE,QAAO/iB,EAAK0b,QAAU1b,EAAKgjB,KAAOhjB,EAAKoH,MACvC,MAAMyW,EAAc7d,EAAKoH,KAAO,IAAMpH,EAAK0b,OACrCoG,EAAmB9hB,EAAKoH,KAAKwO,MAAM,KAAK,GACxCqN,EAAmBjjB,EAAKoH,KAAKwO,MAAM,KAAK,GAM9C,IAAI2K,EAJJvgB,EAAS,GAAIA,EAAS,GAAEsd,SAAS,KAC7Btd,EAAS,GACT8hB,EAAmB,IAAM9hB,EAAS,GACtCA,EAAU,IAAM,GAAIA,EAAS,GAExBX,KAAKoZ,kBAGJpZ,KAAKoZ,kBAA8C,MAA1BpZ,KAAKoZ,mBAChC,QACEzY,EAAS,GAAE4V,MAAM,KAAK,KAAOvW,KAAKoZ,iBAClC,uBACEzY,EAAS,GAAE4V,MAAM,KAAK,GACtB,OACAvW,KAAKoZ,kBAGX8H,EAAkBlhB,KAAKoZ,kBAXvB8H,EAAkBvgB,EAAS,GAAE4V,MAAM,KAAK,GAa1C,MAAMiM,EAAe7hB,EAAKkjB,OAE1B,IAAI5Y,EAASC,EA0BTmR,EAkEA/E,EA3FJ,GAAI3W,EAAKmjB,QAAS,CAGhB,MAAMA,QAAgB9jB,KAAK+jB,QACzBpjB,EAAKmjB,QACLnjB,EAAKqjB,QACLxB,EACAC,EACAvB,GAIF,GAFAjW,EAAU6Y,EAAQ7Y,QAClBC,EAAS4Y,EAAQ5Y,OACb4Y,EAAQnH,WAAamH,EAAQtC,SAAU,CACzChG,eAAemB,IACb,IACEzE,QAAQwD,IAAI,0BAA4B/a,EAAK0b,cACvCyH,EAAQnH,WAChB,CAAE,MAAOyG,GACPlL,QAAQlK,MAAMoV,EAChB,CACF,CACAM,EAAiBO,YAAYtH,EAA8B,IAAnBmH,EAAQtC,SAClD,CACF,CAIA,IACEnF,EAASjG,EAAYpW,KAAK4Z,cAAejZ,EAAa,OACxD,CAAE,MAAO8J,GAEP,MADAyN,QAAQS,MAAM,wBAAyB6F,EAAaxe,KAAKiZ,WAAYxO,GAC/D,IAAInI,MACR,qBAAqBkc,QAAkBxe,KAAKiZ,aAEhD,CAQA,IANA,QACEoD,GAA4B,mBAAXA,EACjB,mBAAqBmC,GAInBxe,KAAKsZ,oBAAoB4K,IAAI7H,IAE/B,GAAwD,cAApDrc,KAAKsZ,oBAAoB6K,IAAI9H,GAAQnC,YAErCgH,IAAoBuB,IACE,MAArBA,GACCmB,IAAqB5jB,KAAKsb,YAAYH,YAExC,MAAM,IAAI7Y,MACR,mDACEkc,EACA,yBACA0C,EACA,OACAuB,OAIH,CAEL,IAAI2B,EACFpkB,KAAK4Z,cAAcjZ,EAAK0b,OAAO9F,MAAM,KAAK,IAAImL,UAQhD,GANER,IAAoBuB,GACpB2B,IACoC,IAApCA,EAAkBC,QAAQ,OAE1BD,EAAoBlD,EAAkB,IAAMkD,GAE1CA,IAAsBzjB,EAAKoH,KAC7B,MAAM,IAAIzF,MACR,kCACEkc,EACA,UACA7d,EAAKoH,KACL,cACAqc,EAGR,CAsBA,GAnBI5B,IAEF,QACkD,OAAhDxiB,KAAKshB,mBAAmBkB,GAAc,GACtC,8BAAgCA,GAKlClL,EADE3W,EAAK2W,WACMtX,KAAK+jB,QAChBpjB,EAAK2W,KACL3W,EAAKqjB,QACL,KACAvB,EACA,MAGK,GAGPziB,KAAKsZ,oBAAoB4K,IAAI7H,IAC7Brc,KAAKsZ,oBAAoB6K,IAAI9H,GAAQpC,gBACrC,CAGA,GAAI3C,EAAK5S,OAAS,EAAI2X,EAAO3X,OAC3B,IAAK,IAAIW,EAAIiS,EAAK5S,OAAQW,EAAIgX,EAAO3X,OAAS,EAAGW,IAC/CiS,EAAKjQ,UAAKhB,GAGdiR,EAAKjQ,KAAK1G,EAAKgjB,MACf,QACErM,EAAK5S,SAAW2X,EAAO3X,OACvB,yDAAyD8Z,eAAyBnC,EAAO3X,kBAAkB4S,EAAK5S,SAEpH,CAEA,GAAI/D,EAAKmjB,QAAS,CAChB,MAAM5c,EAASmV,EAAO5U,MAAM,KAAM6P,GAC9BpQ,aAAkB8D,QACpB9D,EACGiE,MAAMjE,IACL+D,EAAQ/D,GACRod,cAAcZ,EAAe,IAE9BP,OAAOC,IACNlY,EAAOkY,GACPkB,cAAcZ,EAAe,KAGjCzY,EAAQ/D,GACRod,cAAcZ,GAElB,MACErH,EAAO5U,MAAM,KAAM6P,GACnBgN,cAAcZ,EAElB,CAAE,MAAON,GAKLlL,QAAQlK,MAAM,gCAAiCoV,GAGjDkB,cAAcZ,EAChB,CACF,CAEA,MAAApgB,CAAO+a,EAAS0C,GACd,OAAO/gB,KAAKuhB,QAAQlD,EAAS0C,EAC/B,CAEA,kBAAAO,CAAmBP,EAAYpf,GAC7B,IAAImH,EAAQ9I,KAAK4Z,cACjB,MAAM2K,EAASxD,EAAWxK,MAAM,KAChC,GAAI5U,EAAQ,CACV,MAAM6iB,EAAaD,EAAO7f,OAAS,EACnC,IAAK,IAAI+f,KAASF,EAAOpb,MAAM,EAAGqb,GAAa,CAC7C,IAAK1b,EAAM2b,GACT,OAAO,KAET3b,EAAQA,EAAM2b,EAChB,CAKA,OAHK3b,EAAMyb,EAAOC,MAChB1b,EAAMyb,EAAOC,IAAe,CAAC,GAExB1b,EAAMyb,EAAOC,GACtB,CACE,IAAK,IAAIC,KAASF,EAAQ,CACxB,IAAKzb,EAAM2b,GACT,OAAO,KAET3b,EAAQA,EAAM2b,EAChB,CACA,OAAO3b,CAEX,CAWA,aAAMyY,CAAQlD,EAAS0C,EAAYG,GACjC,MAAMwD,SAAerG,EACrB,GACY,WAAVqG,GACU,WAAVA,GACU,YAAVA,GAFAA,MAGArG,GAEAA,aAAmBva,WAEnB,OAAOua,EAET,GAAIA,aAAmBxW,YACrB,MAAO,CACL6Y,OAAQ,aACRC,QAAS,IAAI7c,WAAWua,IAI5B,GAAIA,EAAQM,eACV,OAAON,EAAQM,eAGjB,IAAIgG,EAGJ,GAAItG,EAAQ3c,uBAAuBX,QAAUsd,EAAQqC,OAAQ,CAE3D,MAAMkE,EAAOvG,EAAQqC,OAIrB,cAHOrC,EAAQqC,OACfiE,QAAgB3kB,KAAKuhB,QAAQlD,EAAS0C,EAAYG,GAClDyD,EAAQjE,OAASkE,EACVD,CACT,CAEA,GAAuB,mBAAZtG,EAAwB,CACjC,GAAIre,KAAKsZ,oBAAoB4K,IAAI7F,GAAU,CACzC,IAAIwG,EAAa7kB,KAAKsZ,oBAAoB6K,IAAI9F,GAC9CsG,EAAU,CACRjE,OAAQ,SACRnE,SAAUvc,KAAKiZ,WACfuD,SAAUqI,EAAWpG,UACrBhC,WAAW,EAEf,KAAO,CAEL,IAAI6B,GADJ,QAA6B,iBAAfyC,GAGZzC,EADED,EAAQiF,SACE,IAAG,aAAYjF,EAAQiF,YAEvB,UAEdqB,EAAU,CACRjE,OAAQ,SACRnE,SAAUvc,KAAKiZ,WACfuD,SAAU,GAAGuE,KAAczC,IAC3B7B,WAAW,GAEb,IAAI3T,EAAQ9I,KAAKshB,mBAAmBP,GAAY,IAChD,QACY,OAAVjY,EACA,kCAAkCiY,2BAEpCjY,EAAMwV,GAAaD,CACrB,CAEA,GADAsG,EAAQjI,MAAQ2B,EAAQkF,SACnBoB,EAAQjI,MACX,IACE,MAAMoI,EA3rChB,SAAyBC,GACvB,MAAMC,EAAaD,EAAKzkB,WAGlB2kB,EAAYD,EAAWE,MAAM,oBAC7B7iB,EAAQ4iB,GAAaA,EAAU,IAAO,GAGtCE,EAAcH,EAAWE,MAAM,eACrC,IAAIE,EAAS,GACTD,IACFC,EAASD,EAAY,GAClB5O,MAAM,KACNrF,KAAK/P,GACJA,EACGkkB,QAAQ,eAAgB,IACxBA,QAAQ,WAAY,MAExBC,QAAQnkB,GAAMA,EAAEokB,OAAO7gB,OAAS,IAChCwM,KAAK/P,GAAMA,EAAEokB,SACbC,KAAK,OAIV,IAAIC,EAAWT,EAAWE,MAAM,gCAChC,MAAMQ,EAAkBD,GAAYA,EAAS,GAAGF,QAAW,GAG3DE,EAAWT,EAAWE,MAAM,wCAC5B,MAAMS,EACHF,GACCA,EAAS,GACNlP,MAAM,MACNrF,KAAK0U,GAAMA,EAAEP,QAAQ,WAAY,IAAIE,SACrCC,KAAK,OACV,GAEIK,EAAYH,GAAkBC,EACpC,OACEtjB,GACA+iB,EAAO1gB,OAAS,GAAK,CACnBrC,KAAMA,EACNyjB,IAAKV,EACLW,IAAKF,EAGX,CA6oC2BG,CAAgB3H,GAC7ByG,IAAaH,EAAQjI,QACvBiI,EAAQjI,MAAQ,GAAGoI,EAASiB,MAEhC,CAAE,MAAOtb,GACPyN,QAAQlK,MAAM,wCAAyCqQ,EACzD,CAGF,OADAsG,EAAQnB,SAAWnF,EAAQzH,WACpB+N,CACT,CACA,MAAMsB,EAAU/kB,MAAMqN,QAAQ8P,GAE9B,IAAK,IAAI6H,KAAMnlB,OAAO+T,KAAK9U,KAAKgZ,SAAU,CACxC,MAAMmN,EAAQnmB,KAAKgZ,QAAQkN,GAC3B,GAAIC,EAAMC,SAAW/H,aAAmB8H,EAAMzlB,KAAM,CAElD,IAAI2lB,QAAmBrb,QAAQC,QAAQkb,EAAMC,QAAQ/H,IAGrD,GAFIgI,IAAeA,EAAW3F,SAAQ2F,EAAW3F,OAASyF,EAAM9jB,MAEtC,iBAAfgkB,EAAyB,CAClC,MAAMzB,EAAOyB,EAAW3F,cACjB2F,EAAW3F,OAClB2F,QAAmBrmB,KAAKuhB,QACtB8E,EACAtF,EACAG,GAEFmF,EAAW3F,OAASkE,CACtB,CAEA,OADAD,EAAU0B,EACH1B,CACT,CACF,CAEA,GAEgB,oBAAP2B,IACPA,GAAGC,QACHlI,aAAmBiI,GAAGC,OACtB,CACA,MAAMC,EAAWnI,EAAQoI,WACzB9B,EAAU,CACRjE,OAAQ,UACRC,QAAS,IAAI7c,WAAW0iB,EAASxiB,QACjC4c,QAASvC,EAAQkC,MACjBM,QAASxC,EAAQmC,MAErB,MAAO,GAES,oBAAPkG,IACPA,GAAGC,SACHtI,aAAmBqI,GAAGC,QACtB,CACA,MAAMnG,GAAQ,QAAkBnC,EAAQuI,UAAUjmB,MAClDgkB,EAAU,CACRjE,OAAQ,UACRC,QAAS,IAAI7c,WAAWua,EAAQuI,UAAUjmB,KAAKqD,QAC/C4c,QAASvC,EAAQkC,MACjBM,QAASL,EAEb,MAAO,GAAInC,aAAmB/b,MAC5B4V,QAAQlK,MAAMqQ,GACdsG,EAAU,CACRjE,OAAQ,QACRC,QAAStC,EAAQ/d,WACjBumB,QAASxI,EAAQ/R,YAKhB,GACH+R,IAAYtd,OAAOsd,IACnBA,aAAmByI,SACnBzI,aAAmB7c,QACnB6c,aAAmBza,MACnBya,aAAmB0I,QACnB1I,aAAmB2I,WACE,oBAAbC,UAA4B5I,aAAmB4I,UACjB,oBAA9BC,2BACN7I,aAAmB6I,2BACY,oBAAzBC,sBACN9I,aAAmB8I,sBACQ,oBAArBC,kBACN/I,aAAmB+I,kBACoB,oBAAjCC,8BACNhJ,aAAmBgJ,6BAErB1C,EAAUtG,OAEL,GAAIA,aAAmBiJ,KAAM,CAClC,IAAIC,EAAe,EACnB/L,eAAegM,EAAK9iB,GAClB,IAAI+iB,EAEFA,EADE/iB,EACK2Z,EAAQlV,MAAMoe,EAAcA,EAAe7iB,GAE3C2Z,EAAQlV,MAAMoe,GAEvB,MAAMG,EAAM,IAAI5jB,iBAAiB2jB,EAAKE,eAEtC,OADAJ,GAA8BG,EAAIljB,WAC3BkjB,CACT,CACA,SAASE,EAAK3hB,GACZshB,EAAethB,CACjB,CACA0e,EAAU,CACRjE,OAAQ,WACRmH,SAAU,UACVnnB,KAAM2d,EAAQ3d,KACd2B,KAAMgc,EAAQhc,KACd2K,KAAMqR,EAAQrR,KACd4S,KAAMvB,EAAQyJ,OAASzJ,EAAQ0J,mBAC/BP,WAAYxnB,KAAKuhB,QAAQiG,EAAMzG,EAAYG,GAC3C0G,WAAY5nB,KAAKuhB,QAAQqG,EAAM7G,EAAYG,GAE/C,MAAO,GAAI7C,aAAmBvI,EAAiB,CAC7C,MAAM0K,GAAQ,QAAkBnC,GAChCsG,EAAU,CACRjE,OAAQ,aACRC,QAAS,IAAI7c,WAAWua,EAAQra,QAChC6c,QAASL,EAEb,MAAO,GAAInC,aAAmBta,SAC5B4gB,EAAU,CACRjE,OAAQ,aACRC,QAAS,IAAI7c,WAAWua,EAAQra,cAE7B,GAAIqa,aAAmB2J,IAC5BrD,EAAU,CACRjE,OAAQ,MACRC,cAAe3gB,KAAKuhB,QAClBrgB,MAAM6G,KAAKsW,GACX0C,EACAG,SAGC,GAAI7C,aAAmB4J,IAC5BtD,EAAU,CACRjE,OAAQ,aACRC,cAAe3gB,KAAKuhB,QAClBrgB,MAAM6G,KAAKsW,GACX0C,EACAG,QAGC,MACL7C,EAAQ3c,uBAAuBX,QAC/BG,MAAMqN,QAAQ8P,IAYd,KAAM,qCAAqCA,kEAX3C,CACAsG,EAAUsB,EAAU,GAAK,CAAC,EAC1B,MAAMnR,EAAO/T,OAAO+T,KAAKuJ,GACzB,IAAK,IAAI1H,KAAK7B,EACZ6P,EAAQhO,SAAW3W,KAAKuhB,QACtBlD,EAAQ1H,GACRoK,EACAG,EAGN,CAEA,CAEA,IAAKyD,EACH,MAAM,IAAIriB,MAAM,2BAElB,OAAOqiB,CACT,CAEA,YAAMtgB,CAAOga,GACX,aAAare,KAAK+jB,QAAQ1F,EAC5B,CAEA,aAAM0F,CACJ1F,EACAkE,EACAC,EACAC,EACAvB,GAEA,IAAK7C,EACH,OAAOA,EAET,IAAIsG,EACJ,GAAItG,EAAQqC,OACV,GACE1gB,KAAKgZ,QAAQqF,EAAQqC,SACrB1gB,KAAKgZ,QAAQqF,EAAQqC,QAAQwH,QAC7B,CACA,MAAMtD,EAAOvG,EAAQqC,cACdrC,EAAQqC,QACfrC,QAAgBre,KAAK+jB,QACnB1F,EACAkE,EACAC,EACAC,EACAvB,IAEMR,OAASkE,EAEjBD,QAAgB3Z,QAAQC,QACtBjL,KAAKgZ,QAAQqF,EAAQqC,QAAQwH,QAAQ7J,GAEzC,MAAO,GAAuB,WAAnBA,EAAQqC,OACjBiE,EAAU3kB,KAAKsc,wBACb+B,EACAkE,EACAC,EACAC,EACAvB,QAEG,GAAuB,YAAnB7C,EAAQqC,OAGjB,GAAkB,oBAAPgG,IAAsBA,GAAG5V,MAC9B5P,MAAMqN,QAAQ8P,EAAQsC,WACxBtC,EAAQsC,QAAUtC,EAAQsC,QAAQzD,OAAOlH,IAE3C2O,EAAU+B,GACP5V,MAAM,IAAIqX,MAAM9J,EAAQsC,SAAUtC,EAAQwC,SAC1CuH,QAAQ/J,EAAQuC,cACd,GAAkB,oBAAP0F,IAAsBA,GAAGC,OAAQ,CAC7CrlB,MAAMqN,QAAQ8P,EAAQsC,WACxBtC,EAAQsC,QAAUtC,EAAQsC,QAAQzD,OAAOlH,IAE3C,MAAMqS,EAAY,KAAkBhK,EAAQwC,SAC5C8D,EAAU2B,GAAGgC,OACX,IAAID,EAAUhK,EAAQsC,SACtBtC,EAAQuC,QACRvC,EAAQwC,QAEZ,MAEE8D,EAAUtG,OAEP,GAAuB,UAAnBA,EAAQqC,OACjBiE,EAAU,IAAIriB,MACZ,gBAAkB+b,EAAQsC,QAAU,MAAQtC,EAAQwI,SAAW,UAE5D,GAAuB,eAAnBxI,EAAQqC,OAAyB,CAC1C,MAAM2H,EAAY,KAAkBhK,EAAQwC,SAC5C,IAAKwH,EACH,MAAM,IAAI/lB,MAAM,sBAAwB+b,EAAQwC,SAKlD8D,EAAU,IAAI0D,EAJChK,EAAQsC,QAAQ3c,OAAOmF,MACpCkV,EAAQsC,QAAQpc,WAChB8Z,EAAQsC,QAAQpc,WAAa8Z,EAAQsC,QAAQnc,YAGjD,MAAO,GAAuB,eAAnB6Z,EAAQqC,OACjBiE,EAAUtG,EAAQsC,QAAQ3c,OAAOmF,MAC/BkV,EAAQsC,QAAQpc,WAChB8Z,EAAQsC,QAAQpc,WAAa8Z,EAAQsC,QAAQnc,iBAE1C,GAAuB,aAAnB6Z,EAAQqC,OAAuB,CACxC,GAAyB,YAArBrC,EAAQwJ,SAAwB,CAClC,MAAML,QAAaxnB,KAAKsc,wBACtB+B,EAAQmJ,KACRjF,EACAC,EACAC,EACAvB,GAEIpa,QAAc0gB,IACpB7C,EAAU,IAAI2C,KAAK,CAACxgB,GAAQ,CAC1BpG,KAAM2d,EAAQ3d,KACd2B,KAAMgc,EAAQhc,MAElB,KAAO,CACLsiB,EAAU,CAAC,EACX,IAAK,IAAIhO,KAAK5V,OAAO+T,KAAKuJ,GACnB1H,EAAE4R,WAAW,OAChB5D,EAAQhO,SAAW3W,KAAK+jB,QACtB1F,EAAQ1H,GACR4L,EACAC,EACAC,EACAvB,GAIR,CACAyD,EAAwB,eAAItG,CAC9B,MAAO,GAAuB,eAAnBA,EAAQqC,OACjBiE,EAAU,IAAIsD,UACNjoB,KAAK+jB,QACT1F,EAAQsC,QACR4B,EACAC,EACAC,EACAvB,SAGC,GAAuB,QAAnB7C,EAAQqC,OACjBiE,EAAU,IAAIqD,UACNhoB,KAAK+jB,QACT1F,EAAQsC,QACR4B,EACAC,EACAC,EACAvB,QAGC,CACL,MAAM0D,EAAOvG,EAAQqC,cACdrC,EAAQqC,OACfiE,QAAgB3kB,KAAK+jB,QACnB1F,EACAkE,EACAC,EACAC,EACAvB,GAEFyD,EAAQjE,OAASkE,CACnB,MACK,GAAIvG,EAAQ3c,cAAgBX,QAAUG,MAAMqN,QAAQ8P,GAAU,CACnE,MAAM4H,EAAU/kB,MAAMqN,QAAQ8P,GAC9BsG,EAAUsB,EAAU,GAAK,CAAC,EAC1B,IAAK,IAAItP,KAAK5V,OAAO+T,KAAKuJ,GACxB,GAAI4H,GAAW5H,EAAQhd,eAAesV,GAAI,CACxC,MAAMtM,EAAIgU,EAAQ1H,GAClBgO,EAAQhO,SAAW3W,KAAK+jB,QACtB1Z,EACAkY,EACAC,EACAC,EACAvB,EAEJ,CAEJ,MACEyD,EAAUtG,EAEZ,QAAgBhY,IAAZse,EACF,MAAM,IAAIriB,MAAM,2BAElB,OAAOqiB,CACT,E,0EC9pDK,SAAS6D,SACd,OAAOpoB,KAAK4I,SAAS1I,SAAS,IAAImoB,OAAO,EAAG,KAAM,IAAI7kB,MAAOQ,SAC/D,CAEO,SAASskB,YAAY3iB,GAE1B,OAAKA,EAAIkY,SAAS,KAIXlY,EAAIsf,QAAQ,OAAQH,GAAUA,EAAM,GAAGyD,gBAHrC5iB,CAIX,CAEO,SAAS6iB,YAAY7iB,GAE1B,OAAOA,EAAIsf,QAAQ,WAAY,OAAOwD,aACxC,CAEO,SAASC,YAAYzS,EAAK0S,GAC/B,GAAmB,iBAAR1S,GAA4B,OAARA,IAAiB0S,EAC9C,OAAO1S,EAGT,MAAM2S,EAAS9nB,MAAMqN,QAAQ8H,GAAO,GAAK,CAAC,EAE1C,IAAK,MAAMpF,KAAOoF,EAChB,GAAIA,EAAIhV,eAAe4P,GAAM,CAC3B,MAAM7O,EAAQiU,EAAIpF,GACZgY,EAAWP,YAAYzX,GACvBiY,EAAWN,YAAY3X,GAEZ,UAAb8X,GACFC,EAAOC,GAAYH,YAAY1mB,EAAO2mB,GACjB,mBAAV3mB,IACT4mB,EAAOC,GAAU3F,SAAW2F,EACxB7mB,EAAMwU,aACRoS,EAAOC,GAAUrS,WAAa,IAAKxU,EAAMwU,YACzCoS,EAAOC,GAAUrS,WAAWvU,KAAO4mB,KAGjB,UAAbF,GACTC,EAAOE,GAAYJ,YAAY1mB,EAAO2mB,GACjB,mBAAV3mB,IACT4mB,EAAOE,GAAU5F,SAAW4F,EACxB9mB,EAAMwU,aACRoS,EAAOE,GAAUtS,WAAa,IAAKxU,EAAMwU,YACzCoS,EAAOE,GAAUtS,WAAWvU,KAAO6mB,MAKnCH,EAAS9K,SAAS,WACpB+K,EAAOC,GAAYH,YAAY1mB,EAAO,UAEpC2mB,EAAS9K,SAAS,WACpB+K,EAAOE,GAAYJ,YAAY1mB,EAAO,UAG5C,CAGF,OAAO4mB,CACT,C,2MAEO,MAAMG,kBAAoB,CAC/BC,KAAMC,UACNC,MAAOC,WACPC,MAAOC,WACPC,MAAO5lB,WACP6lB,OAAQC,YACRC,OAAQC,YACRC,QAASC,aACTC,QAASC,aACTpZ,MAAO5P,OAGFsa,eAAe2O,yBAAyBC,GAC7C,SAASC,EAAcC,GAIrB,OAAO,IAAItf,SAAQ,CAACC,EAASC,KAC3B,IAAIqf,EAAYC,SAASC,cAAc,UACvCF,EAAUG,IAAMJ,EAChBC,EAAU7pB,KAAO,kBACjB6pB,EAAUI,OAAS1f,EACnBsf,EAAUK,mBAAqB,WACL,WAApB5qB,KAAK6qB,YAA+C,aAApB7qB,KAAK6qB,YACvC5f,GAEJ,EACAsf,EAAUO,QAAU5f,EACpBsf,SAASO,KAAKC,YAAYT,EAAU,GAExC,CAGA/O,eAAeyP,IAIb,IAHA,IAAI3T,EAAOpW,MAAME,UAAU+H,MAAM7H,KAAKyN,WACpCmc,EAAM5T,EAAK5S,OACXW,EAAI,EACCA,EAAI6lB,EAAK7lB,UACRglB,EAAc/S,EAAKjS,GAE7B,CAEA,GACE+kB,IACClpB,MAAMqN,QAAQ6b,IAAyC,iBAAjBA,GAEvC,IACE,IAAIe,EAGJ,GAFAf,EAC0B,iBAAjBA,EAA4B,CAACA,GAAgBA,GAClDlpB,MAAMqN,QAAQ6b,GAuChB,KAAM,sCAtCN,IAAK,IAAI/kB,EAAI,EAAGA,EAAI+kB,EAAa1lB,OAAQW,IAErC+kB,EAAa/kB,GAAGwjB,cAAcuC,SAAS,SACvChB,EAAa/kB,GAAGkjB,WAAW,SAEvB6B,EAAa/kB,GAAGkjB,WAAW,UAC7B6B,EAAa/kB,GAAK+kB,EAAa/kB,GAAG8D,MAAM,KAE1CgiB,EAAYX,SAASC,cAAc,SACzBY,IAAM,aAChBF,EAAUG,KAAOlB,EAAa/kB,GAC9BmlB,SAASO,KAAKC,YAAYG,IAE1Bf,EAAa/kB,GAAGwjB,cAAcuC,SAAS,SACvChB,EAAa/kB,GAAGkjB,WAAW,SAGvB6B,EAAa/kB,GAAGkjB,WAAW,UAC7B6B,EAAa/kB,GAAK+kB,EAAa/kB,GAAG8D,MAAM,UAEpCoiB,OAAiCnB,EAAa/kB,KAEpD+kB,EAAa/kB,GAAGwjB,cAAcuC,SAAS,QACvChB,EAAa/kB,GAAGkjB,WAAW,QAEvB6B,EAAa/kB,GAAGkjB,WAAW,SAC7B6B,EAAa/kB,GAAK+kB,EAAa/kB,GAAG8D,MAAM,UAEpC8hB,EAAcb,EAAa/kB,KACxB+kB,EAAa/kB,GAAGkjB,WAAW,cAC9B0C,EAAcb,EAAa/kB,IACxB+kB,EAAa/kB,GAAGkjB,WAAW,WAGpCrQ,QAAQwD,IAAI,iCAAmC0O,EAAa/kB,GAMpE,CAAE,MAAOoF,GACP,KAAM,sCAAwC2f,EAAa9pB,UAC7D,CAEJ,CAEOkb,eAAegQ,4BAA4BpB,GAChD,GACEA,IACClpB,MAAMqN,QAAQ6b,IAAyC,iBAAjBA,GAEvC,IACOlpB,MAAMqN,QAAQ6b,KACjBA,EAAe,CAACA,IAElB,IAAK,IAAI/kB,EAAI,EAAGA,EAAI+kB,EAAa1lB,OAAQW,IAAK,CAC5C,GACE+kB,EAAa/kB,GAAGwjB,cAAcuC,SAAS,SACvChB,EAAa/kB,GAAGkjB,WAAW,QAE3B,KAAM,sCAEN6B,EAAa/kB,GAAGwjB,cAAcuC,SAAS,QACvChB,EAAa/kB,GAAGkjB,WAAW,QAEvB6B,EAAa/kB,GAAGkjB,WAAW,SAC7B6B,EAAa/kB,GAAK+kB,EAAa/kB,GAAG8D,MAAM,IAE1C8hB,cAAcb,EAAa/kB,KAClB+kB,EAAa/kB,GAAGkjB,WAAW,QACpC0C,cAAcb,EAAa/kB,IAClB+kB,EAAa/kB,GAAGkjB,WAAW,WAGpCrQ,QAAQwD,IAAI,iCAAmC0O,EAAa/kB,GAEhE,CACF,CAAE,MAAOoF,GACP,KAAM,sCAAwC2f,EAAa9pB,UAC7D,CAEJ,CAEO,SAASmrB,iBAAiBrB,GAC/B,MAC+B,oBAAtBsB,mBACPtK,gBAAgBsK,kBAETF,4BAA4BpB,GAE5BD,yBAAyBC,EAEpC,CAEO,SAASuB,gBAAgB3R,GAa9B,OAZAA,EAAO4R,QAAU5R,EAAO4R,SAAW,QACnC5R,EAAOiF,YACLjF,EAAOiF,aAAe,8BAA8BjF,EAAO3X,SAC7D2X,EAAOtZ,KAAOsZ,EAAOtZ,MAAQ,aAC7BsZ,EAAOD,GAAKC,EAAOD,IAAMyO,SACzBxO,EAAO6R,cAAgB7R,EAAO6R,eAAiB,IAC/C7R,EAAO8R,gBAAkB9R,EAAO8R,kBAAmB,EAEnD9R,EAASjZ,OAAO+T,KAAKkF,GAAQkD,QAAO,CAAC/b,EAAGgc,KACb,mBAAdnD,EAAOmD,KAAmBhc,EAAEgc,GAAKnD,EAAOmD,IAC5Chc,IACN,CAAC,EAEN,CACO,MAAM4qB,yBAA2B,CACtC1C,UAAW,OACXE,WAAY,QACZE,WAAY,QACZ3lB,WAAY,QACZ8lB,YAAa,SACbE,YAAa,SACbE,aAAc,UACdE,aAAc,UACdhpB,MAAO,SAGH8qB,sBAAwB,GAC9B,IAAK,MAAMC,WAAWlrB,OAAO+T,KAAKiX,0BAChCC,sBAAsB3kB,KAAK6kB,KAAKD,UAG3B,SAASE,kBAAkB9V,GAChC,IAAImK,EAAQuL,yBAAyB1V,EAAI3U,YAAYW,MACrD,IAAKme,EAAO,CACV,MAAM4L,EAAKrrB,OAAOgV,eAAeM,GACjC,IAAK,MAAM4V,KAAWD,sBACpB,GAAII,aAAcH,EAAS,CACzBzL,EAAQuL,yBAAyBE,EAAQ5pB,MACzC,KACF,CAEJ,CACA,OAAOme,CACT,CAEA,SAAS6L,wBAAwB/B,GAC/B,OAAO,IAAItf,SAAQ,SAAUC,EAASC,GACpC,MAAMpJ,EAAU,CACdwqB,QAAS,MACThC,IAAKA,GAEP,IAAKiC,UAAUC,gBAAkBD,UAAUC,cAAcvnB,SAEvD,YADAiG,EAAO,oCAGT,MAAMuhB,EAAiB,IAAIC,eAC3BD,EAAeE,MAAMC,UAAY,SAAUC,GACrCA,EAAMlsB,MAAQksB,EAAMlsB,KAAKqN,MAC3B9C,EAAO2hB,EAAMlsB,KAAKqN,OAElB/C,EAAQ4hB,EAAMlsB,MAAQksB,EAAMlsB,KAAKuG,OAErC,EAEIqlB,UAAUC,eAAiBD,UAAUC,cAAcM,WACrDP,UAAUC,cAAcM,WAAWC,YAAYjrB,EAAS,CACtD2qB,EAAeO,QAGjB9hB,EAAO,6CAEX,GACF,CAEOsQ,eAAeyR,kBAAkB7C,GACtCA,EAAeA,GAAgB,GAC1BlpB,MAAMqN,QAAQ6b,KACjBA,EAAe,CAACA,IAElB,IAAK,IAAI8C,KAAO9C,EAEV8C,EAAI3E,WAAW,SAAQ2E,EAAMA,EAAI/jB,MAAM,IACvC+jB,EAAI3E,WAAW,UAAS2E,EAAMA,EAAI/jB,MAAM,IACxC+jB,EAAI3E,WAAW,YAAW2E,EAAMA,EAAI/jB,MAAM,IACzC+jB,EAAI3E,WAAW,eAEd8D,wBAAwBa,GAAK/J,OAAO1Y,IACxCyN,QAAQlK,MAAMvD,EAAE,GAGtB,CAEO,SAAS0iB,OAAOC,EAAWtrB,GAChC,IAAKsrB,EACH,MAAM,IAAI9qB,MAAMR,GAAW,mBAE/B,CAGO,SAASurB,WAAW/V,GACzB,OAAOA,EACJkO,KAAK,KACLH,QAAQ,SAAU,KAClBA,QAAQ,WAAY,SACpBA,QAAQ,SAAU,UAClBA,QAAQ,kBAAmB,MAC3BA,QAAQ,MAAO,KACfA,QAAQ,IAAK,IAClB,CAEO,SAASiI,QAAQC,EAAMC,EAAMxf,GAClC,IAAIiT,EACJ,OAAOjW,QAAQyiB,KAAK,CAClBF,EACA,IAAIviB,SACF,CAAC0iB,EAAIC,IACF1M,EAAQlJ,YAAW,KAClB4V,EAAI3f,GAAS,gBAAgB,GACrB,IAAPwf,OAENI,SAAQ,IAAM3V,aAAagJ,IAChC,CAEO,MAAM4M,eACX,WAAAnsB,CAAYiX,GACV3Y,KAAKyd,gBAAkB,CAAC,EACxBzd,KAAK8tB,eAAiB,CAAC,EACvB9tB,KAAK+tB,OAASpV,CAChB,CACA,IAAAuJ,GACE,MAAM,IAAI5f,MAAM,0BAClB,CACA,EAAAyY,CAAG8R,EAAOmB,GACHhuB,KAAKyd,gBAAgBoP,KACxB7sB,KAAKyd,gBAAgBoP,GAAS,IAEhC7sB,KAAKyd,gBAAgBoP,GAAOxlB,KAAK2mB,EACnC,CACA,IAAAC,CAAKpB,EAAOmB,GACVA,EAAQE,mBAAoB,EAC5BluB,KAAK+a,GAAG8R,EAAOmB,EACjB,CACA,GAAAG,CAAItB,EAAOmB,GACT,GAAKnB,GAAUmB,GAGR,GAAInB,IAAUmB,EAEfhuB,KAAKyd,gBAAgBoP,KAAQ7sB,KAAKyd,gBAAgBoP,GAAS,SAG/D,GAAI7sB,KAAKyd,gBAAgBoP,GAAQ,CAC/B,MAAM7K,EAAMhiB,KAAKyd,gBAAgBoP,GAAOxI,QAAQ2J,GAC5ChM,GAAO,GACThiB,KAAKyd,gBAAgBoP,GAAOuB,OAAOpM,EAAK,EAE5C,OAXAhiB,KAAKyd,gBAAkB,CAAC,CAa5B,CACA,KAAAxB,CAAM4Q,EAAOlsB,GACX,GAAIX,KAAKyd,gBAAgBoP,GAEvB,IADA,IAAIxnB,EAAIrF,KAAKyd,gBAAgBoP,GAAOnoB,OAC7BW,KAAK,CACV,MAAM2oB,EAAUhuB,KAAKyd,gBAAgBoP,GAAOxnB,GAC5C,IACE2oB,EAAQrtB,EACV,CAAE,MAAO8J,GACPyN,QAAQlK,MAAMvD,EAChB,CAAE,QACIujB,EAAQE,mBACVluB,KAAKyd,gBAAgBoP,GAAOuB,OAAO/oB,EAAG,EAE1C,CACF,MAEIrF,KAAK+tB,QACP7V,QAAQC,KAAK,kBAAmB0U,EAAOlsB,EAG7C,CAEA,OAAA2sB,CAAQT,EAAOzV,GACb,OAAO,IAAIpM,SAAQ,CAACC,EAASC,KAC3B,MAAM8iB,EAAWrtB,IACfsX,aAAagJ,GACbhW,EAAQtK,EAAK,EAEfX,KAAKiuB,KAAKpB,EAAOmB,GACjB,MAAM/M,EAAQlJ,YAAW,KACvB/X,KAAKmuB,IAAItB,EAAOmB,GAChB9iB,EAAO,IAAI5I,MAAM,WAAW,GAC3B8U,EAAQ,GAEf,E,8CCjZK,SAASiX,EACdtJ,GACA,YAAEuJ,EAAc,OAAM,KAAEjsB,EAAO,KAAI,YAAE4c,EAAc,KAAI,WAAEjI,EAAa,OAEtE,IAAK+N,GAAwB,mBAATA,EAClB,MAAMziB,MAAM,6BAad,OAXA,QAAuB,SAAhBgsB,EAAwB,+BAC/B,QAAOjsB,EAAM,4BACb,QACE2U,GAAkC,WAApBA,EAAWtW,KACzB,kCAEFqkB,EAAKnO,WAAa,CAChBvU,KAAMA,EACN4c,YAAaA,EACbjI,WAAYA,GAAc,IAErB+N,CACT,C,wECjBA,MAAMwJ,EACJ,WAAA7sB,CAAY8sB,GACVxuB,KAAKyuB,cAAgBD,EACrBxuB,KAAK0uB,gBAAkB,KACvB1uB,KAAK2uB,oBAAsB,KAC3B3uB,KAAK4uB,qBAAuB,KAC5B5uB,KAAK6uB,kBAAoB,OACzB7uB,KAAKmb,WAAa,KAClBnb,KAAKyuB,cAAcK,OAAStT,UAC1Bxb,KAAK6uB,mBACH7uB,KAAK6uB,kBAAkB,CAAEL,QAASxuB,KAAKyuB,eAAgB,EAE3DzuB,KAAKyuB,cAAc7B,UAAYpR,MAAOqR,IACpC,IAAIlsB,EAAOksB,EAAMlsB,KACbA,aAAgB2mB,OAClB3mB,QAAaA,EAAKgnB,eAEpB3nB,KAAK0uB,gBAAgB/tB,EAAK,EAE5B,MAAMygB,EAAOphB,KACbA,KAAKyuB,cAAcM,QAAU,WACvB/uB,KAAK4uB,sBAAsB5uB,KAAK4uB,qBAAqB,UACzD1W,QAAQwD,IAAI,oBACZ0F,EAAKqN,cAAgB,IACvB,CACF,CAEA,eAAAO,CAAgBhB,GACdhuB,KAAK4uB,qBAAuBZ,CAC9B,CAEA,YAAA9R,CAAa8R,GACXhuB,KAAK6uB,kBAAoBb,CAC3B,CAEA,UAAA9S,CAAW8S,IACT,QAAOA,EAAS,uBAChBhuB,KAAK0uB,gBAAkBV,CACzB,CAEA,kBAAM/S,CAAata,IACjB,QAAOX,KAAK0uB,gBAAiB,0BAC7B,IACE1uB,KAAKyuB,cAAcQ,KAAKtuB,EAC1B,CAAE,MAAOuuB,GAGP,MADAhX,QAAQlK,MAAM,+BAA+BkhB,KACvCA,CACR,CACF,CAEA,gBAAMxR,CAAWyR,GACfnvB,KAAKyuB,cAAgB,KACrBvW,QAAQkX,KAAK,yCAAyCD,KACxD,EAGF3T,eAAe6T,EAAUrV,IACvB,QAAOA,EAAOwU,QAAS,wBACvB,QAAOxU,EAAOpB,UAAW,yBACzB,MAAM4V,EAAUxU,EAAOwU,QACjBc,EAAWtV,EAAO1B,YAAa,UAC/BD,EAAa,IAAIkW,EAAiBC,GAUxC,OATAxU,EAAO5U,QAAU4U,EAAO5U,SAAW,CAAC,EACpC4U,EAAO5U,QAAQmqB,gBAAkB,SACrB,IAAI,IAAIlX,EAAY,CAC9BC,UAAWgX,EACX/W,gBAAiByB,EAAO5U,QACxB/C,KAAM2X,EAAO3X,KACboW,eAAgBuB,EAAOvB,gBAAkB,GACzCG,UAAWoB,EAAOpB,WAGtB,CAgDA4C,eAAegU,EAAcC,EAAQ3R,EAAY9D,IAC/CA,EAASA,GAAU,CAAC,GACb0V,QAAU1V,EAAO0V,UAAW,UAEnC,MAAMC,EAAK,IAAIC,kBAAkB,CAC/BC,WAAY7V,EAAO8V,aAAe,CAChC,CAAEC,KAAM,CAAC,kCAEXC,aAAc,iBAGhB,OAAO,IAAIhlB,SAAQwQ,MAAOvQ,EAASC,KACjC,IACEykB,EAAGM,iBACD,yBACA,KAC6B,WAAvBN,EAAGO,iBACLP,EAAGQ,QACHjlB,EAAO,IAAI5I,MAAM,8BACe,WAAvBqtB,EAAGO,gBACZhlB,EAAO,IAAI5I,MAAM,6BAEjB4V,QAAQwD,IAAI,4BAA6BiU,EAAGO,gBAC9C,IAEF,GAGElW,EAAOoW,gBACHpW,EAAOoW,QAAQT,UACd3V,EAAOoW,SAEhB,IAAI5B,EAAUmB,EAAGU,kBAAkBrW,EAAO0V,QAAS,CAAEY,SAAS,IAC9D9B,EAAQ+B,WAAa,cACrB,MAAMC,QAAcb,EAAGc,oBACjBd,EAAGe,oBAAoBF,GAC7B,MAAMrS,QAAYsR,EAAOkB,WAAW7S,GAC9B8S,QAAezS,EAAIqS,MAAM,CAC7BK,IAAKlB,EAAGmB,iBAAiBD,IACzBnwB,KAAMivB,EAAGmB,iBAAiBpwB,OAG5B8tB,EAAQM,OAAS,KACf9U,EAAOwU,QAAUA,EACjBxU,EAAOpB,UAAYgY,EAAOhY,UAG1Bb,YAAWyD,UACT,MAAMuV,QAAY1B,EAAUrV,GAC5B2V,EAAGoB,IAAMA,EAkBTpB,EAAGgB,YAAa,QAjBhBnV,eAA2BnZ,GASzB,OARA,SACGA,EAAK4b,SAAS,KACf,+CAEF,SACG5b,EAAK4b,SAAS,KACf,oDAEW8S,EAAInT,mBACf5D,EAAOpB,UAAY,IAAMoB,EAAO0V,QAAU,IAAMrtB,EAEpD,GAK4C,CAC1CA,KAAM,cACN4c,YAAa,kCACbjI,WAAY,CACVtW,KAAM,SACNuW,WAAY,CACV5U,KAAM,CAAE3B,KAAM,SAAUue,YAAa,2BAI3C0Q,EAAGjS,YAAa,QAdhBlC,uBACQuV,EAAIrT,aACViS,EAAGQ,OACL,GAW2C,CACzC9tB,KAAM,aACN4c,YAAa,mDACbjI,WAAY,CAAEtW,KAAM,SAAUuW,WAAY,CAAC,KAE7C0Y,EAAGqB,eAAgB,OAAeD,EAAI5U,eAAgB,CACpD9Z,KAAM,gBACN4c,YAAa,6CACbjI,WAAY,CACVtW,KAAM,SACNuW,WAAY,CACVkP,MAAO,CACLzlB,KAAM,SACNue,YAAa,oBACbhI,WAAY,CACV5U,KAAM,CAAE3B,KAAM,UACdA,KAAM,CAAC,EACP0lB,QAAS,CAAE1lB,KAAM,YACjBwnB,QAAS,CAAExnB,KAAM,kBAM3BuK,EAAQ0kB,EAAG,GACV,IAAI,EAGTnB,EAAQO,QAAU,IAAM7jB,EAAO,IAAI5I,MAAM,8BAEnCqtB,EAAGsB,qBACP,IAAIC,sBAAsB,CACxBL,IAAKD,EAAOC,IACZnwB,KAAMkwB,EAAOlwB,OAGnB,CAAE,MAAO+J,GACPS,EAAOT,EACT,IAEJ,CAEA+Q,eAAe2V,EAAmB1B,EAAQ3R,EAAY9D,GAKpD,MAAMoX,GAJNpX,EAASA,GAAU,CACjBE,WAAY,YACZD,iBAAiB,IAEGmW,QAEtB,cADOpW,EAAOoW,cACDX,EAAOzT,gBAAgB,CAClCjC,GAAI+D,EACJ9D,SACAwW,MAAO,CAACpL,EAAQhgB,IA/KpBoW,eAA4B4J,EAAQqK,EAAQzV,EAAQoX,EAAQhsB,GAC1D4U,EAASA,GAAU,CAAC,EACpB,IAAIwW,EAAQ,IAAIU,sBAAsB,CACpCL,IAAKzL,EAAOyL,IACZnwB,KAAM0kB,EAAO1kB,OAGXivB,EAAK,IAAIC,kBAAkB,CAC7BC,WAAY7V,EAAO8V,aAAe,CAChC,CAAEC,KAAM,CAAC,kCAEXC,aAAc,iBAGZP,GACFE,EAAGM,iBAAiB,eAAezU,MAAOqR,IACxC,MAAM2B,EAAU3B,EAAM2B,QACtB,IAAI7K,EAAM,KACNve,GAAWA,EAAQoY,OAAMmG,EAAM,CAAEnG,KAAMpY,EAAQoY,KAAMO,GAAI3Y,EAAQ2Y,YACnDsR,EAAU,CAC1Bb,QAASA,EACTlW,UAAWkW,EAAQ5kB,MACnBgP,UAAW6W,EAAOzV,OAAOpB,UACzBxT,QAASue,KAGPhK,UAAY8V,EAAOsB,IAAIpX,SAAS,IAIpCyX,SACIA,EAAOzB,SAGTA,EAAGsB,qBAAqBT,GAE9B,IAAII,QAAejB,EAAG0B,eAGtB,aAFM1B,EAAGe,oBAAoBE,GAEtB,CACLC,IAAKlB,EAAGmB,iBAAiBD,IACzBnwB,KAAMivB,EAAGmB,iBAAiBpwB,KAC1BkY,UAAW6W,EAAOzV,OAAOpB,UAE7B,CAoIM0Y,CAAalM,EAAQqK,EAAQzV,EAAQoX,EAAQhsB,IAEnD,C,GChQImsB,yBAA2B,CAAC,EAGhC,SAASC,oBAAoBC,GAE5B,IAAIC,EAAeH,yBAAyBE,GAC5C,QAAqBprB,IAAjBqrB,EACH,OAAOA,EAAa9xB,QAGrB,IAAIC,EAAS0xB,yBAAyBE,GAAY,CAGjD7xB,QAAS,CAAC,GAOX,OAHA+xB,oBAAoBF,GAAU5xB,EAAQA,EAAOD,QAAS4xB,qBAG/C3xB,EAAOD,OACf,CCrBA4xB,oBAAoB3wB,EAAI,CAACjB,EAASgyB,KACjC,IAAI,IAAI3gB,KAAO2gB,EACXJ,oBAAoB5mB,EAAEgnB,EAAY3gB,KAASugB,oBAAoB5mB,EAAEhL,EAASqR,IAC5ElQ,OAAOkB,eAAerC,EAASqR,EAAK,CAAE9O,YAAY,EAAMgiB,IAAKyN,EAAW3gB,IAE1E,ECNDugB,oBAAoB5mB,EAAI,CAACyL,EAAKwb,IAAU9wB,OAAOK,UAAUC,eAAeC,KAAK+U,EAAKwb,GCClFL,oBAAoB7iB,EAAK/O,IACH,oBAAXsK,QAA0BA,OAAO4nB,aAC1C/wB,OAAOkB,eAAerC,EAASsK,OAAO4nB,YAAa,CAAE1vB,MAAO,WAE7DrB,OAAOkB,eAAerC,EAAS,aAAc,CAAEwC,OAAO,GAAO,E,62BCI9D,MAAM2vB,UAAY,IAElB,MAAMC,uBACJ,WAAAtwB,CACEuwB,EACA3Z,EACAM,EACAsZ,EACAC,EAAqB,KACrB/a,EAAU,GACVgb,EAAiB,OAEjB,0CAAOH,GAAc3Z,EAAW,yCAChCtY,KAAKqyB,YAAcJ,EACnBjyB,KAAKiZ,WAAaX,EAClBtY,KAAKsyB,WAAa1Z,EAClB5Y,KAAKuyB,OAASL,EACdlyB,KAAK2uB,oBAAsBwD,EAC3BnyB,KAAKwyB,WAAa,KAClBxyB,KAAK0uB,gBAAkB,KACvB1uB,KAAK6uB,kBAAoB,KACzB7uB,KAAK4uB,qBAAuB,KAC5B5uB,KAAKuX,SAAWH,EAChBpX,KAAKyyB,gBAAkBL,GAAkBM,UACzC1yB,KAAK2yB,SAAU,EACf3yB,KAAK4yB,aAAe,KACpB5yB,KAAK6yB,gBAAkB,KACvB7yB,KAAK8yB,mBAAoB,EACzB9yB,KAAKmb,WAAa,IACpB,CAEA,UAAAD,CAAW8S,IACT,0CAAOA,EAAS,uBAChBhuB,KAAK0uB,gBAAkBV,CACzB,CAEA,YAAA9R,CAAa8R,GACXhuB,KAAK6uB,kBAAoBb,CAC3B,CAEA,eAAAgB,CAAgBhB,GACdhuB,KAAK4uB,qBAAuBZ,CAC9B,CAEA,yBAAM+E,CAAoBd,EAAYe,GAAmB,GACvD,OAAO,IAAIhoB,SAAQ,CAACC,EAASC,KAC3BlL,KAAK4yB,cAAe,EACpB,MAAMK,EAAY,IAAIjzB,KAAKyyB,gBAAgBR,GAC3CgB,EAAU1C,WAAa,cAEvB0C,EAAUnE,OAAS,KACjB5W,QAAQkX,KAAK,oCACbnkB,EAAQgoB,EAAU,EAGpBA,EAAUnI,QAAW+B,IACnB3U,QAAQlK,MAAM,8BAA+B6e,GAC7C3hB,EAAO,IAAI5I,MAAM,2BAA2BuqB,KAAS,EAGvDoG,EAAUlE,QAAWlC,IACA,OAAfA,EAAMqG,MAAiBF,GACzB9a,QAAQkX,KACN,qEAEFpvB,KAAK4yB,cAAe,EACpB5yB,KAAKmzB,sCAAsClB,GACxC9mB,KAAKF,GACLkY,MAAMjY,IACAlL,KAAK4uB,sBACd5uB,KAAK4uB,qBAAqB/B,EAAMsC,OAClC,CACD,GAEL,CAEA,2CAAMgE,CAAsClB,GAE1C,MAAMmB,EAAmB,GAGrBpzB,KAAKiZ,YACPma,EAAiB/rB,KAAK,aAAagsB,mBAAmBrzB,KAAKiZ,eACzDjZ,KAAKsyB,YACPc,EAAiB/rB,KAAK,aAAagsB,mBAAmBrzB,KAAKsyB,eACzDtyB,KAAKuyB,QACPa,EAAiB/rB,KAAK,SAASgsB,mBAAmBrzB,KAAKuyB,WACrDvyB,KAAK2uB,qBACPyE,EAAiB/rB,KACf,sBAAsBgsB,mBAAmBrzB,KAAK2uB,wBAIlD,MAIM2E,EAAWrB,GAHfmB,EAAiB1uB,OAAS,EAAI,IAAI0uB,EAAiB5N,KAAK,OAAS,IAKnE,aAAaxlB,KAAK+yB,oBAAoBO,GAAU,EAClD,CAEA,qBAAAC,GACE,OAAO,IAAIvoB,SAAQ,CAACC,EAASC,KAC3BlL,KAAKwyB,WAAW5F,UAAaC,IAC3B,MAAMlsB,EAAOksB,EAAMlsB,KACb6yB,EAAgB3c,KAAKC,MAAMnW,GACjC,GAA0B,mBAAtB6yB,EAAc9yB,KAmBX,IAA0B,SAAtB8yB,EAAc9yB,KAAiB,CACxC,MAAMsN,EAAQ,2BAA6BwlB,EAAc1xB,QAGzD,OAFAoW,QAAQlK,MAAM,sBAAwBA,QACtC9C,EAAO,IAAI5I,MAAM0L,GAEnB,CAUE,OATAkK,QAAQlK,MACN,uEACArN,QAEFuK,EACE,IAAI5I,MACF,uEAIN,CAlCEtC,KAAK6yB,gBAAkBW,EACnBxzB,KAAKsyB,aACP,0CACEtyB,KAAK6yB,gBAAgBja,YAAc5Y,KAAKsyB,WACxC,qCAAqCtyB,KAAK6yB,gBAAgBja,wBAAwB5Y,KAAKsyB,cAGvFtyB,KAAK6yB,gBAAgBV,qBACvBnyB,KAAK2uB,oBAAsB3uB,KAAK6yB,gBAAgBV,oBAElDnyB,KAAKmb,WAAanb,KAAK6yB,gBAAgB1X,YAAc,KACrDjD,QAAQwD,IACN,oDAAoD1b,KAAK6yB,gBAAgBja,0BAA0B5Y,KAAKmb,cAEtGnb,KAAK6yB,gBAAgBY,cACvBvb,QAAQwD,IAAI,GAAG1b,KAAK6yB,gBAAgBY,gBAEtCxoB,EAAQjL,KAAK6yB,gBAiBf,CACD,GAEL,CAEA,UAAMa,GACJxb,QAAQwD,IACN,yCACA1b,KAAKqyB,YAAY9b,MAAM,KAAK,IAE9B,IAEE,GADAvW,KAAKwyB,iBAAmBxyB,KAAK+yB,oBAAoB/yB,KAAKqyB,aAClDryB,KAAK4yB,aACP,MAAM,IAAItwB,MACR,+DAIJ,MAAMqxB,EAAW9c,KAAKE,UAAU,CAC9BuB,UAAWtY,KAAKiZ,WAChBL,UAAW5Y,KAAKsyB,WAChBJ,MAAOlyB,KAAKuyB,OACZJ,mBAAoBnyB,KAAK2uB,sBAqB3B,OAnBA3uB,KAAKwyB,WAAWvD,KAAK0E,SAEf,0CACJ3zB,KAAKuzB,wBACLvzB,KAAKuX,SACL,uDAGFvX,KAAK8yB,mBAAoB,EACzB9yB,KAAK2yB,SAAU,EACf3yB,KAAKwyB,WAAW5F,UAAaC,IAC3B7sB,KAAK0uB,gBAAgB7B,EAAMlsB,KAAK,EAGlCX,KAAKwyB,WAAWzD,QAAU/uB,KAAK4zB,cAAcvZ,KAAKra,MAE9CA,KAAK6uB,mBACP7uB,KAAK6uB,kBAAkB7uB,KAAK6yB,iBAEvB7yB,KAAK6yB,eACd,CAAE,MAAO7kB,GAMP,MALAkK,QAAQlK,MACN,uBACAhO,KAAKqyB,YAAY9b,MAAM,KAAK,GAC5BvI,GAEIA,CACR,CACF,CAEA,aAAA4lB,CAAc/G,GACZ,IACG7sB,KAAK2yB,SACN3yB,KAAKwyB,YACLxyB,KAAKwyB,WAAW3H,aAAe6H,UAAUmB,QAEzC,GAAI,CAAC,IAAM,MAAM5V,SAAS4O,EAAMqG,MAC9Bhb,QAAQkX,KACN,sCAAsCvC,EAAMqG,UAAUrG,EAAMsC,UAE1DnvB,KAAK4uB,sBACP5uB,KAAK4uB,qBAAqB/B,EAAMsC,QAElCnvB,KAAK2yB,SAAU,OACV,GAAI3yB,KAAK8yB,kBAAmB,CACjC5a,QAAQC,KACN,0DACA0U,EAAMqG,KACNrG,EAAMsC,QAER,IAAI2E,EAAQ,EACZ,MAAMC,EAAYvY,UAChB,IACEtD,QAAQC,KACN,mBAAmBnY,KAAKqyB,YAAY9b,MAAM,KAAK,gBAAgBud,YAE3D9zB,KAAK0zB,OACXxb,QAAQC,KACN,sCAAsCnY,KAAKqyB,cAE/C,CAAE,MAAO5nB,GACP,GAAI,GAAGA,IAAIwT,SAAS,2BAElB,YADA/F,QAAQC,KAAK,2CAA4C1N,GAEpD,GAAI,GAAGA,IAAIwT,SAAS,wBAIzB,YAHA/F,QAAQlK,MACN,GAAGvD,uNAKP,SADM,IAAIO,SAASC,GAAY8M,WAAW9M,EAAS,OAEjDjL,KAAKwyB,YACLxyB,KAAKwyB,WAAW3H,aAAe6H,UAAUsB,UAEzC,OAEFF,GAAS,EACLA,EAAQ/B,gBACJgC,IAEN7b,QAAQlK,MAAM,4BAA6B+jB,UAAW,WAE1D,GAEFgC,GACF,OAEI/zB,KAAK4uB,sBACP5uB,KAAK4uB,qBAAqB/B,EAAMsC,OAGtC,CAEA,kBAAMlU,CAAata,GACjB,GAAIX,KAAK2yB,QACP,MAAM,IAAIrwB,MAAM,wBAEbtC,KAAKwyB,YAAcxyB,KAAKwyB,WAAW3H,aAAe6H,UAAUuB,YACzDj0B,KAAK0zB,OAEb,IACE1zB,KAAKwyB,WAAWvD,KAAKtuB,EACvB,CAAE,MAAOuuB,GAEP,MADAhX,QAAQlK,MAAM,+BAA+BkhB,KACvCA,CACR,CACF,CAEA,UAAAxR,CAAWyR,GACTnvB,KAAK2yB,SAAU,EACX3yB,KAAKwyB,YAAcxyB,KAAKwyB,WAAW3H,aAAe6H,UAAUuB,MAC9Dj0B,KAAKwyB,WAAWrC,MAAM,IAAMhB,GAE9BjX,QAAQkX,KAAK,sCAAsCD,KACrD,EAGF,SAAS+E,mBAAmBjC,GAC1B,IAAKA,EAAY,MAAM,IAAI3vB,MAAM,0BAQjC,OAPI2vB,EAAW1J,WAAW,WACxB0J,EACEA,EAAW5M,QAAQ,UAAW,SAASA,QAAQ,MAAO,IAAM,MACrD4M,EAAW1J,WAAW,cAC/B0J,EACEA,EAAW5M,QAAQ,WAAY,UAAUA,QAAQ,MAAO,IAAM,OAE3D4M,CACT,CAEOzW,eAAe2Y,MAAMna,GAC1B,MAAM8D,EAAa9D,EAAOoa,kBAAoB,uBACxChd,EAAU4C,EAAOqa,eAAiB,GAClChd,EAAW2C,EAAOsa,eAClBC,EAAUva,EAAOua,QAEjB9E,QAAe+E,gBAAgB,CACnCnyB,KAAM,uBACN4vB,WAAYjY,EAAOiY,aAErB,IACE,MAAM9T,QAAYsR,EAAOkB,WAAW7S,IACpC,0CAAOK,EAAK,oCAAoCL,KAChD,MAAM1Y,QAAgB+Y,EAAItG,QAM1B,OALIR,QACIA,EAASjS,GAEf8S,QAAQwD,IAAI,yCAAyCtW,EAAQqvB,mBAElDtW,EAAIuW,MAAMtvB,EAAQ6L,IAAKmG,EAASmd,EAC/C,CAAE,MAAOvmB,GACP,MAAMA,CACR,CAAE,cACMyhB,EAAO/R,YACf,CACF,CAEAlC,eAAemZ,iBACbC,EACAC,EACAC,EACAC,EACAC,IAEA,0CACE,MAAC3uB,GAAW,GAAM,EAAO,QAAQ4X,SAAS8W,GAC1C,wCAGF,MAAME,EAAY/zB,MAAME,UAAU+H,MAAM7H,KAAKyN,UAAW,GAClDoP,QAAYyW,EAAGjE,WAAWmE,KAAUG,GAC1C,IAAe,IAAXF,GAA8B,SAAXA,EAAmB,CACxC,GAAI5W,EAAIpE,GAAGkE,SAAS,MAAQE,EAAIpE,GAAGkE,SAAS,KAC1C,IAEE,MAAMiX,QAAa,oDAAcN,EAAIC,EAAgBG,GAC/CG,QAAeD,EAAK5a,YAAY6D,EAAIpE,GAAGxD,MAAM,KAAK,IAIxD,OAHA4e,EAAOC,SAAU,EACjBD,EAAOE,MAAQH,EACfC,EAAOG,SAAWnX,EACXgX,CACT,CAAE,MAAO1qB,GACPyN,QAAQC,KACN,2DACA1N,EAEJ,CAEF,IAAe,IAAXsqB,EACF,MAAM,IAAIzyB,MAAM,uCAEpB,CACA,OAAO6b,CACT,CAEO3C,eAAegZ,gBAAgBxa,GAChCA,EAAOyV,SACTzV,EAAOiY,WAAajY,EAAOiY,YAAcjY,EAAOyV,OAAOnF,IACvDtQ,EAAOoY,eACLpY,EAAOoY,gBAAkBpY,EAAOyV,OAAO2C,gBAE3C,IAAI9C,EAAWtV,EAAO1B,UACjBgX,IACHA,GAAW,4CACXtV,EAAO1B,UAAYgX,GAGrB,IAAI2C,EAAaiC,mBAAmBla,EAAOiY,YAEvC5Z,EAAa,IAAI2Z,uBACnBC,EACA3C,EACAtV,EAAOpB,UACPoB,EAAOkY,MACPlY,EAAOmY,mBACPnY,EAAOvB,gBAAkB,GACzBuB,EAAOoY,gBAET,MAAMS,QAAwBxa,EAAWqb,OAKzC,IAJA,0CACEb,EACA,iOAEE7Y,EAAOpB,WAAaia,EAAgBja,YAAcoB,EAAOpB,UAC3D,MAAM,IAAItW,MACR,qCAAqCuwB,EAAgBja,wBAAwBoB,EAAOpB,aAGxF,MAAMA,EAAYia,EAAgBja,UAC5BmY,EAAM,IAAI,uCAAI1Y,EAAY,CAC9BC,UAAWgX,EACX1W,YACAL,gBAAiB,CAAEgX,gBAAiB,aACpCltB,KAAM2X,EAAO3X,KACboW,eAAgBuB,EAAOvB,eACvBK,OAAQkB,EAAOlB,SAEX8b,QAAW7D,EAAInV,oBAAoB5B,EAAOvB,eAAgB,SA8KhE,GA7KAmc,EAAG7D,IAAMA,EAkCL8B,IACF+B,EAAG5a,OAASjZ,OAAOuc,OAAOsX,EAAG5a,OAAQ6Y,IAEvC+B,EAAGW,QAAS,oDAnCZ/Z,eAAuBoD,GACrBA,EAAI7E,GAAK,UACT6E,EAAIvc,KAAOuc,EAAIvc,MAAQ2X,EAAO3X,MAAQuc,EAAI7E,GAC1C6E,EAAIK,YAAcL,EAAIK,aAAejF,EAAOiF,kBACtC8R,EAAI1R,iBAAiBT,GAAK,EAClC,GA8BoC,CAClCvc,KAAM,SACN4c,YAAa,kBACbjI,WAAY,CACVC,WAAY,CAAE2H,IAAK,CAAEK,YAAa,oBAAqBve,KAAM,WAC7D80B,SAAU,CAAC,OACX90B,KAAM,YAGVk0B,EAAGa,QAAS,oDArCZja,eAAsB8T,GAGpB,IAAI1W,EAFJ0W,EAAWA,GAAY,KACvB,2CAAQA,EAASrR,SAAS,KAAM,mCAE5BqR,EAASrR,SAAS,MACnBrF,EAAW0W,GAAYA,EAAS/Y,MAAM,KAEvCqC,EAAYia,EAAgBja,UAE9B,MAAMkc,EAAQ,CACZlc,UAAWA,EACXN,UAAWgX,EACXxR,WAAY,WAEd,aAAa8W,EAAGjE,WAAWmE,EAC7B,GAsBmC,CACjCzyB,KAAM,SACN4c,YAAa,eACbjI,WAAY,CACVC,WAAY,CACVqY,SAAU,CAAEoG,QAAS,IAAKzW,YAAa,eAAgBve,KAAM,WAE/DA,KAAM,YAGVk0B,EAAGe,UAAW,oDA9Bdna,eAAwBuC,GACtBA,EAAKA,GAAMnF,GACX,2CAAQmF,EAAGE,SAAS,KAAM,qCAC1B,2CAAQF,EAAGE,SAAS,KAAM,oCAC1B,MAAM6W,EAAQ,CAAElc,UAAWmF,EAAID,WAAY,WAC3C,aAAa8W,EAAGgB,aAAad,EAC/B,GAwBuC,CACrCzyB,KAAM,WACN4c,YAAa,iBACbjI,WAAY,CACVC,WAAY,CACV2B,UAAW,CACT8c,QAAS9c,EACTqG,YAAa,gBACbve,KAAM,WAGVA,KAAM,YAGVk0B,EAAGlX,YAAa,mDAAeqT,EAAIrT,WAAWrD,KAAK0W,GAAM,CACvD1uB,KAAM,aACN4c,YAAa,8BACbjI,WAAY,CAAEtW,KAAM,SAAUuW,WAAY,CAAC,EAAGue,SAAU,MAE1DZ,EAAG5D,eAAgB,mDAAeD,EAAI5U,eAAe9B,KAAK0W,GAAM,CAC9D1uB,KAAM,gBACN4c,YAAa,6CACbjI,WAAY,CACVtW,KAAM,SACNuW,WAAY,CACVkP,MAAO,CACLzlB,KAAM,SACNue,YAAa,oBACbhI,WAAY,CACV5U,KAAM,CAAE3B,KAAM,UACdA,KAAM,CAAC,EACP0lB,QAAS,CAAE1lB,KAAM,YACjBwnB,QAAS,CAAExnB,KAAM,kBAM3Bk0B,EAAG1S,MAAO,mDAAe6O,EAAI7O,KAAK7H,KAAK0W,GAAM,CAC3C1uB,KAAM,OACN4c,YAAa,kBACbjI,WAAY,CACVC,WAAY,CAAEtW,KAAM,CAAEse,YAAa,mBAAoBve,KAAM,WAC7D80B,SAAU,CAAC,QACX90B,KAAM,YAGVk0B,EAAG7Z,IAAK,mDAAegW,EAAIhW,GAAGV,KAAK0W,GAAM,CACvC1uB,KAAM,KACN4c,YAAa,8BACbjI,WAAY,CACVC,WAAY,CACV4V,MAAO,CAAE5N,YAAa,yBAA0Bve,KAAM,UACtDstB,QAAS,CAAE/O,YAAa,uBAAwBve,KAAM,aAExD80B,SAAU,CAAC,QAAS,WACpB90B,KAAM,YAGVk0B,EAAGiB,kBAAmB,mDAAe9E,EAAI3R,mBAAoB,CAC3D/c,KAAM,mBACN4c,YAAa,0BACbjI,WAAY,CACVC,WAAY,CACV4E,QAAS,CACPoD,YAAa,gCACbve,KAAM,WAGV80B,SAAU,CAAC,WACX90B,KAAM,YAIVk0B,EAAG5Y,iBAAkB,mDAAe+U,EAAI1R,iBAAiBhF,KAAK0W,GAAM,CAClE1uB,KAAM,kBACN4c,YAAa,sBACbjI,WAAY,CACVC,WAAY,CACV4E,QAAS,CAAEoD,YAAa,0BAA2Bve,KAAM,UACzDo1B,MAAO,CACLJ,SAAS,EACTzW,YAAa,gCACbve,KAAM,YAGV80B,SAAU,CAAC,WACX90B,KAAM,YAGVk0B,EAAGmB,mBAAoB,mDAAehF,EAAI3Q,mBAAmB/F,KAAK0W,GAAM,CACtE1uB,KAAM,oBACN4c,YAAa,wBACbjI,WAAY,CACVC,WAAY,CACV4E,QAAS,CACPoD,YAAa,+BACbve,KAAM,UAER4e,OAAQ,CACNoW,SAAS,EACTzW,YAAa,+BACbve,KAAM,YAGV80B,SAAU,CAAC,WACX90B,KAAM,YAGN2X,EAAW8C,YACb4V,EAAIhW,GAAG,cAAcS,MAAO1Z,IACtBA,EAAQiG,OAAS,KAAOsQ,EAAW8C,aACrCjD,QAAQwD,IAAI,qCAAsC5Z,EAAQqtB,cACpD4B,EAAIrT,aACZ,IAGA1D,EAAO+a,OAAQ,OACX,oDAAmBH,EAAItF,EAAW,OAAQtV,EAAOgb,eAEvD,MAAMgB,EAAMj1B,OAAOuc,OAAO,CAAC,EAAGsX,GAC9BA,EAAGjE,YAAa,mDACdgE,iBAAiBta,KAAK,KAAM2b,EAAK1G,EAAW,QAC5C,CACEjtB,KAAM,aACN4c,YAAa,4BACbjI,WAAY,CACVC,WAAY,CACV6d,MAAO,CACL7V,YAAa,+BACbve,KAAM,UAERq0B,OAAQ,CACNW,QAAS,OACTzW,YAAa,gCACbve,KAAM,CAAC,UAAW,WAEpBs0B,cAAe,CACb/V,YAAa,2BACbve,KAAM,WAGV80B,SAAU,CAAC,SACX90B,KAAM,WAId,CAEA,OAAOk0B,CACT,CAEO,MAAMqB,eACX,WAAAv0B,CAAY4oB,EAAKhS,EAAWM,GAC1B5Y,KAAKsqB,IAAMA,EACXtqB,KAAK8uB,OAAS,OACd9uB,KAAK4sB,UAAY,OACjB5sB,KAAK+uB,QAAU,OACf/uB,KAAK8qB,QAAU,OACf9qB,KAAKsY,UAAYA,EACjBtY,KAAK4Y,UAAYA,EACjB,MAAMxT,EAA4B,oBAAX8wB,OAAyBA,OAAS9U,KACnD+U,EAA6B,oBAAXD,OAuCxB,GAtCAl2B,KAAK+sB,YAAejrB,IACdq0B,EACFD,OAAOrS,OAAOkJ,YAAYjrB,EAAS,KAEnCsf,KAAK2L,YAAYjrB,EACnB,EAGF9B,KAAK6qB,WAAa6H,UAAU0D,WAC5BhxB,EAAQ6qB,iBACN,WACCpD,IACC,MAAM,KAAEnsB,EAAI,KAAEC,EAAI,GAAE4c,GAAOsP,EAAMlsB,KACjC,GAAI4c,IAAOvd,KAAKsY,UAIhB,OAAQ5X,GACN,IAAK,UACCV,KAAK6qB,aAAe6H,UAAUuB,MAAQj0B,KAAK4sB,WAC7C5sB,KAAK4sB,UAAU,CAAEjsB,KAAMA,IAEzB,MACF,IAAK,YACHX,KAAK6qB,WAAa6H,UAAUuB,KAC5Bj0B,KAAK8uB,OAAOjC,GACZ,MACF,IAAK,SACH7sB,KAAK6qB,WAAa6H,UAAUmB,OAC5B7zB,KAAK+uB,QAAQlC,QAff3U,QAAQS,MAAM,qBAAsB4E,EAAIvd,KAAKsY,UAmB/C,IAEF,IAGGtY,KAAKsY,UAAW,MAAM,IAAIhW,MAAM,yBACrC,IAAKtC,KAAK4Y,UAAW,MAAM,IAAItW,MAAM,yBACrCtC,KAAK+sB,YAAY,CACfrsB,KAAM,UACN4pB,IAAKtqB,KAAKsqB,IACVviB,KAAM/H,KAAKsY,UACXM,UAAW5Y,KAAK4Y,WAEpB,CAEA,IAAAqW,CAAKtuB,GACCX,KAAK6qB,aAAe6H,UAAUuB,MAChCj0B,KAAK+sB,YAAY,CACfrsB,KAAM,UACNC,KAAMA,EACNoH,KAAM/H,KAAKsY,UACXM,UAAW5Y,KAAK4Y,WAGtB,CAEA,KAAAuX,GACEnwB,KAAK6qB,WAAa6H,UAAU2D,QAC5Br2B,KAAK+sB,YAAY,CACfrsB,KAAM,QACNqH,KAAM/H,KAAKsY,UACXM,UAAW5Y,KAAK4Y,YAElB5Y,KAAK+uB,SACP,CAEA,gBAAAkB,CAAiBvvB,EAAM41B,GACR,YAAT51B,IACFV,KAAK4sB,UAAY0J,GAEN,SAAT51B,IACFV,KAAK8uB,OAASwH,GAEH,UAAT51B,IACFV,KAAK+uB,QAAUuH,GAEJ,UAAT51B,IACFV,KAAK8qB,QAAUwL,EAEnB,EAGK,SAASC,kBAAiB,kBACZ,EAAK,SACb,OAEX,OAAO,IAAIvrB,SAAQ,CAACC,QAASC,UAC3B,MAAM9F,QAA4B,oBAAX8wB,OAAyBA,OAAS9U,KACnD+U,SAA6B,oBAAXD,OACxB9wB,QAAQ6qB,iBACN,WACCpD,QACC,MAAM,KACA,WACM,UACD,UACA,MACJ,eACS,KACV,QAEFA,MAAMlsB,KAEV,GAAa,0BAATD,KAAkC,CACpC,IAAKuxB,aAAerZ,YAAcN,UAEhC,YADAJ,QAAQlK,MAAM,sDAIhB,IAAKikB,WAAW1J,WAAW,+BAIzB,YAHArQ,QAAQlK,MACN,4DAKJwmB,gBAAgB,CACdvC,WACArZ,UACAN,UACA4Z,MACAzZ,eACApW,OACC8I,MAAKqQ,MAAOiU,SACb+G,WAAW5X,IAAM6Q,OACjB,IAEE,GAAI0G,UAAYM,iBAAkB,CAChC,SAASC,EAAWC,GAClB,OAAO,IAAI3rB,SAAQ,CAACC,EAASC,KAC3B,MAAM0rB,EAAgBpM,SAASC,cAAc,UAC7CmM,EAAcC,UAAYF,EAAOG,QACjCF,EAAcG,KAAOJ,EAAOI,KAE5BH,EAAcjM,OAAS,IAAM1f,IAC7B2rB,EAAc9L,QAAWrgB,GAAMS,EAAOT,GAEtC+f,SAASO,KAAKC,YAAY4L,EAAc,GAE5C,CACA,GAAI5c,OAAOgd,QAAUhd,OAAOgd,OAAOtyB,OAAS,EAC1C,IAAK,MAAMuyB,KAASjd,OAAOgd,OAAQ,CACjC,MAAME,EAAe1M,SAASC,cAAc,SAC5CyM,EAAaL,UAAYI,EAAMH,QAC/BI,EAAaH,KAAOE,EAAMF,KAC1BvM,SAASO,KAAKC,YAAYkM,EAC5B,CAEF,GAAIld,OAAOmd,OAASnd,OAAOmd,MAAMzyB,OAAS,EACxC,IAAK,MAAM0yB,KAAQpd,OAAOmd,MAAO,CAC/B,MAAME,EAAc7M,SAASC,cAAc,KAC3C4M,EAAY/L,KAAO8L,EAAK9M,IACxB+M,EAAYC,UAAYF,EAAKG,KAC7B/M,SAASlhB,KAAK0hB,YAAYqM,EAC5B,CAEF,GAAIrd,OAAOwd,SAAWxd,OAAOwd,QAAQ9yB,OAAS,EAC5C,IAAK,MAAM+yB,KAAKzd,OAAOwd,QAAS,CAC9BhN,SAASlhB,KAAKutB,UAAYY,EAAEX,QAC5B,KACF,CAEF,GAAI9c,OAAO0d,SAAW1d,OAAO0d,QAAQhzB,OAAS,EAC5C,IAAK,MAAMiyB,KAAU3c,OAAO0d,QAAS,CACnC,GAAoB,eAAhBf,EAAOI,KACT,MAAM,IAAIz0B,MAAM,+CACZo0B,EAAWC,EACnB,CAEJ,MAEK,IACFR,UACDM,kBACAzc,OAAO0d,SACP1d,OAAO0d,QAAQhzB,OAAS,EAExB,IAAK,MAAMiyB,UAAU3c,OAAO0d,QAAS,CACnC,GAAoB,eAAhBf,OAAOI,KACT,MAAM,IAAIz0B,MAAM,yCAClB4pB,KAAKyK,OAAOG,QACd,CAGEa,gBACIA,SAASlI,OAAQzV,QAEzB/O,QAAQwkB,OACV,CAAE,MAAOhlB,GACPS,OAAOT,EACT,IAEJ,KAEF,GAEE0rB,SACFD,OAAOrS,OAAOkJ,YAAY,CAAErsB,KAAM,oBAAsB,KAExD0gB,KAAK2L,YAAY,CAAErsB,KAAM,oBAC3B,GAEJ,C","sources":["webpack://hypha-rpc/webpack/universalModuleDefinition","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/utils/prettyByte.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/ExtData.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/DecodeError.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/utils/int.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/timestamp.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/utils/utf8.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/ExtensionCodec.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/utils/typedArrays.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/CachedKeyDecoder.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/Decoder.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/decode.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/Encoder.mjs","webpack://hypha-rpc/./node_modules/@msgpack/msgpack/dist.es5+esm/encode.mjs","webpack://hypha-rpc/./src/rpc.js","webpack://hypha-rpc/./src/utils/index.js","webpack://hypha-rpc/./src/utils/schema.js","webpack://hypha-rpc/./src/webrtc-client.js","webpack://hypha-rpc/webpack/bootstrap","webpack://hypha-rpc/webpack/runtime/define property getters","webpack://hypha-rpc/webpack/runtime/hasOwnProperty shorthand","webpack://hypha-rpc/webpack/runtime/make namespace object","webpack://hypha-rpc/./src/websocket-client.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyphaWebsocketClient\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyphaWebsocketClient\"] = factory();\n\telse\n\t\troot[\"hyphaWebsocketClient\"] = factory();\n})(this, () => {\nreturn ","export function prettyByte(byte) {\n return \"\".concat(byte < 0 ? \"-\" : \"\", \"0x\").concat(Math.abs(byte).toString(16).padStart(2, \"0\"));\n}\n//# sourceMappingURL=prettyByte.mjs.map","/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nvar ExtData = /** @class */ (function () {\n function ExtData(type, data) {\n this.type = type;\n this.data = data;\n }\n return ExtData;\n}());\nexport { ExtData };\n//# sourceMappingURL=ExtData.mjs.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar DecodeError = /** @class */ (function (_super) {\n __extends(DecodeError, _super);\n function DecodeError(message) {\n var _this = _super.call(this, message) || this;\n // fix the prototype chain in a cross-platform way\n var proto = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(_this, proto);\n Object.defineProperty(_this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n return _this;\n }\n return DecodeError;\n}(Error));\nexport { DecodeError };\n//# sourceMappingURL=DecodeError.mjs.map","// Integer Utility\nexport var UINT32_MAX = 4294967295;\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\nexport function setUint64(view, offset, value) {\n var high = value / 4294967296;\n var low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function setInt64(view, offset, value) {\n var high = Math.floor(value / 4294967296);\n var low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function getInt64(view, offset) {\n var high = view.getInt32(offset);\n var low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\nexport function getUint64(view, offset) {\n var high = view.getUint32(offset);\n var low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\n//# sourceMappingURL=int.mjs.map","// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError.mjs\";\nimport { getInt64, setInt64 } from \"./utils/int.mjs\";\nexport var EXT_TIMESTAMP = -1;\nvar TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nvar TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\nexport function encodeTimeSpecToTimestamp(_a) {\n var sec = _a.sec, nsec = _a.nsec;\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n var rv = new Uint8Array(4);\n var view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n }\n else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n var secHigh = sec / 0x100000000;\n var secLow = sec & 0xffffffff;\n var rv = new Uint8Array(8);\n var view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n }\n else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n var rv = new Uint8Array(12);\n var view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\nexport function encodeDateToTimeSpec(date) {\n var msec = date.getTime();\n var sec = Math.floor(msec / 1e3);\n var nsec = (msec - sec * 1e3) * 1e6;\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n var nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\nexport function encodeTimestampExtension(object) {\n if (object instanceof Date) {\n var timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n }\n else {\n return null;\n }\n}\nexport function decodeTimestampToTimeSpec(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n var sec = view.getUint32(0);\n var nsec = 0;\n return { sec: sec, nsec: nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n var nsec30AndSecHigh2 = view.getUint32(0);\n var secLow32 = view.getUint32(4);\n var sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n var nsec = nsec30AndSecHigh2 >>> 2;\n return { sec: sec, nsec: nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n var sec = getInt64(view, 4);\n var nsec = view.getUint32(0);\n return { sec: sec, nsec: nsec };\n }\n default:\n throw new DecodeError(\"Unrecognized data size for timestamp (expected 4, 8, or 12): \".concat(data.length));\n }\n}\nexport function decodeTimestampExtension(data) {\n var timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\nexport var timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n//# sourceMappingURL=timestamp.mjs.map","var _a, _b, _c;\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { UINT32_MAX } from \"./int.mjs\";\nvar TEXT_ENCODING_AVAILABLE = (typeof process === \"undefined\" || ((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a[\"TEXT_ENCODING\"]) !== \"never\") &&\n typeof TextEncoder !== \"undefined\" &&\n typeof TextDecoder !== \"undefined\";\nexport function utf8Count(str) {\n var strLength = str.length;\n var byteLength = 0;\n var pos = 0;\n while (pos < strLength) {\n var value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n var extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n }\n else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\nexport function utf8EncodeJs(str, output, outputOffset) {\n var strLength = str.length;\n var offset = outputOffset;\n var pos = 0;\n while (pos < strLength) {\n var value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n var extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\nvar sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport var TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && ((_b = process === null || process === void 0 ? void 0 : process.env) === null || _b === void 0 ? void 0 : _b[\"TEXT_ENCODING\"]) !== \"force\"\n ? 200\n : 0;\nfunction utf8EncodeTEencode(str, output, outputOffset) {\n output.set(sharedTextEncoder.encode(str), outputOffset);\n}\nfunction utf8EncodeTEencodeInto(str, output, outputOffset) {\n sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));\n}\nexport var utf8EncodeTE = (sharedTextEncoder === null || sharedTextEncoder === void 0 ? void 0 : sharedTextEncoder.encodeInto) ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\nvar CHUNK_SIZE = 4096;\nexport function utf8DecodeJs(bytes, inputOffset, byteLength) {\n var offset = inputOffset;\n var end = offset + byteLength;\n var units = [];\n var result = \"\";\n while (offset < end) {\n var byte1 = bytes[offset++];\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n }\n else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n var byte2 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n }\n else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n var byte2 = bytes[offset++] & 0x3f;\n var byte3 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n }\n else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n var byte2 = bytes[offset++] & 0x3f;\n var byte3 = bytes[offset++] & 0x3f;\n var byte4 = bytes[offset++] & 0x3f;\n var unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n }\n else {\n units.push(byte1);\n }\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode.apply(String, units);\n units.length = 0;\n }\n }\n if (units.length > 0) {\n result += String.fromCharCode.apply(String, units);\n }\n return result;\n}\nvar sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport var TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && ((_c = process === null || process === void 0 ? void 0 : process.env) === null || _c === void 0 ? void 0 : _c[\"TEXT_DECODER\"]) !== \"force\"\n ? 200\n : 0;\nexport function utf8DecodeTD(bytes, inputOffset, byteLength) {\n var stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder.decode(stringBytes);\n}\n//# sourceMappingURL=utf8.mjs.map","// ExtensionCodec to handle MessagePack extensions\nimport { ExtData } from \"./ExtData.mjs\";\nimport { timestampExtension } from \"./timestamp.mjs\";\nvar ExtensionCodec = /** @class */ (function () {\n function ExtensionCodec() {\n // built-in extensions\n this.builtInEncoders = [];\n this.builtInDecoders = [];\n // custom extensions\n this.encoders = [];\n this.decoders = [];\n this.register(timestampExtension);\n }\n ExtensionCodec.prototype.register = function (_a) {\n var type = _a.type, encode = _a.encode, decode = _a.decode;\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n }\n else {\n // built-in extensions\n var index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n };\n ExtensionCodec.prototype.tryToEncode = function (object, context) {\n // built-in extensions\n for (var i = 0; i < this.builtInEncoders.length; i++) {\n var encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n var data = encodeExt(object, context);\n if (data != null) {\n var type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n // custom extensions\n for (var i = 0; i < this.encoders.length; i++) {\n var encodeExt = this.encoders[i];\n if (encodeExt != null) {\n var data = encodeExt(object, context);\n if (data != null) {\n var type = i;\n return new ExtData(type, data);\n }\n }\n }\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n };\n ExtensionCodec.prototype.decode = function (data, type, context) {\n var decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n }\n else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n };\n ExtensionCodec.defaultCodec = new ExtensionCodec();\n return ExtensionCodec;\n}());\nexport { ExtensionCodec };\n//# sourceMappingURL=ExtensionCodec.mjs.map","export function ensureUint8Array(buffer) {\n if (buffer instanceof Uint8Array) {\n return buffer;\n }\n else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n }\n else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\nexport function createDataView(buffer) {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n var bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n//# sourceMappingURL=typedArrays.mjs.map","import { utf8DecodeJs } from \"./utils/utf8.mjs\";\nvar DEFAULT_MAX_KEY_LENGTH = 16;\nvar DEFAULT_MAX_LENGTH_PER_KEY = 16;\nvar CachedKeyDecoder = /** @class */ (function () {\n function CachedKeyDecoder(maxKeyLength, maxLengthPerKey) {\n if (maxKeyLength === void 0) { maxKeyLength = DEFAULT_MAX_KEY_LENGTH; }\n if (maxLengthPerKey === void 0) { maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY; }\n this.maxKeyLength = maxKeyLength;\n this.maxLengthPerKey = maxLengthPerKey;\n this.hit = 0;\n this.miss = 0;\n // avoid `new Array(N)`, which makes a sparse array,\n // because a sparse array is typically slower than a non-sparse array.\n this.caches = [];\n for (var i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n CachedKeyDecoder.prototype.canBeCached = function (byteLength) {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n };\n CachedKeyDecoder.prototype.find = function (bytes, inputOffset, byteLength) {\n var records = this.caches[byteLength - 1];\n FIND_CHUNK: for (var _i = 0, records_1 = records; _i < records_1.length; _i++) {\n var record = records_1[_i];\n var recordBytes = record.bytes;\n for (var j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.str;\n }\n return null;\n };\n CachedKeyDecoder.prototype.store = function (bytes, value) {\n var records = this.caches[bytes.length - 1];\n var record = { bytes: bytes, str: value };\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to an arbitrary position.\n records[(Math.random() * records.length) | 0] = record;\n }\n else {\n records.push(record);\n }\n };\n CachedKeyDecoder.prototype.decode = function (bytes, inputOffset, byteLength) {\n var cachedValue = this.find(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n this.hit++;\n return cachedValue;\n }\n this.miss++;\n var str = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n var slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, str);\n return str;\n };\n return CachedKeyDecoder;\n}());\nexport { CachedKeyDecoder };\n//# sourceMappingURL=CachedKeyDecoder.mjs.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n};\nvar __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\nvar __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n};\nimport { prettyByte } from \"./utils/prettyByte.mjs\";\nimport { ExtensionCodec } from \"./ExtensionCodec.mjs\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int.mjs\";\nimport { utf8DecodeJs, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8.mjs\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays.mjs\";\nimport { CachedKeyDecoder } from \"./CachedKeyDecoder.mjs\";\nimport { DecodeError } from \"./DecodeError.mjs\";\nvar isValidMapKeyType = function (key) {\n var keyType = typeof key;\n return keyType === \"string\" || keyType === \"number\";\n};\nvar HEAD_BYTE_REQUIRED = -1;\nvar EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nvar EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport var DataViewIndexOutOfBoundsError = (function () {\n try {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n }\n catch (e) {\n return e.constructor;\n }\n throw new Error(\"never reached\");\n})();\nvar MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\nvar sharedCachedKeyDecoder = new CachedKeyDecoder();\nvar Decoder = /** @class */ (function () {\n function Decoder(extensionCodec, context, maxStrLength, maxBinLength, maxArrayLength, maxMapLength, maxExtLength, keyDecoder) {\n if (extensionCodec === void 0) { extensionCodec = ExtensionCodec.defaultCodec; }\n if (context === void 0) { context = undefined; }\n if (maxStrLength === void 0) { maxStrLength = UINT32_MAX; }\n if (maxBinLength === void 0) { maxBinLength = UINT32_MAX; }\n if (maxArrayLength === void 0) { maxArrayLength = UINT32_MAX; }\n if (maxMapLength === void 0) { maxMapLength = UINT32_MAX; }\n if (maxExtLength === void 0) { maxExtLength = UINT32_MAX; }\n if (keyDecoder === void 0) { keyDecoder = sharedCachedKeyDecoder; }\n this.extensionCodec = extensionCodec;\n this.context = context;\n this.maxStrLength = maxStrLength;\n this.maxBinLength = maxBinLength;\n this.maxArrayLength = maxArrayLength;\n this.maxMapLength = maxMapLength;\n this.maxExtLength = maxExtLength;\n this.keyDecoder = keyDecoder;\n this.totalPos = 0;\n this.pos = 0;\n this.view = EMPTY_VIEW;\n this.bytes = EMPTY_BYTES;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack = [];\n }\n Decoder.prototype.reinitializeState = function () {\n this.totalPos = 0;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack.length = 0;\n // view, bytes, and pos will be re-initialized in setBuffer()\n };\n Decoder.prototype.setBuffer = function (buffer) {\n this.bytes = ensureUint8Array(buffer);\n this.view = createDataView(this.bytes);\n this.pos = 0;\n };\n Decoder.prototype.appendBuffer = function (buffer) {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n this.setBuffer(buffer);\n }\n else {\n var remainingData = this.bytes.subarray(this.pos);\n var newData = ensureUint8Array(buffer);\n // concat remainingData + newData\n var newBuffer = new Uint8Array(remainingData.length + newData.length);\n newBuffer.set(remainingData);\n newBuffer.set(newData, remainingData.length);\n this.setBuffer(newBuffer);\n }\n };\n Decoder.prototype.hasRemaining = function (size) {\n return this.view.byteLength - this.pos >= size;\n };\n Decoder.prototype.createExtraByteError = function (posToShow) {\n var _a = this, view = _a.view, pos = _a.pos;\n return new RangeError(\"Extra \".concat(view.byteLength - pos, \" of \").concat(view.byteLength, \" byte(s) found at buffer[\").concat(posToShow, \"]\"));\n };\n /**\n * @throws {@link DecodeError}\n * @throws {@link RangeError}\n */\n Decoder.prototype.decode = function (buffer) {\n this.reinitializeState();\n this.setBuffer(buffer);\n var object = this.doDecodeSync();\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.pos);\n }\n return object;\n };\n Decoder.prototype.decodeMulti = function (buffer) {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.reinitializeState();\n this.setBuffer(buffer);\n _a.label = 1;\n case 1:\n if (!this.hasRemaining(1)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.doDecodeSync()];\n case 2:\n _a.sent();\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/];\n }\n });\n };\n Decoder.prototype.decodeAsync = function (stream) {\n var stream_1, stream_1_1;\n var e_1, _a;\n return __awaiter(this, void 0, void 0, function () {\n var decoded, object, buffer, e_1_1, _b, headByte, pos, totalPos;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n decoded = false;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 6, 7, 12]);\n stream_1 = __asyncValues(stream);\n _c.label = 2;\n case 2: return [4 /*yield*/, stream_1.next()];\n case 3:\n if (!(stream_1_1 = _c.sent(), !stream_1_1.done)) return [3 /*break*/, 5];\n buffer = stream_1_1.value;\n if (decoded) {\n throw this.createExtraByteError(this.totalPos);\n }\n this.appendBuffer(buffer);\n try {\n object = this.doDecodeSync();\n decoded = true;\n }\n catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n _c.label = 4;\n case 4: return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 12];\n case 6:\n e_1_1 = _c.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 12];\n case 7:\n _c.trys.push([7, , 10, 11]);\n if (!(stream_1_1 && !stream_1_1.done && (_a = stream_1.return))) return [3 /*break*/, 9];\n return [4 /*yield*/, _a.call(stream_1)];\n case 8:\n _c.sent();\n _c.label = 9;\n case 9: return [3 /*break*/, 11];\n case 10:\n if (e_1) throw e_1.error;\n return [7 /*endfinally*/];\n case 11: return [7 /*endfinally*/];\n case 12:\n if (decoded) {\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.totalPos);\n }\n return [2 /*return*/, object];\n }\n _b = this, headByte = _b.headByte, pos = _b.pos, totalPos = _b.totalPos;\n throw new RangeError(\"Insufficient data in parsing \".concat(prettyByte(headByte), \" at \").concat(totalPos, \" (\").concat(pos, \" in the current buffer)\"));\n }\n });\n });\n };\n Decoder.prototype.decodeArrayStream = function (stream) {\n return this.decodeMultiAsync(stream, true);\n };\n Decoder.prototype.decodeStream = function (stream) {\n return this.decodeMultiAsync(stream, false);\n };\n Decoder.prototype.decodeMultiAsync = function (stream, isArray) {\n return __asyncGenerator(this, arguments, function decodeMultiAsync_1() {\n var isArrayHeaderRequired, arrayItemsLeft, stream_2, stream_2_1, buffer, e_2, e_3_1;\n var e_3, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n isArrayHeaderRequired = isArray;\n arrayItemsLeft = -1;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 14, 19]);\n stream_2 = __asyncValues(stream);\n _b.label = 2;\n case 2: return [4 /*yield*/, __await(stream_2.next())];\n case 3:\n if (!(stream_2_1 = _b.sent(), !stream_2_1.done)) return [3 /*break*/, 12];\n buffer = stream_2_1.value;\n if (isArray && arrayItemsLeft === 0) {\n throw this.createExtraByteError(this.totalPos);\n }\n this.appendBuffer(buffer);\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n _b.label = 4;\n case 4:\n _b.trys.push([4, 9, , 10]);\n _b.label = 5;\n case 5:\n if (!true) return [3 /*break*/, 8];\n return [4 /*yield*/, __await(this.doDecodeSync())];\n case 6: return [4 /*yield*/, _b.sent()];\n case 7:\n _b.sent();\n if (--arrayItemsLeft === 0) {\n return [3 /*break*/, 8];\n }\n return [3 /*break*/, 5];\n case 8: return [3 /*break*/, 10];\n case 9:\n e_2 = _b.sent();\n if (!(e_2 instanceof DataViewIndexOutOfBoundsError)) {\n throw e_2; // rethrow\n }\n return [3 /*break*/, 10];\n case 10:\n this.totalPos += this.pos;\n _b.label = 11;\n case 11: return [3 /*break*/, 2];\n case 12: return [3 /*break*/, 19];\n case 13:\n e_3_1 = _b.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 19];\n case 14:\n _b.trys.push([14, , 17, 18]);\n if (!(stream_2_1 && !stream_2_1.done && (_a = stream_2.return))) return [3 /*break*/, 16];\n return [4 /*yield*/, __await(_a.call(stream_2))];\n case 15:\n _b.sent();\n _b.label = 16;\n case 16: return [3 /*break*/, 18];\n case 17:\n if (e_3) throw e_3.error;\n return [7 /*endfinally*/];\n case 18: return [7 /*endfinally*/];\n case 19: return [2 /*return*/];\n }\n });\n });\n };\n Decoder.prototype.doDecodeSync = function () {\n DECODE: while (true) {\n var headByte = this.readHeadByte();\n var object = void 0;\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n }\n else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n }\n else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n var size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = {};\n }\n }\n else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n var size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = [];\n }\n }\n else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n var byteLength = headByte - 0xa0;\n object = this.decodeUtf8String(byteLength, 0);\n }\n }\n else if (headByte === 0xc0) {\n // nil\n object = null;\n }\n else if (headByte === 0xc2) {\n // false\n object = false;\n }\n else if (headByte === 0xc3) {\n // true\n object = true;\n }\n else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n }\n else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n }\n else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n }\n else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n }\n else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n }\n else if (headByte === 0xcf) {\n // uint 64\n object = this.readU64();\n }\n else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n }\n else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n }\n else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n }\n else if (headByte === 0xd3) {\n // int 64\n object = this.readI64();\n }\n else if (headByte === 0xd9) {\n // str 8\n var byteLength = this.lookU8();\n object = this.decodeUtf8String(byteLength, 1);\n }\n else if (headByte === 0xda) {\n // str 16\n var byteLength = this.lookU16();\n object = this.decodeUtf8String(byteLength, 2);\n }\n else if (headByte === 0xdb) {\n // str 32\n var byteLength = this.lookU32();\n object = this.decodeUtf8String(byteLength, 4);\n }\n else if (headByte === 0xdc) {\n // array 16\n var size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = [];\n }\n }\n else if (headByte === 0xdd) {\n // array 32\n var size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = [];\n }\n }\n else if (headByte === 0xde) {\n // map 16\n var size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = {};\n }\n }\n else if (headByte === 0xdf) {\n // map 32\n var size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = {};\n }\n }\n else if (headByte === 0xc4) {\n // bin 8\n var size = this.lookU8();\n object = this.decodeBinary(size, 1);\n }\n else if (headByte === 0xc5) {\n // bin 16\n var size = this.lookU16();\n object = this.decodeBinary(size, 2);\n }\n else if (headByte === 0xc6) {\n // bin 32\n var size = this.lookU32();\n object = this.decodeBinary(size, 4);\n }\n else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n }\n else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n }\n else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n }\n else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n }\n else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n }\n else if (headByte === 0xc7) {\n // ext 8\n var size = this.lookU8();\n object = this.decodeExtension(size, 1);\n }\n else if (headByte === 0xc8) {\n // ext 16\n var size = this.lookU16();\n object = this.decodeExtension(size, 2);\n }\n else if (headByte === 0xc9) {\n // ext 32\n var size = this.lookU32();\n object = this.decodeExtension(size, 4);\n }\n else {\n throw new DecodeError(\"Unrecognized type byte: \".concat(prettyByte(headByte)));\n }\n this.complete();\n var stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n var state = stack[stack.length - 1];\n if (state.type === 0 /* State.ARRAY */) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n stack.pop();\n object = state.array;\n }\n else {\n continue DECODE;\n }\n }\n else if (state.type === 1 /* State.MAP_KEY */) {\n if (!isValidMapKeyType(object)) {\n throw new DecodeError(\"The type of key must be string or number but \" + typeof object);\n }\n if (object === \"__proto__\") {\n throw new DecodeError(\"The key __proto__ is not allowed\");\n }\n state.key = object;\n state.type = 2 /* State.MAP_VALUE */;\n continue DECODE;\n }\n else {\n // it must be `state.type === State.MAP_VALUE` here\n state.map[state.key] = object;\n state.readCount++;\n if (state.readCount === state.size) {\n stack.pop();\n object = state.map;\n }\n else {\n state.key = null;\n state.type = 1 /* State.MAP_KEY */;\n continue DECODE;\n }\n }\n }\n return object;\n }\n };\n Decoder.prototype.readHeadByte = function () {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n return this.headByte;\n };\n Decoder.prototype.complete = function () {\n this.headByte = HEAD_BYTE_REQUIRED;\n };\n Decoder.prototype.readArraySize = function () {\n var headByte = this.readHeadByte();\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n }\n else {\n throw new DecodeError(\"Unrecognized array type byte: \".concat(prettyByte(headByte)));\n }\n }\n }\n };\n Decoder.prototype.pushMapState = function (size) {\n if (size > this.maxMapLength) {\n throw new DecodeError(\"Max length exceeded: map length (\".concat(size, \") > maxMapLengthLength (\").concat(this.maxMapLength, \")\"));\n }\n this.stack.push({\n type: 1 /* State.MAP_KEY */,\n size: size,\n key: null,\n readCount: 0,\n map: {},\n });\n };\n Decoder.prototype.pushArrayState = function (size) {\n if (size > this.maxArrayLength) {\n throw new DecodeError(\"Max length exceeded: array length (\".concat(size, \") > maxArrayLength (\").concat(this.maxArrayLength, \")\"));\n }\n this.stack.push({\n type: 0 /* State.ARRAY */,\n size: size,\n array: new Array(size),\n position: 0,\n });\n };\n Decoder.prototype.decodeUtf8String = function (byteLength, headerOffset) {\n var _a;\n if (byteLength > this.maxStrLength) {\n throw new DecodeError(\"Max length exceeded: UTF-8 byte length (\".concat(byteLength, \") > maxStrLength (\").concat(this.maxStrLength, \")\"));\n }\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n var offset = this.pos + headerOffset;\n var object;\n if (this.stateIsMapKey() && ((_a = this.keyDecoder) === null || _a === void 0 ? void 0 : _a.canBeCached(byteLength))) {\n object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n }\n else if (byteLength > TEXT_DECODER_THRESHOLD) {\n object = utf8DecodeTD(this.bytes, offset, byteLength);\n }\n else {\n object = utf8DecodeJs(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n };\n Decoder.prototype.stateIsMapKey = function () {\n if (this.stack.length > 0) {\n var state = this.stack[this.stack.length - 1];\n return state.type === 1 /* State.MAP_KEY */;\n }\n return false;\n };\n Decoder.prototype.decodeBinary = function (byteLength, headOffset) {\n if (byteLength > this.maxBinLength) {\n throw new DecodeError(\"Max length exceeded: bin length (\".concat(byteLength, \") > maxBinLength (\").concat(this.maxBinLength, \")\"));\n }\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n var offset = this.pos + headOffset;\n var object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n };\n Decoder.prototype.decodeExtension = function (size, headOffset) {\n if (size > this.maxExtLength) {\n throw new DecodeError(\"Max length exceeded: ext length (\".concat(size, \") > maxExtLength (\").concat(this.maxExtLength, \")\"));\n }\n var extType = this.view.getInt8(this.pos + headOffset);\n var data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n };\n Decoder.prototype.lookU8 = function () {\n return this.view.getUint8(this.pos);\n };\n Decoder.prototype.lookU16 = function () {\n return this.view.getUint16(this.pos);\n };\n Decoder.prototype.lookU32 = function () {\n return this.view.getUint32(this.pos);\n };\n Decoder.prototype.readU8 = function () {\n var value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n };\n Decoder.prototype.readI8 = function () {\n var value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n };\n Decoder.prototype.readU16 = function () {\n var value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n };\n Decoder.prototype.readI16 = function () {\n var value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n };\n Decoder.prototype.readU32 = function () {\n var value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n };\n Decoder.prototype.readI32 = function () {\n var value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n };\n Decoder.prototype.readU64 = function () {\n var value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n };\n Decoder.prototype.readI64 = function () {\n var value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n };\n Decoder.prototype.readF32 = function () {\n var value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n };\n Decoder.prototype.readF64 = function () {\n var value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n };\n return Decoder;\n}());\nexport { Decoder };\n//# sourceMappingURL=Decoder.mjs.map","import { Decoder } from \"./Decoder.mjs\";\nexport var defaultDecodeOptions = {};\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync()}, {@link decodeStream()}, or {@link decodeArrayStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode(buffer, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n var decoder = new Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);\n return decoder.decode(buffer);\n}\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti(buffer, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n var decoder = new Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);\n return decoder.decodeMulti(buffer);\n}\n//# sourceMappingURL=decode.mjs.map","import { utf8EncodeJs, utf8Count, TEXT_ENCODER_THRESHOLD, utf8EncodeTE } from \"./utils/utf8.mjs\";\nimport { ExtensionCodec } from \"./ExtensionCodec.mjs\";\nimport { setInt64, setUint64 } from \"./utils/int.mjs\";\nimport { ensureUint8Array } from \"./utils/typedArrays.mjs\";\nexport var DEFAULT_MAX_DEPTH = 100;\nexport var DEFAULT_INITIAL_BUFFER_SIZE = 2048;\nvar Encoder = /** @class */ (function () {\n function Encoder(extensionCodec, context, maxDepth, initialBufferSize, sortKeys, forceFloat32, ignoreUndefined, forceIntegerToFloat) {\n if (extensionCodec === void 0) { extensionCodec = ExtensionCodec.defaultCodec; }\n if (context === void 0) { context = undefined; }\n if (maxDepth === void 0) { maxDepth = DEFAULT_MAX_DEPTH; }\n if (initialBufferSize === void 0) { initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE; }\n if (sortKeys === void 0) { sortKeys = false; }\n if (forceFloat32 === void 0) { forceFloat32 = false; }\n if (ignoreUndefined === void 0) { ignoreUndefined = false; }\n if (forceIntegerToFloat === void 0) { forceIntegerToFloat = false; }\n this.extensionCodec = extensionCodec;\n this.context = context;\n this.maxDepth = maxDepth;\n this.initialBufferSize = initialBufferSize;\n this.sortKeys = sortKeys;\n this.forceFloat32 = forceFloat32;\n this.ignoreUndefined = ignoreUndefined;\n this.forceIntegerToFloat = forceIntegerToFloat;\n this.pos = 0;\n this.view = new DataView(new ArrayBuffer(this.initialBufferSize));\n this.bytes = new Uint8Array(this.view.buffer);\n }\n Encoder.prototype.reinitializeState = function () {\n this.pos = 0;\n };\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n Encoder.prototype.encodeSharedRef = function (object) {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n };\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n Encoder.prototype.encode = function (object) {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n };\n Encoder.prototype.doEncode = function (object, depth) {\n if (depth > this.maxDepth) {\n throw new Error(\"Too deep objects in depth \".concat(depth));\n }\n if (object == null) {\n this.encodeNil();\n }\n else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n }\n else if (typeof object === \"number\") {\n this.encodeNumber(object);\n }\n else if (typeof object === \"string\") {\n this.encodeString(object);\n }\n else {\n this.encodeObject(object, depth);\n }\n };\n Encoder.prototype.ensureBufferSizeToWrite = function (sizeToWrite) {\n var requiredSize = this.pos + sizeToWrite;\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n };\n Encoder.prototype.resizeBuffer = function (newSize) {\n var newBuffer = new ArrayBuffer(newSize);\n var newBytes = new Uint8Array(newBuffer);\n var newView = new DataView(newBuffer);\n newBytes.set(this.bytes);\n this.view = newView;\n this.bytes = newBytes;\n };\n Encoder.prototype.encodeNil = function () {\n this.writeU8(0xc0);\n };\n Encoder.prototype.encodeBoolean = function (object) {\n if (object === false) {\n this.writeU8(0xc2);\n }\n else {\n this.writeU8(0xc3);\n }\n };\n Encoder.prototype.encodeNumber = function (object) {\n if (Number.isSafeInteger(object) && !this.forceIntegerToFloat) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n }\n else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n }\n else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n }\n else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n }\n else {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n }\n else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n }\n else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n }\n else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n }\n else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n }\n else {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n }\n }\n else {\n // non-integer numbers\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n }\n else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n };\n Encoder.prototype.writeStringHeader = function (byteLength) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n }\n else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n }\n else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n }\n else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n }\n else {\n throw new Error(\"Too long string: \".concat(byteLength, \" bytes in UTF-8\"));\n }\n };\n Encoder.prototype.encodeString = function (object) {\n var maxHeaderSize = 1 + 4;\n var strLength = object.length;\n if (strLength > TEXT_ENCODER_THRESHOLD) {\n var byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeTE(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n else {\n var byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeJs(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n };\n Encoder.prototype.encodeObject = function (object, depth) {\n // try to encode objects with custom codec first of non-primitives\n var ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n }\n else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n }\n else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n }\n else if (typeof object === \"object\") {\n this.encodeMap(object, depth);\n }\n else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(\"Unrecognized object: \".concat(Object.prototype.toString.apply(object)));\n }\n };\n Encoder.prototype.encodeBinary = function (object) {\n var size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large binary: \".concat(size));\n }\n var bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n };\n Encoder.prototype.encodeArray = function (object, depth) {\n var size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n }\n else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large array: \".concat(size));\n }\n for (var _i = 0, object_1 = object; _i < object_1.length; _i++) {\n var item = object_1[_i];\n this.doEncode(item, depth + 1);\n }\n };\n Encoder.prototype.countWithoutUndefined = function (object, keys) {\n var count = 0;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (object[key] !== undefined) {\n count++;\n }\n }\n return count;\n };\n Encoder.prototype.encodeMap = function (object, depth) {\n var keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n var size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n }\n else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large map object: \".concat(size));\n }\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var value = object[key];\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n };\n Encoder.prototype.encodeExtension = function (ext) {\n var size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n }\n else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n }\n else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n }\n else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n }\n else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n }\n else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n }\n else {\n throw new Error(\"Too large extension object: \".concat(size));\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n };\n Encoder.prototype.writeU8 = function (value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setUint8(this.pos, value);\n this.pos++;\n };\n Encoder.prototype.writeU8a = function (values) {\n var size = values.length;\n this.ensureBufferSizeToWrite(size);\n this.bytes.set(values, this.pos);\n this.pos += size;\n };\n Encoder.prototype.writeI8 = function (value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setInt8(this.pos, value);\n this.pos++;\n };\n Encoder.prototype.writeU16 = function (value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n };\n Encoder.prototype.writeI16 = function (value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n };\n Encoder.prototype.writeU32 = function (value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n };\n Encoder.prototype.writeI32 = function (value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n };\n Encoder.prototype.writeF32 = function (value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n };\n Encoder.prototype.writeF64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n };\n Encoder.prototype.writeU64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n };\n Encoder.prototype.writeI64 = function (value) {\n this.ensureBufferSizeToWrite(8);\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n };\n return Encoder;\n}());\nexport { Encoder };\n//# sourceMappingURL=Encoder.mjs.map","import { Encoder } from \"./Encoder.mjs\";\nvar defaultEncodeOptions = {};\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode(value, options) {\n if (options === void 0) { options = defaultEncodeOptions; }\n var encoder = new Encoder(options.extensionCodec, options.context, options.maxDepth, options.initialBufferSize, options.sortKeys, options.forceFloat32, options.ignoreUndefined, options.forceIntegerToFloat);\n return encoder.encodeSharedRef(value);\n}\n//# sourceMappingURL=encode.mjs.map","/**\n * Contains the RPC object used both by the application\n * site, and by each plugin\n */\nimport {\n randId,\n typedArrayToDtype,\n dtypeToTypedArray,\n MessageEmitter,\n assert,\n waitFor,\n convertCase,\n} from \"./utils\";\nimport { schemaFunction } from \"./utils/schema\";\n\nimport { encode as msgpack_packb, decodeMulti } from \"@msgpack/msgpack\";\n\nexport const API_VERSION = \"0.20.0\";\nconst CHUNK_SIZE = 1024 * 500;\n\nconst ArrayBufferView = Object.getPrototypeOf(\n Object.getPrototypeOf(new Uint8Array()),\n).constructor;\n\nfunction _appendBuffer(buffer1, buffer2) {\n const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n}\n\nfunction indexObject(obj, is) {\n if (!is) throw new Error(\"undefined index\");\n if (typeof is === \"string\") return indexObject(obj, is.split(\".\"));\n else if (is.length === 0) return obj;\n else return indexObject(obj[is[0]], is.slice(1));\n}\n\nfunction _get_schema(obj, name = null, skipContext = false) {\n if (obj instanceof Object) {\n let schema = {};\n for (let k in obj) {\n schema[k] = _get_schema(obj[k], k, skipContext);\n }\n return schema;\n }\n if (obj instanceof Array) {\n return obj.map((v, i) => _get_schema(v, null, skipContext));\n }\n if (typeof obj === \"function\") {\n if (obj.__schema__) {\n const schema = JSON.parse(JSON.stringify(obj.__schema__));\n if (name) {\n schema.name = name;\n obj.__schema__.name = name;\n }\n if (skipContext) {\n if (schema.parameters && schema.parameters.properties) {\n delete schema.parameters.properties[\"context\"];\n }\n }\n return { type: \"function\", function: schema };\n } else {\n return { type: \"function\" };\n }\n } else if (typeof obj === \"number\") {\n return { type: \"number\" };\n } else if (typeof obj === \"string\") {\n return { type: \"string\" };\n } else if (typeof obj === \"boolean\") {\n return { type: \"boolean\" };\n } else if (obj === null) {\n return { type: \"null\" };\n } else {\n return {};\n }\n}\n\nfunction _annotate_service(service, serviceTypeInfo) {\n function validateKeys(serviceDict, schemaDict, path = \"root\") {\n // Validate that all keys in schemaDict exist in serviceDict\n for (let key in schemaDict) {\n if (!serviceDict.hasOwnProperty(key)) {\n throw new Error(`Missing key '${key}' in service at path '${path}'`);\n }\n }\n\n // Check for any unexpected keys in serviceDict\n for (let key in serviceDict) {\n if (key !== \"type\" && !schemaDict.hasOwnProperty(key)) {\n throw new Error(`Unexpected key '${key}' in service at path '${path}'`);\n }\n }\n }\n\n function annotateRecursive(newService, schemaInfo, path = \"root\") {\n if (typeof newService === \"object\" && !Array.isArray(newService)) {\n validateKeys(newService, schemaInfo, path);\n for (let k in newService) {\n let v = newService[k];\n let newPath = `${path}.${k}`;\n if (typeof v === \"object\" && !Array.isArray(v)) {\n annotateRecursive(v, schemaInfo[k], newPath);\n } else if (typeof v === \"function\") {\n if (schemaInfo.hasOwnProperty(k)) {\n newService[k] = schemaFunction(v, {\n name: schemaInfo[k][\"name\"],\n description: schemaInfo[k].description || \"\",\n parameters: schemaInfo[k][\"parameters\"],\n });\n } else {\n throw new Error(\n `Missing schema for function '${k}' at path '${newPath}'`,\n );\n }\n }\n }\n } else if (Array.isArray(newService)) {\n if (newService.length !== schemaInfo.length) {\n throw new Error(`Length mismatch at path '${path}'`);\n }\n newService.forEach((v, i) => {\n let newPath = `${path}[${i}]`;\n if (typeof v === \"object\" && !Array.isArray(v)) {\n annotateRecursive(v, schemaInfo[i], newPath);\n } else if (typeof v === \"function\") {\n if (schemaInfo.hasOwnProperty(i)) {\n newService[i] = schemaFunction(v, {\n name: schemaInfo[i][\"name\"],\n description: schemaInfo[i].description || \"\",\n parameters: schemaInfo[i][\"parameters\"],\n });\n } else {\n throw new Error(\n `Missing schema for function at index ${i} in path '${newPath}'`,\n );\n }\n }\n });\n }\n }\n\n validateKeys(service, serviceTypeInfo[\"definition\"]);\n annotateRecursive(service, serviceTypeInfo[\"definition\"]);\n return service;\n}\n\nfunction getFunctionInfo(func) {\n const funcString = func.toString();\n\n // Extract function name\n const nameMatch = funcString.match(/function\\s*(\\w*)/);\n const name = (nameMatch && nameMatch[1]) || \"\";\n\n // Extract function parameters, excluding comments\n const paramsMatch = funcString.match(/\\(([^)]*)\\)/);\n let params = \"\";\n if (paramsMatch) {\n params = paramsMatch[1]\n .split(\",\")\n .map((p) =>\n p\n .replace(/\\/\\*.*?\\*\\//g, \"\") // Remove block comments\n .replace(/\\/\\/.*$/g, \"\"),\n ) // Remove line comments\n .filter((p) => p.trim().length > 0) // Remove empty strings after removing comments\n .map((p) => p.trim()) // Trim remaining whitespace\n .join(\", \");\n }\n\n // Extract function docstring (block comment)\n let docMatch = funcString.match(/\\)\\s*\\{\\s*\\/\\*([\\s\\S]*?)\\*\\//);\n const docstringBlock = (docMatch && docMatch[1].trim()) || \"\";\n\n // Extract function docstring (line comment)\n docMatch = funcString.match(/\\)\\s*\\{\\s*(\\/\\/[\\s\\S]*?)\\n\\s*[^\\s\\/]/);\n const docstringLine =\n (docMatch &&\n docMatch[1]\n .split(\"\\n\")\n .map((s) => s.replace(/^\\/\\/\\s*/, \"\").trim())\n .join(\"\\n\")) ||\n \"\";\n\n const docstring = docstringBlock || docstringLine;\n return (\n name &&\n params.length > 0 && {\n name: name,\n sig: params,\n doc: docstring,\n }\n );\n}\n\nfunction concatArrayBuffers(buffers) {\n var buffersLengths = buffers.map(function (b) {\n return b.byteLength;\n }),\n totalBufferlength = buffersLengths.reduce(function (p, c) {\n return p + c;\n }, 0),\n unit8Arr = new Uint8Array(totalBufferlength);\n buffersLengths.reduce(function (p, c, i) {\n unit8Arr.set(new Uint8Array(buffers[i]), p);\n return p + c;\n }, 0);\n return unit8Arr.buffer;\n}\n\nclass Timer {\n constructor(timeout, callback, args, label) {\n this._timeout = timeout;\n this._callback = callback;\n this._args = args;\n this._label = label || \"timer\";\n this._task = null;\n this.started = false;\n }\n\n start() {\n if (this.started) {\n this.reset();\n } else {\n this._task = setTimeout(() => {\n this._callback.apply(this, this._args);\n }, this._timeout * 1000);\n this.started = true;\n }\n }\n\n clear() {\n if (this._task) {\n clearTimeout(this._task);\n this._task = null;\n this.started = false;\n } else {\n console.warn(`Clearing a timer (${this._label}) which is not started`);\n }\n }\n\n reset() {\n if (this._task) {\n clearTimeout(this._task);\n }\n this._task = setTimeout(() => {\n this._callback.apply(this, this._args);\n }, this._timeout * 1000);\n this.started = true;\n }\n}\n\n/**\n * RPC object represents a single site in the\n * communication protocol between the application and the plugin\n *\n * @param {Object} connection a special object allowing to send\n * and receive messages from the opposite site (basically it\n * should only provide send() and onMessage() methods)\n */\nexport class RPC extends MessageEmitter {\n constructor(\n connection,\n {\n client_id = null,\n default_context = null,\n name = null,\n codecs = null,\n method_timeout = null,\n max_message_buffer_size = 0,\n debug = false,\n workspace = null,\n silent = false,\n app_id = null,\n },\n ) {\n super(debug);\n this._codecs = codecs || {};\n assert(client_id && typeof client_id === \"string\");\n assert(client_id, \"client_id is required\");\n this._client_id = client_id;\n this._name = name;\n this._app_id = app_id || \"*\";\n this._local_workspace = workspace;\n this._silent = silent;\n this.default_context = default_context || {};\n this._method_annotations = new WeakMap();\n this._max_message_buffer_size = max_message_buffer_size;\n this._chunk_store = {};\n this._method_timeout = method_timeout || 30;\n\n // make sure there is an execute function\n this._services = {};\n this._object_store = {\n services: this._services,\n };\n\n if (connection) {\n this.add_service({\n id: \"built-in\",\n type: \"built-in\",\n name: `Built-in services for ${this._local_workspace}/${this._client_id}`,\n config: { require_context: true, visibility: \"public\" },\n ping: this._ping.bind(this),\n get_service: this.get_local_service.bind(this),\n message_cache: {\n create: this._create_message.bind(this),\n append: this._append_message.bind(this),\n process: this._process_message.bind(this),\n remove: this._remove_message.bind(this),\n },\n });\n this.on(\"method\", this._handle_method.bind(this));\n this.on(\"error\", console.error);\n\n assert(connection.emit_message && connection.on_message);\n assert(\n connection.manager_id !== undefined,\n \"Connection must have manager_id\",\n );\n this._emit_message = connection.emit_message.bind(connection);\n connection.on_message(this._on_message.bind(this));\n this._connection = connection;\n const onConnected = async (connectionInfo) => {\n if (!this._silent && this._connection.manager_id) {\n console.log(\"Connection established, reporting services...\");\n const manager = await this.get_manager_service(10, \"camel\");\n for (let service of Object.values(this._services)) {\n const serviceInfo = this._extract_service_info(service);\n await manager.registerService(serviceInfo);\n }\n } else {\n console.log(\"Connection established\", connectionInfo);\n }\n this._fire(\"connected\", connectionInfo);\n };\n connection.on_connected(onConnected);\n onConnected();\n } else {\n this._emit_message = function () {\n console.log(\"No connection to emit message\");\n };\n }\n }\n\n register_codec(config) {\n if (!config[\"name\"] || (!config[\"encoder\"] && !config[\"decoder\"])) {\n throw new Error(\n \"Invalid codec format, please make sure you provide a name, type, encoder and decoder.\",\n );\n } else {\n if (config.type) {\n for (let k of Object.keys(this._codecs)) {\n if (this._codecs[k].type === config.type || k === config.name) {\n delete this._codecs[k];\n console.warn(\"Remove duplicated codec: \" + k);\n }\n }\n }\n this._codecs[config[\"name\"]] = config;\n }\n }\n\n async _ping(msg, context) {\n assert(msg == \"ping\");\n return \"pong\";\n }\n\n async ping(client_id, timeout) {\n let method = this._generate_remote_method({\n _rtarget: client_id,\n _rmethod: \"services.built-in.ping\",\n _rpromise: true,\n _rdoc: \"Ping a remote client\",\n });\n assert((await method(\"ping\", timeout)) == \"pong\");\n }\n\n _create_message(key, heartbeat, overwrite, context) {\n if (heartbeat) {\n if (!this._object_store[key]) {\n throw new Error(`session does not exist anymore: ${key}`);\n }\n this._object_store[key][\"timer\"].reset();\n }\n\n if (!this._object_store[\"message_cache\"]) {\n this._object_store[\"message_cache\"] = {};\n }\n if (!overwrite && this._object_store[\"message_cache\"][key]) {\n throw new Error(\n `Message with the same key (${key}) already exists in the cache store, please use overwrite=true or remove it first.`,\n );\n }\n\n this._object_store[\"message_cache\"][key] = [];\n }\n\n _append_message(key, data, heartbeat, context) {\n if (heartbeat) {\n if (!this._object_store[key]) {\n throw new Error(`session does not exist anymore: ${key}`);\n }\n this._object_store[key][\"timer\"].reset();\n }\n const cache = this._object_store[\"message_cache\"];\n if (!cache[key]) {\n throw new Error(`Message with key ${key} does not exists.`);\n }\n assert(data instanceof ArrayBufferView);\n cache[key].push(data);\n }\n\n _remove_message(key, context) {\n const cache = this._object_store[\"message_cache\"];\n if (!cache[key]) {\n throw new Error(`Message with key ${key} does not exists.`);\n }\n delete cache[key];\n }\n\n _process_message(key, heartbeat, context) {\n if (heartbeat) {\n if (!this._object_store[key]) {\n throw new Error(`session does not exist anymore: ${key}`);\n }\n this._object_store[key][\"timer\"].reset();\n }\n const cache = this._object_store[\"message_cache\"];\n assert(!!context, \"Context is required\");\n if (!cache[key]) {\n throw new Error(`Message with key ${key} does not exists.`);\n }\n cache[key] = concatArrayBuffers(cache[key]);\n console.debug(`Processing message ${key} (bytes=${cache[key].byteLength})`);\n let unpacker = decodeMulti(cache[key]);\n const { done, value } = unpacker.next();\n const main = value;\n // Make sure the fields are from trusted source\n Object.assign(main, {\n from: context.from,\n to: context.to,\n user: context.user,\n });\n main[\"ctx\"] = JSON.parse(JSON.stringify(main));\n Object.assign(main[\"ctx\"], this.default_context);\n if (!done) {\n let extra = unpacker.next();\n Object.assign(main, extra.value);\n }\n this._fire(main[\"type\"], main);\n console.debug(\n this._client_id,\n `Processed message ${key} (bytes=${cache[key].byteLength})`,\n );\n delete cache[key];\n }\n\n _on_message(message) {\n if (typeof message === \"string\") {\n const main = JSON.parse(message);\n this._fire(main[\"type\"], main);\n } else if (message instanceof ArrayBuffer) {\n let unpacker = decodeMulti(message);\n const { done, value } = unpacker.next();\n const main = value;\n // Add trusted context to the method call\n main[\"ctx\"] = JSON.parse(JSON.stringify(main));\n Object.assign(main[\"ctx\"], this.default_context);\n if (!done) {\n let extra = unpacker.next();\n Object.assign(main, extra.value);\n }\n this._fire(main[\"type\"], main);\n } else if (typeof message === \"object\") {\n this._fire(message[\"type\"], message);\n } else {\n throw new Error(\"Invalid message format\");\n }\n }\n\n reset() {\n this._event_handlers = {};\n this._services = {};\n }\n\n async disconnect() {\n this._fire(\"disconnected\");\n await this._connection.disconnect();\n }\n\n async get_manager_service(timeout, case_conversion = null) {\n assert(this._connection.manager_id, \"Manager id is not set\");\n const svc = await this.get_remote_service(\n `*/${this._connection.manager_id}:default`,\n timeout,\n case_conversion,\n );\n return svc;\n }\n\n get_all_local_services() {\n return this._services;\n }\n get_local_service(service_id, context) {\n assert(service_id);\n const [ws, client_id] = context[\"to\"].split(\"/\");\n assert(\n client_id === this._client_id,\n \"Services can only be accessed locally\",\n );\n\n const service = this._services[service_id];\n if (!service) {\n throw new Error(\"Service not found: \" + service_id);\n }\n\n service.config[\"workspace\"] = context[\"ws\"];\n // allow access for the same workspace\n if (service.config.visibility == \"public\") {\n return service;\n }\n\n // allow access for the same workspace\n if (context[\"ws\"] === ws) {\n return service;\n }\n\n throw new Error(\n `Permission denied for getting protected service: ${service_id}, workspace mismatch: ${ws} != ${context[\"ws\"]}`,\n );\n }\n async get_remote_service(service_uri, timeout, case_conversion = null) {\n timeout = timeout === undefined ? this._method_timeout : timeout;\n if (!service_uri && this._connection.manager_id) {\n service_uri = \"*/\" + this._connection.manager_id;\n } else if (!service_uri.includes(\":\")) {\n service_uri = this._client_id + \":\" + service_uri;\n }\n const provider = service_uri.split(\":\")[0];\n let service_id = service_uri.split(\":\")[1];\n if (service_id.includes(\"@\")) {\n service_id = service_id.split(\"@\")[0];\n const app_id = service_uri.split(\"@\")[1];\n if (this._app_id && this._app_id !== \"*\")\n assert(\n app_id === this._app_id,\n `Invalid app id: ${app_id} != ${this._app_id}`,\n );\n }\n assert(provider, `Invalid service uri: ${service_uri}`);\n\n try {\n const method = this._generate_remote_method({\n _rtarget: provider,\n _rmethod: \"services.built-in.get_service\",\n _rpromise: true,\n _rdoc: \"Get a remote service\",\n });\n const svc = await waitFor(\n method(service_id),\n timeout,\n \"Timeout Error: Failed to get remote service: \" + service_uri,\n );\n svc.id = `${provider}:${service_id}`;\n if (case_conversion) return convertCase(svc, case_conversion);\n else return svc;\n } catch (e) {\n console.warn(\"Failed to get remote service: \" + service_uri, e);\n throw e;\n }\n }\n _annotate_service_methods(\n aObject,\n object_id,\n require_context,\n run_in_executor,\n visibility,\n ) {\n if (typeof aObject === \"function\") {\n // mark the method as a remote method that requires context\n let method_name = object_id.split(\".\")[1];\n this._method_annotations.set(aObject, {\n require_context: Array.isArray(require_context)\n ? require_context.includes(method_name)\n : !!require_context,\n run_in_executor: run_in_executor,\n method_id: \"services.\" + object_id,\n visibility: visibility,\n });\n } else if (aObject instanceof Array || aObject instanceof Object) {\n for (let key of Object.keys(aObject)) {\n let val = aObject[key];\n if (typeof val === \"function\" && val.__rpc_object__) {\n let client_id = val.__rpc_object__._rtarget;\n if (client_id.includes(\"/\")) {\n client_id = client_id.split(\"/\")[1];\n }\n if (this._client_id === client_id) {\n if (aObject instanceof Array) {\n aObject = aObject.slice();\n }\n // recover local method\n aObject[key] = indexObject(\n this._object_store,\n val.__rpc_object__._rmethod,\n );\n val = aObject[key]; // make sure it's annotated later\n } else {\n throw new Error(\n `Local method not found: ${val.__rpc_object__._rmethod}, client id mismatch ${this._client_id} != ${client_id}`,\n );\n }\n }\n this._annotate_service_methods(\n val,\n object_id + \".\" + key,\n require_context,\n run_in_executor,\n visibility,\n );\n }\n }\n }\n add_service(api, overwrite) {\n if (!api || Array.isArray(api)) throw new Error(\"Invalid service object\");\n if (api.constructor === Object) {\n api = Object.assign({}, api);\n } else {\n const normApi = {};\n const props = Object.getOwnPropertyNames(api).concat(\n Object.getOwnPropertyNames(Object.getPrototypeOf(api)),\n );\n for (let k of props) {\n if (k !== \"constructor\") {\n if (typeof api[k] === \"function\") normApi[k] = api[k].bind(api);\n else normApi[k] = api[k];\n }\n }\n // For class instance, we need set a default id\n api.id = api.id || \"default\";\n api = normApi;\n }\n assert(\n api.id && typeof api.id === \"string\",\n `Service id not found: ${api}`,\n );\n if (!api.name) {\n api.name = api.id;\n }\n if (!api.config) {\n api.config = {};\n }\n if (!api.type) {\n api.type = \"generic\";\n }\n // require_context only applies to the top-level functions\n let require_context = false,\n run_in_executor = false;\n if (api.config.require_context)\n require_context = api.config.require_context;\n if (api.config.run_in_executor) run_in_executor = true;\n const visibility = api.config.visibility || \"protected\";\n assert([\"protected\", \"public\"].includes(visibility));\n this._annotate_service_methods(\n api,\n api[\"id\"],\n require_context,\n run_in_executor,\n visibility,\n );\n\n if (this._services[api.id]) {\n if (overwrite) {\n delete this._services[api.id];\n } else {\n throw new Error(\n `Service already exists: ${api.id}, please specify a different id (not ${api.id}) or overwrite=true`,\n );\n }\n }\n this._services[api.id] = api;\n return api;\n }\n\n _extract_service_info(service) {\n const config = service.config || {};\n config.workspace =\n config.workspace || this._local_workspace || this._connection.workspace;\n const skipContext = config.require_context;\n const serviceSchema = _get_schema(service, null, skipContext);\n const serviceInfo = {\n config: config,\n id: `${config.workspace}/${this._client_id}:${service[\"id\"]}`,\n name: service.name || service[\"id\"],\n description: service.description || \"\",\n type: service.type || \"generic\",\n docs: service.docs || null,\n app_id: this._app_id,\n service_schema: serviceSchema,\n };\n return serviceInfo;\n }\n\n async get_service_schema(service) {\n const skipContext = service.config.require_context;\n return _get_schema(service, null, skipContext);\n }\n\n async register_service(api, overwrite, notify = true, check_type = false) {\n let manager;\n if (check_type && api.type) {\n try {\n manager = await this.get_manager_service(10, \"camel\");\n const type_info = await manager.get_service_type(api.type);\n api = _annotate_service(api, type_info);\n } catch (e) {\n throw new Error(`Failed to get service type ${api.type}, error: ${e}`);\n }\n }\n\n const service = this.add_service(api, overwrite);\n const serviceInfo = this._extract_service_info(service);\n if (notify) {\n try {\n manager = manager || (await this.get_manager_service(10, \"camel\"));\n await manager.registerService(serviceInfo);\n } catch (e) {\n throw new Error(`Failed to notify workspace manager: ${e}`);\n }\n }\n return serviceInfo;\n }\n\n async unregister_service(service, notify) {\n if (service instanceof Object) {\n service = service.id;\n }\n if (!this._services[service]) {\n throw new Error(`Service not found: ${service}`);\n }\n const api = this._services[service];\n delete this._services[service];\n if (notify) {\n const manager = await this.get_manager_service(10, \"camel\");\n await manager.registerService(api.id);\n }\n }\n\n _ndarray(typedArray, shape, dtype) {\n const _dtype = typedArrayToDtype(typedArray);\n if (dtype && dtype !== _dtype) {\n throw (\n \"dtype doesn't match the type of the array: \" + _dtype + \" != \" + dtype\n );\n }\n shape = shape || [typedArray.length];\n return {\n _rtype: \"ndarray\",\n _rvalue: typedArray.buffer,\n _rshape: shape,\n _rdtype: _dtype,\n };\n }\n\n _encode_callback(\n name,\n callback,\n session_id,\n clear_after_called,\n timer,\n local_workspace,\n ) {\n let method_id = `${session_id}.${name}`;\n let encoded = {\n _rtype: \"method\",\n _rtarget: local_workspace\n ? `${local_workspace}/${this._client_id}`\n : this._client_id,\n _rmethod: method_id,\n _rpromise: false,\n };\n\n const self = this;\n let wrapped_callback = function () {\n try {\n callback.apply(null, Array.prototype.slice.call(arguments));\n } catch (error) {\n console.error(\"Error in callback:\", method_id, error);\n } finally {\n if (clear_after_called && self._object_store[session_id]) {\n // console.log(\"Deleting session\", session_id, \"from\", self._client_id);\n delete self._object_store[session_id];\n }\n if (timer && timer.started) {\n timer.clear();\n }\n }\n };\n\n return [encoded, wrapped_callback];\n }\n\n async _encode_promise(\n resolve,\n reject,\n session_id,\n clear_after_called,\n timer,\n local_workspace,\n ) {\n let store = this._get_session_store(session_id, true);\n assert(\n store,\n `Failed to create session store ${session_id} due to invalid parent`,\n );\n let encoded = {};\n\n if (timer && reject && this._method_timeout) {\n encoded.heartbeat = await this._encode(\n timer.reset.bind(timer),\n session_id,\n local_workspace,\n );\n encoded.interval = this._method_timeout / 2;\n store.timer = timer;\n } else {\n timer = null;\n }\n\n [encoded.resolve, store.resolve] = this._encode_callback(\n \"resolve\",\n resolve,\n session_id,\n clear_after_called,\n timer,\n local_workspace,\n );\n [encoded.reject, store.reject] = this._encode_callback(\n \"reject\",\n reject,\n session_id,\n clear_after_called,\n timer,\n local_workspace,\n );\n return encoded;\n }\n\n async _send_chunks(data, target_id, session_id) {\n let remote_services = await this.get_remote_service(\n `${target_id}:built-in`,\n );\n assert(\n remote_services.message_cache,\n \"Remote client does not support message caching for long message.\",\n );\n let message_cache = remote_services.message_cache;\n let message_id = session_id || randId();\n await message_cache.create(message_id, !!session_id);\n let total_size = data.length;\n let chunk_num = Math.ceil(total_size / CHUNK_SIZE);\n for (let idx = 0; idx < chunk_num; idx++) {\n let start_byte = idx * CHUNK_SIZE;\n await message_cache.append(\n message_id,\n data.slice(start_byte, start_byte + CHUNK_SIZE),\n !!session_id,\n );\n console.log(\n `Sending chunk ${idx + 1}/${chunk_num} (${total_size} bytes)`,\n );\n }\n // console.log(`All chunks sent (${chunk_num})`);\n await message_cache.process(message_id, !!session_id);\n }\n\n emit(main_message, extra_data) {\n assert(\n typeof main_message === \"object\" && main_message.type,\n \"Invalid message, must be an object with a `type` fields.\",\n );\n if (!main_message.to) {\n this._fire(main_message.type, main_message);\n return;\n }\n let message_package = msgpack_packb(main_message);\n if (extra_data) {\n const extra = msgpack_packb(extra_data);\n message_package = new Uint8Array([...message_package, ...extra]);\n }\n const total_size = message_package.length;\n if (total_size <= CHUNK_SIZE + 1024) {\n return this._emit_message(message_package);\n } else {\n throw new Error(\"Message is too large to send in one go.\");\n }\n }\n\n _generate_remote_method(\n encoded_method,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n ) {\n let target_id = encoded_method._rtarget;\n if (remote_workspace && !target_id.includes(\"/\")) {\n if (remote_workspace !== target_id) {\n target_id = remote_workspace + \"/\" + target_id;\n }\n // Fix the target id to be an absolute id\n encoded_method._rtarget = target_id;\n }\n let method_id = encoded_method._rmethod;\n let with_promise = encoded_method._rpromise;\n const self = this;\n\n function remote_method() {\n return new Promise(async (resolve, reject) => {\n let local_session_id = randId();\n if (local_parent) {\n // Store the children session under the parent\n local_session_id = local_parent + \".\" + local_session_id;\n }\n let store = self._get_session_store(local_session_id, true);\n if (!store) {\n reject(\n new Error(\n `Runtime Error: Failed to get session store ${local_session_id}`,\n ),\n );\n return;\n }\n store[\"target_id\"] = target_id;\n const args = await self._encode(\n Array.prototype.slice.call(arguments),\n local_session_id,\n local_workspace,\n );\n const argLength = args.length;\n // if the last argument is an object, mark it as kwargs\n const withKwargs =\n argLength > 0 &&\n typeof args[argLength - 1] === \"object\" &&\n args[argLength - 1] !== null &&\n args[argLength - 1]._rkwargs;\n if (withKwargs) delete args[argLength - 1]._rkwargs;\n\n let from_client;\n if (!self._local_workspace) {\n from_client = self._client_id;\n } else {\n from_client = self._local_workspace + \"/\" + self._client_id;\n }\n\n let main_message = {\n type: \"method\",\n from: from_client,\n to: target_id,\n method: method_id,\n };\n let extra_data = {};\n if (args) {\n extra_data[\"args\"] = args;\n }\n if (withKwargs) {\n extra_data[\"with_kwargs\"] = withKwargs;\n }\n\n // console.log(\n // `Calling remote method ${target_id}:${method_id}, session: ${local_session_id}`\n // );\n if (remote_parent) {\n // Set the parent session\n // Note: It's a session id for the remote, not the current client\n main_message[\"parent\"] = remote_parent;\n }\n\n let timer = null;\n if (with_promise) {\n // Only pass the current session id to the remote\n // if we want to received the result\n // I.e. the session id won't be passed for promises themselves\n main_message[\"session\"] = local_session_id;\n let method_name = `${target_id}:${method_id}`;\n timer = new Timer(\n self._method_timeout,\n reject,\n [`Method call time out: ${method_name}`],\n method_name,\n );\n // By default, hypha will clear the session after the method is called\n // However, if the args contains _rintf === true, we will not clear the session\n let clear_after_called = true;\n for (let arg of args) {\n if (typeof arg === \"object\" && arg._rintf === true) {\n clear_after_called = false;\n break;\n }\n }\n extra_data[\"promise\"] = await self._encode_promise(\n resolve,\n reject,\n local_session_id,\n clear_after_called,\n timer,\n local_workspace,\n );\n }\n // The message consists of two segments, the main message and extra data\n let message_package = msgpack_packb(main_message);\n if (extra_data) {\n const extra = msgpack_packb(extra_data);\n message_package = new Uint8Array([...message_package, ...extra]);\n }\n const total_size = message_package.length;\n if (total_size <= CHUNK_SIZE + 1024) {\n self._emit_message(message_package).then(function () {\n if (timer) {\n // console.log(`Start watchdog timer.`);\n // Only start the timer after we send the message successfully\n timer.start();\n }\n });\n } else {\n // send chunk by chunk\n self\n ._send_chunks(message_package, target_id, remote_parent)\n .then(function () {\n if (timer) {\n // console.log(`Start watchdog timer.`);\n // Only start the timer after we send the message successfully\n timer.start();\n }\n })\n .catch(function (err) {\n console.error(\"Failed to send message\", err);\n reject(err);\n });\n }\n });\n }\n\n // Generate debugging information for the method\n remote_method.__rpc_object__ = encoded_method;\n const parts = method_id.split(\".\");\n remote_method.__name__ = parts[parts.length - 1];\n remote_method.__doc__ =\n encoded_method._rdoc || `Remote method: ${method_id}`;\n remote_method.__schema__ = encoded_method._rschema;\n return remote_method;\n }\n\n get_client_info() {\n const services = [];\n for (let service of Object.values(this._services)) {\n services.push(this._extract_service_info(service));\n }\n\n return {\n id: this._client_id,\n services: services,\n };\n }\n\n async _handle_method(data) {\n let reject = null;\n let heartbeat_task = null;\n try {\n assert(data.method && data.ctx && data.from);\n const method_name = data.from + \":\" + data.method;\n const remote_workspace = data.from.split(\"/\")[0];\n const remote_client_id = data.from.split(\"/\")[1];\n // Make sure the target id is an absolute id\n data[\"to\"] = data[\"to\"].includes(\"/\")\n ? data[\"to\"]\n : remote_workspace + \"/\" + data[\"to\"];\n data[\"ctx\"][\"to\"] = data[\"to\"];\n let local_workspace;\n if (!this._local_workspace) {\n local_workspace = data[\"to\"].split(\"/\")[0];\n } else {\n if (this._local_workspace && this._local_workspace !== \"*\") {\n assert(\n data[\"to\"].split(\"/\")[0] === this._local_workspace,\n \"Workspace mismatch: \" +\n data[\"to\"].split(\"/\")[0] +\n \" != \" +\n this._local_workspace,\n );\n }\n local_workspace = this._local_workspace;\n }\n const local_parent = data.parent;\n\n let resolve, reject;\n if (data.promise) {\n // Decode the promise with the remote session id\n // Such that the session id will be passed to the remote as a parent session id\n const promise = await this._decode(\n data.promise,\n data.session,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n resolve = promise.resolve;\n reject = promise.reject;\n if (promise.heartbeat && promise.interval) {\n async function heartbeat() {\n try {\n console.log(\"Reset heartbeat timer: \" + data.method);\n await promise.heartbeat();\n } catch (err) {\n console.error(err);\n }\n }\n heartbeat_task = setInterval(heartbeat, promise.interval * 1000);\n }\n }\n\n let method;\n\n try {\n method = indexObject(this._object_store, data[\"method\"]);\n } catch (e) {\n console.debug(\"Failed to find method\", method_name, this._client_id, e);\n throw new Error(\n `Method not found: ${method_name} at ${this._client_id}`,\n );\n }\n\n assert(\n method && typeof method === \"function\",\n \"Invalid method: \" + method_name,\n );\n\n // Check permission\n if (this._method_annotations.has(method)) {\n // For services, it should not be protected\n if (this._method_annotations.get(method).visibility === \"protected\") {\n if (\n local_workspace !== remote_workspace &&\n (remote_workspace !== \"*\" ||\n remote_client_id !== this._connection.manager_id)\n ) {\n throw new Error(\n \"Permission denied for invoking protected method \" +\n method_name +\n \", workspace mismatch: \" +\n local_workspace +\n \" != \" +\n remote_workspace,\n );\n }\n }\n } else {\n // For sessions, the target_id should match exactly\n let session_target_id =\n this._object_store[data.method.split(\".\")[0]].target_id;\n if (\n local_workspace === remote_workspace &&\n session_target_id &&\n session_target_id.indexOf(\"/\") === -1\n ) {\n session_target_id = local_workspace + \"/\" + session_target_id;\n }\n if (session_target_id !== data.from) {\n throw new Error(\n \"Access denied for method call (\" +\n method_name +\n \") from \" +\n data.from +\n \" to target \" +\n session_target_id,\n );\n }\n }\n\n // Make sure the parent session is still open\n if (local_parent) {\n // The parent session should be a session that generate the current method call\n assert(\n this._get_session_store(local_parent, true) !== null,\n \"Parent session was closed: \" + local_parent,\n );\n }\n let args;\n if (data.args) {\n args = await this._decode(\n data.args,\n data.session,\n null,\n remote_workspace,\n null,\n );\n } else {\n args = [];\n }\n if (\n this._method_annotations.has(method) &&\n this._method_annotations.get(method).require_context\n ) {\n // if args.length + 1 is less than the required number of arguments we will pad with undefined\n // so we make sure the last argument is the context\n if (args.length + 1 < method.length) {\n for (let i = args.length; i < method.length - 1; i++) {\n args.push(undefined);\n }\n }\n args.push(data.ctx);\n assert(\n args.length === method.length,\n `Runtime Error: Invalid number of arguments for method ${method_name}, expected ${method.length} but got ${args.length}`,\n );\n }\n // console.log(\"Executing method: \" + method_name);\n if (data.promise) {\n const result = method.apply(null, args);\n if (result instanceof Promise) {\n result\n .then((result) => {\n resolve(result);\n clearInterval(heartbeat_task);\n })\n .catch((err) => {\n reject(err);\n clearInterval(heartbeat_task);\n });\n } else {\n resolve(result);\n clearInterval(heartbeat_task);\n }\n } else {\n method.apply(null, args);\n clearInterval(heartbeat_task);\n }\n } catch (err) {\n if (reject) {\n reject(err);\n console.debug(\"Error during calling method: \", err);\n } else {\n console.error(\"Error during calling method: \", err);\n }\n // make sure we clear the heartbeat timer\n clearInterval(heartbeat_task);\n }\n }\n\n encode(aObject, session_id) {\n return this._encode(aObject, session_id);\n }\n\n _get_session_store(session_id, create) {\n let store = this._object_store;\n const levels = session_id.split(\".\");\n if (create) {\n const last_index = levels.length - 1;\n for (let level of levels.slice(0, last_index)) {\n if (!store[level]) {\n return null;\n }\n store = store[level];\n }\n // Create the last level\n if (!store[levels[last_index]]) {\n store[levels[last_index]] = {};\n }\n return store[levels[last_index]];\n } else {\n for (let level of levels) {\n if (!store[level]) {\n return null;\n }\n store = store[level];\n }\n return store;\n }\n }\n\n /**\n * Prepares the provided set of remote method arguments for\n * sending to the remote site, replaces all the callbacks with\n * identifiers\n *\n * @param {Array} args to wrap\n *\n * @returns {Array} wrapped arguments\n */\n async _encode(aObject, session_id, local_workspace) {\n const aType = typeof aObject;\n if (\n aType === \"number\" ||\n aType === \"string\" ||\n aType === \"boolean\" ||\n aObject === null ||\n aObject === undefined ||\n aObject instanceof Uint8Array\n ) {\n return aObject;\n }\n if (aObject instanceof ArrayBuffer) {\n return {\n _rtype: \"memoryview\",\n _rvalue: new Uint8Array(aObject),\n };\n }\n // Reuse the remote object\n if (aObject.__rpc_object__) {\n return aObject.__rpc_object__;\n }\n\n let bObject;\n\n // skip if already encoded\n if (aObject.constructor instanceof Object && aObject._rtype) {\n // make sure the interface functions are encoded\n const temp = aObject._rtype;\n delete aObject._rtype;\n bObject = await this._encode(aObject, session_id, local_workspace);\n bObject._rtype = temp;\n return bObject;\n }\n\n if (typeof aObject === \"function\") {\n if (this._method_annotations.has(aObject)) {\n let annotation = this._method_annotations.get(aObject);\n bObject = {\n _rtype: \"method\",\n _rtarget: this._client_id,\n _rmethod: annotation.method_id,\n _rpromise: true,\n };\n } else {\n assert(typeof session_id === \"string\");\n let object_id;\n if (aObject.__name__) {\n object_id = `${randId()}-${aObject.__name__}`;\n } else {\n object_id = randId();\n }\n bObject = {\n _rtype: \"method\",\n _rtarget: this._client_id,\n _rmethod: `${session_id}.${object_id}`,\n _rpromise: true,\n };\n let store = this._get_session_store(session_id, true);\n assert(\n store !== null,\n `Failed to create session store ${session_id} due to invalid parent`,\n );\n store[object_id] = aObject;\n }\n bObject._rdoc = aObject.__doc__;\n if (!bObject._rdoc) {\n try {\n const funcInfo = getFunctionInfo(aObject);\n if (funcInfo && !bObject._rdoc) {\n bObject._rdoc = `${funcInfo.doc}`;\n }\n } catch (e) {\n console.error(\"Failed to extract function docstring:\", aObject);\n }\n }\n bObject._rschema = aObject.__schema__;\n return bObject;\n }\n const isarray = Array.isArray(aObject);\n\n for (let tp of Object.keys(this._codecs)) {\n const codec = this._codecs[tp];\n if (codec.encoder && aObject instanceof codec.type) {\n // TODO: what if multiple encoders found\n let encodedObj = await Promise.resolve(codec.encoder(aObject));\n if (encodedObj && !encodedObj._rtype) encodedObj._rtype = codec.name;\n // encode the functions in the interface object\n if (typeof encodedObj === \"object\") {\n const temp = encodedObj._rtype;\n delete encodedObj._rtype;\n encodedObj = await this._encode(\n encodedObj,\n session_id,\n local_workspace,\n );\n encodedObj._rtype = temp;\n }\n bObject = encodedObj;\n return bObject;\n }\n }\n\n if (\n /*global tf*/\n typeof tf !== \"undefined\" &&\n tf.Tensor &&\n aObject instanceof tf.Tensor\n ) {\n const v_buffer = aObject.dataSync();\n bObject = {\n _rtype: \"ndarray\",\n _rvalue: new Uint8Array(v_buffer.buffer),\n _rshape: aObject.shape,\n _rdtype: aObject.dtype,\n };\n } else if (\n /*global nj*/\n typeof nj !== \"undefined\" &&\n nj.NdArray &&\n aObject instanceof nj.NdArray\n ) {\n const dtype = typedArrayToDtype(aObject.selection.data);\n bObject = {\n _rtype: \"ndarray\",\n _rvalue: new Uint8Array(aObject.selection.data.buffer),\n _rshape: aObject.shape,\n _rdtype: dtype,\n };\n } else if (aObject instanceof Error) {\n console.error(aObject);\n bObject = {\n _rtype: \"error\",\n _rvalue: aObject.toString(),\n _rtrace: aObject.stack,\n };\n }\n // send objects supported by structure clone algorithm\n // https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\n else if (\n aObject !== Object(aObject) ||\n aObject instanceof Boolean ||\n aObject instanceof String ||\n aObject instanceof Date ||\n aObject instanceof RegExp ||\n aObject instanceof ImageData ||\n (typeof FileList !== \"undefined\" && aObject instanceof FileList) ||\n (typeof FileSystemDirectoryHandle !== \"undefined\" &&\n aObject instanceof FileSystemDirectoryHandle) ||\n (typeof FileSystemFileHandle !== \"undefined\" &&\n aObject instanceof FileSystemFileHandle) ||\n (typeof FileSystemHandle !== \"undefined\" &&\n aObject instanceof FileSystemHandle) ||\n (typeof FileSystemWritableFileStream !== \"undefined\" &&\n aObject instanceof FileSystemWritableFileStream)\n ) {\n bObject = aObject;\n // TODO: avoid object such as DynamicPlugin instance.\n } else if (aObject instanceof Blob) {\n let _current_pos = 0;\n async function read(length) {\n let blob;\n if (length) {\n blob = aObject.slice(_current_pos, _current_pos + length);\n } else {\n blob = aObject.slice(_current_pos);\n }\n const ret = new Uint8Array(await blob.arrayBuffer());\n _current_pos = _current_pos + ret.byteLength;\n return ret;\n }\n function seek(pos) {\n _current_pos = pos;\n }\n bObject = {\n _rtype: \"iostream\",\n _rnative: \"js:blob\",\n type: aObject.type,\n name: aObject.name,\n size: aObject.size,\n path: aObject._path || aObject.webkitRelativePath,\n read: await this._encode(read, session_id, local_workspace),\n seek: await this._encode(seek, session_id, local_workspace),\n };\n } else if (aObject instanceof ArrayBufferView) {\n const dtype = typedArrayToDtype(aObject);\n bObject = {\n _rtype: \"typedarray\",\n _rvalue: new Uint8Array(aObject.buffer),\n _rdtype: dtype,\n };\n } else if (aObject instanceof DataView) {\n bObject = {\n _rtype: \"memoryview\",\n _rvalue: new Uint8Array(aObject.buffer),\n };\n } else if (aObject instanceof Set) {\n bObject = {\n _rtype: \"set\",\n _rvalue: await this._encode(\n Array.from(aObject),\n session_id,\n local_workspace,\n ),\n };\n } else if (aObject instanceof Map) {\n bObject = {\n _rtype: \"orderedmap\",\n _rvalue: await this._encode(\n Array.from(aObject),\n session_id,\n local_workspace,\n ),\n };\n } else if (\n aObject.constructor instanceof Object ||\n Array.isArray(aObject)\n ) {\n bObject = isarray ? [] : {};\n const keys = Object.keys(aObject);\n for (let k of keys) {\n bObject[k] = await this._encode(\n aObject[k],\n session_id,\n local_workspace,\n );\n }\n } else {\n throw `hypha-rpc: Unsupported data type: ${aObject}, you can register a custom codec to encode/decode the object.`;\n }\n\n if (!bObject) {\n throw new Error(\"Failed to encode object\");\n }\n return bObject;\n }\n\n async decode(aObject) {\n return await this._decode(aObject);\n }\n\n async _decode(\n aObject,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n ) {\n if (!aObject) {\n return aObject;\n }\n let bObject;\n if (aObject._rtype) {\n if (\n this._codecs[aObject._rtype] &&\n this._codecs[aObject._rtype].decoder\n ) {\n const temp = aObject._rtype;\n delete aObject._rtype;\n aObject = await this._decode(\n aObject,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n aObject._rtype = temp;\n\n bObject = await Promise.resolve(\n this._codecs[aObject._rtype].decoder(aObject),\n );\n } else if (aObject._rtype === \"method\") {\n bObject = this._generate_remote_method(\n aObject,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n } else if (aObject._rtype === \"ndarray\") {\n /*global nj tf*/\n //create build array/tensor if used in the plugin\n if (typeof nj !== \"undefined\" && nj.array) {\n if (Array.isArray(aObject._rvalue)) {\n aObject._rvalue = aObject._rvalue.reduce(_appendBuffer);\n }\n bObject = nj\n .array(new Uint8(aObject._rvalue), aObject._rdtype)\n .reshape(aObject._rshape);\n } else if (typeof tf !== \"undefined\" && tf.Tensor) {\n if (Array.isArray(aObject._rvalue)) {\n aObject._rvalue = aObject._rvalue.reduce(_appendBuffer);\n }\n const arraytype = dtypeToTypedArray[aObject._rdtype];\n bObject = tf.tensor(\n new arraytype(aObject._rvalue),\n aObject._rshape,\n aObject._rdtype,\n );\n } else {\n //keep it as regular if transfered to the main app\n bObject = aObject;\n }\n } else if (aObject._rtype === \"error\") {\n bObject = new Error(\n \"RemoteError: \" + aObject._rvalue + \"\\n\" + (aObject._rtrace || \"\"),\n );\n } else if (aObject._rtype === \"typedarray\") {\n const arraytype = dtypeToTypedArray[aObject._rdtype];\n if (!arraytype)\n throw new Error(\"unsupported dtype: \" + aObject._rdtype);\n const buffer = aObject._rvalue.buffer.slice(\n aObject._rvalue.byteOffset,\n aObject._rvalue.byteOffset + aObject._rvalue.byteLength,\n );\n bObject = new arraytype(buffer);\n } else if (aObject._rtype === \"memoryview\") {\n bObject = aObject._rvalue.buffer.slice(\n aObject._rvalue.byteOffset,\n aObject._rvalue.byteOffset + aObject._rvalue.byteLength,\n ); // ArrayBuffer\n } else if (aObject._rtype === \"iostream\") {\n if (aObject._rnative === \"js:blob\") {\n const read = await this._generate_remote_method(\n aObject.read,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n const bytes = await read();\n bObject = new Blob([bytes], {\n type: aObject.type,\n name: aObject.name,\n });\n } else {\n bObject = {};\n for (let k of Object.keys(aObject)) {\n if (!k.startsWith(\"_\")) {\n bObject[k] = await this._decode(\n aObject[k],\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n }\n }\n }\n bObject[\"__rpc_object__\"] = aObject;\n } else if (aObject._rtype === \"orderedmap\") {\n bObject = new Map(\n await this._decode(\n aObject._rvalue,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n ),\n );\n } else if (aObject._rtype === \"set\") {\n bObject = new Set(\n await this._decode(\n aObject._rvalue,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n ),\n );\n } else {\n const temp = aObject._rtype;\n delete aObject._rtype;\n bObject = await this._decode(\n aObject,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n bObject._rtype = temp;\n }\n } else if (aObject.constructor === Object || Array.isArray(aObject)) {\n const isarray = Array.isArray(aObject);\n bObject = isarray ? [] : {};\n for (let k of Object.keys(aObject)) {\n if (isarray || aObject.hasOwnProperty(k)) {\n const v = aObject[k];\n bObject[k] = await this._decode(\n v,\n remote_parent,\n local_parent,\n remote_workspace,\n local_workspace,\n );\n }\n }\n } else {\n bObject = aObject;\n }\n if (bObject === undefined) {\n throw new Error(\"Failed to decode object\");\n }\n return bObject;\n }\n}\n","export function randId() {\n return Math.random().toString(36).substr(2, 10) + new Date().getTime();\n}\n\nexport function toCamelCase(str) {\n // Check if the string is already in camelCase\n if (!str.includes(\"_\")) {\n return str;\n }\n // Convert from snake_case to camelCase\n return str.replace(/_./g, (match) => match[1].toUpperCase());\n}\n\nexport function toSnakeCase(str) {\n // Convert from camelCase to snake_case\n return str.replace(/([A-Z])/g, \"_$1\").toLowerCase();\n}\n\nexport function convertCase(obj, caseType) {\n if (typeof obj !== \"object\" || obj === null || !caseType) {\n return obj; // Return the value if obj is not an object\n }\n\n const newObj = Array.isArray(obj) ? [] : {};\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n const value = obj[key];\n const camelKey = toCamelCase(key);\n const snakeKey = toSnakeCase(key);\n\n if (caseType === \"camel\") {\n newObj[camelKey] = convertCase(value, caseType);\n if (typeof value === \"function\") {\n newObj[camelKey].__name__ = camelKey;\n if (value.__schema__) {\n newObj[camelKey].__schema__ = { ...value.__schema__ };\n newObj[camelKey].__schema__.name = camelKey;\n }\n }\n } else if (caseType === \"snake\") {\n newObj[snakeKey] = convertCase(value, caseType);\n if (typeof value === \"function\") {\n newObj[snakeKey].__name__ = snakeKey;\n if (value.__schema__) {\n newObj[snakeKey].__schema__ = { ...value.__schema__ };\n newObj[snakeKey].__schema__.name = snakeKey;\n }\n }\n } else {\n // TODO handle schema for camel + snake\n if (caseType.includes(\"camel\")) {\n newObj[camelKey] = convertCase(value, \"camel\");\n }\n if (caseType.includes(\"snake\")) {\n newObj[snakeKey] = convertCase(value, \"snake\");\n }\n }\n }\n }\n\n return newObj;\n}\n\nexport const dtypeToTypedArray = {\n int8: Int8Array,\n int16: Int16Array,\n int32: Int32Array,\n uint8: Uint8Array,\n uint16: Uint16Array,\n uint32: Uint32Array,\n float32: Float32Array,\n float64: Float64Array,\n array: Array,\n};\n\nexport async function loadRequirementsInWindow(requirements) {\n function _importScript(url) {\n //url is URL of external file, implementationCode is the code\n //to be called from the file, location is the location to\n //insert the <script> element\n return new Promise((resolve, reject) => {\n var scriptTag = document.createElement(\"script\");\n scriptTag.src = url;\n scriptTag.type = \"text/javascript\";\n scriptTag.onload = resolve;\n scriptTag.onreadystatechange = function () {\n if (this.readyState === \"loaded\" || this.readyState === \"complete\") {\n resolve();\n }\n };\n scriptTag.onerror = reject;\n document.head.appendChild(scriptTag);\n });\n }\n\n // support importScripts outside web worker\n async function importScripts() {\n var args = Array.prototype.slice.call(arguments),\n len = args.length,\n i = 0;\n for (; i < len; i++) {\n await _importScript(args[i]);\n }\n }\n\n if (\n requirements &&\n (Array.isArray(requirements) || typeof requirements === \"string\")\n ) {\n try {\n var link_node;\n requirements =\n typeof requirements === \"string\" ? [requirements] : requirements;\n if (Array.isArray(requirements)) {\n for (var i = 0; i < requirements.length; i++) {\n if (\n requirements[i].toLowerCase().endsWith(\".css\") ||\n requirements[i].startsWith(\"css:\")\n ) {\n if (requirements[i].startsWith(\"css:\")) {\n requirements[i] = requirements[i].slice(4);\n }\n link_node = document.createElement(\"link\");\n link_node.rel = \"stylesheet\";\n link_node.href = requirements[i];\n document.head.appendChild(link_node);\n } else if (\n requirements[i].toLowerCase().endsWith(\".mjs\") ||\n requirements[i].startsWith(\"mjs:\")\n ) {\n // import esmodule\n if (requirements[i].startsWith(\"mjs:\")) {\n requirements[i] = requirements[i].slice(4);\n }\n await import(/* webpackIgnore: true */ requirements[i]);\n } else if (\n requirements[i].toLowerCase().endsWith(\".js\") ||\n requirements[i].startsWith(\"js:\")\n ) {\n if (requirements[i].startsWith(\"js:\")) {\n requirements[i] = requirements[i].slice(3);\n }\n await importScripts(requirements[i]);\n } else if (requirements[i].startsWith(\"http\")) {\n await importScripts(requirements[i]);\n } else if (requirements[i].startsWith(\"cache:\")) {\n //ignore cache\n } else {\n console.log(\"Unprocessed requirements url: \" + requirements[i]);\n }\n }\n } else {\n throw \"unsupported requirements definition\";\n }\n } catch (e) {\n throw \"failed to import required scripts: \" + requirements.toString();\n }\n }\n}\n\nexport async function loadRequirementsInWebworker(requirements) {\n if (\n requirements &&\n (Array.isArray(requirements) || typeof requirements === \"string\")\n ) {\n try {\n if (!Array.isArray(requirements)) {\n requirements = [requirements];\n }\n for (var i = 0; i < requirements.length; i++) {\n if (\n requirements[i].toLowerCase().endsWith(\".css\") ||\n requirements[i].startsWith(\"css:\")\n ) {\n throw \"unable to import css in a webworker\";\n } else if (\n requirements[i].toLowerCase().endsWith(\".js\") ||\n requirements[i].startsWith(\"js:\")\n ) {\n if (requirements[i].startsWith(\"js:\")) {\n requirements[i] = requirements[i].slice(3);\n }\n importScripts(requirements[i]);\n } else if (requirements[i].startsWith(\"http\")) {\n importScripts(requirements[i]);\n } else if (requirements[i].startsWith(\"cache:\")) {\n //ignore cache\n } else {\n console.log(\"Unprocessed requirements url: \" + requirements[i]);\n }\n }\n } catch (e) {\n throw \"failed to import required scripts: \" + requirements.toString();\n }\n }\n}\n\nexport function loadRequirements(requirements) {\n if (\n typeof WorkerGlobalScope !== \"undefined\" &&\n self instanceof WorkerGlobalScope\n ) {\n return loadRequirementsInWebworker(requirements);\n } else {\n return loadRequirementsInWindow(requirements);\n }\n}\n\nexport function normalizeConfig(config) {\n config.version = config.version || \"0.1.0\";\n config.description =\n config.description || `[TODO: add description for ${config.name} ]`;\n config.type = config.type || \"rpc-window\";\n config.id = config.id || randId();\n config.target_origin = config.target_origin || \"*\";\n config.allow_execution = config.allow_execution || false;\n // remove functions\n config = Object.keys(config).reduce((p, c) => {\n if (typeof config[c] !== \"function\") p[c] = config[c];\n return p;\n }, {});\n return config;\n}\nexport const typedArrayToDtypeMapping = {\n Int8Array: \"int8\",\n Int16Array: \"int16\",\n Int32Array: \"int32\",\n Uint8Array: \"uint8\",\n Uint16Array: \"uint16\",\n Uint32Array: \"uint32\",\n Float32Array: \"float32\",\n Float64Array: \"float64\",\n Array: \"array\",\n};\n\nconst typedArrayToDtypeKeys = [];\nfor (const arrType of Object.keys(typedArrayToDtypeMapping)) {\n typedArrayToDtypeKeys.push(eval(arrType));\n}\n\nexport function typedArrayToDtype(obj) {\n let dtype = typedArrayToDtypeMapping[obj.constructor.name];\n if (!dtype) {\n const pt = Object.getPrototypeOf(obj);\n for (const arrType of typedArrayToDtypeKeys) {\n if (pt instanceof arrType) {\n dtype = typedArrayToDtypeMapping[arrType.name];\n break;\n }\n }\n }\n return dtype;\n}\n\nfunction cacheUrlInServiceWorker(url) {\n return new Promise(function (resolve, reject) {\n const message = {\n command: \"add\",\n url: url,\n };\n if (!navigator.serviceWorker || !navigator.serviceWorker.register) {\n reject(\"Service worker is not supported.\");\n return;\n }\n const messageChannel = new MessageChannel();\n messageChannel.port1.onmessage = function (event) {\n if (event.data && event.data.error) {\n reject(event.data.error);\n } else {\n resolve(event.data && event.data.result);\n }\n };\n\n if (navigator.serviceWorker && navigator.serviceWorker.controller) {\n navigator.serviceWorker.controller.postMessage(message, [\n messageChannel.port2,\n ]);\n } else {\n reject(\"Service worker controller is not available\");\n }\n });\n}\n\nexport async function cacheRequirements(requirements) {\n requirements = requirements || [];\n if (!Array.isArray(requirements)) {\n requirements = [requirements];\n }\n for (let req of requirements) {\n //remove prefix\n if (req.startsWith(\"js:\")) req = req.slice(3);\n if (req.startsWith(\"css:\")) req = req.slice(4);\n if (req.startsWith(\"cache:\")) req = req.slice(6);\n if (!req.startsWith(\"http\")) continue;\n\n await cacheUrlInServiceWorker(req).catch((e) => {\n console.error(e);\n });\n }\n}\n\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message || \"Assertion failed\");\n }\n}\n\n//#Source https://bit.ly/2neWfJ2\nexport function urlJoin(...args) {\n return args\n .join(\"/\")\n .replace(/[\\/]+/g, \"/\")\n .replace(/^(.+):\\//, \"$1://\")\n .replace(/^file:/, \"file:/\")\n .replace(/\\/(\\?|&|#[^!])/g, \"$1\")\n .replace(/\\?/g, \"&\")\n .replace(\"&\", \"?\");\n}\n\nexport function waitFor(prom, time, error) {\n let timer;\n return Promise.race([\n prom,\n new Promise(\n (_r, rej) =>\n (timer = setTimeout(() => {\n rej(error || \"Timeout Error\");\n }, time * 1000)),\n ),\n ]).finally(() => clearTimeout(timer));\n}\n\nexport class MessageEmitter {\n constructor(debug) {\n this._event_handlers = {};\n this._once_handlers = {};\n this._debug = debug;\n }\n emit() {\n throw new Error(\"emit is not implemented\");\n }\n on(event, handler) {\n if (!this._event_handlers[event]) {\n this._event_handlers[event] = [];\n }\n this._event_handlers[event].push(handler);\n }\n once(event, handler) {\n handler.___event_run_once = true;\n this.on(event, handler);\n }\n off(event, handler) {\n if (!event && !handler) {\n // remove all events handlers\n this._event_handlers = {};\n } else if (event && !handler) {\n // remove all hanlders for the event\n if (this._event_handlers[event]) this._event_handlers[event] = [];\n } else {\n // remove a specific handler\n if (this._event_handlers[event]) {\n const idx = this._event_handlers[event].indexOf(handler);\n if (idx >= 0) {\n this._event_handlers[event].splice(idx, 1);\n }\n }\n }\n }\n _fire(event, data) {\n if (this._event_handlers[event]) {\n var i = this._event_handlers[event].length;\n while (i--) {\n const handler = this._event_handlers[event][i];\n try {\n handler(data);\n } catch (e) {\n console.error(e);\n } finally {\n if (handler.___event_run_once) {\n this._event_handlers[event].splice(i, 1);\n }\n }\n }\n } else {\n if (this._debug) {\n console.warn(\"unhandled event\", event, data);\n }\n }\n }\n\n waitFor(event, timeout) {\n return new Promise((resolve, reject) => {\n const handler = (data) => {\n clearTimeout(timer);\n resolve(data);\n };\n this.once(event, handler);\n const timer = setTimeout(() => {\n this.off(event, handler);\n reject(new Error(\"Timeout\"));\n }, timeout);\n });\n }\n}\n","import { assert } from \".\";\n\nexport function schemaFunction(\n func,\n { schema_type = \"auto\", name = null, description = null, parameters = null },\n) {\n if (!func || typeof func !== \"function\") {\n throw Error(\"func should be a function\");\n }\n assert(schema_type === \"auto\", \"schema_type should be auto\");\n assert(name, \"name should not be null\");\n assert(\n parameters && parameters.type === \"object\",\n \"parameters should be an object\",\n );\n func.__schema__ = {\n name: name,\n description: description,\n parameters: parameters || [],\n };\n return func;\n}\n","import { RPC } from \"./rpc.js\";\nimport { assert, randId } from \"./utils\";\nimport { schemaFunction } from \"./utils/schema.js\";\n\nclass WebRTCConnection {\n constructor(channel) {\n this._data_channel = channel;\n this._handle_message = null;\n this._reconnection_token = null;\n this._handle_disconnected = null;\n this._handle_connected = () => {};\n this.manager_id = null;\n this._data_channel.onopen = async () => {\n this._handle_connected &&\n this._handle_connected({ channel: this._data_channel });\n };\n this._data_channel.onmessage = async (event) => {\n let data = event.data;\n if (data instanceof Blob) {\n data = await data.arrayBuffer();\n }\n this._handle_message(data);\n };\n const self = this;\n this._data_channel.onclose = function () {\n if (this._handle_disconnected) this._handle_disconnected(\"closed\");\n console.log(\"websocket closed\");\n self._data_channel = null;\n };\n }\n\n on_disconnected(handler) {\n this._handle_disconnected = handler;\n }\n\n on_connected(handler) {\n this._handle_connected = handler;\n }\n\n on_message(handler) {\n assert(handler, \"handler is required\");\n this._handle_message = handler;\n }\n\n async emit_message(data) {\n assert(this._handle_message, \"No handler for message\");\n try {\n this._data_channel.send(data);\n } catch (exp) {\n // data = msgpack_unpackb(data);\n console.error(`Failed to send data, error: ${exp}`);\n throw exp;\n }\n }\n\n async disconnect(reason) {\n this._data_channel = null;\n console.info(`data channel connection disconnected (${reason})`);\n }\n}\n\nasync function _setupRPC(config) {\n assert(config.channel, \"No channel provided\");\n assert(config.workspace, \"No workspace provided\");\n const channel = config.channel;\n const clientId = config.client_id || randId();\n const connection = new WebRTCConnection(channel);\n config.context = config.context || {};\n config.context.connection_type = \"webrtc\";\n const rpc = new RPC(connection, {\n client_id: clientId,\n default_context: config.context,\n name: config.name,\n method_timeout: config.method_timeout || 10.0,\n workspace: config.workspace,\n });\n return rpc;\n}\n\nasync function _createOffer(params, server, config, onInit, context) {\n config = config || {};\n let offer = new RTCSessionDescription({\n sdp: params.sdp,\n type: params.type,\n });\n\n let pc = new RTCPeerConnection({\n iceServers: config.ice_servers || [\n { urls: [\"stun:stun.l.google.com:19302\"] },\n ],\n sdpSemantics: \"unified-plan\",\n });\n\n if (server) {\n pc.addEventListener(\"datachannel\", async (event) => {\n const channel = event.channel;\n let ctx = null;\n if (context && context.user) ctx = { user: context.user, ws: context.ws };\n const rpc = await _setupRPC({\n channel: channel,\n client_id: channel.label,\n workspace: server.config.workspace,\n context: ctx,\n });\n // Map all the local services to the webrtc client\n rpc._services = server.rpc._services;\n });\n }\n\n if (onInit) {\n await onInit(pc);\n }\n\n await pc.setRemoteDescription(offer);\n\n let answer = await pc.createAnswer();\n await pc.setLocalDescription(answer);\n\n return {\n sdp: pc.localDescription.sdp,\n type: pc.localDescription.type,\n workspace: server.config.workspace,\n };\n}\n\nasync function getRTCService(server, service_id, config) {\n config = config || {};\n config.peer_id = config.peer_id || randId();\n\n const pc = new RTCPeerConnection({\n iceServers: config.ice_servers || [\n { urls: [\"stun:stun.l.google.com:19302\"] },\n ],\n sdpSemantics: \"unified-plan\",\n });\n\n return new Promise(async (resolve, reject) => {\n try {\n pc.addEventListener(\n \"connectionstatechange\",\n () => {\n if (pc.connectionState === \"failed\") {\n pc.close();\n reject(new Error(\"WebRTC Connection failed\"));\n } else if (pc.connectionState === \"closed\") {\n reject(new Error(\"WebRTC Connection closed\"));\n } else {\n console.log(\"WebRTC Connection state: \", pc.connectionState);\n }\n },\n false,\n );\n\n if (config.on_init) {\n await config.on_init(pc);\n delete config.on_init;\n }\n let channel = pc.createDataChannel(config.peer_id, { ordered: true });\n channel.binaryType = \"arraybuffer\";\n const offer = await pc.createOffer();\n await pc.setLocalDescription(offer);\n const svc = await server.getService(service_id);\n const answer = await svc.offer({\n sdp: pc.localDescription.sdp,\n type: pc.localDescription.type,\n });\n\n channel.onopen = () => {\n config.channel = channel;\n config.workspace = answer.workspace;\n // Wait for the channel to be open before returning the rpc\n // This is needed for safari to work\n setTimeout(async () => {\n const rpc = await _setupRPC(config);\n pc.rpc = rpc;\n async function get_service(name) {\n assert(\n !name.includes(\":\"),\n \"WebRTC service name should not contain ':'\",\n );\n assert(\n !name.includes(\"/\"),\n \"WebRTC service name should not contain '/'\",\n );\n return await rpc.get_remote_service(\n config.workspace + \"/\" + config.peer_id + \":\" + name,\n );\n }\n async function disconnect() {\n await rpc.disconnect();\n pc.close();\n }\n pc.getService = schemaFunction(get_service, {\n name: \"get_service\",\n description: \"Get a remote service via webrtc\",\n parameters: {\n type: \"object\",\n properties: {\n name: { type: \"string\", description: \"Name of the service\" },\n },\n },\n });\n pc.disconnect = schemaFunction(disconnect, {\n name: \"disconnect\",\n description: \"Disconnect from the webrtc connection via webrtc\",\n parameters: { type: \"object\", properties: {} },\n });\n pc.registerCodec = schemaFunction(rpc.register_codec, {\n name: \"registerCodec\",\n description: \"Register a codec for the webrtc connection\",\n parameters: {\n type: \"object\",\n properties: {\n codec: {\n type: \"object\",\n description: \"Codec to register\",\n properties: {\n name: { type: \"string\" },\n type: {},\n encoder: { type: \"function\" },\n decoder: { type: \"function\" },\n },\n },\n },\n },\n });\n resolve(pc);\n }, 500);\n };\n\n channel.onclose = () => reject(new Error(\"Data channel closed\"));\n\n await pc.setRemoteDescription(\n new RTCSessionDescription({\n sdp: answer.sdp,\n type: answer.type,\n }),\n );\n } catch (e) {\n reject(e);\n }\n });\n}\n\nasync function registerRTCService(server, service_id, config) {\n config = config || {\n visibility: \"protected\",\n require_context: true,\n };\n const onInit = config.on_init;\n delete config.on_init;\n return await server.registerService({\n id: service_id,\n config,\n offer: (params, context) =>\n _createOffer(params, server, config, onInit, context),\n });\n}\n\nexport { getRTCService, registerRTCService };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { RPC, API_VERSION } from \"./rpc.js\";\nimport { assert, randId, waitFor, loadRequirements } from \"./utils\";\nimport { schemaFunction } from \"./utils/schema.js\";\nimport { getRTCService, registerRTCService } from \"./webrtc-client.js\";\n\nexport { RPC, API_VERSION, schemaFunction };\nexport { loadRequirements };\nexport { getRTCService, registerRTCService };\n\nconst MAX_RETRY = 1000000;\n\nclass WebsocketRPCConnection {\n constructor(\n server_url,\n client_id,\n workspace,\n token,\n reconnection_token = null,\n timeout = 60,\n WebSocketClass = null,\n ) {\n assert(server_url && client_id, \"server_url and client_id are required\");\n this._server_url = server_url;\n this._client_id = client_id;\n this._workspace = workspace;\n this._token = token;\n this._reconnection_token = reconnection_token;\n this._websocket = null;\n this._handle_message = null;\n this._handle_connected = null; // Connection open event handler\n this._handle_disconnected = null; // Disconnection event handler\n this._timeout = timeout;\n this._WebSocketClass = WebSocketClass || WebSocket; // Allow overriding the WebSocket class\n this._closed = false;\n this._legacy_auth = null;\n this.connection_info = null;\n this._enable_reconnect = false;\n this.manager_id = null;\n }\n\n on_message(handler) {\n assert(handler, \"handler is required\");\n this._handle_message = handler;\n }\n\n on_connected(handler) {\n this._handle_connected = handler;\n }\n\n on_disconnected(handler) {\n this._handle_disconnected = handler;\n }\n\n async _attempt_connection(server_url, attempt_fallback = true) {\n return new Promise((resolve, reject) => {\n this._legacy_auth = false;\n const websocket = new this._WebSocketClass(server_url);\n websocket.binaryType = \"arraybuffer\";\n\n websocket.onopen = () => {\n console.info(\"WebSocket connection established\");\n resolve(websocket);\n };\n\n websocket.onerror = (event) => {\n console.error(\"WebSocket connection error:\", event);\n reject(new Error(`ConnectionAbortedError: ${event}`));\n };\n\n websocket.onclose = (event) => {\n if (event.code === 1003 && attempt_fallback) {\n console.info(\n \"Received 1003 error, attempting connection with query parameters.\",\n );\n this._legacy_auth = true;\n this._attempt_connection_with_query_params(server_url)\n .then(resolve)\n .catch(reject);\n } else if (this._handle_disconnected) {\n this._handle_disconnected(event.reason);\n }\n };\n });\n }\n\n async _attempt_connection_with_query_params(server_url) {\n // Initialize an array to hold parts of the query string\n const queryParamsParts = [];\n\n // Conditionally add each parameter if it has a non-empty value\n if (this._client_id)\n queryParamsParts.push(`client_id=${encodeURIComponent(this._client_id)}`);\n if (this._workspace)\n queryParamsParts.push(`workspace=${encodeURIComponent(this._workspace)}`);\n if (this._token)\n queryParamsParts.push(`token=${encodeURIComponent(this._token)}`);\n if (this._reconnection_token)\n queryParamsParts.push(\n `reconnection_token=${encodeURIComponent(this._reconnection_token)}`,\n );\n\n // Join the parts with '&' to form the final query string, prepend '?' if there are any parameters\n const queryString =\n queryParamsParts.length > 0 ? `?${queryParamsParts.join(\"&\")}` : \"\";\n\n // Construct the full URL by appending the query string if it exists\n const full_url = server_url + queryString;\n\n return await this._attempt_connection(full_url, false);\n }\n\n _establish_connection() {\n return new Promise((resolve, reject) => {\n this._websocket.onmessage = (event) => {\n const data = event.data;\n const first_message = JSON.parse(data);\n if (first_message.type == \"connection_info\") {\n this.connection_info = first_message;\n if (this._workspace) {\n assert(\n this.connection_info.workspace === this._workspace,\n `Connected to the wrong workspace: ${this.connection_info.workspace}, expected: ${this._workspace}`,\n );\n }\n if (this.connection_info.reconnection_token) {\n this._reconnection_token = this.connection_info.reconnection_token;\n }\n this.manager_id = this.connection_info.manager_id || null;\n console.log(\n `Successfully connected to the server, workspace: ${this.connection_info.workspace}, manager_id: ${this.manager_id}`,\n );\n if (this.connection_info.announcement) {\n console.log(`${this.connection_info.announcement}`);\n }\n resolve(this.connection_info);\n } else if (first_message.type == \"error\") {\n const error = \"ConnectionAbortedError: \" + first_message.message;\n console.error(\"Failed to connect, \" + error);\n reject(new Error(error));\n return;\n } else {\n console.error(\n \"ConnectionAbortedError: Unexpected message received from the server:\",\n data,\n );\n reject(\n new Error(\n \"ConnectionAbortedError: Unexpected message received from the server\",\n ),\n );\n return;\n }\n };\n });\n }\n\n async open() {\n console.log(\n \"Creating a new websocket connection to\",\n this._server_url.split(\"?\")[0],\n );\n try {\n this._websocket = await this._attempt_connection(this._server_url);\n if (this._legacy_auth) {\n throw new Error(\n \"NotImplementedError: Legacy authentication is not supported\",\n );\n }\n // Send authentication info as the first message if connected without query params\n const authInfo = JSON.stringify({\n client_id: this._client_id,\n workspace: this._workspace,\n token: this._token,\n reconnection_token: this._reconnection_token,\n });\n this._websocket.send(authInfo);\n // Wait for the first message from the server\n await waitFor(\n this._establish_connection(),\n this._timeout,\n \"Failed to receive the first message from the server\",\n );\n // Listen to messages from the server\n this._enable_reconnect = true;\n this._closed = false;\n this._websocket.onmessage = (event) => {\n this._handle_message(event.data);\n };\n\n this._websocket.onclose = this._handle_close.bind(this);\n\n if (this._handle_connected) {\n this._handle_connected(this.connection_info);\n }\n return this.connection_info;\n } catch (error) {\n console.error(\n \"Failed to connect to\",\n this._server_url.split(\"?\")[0],\n error,\n );\n throw error;\n }\n }\n\n _handle_close(event) {\n if (\n !this._closed &&\n this._websocket &&\n this._websocket.readyState === WebSocket.CLOSED\n ) {\n if ([1000, 1001].includes(event.code)) {\n console.info(\n `Websocket connection closed (code: ${event.code}): ${event.reason}`,\n );\n if (this._handle_disconnected) {\n this._handle_disconnected(event.reason);\n }\n this._closed = true;\n } else if (this._enable_reconnect) {\n console.warn(\n \"Websocket connection closed unexpectedly (code: %s): %s\",\n event.code,\n event.reason,\n );\n let retry = 0;\n const reconnect = async () => {\n try {\n console.warn(\n `Reconnecting to ${this._server_url.split(\"?\")[0]} (attempt #${retry})`,\n );\n await this.open();\n console.warn(\n `Successfully reconnected to server ${this._server_url}`,\n );\n } catch (e) {\n if (`${e}`.includes(\"ConnectionAbortedError:\")) {\n console.warn(\"Failed to reconnect, connection aborted:\", e);\n return;\n } else if (`${e}`.includes(\"NotImplementedError:\")) {\n console.error(\n `${e}\\nIt appears that you are trying to connect to a hypha server that is older than 0.20.0, please upgrade the hypha server or use the websocket client in imjoy-rpc(https://www.npmjs.com/package/imjoy-rpc) instead`,\n );\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 1000));\n if (\n this._websocket &&\n this._websocket.readyState === WebSocket.CONNECTED\n ) {\n return;\n }\n retry += 1;\n if (retry < MAX_RETRY) {\n await reconnect();\n } else {\n console.error(\"Failed to reconnect after\", MAX_RETRY, \"attempts\");\n }\n }\n };\n reconnect();\n }\n } else {\n if (this._handle_disconnected) {\n this._handle_disconnected(event.reason);\n }\n }\n }\n\n async emit_message(data) {\n if (this._closed) {\n throw new Error(\"Connection is closed\");\n }\n if (!this._websocket || this._websocket.readyState !== WebSocket.OPEN) {\n await this.open();\n }\n try {\n this._websocket.send(data);\n } catch (exp) {\n console.error(`Failed to send data, error: ${exp}`);\n throw exp;\n }\n }\n\n disconnect(reason) {\n this._closed = true;\n if (this._websocket && this._websocket.readyState === WebSocket.OPEN) {\n this._websocket.close(1000, reason);\n }\n console.info(`WebSocket connection disconnected (${reason})`);\n }\n}\n\nfunction normalizeServerUrl(server_url) {\n if (!server_url) throw new Error(\"server_url is required\");\n if (server_url.startsWith(\"http://\")) {\n server_url =\n server_url.replace(\"http://\", \"ws://\").replace(/\\/$/, \"\") + \"/ws\";\n } else if (server_url.startsWith(\"https://\")) {\n server_url =\n server_url.replace(\"https://\", \"wss://\").replace(/\\/$/, \"\") + \"/ws\";\n }\n return server_url;\n}\n\nexport async function login(config) {\n const service_id = config.login_service_id || \"public/*:hypha-login\";\n const timeout = config.login_timeout || 60;\n const callback = config.login_callback;\n const profile = config.profile;\n\n const server = await connectToServer({\n name: \"initial login client\",\n server_url: config.server_url,\n });\n try {\n const svc = await server.getService(service_id);\n assert(svc, `Failed to get the login service: ${service_id}`);\n const context = await svc.start();\n if (callback) {\n await callback(context);\n } else {\n console.log(`Please open your browser and login at ${context.login_url}`);\n }\n return await svc.check(context.key, timeout, profile);\n } catch (error) {\n throw error;\n } finally {\n await server.disconnect();\n }\n}\n\nasync function webrtcGetService(\n wm,\n rtc_service_id,\n query,\n webrtc,\n webrtc_config,\n) {\n assert(\n [undefined, true, false, \"auto\"].includes(webrtc),\n \"webrtc must be true, false or 'auto'\",\n );\n // pass other arguments to get_service\n const otherArgs = Array.prototype.slice.call(arguments, 3);\n const svc = await wm.getService(query, ...otherArgs);\n if (webrtc === true || webrtc === \"auto\") {\n if (svc.id.includes(\":\") && svc.id.includes(\"/\")) {\n try {\n // Assuming that the client registered a webrtc service with the client_id + \"-rtc\"\n const peer = await getRTCService(wm, rtc_service_id, webrtc_config);\n const rtcSvc = await peer.get_service(svc.id.split(\":\")[1]);\n rtcSvc._webrtc = true;\n rtcSvc._peer = peer;\n rtcSvc._service = svc;\n return rtcSvc;\n } catch (e) {\n console.warn(\n \"Failed to get webrtc service, using websocket connection\",\n e,\n );\n }\n }\n if (webrtc === true) {\n throw new Error(\"Failed to get the service via webrtc\");\n }\n }\n return svc;\n}\n\nexport async function connectToServer(config) {\n if (config.server) {\n config.server_url = config.server_url || config.server.url;\n config.WebSocketClass =\n config.WebSocketClass || config.server.WebSocketClass;\n }\n let clientId = config.client_id;\n if (!clientId) {\n clientId = randId();\n config.client_id = clientId;\n }\n\n let server_url = normalizeServerUrl(config.server_url);\n\n let connection = new WebsocketRPCConnection(\n server_url,\n clientId,\n config.workspace,\n config.token,\n config.reconnection_token,\n config.method_timeout || 60,\n config.WebSocketClass,\n );\n const connection_info = await connection.open();\n assert(\n connection_info,\n \"Failed to connect to the server, no connection info obtained. This issue is most likely due to an outdated Hypha server version. Please use `imjoy-rpc` for compatibility, or upgrade the Hypha server to the latest version.\",\n );\n if (config.workspace && connection_info.workspace !== config.workspace) {\n throw new Error(\n `Connected to the wrong workspace: ${connection_info.workspace}, expected: ${config.workspace}`,\n );\n }\n const workspace = connection_info.workspace;\n const rpc = new RPC(connection, {\n client_id: clientId,\n workspace,\n default_context: { connection_type: \"websocket\" },\n name: config.name,\n method_timeout: config.method_timeout,\n app_id: config.app_id,\n });\n const wm = await rpc.get_manager_service(config.method_timeout, \"camel\");\n wm.rpc = rpc;\n\n async function _export(api) {\n api.id = \"default\";\n api.name = api.name || config.name || api.id;\n api.description = api.description || config.description;\n await rpc.register_service(api, true);\n }\n\n async function getApp(clientId) {\n clientId = clientId || \"*\";\n assert(!clientId.includes(\":\"), \"clientId should not contain ':'\");\n let workspace;\n if (clientId.includes(\"/\")) {\n [workspace, clientId] = clientId.split(\"/\");\n } else {\n workspace = connection_info.workspace;\n }\n const query = {\n workspace: workspace,\n client_id: clientId,\n service_id: \"default\",\n };\n return await wm.getService(query);\n }\n\n async function listApps(ws) {\n ws = ws || workspace;\n assert(!ws.includes(\":\"), \"workspace should not contain ':'\");\n assert(!ws.includes(\"/\"), \"workspace should not contain '/'\");\n const query = { workspace: ws, service_id: \"default\" };\n return await wm.listServices(query);\n }\n\n if (connection_info) {\n wm.config = Object.assign(wm.config, connection_info);\n }\n wm.export = schemaFunction(_export, {\n name: \"export\",\n description: \"Export the api.\",\n parameters: {\n properties: { api: { description: \"The api to export\", type: \"object\" } },\n required: [\"api\"],\n type: \"object\",\n },\n });\n wm.getApp = schemaFunction(getApp, {\n name: \"getApp\",\n description: \"Get the app.\",\n parameters: {\n properties: {\n clientId: { default: \"*\", description: \"The clientId\", type: \"string\" },\n },\n type: \"object\",\n },\n });\n wm.listApps = schemaFunction(listApps, {\n name: \"listApps\",\n description: \"List the apps.\",\n parameters: {\n properties: {\n workspace: {\n default: workspace,\n description: \"The workspace\",\n type: \"string\",\n },\n },\n type: \"object\",\n },\n });\n wm.disconnect = schemaFunction(rpc.disconnect.bind(rpc), {\n name: \"disconnect\",\n description: \"Disconnect from the server.\",\n parameters: { type: \"object\", properties: {}, required: [] },\n });\n wm.registerCodec = schemaFunction(rpc.register_codec.bind(rpc), {\n name: \"registerCodec\",\n description: \"Register a codec for the webrtc connection\",\n parameters: {\n type: \"object\",\n properties: {\n codec: {\n type: \"object\",\n description: \"Codec to register\",\n properties: {\n name: { type: \"string\" },\n type: {},\n encoder: { type: \"function\" },\n decoder: { type: \"function\" },\n },\n },\n },\n },\n });\n wm.emit = schemaFunction(rpc.emit.bind(rpc), {\n name: \"emit\",\n description: \"Emit a message.\",\n parameters: {\n properties: { data: { description: \"The data to emit\", type: \"object\" } },\n required: [\"data\"],\n type: \"object\",\n },\n });\n wm.on = schemaFunction(rpc.on.bind(rpc), {\n name: \"on\",\n description: \"Register a message handler.\",\n parameters: {\n properties: {\n event: { description: \"The event to listen to\", type: \"string\" },\n handler: { description: \"The handler function\", type: \"function\" },\n },\n required: [\"event\", \"handler\"],\n type: \"object\",\n },\n });\n wm.getServiceSchema = schemaFunction(rpc.get_service_schema, {\n name: \"getServiceSchema\",\n description: \"Get the service schema.\",\n parameters: {\n properties: {\n service: {\n description: \"The service to extract schema\",\n type: \"object\",\n },\n },\n required: [\"service\"],\n type: \"object\",\n },\n });\n\n wm.registerService = schemaFunction(rpc.register_service.bind(rpc), {\n name: \"registerService\",\n description: \"Register a service.\",\n parameters: {\n properties: {\n service: { description: \"The service to register\", type: \"object\" },\n force: {\n default: false,\n description: \"Force to register the service\",\n type: \"boolean\",\n },\n },\n required: [\"service\"],\n type: \"object\",\n },\n });\n wm.unregisterService = schemaFunction(rpc.unregister_service.bind(rpc), {\n name: \"unregisterService\",\n description: \"Unregister a service.\",\n parameters: {\n properties: {\n service: {\n description: \"The service id to unregister\",\n type: \"string\",\n },\n notify: {\n default: true,\n description: \"Notify the workspace manager\",\n type: \"boolean\",\n },\n },\n required: [\"service\"],\n type: \"object\",\n },\n });\n if (connection.manager_id) {\n rpc.on(\"force-exit\", async (message) => {\n if (message.from === \"*/\" + connection.manager_id) {\n console.log(\"Disconnecting from server, reason:\", message.reason);\n await rpc.disconnect();\n }\n });\n }\n if (config.webrtc) {\n await registerRTCService(wm, clientId + \"-rtc\", config.webrtc_config);\n // make a copy of wm, so webrtc can use the original wm.getService\n const _wm = Object.assign({}, wm);\n wm.getService = schemaFunction(\n webrtcGetService.bind(null, _wm, clientId + \"-rtc\"),\n {\n name: \"getService\",\n description: \"Get a service via webrtc.\",\n parameters: {\n properties: {\n query: {\n description: \"The query to get the service\",\n type: \"object\",\n },\n webrtc: {\n default: \"auto\",\n description: \"Use webrtc to get the service\",\n type: [\"boolean\", \"string\"],\n },\n webrtc_config: {\n description: \"The webrtc configuration\",\n type: \"object\",\n },\n },\n required: [\"query\"],\n type: \"object\",\n },\n },\n );\n }\n\n return wm;\n}\n\nexport class LocalWebSocket {\n constructor(url, client_id, workspace) {\n this.url = url;\n this.onopen = () => {};\n this.onmessage = () => {};\n this.onclose = () => {};\n this.onerror = () => {};\n this.client_id = client_id;\n this.workspace = workspace;\n const context = typeof window !== \"undefined\" ? window : self;\n const isWindow = typeof window !== \"undefined\";\n this.postMessage = (message) => {\n if (isWindow) {\n window.parent.postMessage(message, \"*\");\n } else {\n self.postMessage(message);\n }\n };\n\n this.readyState = WebSocket.CONNECTING;\n context.addEventListener(\n \"message\",\n (event) => {\n const { type, data, to } = event.data;\n if (to !== this.client_id) {\n console.debug(\"message not for me\", to, this.client_id);\n return;\n }\n switch (type) {\n case \"message\":\n if (this.readyState === WebSocket.OPEN && this.onmessage) {\n this.onmessage({ data: data });\n }\n break;\n case \"connected\":\n this.readyState = WebSocket.OPEN;\n this.onopen(event);\n break;\n case \"closed\":\n this.readyState = WebSocket.CLOSED;\n this.onclose(event);\n break;\n default:\n break;\n }\n },\n false,\n );\n\n if (!this.client_id) throw new Error(\"client_id is required\");\n if (!this.workspace) throw new Error(\"workspace is required\");\n this.postMessage({\n type: \"connect\",\n url: this.url,\n from: this.client_id,\n workspace: this.workspace,\n });\n }\n\n send(data) {\n if (this.readyState === WebSocket.OPEN) {\n this.postMessage({\n type: \"message\",\n data: data,\n from: this.client_id,\n workspace: this.workspace,\n });\n }\n }\n\n close() {\n this.readyState = WebSocket.CLOSING;\n this.postMessage({\n type: \"close\",\n from: this.client_id,\n workspace: this.workspace,\n });\n this.onclose();\n }\n\n addEventListener(type, listener) {\n if (type === \"message\") {\n this.onmessage = listener;\n }\n if (type === \"open\") {\n this.onopen = listener;\n }\n if (type === \"close\") {\n this.onclose = listener;\n }\n if (type === \"error\") {\n this.onerror = listener;\n }\n }\n}\n\nexport function setupLocalClient({\n enable_execution = false,\n on_ready = null,\n}) {\n return new Promise((resolve, reject) => {\n const context = typeof window !== \"undefined\" ? window : self;\n const isWindow = typeof window !== \"undefined\";\n context.addEventListener(\n \"message\",\n (event) => {\n const {\n type,\n server_url,\n workspace,\n client_id,\n token,\n method_timeout,\n name,\n config,\n } = event.data;\n\n if (type === \"initializeHyphaClient\") {\n if (!server_url || !workspace || !client_id) {\n console.error(\"server_url, workspace, and client_id are required.\");\n return;\n }\n\n if (!server_url.startsWith(\"https://local-hypha-server:\")) {\n console.error(\n \"server_url should start with https://local-hypha-server:\",\n );\n return;\n }\n\n connectToServer({\n server_url,\n workspace,\n client_id,\n token,\n method_timeout,\n name,\n }).then(async (server) => {\n globalThis.api = server;\n try {\n // for iframe\n if (isWindow && enable_execution) {\n function loadScript(script) {\n return new Promise((resolve, reject) => {\n const scriptElement = document.createElement(\"script\");\n scriptElement.innerHTML = script.content;\n scriptElement.lang = script.lang;\n\n scriptElement.onload = () => resolve();\n scriptElement.onerror = (e) => reject(e);\n\n document.head.appendChild(scriptElement);\n });\n }\n if (config.styles && config.styles.length > 0) {\n for (const style of config.styles) {\n const styleElement = document.createElement(\"style\");\n styleElement.innerHTML = style.content;\n styleElement.lang = style.lang;\n document.head.appendChild(styleElement);\n }\n }\n if (config.links && config.links.length > 0) {\n for (const link of config.links) {\n const linkElement = document.createElement(\"a\");\n linkElement.href = link.url;\n linkElement.innerText = link.text;\n document.body.appendChild(linkElement);\n }\n }\n if (config.windows && config.windows.length > 0) {\n for (const w of config.windows) {\n document.body.innerHTML = w.content;\n break;\n }\n }\n if (config.scripts && config.scripts.length > 0) {\n for (const script of config.scripts) {\n if (script.lang !== \"javascript\")\n throw new Error(\"Only javascript scripts are supported\");\n await loadScript(script); // Await the loading of each script\n }\n }\n }\n // for web worker\n else if (\n !isWindow &&\n enable_execution &&\n config.scripts &&\n config.scripts.length > 0\n ) {\n for (const script of config.scripts) {\n if (script.lang !== \"javascript\")\n throw new Error(\"Only javascript scripts are supported\");\n eval(script.content);\n }\n }\n\n if (on_ready) {\n await on_ready(server, config);\n }\n resolve(server);\n } catch (e) {\n reject(e);\n }\n });\n }\n },\n false,\n );\n if (isWindow) {\n window.parent.postMessage({ type: \"hyphaClientReady\" }, \"*\");\n } else {\n self.postMessage({ type: \"hyphaClientReady\" });\n }\n });\n}\n"],"names":["root","factory","exports","module","define","amd","this","prettyByte","byte","concat","Math","abs","toString","padStart","extendStatics","ExtData","type","data","__extends","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","TypeError","String","__","constructor","create","DecodeError","_super","message","_this","proto","defineProperty","configurable","enumerable","value","name","Error","UINT32_MAX","setInt64","view","offset","high","floor","low","setUint32","getInt64","getInt32","getUint32","_a","_b","_c","timestampExtension","encode","object","msec","sec","nsec","nsecInSec","Date","rv","Uint8Array","DataView","buffer","secHigh","secLow","encodeTimeSpecToTimestamp","getTime","decode","timeSpec","byteOffset","byteLength","nsec30AndSecHigh2","length","decodeTimestampToTimeSpec","ExtensionCodec","builtInEncoders","builtInDecoders","encoders","decoders","register","index","tryToEncode","context","i","encodeExt","decodeExt","defaultCodec","TEXT_ENCODING_AVAILABLE","process","env","TextEncoder","TextDecoder","utf8Count","str","strLength","pos","charCodeAt","extra","sharedTextEncoder","undefined","TEXT_ENCODER_THRESHOLD","utf8EncodeTE","encodeInto","output","outputOffset","subarray","set","utf8DecodeJs","bytes","inputOffset","end","units","result","byte1","byte2","push","byte3","unit","fromCharCode","apply","sharedTextDecoder","TEXT_DECODER_THRESHOLD","ensureUint8Array","ArrayBuffer","isView","from","CachedKeyDecoder","maxKeyLength","maxLengthPerKey","hit","miss","caches","canBeCached","find","FIND_CHUNK","_i","records_1","record","recordBytes","j","store","records","random","cachedValue","slicedCopyOfBytes","slice","__generator","thisArg","body","f","y","t","g","_","label","sent","trys","ops","next","verb","Symbol","iterator","n","v","op","done","pop","e","step","__asyncValues","o","asyncIterator","m","__values","Promise","resolve","reject","then","settle","__await","EMPTY_VIEW","EMPTY_BYTES","DataViewIndexOutOfBoundsError","getInt8","MORE_DATA","sharedCachedKeyDecoder","Decoder","extensionCodec","maxStrLength","maxBinLength","maxArrayLength","maxMapLength","maxExtLength","keyDecoder","totalPos","headByte","stack","reinitializeState","setBuffer","bufferView","createDataView","appendBuffer","hasRemaining","remainingData","newData","newBuffer","size","createExtraByteError","posToShow","RangeError","doDecodeSync","decodeMulti","decodeAsync","stream","stream_1","stream_1_1","e_1","_arguments","P","generator","decoded","e_1_1","error","return","fulfilled","rejected","decodeArrayStream","decodeMultiAsync","decodeStream","isArray","q","a","resume","r","fulfill","shift","__asyncGenerator","arguments","isArrayHeaderRequired","arrayItemsLeft","stream_2","stream_2_1","e_2","e_3_1","e_3","readArraySize","complete","DECODE","readHeadByte","pushMapState","pushArrayState","decodeUtf8String","readF32","readF64","readU8","readU16","readU32","readU64","readI8","readI16","readI32","readI64","lookU8","lookU16","lookU32","decodeBinary","decodeExtension","state","array","position","keyType","key","map","readCount","headerOffset","stateIsMapKey","stringBytes","utf8DecodeTD","headOffset","extType","getUint8","getUint16","getInt16","getFloat32","getFloat64","defaultDecodeOptions","options","Encoder","maxDepth","initialBufferSize","sortKeys","forceFloat32","ignoreUndefined","forceIntegerToFloat","encodeSharedRef","doEncode","depth","encodeNil","encodeBoolean","encodeNumber","encodeString","encodeObject","ensureBufferSizeToWrite","sizeToWrite","requiredSize","resizeBuffer","newSize","newBytes","newView","writeU8","Number","isSafeInteger","writeU16","writeU32","writeU64","writeI8","writeI16","writeI32","writeI64","writeF32","writeF64","writeStringHeader","utf8EncodeJs","ext","encodeExtension","encodeArray","encodeBinary","encodeMap","writeU8a","object_1","item","countWithoutUndefined","keys","count","keys_1","sort","keys_2","setUint8","values","setInt8","setUint16","setInt16","setInt32","setFloat32","setFloat64","setUint64","defaultEncodeOptions","API_VERSION","ArrayBufferView","getPrototypeOf","_appendBuffer","buffer1","buffer2","tmp","indexObject","obj","is","split","_get_schema","skipContext","schema","k","__schema__","JSON","parse","stringify","parameters","properties","function","Timer","timeout","callback","args","_timeout","_callback","_args","_label","_task","started","start","reset","setTimeout","clear","clearTimeout","console","warn","RPC","connection","client_id","default_context","codecs","method_timeout","max_message_buffer_size","debug","workspace","silent","app_id","super","_codecs","_client_id","_name","_app_id","_local_workspace","_silent","_method_annotations","WeakMap","_max_message_buffer_size","_chunk_store","_method_timeout","_services","_object_store","services","add_service","id","config","require_context","visibility","ping","_ping","bind","get_service","get_local_service","message_cache","_create_message","append","_append_message","_process_message","remove","_remove_message","on","_handle_method","emit_message","on_message","manager_id","_emit_message","_on_message","_connection","onConnected","async","connectionInfo","log","manager","get_manager_service","service","serviceInfo","_extract_service_info","registerService","_fire","on_connected","register_codec","msg","method","_generate_remote_method","_rtarget","_rmethod","_rpromise","_rdoc","heartbeat","overwrite","cache","buffers","buffersLengths","totalBufferlength","unit8Arr","reduce","c","unpacker","main","assign","to","user","_event_handlers","disconnect","case_conversion","get_remote_service","get_all_local_services","service_id","ws","service_uri","includes","provider","svc","_annotate_service_methods","aObject","object_id","run_in_executor","method_name","method_id","val","__rpc_object__","api","normApi","props","getOwnPropertyNames","serviceSchema","description","docs","service_schema","get_service_schema","register_service","notify","check_type","serviceTypeInfo","validateKeys","serviceDict","schemaDict","path","annotateRecursive","newService","schemaInfo","forEach","newPath","_annotate_service","get_service_type","unregister_service","_ndarray","typedArray","shape","dtype","_dtype","_rtype","_rvalue","_rshape","_rdtype","_encode_callback","session_id","clear_after_called","timer","local_workspace","encoded","self","_encode_promise","_get_session_store","_encode","interval","_send_chunks","target_id","remote_services","message_id","total_size","chunk_num","ceil","idx","start_byte","emit","main_message","extra_data","message_package","encoded_method","remote_parent","local_parent","remote_workspace","with_promise","remote_method","local_session_id","argLength","withKwargs","_rkwargs","from_client","arg","_rintf","catch","err","parts","__name__","__doc__","_rschema","get_client_info","heartbeat_task","ctx","remote_client_id","parent","promise","_decode","session","setInterval","has","get","session_target_id","indexOf","clearInterval","levels","last_index","level","aType","bObject","temp","annotation","funcInfo","func","funcString","nameMatch","match","paramsMatch","params","replace","filter","trim","join","docMatch","docstringBlock","docstringLine","s","docstring","sig","doc","getFunctionInfo","isarray","tp","codec","encoder","encodedObj","tf","Tensor","v_buffer","dataSync","nj","NdArray","selection","_rtrace","Boolean","RegExp","ImageData","FileList","FileSystemDirectoryHandle","FileSystemFileHandle","FileSystemHandle","FileSystemWritableFileStream","Blob","_current_pos","read","blob","ret","arrayBuffer","seek","_rnative","_path","webkitRelativePath","Set","Map","decoder","Uint8","reshape","arraytype","tensor","startsWith","randId","substr","toCamelCase","toUpperCase","toSnakeCase","toLowerCase","convertCase","caseType","newObj","camelKey","snakeKey","dtypeToTypedArray","int8","Int8Array","int16","Int16Array","int32","Int32Array","uint8","uint16","Uint16Array","uint32","Uint32Array","float32","Float32Array","float64","Float64Array","loadRequirementsInWindow","requirements","_importScript","url","scriptTag","document","createElement","src","onload","onreadystatechange","readyState","onerror","head","appendChild","importScripts","len","link_node","endsWith","rel","href","import","loadRequirementsInWebworker","loadRequirements","WorkerGlobalScope","normalizeConfig","version","target_origin","allow_execution","typedArrayToDtypeMapping","typedArrayToDtypeKeys","arrType","eval","typedArrayToDtype","pt","cacheUrlInServiceWorker","command","navigator","serviceWorker","messageChannel","MessageChannel","port1","onmessage","event","controller","postMessage","port2","cacheRequirements","req","assert","condition","urlJoin","waitFor","prom","time","race","_r","rej","finally","MessageEmitter","_once_handlers","_debug","handler","once","___event_run_once","off","splice","schemaFunction","schema_type","WebRTCConnection","channel","_data_channel","_handle_message","_reconnection_token","_handle_disconnected","_handle_connected","onopen","onclose","on_disconnected","send","exp","reason","info","_setupRPC","clientId","connection_type","getRTCService","server","peer_id","pc","RTCPeerConnection","iceServers","ice_servers","urls","sdpSemantics","addEventListener","connectionState","close","on_init","createDataChannel","ordered","binaryType","offer","createOffer","setLocalDescription","getService","answer","sdp","localDescription","rpc","registerCodec","setRemoteDescription","RTCSessionDescription","registerRTCService","onInit","createAnswer","_createOffer","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","prop","toStringTag","MAX_RETRY","WebsocketRPCConnection","server_url","token","reconnection_token","WebSocketClass","_server_url","_workspace","_token","_websocket","_WebSocketClass","WebSocket","_closed","_legacy_auth","connection_info","_enable_reconnect","_attempt_connection","attempt_fallback","websocket","code","_attempt_connection_with_query_params","queryParamsParts","encodeURIComponent","full_url","_establish_connection","first_message","announcement","open","authInfo","_handle_close","CLOSED","retry","reconnect","CONNECTED","OPEN","normalizeServerUrl","login","login_service_id","login_timeout","login_callback","profile","connectToServer","login_url","check","webrtcGetService","wm","rtc_service_id","query","webrtc","webrtc_config","otherArgs","peer","rtcSvc","_webrtc","_peer","_service","export","required","getApp","default","listApps","listServices","getServiceSchema","force","unregisterService","_wm","LocalWebSocket","window","isWindow","CONNECTING","CLOSING","listener","setupLocalClient","globalThis","enable_execution","loadScript","script","scriptElement","innerHTML","content","lang","styles","style","styleElement","links","link","linkElement","innerText","text","windows","w","scripts","on_ready"],"sourceRoot":""}
|