{
  "version": 3,
  "sources": ["../../../../../../node_modules/.pnpm/heap-js@2.5.0/node_modules/heap-js/dist/heap-js.umd.js", "../../../../../workflows-shared/src/engine.ts", "../../../../../workflows-shared/src/context.ts", "../../../../../../node_modules/.pnpm/itty-time@2.0.2/node_modules/itty-time/index.mjs", "../../../../../workflows-shared/src/instance.ts", "../../../../../workflows-shared/src/lib/cache.ts", "../../../../../workflows-shared/src/lib/errors.ts", "../../../../../workflows-shared/src/lib/retries.ts", "../../../../../../node_modules/.pnpm/zod@3.22.3/node_modules/zod/lib/index.mjs", "../../../../../workflows-shared/src/lib/validators.ts", "../../../../../workflows-shared/src/lib/rollback.ts", "../../../../../workflows-shared/src/lib/streams.ts", "../../../../../workflows-shared/src/modifier.ts", "../../../../../workflows-shared/src/lib/gracePeriodSemaphore.ts", "../../../../../workflows-shared/src/lib/restart.ts", "../../../../../workflows-shared/src/lib/timePriorityQueue.ts", "../../../../../workflows-shared/src/binding.ts"],
  "sourcesContent": ["(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.heap = {}));\n})(this, (function (exports) { 'use strict';\n\n    var __awaiter = (undefined && undefined.__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    };\n    var __generator$1 = (undefined && undefined.__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 (g && (g = 0, op[0] && (_ = 0)), _) 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    };\n    var __read$1 = (undefined && undefined.__read) || function (o, n) {\n        var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n        if (!m) return o;\n        var i = m.call(o), r, ar = [], e;\n        try {\n            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n        }\n        catch (error) { e = { error: error }; }\n        finally {\n            try {\n                if (r && !r.done && (m = i[\"return\"])) m.call(i);\n            }\n            finally { if (e) throw e.error; }\n        }\n        return ar;\n    };\n    var __spreadArray$1 = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n        if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n            if (ar || !(i in from)) {\n                if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                ar[i] = from[i];\n            }\n        }\n        return to.concat(ar || Array.prototype.slice.call(from));\n    };\n    var __values = (undefined && undefined.__values) || function(o) {\n        var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n        if (m) return m.call(o);\n        if (o && typeof o.length === \"number\") return {\n            next: function () {\n                if (o && i >= o.length) o = void 0;\n                return { value: o && o[i++], done: !o };\n            }\n        };\n        throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n    };\n    /**\n     * Heap\n     * @type {Class}\n     */\n    var HeapAsync = /** @class */ (function () {\n        /**\n         * Heap instance constructor.\n         * @param  {Function} compare Optional comparison function, defaults to Heap.minComparator<number>\n         */\n        function HeapAsync(compare) {\n            if (compare === void 0) { compare = HeapAsync.minComparator; }\n            var _this = this;\n            this.compare = compare;\n            this.heapArray = [];\n            this._limit = 0;\n            /**\n             * Alias of add\n             */\n            this.offer = this.add;\n            /**\n             * Alias of peek\n             */\n            this.element = this.peek;\n            /**\n             * Alias of pop\n             */\n            this.poll = this.pop;\n            /**\n             * Returns the inverse to the comparison function.\n             * @return {Number}\n             */\n            this._invertedCompare = function (a, b) {\n                return _this.compare(a, b).then(function (res) { return -1 * res; });\n            };\n        }\n        /*\n                  Static methods\n         */\n        /**\n         * Gets children indices for given index.\n         * @param  {Number} idx     Parent index\n         * @return {Array(Number)}  Array of children indices\n         */\n        HeapAsync.getChildrenIndexOf = function (idx) {\n            return [idx * 2 + 1, idx * 2 + 2];\n        };\n        /**\n         * Gets parent index for given index.\n         * @param  {Number} idx  Children index\n         * @return {Number | undefined}      Parent index, -1 if idx is 0\n         */\n        HeapAsync.getParentIndexOf = function (idx) {\n            if (idx <= 0) {\n                return -1;\n            }\n            var whichChildren = idx % 2 ? 1 : 2;\n            return Math.floor((idx - whichChildren) / 2);\n        };\n        /**\n         * Gets sibling index for given index.\n         * @param  {Number} idx  Children index\n         * @return {Number | undefined}      Sibling index, -1 if idx is 0\n         */\n        HeapAsync.getSiblingIndexOf = function (idx) {\n            if (idx <= 0) {\n                return -1;\n            }\n            var whichChildren = idx % 2 ? 1 : -1;\n            return idx + whichChildren;\n        };\n        /**\n         * Min heap comparison function, default.\n         * @param  {any} a     First element\n         * @param  {any} b     Second element\n         * @return {Number}    0 if they're equal, positive if `a` goes up, negative if `b` goes up\n         */\n        HeapAsync.minComparator = function (a, b) {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    if (a > b) {\n                        return [2 /*return*/, 1];\n                    }\n                    else if (a < b) {\n                        return [2 /*return*/, -1];\n                    }\n                    else {\n                        return [2 /*return*/, 0];\n                    }\n                });\n            });\n        };\n        /**\n         * Max heap comparison function.\n         * @param  {any} a     First element\n         * @param  {any} b     Second element\n         * @return {Number}    0 if they're equal, positive if `a` goes up, negative if `b` goes up\n         */\n        HeapAsync.maxComparator = function (a, b) {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    if (b > a) {\n                        return [2 /*return*/, 1];\n                    }\n                    else if (b < a) {\n                        return [2 /*return*/, -1];\n                    }\n                    else {\n                        return [2 /*return*/, 0];\n                    }\n                });\n            });\n        };\n        /**\n         * Min number heap comparison function, default.\n         * @param  {Number} a     First element\n         * @param  {Number} b     Second element\n         * @return {Number}    0 if they're equal, positive if `a` goes up, negative if `b` goes up\n         */\n        HeapAsync.minComparatorNumber = function (a, b) {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    return [2 /*return*/, a - b];\n                });\n            });\n        };\n        /**\n         * Max number heap comparison function.\n         * @param  {Number} a     First element\n         * @param  {Number} b     Second element\n         * @return {Number}    0 if they're equal, positive if `a` goes up, negative if `b` goes up\n         */\n        HeapAsync.maxComparatorNumber = function (a, b) {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    return [2 /*return*/, b - a];\n                });\n            });\n        };\n        /**\n         * Default equality function.\n         * @param  {any} a    First element\n         * @param  {any} b    Second element\n         * @return {Boolean}  True if equal, false otherwise\n         */\n        HeapAsync.defaultIsEqual = function (a, b) {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    return [2 /*return*/, a === b];\n                });\n            });\n        };\n        /**\n         * Prints a heap.\n         * @param  {HeapAsync} heap Heap to be printed\n         * @returns {String}\n         */\n        HeapAsync.print = function (heap) {\n            function deep(i) {\n                var pi = HeapAsync.getParentIndexOf(i);\n                return Math.floor(Math.log2(pi + 1));\n            }\n            function repeat(str, times) {\n                var out = '';\n                for (; times > 0; --times) {\n                    out += str;\n                }\n                return out;\n            }\n            var node = 0;\n            var lines = [];\n            var maxLines = deep(heap.length - 1) + 2;\n            var maxLength = 0;\n            while (node < heap.length) {\n                var i = deep(node) + 1;\n                if (node === 0) {\n                    i = 0;\n                }\n                // Text representation\n                var nodeText = String(heap.get(node));\n                if (nodeText.length > maxLength) {\n                    maxLength = nodeText.length;\n                }\n                // Add to line\n                lines[i] = lines[i] || [];\n                lines[i].push(nodeText);\n                node += 1;\n            }\n            return lines\n                .map(function (line, i) {\n                var times = Math.pow(2, maxLines - i) - 1;\n                return (repeat(' ', Math.floor(times / 2) * maxLength) +\n                    line\n                        .map(function (el) {\n                        // centered\n                        var half = (maxLength - el.length) / 2;\n                        return repeat(' ', Math.ceil(half)) + el + repeat(' ', Math.floor(half));\n                    })\n                        .join(repeat(' ', times * maxLength)));\n            })\n                .join('\\n');\n        };\n        /*\n                  Python style\n         */\n        /**\n         * Converts an array into an array-heap, in place\n         * @param  {Array}    arr      Array to be modified\n         * @param  {Function} compare  Optional compare function\n         * @return {HeapAsync}              For convenience, it returns a Heap instance\n         */\n        HeapAsync.heapify = function (arr, compare) {\n            return __awaiter(this, void 0, void 0, function () {\n                var heap;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            heap = new HeapAsync(compare);\n                            heap.heapArray = arr;\n                            return [4 /*yield*/, heap.init()];\n                        case 1:\n                            _a.sent();\n                            return [2 /*return*/, heap];\n                    }\n                });\n            });\n        };\n        /**\n         * Extract the peek of an array-heap\n         * @param  {Array}    heapArr  Array to be modified, should be a heap\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Returns the extracted peek\n         */\n        HeapAsync.heappop = function (heapArr, compare) {\n            var heap = new HeapAsync(compare);\n            heap.heapArray = heapArr;\n            return heap.pop();\n        };\n        /**\n         * Pushes a item into an array-heap\n         * @param  {Array}    heapArr  Array to be modified, should be a heap\n         * @param  {any}      item     Item to push\n         * @param  {Function} compare  Optional compare function\n         */\n        HeapAsync.heappush = function (heapArr, item, compare) {\n            return __awaiter(this, void 0, void 0, function () {\n                var heap;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            heap = new HeapAsync(compare);\n                            heap.heapArray = heapArr;\n                            return [4 /*yield*/, heap.push(item)];\n                        case 1:\n                            _a.sent();\n                            return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        /**\n         * Push followed by pop, faster\n         * @param  {Array}    heapArr  Array to be modified, should be a heap\n         * @param  {any}      item     Item to push\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Returns the extracted peek\n         */\n        HeapAsync.heappushpop = function (heapArr, item, compare) {\n            var heap = new HeapAsync(compare);\n            heap.heapArray = heapArr;\n            return heap.pushpop(item);\n        };\n        /**\n         * Replace peek with item\n         * @param  {Array}    heapArr  Array to be modified, should be a heap\n         * @param  {any}      item     Item as replacement\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Returns the extracted peek\n         */\n        HeapAsync.heapreplace = function (heapArr, item, compare) {\n            var heap = new HeapAsync(compare);\n            heap.heapArray = heapArr;\n            return heap.replace(item);\n        };\n        /**\n         * Return the `n` most valuable elements of a heap-like Array\n         * @param  {Array}    heapArr  Array, should be an array-heap\n         * @param  {number}   n        Max number of elements\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Elements\n         */\n        HeapAsync.heaptop = function (heapArr, n, compare) {\n            if (n === void 0) { n = 1; }\n            var heap = new HeapAsync(compare);\n            heap.heapArray = heapArr;\n            return heap.top(n);\n        };\n        /**\n         * Return the `n` least valuable elements of a heap-like Array\n         * @param  {Array}    heapArr  Array, should be an array-heap\n         * @param  {number}   n        Max number of elements\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Elements\n         */\n        HeapAsync.heapbottom = function (heapArr, n, compare) {\n            if (n === void 0) { n = 1; }\n            var heap = new HeapAsync(compare);\n            heap.heapArray = heapArr;\n            return heap.bottom(n);\n        };\n        /**\n         * Return the `n` most valuable elements of an iterable\n         * @param  {number}   n        Max number of elements\n         * @param  {Iterable} Iterable Iterable list of elements\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Elements\n         */\n        HeapAsync.nlargest = function (n, iterable, compare) {\n            return __awaiter(this, void 0, void 0, function () {\n                var heap;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            heap = new HeapAsync(compare);\n                            heap.heapArray = __spreadArray$1([], __read$1(iterable), false);\n                            return [4 /*yield*/, heap.init()];\n                        case 1:\n                            _a.sent();\n                            return [2 /*return*/, heap.top(n)];\n                    }\n                });\n            });\n        };\n        /**\n         * Return the `n` least valuable elements of an iterable\n         * @param  {number}   n        Max number of elements\n         * @param  {Iterable} Iterable Iterable list of elements\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Elements\n         */\n        HeapAsync.nsmallest = function (n, iterable, compare) {\n            return __awaiter(this, void 0, void 0, function () {\n                var heap;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            heap = new HeapAsync(compare);\n                            heap.heapArray = __spreadArray$1([], __read$1(iterable), false);\n                            return [4 /*yield*/, heap.init()];\n                        case 1:\n                            _a.sent();\n                            return [2 /*return*/, heap.bottom(n)];\n                    }\n                });\n            });\n        };\n        /*\n                  Instance methods\n         */\n        /**\n         * Adds an element to the heap. Aliases: `offer`.\n         * Same as: push(element)\n         * @param {any} element Element to be added\n         * @return {Boolean} true\n         */\n        HeapAsync.prototype.add = function (element) {\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0: return [4 /*yield*/, this._sortNodeUp(this.heapArray.push(element) - 1)];\n                        case 1:\n                            _a.sent();\n                            this._applyLimit();\n                            return [2 /*return*/, true];\n                    }\n                });\n            });\n        };\n        /**\n         * Adds an array of elements to the heap.\n         * Similar as: push(element, element, ...).\n         * @param {Array} elements Elements to be added\n         * @return {Boolean} true\n         */\n        HeapAsync.prototype.addAll = function (elements) {\n            return __awaiter(this, void 0, void 0, function () {\n                var i, l;\n                var _a;\n                return __generator$1(this, function (_b) {\n                    switch (_b.label) {\n                        case 0:\n                            i = this.length;\n                            (_a = this.heapArray).push.apply(_a, __spreadArray$1([], __read$1(elements), false));\n                            l = this.length;\n                            _b.label = 1;\n                        case 1:\n                            if (!(i < l)) return [3 /*break*/, 4];\n                            return [4 /*yield*/, this._sortNodeUp(i)];\n                        case 2:\n                            _b.sent();\n                            _b.label = 3;\n                        case 3:\n                            ++i;\n                            return [3 /*break*/, 1];\n                        case 4:\n                            this._applyLimit();\n                            return [2 /*return*/, true];\n                    }\n                });\n            });\n        };\n        /**\n         * Return the bottom (lowest value) N elements of the heap.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        HeapAsync.prototype.bottom = function (n) {\n            if (n === void 0) { n = 1; }\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    if (this.heapArray.length === 0 || n <= 0) {\n                        // Nothing to do\n                        return [2 /*return*/, []];\n                    }\n                    else if (this.heapArray.length === 1) {\n                        // Just the peek\n                        return [2 /*return*/, [this.heapArray[0]]];\n                    }\n                    else if (n >= this.heapArray.length) {\n                        // The whole heap\n                        return [2 /*return*/, __spreadArray$1([], __read$1(this.heapArray), false)];\n                    }\n                    else {\n                        // Some elements\n                        return [2 /*return*/, this._bottomN_push(~~n)];\n                    }\n                });\n            });\n        };\n        /**\n         * Check if the heap is sorted, useful for testing purposes.\n         * @return {Undefined | Element}  Returns an element if something wrong is found, otherwise it's undefined\n         */\n        HeapAsync.prototype.check = function () {\n            return __awaiter(this, void 0, void 0, function () {\n                var j, el, children, children_1, children_1_1, ch, e_1_1;\n                var e_1, _a;\n                return __generator$1(this, function (_b) {\n                    switch (_b.label) {\n                        case 0:\n                            j = 0;\n                            _b.label = 1;\n                        case 1:\n                            if (!(j < this.heapArray.length)) return [3 /*break*/, 10];\n                            el = this.heapArray[j];\n                            children = this.getChildrenOf(j);\n                            _b.label = 2;\n                        case 2:\n                            _b.trys.push([2, 7, 8, 9]);\n                            children_1 = (e_1 = void 0, __values(children)), children_1_1 = children_1.next();\n                            _b.label = 3;\n                        case 3:\n                            if (!!children_1_1.done) return [3 /*break*/, 6];\n                            ch = children_1_1.value;\n                            return [4 /*yield*/, this.compare(el, ch)];\n                        case 4:\n                            if ((_b.sent()) > 0) {\n                                return [2 /*return*/, el];\n                            }\n                            _b.label = 5;\n                        case 5:\n                            children_1_1 = children_1.next();\n                            return [3 /*break*/, 3];\n                        case 6: return [3 /*break*/, 9];\n                        case 7:\n                            e_1_1 = _b.sent();\n                            e_1 = { error: e_1_1 };\n                            return [3 /*break*/, 9];\n                        case 8:\n                            try {\n                                if (children_1_1 && !children_1_1.done && (_a = children_1.return)) _a.call(children_1);\n                            }\n                            finally { if (e_1) throw e_1.error; }\n                            return [7 /*endfinally*/];\n                        case 9:\n                            ++j;\n                            return [3 /*break*/, 1];\n                        case 10: return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        /**\n         * Remove all of the elements from this heap.\n         */\n        HeapAsync.prototype.clear = function () {\n            this.heapArray = [];\n        };\n        /**\n         * Clone this heap\n         * @return {HeapAsync}\n         */\n        HeapAsync.prototype.clone = function () {\n            var cloned = new HeapAsync(this.comparator());\n            cloned.heapArray = this.toArray();\n            cloned._limit = this._limit;\n            return cloned;\n        };\n        /**\n         * Returns the comparison function.\n         * @return {Function}\n         */\n        HeapAsync.prototype.comparator = function () {\n            return this.compare;\n        };\n        /**\n         * Returns true if this queue contains the specified element.\n         * @param  {any}      o   Element to be found\n         * @param  {Function} fn  Optional comparison function, receives (element, needle)\n         * @return {Boolean}\n         */\n        HeapAsync.prototype.contains = function (o, fn) {\n            if (fn === void 0) { fn = HeapAsync.defaultIsEqual; }\n            return __awaiter(this, void 0, void 0, function () {\n                var _a, _b, el, e_2_1;\n                var e_2, _c;\n                return __generator$1(this, function (_d) {\n                    switch (_d.label) {\n                        case 0:\n                            _d.trys.push([0, 5, 6, 7]);\n                            _a = __values(this.heapArray), _b = _a.next();\n                            _d.label = 1;\n                        case 1:\n                            if (!!_b.done) return [3 /*break*/, 4];\n                            el = _b.value;\n                            return [4 /*yield*/, fn(el, o)];\n                        case 2:\n                            if (_d.sent()) {\n                                return [2 /*return*/, true];\n                            }\n                            _d.label = 3;\n                        case 3:\n                            _b = _a.next();\n                            return [3 /*break*/, 1];\n                        case 4: return [3 /*break*/, 7];\n                        case 5:\n                            e_2_1 = _d.sent();\n                            e_2 = { error: e_2_1 };\n                            return [3 /*break*/, 7];\n                        case 6:\n                            try {\n                                if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n                            }\n                            finally { if (e_2) throw e_2.error; }\n                            return [7 /*endfinally*/];\n                        case 7: return [2 /*return*/, false];\n                    }\n                });\n            });\n        };\n        /**\n         * Initialise a heap, sorting nodes\n         * @param  {Array} array Optional initial state array\n         */\n        HeapAsync.prototype.init = function (array) {\n            return __awaiter(this, void 0, void 0, function () {\n                var i;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (array) {\n                                this.heapArray = __spreadArray$1([], __read$1(array), false);\n                            }\n                            i = Math.floor(this.heapArray.length);\n                            _a.label = 1;\n                        case 1:\n                            if (!(i >= 0)) return [3 /*break*/, 4];\n                            return [4 /*yield*/, this._sortNodeDown(i)];\n                        case 2:\n                            _a.sent();\n                            _a.label = 3;\n                        case 3:\n                            --i;\n                            return [3 /*break*/, 1];\n                        case 4:\n                            this._applyLimit();\n                            return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        /**\n         * Test if the heap has no elements.\n         * @return {Boolean} True if no elements on the heap\n         */\n        HeapAsync.prototype.isEmpty = function () {\n            return this.length === 0;\n        };\n        /**\n         * Get the leafs of the tree (no children nodes)\n         */\n        HeapAsync.prototype.leafs = function () {\n            if (this.heapArray.length === 0) {\n                return [];\n            }\n            var pi = HeapAsync.getParentIndexOf(this.heapArray.length - 1);\n            return this.heapArray.slice(pi + 1);\n        };\n        Object.defineProperty(HeapAsync.prototype, \"length\", {\n            /**\n             * Length of the heap.\n             * @return {Number}\n             */\n            get: function () {\n                return this.heapArray.length;\n            },\n            enumerable: false,\n            configurable: true\n        });\n        Object.defineProperty(HeapAsync.prototype, \"limit\", {\n            /**\n             * Get length limit of the heap.\n             * @return {Number}\n             */\n            get: function () {\n                return this._limit;\n            },\n            /**\n             * Set length limit of the heap.\n             * @return {Number}\n             */\n            set: function (_l) {\n                this._limit = ~~_l;\n                this._applyLimit();\n            },\n            enumerable: false,\n            configurable: true\n        });\n        /**\n         * Top node. Aliases: `element`.\n         * Same as: `top(1)[0]`\n         * @return {any} Top node\n         */\n        HeapAsync.prototype.peek = function () {\n            return this.heapArray[0];\n        };\n        /**\n         * Extract the top node (root). Aliases: `poll`.\n         * @return {any} Extracted top node, undefined if empty\n         */\n        HeapAsync.prototype.pop = function () {\n            return __awaiter(this, void 0, void 0, function () {\n                var last;\n                return __generator$1(this, function (_a) {\n                    last = this.heapArray.pop();\n                    if (this.length > 0 && last !== undefined) {\n                        return [2 /*return*/, this.replace(last)];\n                    }\n                    return [2 /*return*/, last];\n                });\n            });\n        };\n        /**\n         * Pushes element(s) to the heap.\n         * @param  {...any} elements Elements to insert\n         * @return {Boolean} True if elements are present\n         */\n        HeapAsync.prototype.push = function () {\n            var elements = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                elements[_i] = arguments[_i];\n            }\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    if (elements.length < 1) {\n                        return [2 /*return*/, false];\n                    }\n                    else if (elements.length === 1) {\n                        return [2 /*return*/, this.add(elements[0])];\n                    }\n                    else {\n                        return [2 /*return*/, this.addAll(elements)];\n                    }\n                });\n            });\n        };\n        /**\n         * Same as push & pop in sequence, but faster\n         * @param  {any} element Element to insert\n         * @return {any}  Extracted top node\n         */\n        HeapAsync.prototype.pushpop = function (element) {\n            return __awaiter(this, void 0, void 0, function () {\n                var _a;\n                return __generator$1(this, function (_b) {\n                    switch (_b.label) {\n                        case 0: return [4 /*yield*/, this.compare(this.heapArray[0], element)];\n                        case 1:\n                            if (!((_b.sent()) < 0)) return [3 /*break*/, 3];\n                            _a = __read$1([this.heapArray[0], element], 2), element = _a[0], this.heapArray[0] = _a[1];\n                            return [4 /*yield*/, this._sortNodeDown(0)];\n                        case 2:\n                            _b.sent();\n                            _b.label = 3;\n                        case 3: return [2 /*return*/, element];\n                    }\n                });\n            });\n        };\n        /**\n         * Remove an element from the heap.\n         * @param  {any}   o      Element to be found\n         * @param  {Function} fn  Optional function to compare\n         * @return {Boolean}      True if the heap was modified\n         */\n        HeapAsync.prototype.remove = function (o, fn) {\n            if (fn === void 0) { fn = HeapAsync.defaultIsEqual; }\n            return __awaiter(this, void 0, void 0, function () {\n                var idx, i;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!(this.length > 0)) return [3 /*break*/, 13];\n                            if (!(o === undefined)) return [3 /*break*/, 2];\n                            return [4 /*yield*/, this.pop()];\n                        case 1:\n                            _a.sent();\n                            return [2 /*return*/, true];\n                        case 2:\n                            idx = -1;\n                            i = 0;\n                            _a.label = 3;\n                        case 3:\n                            if (!(i < this.heapArray.length)) return [3 /*break*/, 6];\n                            return [4 /*yield*/, fn(this.heapArray[i], o)];\n                        case 4:\n                            if (_a.sent()) {\n                                idx = i;\n                                return [3 /*break*/, 6];\n                            }\n                            _a.label = 5;\n                        case 5:\n                            ++i;\n                            return [3 /*break*/, 3];\n                        case 6:\n                            if (!(idx >= 0)) return [3 /*break*/, 13];\n                            if (!(idx === 0)) return [3 /*break*/, 8];\n                            return [4 /*yield*/, this.pop()];\n                        case 7:\n                            _a.sent();\n                            return [3 /*break*/, 12];\n                        case 8:\n                            if (!(idx === this.length - 1)) return [3 /*break*/, 9];\n                            this.heapArray.pop();\n                            return [3 /*break*/, 12];\n                        case 9:\n                            this.heapArray.splice(idx, 1, this.heapArray.pop());\n                            return [4 /*yield*/, this._sortNodeUp(idx)];\n                        case 10:\n                            _a.sent();\n                            return [4 /*yield*/, this._sortNodeDown(idx)];\n                        case 11:\n                            _a.sent();\n                            _a.label = 12;\n                        case 12: return [2 /*return*/, true];\n                        case 13: return [2 /*return*/, false];\n                    }\n                });\n            });\n        };\n        /**\n         * Pop the current peek value, and add the new item.\n         * @param  {any} element  Element to replace peek\n         * @return {any}         Old peek\n         */\n        HeapAsync.prototype.replace = function (element) {\n            return __awaiter(this, void 0, void 0, function () {\n                var peek;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            peek = this.heapArray[0];\n                            this.heapArray[0] = element;\n                            return [4 /*yield*/, this._sortNodeDown(0)];\n                        case 1:\n                            _a.sent();\n                            return [2 /*return*/, peek];\n                    }\n                });\n            });\n        };\n        /**\n         * Size of the heap\n         * @return {Number}\n         */\n        HeapAsync.prototype.size = function () {\n            return this.length;\n        };\n        /**\n         * Return the top (highest value) N elements of the heap.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}    Array of length <= N.\n         */\n        HeapAsync.prototype.top = function (n) {\n            if (n === void 0) { n = 1; }\n            return __awaiter(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    if (this.heapArray.length === 0 || n <= 0) {\n                        // Nothing to do\n                        return [2 /*return*/, []];\n                    }\n                    else if (this.heapArray.length === 1 || n === 1) {\n                        // Just the peek\n                        return [2 /*return*/, [this.heapArray[0]]];\n                    }\n                    else if (n >= this.heapArray.length) {\n                        // The whole peek\n                        return [2 /*return*/, __spreadArray$1([], __read$1(this.heapArray), false)];\n                    }\n                    else {\n                        // Some elements\n                        return [2 /*return*/, this._topN_push(~~n)];\n                    }\n                });\n            });\n        };\n        /**\n         * Clone the heap's internal array\n         * @return {Array}\n         */\n        HeapAsync.prototype.toArray = function () {\n            return __spreadArray$1([], __read$1(this.heapArray), false);\n        };\n        /**\n         * String output, call to Array.prototype.toString()\n         * @return {String}\n         */\n        HeapAsync.prototype.toString = function () {\n            return this.heapArray.toString();\n        };\n        /**\n         * Get the element at the given index.\n         * @param  {Number} i Index to get\n         * @return {any}       Element at that index\n         */\n        HeapAsync.prototype.get = function (i) {\n            return this.heapArray[i];\n        };\n        /**\n         * Get the elements of these node's children\n         * @param  {Number} idx Node index\n         * @return {Array(any)}  Children elements\n         */\n        HeapAsync.prototype.getChildrenOf = function (idx) {\n            var _this = this;\n            return HeapAsync.getChildrenIndexOf(idx)\n                .map(function (i) { return _this.heapArray[i]; })\n                .filter(function (e) { return e !== undefined; });\n        };\n        /**\n         * Get the element of this node's parent\n         * @param  {Number} idx Node index\n         * @return {any}     Parent element\n         */\n        HeapAsync.prototype.getParentOf = function (idx) {\n            var pi = HeapAsync.getParentIndexOf(idx);\n            return this.heapArray[pi];\n        };\n        /**\n         * Iterator interface\n         */\n        HeapAsync.prototype[Symbol.iterator] = function () {\n            return __generator$1(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this.length) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.pop()];\n                    case 1:\n                        _a.sent();\n                        return [3 /*break*/, 0];\n                    case 2: return [2 /*return*/];\n                }\n            });\n        };\n        /**\n         * Returns an iterator. To comply with Java interface.\n         */\n        HeapAsync.prototype.iterator = function () {\n            return this;\n        };\n        /**\n         * Limit heap size if needed\n         */\n        HeapAsync.prototype._applyLimit = function () {\n            if (this._limit && this._limit < this.heapArray.length) {\n                var rm = this.heapArray.length - this._limit;\n                // It's much faster than splice\n                while (rm) {\n                    this.heapArray.pop();\n                    --rm;\n                }\n            }\n        };\n        /**\n         * Return the bottom (lowest value) N elements of the heap, without corner cases, unsorted\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        HeapAsync.prototype._bottomN_push = function (n) {\n            return __awaiter(this, void 0, void 0, function () {\n                var bottomHeap, startAt, parentStartAt, indices, i, arr, i;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            bottomHeap = new HeapAsync(this.compare);\n                            bottomHeap.limit = n;\n                            bottomHeap.heapArray = this.heapArray.slice(-n);\n                            return [4 /*yield*/, bottomHeap.init()];\n                        case 1:\n                            _a.sent();\n                            startAt = this.heapArray.length - 1 - n;\n                            parentStartAt = HeapAsync.getParentIndexOf(startAt);\n                            indices = [];\n                            for (i = startAt; i > parentStartAt; --i) {\n                                indices.push(i);\n                            }\n                            arr = this.heapArray;\n                            _a.label = 2;\n                        case 2:\n                            if (!indices.length) return [3 /*break*/, 6];\n                            i = indices.shift();\n                            return [4 /*yield*/, this.compare(arr[i], bottomHeap.peek())];\n                        case 3:\n                            if (!((_a.sent()) > 0)) return [3 /*break*/, 5];\n                            return [4 /*yield*/, bottomHeap.replace(arr[i])];\n                        case 4:\n                            _a.sent();\n                            if (i % 2) {\n                                indices.push(HeapAsync.getParentIndexOf(i));\n                            }\n                            _a.label = 5;\n                        case 5: return [3 /*break*/, 2];\n                        case 6: return [2 /*return*/, bottomHeap.toArray()];\n                    }\n                });\n            });\n        };\n        /**\n         * Move a node to a new index, switching places\n         * @param  {Number} j First node index\n         * @param  {Number} k Another node index\n         */\n        HeapAsync.prototype._moveNode = function (j, k) {\n            var _a;\n            _a = __read$1([this.heapArray[k], this.heapArray[j]], 2), this.heapArray[j] = _a[0], this.heapArray[k] = _a[1];\n        };\n        /**\n         * Move a node down the tree (to the leaves) to find a place where the heap is sorted.\n         * @param  {Number} i Index of the node\n         */\n        HeapAsync.prototype._sortNodeDown = function (i) {\n            return __awaiter(this, void 0, void 0, function () {\n                var moveIt, self, getPotentialParent, childrenIdx, bestChildIndex, j, bestChild, _a;\n                var _this = this;\n                return __generator$1(this, function (_b) {\n                    switch (_b.label) {\n                        case 0:\n                            moveIt = i < this.heapArray.length - 1;\n                            self = this.heapArray[i];\n                            getPotentialParent = function (best, j) { return __awaiter(_this, void 0, void 0, function () {\n                                var _a;\n                                return __generator$1(this, function (_b) {\n                                    switch (_b.label) {\n                                        case 0:\n                                            _a = this.heapArray.length > j;\n                                            if (!_a) return [3 /*break*/, 2];\n                                            return [4 /*yield*/, this.compare(this.heapArray[j], this.heapArray[best])];\n                                        case 1:\n                                            _a = (_b.sent()) < 0;\n                                            _b.label = 2;\n                                        case 2:\n                                            if (_a) {\n                                                best = j;\n                                            }\n                                            return [2 /*return*/, best];\n                                    }\n                                });\n                            }); };\n                            _b.label = 1;\n                        case 1:\n                            if (!moveIt) return [3 /*break*/, 8];\n                            childrenIdx = HeapAsync.getChildrenIndexOf(i);\n                            bestChildIndex = childrenIdx[0];\n                            j = 1;\n                            _b.label = 2;\n                        case 2:\n                            if (!(j < childrenIdx.length)) return [3 /*break*/, 5];\n                            return [4 /*yield*/, getPotentialParent(bestChildIndex, childrenIdx[j])];\n                        case 3:\n                            bestChildIndex = _b.sent();\n                            _b.label = 4;\n                        case 4:\n                            ++j;\n                            return [3 /*break*/, 2];\n                        case 5:\n                            bestChild = this.heapArray[bestChildIndex];\n                            _a = typeof bestChild !== 'undefined';\n                            if (!_a) return [3 /*break*/, 7];\n                            return [4 /*yield*/, this.compare(self, bestChild)];\n                        case 6:\n                            _a = (_b.sent()) > 0;\n                            _b.label = 7;\n                        case 7:\n                            if (_a) {\n                                this._moveNode(i, bestChildIndex);\n                                i = bestChildIndex;\n                            }\n                            else {\n                                moveIt = false;\n                            }\n                            return [3 /*break*/, 1];\n                        case 8: return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        /**\n         * Move a node up the tree (to the root) to find a place where the heap is sorted.\n         * @param  {Number} i Index of the node\n         */\n        HeapAsync.prototype._sortNodeUp = function (i) {\n            return __awaiter(this, void 0, void 0, function () {\n                var moveIt, pi, _a;\n                return __generator$1(this, function (_b) {\n                    switch (_b.label) {\n                        case 0:\n                            moveIt = i > 0;\n                            _b.label = 1;\n                        case 1:\n                            if (!moveIt) return [3 /*break*/, 4];\n                            pi = HeapAsync.getParentIndexOf(i);\n                            _a = pi >= 0;\n                            if (!_a) return [3 /*break*/, 3];\n                            return [4 /*yield*/, this.compare(this.heapArray[pi], this.heapArray[i])];\n                        case 2:\n                            _a = (_b.sent()) > 0;\n                            _b.label = 3;\n                        case 3:\n                            if (_a) {\n                                this._moveNode(i, pi);\n                                i = pi;\n                            }\n                            else {\n                                moveIt = false;\n                            }\n                            return [3 /*break*/, 1];\n                        case 4: return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        /**\n         * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n         * Implementation: push.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        HeapAsync.prototype._topN_push = function (n) {\n            return __awaiter(this, void 0, void 0, function () {\n                var topHeap, indices, arr, i;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            topHeap = new HeapAsync(this._invertedCompare);\n                            topHeap.limit = n;\n                            indices = [0];\n                            arr = this.heapArray;\n                            _a.label = 1;\n                        case 1:\n                            if (!indices.length) return [3 /*break*/, 7];\n                            i = indices.shift();\n                            if (!(i < arr.length)) return [3 /*break*/, 6];\n                            if (!(topHeap.length < n)) return [3 /*break*/, 3];\n                            return [4 /*yield*/, topHeap.push(arr[i])];\n                        case 2:\n                            _a.sent();\n                            indices.push.apply(indices, __spreadArray$1([], __read$1(HeapAsync.getChildrenIndexOf(i)), false));\n                            return [3 /*break*/, 6];\n                        case 3: return [4 /*yield*/, this.compare(arr[i], topHeap.peek())];\n                        case 4:\n                            if (!((_a.sent()) < 0)) return [3 /*break*/, 6];\n                            return [4 /*yield*/, topHeap.replace(arr[i])];\n                        case 5:\n                            _a.sent();\n                            indices.push.apply(indices, __spreadArray$1([], __read$1(HeapAsync.getChildrenIndexOf(i)), false));\n                            _a.label = 6;\n                        case 6: return [3 /*break*/, 1];\n                        case 7: return [2 /*return*/, topHeap.toArray()];\n                    }\n                });\n            });\n        };\n        /**\n         * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n         * Implementation: init + push.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        HeapAsync.prototype._topN_fill = function (n) {\n            return __awaiter(this, void 0, void 0, function () {\n                var heapArray, topHeap, branch, indices, i, i;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            heapArray = this.heapArray;\n                            topHeap = new HeapAsync(this._invertedCompare);\n                            topHeap.limit = n;\n                            topHeap.heapArray = heapArray.slice(0, n);\n                            return [4 /*yield*/, topHeap.init()];\n                        case 1:\n                            _a.sent();\n                            branch = HeapAsync.getParentIndexOf(n - 1) + 1;\n                            indices = [];\n                            for (i = branch; i < n; ++i) {\n                                indices.push.apply(indices, __spreadArray$1([], __read$1(HeapAsync.getChildrenIndexOf(i).filter(function (l) { return l < heapArray.length; })), false));\n                            }\n                            if ((n - 1) % 2) {\n                                indices.push(n);\n                            }\n                            _a.label = 2;\n                        case 2:\n                            if (!indices.length) return [3 /*break*/, 6];\n                            i = indices.shift();\n                            if (!(i < heapArray.length)) return [3 /*break*/, 5];\n                            return [4 /*yield*/, this.compare(heapArray[i], topHeap.peek())];\n                        case 3:\n                            if (!((_a.sent()) < 0)) return [3 /*break*/, 5];\n                            return [4 /*yield*/, topHeap.replace(heapArray[i])];\n                        case 4:\n                            _a.sent();\n                            indices.push.apply(indices, __spreadArray$1([], __read$1(HeapAsync.getChildrenIndexOf(i)), false));\n                            _a.label = 5;\n                        case 5: return [3 /*break*/, 2];\n                        case 6: return [2 /*return*/, topHeap.toArray()];\n                    }\n                });\n            });\n        };\n        /**\n         * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n         * Implementation: heap.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        HeapAsync.prototype._topN_heap = function (n) {\n            return __awaiter(this, void 0, void 0, function () {\n                var topHeap, result, i, _a, _b;\n                return __generator$1(this, function (_c) {\n                    switch (_c.label) {\n                        case 0:\n                            topHeap = this.clone();\n                            result = [];\n                            i = 0;\n                            _c.label = 1;\n                        case 1:\n                            if (!(i < n)) return [3 /*break*/, 4];\n                            _b = (_a = result).push;\n                            return [4 /*yield*/, topHeap.pop()];\n                        case 2:\n                            _b.apply(_a, [(_c.sent())]);\n                            _c.label = 3;\n                        case 3:\n                            ++i;\n                            return [3 /*break*/, 1];\n                        case 4: return [2 /*return*/, result];\n                    }\n                });\n            });\n        };\n        /**\n         * Return index of the top element\n         * @param list\n         */\n        HeapAsync.prototype._topIdxOf = function (list) {\n            return __awaiter(this, void 0, void 0, function () {\n                var idx, top, i, comp;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!list.length) {\n                                return [2 /*return*/, -1];\n                            }\n                            idx = 0;\n                            top = list[idx];\n                            i = 1;\n                            _a.label = 1;\n                        case 1:\n                            if (!(i < list.length)) return [3 /*break*/, 4];\n                            return [4 /*yield*/, this.compare(list[i], top)];\n                        case 2:\n                            comp = _a.sent();\n                            if (comp < 0) {\n                                idx = i;\n                                top = list[i];\n                            }\n                            _a.label = 3;\n                        case 3:\n                            ++i;\n                            return [3 /*break*/, 1];\n                        case 4: return [2 /*return*/, idx];\n                    }\n                });\n            });\n        };\n        /**\n         * Return the top element\n         * @param list\n         */\n        HeapAsync.prototype._topOf = function () {\n            var list = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                list[_i] = arguments[_i];\n            }\n            return __awaiter(this, void 0, void 0, function () {\n                var heap;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            heap = new HeapAsync(this.compare);\n                            return [4 /*yield*/, heap.init(list)];\n                        case 1:\n                            _a.sent();\n                            return [2 /*return*/, heap.peek()];\n                    }\n                });\n            });\n        };\n        return HeapAsync;\n    }());\n\n    var __generator = (undefined && undefined.__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 (g && (g = 0, op[0] && (_ = 0)), _) 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    };\n    var __read = (undefined && undefined.__read) || function (o, n) {\n        var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n        if (!m) return o;\n        var i = m.call(o), r, ar = [], e;\n        try {\n            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n        }\n        catch (error) { e = { error: error }; }\n        finally {\n            try {\n                if (r && !r.done && (m = i[\"return\"])) m.call(i);\n            }\n            finally { if (e) throw e.error; }\n        }\n        return ar;\n    };\n    var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n        if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n            if (ar || !(i in from)) {\n                if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                ar[i] = from[i];\n            }\n        }\n        return to.concat(ar || Array.prototype.slice.call(from));\n    };\n    var toInt = function (n) { return ~~n; };\n    /**\n     * Heap\n     * @type {Class}\n     */\n    var Heap = /** @class */ (function () {\n        /**\n         * Heap instance constructor.\n         * @param  {Function} compare Optional comparison function, defaults to Heap.minComparator<number>\n         */\n        function Heap(compare) {\n            if (compare === void 0) { compare = Heap.minComparator; }\n            var _this = this;\n            this.compare = compare;\n            this.heapArray = [];\n            this._limit = 0;\n            /**\n             * Alias of {@link add}\n             * @see add\n             */\n            this.offer = this.add;\n            /**\n             * Alias of {@link peek}\n             * @see peek\n             */\n            this.element = this.peek;\n            /**\n             * Alias of {@link pop}\n             * @see pop\n             */\n            this.poll = this.pop;\n            /**\n             * Alias of {@link clear}\n             * @see clear\n             */\n            this.removeAll = this.clear;\n            /**\n             * Returns the inverse to the comparison function.\n             * @return {Function}\n             */\n            this._invertedCompare = function (a, b) {\n                return -1 * _this.compare(a, b);\n            };\n        }\n        /*\n                  Static methods\n         */\n        /**\n         * Gets children indices for given index.\n         * @param  {Number} idx     Parent index\n         * @return {Array(Number)}  Array of children indices\n         */\n        Heap.getChildrenIndexOf = function (idx) {\n            return [idx * 2 + 1, idx * 2 + 2];\n        };\n        /**\n         * Gets parent index for given index.\n         * @param  {Number} idx  Children index\n         * @return {Number | undefined}      Parent index, -1 if idx is 0\n         */\n        Heap.getParentIndexOf = function (idx) {\n            if (idx <= 0) {\n                return -1;\n            }\n            var whichChildren = idx % 2 ? 1 : 2;\n            return Math.floor((idx - whichChildren) / 2);\n        };\n        /**\n         * Gets sibling index for given index.\n         * @param  {Number} idx  Children index\n         * @return {Number | undefined}      Sibling index, -1 if idx is 0\n         */\n        Heap.getSiblingIndexOf = function (idx) {\n            if (idx <= 0) {\n                return -1;\n            }\n            var whichChildren = idx % 2 ? 1 : -1;\n            return idx + whichChildren;\n        };\n        /**\n         * Min heap comparison function, default.\n         * @param  {any} a     First element\n         * @param  {any} b     Second element\n         * @return {Number}    0 if they're equal, positive if `a` goes up, negative if `b` goes up\n         */\n        Heap.minComparator = function (a, b) {\n            if (a > b) {\n                return 1;\n            }\n            else if (a < b) {\n                return -1;\n            }\n            else {\n                return 0;\n            }\n        };\n        /**\n         * Max heap comparison function.\n         * @param  {any} a     First element\n         * @param  {any} b     Second element\n         * @return {Number}    0 if they're equal, positive if `a` goes up, negative if `b` goes up\n         */\n        Heap.maxComparator = function (a, b) {\n            if (b > a) {\n                return 1;\n            }\n            else if (b < a) {\n                return -1;\n            }\n            else {\n                return 0;\n            }\n        };\n        /**\n         * Min number heap comparison function, default.\n         * @param  {Number} a     First element\n         * @param  {Number} b     Second element\n         * @return {Number}    0 if they're equal, positive if `a` goes up, negative if `b` goes up\n         */\n        Heap.minComparatorNumber = function (a, b) {\n            return a - b;\n        };\n        /**\n         * Max number heap comparison function.\n         * @param  {Number} a     First element\n         * @param  {Number} b     Second element\n         * @return {Number}    0 if they're equal, positive if `a` goes up, negative if `b` goes up\n         */\n        Heap.maxComparatorNumber = function (a, b) {\n            return b - a;\n        };\n        /**\n         * Default equality function.\n         * @param  {any} a    First element\n         * @param  {any} b    Second element\n         * @return {Boolean}  True if equal, false otherwise\n         */\n        Heap.defaultIsEqual = function (a, b) {\n            return a === b;\n        };\n        /**\n         * Prints a heap.\n         * @param  {Heap} heap Heap to be printed\n         * @returns {String}\n         */\n        Heap.print = function (heap) {\n            function deep(i) {\n                var pi = Heap.getParentIndexOf(i);\n                return Math.floor(Math.log2(pi + 1));\n            }\n            function repeat(str, times) {\n                var out = '';\n                for (; times > 0; --times) {\n                    out += str;\n                }\n                return out;\n            }\n            var node = 0;\n            var lines = [];\n            var maxLines = deep(heap.length - 1) + 2;\n            var maxLength = 0;\n            while (node < heap.length) {\n                var i = deep(node) + 1;\n                if (node === 0) {\n                    i = 0;\n                }\n                // Text representation\n                var nodeText = String(heap.get(node));\n                if (nodeText.length > maxLength) {\n                    maxLength = nodeText.length;\n                }\n                // Add to line\n                lines[i] = lines[i] || [];\n                lines[i].push(nodeText);\n                node += 1;\n            }\n            return lines\n                .map(function (line, i) {\n                var times = Math.pow(2, maxLines - i) - 1;\n                return (repeat(' ', Math.floor(times / 2) * maxLength) +\n                    line\n                        .map(function (el) {\n                        // centered\n                        var half = (maxLength - el.length) / 2;\n                        return repeat(' ', Math.ceil(half)) + el + repeat(' ', Math.floor(half));\n                    })\n                        .join(repeat(' ', times * maxLength)));\n            })\n                .join('\\n');\n        };\n        /*\n                  Python style\n         */\n        /**\n         * Converts an array into an array-heap, in place\n         * @param  {Array}    arr      Array to be modified\n         * @param  {Function} compare  Optional compare function\n         * @return {Heap}              For convenience, it returns a Heap instance\n         */\n        Heap.heapify = function (arr, compare) {\n            var heap = new Heap(compare);\n            heap.heapArray = arr;\n            heap.init();\n            return heap;\n        };\n        /**\n         * Extract the peek of an array-heap\n         * @param  {Array}    heapArr  Array to be modified, should be a heap\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Returns the extracted peek\n         */\n        Heap.heappop = function (heapArr, compare) {\n            var heap = new Heap(compare);\n            heap.heapArray = heapArr;\n            return heap.pop();\n        };\n        /**\n         * Pushes a item into an array-heap\n         * @param  {Array}    heapArr  Array to be modified, should be a heap\n         * @param  {any}      item     Item to push\n         * @param  {Function} compare  Optional compare function\n         */\n        Heap.heappush = function (heapArr, item, compare) {\n            var heap = new Heap(compare);\n            heap.heapArray = heapArr;\n            heap.push(item);\n        };\n        /**\n         * Push followed by pop, faster\n         * @param  {Array}    heapArr  Array to be modified, should be a heap\n         * @param  {any}      item     Item to push\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Returns the extracted peek\n         */\n        Heap.heappushpop = function (heapArr, item, compare) {\n            var heap = new Heap(compare);\n            heap.heapArray = heapArr;\n            return heap.pushpop(item);\n        };\n        /**\n         * Replace peek with item\n         * @param  {Array}    heapArr  Array to be modified, should be a heap\n         * @param  {any}      item     Item as replacement\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Returns the extracted peek\n         */\n        Heap.heapreplace = function (heapArr, item, compare) {\n            var heap = new Heap(compare);\n            heap.heapArray = heapArr;\n            return heap.replace(item);\n        };\n        /**\n         * Return the `n` most valuable elements of a heap-like Array\n         * @param  {Array}    heapArr  Array, should be an array-heap\n         * @param  {number}   n        Max number of elements\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Elements\n         */\n        Heap.heaptop = function (heapArr, n, compare) {\n            if (n === void 0) { n = 1; }\n            var heap = new Heap(compare);\n            heap.heapArray = heapArr;\n            return heap.top(n);\n        };\n        /**\n         * Return the `n` least valuable elements of a heap-like Array\n         * @param  {Array}    heapArr  Array, should be an array-heap\n         * @param  {number}   n        Max number of elements\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Elements\n         */\n        Heap.heapbottom = function (heapArr, n, compare) {\n            if (n === void 0) { n = 1; }\n            var heap = new Heap(compare);\n            heap.heapArray = heapArr;\n            return heap.bottom(n);\n        };\n        /**\n         * Return the `n` most valuable elements of an iterable\n         * @param  {number}   n        Max number of elements\n         * @param  {Iterable} Iterable Iterable list of elements\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Elements\n         */\n        Heap.nlargest = function (n, iterable, compare) {\n            var heap = new Heap(compare);\n            heap.heapArray = __spreadArray([], __read(iterable), false);\n            heap.init();\n            return heap.top(n);\n        };\n        /**\n         * Return the `n` least valuable elements of an iterable\n         * @param  {number}   n        Max number of elements\n         * @param  {Iterable} Iterable Iterable list of elements\n         * @param  {Function} compare  Optional compare function\n         * @return {any}               Elements\n         */\n        Heap.nsmallest = function (n, iterable, compare) {\n            var heap = new Heap(compare);\n            heap.heapArray = __spreadArray([], __read(iterable), false);\n            heap.init();\n            return heap.bottom(n);\n        };\n        /*\n                  Instance methods\n         */\n        /**\n         * Adds an element to the heap. Aliases: {@link offer}.\n         * Same as: {@link push}(element).\n         * @param {any} element Element to be added\n         * @return {Boolean} true\n         */\n        Heap.prototype.add = function (element) {\n            this._sortNodeUp(this.heapArray.push(element) - 1);\n            this._applyLimit();\n            return true;\n        };\n        /**\n         * Adds an array of elements to the heap.\n         * Similar as: {@link push}(element, element, ...).\n         * @param {Array} elements Elements to be added\n         * @return {Boolean} true\n         */\n        Heap.prototype.addAll = function (elements) {\n            var _a;\n            var i = this.length;\n            (_a = this.heapArray).push.apply(_a, __spreadArray([], __read(elements), false));\n            for (var l = this.length; i < l; ++i) {\n                this._sortNodeUp(i);\n            }\n            this._applyLimit();\n            return true;\n        };\n        /**\n         * Return the bottom (lowest value) N elements of the heap.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        Heap.prototype.bottom = function (n) {\n            if (n === void 0) { n = 1; }\n            if (this.heapArray.length === 0 || n <= 0) {\n                // Nothing to do\n                return [];\n            }\n            else if (this.heapArray.length === 1) {\n                // Just the peek\n                return [this.heapArray[0]];\n            }\n            else if (n >= this.heapArray.length) {\n                // The whole heap\n                return __spreadArray([], __read(this.heapArray), false);\n            }\n            else {\n                // Some elements\n                return this._bottomN_push(~~n);\n            }\n        };\n        /**\n         * Check if the heap is sorted, useful for testing purposes.\n         * @return {Undefined | Element}  Returns an element if something wrong is found, otherwise it's undefined\n         */\n        Heap.prototype.check = function () {\n            var _this = this;\n            return this.heapArray.find(function (el, j) { return !!_this.getChildrenOf(j).find(function (ch) { return _this.compare(el, ch) > 0; }); });\n        };\n        /**\n         * Remove all of the elements from this heap.\n         */\n        Heap.prototype.clear = function () {\n            this.heapArray = [];\n        };\n        /**\n         * Clone this heap\n         * @return {Heap}\n         */\n        Heap.prototype.clone = function () {\n            var cloned = new Heap(this.comparator());\n            cloned.heapArray = this.toArray();\n            cloned._limit = this._limit;\n            return cloned;\n        };\n        /**\n         * Returns the comparison function.\n         * @return {Function}\n         */\n        Heap.prototype.comparator = function () {\n            return this.compare;\n        };\n        /**\n         * Returns true if this queue contains the specified element.\n         * @param  {any}      o   Element to be found\n         * @param  {Function} callbackFn  Optional comparison function, receives (element, needle)\n         * @return {Boolean}\n         */\n        Heap.prototype.contains = function (o, callbackFn) {\n            if (callbackFn === void 0) { callbackFn = Heap.defaultIsEqual; }\n            return this.indexOf(o, callbackFn) !== -1;\n        };\n        /**\n         * Initialize a heap, sorting nodes\n         * @param  {Array} array Optional initial state array\n         */\n        Heap.prototype.init = function (array) {\n            if (array) {\n                this.heapArray = __spreadArray([], __read(array), false);\n            }\n            for (var i = Math.floor(this.heapArray.length); i >= 0; --i) {\n                this._sortNodeDown(i);\n            }\n            this._applyLimit();\n        };\n        /**\n         * Test if the heap has no elements.\n         * @return {Boolean} True if no elements on the heap\n         */\n        Heap.prototype.isEmpty = function () {\n            return this.length === 0;\n        };\n        /**\n         * Get the index of the first occurrence of the element in the heap (using the comparator).\n         * @param  {any}      element    Element to be found\n         * @param  {Function} callbackFn Optional comparison function, receives (element, needle)\n         * @return {Number}              Index or -1 if not found\n         */\n        Heap.prototype.indexOf = function (element, callbackFn) {\n            if (callbackFn === void 0) { callbackFn = Heap.defaultIsEqual; }\n            if (this.heapArray.length === 0) {\n                return -1;\n            }\n            var indexes = [];\n            var currentIndex = 0;\n            while (currentIndex < this.heapArray.length) {\n                var currentElement = this.heapArray[currentIndex];\n                if (callbackFn(currentElement, element)) {\n                    return currentIndex;\n                }\n                else if (this.compare(currentElement, element) <= 0) {\n                    indexes.push.apply(indexes, __spreadArray([], __read(Heap.getChildrenIndexOf(currentIndex)), false));\n                }\n                currentIndex = indexes.shift() || this.heapArray.length;\n            }\n            return -1;\n        };\n        /**\n         * Get the indexes of the every occurrence of the element in the heap (using the comparator).\n         * @param  {any}      element    Element to be found\n         * @param  {Function} callbackFn Optional comparison function, receives (element, needle)\n         * @return {Array}               Array of indexes or empty array if not found\n         */\n        Heap.prototype.indexOfEvery = function (element, callbackFn) {\n            if (callbackFn === void 0) { callbackFn = Heap.defaultIsEqual; }\n            if (this.heapArray.length === 0) {\n                return [];\n            }\n            var indexes = [];\n            var foundIndexes = [];\n            var currentIndex = 0;\n            while (currentIndex < this.heapArray.length) {\n                var currentElement = this.heapArray[currentIndex];\n                if (callbackFn(currentElement, element)) {\n                    foundIndexes.push(currentIndex);\n                    indexes.push.apply(indexes, __spreadArray([], __read(Heap.getChildrenIndexOf(currentIndex)), false));\n                }\n                else if (this.compare(currentElement, element) <= 0) {\n                    indexes.push.apply(indexes, __spreadArray([], __read(Heap.getChildrenIndexOf(currentIndex)), false));\n                }\n                currentIndex = indexes.shift() || this.heapArray.length;\n            }\n            return foundIndexes;\n        };\n        /**\n         * Get the leafs of the tree (no children nodes).\n         * See also: {@link getChildrenOf} and {@link bottom}.\n         * @return {Array}\n         * @see getChildrenOf\n         * @see bottom\n         */\n        Heap.prototype.leafs = function () {\n            if (this.heapArray.length === 0) {\n                return [];\n            }\n            var pi = Heap.getParentIndexOf(this.heapArray.length - 1);\n            return this.heapArray.slice(pi + 1);\n        };\n        Object.defineProperty(Heap.prototype, \"length\", {\n            /**\n             * Length of the heap. Aliases: {@link size}.\n             * @return {Number}\n             * @see size\n             */\n            get: function () {\n                return this.heapArray.length;\n            },\n            enumerable: false,\n            configurable: true\n        });\n        Object.defineProperty(Heap.prototype, \"limit\", {\n            /**\n             * Get length limit of the heap.\n             * Use {@link setLimit} or {@link limit} to set the limit.\n             * @return {Number}\n             * @see setLimit\n             */\n            get: function () {\n                return this._limit;\n            },\n            /**\n             * Set length limit of the heap. Same as using {@link setLimit}.\n             * @description If the heap is longer than the limit, the needed amount of leafs are removed.\n             * @param {Number} _l Limit, defaults to 0 (no limit). Negative, Infinity, or NaN values set the limit to 0.\n             * @see setLimit\n             */\n            set: function (_l) {\n                if (_l < 0 || isNaN(_l)) {\n                    // NaN, negative, and Infinity are treated as 0\n                    this._limit = 0;\n                }\n                else {\n                    // truncating a floating-point number to an integer\n                    this._limit = ~~_l;\n                }\n                this._applyLimit();\n            },\n            enumerable: false,\n            configurable: true\n        });\n        /**\n         * Set length limit of the heap.\n         * Same as assigning to {@link limit} but returns NaN if the value was invalid.\n         * @param {Number} _l Limit. Negative, Infinity, or NaN values set the limit to 0.\n         * @return {Number} The limit or NaN if the value was negative, or NaN.\n         * @see limit\n         */\n        Heap.prototype.setLimit = function (_l) {\n            this.limit = _l;\n            if (_l < 0 || isNaN(_l)) {\n                return NaN;\n            }\n            else {\n                return this._limit;\n            }\n        };\n        /**\n         * Top node. Aliases: {@link element}.\n         * Same as: {@link top}(1)[0].\n         * @return {any} Top node\n         * @see top\n         */\n        Heap.prototype.peek = function () {\n            return this.heapArray[0];\n        };\n        /**\n         * Extract the top node (root). Aliases: {@link poll}.\n         * @return {any} Extracted top node, undefined if empty\n         */\n        Heap.prototype.pop = function () {\n            var last = this.heapArray.pop();\n            if (this.length > 0 && last !== undefined) {\n                return this.replace(last);\n            }\n            return last;\n        };\n        /**\n         * Pushes element(s) to the heap.\n         * See also: {@link add} and {@link addAll}.\n         * @param  {...any} elements Elements to insert\n         * @return {Boolean} True if elements are present\n         */\n        Heap.prototype.push = function () {\n            var elements = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                elements[_i] = arguments[_i];\n            }\n            if (elements.length < 1) {\n                return false;\n            }\n            else if (elements.length === 1) {\n                return this.add(elements[0]);\n            }\n            else {\n                return this.addAll(elements);\n            }\n        };\n        /**\n         * Same as push & pop in sequence, but faster\n         * @param  {any} element Element to insert\n         * @return {any}  Extracted top node\n         */\n        Heap.prototype.pushpop = function (element) {\n            var _a;\n            if (this.compare(this.heapArray[0], element) < 0) {\n                _a = __read([this.heapArray[0], element], 2), element = _a[0], this.heapArray[0] = _a[1];\n                this._sortNodeDown(0);\n            }\n            return element;\n        };\n        /**\n         * Remove the first occurrence of an element from the heap.\n         * @param  {any}   o      Element to be found\n         * @param  {Function} callbackFn  Optional equality function, receives (element, needle)\n         * @return {Boolean}      True if the heap was modified\n         */\n        Heap.prototype.remove = function (o, callbackFn) {\n            if (callbackFn === void 0) { callbackFn = Heap.defaultIsEqual; }\n            if (this.length > 0) {\n                if (o === undefined) {\n                    this.pop();\n                    return true;\n                }\n                else {\n                    var idx = this.indexOf(o, callbackFn);\n                    if (idx >= 0) {\n                        if (idx === 0) {\n                            this.pop();\n                        }\n                        else if (idx === this.length - 1) {\n                            this.heapArray.pop();\n                        }\n                        else {\n                            this.heapArray.splice(idx, 1, this.heapArray.pop());\n                            this._sortNodeUp(idx);\n                            this._sortNodeDown(idx);\n                        }\n                        return true;\n                    }\n                }\n            }\n            return false;\n        };\n        /**\n         * Pop the current peek value, and add the new item.\n         * @param  {any} element  Element to replace peek\n         * @return {any}         Old peek\n         */\n        Heap.prototype.replace = function (element) {\n            var peek = this.heapArray[0];\n            this.heapArray[0] = element;\n            this._sortNodeDown(0);\n            return peek;\n        };\n        /**\n         * Size of the heap\n         * @return {Number}\n         */\n        Heap.prototype.size = function () {\n            return this.length;\n        };\n        /**\n         * Return the top (highest value) N elements of the heap.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}    Array of length <= N.\n         */\n        Heap.prototype.top = function (n) {\n            if (n === void 0) { n = 1; }\n            if (this.heapArray.length === 0 || n <= 0) {\n                // Nothing to do\n                return [];\n            }\n            else if (this.heapArray.length === 1 || n === 1) {\n                // Just the peek\n                return [this.heapArray[0]];\n            }\n            else if (n >= this.heapArray.length) {\n                // The whole peek\n                return __spreadArray([], __read(this.heapArray), false);\n            }\n            else {\n                // Some elements\n                return this._topN_push(~~n);\n            }\n        };\n        /**\n         * Clone the heap's internal array\n         * @return {Array}\n         */\n        Heap.prototype.toArray = function () {\n            return __spreadArray([], __read(this.heapArray), false);\n        };\n        /**\n         * String output, call to Array.prototype.toString()\n         * @return {String}\n         */\n        Heap.prototype.toString = function () {\n            return this.heapArray.toString();\n        };\n        /**\n         * Get the element at the given index.\n         * @param  {Number} i Index to get\n         * @return {any}       Element at that index\n         */\n        Heap.prototype.get = function (i) {\n            return this.heapArray[i];\n        };\n        /**\n         * Get the elements of these node's children\n         * @param  {Number} idx Node index\n         * @return {Array(any)}  Children elements\n         */\n        Heap.prototype.getChildrenOf = function (idx) {\n            var _this = this;\n            return Heap.getChildrenIndexOf(idx)\n                .map(function (i) { return _this.heapArray[i]; })\n                .filter(function (e) { return e !== undefined; });\n        };\n        /**\n         * Get the element of this node's parent\n         * @param  {Number} idx Node index\n         * @return {any}     Parent element\n         */\n        Heap.prototype.getParentOf = function (idx) {\n            var pi = Heap.getParentIndexOf(idx);\n            return this.heapArray[pi];\n        };\n        /**\n         * Iterator interface\n         */\n        Heap.prototype[Symbol.iterator] = function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this.length) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.pop()];\n                    case 1:\n                        _a.sent();\n                        return [3 /*break*/, 0];\n                    case 2: return [2 /*return*/];\n                }\n            });\n        };\n        /**\n         * Returns an iterator. To comply with Java interface.\n         */\n        Heap.prototype.iterator = function () {\n            return this.toArray();\n        };\n        /**\n         * Limit heap size if needed\n         */\n        Heap.prototype._applyLimit = function () {\n            if (this._limit > 0 && this._limit < this.heapArray.length) {\n                var rm = this.heapArray.length - this._limit;\n                // It's much faster than splice\n                while (rm) {\n                    this.heapArray.pop();\n                    --rm;\n                }\n            }\n        };\n        /**\n         * Return the bottom (lowest value) N elements of the heap, without corner cases, unsorted\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        Heap.prototype._bottomN_push = function (n) {\n            // Use an inverted heap\n            var bottomHeap = new Heap(this.compare);\n            bottomHeap.limit = n;\n            bottomHeap.heapArray = this.heapArray.slice(-n);\n            bottomHeap.init();\n            var startAt = this.heapArray.length - 1 - n;\n            var parentStartAt = Heap.getParentIndexOf(startAt);\n            var indices = [];\n            for (var i = startAt; i > parentStartAt; --i) {\n                indices.push(i);\n            }\n            var arr = this.heapArray;\n            while (indices.length) {\n                var i = indices.shift();\n                if (this.compare(arr[i], bottomHeap.peek()) > 0) {\n                    bottomHeap.replace(arr[i]);\n                    if (i % 2) {\n                        indices.push(Heap.getParentIndexOf(i));\n                    }\n                }\n            }\n            return bottomHeap.toArray();\n        };\n        /**\n         * Move a node to a new index, switching places\n         * @param  {Number} j First node index\n         * @param  {Number} k Another node index\n         */\n        Heap.prototype._moveNode = function (j, k) {\n            var _a;\n            _a = __read([this.heapArray[k], this.heapArray[j]], 2), this.heapArray[j] = _a[0], this.heapArray[k] = _a[1];\n        };\n        /**\n         * Move a node down the tree (to the leaves) to find a place where the heap is sorted.\n         * @param  {Number} i Index of the node\n         */\n        Heap.prototype._sortNodeDown = function (i) {\n            var _this = this;\n            var moveIt = i < this.heapArray.length - 1;\n            var self = this.heapArray[i];\n            var getPotentialParent = function (best, j) {\n                if (_this.heapArray.length > j && _this.compare(_this.heapArray[j], _this.heapArray[best]) < 0) {\n                    best = j;\n                }\n                return best;\n            };\n            while (moveIt) {\n                var childrenIdx = Heap.getChildrenIndexOf(i);\n                var bestChildIndex = childrenIdx.reduce(getPotentialParent, childrenIdx[0]);\n                var bestChild = this.heapArray[bestChildIndex];\n                if (typeof bestChild !== 'undefined' && this.compare(self, bestChild) > 0) {\n                    this._moveNode(i, bestChildIndex);\n                    i = bestChildIndex;\n                }\n                else {\n                    moveIt = false;\n                }\n            }\n        };\n        /**\n         * Move a node up the tree (to the root) to find a place where the heap is sorted.\n         * @param  {Number} i Index of the node\n         */\n        Heap.prototype._sortNodeUp = function (i) {\n            var moveIt = i > 0;\n            while (moveIt) {\n                var pi = Heap.getParentIndexOf(i);\n                if (pi >= 0 && this.compare(this.heapArray[pi], this.heapArray[i]) > 0) {\n                    this._moveNode(i, pi);\n                    i = pi;\n                }\n                else {\n                    moveIt = false;\n                }\n            }\n        };\n        /**\n         * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n         * Implementation: push.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        Heap.prototype._topN_push = function (n) {\n            // Use an inverted heap\n            var topHeap = new Heap(this._invertedCompare);\n            topHeap.limit = n;\n            var indices = [0];\n            var arr = this.heapArray;\n            while (indices.length) {\n                var i = indices.shift();\n                if (i < arr.length) {\n                    if (topHeap.length < n) {\n                        topHeap.push(arr[i]);\n                        indices.push.apply(indices, __spreadArray([], __read(Heap.getChildrenIndexOf(i)), false));\n                    }\n                    else if (this.compare(arr[i], topHeap.peek()) < 0) {\n                        topHeap.replace(arr[i]);\n                        indices.push.apply(indices, __spreadArray([], __read(Heap.getChildrenIndexOf(i)), false));\n                    }\n                }\n            }\n            return topHeap.toArray();\n        };\n        /**\n         * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n         * Implementation: init + push.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        Heap.prototype._topN_fill = function (n) {\n            // Use an inverted heap\n            var heapArray = this.heapArray;\n            var topHeap = new Heap(this._invertedCompare);\n            topHeap.limit = n;\n            topHeap.heapArray = heapArray.slice(0, n);\n            topHeap.init();\n            var branch = Heap.getParentIndexOf(n - 1) + 1;\n            var indices = [];\n            for (var i = branch; i < n; ++i) {\n                indices.push.apply(indices, __spreadArray([], __read(Heap.getChildrenIndexOf(i).filter(function (l) { return l < heapArray.length; })), false));\n            }\n            if ((n - 1) % 2) {\n                indices.push(n);\n            }\n            while (indices.length) {\n                var i = indices.shift();\n                if (i < heapArray.length) {\n                    if (this.compare(heapArray[i], topHeap.peek()) < 0) {\n                        topHeap.replace(heapArray[i]);\n                        indices.push.apply(indices, __spreadArray([], __read(Heap.getChildrenIndexOf(i)), false));\n                    }\n                }\n            }\n            return topHeap.toArray();\n        };\n        /**\n         * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n         * Implementation: heap.\n         *\n         * @param  {Number} n  Number of elements.\n         * @return {Array}     Array of length <= N.\n         */\n        Heap.prototype._topN_heap = function (n) {\n            var topHeap = this.clone();\n            var result = [];\n            for (var i = 0; i < n; ++i) {\n                result.push(topHeap.pop());\n            }\n            return result;\n        };\n        /**\n         * Return index of the top element\n         * @param list\n         */\n        Heap.prototype._topIdxOf = function (list) {\n            if (!list.length) {\n                return -1;\n            }\n            var idx = 0;\n            var top = list[idx];\n            for (var i = 1; i < list.length; ++i) {\n                var comp = this.compare(list[i], top);\n                if (comp < 0) {\n                    idx = i;\n                    top = list[i];\n                }\n            }\n            return idx;\n        };\n        /**\n         * Return the top element\n         * @param list\n         */\n        Heap.prototype._topOf = function () {\n            var list = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                list[_i] = arguments[_i];\n            }\n            var heap = new Heap(this.compare);\n            heap.init(list);\n            return heap.peek();\n        };\n        return Heap;\n    }());\n\n    exports.Heap = Heap;\n    exports.HeapAsync = HeapAsync;\n    exports.default = Heap;\n    exports.toInt = toInt;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n", "import { DurableObject } from \"cloudflare:workers\";\nimport { Context } from \"./context\";\nimport {\n\tINSTANCE_METADATA,\n\tInstanceEvent,\n\tInstanceStatus,\n\tinstanceStatusName,\n\tInstanceTrigger,\n\ttoInstanceStatus,\n} from \"./instance\";\nimport { computeHash } from \"./lib/cache\";\nimport {\n\tABORT_REASONS,\n\tcreateWorkflowError,\n\tisAbortError,\n\tPreservedNonRetryableError,\n\tshouldPreserveNonRetryableError,\n\tstepNotFoundError,\n\tWorkflowFatalError,\n} from \"./lib/errors\";\nimport {\n\tENGINE_TIMEOUT,\n\tGracePeriodSemaphore,\n\tstartGracePeriod,\n} from \"./lib/gracePeriodSemaphore\";\nimport {\n\treadAndClearRestartFromStep,\n\tresolveGroupKeysToWipe,\n\tstoreRestartFromStep,\n\twipeRestartState,\n} from \"./lib/restart\";\nimport { clearRollbackRegistry, executeRollbacks } from \"./lib/rollback\";\nimport {\n\tcreateReplayReadableStream,\n\tgetInvalidStoredStreamOutputError,\n\tgetStoredStreamOutputPreview,\n\tStreamOutputState,\n} from \"./lib/streams\";\nimport { TimePriorityQueue } from \"./lib/timePriorityQueue\";\nimport { MODIFIER_KEYS, WorkflowInstanceModifier } from \"./modifier\";\nimport type { RestartFromStep } from \"./binding\";\nimport type { Event } from \"./context\";\nimport type { InstanceMetadata, RawInstanceLog } from \"./instance\";\nimport type { RollbackRegistryEntry } from \"./lib/rollback\";\nimport type { StreamOutputMeta } from \"./lib/streams\";\nimport type {\n\tWorkflowEntrypoint,\n\tWorkflowEvent,\n\tWorkflowStep,\n} from \"cloudflare:workers\";\n\ninterface Env {\n\tENGINE: DurableObjectNamespace<Engine>;\n\tUSER_WORKFLOW: WorkflowEntrypoint;\n\tSTEP_LIMIT?: string; // JSON-encoded number from miniflare binding\n}\n\nexport type DatabaseWorkflow = {\n\tname: string;\n\tid: string;\n\tcreated_on: string;\n\tmodified_on: string;\n\tscript_name: string;\n\tclass_name: string | null;\n\ttriggered_on: string | null;\n};\n\nexport type DatabaseVersion = {\n\tid: string;\n\tclass_name: string;\n\tcreated_on: string;\n\tmodified_on: string;\n\tworkflow_id: string;\n\tmutable_pipeline_id: string;\n};\n\nexport type DatabaseInstance = {\n\tid: string;\n\tcreated_on: string;\n\tmodified_on: string;\n\tworkflow_id: string;\n\tversion_id: string;\n\tstatus: InstanceStatus;\n\tstarted_on: string | null;\n\tended_on: string | null;\n};\n\nexport type Log = {\n\tevent: InstanceEvent;\n\tgroup: string | null;\n\ttarget: string | null;\n\tmetadata: {\n\t\tresult: string;\n\t\tpayload: string;\n\t\terror: { name: string; message: string };\n\t};\n};\n\nexport type EngineLogs = {\n\tlogs: Log[];\n};\n\nconst ENGINE_STATUS_KEY = \"ENGINE_STATUS\";\n\nconst EVENT_MAP_PREFIX = \"EVENT_MAP\";\n\nexport const DEFAULT_STEP_LIMIT = 10_000;\n\nconst PAUSE_DATETIME = \"PAUSE_DATETIME\";\n\n/**\n * JSON.stringify replacer that converts TypedArrays and ArrayBuffers to a\n * human-readable description. Without this, JSON.stringify(Uint8Array) encodes\n * each byte as a numeric key ({\"0\":1,\"1\":2,...}), producing a string ~10x larger\n * than byteLength and causing SQLITE_TOOBIG for outputs above ~170 KB.\n * The replacer is called recursively by JSON.stringify, so nested binary values\n * inside objects or arrays are also handled.\n */\nfunction binaryReplacer(_key: string, value: unknown): unknown {\n\tif (value instanceof ArrayBuffer) {\n\t\treturn `[ArrayBuffer(${value.byteLength} bytes)]`;\n\t}\n\tif (ArrayBuffer.isView(value) && !(value instanceof DataView)) {\n\t\treturn `[${value.constructor.name}(${(value as ArrayBufferView).byteLength} bytes)]`;\n\t}\n\treturn value;\n}\n\nfunction isStepSuccessEvent(event: InstanceEvent): boolean {\n\treturn (\n\t\tevent === InstanceEvent.STEP_SUCCESS ||\n\t\tevent === InstanceEvent.ROLLBACK_STEP_SUCCESS\n\t);\n}\n\nexport class Engine extends DurableObject<Env> {\n\tlogs: Array<unknown> = [];\n\n\tisRunning: boolean = false;\n\taccountId: number | undefined;\n\tinstanceId: string | undefined;\n\tworkflowName: string | undefined;\n\ttimeoutHandler: GracePeriodSemaphore;\n\tpriorityQueue: TimePriorityQueue | undefined;\n\tstepLimit: number;\n\tengineAbortController: AbortController = new AbortController();\n\tpauseController: AbortController = new AbortController();\n\n\twaiters: Map<\n\t\tstring,\n\t\tArray<\n\t\t\t[cacheKey: string, resolve: (event: Event | PromiseLike<Event>) => void]\n\t\t>\n\t> = new Map();\n\teventMap: Map<string, Array<Event>> = new Map();\n\n\t// Not persisted: rollback fns are RPC stubs, dead across DO restarts.\n\trollbackRegistry: Map<string, RollbackRegistryEntry> = new Map();\n\n\tconstructor(state: DurableObjectState, env: Env) {\n\t\tsuper(state, env);\n\n\t\tthis.stepLimit = env.STEP_LIMIT\n\t\t\t? JSON.parse(env.STEP_LIMIT)\n\t\t\t: DEFAULT_STEP_LIMIT;\n\n\t\tvoid this.ctx.blockConcurrencyWhile(async () => {\n\t\t\tthis.ctx.storage.transactionSync(() => {\n\t\t\t\ttry {\n\t\t\t\t\tthis.ctx.storage.sql.exec(`\n\t\t\t\t\t\tCREATE TABLE IF NOT EXISTS priority_queue (\n\t\t\t\t\t\t\tid INTEGER PRIMARY KEY NOT NULL,\n\t\t\t\t\t\t\tcreated_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n\t\t\t\t\t\t\ttarget_timestamp INTEGER NOT NULL,\n\t\t\t\t\t\t\taction INTEGER NOT NULL, -- should only be 0 or 1 (1 for added, 0 for deleted),\n\t\t\t\t\t\t\tentryType INTEGER NOT NULL,\n\t\t\t\t\t\t\thash TEXT NOT NULL,\n\t\t\t\t\t\t\tCHECK (action IN (0, 1)), -- guararentee that action can only be 0 or 1\n\t\t\t\t\t\t\tUNIQUE (action, entryType, hash)\n\t\t\t\t\t\t);\n\t\t\t\tCREATE TABLE IF NOT EXISTS states (\n\t\t\t\t\tid INTEGER PRIMARY KEY NOT NULL,\n\t\t\t\t\ttimestamp TIMESTAMP DEFAULT (DATETIME('now','subsec')),\n\t\t\t\t\tgroupKey TEXT,\n\t\t\t\t\ttarget TEXT,\n\t\t\t\t\tmetadata TEXT,\n\t\t\t\t\tevent INTEGER NOT NULL\n\t\t\t\t);\n\t\t\t\tCREATE TABLE IF NOT EXISTS streaming_step_chunks (\n\t\t\t\t\tcache_key TEXT NOT NULL,\n\t\t\t\t\tattempt INTEGER NOT NULL,\n\t\t\t\t\tchunk_index INTEGER NOT NULL,\n\t\t\t\t\tchunk BLOB NOT NULL,\n\t\t\t\t\tPRIMARY KEY (cache_key, attempt, chunk_index)\n\t\t\t\t) WITHOUT ROWID\n\t\t\t\t`);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tthis.timeoutHandler = new GracePeriodSemaphore(\n\t\t\tstartGracePeriod,\n\t\t\tENGINE_TIMEOUT\n\t\t);\n\t}\n\n\twriteLog(\n\t\tevent: InstanceEvent,\n\t\tgroup: string | null,\n\t\ttarget: string | null = null,\n\t\tmetadata: Record<string, unknown>\n\t) {\n\t\tthis.ctx.storage.sql.exec(\n\t\t\t\"INSERT INTO states (event, groupKey, target, metadata) VALUES (?, ?, ?, ?)\",\n\t\t\tevent,\n\t\t\tgroup,\n\t\t\ttarget,\n\t\t\tJSON.stringify(metadata, binaryReplacer)\n\t\t);\n\n\t\t// Wake any waiters if this is a terminal step event\n\t\tif (group) {\n\t\t\tthis.handleStepResultWaiter(group, event, metadata);\n\t\t}\n\t}\n\n\treadStepStartGroupKeysDesc(): string[] {\n\t\tconst rows = [\n\t\t\t...this.ctx.storage.sql.exec<{ groupKey: string }>(\n\t\t\t\t\"SELECT groupKey FROM states WHERE event = ? AND groupKey IS NOT NULL ORDER BY id DESC\",\n\t\t\t\tInstanceEvent.STEP_START\n\t\t\t),\n\t\t];\n\t\treturn rows.map(({ groupKey }) => groupKey);\n\t}\n\n\t// Lives here for access to the protected DurableObject `ctx`.\n\tcreateRollbackContext(rollbackStep?: { cacheKey: string }): Context {\n\t\treturn new Context(this, this.ctx, rollbackStep);\n\t}\n\n\treadLogsFromStep(_cacheKey: string): RawInstanceLog[] {\n\t\treturn [];\n\t}\n\n\treadLogs(): EngineLogs {\n\t\tconst logs = [\n\t\t\t...this.ctx.storage.sql.exec<{\n\t\t\t\tevent: InstanceEvent;\n\t\t\t\tgroupKey: string | null;\n\t\t\t\ttarget: string | null;\n\t\t\t\tmetadata: string;\n\t\t\t}>(\"SELECT event, groupKey, target, metadata FROM states\"),\n\t\t];\n\n\t\treturn {\n\t\t\tlogs: logs.map((log) => {\n\t\t\t\tconst metadata = JSON.parse(log.metadata);\n\n\t\t\t\tif (!isStepSuccessEvent(log.event) || !metadata.streamOutput) {\n\t\t\t\t\treturn { ...log, metadata, group: log.groupKey };\n\t\t\t\t}\n\n\t\t\t\tconst { cacheKey, meta } = metadata.streamOutput as {\n\t\t\t\t\tcacheKey: string;\n\t\t\t\t\tmeta: StreamOutputMeta;\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\tconst preview = getStoredStreamOutputPreview({\n\t\t\t\t\t\tstorage: this.ctx.storage,\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\tmeta,\n\t\t\t\t\t\tmaxChars: 1024,\n\t\t\t\t\t});\n\t\t\t\t\tmetadata.result =\n\t\t\t\t\t\tpreview.type === \"text\"\n\t\t\t\t\t\t\t? preview.output\n\t\t\t\t\t\t\t: `[ReadableStream (binary): ${meta.totalBytes} bytes]`;\n\t\t\t\t} catch {\n\t\t\t\t\tmetadata.result = `[ReadableStream: ${meta.totalBytes} bytes]`;\n\t\t\t\t}\n\t\t\t\tdelete metadata.streamOutput;\n\n\t\t\t\treturn { ...log, metadata, group: log.groupKey };\n\t\t\t}),\n\t\t};\n\t}\n\n\t/**\n\t * Returns detailed logs including timestamps, ordered by ID.\n\t * Used by the local explorer to reconstruct step-level detail.\n\t */\n\treadDetailedLogs(): Array<{\n\t\tid: number;\n\t\ttimestamp: string;\n\t\tevent: number;\n\t\tgroup: string | null;\n\t\ttarget: string | null;\n\t\tmetadata: Record<string, unknown>;\n\t}> {\n\t\tconst rows = [\n\t\t\t...this.ctx.storage.sql.exec<{\n\t\t\t\tid: number;\n\t\t\t\ttimestamp: string;\n\t\t\t\tevent: number;\n\t\t\t\tgroupKey: string | null;\n\t\t\t\ttarget: string | null;\n\t\t\t\tmetadata: string;\n\t\t\t}>(\n\t\t\t\t\"SELECT id, timestamp, event, groupKey, target, metadata FROM states ORDER BY id ASC\"\n\t\t\t),\n\t\t];\n\n\t\treturn rows.map((row) => {\n\t\t\tconst metadata = JSON.parse(row.metadata) as Record<string, unknown>;\n\n\t\t\tif (!isStepSuccessEvent(row.event) || !metadata.streamOutput) {\n\t\t\t\treturn {\n\t\t\t\t\tid: row.id,\n\t\t\t\t\ttimestamp: String(row.timestamp).replace(\" \", \"T\") + \"Z\",\n\t\t\t\t\tevent: row.event,\n\t\t\t\t\tgroup: row.groupKey,\n\t\t\t\t\ttarget: row.target,\n\t\t\t\t\tmetadata,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst { cacheKey, meta } = metadata.streamOutput as {\n\t\t\t\tcacheKey: string;\n\t\t\t\tmeta: StreamOutputMeta;\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst preview = getStoredStreamOutputPreview({\n\t\t\t\t\tstorage: this.ctx.storage,\n\t\t\t\t\tcacheKey,\n\t\t\t\t\tmeta,\n\t\t\t\t\tmaxChars: 1024,\n\t\t\t\t});\n\t\t\t\tmetadata.result =\n\t\t\t\t\tpreview.type === \"text\"\n\t\t\t\t\t\t? preview.output\n\t\t\t\t\t\t: `[ReadableStream (binary): ${meta.totalBytes} bytes]`;\n\t\t\t} catch {\n\t\t\t\tmetadata.result = `[ReadableStream: ${meta.totalBytes} bytes]`;\n\t\t\t}\n\t\t\tdelete metadata.streamOutput;\n\n\t\t\treturn {\n\t\t\t\tid: row.id,\n\t\t\t\ttimestamp: String(row.timestamp).replace(\" \", \"T\") + \"Z\",\n\t\t\t\tevent: row.event,\n\t\t\t\tgroup: row.groupKey,\n\t\t\t\ttarget: row.target,\n\t\t\t\tmetadata,\n\t\t\t};\n\t\t});\n\t}\n\n\treadLogsFromEvent(eventType: InstanceEvent): EngineLogs {\n\t\tconst logs = [\n\t\t\t...this.ctx.storage.sql.exec<{\n\t\t\t\tevent: InstanceEvent;\n\t\t\t\tgroupKey: string | null;\n\t\t\t\ttarget: string | null;\n\t\t\t\tmetadata: string;\n\t\t\t}>(\n\t\t\t\t\"SELECT event, groupKey, target, metadata FROM states WHERE event = ?\",\n\t\t\t\teventType\n\t\t\t),\n\t\t];\n\n\t\treturn {\n\t\t\tlogs: logs.map((log) => ({\n\t\t\t\t...log,\n\t\t\t\tmetadata: JSON.parse(log.metadata),\n\t\t\t\tgroup: log.groupKey,\n\t\t\t})),\n\t\t};\n\t}\n\n\tasync getStatus(): Promise<InstanceStatus> {\n\t\tif (this.accountId === undefined) {\n\t\t\t// Engine could have restarted, so we try to restore from its state\n\t\t\tconst metadata =\n\t\t\t\tawait this.ctx.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\t\t\tif (metadata === undefined) {\n\t\t\t\t// metadata was never set, so we assume the engine was never started\n\t\t\t\tthrow new Error(\"Engine was never started\");\n\t\t\t}\n\n\t\t\tthis.accountId = metadata.accountId;\n\t\t\tthis.instanceId = metadata.instance.id;\n\t\t\tthis.workflowName = metadata.workflow.name;\n\t\t}\n\n\t\tconst res = await this.ctx.storage.get<InstanceStatus>(ENGINE_STATUS_KEY);\n\n\t\t// NOTE(lduarte): if status don't exist, means that engine is running for the first time, so we assume queued\n\t\tif (res === undefined) {\n\t\t\treturn InstanceStatus.Queued;\n\t\t}\n\t\treturn res;\n\t}\n\n\t// Returns instance metadata for the local explorer.\n\tasync getInstanceMetadata(): Promise<{\n\t\tinstanceId: string;\n\t\tstatus: InstanceStatus;\n\t\tcreatedOn: string;\n\t}> {\n\t\tconst status = await this.getStatus();\n\t\t// Read the full metadata to get the created_on timestamp\n\t\tconst metadata =\n\t\t\tawait this.ctx.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\t\tlet createdOn = metadata?.instance?.created_on ?? \"\";\n\n\t\t// Backfill for instances created before created_on was populated:\n\t\t// try the earliest log entry, then the earliest priority queue entry.\n\t\tif (!createdOn) {\n\t\t\tconst queries = [\n\t\t\t\t\"SELECT timestamp AS ts FROM states ORDER BY id ASC LIMIT 1\",\n\t\t\t\t\"SELECT created_on AS ts FROM priority_queue ORDER BY id ASC LIMIT 1\",\n\t\t\t];\n\t\t\tfor (const query of queries) {\n\t\t\t\tif (createdOn) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tfor (const row of this.ctx.storage.sql.exec(query)) {\n\t\t\t\t\t\tif (row.ts) {\n\t\t\t\t\t\t\t// SQLite DATETIME('now','subsec') returns \"YYYY-MM-DD HH:MM:SS.sss\"\n\t\t\t\t\t\t\t// which is not valid ISO 8601 (needs T separator and Z timezone).\n\t\t\t\t\t\t\tconst raw = String(row.ts).replace(\" \", \"T\") + \"Z\";\n\t\t\t\t\t\t\tcreatedOn = raw;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Table may not exist\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tinstanceId: this.instanceId ?? \"\",\n\t\t\tstatus,\n\t\t\tcreatedOn,\n\t\t};\n\t}\n\n\tasync setStatus(\n\t\taccountId: number,\n\t\tinstanceId: string,\n\t\tstatus: InstanceStatus\n\t): Promise<void> {\n\t\tawait this.ctx.storage.put(ENGINE_STATUS_KEY, status);\n\n\t\t// check if anyone is waiting for this status\n\t\tthis.handleStatusWaiter(status);\n\t}\n\n\tprivate statusWaiters: Map<\n\t\tInstanceStatus,\n\t\t{ resolve: () => void; reject: (e: unknown) => void }\n\t> = new Map();\n\tasync waitForStatus(status: string): Promise<void> {\n\t\tconst targetStatus = toInstanceStatus(status);\n\t\tconst currentStatus =\n\t\t\tawait this.ctx.storage.get<InstanceStatus>(ENGINE_STATUS_KEY);\n\n\t\t// if the workflow has already reached the desired state, resolve immediately\n\t\tif (currentStatus === targetStatus) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if it hasn't reached the desired state, create a new promise and add its resolver to the waiters map\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.statusWaiters.set(targetStatus, { resolve, reject });\n\t\t\t// immediately reconcile against current status in case it's already finite\n\t\t\tthis.handleStatusWaiter(currentStatus as InstanceStatus);\n\t\t});\n\t}\n\n\thandleStatusWaiter(status: InstanceStatus): void {\n\t\tconst waiter = this.statusWaiters.get(status);\n\n\t\t// resolve if it reached the desired status\n\t\tif (waiter) {\n\t\t\twaiter.resolve();\n\t\t\tthis.statusWaiters.delete(status);\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (status) {\n\t\t\tcase InstanceStatus.Errored: {\n\t\t\t\t// if it reaches final status \"errored\", then it can't be waiting for it to complete or terminate\n\t\t\t\tconst unreachableStatuses = [\n\t\t\t\t\tInstanceStatus.Complete,\n\t\t\t\t\tInstanceStatus.Terminated,\n\t\t\t\t];\n\n\t\t\t\tthis.rejectUnreachableStatus(status, unreachableStatuses);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase InstanceStatus.Terminated: {\n\t\t\t\t// if it reaches final status \"terminated\", then it can't be waiting for it to complete or error\n\t\t\t\tconst unreachableStatuses = [\n\t\t\t\t\tInstanceStatus.Complete,\n\t\t\t\t\tInstanceStatus.Errored,\n\t\t\t\t];\n\n\t\t\t\tthis.rejectUnreachableStatus(status, unreachableStatuses);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase InstanceStatus.Complete: {\n\t\t\t\t// if it reaches final status \"complete\", then it can't be waiting for it to terminate or error\n\t\t\t\tconst unreachableStatuses = [\n\t\t\t\t\tInstanceStatus.Terminated,\n\t\t\t\t\tInstanceStatus.Errored,\n\t\t\t\t];\n\n\t\t\t\tthis.rejectUnreachableStatus(status, unreachableStatuses);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\trejectUnreachableStatus(\n\t\treachedStatus: number,\n\t\tunreachableStatuses: number[]\n\t): void {\n\t\tif (unreachableStatuses) {\n\t\t\tfor (const unreachableStatus of unreachableStatuses) {\n\t\t\t\tconst waiter = this.statusWaiters.get(unreachableStatus);\n\t\t\t\tif (waiter) {\n\t\t\t\t\twaiter.reject(\n\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t`[WorkflowIntrospector] The Workflow instance ${\n\t\t\t\t\t\t\t\tthis.instanceId\n\t\t\t\t\t\t\t} has reached status '${instanceStatusName(\n\t\t\t\t\t\t\t\treachedStatus\n\t\t\t\t\t\t\t)}'. This is a finite status that prevents it from ever reaching the expected status of '${instanceStatusName(\n\t\t\t\t\t\t\t\tunreachableStatus\n\t\t\t\t\t\t\t)}'.`\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\tthis.statusWaiters.delete(unreachableStatus);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Create a replay ReadableStream from stored stream output metadata.\n\t * Returns undefined if the stream data is not in a valid/complete state.\n\t */\n\tprivate replayStreamFromMeta(streamOutput: {\n\t\tcacheKey: string;\n\t\tmeta: StreamOutputMeta;\n\t}): ReadableStream<Uint8Array> | undefined {\n\t\tif (streamOutput.meta.state !== StreamOutputState.Complete) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst integrityError = getInvalidStoredStreamOutputError(\n\t\t\tthis.ctx.storage,\n\t\t\tstreamOutput.cacheKey,\n\t\t\tstreamOutput.meta\n\t\t);\n\t\tif (integrityError !== undefined) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createReplayReadableStream({\n\t\t\tstorage: this.ctx.storage,\n\t\t\tcacheKey: streamOutput.cacheKey,\n\t\t\tmeta: streamOutput.meta,\n\t\t});\n\t}\n\n\tprivate stepResultWaiters: Map<\n\t\tstring,\n\t\t{ resolve: (v: unknown) => void; reject: (e: unknown) => void }\n\t> = new Map();\n\tasync waitForStepResult(\n\t\tstepName: string,\n\t\tstepCount?: number\n\t): Promise<unknown> {\n\t\tconst hash = await computeHash(stepName);\n\t\tconst count = stepCount ?? 1;\n\t\tconst cacheKey = `${hash}-${count}`;\n\n\t\t// read latest log from step\n\t\tconst rows = [\n\t\t\t...this.ctx.storage.sql.exec<{\n\t\t\t\tevent: InstanceEvent;\n\t\t\t\tmetadata: string;\n\t\t\t}>(\n\t\t\t\t\"SELECT event, metadata FROM states WHERE groupKey = ? ORDER BY id DESC LIMIT 1\",\n\t\t\t\tcacheKey\n\t\t\t),\n\t\t];\n\n\t\tif (rows.length > 0) {\n\t\t\tconst { event, metadata } = rows[0];\n\t\t\tconst parsed = JSON.parse(metadata);\n\t\t\tif (event === InstanceEvent.STEP_SUCCESS) {\n\t\t\t\tif (parsed?.streamOutput) {\n\t\t\t\t\treturn this.replayStreamFromMeta(parsed.streamOutput);\n\t\t\t\t}\n\t\t\t\treturn parsed?.result;\n\t\t\t}\n\t\t\tif (event === InstanceEvent.STEP_FAILURE) {\n\t\t\t\tthrow parsed?.error ?? parsed;\n\t\t\t}\n\t\t}\n\n\t\t// if it hasn't completed the step, create a new promise to later resolve/reject\n\t\treturn new Promise<unknown>((resolve, reject) => {\n\t\t\tthis.stepResultWaiters.set(cacheKey, { resolve, reject });\n\t\t});\n\t}\n\n\thandleStepResultWaiter(\n\t\tgroup: string,\n\t\tevent: InstanceEvent,\n\t\tmetadata: Record<string, unknown>\n\t) {\n\t\tconst waiter = this.stepResultWaiters.get(group);\n\t\tif (!waiter) {\n\t\t\treturn;\n\t\t}\n\t\tif (event === InstanceEvent.STEP_SUCCESS) {\n\t\t\tif (metadata?.streamOutput) {\n\t\t\t\twaiter.resolve(\n\t\t\t\t\tthis.replayStreamFromMeta(\n\t\t\t\t\t\tmetadata.streamOutput as {\n\t\t\t\t\t\t\tcacheKey: string;\n\t\t\t\t\t\t\tmeta: StreamOutputMeta;\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\twaiter.resolve(metadata?.result);\n\t\t\t}\n\t\t\tthis.stepResultWaiters.delete(group);\n\t\t} else if (event === InstanceEvent.STEP_FAILURE) {\n\t\t\tconst error = metadata?.error ?? new Error(\"Step failed\");\n\t\t\twaiter.reject(error);\n\t\t\tthis.stepResultWaiters.delete(group);\n\t\t}\n\t}\n\n\tasync getOutputOrError(isOutput: boolean): Promise<unknown> {\n\t\tconst status = await this.getStatus();\n\n\t\tif (isOutput) {\n\t\t\tif (status !== InstanceStatus.Complete) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Cannot retrieve output: Workflow instance is in status \"${instanceStatusName(\n\t\t\t\t\t\tstatus\n\t\t\t\t\t)}\" but must be \"complete\" to have an output available`\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst logs = this.readLogsFromEvent(InstanceEvent.WORKFLOW_SUCCESS).logs;\n\t\t\treturn logs.at(0)?.metadata.result;\n\t\t} else {\n\t\t\tif (status !== InstanceStatus.Errored) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Cannot retrieve error: Workflow instance is in status \"${instanceStatusName(\n\t\t\t\t\t\tstatus\n\t\t\t\t\t)}\" but must be \"errored\" to have error information available`\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst logs = this.readLogsFromEvent(InstanceEvent.WORKFLOW_FAILURE).logs;\n\t\t\tconst log = logs.at(0);\n\t\t\tif (!log?.metadata.error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Cannot retrieve error: No workflow instance failure log found\"\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn log.metadata.error;\n\t\t}\n\t}\n\n\tasync abort(reason: string) {\n\t\tawait this.ctx.storage.sync();\n\n\t\t// Clean up pending JS operations\n\t\tthis.timeoutHandler.dispose();\n\t\tthis.engineAbortController.abort(new Error(reason));\n\n\t\tthis.ctx.abort(reason);\n\t}\n\n\t// Called by the dispose function when introspecting the instance in tests\n\t// TODO: Ideally this abort should be done by `abortAllDurableObjects` from worked called by vitest-pool-workers\n\tasync unsafeAbort(reason?: string) {\n\t\tawait this.ctx.storage.sync();\n\t\tawait this.ctx.storage.deleteAll();\n\n\t\tthis.ctx.abort(reason);\n\t}\n\n\tasync storeEventMap() {\n\t\tawait this.ctx.blockConcurrencyWhile(async () => {\n\t\t\tconst entries: Record<string, Event> = {};\n\t\t\tfor (const [type, events] of this.eventMap.entries()) {\n\t\t\t\tfor (let i = 0; i < events.length; i++) {\n\t\t\t\t\tentries[`${EVENT_MAP_PREFIX}\\n${type}\\n${i}`] = events[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(entries).length > 0) {\n\t\t\t\tawait this.ctx.storage.put(entries);\n\t\t\t}\n\t\t});\n\t}\n\n\tasync restoreEventMap() {\n\t\tawait this.ctx.blockConcurrencyWhile(async () => {\n\t\t\t// FIXME(lduarte): can this OoM the DO in the production?\n\t\t\tconst entries = await this.ctx.storage.list<Event>({\n\t\t\t\tprefix: EVENT_MAP_PREFIX,\n\t\t\t});\n\t\t\tfor (const [key, value] of entries) {\n\t\t\t\tconst [_, eventType, _idx] = key.split(\"\\n\");\n\t\t\t\t// NOTE(lduarte): safe to do because list returns keys in ascending order, so\n\t\t\t\t// indexes will be correctly ordered\n\t\t\t\tconst eventList = this.eventMap.get(eventType) ?? [];\n\t\t\t\teventList.push(value);\n\t\t\t\tthis.eventMap.set(eventType, eventList);\n\t\t\t}\n\t\t});\n\t}\n\n\tasync receiveEvent(event: {\n\t\ttimestamp: Date;\n\t\tpayload: unknown;\n\t\ttype: string;\n\t}) {\n\t\t// There are four possible cases here:\n\t\t// - There is a callback waiting, send it\n\t\t// - There is no callback waiting but engine is alive, store it\n\t\t// - Engine is not awake and is in Waiting status, store it and start it up\n\t\t// - Engine is not awake and is in Paused (or another terminal) status, store it\n\t\t// - Engine is not awake and is Errored or Terminated, this should not get called\n\t\tlet eventTypeQueue = this.eventMap.get(event.type) ?? [];\n\t\teventTypeQueue.push(event as Event);\n\n\t\tthis.eventMap.set(event.type, eventTypeQueue);\n\t\tawait this.storeEventMap();\n\n\t\t// if the engine is running\n\t\tif (this.isRunning) {\n\t\t\t// Attempt to get the callback and run it\n\t\t\tconst callbacks = this.waiters.get(event.type);\n\t\t\tif (callbacks) {\n\t\t\t\tconst entry = callbacks[0];\n\t\t\t\tif (entry) {\n\t\t\t\t\tconst [, resolve] = entry;\n\t\t\t\t\tresolve(event);\n\t\t\t\t\t// Remove it from the list of callbacks\n\t\t\t\t\tcallbacks.shift();\n\t\t\t\t\tthis.waiters.set(event.type, callbacks);\n\n\t\t\t\t\teventTypeQueue = this.eventMap.get(event.type) ?? [];\n\t\t\t\t\teventTypeQueue.shift();\n\t\t\t\t\tthis.eventMap.set(event.type, eventTypeQueue);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst mockEvent = await this.ctx.storage.get(\n\t\t\t\t`${MODIFIER_KEYS.MOCK_EVENT}${event.type}`\n\t\t\t);\n\t\t\tif (mockEvent) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst metadata =\n\t\t\t\tawait this.ctx.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\n\t\t\tif (metadata === undefined) {\n\t\t\t\tthrow new Error(\"Engine was never started\");\n\t\t\t}\n\n\t\t\tvoid this.init(\n\t\t\t\tmetadata.accountId,\n\t\t\t\tmetadata.workflow,\n\t\t\t\tmetadata.version,\n\t\t\t\tmetadata.instance,\n\t\t\t\tmetadata.event\n\t\t\t);\n\t\t}\n\t}\n\n\tgetInstanceModifier(): WorkflowInstanceModifier {\n\t\treturn new WorkflowInstanceModifier(this, this.ctx);\n\t}\n\n\tasync changeInstanceStatus(\n\t\tnewStatus: \"resume\" | \"pause\" | \"terminate\" | \"restart\",\n\t\tfrom?: RestartFromStep\n\t) {\n\t\tconst metadata =\n\t\t\tawait this.ctx.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\n\t\tif (metadata === undefined) {\n\t\t\tthrow createWorkflowError(\n\t\t\t\t\"Instance does not exist\",\n\t\t\t\t\"instance.not_found\"\n\t\t\t);\n\t\t}\n\n\t\tswitch (newStatus) {\n\t\t\tcase \"pause\":\n\t\t\t\tawait this.userTriggeredPause();\n\t\t\t\tbreak;\n\t\t\tcase \"resume\": {\n\t\t\t\tconst currentStatus = await this.getStatus();\n\t\t\t\tif (currentStatus === InstanceStatus.WaitingForPause) {\n\t\t\t\t\t// Engine is still running \u2014 cancel the pending pause\n\t\t\t\t\tthis.timeoutHandler.cancelWaitingPromisesByType(\"pause\");\n\t\t\t\t\tawait this.setStatus(\n\t\t\t\t\t\tmetadata.accountId,\n\t\t\t\t\t\tmetadata.instance.id,\n\t\t\t\t\t\tInstanceStatus.Running\n\t\t\t\t\t);\n\t\t\t\t} else if (currentStatus === InstanceStatus.Paused) {\n\t\t\t\t\tawait this.attemptResume();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"terminate\": {\n\t\t\t\tconst currentStatus = await this.getStatus();\n\t\t\t\tif (\n\t\t\t\t\t[\n\t\t\t\t\t\tInstanceStatus.Terminated,\n\t\t\t\t\t\tInstanceStatus.Complete,\n\t\t\t\t\t\tInstanceStatus.Errored,\n\t\t\t\t\t].includes(currentStatus)\n\t\t\t\t) {\n\t\t\t\t\tthrow createWorkflowError(\n\t\t\t\t\t\t\"Cannot terminate instance since its on a finite state\",\n\t\t\t\t\t\t\"instance.cannot_terminate\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait this.userTriggeredTerminate();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"restart\":\n\t\t\t\tif (from) {\n\t\t\t\t\tif (!resolveGroupKeysToWipe(this.ctx.storage.sql, from)) {\n\t\t\t\t\t\tthrow stepNotFoundError(from.name);\n\t\t\t\t\t}\n\t\t\t\t\tawait storeRestartFromStep(this.ctx.storage, from);\n\t\t\t\t}\n\t\t\t\tawait this.userTriggeredRestart();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tasync userTriggeredTerminate() {\n\t\tconst metadata =\n\t\t\tawait this.ctx.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\n\t\tif (metadata === undefined) {\n\t\t\tthrow createWorkflowError(\n\t\t\t\t\"Instance does not exist\",\n\t\t\t\t\"instance.not_found\"\n\t\t\t);\n\t\t}\n\n\t\tthis.writeLog(InstanceEvent.WORKFLOW_TERMINATED, null, null, {\n\t\t\ttrigger: {\n\t\t\t\tsource: InstanceTrigger.API,\n\t\t\t},\n\t\t});\n\n\t\tawait this.setStatus(\n\t\t\tmetadata.accountId,\n\t\t\tmetadata.instance.id,\n\t\t\tInstanceStatus.Terminated\n\t\t);\n\n\t\tawait this.abort(ABORT_REASONS.USER_TERMINATE);\n\t}\n\n\tasync userTriggeredPause() {\n\t\tconst status = await this.getStatus();\n\n\t\tif (\n\t\t\tstatus === InstanceStatus.Paused ||\n\t\t\tstatus === InstanceStatus.WaitingForPause\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tstatus !== InstanceStatus.Running &&\n\t\t\tstatus !== InstanceStatus.Waiting\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst metadata =\n\t\t\tawait this.ctx.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\n\t\tif (metadata === undefined) {\n\t\t\tthrow createWorkflowError(\n\t\t\t\t\"Instance does not exist\",\n\t\t\t\t\"instance.not_found\"\n\t\t\t);\n\t\t}\n\n\t\tawait this.setStatus(\n\t\t\tmetadata.accountId,\n\t\t\tmetadata.instance.id,\n\t\t\tInstanceStatus.WaitingForPause\n\t\t);\n\n\t\tvoid this.timeoutHandler\n\t\t\t.waitUntilNothingIsRunning(\"pause\", async () => {\n\t\t\t\tawait this.ctx.storage.put(PAUSE_DATETIME, new Date());\n\t\t\t\tawait this.setStatus(\n\t\t\t\t\tmetadata.accountId,\n\t\t\t\t\tmetadata.instance.id,\n\t\t\t\t\tInstanceStatus.Paused\n\t\t\t\t);\n\t\t\t\t// Signal the pause controller to interrupt any active\n\t\t\t\t// scheduler.wait (sleep/waitForEvent). The workflow will\n\t\t\t\t// throw a pause error at the next step boundary via\n\t\t\t\t// #checkForPendingPause()\n\t\t\t\tthis.pauseController.abort(ABORT_REASONS.USER_PAUSE);\n\t\t\t})\n\t\t\t.catch(() => {});\n\t}\n\n\tasync userTriggeredRestart() {\n\t\t// cleanup is done in attemptRestart() on the fresh DO instance\n\n\t\tawait this.abort(ABORT_REASONS.USER_RESTART);\n\t}\n\n\tasync attemptRestart() {\n\t\tconst restartFromStep = await readAndClearRestartFromStep(this.ctx.storage);\n\n\t\tlet groupKeysToWipe: Set<string> | null = null;\n\t\tif (restartFromStep) {\n\t\t\tgroupKeysToWipe = resolveGroupKeysToWipe(\n\t\t\t\tthis.ctx.storage.sql,\n\t\t\t\trestartFromStep\n\t\t\t);\n\t\t\tif (!groupKeysToWipe) {\n\t\t\t\tthrow stepNotFoundError(restartFromStep.name);\n\t\t\t}\n\t\t}\n\n\t\tawait wipeRestartState(\n\t\t\tthis.ctx.storage,\n\t\t\tENGINE_STATUS_KEY,\n\t\t\tPAUSE_DATETIME,\n\t\t\tgroupKeysToWipe\n\t\t);\n\n\t\tconst metadata =\n\t\t\tawait this.ctx.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\n\t\tif (metadata === undefined) {\n\t\t\tthrow createWorkflowError(\n\t\t\t\t\"Instance does not exist\",\n\t\t\t\t\"instance.not_found\"\n\t\t\t);\n\t\t}\n\n\t\tconst { accountId, workflow, version, instance, event } = metadata;\n\n\t\tif (!groupKeysToWipe) {\n\t\t\tthis.writeLog(InstanceEvent.WORKFLOW_QUEUED, null, null, {\n\t\t\t\tparams: event.payload,\n\t\t\t\tversionId: version.id,\n\t\t\t\ttrigger: {\n\t\t\t\t\tsource: InstanceTrigger.API,\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.writeLog(InstanceEvent.WORKFLOW_START, null, null, {});\n\t\t}\n\n\t\tvoid this.init(accountId, workflow, version, instance, event);\n\t}\n\n\tasync attemptResume() {\n\t\tconst metadata =\n\t\t\tawait this.ctx.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\n\t\tif (metadata === undefined) {\n\t\t\tthrow createWorkflowError(\n\t\t\t\t\"Instance does not exist\",\n\t\t\t\t\"instance.not_found\"\n\t\t\t);\n\t\t}\n\n\t\tconst status =\n\t\t\tawait this.ctx.storage.get<InstanceStatus>(ENGINE_STATUS_KEY);\n\t\tif (status !== InstanceStatus.Paused) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Offset priority queue timers by the pause duration so that\n\t\t// sleeps/retries resume from where they left off\n\t\tconst pausedDate = await this.ctx.storage.get<Date>(PAUSE_DATETIME);\n\t\tif (pausedDate !== undefined) {\n\t\t\tconst offset = Date.now() - new Date(pausedDate).valueOf();\n\t\t\tif (this.priorityQueue) {\n\t\t\t\tthis.priorityQueue.offsetAll(offset);\n\t\t\t} else {\n\t\t\t\tconst pq = new TimePriorityQueue(this.ctx, metadata);\n\t\t\t\tpq.offsetAll(offset);\n\t\t\t}\n\t\t}\n\t\tawait this.ctx.storage.delete(PAUSE_DATETIME);\n\n\t\tconst { accountId, workflow, version, instance, event } = metadata;\n\n\t\tawait this.ctx.storage.put(ENGINE_STATUS_KEY, InstanceStatus.Queued);\n\n\t\t// Reset pause state for the new run. The DO stays alive across\n\t\t// pause/resume (no this.ctx.abort()), so we need to clear stale\n\t\t// in-memory state from the previous run to avoid duplicates.\n\t\tthis.pauseController = new AbortController();\n\t\tthis.waiters = new Map();\n\t\tthis.eventMap = new Map();\n\t\tclearRollbackRegistry(this.rollbackRegistry);\n\n\t\tvoid this.init(accountId, workflow, version, instance, event);\n\t}\n\n\tasync init(\n\t\taccountId: number,\n\t\tworkflow: DatabaseWorkflow,\n\t\tversion: DatabaseVersion,\n\t\tinstance: DatabaseInstance,\n\t\tevent: WorkflowEvent<unknown>\n\t) {\n\t\tif (this.priorityQueue === undefined) {\n\t\t\tthis.priorityQueue = new TimePriorityQueue(\n\t\t\t\tthis.ctx,\n\t\t\t\t// this.env,\n\t\t\t\t{\n\t\t\t\t\taccountId,\n\t\t\t\t\tworkflow,\n\t\t\t\t\tversion,\n\t\t\t\t\tinstance,\n\t\t\t\t\tevent,\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (this.isRunning) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.priorityQueue.popPastEntries();\n\t\tawait this.priorityQueue.handleNextAlarm();\n\n\t\t// We are not running and are possibly starting a new lifetime\n\t\tthis.accountId = accountId;\n\t\tthis.instanceId = instance.id;\n\t\tthis.workflowName = workflow.name;\n\n\t\tconst status = await this.getStatus();\n\t\tif (\n\t\t\t[\n\t\t\t\tInstanceStatus.Errored, // TODO (WOR-85): Remove this once upgrade story is done\n\t\t\t\tInstanceStatus.Terminated,\n\t\t\t\tInstanceStatus.Complete,\n\t\t\t\tInstanceStatus.Paused,\n\t\t\t].includes(status)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the DO restarted (e.g. from alarm) while in WaitingForPause state,\n\t\t// transition to Paused and return early \u2014 same as production behaviour.\n\t\tif (status === InstanceStatus.WaitingForPause) {\n\t\t\tawait this.ctx.storage.put(PAUSE_DATETIME, new Date());\n\t\t\tawait this.setStatus(accountId, instance.id, InstanceStatus.Paused);\n\t\t\treturn;\n\t\t}\n\n\t\tif ((await this.ctx.storage.get(INSTANCE_METADATA)) == undefined) {\n\t\t\tconst instanceMetadata: InstanceMetadata = {\n\t\t\t\taccountId,\n\t\t\t\tworkflow,\n\t\t\t\tversion,\n\t\t\t\tinstance,\n\t\t\t\tevent,\n\t\t\t};\n\t\t\tawait this.ctx.storage.put(INSTANCE_METADATA, instanceMetadata);\n\n\t\t\t// TODO (WOR-78): We currently don't have a queue mechanism\n\t\t\tthis.writeLog(InstanceEvent.WORKFLOW_QUEUED, null, null, {\n\t\t\t\tparams: event.payload,\n\t\t\t\tversionId: version.id,\n\t\t\t\ttrigger: {\n\t\t\t\t\tsource: InstanceTrigger.API,\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.writeLog(InstanceEvent.WORKFLOW_START, null, null, {});\n\t\t}\n\n\t\t// restore eventMap so that waitForEvent across lifetimes works correctly\n\t\tawait this.restoreEventMap();\n\n\t\tconst stubStep = new Context(this, this.ctx);\n\n\t\tconst workflowRunningHandler = async () => {\n\t\t\tawait this.ctx.storage.transaction(async () => {\n\t\t\t\t// manually start the grace period\n\t\t\t\t// startGracePeriod(this, this.timeoutHandler.timeoutMs);\n\t\t\t\tawait this.setStatus(accountId, instance.id, InstanceStatus.Running);\n\t\t\t});\n\t\t};\n\t\tthis.isRunning = true;\n\n\t\tvoid workflowRunningHandler();\n\t\ttry {\n\t\t\tconst target = this.env.USER_WORKFLOW;\n\t\t\tconst result = await target.run(\n\t\t\t\tevent,\n\t\t\t\tstubStep as unknown as WorkflowStep\n\t\t\t);\n\t\t\tthis.writeLog(InstanceEvent.WORKFLOW_SUCCESS, null, null, {\n\t\t\t\tresult,\n\t\t\t});\n\t\t\t// NOTE(lduarte): we want to run this in a transaction to guarentee ordering with running setstatus call\n\t\t\t// in case that it returns immediately\n\t\t\tawait this.ctx.storage.transaction(async () => {\n\t\t\t\tawait this.setStatus(accountId, instance.id, InstanceStatus.Complete);\n\t\t\t});\n\t\t\t// Dispose dup'd stubs; otherwise they leak across DO lifetimes.\n\t\t\tclearRollbackRegistry(this.rollbackRegistry);\n\t\t\tthis.isRunning = false;\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) {\n\t\t\t\tthis.isRunning = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Run before the terminal status so events land before WORKFLOW_FAILURE.\n\t\t\ttry {\n\t\t\t\tawait executeRollbacks(\n\t\t\t\t\tthis,\n\t\t\t\t\terr instanceof Error ? err : new Error(String(err))\n\t\t\t\t);\n\t\t\t} catch (rollbackErr) {\n\t\t\t\tconsole.error(\"Rollback execution failed:\", rollbackErr);\n\t\t\t}\n\n\t\t\tlet error;\n\t\t\tif (err instanceof Error) {\n\t\t\t\tif (\n\t\t\t\t\terr.name === \"NonRetryableError\" ||\n\t\t\t\t\terr.message.startsWith(\"NonRetryableError\")\n\t\t\t\t) {\n\t\t\t\t\tconst fatalError = shouldPreserveNonRetryableError()\n\t\t\t\t\t\t? new PreservedNonRetryableError(err)\n\t\t\t\t\t\t: new WorkflowFatalError(\n\t\t\t\t\t\t\t\t`The execution of the Workflow instance was terminated, as a step threw an NonRetryableError and it was not handled`\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\tthis.writeLog(InstanceEvent.WORKFLOW_FAILURE, null, null, {\n\t\t\t\t\t\terror: fatalError,\n\t\t\t\t\t});\n\n\t\t\t\t\tawait this.setStatus(accountId, instance.id, InstanceStatus.Errored);\n\t\t\t\t\tawait this.abort(ABORT_REASONS.NON_RETRYABLE_ERROR);\n\t\t\t\t\tthis.isRunning = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\terror = {\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t\tname: err.name,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\terror = {\n\t\t\t\t\tname: \"Error\",\n\t\t\t\t\tmessage: err,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.writeLog(InstanceEvent.WORKFLOW_FAILURE, null, null, {\n\t\t\t\terror,\n\t\t\t});\n\t\t\t// NOTE(lduarte): we want to run this in a transaction to guarentee ordering with running setstatus call\n\t\t\t// in case that it throws immediately\n\t\t\tawait this.ctx.storage.transaction(async () => {\n\t\t\t\tawait this.setStatus(accountId, instance.id, InstanceStatus.Errored);\n\t\t\t});\n\t\t\tthis.isRunning = false;\n\t\t}\n\n\t\treturn {\n\t\t\tid: instance.id,\n\t\t};\n\t}\n}\n", "import { RpcTarget } from \"cloudflare:workers\";\nimport { ms } from \"itty-time\";\nimport { INSTANCE_METADATA, InstanceEvent, InstanceStatus } from \"./instance\";\nimport { computeHash } from \"./lib/cache\";\nimport {\n\tABORT_REASONS,\n\tInvalidStepReadableStreamError,\n\tOversizedStreamChunkError,\n\tPreservedNonRetryableError,\n\tshouldPreserveNonRetryableError,\n\tStreamOutputStorageLimitError,\n\tUnsupportedStreamChunkError,\n\tWorkflowFatalError,\n\tWorkflowInternalError,\n\tWorkflowTimeoutError,\n} from \"./lib/errors\";\nimport { calcRetryDuration } from \"./lib/retries\";\nimport {\n\tparseRollbackOptions,\n\tregisterRollbackFn,\n\tROLLBACK_CACHE_KEY_PREFIX,\n} from \"./lib/rollback\";\nimport {\n\tcleanupPendingStreamOutput,\n\tcreateReplayReadableStream,\n\tgetInvalidStoredStreamOutputError,\n\tgetStreamOutputMetaKey,\n\tisReadableStreamLike,\n\trollbackStreamOutput,\n\tStreamOutputState,\n\twriteStreamOutput,\n} from \"./lib/streams\";\nimport {\n\tisValidStepConfig,\n\tisValidStepName,\n\tMAX_STEP_NAME_LENGTH,\n} from \"./lib/validators\";\nimport { MODIFIER_KEYS } from \"./modifier\";\nimport type { Engine } from \"./engine\";\nimport type { InstanceMetadata } from \"./instance\";\nimport type { RollbackFn, WorkflowStepRollbackOptions } from \"./lib/rollback\";\nimport type { StreamOutputMeta } from \"./lib/streams\";\nimport type {\n\tWorkflowSleepDuration,\n\tWorkflowStepConfig,\n\tWorkflowStepEvent,\n} from \"cloudflare:workers\";\n\nexport type Event = {\n\ttimestamp: Date;\n\tpayload: unknown;\n\ttype: string;\n};\n\nexport type ResolvedStepConfig = Required<\n\tPick<WorkflowStepConfig, \"retries\" | \"timeout\">\n> &\n\tPick<WorkflowStepConfig, \"sensitive\">;\n\nconst defaultConfig: ResolvedStepConfig = {\n\tretries: {\n\t\tlimit: 5,\n\t\tdelay: 1000,\n\t\tbackoff: \"exponential\",\n\t},\n\ttimeout: \"10 minutes\",\n};\n\n/**\n * Returns a copy of `value` that is safe to persist via Durable Object SQL\n * storage without dragging unrelated bytes along with typed-array views.\n *\n * Background: workerd's `v8::ValueSerializer` writes the entire backing\n * `ArrayBuffer` for typed-array views, not just `byteLength` bytes. A view\n * sliced from a much larger buffer (`crypto.getRandomValues`, `arr.slice(...)`,\n * fetch-stream copies) blows up the wire size by a factor of\n * (backing-size / view-size) and can hit `SQLITE_TOOBIG` at view sizes well\n * below the documented 1MiB step-output limit (see issue #14101). Copying the\n * view's bytes into a tight backing buffer before persistence brings local\n * `wrangler dev` behaviour in line with production.\n *\n * The walk is recursive (cycle-safe via a `WeakMap`) so views nested inside\n * objects, arrays, Maps, and Sets are also compacted. View types are preserved\n * (`Uint8Array` stays `Uint8Array`, `Int16Array` stays `Int16Array`, etc.) so\n * the persisted shape matches the live shape \u2014 cached replays observe the\n * same constructor type the step originally returned. Class instances and\n * host objects (`Date`, `RegExp`, raw `ArrayBuffer`, streams, `Blob`, \u2026) are\n * passed through unchanged \u2014 recursing into them would either fail to\n * reconstruct the original type or trigger their own structured-clone path.\n */\nfunction normalizeForStorage(\n\tvalue: unknown,\n\tseen: WeakMap<object, unknown> = new WeakMap()\n): unknown {\n\t// Primitives: nothing to do.\n\tif (value === null || typeof value !== \"object\") {\n\t\treturn value;\n\t}\n\n\t// Already visited (cycle): return the previously-built copy so the result\n\t// graph mirrors the original's cycle topology.\n\tif (seen.has(value)) {\n\t\treturn seen.get(value);\n\t}\n\n\t// Typed-array views (TypedArray + DataView): copy bytes into a tight\n\t// backing buffer, preserving the original view constructor.\n\tif (ArrayBuffer.isView(value)) {\n\t\treturn buildCompactView(value);\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tconst result: unknown[] = [];\n\t\tseen.set(value, result);\n\t\tfor (const item of value) {\n\t\t\tresult.push(normalizeForStorage(item, seen));\n\t\t}\n\t\treturn result;\n\t}\n\n\tif (value instanceof Map) {\n\t\tconst result = new Map();\n\t\tseen.set(value, result);\n\t\tfor (const [k, v] of value) {\n\t\t\tresult.set(normalizeForStorage(k, seen), normalizeForStorage(v, seen));\n\t\t}\n\t\treturn result;\n\t}\n\n\tif (value instanceof Set) {\n\t\tconst result = new Set();\n\t\tseen.set(value, result);\n\t\tfor (const v of value) {\n\t\t\tresult.add(normalizeForStorage(v, seen));\n\t\t}\n\t\treturn result;\n\t}\n\n\t// Plain objects (Object literals and null-prototype objects). Class\n\t// instances and host objects fall through to the pass-through below.\n\tconst proto = Object.getPrototypeOf(value);\n\tif (proto === Object.prototype || proto === null) {\n\t\tconst result: Record<string, unknown> = {};\n\t\tseen.set(value, result);\n\t\tfor (const key of Object.keys(value)) {\n\t\t\tresult[key] = normalizeForStorage(\n\t\t\t\t(value as Record<string, unknown>)[key],\n\t\t\t\tseen\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t}\n\n\treturn value;\n}\n\ntype ViewCtor = new (buffer: ArrayBufferLike) => ArrayBufferView;\nfunction buildCompactView(view: ArrayBufferView): ArrayBufferView {\n\tconst tightBuffer = view.buffer.slice(\n\t\tview.byteOffset,\n\t\tview.byteOffset + view.byteLength\n\t);\n\treturn new (view.constructor as ViewCtor)(tightBuffer);\n}\n\nexport interface UserErrorField {\n\tisUserError?: boolean;\n}\n\nexport type StepState = {\n\tattemptedCount: number;\n};\n\nexport type WorkflowStepContext = {\n\tstep: {\n\t\tname: string;\n\t\tcount: number;\n\t};\n\tattempt: number;\n\tconfig: ResolvedStepConfig;\n};\n\nconst PAUSE_DATETIME = \"PAUSE_DATETIME\";\n\nexport class Context extends RpcTarget {\n\t#engine: Engine;\n\t#state: DurableObjectState;\n\n\t#counters: Map<string, number> = new Map();\n\t#lifetimeStepCounter: number = 0;\n\n\t#rollbackStep: { cacheKey: string } | undefined;\n\n\tconstructor(\n\t\tengine: Engine,\n\t\tstate: DurableObjectState,\n\t\trollbackStep?: { cacheKey: string }\n\t) {\n\t\tsuper();\n\t\tthis.#engine = engine;\n\t\tthis.#state = state;\n\t\tthis.#rollbackStep = rollbackStep;\n\t}\n\n\tasync #checkForPendingPause(): Promise<void> {\n\t\tif (this.#engine.timeoutHandler.isRunningStep()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst status = await this.#engine.getStatus();\n\n\t\tif (status === InstanceStatus.Paused) {\n\t\t\tthrow new Error(ABORT_REASONS.USER_PAUSE);\n\t\t}\n\n\t\tif (status === InstanceStatus.WaitingForPause) {\n\t\t\tawait this.#state.storage.put(PAUSE_DATETIME, new Date());\n\t\t\tconst metadata =\n\t\t\t\tawait this.#state.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\t\t\tif (metadata) {\n\t\t\t\tawait this.#engine.setStatus(\n\t\t\t\t\tmetadata.accountId,\n\t\t\t\t\tmetadata.instance.id,\n\t\t\t\t\tInstanceStatus.Paused\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow new Error(ABORT_REASONS.USER_PAUSE);\n\t\t}\n\t}\n\n\t#getCount(name: string): number {\n\t\tlet val = this.#counters.get(name) ?? 0;\n\t\t// 1-indexed, as we're increasing the value before write\n\t\tval++;\n\t\tthis.#counters.set(name, val);\n\n\t\treturn val;\n\t}\n\n\t#registerRollback(options: {\n\t\tcacheKey: string;\n\t\trollbackFn: RollbackFn | undefined;\n\t\tstepContext: WorkflowStepContext;\n\t\toutput?: unknown;\n\t\trollbackConfig?: WorkflowStepConfig;\n\t}): void {\n\t\tconst { cacheKey, rollbackFn, stepContext, output, rollbackConfig } =\n\t\t\toptions;\n\t\tif (rollbackFn && this.#rollbackStep === undefined) {\n\t\t\tregisterRollbackFn(this.#engine.rollbackRegistry, {\n\t\t\t\tcacheKey,\n\t\t\t\tfn: rollbackFn,\n\t\t\t\tstepContext,\n\t\t\t\t...(\"output\" in options && { output }),\n\t\t\t\t...(rollbackConfig !== undefined && { config: rollbackConfig }),\n\t\t\t});\n\t\t}\n\t}\n\n\tdo(\n\t\tname: string,\n\t\tcallback: (ctx: WorkflowStepContext) => Promise<unknown>,\n\t\trollbackOptions?: WorkflowStepRollbackOptions\n\t): Promise<unknown>;\n\tdo(\n\t\tname: string,\n\t\tconfig: WorkflowStepConfig,\n\t\tcallback: (ctx: WorkflowStepContext) => Promise<unknown>,\n\t\trollbackOptions?: WorkflowStepRollbackOptions\n\t): Promise<unknown>;\n\n\tasync do<T>(\n\t\tname: string,\n\t\t...rest: unknown[]\n\t): Promise<unknown | void | undefined> {\n\t\tlet closure: (ctx: WorkflowStepContext) => Promise<T>;\n\t\tlet stepConfig: WorkflowStepConfig;\n\t\tlet rollbackOptions: WorkflowStepRollbackOptions | undefined;\n\n\t\tconst first = rest[0];\n\t\tif (typeof first === \"function\") {\n\t\t\tclosure = first as (ctx: WorkflowStepContext) => Promise<T>;\n\t\t\tstepConfig = {};\n\t\t\trollbackOptions = parseRollbackOptions(name, rest[1]);\n\t\t} else {\n\t\t\tstepConfig = (first ?? {}) as WorkflowStepConfig;\n\t\t\tclosure = rest[1] as (ctx: WorkflowStepContext) => Promise<T>;\n\t\t\tif (typeof closure !== \"function\") {\n\t\t\t\tconst error = new WorkflowFatalError(\n\t\t\t\t\t`Step \"${name}\" requires a callback function`\n\t\t\t\t) as Error & UserErrorField;\n\t\t\t\terror.isUserError = true;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\trollbackOptions = parseRollbackOptions(name, rest[2]);\n\t\t}\n\t\tconst { rollback: rollbackFn, rollbackConfig } = rollbackOptions ?? {};\n\n\t\tconst isRollback = this.#rollbackStep !== undefined;\n\t\tconst events = isRollback\n\t\t\t? {\n\t\t\t\t\tstart: InstanceEvent.ROLLBACK_STEP_START,\n\t\t\t\t\tattemptStart: InstanceEvent.ROLLBACK_ATTEMPT_START,\n\t\t\t\t\tattemptSuccess: InstanceEvent.ROLLBACK_ATTEMPT_SUCCESS,\n\t\t\t\t\tattemptFailure: InstanceEvent.ROLLBACK_ATTEMPT_FAILURE,\n\t\t\t\t\tsuccess: InstanceEvent.ROLLBACK_STEP_SUCCESS,\n\t\t\t\t\tfailure: InstanceEvent.ROLLBACK_STEP_FAILURE,\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tstart: InstanceEvent.STEP_START,\n\t\t\t\t\tattemptStart: InstanceEvent.ATTEMPT_START,\n\t\t\t\t\tattemptSuccess: InstanceEvent.ATTEMPT_SUCCESS,\n\t\t\t\t\tattemptFailure: InstanceEvent.ATTEMPT_FAILURE,\n\t\t\t\t\tsuccess: InstanceEvent.STEP_SUCCESS,\n\t\t\t\t\tfailure: InstanceEvent.STEP_FAILURE,\n\t\t\t\t};\n\n\t\tif (!isRollback) {\n\t\t\tthis.#lifetimeStepCounter++;\n\n\t\t\tconst stepLimit = this.#engine.stepLimit;\n\t\t\tif (this.#lifetimeStepCounter > stepLimit) {\n\t\t\t\tthrow new WorkflowFatalError(\n\t\t\t\t\t`The limit of ${stepLimit} steps has been reached. This limit can be changed in your worker configuration.`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (!isValidStepName(name)) {\n\t\t\t// NOTE(lduarte): marking errors as user error allows the observability layer to avoid leaking\n\t\t\t// user errors to sentry while making everything more observable. `isUserError` is not serialized\n\t\t\t// into userland code due to how workerd serialzises errors over RPC - we also set it as undefined\n\t\t\t// in the obs layer in case changes to workerd happen\n\t\t\tconst error = new WorkflowFatalError(\n\t\t\t\t`Step name \"${name}\" exceeds max length (${MAX_STEP_NAME_LENGTH} chars) or invalid characters found`\n\t\t\t) as Error & UserErrorField;\n\t\t\terror.isUserError = true;\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (!isValidStepConfig(stepConfig)) {\n\t\t\tconst error = new WorkflowFatalError(\n\t\t\t\t`Step config for \"${name}\" is in a invalid format. See https://developers.cloudflare.com/workflows/build/sleeping-and-retrying/`\n\t\t\t) as Error & UserErrorField;\n\t\t\terror.isUserError = true;\n\t\t\tthrow error;\n\t\t}\n\n\t\tlet config: ResolvedStepConfig = {\n\t\t\t...defaultConfig,\n\t\t\t...stepConfig,\n\t\t\tretries: {\n\t\t\t\t...defaultConfig.retries,\n\t\t\t\t...stepConfig.retries,\n\t\t\t},\n\t\t};\n\n\t\tlet cacheKey: string;\n\t\tlet count: number;\n\t\tlet stepNameWithCounter: string;\n\t\tconst rollbackStep = this.#rollbackStep;\n\t\tif (rollbackStep !== undefined) {\n\t\t\tcacheKey = `${ROLLBACK_CACHE_KEY_PREFIX}${rollbackStep.cacheKey}`;\n\t\t\tcount = 1;\n\t\t\tstepNameWithCounter = name;\n\t\t} else {\n\t\t\tconst hash = await computeHash(name);\n\t\t\tcount = this.#getCount(\"run-\" + name);\n\t\t\tcacheKey = `${hash}-${count}`;\n\t\t\tstepNameWithCounter = `${name}-${count}`;\n\t\t}\n\n\t\tconst valueKey = `${cacheKey}-value`;\n\t\tconst streamMetaKey = getStreamOutputMetaKey(cacheKey);\n\t\tconst configKey = `${cacheKey}-config`;\n\t\tconst errorKey = `${cacheKey}-error`;\n\t\tconst stepStateKey = `${cacheKey}-metadata`;\n\t\tconst retryDelayDisableKey = `${MODIFIER_KEYS.DISABLE_RETRY_DELAY}${valueKey}`;\n\n\t\tconst maybeMap = await this.#state.storage.get([\n\t\t\tvalueKey,\n\t\t\tstreamMetaKey,\n\t\t\tconfigKey,\n\t\t\terrorKey,\n\t\t\tstepStateKey,\n\t\t]);\n\n\t\t// Check cache -- streams first, then plain values\n\t\tconst maybeStreamMeta = maybeMap.get(streamMetaKey) as\n\t\t\t| StreamOutputMeta\n\t\t\t| undefined\n\t\t\t| null;\n\t\tconst cachedConfig = maybeMap.get(configKey) as\n\t\t\t| ResolvedStepConfig\n\t\t\t| undefined;\n\t\tif (maybeStreamMeta?.state === StreamOutputState.Complete) {\n\t\t\tconst cachedState = maybeMap.get(stepStateKey) as StepState | undefined;\n\t\t\tconst maybeOutputError = getInvalidStoredStreamOutputError(\n\t\t\t\tthis.#state.storage,\n\t\t\t\tcacheKey,\n\t\t\t\tmaybeStreamMeta\n\t\t\t);\n\t\t\tif (maybeOutputError !== undefined) {\n\t\t\t\tthrow new WorkflowInternalError(\n\t\t\t\t\t`Stored output for ${stepNameWithCounter} is corrupt or incomplete.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst result = createReplayReadableStream({\n\t\t\t\tstorage: this.#state.storage,\n\t\t\t\tcacheKey,\n\t\t\t\tmeta: maybeStreamMeta,\n\t\t\t}) as T;\n\t\t\tthis.#registerRollback({\n\t\t\t\tcacheKey,\n\t\t\t\trollbackFn,\n\t\t\t\tstepContext: {\n\t\t\t\t\tstep: { name, count },\n\t\t\t\t\tattempt: cachedState?.attemptedCount ?? 1,\n\t\t\t\t\tconfig: cachedConfig ?? config,\n\t\t\t\t},\n\t\t\t\toutput: result,\n\t\t\t\trollbackConfig,\n\t\t\t});\n\t\t\treturn result;\n\t\t} else if (maybeStreamMeta !== undefined && maybeStreamMeta !== null) {\n\t\t\t// We're not in a complete state - means we crashed while persisting a stream on a previous invocation - need to cleanup\n\t\t\tawait cleanupPendingStreamOutput(this.#state.storage, cacheKey).catch(\n\t\t\t\t() => {}\n\t\t\t);\n\t\t}\n\n\t\tconst maybeResult = maybeMap.get(valueKey);\n\n\t\tif (maybeResult) {\n\t\t\tconst cachedState = maybeMap.get(stepStateKey) as StepState | undefined;\n\t\t\tconst result = (maybeResult as { value: T }).value;\n\t\t\tthis.#registerRollback({\n\t\t\t\tcacheKey,\n\t\t\t\trollbackFn,\n\t\t\t\tstepContext: {\n\t\t\t\t\tstep: { name, count },\n\t\t\t\t\tattempt: cachedState?.attemptedCount ?? 1,\n\t\t\t\t\tconfig: cachedConfig ?? config,\n\t\t\t\t},\n\t\t\t\toutput: result,\n\t\t\t\trollbackConfig,\n\t\t\t});\n\t\t\treturn result;\n\t\t}\n\n\t\tconst maybeError: (Error & UserErrorField) | undefined = maybeMap.get(\n\t\t\terrorKey\n\t\t) as Error | undefined;\n\n\t\tif (maybeError) {\n\t\t\tmaybeError.isUserError = true;\n\t\t\tthrow maybeError;\n\t\t}\n\n\t\t// Persist initial config because user can pass in dynamic config\n\t\tif (cachedConfig === undefined) {\n\t\t\tawait this.#state.storage.put(configKey, config);\n\t\t} else {\n\t\t\tconfig = cachedConfig;\n\t\t}\n\n\t\tconst attemptLogs = this.#engine\n\t\t\t.readLogsFromStep(cacheKey)\n\t\t\t.filter((val) =>\n\t\t\t\t[\n\t\t\t\t\tevents.attemptSuccess,\n\t\t\t\t\tevents.attemptFailure,\n\t\t\t\t\tevents.attemptStart,\n\t\t\t\t].includes(val.event)\n\t\t\t);\n\n\t\t// this means that the the engine died while executing this step - we can mark the latest attempt as failed\n\t\tif (\n\t\t\tattemptLogs.length > 0 &&\n\t\t\tattemptLogs.at(-1)?.event === events.attemptStart\n\t\t) {\n\t\t\t// TODO: We should get this from SQL\n\t\t\tconst stepState = ((await this.#state.storage.get(\n\t\t\t\tstepStateKey\n\t\t\t)) as StepState) ?? {\n\t\t\t\tattemptedCount: 1,\n\t\t\t};\n\n\t\t\tconst priorityQueueHash = `${cacheKey}-${stepState.attemptedCount}`;\n\n\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\tconst timeoutEntryPQ = this.#engine.priorityQueue.getFirst(\n\t\t\t\t(a) => a.hash === priorityQueueHash && a.type === \"timeout\"\n\t\t\t);\n\t\t\t// if there's a timeout on the PQ we pop it, because we wont need it\n\t\t\tif (timeoutEntryPQ !== undefined) {\n\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\tthis.#engine.priorityQueue.remove(timeoutEntryPQ);\n\t\t\t}\n\t\t\tthis.#engine.writeLog(\n\t\t\t\tevents.attemptFailure,\n\t\t\t\tcacheKey,\n\t\t\t\tstepNameWithCounter,\n\t\t\t\t{\n\t\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tname: \"WorkflowInternalError\",\n\t\t\t\t\t\tmessage: `Attempt failed due to internal workflows error`,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tawait this.#state.storage.put(stepStateKey, stepState);\n\t\t}\n\n\t\tconst doWrapper = async (\n\t\t\tdoWrapperClosure: (ctx: WorkflowStepContext) => Promise<unknown>\n\t\t): Promise<unknown | void | undefined> => {\n\t\t\tconst stepState = ((await this.#state.storage.get(\n\t\t\t\tstepStateKey\n\t\t\t)) as StepState) ?? {\n\t\t\t\tattemptedCount: 0,\n\t\t\t};\n\t\t\tconst forwardStepContext = (): WorkflowStepContext => ({\n\t\t\t\tstep: { name, count },\n\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\tconfig,\n\t\t\t});\n\n\t\t\t// NOTE(caio): this might be a stream returning step - if so cleanup stale data from previous lifetimes\n\t\t\tawait cleanupPendingStreamOutput(this.#state.storage, cacheKey).catch(\n\t\t\t\t() => {}\n\t\t\t);\n\n\t\t\tawait this.#engine.timeoutHandler.acquire(this.#engine);\n\n\t\t\tif (stepState.attemptedCount == 0) {\n\t\t\t\tthis.#engine.writeLog(events.start, cacheKey, stepNameWithCounter, {\n\t\t\t\t\tconfig,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// in case the engine dies while retrying and wakes up before the retry period\n\t\t\t\tconst priorityQueueHash = `${cacheKey}-${stepState.attemptedCount}`;\n\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\tconst retryEntryPQ = this.#engine.priorityQueue.getFirst(\n\t\t\t\t\t(a) => a.hash === priorityQueueHash && a.type === \"retry\"\n\t\t\t\t);\n\t\t\t\t// complete sleep if it didn't finish for some reason\n\t\t\t\tif (retryEntryPQ !== undefined) {\n\t\t\t\t\tconst disableAllRetryDelays = await this.#state.storage.get(\n\t\t\t\t\t\tMODIFIER_KEYS.DISABLE_ALL_RETRY_DELAYS\n\t\t\t\t\t);\n\t\t\t\t\tconst disableThisRetryDelay =\n\t\t\t\t\t\tawait this.#state.storage.get(retryDelayDisableKey);\n\t\t\t\t\tconst disableRetryDelay =\n\t\t\t\t\t\tdisableAllRetryDelays || disableThisRetryDelay;\n\n\t\t\t\t\tawait this.#engine.timeoutHandler.release(this.#engine);\n\t\t\t\t\tawait scheduler.wait(\n\t\t\t\t\t\tdisableRetryDelay ? 0 : retryEntryPQ.targetTimestamp - Date.now()\n\t\t\t\t\t);\n\t\t\t\t\tawait this.#engine.timeoutHandler.acquire(this.#engine);\n\t\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\t\tthis.#engine.priorityQueue.remove({\n\t\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\t\ttype: \"retry\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result;\n\n\t\t\tconst instanceMetadata =\n\t\t\t\tawait this.#state.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\t\t\tif (!instanceMetadata) {\n\t\t\t\tthrow new Error(\"instanceMetadata is undefined\");\n\t\t\t}\n\t\t\tconst { accountId, instance } = instanceMetadata;\n\n\t\t\tlet streamResultSeen = false;\n\t\t\tlet lastStreamMeta: StreamOutputMeta | undefined;\n\t\t\tconst abortController = new AbortController();\n\t\t\tconst stepExecutionSignal = AbortSignal.any([\n\t\t\t\tabortController.signal,\n\t\t\t\tthis.#engine.engineAbortController.signal,\n\t\t\t]);\n\n\t\t\ttry {\n\t\t\t\tconst timeoutPromise = async (): Promise<never> => {\n\t\t\t\t\tconst priorityQueueHash = `${cacheKey}-${stepState.attemptedCount}`;\n\t\t\t\t\tlet timeout = ms(config.timeout);\n\t\t\t\t\tif (forceStepTimeout) {\n\t\t\t\t\t\ttimeout = 0;\n\t\t\t\t\t}\n\t\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\t\tawait this.#engine.priorityQueue.add({\n\t\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\t\ttargetTimestamp: Date.now() + timeout,\n\t\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t\t});\n\t\t\t\t\tawait scheduler.wait(timeout);\n\t\t\t\t\t// if we reach here, means that we can try to delete the timeout from the PQ\n\t\t\t\t\t// because we managed to wait in the same lifetime\n\t\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\t\tawait this.#engine.priorityQueue.remove({\n\t\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t\t});\n\t\t\t\t\tconst error = new WorkflowTimeoutError(\n\t\t\t\t\t\t`Execution timed out after ${timeout}ms`\n\t\t\t\t\t);\n\t\t\t\t\tabortController.abort(error);\n\t\t\t\t\tthrow error;\n\t\t\t\t};\n\n\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\tevents.attemptStart,\n\t\t\t\t\tcacheKey,\n\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t{\n\t\t\t\t\t\tattempt: stepState.attemptedCount + 1,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tstepState.attemptedCount++;\n\t\t\t\tawait this.#state.storage.put(stepStateKey, stepState);\n\t\t\t\tconst priorityQueueHash = `${cacheKey}-${stepState.attemptedCount}`;\n\n\t\t\t\tconst mockErrorKey = `${MODIFIER_KEYS.MOCK_STEP_ERROR}${valueKey}`;\n\t\t\t\tconst persistentMockError = await this.#state.storage.get<{\n\t\t\t\t\tname: string;\n\t\t\t\t\tmessage: string;\n\t\t\t\t}>(mockErrorKey);\n\t\t\t\tconst transientMockError = await this.#state.storage.get<{\n\t\t\t\t\tname: string;\n\t\t\t\t\tmessage: string;\n\t\t\t\t}>(`${mockErrorKey}-${stepState.attemptedCount}`);\n\t\t\t\tconst mockErrorPayload = persistentMockError || transientMockError;\n\n\t\t\t\t// if a mocked error exists, throw it immediately\n\t\t\t\tif (mockErrorPayload) {\n\t\t\t\t\tconst errorToThrow = new Error(mockErrorPayload.message);\n\t\t\t\t\terrorToThrow.name = mockErrorPayload.name;\n\t\t\t\t\tthrow errorToThrow;\n\t\t\t\t}\n\n\t\t\t\tconst replaceResult = await this.#state.storage.get(\n\t\t\t\t\t`${MODIFIER_KEYS.REPLACE_RESULT}${valueKey}`\n\t\t\t\t);\n\n\t\t\t\tconst forceStepTimeoutKey = `${MODIFIER_KEYS.FORCE_STEP_TIMEOUT}${valueKey}`;\n\t\t\t\tconst persistentStepTimeout =\n\t\t\t\t\tawait this.#state.storage.get(forceStepTimeoutKey);\n\t\t\t\tconst transientStepTimeout = await this.#state.storage.get(\n\t\t\t\t\t`${forceStepTimeoutKey}-${stepState.attemptedCount}`\n\t\t\t\t);\n\t\t\t\tconst forceStepTimeout = persistentStepTimeout || transientStepTimeout;\n\n\t\t\t\tlet timeoutTask: Promise<never> | undefined;\n\n\t\t\t\tconst persistStepResult = async (\n\t\t\t\t\tvalue: unknown,\n\t\t\t\t\tactiveTimeoutTask?: Promise<never>\n\t\t\t\t): Promise<unknown> => {\n\t\t\t\t\tif (!isReadableStreamLike(value)) {\n\t\t\t\t\t\t// Typed-array views anywhere in the value tree are copied\n\t\t\t\t\t\t// into a tight backing buffer so the full backing buffer\n\t\t\t\t\t\t// does not ride along with each view (issue #14101). View\n\t\t\t\t\t\t// types are preserved so cached replays observe the same\n\t\t\t\t\t\t// constructor as the live execution path. The caller still\n\t\t\t\t\t\t// receives the original `value` below \u2014 only the stored\n\t\t\t\t\t\t// shape changes.\n\t\t\t\t\t\tconst stored = normalizeForStorage(value);\n\t\t\t\t\t\tawait this.#state.storage.put(valueKey, { value: stored });\n\t\t\t\t\t\tabortController.abort(\"step finished\");\n\t\t\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\t\t\tthis.#engine.priorityQueue.remove({\n\t\t\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\tstreamResultSeen = true;\n\t\t\t\t\tconst streamMeta = await writeStreamOutput({\n\t\t\t\t\t\tstorage: this.#state.storage,\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\t\t\tstream: value as ReadableStream<unknown>,\n\t\t\t\t\t\tsignal: stepExecutionSignal,\n\t\t\t\t\t\ttimeoutTask: activeTimeoutTask,\n\t\t\t\t\t});\n\t\t\t\t\tlastStreamMeta = streamMeta;\n\n\t\t\t\t\tabortController.abort(\"step finished\");\n\t\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\t\tthis.#engine.priorityQueue.remove({\n\t\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t\t});\n\t\t\t\t\treturn createReplayReadableStream({\n\t\t\t\t\t\tstorage: this.#state.storage,\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\tmeta: streamMeta,\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\tif (forceStepTimeout) {\n\t\t\t\t\tresult = await timeoutPromise();\n\t\t\t\t} else if (replaceResult) {\n\t\t\t\t\t// Check if the mocked result is a stream sentinel (from mockStepResult with ReadableStream)\n\t\t\t\t\tif (\n\t\t\t\t\t\treplaceResult &&\n\t\t\t\t\t\ttypeof replaceResult === \"object\" &&\n\t\t\t\t\t\t(replaceResult as Record<string, unknown>).__mockStreamOutput\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst sentinel = replaceResult as {\n\t\t\t\t\t\t\t__mockStreamOutput: true;\n\t\t\t\t\t\t\tcacheKey: string;\n\t\t\t\t\t\t\tmeta: StreamOutputMeta;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tresult = createReplayReadableStream({\n\t\t\t\t\t\t\tstorage: this.#state.storage,\n\t\t\t\t\t\t\tcacheKey: sentinel.cacheKey,\n\t\t\t\t\t\t\tmeta: sentinel.meta,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = replaceResult;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttimeoutTask = timeoutPromise();\n\t\t\t\t\tresult = await Promise.race([\n\t\t\t\t\t\tdoWrapperClosure({\n\t\t\t\t\t\t\tstep: { name, count },\n\t\t\t\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\t\t\t\tconfig: structuredClone(config),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttimeoutTask,\n\t\t\t\t\t]);\n\t\t\t\t}\n\n\t\t\t\t// We store the value of `output` in an object with a `value` property. This allows us to store `undefined`,\n\t\t\t\t// in the case that it's returned from the user's code. This is because DO storage will error if you try to\n\t\t\t\t// store undefined directly.\n\t\t\t\ttry {\n\t\t\t\t\tresult = await persistStepResult(result, timeoutTask);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tabortController.abort(\"step errored\");\n\t\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\t\tthis.#engine.priorityQueue.remove({\n\t\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t\t});\n\n\t\t\t\t\tif (e instanceof WorkflowTimeoutError) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fatal serialization/storage errors abort the DO immediately, so\n\t\t\t\t\t// previously registered rollbacks do not run for these paths.\n\t\t\t\t\t// This matches the existing terminal behavior for unrecoverable output.\n\t\t\t\t\t// Stream-specific fatal errors\n\t\t\t\t\tif (\n\t\t\t\t\t\te instanceof InvalidStepReadableStreamError ||\n\t\t\t\t\t\te instanceof OversizedStreamChunkError ||\n\t\t\t\t\t\te instanceof UnsupportedStreamChunkError\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\t\t\tevents.attemptFailure,\n\t\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\t\t\t\t\terror: new WorkflowFatalError(e.message),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\t\t\tevents.failure,\n\t\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.#engine.writeLog(InstanceEvent.WORKFLOW_FAILURE, null, null, {\n\t\t\t\t\t\t\terror: new WorkflowFatalError(\n\t\t\t\t\t\t\t\t`The execution of the Workflow instance was terminated, as the step \"${name}\" returned an invalid ReadableStream output. ${e.message}`\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tawait this.#engine.setStatus(\n\t\t\t\t\t\t\taccountId,\n\t\t\t\t\t\t\tinstance.id,\n\t\t\t\t\t\t\tInstanceStatus.Errored\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait this.#engine.timeoutHandler.release(this.#engine);\n\t\t\t\t\t\tawait this.#engine.abort(ABORT_REASONS.NOT_SERIALISABLE);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (e instanceof StreamOutputStorageLimitError) {\n\t\t\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\t\t\tevents.attemptFailure,\n\t\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\t\t\t\t\terror: new WorkflowFatalError(e.message),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\t\t\tevents.failure,\n\t\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.#engine.writeLog(InstanceEvent.WORKFLOW_FAILURE, null, null, {\n\t\t\t\t\t\t\terror: new WorkflowFatalError(\n\t\t\t\t\t\t\t\t\"The instance has exceeded the 1GiB storage limit\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tawait this.#engine.setStatus(\n\t\t\t\t\t\t\taccountId,\n\t\t\t\t\t\t\tinstance.id,\n\t\t\t\t\t\t\tInstanceStatus.Errored\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait this.#engine.timeoutHandler.release(this.#engine);\n\t\t\t\t\t\tawait this.#engine.abort(ABORT_REASONS.STORAGE_LIMIT_EXCEEDED);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// something that cannot be written to storage\n\t\t\t\t\tif (e instanceof Error && e.name === \"DataCloneError\") {\n\t\t\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\t\t\tevents.attemptFailure,\n\t\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\t\t\t\t\terror: new WorkflowFatalError(\n\t\t\t\t\t\t\t\t\t`Value returned from step \"${name}\" is not serialisable`\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\t\t\tevents.failure,\n\t\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.#engine.writeLog(InstanceEvent.WORKFLOW_FAILURE, null, null, {\n\t\t\t\t\t\t\terror: new WorkflowFatalError(\n\t\t\t\t\t\t\t\t`The execution of the Workflow instance was terminated, as the step \"${name}\" returned a value which is not serialisable`\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tawait this.#engine.setStatus(\n\t\t\t\t\t\t\taccountId,\n\t\t\t\t\t\t\tinstance.id,\n\t\t\t\t\t\t\tInstanceStatus.Errored\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait this.#engine.timeoutHandler.release(this.#engine);\n\t\t\t\t\t\tawait this.#engine.abort(ABORT_REASONS.NOT_SERIALISABLE);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\te instanceof Error &&\n\t\t\t\t\t\te.message.includes(\"string or blob too big: SQLITE_TOOBIG\")\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new WorkflowInternalError(\n\t\t\t\t\t\t\t`Step ${stepNameWithCounter} output is too large. Maximum allowed size is 1MiB.`\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// TODO (WOR-77): Send this to Sentry\n\t\t\t\t\t\tthrow new WorkflowInternalError(\n\t\t\t\t\t\t\t`Storage failure for ${stepNameWithCounter} due to internal error.`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// if we reach here, means that the closure ran successfully and we can remove the timeout from the PQ\n\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\tthis.#engine.priorityQueue.remove({\n\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t});\n\n\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\tevents.attemptSuccess,\n\t\t\t\t\tcacheKey,\n\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t{\n\t\t\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tconst error = e as Error;\n\t\t\t\t// if we reach here, means that the closure ran but errored out and we can remove the timeout from the PQ\n\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\tthis.#engine.priorityQueue.remove({\n\t\t\t\t\thash: `${cacheKey}-${stepState.attemptedCount}`,\n\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t});\n\n\t\t\t\t// Clean up any partial stream output from this failed attempt\n\t\t\t\tif (streamResultSeen) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait rollbackStreamOutput(\n\t\t\t\t\t\t\tthis.#state.storage,\n\t\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\t\tstepState.attemptedCount\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Best-effort cleanup\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\te instanceof Error &&\n\t\t\t\t\t(error.name === \"NonRetryableError\" ||\n\t\t\t\t\t\terror.message.startsWith(\"NonRetryableError\"))\n\t\t\t\t) {\n\t\t\t\t\tconst attemptError = shouldPreserveNonRetryableError()\n\t\t\t\t\t\t? new PreservedNonRetryableError(e)\n\t\t\t\t\t\t: new WorkflowFatalError(\n\t\t\t\t\t\t\t\t`Step threw a NonRetryableError with message \"${e.message}\"`\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\t\tevents.attemptFailure,\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\t\t\t\terror: attemptError,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\t\tevents.failure,\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t\t{}\n\t\t\t\t\t);\n\t\t\t\t\tthis.#registerRollback({\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\trollbackFn,\n\t\t\t\t\t\tstepContext: forwardStepContext(),\n\t\t\t\t\t\trollbackConfig,\n\t\t\t\t\t});\n\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\tevents.attemptFailure,\n\t\t\t\t\tcacheKey,\n\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t{\n\t\t\t\t\t\tattempt: stepState.attemptedCount,\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tname: error.name,\n\t\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\t\t// TODO (WOR-79): Stacks are all incorrect over RPC and need work\n\t\t\t\t\t\t\t// stack: error.stack,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tawait this.#state.storage.put(stepStateKey, stepState);\n\n\t\t\t\tif (stepState.attemptedCount <= config.retries.limit) {\n\t\t\t\t\t// TODO (WOR-71): Think through if every Error should transition\n\t\t\t\t\tconst durationMs = calcRetryDuration(config, stepState);\n\t\t\t\t\tconst disableAllRetryDelays = await this.#state.storage.get(\n\t\t\t\t\t\tMODIFIER_KEYS.DISABLE_ALL_RETRY_DELAYS\n\t\t\t\t\t);\n\t\t\t\t\tconst disableThisRetryDelay =\n\t\t\t\t\t\tawait this.#state.storage.get(retryDelayDisableKey);\n\t\t\t\t\tconst disableRetryDelay =\n\t\t\t\t\t\tdisableAllRetryDelays || disableThisRetryDelay;\n\t\t\t\t\tconst effectiveDuration = disableRetryDelay ? 0 : durationMs;\n\n\t\t\t\t\tconst priorityQueueHash = `${cacheKey}-${stepState.attemptedCount}`;\n\t\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\t\tawait this.#engine.priorityQueue.add({\n\t\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\t\ttargetTimestamp: Date.now() + effectiveDuration,\n\t\t\t\t\t\ttype: \"retry\",\n\t\t\t\t\t});\n\t\t\t\t\tawait this.#engine.timeoutHandler.release(this.#engine);\n\t\t\t\t\t// Race retry wait against the pause signal so pause\n\t\t\t\t\t// takes effect immediately during retries\n\t\t\t\t\t{\n\t\t\t\t\t\tconst retryPauseSignal = this.#engine.pauseController.signal;\n\t\t\t\t\t\tlet pausedDuringRetry = false;\n\t\t\t\t\t\tawait Promise.race([\n\t\t\t\t\t\t\tscheduler.wait(effectiveDuration),\n\t\t\t\t\t\t\tnew Promise<void>((resolve) => {\n\t\t\t\t\t\t\t\tif (retryPauseSignal.aborted) {\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tretryPauseSignal.addEventListener(\"abort\", () => resolve(), {\n\t\t\t\t\t\t\t\t\tonce: true,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tconst retryStatus = await this.#engine.getStatus();\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tretryStatus === InstanceStatus.Paused ||\n\t\t\t\t\t\t\tretryStatus === InstanceStatus.WaitingForPause\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tpausedDuringRetry = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pausedDuringRetry) {\n\t\t\t\t\t\t\tthrow new Error(ABORT_REASONS.USER_PAUSE);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if it ever reaches here, we can try to remove it from the priority queue since it's no longer useful\n\t\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\t\tthis.#engine.priorityQueue.remove({\n\t\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\t\ttype: \"retry\",\n\t\t\t\t\t});\n\n\t\t\t\t\treturn doWrapper(doWrapperClosure);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.#engine.timeoutHandler.release(this.#engine);\n\t\t\t\t\t// Clean up any leftover stream chunks on retry exhaustion\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait rollbackStreamOutput(\n\t\t\t\t\t\t\tthis.#state.storage,\n\t\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\t\tstepState.attemptedCount\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Best-effort cleanup\n\t\t\t\t\t}\n\t\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\t\tevents.failure,\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\tstepNameWithCounter,\n\t\t\t\t\t\t{}\n\t\t\t\t\t);\n\t\t\t\t\tthis.#registerRollback({\n\t\t\t\t\t\tcacheKey,\n\t\t\t\t\t\trollbackFn,\n\t\t\t\t\t\tstepContext: forwardStepContext(),\n\t\t\t\t\t\trollbackConfig,\n\t\t\t\t\t});\n\n\t\t\t\t\tawait this.#state.storage.put(errorKey, error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.#engine.writeLog(events.success, cacheKey, stepNameWithCounter, {\n\t\t\t\t// TODO (WOR-86): Add limits, figure out serialization\n\t\t\t\tresult: lastStreamMeta ? undefined : result,\n\t\t\t\t...(lastStreamMeta && {\n\t\t\t\t\tstreamOutput: { cacheKey, meta: lastStreamMeta },\n\t\t\t\t}),\n\t\t\t});\n\t\t\tthis.#registerRollback({\n\t\t\t\tcacheKey,\n\t\t\t\trollbackFn,\n\t\t\t\tstepContext: forwardStepContext(),\n\t\t\t\toutput: result,\n\t\t\t\trollbackConfig,\n\t\t\t});\n\t\t\tawait this.#engine.timeoutHandler.release(this.#engine);\n\t\t\treturn result;\n\t\t};\n\n\t\tconst result = await doWrapper(closure);\n\n\t\t// Check if a pause was requested while this step was running\n\t\tawait this.#checkForPendingPause();\n\n\t\treturn result;\n\t}\n\n\tasync sleep(name: string, duration: WorkflowSleepDuration): Promise<void> {\n\t\tif (typeof duration == \"string\") {\n\t\t\tduration = ms(duration);\n\t\t}\n\n\t\tconst hash = await computeHash(name + duration.toString());\n\t\tconst count = this.#getCount(\"sleep-\" + name + duration.toString());\n\t\tconst cacheKey = `${hash}-${count}`;\n\t\tconst sleepNameWithCounter = `${name}-${count}`;\n\n\t\tconst sleepKey = `${cacheKey}-value`;\n\t\tconst sleepLogWrittenKey = `${cacheKey}-log-written`;\n\t\tconst maybeResult = await this.#state.storage.get(sleepKey);\n\n\t\tconst sleepNameCountHash = await computeHash(\n\t\t\tname + this.#getCount(\"sleep-\" + name)\n\t\t);\n\t\tconst disableThisSleep = await this.#state.storage.get(\n\t\t\t`${MODIFIER_KEYS.DISABLE_SLEEP}${sleepNameCountHash}`\n\t\t);\n\t\tconst disableAllSleeps = await this.#state.storage.get(\n\t\t\tMODIFIER_KEYS.DISABLE_ALL_SLEEPS\n\t\t);\n\n\t\tconst disableSleep = disableAllSleeps || disableThisSleep;\n\n\t\tif (maybeResult != undefined) {\n\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\tconst entryPQ = this.#engine.priorityQueue.getFirst(\n\t\t\t\t(a) => a.hash === cacheKey && a.type === \"sleep\"\n\t\t\t);\n\t\t\t// in case the engine dies while sleeping and wakes up before the retry period\n\t\t\tif (entryPQ !== undefined) {\n\t\t\t\tawait scheduler.wait(\n\t\t\t\t\tdisableSleep ? 0 : entryPQ.targetTimestamp - Date.now()\n\t\t\t\t);\n\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\tthis.#engine.priorityQueue.remove({ hash: cacheKey, type: \"sleep\" });\n\t\t\t}\n\t\t\tconst shouldWriteLog =\n\t\t\t\t(await this.#state.storage.get(sleepLogWrittenKey)) == undefined;\n\t\t\tif (shouldWriteLog) {\n\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\tInstanceEvent.SLEEP_COMPLETE,\n\t\t\t\t\tcacheKey,\n\t\t\t\t\tsleepNameWithCounter,\n\t\t\t\t\t{}\n\t\t\t\t);\n\t\t\t\tawait this.#state.storage.put(sleepLogWrittenKey, true);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#engine.writeLog(\n\t\t\tInstanceEvent.SLEEP_START,\n\t\t\tcacheKey,\n\t\t\tsleepNameWithCounter,\n\t\t\t{\n\t\t\t\tdurationMs: duration,\n\t\t\t}\n\t\t);\n\t\tconst instanceMetadata =\n\t\t\tawait this.#state.storage.get<InstanceMetadata>(INSTANCE_METADATA);\n\t\tif (!instanceMetadata) {\n\t\t\tthrow new Error(\"instanceMetadata is undefined\");\n\t\t}\n\n\t\t// TODO(lduarte): not sure of this order of operations\n\t\tawait this.#state.storage.put(sleepKey, true); // Any value will do for cache hit\n\n\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\tawait this.#engine.priorityQueue.add({\n\t\t\thash: cacheKey,\n\t\t\ttargetTimestamp: Date.now() + (disableSleep ? 0 : duration),\n\t\t\ttype: \"sleep\",\n\t\t});\n\n\t\t// Race the sleep against the pause signal\n\t\tconst pauseSignal = this.#engine.pauseController.signal;\n\t\tconst sleepDuration = disableSleep ? 0 : duration;\n\n\t\tlet pausedDuringSleep = false;\n\t\tawait Promise.race([\n\t\t\tscheduler.wait(sleepDuration),\n\t\t\tnew Promise<void>((resolve) => {\n\t\t\t\tif (pauseSignal.aborted) {\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpauseSignal.addEventListener(\"abort\", () => resolve(), {\n\t\t\t\t\tonce: true,\n\t\t\t\t});\n\t\t\t}),\n\t\t]);\n\n\t\t// Check if we were paused during the sleep\n\t\tconst statusAfterSleep = await this.#engine.getStatus();\n\t\tif (\n\t\t\tstatusAfterSleep === InstanceStatus.Paused ||\n\t\t\tstatusAfterSleep === InstanceStatus.WaitingForPause\n\t\t) {\n\t\t\tpausedDuringSleep = true;\n\t\t}\n\n\t\tif (pausedDuringSleep) {\n\t\t\t// Throw pause error\n\t\t\tthrow new Error(ABORT_REASONS.USER_PAUSE);\n\t\t}\n\n\t\tthis.#engine.writeLog(\n\t\t\tInstanceEvent.SLEEP_COMPLETE,\n\t\t\tcacheKey,\n\t\t\tsleepNameWithCounter,\n\t\t\t{}\n\t\t);\n\t\tawait this.#state.storage.put(sleepLogWrittenKey, true);\n\n\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\tthis.#engine.priorityQueue.remove({ hash: cacheKey, type: \"sleep\" });\n\t}\n\n\tasync sleepUntil(name: string, timestamp: Date | number): Promise<void> {\n\t\tif (timestamp instanceof Date) {\n\t\t\ttimestamp = timestamp.valueOf();\n\t\t}\n\n\t\tconst now = Date.now();\n\t\t// timestamp needs to be in the future, throw if not\n\t\tif (timestamp < now) {\n\t\t\tthrow new Error(\n\t\t\t\t\"You can't sleep until a time in the past, time-traveler\"\n\t\t\t);\n\t\t}\n\n\t\treturn this.sleep(name, timestamp - now);\n\t}\n\n\tasync waitForEvent<T>(\n\t\tname: string,\n\t\toptions: {\n\t\t\ttype: string;\n\t\t\ttimeout?: string | number;\n\t\t}\n\t): Promise<WorkflowStepEvent<T>> {\n\t\tif (!options.timeout) {\n\t\t\toptions.timeout = \"24 hours\";\n\t\t}\n\n\t\tconst count = this.#getCount(\"waitForEvent-\" + name);\n\t\tconst waitForEventNameWithCounter = `${name}-${count}`;\n\t\tconst hash = await computeHash(waitForEventNameWithCounter);\n\t\tconst cacheKey = `${hash}-${count}`;\n\t\tconst waitForEventKey = `${cacheKey}-value`;\n\t\tconst errorKey = `${cacheKey}-error`;\n\n\t\tconst pendingWaiterRegistered = `${cacheKey}-pending`;\n\n\t\tconst timeoutError = new WorkflowTimeoutError(\n\t\t\t`Execution timed out after ${ms(options.timeout)}ms`\n\t\t) as Error & UserErrorField;\n\n\t\tconst maybeResult = await this.#state.storage.get<Event>(waitForEventKey);\n\n\t\tif (maybeResult) {\n\t\t\tconst shouldWriteLog =\n\t\t\t\t(await this.#state.storage.get(waitForEventKey)) == undefined;\n\t\t\tif (shouldWriteLog) {\n\t\t\t\tthis.#engine.writeLog(\n\t\t\t\t\tInstanceEvent.WAIT_COMPLETE,\n\t\t\t\t\tcacheKey,\n\t\t\t\t\twaitForEventNameWithCounter,\n\t\t\t\t\tmaybeResult\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn maybeResult as WorkflowStepEvent<T>;\n\t\t}\n\t\tconst maybeError: (Error & UserErrorField) | undefined =\n\t\t\t(await this.#state.storage.get(errorKey)) as Error | undefined;\n\n\t\tif (maybeError) {\n\t\t\tmaybeError.isUserError = true;\n\t\t\tthrow maybeError;\n\t\t}\n\n\t\tconst maybeRegistered = await this.#state.storage.get(\n\t\t\tpendingWaiterRegistered\n\t\t);\n\n\t\tif (!maybeRegistered) {\n\t\t\tthis.#engine.writeLog(\n\t\t\t\tInstanceEvent.WAIT_START,\n\t\t\t\tcacheKey,\n\t\t\t\twaitForEventNameWithCounter,\n\t\t\t\t{\n\t\t\t\t\tevent: options.type,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tawait this.#state.storage.put(pendingWaiterRegistered, true);\n\t\t}\n\n\t\t// if there's a timeout on the PQ we pop it, because we wont need it\n\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\tconst timeoutEntryPQ = this.#engine.priorityQueue.getFirst(\n\t\t\t(a) => a.hash === cacheKey && a.type === \"timeout\"\n\t\t);\n\t\tconst forceEventTimeout = await this.#state.storage.get(\n\t\t\t`${MODIFIER_KEYS.FORCE_EVENT_TIMEOUT}${waitForEventKey}`\n\t\t);\n\t\tif (\n\t\t\t(timeoutEntryPQ === undefined &&\n\t\t\t\tthis.#engine.priorityQueue !== undefined &&\n\t\t\t\tthis.#engine.priorityQueue.checkIfExistedInPast({\n\t\t\t\t\thash: cacheKey,\n\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t})) ||\n\t\t\t(timeoutEntryPQ !== undefined &&\n\t\t\t\ttimeoutEntryPQ.targetTimestamp < Date.now()) ||\n\t\t\tforceEventTimeout\n\t\t) {\n\t\t\tthis.#engine.writeLog(\n\t\t\t\tInstanceEvent.WAIT_TIMED_OUT,\n\t\t\t\tcacheKey,\n\t\t\t\twaitForEventNameWithCounter,\n\t\t\t\t{\n\t\t\t\t\tname: timeoutError.name,\n\t\t\t\t\tmessage: timeoutError.message,\n\t\t\t\t}\n\t\t\t);\n\t\t\tawait this.#state.storage.put(errorKey, timeoutError);\n\t\t\tthrow timeoutError;\n\t\t}\n\n\t\tconst timeoutPromise = async (timeoutToWait: number, addToPQ: boolean) => {\n\t\t\tconst priorityQueueHash = cacheKey;\n\t\t\tif (addToPQ) {\n\t\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\t\tawait this.#engine.priorityQueue.add({\n\t\t\t\t\thash: priorityQueueHash,\n\t\t\t\t\ttargetTimestamp: Date.now() + timeoutToWait,\n\t\t\t\t\ttype: \"timeout\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tawait scheduler.wait(timeoutToWait);\n\t\t\t// if we reach here, means that we can try to delete the timeout from the PQ\n\t\t\t// because we managed to wait in the same lifetime\n\n\t\t\t// @ts-expect-error priorityQueue is initiated in init\n\t\t\tthis.#engine.priorityQueue.remove({\n\t\t\t\thash: priorityQueueHash,\n\t\t\t\ttype: \"timeout\",\n\t\t\t});\n\t\t\t// NOTE(lduarte): marking errors as user error allows the observability layer to avoid leaking\n\t\t\t// user errors to sentry while making everything more observable. `isUserError` is not serialized\n\t\t\t// into userland code due to how workerd serialzises errors over RPC - we also set it as undefined\n\t\t\t// in the obs layer in case changes to workerd happen\n\t\t\tconst error = timeoutError;\n\t\t\terror.isUserError = true;\n\t\t\tthrow error;\n\t\t};\n\n\t\tconst eventPromise = new Promise<Event>((resolve) => {\n\t\t\t// TODO: This might need to be the name, not the event type\n\n\t\t\tconst eventTypeQueue = this.#engine.eventMap.get(options.type);\n\t\t\tif (eventTypeQueue) {\n\t\t\t\tconst event = eventTypeQueue.shift();\n\t\t\t\tif (event) {\n\t\t\t\t\tthis.#engine.eventMap.set(options.type, eventTypeQueue);\n\t\t\t\t\treturn resolve(event);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst callbacks = this.#engine.waiters.get(options.type) ?? [];\n\t\t\tcallbacks.push([cacheKey, resolve]);\n\n\t\t\tthis.#engine.waiters.set(options.type, callbacks);\n\t\t});\n\n\t\t// Race event, timeout, and pause signal. The pause promise resolves\n\t\t// when the race settles via event/timeout before the pause signal fires\n\t\tconst pauseSignal = this.#engine.pauseController.signal;\n\t\tconst pausePromise = new Promise<void>((resolve) => {\n\t\t\tif (pauseSignal.aborted) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpauseSignal.addEventListener(\"abort\", () => resolve(), {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t});\n\n\t\tconst raceResult = await Promise.race([\n\t\t\teventPromise,\n\t\t\ttimeoutEntryPQ !== undefined\n\t\t\t\t? timeoutPromise(timeoutEntryPQ.targetTimestamp - Date.now(), false)\n\t\t\t\t: timeoutPromise(ms(options.timeout), true),\n\t\t\tpausePromise,\n\t\t]).catch(async (error) => {\n\t\t\tconst callbacks = this.#engine.waiters.get(options.type);\n\t\t\tif (callbacks) {\n\t\t\t\tconst idx = callbacks.findIndex(([key]) => key === cacheKey);\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tcallbacks.splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.#engine.writeLog(\n\t\t\t\tInstanceEvent.WAIT_TIMED_OUT,\n\t\t\t\tcacheKey,\n\t\t\t\twaitForEventNameWithCounter,\n\t\t\t\terror\n\t\t\t);\n\t\t\tawait this.#state.storage.put(errorKey, error);\n\t\t\tthrow error;\n\t\t});\n\n\t\t// Pause signal won the race \u2014 throw to stop the workflow\n\t\tif (raceResult === undefined) {\n\t\t\tthrow new Error(ABORT_REASONS.USER_PAUSE);\n\t\t}\n\n\t\tthis.#engine.writeLog(\n\t\t\tInstanceEvent.WAIT_COMPLETE,\n\t\t\tcacheKey,\n\t\t\twaitForEventNameWithCounter,\n\t\t\traceResult as Event\n\t\t);\n\t\tawait this.#state.storage.put(waitForEventKey, raceResult);\n\n\t\treturn raceResult as WorkflowStepEvent<T>;\n\t}\n}\n", "const e=36e5,t=24*e,n={year:315576e5,month:30*t,week:7*t,day:t,hour:e,minute:6e4,second:1e3,m:1},r=e=>{if(!isNaN(+e))return+e;const[,t,r]=e.match(/^([^ ]+) +(\\w\\w*?)s?$/)||[,e];return+t*(n[r]||1)},o=(e,t=new Date)=>new Date(t.getTime()+r(e)),s=(e,{parts:t=9,join:r=\", \"}={})=>{let o,s=[];for(let[a,i]of Object.entries(n))e>=i&&t-- >0&&(e-=(o=e/i|0)*i,t||(o+=e/i),1==o&&\"m\"!=a||(a+=\"s\"),s.push(r?o+\" \"+a:[a,o]));return r?s.join(r):s},a=e=>r(e)/1e3;export{o as datePlus,s as duration,r as ms,a as seconds};\n", "import type { ResolvedStepConfig } from \"./context\";\nimport type {\n\tDatabaseInstance,\n\tDatabaseVersion,\n\tDatabaseWorkflow,\n} from \"./engine\";\nimport type { WorkflowEvent } from \"cloudflare:workers\";\n\nexport type Instance = {\n\tid: string;\n\tcreated_on: string;\n\tmodified_on: string;\n\tworkflow_id: string;\n\tversion_id: string;\n\tstatus: InstanceStatus;\n\tstarted_on: string | null;\n\tended_on: string | null;\n};\n\nexport const INSTANCE_METADATA = `INSTANCE_METADATA`;\n\nexport type InstanceMetadata = {\n\taccountId: number;\n\tworkflow: DatabaseWorkflow;\n\tversion: DatabaseVersion;\n\tinstance: DatabaseInstance;\n\tevent: WorkflowEvent<unknown>;\n};\n\nexport enum InstanceStatus {\n\tQueued = 0, // Queued and waiting to start\n\tRunning = 1,\n\tPaused = 2, // TODO (WOR-73): Implement pause\n\tErrored = 3, // Stopped due to a user or system Error\n\tTerminated = 4, // Stopped explicitly by user\n\tComplete = 5, // Successful completion\n\tWaitingForPause = 6,\n\tWaiting = 7,\n}\n\nexport function instanceStatusName(status: InstanceStatus) {\n\tswitch (status) {\n\t\tcase InstanceStatus.Queued:\n\t\t\treturn \"queued\";\n\t\tcase InstanceStatus.Running:\n\t\t\treturn \"running\";\n\t\tcase InstanceStatus.Paused:\n\t\t\treturn \"paused\";\n\t\tcase InstanceStatus.Errored:\n\t\t\treturn \"errored\";\n\t\tcase InstanceStatus.Terminated:\n\t\t\treturn \"terminated\";\n\t\tcase InstanceStatus.Complete:\n\t\t\treturn \"complete\";\n\t\tcase InstanceStatus.WaitingForPause:\n\t\t\treturn \"waitingForPause\";\n\t\tcase InstanceStatus.Waiting:\n\t\t\treturn \"waiting\";\n\t\tdefault:\n\t\t\treturn \"unknown\";\n\t}\n}\n\nexport const instanceStatusNames = [\n\t\"queued\",\n\t\"running\",\n\t\"paused\",\n\t\"errored\",\n\t\"terminated\",\n\t\"complete\",\n\t\"waitingForPause\",\n\t\"waiting\",\n\t\"unknown\",\n] as const;\n\nexport function toInstanceStatus(status: string): InstanceStatus {\n\tswitch (status) {\n\t\tcase \"queued\":\n\t\t\treturn InstanceStatus.Queued;\n\t\tcase \"running\":\n\t\t\treturn InstanceStatus.Running;\n\t\tcase \"paused\":\n\t\t\treturn InstanceStatus.Paused;\n\t\tcase \"errored\":\n\t\t\treturn InstanceStatus.Errored;\n\t\tcase \"terminated\":\n\t\t\treturn InstanceStatus.Terminated;\n\t\tcase \"complete\":\n\t\t\treturn InstanceStatus.Complete;\n\t\tcase \"waitingForPause\":\n\t\t\treturn InstanceStatus.WaitingForPause;\n\t\tcase \"waiting\":\n\t\t\treturn InstanceStatus.Waiting;\n\t\tcase \"unknown\":\n\t\t\tthrow new Error(\"unknown cannot be parsed into a InstanceStatus\");\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`${status} was not handled because it's not a valid InstanceStatus`\n\t\t\t);\n\t}\n}\n\nexport const enum InstanceEvent {\n\tWORKFLOW_QUEUED = 0,\n\tWORKFLOW_START = 1,\n\tWORKFLOW_SUCCESS = 2,\n\tWORKFLOW_FAILURE = 3,\n\tWORKFLOW_TERMINATED = 4,\n\n\tSTEP_START = 5,\n\tSTEP_SUCCESS = 6,\n\tSTEP_FAILURE = 7,\n\n\tSLEEP_START = 8,\n\tSLEEP_COMPLETE = 9,\n\n\tATTEMPT_START = 10,\n\tATTEMPT_SUCCESS = 11,\n\tATTEMPT_FAILURE = 12,\n\n\t// It's here just to make it sequential and to not have gaps in the event types.\n\t__INTERNAL_PROD = 13,\n\n\tWAIT_START = 14,\n\tWAIT_COMPLETE = 15,\n\tWAIT_TIMED_OUT = 16,\n\n\tROLLBACK_START = 17,\n\tROLLBACK_STEP_START = 18,\n\tROLLBACK_ATTEMPT_START = 19,\n\tROLLBACK_ATTEMPT_SUCCESS = 20,\n\tROLLBACK_ATTEMPT_FAILURE = 21,\n\tROLLBACK_STEP_SUCCESS = 22,\n\tROLLBACK_STEP_FAILURE = 23,\n\tROLLBACK_COMPLETE = 24,\n\tROLLBACK_FAILED = 25,\n}\n\nexport const enum InstanceTrigger {\n\tAPI = 0,\n\tBINDING = 1,\n\tEVENT = 2,\n\tCRON = 3,\n}\n\nexport function instanceTriggerName(trigger: InstanceTrigger) {\n\tswitch (trigger) {\n\t\tcase InstanceTrigger.API:\n\t\t\treturn \"api\";\n\t\tcase InstanceTrigger.BINDING:\n\t\t\treturn \"binding\";\n\t\tcase InstanceTrigger.EVENT:\n\t\t\treturn \"event\";\n\t\tcase InstanceTrigger.CRON:\n\t\t\treturn \"cron\";\n\t\tdefault:\n\t\t\treturn \"unknown\";\n\t}\n}\n\nexport type RawInstanceLog = {\n\tid: number;\n\ttimestamp: string;\n\tevent: InstanceEvent;\n\tgroupKey: string | null;\n\ttarget: string | null;\n\tmetadata: string;\n};\n\nexport type InstanceAttempt = {\n\tstart: string;\n\tend: string | null;\n\tsuccess: boolean | null;\n\terror: { name: string; message: string } | null;\n};\n\nexport type InstanceStepLog = {\n\tname: string;\n\tstart: string;\n\tend: string | null;\n\tattempts: InstanceAttempt[];\n\tconfig: ResolvedStepConfig;\n\toutput: unknown;\n\tsuccess: boolean | null;\n\ttype: \"step\";\n};\n\nexport type InstanceSleepLog = {\n\tname: string;\n\tstart: string;\n\tend: string;\n\tfinished: boolean;\n\ttype: \"sleep\";\n};\n\nexport type InstanceTerminateLog = {\n\ttype: \"termination\";\n\ttrigger: {\n\t\tsource: string;\n\t};\n};\n\nexport type InstanceLogsResponse = {\n\tparams: Record<string, unknown>;\n\ttrigger: {\n\t\tsource: ReturnType<typeof instanceTriggerName>;\n\t};\n\tversionId: string;\n\tqueued: string;\n\tstart: string | null;\n\tend: string | null;\n\tsteps: (InstanceStepLog | InstanceSleepLog | InstanceTerminateLog)[];\n\tsuccess: boolean | null;\n\terror: { name: string; message: string } | null;\n\toutput: Rpc.Serializable<unknown>;\n};\n\nexport type WakerPriorityEntry = {\n\thash: string;\n\ttype: WakerPriorityType;\n\ttargetTimestamp: number;\n};\n\nexport type WakerPriorityType = \"sleep\" | \"retry\" | \"timeout\";\n", "export async function computeHash(value: string) {\n\tconst msgUint8 = new TextEncoder().encode(value); // encode as (utf-8) Uint8Array\n\tconst hashBuffer = await crypto.subtle.digest(\"SHA-1\", msgUint8); // hash the message\n\tconst hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array\n\tconst hashHex = hashArray\n\t\t.map((b) => b.toString(16).padStart(2, \"0\"))\n\t\t.join(\"\"); // convert bytes to hex string\n\n\treturn hashHex;\n}\n", "export class WorkflowTimeoutError extends Error {\n\tname = \"WorkflowTimeoutError\";\n}\n\nexport class WorkflowInternalError extends Error {\n\tname = \"WorkflowInternalError\";\n}\n\nexport class WorkflowFatalError extends Error {\n\tname = \"WorkflowFatalError\";\n\n\ttoJSON() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t};\n\t}\n}\n\nexport class PreservedNonRetryableError extends WorkflowFatalError {\n\tname = \"NonRetryableError\";\n\n\tconstructor(err: Error) {\n\t\t// When the error crosses an RPC boundary, the name gets\n\t\t// prepended to the message (e.g. \"NonRetryableError: msg\",\n\t\t// or just \"NonRetryableError\" if the original message was empty).\n\t\t// Parse it back out so we surface the original message.\n\t\tconst message =\n\t\t\terr.name === \"NonRetryableError\"\n\t\t\t\t? err.message\n\t\t\t\t: err.message.replace(/^NonRetryableError:?\\s*/, \"\");\n\t\tsuper(message);\n\t}\n}\n\nexport class WorkflowError extends Error {\n\tname = \"WorkflowError\";\n}\n\nexport class InvalidStepReadableStreamError extends Error {\n\tname = \"InvalidStepReadableStreamError\";\n}\n\nexport class OversizedStreamChunkError extends Error {\n\tname = \"OversizedStreamChunkError\";\n}\n\nexport class UnsupportedStreamChunkError extends Error {\n\tname = \"UnsupportedStreamChunkError\";\n}\n\nexport class StreamOutputStorageLimitError extends Error {\n\tname = \"StreamOutputStorageLimitError\";\n}\n\nexport function createWorkflowError(\n\tmessage: string,\n\terrorCode: string\n): WorkflowError {\n\treturn new WorkflowError(`(${errorCode}) ${message}`);\n}\n\nconst ABORT_PREFIX = \"Aborting engine:\" as const;\n\nexport const ABORT_REASONS = {\n\tUSER_PAUSE: `${ABORT_PREFIX} User called pause`,\n\tUSER_RESTART: `${ABORT_PREFIX} User called restart`,\n\tUSER_TERMINATE: `${ABORT_PREFIX} User called terminate`,\n\tNON_RETRYABLE_ERROR: `${ABORT_PREFIX} A step threw a NonRetryableError`,\n\tNOT_SERIALISABLE: `${ABORT_PREFIX} Value is not serialisable`,\n\tSTORAGE_LIMIT_EXCEEDED: `${ABORT_PREFIX} Storage limit exceeded`,\n\tGRACE_PERIOD_COMPLETE: `${ABORT_PREFIX} Grace period complete`,\n} as const;\n\nconst ABORT_REASON_SET: ReadonlySet<string> = new Set(\n\tObject.values(ABORT_REASONS)\n);\n\nfunction getErrorMessage(e: unknown): string | undefined {\n\tif (e instanceof Error) {\n\t\treturn e.message;\n\t}\n\tif (typeof e === \"object\" && e !== null) {\n\t\tconst msg = (e as { message?: string }).message;\n\t\tif (typeof msg === \"string\") {\n\t\t\treturn msg;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function isAbortError(e: unknown): boolean {\n\tconst msg = getErrorMessage(e);\n\treturn msg !== undefined && ABORT_REASON_SET.has(msg);\n}\n\nexport function isUserTriggeredPause(e: unknown): boolean {\n\treturn getErrorMessage(e) === ABORT_REASONS.USER_PAUSE;\n}\n\nexport function isUserTriggeredRestart(e: unknown): boolean {\n\treturn getErrorMessage(e) === ABORT_REASONS.USER_RESTART;\n}\n\nexport function isUserTriggeredTerminate(e: unknown): boolean {\n\treturn getErrorMessage(e) === ABORT_REASONS.USER_TERMINATE;\n}\n\nfunction getCompatFlag(name: string): boolean {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- safe globalThis access for environments where cloudflare global may not exist\n\treturn (globalThis as any).Cloudflare?.compatibilityFlags?.[name] ?? false;\n}\n\nexport function shouldPreserveNonRetryableError(): boolean {\n\treturn getCompatFlag(\"workflows_preserve_non_retryable_error_message\");\n}\n\nexport function stepNotFoundError(name: string): WorkflowError {\n\treturn createWorkflowError(\n\t\t`Step \"${name}\" not found in execution history`,\n\t\t\"instance.cannot_restart\"\n\t);\n}\n", "import { ms } from \"itty-time\";\n// @ts-expect-error workflows \"shared\" package will be pulled in later\nimport type { ResolvedStepConfig, StepState } from \"shared\";\n\nexport function calcRetryDuration(\n\tconfig: ResolvedStepConfig,\n\tstepState: StepState\n): number {\n\tconst { attemptedCount: attemptCount } = stepState;\n\tconst { retries } = config;\n\n\tconst delay = ms(retries.delay);\n\n\tswitch (retries.backoff) {\n\t\tcase \"exponential\": {\n\t\t\treturn delay * Math.pow(2, attemptCount - 1);\n\t\t}\n\t\tcase \"linear\": {\n\t\t\treturn delay * attemptCount;\n\t\t}\n\t\tcase \"constant\":\n\t\tdefault: {\n\t\t\treturn delay;\n\t\t}\n\t}\n}\n", "var util;\n(function (util) {\n    util.assertEqual = (val) => val;\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array\n            .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n            .join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nconst getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then &&\n                typeof data.then === \"function\" &&\n                data.catch &&\n                typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    get errors() {\n        return this.issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n                fieldErrors[sub.path[0]].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact\n                    ? `exactly equal to `\n                    : issue.inclusive\n                        ? `greater than or equal to `\n                        : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact\n                    ? `exactly equal to `\n                    : issue.inclusive\n                        ? `greater than or equal to `\n                        : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact\n                    ? `exactly`\n                    : issue.inclusive\n                        ? `less than or equal to`\n                        : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact\n                    ? `exactly`\n                    : issue.inclusive\n                        ? `less than or equal to`\n                        : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact\n                    ? `exactly`\n                    : issue.inclusive\n                        ? `smaller than or equal to`\n                        : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n    overrideErrorMap = map;\n}\nfunction getErrorMap() {\n    return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: issueData.message || errorMessage,\n    };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap,\n            ctx.schemaErrorMap,\n            getErrorMap(),\n            errorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            syncPairs.push({\n                key: await pair.key,\n                value: await pair.value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" &&\n                (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nconst INVALID = Object.freeze({\n    status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\nvar errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (this._key instanceof Array) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        if (typeof ctx.data === \"undefined\") {\n            return { message: required_error !== null && required_error !== void 0 ? required_error : ctx.defaultError };\n        }\n        return { message: invalid_type_error !== null && invalid_type_error !== void 0 ? invalid_type_error : ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nclass ZodType {\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n    }\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        var _a;\n        const ctx = {\n            common: {\n                issues: [],\n                async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n                contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n            },\n            path: (params === null || params === void 0 ? void 0 : params.path) || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n                async: true,\n            },\n            path: (params === null || params === void 0 ? void 0 : params.path) || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult)\n            ? maybeAsyncResult\n            : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\"\n                    ? refinementData(val, ctx)\n                    : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this, this._def);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[a-z][a-z0-9]*$/;\nconst ulidRegex = /[0-9A-HJKMNP-TV-Z]{26}/;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_+-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst emojiRegex = /^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$/u;\nconst ipv4Regex = /^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/;\nconst ipv6Regex = /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\n// Adapted from https://stackoverflow.com/a/3143231\nconst datetimeRegex = (args) => {\n    if (args.precision) {\n        if (args.offset) {\n            return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n        }\n        else {\n            return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{${args.precision}}Z$`);\n        }\n    }\n    else if (args.precision === 0) {\n        if (args.offset) {\n            return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n        }\n        else {\n            return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}Z$`);\n        }\n    }\n    else {\n        if (args.offset) {\n            return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$`);\n        }\n        else {\n            return new RegExp(`^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?Z$`);\n        }\n    }\n};\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nclass ZodString extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._regex = (regex, validation, message) => this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n        /**\n         * @deprecated Use z.string().min(1) instead.\n         * @see {@link ZodString.min}\n         */\n        this.nonempty = (message) => this.min(1, errorUtil.errToObj(message));\n        this.trim = () => new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n        this.toLowerCase = () => new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n        this.toUpperCase = () => new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            }\n            //\n            );\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch (_a) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        var _a;\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n            offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n            ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n        });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options === null || options === void 0 ? void 0 : options.position,\n            ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    var _a;\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive\n                    ? input.data < check.value\n                    : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive\n                    ? input.data > check.value\n                    : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n            (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null, min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" ||\n                ch.kind === \"int\" ||\n                ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n        ...processCreateParams(params),\n    });\n};\nclass ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = BigInt(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.bigint,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive\n                    ? input.data < check.value\n                    : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive\n                    ? input.data > check.value\n                    : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    var _a;\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n        ...processCreateParams(params),\n    });\n};\nclass ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n        ...processCreateParams(params),\n    });\n};\nclass ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nclass ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nclass ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nclass ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nclass ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nclass ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nclass ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nclass ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        return (this._cached = { shape, keys });\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever &&\n            this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") ;\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    syncPairs.push({\n                        key,\n                        value: await pair.value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        var _a, _b, _c, _d;\n                        const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        util.objectKeys(mask).forEach((key) => {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        });\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        util.objectKeys(this.shape).forEach((key) => {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        });\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        util.objectKeys(this.shape).forEach((key) => {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        });\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        util.objectKeys(this.shape).forEach((key) => {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        });\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nclass ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return Object.keys(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else {\n        return null;\n    }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util\n            .objectKeys(a)\n            .filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date &&\n        bType === ZodParsedType.date &&\n        +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nclass ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\nclass ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nclass ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nclass ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nclass ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nclass ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [\n                    ctx.common.contextualErrorMap,\n                    ctx.schemaErrorMap,\n                    getErrorMap(),\n                    errorMap,\n                ].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [\n                    ctx.common.contextualErrorMap,\n                    ctx.schemaErrorMap,\n                    getErrorMap(),\n                    errorMap,\n                ].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args\n                    .parseAsync(args, params)\n                    .catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args\n                ? args\n                : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nclass ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nclass ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nclass ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (this._def.values.indexOf(input.data) === -1) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values) {\n        return ZodEnum.create(values);\n    }\n    exclude(values) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)));\n    }\n}\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string &&\n            ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (nativeEnumValues.indexOf(input.data) === -1) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nclass ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise &&\n            ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise\n            ? ctx.data\n            : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nclass ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.issues.length) {\n                return {\n                    status: \"dirty\",\n                    value: ctx.data,\n                };\n            }\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then((processed) => {\n                    return this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                });\n            }\n            else {\n                return this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc\n            // effect: RefinementEffect<any>\n            ) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema\n                    ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n                    .then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return base;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema\n                    ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n                    .then((base) => {\n                    if (!isValid(base))\n                        return base;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nclass ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nclass ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\"\n            ? params.default\n            : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nclass ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nclass ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nclass ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        if (isValid(result)) {\n            result.value = Object.freeze(result.value);\n        }\n        return result;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\nconst custom = (check, params = {}, \n/*\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) => {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            var _a, _b;\n            if (!check(data)) {\n                const p = typeof params === \"function\"\n                    ? params(data)\n                    : typeof params === \"string\"\n                        ? { message: params }\n                        : params;\n                const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n                const p2 = typeof p === \"string\" ? { message: p } : p;\n                ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n            }\n        });\n    return ZodAny.create();\n};\nconst late = {\n    object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    defaultErrorMap: errorMap,\n    setErrorMap: setErrorMap,\n    getErrorMap: getErrorMap,\n    makeIssue: makeIssue,\n    EMPTY_PATH: EMPTY_PATH,\n    addIssueToContext: addIssueToContext,\n    ParseStatus: ParseStatus,\n    INVALID: INVALID,\n    DIRTY: DIRTY,\n    OK: OK,\n    isAborted: isAborted,\n    isDirty: isDirty,\n    isValid: isValid,\n    isAsync: isAsync,\n    get util () { return util; },\n    get objectUtil () { return objectUtil; },\n    ZodParsedType: ZodParsedType,\n    getParsedType: getParsedType,\n    ZodType: ZodType,\n    ZodString: ZodString,\n    ZodNumber: ZodNumber,\n    ZodBigInt: ZodBigInt,\n    ZodBoolean: ZodBoolean,\n    ZodDate: ZodDate,\n    ZodSymbol: ZodSymbol,\n    ZodUndefined: ZodUndefined,\n    ZodNull: ZodNull,\n    ZodAny: ZodAny,\n    ZodUnknown: ZodUnknown,\n    ZodNever: ZodNever,\n    ZodVoid: ZodVoid,\n    ZodArray: ZodArray,\n    ZodObject: ZodObject,\n    ZodUnion: ZodUnion,\n    ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n    ZodIntersection: ZodIntersection,\n    ZodTuple: ZodTuple,\n    ZodRecord: ZodRecord,\n    ZodMap: ZodMap,\n    ZodSet: ZodSet,\n    ZodFunction: ZodFunction,\n    ZodLazy: ZodLazy,\n    ZodLiteral: ZodLiteral,\n    ZodEnum: ZodEnum,\n    ZodNativeEnum: ZodNativeEnum,\n    ZodPromise: ZodPromise,\n    ZodEffects: ZodEffects,\n    ZodTransformer: ZodEffects,\n    ZodOptional: ZodOptional,\n    ZodNullable: ZodNullable,\n    ZodDefault: ZodDefault,\n    ZodCatch: ZodCatch,\n    ZodNaN: ZodNaN,\n    BRAND: BRAND,\n    ZodBranded: ZodBranded,\n    ZodPipeline: ZodPipeline,\n    ZodReadonly: ZodReadonly,\n    custom: custom,\n    Schema: ZodType,\n    ZodSchema: ZodType,\n    late: late,\n    get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n    coerce: coerce,\n    any: anyType,\n    array: arrayType,\n    bigint: bigIntType,\n    boolean: booleanType,\n    date: dateType,\n    discriminatedUnion: discriminatedUnionType,\n    effect: effectsType,\n    'enum': enumType,\n    'function': functionType,\n    'instanceof': instanceOfType,\n    intersection: intersectionType,\n    lazy: lazyType,\n    literal: literalType,\n    map: mapType,\n    nan: nanType,\n    nativeEnum: nativeEnumType,\n    never: neverType,\n    'null': nullType,\n    nullable: nullableType,\n    number: numberType,\n    object: objectType,\n    oboolean: oboolean,\n    onumber: onumber,\n    optional: optionalType,\n    ostring: ostring,\n    pipeline: pipelineType,\n    preprocess: preprocessType,\n    promise: promiseType,\n    record: recordType,\n    set: setType,\n    strictObject: strictObjectType,\n    string: stringType,\n    symbol: symbolType,\n    transformer: effectsType,\n    tuple: tupleType,\n    'undefined': undefinedType,\n    union: unionType,\n    unknown: unknownType,\n    'void': voidType,\n    NEVER: NEVER,\n    ZodIssueCode: ZodIssueCode,\n    quotelessJson: quotelessJson,\n    ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n", "import { ms } from \"itty-time\";\nimport { z } from \"zod\";\n\nexport const MAX_WORKFLOW_NAME_LENGTH = 64;\n\nexport const MAX_WORKFLOW_INSTANCE_ID_LENGTH = 100;\n\nexport const MAX_STEP_NAME_LENGTH = 256;\n\nexport const ALLOWED_STRING_ID_PATTERN = \"^[a-zA-Z0-9_][a-zA-Z0-9-_]*$\";\nconst ALLOWED_WORKFLOW_INSTANCE_ID_REGEX = new RegExp(\n\tALLOWED_STRING_ID_PATTERN\n);\nconst ALLOWED_WORKFLOW_NAME_REGEX = ALLOWED_WORKFLOW_INSTANCE_ID_REGEX;\n\n// eslint-disable-next-line no-control-regex -- intentional use of control character range to detect invalid characters in workflow names\nconst CONTROL_CHAR_REGEX = new RegExp(\"[\\x00-\\x1F]\");\n\nexport function isValidWorkflowName(name: string): boolean {\n\tif (typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tif (name.length > MAX_WORKFLOW_NAME_LENGTH) {\n\t\treturn false;\n\t}\n\n\treturn ALLOWED_WORKFLOW_NAME_REGEX.test(name);\n}\n\nexport function isValidWorkflowInstanceId(id: string): boolean {\n\tif (typeof id !== \"string\") {\n\t\treturn false;\n\t}\n\n\tif (id.length > MAX_WORKFLOW_INSTANCE_ID_LENGTH) {\n\t\treturn false;\n\t}\n\n\treturn ALLOWED_WORKFLOW_INSTANCE_ID_REGEX.test(id);\n}\n\nexport function isValidStepName(name: string): boolean {\n\tif (name.length > MAX_STEP_NAME_LENGTH) {\n\t\treturn false;\n\t}\n\n\treturn !CONTROL_CHAR_REGEX.test(name);\n}\n\nconst STEP_CONFIG_SCHEMA = z\n\t.object({\n\t\tretries: z\n\t\t\t.object({\n\t\t\t\tdelay: z.number().gte(0).or(z.string()),\n\t\t\t\tlimit: z.number().gte(0),\n\t\t\t\tbackoff: z.enum([\"constant\", \"linear\", \"exponential\"]).optional(),\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\ttimeout: z.number().gte(0).or(z.string()).optional(),\n\t})\n\t.strict();\n\nexport function isValidStepConfig(stepConfig: unknown): boolean {\n\tconst config = STEP_CONFIG_SCHEMA.safeParse(stepConfig);\n\n\tif (!config.success) {\n\t\treturn false;\n\t}\n\n\tif (\n\t\tconfig.data.retries !== undefined &&\n\t\tNumber.isNaN(ms(config.data.retries.delay))\n\t) {\n\t\treturn false;\n\t}\n\n\tif (config.data.timeout !== undefined) {\n\t\tconst timeout = config.data.timeout;\n\t\tif (timeout == 0 || Number.isNaN(ms(config.data.timeout))) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n", "import { InstanceEvent } from \"../instance\";\nimport { WorkflowFatalError } from \"./errors\";\nimport { isValidStepConfig } from \"./validators\";\nimport type { WorkflowStepContext } from \"../context\";\nimport type { Engine } from \"../engine\";\nimport type { WorkflowStepConfig } from \"cloudflare:workers\";\n\ntype UserErrorField = {\n\tisUserError?: boolean;\n};\n\n// `:` can't appear in user-step cacheKeys (sha1-hex + `-` only).\nexport const ROLLBACK_CACHE_KEY_PREFIX = \"rollback:\";\n\nexport type RollbackContext = {\n\tctx: WorkflowStepContext;\n\terror: Error;\n\toutput: unknown;\n\t/** @deprecated Use `${ctx.step.name}-${ctx.step.count}` instead. */\n\tstepName: string;\n};\n\n// dup() to outlive the originating step.do call; Symbol.dispose locally\n// (calling `.dispose()` would RPC to a non-existent remote method).\nexport type RollbackFn = ((ctx: RollbackContext) => Promise<void>) & {\n\tdup?: () => RollbackFn;\n\t[Symbol.dispose]?: () => void;\n};\n\nexport type WorkflowStepRollbackConfig = Pick<\n\tWorkflowStepConfig,\n\t\"retries\" | \"timeout\"\n>;\n\nexport type WorkflowStepRollbackOptions = {\n\trollback: RollbackFn;\n\trollbackConfig?: WorkflowStepRollbackConfig;\n};\n\nexport type RollbackRegistryEntry = {\n\tfn: RollbackFn;\n\tstepContext: WorkflowStepContext;\n\toutput?: unknown;\n\tconfig?: WorkflowStepConfig;\n};\n\nexport type RollbackRegistration = RollbackRegistryEntry & {\n\tcacheKey: string;\n};\n\nexport function parseRollbackOptions(\n\tstepName: string,\n\toptions: unknown\n): WorkflowStepRollbackOptions | undefined {\n\tif (options === undefined) {\n\t\treturn undefined;\n\t}\n\n\tif (\n\t\ttypeof options !== \"object\" ||\n\t\toptions === null ||\n\t\tArray.isArray(options)\n\t) {\n\t\tconst error = new WorkflowFatalError(\n\t\t\t`Rollback options for \"${stepName}\" must be an object`\n\t\t) as Error & UserErrorField;\n\t\terror.isUserError = true;\n\t\tthrow error;\n\t}\n\n\tconst rollbackOptions = options as Partial<WorkflowStepRollbackOptions>;\n\tif (typeof rollbackOptions.rollback !== \"function\") {\n\t\tconst error = new WorkflowFatalError(\n\t\t\t`Rollback for \"${stepName}\" must be a function`\n\t\t) as Error & UserErrorField;\n\t\terror.isUserError = true;\n\t\tthrow error;\n\t}\n\n\tif (\n\t\trollbackOptions.rollbackConfig !== undefined &&\n\t\t!isValidStepConfig(rollbackOptions.rollbackConfig)\n\t) {\n\t\tconst error = new WorkflowFatalError(\n\t\t\t`Rollback config for \"${stepName}\" is in a invalid format. See https://developers.cloudflare.com/workflows/build/sleeping-and-retrying/`\n\t\t) as Error & UserErrorField;\n\t\terror.isUserError = true;\n\t\tthrow error;\n\t}\n\n\treturn rollbackOptions as WorkflowStepRollbackOptions;\n}\n\nexport function dupRollbackStub(fn: RollbackFn): RollbackFn {\n\treturn fn.dup ? fn.dup() : fn;\n}\n\nexport function disposeRollbackStub(fn: RollbackFn): void {\n\ttry {\n\t\tfn[Symbol.dispose]?.();\n\t} catch (err) {\n\t\tconsole.warn(\"Failed to dispose rollback stub\", err);\n\t}\n}\n\nexport function registerRollbackFn(\n\tregistry: Map<string, RollbackRegistryEntry>,\n\tregistration: RollbackRegistration\n): void {\n\tconst { cacheKey, fn, stepContext, output, config } = registration;\n\tconst existing = registry.get(cacheKey);\n\tif (existing) {\n\t\tdisposeRollbackStub(existing.fn);\n\t}\n\tregistry.set(cacheKey, {\n\t\tfn: dupRollbackStub(fn),\n\t\tstepContext,\n\t\t...(\"output\" in registration && { output }),\n\t\t...(config !== undefined && { config }),\n\t});\n}\n\nexport function clearRollbackRegistry(\n\tregistry: Map<string, RollbackRegistryEntry>\n): void {\n\tfor (const entry of registry.values()) {\n\t\tdisposeRollbackStub(entry.fn);\n\t}\n\tregistry.clear();\n}\n\nfunction getRollbackRegistryEntriesInExecutionOrder(\n\tengine: Engine\n): Array<[string, RollbackRegistryEntry]> {\n\tconst entries: Array<[string, RollbackRegistryEntry]> = [];\n\tconst seen = new Set<string>();\n\tconst stepStartGroupKeysDesc = engine.readStepStartGroupKeysDesc();\n\tconst rollbackRegistryEntriesDesc = [\n\t\t...engine.rollbackRegistry.entries(),\n\t].reverse();\n\n\tfor (const cacheKey of stepStartGroupKeysDesc) {\n\t\tconst entry = engine.rollbackRegistry.get(cacheKey);\n\t\tif (entry === undefined || seen.has(cacheKey)) {\n\t\t\tcontinue;\n\t\t}\n\t\tentries.push([cacheKey, entry]);\n\t\tseen.add(cacheKey);\n\t}\n\n\tfor (const [cacheKey, entry] of rollbackRegistryEntriesDesc) {\n\t\tif (!seen.has(cacheKey)) {\n\t\t\tentries.push([cacheKey, entry]);\n\t\t}\n\t}\n\n\treturn entries;\n}\n\n// LIFO; halts on first failure. Goes through Context.do so each rollback\n// inherits retries/timeouts/attempt-logging.\nexport async function executeRollbacks(\n\tengine: Engine,\n\ttriggerError: Error\n): Promise<{ ranAny: boolean; allSucceeded: boolean }> {\n\tif (engine.rollbackRegistry.size === 0) {\n\t\treturn { ranAny: false, allSucceeded: true };\n\t}\n\n\tconst entries = getRollbackRegistryEntriesInExecutionOrder(engine);\n\tengine.rollbackRegistry.clear();\n\n\tengine.writeLog(InstanceEvent.ROLLBACK_START, null, null, {\n\t\ttriggerError: { name: triggerError.name, message: triggerError.message },\n\t\ttotalSteps: entries.length,\n\t});\n\n\tlet allSucceeded = true;\n\tlet completed = 0;\n\tlet stoppedAt = entries.length;\n\n\tfor (const [i, [cacheKey, entry]] of entries.entries()) {\n\t\tconst ctx = engine.createRollbackContext({ cacheKey });\n\t\tconst rollbackName = `${entry.stepContext.step.name}-${entry.stepContext.step.count}`;\n\t\ttry {\n\t\t\tawait ctx.do(rollbackName, entry.config ?? {}, async () => {\n\t\t\t\tawait entry.fn({\n\t\t\t\t\tctx: structuredClone(entry.stepContext),\n\t\t\t\t\terror: triggerError,\n\t\t\t\t\toutput: entry.output,\n\t\t\t\t\tstepName: rollbackName,\n\t\t\t\t});\n\t\t\t});\n\t\t\tcompleted++;\n\t\t} catch {\n\t\t\t// Context.do already wrote ROLLBACK_STEP_FAILURE; halt the chain.\n\t\t\tallSucceeded = false;\n\t\t\tstoppedAt = i + 1;\n\t\t\tbreak;\n\t\t} finally {\n\t\t\tdisposeRollbackStub(entry.fn);\n\t\t}\n\t}\n\n\tconst remainingEntries = entries.slice(stoppedAt);\n\tfor (const [, entry] of remainingEntries) {\n\t\tdisposeRollbackStub(entry.fn);\n\t}\n\n\tengine.writeLog(\n\t\tallSucceeded\n\t\t\t? InstanceEvent.ROLLBACK_COMPLETE\n\t\t\t: InstanceEvent.ROLLBACK_FAILED,\n\t\tnull,\n\t\tnull,\n\t\t{ totalSteps: entries.length, completedSteps: completed }\n\t);\n\treturn { ranAny: completed > 0, allSucceeded };\n}\n", "import {\n\tInvalidStepReadableStreamError,\n\tOversizedStreamChunkError,\n\tStreamOutputStorageLimitError,\n\tUnsupportedStreamChunkError,\n\tWorkflowTimeoutError,\n} from \"./errors\";\n\n// \u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const DEFAULT_STREAM_OUTPUT_CHUNK_SIZE = 256 * 1024;\nexport const STREAM_OUTPUT_META_SUFFIX = \"-value-stream-meta\";\nexport const MAX_STREAM_OUTPUT_INPUT_CHUNK_BYTES = 16 * 1024 * 1024;\nexport const STREAMING_STEP_CHUNKS_TABLE = \"streaming_step_chunks\";\nexport const MAX_OUTPUT_SHOWN_IN_LOGS = 1024;\n\nconst DO_STORAGE_LIMIT = 1024 * 1024 * 1024 + 100 * 1024 * 1024;\nconst STREAM_OUTPUT_STORAGE_WRITE_HEADROOM_BYTES = 16 * 1024;\n\n// \u2500\u2500 Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport enum StreamOutputState {\n\tPending = \"pending\",\n\tCommitting = \"committing\",\n\tComplete = \"complete\",\n}\n\nexport type StreamOutputMeta = {\n\tversion: 1;\n\tstate: StreamOutputState;\n\tattempt: number;\n\tstartedAt: number;\n\tchunkCount: number;\n\ttotalBytes: number;\n\tcommittedAt: number | null;\n};\n\nexport type StoredStreamOutputPreview =\n\t| { type: \"text\"; output: string }\n\t| { type: \"binary\" };\n\nexport class InvalidStoredStreamOutputError extends Error {\n\tname = \"InvalidStoredStreamOutputError\";\n}\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function getStreamOutputMetaKey(cacheKey: string): string {\n\treturn `${cacheKey}${STREAM_OUTPUT_META_SUFFIX}`;\n}\n\nexport function isReadableStreamLike(\n\tvalue: unknown\n): value is ReadableStream<unknown> {\n\treturn value instanceof ReadableStream;\n}\n\nfunction createInvalidStepReadableStreamError(): InvalidStepReadableStreamError {\n\treturn new InvalidStepReadableStreamError(\n\t\t\"Step returned a ReadableStream that is already locked or otherwise unreadable. Return a fresh, unlocked ReadableStream from step.do().\"\n\t);\n}\n\nfunction createOversizedStreamChunkError(): OversizedStreamChunkError {\n\treturn new OversizedStreamChunkError(\n\t\t`Step returned a ReadableStream chunk larger than the maximum allowed size of ${MAX_STREAM_OUTPUT_INPUT_CHUNK_BYTES} bytes. ` +\n\t\t\t\"Return smaller chunks from step.do().\"\n\t);\n}\n\n/**\n * Normalize any incoming chunk to Uint8Array.\n * Accepts ArrayBuffer, TypedArrays (except DataView), and Uint8Array directly.\n * Rejects strings, objects, and other non-binary types.\n */\nfunction normalizeChunkToUint8Array(value: unknown): Uint8Array {\n\tif (value instanceof Uint8Array) {\n\t\treturn value;\n\t}\n\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\n\tif (ArrayBuffer.isView(value) && !(value instanceof DataView)) {\n\t\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t}\n\n\tthrow new UnsupportedStreamChunkError(\n\t\t\"Step returned a ReadableStream with unsupported chunk type. \" +\n\t\t\t\"Only ArrayBuffer and TypedArray chunks are supported.\"\n\t);\n}\n\n// \u2500\u2500 Buffer helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction takeBufferedBytes(\n\tbufferedChunks: Uint8Array[],\n\tbyteLength: number\n): Uint8Array {\n\tconst output = new Uint8Array(byteLength);\n\tlet offset = 0;\n\n\twhile (offset < byteLength) {\n\t\tconst chunk = bufferedChunks[0];\n\t\tconst remaining = byteLength - offset;\n\n\t\tif (chunk.byteLength <= remaining) {\n\t\t\toutput.set(chunk, offset);\n\t\t\toffset += chunk.byteLength;\n\t\t\tbufferedChunks.shift();\n\t\t\tcontinue;\n\t\t}\n\n\t\toutput.set(chunk.subarray(0, remaining), offset);\n\t\tbufferedChunks[0] = chunk.subarray(remaining);\n\t\toffset += remaining;\n\t}\n\n\treturn output;\n}\n\n// \u2500\u2500 Stream iteration \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function* iterateStreamChunks(\n\tstream: ReadableStream<unknown>,\n\tsignal?: AbortSignal\n): AsyncGenerator<Uint8Array> {\n\tif (stream.locked) {\n\t\tthrow createInvalidStepReadableStreamError();\n\t}\n\n\tif (signal?.aborted) {\n\t\tthrow (\n\t\t\tsignal.reason ??\n\t\t\tnew DOMException(\"The operation was aborted.\", \"AbortError\")\n\t\t);\n\t}\n\n\tlet reader: ReadableStreamDefaultReader<unknown>;\n\ttry {\n\t\treader = stream.getReader();\n\t} catch (error) {\n\t\tif (error instanceof TypeError) {\n\t\t\tthrow createInvalidStepReadableStreamError();\n\t\t}\n\t\tthrow error;\n\t}\n\n\tconst onAbort = () => {\n\t\tvoid reader\n\t\t\t.cancel(\n\t\t\t\tsignal?.reason ??\n\t\t\t\t\tnew DOMException(\"The operation was aborted.\", \"AbortError\")\n\t\t\t)\n\t\t\t.catch(() => {});\n\t};\n\n\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\tlet fullyRead = false;\n\n\ttry {\n\t\twhile (true) {\n\t\t\tlet readResult: ReadableStreamReadResult<unknown>;\n\t\t\ttry {\n\t\t\t\treadResult = await reader.read();\n\t\t\t} catch (readError) {\n\t\t\t\t// When the abort signal has already fired, the read error is an\n\t\t\t\t// expected cancellation (e.g. step timeout or engine shutdown).\n\t\t\t\t// Re-throw the original abort reason so callers can distinguish\n\t\t\t\t// timeouts from genuine stream failures.\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tthrow (\n\t\t\t\t\t\tsignal.reason ??\n\t\t\t\t\t\tnew DOMException(\"The operation was aborted.\", \"AbortError\")\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Any other read failure (broken pipe, upstream connection\n\t\t\t\t// drop, encoding mismatch, etc.) means the ReadableStream the\n\t\t\t\t// step returned is unusable.\n\t\t\t\tthrow new InvalidStepReadableStreamError(\n\t\t\t\t\t\"Failed to read from step ReadableStream output. \" +\n\t\t\t\t\t\t(readError instanceof Error ? readError.message : String(readError))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (signal?.aborted) {\n\t\t\t\tthrow (\n\t\t\t\t\tsignal.reason ??\n\t\t\t\t\tnew DOMException(\"The operation was aborted.\", \"AbortError\")\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (readResult.done) {\n\t\t\t\tfullyRead = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tyield normalizeChunkToUint8Array(readResult.value);\n\t\t}\n\t} finally {\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\tif (!fullyRead) {\n\t\t\tawait reader\n\t\t\t\t.cancel(\n\t\t\t\t\tnew Error(\"stream output consumption stopped before completion\")\n\t\t\t\t)\n\t\t\t\t.catch(() => {});\n\t\t}\n\t\ttry {\n\t\t\treader.releaseLock();\n\t\t} catch {\n\t\t\t// Reader may still be processing cancel()\n\t\t}\n\t}\n}\n\n// \u2500\u2500 SQL helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction deleteAttemptChunks(\n\tstorage: DurableObjectStorage,\n\tcacheKey: string,\n\tattempt: number\n): void {\n\t// eslint-disable-next-line workers-sdk/no-unsafe-command-execution -- DO SQL exec, not child_process\n\tstorage.sql.exec(\n\t\t`DELETE FROM ${STREAMING_STEP_CHUNKS_TABLE} WHERE cache_key = ? AND attempt = ?`,\n\t\tcacheKey,\n\t\tattempt\n\t);\n}\n\nasync function deleteMetaForAttempt(\n\tstorage: DurableObjectStorage,\n\tcacheKey: string,\n\tattempt: number\n): Promise<void> {\n\tconst metaKey = getStreamOutputMetaKey(cacheKey);\n\tconst maybeMeta = await storage.get<StreamOutputMeta>(metaKey);\n\tif (maybeMeta === undefined) {\n\t\treturn;\n\t}\n\tif (maybeMeta.attempt !== attempt) {\n\t\treturn;\n\t}\n\tawait storage.delete(metaKey);\n}\n\n// \u2500\u2500 Integrity validation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ntype StreamOutputChunkSummary = {\n\tchunkCount: number;\n\tminChunkIndex: number | null;\n\tmaxChunkIndex: number | null;\n\ttotalBytes: number;\n};\n\nfunction getStreamOutputChunkSummary(\n\tstorage: DurableObjectStorage,\n\tcacheKey: string,\n\tattempt: number\n): StreamOutputChunkSummary {\n\tconst row = storage.sql\n\t\t.exec<StreamOutputChunkSummary>(\n\t\t\t[\n\t\t\t\t`SELECT`,\n\t\t\t\t`  COUNT(*) AS chunkCount,`,\n\t\t\t\t`  MIN(chunk_index) AS minChunkIndex,`,\n\t\t\t\t`  MAX(chunk_index) AS maxChunkIndex,`,\n\t\t\t\t`  CAST(COALESCE(SUM(LENGTH(chunk)), 0) AS INTEGER) AS totalBytes`,\n\t\t\t\t`FROM ${STREAMING_STEP_CHUNKS_TABLE}`,\n\t\t\t\t`WHERE cache_key = ? AND attempt = ?`,\n\t\t\t].join(\"\\n\"),\n\t\t\tcacheKey,\n\t\t\tattempt\n\t\t)\n\t\t.one();\n\n\tif (row === null) {\n\t\tthrow new Error(\"Expected stream chunk summary query to return a row\");\n\t}\n\treturn row;\n}\n\nexport function getInvalidStoredStreamOutputError(\n\tstorage: DurableObjectStorage,\n\tcacheKey: string,\n\tmeta: StreamOutputMeta\n): InvalidStoredStreamOutputError | undefined {\n\tconst summary = getStreamOutputChunkSummary(storage, cacheKey, meta.attempt);\n\n\tif (meta.chunkCount === 0) {\n\t\tif (\n\t\t\tsummary.chunkCount === 0 &&\n\t\t\tsummary.totalBytes === 0 &&\n\t\t\tsummary.minChunkIndex === null &&\n\t\t\tsummary.maxChunkIndex === null\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t} else if (\n\t\tsummary.chunkCount === meta.chunkCount &&\n\t\tsummary.minChunkIndex === 0 &&\n\t\tsummary.maxChunkIndex === meta.chunkCount - 1 &&\n\t\tsummary.totalBytes === meta.totalBytes\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn new InvalidStoredStreamOutputError(\n\t\t`Stored streamed step output is corrupt or incomplete for cache key ${cacheKey}. ` +\n\t\t\t`Expected ${meta.chunkCount} chunks / ${meta.totalBytes} bytes, found ` +\n\t\t\t`${summary.chunkCount} chunks / ${summary.totalBytes} bytes with chunk index range ` +\n\t\t\t`${summary.minChunkIndex ?? \"null\"}..${summary.maxChunkIndex ?? \"null\"}.`\n\t);\n}\n\n// \u2500\u2500 Preview \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction readStreamOutputPreviewBytes(options: {\n\tstorage: DurableObjectStorage;\n\tcacheKey: string;\n\tattempt: number;\n\tmaxBytes: number;\n}): Uint8Array {\n\tconst { storage, cacheKey, attempt, maxBytes } = options;\n\t// eslint-disable-next-line workers-sdk/no-unsafe-command-execution -- DO SQL exec, not child_process\n\tconst cursor = storage.sql.exec<{\n\t\tchunk_index: number;\n\t\tchunk: ArrayBuffer;\n\t}>(\n\t\t`SELECT chunk_index, chunk FROM ${STREAMING_STEP_CHUNKS_TABLE} WHERE cache_key = ? AND attempt = ? ORDER BY chunk_index`,\n\t\tcacheKey,\n\t\tattempt\n\t);\n\tconst previewChunks: Uint8Array[] = [];\n\tlet expectedChunkIndex = 0;\n\tlet totalBytes = 0;\n\n\twhile (totalBytes < maxBytes) {\n\t\tconst row = cursor.next();\n\t\tif (row.done) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (row.value.chunk_index !== expectedChunkIndex) {\n\t\t\tthrow new InvalidStoredStreamOutputError(\n\t\t\t\t`Missing chunk ${expectedChunkIndex} for streamed step output`\n\t\t\t);\n\t\t}\n\n\t\tif (!(row.value.chunk instanceof ArrayBuffer)) {\n\t\t\tthrow new InvalidStoredStreamOutputError(\n\t\t\t\t\"Invalid chunk type returned from streaming_step_chunks table\"\n\t\t\t);\n\t\t}\n\n\t\tconst chunkBytes = new Uint8Array(row.value.chunk);\n\t\tconst remainingBytes = maxBytes - totalBytes;\n\t\tconst previewChunk =\n\t\t\tchunkBytes.byteLength > remainingBytes\n\t\t\t\t? chunkBytes.subarray(0, remainingBytes)\n\t\t\t\t: chunkBytes;\n\n\t\tpreviewChunks.push(previewChunk);\n\t\ttotalBytes += previewChunk.byteLength;\n\t\texpectedChunkIndex++;\n\t}\n\n\treturn takeBufferedBytes(previewChunks, totalBytes);\n}\n\nexport function getStoredStreamOutputPreview(options: {\n\tstorage: DurableObjectStorage;\n\tcacheKey: string;\n\tmeta: StreamOutputMeta;\n\tmaxChars: number;\n}): StoredStreamOutputPreview {\n\tconst { storage, cacheKey, meta, maxChars } = options;\n\tif (meta.state !== StreamOutputState.Complete) {\n\t\tthrow new Error(\n\t\t\t\"Cannot preview streamed step output before it is complete\"\n\t\t);\n\t}\n\n\t// UTF-8 uses at most 4 bytes per code point\n\tconst maxPreviewBytes = maxChars * 4;\n\tconst previewBytes = readStreamOutputPreviewBytes({\n\t\tstorage,\n\t\tcacheKey,\n\t\tattempt: meta.attempt,\n\t\tmaxBytes: maxPreviewBytes,\n\t});\n\tconst previewTruncatedByBytes = meta.totalBytes > previewBytes.byteLength;\n\n\ttry {\n\t\tconst decoded = new TextDecoder(\"utf-8\", {\n\t\t\tfatal: true,\n\t\t\tignoreBOM: false,\n\t\t}).decode(previewBytes, { stream: previewTruncatedByBytes });\n\n\t\tconst previewOutput = decoded.substring(0, maxChars);\n\t\tif (decoded.length > maxChars || previewTruncatedByBytes) {\n\t\t\treturn { type: \"text\", output: previewOutput + \"[truncated output]\" };\n\t\t}\n\t\treturn { type: \"text\", output: previewOutput };\n\t} catch {\n\t\treturn { type: \"binary\" };\n\t}\n}\n\n// \u2500\u2500 Cleanup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function cleanupPendingStreamOutput(\n\tstorage: DurableObjectStorage,\n\tcacheKey: string\n): Promise<void> {\n\tconst metaKey = getStreamOutputMetaKey(cacheKey);\n\tconst maybeMeta = await storage.get<StreamOutputMeta>(metaKey);\n\n\tif (maybeMeta === undefined) {\n\t\treturn;\n\t}\n\n\tif (maybeMeta.state === StreamOutputState.Complete) {\n\t\treturn;\n\t}\n\n\tawait rollbackStreamOutput(storage, cacheKey, maybeMeta.attempt);\n}\n\nexport async function rollbackStreamOutput(\n\tstorage: DurableObjectStorage,\n\tcacheKey: string,\n\tattempt: number\n): Promise<void> {\n\tdeleteAttemptChunks(storage, cacheKey, attempt);\n\tawait deleteMetaForAttempt(storage, cacheKey, attempt);\n}\n\n// \u2500\u2500 Write \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function doWriteStreamOutput(options: {\n\tstorage: DurableObjectStorage;\n\tcacheKey: string;\n\tattempt: number;\n\tstream: ReadableStream<unknown>;\n\tchunkSizeBytes?: number;\n\tsignal?: AbortSignal;\n\tskipMetaWrite?: boolean;\n}): Promise<StreamOutputMeta> {\n\tconst { storage, cacheKey, attempt, stream, signal, skipMetaWrite } = options;\n\tconst chunkSizeBytes =\n\t\toptions.chunkSizeBytes ?? DEFAULT_STREAM_OUTPUT_CHUNK_SIZE;\n\tconst metaKey = getStreamOutputMetaKey(cacheKey);\n\n\tconst maybeInvalidState = (additionalBytes = 0): unknown => {\n\t\tif (signal?.aborted) {\n\t\t\treturn (\n\t\t\t\tsignal.reason ??\n\t\t\t\tnew DOMException(\"The operation was aborted.\", \"AbortError\")\n\t\t\t);\n\t\t}\n\n\t\tconst currentStorageBytes = storage.sql.databaseSize;\n\t\tif (\n\t\t\tcurrentStorageBytes +\n\t\t\t\tadditionalBytes +\n\t\t\t\tSTREAM_OUTPUT_STORAGE_WRITE_HEADROOM_BYTES >\n\t\t\tDO_STORAGE_LIMIT\n\t\t) {\n\t\t\treturn new StreamOutputStorageLimitError(\n\t\t\t\t\"The instance has exceeded the 1GiB storage limit\"\n\t\t\t);\n\t\t}\n\t};\n\n\tconst initialInvalidState = maybeInvalidState();\n\tif (initialInvalidState !== undefined) {\n\t\tthrow initialInvalidState;\n\t}\n\n\tconst startedAt = Date.now();\n\tif (!skipMetaWrite) {\n\t\tawait storage.put(metaKey, {\n\t\t\tversion: 1,\n\t\t\tstate: StreamOutputState.Pending,\n\t\t\tattempt,\n\t\t\tstartedAt,\n\t\t\tchunkCount: 0,\n\t\t\ttotalBytes: 0,\n\t\t\tcommittedAt: null,\n\t\t} satisfies StreamOutputMeta);\n\t}\n\n\tlet chunkCount = 0;\n\tlet totalBytes = 0;\n\tconst bufferedChunks: Uint8Array[] = [];\n\tlet bufferedBytes = 0;\n\tlet outputCommitted = false;\n\n\tconst flushChunk = async (bytes: Uint8Array) => {\n\t\tconst invalidState = maybeInvalidState(bytes.byteLength);\n\t\tif (invalidState !== undefined) {\n\t\t\tthrow invalidState;\n\t\t}\n\t\t// eslint-disable-next-line workers-sdk/no-unsafe-command-execution -- DO SQL exec, not child_process\n\t\tstorage.sql.exec(\n\t\t\t`INSERT INTO ${STREAMING_STEP_CHUNKS_TABLE} (cache_key, attempt, chunk_index, chunk) VALUES (?, ?, ?, ?)`,\n\t\t\tcacheKey,\n\t\t\tattempt,\n\t\t\tchunkCount,\n\t\t\tbytes\n\t\t);\n\t\ttotalBytes += bytes.byteLength;\n\t\tchunkCount++;\n\t};\n\n\ttry {\n\t\tfor await (const bytes of iterateStreamChunks(stream, signal)) {\n\t\t\tif (bytes.byteLength === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (bytes.byteLength > MAX_STREAM_OUTPUT_INPUT_CHUNK_BYTES) {\n\t\t\t\tthrow createOversizedStreamChunkError();\n\t\t\t}\n\n\t\t\tbufferedChunks.push(bytes);\n\t\t\tbufferedBytes += bytes.byteLength;\n\n\t\t\t// NOTE: we want chunks with fixed length,\n\t\t\t// that's why we buffer them in-memory here\n\t\t\twhile (bufferedBytes >= chunkSizeBytes) {\n\t\t\t\tconst chunk = takeBufferedBytes(bufferedChunks, chunkSizeBytes);\n\t\t\t\tbufferedBytes -= chunk.byteLength;\n\t\t\t\tawait flushChunk(chunk);\n\t\t\t}\n\t\t}\n\n\t\t// Last chunk (remainder)\n\t\tif (bufferedBytes > 0) {\n\t\t\tawait flushChunk(takeBufferedBytes(bufferedChunks, bufferedBytes));\n\t\t\tbufferedBytes = 0;\n\t\t}\n\n\t\tconst meta = {\n\t\t\tversion: 1,\n\t\t\tstate: StreamOutputState.Complete,\n\t\t\tattempt,\n\t\t\tstartedAt,\n\t\t\tchunkCount,\n\t\t\ttotalBytes,\n\t\t\tcommittedAt: Date.now(),\n\t\t} satisfies StreamOutputMeta;\n\n\t\tconst invalidState = maybeInvalidState();\n\t\tif (invalidState !== undefined) {\n\t\t\tthrow invalidState;\n\t\t}\n\n\t\tif (!skipMetaWrite) {\n\t\t\t// Transition to Committing to signal it's safe to await.\n\t\t\t// Mock stream setup still needs the SQL chunks and returned meta, but\n\t\t\t// must not publish the normal stream cache key because Context.do()\n\t\t\t// treats it as a completed prior run and skips step execution logging.\n\t\t\tawait storage.put(metaKey, {\n\t\t\t\tversion: 1,\n\t\t\t\tstate: StreamOutputState.Committing,\n\t\t\t\tattempt,\n\t\t\t\tstartedAt,\n\t\t\t\tchunkCount,\n\t\t\t\ttotalBytes,\n\t\t\t\tcommittedAt: null,\n\t\t\t} satisfies StreamOutputMeta);\n\n\t\t\tawait storage.put(metaKey, meta);\n\t\t}\n\t\toutputCommitted = true;\n\t\treturn meta;\n\t} catch (error) {\n\t\tif (!outputCommitted) {\n\t\t\tawait rollbackStreamOutput(storage, cacheKey, attempt);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport async function writeStreamOutput(options: {\n\tstorage: DurableObjectStorage;\n\tcacheKey: string;\n\tattempt: number;\n\tstream: ReadableStream<unknown>;\n\tchunkSizeBytes?: number;\n\tsignal?: AbortSignal;\n\ttimeoutTask?: Promise<never>;\n\tskipMetaWrite?: boolean;\n}): Promise<StreamOutputMeta> {\n\tconst { storage, cacheKey, attempt, timeoutTask, ...writeOptions } = options;\n\tconst writeTask = doWriteStreamOutput({\n\t\tstorage,\n\t\tcacheKey,\n\t\tattempt,\n\t\t...writeOptions,\n\t});\n\n\tif (timeoutTask === undefined) {\n\t\treturn writeTask;\n\t}\n\n\ttry {\n\t\treturn await Promise.race([writeTask, timeoutTask]);\n\t} catch (error) {\n\t\tif (error instanceof WorkflowTimeoutError) {\n\t\t\tif (options.skipMetaWrite) {\n\t\t\t\tvoid writeTask.catch(() => {});\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst maybeMeta = await storage.get<StreamOutputMeta>(\n\t\t\t\tgetStreamOutputMetaKey(cacheKey)\n\t\t\t);\n\t\t\tif (\n\t\t\t\tmaybeMeta?.attempt === attempt &&\n\t\t\t\t(maybeMeta.state === StreamOutputState.Committing ||\n\t\t\t\t\tmaybeMeta.state === StreamOutputState.Complete)\n\t\t\t) {\n\t\t\t\t// Safe to await -- not in the middle of writing chunks\n\t\t\t\treturn await writeTask;\n\t\t\t}\n\n\t\t\tvoid writeTask.catch(() => {});\n\t\t\tthrow error;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\n// \u2500\u2500 Replay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function createReplayReadableStream(options: {\n\tstorage: DurableObjectStorage;\n\tcacheKey: string;\n\tmeta: StreamOutputMeta;\n}): ReadableStream<Uint8Array> {\n\tconst { storage, cacheKey, meta } = options;\n\tif (meta.state !== StreamOutputState.Complete) {\n\t\tthrow new Error(\"Cannot replay streamed step output before it is complete\");\n\t}\n\n\t// eslint-disable-next-line workers-sdk/no-unsafe-command-execution -- DO SQL exec, not child_process\n\tconst chunkCursor = storage.sql.exec<{\n\t\tchunk_index: number;\n\t\tchunk: ArrayBuffer;\n\t}>(\n\t\t`SELECT chunk_index, chunk FROM ${STREAMING_STEP_CHUNKS_TABLE} WHERE cache_key = ? AND attempt = ? ORDER BY chunk_index`,\n\t\tcacheKey,\n\t\tmeta.attempt\n\t);\n\tlet index = 0;\n\n\treturn new ReadableStream<Uint8Array>({\n\t\tpull(controller) {\n\t\t\tif (index >= meta.chunkCount) {\n\t\t\t\tcontroller.close();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst row = chunkCursor.next();\n\t\t\tif (row.done) {\n\t\t\t\tcontroller.error(\n\t\t\t\t\tnew Error(`Missing chunk ${index} for streamed step output`)\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (row.value.chunk_index !== index) {\n\t\t\t\tcontroller.error(\n\t\t\t\t\tnew Error(`Missing chunk ${index} for streamed step output`)\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!(row.value.chunk instanceof ArrayBuffer)) {\n\t\t\t\tcontroller.error(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\"Invalid chunk type returned from streaming_step_chunks table\"\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontroller.enqueue(new Uint8Array(row.value.chunk));\n\t\t\tindex++;\n\t\t},\n\t});\n}\n", "import { RpcTarget } from \"cloudflare:workers\";\nimport { computeHash } from \"./lib/cache\";\nimport { isReadableStreamLike, writeStreamOutput } from \"./lib/streams\";\nimport type { Event } from \"./context\";\nimport type { Engine } from \"./engine\";\n\nexport type StepSelector = {\n\tname: string;\n\tindex?: number;\n};\n\ntype UserEvent = {\n\ttype: string;\n\tpayload: unknown;\n};\n\n// KV key prefixes/values used by the modifier/mock system\nexport const MODIFIER_KEYS = {\n\tREPLACE_RESULT: \"replace-result-\",\n\tMOCK_STEP_ERROR: \"mock-step-error-\",\n\tMOCK_EVENT: \"mock-event-\",\n\tFORCE_STEP_TIMEOUT: \"force-step-timeout-\",\n\tFORCE_EVENT_TIMEOUT: \"force-event-timeout-\",\n\tFAILURE_INDEX: \"failure-index-\",\n\tDISABLE_SLEEP: \"disable-sleep-\",\n\tDISABLE_ALL_SLEEPS: \"disableAllSleeps\",\n\tDISABLE_RETRY_DELAY: \"disable-retry-delay-\",\n\tDISABLE_ALL_RETRY_DELAYS: \"disableAllRetryDelays\",\n} as const;\n\nexport function isModifierKey(key: string): boolean {\n\treturn Object.values(MODIFIER_KEYS).some((v) => key.startsWith(v));\n}\n\nexport class WorkflowInstanceModifier extends RpcTarget {\n\t#engine: Engine;\n\t#state: DurableObjectState;\n\n\tconstructor(engine: Engine, state: DurableObjectState) {\n\t\tsuper();\n\t\tthis.#engine = engine;\n\t\tthis.#state = state;\n\t}\n\n\tasync #getWaitForEventCacheKey(step: StepSelector): Promise<string> {\n\t\tlet count = 1;\n\t\tif (step.index) {\n\t\t\tcount = step.index;\n\t\t}\n\t\tconst name = `${step.name}-${count}`;\n\t\tconst hash = await computeHash(name);\n\t\tconst cacheKey = `${hash}-${count}`;\n\t\tconst waitForEventKey = `${cacheKey}-value`;\n\n\t\treturn waitForEventKey;\n\t}\n\n\tasync #getBaseCacheKey(step: StepSelector): Promise<string> {\n\t\tconst hash = await computeHash(step.name);\n\t\tlet count = 1;\n\t\tif (step.index) {\n\t\t\tcount = step.index;\n\t\t}\n\t\treturn `${hash}-${count}`;\n\t}\n\n\tasync #getStepCacheKey(step: StepSelector): Promise<string> {\n\t\tconst baseCacheKey = await this.#getBaseCacheKey(step);\n\t\treturn `${baseCacheKey}-value`;\n\t}\n\n\t#getAndIncrementCounter = async (valueKey: string, by: number) => {\n\t\tconst counterKey = `${MODIFIER_KEYS.FAILURE_INDEX}${valueKey}`;\n\t\tconst next = (await this.#state.storage.get<number>(counterKey)) ?? 1;\n\t\tawait this.#state.storage.put(counterKey, next + by);\n\t\treturn next;\n\t};\n\n\tasync #getSleepStepDisableKey(step: StepSelector): Promise<string> {\n\t\tlet count = 1;\n\t\tif (step.index) {\n\t\t\tcount = step.index;\n\t\t}\n\t\tconst sleepNameCountHash = await computeHash(step.name + count);\n\n\t\treturn `${MODIFIER_KEYS.DISABLE_SLEEP}${sleepNameCountHash}`;\n\t}\n\n\tasync disableSleeps(steps?: StepSelector[]): Promise<void> {\n\t\tif (!steps) {\n\t\t\tawait this.#state.storage.put(MODIFIER_KEYS.DISABLE_ALL_SLEEPS, true);\n\t\t} else {\n\t\t\tfor (const step of steps) {\n\t\t\t\tconst sleepDisableKey = await this.#getSleepStepDisableKey(step);\n\t\t\t\tawait this.#state.storage.put(sleepDisableKey, true);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync disableRetryDelays(steps?: StepSelector[]): Promise<void> {\n\t\tif (!steps) {\n\t\t\tawait this.#state.storage.put(\n\t\t\t\tMODIFIER_KEYS.DISABLE_ALL_RETRY_DELAYS,\n\t\t\t\ttrue\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const step of steps) {\n\t\t\t\tconst valueKey = await this.#getStepCacheKey(step);\n\t\t\t\tawait this.#state.storage.put(\n\t\t\t\t\t`${MODIFIER_KEYS.DISABLE_RETRY_DELAY}${valueKey}`,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// step.do() flow: It first checks if a result or error is already in the cache and, if so, returns it immediately.\n\t// If nothing is in the cache, it checks for remaining attempts and runs the user's code against the defined timeout.\n\t// Since `step.do()` performs this initial cache check, directly changing the `valueKey` would cause it to\n\t// assume the value was pre-cached, preventing it from writing any logs about the step's execution state.\n\t// Storing the value under a separate key is crucial because it ensures all execution logs for the step are\n\t// generated, rather than the step being skipped due to a premature cache hit.\n\tasync mockStepResult(step: StepSelector, stepResult: unknown): Promise<void> {\n\t\tconst valueKey = await this.#getStepCacheKey(step);\n\n\t\tif (\n\t\t\tawait this.#state.storage.get(\n\t\t\t\t`${MODIFIER_KEYS.REPLACE_RESULT}${valueKey}`\n\t\t\t)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`[WorkflowIntrospector] Trying to mock step '${step.name}' multiple times!`\n\t\t\t);\n\t\t}\n\n\t\tif (isReadableStreamLike(stepResult)) {\n\t\t\t// ReadableStream is not structured-cloneable, so we consume it eagerly\n\t\t\t// and store the chunks via the streaming infrastructure. We use attempt 0\n\t\t\t// to distinguish mock chunks from real execution attempts (which start at 1).\n\t\t\tconst baseCacheKey = await this.#getBaseCacheKey(step);\n\t\t\tconst streamMeta = await writeStreamOutput({\n\t\t\t\tstorage: this.#state.storage,\n\t\t\t\tcacheKey: baseCacheKey,\n\t\t\t\tattempt: 0,\n\t\t\t\tstream: stepResult,\n\t\t\t\tskipMetaWrite: true,\n\t\t\t});\n\n\t\t\tawait this.#state.storage.put(\n\t\t\t\t`${MODIFIER_KEYS.REPLACE_RESULT}${valueKey}`,\n\t\t\t\t{\n\t\t\t\t\t__mockStreamOutput: true,\n\t\t\t\t\tcacheKey: baseCacheKey,\n\t\t\t\t\tmeta: streamMeta,\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tawait this.#state.storage.put(\n\t\t\t\t`${MODIFIER_KEYS.REPLACE_RESULT}${valueKey}`,\n\t\t\t\tstepResult\n\t\t\t);\n\t\t}\n\t}\n\n\t// Same logic of `mockStepResult` but stores an error instead of a value.\n\tasync mockStepError(\n\t\tstep: StepSelector,\n\t\terror: Error,\n\t\ttimes?: number\n\t): Promise<void> {\n\t\tconst valueKey = await this.#getStepCacheKey(step);\n\t\tconst serializableError = {\n\t\t\tname: error.name,\n\t\t\tmessage: error.message,\n\t\t};\n\n\t\tif (\n\t\t\tawait this.#state.storage.get(\n\t\t\t\t`${MODIFIER_KEYS.REPLACE_RESULT}${valueKey}`\n\t\t\t)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`[WorkflowIntrospector] Trying to mock error on step '${step.name}' after mocking its result!`\n\t\t\t);\n\t\t}\n\n\t\tif (times) {\n\t\t\tconst start = await this.#getAndIncrementCounter(valueKey, times);\n\t\t\tconst mockErrorsPuts = Array.from({ length: times }, (_, i) => {\n\t\t\t\tconst attempt = start + i;\n\t\t\t\tconst mockErrorKey = `${MODIFIER_KEYS.MOCK_STEP_ERROR}${valueKey}-${attempt}`;\n\t\t\t\treturn this.#state.storage.put(mockErrorKey, serializableError);\n\t\t\t});\n\n\t\t\tawait Promise.all(mockErrorsPuts);\n\t\t} else {\n\t\t\tconst mockErrorKey = `${MODIFIER_KEYS.MOCK_STEP_ERROR}${valueKey}`;\n\t\t\tawait this.#state.storage.put(mockErrorKey, serializableError);\n\t\t}\n\t}\n\n\tasync forceStepTimeout(step: StepSelector, times?: number) {\n\t\tconst valueKey = await this.#getStepCacheKey(step);\n\n\t\tif (\n\t\t\tawait this.#state.storage.get(\n\t\t\t\t`${MODIFIER_KEYS.REPLACE_RESULT}${valueKey}`\n\t\t\t)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`[WorkflowIntrospector] Trying to force timeout on step '${step.name}' after mocking its result!`\n\t\t\t);\n\t\t}\n\n\t\tif (times) {\n\t\t\tconst start = await this.#getAndIncrementCounter(valueKey, times);\n\t\t\tconst forceTimeouts = Array.from({ length: times }, (_, i) => {\n\t\t\t\tconst attempt = start + i;\n\t\t\t\tconst forceStepTimeoutKey = `${MODIFIER_KEYS.FORCE_STEP_TIMEOUT}${valueKey}-${attempt}`;\n\t\t\t\treturn this.#state.storage.put(forceStepTimeoutKey, true);\n\t\t\t});\n\n\t\t\tawait Promise.all(forceTimeouts);\n\t\t} else {\n\t\t\tconst forceStepTimeoutKey = `${MODIFIER_KEYS.FORCE_STEP_TIMEOUT}${valueKey}`;\n\t\t\tawait this.#state.storage.put(forceStepTimeoutKey, true);\n\t\t}\n\t}\n\n\tasync mockEvent(event: UserEvent): Promise<void> {\n\t\tconst myEvent: Event = {\n\t\t\ttimestamp: new Date(),\n\t\t\tpayload: event.payload,\n\t\t\ttype: event.type,\n\t\t};\n\n\t\tawait this.#state.storage.put(\n\t\t\t`${MODIFIER_KEYS.MOCK_EVENT}${event.type}`,\n\t\t\ttrue\n\t\t);\n\t\tawait this.#engine.receiveEvent(myEvent);\n\t}\n\n\tasync forceEventTimeout(step: StepSelector): Promise<void> {\n\t\tconst waitForEventKey = await this.#getWaitForEventCacheKey(step);\n\t\tawait this.#state.storage.put(\n\t\t\t`${MODIFIER_KEYS.FORCE_EVENT_TIMEOUT}${waitForEventKey}`,\n\t\t\ttrue\n\t\t);\n\t}\n}\n", "import { ms } from \"itty-time\";\nimport type { Engine } from \"../engine\";\nimport type { WorkflowSleepDuration } from \"cloudflare:workers\";\n\nexport const ENGINE_TIMEOUT = ms(\"5 minutes\" satisfies WorkflowSleepDuration);\n\nlet latestGracePeriodTimestamp: number | undefined = undefined;\n\nexport type WaitingPromiseType = \"pause\";\n\nexport type GracePeriodCallback = (engine: Engine, timeoutMs: number) => void;\n\nexport class GracePeriodSemaphore {\n\t#counter: number = 0;\n\treadonly callback: GracePeriodCallback;\n\treadonly timeoutMs: number;\n\t#waitingPromises: {\n\t\trejectCallback: () => void;\n\t\tresolveCallback: (value: unknown) => void;\n\t\ttype: WaitingPromiseType;\n\t}[] = [];\n\t#canInitiateSteps = true;\n\t#waitingSteps: {\n\t\trejectCallback: () => void;\n\t\tresolveCallback: (value: unknown) => void;\n\t}[] = [];\n\n\tconstructor(callback: GracePeriodCallback, timeoutMs: number) {\n\t\tthis.callback = callback;\n\t\tthis.timeoutMs = timeoutMs;\n\t}\n\n\t// acquire takes engine to be the same as release\n\tasync acquire(_engine: Engine) {\n\t\tif (!this.#canInitiateSteps) {\n\t\t\tawait new Promise((resolve, reject) => {\n\t\t\t\tthis.#waitingSteps.push({\n\t\t\t\t\tresolveCallback: resolve,\n\t\t\t\t\trejectCallback: reject,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// when the counter goes from 0 to 1 - we can safely reject the previous grace period\n\t\tif (this.#counter == 0) {\n\t\t\tlatestGracePeriodTimestamp = undefined;\n\t\t}\n\t\tthis.#counter += 1;\n\t}\n\n\tasync release(engine: Engine) {\n\t\tthis.#counter = Math.max(this.#counter - 1, 0);\n\t\tif (this.#counter == 0) {\n\t\t\t// Trigger timeout promise, no need to await here,\n\t\t\t// this can be triggered slightly after it's not time sensitive\n\t\t\tthis.callback(engine, this.timeoutMs);\n\t\t\t// Resolve any promises waiting for all steps to finish (e.g. pause)\n\t\t\tfor (const promise of this.#waitingPromises) {\n\t\t\t\tpromise.resolveCallback(undefined);\n\t\t\t}\n\t\t\tthis.#waitingPromises = [];\n\t\t}\n\t}\n\n\tasync waitUntilNothingIsRunning(\n\t\ttype: WaitingPromiseType,\n\t\tcallback: () => Promise<void>\n\t): Promise<void> {\n\t\tthis.#canInitiateSteps = false;\n\t\tif (this.#counter > 0) {\n\t\t\ttry {\n\t\t\t\tawait new Promise((resolve, reject) => {\n\t\t\t\t\tthis.#waitingPromises.push({\n\t\t\t\t\t\tresolveCallback: resolve,\n\t\t\t\t\t\trejectCallback: reject,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t// If the promise gets rejected (e.g. resume cancels the pause),\n\t\t\t\t// allow steps to run again and unblock any that were waiting\n\t\t\t\tfor (const promise of this.#waitingSteps) {\n\t\t\t\t\tpromise.resolveCallback(undefined);\n\t\t\t\t}\n\t\t\t\tthis.#waitingSteps = [];\n\t\t\t\tthis.#canInitiateSteps = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tawait callback();\n\t\t// Allow steps to run again and unblock any that were waiting\n\t\tfor (const promise of this.#waitingSteps) {\n\t\t\tpromise.resolveCallback(undefined);\n\t\t}\n\t\tthis.#waitingSteps = [];\n\t\tthis.#canInitiateSteps = true;\n\t}\n\n\tcancelWaitingPromisesByType(type: WaitingPromiseType) {\n\t\tconst sameTypePromises = this.#waitingPromises.filter(\n\t\t\t(val) => val.type === type\n\t\t);\n\t\tif (sameTypePromises.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const promise of sameTypePromises) {\n\t\t\tpromise.rejectCallback();\n\t\t}\n\n\t\tthis.#waitingPromises = this.#waitingPromises.filter(\n\t\t\t(val) => val.type !== type\n\t\t);\n\n\t\tthis.#canInitiateSteps = true;\n\n\t\t// Unblock any steps that were waiting to acquire while the pause was pending\n\t\tfor (const promise of this.#waitingSteps) {\n\t\t\tpromise.resolveCallback(undefined);\n\t\t}\n\t\tthis.#waitingSteps = [];\n\t}\n\n\tdispose() {\n\t\t// Reject all waiting step promises so they stop blocking\n\t\tfor (const promise of this.#waitingSteps) {\n\t\t\tpromise.rejectCallback();\n\t\t}\n\t\tthis.#waitingSteps = [];\n\n\t\t// Reject all waiting promises\n\t\tfor (const promise of this.#waitingPromises) {\n\t\t\tpromise.rejectCallback();\n\t\t}\n\t\tthis.#waitingPromises = [];\n\n\t\tthis.#canInitiateSteps = false;\n\t}\n\n\tisRunningStep() {\n\t\treturn this.#counter > 0;\n\t}\n}\n\nexport const startGracePeriod: GracePeriodCallback = async (\n\tengine: Engine,\n\ttimeoutMs: number\n) => {\n\tconst gracePeriodHandler = async () => {\n\t\tconst thisTimestamp = new Date().valueOf();\n\n\t\t// TODO: Should the grace period be 5 mins every time or 5 mins across lifetimes?\n\t\t// At the moment, it looks like this will reset to 5 mins if a metal crashes\n\t\t// There might possibly waste memory waiting for `timeoutMs` every time\n\t\t// We should eventually strongly persist and respect this value across lifetimes\n\n\t\t// We are starting a new grace period\n\t\t// 1. There should not be one already set\n\t\t// 2. Or if there is, it should be in the past\n\t\tif (\n\t\t\t!(\n\t\t\t\tlatestGracePeriodTimestamp === undefined ||\n\t\t\t\tlatestGracePeriodTimestamp < thisTimestamp\n\t\t\t)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Can't start grace period since there is already an active one started on \" +\n\t\t\t\t\tlatestGracePeriodTimestamp\n\t\t\t);\n\t\t}\n\n\t\tlatestGracePeriodTimestamp = thisTimestamp;\n\t\tawait scheduler.wait(timeoutMs);\n\t\tif (\n\t\t\tthisTimestamp !== latestGracePeriodTimestamp ||\n\t\t\tengine.timeoutHandler.isRunningStep()\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\t// priorityQueue is set before the user code runs which implies that a grace period cannot start\n\t\t// before init finishes where it is set\n\n\t\t// Ensure next alarm is set before we abort\n\t\tawait engine.priorityQueue?.handleNextAlarm();\n\t\t// await engine.abort(ABORT_REASONS.GRACE_PERIOD_COMPLETE);\n\t};\n\tvoid gracePeriodHandler().catch(() => {\n\t\t// Swallow \u2014 the engine is shutting down (abort kills the context,\n\t\t// which rejects the scheduler.wait inside gracePeriodHandler)\n\t});\n};\n", "import { InstanceEvent } from \"../instance\";\nimport { MODIFIER_KEYS } from \"../modifier\";\nimport type { RestartFromStep } from \"../binding\";\nimport type { RawInstanceLog } from \"../instance\";\n\nconst EVENT_MAP_PREFIX = \"EVENT_MAP\";\nconst RESTART_FROM_STEP_KEY = \"RESTART_FROM_STEP\";\n\nconst KV_STEP_SUFFIXES = [\n\t\"-value\",\n\t\"-error\",\n\t\"-config\",\n\t\"-metadata\",\n\t\"-log-written\",\n\t\"-pending\",\n\t\"-value-stream-meta\",\n] as const;\n\nexport function resolveGroupKeysToWipe(\n\tsql: DurableObjectStorage[\"sql\"],\n\tparam: RestartFromStep\n): Set<string> | null {\n\tconst stepTypeToEvent: Record<string, InstanceEvent> = {\n\t\tdo: InstanceEvent.STEP_START,\n\t\tsleep: InstanceEvent.SLEEP_START,\n\t\twaitForEvent: InstanceEvent.WAIT_START,\n\t};\n\tconst targetEvent = stepTypeToEvent[param.type ?? \"do\"];\n\tconst targetCount = param.count ?? 1;\n\n\tconst cursor = sql.exec<RawInstanceLog>(\n\t\t\"SELECT event, target, groupKey FROM states WHERE event IN (?, ?, ?) ORDER BY id\",\n\t\tInstanceEvent.STEP_START,\n\t\tInstanceEvent.SLEEP_START,\n\t\tInstanceEvent.WAIT_START\n\t);\n\n\tlet nameOccurrence = 0;\n\tlet found = false;\n\tconst groupKeys = new Set<string>();\n\n\tfor (const row of cursor) {\n\t\tif (row.groupKey === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst groupKey = String(row.groupKey);\n\n\t\tif (found) {\n\t\t\tgroupKeys.add(groupKey);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (row.target === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst rawStepName = String(row.target).replace(/-\\d+$/, \"\");\n\t\tif (rawStepName !== param.name) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (row.event !== targetEvent) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tnameOccurrence++;\n\t\tif (nameOccurrence === targetCount) {\n\t\t\tfound = true;\n\t\t\tgroupKeys.add(groupKey);\n\t\t}\n\t}\n\n\treturn found ? groupKeys : null;\n}\n\nfunction getMockedEventMapKeys(allKeys: Map<string, unknown>): Set<string> {\n\tconst mockEventTypes = new Set<string>();\n\tfor (const key of allKeys.keys()) {\n\t\tif (key.startsWith(MODIFIER_KEYS.MOCK_EVENT)) {\n\t\t\tmockEventTypes.add(key.slice(MODIFIER_KEYS.MOCK_EVENT.length));\n\t\t}\n\t}\n\n\tif (mockEventTypes.size === 0) {\n\t\treturn new Set();\n\t}\n\n\tconst preserved = new Set<string>();\n\tfor (const key of allKeys.keys()) {\n\t\tif (key.startsWith(`${EVENT_MAP_PREFIX}\\n`)) {\n\t\t\tconst eventType = key.split(\"\\n\")[1];\n\t\t\tif (eventType !== undefined && mockEventTypes.has(eventType)) {\n\t\t\t\tpreserved.add(key);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn preserved;\n}\n\nasync function deleteGroupKeyBatch(\n\tstorage: DurableObjectStorage,\n\tbatch: string[]\n): Promise<void> {\n\tconst kvKeys: string[] = [];\n\tfor (const groupKey of batch) {\n\t\tfor (const suffix of KV_STEP_SUFFIXES) {\n\t\t\tkvKeys.push(`${groupKey}${suffix}`);\n\t\t}\n\t\tstorage.sql.exec(\"DELETE FROM states WHERE groupKey = ?\", groupKey);\n\t\tstorage.sql.exec(\n\t\t\t\"DELETE FROM streaming_step_chunks WHERE attempt != 0 AND cache_key = ?\",\n\t\t\tgroupKey\n\t\t);\n\t}\n\tawait storage.delete(kvKeys);\n}\n\nexport async function wipeRestartState(\n\tstorage: DurableObjectStorage,\n\tengineStatusKey: string,\n\tpauseDatetimeKey: string,\n\tgroupKeysToWipe: Set<string> | null\n): Promise<void> {\n\tif (groupKeysToWipe) {\n\t\tawait deleteGroupKeyBatch(storage, Array.from(groupKeysToWipe));\n\t\tstorage.sql.exec(\n\t\t\t\"DELETE FROM states WHERE groupKey IS NULL AND event NOT IN (?, ?)\",\n\t\t\tInstanceEvent.WORKFLOW_START,\n\t\t\tInstanceEvent.WORKFLOW_QUEUED\n\t\t);\n\t} else {\n\t\tconst cursor = storage.sql.exec<{ groupKey: string }>(\n\t\t\t\"SELECT DISTINCT groupKey FROM states WHERE groupKey IS NOT NULL\"\n\t\t);\n\t\tconst allGroupKeys = [...cursor].map((r) => r.groupKey);\n\t\tif (allGroupKeys.length > 0) {\n\t\t\tawait deleteGroupKeyBatch(storage, allGroupKeys);\n\t\t}\n\t\tstorage.sql.exec(\"DELETE FROM states\");\n\t}\n\n\tconst keysToDelete: string[] = [engineStatusKey, pauseDatetimeKey];\n\n\tconst allKeys = await storage.list();\n\tconst preservedEventMapKeys = getMockedEventMapKeys(allKeys);\n\tfor (const key of allKeys.keys()) {\n\t\tif (\n\t\t\tkey.startsWith(`${EVENT_MAP_PREFIX}\\n`) &&\n\t\t\t!preservedEventMapKeys.has(key)\n\t\t) {\n\t\t\tkeysToDelete.push(key);\n\t\t}\n\t}\n\tawait storage.delete(keysToDelete);\n\n\tstorage.sql.exec(\"DELETE FROM priority_queue\");\n}\n\nexport async function readAndClearRestartFromStep(\n\tstorage: DurableObjectStorage\n): Promise<RestartFromStep | undefined> {\n\tconst value = await storage.get<RestartFromStep>(RESTART_FROM_STEP_KEY);\n\tawait storage.delete(RESTART_FROM_STEP_KEY);\n\treturn value;\n}\n\nexport async function storeRestartFromStep(\n\tstorage: DurableObjectStorage,\n\tfrom: RestartFromStep\n): Promise<void> {\n\tawait storage.put(RESTART_FROM_STEP_KEY, from);\n}\n", "import Heap from \"heap-js\";\nimport type {\n\tInstanceMetadata,\n\tWakerPriorityEntry,\n\tWakerPriorityType,\n} from \"../instance\";\n\nconst wakerPriorityEntryComparator = (\n\ta: WakerPriorityEntry,\n\tb: WakerPriorityEntry\n) => {\n\treturn a.targetTimestamp - b.targetTimestamp;\n};\n\nconst enum SQLiteBoolean {\n\tFALSE = 0,\n\tTRUE = 1,\n}\n\nconst enum EntryType {\n\tRETRY = 0,\n\tSLEEP = 1,\n\tTIMEOUT = 2,\n}\n\ntype PriorityQueueDBEntry = {\n\tid: number;\n\tcreated_on: string;\n\ttarget_timestamp: number;\n\taction: SQLiteBoolean;\n\tentryType: number;\n\thash: string;\n};\n\nexport class TimePriorityQueue {\n\t#heap: Heap<WakerPriorityEntry> = new Heap(wakerPriorityEntryComparator);\n\t#ctx: DurableObjectState;\n\n\tconstructor(ctx: DurableObjectState, _instanceMetadata: InstanceMetadata) {\n\t\tthis.#ctx = ctx;\n\n\t\tthis.#heap.init(this.getEntries());\n\t}\n\n\tpopPastEntries(): WakerPriorityEntry[] | undefined {\n\t\t// early return if there is nothing in the queue\n\t\tif (this.#heap.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst res: WakerPriorityEntry[] = [];\n\t\tconst currentTimestamp = new Date().valueOf();\n\t\t// heap-js does not have a ordered iterator that doesn't consume the input so we\n\t\t// peek the first one, and pop if it's old until it's empty or in the future\n\t\twhile (true) {\n\t\t\tconst element = this.#heap.peek();\n\t\t\tif (element === undefined) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (element.targetTimestamp > currentTimestamp) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// at this point, targetTimestamp is older so we can pop this node because it's no\n\t\t\t// longer relevant\n\t\t\tres.push(element);\n\t\t\tthis.#heap.pop();\n\t\t}\n\t\tthis.#ctx.storage.transactionSync(() => {\n\t\t\tfor (const entry of res) {\n\t\t\t\tthis.removeEntryDB(entry);\n\t\t\t}\n\t\t});\n\t\treturn res;\n\t}\n\n\t/**\n\t * `add` is ran using a transaction so it's race condition free, if it's ran atomically\n\t * @param entry\n\t */\n\tasync add(entry: WakerPriorityEntry) {\n\t\tawait this.#ctx.storage.transaction(async () => {\n\t\t\t// TODO: Handle this\n\t\t\t// const waker = this.#env.WAKERS.idFromName(\n\t\t\t// \tthis.#instanceMetadata.instance.id\n\t\t\t// );\n\t\t\t// const wakerStub = this.#env.WAKERS.get(waker);\n\t\t\t// We can optimise this by only calling it if time is sooner than any other\n\t\t\t// await wakerStub.wake(\n\t\t\t// \tnew Date(entry.targetTimestamp),\n\t\t\t// \tthis.#instanceMetadata\n\t\t\t// );\n\n\t\t\tthis.#heap.add(entry);\n\t\t\tthis.addEntryDB(entry);\n\t\t});\n\t}\n\n\t/**\n\t * `remove` is ran using a transaction so it's race condition free, if it's ran atomically\n\t * @param entry\n\t */\n\tremove(entry: Omit<WakerPriorityEntry, \"targetTimestamp\">) {\n\t\tthis.#ctx.storage.transactionSync(() => {\n\t\t\tthis.removeFirst((e) => {\n\t\t\t\tif (e.hash === entry.hash && e.type === entry.type) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t});\n\t}\n\n\toffsetAll(offset: number) {\n\t\t// Clear the entire PQ table and re-insert only the offset entries.\n\t\t// We can't use the append-only add/remove pattern here because the\n\t\t// UNIQUE (action, entryType, hash) constraint would conflict with\n\t\t// the original action=1 rows still in the table.\n\t\tthis.#ctx.storage.transactionSync(() => {\n\t\t\tconst entries = this.#heap.toArray();\n\n\t\t\t// Wipe the table \u2014 removes all historical add/remove rows\n\t\t\tthis.#ctx.storage.sql.exec(\"DELETE FROM priority_queue\");\n\n\t\t\tconst newEntries = entries.map((value) => ({\n\t\t\t\t...value,\n\t\t\t\ttargetTimestamp: value.targetTimestamp + offset,\n\t\t\t}));\n\t\t\tfor (const entry of newEntries) {\n\t\t\t\tthis.addEntryDB(entry);\n\t\t\t}\n\t\t\t// re-init in-memory heap\n\t\t\tthis.#heap = new Heap(wakerPriorityEntryComparator);\n\t\t\tthis.#heap.init(newEntries);\n\t\t});\n\t}\n\n\tpopTypeAll(entryType: WakerPriorityType) {\n\t\tthis.#ctx.storage.transactionSync(() => {\n\t\t\tthis.filter((e) => e.type !== entryType);\n\t\t});\n\t}\n\n\t// Idempotent, perhaps name should suggest so\n\tasync handleNextAlarm() {\n\t\tconst nextWakeCall = this.#heap.peek();\n\t\tif (nextWakeCall === undefined) {\n\t\t\treturn;\n\t\t}\n\t\t// TODO: Handle this\n\t\t// const waker = this.#env.WAKERS.idFromName(\n\t\t// \tthis.#instanceMetadata.instance.id\n\t\t// );\n\t\t// const wakerStub = this.#env.WAKERS.get(waker);\n\t\t// await wakerStub.wake(\n\t\t// \tnew Date(nextWakeCall.targetTimestamp),\n\t\t// \tthis.#instanceMetadata\n\t\t// );\n\t}\n\n\tgetFirst(\n\t\tcallbackFn: (a: WakerPriorityEntry) => boolean\n\t): WakerPriorityEntry | undefined {\n\t\t// clone it so that people cant just modify the entry on the PQ\n\t\treturn structuredClone(this.#heap.toArray().find(callbackFn));\n\t}\n\n\tprivate removeFirst(callbackFn: (a: WakerPriorityEntry) => boolean) {\n\t\tconst elements = this.#heap.toArray();\n\t\tconst index = elements.findIndex(callbackFn);\n\t\tif (index === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst removedEntry = elements.splice(index, 1)[0];\n\t\tthis.removeEntryDB(removedEntry);\n\n\t\tthis.#heap = new Heap(wakerPriorityEntryComparator);\n\t\tthis.#heap.init(elements);\n\t}\n\n\tprivate filter(callbackFn: (a: WakerPriorityEntry) => boolean) {\n\t\tconst filteredElements = this.#heap.toArray().filter(callbackFn);\n\t\tconst removedElements = this.#heap.toArray().filter((a) => !callbackFn(a));\n\t\tthis.#ctx.storage.transactionSync(() => {\n\t\t\tfor (const entry of removedElements) {\n\t\t\t\tthis.removeEntryDB(entry);\n\t\t\t}\n\t\t});\n\t\tthis.#heap = new Heap(wakerPriorityEntryComparator);\n\t\tthis.#heap.init(filteredElements);\n\t}\n\n\tlength() {\n\t\treturn this.#heap.length;\n\t}\n\n\tprivate getEntries() {\n\t\tconst entries = [\n\t\t\t...this.#ctx.storage.sql.exec(\"SELECT * FROM priority_queue ORDER BY id\"),\n\t\t] as PriorityQueueDBEntry[];\n\n\t\tconst activeEntries: WakerPriorityEntry[] = [];\n\n\t\tentries.forEach((val) => {\n\t\t\tconst entryType = toWakerPriorityType(val.entryType);\n\t\t\t// 0 - removed\n\t\t\tif (val.action == 0) {\n\t\t\t\tconst index = activeEntries.findIndex(\n\t\t\t\t\t(activeVal) =>\n\t\t\t\t\t\tval.hash == activeVal.hash && entryType == activeVal.type\n\t\t\t\t);\n\t\t\t\t// if it's found remove it from the active list\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tactiveEntries.splice(index, 1);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// 1 - added\n\t\t\t\tconst index = activeEntries.findIndex(\n\t\t\t\t\t(activeVal) =>\n\t\t\t\t\t\tval.hash == activeVal.hash && entryType == activeVal.type\n\t\t\t\t);\n\t\t\t\t// if it's found remove it from the active list\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tactiveEntries.push({\n\t\t\t\t\t\thash: val.hash,\n\t\t\t\t\t\ttargetTimestamp: val.target_timestamp,\n\t\t\t\t\t\ttype: entryType,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn activeEntries;\n\t}\n\n\tprivate removeEntryDB(entry: WakerPriorityEntry) {\n\t\tthis.#ctx.storage.sql.exec(\n\t\t\t`\n\t\t\tINSERT INTO priority_queue (target_timestamp, action, entryType, hash)\n\t\t\tVALUES (?, ?, ? ,?)\n\t\t\t`,\n\t\t\tentry.targetTimestamp,\n\t\t\tSQLiteBoolean.FALSE,\n\t\t\tfromWakerPriorityType(entry.type),\n\t\t\tentry.hash\n\t\t);\n\t}\n\n\tcheckIfExistedInPast(entry: Omit<WakerPriorityEntry, \"targetTimestamp\">) {\n\t\treturn (\n\t\t\tthis.#ctx.storage.sql\n\t\t\t\t.exec(\n\t\t\t\t\t\"SELECT * FROM priority_queue WHERE entryType = ? AND hash = ? AND action = ?\",\n\t\t\t\t\tfromWakerPriorityType(entry.type),\n\t\t\t\t\tentry.hash,\n\t\t\t\t\t0\n\t\t\t\t)\n\t\t\t\t.toArray().length >= 1\n\t\t);\n\t}\n\n\tprivate addEntryDB(entry: WakerPriorityEntry) {\n\t\tthis.#ctx.storage.sql.exec(\n\t\t\t`\n\t\t\tINSERT INTO priority_queue (target_timestamp, action, entryType, hash)\n\t\t\tVALUES (?, ?, ? ,?)\n\t\t\t`,\n\t\t\tentry.targetTimestamp,\n\t\t\tSQLiteBoolean.TRUE,\n\t\t\tfromWakerPriorityType(entry.type),\n\t\t\tentry.hash\n\t\t);\n\t}\n}\n\nconst toWakerPriorityType = (entryType: EntryType): WakerPriorityType => {\n\tswitch (entryType) {\n\t\tcase EntryType.RETRY:\n\t\t\treturn \"retry\";\n\t\tcase EntryType.SLEEP:\n\t\t\treturn \"sleep\";\n\t\tcase EntryType.TIMEOUT:\n\t\t\treturn \"timeout\";\n\t}\n};\n\nconst fromWakerPriorityType = (entryType: WakerPriorityType): EntryType => {\n\tswitch (entryType) {\n\t\tcase \"retry\":\n\t\t\treturn EntryType.RETRY;\n\t\tcase \"sleep\":\n\t\t\treturn EntryType.SLEEP;\n\t\tcase \"timeout\":\n\t\t\treturn EntryType.TIMEOUT;\n\t\tdefault:\n\t\t\tthrow new Error(`WakerPriorityType \"${entryType}\" has not been handled`);\n\t}\n};\n", "import { RpcTarget, WorkerEntrypoint } from \"cloudflare:workers\";\nimport { InstanceEvent, instanceStatusName } from \"./instance\";\nimport {\n\tisUserTriggeredPause,\n\tisUserTriggeredRestart,\n\tisUserTriggeredTerminate,\n\tWorkflowError,\n} from \"./lib/errors\";\nimport { isValidWorkflowInstanceId } from \"./lib/validators\";\nimport type {\n\tDatabaseInstance,\n\tDatabaseVersion,\n\tDatabaseWorkflow,\n\tEngine,\n\tEngineLogs,\n} from \"./engine\";\nimport type { InstanceStatus as EngineInstanceStatus } from \"./instance\";\nimport type {\n\tWorkflowInstanceModifier,\n\tWorkflowIntrospectionOperation,\n\tWorkflowIntrospectionStreamResult,\n} from \"./types\";\n\ntype Env = {\n\tENGINE: DurableObjectNamespace<Engine>;\n\tBINDING_NAME: string;\n\tWORKFLOW_NAME: string;\n};\n\ntype WorkflowIntrospectionSession = {\n\tid: string;\n\toperations: WorkflowIntrospectionOperation[];\n\tinstanceIds: string[];\n};\n\n// workerd may construct a fresh WorkflowBinding object for each RPC call. Store\n// sessions at module scope so start/modify/get/dispose calls, and later\n// WorkflowBinding.create() calls, all see the same active Workflow session.\nconst workflowIntrospectionSessions = new Map<\n\tstring,\n\tWorkflowIntrospectionSession\n>();\n\nfunction getWorkflowIntrospectionSession(\n\tworkflowName: string,\n\tsessionId: string\n): WorkflowIntrospectionSession {\n\tconst session = workflowIntrospectionSessions.get(workflowName);\n\tif (session?.id !== sessionId) {\n\t\tthrow new Error(\n\t\t\t`Workflow ${JSON.stringify(workflowName)} does not have an active introspection session for this introspector.`\n\t\t);\n\t}\n\treturn session;\n}\n\nfunction isWorkflowIntrospectionStreamResult(\n\tvalue: unknown\n): value is WorkflowIntrospectionStreamResult {\n\treturn (\n\t\tvalue !== null &&\n\t\ttypeof value === \"object\" &&\n\t\t\"__workflowIntrospectionStreamResult\" in value &&\n\t\t\"chunks\" in value &&\n\t\tvalue.__workflowIntrospectionStreamResult === true &&\n\t\tArray.isArray(value.chunks)\n\t);\n}\n\nfunction createWorkflowIntrospectionReadableStream(\n\tresult: WorkflowIntrospectionStreamResult\n): ReadableStream<Uint8Array> {\n\treturn new ReadableStream<Uint8Array>({\n\t\tstart(controller) {\n\t\t\tfor (const chunk of result.chunks) {\n\t\t\t\tcontroller.enqueue(chunk.slice());\n\t\t\t}\n\t\t\tcontroller.close();\n\t\t},\n\t});\n}\n\nasync function applyWorkflowIntrospectionOperation(\n\tmodifier: WorkflowInstanceModifier,\n\toperation: WorkflowIntrospectionOperation\n) {\n\tswitch (operation.type) {\n\t\tcase \"disableSleeps\":\n\t\t\tawait modifier.disableSleeps(operation.steps);\n\t\t\tbreak;\n\t\tcase \"disableRetryDelays\":\n\t\t\tawait modifier.disableRetryDelays(operation.steps);\n\t\t\tbreak;\n\t\tcase \"mockStepResult\":\n\t\t\tawait modifier.mockStepResult(\n\t\t\t\toperation.step,\n\t\t\t\tisWorkflowIntrospectionStreamResult(operation.stepResult)\n\t\t\t\t\t? createWorkflowIntrospectionReadableStream(operation.stepResult)\n\t\t\t\t\t: operation.stepResult\n\t\t\t);\n\t\t\tbreak;\n\t\tcase \"mockStepError\": {\n\t\t\tconst error = new Error(operation.error.message);\n\t\t\terror.name = operation.error.name;\n\t\t\tawait modifier.mockStepError(operation.step, error, operation.times);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"forceStepTimeout\":\n\t\t\tawait modifier.forceStepTimeout(operation.step, operation.times);\n\t\t\tbreak;\n\t\tcase \"mockEvent\":\n\t\t\tawait modifier.mockEvent(operation.event);\n\t\t\tbreak;\n\t\tcase \"forceEventTimeout\":\n\t\t\tawait modifier.forceEventTimeout(operation.step);\n\t\t\tbreak;\n\t}\n}\n\n// TODO(vaish): import from @cloudflare/workers-types once restart options are published\nexport interface RestartFromStep {\n\tname: string;\n\tcount?: number;\n\ttype?: \"do\" | \"sleep\" | \"waitForEvent\";\n}\n\nexport interface WorkflowInstanceRestartOptions {\n\tfrom?: RestartFromStep;\n}\n\n// this.env.WORKFLOW is WorkflowBinding\nexport class WorkflowBinding extends WorkerEntrypoint<Env> {\n\tconstructor(ctx: ExecutionContext, env: Env) {\n\t\tsuper(ctx, env);\n\t}\n\n\tpublic async create({\n\t\tid = crypto.randomUUID(),\n\t\tparams = {},\n\t}: WorkflowInstanceCreateOptions = {}): Promise<{\n\t\tid: string;\n\t}> {\n\t\tif (!isValidWorkflowInstanceId(id)) {\n\t\t\tthrow new WorkflowError(\"Workflow instance has invalid id\");\n\t\t}\n\n\t\tconst stubId = this.env.ENGINE.idFromName(id);\n\t\tconst stub = this.env.ENGINE.get(stubId);\n\t\tconst introspectionSession = workflowIntrospectionSessions.get(\n\t\t\tthis.env.WORKFLOW_NAME\n\t\t);\n\n\t\tif (introspectionSession !== undefined) {\n\t\t\tconst modifier = stub.getInstanceModifier();\n\t\t\tintrospectionSession.instanceIds.push(id);\n\t\t\tfor (const operation of introspectionSession.operations) {\n\t\t\t\tawait applyWorkflowIntrospectionOperation(modifier, operation);\n\t\t\t}\n\t\t}\n\n\t\tconst now = new Date().toISOString();\n\t\tconst initPromise = stub\n\t\t\t.init(\n\t\t\t\t0, // accountId: number,\n\t\t\t\t{} as DatabaseWorkflow, // workflow: DatabaseWorkflow,\n\t\t\t\t{} as DatabaseVersion, // version: DatabaseVersion,\n\t\t\t\t{\n\t\t\t\t\tid,\n\t\t\t\t\tcreated_on: now,\n\t\t\t\t\tmodified_on: now,\n\t\t\t\t\tworkflow_id: \"\",\n\t\t\t\t\tversion_id: \"\",\n\t\t\t\t\tstatus: 0, // InstanceStatus.Queued\n\t\t\t\t\tstarted_on: now,\n\t\t\t\t\tended_on: null,\n\t\t\t\t} satisfies DatabaseInstance,\n\t\t\t\t{\n\t\t\t\t\ttimestamp: new Date(),\n\t\t\t\t\tpayload: params as Readonly<typeof params>,\n\t\t\t\t\tinstanceId: id,\n\t\t\t\t\tworkflowName: this.env.WORKFLOW_NAME,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then((val) => {\n\t\t\t\tif (val !== undefined) {\n\t\t\t\t\tval[Symbol.dispose]();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Suppress all rejections: create() should queue and\n\t\t\t\t// return immediately\n\t\t\t});\n\n\t\tthis.ctx.waitUntil(initPromise);\n\n\t\treturn {\n\t\t\tid,\n\t\t};\n\t}\n\n\tpublic async get(id: string): Promise<WorkflowInstance> {\n\t\tconst stubId = this.env.ENGINE.idFromName(id);\n\t\tconst stub = this.env.ENGINE.get(stubId);\n\n\t\t// Pass a getter function so WorkflowHandle can get a fresh stub after abort\n\t\tconst getStub = () => this.env.ENGINE.get(this.env.ENGINE.idFromName(id));\n\n\t\tconst handle = new WorkflowHandle(id, stub, getStub);\n\n\t\ttry {\n\t\t\tawait handle.status();\n\t\t} catch {\n\t\t\tthrow new Error(\"instance.not_found\");\n\t\t}\n\n\t\treturn handle;\n\t}\n\n\tpublic async createBatch(\n\t\tbatch: WorkflowInstanceCreateOptions<unknown>[]\n\t): Promise<{ id: string }[]> {\n\t\tif (batch.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t\"WorkflowError: batchCreate should have at least 1 instance\"\n\t\t\t);\n\t\t}\n\n\t\treturn await Promise.all(\n\t\t\tbatch.map(async (val) => {\n\t\t\t\tconst res = await this.create(val);\n\t\t\t\treturn res;\n\t\t\t})\n\t\t);\n\t}\n\n\tpublic async unsafeGetBindingName(): Promise<string> {\n\t\t// async because of rpc\n\t\treturn this.env.BINDING_NAME;\n\t}\n\n\tpublic async unsafeStartIntrospection(): Promise<string> {\n\t\tif (workflowIntrospectionSessions.has(this.env.WORKFLOW_NAME)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Workflow ${JSON.stringify(this.env.WORKFLOW_NAME)} already has an active introspection session for binding ${JSON.stringify(this.env.BINDING_NAME)}.`\n\t\t\t);\n\t\t}\n\n\t\tconst sessionId = crypto.randomUUID();\n\t\tworkflowIntrospectionSessions.set(this.env.WORKFLOW_NAME, {\n\t\t\tid: sessionId,\n\t\t\toperations: [],\n\t\t\tinstanceIds: [],\n\t\t});\n\t\treturn sessionId;\n\t}\n\n\tpublic async unsafeStopIntrospection(sessionId: string): Promise<void> {\n\t\tconst session = workflowIntrospectionSessions.get(this.env.WORKFLOW_NAME);\n\t\tif (session?.id === sessionId) {\n\t\t\tworkflowIntrospectionSessions.delete(this.env.WORKFLOW_NAME);\n\t\t}\n\t}\n\n\tpublic async unsafeSetIntrospectionOperations(\n\t\tsessionId: string,\n\t\toperations: WorkflowIntrospectionOperation[]\n\t): Promise<void> {\n\t\tconst session = getWorkflowIntrospectionSession(\n\t\t\tthis.env.WORKFLOW_NAME,\n\t\t\tsessionId\n\t\t);\n\t\tsession.operations = operations;\n\t}\n\n\tpublic async unsafeGetIntrospectionInstances(\n\t\tsessionId: string\n\t): Promise<string[]> {\n\t\treturn getWorkflowIntrospectionSession(this.env.WORKFLOW_NAME, sessionId)\n\t\t\t.instanceIds;\n\t}\n\n\tpublic async unsafeGetInstanceModifier(instanceId: string): Promise<unknown> {\n\t\t// async because of rpc\n\t\tconst stubId = this.env.ENGINE.idFromName(instanceId);\n\t\tconst stub = this.env.ENGINE.get(stubId);\n\n\t\tconst instanceModifier = stub.getInstanceModifier();\n\n\t\treturn instanceModifier;\n\t}\n\n\tpublic async unsafeWaitForStepResult(\n\t\tinstanceId: string,\n\t\tname: string,\n\t\tindex?: number\n\t): Promise<unknown> {\n\t\tconst stubId = this.env.ENGINE.idFromName(instanceId);\n\t\tconst stub = this.env.ENGINE.get(stubId);\n\n\t\treturn await stub.waitForStepResult(name, index);\n\t}\n\n\tpublic async unsafeAbort(instanceId: string, reason?: string): Promise<void> {\n\t\tconst stubId = this.env.ENGINE.idFromName(instanceId);\n\t\tconst stub = this.env.ENGINE.get(stubId);\n\n\t\ttry {\n\t\t\tawait stub.unsafeAbort(reason);\n\t\t} catch {\n\t\t\t// do nothing because we want to dispose this instance\n\t\t}\n\t}\n\n\tpublic async unsafeWaitForStatus(\n\t\tinstanceId: string,\n\t\tstatus: string\n\t): Promise<void> {\n\t\tconst stubId = this.env.ENGINE.idFromName(instanceId);\n\t\tconst stub = this.env.ENGINE.get(stubId);\n\t\treturn await stub.waitForStatus(status);\n\t}\n\n\tpublic async unsafeGetOutputOrError(\n\t\tinstanceId: string,\n\t\tisOutput: boolean\n\t): Promise<unknown> {\n\t\tconst stubId = this.env.ENGINE.idFromName(instanceId);\n\t\tconst stub = this.env.ENGINE.get(stubId);\n\t\treturn await stub.getOutputOrError(isOutput);\n\t}\n}\n\nexport class WorkflowHandle extends RpcTarget implements WorkflowInstance {\n\tprivate stub: DurableObjectStub<Engine>;\n\n\tconstructor(\n\t\tpublic id: string,\n\t\tstub: DurableObjectStub<Engine>,\n\t\tprivate getStub: () => DurableObjectStub<Engine>\n\t) {\n\t\tsuper();\n\t\tthis.stub = stub;\n\t}\n\n\tpublic async pause(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.stub.changeInstanceStatus(\"pause\");\n\t\t} catch (e) {\n\t\t\t// pause causes instance abortion\n\t\t\tif (!isUserTriggeredPause(e)) {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async resume(): Promise<void> {\n\t\tawait this.stub.changeInstanceStatus(\"resume\");\n\t}\n\n\tpublic async terminate(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.stub.changeInstanceStatus(\"terminate\");\n\t\t} catch (e) {\n\t\t\t// terminate causes instance abortion\n\t\t\tif (!isUserTriggeredTerminate(e)) {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async restart(\n\t\toptions?: WorkflowInstanceRestartOptions\n\t): Promise<void> {\n\t\ttry {\n\t\t\tawait this.stub.changeInstanceStatus(\"restart\", options?.from);\n\t\t} catch (e) {\n\t\t\t// restart causes instance abortion\n\t\t\tif (!isUserTriggeredRestart(e)) {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\t// trigger restart flow after abortion\n\t\tthis.stub = this.getStub();\n\t\tawait this.stub.attemptRestart();\n\t}\n\n\tpublic async status(): Promise<\n\t\tInstanceStatus & { __LOCAL_DEV_STEP_OUTPUTS: unknown[] }\n\t> {\n\t\t// Both getStatus() and readLogs() must use the same fresh stub.\n\t\t// After pause/restart/terminate aborts the DO, the stub goes stale\n\t\tconst fetchStatusAndLogs = async () => {\n\t\t\tconst status = await this.stub.getStatus();\n\n\t\t\t// NOTE(lduarte): for some reason, sync functions over RPC are typed as never instead of Promise<EngineLogs>\n\t\t\tconst logs = await (this.stub.readLogs() as unknown as Promise<\n\t\t\t\tEngineLogs & Disposable\n\t\t\t>);\n\n\t\t\treturn { status, logs };\n\t\t};\n\n\t\tlet result: {\n\t\t\tstatus: EngineInstanceStatus;\n\t\t\tlogs: EngineLogs & Disposable;\n\t\t};\n\t\ttry {\n\t\t\tresult = await fetchStatusAndLogs();\n\t\t} catch {\n\t\t\tthis.stub = this.getStub();\n\t\t\tresult = await fetchStatusAndLogs();\n\t\t}\n\t\t// Dispose the RPC handle when the method scope exits\n\t\tusing logs = result.logs;\n\n\t\tconst filteredLogs = logs.logs.filter(\n\t\t\t(log) =>\n\t\t\t\tlog.event === InstanceEvent.STEP_SUCCESS ||\n\t\t\t\tlog.event === InstanceEvent.WAIT_COMPLETE\n\t\t);\n\n\t\tconst stepOutputs = filteredLogs.map((log) =>\n\t\t\tlog.event === InstanceEvent.STEP_SUCCESS\n\t\t\t\t? log.metadata.result\n\t\t\t\t: log.metadata.payload\n\t\t);\n\n\t\tconst workflowOutput =\n\t\t\tlogs.logs.find((log) => log.event === InstanceEvent.WORKFLOW_SUCCESS)\n\t\t\t\t?.metadata.result ?? null;\n\n\t\tconst workflowError = logs.logs.find(\n\t\t\t(log) => log.event === InstanceEvent.WORKFLOW_FAILURE\n\t\t)?.metadata.error;\n\n\t\treturn {\n\t\t\tstatus: instanceStatusName(result.status),\n\t\t\t__LOCAL_DEV_STEP_OUTPUTS: stepOutputs,\n\t\t\toutput: workflowOutput,\n\t\t\terror: workflowError,\n\t\t};\n\t}\n\n\tpublic async sendEvent(args: {\n\t\tpayload: unknown;\n\t\ttype: string;\n\t}): Promise<void> {\n\t\tawait this.stub.receiveEvent({\n\t\t\tpayload: args.payload,\n\t\t\ttype: args.type,\n\t\t\ttimestamp: new Date(),\n\t\t});\n\t}\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,KAAC,SAAU,QAAQ,SAAS;AACxB,aAAO,WAAY,YAAY,OAAO,SAAW,MAAc,QAAQ,OAAO,IAC9E,OAAO,UAAW,cAAc,OAAO,MAAM,OAAO,CAAC,SAAS,GAAG,OAAO,KACvE,SAAS,OAAO,aAAe,MAAc,aAAa,UAAU,MAAM,QAAQ,OAAO,OAAO,CAAC,CAAC;AAAA,IACvG,GAAG,UAAO,SAAUA,UAAS;AAAE;AAE3B,UAAI,YAAkD,SAAU,SAAS,YAAY,GAAG,WAAW;AAC/F,iBAAS,MAAM,OAAO;AAAE,iBAAO,iBAAiB,IAAI,QAAQ,IAAI,EAAE,SAAU,SAAS;AAAE,oBAAQ,KAAK;AAAA,UAAG,CAAC;AAAA,QAAG;AAC3G,eAAO,KAAK,MAAM,IAAI,UAAU,SAAU,SAAS,QAAQ;AACvD,mBAAS,UAAU,OAAO;AAAE,gBAAI;AAAE,mBAAK,UAAU,KAAK,KAAK,CAAC;AAAA,YAAG,SAAS,GAAG;AAAE,qBAAO,CAAC;AAAA,YAAG;AAAA,UAAE;AAC1F,mBAAS,SAAS,OAAO;AAAE,gBAAI;AAAE,mBAAK,UAAU,MAAS,KAAK,CAAC;AAAA,YAAG,SAAS,GAAG;AAAE,qBAAO,CAAC;AAAA,YAAG;AAAA,UAAE;AAC7F,mBAAS,KAAK,QAAQ;AAAE,mBAAO,OAAO,QAAQ,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK,EAAE,KAAK,WAAW,QAAQ;AAAA,UAAG;AAC7G,gBAAM,YAAY,UAAU,MAAM,SAAS,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC;AAAA,QACxE,CAAC;AAAA,MACL,GACI,gBAAwD,SAAU,SAAS,MAAM;AACjF,YAAI,IAAI,EAAE,OAAO,GAAG,MAAM,WAAW;AAAE,cAAI,EAAE,CAAC,IAAI,EAAG,OAAM,EAAE,CAAC;AAAG,iBAAO,EAAE,CAAC;AAAA,QAAG,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG;AAC/G,eAAO,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,OAAS,KAAK,CAAC,GAAG,QAAU,KAAK,CAAC,EAAE,GAAG,OAAO,UAAW,eAAe,EAAE,OAAO,QAAQ,IAAI,WAAW;AAAE,iBAAO;AAAA,QAAM,IAAI;AACvJ,iBAAS,KAAKC,IAAG;AAAE,iBAAO,SAAU,GAAG;AAAE,mBAAO,KAAK,CAACA,IAAG,CAAC,CAAC;AAAA,UAAG;AAAA,QAAG;AACjE,iBAAS,KAAK,IAAI;AACd,cAAI,EAAG,OAAM,IAAI,UAAU,iCAAiC;AAC5D,iBAAO,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,IAAG,KAAI;AAC1C,gBAAI,IAAI,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,SAAY,GAAG,CAAC,IAAI,EAAE,WAAc,IAAI,EAAE,WAAc,EAAE,KAAK,CAAC,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAM,QAAO;AAE3J,oBADI,IAAI,GAAG,MAAG,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK,IAC9B,GAAG,CAAC,GAAG;AAAA,cACX,KAAK;AAAA,cAAG,KAAK;AAAG,oBAAI;AAAI;AAAA,cACxB,KAAK;AAAG,yBAAE,SAAgB,EAAE,OAAO,GAAG,CAAC,GAAG,MAAM,GAAM;AAAA,cACtD,KAAK;AAAG,kBAAE,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAAG;AAAA,cACxC,KAAK;AAAG,qBAAK,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI;AAAG;AAAA,cACxC;AACI,oBAAM,IAAI,EAAE,MAAM,MAAI,EAAE,SAAS,KAAK,EAAE,EAAE,SAAS,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI;AAAE,sBAAI;AAAG;AAAA,gBAAU;AAC3G,oBAAI,GAAG,CAAC,MAAM,MAAM,CAAC,KAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,IAAK;AAAE,oBAAE,QAAQ,GAAG,CAAC;AAAG;AAAA,gBAAO;AACrF,oBAAI,GAAG,CAAC,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG;AAAE,oBAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;AAAI;AAAA,gBAAO;AACpE,oBAAI,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG;AAAE,oBAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE;AAAG;AAAA,gBAAO;AAClE,gBAAI,EAAE,CAAC,KAAG,EAAE,IAAI,IAAI,GACpB,EAAE,KAAK,IAAI;AAAG;AAAA,YACtB;AACA,iBAAK,KAAK,KAAK,SAAS,CAAC;AAAA,UAC7B,SAAS,GAAG;AAAE,iBAAK,CAAC,GAAG,CAAC,GAAG,IAAI;AAAA,UAAG,UAAE;AAAU,gBAAI,IAAI;AAAA,UAAG;AACzD,cAAI,GAAG,CAAC,IAAI,EAAG,OAAM,GAAG,CAAC;AAAG,iBAAO,EAAE,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,MAAM,GAAK;AAAA,QACnF;AAAA,MACJ,GACI,WAA8C,SAAU,GAAGA,IAAG;AAC9D,YAAI,IAAI,OAAO,UAAW,cAAc,EAAE,OAAO,QAAQ;AACzD,YAAI,CAAC,EAAG,QAAO;AACf,YAAI,IAAI,EAAE,KAAK,CAAC,GAAGC,IAAG,KAAK,CAAC,GAAG;AAC/B,YAAI;AACA,kBAAQD,OAAM,UAAUA,OAAM,MAAM,EAAEC,KAAI,EAAE,KAAK,GAAG,OAAM,IAAG,KAAKA,GAAE,KAAK;AAAA,QAC7E,SACO,OAAO;AAAE,cAAI,EAAE,MAAa;AAAA,QAAG,UACtC;AACI,cAAI;AACA,YAAIA,MAAK,CAACA,GAAE,SAAS,IAAI,EAAE,WAAY,EAAE,KAAK,CAAC;AAAA,UACnD,UACA;AAAU,gBAAI,EAAG,OAAM,EAAE;AAAA,UAAO;AAAA,QACpC;AACA,eAAO;AAAA,MACX,GACI,kBAA4D,SAAU,IAAI,MAAM,MAAM;AACtF,YAAI,QAAQ,UAAU,WAAW,EAAG,UAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG;AAC5E,WAAI,MAAM,EAAE,KAAK,WACR,OAAI,KAAK,MAAM,UAAU,MAAM,KAAK,MAAM,GAAG,CAAC,IACnD,GAAG,CAAC,IAAI,KAAK,CAAC;AAGtB,eAAO,GAAG,OAAO,MAAM,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AAAA,MAC3D,GACI,WAAgD,SAAS,GAAG;AAC5D,YAAI,IAAI,OAAO,UAAW,cAAc,OAAO,UAAU,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAI,EAAG,QAAO,EAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,UAAW,SAAU,QAAO;AAAA,UAC1C,MAAM,WAAY;AACd,mBAAI,KAAK,KAAK,EAAE,WAAQ,IAAI,SACrB,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,UAC1C;AAAA,QACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF,GAKI;AAAA;AAAA,SAA2B,WAAY;AAKvC,mBAASC,WAAU,SAAS;AACxB,YAAI,YAAY,WAAU,UAAUA,WAAU;AAC9C,gBAAI,QAAQ;AACZ,iBAAK,UAAU,SACf,KAAK,YAAY,CAAC,GAClB,KAAK,SAAS,GAId,KAAK,QAAQ,KAAK,KAIlB,KAAK,UAAU,KAAK,MAIpB,KAAK,OAAO,KAAK,KAKjB,KAAK,mBAAmB,SAAU,GAAG,GAAG;AACpC,qBAAO,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,SAAU,KAAK;AAAE,uBAAO,KAAK;AAAA,cAAK,CAAC;AAAA,YACvE;AAAA,UACJ;AASA,iBAAAA,WAAU,qBAAqB,SAAU,KAAK;AAC1C,mBAAO,CAAC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;AAAA,UACpC,GAMAA,WAAU,mBAAmB,SAAU,KAAK;AACxC,gBAAI,OAAO;AACP,qBAAO;AAEX,gBAAI,gBAAgB,MAAM,IAAI,IAAI;AAClC,mBAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAAA,UAC/C,GAMAA,WAAU,oBAAoB,SAAU,KAAK;AACzC,gBAAI,OAAO;AACP,qBAAO;AAEX,gBAAI,gBAAgB,MAAM,IAAI,IAAI;AAClC,mBAAO,MAAM;AAAA,UACjB,GAOAA,WAAU,gBAAgB,SAAU,GAAG,GAAG;AACtC,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,uBAAI,IAAI,IACG,CAAC,GAAc,CAAC,IAElB,IAAI,IACF,CAAC,GAAc,EAAE,IAGjB,CAAC,GAAc,CAAC;AAAA,cAE/B,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAOAA,WAAU,gBAAgB,SAAU,GAAG,GAAG;AACtC,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,uBAAI,IAAI,IACG,CAAC,GAAc,CAAC,IAElB,IAAI,IACF,CAAC,GAAc,EAAE,IAGjB,CAAC,GAAc,CAAC;AAAA,cAE/B,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAOAA,WAAU,sBAAsB,SAAU,GAAG,GAAG;AAC5C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,uBAAO,CAAC,GAAc,IAAI,CAAC;AAAA,cAC/B,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAOAA,WAAU,sBAAsB,SAAU,GAAG,GAAG;AAC5C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,uBAAO,CAAC,GAAc,IAAI,CAAC;AAAA,cAC/B,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAOAA,WAAU,iBAAiB,SAAU,GAAG,GAAG;AACvC,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,uBAAO,CAAC,GAAc,MAAM,CAAC;AAAA,cACjC,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAMAA,WAAU,QAAQ,SAAU,MAAM;AAC9B,qBAAS,KAAKC,IAAG;AACb,kBAAI,KAAKD,WAAU,iBAAiBC,EAAC;AACrC,qBAAO,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,CAAC;AAAA,YACvC;AACA,qBAAS,OAAO,KAAK,OAAO;AAExB,uBADI,MAAM,IACH,QAAQ,GAAG,EAAE;AAChB,uBAAO;AAEX,qBAAO;AAAA,YACX;AAKA,qBAJI,OAAO,GACP,QAAQ,CAAC,GACT,WAAW,KAAK,KAAK,SAAS,CAAC,IAAI,GACnC,YAAY,GACT,OAAO,KAAK,UAAQ;AACvB,kBAAI,IAAI,KAAK,IAAI,IAAI;AACrB,cAAI,SAAS,MACT,IAAI;AAGR,kBAAI,WAAW,OAAO,KAAK,IAAI,IAAI,CAAC;AACpC,cAAI,SAAS,SAAS,cAClB,YAAY,SAAS,SAGzB,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GACxB,MAAM,CAAC,EAAE,KAAK,QAAQ,GACtB,QAAQ;AAAA,YACZ;AACA,mBAAO,MACF,IAAI,SAAU,MAAMA,IAAG;AACxB,kBAAI,QAAQ,KAAK,IAAI,GAAG,WAAWA,EAAC,IAAI;AACxC,qBAAQ,OAAO,KAAK,KAAK,MAAM,QAAQ,CAAC,IAAI,SAAS,IACjD,KACK,IAAI,SAAU,IAAI;AAEnB,oBAAI,QAAQ,YAAY,GAAG,UAAU;AACrC,uBAAO,OAAO,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,KAAK,KAAK,MAAM,IAAI,CAAC;AAAA,cAC3E,CAAC,EACI,KAAK,OAAO,KAAK,QAAQ,SAAS,CAAC;AAAA,YAChD,CAAC,EACI,KAAK;AAAA,CAAI;AAAA,UAClB,GAUAD,WAAU,UAAU,SAAU,KAAK,SAAS;AACxC,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,kCAAO,IAAIA,WAAU,OAAO,GAC5B,KAAK,YAAY,KACV,CAAC,GAAa,KAAK,KAAK,CAAC;AAAA,kBACpC,KAAK;AACD,8BAAG,KAAK,GACD,CAAC,GAAc,IAAI;AAAA,gBAClC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAOAA,WAAU,UAAU,SAAU,SAAS,SAAS;AAC5C,gBAAI,OAAO,IAAIA,WAAU,OAAO;AAChC,wBAAK,YAAY,SACV,KAAK,IAAI;AAAA,UACpB,GAOAA,WAAU,WAAW,SAAU,SAAS,MAAM,SAAS;AACnD,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,kCAAO,IAAIA,WAAU,OAAO,GAC5B,KAAK,YAAY,SACV,CAAC,GAAa,KAAK,KAAK,IAAI,CAAC;AAAA,kBACxC,KAAK;AACD,8BAAG,KAAK,GACD;AAAA,sBAAC;AAAA;AAAA,oBAAY;AAAA,gBAC5B;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAQAA,WAAU,cAAc,SAAU,SAAS,MAAM,SAAS;AACtD,gBAAI,OAAO,IAAIA,WAAU,OAAO;AAChC,wBAAK,YAAY,SACV,KAAK,QAAQ,IAAI;AAAA,UAC5B,GAQAA,WAAU,cAAc,SAAU,SAAS,MAAM,SAAS;AACtD,gBAAI,OAAO,IAAIA,WAAU,OAAO;AAChC,wBAAK,YAAY,SACV,KAAK,QAAQ,IAAI;AAAA,UAC5B,GAQAA,WAAU,UAAU,SAAU,SAASF,IAAG,SAAS;AAC/C,YAAIA,OAAM,WAAUA,KAAI;AACxB,gBAAI,OAAO,IAAIE,WAAU,OAAO;AAChC,wBAAK,YAAY,SACV,KAAK,IAAIF,EAAC;AAAA,UACrB,GAQAE,WAAU,aAAa,SAAU,SAASF,IAAG,SAAS;AAClD,YAAIA,OAAM,WAAUA,KAAI;AACxB,gBAAI,OAAO,IAAIE,WAAU,OAAO;AAChC,wBAAK,YAAY,SACV,KAAK,OAAOF,EAAC;AAAA,UACxB,GAQAE,WAAU,WAAW,SAAUF,IAAG,UAAU,SAAS;AACjD,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,kCAAO,IAAIE,WAAU,OAAO,GAC5B,KAAK,YAAY,gBAAgB,CAAC,GAAG,SAAS,QAAQ,GAAG,EAAK,GACvD,CAAC,GAAa,KAAK,KAAK,CAAC;AAAA,kBACpC,KAAK;AACD,8BAAG,KAAK,GACD,CAAC,GAAc,KAAK,IAAIF,EAAC,CAAC;AAAA,gBACzC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAQAE,WAAU,YAAY,SAAUF,IAAG,UAAU,SAAS;AAClD,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,kCAAO,IAAIE,WAAU,OAAO,GAC5B,KAAK,YAAY,gBAAgB,CAAC,GAAG,SAAS,QAAQ,GAAG,EAAK,GACvD,CAAC,GAAa,KAAK,KAAK,CAAC;AAAA,kBACpC,KAAK;AACD,8BAAG,KAAK,GACD,CAAC,GAAc,KAAK,OAAOF,EAAC,CAAC;AAAA,gBAC5C;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAUAE,WAAU,UAAU,MAAM,SAAU,SAAS;AACzC,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AAAG,2BAAO,CAAC,GAAa,KAAK,YAAY,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC,CAAC;AAAA,kBAC/E,KAAK;AACD,8BAAG,KAAK,GACR,KAAK,YAAY,GACV,CAAC,GAAc,EAAI;AAAA,gBAClC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAOAA,WAAU,UAAU,SAAS,SAAU,UAAU;AAC7C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,GAAG,GACH;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,wBAAI,KAAK,SACR,KAAK,KAAK,WAAW,KAAK,MAAM,IAAI,gBAAgB,CAAC,GAAG,SAAS,QAAQ,GAAG,EAAK,CAAC,GACnF,IAAI,KAAK,QACT,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAM,IAAI,IACH,CAAC,GAAa,KAAK,YAAY,CAAC,CAAC,IADnB,CAAC,GAAa,CAAC;AAAA,kBAExC,KAAK;AACD,uBAAG,KAAK,GACR,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,6BAAE,GACK,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AACD,gCAAK,YAAY,GACV,CAAC,GAAc,EAAI;AAAA,gBAClC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAOAA,WAAU,UAAU,SAAS,SAAUF,IAAG;AACtC,mBAAIA,OAAM,WAAUA,KAAI,IACjB,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,uBAAI,KAAK,UAAU,WAAW,KAAKA,MAAK,IAE7B,CAAC,GAAc,CAAC,CAAC,IAEnB,KAAK,UAAU,WAAW,IAExB,CAAC,GAAc,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAEpCA,MAAK,KAAK,UAAU,SAElB,CAAC,GAAc,gBAAgB,CAAC,GAAG,SAAS,KAAK,SAAS,GAAG,EAAK,CAAC,IAInE,CAAC,GAAc,KAAK,cAAc,CAAC,CAACA,EAAC,CAAC;AAAA,cAErD,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAKAE,WAAU,UAAU,QAAQ,WAAY;AACpC,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,GAAG,IAAI,UAAU,YAAY,cAAc,IAAI,OAC/C,KAAK;AACT,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,wBAAI,GACJ,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,wBAAI,EAAE,IAAI,KAAK,UAAU,QAAS,QAAO,CAAC,GAAa,EAAE;AACzD,yBAAK,KAAK,UAAU,CAAC,GACrB,WAAW,KAAK,cAAc,CAAC,GAC/B,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,uBAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GACzB,cAAc,MAAM,QAAQ,SAAS,QAAQ,IAAI,eAAe,WAAW,KAAK,GAChF,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAM,aAAa,OAAa,CAAC,GAAa,CAAC,KAC/C,KAAK,aAAa,OACX,CAAC,GAAa,KAAK,QAAQ,IAAI,EAAE,CAAC;AAAA,kBAC7C,KAAK;AACD,wBAAK,GAAG,KAAK,IAAK;AACd,6BAAO,CAAC,GAAc,EAAE;AAE5B,uBAAG,QAAQ;AAAA,kBACf,KAAK;AACD,0CAAe,WAAW,KAAK,GACxB,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AAAG,2BAAO,CAAC,GAAa,CAAC;AAAA,kBAC9B,KAAK;AACD,mCAAQ,GAAG,KAAK,GAChB,MAAM,EAAE,OAAO,MAAM,GACd,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AACD,wBAAI;AACA,sBAAI,gBAAgB,CAAC,aAAa,SAAS,KAAK,WAAW,WAAS,GAAG,KAAK,UAAU;AAAA,oBAC1F,UACA;AAAU,0BAAI,IAAK,OAAM,IAAI;AAAA,oBAAO;AACpC,2BAAO;AAAA,sBAAC;AAAA;AAAA,oBAAgB;AAAA,kBAC5B,KAAK;AACD,6BAAE,GACK,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AAAI,2BAAO;AAAA,sBAAC;AAAA;AAAA,oBAAY;AAAA,gBACjC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAIAA,WAAU,UAAU,QAAQ,WAAY;AACpC,iBAAK,YAAY,CAAC;AAAA,UACtB,GAKAA,WAAU,UAAU,QAAQ,WAAY;AACpC,gBAAI,SAAS,IAAIA,WAAU,KAAK,WAAW,CAAC;AAC5C,0BAAO,YAAY,KAAK,QAAQ,GAChC,OAAO,SAAS,KAAK,QACd;AAAA,UACX,GAKAA,WAAU,UAAU,aAAa,WAAY;AACzC,mBAAO,KAAK;AAAA,UAChB,GAOAA,WAAU,UAAU,WAAW,SAAU,GAAG,IAAI;AAC5C,mBAAI,OAAO,WAAU,KAAKA,WAAU,iBAC7B,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,IAAI,IAAI,IAAI,OACZ,KAAK;AACT,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,uBAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GACzB,KAAK,SAAS,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,GAC5C,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAM,GAAG,OAAa,CAAC,GAAa,CAAC,KACrC,KAAK,GAAG,OACD,CAAC,GAAa,GAAG,IAAI,CAAC,CAAC;AAAA,kBAClC,KAAK;AACD,wBAAI,GAAG,KAAK;AACR,6BAAO,CAAC,GAAc,EAAI;AAE9B,uBAAG,QAAQ;AAAA,kBACf,KAAK;AACD,gCAAK,GAAG,KAAK,GACN,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AAAG,2BAAO,CAAC,GAAa,CAAC;AAAA,kBAC9B,KAAK;AACD,mCAAQ,GAAG,KAAK,GAChB,MAAM,EAAE,OAAO,MAAM,GACd,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AACD,wBAAI;AACA,sBAAI,MAAM,CAAC,GAAG,SAAS,KAAK,GAAG,WAAS,GAAG,KAAK,EAAE;AAAA,oBACtD,UACA;AAAU,0BAAI,IAAK,OAAM,IAAI;AAAA,oBAAO;AACpC,2BAAO;AAAA,sBAAC;AAAA;AAAA,oBAAgB;AAAA,kBAC5B,KAAK;AAAG,2BAAO,CAAC,GAAc,EAAK;AAAA,gBACvC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAKAA,WAAU,UAAU,OAAO,SAAU,OAAO;AACxC,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,oBAAI,UACA,KAAK,YAAY,gBAAgB,CAAC,GAAG,SAAS,KAAK,GAAG,EAAK,IAE/D,IAAI,KAAK,MAAM,KAAK,UAAU,MAAM,GACpC,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAM,KAAK,IACJ,CAAC,GAAa,KAAK,cAAc,CAAC,CAAC,IADpB,CAAC,GAAa,CAAC;AAAA,kBAEzC,KAAK;AACD,uBAAG,KAAK,GACR,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,6BAAE,GACK,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AACD,gCAAK,YAAY,GACV;AAAA,sBAAC;AAAA;AAAA,oBAAY;AAAA,gBAC5B;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAKAA,WAAU,UAAU,UAAU,WAAY;AACtC,mBAAO,KAAK,WAAW;AAAA,UAC3B,GAIAA,WAAU,UAAU,QAAQ,WAAY;AACpC,gBAAI,KAAK,UAAU,WAAW;AAC1B,qBAAO,CAAC;AAEZ,gBAAI,KAAKA,WAAU,iBAAiB,KAAK,UAAU,SAAS,CAAC;AAC7D,mBAAO,KAAK,UAAU,MAAM,KAAK,CAAC;AAAA,UACtC,GACA,OAAO,eAAeA,WAAU,WAAW,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,YAKjD,KAAK,WAAY;AACb,qBAAO,KAAK,UAAU;AAAA,YAC1B;AAAA,YACA,YAAY;AAAA,YACZ,cAAc;AAAA,UAClB,CAAC,GACD,OAAO,eAAeA,WAAU,WAAW,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,YAKhD,KAAK,WAAY;AACb,qBAAO,KAAK;AAAA,YAChB;AAAA;AAAA;AAAA;AAAA;AAAA,YAKA,KAAK,SAAU,IAAI;AACf,mBAAK,SAAS,CAAC,CAAC,IAChB,KAAK,YAAY;AAAA,YACrB;AAAA,YACA,YAAY;AAAA,YACZ,cAAc;AAAA,UAClB,CAAC,GAMDA,WAAU,UAAU,OAAO,WAAY;AACnC,mBAAO,KAAK,UAAU,CAAC;AAAA,UAC3B,GAKAA,WAAU,UAAU,MAAM,WAAY;AAClC,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AAErC,uBADA,OAAO,KAAK,UAAU,IAAI,GACtB,KAAK,SAAS,KAAK,SAAS,SACrB,CAAC,GAAc,KAAK,QAAQ,IAAI,CAAC,IAErC,CAAC,GAAc,IAAI;AAAA,cAC9B,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAMAA,WAAU,UAAU,OAAO,WAAY;AAEnC,qBADI,WAAW,CAAC,GACP,KAAK,GAAG,KAAK,UAAU,QAAQ;AACpC,uBAAS,EAAE,IAAI,UAAU,EAAE;AAE/B,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,uBAAI,SAAS,SAAS,IACX,CAAC,GAAc,EAAK,IAEtB,SAAS,WAAW,IAClB,CAAC,GAAc,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,IAGpC,CAAC,GAAc,KAAK,OAAO,QAAQ,CAAC;AAAA,cAEnD,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAMAA,WAAU,UAAU,UAAU,SAAU,SAAS;AAC7C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AAAG,2BAAO,CAAC,GAAa,KAAK,QAAQ,KAAK,UAAU,CAAC,GAAG,OAAO,CAAC;AAAA,kBACrE,KAAK;AACD,2BAAO,GAAG,KAAK,IAAK,KACpB,KAAK,SAAS,CAAC,KAAK,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,IAAI,GAAG,CAAC,GAClF,CAAC,GAAa,KAAK,cAAc,CAAC,CAAC,KAFX,CAAC,GAAa,CAAC;AAAA,kBAGlD,KAAK;AACD,uBAAG,KAAK,GACR,GAAG,QAAQ;AAAA,kBACf,KAAK;AAAG,2BAAO,CAAC,GAAc,OAAO;AAAA,gBACzC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAOAA,WAAU,UAAU,SAAS,SAAU,GAAG,IAAI;AAC1C,mBAAI,OAAO,WAAU,KAAKA,WAAU,iBAC7B,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,KAAK;AACT,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,2BAAM,KAAK,SAAS,IACd,MAAM,SAAmB,CAAC,GAAa,CAAC,IACvC,CAAC,GAAa,KAAK,IAAI,CAAC,IAFA,CAAC,GAAa,EAAE;AAAA,kBAGnD,KAAK;AACD,8BAAG,KAAK,GACD,CAAC,GAAc,EAAI;AAAA,kBAC9B,KAAK;AACD,0BAAM,IACN,IAAI,GACJ,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAM,IAAI,KAAK,UAAU,SAClB,CAAC,GAAa,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,IADJ,CAAC,GAAa,CAAC;AAAA,kBAE5D,KAAK;AACD,wBAAI,GAAG,KAAK;AACR,mCAAM,GACC,CAAC,GAAa,CAAC;AAE1B,uBAAG,QAAQ;AAAA,kBACf,KAAK;AACD,6BAAE,GACK,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AACD,2BAAM,OAAO,IACP,QAAQ,IAAW,CAAC,GAAa,CAAC,IACjC,CAAC,GAAa,KAAK,IAAI,CAAC,IAFP,CAAC,GAAa,EAAE;AAAA,kBAG5C,KAAK;AACD,8BAAG,KAAK,GACD,CAAC,GAAa,EAAE;AAAA,kBAC3B,KAAK;AACD,2BAAM,QAAQ,KAAK,SAAS,IAAW,CAAC,GAAa,CAAC,KACtD,KAAK,UAAU,IAAI,GACZ,CAAC,GAAa,EAAE;AAAA,kBAC3B,KAAK;AACD,gCAAK,UAAU,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,CAAC,GAC3C,CAAC,GAAa,KAAK,YAAY,GAAG,CAAC;AAAA,kBAC9C,KAAK;AACD,8BAAG,KAAK,GACD,CAAC,GAAa,KAAK,cAAc,GAAG,CAAC;AAAA,kBAChD,KAAK;AACD,uBAAG,KAAK,GACR,GAAG,QAAQ;AAAA,kBACf,KAAK;AAAI,2BAAO,CAAC,GAAc,EAAI;AAAA,kBACnC,KAAK;AAAI,2BAAO,CAAC,GAAc,EAAK;AAAA,gBACxC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAMAA,WAAU,UAAU,UAAU,SAAU,SAAS;AAC7C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,kCAAO,KAAK,UAAU,CAAC,GACvB,KAAK,UAAU,CAAC,IAAI,SACb,CAAC,GAAa,KAAK,cAAc,CAAC,CAAC;AAAA,kBAC9C,KAAK;AACD,8BAAG,KAAK,GACD,CAAC,GAAc,IAAI;AAAA,gBAClC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAKAA,WAAU,UAAU,OAAO,WAAY;AACnC,mBAAO,KAAK;AAAA,UAChB,GAOAA,WAAU,UAAU,MAAM,SAAUF,IAAG;AACnC,mBAAIA,OAAM,WAAUA,KAAI,IACjB,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,uBAAI,KAAK,UAAU,WAAW,KAAKA,MAAK,IAE7B,CAAC,GAAc,CAAC,CAAC,IAEnB,KAAK,UAAU,WAAW,KAAKA,OAAM,IAEnC,CAAC,GAAc,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAEpCA,MAAK,KAAK,UAAU,SAElB,CAAC,GAAc,gBAAgB,CAAC,GAAG,SAAS,KAAK,SAAS,GAAG,EAAK,CAAC,IAInE,CAAC,GAAc,KAAK,WAAW,CAAC,CAACA,EAAC,CAAC;AAAA,cAElD,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAKAE,WAAU,UAAU,UAAU,WAAY;AACtC,mBAAO,gBAAgB,CAAC,GAAG,SAAS,KAAK,SAAS,GAAG,EAAK;AAAA,UAC9D,GAKAA,WAAU,UAAU,WAAW,WAAY;AACvC,mBAAO,KAAK,UAAU,SAAS;AAAA,UACnC,GAMAA,WAAU,UAAU,MAAM,SAAU,GAAG;AACnC,mBAAO,KAAK,UAAU,CAAC;AAAA,UAC3B,GAMAA,WAAU,UAAU,gBAAgB,SAAU,KAAK;AAC/C,gBAAI,QAAQ;AACZ,mBAAOA,WAAU,mBAAmB,GAAG,EAClC,IAAI,SAAU,GAAG;AAAE,qBAAO,MAAM,UAAU,CAAC;AAAA,YAAG,CAAC,EAC/C,OAAO,SAAU,GAAG;AAAE,qBAAO,MAAM;AAAA,YAAW,CAAC;AAAA,UACxD,GAMAA,WAAU,UAAU,cAAc,SAAU,KAAK;AAC7C,gBAAI,KAAKA,WAAU,iBAAiB,GAAG;AACvC,mBAAO,KAAK,UAAU,EAAE;AAAA,UAC5B,GAIAA,WAAU,UAAU,OAAO,QAAQ,IAAI,WAAY;AAC/C,mBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,sBAAQ,GAAG,OAAO;AAAA,gBACd,KAAK;AACD,yBAAK,KAAK,SACH,CAAC,GAAa,KAAK,IAAI,CAAC,IADN,CAAC,GAAa,CAAC;AAAA,gBAE5C,KAAK;AACD,4BAAG,KAAK,GACD,CAAC,GAAa,CAAC;AAAA,gBAC1B,KAAK;AAAG,yBAAO;AAAA,oBAAC;AAAA;AAAA,kBAAY;AAAA,cAChC;AAAA,YACJ,CAAC;AAAA,UACL,GAIAA,WAAU,UAAU,WAAW,WAAY;AACvC,mBAAO;AAAA,UACX,GAIAA,WAAU,UAAU,cAAc,WAAY;AAC1C,gBAAI,KAAK,UAAU,KAAK,SAAS,KAAK,UAAU;AAG5C,uBAFI,KAAK,KAAK,UAAU,SAAS,KAAK,QAE/B;AACH,qBAAK,UAAU,IAAI,GACnB,EAAE;AAAA,UAGd,GAOAA,WAAU,UAAU,gBAAgB,SAAUF,IAAG;AAC7C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,YAAY,SAAS,eAAe,SAAS,GAAG,KAAK;AACzD,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,wCAAa,IAAIE,WAAU,KAAK,OAAO,GACvC,WAAW,QAAQF,IACnB,WAAW,YAAY,KAAK,UAAU,MAAM,CAACA,EAAC,GACvC,CAAC,GAAa,WAAW,KAAK,CAAC;AAAA,kBAC1C,KAAK;AAKD,yBAJA,GAAG,KAAK,GACR,UAAU,KAAK,UAAU,SAAS,IAAIA,IACtC,gBAAgBE,WAAU,iBAAiB,OAAO,GAClD,UAAU,CAAC,GACN,IAAI,SAAS,IAAI,eAAe,EAAE;AACnC,8BAAQ,KAAK,CAAC;AAElB,0BAAM,KAAK,WACX,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAK,QAAQ,UACb,IAAI,QAAQ,MAAM,GACX,CAAC,GAAa,KAAK,QAAQ,IAAI,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,KAFhC,CAAC,GAAa,CAAC;AAAA,kBAG/C,KAAK;AACD,2BAAO,GAAG,KAAK,IAAK,IACb,CAAC,GAAa,WAAW,QAAQ,IAAI,CAAC,CAAC,CAAC,IADhB,CAAC,GAAa,CAAC;AAAA,kBAElD,KAAK;AACD,uBAAG,KAAK,GACJ,IAAI,KACJ,QAAQ,KAAKA,WAAU,iBAAiB,CAAC,CAAC,GAE9C,GAAG,QAAQ;AAAA,kBACf,KAAK;AAAG,2BAAO,CAAC,GAAa,CAAC;AAAA,kBAC9B,KAAK;AAAG,2BAAO,CAAC,GAAc,WAAW,QAAQ,CAAC;AAAA,gBACtD;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAMAA,WAAU,UAAU,YAAY,SAAU,GAAG,GAAG;AAC5C,gBAAI;AACJ,iBAAK,SAAS,CAAC,KAAK,UAAU,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,IAAI,GAAG,CAAC;AAAA,UACjH,GAKAA,WAAU,UAAU,gBAAgB,SAAU,GAAG;AAC7C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,QAAQE,OAAM,oBAAoB,aAAa,gBAAgB,GAAG,WAAW,IAC7E,QAAQ;AACZ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,6BAAS,IAAI,KAAK,UAAU,SAAS,GACrCA,QAAO,KAAK,UAAU,CAAC,GACvB,qBAAqB,SAAU,MAAMC,IAAG;AAAE,6BAAO,UAAU,OAAO,QAAQ,QAAQ,WAAY;AAC1F,4BAAIC;AACJ,+BAAO,cAAc,MAAM,SAAUC,KAAI;AACrC,kCAAQA,IAAG,OAAO;AAAA,4BACd,KAAK;AAED,qCADAD,MAAK,KAAK,UAAU,SAASD,IACxBC,MACE,CAAC,GAAa,KAAK,QAAQ,KAAK,UAAUD,EAAC,GAAG,KAAK,UAAU,IAAI,CAAC,CAAC,IAD1D,CAAC,GAAa,CAAC;AAAA,4BAEnC,KAAK;AACD,8BAAAC,MAAMC,IAAG,KAAK,IAAK,GACnBA,IAAG,QAAQ;AAAA,4BACf,KAAK;AACD,qCAAID,QACA,OAAOD,KAEJ,CAAC,GAAc,IAAI;AAAA,0BAClC;AAAA,wBACJ,CAAC;AAAA,sBACL,CAAC;AAAA,oBAAG,GACJ,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,wBAAI,CAAC,OAAQ,QAAO,CAAC,GAAa,CAAC;AACnC,kCAAcH,WAAU,mBAAmB,CAAC,GAC5C,iBAAiB,YAAY,CAAC,GAC9B,IAAI,GACJ,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAM,IAAI,YAAY,SACf,CAAC,GAAa,mBAAmB,gBAAgB,YAAY,CAAC,CAAC,CAAC,IADjC,CAAC,GAAa,CAAC;AAAA,kBAEzD,KAAK;AACD,qCAAiB,GAAG,KAAK,GACzB,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,6BAAE,GACK,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AAGD,2BAFA,YAAY,KAAK,UAAU,cAAc,GACzC,KAAK,OAAO,YAAc,KACrB,KACE,CAAC,GAAa,KAAK,QAAQE,OAAM,SAAS,CAAC,IADlC,CAAC,GAAa,CAAC;AAAA,kBAEnC,KAAK;AACD,yBAAM,GAAG,KAAK,IAAK,GACnB,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAI,MACA,KAAK,UAAU,GAAG,cAAc,GAChC,IAAI,kBAGJ,SAAS,IAEN,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AAAG,2BAAO;AAAA,sBAAC;AAAA;AAAA,oBAAY;AAAA,gBAChC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAKAF,WAAU,UAAU,cAAc,SAAU,GAAG;AAC3C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,QAAQ,IAAI;AAChB,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,6BAAS,IAAI,GACb,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAK,UACL,KAAKA,WAAU,iBAAiB,CAAC,GACjC,KAAK,MAAM,GACN,KACE,CAAC,GAAa,KAAK,QAAQ,KAAK,UAAU,EAAE,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,IADxD,CAAC,GAAa,CAAC,KAHX,CAAC,GAAa,CAAC;AAAA,kBAKvC,KAAK;AACD,yBAAM,GAAG,KAAK,IAAK,GACnB,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAI,MACA,KAAK,UAAU,GAAG,EAAE,GACpB,IAAI,MAGJ,SAAS,IAEN,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AAAG,2BAAO;AAAA,sBAAC;AAAA;AAAA,oBAAY;AAAA,gBAChC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAQAA,WAAU,UAAU,aAAa,SAAUF,IAAG;AAC1C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,SAAS,SAAS,KAAK;AAC3B,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,8BAAU,IAAIE,WAAU,KAAK,gBAAgB,GAC7C,QAAQ,QAAQF,IAChB,UAAU,CAAC,CAAC,GACZ,MAAM,KAAK,WACX,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAK,QAAQ,UACb,IAAI,QAAQ,MAAM,GACZ,IAAI,IAAI,SACR,QAAQ,SAASA,KAChB,CAAC,GAAa,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IADP,CAAC,GAAa,CAAC,IADnB,CAAC,GAAa,CAAC,KAFjB,CAAC,GAAa,CAAC;AAAA,kBAK/C,KAAK;AACD,8BAAG,KAAK,GACR,QAAQ,KAAK,MAAM,SAAS,gBAAgB,CAAC,GAAG,SAASE,WAAU,mBAAmB,CAAC,CAAC,GAAG,EAAK,CAAC,GAC1F,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AAAG,2BAAO,CAAC,GAAa,KAAK,QAAQ,IAAI,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC;AAAA,kBACjE,KAAK;AACD,2BAAO,GAAG,KAAK,IAAK,IACb,CAAC,GAAa,QAAQ,QAAQ,IAAI,CAAC,CAAC,CAAC,IADb,CAAC,GAAa,CAAC;AAAA,kBAElD,KAAK;AACD,uBAAG,KAAK,GACR,QAAQ,KAAK,MAAM,SAAS,gBAAgB,CAAC,GAAG,SAASA,WAAU,mBAAmB,CAAC,CAAC,GAAG,EAAK,CAAC,GACjG,GAAG,QAAQ;AAAA,kBACf,KAAK;AAAG,2BAAO,CAAC,GAAa,CAAC;AAAA,kBAC9B,KAAK;AAAG,2BAAO,CAAC,GAAc,QAAQ,QAAQ,CAAC;AAAA,gBACnD;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAQAA,WAAU,UAAU,aAAa,SAAUF,IAAG;AAC1C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,WAAW,SAAS,QAAQ,SAAS,GAAG;AAC5C,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,uCAAY,KAAK,WACjB,UAAU,IAAIE,WAAU,KAAK,gBAAgB,GAC7C,QAAQ,QAAQF,IAChB,QAAQ,YAAY,UAAU,MAAM,GAAGA,EAAC,GACjC,CAAC,GAAa,QAAQ,KAAK,CAAC;AAAA,kBACvC,KAAK;AAID,yBAHA,GAAG,KAAK,GACR,SAASE,WAAU,iBAAiBF,KAAI,CAAC,IAAI,GAC7C,UAAU,CAAC,GACN,IAAI,QAAQ,IAAIA,IAAG,EAAE;AACtB,8BAAQ,KAAK,MAAM,SAAS,gBAAgB,CAAC,GAAG,SAASE,WAAU,mBAAmB,CAAC,EAAE,OAAO,SAAU,GAAG;AAAE,+BAAO,IAAI,UAAU;AAAA,sBAAQ,CAAC,CAAC,GAAG,EAAK,CAAC;AAE3J,qBAAKF,KAAI,KAAK,KACV,QAAQ,KAAKA,EAAC,GAElB,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAK,QAAQ,UACb,IAAI,QAAQ,MAAM,GACZ,IAAI,UAAU,SACb,CAAC,GAAa,KAAK,QAAQ,UAAU,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC,IAD3B,CAAC,GAAa,CAAC,KAFvB,CAAC,GAAa,CAAC;AAAA,kBAI/C,KAAK;AACD,2BAAO,GAAG,KAAK,IAAK,IACb,CAAC,GAAa,QAAQ,QAAQ,UAAU,CAAC,CAAC,CAAC,IADnB,CAAC,GAAa,CAAC;AAAA,kBAElD,KAAK;AACD,uBAAG,KAAK,GACR,QAAQ,KAAK,MAAM,SAAS,gBAAgB,CAAC,GAAG,SAASE,WAAU,mBAAmB,CAAC,CAAC,GAAG,EAAK,CAAC,GACjG,GAAG,QAAQ;AAAA,kBACf,KAAK;AAAG,2BAAO,CAAC,GAAa,CAAC;AAAA,kBAC9B,KAAK;AAAG,2BAAO,CAAC,GAAc,QAAQ,QAAQ,CAAC;AAAA,gBACnD;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAQAA,WAAU,UAAU,aAAa,SAAUF,IAAG;AAC1C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,SAAS,QAAQ,GAAG,IAAI;AAC5B,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,8BAAU,KAAK,MAAM,GACrB,SAAS,CAAC,GACV,IAAI,GACJ,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAM,IAAIA,MACV,MAAM,KAAK,QAAQ,MACZ,CAAC,GAAa,QAAQ,IAAI,CAAC,KAFb,CAAC,GAAa,CAAC;AAAA,kBAGxC,KAAK;AACD,uBAAG,MAAM,IAAI,CAAE,GAAG,KAAK,CAAE,CAAC,GAC1B,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,6BAAE,GACK,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AAAG,2BAAO,CAAC,GAAc,MAAM;AAAA,gBACxC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAKAE,WAAU,UAAU,YAAY,SAAU,MAAM;AAC5C,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI,KAAK,KAAK,GAAG;AACjB,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,wBAAI,CAAC,KAAK;AACN,6BAAO,CAAC,GAAc,EAAE;AAE5B,0BAAM,GACN,MAAM,KAAK,GAAG,GACd,IAAI,GACJ,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,2BAAM,IAAI,KAAK,SACR,CAAC,GAAa,KAAK,QAAQ,KAAK,CAAC,GAAG,GAAG,CAAC,IADhB,CAAC,GAAa,CAAC;AAAA,kBAElD,KAAK;AACD,2BAAO,GAAG,KAAK,GACX,OAAO,MACP,MAAM,GACN,MAAM,KAAK,CAAC,IAEhB,GAAG,QAAQ;AAAA,kBACf,KAAK;AACD,6BAAE,GACK,CAAC,GAAa,CAAC;AAAA,kBAC1B,KAAK;AAAG,2BAAO,CAAC,GAAc,GAAG;AAAA,gBACrC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GAKAA,WAAU,UAAU,SAAS,WAAY;AAErC,qBADI,OAAO,CAAC,GACH,KAAK,GAAG,KAAK,UAAU,QAAQ;AACpC,mBAAK,EAAE,IAAI,UAAU,EAAE;AAE3B,mBAAO,UAAU,MAAM,QAAQ,QAAQ,WAAY;AAC/C,kBAAI;AACJ,qBAAO,cAAc,MAAM,SAAU,IAAI;AACrC,wBAAQ,GAAG,OAAO;AAAA,kBACd,KAAK;AACD,kCAAO,IAAIA,WAAU,KAAK,OAAO,GAC1B,CAAC,GAAa,KAAK,KAAK,IAAI,CAAC;AAAA,kBACxC,KAAK;AACD,8BAAG,KAAK,GACD,CAAC,GAAc,KAAK,KAAK,CAAC;AAAA,gBACzC;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL,GACOA;AAAA,QACX,GAAE;AAAA,SAEE,cAAsD,SAAU,SAAS,MAAM;AAC/E,YAAI,IAAI,EAAE,OAAO,GAAG,MAAM,WAAW;AAAE,cAAI,EAAE,CAAC,IAAI,EAAG,OAAM,EAAE,CAAC;AAAG,iBAAO,EAAE,CAAC;AAAA,QAAG,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG;AAC/G,eAAO,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,OAAS,KAAK,CAAC,GAAG,QAAU,KAAK,CAAC,EAAE,GAAG,OAAO,UAAW,eAAe,EAAE,OAAO,QAAQ,IAAI,WAAW;AAAE,iBAAO;AAAA,QAAM,IAAI;AACvJ,iBAAS,KAAKF,IAAG;AAAE,iBAAO,SAAU,GAAG;AAAE,mBAAO,KAAK,CAACA,IAAG,CAAC,CAAC;AAAA,UAAG;AAAA,QAAG;AACjE,iBAAS,KAAK,IAAI;AACd,cAAI,EAAG,OAAM,IAAI,UAAU,iCAAiC;AAC5D,iBAAO,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,IAAG,KAAI;AAC1C,gBAAI,IAAI,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,SAAY,GAAG,CAAC,IAAI,EAAE,WAAc,IAAI,EAAE,WAAc,EAAE,KAAK,CAAC,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,KAAM,QAAO;AAE3J,oBADI,IAAI,GAAG,MAAG,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK,IAC9B,GAAG,CAAC,GAAG;AAAA,cACX,KAAK;AAAA,cAAG,KAAK;AAAG,oBAAI;AAAI;AAAA,cACxB,KAAK;AAAG,yBAAE,SAAgB,EAAE,OAAO,GAAG,CAAC,GAAG,MAAM,GAAM;AAAA,cACtD,KAAK;AAAG,kBAAE,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAAG;AAAA,cACxC,KAAK;AAAG,qBAAK,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI;AAAG;AAAA,cACxC;AACI,oBAAM,IAAI,EAAE,MAAM,MAAI,EAAE,SAAS,KAAK,EAAE,EAAE,SAAS,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI;AAAE,sBAAI;AAAG;AAAA,gBAAU;AAC3G,oBAAI,GAAG,CAAC,MAAM,MAAM,CAAC,KAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,IAAK;AAAE,oBAAE,QAAQ,GAAG,CAAC;AAAG;AAAA,gBAAO;AACrF,oBAAI,GAAG,CAAC,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG;AAAE,oBAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;AAAI;AAAA,gBAAO;AACpE,oBAAI,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG;AAAE,oBAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE;AAAG;AAAA,gBAAO;AAClE,gBAAI,EAAE,CAAC,KAAG,EAAE,IAAI,IAAI,GACpB,EAAE,KAAK,IAAI;AAAG;AAAA,YACtB;AACA,iBAAK,KAAK,KAAK,SAAS,CAAC;AAAA,UAC7B,SAAS,GAAG;AAAE,iBAAK,CAAC,GAAG,CAAC,GAAG,IAAI;AAAA,UAAG,UAAE;AAAU,gBAAI,IAAI;AAAA,UAAG;AACzD,cAAI,GAAG,CAAC,IAAI,EAAG,OAAM,GAAG,CAAC;AAAG,iBAAO,EAAE,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,MAAM,GAAK;AAAA,QACnF;AAAA,MACJ,GACI,SAA4C,SAAU,GAAGA,IAAG;AAC5D,YAAI,IAAI,OAAO,UAAW,cAAc,EAAE,OAAO,QAAQ;AACzD,YAAI,CAAC,EAAG,QAAO;AACf,YAAI,IAAI,EAAE,KAAK,CAAC,GAAGC,IAAG,KAAK,CAAC,GAAG;AAC/B,YAAI;AACA,kBAAQD,OAAM,UAAUA,OAAM,MAAM,EAAEC,KAAI,EAAE,KAAK,GAAG,OAAM,IAAG,KAAKA,GAAE,KAAK;AAAA,QAC7E,SACO,OAAO;AAAE,cAAI,EAAE,MAAa;AAAA,QAAG,UACtC;AACI,cAAI;AACA,YAAIA,MAAK,CAACA,GAAE,SAAS,IAAI,EAAE,WAAY,EAAE,KAAK,CAAC;AAAA,UACnD,UACA;AAAU,gBAAI,EAAG,OAAM,EAAE;AAAA,UAAO;AAAA,QACpC;AACA,eAAO;AAAA,MACX,GACI,gBAA0D,SAAU,IAAI,MAAM,MAAM;AACpF,YAAI,QAAQ,UAAU,WAAW,EAAG,UAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG;AAC5E,WAAI,MAAM,EAAE,KAAK,WACR,OAAI,KAAK,MAAM,UAAU,MAAM,KAAK,MAAM,GAAG,CAAC,IACnD,GAAG,CAAC,IAAI,KAAK,CAAC;AAGtB,eAAO,GAAG,OAAO,MAAM,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AAAA,MAC3D,GACI,QAAQ,SAAUD,IAAG;AAAE,eAAO,CAAC,CAACA;AAAA,MAAG,GAKnCQ;AAAA;AAAA,SAAsB,WAAY;AAKlC,mBAASA,MAAK,SAAS;AACnB,YAAI,YAAY,WAAU,UAAUA,MAAK;AACzC,gBAAI,QAAQ;AACZ,iBAAK,UAAU,SACf,KAAK,YAAY,CAAC,GAClB,KAAK,SAAS,GAKd,KAAK,QAAQ,KAAK,KAKlB,KAAK,UAAU,KAAK,MAKpB,KAAK,OAAO,KAAK,KAKjB,KAAK,YAAY,KAAK,OAKtB,KAAK,mBAAmB,SAAU,GAAG,GAAG;AACpC,qBAAO,KAAK,MAAM,QAAQ,GAAG,CAAC;AAAA,YAClC;AAAA,UACJ;AASA,iBAAAA,MAAK,qBAAqB,SAAU,KAAK;AACrC,mBAAO,CAAC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;AAAA,UACpC,GAMAA,MAAK,mBAAmB,SAAU,KAAK;AACnC,gBAAI,OAAO;AACP,qBAAO;AAEX,gBAAI,gBAAgB,MAAM,IAAI,IAAI;AAClC,mBAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAAA,UAC/C,GAMAA,MAAK,oBAAoB,SAAU,KAAK;AACpC,gBAAI,OAAO;AACP,qBAAO;AAEX,gBAAI,gBAAgB,MAAM,IAAI,IAAI;AAClC,mBAAO,MAAM;AAAA,UACjB,GAOAA,MAAK,gBAAgB,SAAU,GAAG,GAAG;AACjC,mBAAI,IAAI,IACG,IAEF,IAAI,IACF,KAGA;AAAA,UAEf,GAOAA,MAAK,gBAAgB,SAAU,GAAG,GAAG;AACjC,mBAAI,IAAI,IACG,IAEF,IAAI,IACF,KAGA;AAAA,UAEf,GAOAA,MAAK,sBAAsB,SAAU,GAAG,GAAG;AACvC,mBAAO,IAAI;AAAA,UACf,GAOAA,MAAK,sBAAsB,SAAU,GAAG,GAAG;AACvC,mBAAO,IAAI;AAAA,UACf,GAOAA,MAAK,iBAAiB,SAAU,GAAG,GAAG;AAClC,mBAAO,MAAM;AAAA,UACjB,GAMAA,MAAK,QAAQ,SAAU,MAAM;AACzB,qBAAS,KAAKL,IAAG;AACb,kBAAI,KAAKK,MAAK,iBAAiBL,EAAC;AAChC,qBAAO,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,CAAC;AAAA,YACvC;AACA,qBAAS,OAAO,KAAK,OAAO;AAExB,uBADI,MAAM,IACH,QAAQ,GAAG,EAAE;AAChB,uBAAO;AAEX,qBAAO;AAAA,YACX;AAKA,qBAJI,OAAO,GACP,QAAQ,CAAC,GACT,WAAW,KAAK,KAAK,SAAS,CAAC,IAAI,GACnC,YAAY,GACT,OAAO,KAAK,UAAQ;AACvB,kBAAI,IAAI,KAAK,IAAI,IAAI;AACrB,cAAI,SAAS,MACT,IAAI;AAGR,kBAAI,WAAW,OAAO,KAAK,IAAI,IAAI,CAAC;AACpC,cAAI,SAAS,SAAS,cAClB,YAAY,SAAS,SAGzB,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GACxB,MAAM,CAAC,EAAE,KAAK,QAAQ,GACtB,QAAQ;AAAA,YACZ;AACA,mBAAO,MACF,IAAI,SAAU,MAAMA,IAAG;AACxB,kBAAI,QAAQ,KAAK,IAAI,GAAG,WAAWA,EAAC,IAAI;AACxC,qBAAQ,OAAO,KAAK,KAAK,MAAM,QAAQ,CAAC,IAAI,SAAS,IACjD,KACK,IAAI,SAAU,IAAI;AAEnB,oBAAI,QAAQ,YAAY,GAAG,UAAU;AACrC,uBAAO,OAAO,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,KAAK,KAAK,MAAM,IAAI,CAAC;AAAA,cAC3E,CAAC,EACI,KAAK,OAAO,KAAK,QAAQ,SAAS,CAAC;AAAA,YAChD,CAAC,EACI,KAAK;AAAA,CAAI;AAAA,UAClB,GAUAK,MAAK,UAAU,SAAU,KAAK,SAAS;AACnC,gBAAI,OAAO,IAAIA,MAAK,OAAO;AAC3B,wBAAK,YAAY,KACjB,KAAK,KAAK,GACH;AAAA,UACX,GAOAA,MAAK,UAAU,SAAU,SAAS,SAAS;AACvC,gBAAI,OAAO,IAAIA,MAAK,OAAO;AAC3B,wBAAK,YAAY,SACV,KAAK,IAAI;AAAA,UACpB,GAOAA,MAAK,WAAW,SAAU,SAAS,MAAM,SAAS;AAC9C,gBAAI,OAAO,IAAIA,MAAK,OAAO;AAC3B,iBAAK,YAAY,SACjB,KAAK,KAAK,IAAI;AAAA,UAClB,GAQAA,MAAK,cAAc,SAAU,SAAS,MAAM,SAAS;AACjD,gBAAI,OAAO,IAAIA,MAAK,OAAO;AAC3B,wBAAK,YAAY,SACV,KAAK,QAAQ,IAAI;AAAA,UAC5B,GAQAA,MAAK,cAAc,SAAU,SAAS,MAAM,SAAS;AACjD,gBAAI,OAAO,IAAIA,MAAK,OAAO;AAC3B,wBAAK,YAAY,SACV,KAAK,QAAQ,IAAI;AAAA,UAC5B,GAQAA,MAAK,UAAU,SAAU,SAASR,IAAG,SAAS;AAC1C,YAAIA,OAAM,WAAUA,KAAI;AACxB,gBAAI,OAAO,IAAIQ,MAAK,OAAO;AAC3B,wBAAK,YAAY,SACV,KAAK,IAAIR,EAAC;AAAA,UACrB,GAQAQ,MAAK,aAAa,SAAU,SAASR,IAAG,SAAS;AAC7C,YAAIA,OAAM,WAAUA,KAAI;AACxB,gBAAI,OAAO,IAAIQ,MAAK,OAAO;AAC3B,wBAAK,YAAY,SACV,KAAK,OAAOR,EAAC;AAAA,UACxB,GAQAQ,MAAK,WAAW,SAAUR,IAAG,UAAU,SAAS;AAC5C,gBAAI,OAAO,IAAIQ,MAAK,OAAO;AAC3B,wBAAK,YAAY,cAAc,CAAC,GAAG,OAAO,QAAQ,GAAG,EAAK,GAC1D,KAAK,KAAK,GACH,KAAK,IAAIR,EAAC;AAAA,UACrB,GAQAQ,MAAK,YAAY,SAAUR,IAAG,UAAU,SAAS;AAC7C,gBAAI,OAAO,IAAIQ,MAAK,OAAO;AAC3B,wBAAK,YAAY,cAAc,CAAC,GAAG,OAAO,QAAQ,GAAG,EAAK,GAC1D,KAAK,KAAK,GACH,KAAK,OAAOR,EAAC;AAAA,UACxB,GAUAQ,MAAK,UAAU,MAAM,SAAU,SAAS;AACpC,wBAAK,YAAY,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC,GACjD,KAAK,YAAY,GACV;AAAA,UACX,GAOAA,MAAK,UAAU,SAAS,SAAU,UAAU;AACxC,gBAAI,IACA,IAAI,KAAK;AACb,aAAC,KAAK,KAAK,WAAW,KAAK,MAAM,IAAI,cAAc,CAAC,GAAG,OAAO,QAAQ,GAAG,EAAK,CAAC;AAC/E,qBAAS,IAAI,KAAK,QAAQ,IAAI,GAAG,EAAE;AAC/B,mBAAK,YAAY,CAAC;AAEtB,wBAAK,YAAY,GACV;AAAA,UACX,GAOAA,MAAK,UAAU,SAAS,SAAUR,IAAG;AAEjC,mBADIA,OAAM,WAAUA,KAAI,IACpB,KAAK,UAAU,WAAW,KAAKA,MAAK,IAE7B,CAAC,IAEH,KAAK,UAAU,WAAW,IAExB,CAAC,KAAK,UAAU,CAAC,CAAC,IAEpBA,MAAK,KAAK,UAAU,SAElB,cAAc,CAAC,GAAG,OAAO,KAAK,SAAS,GAAG,EAAK,IAI/C,KAAK,cAAc,CAAC,CAACA,EAAC;AAAA,UAErC,GAKAQ,MAAK,UAAU,QAAQ,WAAY;AAC/B,gBAAI,QAAQ;AACZ,mBAAO,KAAK,UAAU,KAAK,SAAU,IAAI,GAAG;AAAE,qBAAO,CAAC,CAAC,MAAM,cAAc,CAAC,EAAE,KAAK,SAAU,IAAI;AAAE,uBAAO,MAAM,QAAQ,IAAI,EAAE,IAAI;AAAA,cAAG,CAAC;AAAA,YAAG,CAAC;AAAA,UAC9I,GAIAA,MAAK,UAAU,QAAQ,WAAY;AAC/B,iBAAK,YAAY,CAAC;AAAA,UACtB,GAKAA,MAAK,UAAU,QAAQ,WAAY;AAC/B,gBAAI,SAAS,IAAIA,MAAK,KAAK,WAAW,CAAC;AACvC,0BAAO,YAAY,KAAK,QAAQ,GAChC,OAAO,SAAS,KAAK,QACd;AAAA,UACX,GAKAA,MAAK,UAAU,aAAa,WAAY;AACpC,mBAAO,KAAK;AAAA,UAChB,GAOAA,MAAK,UAAU,WAAW,SAAU,GAAG,YAAY;AAC/C,mBAAI,eAAe,WAAU,aAAaA,MAAK,iBACxC,KAAK,QAAQ,GAAG,UAAU,MAAM;AAAA,UAC3C,GAKAA,MAAK,UAAU,OAAO,SAAU,OAAO;AACnC,YAAI,UACA,KAAK,YAAY,cAAc,CAAC,GAAG,OAAO,KAAK,GAAG,EAAK;AAE3D,qBAAS,IAAI,KAAK,MAAM,KAAK,UAAU,MAAM,GAAG,KAAK,GAAG,EAAE;AACtD,mBAAK,cAAc,CAAC;AAExB,iBAAK,YAAY;AAAA,UACrB,GAKAA,MAAK,UAAU,UAAU,WAAY;AACjC,mBAAO,KAAK,WAAW;AAAA,UAC3B,GAOAA,MAAK,UAAU,UAAU,SAAU,SAAS,YAAY;AAEpD,gBADI,eAAe,WAAU,aAAaA,MAAK,iBAC3C,KAAK,UAAU,WAAW;AAC1B,qBAAO;AAIX,qBAFI,UAAU,CAAC,GACX,eAAe,GACZ,eAAe,KAAK,UAAU,UAAQ;AACzC,kBAAI,iBAAiB,KAAK,UAAU,YAAY;AAChD,kBAAI,WAAW,gBAAgB,OAAO;AAClC,uBAAO;AAEN,cAAI,KAAK,QAAQ,gBAAgB,OAAO,KAAK,KAC9C,QAAQ,KAAK,MAAM,SAAS,cAAc,CAAC,GAAG,OAAOA,MAAK,mBAAmB,YAAY,CAAC,GAAG,EAAK,CAAC,GAEvG,eAAe,QAAQ,MAAM,KAAK,KAAK,UAAU;AAAA,YACrD;AACA,mBAAO;AAAA,UACX,GAOAA,MAAK,UAAU,eAAe,SAAU,SAAS,YAAY;AAEzD,gBADI,eAAe,WAAU,aAAaA,MAAK,iBAC3C,KAAK,UAAU,WAAW;AAC1B,qBAAO,CAAC;AAKZ,qBAHI,UAAU,CAAC,GACX,eAAe,CAAC,GAChB,eAAe,GACZ,eAAe,KAAK,UAAU,UAAQ;AACzC,kBAAI,iBAAiB,KAAK,UAAU,YAAY;AAChD,cAAI,WAAW,gBAAgB,OAAO,KAClC,aAAa,KAAK,YAAY,GAC9B,QAAQ,KAAK,MAAM,SAAS,cAAc,CAAC,GAAG,OAAOA,MAAK,mBAAmB,YAAY,CAAC,GAAG,EAAK,CAAC,KAE9F,KAAK,QAAQ,gBAAgB,OAAO,KAAK,KAC9C,QAAQ,KAAK,MAAM,SAAS,cAAc,CAAC,GAAG,OAAOA,MAAK,mBAAmB,YAAY,CAAC,GAAG,EAAK,CAAC,GAEvG,eAAe,QAAQ,MAAM,KAAK,KAAK,UAAU;AAAA,YACrD;AACA,mBAAO;AAAA,UACX,GAQAA,MAAK,UAAU,QAAQ,WAAY;AAC/B,gBAAI,KAAK,UAAU,WAAW;AAC1B,qBAAO,CAAC;AAEZ,gBAAI,KAAKA,MAAK,iBAAiB,KAAK,UAAU,SAAS,CAAC;AACxD,mBAAO,KAAK,UAAU,MAAM,KAAK,CAAC;AAAA,UACtC,GACA,OAAO,eAAeA,MAAK,WAAW,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAM5C,KAAK,WAAY;AACb,qBAAO,KAAK,UAAU;AAAA,YAC1B;AAAA,YACA,YAAY;AAAA,YACZ,cAAc;AAAA,UAClB,CAAC,GACD,OAAO,eAAeA,MAAK,WAAW,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAO3C,KAAK,WAAY;AACb,qBAAO,KAAK;AAAA,YAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOA,KAAK,SAAU,IAAI;AACf,cAAI,KAAK,KAAK,MAAM,EAAE,IAElB,KAAK,SAAS,IAId,KAAK,SAAS,CAAC,CAAC,IAEpB,KAAK,YAAY;AAAA,YACrB;AAAA,YACA,YAAY;AAAA,YACZ,cAAc;AAAA,UAClB,CAAC,GAQDA,MAAK,UAAU,WAAW,SAAU,IAAI;AAEpC,mBADA,KAAK,QAAQ,IACT,KAAK,KAAK,MAAM,EAAE,IACX,MAGA,KAAK;AAAA,UAEpB,GAOAA,MAAK,UAAU,OAAO,WAAY;AAC9B,mBAAO,KAAK,UAAU,CAAC;AAAA,UAC3B,GAKAA,MAAK,UAAU,MAAM,WAAY;AAC7B,gBAAI,OAAO,KAAK,UAAU,IAAI;AAC9B,mBAAI,KAAK,SAAS,KAAK,SAAS,SACrB,KAAK,QAAQ,IAAI,IAErB;AAAA,UACX,GAOAA,MAAK,UAAU,OAAO,WAAY;AAE9B,qBADI,WAAW,CAAC,GACP,KAAK,GAAG,KAAK,UAAU,QAAQ;AACpC,uBAAS,EAAE,IAAI,UAAU,EAAE;AAE/B,mBAAI,SAAS,SAAS,IACX,KAEF,SAAS,WAAW,IAClB,KAAK,IAAI,SAAS,CAAC,CAAC,IAGpB,KAAK,OAAO,QAAQ;AAAA,UAEnC,GAMAA,MAAK,UAAU,UAAU,SAAU,SAAS;AACxC,gBAAI;AACJ,mBAAI,KAAK,QAAQ,KAAK,UAAU,CAAC,GAAG,OAAO,IAAI,MAC3C,KAAK,OAAO,CAAC,KAAK,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,IAAI,GAAG,CAAC,GACvF,KAAK,cAAc,CAAC,IAEjB;AAAA,UACX,GAOAA,MAAK,UAAU,SAAS,SAAU,GAAG,YAAY;AAE7C,gBADI,eAAe,WAAU,aAAaA,MAAK,iBAC3C,KAAK,SAAS,GAAG;AACjB,kBAAI,MAAM;AACN,4BAAK,IAAI,GACF;AAGP,kBAAI,MAAM,KAAK,QAAQ,GAAG,UAAU;AACpC,kBAAI,OAAO;AACP,uBAAI,QAAQ,IACR,KAAK,IAAI,IAEJ,QAAQ,KAAK,SAAS,IAC3B,KAAK,UAAU,IAAI,KAGnB,KAAK,UAAU,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,CAAC,GAClD,KAAK,YAAY,GAAG,GACpB,KAAK,cAAc,GAAG,IAEnB;AAAA,YAGnB;AACA,mBAAO;AAAA,UACX,GAMAA,MAAK,UAAU,UAAU,SAAU,SAAS;AACxC,gBAAI,OAAO,KAAK,UAAU,CAAC;AAC3B,wBAAK,UAAU,CAAC,IAAI,SACpB,KAAK,cAAc,CAAC,GACb;AAAA,UACX,GAKAA,MAAK,UAAU,OAAO,WAAY;AAC9B,mBAAO,KAAK;AAAA,UAChB,GAOAA,MAAK,UAAU,MAAM,SAAUR,IAAG;AAE9B,mBADIA,OAAM,WAAUA,KAAI,IACpB,KAAK,UAAU,WAAW,KAAKA,MAAK,IAE7B,CAAC,IAEH,KAAK,UAAU,WAAW,KAAKA,OAAM,IAEnC,CAAC,KAAK,UAAU,CAAC,CAAC,IAEpBA,MAAK,KAAK,UAAU,SAElB,cAAc,CAAC,GAAG,OAAO,KAAK,SAAS,GAAG,EAAK,IAI/C,KAAK,WAAW,CAAC,CAACA,EAAC;AAAA,UAElC,GAKAQ,MAAK,UAAU,UAAU,WAAY;AACjC,mBAAO,cAAc,CAAC,GAAG,OAAO,KAAK,SAAS,GAAG,EAAK;AAAA,UAC1D,GAKAA,MAAK,UAAU,WAAW,WAAY;AAClC,mBAAO,KAAK,UAAU,SAAS;AAAA,UACnC,GAMAA,MAAK,UAAU,MAAM,SAAU,GAAG;AAC9B,mBAAO,KAAK,UAAU,CAAC;AAAA,UAC3B,GAMAA,MAAK,UAAU,gBAAgB,SAAU,KAAK;AAC1C,gBAAI,QAAQ;AACZ,mBAAOA,MAAK,mBAAmB,GAAG,EAC7B,IAAI,SAAU,GAAG;AAAE,qBAAO,MAAM,UAAU,CAAC;AAAA,YAAG,CAAC,EAC/C,OAAO,SAAU,GAAG;AAAE,qBAAO,MAAM;AAAA,YAAW,CAAC;AAAA,UACxD,GAMAA,MAAK,UAAU,cAAc,SAAU,KAAK;AACxC,gBAAI,KAAKA,MAAK,iBAAiB,GAAG;AAClC,mBAAO,KAAK,UAAU,EAAE;AAAA,UAC5B,GAIAA,MAAK,UAAU,OAAO,QAAQ,IAAI,WAAY;AAC1C,mBAAO,YAAY,MAAM,SAAU,IAAI;AACnC,sBAAQ,GAAG,OAAO;AAAA,gBACd,KAAK;AACD,yBAAK,KAAK,SACH,CAAC,GAAa,KAAK,IAAI,CAAC,IADN,CAAC,GAAa,CAAC;AAAA,gBAE5C,KAAK;AACD,4BAAG,KAAK,GACD,CAAC,GAAa,CAAC;AAAA,gBAC1B,KAAK;AAAG,yBAAO;AAAA,oBAAC;AAAA;AAAA,kBAAY;AAAA,cAChC;AAAA,YACJ,CAAC;AAAA,UACL,GAIAA,MAAK,UAAU,WAAW,WAAY;AAClC,mBAAO,KAAK,QAAQ;AAAA,UACxB,GAIAA,MAAK,UAAU,cAAc,WAAY;AACrC,gBAAI,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,UAAU;AAGhD,uBAFI,KAAK,KAAK,UAAU,SAAS,KAAK,QAE/B;AACH,qBAAK,UAAU,IAAI,GACnB,EAAE;AAAA,UAGd,GAOAA,MAAK,UAAU,gBAAgB,SAAUR,IAAG;AAExC,gBAAI,aAAa,IAAIQ,MAAK,KAAK,OAAO;AACtC,uBAAW,QAAQR,IACnB,WAAW,YAAY,KAAK,UAAU,MAAM,CAACA,EAAC,GAC9C,WAAW,KAAK;AAIhB,qBAHI,UAAU,KAAK,UAAU,SAAS,IAAIA,IACtC,gBAAgBQ,MAAK,iBAAiB,OAAO,GAC7C,UAAU,CAAC,GACN,IAAI,SAAS,IAAI,eAAe,EAAE;AACvC,sBAAQ,KAAK,CAAC;AAGlB,qBADI,MAAM,KAAK,WACR,QAAQ,UAAQ;AACnB,kBAAI,IAAI,QAAQ,MAAM;AACtB,cAAI,KAAK,QAAQ,IAAI,CAAC,GAAG,WAAW,KAAK,CAAC,IAAI,MAC1C,WAAW,QAAQ,IAAI,CAAC,CAAC,GACrB,IAAI,KACJ,QAAQ,KAAKA,MAAK,iBAAiB,CAAC,CAAC;AAAA,YAGjD;AACA,mBAAO,WAAW,QAAQ;AAAA,UAC9B,GAMAA,MAAK,UAAU,YAAY,SAAU,GAAG,GAAG;AACvC,gBAAI;AACJ,iBAAK,OAAO,CAAC,KAAK,UAAU,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,IAAI,GAAG,CAAC;AAAA,UAC/G,GAKAA,MAAK,UAAU,gBAAgB,SAAU,GAAG;AAUxC,qBATI,QAAQ,MACR,SAAS,IAAI,KAAK,UAAU,SAAS,GACrCJ,QAAO,KAAK,UAAU,CAAC,GACvB,qBAAqB,SAAU,MAAM,GAAG;AACxC,qBAAI,MAAM,UAAU,SAAS,KAAK,MAAM,QAAQ,MAAM,UAAU,CAAC,GAAG,MAAM,UAAU,IAAI,CAAC,IAAI,MACzF,OAAO,IAEJ;AAAA,YACX,GACO,UAAQ;AACX,kBAAI,cAAcI,MAAK,mBAAmB,CAAC,GACvC,iBAAiB,YAAY,OAAO,oBAAoB,YAAY,CAAC,CAAC,GACtE,YAAY,KAAK,UAAU,cAAc;AAC7C,cAAI,OAAO,YAAc,OAAe,KAAK,QAAQJ,OAAM,SAAS,IAAI,KACpE,KAAK,UAAU,GAAG,cAAc,GAChC,IAAI,kBAGJ,SAAS;AAAA,YAEjB;AAAA,UACJ,GAKAI,MAAK,UAAU,cAAc,SAAU,GAAG;AAEtC,qBADI,SAAS,IAAI,GACV,UAAQ;AACX,kBAAI,KAAKA,MAAK,iBAAiB,CAAC;AAChC,cAAI,MAAM,KAAK,KAAK,QAAQ,KAAK,UAAU,EAAE,GAAG,KAAK,UAAU,CAAC,CAAC,IAAI,KACjE,KAAK,UAAU,GAAG,EAAE,GACpB,IAAI,MAGJ,SAAS;AAAA,YAEjB;AAAA,UACJ,GAQAA,MAAK,UAAU,aAAa,SAAUR,IAAG;AAErC,gBAAI,UAAU,IAAIQ,MAAK,KAAK,gBAAgB;AAC5C,oBAAQ,QAAQR;AAGhB,qBAFI,UAAU,CAAC,CAAC,GACZ,MAAM,KAAK,WACR,QAAQ,UAAQ;AACnB,kBAAI,IAAI,QAAQ,MAAM;AACtB,cAAI,IAAI,IAAI,WACJ,QAAQ,SAASA,MACjB,QAAQ,KAAK,IAAI,CAAC,CAAC,GACnB,QAAQ,KAAK,MAAM,SAAS,cAAc,CAAC,GAAG,OAAOQ,MAAK,mBAAmB,CAAC,CAAC,GAAG,EAAK,CAAC,KAEnF,KAAK,QAAQ,IAAI,CAAC,GAAG,QAAQ,KAAK,CAAC,IAAI,MAC5C,QAAQ,QAAQ,IAAI,CAAC,CAAC,GACtB,QAAQ,KAAK,MAAM,SAAS,cAAc,CAAC,GAAG,OAAOA,MAAK,mBAAmB,CAAC,CAAC,GAAG,EAAK,CAAC;AAAA,YAGpG;AACA,mBAAO,QAAQ,QAAQ;AAAA,UAC3B,GAQAA,MAAK,UAAU,aAAa,SAAUR,IAAG;AAErC,gBAAI,YAAY,KAAK,WACjB,UAAU,IAAIQ,MAAK,KAAK,gBAAgB;AAC5C,oBAAQ,QAAQR,IAChB,QAAQ,YAAY,UAAU,MAAM,GAAGA,EAAC,GACxC,QAAQ,KAAK;AAGb,qBAFI,SAASQ,MAAK,iBAAiBR,KAAI,CAAC,IAAI,GACxC,UAAU,CAAC,GACN,IAAI,QAAQ,IAAIA,IAAG,EAAE;AAC1B,sBAAQ,KAAK,MAAM,SAAS,cAAc,CAAC,GAAG,OAAOQ,MAAK,mBAAmB,CAAC,EAAE,OAAO,SAAU,GAAG;AAAE,uBAAO,IAAI,UAAU;AAAA,cAAQ,CAAC,CAAC,GAAG,EAAK,CAAC;AAKlJ,kBAHKR,KAAI,KAAK,KACV,QAAQ,KAAKA,EAAC,GAEX,QAAQ,UAAQ;AACnB,kBAAI,IAAI,QAAQ,MAAM;AACtB,cAAI,IAAI,UAAU,UACV,KAAK,QAAQ,UAAU,CAAC,GAAG,QAAQ,KAAK,CAAC,IAAI,MAC7C,QAAQ,QAAQ,UAAU,CAAC,CAAC,GAC5B,QAAQ,KAAK,MAAM,SAAS,cAAc,CAAC,GAAG,OAAOQ,MAAK,mBAAmB,CAAC,CAAC,GAAG,EAAK,CAAC;AAAA,YAGpG;AACA,mBAAO,QAAQ,QAAQ;AAAA,UAC3B,GAQAA,MAAK,UAAU,aAAa,SAAUR,IAAG;AAGrC,qBAFI,UAAU,KAAK,MAAM,GACrB,SAAS,CAAC,GACL,IAAI,GAAG,IAAIA,IAAG,EAAE;AACrB,qBAAO,KAAK,QAAQ,IAAI,CAAC;AAE7B,mBAAO;AAAA,UACX,GAKAQ,MAAK,UAAU,YAAY,SAAU,MAAM;AACvC,gBAAI,CAAC,KAAK;AACN,qBAAO;AAIX,qBAFI,MAAM,GACN,MAAM,KAAK,GAAG,GACT,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAClC,kBAAI,OAAO,KAAK,QAAQ,KAAK,CAAC,GAAG,GAAG;AACpC,cAAI,OAAO,MACP,MAAM,GACN,MAAM,KAAK,CAAC;AAAA,YAEpB;AACA,mBAAO;AAAA,UACX,GAKAA,MAAK,UAAU,SAAS,WAAY;AAEhC,qBADI,OAAO,CAAC,GACH,KAAK,GAAG,KAAK,UAAU,QAAQ;AACpC,mBAAK,EAAE,IAAI,UAAU,EAAE;AAE3B,gBAAI,OAAO,IAAIA,MAAK,KAAK,OAAO;AAChC,wBAAK,KAAK,IAAI,GACP,KAAK,KAAK;AAAA,UACrB,GACOA;AAAA,QACX,GAAE;AAAA;AAEF,MAAAT,SAAQ,OAAOS,OACfT,SAAQ,YAAY,WACpBA,SAAQ,UAAUS,OAClBT,SAAQ,QAAQ,OAEhB,OAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,GAAK,CAAC;AAAA,IAEhE,EAAE;AAAA;AAAA;;;ACtxEF,SAAS,qBAAqB;;;ACA9B,SAAS,aAAAU,kBAAiB;;;ACA1B,IAAoB,IAAE,EAAC,MAAK,UAAS,OAAM,QAAK,MAAK,QAAI,KAAI,OAAE,MAAK,MAAE,QAAO,KAAI,QAAO,KAAI,GAAE,EAAC,GAAE,IAAE,OAAG;AAAC,MAAG,CAAC,MAAM,CAAC,CAAC,EAAE,QAAM,CAAC;AAAE,MAAK,CAAC,EAAC,GAAEC,EAAC,IAAE,EAAE,MAAM,uBAAuB,KAAG,CAAC,EAAC,CAAC;AAAE,SAAM,CAAC,KAAG,EAAEA,EAAC,KAAG;AAAE;;;ACmB5L,IAAM,oBAAoB;AAqB1B,SAAS,mBAAmB,QAAwB;AAC1D,UAAQ,QAAQ;AAAA,IACf,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR;AACC,aAAO;AAAA,EACT;AACD;AAcO,SAAS,iBAAiB,QAAgC;AAChE,UAAQ,QAAQ;AAAA,IACf,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,YAAM,IAAI,MAAM,gDAAgD;AAAA,IACjE;AACC,YAAM,IAAI;AAAA,QACT,GAAG,MAAM;AAAA,MACV;AAAA,EACF;AACD;;;ACpGA,eAAsB,YAAY,OAAe;AAChD,MAAM,WAAW,IAAI,YAAY,EAAE,OAAO,KAAK,GACzC,aAAa,MAAM,OAAO,OAAO,OAAO,SAAS,QAAQ;AAM/D,SALkB,MAAM,KAAK,IAAI,WAAW,UAAU,CAAC,EAErD,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE;AAGV;;;ACTO,IAAM,uBAAN,cAAmC,MAAM;AAAA,EAC/C,OAAO;AACR,GAEa,wBAAN,cAAoC,MAAM;AAAA,EAChD,OAAO;AACR,GAEa,qBAAN,cAAiC,MAAM;AAAA,EAC7C,OAAO;AAAA,EAEP,SAAS;AACR,WAAO;AAAA,MACN,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,IACf;AAAA,EACD;AACD,GAEa,6BAAN,cAAyC,mBAAmB;AAAA,EAClE,OAAO;AAAA,EAEP,YAAY,KAAY;AAKvB,QAAM,UACL,IAAI,SAAS,sBACV,IAAI,UACJ,IAAI,QAAQ,QAAQ,2BAA2B,EAAE;AACrD,UAAM,OAAO;AAAA,EACd;AACD,GAEa,gBAAN,cAA4B,MAAM;AAAA,EACxC,OAAO;AACR,GAEa,iCAAN,cAA6C,MAAM;AAAA,EACzD,OAAO;AACR,GAEa,4BAAN,cAAwC,MAAM;AAAA,EACpD,OAAO;AACR,GAEa,8BAAN,cAA0C,MAAM;AAAA,EACtD,OAAO;AACR,GAEa,gCAAN,cAA4C,MAAM;AAAA,EACxD,OAAO;AACR;AAEO,SAAS,oBACf,SACA,WACgB;AAChB,SAAO,IAAI,cAAc,IAAI,SAAS,KAAK,OAAO,EAAE;AACrD;AAEA,IAAM,eAAe,oBAER,gBAAgB;AAAA,EAC5B,YAAY,GAAG,YAAY;AAAA,EAC3B,cAAc,GAAG,YAAY;AAAA,EAC7B,gBAAgB,GAAG,YAAY;AAAA,EAC/B,qBAAqB,GAAG,YAAY;AAAA,EACpC,kBAAkB,GAAG,YAAY;AAAA,EACjC,wBAAwB,GAAG,YAAY;AAAA,EACvC,uBAAuB,GAAG,YAAY;AACvC,GAEM,mBAAwC,IAAI;AAAA,EACjD,OAAO,OAAO,aAAa;AAC5B;AAEA,SAAS,gBAAgB,GAAgC;AACxD,MAAI,aAAa;AAChB,WAAO,EAAE;AAEV,MAAI,OAAO,KAAM,YAAY,MAAM,MAAM;AACxC,QAAM,MAAO,EAA2B;AACxC,QAAI,OAAO,OAAQ;AAClB,aAAO;AAAA,EAET;AAED;AAEO,SAAS,aAAa,GAAqB;AACjD,MAAM,MAAM,gBAAgB,CAAC;AAC7B,SAAO,QAAQ,UAAa,iBAAiB,IAAI,GAAG;AACrD;AAEO,SAAS,qBAAqB,GAAqB;AACzD,SAAO,gBAAgB,CAAC,MAAM,cAAc;AAC7C;AAEO,SAAS,uBAAuB,GAAqB;AAC3D,SAAO,gBAAgB,CAAC,MAAM,cAAc;AAC7C;AAEO,SAAS,yBAAyB,GAAqB;AAC7D,SAAO,gBAAgB,CAAC,MAAM,cAAc;AAC7C;AAEA,SAAS,cAAc,MAAuB;AAE7C,SAAQ,WAAmB,YAAY,qBAAqB,IAAI,KAAK;AACtE;AAEO,SAAS,kCAA2C;AAC1D,SAAO,cAAc,gDAAgD;AACtE;AAEO,SAAS,kBAAkB,MAA6B;AAC9D,SAAO;AAAA,IACN,SAAS,IAAI;AAAA,IACb;AAAA,EACD;AACD;;;ACtHO,SAAS,kBACf,QACA,WACS;AACT,MAAM,EAAE,gBAAgB,aAAa,IAAI,WACnC,EAAE,QAAQ,IAAI,QAEd,QAAQ,EAAG,QAAQ,KAAK;AAE9B,UAAQ,QAAQ,SAAS;AAAA,IACxB,KAAK;AACJ,aAAO,QAAQ,KAAK,IAAI,GAAG,eAAe,CAAC;AAAA,IAE5C,KAAK;AACJ,aAAO,QAAQ;AAAA,IAGhB;AACC,aAAO;AAAA,EAET;AACD;;;ACzBA,IAAI;AAAA,CACH,SAAUC,OAAM;AACb,EAAAA,MAAK,cAAc,CAAC,QAAQ;AAC5B,WAAS,SAAS,MAAM;AAAA,EAAE;AAC1B,EAAAA,MAAK,WAAW;AAChB,WAAS,YAAY,IAAI;AACrB,UAAM,IAAI,MAAM;AAAA,EACpB;AACA,EAAAA,MAAK,cAAc,aACnBA,MAAK,cAAc,CAAC,UAAU;AAC1B,QAAM,MAAM,CAAC;AACb,aAAW,QAAQ;AACf,UAAI,IAAI,IAAI;AAEhB,WAAO;AAAA,EACX,GACAA,MAAK,qBAAqB,CAAC,QAAQ;AAC/B,QAAM,YAAYA,MAAK,WAAW,GAAG,EAAE,OAAO,CAAC,MAAM,OAAO,IAAI,IAAI,CAAC,CAAC,KAAM,QAAQ,GAC9E,WAAW,CAAC;AAClB,aAAW,KAAK;AACZ,eAAS,CAAC,IAAI,IAAI,CAAC;AAEvB,WAAOA,MAAK,aAAa,QAAQ;AAAA,EACrC,GACAA,MAAK,eAAe,CAAC,QACVA,MAAK,WAAW,GAAG,EAAE,IAAI,SAAU,GAAG;AACzC,WAAO,IAAI,CAAC;AAAA,EAChB,CAAC,GAELA,MAAK,aAAa,OAAO,OAAO,QAAS,aACnC,CAAC,QAAQ,OAAO,KAAK,GAAG,IACxB,CAAC,WAAW;AACV,QAAM,OAAO,CAAC;AACd,aAAW,OAAO;AACd,MAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG,KAChD,KAAK,KAAK,GAAG;AAGrB,WAAO;AAAA,EACX,GACJA,MAAK,OAAO,CAAC,KAAK,YAAY;AAC1B,aAAW,QAAQ;AACf,UAAI,QAAQ,IAAI;AACZ,eAAO;AAAA,EAGnB,GACAA,MAAK,YAAY,OAAO,OAAO,aAAc,aACvC,CAAC,QAAQ,OAAO,UAAU,GAAG,IAC7B,CAAC,QAAQ,OAAO,OAAQ,YAAY,SAAS,GAAG,KAAK,KAAK,MAAM,GAAG,MAAM;AAC/E,WAAS,WAAW,OAAO,YAAY,OAAO;AAC1C,WAAO,MACF,IAAI,CAAC,QAAS,OAAO,OAAQ,WAAW,IAAI,GAAG,MAAM,GAAI,EACzD,KAAK,SAAS;AAAA,EACvB;AACA,EAAAA,MAAK,aAAa,YAClBA,MAAK,wBAAwB,CAAC,GAAG,UACzB,OAAO,SAAU,WACV,MAAM,SAAS,IAEnB;AAEf,GAAG,SAAS,OAAO,CAAC,EAAE;AACtB,IAAI;AAAA,CACH,SAAUC,aAAY;AACnB,EAAAA,YAAW,cAAc,CAAC,OAAO,YACtB;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA;AAAA,EACP;AAER,GAAG,eAAe,aAAa,CAAC,EAAE;AAClC,IAAM,gBAAgB,KAAK,YAAY;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC,GACK,gBAAgB,CAAC,SAAS;AAE5B,UADU,OAAO,MACN;AAAA,IACP,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,MAAM,IAAI,IAAI,cAAc,MAAM,cAAc;AAAA,IAC3D,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAO,cAAc;AAAA,IACzB,KAAK;AACD,aAAI,MAAM,QAAQ,IAAI,IACX,cAAc,QAErB,SAAS,OACF,cAAc,OAErB,KAAK,QACL,OAAO,KAAK,QAAS,cACrB,KAAK,SACL,OAAO,KAAK,SAAU,aACf,cAAc,UAErB,OAAO,MAAQ,OAAe,gBAAgB,MACvC,cAAc,MAErB,OAAO,MAAQ,OAAe,gBAAgB,MACvC,cAAc,MAErB,OAAO,OAAS,OAAe,gBAAgB,OACxC,cAAc,OAElB,cAAc;AAAA,IACzB;AACI,aAAO,cAAc;AAAA,EAC7B;AACJ,GAEM,eAAe,KAAK,YAAY;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC,GACK,gBAAgB,CAAC,QACN,KAAK,UAAU,KAAK,MAAM,CAAC,EAC5B,QAAQ,eAAe,KAAK,GAEtC,WAAN,cAAuB,MAAM;AAAA,EACzB,YAAY,QAAQ;AAChB,UAAM,GACN,KAAK,SAAS,CAAC,GACf,KAAK,WAAW,CAAC,QAAQ;AACrB,WAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG;AAAA,IACtC,GACA,KAAK,YAAY,CAAC,OAAO,CAAC,MAAM;AAC5B,WAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG,IAAI;AAAA,IAC1C;AACA,QAAM,cAAc,WAAW;AAC/B,IAAI,OAAO,iBAEP,OAAO,eAAe,MAAM,WAAW,IAGvC,KAAK,YAAY,aAErB,KAAK,OAAO,YACZ,KAAK,SAAS;AAAA,EAClB;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,OAAO,SAAS;AACZ,QAAM,SAAS,WACX,SAAU,OAAO;AACb,aAAO,MAAM;AAAA,IACjB,GACE,cAAc,EAAE,SAAS,CAAC,EAAE,GAC5B,eAAe,CAAC,UAAU;AAC5B,eAAW,SAAS,MAAM;AACtB,YAAI,MAAM,SAAS;AACf,gBAAM,YAAY,IAAI,YAAY;AAAA,iBAE7B,MAAM,SAAS;AACpB,uBAAa,MAAM,eAAe;AAAA,iBAE7B,MAAM,SAAS;AACpB,uBAAa,MAAM,cAAc;AAAA,iBAE5B,MAAM,KAAK,WAAW;AAC3B,sBAAY,QAAQ,KAAK,OAAO,KAAK,CAAC;AAAA,aAErC;AACD,cAAI,OAAO,aACP,IAAI;AACR,iBAAO,IAAI,MAAM,KAAK,UAAQ;AAC1B,gBAAM,KAAK,MAAM,KAAK,CAAC;AAEvB,YADiB,MAAM,MAAM,KAAK,SAAS,KAYvC,KAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GACrC,KAAK,EAAE,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC,KAXnC,KAAK,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAazC,OAAO,KAAK,EAAE,GACd;AAAA,UACJ;AAAA,QACJ;AAAA,IAER;AACA,wBAAa,IAAI,GACV;AAAA,EACX;AAAA,EACA,WAAW;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,UAAU,KAAK,QAAQ,KAAK,uBAAuB,CAAC;AAAA,EACpE;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,OAAO,WAAW;AAAA,EAClC;AAAA,EACA,QAAQ,SAAS,CAAC,UAAU,MAAM,SAAS;AACvC,QAAM,cAAc,CAAC,GACf,aAAa,CAAC;AACpB,aAAW,OAAO,KAAK;AACnB,MAAI,IAAI,KAAK,SAAS,KAClB,YAAY,IAAI,KAAK,CAAC,CAAC,IAAI,YAAY,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,GACxD,YAAY,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,OAAO,GAAG,CAAC,KAGzC,WAAW,KAAK,OAAO,GAAG,CAAC;AAGnC,WAAO,EAAE,YAAY,YAAY;AAAA,EACrC;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,QAAQ;AAAA,EACxB;AACJ;AACA,SAAS,SAAS,CAAC,WACD,IAAI,SAAS,MAAM;AAIrC,IAAM,WAAW,CAAC,OAAO,SAAS;AAC9B,MAAI;AACJ,UAAQ,MAAM,MAAM;AAAA,IAChB,KAAK,aAAa;AACd,MAAI,MAAM,aAAa,cAAc,YACjC,UAAU,aAGV,UAAU,YAAY,MAAM,QAAQ,cAAc,MAAM,QAAQ;AAEpE;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,mCAAmC,KAAK,UAAU,MAAM,UAAU,KAAK,qBAAqB,CAAC;AACvG;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,kCAAkC,KAAK,WAAW,MAAM,MAAM,IAAI,CAAC;AAC7E;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,yCAAyC,KAAK,WAAW,MAAM,OAAO,CAAC;AACjF;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,gCAAgC,KAAK,WAAW,MAAM,OAAO,CAAC,eAAe,MAAM,QAAQ;AACrG;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,MAAI,OAAO,MAAM,cAAe,WACxB,cAAc,MAAM,cACpB,UAAU,gCAAgC,MAAM,WAAW,QAAQ,KAC/D,OAAO,MAAM,WAAW,YAAa,aACrC,UAAU,GAAG,OAAO,sDAAsD,MAAM,WAAW,QAAQ,OAGlG,gBAAgB,MAAM,aAC3B,UAAU,mCAAmC,MAAM,WAAW,UAAU,MAEnE,cAAc,MAAM,aACzB,UAAU,iCAAiC,MAAM,WAAW,QAAQ,MAGpE,KAAK,YAAY,MAAM,UAAU,IAGhC,MAAM,eAAe,UAC1B,UAAU,WAAW,MAAM,UAAU,KAGrC,UAAU;AAEd;AAAA,IACJ,KAAK,aAAa;AACd,MAAI,MAAM,SAAS,UACf,UAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,WAAW,IAAI,MAAM,OAAO,gBAChH,MAAM,SAAS,WACpB,UAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,aAAa,MAAM,IAAI,MAAM,OAAO,kBAC5G,MAAM,SAAS,WACpB,UAAU,kBAAkB,MAAM,QAC5B,sBACA,MAAM,YACF,8BACA,eAAe,GAAG,MAAM,OAAO,KACpC,MAAM,SAAS,SACpB,UAAU,gBAAgB,MAAM,QAC1B,sBACA,MAAM,YACF,8BACA,eAAe,GAAG,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC,KAE3D,UAAU;AACd;AAAA,IACJ,KAAK,aAAa;AACd,MAAI,MAAM,SAAS,UACf,UAAU,sBAAsB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,WAAW,IAAI,MAAM,OAAO,gBAC/G,MAAM,SAAS,WACpB,UAAU,uBAAuB,MAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,OAAO,IAAI,MAAM,OAAO,kBAC5G,MAAM,SAAS,WACpB,UAAU,kBAAkB,MAAM,QAC5B,YACA,MAAM,YACF,0BACA,WAAW,IAAI,MAAM,OAAO,KACjC,MAAM,SAAS,WACpB,UAAU,kBAAkB,MAAM,QAC5B,YACA,MAAM,YACF,0BACA,WAAW,IAAI,MAAM,OAAO,KACjC,MAAM,SAAS,SACpB,UAAU,gBAAgB,MAAM,QAC1B,YACA,MAAM,YACF,6BACA,cAAc,IAAI,IAAI,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC,KAE3D,UAAU;AACd;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU,gCAAgC,MAAM,UAAU;AAC1D;AAAA,IACJ,KAAK,aAAa;AACd,gBAAU;AACV;AAAA,IACJ;AACI,gBAAU,KAAK,cACf,KAAK,YAAY,KAAK;AAAA,EAC9B;AACA,SAAO,EAAE,QAAQ;AACrB,GAEI,mBAAmB;AACvB,SAAS,YAAY,KAAK;AACtB,qBAAmB;AACvB;AACA,SAAS,cAAc;AACnB,SAAO;AACX;AAEA,IAAM,YAAY,CAAC,WAAW;AAC1B,MAAM,EAAE,MAAM,MAAM,WAAW,UAAU,IAAI,QACvC,WAAW,CAAC,GAAG,MAAM,GAAI,UAAU,QAAQ,CAAC,CAAE,GAC9C,YAAY;AAAA,IACd,GAAG;AAAA,IACH,MAAM;AAAA,EACV,GACI,eAAe,IACb,OAAO,UACR,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EACjB,MAAM,EACN,QAAQ;AACb,WAAW,OAAO;AACd,mBAAe,IAAI,WAAW,EAAE,MAAM,cAAc,aAAa,CAAC,EAAE;AAExE,SAAO;AAAA,IACH,GAAG;AAAA,IACH,MAAM;AAAA,IACN,SAAS,UAAU,WAAW;AAAA,EAClC;AACJ,GACM,aAAa,CAAC;AACpB,SAAS,kBAAkB,KAAK,WAAW;AACvC,MAAM,QAAQ,UAAU;AAAA,IACpB;AAAA,IACA,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,WAAW;AAAA,MACP,IAAI,OAAO;AAAA,MACX,IAAI;AAAA,MACJ,YAAY;AAAA,MACZ;AAAA;AAAA,IACJ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,EACvB,CAAC;AACD,MAAI,OAAO,OAAO,KAAK,KAAK;AAChC;AACA,IAAM,cAAN,MAAM,aAAY;AAAA,EACd,cAAc;AACV,SAAK,QAAQ;AAAA,EACjB;AAAA,EACA,QAAQ;AACJ,IAAI,KAAK,UAAU,YACf,KAAK,QAAQ;AAAA,EACrB;AAAA,EACA,QAAQ;AACJ,IAAI,KAAK,UAAU,cACf,KAAK,QAAQ;AAAA,EACrB;AAAA,EACA,OAAO,WAAW,QAAQ,SAAS;AAC/B,QAAM,aAAa,CAAC;AACpB,aAAW,KAAK,SAAS;AACrB,UAAI,EAAE,WAAW;AACb,eAAO;AACX,MAAI,EAAE,WAAW,WACb,OAAO,MAAM,GACjB,WAAW,KAAK,EAAE,KAAK;AAAA,IAC3B;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,WAAW;AAAA,EACrD;AAAA,EACA,aAAa,iBAAiB,QAAQ,OAAO;AACzC,QAAM,YAAY,CAAC;AACnB,aAAW,QAAQ;AACf,gBAAU,KAAK;AAAA,QACX,KAAK,MAAM,KAAK;AAAA,QAChB,OAAO,MAAM,KAAK;AAAA,MACtB,CAAC;AAEL,WAAO,aAAY,gBAAgB,QAAQ,SAAS;AAAA,EACxD;AAAA,EACA,OAAO,gBAAgB,QAAQ,OAAO;AAClC,QAAM,cAAc,CAAC;AACrB,aAAW,QAAQ,OAAO;AACtB,UAAM,EAAE,KAAK,MAAM,IAAI;AAGvB,UAFI,IAAI,WAAW,aAEf,MAAM,WAAW;AACjB,eAAO;AACX,MAAI,IAAI,WAAW,WACf,OAAO,MAAM,GACb,MAAM,WAAW,WACjB,OAAO,MAAM,GACb,IAAI,UAAU,gBACb,OAAO,MAAM,QAAU,OAAe,KAAK,eAC5C,YAAY,IAAI,KAAK,IAAI,MAAM;AAAA,IAEvC;AACA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,YAAY;AAAA,EACtD;AACJ,GACM,UAAU,OAAO,OAAO;AAAA,EAC1B,QAAQ;AACZ,CAAC,GACK,QAAQ,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM,IAC7C,KAAK,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM,IAC1C,YAAY,CAAC,MAAM,EAAE,WAAW,WAChC,UAAU,CAAC,MAAM,EAAE,WAAW,SAC9B,UAAU,CAAC,MAAM,EAAE,WAAW,SAC9B,UAAU,CAAC,MAAM,OAAO,UAAY,OAAe,aAAa,SAElE;AAAA,CACH,SAAUC,YAAW;AAClB,EAAAA,WAAU,WAAW,CAAC,YAAY,OAAO,WAAY,WAAW,EAAE,QAAQ,IAAI,WAAW,CAAC,GAC1FA,WAAU,WAAW,CAAC,YAAY,OAAO,WAAY,WAAW,UAA4D,SAAQ;AACxI,GAAG,cAAc,YAAY,CAAC,EAAE;AAEhC,IAAM,qBAAN,MAAyB;AAAA,EACrB,YAAY,QAAQ,OAAO,MAAM,KAAK;AAClC,SAAK,cAAc,CAAC,GACpB,KAAK,SAAS,QACd,KAAK,OAAO,OACZ,KAAK,QAAQ,MACb,KAAK,OAAO;AAAA,EAChB;AAAA,EACA,IAAI,OAAO;AACP,WAAK,KAAK,YAAY,WACd,KAAK,gBAAgB,QACrB,KAAK,YAAY,KAAK,GAAG,KAAK,OAAO,GAAG,KAAK,IAAI,IAGjD,KAAK,YAAY,KAAK,GAAG,KAAK,OAAO,KAAK,IAAI,IAG/C,KAAK;AAAA,EAChB;AACJ,GACM,eAAe,CAAC,KAAK,WAAW;AAClC,MAAI,QAAQ,MAAM;AACd,WAAO,EAAE,SAAS,IAAM,MAAM,OAAO,MAAM;AAG3C,MAAI,CAAC,IAAI,OAAO,OAAO;AACnB,UAAM,IAAI,MAAM,2CAA2C;AAE/D,SAAO;AAAA,IACH,SAAS;AAAA,IACT,IAAI,QAAQ;AACR,UAAI,KAAK;AACL,eAAO,KAAK;AAChB,UAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,MAAM;AAC5C,kBAAK,SAAS,OACP,KAAK;AAAA,IAChB;AAAA,EACJ;AAER;AACA,SAAS,oBAAoB,QAAQ;AACjC,MAAI,CAAC;AACD,WAAO,CAAC;AACZ,MAAM,EAAE,UAAAC,WAAU,oBAAoB,gBAAgB,YAAY,IAAI;AACtE,MAAIA,cAAa,sBAAsB;AACnC,UAAM,IAAI,MAAM,0FAA0F;AAE9G,SAAIA,YACO,EAAE,UAAUA,WAAU,YAAY,IAStC,EAAE,UARS,CAAC,KAAK,QAChB,IAAI,SAAS,iBACN,EAAE,SAAS,IAAI,aAAa,IACnC,OAAO,IAAI,OAAS,MACb,EAAE,SAAS,kBAAwE,IAAI,aAAa,IAExG,EAAE,SAAS,sBAAoF,IAAI,aAAa,GAE7F,YAAY;AAC9C;AACA,IAAM,UAAN,MAAc;AAAA,EACV,YAAY,KAAK;AAEb,SAAK,MAAM,KAAK,gBAChB,KAAK,OAAO,KACZ,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GACjC,KAAK,YAAY,KAAK,UAAU,KAAK,IAAI,GACzC,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI,GACnD,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,GAC7B,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI,GACnC,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GACjC,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,KAAK,KAAK,GAAG,KAAK,IAAI,GAC3B,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,GAC7B,KAAK,YAAY,KAAK,UAAU,KAAK,IAAI,GACzC,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GACjC,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GACjC,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,OAAO,KAAK,KAAK,KAAK,IAAI,GAC/B,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAAA,EAC/C;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,SAAS,OAAO;AACZ,WAAO,cAAc,MAAM,IAAI;AAAA,EACnC;AAAA,EACA,gBAAgB,OAAO,KAAK;AACxB,WAAQ,OAAO;AAAA,MACX,QAAQ,MAAM,OAAO;AAAA,MACrB,MAAM,MAAM;AAAA,MACZ,YAAY,cAAc,MAAM,IAAI;AAAA,MACpC,gBAAgB,KAAK,KAAK;AAAA,MAC1B,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,IAClB;AAAA,EACJ;AAAA,EACA,oBAAoB,OAAO;AACvB,WAAO;AAAA,MACH,QAAQ,IAAI,YAAY;AAAA,MACxB,KAAK;AAAA,QACD,QAAQ,MAAM,OAAO;AAAA,QACrB,MAAM,MAAM;AAAA,QACZ,YAAY,cAAc,MAAM,IAAI;AAAA,QACpC,gBAAgB,KAAK,KAAK;AAAA,QAC1B,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,WAAW,OAAO;AACd,QAAM,SAAS,KAAK,OAAO,KAAK;AAChC,QAAI,QAAQ,MAAM;AACd,YAAM,IAAI,MAAM,wCAAwC;AAE5D,WAAO;AAAA,EACX;AAAA,EACA,YAAY,OAAO;AACf,QAAM,SAAS,KAAK,OAAO,KAAK;AAChC,WAAO,QAAQ,QAAQ,MAAM;AAAA,EACjC;AAAA,EACA,MAAM,MAAM,QAAQ;AAChB,QAAM,SAAS,KAAK,UAAU,MAAM,MAAM;AAC1C,QAAI,OAAO;AACP,aAAO,OAAO;AAClB,UAAM,OAAO;AAAA,EACjB;AAAA,EACA,UAAU,MAAM,QAAQ;AACpB,QAAI;AACJ,QAAM,MAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAC;AAAA,QACT,QAAQ,KAAqD,QAAO,WAAW,QAAQ,OAAO,SAAS,KAAK;AAAA,QAC5G,oBAAoE,QAAO;AAAA,MAC/E;AAAA,MACA,MAAuD,QAAO,QAAS,CAAC;AAAA,MACxE,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR;AAAA,MACA,YAAY,cAAc,IAAI;AAAA,IAClC,GACM,SAAS,KAAK,WAAW,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AACpE,WAAO,aAAa,KAAK,MAAM;AAAA,EACnC;AAAA,EACA,MAAM,WAAW,MAAM,QAAQ;AAC3B,QAAM,SAAS,MAAM,KAAK,eAAe,MAAM,MAAM;AACrD,QAAI,OAAO;AACP,aAAO,OAAO;AAClB,UAAM,OAAO;AAAA,EACjB;AAAA,EACA,MAAM,eAAe,MAAM,QAAQ;AAC/B,QAAM,MAAM;AAAA,MACR,QAAQ;AAAA,QACJ,QAAQ,CAAC;AAAA,QACT,oBAAoE,QAAO;AAAA,QAC3E,OAAO;AAAA,MACX;AAAA,MACA,MAAuD,QAAO,QAAS,CAAC;AAAA,MACxE,gBAAgB,KAAK,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR;AAAA,MACA,YAAY,cAAc,IAAI;AAAA,IAClC,GACM,mBAAmB,KAAK,OAAO,EAAE,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,GACpE,SAAS,OAAO,QAAQ,gBAAgB,IACxC,mBACA,QAAQ,QAAQ,gBAAgB;AACtC,WAAO,aAAa,KAAK,MAAM;AAAA,EACnC;AAAA,EACA,OAAO,OAAO,SAAS;AACnB,QAAM,qBAAqB,CAAC,QACpB,OAAO,WAAY,YAAY,OAAO,UAAY,MAC3C,EAAE,QAAQ,IAEZ,OAAO,WAAY,aACjB,QAAQ,GAAG,IAGX;AAGf,WAAO,KAAK,YAAY,CAAC,KAAK,QAAQ;AAClC,UAAM,SAAS,MAAM,GAAG,GAClB,WAAW,MAAM,IAAI,SAAS;AAAA,QAChC,MAAM,aAAa;AAAA,QACnB,GAAG,mBAAmB,GAAG;AAAA,MAC7B,CAAC;AACD,aAAI,OAAO,UAAY,OAAe,kBAAkB,UAC7C,OAAO,KAAK,CAAC,SACX,OAKM,MAJP,SAAS,GACF,GAKd,IAEA,SAKM,MAJP,SAAS,GACF;AAAA,IAKf,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,gBAAgB;AAC9B,WAAO,KAAK,YAAY,CAAC,KAAK,QACrB,MAAM,GAAG,IAOH,MANP,IAAI,SAAS,OAAO,kBAAmB,aACjC,eAAe,KAAK,GAAG,IACvB,cAAc,GACb,GAKd;AAAA,EACL;AAAA,EACA,YAAY,YAAY;AACpB,WAAO,IAAI,WAAW;AAAA,MAClB,QAAQ;AAAA,MACR,UAAU,sBAAsB;AAAA,MAChC,QAAQ,EAAE,MAAM,cAAc,WAAW;AAAA,IAC7C,CAAC;AAAA,EACL;AAAA,EACA,YAAY,YAAY;AACpB,WAAO,KAAK,YAAY,UAAU;AAAA,EACtC;AAAA,EACA,WAAW;AACP,WAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,EAC7C;AAAA,EACA,WAAW;AACP,WAAO,YAAY,OAAO,MAAM,KAAK,IAAI;AAAA,EAC7C;AAAA,EACA,UAAU;AACN,WAAO,KAAK,SAAS,EAAE,SAAS;AAAA,EACpC;AAAA,EACA,QAAQ;AACJ,WAAO,SAAS,OAAO,MAAM,KAAK,IAAI;AAAA,EAC1C;AAAA,EACA,UAAU;AACN,WAAO,WAAW,OAAO,MAAM,KAAK,IAAI;AAAA,EAC5C;AAAA,EACA,GAAG,QAAQ;AACP,WAAO,SAAS,OAAO,CAAC,MAAM,MAAM,GAAG,KAAK,IAAI;AAAA,EACpD;AAAA,EACA,IAAI,UAAU;AACV,WAAO,gBAAgB,OAAO,MAAM,UAAU,KAAK,IAAI;AAAA,EAC3D;AAAA,EACA,UAAU,WAAW;AACjB,WAAO,IAAI,WAAW;AAAA,MAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,MAChC,QAAQ;AAAA,MACR,UAAU,sBAAsB;AAAA,MAChC,QAAQ,EAAE,MAAM,aAAa,UAAU;AAAA,IAC3C,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,KAAK;AACT,QAAM,mBAAmB,OAAO,OAAQ,aAAa,MAAM,MAAM;AACjE,WAAO,IAAI,WAAW;AAAA,MAClB,GAAG,oBAAoB,KAAK,IAAI;AAAA,MAChC,WAAW;AAAA,MACX,cAAc;AAAA,MACd,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,IAAI,WAAW;AAAA,MAClB,UAAU,sBAAsB;AAAA,MAChC,MAAM;AAAA,MACN,GAAG,oBAAoB,KAAK,IAAI;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,MAAM,KAAK;AACP,QAAM,iBAAiB,OAAO,OAAQ,aAAa,MAAM,MAAM;AAC/D,WAAO,IAAI,SAAS;AAAA,MAChB,GAAG,oBAAoB,KAAK,IAAI;AAAA,MAChC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,aAAa;AAClB,QAAM,OAAO,KAAK;AAClB,WAAO,IAAI,KAAK;AAAA,MACZ,GAAG,KAAK;AAAA,MACR;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,KAAK,QAAQ;AACT,WAAO,YAAY,OAAO,MAAM,MAAM;AAAA,EAC1C;AAAA,EACA,WAAW;AACP,WAAO,YAAY,OAAO,IAAI;AAAA,EAClC;AAAA,EACA,aAAa;AACT,WAAO,KAAK,UAAU,MAAS,EAAE;AAAA,EACrC;AAAA,EACA,aAAa;AACT,WAAO,KAAK,UAAU,IAAI,EAAE;AAAA,EAChC;AACJ,GACM,YAAY,kBACZ,aAAa,oBACb,YAAY,0BAGZ,YAAY,0FAaZ,aAAa,oFAIb,aAAa,uDACb,YAAY,iHACZ,YAAY,gYAEZ,gBAAgB,CAAC,SACf,KAAK,YACD,KAAK,SACE,IAAI,OAAO,oDAAoD,KAAK,SAAS,+BAA+B,IAG5G,IAAI,OAAO,oDAAoD,KAAK,SAAS,KAAK,IAGxF,KAAK,cAAc,IACpB,KAAK,SACE,IAAI,OAAO,wEAAwE,IAGnF,IAAI,OAAO,8CAA8C,IAIhE,KAAK,SACE,IAAI,OAAO,kFAAkF,IAG7F,IAAI,OAAO,wDAAwD;AAItF,SAAS,UAAU,IAAI,SAAS;AAI5B,SAHK,gBAAY,QAAQ,CAAC,YAAY,UAAU,KAAK,EAAE,MAGlD,YAAY,QAAQ,CAAC,YAAY,UAAU,KAAK,EAAE;AAI3D;AACA,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,SAAS,CAAC,OAAO,YAAY,YAAY,KAAK,WAAW,CAAC,SAAS,MAAM,KAAK,IAAI,GAAG;AAAA,MACtF;AAAA,MACA,MAAM,aAAa;AAAA,MACnB,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC,GAKD,KAAK,WAAW,CAAC,YAAY,KAAK,IAAI,GAAG,UAAU,SAAS,OAAO,CAAC,GACpE,KAAK,OAAO,MAAM,IAAI,WAAU;AAAA,MAC5B,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAAA,IAClD,CAAC,GACD,KAAK,cAAc,MAAM,IAAI,WAAU;AAAA,MACnC,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,IACzD,CAAC,GACD,KAAK,cAAc,MAAM,IAAI,WAAU;AAAA,MACnC,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAAA,IACzD,CAAC;AAAA,EACL;AAAA,EACA,OAAO,OAAO;AAKV,QAJI,KAAK,KAAK,WACV,MAAM,OAAO,OAAO,MAAM,IAAI,IAEf,KAAK,SAAS,KAAK,MACnB,cAAc,QAAQ;AACrC,UAAMC,OAAM,KAAK,gBAAgB,KAAK;AACtC;AAAA,QAAkBA;AAAA,QAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,UAAU,cAAc;AAAA,UACxB,UAAUA,KAAI;AAAA,QAClB;AAAA;AAAA,MAEA,GACO;AAAA,IACX;AACA,QAAM,SAAS,IAAI,YAAY,GAC3B;AACJ,aAAW,SAAS,KAAK,KAAK;AAC1B,UAAI,MAAM,SAAS;AACf,QAAI,MAAM,KAAK,SAAS,MAAM,UAC1B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,MAAM;AAAA,QACnB,CAAC,GACD,OAAO,MAAM;AAAA,eAGZ,MAAM,SAAS;AACpB,QAAI,MAAM,KAAK,SAAS,MAAM,UAC1B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,MAAM;AAAA,QACnB,CAAC,GACD,OAAO,MAAM;AAAA,eAGZ,MAAM,SAAS,UAAU;AAC9B,YAAM,SAAS,MAAM,KAAK,SAAS,MAAM,OACnC,WAAW,MAAM,KAAK,SAAS,MAAM;AAC3C,SAAI,UAAU,cACV,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACjC,SACA,kBAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,MAAM;AAAA,QACnB,CAAC,IAEI,YACL,kBAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,UACN,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS,MAAM;AAAA,QACnB,CAAC,GAEL,OAAO,MAAM;AAAA,MAErB,WACS,MAAM,SAAS;AACpB,QAAK,WAAW,KAAK,MAAM,IAAI,MAC3B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,QACnB,CAAC,GACD,OAAO,MAAM;AAAA,eAGZ,MAAM,SAAS;AACpB,QAAK,WAAW,KAAK,MAAM,IAAI,MAC3B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,QACnB,CAAC,GACD,OAAO,MAAM;AAAA,eAGZ,MAAM,SAAS;AACpB,QAAK,UAAU,KAAK,MAAM,IAAI,MAC1B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,QACnB,CAAC,GACD,OAAO,MAAM;AAAA,eAGZ,MAAM,SAAS;AACpB,QAAK,UAAU,KAAK,MAAM,IAAI,MAC1B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,QACnB,CAAC,GACD,OAAO,MAAM;AAAA,eAGZ,MAAM,SAAS;AACpB,QAAK,WAAW,KAAK,MAAM,IAAI,MAC3B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,QACnB,CAAC,GACD,OAAO,MAAM;AAAA,eAGZ,MAAM,SAAS;AACpB,QAAK,UAAU,KAAK,MAAM,IAAI,MAC1B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,UACnB,YAAY;AAAA,UACZ,MAAM,aAAa;AAAA,UACnB,SAAS,MAAM;AAAA,QACnB,CAAC,GACD,OAAO,MAAM;AAAA,eAGZ,MAAM,SAAS;AACpB,YAAI;AACA,cAAI,IAAI,MAAM,IAAI;AAAA,QACtB,QACW;AACP,gBAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,YACnB,YAAY;AAAA,YACZ,MAAM,aAAa;AAAA,YACnB,SAAS,MAAM;AAAA,UACnB,CAAC,GACD,OAAO,MAAM;AAAA,QACjB;AAAA,UAEC,CAAI,MAAM,SAAS,WACpB,MAAM,MAAM,YAAY,GACL,MAAM,MAAM,KAAK,MAAM,IAAI,MAE1C,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM,aAAa;AAAA,QACnB,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,MAGZ,MAAM,SAAS,SACpB,MAAM,OAAO,MAAM,KAAK,KAAK,IAExB,MAAM,SAAS,aACf,MAAM,KAAK,SAAS,MAAM,OAAO,MAAM,QAAQ,MAChD,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,YAAY,EAAE,UAAU,MAAM,OAAO,UAAU,MAAM,SAAS;AAAA,QAC9D,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,gBACpB,MAAM,OAAO,MAAM,KAAK,YAAY,IAE/B,MAAM,SAAS,gBACpB,MAAM,OAAO,MAAM,KAAK,YAAY,IAE/B,MAAM,SAAS,eACf,MAAM,KAAK,WAAW,MAAM,KAAK,MAClC,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,YAAY,EAAE,YAAY,MAAM,MAAM;AAAA,QACtC,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,aACf,MAAM,KAAK,SAAS,MAAM,KAAK,MAChC,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,YAAY,EAAE,UAAU,MAAM,MAAM;AAAA,QACpC,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,aACN,cAAc,KAAK,EACtB,KAAK,MAAM,IAAI,MACtB,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,YAAY;AAAA,QACZ,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,OACf,UAAU,MAAM,MAAM,MAAM,OAAO,MACpC,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,YAAY;AAAA,QACZ,MAAM,aAAa;AAAA,QACnB,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAIjB,KAAK,YAAY,KAAK;AAG9B,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,EACrD;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,MAAM,SAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC3E;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,UAAU,EAAE,MAAM,OAAO,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EACzE;AAAA,EACA,MAAM,SAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC3E;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,MAAM,SAAS;AACX,WAAO,KAAK,UAAU,EAAE,MAAM,SAAS,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC3E;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU,EAAE,MAAM,QAAQ,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EAC1E;AAAA,EACA,GAAG,SAAS;AACR,WAAO,KAAK,UAAU,EAAE,MAAM,MAAM,GAAG,UAAU,SAAS,OAAO,EAAE,CAAC;AAAA,EACxE;AAAA,EACA,SAAS,SAAS;AACd,QAAI;AACJ,WAAI,OAAO,WAAY,WACZ,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,IACb,CAAC,IAEE,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW,OAA0D,SAAQ,YAAe,MAAc,OAAyD,SAAQ;AAAA,MAC3K,SAAS,KAAuD,SAAQ,YAAY,QAAQ,OAAO,SAAS,KAAK;AAAA,MACjH,GAAG,UAAU,SAA2D,SAAQ,OAAO;AAAA,IAC3F,CAAC;AAAA,EACL;AAAA,EACA,MAAM,OAAO,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,OAAO,SAAS;AACrB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,UAA4D,SAAQ;AAAA,MACpE,GAAG,UAAU,SAA2D,SAAQ,OAAO;AAAA,IAC3F,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,SAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,OAAO,SAAS;AACrB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,OAAO,KAAK,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG,UAAU,SAAS,OAAO;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,aAAa;AACb,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,UAAU;AAAA,EACjE;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK;AAAA,EAC5D;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,UAAU;AACV,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,EAC9D;AAAA,EACA,IAAI,SAAS;AACT,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,MAAM;AAAA,EAC7D;AAAA,EACA,IAAI,OAAO;AACP,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,IAAI;AAAA,EAC3D;AAAA,EACA,IAAI,YAAY;AACZ,QAAI,MAAM;AACV,aAAW,MAAM,KAAK,KAAK;AACvB,MAAI,GAAG,SAAS,UACR,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG;AAGrB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,YAAY;AACZ,QAAI,MAAM;AACV,aAAW,MAAM,KAAK,KAAK;AACvB,MAAI,GAAG,SAAS,UACR,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG;AAGrB,WAAO;AAAA,EACX;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,MAAI;AACJ,SAAO,IAAI,UAAU;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,SAAS,KAAqD,QAAO,YAAY,QAAQ,OAAO,SAAS,KAAK;AAAA,IAC9G,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AAEA,SAAS,mBAAmB,KAAK,MAAM;AACnC,MAAM,eAAe,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,QACnD,gBAAgB,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,QACrD,WAAW,cAAc,eAAe,cAAc,cACtD,SAAS,SAAS,IAAI,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC,GACxD,UAAU,SAAS,KAAK,QAAQ,QAAQ,EAAE,QAAQ,KAAK,EAAE,CAAC;AAChE,SAAQ,SAAS,UAAW,KAAK,IAAI,IAAI,QAAQ;AACrD;AACA,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,MAAM,KAAK,KAChB,KAAK,MAAM,KAAK,KAChB,KAAK,OAAO,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AAKV,QAJI,KAAK,KAAK,WACV,MAAM,OAAO,OAAO,MAAM,IAAI,IAEf,KAAK,SAAS,KAAK,MACnB,cAAc,QAAQ;AACrC,UAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,QAAI,KACE,SAAS,IAAI,YAAY;AAC/B,aAAW,SAAS,KAAK,KAAK;AAC1B,MAAI,MAAM,SAAS,QACV,KAAK,UAAU,MAAM,IAAI,MAC1B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,SACH,MAAM,YACjB,MAAM,OAAO,MAAM,QACnB,MAAM,QAAQ,MAAM,WAEtB,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,MAAM;AAAA,QACf,MAAM;AAAA,QACN,WAAW,MAAM;AAAA,QACjB,OAAO;AAAA,QACP,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,SACL,MAAM,YACf,MAAM,OAAO,MAAM,QACnB,MAAM,QAAQ,MAAM,WAEtB,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,MAAM;AAAA,QACf,MAAM;AAAA,QACN,WAAW,MAAM;AAAA,QACjB,OAAO;AAAA,QACP,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,eAChB,mBAAmB,MAAM,MAAM,MAAM,KAAK,MAAM,MAChD,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,YAAY,MAAM;AAAA,QAClB,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,WACf,OAAO,SAAS,MAAM,IAAI,MAC3B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAIjB,KAAK,YAAY,KAAK;AAG9B,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,EACrD;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,IAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,IAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,IAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,IAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ;AAAA,QACJ,GAAG,KAAK,KAAK;AAAA,QACb;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,SAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,OAAO,SAAS;AACZ,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,KAAK,SAAS;AACV,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,OAAO;AAAA,MACd,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC,EAAE,UAAU;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO,OAAO;AAAA,MACd,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,aAAW,MAAM,KAAK,KAAK;AACvB,MAAI,GAAG,SAAS,UACR,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG;AAGrB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,aAAW,MAAM,KAAK,KAAK;AACvB,MAAI,GAAG,SAAS,UACR,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG;AAGrB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,CAAC,OAAO,GAAG,SAAS,SAC9C,GAAG,SAAS,gBAAgB,KAAK,UAAU,GAAG,KAAK,CAAE;AAAA,EAC9D;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM,MAAM,MAAM;AACtB,aAAW,MAAM,KAAK,KAAK,QAAQ;AAC/B,UAAI,GAAG,SAAS,YACZ,GAAG,SAAS,SACZ,GAAG,SAAS;AACZ,eAAO;AAEN,MAAI,GAAG,SAAS,SACb,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG,SAER,GAAG,SAAS,UACb,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG;AAAA,IAErB;AACA,WAAO,OAAO,SAAS,GAAG,KAAK,OAAO,SAAS,GAAG;AAAA,EACtD;AACJ;AACA,UAAU,SAAS,CAAC,WACT,IAAI,UAAU;AAAA,EACjB,QAAQ,CAAC;AAAA,EACT,UAAU,sBAAsB;AAAA,EAChC,QAAyD,QAAO,UAAW;AAAA,EAC3E,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,MAAM,KAAK,KAChB,KAAK,MAAM,KAAK;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AAKV,QAJI,KAAK,KAAK,WACV,MAAM,OAAO,OAAO,MAAM,IAAI,IAEf,KAAK,SAAS,KAAK,MACnB,cAAc,QAAQ;AACrC,UAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,QAAI,KACE,SAAS,IAAI,YAAY;AAC/B,aAAW,SAAS,KAAK,KAAK;AAC1B,MAAI,MAAM,SAAS,SACE,MAAM,YACjB,MAAM,OAAO,MAAM,QACnB,MAAM,QAAQ,MAAM,WAEtB,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,MAAM;AAAA,QACf,WAAW,MAAM;AAAA,QACjB,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,SACL,MAAM,YACf,MAAM,OAAO,MAAM,QACnB,MAAM,QAAQ,MAAM,WAEtB,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,MAAM;AAAA,QACf,WAAW,MAAM;AAAA,QACjB,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,eAChB,MAAM,OAAO,MAAM,UAAU,OAAO,CAAC,MACrC,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,YAAY,MAAM;AAAA,QAClB,SAAS,MAAM;AAAA,MACnB,CAAC,GACD,OAAO,MAAM,KAIjB,KAAK,YAAY,KAAK;AAG9B,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,KAAK;AAAA,EACrD;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,IAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,IAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,IAAI,OAAO,SAAS;AAChB,WAAO,KAAK,SAAS,OAAO,OAAO,IAAM,UAAU,SAAS,OAAO,CAAC;AAAA,EACxE;AAAA,EACA,GAAG,OAAO,SAAS;AACf,WAAO,KAAK,SAAS,OAAO,OAAO,IAAO,UAAU,SAAS,OAAO,CAAC;AAAA,EACzE;AAAA,EACA,SAAS,MAAM,OAAO,WAAW,SAAS;AACtC,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ;AAAA,QACJ,GAAG,KAAK,KAAK;AAAA,QACb;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,UAAU,SAAS,OAAO;AAAA,QACvC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,YAAY,SAAS;AACjB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,OAAO,CAAC;AAAA,MACf,WAAW;AAAA,MACX,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,WAAW,OAAO,SAAS;AACvB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN;AAAA,MACA,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,aAAW,MAAM,KAAK,KAAK;AACvB,MAAI,GAAG,SAAS,UACR,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG;AAGrB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,WAAW;AACX,QAAI,MAAM;AACV,aAAW,MAAM,KAAK,KAAK;AACvB,MAAI,GAAG,SAAS,UACR,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG;AAGrB,WAAO;AAAA,EACX;AACJ;AACA,UAAU,SAAS,CAAC,WAAW;AAC3B,MAAI;AACJ,SAAO,IAAI,UAAU;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,UAAU,sBAAsB;AAAA,IAChC,SAAS,KAAqD,QAAO,YAAY,QAAQ,OAAO,SAAS,KAAK;AAAA,IAC9G,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,OAAO,OAAO;AAKV,QAJI,KAAK,KAAK,WACV,MAAM,OAAO,EAAQ,MAAM,OAEZ,KAAK,SAAS,KAAK,MACnB,cAAc,SAAS;AACtC,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,WAAW,SAAS,CAAC,WACV,IAAI,WAAW;AAAA,EAClB,UAAU,sBAAsB;AAAA,EAChC,QAAyD,QAAO,UAAW;AAAA,EAC3E,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,EAC1B,OAAO,OAAO;AAKV,QAJI,KAAK,KAAK,WACV,MAAM,OAAO,IAAI,KAAK,MAAM,IAAI,IAEjB,KAAK,SAAS,KAAK,MACnB,cAAc,MAAM;AACnC,UAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,QAAI,MAAM,MAAM,KAAK,QAAQ,CAAC,GAAG;AAC7B,UAAMA,OAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,MACvB,CAAC,GACM;AAAA,IACX;AACA,QAAM,SAAS,IAAI,YAAY,GAC3B;AACJ,aAAW,SAAS,KAAK,KAAK;AAC1B,MAAI,MAAM,SAAS,QACX,MAAM,KAAK,QAAQ,IAAI,MAAM,UAC7B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,MAAM;AAAA,QACf,WAAW;AAAA,QACX,OAAO;AAAA,QACP,SAAS,MAAM;AAAA,QACf,MAAM;AAAA,MACV,CAAC,GACD,OAAO,MAAM,KAGZ,MAAM,SAAS,QAChB,MAAM,KAAK,QAAQ,IAAI,MAAM,UAC7B,MAAM,KAAK,gBAAgB,OAAO,GAAG,GACrC,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,MAAM;AAAA,QACf,WAAW;AAAA,QACX,OAAO;AAAA,QACP,SAAS,MAAM;AAAA,QACf,MAAM;AAAA,MACV,CAAC,GACD,OAAO,MAAM,KAIjB,KAAK,YAAY,KAAK;AAG9B,WAAO;AAAA,MACH,QAAQ,OAAO;AAAA,MACf,OAAO,IAAI,KAAK,MAAM,KAAK,QAAQ,CAAC;AAAA,IACxC;AAAA,EACJ;AAAA,EACA,UAAU,OAAO;AACb,WAAO,IAAI,SAAQ;AAAA,MACf,GAAG,KAAK;AAAA,MACR,QAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,KAAK;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,QAAQ,QAAQ;AAAA,MACvB,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,MAClB,MAAM;AAAA,MACN,OAAO,QAAQ,QAAQ;AAAA,MACvB,SAAS,UAAU,SAAS,OAAO;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,IAAI,UAAU;AACV,QAAI,MAAM;AACV,aAAW,MAAM,KAAK,KAAK;AACvB,MAAI,GAAG,SAAS,UACR,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG;AAGrB,WAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,EACzC;AAAA,EACA,IAAI,UAAU;AACV,QAAI,MAAM;AACV,aAAW,MAAM,KAAK,KAAK;AACvB,MAAI,GAAG,SAAS,UACR,QAAQ,QAAQ,GAAG,QAAQ,SAC3B,MAAM,GAAG;AAGrB,WAAO,OAAO,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,EACzC;AACJ;AACA,QAAQ,SAAS,CAAC,WACP,IAAI,QAAQ;AAAA,EACf,QAAQ,CAAC;AAAA,EACT,QAAyD,QAAO,UAAW;AAAA,EAC3E,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,YAAN,cAAwB,QAAQ;AAAA,EAC5B,OAAO,OAAO;AAEV,QADmB,KAAK,SAAS,KAAK,MACnB,cAAc,QAAQ;AACrC,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,UAAU,SAAS,CAAC,WACT,IAAI,UAAU;AAAA,EACjB,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,eAAN,cAA2B,QAAQ;AAAA,EAC/B,OAAO,OAAO;AAEV,QADmB,KAAK,SAAS,KAAK,MACnB,cAAc,WAAW;AACxC,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,aAAa,SAAS,CAAC,WACZ,IAAI,aAAa;AAAA,EACpB,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,UAAN,cAAsB,QAAQ;AAAA,EAC1B,OAAO,OAAO;AAEV,QADmB,KAAK,SAAS,KAAK,MACnB,cAAc,MAAM;AACnC,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,QAAQ,SAAS,CAAC,WACP,IAAI,QAAQ;AAAA,EACf,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,SAAN,cAAqB,QAAQ;AAAA,EACzB,cAAc;AACV,UAAM,GAAG,SAAS,GAElB,KAAK,OAAO;AAAA,EAChB;AAAA,EACA,OAAO,OAAO;AACV,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,OAAO,SAAS,CAAC,WACN,IAAI,OAAO;AAAA,EACd,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,cAAc;AACV,UAAM,GAAG,SAAS,GAElB,KAAK,WAAW;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACV,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,WAAW,SAAS,CAAC,WACV,IAAI,WAAW;AAAA,EAClB,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,WAAN,cAAuB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,QAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,6BAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,UAAU,cAAc;AAAA,MACxB,UAAU,IAAI;AAAA,IAClB,CAAC,GACM;AAAA,EACX;AACJ;AACA,SAAS,SAAS,CAAC,WACR,IAAI,SAAS;AAAA,EAChB,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,UAAN,cAAsB,QAAQ;AAAA,EAC1B,OAAO,OAAO;AAEV,QADmB,KAAK,SAAS,KAAK,MACnB,cAAc,WAAW;AACxC,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AACJ;AACA,QAAQ,SAAS,CAAC,WACP,IAAI,QAAQ;AAAA,EACf,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,QAAM,EAAE,KAAK,OAAO,IAAI,KAAK,oBAAoB,KAAK,GAChD,MAAM,KAAK;AACjB,QAAI,IAAI,eAAe,cAAc;AACjC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAEX,QAAI,IAAI,gBAAgB,MAAM;AAC1B,UAAM,SAAS,IAAI,KAAK,SAAS,IAAI,YAAY,OAC3C,WAAW,IAAI,KAAK,SAAS,IAAI,YAAY;AACnD,OAAI,UAAU,cACV,kBAAkB,KAAK;AAAA,QACnB,MAAM,SAAS,aAAa,UAAU,aAAa;AAAA,QACnD,SAAU,WAAW,IAAI,YAAY,QAAQ;AAAA,QAC7C,SAAU,SAAS,IAAI,YAAY,QAAQ;AAAA,QAC3C,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,QACP,SAAS,IAAI,YAAY;AAAA,MAC7B,CAAC,GACD,OAAO,MAAM;AAAA,IAErB;AA2BA,QA1BI,IAAI,cAAc,QACd,IAAI,KAAK,SAAS,IAAI,UAAU,UAChC,kBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,SAAS,IAAI,UAAU;AAAA,MACvB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAAS,IAAI,UAAU;AAAA,IAC3B,CAAC,GACD,OAAO,MAAM,IAGjB,IAAI,cAAc,QACd,IAAI,KAAK,SAAS,IAAI,UAAU,UAChC,kBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,SAAS,IAAI,UAAU;AAAA,MACvB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAAS,IAAI,UAAU;AAAA,IAC3B,CAAC,GACD,OAAO,MAAM,IAGjB,IAAI,OAAO;AACX,aAAO,QAAQ,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,MACjC,IAAI,KAAK,YAAY,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC,CAC7E,CAAC,EAAE,KAAK,CAACC,YACC,YAAY,WAAW,QAAQA,OAAM,CAC/C;AAEL,QAAM,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,MAC7B,IAAI,KAAK,WAAW,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC,CAC5E;AACD,WAAO,YAAY,WAAW,QAAQ,MAAM;AAAA,EAChD;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACxE,CAAC;AAAA,EACL;AAAA,EACA,IAAI,WAAW,SAAS;AACpB,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,WAAW,EAAE,OAAO,WAAW,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACxE,CAAC;AAAA,EACL;AAAA,EACA,OAAO,KAAK,SAAS;AACjB,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR,aAAa,EAAE,OAAO,KAAK,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACpE,CAAC;AAAA,EACL;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,IAAI,GAAG,OAAO;AAAA,EAC9B;AACJ;AACA,SAAS,SAAS,CAAC,QAAQ,WAChB,IAAI,SAAS;AAAA,EAChB,MAAM;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,SAAS,eAAe,QAAQ;AAC5B,MAAI,kBAAkB,WAAW;AAC7B,QAAM,WAAW,CAAC;AAClB,aAAW,OAAO,OAAO,OAAO;AAC5B,UAAM,cAAc,OAAO,MAAM,GAAG;AACpC,eAAS,GAAG,IAAI,YAAY,OAAO,eAAe,WAAW,CAAC;AAAA,IAClE;AACA,WAAO,IAAI,UAAU;AAAA,MACjB,GAAG,OAAO;AAAA,MACV,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL,MACK,QAAI,kBAAkB,WAChB,IAAI,SAAS;AAAA,IAChB,GAAG,OAAO;AAAA,IACV,MAAM,eAAe,OAAO,OAAO;AAAA,EACvC,CAAC,IAEI,kBAAkB,cAChB,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC,IAEpD,kBAAkB,cAChB,YAAY,OAAO,eAAe,OAAO,OAAO,CAAC,CAAC,IAEpD,kBAAkB,WAChB,SAAS,OAAO,OAAO,MAAM,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,CAAC,IAGhE;AAEf;AACA,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,UAAU,MAKf,KAAK,YAAY,KAAK,aAqCtB,KAAK,UAAU,KAAK;AAAA,EACxB;AAAA,EACA,aAAa;AACT,QAAI,KAAK,YAAY;AACjB,aAAO,KAAK;AAChB,QAAM,QAAQ,KAAK,KAAK,MAAM,GACxB,OAAO,KAAK,WAAW,KAAK;AAClC,WAAQ,KAAK,UAAU,EAAE,OAAO,KAAK;AAAA,EACzC;AAAA,EACA,OAAO,OAAO;AAEV,QADmB,KAAK,SAAS,KAAK,MACnB,cAAc,QAAQ;AACrC,UAAMD,OAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkBA,MAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAUA,KAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,QAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK,GAChD,EAAE,OAAO,MAAM,UAAU,IAAI,KAAK,WAAW,GAC7C,YAAY,CAAC;AACnB,QAAI,EAAE,KAAK,KAAK,oBAAoB,YAChC,KAAK,KAAK,gBAAgB;AAC1B,eAAW,OAAO,IAAI;AAClB,QAAK,UAAU,SAAS,GAAG,KACvB,UAAU,KAAK,GAAG;AAI9B,QAAM,QAAQ,CAAC;AACf,aAAW,OAAO,WAAW;AACzB,UAAM,eAAe,MAAM,GAAG,GACxB,QAAQ,IAAI,KAAK,GAAG;AAC1B,YAAM,KAAK;AAAA,QACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,QACnC,OAAO,aAAa,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG,CAAC;AAAA,QAC5E,WAAW,OAAO,IAAI;AAAA,MAC1B,CAAC;AAAA,IACL;AACA,QAAI,KAAK,KAAK,oBAAoB,UAAU;AACxC,UAAM,cAAc,KAAK,KAAK;AAC9B,UAAI,gBAAgB;AAChB,iBAAW,OAAO;AACd,gBAAM,KAAK;AAAA,YACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,YACnC,OAAO,EAAE,QAAQ,SAAS,OAAO,IAAI,KAAK,GAAG,EAAE;AAAA,UACnD,CAAC;AAAA,eAGA,gBAAgB;AACrB,QAAI,UAAU,SAAS,MACnB,kBAAkB,KAAK;AAAA,UACnB,MAAM,aAAa;AAAA,UACnB,MAAM;AAAA,QACV,CAAC,GACD,OAAO,MAAM;AAAA,eAGZ,gBAAgB,QAErB,OAAM,IAAI,MAAM,sDAAsD;AAAA,IAE9E,OACK;AAED,UAAM,WAAW,KAAK,KAAK;AAC3B,eAAW,OAAO,WAAW;AACzB,YAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,cAAM,KAAK;AAAA,UACP,KAAK,EAAE,QAAQ,SAAS,OAAO,IAAI;AAAA,UACnC,OAAO,SAAS;AAAA,YAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,GAAG;AAAA;AAAA,UACvE;AAAA,UACA,WAAW,OAAO,IAAI;AAAA,QAC1B,CAAC;AAAA,MACL;AAAA,IACJ;AACA,WAAI,IAAI,OAAO,QACJ,QAAQ,QAAQ,EAClB,KAAK,YAAY;AAClB,UAAM,YAAY,CAAC;AACnB,eAAW,QAAQ,OAAO;AACtB,YAAM,MAAM,MAAM,KAAK;AACvB,kBAAU,KAAK;AAAA,UACX;AAAA,UACA,OAAO,MAAM,KAAK;AAAA,UAClB,WAAW,KAAK;AAAA,QACpB,CAAC;AAAA,MACL;AACA,aAAO;AAAA,IACX,CAAC,EACI,KAAK,CAAC,cACA,YAAY,gBAAgB,QAAQ,SAAS,CACvD,IAGM,YAAY,gBAAgB,QAAQ,KAAK;AAAA,EAExD;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK,MAAM;AAAA,EAC3B;AAAA,EACA,OAAO,SAAS;AACZ,qBAAU,UACH,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,MACb,GAAI,YAAY,SACV;AAAA,QACE,UAAU,CAAC,OAAO,QAAQ;AACtB,cAAI,IAAI,IAAI,IAAI;AAChB,cAAM,gBAAgB,MAAM,MAAM,KAAK,KAAK,MAAM,cAAc,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,IAAI,OAAO,GAAG,EAAE,aAAa,QAAQ,OAAO,SAAS,KAAK,IAAI;AACvK,iBAAI,MAAM,SAAS,sBACR;AAAA,YACH,UAAU,KAAK,UAAU,SAAS,OAAO,EAAE,aAAa,QAAQ,OAAO,SAAS,KAAK;AAAA,UACzF,IACG;AAAA,YACH,SAAS;AAAA,UACb;AAAA,QACJ;AAAA,MACJ,IACE,CAAC;AAAA,IACX,CAAC;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,cAAc;AACV,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,cAAc;AACjB,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,OAAO;AAAA,QACV,GAAG,KAAK,KAAK,MAAM;AAAA,QACnB,GAAG;AAAA,MACP;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS;AAUX,WATe,IAAI,WAAU;AAAA,MACzB,aAAa,QAAQ,KAAK;AAAA,MAC1B,UAAU,QAAQ,KAAK;AAAA,MACvB,OAAO,OAAO;AAAA,QACV,GAAG,KAAK,KAAK,MAAM;AAAA,QACnB,GAAG,QAAQ,KAAK,MAAM;AAAA,MAC1B;AAAA,MACA,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoCA,OAAO,KAAK,QAAQ;AAChB,WAAO,KAAK,QAAQ,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,SAAS,OAAO;AACZ,WAAO,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,UAAU;AAAA,IACd,CAAC;AAAA,EACL;AAAA,EACA,KAAK,MAAM;AACP,QAAM,QAAQ,CAAC;AACf,gBAAK,WAAW,IAAI,EAAE,QAAQ,CAAC,QAAQ;AACnC,MAAI,KAAK,GAAG,KAAK,KAAK,MAAM,GAAG,MAC3B,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,IAEnC,CAAC,GACM,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,KAAK,MAAM;AACP,QAAM,QAAQ,CAAC;AACf,gBAAK,WAAW,KAAK,KAAK,EAAE,QAAQ,CAAC,QAAQ;AACzC,MAAK,KAAK,GAAG,MACT,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,IAEnC,CAAC,GACM,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,cAAc;AACV,WAAO,eAAe,IAAI;AAAA,EAC9B;AAAA,EACA,QAAQ,MAAM;AACV,QAAM,WAAW,CAAC;AAClB,gBAAK,WAAW,KAAK,KAAK,EAAE,QAAQ,CAAC,QAAQ;AACzC,UAAM,cAAc,KAAK,MAAM,GAAG;AAClC,MAAI,QAAQ,CAAC,KAAK,GAAG,IACjB,SAAS,GAAG,IAAI,cAGhB,SAAS,GAAG,IAAI,YAAY,SAAS;AAAA,IAE7C,CAAC,GACM,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,SAAS,MAAM;AACX,QAAM,WAAW,CAAC;AAClB,gBAAK,WAAW,KAAK,KAAK,EAAE,QAAQ,CAAC,QAAQ;AACzC,UAAI,QAAQ,CAAC,KAAK,GAAG;AACjB,iBAAS,GAAG,IAAI,KAAK,MAAM,GAAG;AAAA,WAE7B;AAED,YAAI,WADgB,KAAK,MAAM,GAAG;AAElC,eAAO,oBAAoB;AACvB,qBAAW,SAAS,KAAK;AAE7B,iBAAS,GAAG,IAAI;AAAA,MACpB;AAAA,IACJ,CAAC,GACM,IAAI,WAAU;AAAA,MACjB,GAAG,KAAK;AAAA,MACR,OAAO,MAAM;AAAA,IACjB,CAAC;AAAA,EACL;AAAA,EACA,QAAQ;AACJ,WAAO,cAAc,KAAK,WAAW,KAAK,KAAK,CAAC;AAAA,EACpD;AACJ;AACA,UAAU,SAAS,CAAC,OAAO,WAChB,IAAI,UAAU;AAAA,EACjB,OAAO,MAAM;AAAA,EACb,aAAa;AAAA,EACb,UAAU,SAAS,OAAO;AAAA,EAC1B,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,UAAU,eAAe,CAAC,OAAO,WACtB,IAAI,UAAU;AAAA,EACjB,OAAO,MAAM;AAAA,EACb,aAAa;AAAA,EACb,UAAU,SAAS,OAAO;AAAA,EAC1B,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,UAAU,aAAa,CAAC,OAAO,WACpB,IAAI,UAAU;AAAA,EACjB;AAAA,EACA,aAAa;AAAA,EACb,UAAU,SAAS,OAAO;AAAA,EAC1B,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,WAAN,cAAuB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,QAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK,GACxC,UAAU,KAAK,KAAK;AAC1B,aAAS,cAAc,SAAS;AAE5B,eAAW,UAAU;AACjB,YAAI,OAAO,OAAO,WAAW;AACzB,iBAAO,OAAO;AAGtB,eAAW,UAAU;AACjB,YAAI,OAAO,OAAO,WAAW;AAEzB,qBAAI,OAAO,OAAO,KAAK,GAAG,OAAO,IAAI,OAAO,MAAM,GAC3C,OAAO;AAItB,UAAM,cAAc,QAAQ,IAAI,CAAC,WAAW,IAAI,SAAS,OAAO,IAAI,OAAO,MAAM,CAAC;AAClF,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB;AAAA,MACJ,CAAC,GACM;AAAA,IACX;AACA,QAAI,IAAI,OAAO;AACX,aAAO,QAAQ,IAAI,QAAQ,IAAI,OAAO,WAAW;AAC7C,YAAM,WAAW;AAAA,UACb,GAAG;AAAA,UACH,QAAQ;AAAA,YACJ,GAAG,IAAI;AAAA,YACP,QAAQ,CAAC;AAAA,UACb;AAAA,UACA,QAAQ;AAAA,QACZ;AACA,eAAO;AAAA,UACH,QAAQ,MAAM,OAAO,YAAY;AAAA,YAC7B,MAAM,IAAI;AAAA,YACV,MAAM,IAAI;AAAA,YACV,QAAQ;AAAA,UACZ,CAAC;AAAA,UACD,KAAK;AAAA,QACT;AAAA,MACJ,CAAC,CAAC,EAAE,KAAK,aAAa;AAErB;AACD,UAAI,OACE,SAAS,CAAC;AAChB,eAAW,UAAU,SAAS;AAC1B,YAAM,WAAW;AAAA,UACb,GAAG;AAAA,UACH,QAAQ;AAAA,YACJ,GAAG,IAAI;AAAA,YACP,QAAQ,CAAC;AAAA,UACb;AAAA,UACA,QAAQ;AAAA,QACZ,GACM,SAAS,OAAO,WAAW;AAAA,UAC7B,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,OAAO,WAAW;AAClB,iBAAO;AAEN,QAAI,OAAO,WAAW,WAAW,CAAC,UACnC,QAAQ,EAAE,QAAQ,KAAK,SAAS,IAEhC,SAAS,OAAO,OAAO,UACvB,OAAO,KAAK,SAAS,OAAO,MAAM;AAAA,MAE1C;AACA,UAAI;AACA,mBAAI,OAAO,OAAO,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM,GAC1C,MAAM;AAEjB,UAAM,cAAc,OAAO,IAAI,CAACE,YAAW,IAAI,SAASA,OAAM,CAAC;AAC/D,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB;AAAA,MACJ,CAAC,GACM;AAAA,IACX;AAAA,EACJ;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,SAAS,SAAS,CAAC,OAAO,WACf,IAAI,SAAS;AAAA,EAChB,SAAS;AAAA,EACT,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AASL,IAAM,mBAAmB,CAAC,SAClB,gBAAgB,UACT,iBAAiB,KAAK,MAAM,IAE9B,gBAAgB,aACd,iBAAiB,KAAK,UAAU,CAAC,IAEnC,gBAAgB,aACd,CAAC,KAAK,KAAK,IAEb,gBAAgB,UACd,KAAK,UAEP,gBAAgB,gBAEd,OAAO,KAAK,KAAK,IAAI,IAEvB,gBAAgB,aACd,iBAAiB,KAAK,KAAK,SAAS,IAEtC,gBAAgB,eACd,CAAC,MAAS,IAEZ,gBAAgB,UACd,CAAC,IAAI,IAGL,MAGT,wBAAN,MAAM,+BAA8B,QAAQ;AAAA,EACxC,OAAO,OAAO;AACV,QAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,IAAI,eAAe,cAAc;AACjC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAEX,QAAM,gBAAgB,KAAK,eACrB,qBAAqB,IAAI,KAAK,aAAa,GAC3C,SAAS,KAAK,WAAW,IAAI,kBAAkB;AACrD,WAAK,SAQD,IAAI,OAAO,QACJ,OAAO,YAAY;AAAA,MACtB,MAAM,IAAI;AAAA,MACV,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC,IAGM,OAAO,WAAW;AAAA,MACrB,MAAM,IAAI;AAAA,MACV,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC,KAnBD,kBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,SAAS,MAAM,KAAK,KAAK,WAAW,KAAK,CAAC;AAAA,MAC1C,MAAM,CAAC,aAAa;AAAA,IACxB,CAAC,GACM;AAAA,EAgBf;AAAA,EACA,IAAI,gBAAgB;AAChB,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,OAAO,eAAe,SAAS,QAAQ;AAE1C,QAAM,aAAa,oBAAI,IAAI;AAE3B,aAAW,QAAQ,SAAS;AACxB,UAAM,sBAAsB,iBAAiB,KAAK,MAAM,aAAa,CAAC;AACtE,UAAI,CAAC;AACD,cAAM,IAAI,MAAM,mCAAmC,aAAa,mDAAmD;AAEvH,eAAW,SAAS,qBAAqB;AACrC,YAAI,WAAW,IAAI,KAAK;AACpB,gBAAM,IAAI,MAAM,0BAA0B,OAAO,aAAa,CAAC,wBAAwB,OAAO,KAAK,CAAC,EAAE;AAE1G,mBAAW,IAAI,OAAO,IAAI;AAAA,MAC9B;AAAA,IACJ;AACA,WAAO,IAAI,uBAAsB;AAAA,MAC7B,UAAU,sBAAsB;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,oBAAoB,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AACJ;AACA,SAAS,YAAY,GAAG,GAAG;AACvB,MAAM,QAAQ,cAAc,CAAC,GACvB,QAAQ,cAAc,CAAC;AAC7B,MAAI,MAAM;AACN,WAAO,EAAE,OAAO,IAAM,MAAM,EAAE;AAE7B,MAAI,UAAU,cAAc,UAAU,UAAU,cAAc,QAAQ;AACvE,QAAM,QAAQ,KAAK,WAAW,CAAC,GACzB,aAAa,KACd,WAAW,CAAC,EACZ,OAAO,CAAC,QAAQ,MAAM,QAAQ,GAAG,MAAM,EAAE,GACxC,SAAS,EAAE,GAAG,GAAG,GAAG,EAAE;AAC5B,aAAW,OAAO,YAAY;AAC1B,UAAM,cAAc,YAAY,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;AAC9C,UAAI,CAAC,YAAY;AACb,eAAO,EAAE,OAAO,GAAM;AAE1B,aAAO,GAAG,IAAI,YAAY;AAAA,IAC9B;AACA,WAAO,EAAE,OAAO,IAAM,MAAM,OAAO;AAAA,EACvC,WACS,UAAU,cAAc,SAAS,UAAU,cAAc,OAAO;AACrE,QAAI,EAAE,WAAW,EAAE;AACf,aAAO,EAAE,OAAO,GAAM;AAE1B,QAAM,WAAW,CAAC;AAClB,aAAS,QAAQ,GAAG,QAAQ,EAAE,QAAQ,SAAS;AAC3C,UAAM,QAAQ,EAAE,KAAK,GACf,QAAQ,EAAE,KAAK,GACf,cAAc,YAAY,OAAO,KAAK;AAC5C,UAAI,CAAC,YAAY;AACb,eAAO,EAAE,OAAO,GAAM;AAE1B,eAAS,KAAK,YAAY,IAAI;AAAA,IAClC;AACA,WAAO,EAAE,OAAO,IAAM,MAAM,SAAS;AAAA,EACzC,MACK,QAAI,UAAU,cAAc,QAC7B,UAAU,cAAc,QACxB,CAAC,KAAM,CAAC,IACD,EAAE,OAAO,IAAM,MAAM,EAAE,IAGvB,EAAE,OAAO,GAAM;AAE9B;AACA,IAAM,kBAAN,cAA8B,QAAQ;AAAA,EAClC,OAAO,OAAO;AACV,QAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK,GAChD,eAAe,CAAC,YAAY,gBAAgB;AAC9C,UAAI,UAAU,UAAU,KAAK,UAAU,WAAW;AAC9C,eAAO;AAEX,UAAM,SAAS,YAAY,WAAW,OAAO,YAAY,KAAK;AAC9D,aAAK,OAAO,UAMR,QAAQ,UAAU,KAAK,QAAQ,WAAW,MAC1C,OAAO,MAAM,GAEV,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,KAAK,MAR9C,kBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,MACvB,CAAC,GACM;AAAA,IAMf;AACA,WAAI,IAAI,OAAO,QACJ,QAAQ,IAAI;AAAA,MACf,KAAK,KAAK,KAAK,YAAY;AAAA,QACvB,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AAAA,MACD,KAAK,KAAK,MAAM,YAAY;AAAA,QACxB,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AAAA,IACL,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,aAAa,MAAM,KAAK,CAAC,IAG7C,aAAa,KAAK,KAAK,KAAK,WAAW;AAAA,MAC1C,MAAM,IAAI;AAAA,MACV,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC,GAAG,KAAK,KAAK,MAAM,WAAW;AAAA,MAC3B,MAAM,IAAI;AAAA,MACV,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC,CAAC;AAAA,EAEV;AACJ;AACA,gBAAgB,SAAS,CAAC,MAAM,OAAO,WAC5B,IAAI,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,WAAN,MAAM,kBAAiB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,QAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc;AACjC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAEX,QAAI,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM;AAClC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,SAAS,KAAK,KAAK,MAAM;AAAA,QACzB,WAAW;AAAA,QACX,OAAO;AAAA,QACP,MAAM;AAAA,MACV,CAAC,GACM;AAGX,IAAI,CADS,KAAK,KAAK,QACV,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,WAC3C,kBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,SAAS,KAAK,KAAK,MAAM;AAAA,MACzB,WAAW;AAAA,MACX,OAAO;AAAA,MACP,MAAM;AAAA,IACV,CAAC,GACD,OAAO,MAAM;AAEjB,QAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,EACrB,IAAI,CAAC,MAAM,cAAc;AAC1B,UAAM,SAAS,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,KAAK;AACvD,aAAK,SAEE,OAAO,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,SAAS,CAAC,IADhE;AAAA,IAEf,CAAC,EACI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtB,WAAI,IAAI,OAAO,QACJ,QAAQ,IAAI,KAAK,EAAE,KAAK,CAAC,YACrB,YAAY,WAAW,QAAQ,OAAO,CAChD,IAGM,YAAY,WAAW,QAAQ,KAAK;AAAA,EAEnD;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,KAAK,MAAM;AACP,WAAO,IAAI,UAAS;AAAA,MAChB,GAAG,KAAK;AAAA,MACR;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;AACA,SAAS,SAAS,CAAC,SAAS,WAAW;AACnC,MAAI,CAAC,MAAM,QAAQ,OAAO;AACtB,UAAM,IAAI,MAAM,uDAAuD;AAE3E,SAAO,IAAI,SAAS;AAAA,IAChB,OAAO;AAAA,IACP,UAAU,sBAAsB;AAAA,IAChC,MAAM;AAAA,IACN,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,YAAN,MAAM,mBAAkB,QAAQ;AAAA,EAC5B,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,QAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc;AACjC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAEX,QAAM,QAAQ,CAAC,GACT,UAAU,KAAK,KAAK,SACpB,YAAY,KAAK,KAAK;AAC5B,aAAW,OAAO,IAAI;AAClB,YAAM,KAAK;AAAA,QACP,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,GAAG,CAAC;AAAA,QACnE,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,IAAI,KAAK,GAAG,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,MACrF,CAAC;AAEL,WAAI,IAAI,OAAO,QACJ,YAAY,iBAAiB,QAAQ,KAAK,IAG1C,YAAY,gBAAgB,QAAQ,KAAK;AAAA,EAExD;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO,OAAO,QAAQ,OAAO;AAChC,WAAI,kBAAkB,UACX,IAAI,WAAU;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU,sBAAsB;AAAA,MAChC,GAAG,oBAAoB,KAAK;AAAA,IAChC,CAAC,IAEE,IAAI,WAAU;AAAA,MACjB,SAAS,UAAU,OAAO;AAAA,MAC1B,WAAW;AAAA,MACX,UAAU,sBAAsB;AAAA,MAChC,GAAG,oBAAoB,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AACJ,GACM,SAAN,cAAqB,QAAQ;AAAA,EACzB,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,cAAc;AACd,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,QAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc;AACjC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAEX,QAAM,UAAU,KAAK,KAAK,SACpB,YAAY,KAAK,KAAK,WACtB,QAAQ,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,WAC9C;AAAA,MACH,KAAK,QAAQ,OAAO,IAAI,mBAAmB,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;AAAA,MAC9E,OAAO,UAAU,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC;AAAA,IAC1F,EACH;AACD,QAAI,IAAI,OAAO,OAAO;AAClB,UAAM,WAAW,oBAAI,IAAI;AACzB,aAAO,QAAQ,QAAQ,EAAE,KAAK,YAAY;AACtC,iBAAW,QAAQ,OAAO;AACtB,cAAM,MAAM,MAAM,KAAK,KACjB,QAAQ,MAAM,KAAK;AACzB,cAAI,IAAI,WAAW,aAAa,MAAM,WAAW;AAC7C,mBAAO;AAEX,WAAI,IAAI,WAAW,WAAW,MAAM,WAAW,YAC3C,OAAO,MAAM,GAEjB,SAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,QACvC;AACA,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,MACnD,CAAC;AAAA,IACL,OACK;AACD,UAAM,WAAW,oBAAI,IAAI;AACzB,eAAW,QAAQ,OAAO;AACtB,YAAM,MAAM,KAAK,KACX,QAAQ,KAAK;AACnB,YAAI,IAAI,WAAW,aAAa,MAAM,WAAW;AAC7C,iBAAO;AAEX,SAAI,IAAI,WAAW,WAAW,MAAM,WAAW,YAC3C,OAAO,MAAM,GAEjB,SAAS,IAAI,IAAI,OAAO,MAAM,KAAK;AAAA,MACvC;AACA,aAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,IACnD;AAAA,EACJ;AACJ;AACA,OAAO,SAAS,CAAC,SAAS,WAAW,WAC1B,IAAI,OAAO;AAAA,EACd;AAAA,EACA;AAAA,EACA,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,SAAN,MAAM,gBAAe,QAAQ;AAAA,EACzB,OAAO,OAAO;AACV,QAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc;AACjC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAEX,QAAM,MAAM,KAAK;AACjB,IAAI,IAAI,YAAY,QACZ,IAAI,KAAK,OAAO,IAAI,QAAQ,UAC5B,kBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,SAAS,IAAI,QAAQ;AAAA,MACrB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAAS,IAAI,QAAQ;AAAA,IACzB,CAAC,GACD,OAAO,MAAM,IAGjB,IAAI,YAAY,QACZ,IAAI,KAAK,OAAO,IAAI,QAAQ,UAC5B,kBAAkB,KAAK;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,SAAS,IAAI,QAAQ;AAAA,MACrB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAAS,IAAI,QAAQ;AAAA,IACzB,CAAC,GACD,OAAO,MAAM;AAGrB,QAAM,YAAY,KAAK,KAAK;AAC5B,aAAS,YAAYC,WAAU;AAC3B,UAAM,YAAY,oBAAI,IAAI;AAC1B,eAAW,WAAWA,WAAU;AAC5B,YAAI,QAAQ,WAAW;AACnB,iBAAO;AACX,QAAI,QAAQ,WAAW,WACnB,OAAO,MAAM,GACjB,UAAU,IAAI,QAAQ,KAAK;AAAA,MAC/B;AACA,aAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,UAAU;AAAA,IACpD;AACA,QAAM,WAAW,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,MAAM,UAAU,OAAO,IAAI,mBAAmB,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AACzH,WAAI,IAAI,OAAO,QACJ,QAAQ,IAAI,QAAQ,EAAE,KAAK,CAACA,cAAa,YAAYA,SAAQ,CAAC,IAG9D,YAAY,QAAQ;AAAA,EAEnC;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,IAAI,QAAO;AAAA,MACd,GAAG,KAAK;AAAA,MACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACpE,CAAC;AAAA,EACL;AAAA,EACA,IAAI,SAAS,SAAS;AAClB,WAAO,IAAI,QAAO;AAAA,MACd,GAAG,KAAK;AAAA,MACR,SAAS,EAAE,OAAO,SAAS,SAAS,UAAU,SAAS,OAAO,EAAE;AAAA,IACpE,CAAC;AAAA,EACL;AAAA,EACA,KAAK,MAAM,SAAS;AAChB,WAAO,KAAK,IAAI,MAAM,OAAO,EAAE,IAAI,MAAM,OAAO;AAAA,EACpD;AAAA,EACA,SAAS,SAAS;AACd,WAAO,KAAK,IAAI,GAAG,OAAO;AAAA,EAC9B;AACJ;AACA,OAAO,SAAS,CAAC,WAAW,WACjB,IAAI,OAAO;AAAA,EACd;AAAA,EACA,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,EAC9B,cAAc;AACV,UAAM,GAAG,SAAS,GAClB,KAAK,WAAW,KAAK;AAAA,EACzB;AAAA,EACA,OAAO,OAAO;AACV,QAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,IAAI,eAAe,cAAc;AACjC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAEX,aAAS,cAAc,MAAM,OAAO;AAChC,aAAO,UAAU;AAAA,QACb,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,WAAW;AAAA,UACP,IAAI,OAAO;AAAA,UACX,IAAI;AAAA,UACJ,YAAY;AAAA,UACZ;AAAA,QACJ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QACnB,WAAW;AAAA,UACP,MAAM,aAAa;AAAA,UACnB,gBAAgB;AAAA,QACpB;AAAA,MACJ,CAAC;AAAA,IACL;AACA,aAAS,iBAAiB,SAAS,OAAO;AACtC,aAAO,UAAU;AAAA,QACb,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,WAAW;AAAA,UACP,IAAI,OAAO;AAAA,UACX,IAAI;AAAA,UACJ,YAAY;AAAA,UACZ;AAAA,QACJ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QACnB,WAAW;AAAA,UACP,MAAM,aAAa;AAAA,UACnB,iBAAiB;AAAA,QACrB;AAAA,MACJ,CAAC;AAAA,IACL;AACA,QAAM,SAAS,EAAE,UAAU,IAAI,OAAO,mBAAmB,GACnD,KAAK,IAAI;AACf,QAAI,KAAK,KAAK,mBAAmB,YAAY;AAIzC,UAAM,KAAK;AACX,aAAO,GAAG,kBAAmB,MAAM;AAC/B,YAAM,QAAQ,IAAI,SAAS,CAAC,CAAC,GACvB,aAAa,MAAM,GAAG,KAAK,KAC5B,WAAW,MAAM,MAAM,EACvB,MAAM,CAAC,MAAM;AACd,sBAAM,SAAS,cAAc,MAAM,CAAC,CAAC,GAC/B;AAAA,QACV,CAAC,GACK,SAAS,MAAM,QAAQ,MAAM,IAAI,MAAM,UAAU;AAOvD,eANsB,MAAM,GAAG,KAAK,QAAQ,KAAK,KAC5C,WAAW,QAAQ,MAAM,EACzB,MAAM,CAAC,MAAM;AACd,sBAAM,SAAS,iBAAiB,QAAQ,CAAC,CAAC,GACpC;AAAA,QACV,CAAC;AAAA,MAEL,CAAC;AAAA,IACL,OACK;AAID,UAAM,KAAK;AACX,aAAO,GAAG,YAAa,MAAM;AACzB,YAAM,aAAa,GAAG,KAAK,KAAK,UAAU,MAAM,MAAM;AACtD,YAAI,CAAC,WAAW;AACZ,gBAAM,IAAI,SAAS,CAAC,cAAc,MAAM,WAAW,KAAK,CAAC,CAAC;AAE9D,YAAM,SAAS,QAAQ,MAAM,IAAI,MAAM,WAAW,IAAI,GAChD,gBAAgB,GAAG,KAAK,QAAQ,UAAU,QAAQ,MAAM;AAC9D,YAAI,CAAC,cAAc;AACf,gBAAM,IAAI,SAAS,CAAC,iBAAiB,QAAQ,cAAc,KAAK,CAAC,CAAC;AAEtE,eAAO,cAAc;AAAA,MACzB,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,QAAQ,OAAO;AACX,WAAO,IAAI,aAAY;AAAA,MACnB,GAAG,KAAK;AAAA,MACR,MAAM,SAAS,OAAO,KAAK,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,IACzD,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,YAAY;AAChB,WAAO,IAAI,aAAY;AAAA,MACnB,GAAG,KAAK;AAAA,MACR,SAAS;AAAA,IACb,CAAC;AAAA,EACL;AAAA,EACA,UAAU,MAAM;AAEZ,WADsB,KAAK,MAAM,IAAI;AAAA,EAEzC;AAAA,EACA,gBAAgB,MAAM;AAElB,WADsB,KAAK,MAAM,IAAI;AAAA,EAEzC;AAAA,EACA,OAAO,OAAO,MAAM,SAAS,QAAQ;AACjC,WAAO,IAAI,aAAY;AAAA,MACnB,MAAO,QAED,SAAS,OAAO,CAAC,CAAC,EAAE,KAAK,WAAW,OAAO,CAAC;AAAA,MAClD,SAAS,WAAW,WAAW,OAAO;AAAA,MACtC,UAAU,sBAAsB;AAAA,MAChC,GAAG,oBAAoB,MAAM;AAAA,IACjC,CAAC;AAAA,EACL;AACJ,GACM,UAAN,cAAsB,QAAQ;AAAA,EAC1B,IAAI,SAAS;AACT,WAAO,KAAK,KAAK,OAAO;AAAA,EAC5B;AAAA,EACA,OAAO,OAAO;AACV,QAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAE9C,WADmB,KAAK,KAAK,OAAO,EAClB,OAAO,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC;AAAA,EAC5E;AACJ;AACA,QAAQ,SAAS,CAAC,QAAQ,WACf,IAAI,QAAQ;AAAA,EACf;AAAA,EACA,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,OAAO,OAAO;AACV,QAAI,MAAM,SAAS,KAAK,KAAK,OAAO;AAChC,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkB,KAAK;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,UAAU,KAAK,KAAK;AAAA,MACxB,CAAC,GACM;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,EAChD;AAAA,EACA,IAAI,QAAQ;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,WAAW,SAAS,CAAC,OAAO,WACjB,IAAI,WAAW;AAAA,EAClB;AAAA,EACA,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,SAAS,cAAc,QAAQ,QAAQ;AACnC,SAAO,IAAI,QAAQ;AAAA,IACf;AAAA,IACA,UAAU,sBAAsB;AAAA,IAChC,GAAG,oBAAoB,MAAM;AAAA,EACjC,CAAC;AACL;AACA,IAAM,UAAN,MAAM,iBAAgB,QAAQ;AAAA,EAC1B,OAAO,OAAO;AACV,QAAI,OAAO,MAAM,QAAS,UAAU;AAChC,UAAM,MAAM,KAAK,gBAAgB,KAAK,GAChC,iBAAiB,KAAK,KAAK;AACjC,+BAAkB,KAAK;AAAA,QACnB,UAAU,KAAK,WAAW,cAAc;AAAA,QACxC,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,MACvB,CAAC,GACM;AAAA,IACX;AACA,QAAI,KAAK,KAAK,OAAO,QAAQ,MAAM,IAAI,MAAM,IAAI;AAC7C,UAAM,MAAM,KAAK,gBAAgB,KAAK,GAChC,iBAAiB,KAAK,KAAK;AACjC,+BAAkB,KAAK;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,SAAS;AAAA,MACb,CAAC,GACM;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AAAA,EACA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,IAAI,OAAO;AACP,QAAM,aAAa,CAAC;AACpB,aAAW,OAAO,KAAK,KAAK;AACxB,iBAAW,GAAG,IAAI;AAEtB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,SAAS;AACT,QAAM,aAAa,CAAC;AACpB,aAAW,OAAO,KAAK,KAAK;AACxB,iBAAW,GAAG,IAAI;AAEtB,WAAO;AAAA,EACX;AAAA,EACA,IAAI,OAAO;AACP,QAAM,aAAa,CAAC;AACpB,aAAW,OAAO,KAAK,KAAK;AACxB,iBAAW,GAAG,IAAI;AAEtB,WAAO;AAAA,EACX;AAAA,EACA,QAAQ,QAAQ;AACZ,WAAO,SAAQ,OAAO,MAAM;AAAA,EAChC;AAAA,EACA,QAAQ,QAAQ;AACZ,WAAO,SAAQ,OAAO,KAAK,QAAQ,OAAO,CAAC,QAAQ,CAAC,OAAO,SAAS,GAAG,CAAC,CAAC;AAAA,EAC7E;AACJ;AACA,QAAQ,SAAS;AACjB,IAAM,gBAAN,cAA4B,QAAQ;AAAA,EAChC,OAAO,OAAO;AACV,QAAM,mBAAmB,KAAK,mBAAmB,KAAK,KAAK,MAAM,GAC3D,MAAM,KAAK,gBAAgB,KAAK;AACtC,QAAI,IAAI,eAAe,cAAc,UACjC,IAAI,eAAe,cAAc,QAAQ;AACzC,UAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,+BAAkB,KAAK;AAAA,QACnB,UAAU,KAAK,WAAW,cAAc;AAAA,QACxC,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,MACvB,CAAC,GACM;AAAA,IACX;AACA,QAAI,iBAAiB,QAAQ,MAAM,IAAI,MAAM,IAAI;AAC7C,UAAM,iBAAiB,KAAK,aAAa,gBAAgB;AACzD,+BAAkB,KAAK;AAAA,QACnB,UAAU,IAAI;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,SAAS;AAAA,MACb,CAAC,GACM;AAAA,IACX;AACA,WAAO,GAAG,MAAM,IAAI;AAAA,EACxB;AAAA,EACA,IAAI,OAAO;AACP,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,cAAc,SAAS,CAAC,QAAQ,WACrB,IAAI,cAAc;AAAA,EACrB;AAAA,EACA,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,OAAO;AACV,QAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAC9C,QAAI,IAAI,eAAe,cAAc,WACjC,IAAI,OAAO,UAAU;AACrB,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAEX,QAAM,cAAc,IAAI,eAAe,cAAc,UAC/C,IAAI,OACJ,QAAQ,QAAQ,IAAI,IAAI;AAC9B,WAAO,GAAG,YAAY,KAAK,CAAC,SACjB,KAAK,KAAK,KAAK,WAAW,MAAM;AAAA,MACnC,MAAM,IAAI;AAAA,MACV,UAAU,IAAI,OAAO;AAAA,IACzB,CAAC,CACJ,CAAC;AAAA,EACN;AACJ;AACA,WAAW,SAAS,CAAC,QAAQ,WAClB,IAAI,WAAW;AAAA,EAClB,MAAM;AAAA,EACN,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,YAAY;AACR,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EACA,aAAa;AACT,WAAO,KAAK,KAAK,OAAO,KAAK,aAAa,sBAAsB,aAC1D,KAAK,KAAK,OAAO,WAAW,IAC5B,KAAK,KAAK;AAAA,EACpB;AAAA,EACA,OAAO,OAAO;AACV,QAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK,GAChD,SAAS,KAAK,KAAK,UAAU,MAC7B,WAAW;AAAA,MACb,UAAU,CAAC,QAAQ;AACf,0BAAkB,KAAK,GAAG,GACtB,IAAI,QACJ,OAAO,MAAM,IAGb,OAAO,MAAM;AAAA,MAErB;AAAA,MACA,IAAI,OAAO;AACP,eAAO,IAAI;AAAA,MACf;AAAA,IACJ;AAEA,QADA,SAAS,WAAW,SAAS,SAAS,KAAK,QAAQ,GAC/C,OAAO,SAAS,cAAc;AAC9B,UAAM,YAAY,OAAO,UAAU,IAAI,MAAM,QAAQ;AACrD,aAAI,IAAI,OAAO,OAAO,SACX;AAAA,QACH,QAAQ;AAAA,QACR,OAAO,IAAI;AAAA,MACf,IAEA,IAAI,OAAO,QACJ,QAAQ,QAAQ,SAAS,EAAE,KAAK,CAACC,eAC7B,KAAK,KAAK,OAAO,YAAY;AAAA,QAChC,MAAMA;AAAA,QACN,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC,CACJ,IAGM,KAAK,KAAK,OAAO,WAAW;AAAA,QAC/B,MAAM;AAAA,QACN,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AAAA,IAET;AACA,QAAI,OAAO,SAAS,cAAc;AAC9B,UAAM,oBAAoB,CAAC,QAEtB;AACD,YAAM,SAAS,OAAO,WAAW,KAAK,QAAQ;AAC9C,YAAI,IAAI,OAAO;AACX,iBAAO,QAAQ,QAAQ,MAAM;AAEjC,YAAI,kBAAkB;AAClB,gBAAM,IAAI,MAAM,2FAA2F;AAE/G,eAAO;AAAA,MACX;AACA,UAAI,IAAI,OAAO,UAAU,IAAO;AAC5B,YAAM,QAAQ,KAAK,KAAK,OAAO,WAAW;AAAA,UACtC,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,eAAI,MAAM,WAAW,YACV,WACP,MAAM,WAAW,WACjB,OAAO,MAAM,GAEjB,kBAAkB,MAAM,KAAK,GACtB,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM;AAAA,MACtD;AAEI,eAAO,KAAK,KAAK,OACZ,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAC3D,KAAK,CAAC,UACH,MAAM,WAAW,YACV,WACP,MAAM,WAAW,WACjB,OAAO,MAAM,GACV,kBAAkB,MAAM,KAAK,EAAE,KAAK,OAChC,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAM,MAAM,EACrD,EACJ;AAAA,IAET;AACA,QAAI,OAAO,SAAS;AAChB,UAAI,IAAI,OAAO,UAAU,IAAO;AAC5B,YAAM,OAAO,KAAK,KAAK,OAAO,WAAW;AAAA,UACrC,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,YAAI,CAAC,QAAQ,IAAI;AACb,iBAAO;AACX,YAAM,SAAS,OAAO,UAAU,KAAK,OAAO,QAAQ;AACpD,YAAI,kBAAkB;AAClB,gBAAM,IAAI,MAAM,iGAAiG;AAErH,eAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO;AAAA,MACjD;AAEI,eAAO,KAAK,KAAK,OACZ,YAAY,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,CAAC,EAC3D,KAAK,CAAC,SACF,QAAQ,IAAI,IAEV,QAAQ,QAAQ,OAAO,UAAU,KAAK,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,EAAE,IAD9G,IAEd;AAGT,SAAK,YAAY,MAAM;AAAA,EAC3B;AACJ;AACA,WAAW,SAAS,CAAC,QAAQ,QAAQ,WAC1B,IAAI,WAAW;AAAA,EAClB;AAAA,EACA,UAAU,sBAAsB;AAAA,EAChC;AAAA,EACA,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,WAAW,uBAAuB,CAAC,YAAY,QAAQ,WAC5C,IAAI,WAAW;AAAA,EAClB;AAAA,EACA,QAAQ,EAAE,MAAM,cAAc,WAAW,WAAW;AAAA,EACpD,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,cAAN,cAA0B,QAAQ;AAAA,EAC9B,OAAO,OAAO;AAEV,WADmB,KAAK,SAAS,KAAK,MACnB,cAAc,YACtB,GAAG,MAAS,IAEhB,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,EAC3C;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,YAAY,SAAS,CAAC,MAAM,WACjB,IAAI,YAAY;AAAA,EACnB,WAAW;AAAA,EACX,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,cAAN,cAA0B,QAAQ;AAAA,EAC9B,OAAO,OAAO;AAEV,WADmB,KAAK,SAAS,KAAK,MACnB,cAAc,OACtB,GAAG,IAAI,IAEX,KAAK,KAAK,UAAU,OAAO,KAAK;AAAA,EAC3C;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,YAAY,SAAS,CAAC,MAAM,WACjB,IAAI,YAAY;AAAA,EACnB,WAAW;AAAA,EACX,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,aAAN,cAAyB,QAAQ;AAAA,EAC7B,OAAO,OAAO;AACV,QAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK,GAC1C,OAAO,IAAI;AACf,WAAI,IAAI,eAAe,cAAc,cACjC,OAAO,KAAK,KAAK,aAAa,IAE3B,KAAK,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AAAA,EACA,gBAAgB;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,WAAW,SAAS,CAAC,MAAM,WAChB,IAAI,WAAW;AAAA,EAClB,WAAW;AAAA,EACX,UAAU,sBAAsB;AAAA,EAChC,cAAc,OAAO,OAAO,WAAY,aAClC,OAAO,UACP,MAAM,OAAO;AAAA,EACnB,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,WAAN,cAAuB,QAAQ;AAAA,EAC3B,OAAO,OAAO;AACV,QAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK,GAExC,SAAS;AAAA,MACX,GAAG;AAAA,MACH,QAAQ;AAAA,QACJ,GAAG,IAAI;AAAA,QACP,QAAQ,CAAC;AAAA,MACb;AAAA,IACJ,GACM,SAAS,KAAK,KAAK,UAAU,OAAO;AAAA,MACtC,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,QAAQ;AAAA,QACJ,GAAG;AAAA,MACP;AAAA,IACJ,CAAC;AACD,WAAI,QAAQ,MAAM,IACP,OAAO,KAAK,CAACH,aACT;AAAA,MACH,QAAQ;AAAA,MACR,OAAOA,QAAO,WAAW,UACnBA,QAAO,QACP,KAAK,KAAK,WAAW;AAAA,QACnB,IAAI,QAAQ;AACR,iBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,QAC5C;AAAA,QACA,OAAO,OAAO;AAAA,MAClB,CAAC;AAAA,IACT,EACH,IAGM;AAAA,MACH,QAAQ;AAAA,MACR,OAAO,OAAO,WAAW,UACnB,OAAO,QACP,KAAK,KAAK,WAAW;AAAA,QACnB,IAAI,QAAQ;AACR,iBAAO,IAAI,SAAS,OAAO,OAAO,MAAM;AAAA,QAC5C;AAAA,QACA,OAAO,OAAO;AAAA,MAClB,CAAC;AAAA,IACT;AAAA,EAER;AAAA,EACA,cAAc;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;AACA,SAAS,SAAS,CAAC,MAAM,WACd,IAAI,SAAS;AAAA,EAChB,WAAW;AAAA,EACX,UAAU,sBAAsB;AAAA,EAChC,YAAY,OAAO,OAAO,SAAU,aAAa,OAAO,QAAQ,MAAM,OAAO;AAAA,EAC7E,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,SAAN,cAAqB,QAAQ;AAAA,EACzB,OAAO,OAAO;AAEV,QADmB,KAAK,SAAS,KAAK,MACnB,cAAc,KAAK;AAClC,UAAM,MAAM,KAAK,gBAAgB,KAAK;AACtC,+BAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC,GACM;AAAA,IACX;AACA,WAAO,EAAE,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,EAChD;AACJ;AACA,OAAO,SAAS,CAAC,WACN,IAAI,OAAO;AAAA,EACd,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,QAAQ,uBAAO,WAAW,GAC1B,aAAN,cAAyB,QAAQ;AAAA,EAC7B,OAAO,OAAO;AACV,QAAM,EAAE,IAAI,IAAI,KAAK,oBAAoB,KAAK,GACxC,OAAO,IAAI;AACjB,WAAO,KAAK,KAAK,KAAK,OAAO;AAAA,MACzB;AAAA,MACA,MAAM,IAAI;AAAA,MACV,QAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AAAA,EACA,SAAS;AACL,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ,GACM,cAAN,MAAM,qBAAoB,QAAQ;AAAA,EAC9B,OAAO,OAAO;AACV,QAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,OAAO;AAqBX,cApBoB,YAAY;AAC5B,YAAM,WAAW,MAAM,KAAK,KAAK,GAAG,YAAY;AAAA,UAC5C,MAAM,IAAI;AAAA,UACV,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AACD,eAAI,SAAS,WAAW,YACb,UACP,SAAS,WAAW,WACpB,OAAO,MAAM,GACN,MAAM,SAAS,KAAK,KAGpB,KAAK,KAAK,IAAI,YAAY;AAAA,UAC7B,MAAM,SAAS;AAAA,UACf,MAAM,IAAI;AAAA,UACV,QAAQ;AAAA,QACZ,CAAC;AAAA,MAET,GACmB;AAElB;AACD,UAAM,WAAW,KAAK,KAAK,GAAG,WAAW;AAAA,QACrC,MAAM,IAAI;AAAA,QACV,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AACD,aAAI,SAAS,WAAW,YACb,UACP,SAAS,WAAW,WACpB,OAAO,MAAM,GACN;AAAA,QACH,QAAQ;AAAA,QACR,OAAO,SAAS;AAAA,MACpB,KAGO,KAAK,KAAK,IAAI,WAAW;AAAA,QAC5B,MAAM,SAAS;AAAA,QACf,MAAM,IAAI;AAAA,QACV,QAAQ;AAAA,MACZ,CAAC;AAAA,IAET;AAAA,EACJ;AAAA,EACA,OAAO,OAAO,GAAG,GAAG;AAChB,WAAO,IAAI,aAAY;AAAA,MACnB,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,UAAU,sBAAsB;AAAA,IACpC,CAAC;AAAA,EACL;AACJ,GACM,cAAN,cAA0B,QAAQ;AAAA,EAC9B,OAAO,OAAO;AACV,QAAM,SAAS,KAAK,KAAK,UAAU,OAAO,KAAK;AAC/C,WAAI,QAAQ,MAAM,MACd,OAAO,QAAQ,OAAO,OAAO,OAAO,KAAK,IAEtC;AAAA,EACX;AACJ;AACA,YAAY,SAAS,CAAC,MAAM,WACjB,IAAI,YAAY;AAAA,EACnB,WAAW;AAAA,EACX,UAAU,sBAAsB;AAAA,EAChC,GAAG,oBAAoB,MAAM;AACjC,CAAC;AAEL,IAAM,SAAS,CAAC,OAAO,SAAS,CAAC,GAWjC,UACQ,QACO,OAAO,OAAO,EAAE,YAAY,CAAC,MAAM,QAAQ;AAC9C,MAAI,IAAI;AACR,MAAI,CAAC,MAAM,IAAI,GAAG;AACd,QAAM,IAAI,OAAO,UAAW,aACtB,OAAO,IAAI,IACX,OAAO,UAAW,WACd,EAAE,SAAS,OAAO,IAClB,QACJ,UAAU,MAAM,KAAK,EAAE,WAAW,QAAQ,OAAO,SAAS,KAAK,WAAW,QAAQ,OAAO,SAAS,KAAK,IACvG,KAAK,OAAO,KAAM,WAAW,EAAE,SAAS,EAAE,IAAI;AACpD,QAAI,SAAS,EAAE,MAAM,UAAU,GAAG,IAAI,OAAO,OAAO,CAAC;AAAA,EACzD;AACJ,CAAC,IACE,OAAO,OAAO,GAEnB,OAAO;AAAA,EACT,QAAQ,UAAU;AACtB,GACI;AAAA,CACH,SAAUI,wBAAuB;AAC9B,EAAAA,uBAAsB,YAAe,aACrCA,uBAAsB,YAAe,aACrCA,uBAAsB,SAAY,UAClCA,uBAAsB,YAAe,aACrCA,uBAAsB,aAAgB,cACtCA,uBAAsB,UAAa,WACnCA,uBAAsB,YAAe,aACrCA,uBAAsB,eAAkB,gBACxCA,uBAAsB,UAAa,WACnCA,uBAAsB,SAAY,UAClCA,uBAAsB,aAAgB,cACtCA,uBAAsB,WAAc,YACpCA,uBAAsB,UAAa,WACnCA,uBAAsB,WAAc,YACpCA,uBAAsB,YAAe,aACrCA,uBAAsB,WAAc,YACpCA,uBAAsB,wBAA2B,yBACjDA,uBAAsB,kBAAqB,mBAC3CA,uBAAsB,WAAc,YACpCA,uBAAsB,YAAe,aACrCA,uBAAsB,SAAY,UAClCA,uBAAsB,SAAY,UAClCA,uBAAsB,cAAiB,eACvCA,uBAAsB,UAAa,WACnCA,uBAAsB,aAAgB,cACtCA,uBAAsB,UAAa,WACnCA,uBAAsB,aAAgB,cACtCA,uBAAsB,gBAAmB,iBACzCA,uBAAsB,cAAiB,eACvCA,uBAAsB,cAAiB,eACvCA,uBAAsB,aAAgB,cACtCA,uBAAsB,WAAc,YACpCA,uBAAsB,aAAgB,cACtCA,uBAAsB,aAAgB,cACtCA,uBAAsB,cAAiB,eACvCA,uBAAsB,cAAiB;AAC3C,GAAG,0BAA0B,wBAAwB,CAAC,EAAE;AACxD,IAAM,iBAAiB,CAEvB,KAAK,SAAS;AAAA,EACV,SAAS,yBAAyB,IAAI,IAAI;AAC9C,MAAM,OAAO,CAAC,SAAS,gBAAgB,KAAK,MAAM,GAC5C,aAAa,UAAU,QACvB,aAAa,UAAU,QACvB,UAAU,OAAO,QACjB,aAAa,UAAU,QACvB,cAAc,WAAW,QACzB,WAAW,QAAQ,QACnB,aAAa,UAAU,QACvB,gBAAgB,aAAa,QAC7B,WAAW,QAAQ,QACnB,UAAU,OAAO,QACjB,cAAc,WAAW,QACzB,YAAY,SAAS,QACrB,WAAW,QAAQ,QACnB,YAAY,SAAS,QACrB,aAAa,UAAU,QACvB,mBAAmB,UAAU,cAC7B,YAAY,SAAS,QACrB,yBAAyB,sBAAsB,QAC/C,mBAAmB,gBAAgB,QACnC,YAAY,SAAS,QACrB,aAAa,UAAU,QACvB,UAAU,OAAO,QACjB,UAAU,OAAO,QACjB,eAAe,YAAY,QAC3B,WAAW,QAAQ,QACnB,cAAc,WAAW,QACzB,WAAW,QAAQ,QACnB,iBAAiB,cAAc,QAC/B,cAAc,WAAW,QACzB,cAAc,WAAW,QACzB,eAAe,YAAY,QAC3B,eAAe,YAAY,QAC3B,iBAAiB,WAAW,sBAC5B,eAAe,YAAY,QAC3B,UAAU,MAAM,WAAW,EAAE,SAAS,GACtC,UAAU,MAAM,WAAW,EAAE,SAAS,GACtC,WAAW,MAAM,YAAY,EAAE,SAAS,GACxC,SAAS;AAAA,EACX,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,GAAK,CAAC;AAAA,EAC3D,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,GAAK,CAAC;AAAA,EAC3D,UAAU,CAAC,QAAQ,WAAW,OAAO;AAAA,IACjC,GAAG;AAAA,IACH,QAAQ;AAAA,EACZ,CAAC;AAAA,EACD,SAAS,CAAC,QAAQ,UAAU,OAAO,EAAE,GAAG,KAAK,QAAQ,GAAK,CAAC;AAAA,EAC3D,OAAO,CAAC,QAAQ,QAAQ,OAAO,EAAE,GAAG,KAAK,QAAQ,GAAK,CAAC;AAC3D,GACM,QAAQ,SAEV,IAAiB,uBAAO,OAAO;AAAA,EAC/B,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,IAAI,OAAQ;AAAE,WAAO;AAAA,EAAM;AAAA,EAC3B,IAAI,aAAc;AAAE,WAAO;AAAA,EAAY;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,WAAW;AAAA,EACX;AAAA,EACA,IAAI,wBAAyB;AAAE,WAAO;AAAA,EAAuB;AAAA,EAC7D;AAAA,EACA,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,MAAQ;AAAA,EACR,UAAY;AAAA,EACZ,YAAc;AAAA,EACd,cAAc;AAAA,EACd,MAAM;AAAA,EACN,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,MAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,OAAO;AAAA,EACP,WAAa;AAAA,EACb,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;;;AC95HM,IAAM,kCAAkC,KAElC,uBAAuB,KAEvB,4BAA4B,gCACnC,qCAAqC,IAAI;AAAA,EAC9C;AACD;AAIA,IAAM,qBAAqB,IAAI,OAAO,QAAa;AAa5C,SAAS,0BAA0B,IAAqB;AAK9D,SAJI,OAAO,MAAO,YAId,GAAG,SAAS,kCACR,KAGD,mCAAmC,KAAK,EAAE;AAClD;AAEO,SAAS,gBAAgB,MAAuB;AACtD,SAAI,KAAK,SAAS,uBACV,KAGD,CAAC,mBAAmB,KAAK,IAAI;AACrC;AAEA,IAAM,qBAAqB,EACzB,OAAO;AAAA,EACP,SAAS,EACP,OAAO;AAAA,IACP,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC;AAAA,IACtC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACvB,SAAS,EAAE,KAAK,CAAC,YAAY,UAAU,aAAa,CAAC,EAAE,SAAS;AAAA,EACjE,CAAC,EACA,OAAO,EACP,SAAS;AAAA,EACX,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS;AACpD,CAAC,EACA,OAAO;AAEF,SAAS,kBAAkB,YAA8B;AAC/D,MAAM,SAAS,mBAAmB,UAAU,UAAU;AAatD,SAXI,GAAC,OAAO,WAKX,OAAO,KAAK,YAAY,UACxB,OAAO,MAAM,EAAG,OAAO,KAAK,QAAQ,KAAK,CAAC,KAKvC,OAAO,KAAK,YAAY,WACX,OAAO,KAAK,WACb,KAAK,OAAO,MAAM,EAAG,OAAO,KAAK,OAAO,CAAC;AAM1D;;;ACzEO,IAAM,4BAA4B;AAsClC,SAAS,qBACf,UACA,SAC0C;AAC1C,MAAI,YAAY;AACf;AAGD,MACC,OAAO,WAAY,YACnB,YAAY,QACZ,MAAM,QAAQ,OAAO,GACpB;AACD,QAAM,QAAQ,IAAI;AAAA,MACjB,yBAAyB,QAAQ;AAAA,IAClC;AACA,gBAAM,cAAc,IACd;AAAA,EACP;AAEA,MAAM,kBAAkB;AACxB,MAAI,OAAO,gBAAgB,YAAa,YAAY;AACnD,QAAM,QAAQ,IAAI;AAAA,MACjB,iBAAiB,QAAQ;AAAA,IAC1B;AACA,gBAAM,cAAc,IACd;AAAA,EACP;AAEA,MACC,gBAAgB,mBAAmB,UACnC,CAAC,kBAAkB,gBAAgB,cAAc,GAChD;AACD,QAAM,QAAQ,IAAI;AAAA,MACjB,wBAAwB,QAAQ;AAAA,IACjC;AACA,gBAAM,cAAc,IACd;AAAA,EACP;AAEA,SAAO;AACR;AAEO,SAAS,gBAAgB,IAA4B;AAC3D,SAAO,GAAG,MAAM,GAAG,IAAI,IAAI;AAC5B;AAEO,SAAS,oBAAoB,IAAsB;AACzD,MAAI;AACH,OAAG,OAAO,OAAO,IAAI;AAAA,EACtB,SAAS,KAAK;AACb,YAAQ,KAAK,mCAAmC,GAAG;AAAA,EACpD;AACD;AAEO,SAAS,mBACf,UACA,cACO;AACP,MAAM,EAAE,UAAU,IAAI,aAAa,QAAQ,OAAO,IAAI,cAChD,WAAW,SAAS,IAAI,QAAQ;AACtC,EAAI,YACH,oBAAoB,SAAS,EAAE,GAEhC,SAAS,IAAI,UAAU;AAAA,IACtB,IAAI,gBAAgB,EAAE;AAAA,IACtB;AAAA,IACA,GAAI,YAAY,gBAAgB,EAAE,OAAO;AAAA,IACzC,GAAI,WAAW,UAAa,EAAE,OAAO;AAAA,EACtC,CAAC;AACF;AAEO,SAAS,sBACf,UACO;AACP,WAAW,SAAS,SAAS,OAAO;AACnC,wBAAoB,MAAM,EAAE;AAE7B,WAAS,MAAM;AAChB;AAEA,SAAS,2CACR,QACyC;AACzC,MAAM,UAAkD,CAAC,GACnD,OAAO,oBAAI,IAAY,GACvB,yBAAyB,OAAO,2BAA2B,GAC3D,8BAA8B;AAAA,IACnC,GAAG,OAAO,iBAAiB,QAAQ;AAAA,EACpC,EAAE,QAAQ;AAEV,WAAW,YAAY,wBAAwB;AAC9C,QAAM,QAAQ,OAAO,iBAAiB,IAAI,QAAQ;AAClD,IAAI,UAAU,UAAa,KAAK,IAAI,QAAQ,MAG5C,QAAQ,KAAK,CAAC,UAAU,KAAK,CAAC,GAC9B,KAAK,IAAI,QAAQ;AAAA,EAClB;AAEA,WAAW,CAAC,UAAU,KAAK,KAAK;AAC/B,IAAK,KAAK,IAAI,QAAQ,KACrB,QAAQ,KAAK,CAAC,UAAU,KAAK,CAAC;AAIhC,SAAO;AACR;AAIA,eAAsB,iBACrB,QACA,cACsD;AACtD,MAAI,OAAO,iBAAiB,SAAS;AACpC,WAAO,EAAE,QAAQ,IAAO,cAAc,GAAK;AAG5C,MAAM,UAAU,2CAA2C,MAAM;AACjE,SAAO,iBAAiB,MAAM,GAE9B,OAAO,kCAAuC,MAAM,MAAM;AAAA,IACzD,cAAc,EAAE,MAAM,aAAa,MAAM,SAAS,aAAa,QAAQ;AAAA,IACvE,YAAY,QAAQ;AAAA,EACrB,CAAC;AAED,MAAI,eAAe,IACf,YAAY,GACZ,YAAY,QAAQ;AAExB,WAAW,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,KAAK,QAAQ,QAAQ,GAAG;AACvD,QAAM,MAAM,OAAO,sBAAsB,EAAE,SAAS,CAAC,GAC/C,eAAe,GAAG,MAAM,YAAY,KAAK,IAAI,IAAI,MAAM,YAAY,KAAK,KAAK;AACnF,QAAI;AACH,YAAM,IAAI,GAAG,cAAc,MAAM,UAAU,CAAC,GAAG,YAAY;AAC1D,cAAM,MAAM,GAAG;AAAA,UACd,KAAK,gBAAgB,MAAM,WAAW;AAAA,UACtC,OAAO;AAAA,UACP,QAAQ,MAAM;AAAA,UACd,UAAU;AAAA,QACX,CAAC;AAAA,MACF,CAAC,GACD;AAAA,IACD,QAAQ;AAEP,qBAAe,IACf,YAAY,IAAI;AAChB;AAAA,IACD,UAAE;AACD,0BAAoB,MAAM,EAAE;AAAA,IAC7B;AAAA,EACD;AAEA,MAAM,mBAAmB,QAAQ,MAAM,SAAS;AAChD,WAAW,CAAC,EAAE,KAAK,KAAK;AACvB,wBAAoB,MAAM,EAAE;AAG7B,gBAAO;AAAA,IACN;AAAA,IAGA;AAAA,IACA;AAAA,IACA,EAAE,YAAY,QAAQ,QAAQ,gBAAgB,UAAU;AAAA,EACzD,GACO,EAAE,QAAQ,YAAY,GAAG,aAAa;AAC9C;;;AChNO,IAAM,mCAAmC,MAAM,MACzC,4BAA4B,sBAC5B,sCAAsC,KAAK,OAAO,MAClD,8BAA8B;AAG3C,IAAM,mBAAmB,OAAO,OAAO,OAAO,MAAM,OAAO,MACrD,6CAA6C,KAAK;AAwBjD,IAAM,iCAAN,cAA6C,MAAM;AAAA,EACzD,OAAO;AACR;AAIO,SAAS,uBAAuB,UAA0B;AAChE,SAAO,GAAG,QAAQ,GAAG,yBAAyB;AAC/C;AAEO,SAAS,qBACf,OACmC;AACnC,SAAO,iBAAiB;AACzB;AAEA,SAAS,uCAAuE;AAC/E,SAAO,IAAI;AAAA,IACV;AAAA,EACD;AACD;AAEA,SAAS,kCAA6D;AACrE,SAAO,IAAI;AAAA,IACV,gFAAgF,mCAAmC;AAAA,EAEpH;AACD;AAOA,SAAS,2BAA2B,OAA4B;AAC/D,MAAI,iBAAiB;AACpB,WAAO;AAGR,MAAI,iBAAiB;AACpB,WAAO,IAAI,WAAW,KAAK;AAG5B,MAAI,YAAY,OAAO,KAAK,KAAK,EAAE,iBAAiB;AACnD,WAAO,IAAI,WAAW,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;AAGvE,QAAM,IAAI;AAAA,IACT;AAAA,EAED;AACD;AAIA,SAAS,kBACR,gBACA,YACa;AACb,MAAM,SAAS,IAAI,WAAW,UAAU,GACpC,SAAS;AAEb,SAAO,SAAS,cAAY;AAC3B,QAAM,QAAQ,eAAe,CAAC,GACxB,YAAY,aAAa;AAE/B,QAAI,MAAM,cAAc,WAAW;AAClC,aAAO,IAAI,OAAO,MAAM,GACxB,UAAU,MAAM,YAChB,eAAe,MAAM;AACrB;AAAA,IACD;AAEA,WAAO,IAAI,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAC/C,eAAe,CAAC,IAAI,MAAM,SAAS,SAAS,GAC5C,UAAU;AAAA,EACX;AAEA,SAAO;AACR;AAIA,gBAAgB,oBACf,QACA,QAC6B;AAC7B,MAAI,OAAO;AACV,UAAM,qCAAqC;AAG5C,MAAI,QAAQ;AACX,UACC,OAAO,UACP,IAAI,aAAa,8BAA8B,YAAY;AAI7D,MAAI;AACJ,MAAI;AACH,aAAS,OAAO,UAAU;AAAA,EAC3B,SAAS,OAAO;AACf,UAAI,iBAAiB,YACd,qCAAqC,IAEtC;AAAA,EACP;AAEA,MAAM,UAAU,MAAM;AACrB,IAAK,OACH;AAAA,MACA,QAAQ,UACP,IAAI,aAAa,8BAA8B,YAAY;AAAA,IAC7D,EACC,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACjB;AAEA,UAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,GAAK,CAAC;AACzD,MAAI,YAAY;AAEhB,MAAI;AACH,eAAa;AACZ,UAAI;AACJ,UAAI;AACH,qBAAa,MAAM,OAAO,KAAK;AAAA,MAChC,SAAS,WAAW;AAKnB,cAAI,QAAQ,UAEV,OAAO,UACP,IAAI,aAAa,8BAA8B,YAAY,IAOvD,IAAI;AAAA,UACT,sDACE,qBAAqB,QAAQ,UAAU,UAAU,OAAO,SAAS;AAAA,QACpE;AAAA,MACD;AAEA,UAAI,QAAQ;AACX,cACC,OAAO,UACP,IAAI,aAAa,8BAA8B,YAAY;AAG7D,UAAI,WAAW,MAAM;AACpB,oBAAY;AACZ;AAAA,MACD;AAEA,YAAM,2BAA2B,WAAW,KAAK;AAAA,IAClD;AAAA,EACD,UAAE;AACD,YAAQ,oBAAoB,SAAS,OAAO,GACvC,aACJ,MAAM,OACJ;AAAA,MACA,IAAI,MAAM,qDAAqD;AAAA,IAChE,EACC,MAAM,MAAM;AAAA,IAAC,CAAC;AAEjB,QAAI;AACH,aAAO,YAAY;AAAA,IACpB,QAAQ;AAAA,IAER;AAAA,EACD;AACD;AAIA,SAAS,oBACR,SACA,UACA,SACO;AAEP,UAAQ,IAAI;AAAA,IACX,eAAe,2BAA2B;AAAA,IAC1C;AAAA,IACA;AAAA,EACD;AACD;AAEA,eAAe,qBACd,SACA,UACA,SACgB;AAChB,MAAM,UAAU,uBAAuB,QAAQ,GACzC,YAAY,MAAM,QAAQ,IAAsB,OAAO;AAC7D,EAAI,cAAc,UAGd,UAAU,YAAY,WAG1B,MAAM,QAAQ,OAAO,OAAO;AAC7B;AAWA,SAAS,4BACR,SACA,UACA,SAC2B;AAC3B,MAAM,MAAM,QAAQ,IAClB;AAAA,IACA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,2BAA2B;AAAA,MACnC;AAAA,IACD,EAAE,KAAK;AAAA,CAAI;AAAA,IACX;AAAA,IACA;AAAA,EACD,EACC,IAAI;AAEN,MAAI,QAAQ;AACX,UAAM,IAAI,MAAM,qDAAqD;AAEtE,SAAO;AACR;AAEO,SAAS,kCACf,SACA,UACA,MAC6C;AAC7C,MAAM,UAAU,4BAA4B,SAAS,UAAU,KAAK,OAAO;AAE3E,MAAI,KAAK,eAAe;AACvB,QACC,QAAQ,eAAe,KACvB,QAAQ,eAAe,KACvB,QAAQ,kBAAkB,QAC1B,QAAQ,kBAAkB;AAE1B;AAAA,aAGD,QAAQ,eAAe,KAAK,cAC5B,QAAQ,kBAAkB,KAC1B,QAAQ,kBAAkB,KAAK,aAAa,KAC5C,QAAQ,eAAe,KAAK;AAE5B;AAGD,SAAO,IAAI;AAAA,IACV,sEAAsE,QAAQ,cACjE,KAAK,UAAU,aAAa,KAAK,UAAU,iBACpD,QAAQ,UAAU,aAAa,QAAQ,UAAU,iCACjD,QAAQ,iBAAiB,MAAM,KAAK,QAAQ,iBAAiB,MAAM;AAAA,EACxE;AACD;AAIA,SAAS,6BAA6B,SAKvB;AACd,MAAM,EAAE,SAAS,UAAU,SAAS,SAAS,IAAI,SAE3C,SAAS,QAAQ,IAAI;AAAA,IAI1B,kCAAkC,2BAA2B;AAAA,IAC7D;AAAA,IACA;AAAA,EACD,GACM,gBAA8B,CAAC,GACjC,qBAAqB,GACrB,aAAa;AAEjB,SAAO,aAAa,YAAU;AAC7B,QAAM,MAAM,OAAO,KAAK;AACxB,QAAI,IAAI;AACP;AAGD,QAAI,IAAI,MAAM,gBAAgB;AAC7B,YAAM,IAAI;AAAA,QACT,iBAAiB,kBAAkB;AAAA,MACpC;AAGD,QAAI,EAAE,IAAI,MAAM,iBAAiB;AAChC,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAGD,QAAM,aAAa,IAAI,WAAW,IAAI,MAAM,KAAK,GAC3C,iBAAiB,WAAW,YAC5B,eACL,WAAW,aAAa,iBACrB,WAAW,SAAS,GAAG,cAAc,IACrC;AAEJ,kBAAc,KAAK,YAAY,GAC/B,cAAc,aAAa,YAC3B;AAAA,EACD;AAEA,SAAO,kBAAkB,eAAe,UAAU;AACnD;AAEO,SAAS,6BAA6B,SAKf;AAC7B,MAAM,EAAE,SAAS,UAAU,MAAM,SAAS,IAAI;AAC9C,MAAI,KAAK,UAAU;AAClB,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAID,MAAM,kBAAkB,WAAW,GAC7B,eAAe,6BAA6B;AAAA,IACjD;AAAA,IACA;AAAA,IACA,SAAS,KAAK;AAAA,IACd,UAAU;AAAA,EACX,CAAC,GACK,0BAA0B,KAAK,aAAa,aAAa;AAE/D,MAAI;AACH,QAAM,UAAU,IAAI,YAAY,SAAS;AAAA,MACxC,OAAO;AAAA,MACP,WAAW;AAAA,IACZ,CAAC,EAAE,OAAO,cAAc,EAAE,QAAQ,wBAAwB,CAAC,GAErD,gBAAgB,QAAQ,UAAU,GAAG,QAAQ;AACnD,WAAI,QAAQ,SAAS,YAAY,0BACzB,EAAE,MAAM,QAAQ,QAAQ,gBAAgB,qBAAqB,IAE9D,EAAE,MAAM,QAAQ,QAAQ,cAAc;AAAA,EAC9C,QAAQ;AACP,WAAO,EAAE,MAAM,SAAS;AAAA,EACzB;AACD;AAIA,eAAsB,2BACrB,SACA,UACgB;AAChB,MAAM,UAAU,uBAAuB,QAAQ,GACzC,YAAY,MAAM,QAAQ,IAAsB,OAAO;AAE7D,EAAI,cAAc,UAId,UAAU,UAAU,6BAIxB,MAAM,qBAAqB,SAAS,UAAU,UAAU,OAAO;AAChE;AAEA,eAAsB,qBACrB,SACA,UACA,SACgB;AAChB,sBAAoB,SAAS,UAAU,OAAO,GAC9C,MAAM,qBAAqB,SAAS,UAAU,OAAO;AACtD;AAIA,eAAe,oBAAoB,SAQL;AAC7B,MAAM,EAAE,SAAS,UAAU,SAAS,QAAQ,QAAQ,cAAc,IAAI,SAChE,iBACL,QAAQ,kBAAkB,kCACrB,UAAU,uBAAuB,QAAQ,GAEzC,oBAAoB,CAAC,kBAAkB,MAAe;AAC3D,QAAI,QAAQ;AACX,aACC,OAAO,UACP,IAAI,aAAa,8BAA8B,YAAY;AAK7D,QAD4B,QAAQ,IAAI,eAGtC,kBACA,6CACD;AAEA,aAAO,IAAI;AAAA,QACV;AAAA,MACD;AAAA,EAEF,GAEM,sBAAsB,kBAAkB;AAC9C,MAAI,wBAAwB;AAC3B,UAAM;AAGP,MAAM,YAAY,KAAK,IAAI;AAC3B,EAAK,iBACJ,MAAM,QAAQ,IAAI,SAAS;AAAA,IAC1B,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,aAAa;AAAA,EACd,CAA4B;AAG7B,MAAI,aAAa,GACb,aAAa,GACX,iBAA+B,CAAC,GAClC,gBAAgB,GAChB,kBAAkB,IAEhB,aAAa,OAAO,UAAsB;AAC/C,QAAM,eAAe,kBAAkB,MAAM,UAAU;AACvD,QAAI,iBAAiB;AACpB,YAAM;AAGP,YAAQ,IAAI;AAAA,MACX,eAAe,2BAA2B;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,GACA,cAAc,MAAM,YACpB;AAAA,EACD;AAEA,MAAI;AACH,mBAAiB,SAAS,oBAAoB,QAAQ,MAAM;AAC3D,UAAI,MAAM,eAAe,GAIzB;AAAA,YAAI,MAAM,aAAa;AACtB,gBAAM,gCAAgC;AAQvC,aALA,eAAe,KAAK,KAAK,GACzB,iBAAiB,MAAM,YAIhB,iBAAiB,kBAAgB;AACvC,cAAM,QAAQ,kBAAkB,gBAAgB,cAAc;AAC9D,2BAAiB,MAAM,YACvB,MAAM,WAAW,KAAK;AAAA,QACvB;AAAA;AAID,IAAI,gBAAgB,MACnB,MAAM,WAAW,kBAAkB,gBAAgB,aAAa,CAAC,GACjE,gBAAgB;AAGjB,QAAM,OAAO;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,KAAK,IAAI;AAAA,IACvB,GAEM,eAAe,kBAAkB;AACvC,QAAI,iBAAiB;AACpB,YAAM;AAGP,WAAK,kBAKJ,MAAM,QAAQ,IAAI,SAAS;AAAA,MAC1B,SAAS;AAAA,MACT,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,IACd,CAA4B,GAE5B,MAAM,QAAQ,IAAI,SAAS,IAAI,IAEhC,kBAAkB,IACX;AAAA,EACR,SAAS,OAAO;AACf,UAAK,mBACJ,MAAM,qBAAqB,SAAS,UAAU,OAAO,GAEhD;AAAA,EACP;AACD;AAEA,eAAsB,kBAAkB,SASV;AAC7B,MAAM,EAAE,SAAS,UAAU,SAAS,aAAa,GAAG,aAAa,IAAI,SAC/D,YAAY,oBAAoB;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACJ,CAAC;AAED,MAAI,gBAAgB;AACnB,WAAO;AAGR,MAAI;AACH,WAAO,MAAM,QAAQ,KAAK,CAAC,WAAW,WAAW,CAAC;AAAA,EACnD,SAAS,OAAO;AACf,QAAI,iBAAiB,sBAAsB;AAC1C,UAAI,QAAQ;AACX,cAAK,UAAU,MAAM,MAAM;AAAA,QAAC,CAAC,GACvB;AAGP,UAAM,YAAY,MAAM,QAAQ;AAAA,QAC/B,uBAAuB,QAAQ;AAAA,MAChC;AACA,UACC,WAAW,YAAY,YACtB,UAAU,UAAU,iCACpB,UAAU,UAAU;AAGrB,eAAO,MAAM;AAGd,YAAK,UAAU,MAAM,MAAM;AAAA,MAAC,CAAC,GACvB;AAAA,IACP;AAEA,UAAM;AAAA,EACP;AACD;AAIO,SAAS,2BAA2B,SAIZ;AAC9B,MAAM,EAAE,SAAS,UAAU,KAAK,IAAI;AACpC,MAAI,KAAK,UAAU;AAClB,UAAM,IAAI,MAAM,0DAA0D;AAI3E,MAAM,cAAc,QAAQ,IAAI;AAAA,IAI/B,kCAAkC,2BAA2B;AAAA,IAC7D;AAAA,IACA,KAAK;AAAA,EACN,GACI,QAAQ;AAEZ,SAAO,IAAI,eAA2B;AAAA,IACrC,KAAK,YAAY;AAChB,UAAI,SAAS,KAAK,YAAY;AAC7B,mBAAW,MAAM;AACjB;AAAA,MACD;AAEA,UAAM,MAAM,YAAY,KAAK;AAC7B,UAAI,IAAI,MAAM;AACb,mBAAW;AAAA,UACV,IAAI,MAAM,iBAAiB,KAAK,2BAA2B;AAAA,QAC5D;AACA;AAAA,MACD;AAEA,UAAI,IAAI,MAAM,gBAAgB,OAAO;AACpC,mBAAW;AAAA,UACV,IAAI,MAAM,iBAAiB,KAAK,2BAA2B;AAAA,QAC5D;AACA;AAAA,MACD;AAEA,UAAI,EAAE,IAAI,MAAM,iBAAiB,cAAc;AAC9C,mBAAW;AAAA,UACV,IAAI;AAAA,YACH;AAAA,UACD;AAAA,QACD;AACA;AAAA,MACD;AAEA,iBAAW,QAAQ,IAAI,WAAW,IAAI,MAAM,KAAK,CAAC,GAClD;AAAA,IACD;AAAA,EACD,CAAC;AACF;;;ACzrBA,SAAS,iBAAiB;AAiBnB,IAAM,gBAAgB;AAAA,EAC5B,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,0BAA0B;AAC3B;AAMO,IAAM,2BAAN,cAAuC,UAAU;AAAA,EACvD;AAAA,EACA;AAAA,EAEA,YAAY,QAAgB,OAA2B;AACtD,UAAM,GACN,KAAK,UAAU,QACf,KAAK,SAAS;AAAA,EACf;AAAA,EAEA,MAAM,yBAAyB,MAAqC;AACnE,QAAI,QAAQ;AACZ,IAAI,KAAK,UACR,QAAQ,KAAK;AAEd,QAAM,OAAO,GAAG,KAAK,IAAI,IAAI,KAAK;AAKlC,WAFwB,GADP,GADJ,MAAM,YAAY,IAAI,CACX,IAAI,KAAK,EACE;AAAA,EAGpC;AAAA,EAEA,MAAM,iBAAiB,MAAqC;AAC3D,QAAM,OAAO,MAAM,YAAY,KAAK,IAAI,GACpC,QAAQ;AACZ,WAAI,KAAK,UACR,QAAQ,KAAK,QAEP,GAAG,IAAI,IAAI,KAAK;AAAA,EACxB;AAAA,EAEA,MAAM,iBAAiB,MAAqC;AAE3D,WAAO,GADc,MAAM,KAAK,iBAAiB,IAAI,CAC/B;AAAA,EACvB;AAAA,EAEA,0BAA0B,OAAO,UAAkB,OAAe;AACjE,QAAM,aAAa,GAAG,cAAc,aAAa,GAAG,QAAQ,IACtD,OAAQ,MAAM,KAAK,OAAO,QAAQ,IAAY,UAAU,KAAM;AACpE,iBAAM,KAAK,OAAO,QAAQ,IAAI,YAAY,OAAO,EAAE,GAC5C;AAAA,EACR;AAAA,EAEA,MAAM,wBAAwB,MAAqC;AAClE,QAAI,QAAQ;AACZ,IAAI,KAAK,UACR,QAAQ,KAAK;AAEd,QAAM,qBAAqB,MAAM,YAAY,KAAK,OAAO,KAAK;AAE9D,WAAO,GAAG,cAAc,aAAa,GAAG,kBAAkB;AAAA,EAC3D;AAAA,EAEA,MAAM,cAAc,OAAuC;AAC1D,QAAI,CAAC;AACJ,YAAM,KAAK,OAAO,QAAQ,IAAI,cAAc,oBAAoB,EAAI;AAAA;AAEpE,eAAW,QAAQ,OAAO;AACzB,YAAM,kBAAkB,MAAM,KAAK,wBAAwB,IAAI;AAC/D,cAAM,KAAK,OAAO,QAAQ,IAAI,iBAAiB,EAAI;AAAA,MACpD;AAAA,EAEF;AAAA,EAEA,MAAM,mBAAmB,OAAuC;AAC/D,QAAI,CAAC;AACJ,YAAM,KAAK,OAAO,QAAQ;AAAA,QACzB,cAAc;AAAA,QACd;AAAA,MACD;AAAA;AAEA,eAAW,QAAQ,OAAO;AACzB,YAAM,WAAW,MAAM,KAAK,iBAAiB,IAAI;AACjD,cAAM,KAAK,OAAO,QAAQ;AAAA,UACzB,GAAG,cAAc,mBAAmB,GAAG,QAAQ;AAAA,UAC/C;AAAA,QACD;AAAA,MACD;AAAA,EAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eAAe,MAAoB,YAAoC;AAC5E,QAAM,WAAW,MAAM,KAAK,iBAAiB,IAAI;AAEjD,QACC,MAAM,KAAK,OAAO,QAAQ;AAAA,MACzB,GAAG,cAAc,cAAc,GAAG,QAAQ;AAAA,IAC3C;AAEA,YAAM,IAAI;AAAA,QACT,+CAA+C,KAAK,IAAI;AAAA,MACzD;AAGD,QAAI,qBAAqB,UAAU,GAAG;AAIrC,UAAM,eAAe,MAAM,KAAK,iBAAiB,IAAI,GAC/C,aAAa,MAAM,kBAAkB;AAAA,QAC1C,SAAS,KAAK,OAAO;AAAA,QACrB,UAAU;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,eAAe;AAAA,MAChB,CAAC;AAED,YAAM,KAAK,OAAO,QAAQ;AAAA,QACzB,GAAG,cAAc,cAAc,GAAG,QAAQ;AAAA,QAC1C;AAAA,UACC,oBAAoB;AAAA,UACpB,UAAU;AAAA,UACV,MAAM;AAAA,QACP;AAAA,MACD;AAAA,IACD;AACC,YAAM,KAAK,OAAO,QAAQ;AAAA,QACzB,GAAG,cAAc,cAAc,GAAG,QAAQ;AAAA,QAC1C;AAAA,MACD;AAAA,EAEF;AAAA;AAAA,EAGA,MAAM,cACL,MACA,OACA,OACgB;AAChB,QAAM,WAAW,MAAM,KAAK,iBAAiB,IAAI,GAC3C,oBAAoB;AAAA,MACzB,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,IAChB;AAEA,QACC,MAAM,KAAK,OAAO,QAAQ;AAAA,MACzB,GAAG,cAAc,cAAc,GAAG,QAAQ;AAAA,IAC3C;AAEA,YAAM,IAAI;AAAA,QACT,wDAAwD,KAAK,IAAI;AAAA,MAClE;AAGD,QAAI,OAAO;AACV,UAAM,QAAQ,MAAM,KAAK,wBAAwB,UAAU,KAAK,GAC1D,iBAAiB,MAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,MAAM;AAC9D,YAAM,UAAU,QAAQ,GAClB,eAAe,GAAG,cAAc,eAAe,GAAG,QAAQ,IAAI,OAAO;AAC3E,eAAO,KAAK,OAAO,QAAQ,IAAI,cAAc,iBAAiB;AAAA,MAC/D,CAAC;AAED,YAAM,QAAQ,IAAI,cAAc;AAAA,IACjC,OAAO;AACN,UAAM,eAAe,GAAG,cAAc,eAAe,GAAG,QAAQ;AAChE,YAAM,KAAK,OAAO,QAAQ,IAAI,cAAc,iBAAiB;AAAA,IAC9D;AAAA,EACD;AAAA,EAEA,MAAM,iBAAiB,MAAoB,OAAgB;AAC1D,QAAM,WAAW,MAAM,KAAK,iBAAiB,IAAI;AAEjD,QACC,MAAM,KAAK,OAAO,QAAQ;AAAA,MACzB,GAAG,cAAc,cAAc,GAAG,QAAQ;AAAA,IAC3C;AAEA,YAAM,IAAI;AAAA,QACT,2DAA2D,KAAK,IAAI;AAAA,MACrE;AAGD,QAAI,OAAO;AACV,UAAM,QAAQ,MAAM,KAAK,wBAAwB,UAAU,KAAK,GAC1D,gBAAgB,MAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,MAAM;AAC7D,YAAM,UAAU,QAAQ,GAClB,sBAAsB,GAAG,cAAc,kBAAkB,GAAG,QAAQ,IAAI,OAAO;AACrF,eAAO,KAAK,OAAO,QAAQ,IAAI,qBAAqB,EAAI;AAAA,MACzD,CAAC;AAED,YAAM,QAAQ,IAAI,aAAa;AAAA,IAChC,OAAO;AACN,UAAM,sBAAsB,GAAG,cAAc,kBAAkB,GAAG,QAAQ;AAC1E,YAAM,KAAK,OAAO,QAAQ,IAAI,qBAAqB,EAAI;AAAA,IACxD;AAAA,EACD;AAAA,EAEA,MAAM,UAAU,OAAiC;AAChD,QAAM,UAAiB;AAAA,MACtB,WAAW,oBAAI,KAAK;AAAA,MACpB,SAAS,MAAM;AAAA,MACf,MAAM,MAAM;AAAA,IACb;AAEA,UAAM,KAAK,OAAO,QAAQ;AAAA,MACzB,GAAG,cAAc,UAAU,GAAG,MAAM,IAAI;AAAA,MACxC;AAAA,IACD,GACA,MAAM,KAAK,QAAQ,aAAa,OAAO;AAAA,EACxC;AAAA,EAEA,MAAM,kBAAkB,MAAmC;AAC1D,QAAM,kBAAkB,MAAM,KAAK,yBAAyB,IAAI;AAChE,UAAM,KAAK,OAAO,QAAQ;AAAA,MACzB,GAAG,cAAc,mBAAmB,GAAG,eAAe;AAAA,MACtD;AAAA,IACD;AAAA,EACD;AACD;;;AV/LA,IAAM,gBAAoC;AAAA,EACzC,SAAS;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,EACV;AAAA,EACA,SAAS;AACV;AAwBA,SAAS,oBACR,OACA,OAAiC,oBAAI,QAAQ,GACnC;AAEV,MAAI,UAAU,QAAQ,OAAO,SAAU;AACtC,WAAO;AAKR,MAAI,KAAK,IAAI,KAAK;AACjB,WAAO,KAAK,IAAI,KAAK;AAKtB,MAAI,YAAY,OAAO,KAAK;AAC3B,WAAO,iBAAiB,KAAK;AAG9B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACzB,QAAM,SAAoB,CAAC;AAC3B,SAAK,IAAI,OAAO,MAAM;AACtB,aAAW,QAAQ;AAClB,aAAO,KAAK,oBAAoB,MAAM,IAAI,CAAC;AAE5C,WAAO;AAAA,EACR;AAEA,MAAI,iBAAiB,KAAK;AACzB,QAAM,SAAS,oBAAI,IAAI;AACvB,SAAK,IAAI,OAAO,MAAM;AACtB,aAAW,CAAC,GAAG,CAAC,KAAK;AACpB,aAAO,IAAI,oBAAoB,GAAG,IAAI,GAAG,oBAAoB,GAAG,IAAI,CAAC;AAEtE,WAAO;AAAA,EACR;AAEA,MAAI,iBAAiB,KAAK;AACzB,QAAM,SAAS,oBAAI,IAAI;AACvB,SAAK,IAAI,OAAO,MAAM;AACtB,aAAW,KAAK;AACf,aAAO,IAAI,oBAAoB,GAAG,IAAI,CAAC;AAExC,WAAO;AAAA,EACR;AAIA,MAAM,QAAQ,OAAO,eAAe,KAAK;AACzC,MAAI,UAAU,OAAO,aAAa,UAAU,MAAM;AACjD,QAAM,SAAkC,CAAC;AACzC,SAAK,IAAI,OAAO,MAAM;AACtB,aAAW,OAAO,OAAO,KAAK,KAAK;AAClC,aAAO,GAAG,IAAI;AAAA,QACZ,MAAkC,GAAG;AAAA,QACtC;AAAA,MACD;AAED,WAAO;AAAA,EACR;AAEA,SAAO;AACR;AAGA,SAAS,iBAAiB,MAAwC;AACjE,MAAM,cAAc,KAAK,OAAO;AAAA,IAC/B,KAAK;AAAA,IACL,KAAK,aAAa,KAAK;AAAA,EACxB;AACA,SAAO,IAAK,KAAK,YAAyB,WAAW;AACtD;AAmBA,IAAM,iBAAiB,kBAEV,UAAN,cAAsBC,WAAU;AAAA,EACtC;AAAA,EACA;AAAA,EAEA,YAAiC,oBAAI,IAAI;AAAA,EACzC,uBAA+B;AAAA,EAE/B;AAAA,EAEA,YACC,QACA,OACA,cACC;AACD,UAAM,GACN,KAAK,UAAU,QACf,KAAK,SAAS,OACd,KAAK,gBAAgB;AAAA,EACtB;AAAA,EAEA,MAAM,wBAAuC;AAC5C,QAAI,KAAK,QAAQ,eAAe,cAAc;AAC7C;AAGD,QAAM,SAAS,MAAM,KAAK,QAAQ,UAAU;AAE5C,QAAI,WAAW;AACd,YAAM,IAAI,MAAM,cAAc,UAAU;AAGzC,QAAI,WAAW,yBAAgC;AAC9C,YAAM,KAAK,OAAO,QAAQ,IAAI,gBAAgB,oBAAI,KAAK,CAAC;AACxD,UAAM,WACL,MAAM,KAAK,OAAO,QAAQ,IAAsB,iBAAiB;AAClE,YAAI,YACH,MAAM,KAAK,QAAQ;AAAA,QAClB,SAAS;AAAA,QACT,SAAS,SAAS;AAAA;AAAA,MAEnB,GAEK,IAAI,MAAM,cAAc,UAAU;AAAA,IACzC;AAAA,EACD;AAAA,EAEA,UAAU,MAAsB;AAC/B,QAAI,MAAM,KAAK,UAAU,IAAI,IAAI,KAAK;AAEtC,kBACA,KAAK,UAAU,IAAI,MAAM,GAAG,GAErB;AAAA,EACR;AAAA,EAEA,kBAAkB,SAMT;AACR,QAAM,EAAE,UAAU,YAAY,aAAa,QAAQ,eAAe,IACjE;AACD,IAAI,cAAc,KAAK,kBAAkB,UACxC,mBAAmB,KAAK,QAAQ,kBAAkB;AAAA,MACjD;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,MACA,GAAI,YAAY,WAAW,EAAE,OAAO;AAAA,MACpC,GAAI,mBAAmB,UAAa,EAAE,QAAQ,eAAe;AAAA,IAC9D,CAAC;AAAA,EAEH;AAAA,EAcA,MAAM,GACL,SACG,MACmC;AACtC,QAAI,SACA,YACA,iBAEE,QAAQ,KAAK,CAAC;AACpB,QAAI,OAAO,SAAU;AACpB,gBAAU,OACV,aAAa,CAAC,GACd,kBAAkB,qBAAqB,MAAM,KAAK,CAAC,CAAC;AAAA,SAC9C;AAGN,UAFA,aAAc,SAAS,CAAC,GACxB,UAAU,KAAK,CAAC,GACZ,OAAO,WAAY,YAAY;AAClC,YAAM,QAAQ,IAAI;AAAA,UACjB,SAAS,IAAI;AAAA,QACd;AACA,oBAAM,cAAc,IACd;AAAA,MACP;AACA,wBAAkB,qBAAqB,MAAM,KAAK,CAAC,CAAC;AAAA,IACrD;AACA,QAAM,EAAE,UAAU,YAAY,eAAe,IAAI,mBAAmB,CAAC,GAE/D,aAAa,KAAK,kBAAkB,QACpC,SAAS,aACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,IACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAEF,QAAI,CAAC,YAAY;AAChB,WAAK;AAEL,UAAM,YAAY,KAAK,QAAQ;AAC/B,UAAI,KAAK,uBAAuB;AAC/B,cAAM,IAAI;AAAA,UACT,gBAAgB,SAAS;AAAA,QAC1B;AAAA,IAEF;AAEA,QAAI,CAAC,gBAAgB,IAAI,GAAG;AAK3B,UAAM,QAAQ,IAAI;AAAA,QACjB,cAAc,IAAI,yBAAyB,oBAAoB;AAAA,MAChE;AACA,kBAAM,cAAc,IACd;AAAA,IACP;AAEA,QAAI,CAAC,kBAAkB,UAAU,GAAG;AACnC,UAAM,QAAQ,IAAI;AAAA,QACjB,oBAAoB,IAAI;AAAA,MACzB;AACA,kBAAM,cAAc,IACd;AAAA,IACP;AAEA,QAAI,SAA6B;AAAA,MAChC,GAAG;AAAA,MACH,GAAG;AAAA,MACH,SAAS;AAAA,QACR,GAAG,cAAc;AAAA,QACjB,GAAG,WAAW;AAAA,MACf;AAAA,IACD,GAEI,UACA,OACA,qBACE,eAAe,KAAK;AAC1B,QAAI,iBAAiB;AACpB,iBAAW,GAAG,yBAAyB,GAAG,aAAa,QAAQ,IAC/D,QAAQ,GACR,sBAAsB;AAAA,SAChB;AACN,UAAM,OAAO,MAAM,YAAY,IAAI;AACnC,cAAQ,KAAK,UAAU,SAAS,IAAI,GACpC,WAAW,GAAG,IAAI,IAAI,KAAK,IAC3B,sBAAsB,GAAG,IAAI,IAAI,KAAK;AAAA,IACvC;AAEA,QAAM,WAAW,GAAG,QAAQ,UACtB,gBAAgB,uBAAuB,QAAQ,GAC/C,YAAY,GAAG,QAAQ,WACvB,WAAW,GAAG,QAAQ,UACtB,eAAe,GAAG,QAAQ,aAC1B,uBAAuB,GAAG,cAAc,mBAAmB,GAAG,QAAQ,IAEtE,WAAW,MAAM,KAAK,OAAO,QAAQ,IAAI;AAAA,MAC9C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC,GAGK,kBAAkB,SAAS,IAAI,aAAa,GAI5C,eAAe,SAAS,IAAI,SAAS;AAG3C,QAAI,iBAAiB,UAAU,2BAA4B;AAC1D,UAAM,cAAc,SAAS,IAAI,YAAY;AAM7C,UALyB;AAAA,QACxB,KAAK,OAAO;AAAA,QACZ;AAAA,QACA;AAAA,MACD,MACyB;AACxB,cAAM,IAAI;AAAA,UACT,qBAAqB,mBAAmB;AAAA,QACzC;AAGD,UAAMC,UAAS,2BAA2B;AAAA,QACzC,SAAS,KAAK,OAAO;AAAA,QACrB;AAAA,QACA,MAAM;AAAA,MACP,CAAC;AACD,kBAAK,kBAAkB;AAAA,QACtB;AAAA,QACA;AAAA,QACA,aAAa;AAAA,UACZ,MAAM,EAAE,MAAM,MAAM;AAAA,UACpB,SAAS,aAAa,kBAAkB;AAAA,UACxC,QAAQ,gBAAgB;AAAA,QACzB;AAAA,QACA,QAAQA;AAAA,QACR;AAAA,MACD,CAAC,GACMA;AAAA,IACR,MAAO,CAAqC,mBAAoB,QAE/D,MAAM,2BAA2B,KAAK,OAAO,SAAS,QAAQ,EAAE;AAAA,MAC/D,MAAM;AAAA,MAAC;AAAA,IACR;AAGD,QAAM,cAAc,SAAS,IAAI,QAAQ;AAEzC,QAAI,aAAa;AAChB,UAAM,cAAc,SAAS,IAAI,YAAY,GACvCA,UAAU,YAA6B;AAC7C,kBAAK,kBAAkB;AAAA,QACtB;AAAA,QACA;AAAA,QACA,aAAa;AAAA,UACZ,MAAM,EAAE,MAAM,MAAM;AAAA,UACpB,SAAS,aAAa,kBAAkB;AAAA,UACxC,QAAQ,gBAAgB;AAAA,QACzB;AAAA,QACA,QAAQA;AAAA,QACR;AAAA,MACD,CAAC,GACMA;AAAA,IACR;AAEA,QAAM,aAAmD,SAAS;AAAA,MACjE;AAAA,IACD;AAEA,QAAI;AACH,uBAAW,cAAc,IACnB;AAIP,IAAI,iBAAiB,SACpB,MAAM,KAAK,OAAO,QAAQ,IAAI,WAAW,MAAM,IAE/C,SAAS;AAGV,QAAM,cAAc,KAAK,QACvB,iBAAiB,QAAQ,EACzB;AAAA,MAAO,CAAC,QACR;AAAA,QACC,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,MACR,EAAE,SAAS,IAAI,KAAK;AAAA,IACrB;AAGD,QACC,YAAY,SAAS,KACrB,YAAY,GAAG,EAAE,GAAG,UAAU,OAAO,cACpC;AAED,UAAM,YAAc,MAAM,KAAK,OAAO,QAAQ;AAAA,QAC7C;AAAA,MACD,KAAoB;AAAA,QACnB,gBAAgB;AAAA,MACjB,GAEM,oBAAoB,GAAG,QAAQ,IAAI,UAAU,cAAc,IAG3D,iBAAiB,KAAK,QAAQ,cAAc;AAAA,QACjD,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,SAAS;AAAA,MACnD;AAEA,MAAI,mBAAmB,UAEtB,KAAK,QAAQ,cAAc,OAAO,cAAc,GAEjD,KAAK,QAAQ;AAAA,QACZ,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,UACC,SAAS,UAAU;AAAA,UACnB,OAAO;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,UACV;AAAA,QACD;AAAA,MACD,GAEA,MAAM,KAAK,OAAO,QAAQ,IAAI,cAAc,SAAS;AAAA,IACtD;AAEA,QAAM,YAAY,OACjB,qBACyC;AACzC,UAAM,YAAc,MAAM,KAAK,OAAO,QAAQ;AAAA,QAC7C;AAAA,MACD,KAAoB;AAAA,QACnB,gBAAgB;AAAA,MACjB,GACM,qBAAqB,OAA4B;AAAA,QACtD,MAAM,EAAE,MAAM,MAAM;AAAA,QACpB,SAAS,UAAU;AAAA,QACnB;AAAA,MACD;AASA,UANA,MAAM,2BAA2B,KAAK,OAAO,SAAS,QAAQ,EAAE;AAAA,QAC/D,MAAM;AAAA,QAAC;AAAA,MACR,GAEA,MAAM,KAAK,QAAQ,eAAe,QAAQ,KAAK,OAAO,GAElD,UAAU,kBAAkB;AAC/B,aAAK,QAAQ,SAAS,OAAO,OAAO,UAAU,qBAAqB;AAAA,UAClE;AAAA,QACD,CAAC;AAAA,WACK;AAEN,YAAM,oBAAoB,GAAG,QAAQ,IAAI,UAAU,cAAc,IAE3D,eAAe,KAAK,QAAQ,cAAc;AAAA,UAC/C,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,SAAS;AAAA,QACnD;AAEA,YAAI,iBAAiB,QAAW;AAC/B,cAAM,wBAAwB,MAAM,KAAK,OAAO,QAAQ;AAAA,YACvD,cAAc;AAAA,UACf,GACM,wBACL,MAAM,KAAK,OAAO,QAAQ,IAAI,oBAAoB,GAC7C,oBACL,yBAAyB;AAE1B,gBAAM,KAAK,QAAQ,eAAe,QAAQ,KAAK,OAAO,GACtD,MAAM,UAAU;AAAA,YACf,oBAAoB,IAAI,aAAa,kBAAkB,KAAK,IAAI;AAAA,UACjE,GACA,MAAM,KAAK,QAAQ,eAAe,QAAQ,KAAK,OAAO,GAEtD,KAAK,QAAQ,cAAc,OAAO;AAAA,YACjC,MAAM;AAAA,YACN,MAAM;AAAA,UACP,CAAC;AAAA,QACF;AAAA,MACD;AAEA,UAAIA,SAEE,mBACL,MAAM,KAAK,OAAO,QAAQ,IAAsB,iBAAiB;AAClE,UAAI,CAAC;AACJ,cAAM,IAAI,MAAM,+BAA+B;AAEhD,UAAM,EAAE,WAAW,SAAS,IAAI,kBAE5B,mBAAmB,IACnB,gBACE,kBAAkB,IAAI,gBAAgB,GACtC,sBAAsB,YAAY,IAAI;AAAA,QAC3C,gBAAgB;AAAA,QAChB,KAAK,QAAQ,sBAAsB;AAAA,MACpC,CAAC;AAED,UAAI;AACH,YAAM,iBAAiB,YAA4B;AAClD,cAAMC,qBAAoB,GAAG,QAAQ,IAAI,UAAU,cAAc,IAC7D,UAAU,EAAG,OAAO,OAAO;AAC/B,UAAI,qBACH,UAAU,IAGX,MAAM,KAAK,QAAQ,cAAc,IAAI;AAAA,YACpC,MAAMA;AAAA,YACN,iBAAiB,KAAK,IAAI,IAAI;AAAA,YAC9B,MAAM;AAAA,UACP,CAAC,GACD,MAAM,UAAU,KAAK,OAAO,GAI5B,MAAM,KAAK,QAAQ,cAAc,OAAO;AAAA,YACvC,MAAMA;AAAA,YACN,MAAM;AAAA,UACP,CAAC;AACD,cAAM,QAAQ,IAAI;AAAA,YACjB,6BAA6B,OAAO;AAAA,UACrC;AACA,gCAAgB,MAAM,KAAK,GACrB;AAAA,QACP;AAEA,aAAK,QAAQ;AAAA,UACZ,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,YACC,SAAS,UAAU,iBAAiB;AAAA,UACrC;AAAA,QACD,GACA,UAAU,kBACV,MAAM,KAAK,OAAO,QAAQ,IAAI,cAAc,SAAS;AACrD,YAAM,oBAAoB,GAAG,QAAQ,IAAI,UAAU,cAAc,IAE3D,eAAe,GAAG,cAAc,eAAe,GAAG,QAAQ,IAC1D,sBAAsB,MAAM,KAAK,OAAO,QAAQ,IAGnD,YAAY,GACT,qBAAqB,MAAM,KAAK,OAAO,QAAQ,IAGlD,GAAG,YAAY,IAAI,UAAU,cAAc,EAAE,GAC1C,mBAAmB,uBAAuB;AAGhD,YAAI,kBAAkB;AACrB,cAAM,eAAe,IAAI,MAAM,iBAAiB,OAAO;AACvD,6BAAa,OAAO,iBAAiB,MAC/B;AAAA,QACP;AAEA,YAAM,gBAAgB,MAAM,KAAK,OAAO,QAAQ;AAAA,UAC/C,GAAG,cAAc,cAAc,GAAG,QAAQ;AAAA,QAC3C,GAEM,sBAAsB,GAAG,cAAc,kBAAkB,GAAG,QAAQ,IACpE,wBACL,MAAM,KAAK,OAAO,QAAQ,IAAI,mBAAmB,GAC5C,uBAAuB,MAAM,KAAK,OAAO,QAAQ;AAAA,UACtD,GAAG,mBAAmB,IAAI,UAAU,cAAc;AAAA,QACnD,GACM,mBAAmB,yBAAyB,sBAE9C,aAEE,oBAAoB,OACzB,OACA,sBACsB;AACtB,cAAI,CAAC,qBAAqB,KAAK,GAAG;AAQjC,gBAAM,SAAS,oBAAoB,KAAK;AACxC,yBAAM,KAAK,OAAO,QAAQ,IAAI,UAAU,EAAE,OAAO,OAAO,CAAC,GACzD,gBAAgB,MAAM,eAAe,GAErC,KAAK,QAAQ,cAAc,OAAO;AAAA,cACjC,MAAM;AAAA,cACN,MAAM;AAAA,YACP,CAAC,GACM;AAAA,UACR;AAEA,6BAAmB;AACnB,cAAM,aAAa,MAAM,kBAAkB;AAAA,YAC1C,SAAS,KAAK,OAAO;AAAA,YACrB;AAAA,YACA,SAAS,UAAU;AAAA,YACnB,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,aAAa;AAAA,UACd,CAAC;AACD,kCAAiB,YAEjB,gBAAgB,MAAM,eAAe,GAErC,KAAK,QAAQ,cAAc,OAAO;AAAA,YACjC,MAAM;AAAA,YACN,MAAM;AAAA,UACP,CAAC,GACM,2BAA2B;AAAA,YACjC,SAAS,KAAK,OAAO;AAAA,YACrB;AAAA,YACA,MAAM;AAAA,UACP,CAAC;AAAA,QACF;AAEA,YAAI;AACH,UAAAD,UAAS,MAAM,eAAe;AAAA,iBACpB;AAEV,cACC,iBACA,OAAO,iBAAkB,YACxB,cAA0C,oBAC1C;AACD,gBAAM,WAAW;AAKjB,YAAAA,UAAS,2BAA2B;AAAA,cACnC,SAAS,KAAK,OAAO;AAAA,cACrB,UAAU,SAAS;AAAA,cACnB,MAAM,SAAS;AAAA,YAChB,CAAC;AAAA,UACF;AACC,YAAAA,UAAS;AAAA;AAGV,wBAAc,eAAe,GAC7BA,UAAS,MAAM,QAAQ,KAAK;AAAA,YAC3B,iBAAiB;AAAA,cAChB,MAAM,EAAE,MAAM,MAAM;AAAA,cACpB,SAAS,UAAU;AAAA,cACnB,QAAQ,gBAAgB,MAAM;AAAA,YAC/B,CAAC;AAAA,YACD;AAAA,UACD,CAAC;AAMF,YAAI;AACH,UAAAA,UAAS,MAAM,kBAAkBA,SAAQ,WAAW;AAAA,QACrD,SAAS,GAAG;AAQX,cAPA,gBAAgB,MAAM,cAAc,GAEpC,KAAK,QAAQ,cAAc,OAAO;AAAA,YACjC,MAAM;AAAA,YACN,MAAM;AAAA,UACP,CAAC,GAEG,aAAa;AAChB,kBAAM;AAOP,cACC,aAAa,kCACb,aAAa,6BACb,aAAa,6BACZ;AACD,iBAAK,QAAQ;AAAA,cACZ,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,gBACC,SAAS,UAAU;AAAA,gBACnB,OAAO,IAAI,mBAAmB,EAAE,OAAO;AAAA,cACxC;AAAA,YACD,GACA,KAAK,QAAQ;AAAA,cACZ,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,CAAC;AAAA,YACF,GACA,KAAK,QAAQ,mCAAyC,MAAM,MAAM;AAAA,cACjE,OAAO,IAAI;AAAA,gBACV,uEAAuE,IAAI,gDAAgD,EAAE,OAAO;AAAA,cACrI;AAAA,YACD,CAAC,GAED,MAAM,KAAK,QAAQ;AAAA,cAClB;AAAA,cACA,SAAS;AAAA;AAAA,YAEV,GACA,MAAM,KAAK,QAAQ,eAAe,QAAQ,KAAK,OAAO,GACtD,MAAM,KAAK,QAAQ,MAAM,cAAc,gBAAgB;AACvD;AAAA,UACD;AAEA,cAAI,aAAa,+BAA+B;AAC/C,iBAAK,QAAQ;AAAA,cACZ,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,gBACC,SAAS,UAAU;AAAA,gBACnB,OAAO,IAAI,mBAAmB,EAAE,OAAO;AAAA,cACxC;AAAA,YACD,GACA,KAAK,QAAQ;AAAA,cACZ,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,CAAC;AAAA,YACF,GACA,KAAK,QAAQ,mCAAyC,MAAM,MAAM;AAAA,cACjE,OAAO,IAAI;AAAA,gBACV;AAAA,cACD;AAAA,YACD,CAAC,GAED,MAAM,KAAK,QAAQ;AAAA,cAClB;AAAA,cACA,SAAS;AAAA;AAAA,YAEV,GACA,MAAM,KAAK,QAAQ,eAAe,QAAQ,KAAK,OAAO,GACtD,MAAM,KAAK,QAAQ,MAAM,cAAc,sBAAsB;AAC7D;AAAA,UACD;AAGA,cAAI,aAAa,SAAS,EAAE,SAAS;AACpC,iBAAK,QAAQ;AAAA,cACZ,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA;AAAA,gBACC,SAAS,UAAU;AAAA,gBACnB,OAAO,IAAI;AAAA,kBACV,6BAA6B,IAAI;AAAA,gBAClC;AAAA,cACD;AAAA,YACD,GACA,KAAK,QAAQ;AAAA,cACZ,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,CAAC;AAAA,YACF,GACA,KAAK,QAAQ,mCAAyC,MAAM,MAAM;AAAA,cACjE,OAAO,IAAI;AAAA,gBACV,uEAAuE,IAAI;AAAA,cAC5E;AAAA,YACD,CAAC,GAED,MAAM,KAAK,QAAQ;AAAA,cAClB;AAAA,cACA,SAAS;AAAA;AAAA,YAEV,GACA,MAAM,KAAK,QAAQ,eAAe,QAAQ,KAAK,OAAO,GACtD,MAAM,KAAK,QAAQ,MAAM,cAAc,gBAAgB;AAAA,cACjD,OACN,aAAa,SACb,EAAE,QAAQ,SAAS,uCAAuC,IAEpD,IAAI;AAAA,YACT,QAAQ,mBAAmB;AAAA,UAC5B,IAGM,IAAI;AAAA,YACT,uBAAuB,mBAAmB;AAAA,UAC3C;AAED;AAAA,QACD;AAIA,aAAK,QAAQ,cAAc,OAAO;AAAA,UACjC,MAAM;AAAA,UACN,MAAM;AAAA,QACP,CAAC,GAED,KAAK,QAAQ;AAAA,UACZ,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,YACC,SAAS,UAAU;AAAA,UACpB;AAAA,QACD;AAAA,MACD,SAAS,GAAG;AACX,YAAM,QAAQ;AASd,YANA,KAAK,QAAQ,cAAc,OAAO;AAAA,UACjC,MAAM,GAAG,QAAQ,IAAI,UAAU,cAAc;AAAA,UAC7C,MAAM;AAAA,QACP,CAAC,GAGG;AACH,cAAI;AACH,kBAAM;AAAA,cACL,KAAK,OAAO;AAAA,cACZ;AAAA,cACA,UAAU;AAAA,YACX;AAAA,UACD,QAAQ;AAAA,UAER;AAGD,YACC,aAAa,UACZ,MAAM,SAAS,uBACf,MAAM,QAAQ,WAAW,mBAAmB,IAC5C;AACD,cAAM,eAAe,gCAAgC,IAClD,IAAI,2BAA2B,CAAC,IAChC,IAAI;AAAA,YACJ,gDAAgD,EAAE,OAAO;AAAA,UAC1D;AAEF,qBAAK,QAAQ;AAAA,YACZ,OAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA;AAAA,cACC,SAAS,UAAU;AAAA,cACnB,OAAO;AAAA,YACR;AAAA,UACD,GACA,KAAK,QAAQ;AAAA,YACZ,OAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA,CAAC;AAAA,UACF,GACA,KAAK,kBAAkB;AAAA,YACtB;AAAA,YACA;AAAA,YACA,aAAa,mBAAmB;AAAA,YAChC;AAAA,UACD,CAAC,GAEK;AAAA,QACP;AAmBA,YAjBA,KAAK,QAAQ;AAAA,UACZ,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,YACC,SAAS,UAAU;AAAA,YACnB,OAAO;AAAA,cACN,MAAM,MAAM;AAAA,cACZ,SAAS,MAAM;AAAA;AAAA;AAAA,YAGhB;AAAA,UACD;AAAA,QACD,GAEA,MAAM,KAAK,OAAO,QAAQ,IAAI,cAAc,SAAS,GAEjD,UAAU,kBAAkB,OAAO,QAAQ,OAAO;AAErD,cAAM,aAAa,kBAAkB,QAAQ,SAAS,GAChD,wBAAwB,MAAM,KAAK,OAAO,QAAQ;AAAA,YACvD,cAAc;AAAA,UACf,GACM,wBACL,MAAM,KAAK,OAAO,QAAQ,IAAI,oBAAoB,GAG7C,oBADL,yBAAyB,wBACoB,IAAI,YAE5C,oBAAoB,GAAG,QAAQ,IAAI,UAAU,cAAc;AAEjE,gBAAM,KAAK,QAAQ,cAAc,IAAI;AAAA,YACpC,MAAM;AAAA,YACN,iBAAiB,KAAK,IAAI,IAAI;AAAA,YAC9B,MAAM;AAAA,UACP,CAAC,GACD,MAAM,KAAK,QAAQ,eAAe,QAAQ,KAAK,OAAO;AAGtD;AACC,gBAAM,mBAAmB,KAAK,QAAQ,gBAAgB,QAClD,oBAAoB;AACxB,kBAAM,QAAQ,KAAK;AAAA,cAClB,UAAU,KAAK,iBAAiB;AAAA,cAChC,IAAI,QAAc,CAAC,YAAY;AAC9B,oBAAI,iBAAiB,SAAS;AAC7B,0BAAQ;AACR;AAAA,gBACD;AACA,iCAAiB,iBAAiB,SAAS,MAAM,QAAQ,GAAG;AAAA,kBAC3D,MAAM;AAAA,gBACP,CAAC;AAAA,cACF,CAAC;AAAA,YACF,CAAC;AACD,gBAAM,cAAc,MAAM,KAAK,QAAQ,UAAU;AAOjD,iBALC,gBAAgB,kBAChB,gBAAgB,6BAEhB,oBAAoB,KAEjB;AACH,oBAAM,IAAI,MAAM,cAAc,UAAU;AAAA,UAE1C;AAIA,sBAAK,QAAQ,cAAc,OAAO;AAAA,YACjC,MAAM;AAAA,YACN,MAAM;AAAA,UACP,CAAC,GAEM,UAAU,gBAAgB;AAAA,QAClC,OAAO;AACN,gBAAM,KAAK,QAAQ,eAAe,QAAQ,KAAK,OAAO;AAEtD,cAAI;AACH,kBAAM;AAAA,cACL,KAAK,OAAO;AAAA,cACZ;AAAA,cACA,UAAU;AAAA,YACX;AAAA,UACD,QAAQ;AAAA,UAER;AACA,qBAAK,QAAQ;AAAA,YACZ,OAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA,CAAC;AAAA,UACF,GACA,KAAK,kBAAkB;AAAA,YACtB;AAAA,YACA;AAAA,YACA,aAAa,mBAAmB;AAAA,YAChC;AAAA,UACD,CAAC,GAED,MAAM,KAAK,OAAO,QAAQ,IAAI,UAAU,KAAK,GACvC;AAAA,QACP;AAAA,MACD;AAEA,kBAAK,QAAQ,SAAS,OAAO,SAAS,UAAU,qBAAqB;AAAA;AAAA,QAEpE,QAAQ,iBAAiB,SAAYA;AAAA,QACrC,GAAI,kBAAkB;AAAA,UACrB,cAAc,EAAE,UAAU,MAAM,eAAe;AAAA,QAChD;AAAA,MACD,CAAC,GACD,KAAK,kBAAkB;AAAA,QACtB;AAAA,QACA;AAAA,QACA,aAAa,mBAAmB;AAAA,QAChC,QAAQA;AAAA,QACR;AAAA,MACD,CAAC,GACD,MAAM,KAAK,QAAQ,eAAe,QAAQ,KAAK,OAAO,GAC/CA;AAAA,IACR,GAEM,SAAS,MAAM,UAAU,OAAO;AAGtC,iBAAM,KAAK,sBAAsB,GAE1B;AAAA,EACR;AAAA,EAEA,MAAM,MAAM,MAAc,UAAgD;AACzE,IAAI,OAAO,YAAY,aACtB,WAAW,EAAG,QAAQ;AAGvB,QAAM,OAAO,MAAM,YAAY,OAAO,SAAS,SAAS,CAAC,GACnD,QAAQ,KAAK,UAAU,WAAW,OAAO,SAAS,SAAS,CAAC,GAC5D,WAAW,GAAG,IAAI,IAAI,KAAK,IAC3B,uBAAuB,GAAG,IAAI,IAAI,KAAK,IAEvC,WAAW,GAAG,QAAQ,UACtB,qBAAqB,GAAG,QAAQ,gBAChC,cAAc,MAAM,KAAK,OAAO,QAAQ,IAAI,QAAQ,GAEpD,qBAAqB,MAAM;AAAA,MAChC,OAAO,KAAK,UAAU,WAAW,IAAI;AAAA,IACtC,GACM,mBAAmB,MAAM,KAAK,OAAO,QAAQ;AAAA,MAClD,GAAG,cAAc,aAAa,GAAG,kBAAkB;AAAA,IACpD,GAKM,eAJmB,MAAM,KAAK,OAAO,QAAQ;AAAA,MAClD,cAAc;AAAA,IACf,KAEyC;AAEzC,QAAI,eAAe,MAAW;AAE7B,UAAM,UAAU,KAAK,QAAQ,cAAc;AAAA,QAC1C,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,SAAS;AAAA,MAC1C;AAEA,MAAI,YAAY,WACf,MAAM,UAAU;AAAA,QACf,eAAe,IAAI,QAAQ,kBAAkB,KAAK,IAAI;AAAA,MACvD,GAEA,KAAK,QAAQ,cAAc,OAAO,EAAE,MAAM,UAAU,MAAM,QAAQ,CAAC,IAGlE,MAAM,KAAK,OAAO,QAAQ,IAAI,kBAAkB,KAAM,SAEvD,KAAK,QAAQ;AAAA;AAAA,QAEZ;AAAA,QACA;AAAA,QACA,CAAC;AAAA,MACF,GACA,MAAM,KAAK,OAAO,QAAQ,IAAI,oBAAoB,EAAI;AAEvD;AAAA,IACD;AAYA,QAVA,KAAK,QAAQ;AAAA;AAAA,MAEZ;AAAA,MACA;AAAA,MACA;AAAA,QACC,YAAY;AAAA,MACb;AAAA,IACD,GAGI,CADH,MAAM,KAAK,OAAO,QAAQ,IAAsB,iBAAiB;AAEjE,YAAM,IAAI,MAAM,+BAA+B;AAIhD,UAAM,KAAK,OAAO,QAAQ,IAAI,UAAU,EAAI,GAG5C,MAAM,KAAK,QAAQ,cAAc,IAAI;AAAA,MACpC,MAAM;AAAA,MACN,iBAAiB,KAAK,IAAI,KAAK,eAAe,IAAI;AAAA,MAClD,MAAM;AAAA,IACP,CAAC;AAGD,QAAM,cAAc,KAAK,QAAQ,gBAAgB,QAC3C,gBAAgB,eAAe,IAAI,UAErC,oBAAoB;AACxB,UAAM,QAAQ,KAAK;AAAA,MAClB,UAAU,KAAK,aAAa;AAAA,MAC5B,IAAI,QAAc,CAAC,YAAY;AAC9B,YAAI,YAAY,SAAS;AACxB,kBAAQ;AACR;AAAA,QACD;AACA,oBAAY,iBAAiB,SAAS,MAAM,QAAQ,GAAG;AAAA,UACtD,MAAM;AAAA,QACP,CAAC;AAAA,MACF,CAAC;AAAA,IACF,CAAC;AAGD,QAAM,mBAAmB,MAAM,KAAK,QAAQ,UAAU;AAQtD,SANC,qBAAqB,kBACrB,qBAAqB,6BAErB,oBAAoB,KAGjB;AAEH,YAAM,IAAI,MAAM,cAAc,UAAU;AAGzC,SAAK,QAAQ;AAAA;AAAA,MAEZ;AAAA,MACA;AAAA,MACA,CAAC;AAAA,IACF,GACA,MAAM,KAAK,OAAO,QAAQ,IAAI,oBAAoB,EAAI,GAGtD,KAAK,QAAQ,cAAc,OAAO,EAAE,MAAM,UAAU,MAAM,QAAQ,CAAC;AAAA,EACpE;AAAA,EAEA,MAAM,WAAW,MAAc,WAAyC;AACvE,IAAI,qBAAqB,SACxB,YAAY,UAAU,QAAQ;AAG/B,QAAM,MAAM,KAAK,IAAI;AAErB,QAAI,YAAY;AACf,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAGD,WAAO,KAAK,MAAM,MAAM,YAAY,GAAG;AAAA,EACxC;AAAA,EAEA,MAAM,aACL,MACA,SAIgC;AAChC,IAAK,QAAQ,YACZ,QAAQ,UAAU;AAGnB,QAAM,QAAQ,KAAK,UAAU,kBAAkB,IAAI,GAC7C,8BAA8B,GAAG,IAAI,IAAI,KAAK,IAE9C,WAAW,GADJ,MAAM,YAAY,2BAA2B,CAClC,IAAI,KAAK,IAC3B,kBAAkB,GAAG,QAAQ,UAC7B,WAAW,GAAG,QAAQ,UAEtB,0BAA0B,GAAG,QAAQ,YAErC,eAAe,IAAI;AAAA,MACxB,6BAA6B,EAAG,QAAQ,OAAO,CAAC;AAAA,IACjD,GAEM,cAAc,MAAM,KAAK,OAAO,QAAQ,IAAW,eAAe;AAExE,QAAI;AAGH,aADE,MAAM,KAAK,OAAO,QAAQ,IAAI,eAAe,KAAM,QAEpD,KAAK,QAAQ;AAAA;AAAA,QAEZ;AAAA,QACA;AAAA,QACA;AAAA,MACD,GAEM;AAER,QAAM,aACJ,MAAM,KAAK,OAAO,QAAQ,IAAI,QAAQ;AAExC,QAAI;AACH,uBAAW,cAAc,IACnB;AAOP,IAJwB,MAAM,KAAK,OAAO,QAAQ;AAAA,MACjD;AAAA,IACD,MAGC,KAAK,QAAQ;AAAA;AAAA,MAEZ;AAAA,MACA;AAAA,MACA;AAAA,QACC,OAAO,QAAQ;AAAA,MAChB;AAAA,IACD,GAEA,MAAM,KAAK,OAAO,QAAQ,IAAI,yBAAyB,EAAI;AAK5D,QAAM,iBAAiB,KAAK,QAAQ,cAAc;AAAA,MACjD,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,SAAS;AAAA,IAC1C,GACM,oBAAoB,MAAM,KAAK,OAAO,QAAQ;AAAA,MACnD,GAAG,cAAc,mBAAmB,GAAG,eAAe;AAAA,IACvD;AACA,QACE,mBAAmB,UACnB,KAAK,QAAQ,kBAAkB,UAC/B,KAAK,QAAQ,cAAc,qBAAqB;AAAA,MAC/C,MAAM;AAAA,MACN,MAAM;AAAA,IACP,CAAC,KACD,mBAAmB,UACnB,eAAe,kBAAkB,KAAK,IAAI,KAC3C;AAEA,iBAAK,QAAQ;AAAA;AAAA,QAEZ;AAAA,QACA;AAAA,QACA;AAAA,UACC,MAAM,aAAa;AAAA,UACnB,SAAS,aAAa;AAAA,QACvB;AAAA,MACD,GACA,MAAM,KAAK,OAAO,QAAQ,IAAI,UAAU,YAAY,GAC9C;AAGP,QAAM,iBAAiB,OAAO,eAAuB,YAAqB;AACzE,UAAM,oBAAoB;AAC1B,MAAI,WAEH,MAAM,KAAK,QAAQ,cAAc,IAAI;AAAA,QACpC,MAAM;AAAA,QACN,iBAAiB,KAAK,IAAI,IAAI;AAAA,QAC9B,MAAM;AAAA,MACP,CAAC,GAEF,MAAM,UAAU,KAAK,aAAa,GAKlC,KAAK,QAAQ,cAAc,OAAO;AAAA,QACjC,MAAM;AAAA,QACN,MAAM;AAAA,MACP,CAAC;AAKD,UAAM,QAAQ;AACd,kBAAM,cAAc,IACd;AAAA,IACP,GAEM,eAAe,IAAI,QAAe,CAAC,YAAY;AAGpD,UAAM,iBAAiB,KAAK,QAAQ,SAAS,IAAI,QAAQ,IAAI;AAC7D,UAAI,gBAAgB;AACnB,YAAM,QAAQ,eAAe,MAAM;AACnC,YAAI;AACH,sBAAK,QAAQ,SAAS,IAAI,QAAQ,MAAM,cAAc,GAC/C,QAAQ,KAAK;AAAA,MAEtB;AACA,UAAM,YAAY,KAAK,QAAQ,QAAQ,IAAI,QAAQ,IAAI,KAAK,CAAC;AAC7D,gBAAU,KAAK,CAAC,UAAU,OAAO,CAAC,GAElC,KAAK,QAAQ,QAAQ,IAAI,QAAQ,MAAM,SAAS;AAAA,IACjD,CAAC,GAIK,cAAc,KAAK,QAAQ,gBAAgB,QAC3C,eAAe,IAAI,QAAc,CAAC,YAAY;AACnD,UAAI,YAAY,SAAS;AACxB,gBAAQ;AACR;AAAA,MACD;AACA,kBAAY,iBAAiB,SAAS,MAAM,QAAQ,GAAG;AAAA,QACtD,MAAM;AAAA,MACP,CAAC;AAAA,IACF,CAAC,GAEK,aAAa,MAAM,QAAQ,KAAK;AAAA,MACrC;AAAA,MACA,mBAAmB,SAChB,eAAe,eAAe,kBAAkB,KAAK,IAAI,GAAG,EAAK,IACjE,eAAe,EAAG,QAAQ,OAAO,GAAG,EAAI;AAAA,MAC3C;AAAA,IACD,CAAC,EAAE,MAAM,OAAO,UAAU;AACzB,UAAM,YAAY,KAAK,QAAQ,QAAQ,IAAI,QAAQ,IAAI;AACvD,UAAI,WAAW;AACd,YAAM,MAAM,UAAU,UAAU,CAAC,CAAC,GAAG,MAAM,QAAQ,QAAQ;AAC3D,QAAI,QAAQ,MACX,UAAU,OAAO,KAAK,CAAC;AAAA,MAEzB;AAEA,iBAAK,QAAQ;AAAA;AAAA,QAEZ;AAAA,QACA;AAAA,QACA;AAAA,MACD,GACA,MAAM,KAAK,OAAO,QAAQ,IAAI,UAAU,KAAK,GACvC;AAAA,IACP,CAAC;AAGD,QAAI,eAAe;AAClB,YAAM,IAAI,MAAM,cAAc,UAAU;AAGzC,gBAAK,QAAQ;AAAA;AAAA,MAEZ;AAAA,MACA;AAAA,MACA;AAAA,IACD,GACA,MAAM,KAAK,OAAO,QAAQ,IAAI,iBAAiB,UAAU,GAElD;AAAA,EACR;AACD;;;AWh4CO,IAAM,iBAAiB,EAAG,WAA2C,GAExE,4BAMS,uBAAN,MAA2B;AAAA,EACjC,WAAmB;AAAA,EACV;AAAA,EACA;AAAA,EACT,mBAIM,CAAC;AAAA,EACP,oBAAoB;AAAA,EACpB,gBAGM,CAAC;AAAA,EAEP,YAAY,UAA+B,WAAmB;AAC7D,SAAK,WAAW,UAChB,KAAK,YAAY;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,QAAQ,SAAiB;AAC9B,IAAK,KAAK,qBACT,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAK,cAAc,KAAK;AAAA,QACvB,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,MACjB,CAAC;AAAA,IACF,CAAC,GAGE,KAAK,YAAY,MACpB,6BAA6B,SAE9B,KAAK,YAAY;AAAA,EAClB;AAAA,EAEA,MAAM,QAAQ,QAAgB;AAE7B,QADA,KAAK,WAAW,KAAK,IAAI,KAAK,WAAW,GAAG,CAAC,GACzC,KAAK,YAAY,GAAG;AAGvB,WAAK,SAAS,QAAQ,KAAK,SAAS;AAEpC,eAAW,WAAW,KAAK;AAC1B,gBAAQ,gBAAgB,MAAS;AAElC,WAAK,mBAAmB,CAAC;AAAA,IAC1B;AAAA,EACD;AAAA,EAEA,MAAM,0BACL,MACA,UACgB;AAEhB,QADA,KAAK,oBAAoB,IACrB,KAAK,WAAW;AACnB,UAAI;AACH,cAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,eAAK,iBAAiB,KAAK;AAAA,YAC1B,iBAAiB;AAAA,YACjB,gBAAgB;AAAA,YAChB;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACF,QAAQ;AAGP,iBAAW,WAAW,KAAK;AAC1B,kBAAQ,gBAAgB,MAAS;AAElC,aAAK,gBAAgB,CAAC,GACtB,KAAK,oBAAoB;AACzB;AAAA,MACD;AAED,UAAM,SAAS;AAEf,aAAW,WAAW,KAAK;AAC1B,cAAQ,gBAAgB,MAAS;AAElC,SAAK,gBAAgB,CAAC,GACtB,KAAK,oBAAoB;AAAA,EAC1B;AAAA,EAEA,4BAA4B,MAA0B;AACrD,QAAM,mBAAmB,KAAK,iBAAiB;AAAA,MAC9C,CAAC,QAAQ,IAAI,SAAS;AAAA,IACvB;AACA,QAAI,iBAAiB,WAAW,GAIhC;AAAA,eAAW,WAAW;AACrB,gBAAQ,eAAe;AAGxB,WAAK,mBAAmB,KAAK,iBAAiB;AAAA,QAC7C,CAAC,QAAQ,IAAI,SAAS;AAAA,MACvB,GAEA,KAAK,oBAAoB;AAGzB,eAAW,WAAW,KAAK;AAC1B,gBAAQ,gBAAgB,MAAS;AAElC,WAAK,gBAAgB,CAAC;AAAA;AAAA,EACvB;AAAA,EAEA,UAAU;AAET,aAAW,WAAW,KAAK;AAC1B,cAAQ,eAAe;AAExB,SAAK,gBAAgB,CAAC;AAGtB,aAAW,WAAW,KAAK;AAC1B,cAAQ,eAAe;AAExB,SAAK,mBAAmB,CAAC,GAEzB,KAAK,oBAAoB;AAAA,EAC1B;AAAA,EAEA,gBAAgB;AACf,WAAO,KAAK,WAAW;AAAA,EACxB;AACD,GAEa,mBAAwC,OACpD,QACA,cACI;AAuCJ,GAtC2B,YAAY;AACtC,QAAM,iBAAgB,oBAAI,KAAK,GAAE,QAAQ;AAUzC,QACC,EACC,+BAA+B,UAC/B,6BAA6B;AAG9B,YAAM,IAAI;AAAA,QACT,8EACC;AAAA,MACF;AAKD,IAFA,6BAA6B,eAC7B,MAAM,UAAU,KAAK,SAAS,GAE7B,oBAAkB,8BAClB,OAAO,eAAe,cAAc,MAQrC,MAAM,OAAO,eAAe,gBAAgB;AAAA,EAE7C,GACwB,EAAE,MAAM,MAAM;AAAA,EAGtC,CAAC;AACF;;;ACxLA,IAAM,mBAAmB,aACnB,wBAAwB,qBAExB,mBAAmB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEO,SAAS,uBACf,KACA,OACqB;AAMrB,MAAM,cALiD;AAAA,IACtD;AAAA,IACA;AAAA,IACA;AAAA,EACD,EACoC,MAAM,QAAQ,IAAI,GAChD,cAAc,MAAM,SAAS,GAE7B,SAAS,IAAI;AAAA,IAClB;AAAA;AAAA;AAAA;AAAA,EAID,GAEI,iBAAiB,GACjB,QAAQ,IACN,YAAY,oBAAI,IAAY;AAElC,WAAW,OAAO,QAAQ;AACzB,QAAI,IAAI,aAAa;AACpB;AAED,QAAM,WAAW,OAAO,IAAI,QAAQ;AAEpC,QAAI,OAAO;AACV,gBAAU,IAAI,QAAQ;AACtB;AAAA,IACD;AAMA,IAJI,IAAI,WAAW,QAGC,OAAO,IAAI,MAAM,EAAE,QAAQ,SAAS,EAAE,MACtC,MAAM,QAGtB,IAAI,UAAU,gBAIlB,kBACI,mBAAmB,gBACtB,QAAQ,IACR,UAAU,IAAI,QAAQ;AAAA,EAExB;AAEA,SAAO,QAAQ,YAAY;AAC5B;AAEA,SAAS,sBAAsB,SAA4C;AAC1E,MAAM,iBAAiB,oBAAI,IAAY;AACvC,WAAW,OAAO,QAAQ,KAAK;AAC9B,IAAI,IAAI,WAAW,cAAc,UAAU,KAC1C,eAAe,IAAI,IAAI,MAAM,cAAc,WAAW,MAAM,CAAC;AAI/D,MAAI,eAAe,SAAS;AAC3B,WAAO,oBAAI,IAAI;AAGhB,MAAM,YAAY,oBAAI,IAAY;AAClC,WAAW,OAAO,QAAQ,KAAK;AAC9B,QAAI,IAAI,WAAW,GAAG,gBAAgB;AAAA,CAAI,GAAG;AAC5C,UAAM,YAAY,IAAI,MAAM;AAAA,CAAI,EAAE,CAAC;AACnC,MAAI,cAAc,UAAa,eAAe,IAAI,SAAS,KAC1D,UAAU,IAAI,GAAG;AAAA,IAEnB;AAGD,SAAO;AACR;AAEA,eAAe,oBACd,SACA,OACgB;AAChB,MAAM,SAAmB,CAAC;AAC1B,WAAW,YAAY,OAAO;AAC7B,aAAW,UAAU;AACpB,aAAO,KAAK,GAAG,QAAQ,GAAG,MAAM,EAAE;AAEnC,YAAQ,IAAI,KAAK,yCAAyC,QAAQ,GAClE,QAAQ,IAAI;AAAA,MACX;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACA,QAAM,QAAQ,OAAO,MAAM;AAC5B;AAEA,eAAsB,iBACrB,SACA,iBACA,kBACA,iBACgB;AAChB,MAAI;AACH,UAAM,oBAAoB,SAAS,MAAM,KAAK,eAAe,CAAC,GAC9D,QAAQ,IAAI;AAAA,MACX;AAAA;AAAA;AAAA,IAGD;AAAA,OACM;AAIN,QAAM,eAAe,CAAC,GAHP,QAAQ,IAAI;AAAA,MAC1B;AAAA,IACD,CAC+B,EAAE,IAAI,CAACE,OAAMA,GAAE,QAAQ;AACtD,IAAI,aAAa,SAAS,KACzB,MAAM,oBAAoB,SAAS,YAAY,GAEhD,QAAQ,IAAI,KAAK,oBAAoB;AAAA,EACtC;AAEA,MAAM,eAAyB,CAAC,iBAAiB,gBAAgB,GAE3D,UAAU,MAAM,QAAQ,KAAK,GAC7B,wBAAwB,sBAAsB,OAAO;AAC3D,WAAW,OAAO,QAAQ,KAAK;AAC9B,IACC,IAAI,WAAW,GAAG,gBAAgB;AAAA,CAAI,KACtC,CAAC,sBAAsB,IAAI,GAAG,KAE9B,aAAa,KAAK,GAAG;AAGvB,QAAM,QAAQ,OAAO,YAAY,GAEjC,QAAQ,IAAI,KAAK,4BAA4B;AAC9C;AAEA,eAAsB,4BACrB,SACuC;AACvC,MAAM,QAAQ,MAAM,QAAQ,IAAqB,qBAAqB;AACtE,eAAM,QAAQ,OAAO,qBAAqB,GACnC;AACR;AAEA,eAAsB,qBACrB,SACA,MACgB;AAChB,QAAM,QAAQ,IAAI,uBAAuB,IAAI;AAC9C;;;AC1KA,qBAAiB,gCAOX,+BAA+B,CACpC,GACA,MAEO,EAAE,kBAAkB,EAAE;AAuBvB,IAAM,oBAAN,MAAwB;AAAA,EAC9B,QAAkC,IAAI,eAAAC,QAAK,4BAA4B;AAAA,EACvE;AAAA,EAEA,YAAY,KAAyB,mBAAqC;AACzE,SAAK,OAAO,KAEZ,KAAK,MAAM,KAAK,KAAK,WAAW,CAAC;AAAA,EAClC;AAAA,EAEA,iBAAmD;AAElD,QAAI,KAAK,MAAM,WAAW;AACzB;AAED,QAAM,MAA4B,CAAC,GAC7B,oBAAmB,oBAAI,KAAK,GAAE,QAAQ;AAG5C,eAAa;AACZ,UAAM,UAAU,KAAK,MAAM,KAAK;AAIhC,UAHI,YAAY,UAGZ,QAAQ,kBAAkB;AAC7B;AAID,UAAI,KAAK,OAAO,GAChB,KAAK,MAAM,IAAI;AAAA,IAChB;AACA,gBAAK,KAAK,QAAQ,gBAAgB,MAAM;AACvC,eAAW,SAAS;AACnB,aAAK,cAAc,KAAK;AAAA,IAE1B,CAAC,GACM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAI,OAA2B;AACpC,UAAM,KAAK,KAAK,QAAQ,YAAY,YAAY;AAY/C,WAAK,MAAM,IAAI,KAAK,GACpB,KAAK,WAAW,KAAK;AAAA,IACtB,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAoD;AAC1D,SAAK,KAAK,QAAQ,gBAAgB,MAAM;AACvC,WAAK,YAAY,CAAC,MACb,EAAE,SAAS,MAAM,QAAQ,EAAE,SAAS,MAAM,IAI9C;AAAA,IACF,CAAC;AAAA,EACF;AAAA,EAEA,UAAU,QAAgB;AAKzB,SAAK,KAAK,QAAQ,gBAAgB,MAAM;AACvC,UAAM,UAAU,KAAK,MAAM,QAAQ;AAGnC,WAAK,KAAK,QAAQ,IAAI,KAAK,4BAA4B;AAEvD,UAAM,aAAa,QAAQ,IAAI,CAAC,WAAW;AAAA,QAC1C,GAAG;AAAA,QACH,iBAAiB,MAAM,kBAAkB;AAAA,MAC1C,EAAE;AACF,eAAW,SAAS;AACnB,aAAK,WAAW,KAAK;AAGtB,WAAK,QAAQ,IAAI,eAAAA,QAAK,4BAA4B,GAClD,KAAK,MAAM,KAAK,UAAU;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA,EAEA,WAAW,WAA8B;AACxC,SAAK,KAAK,QAAQ,gBAAgB,MAAM;AACvC,WAAK,OAAO,CAAC,MAAM,EAAE,SAAS,SAAS;AAAA,IACxC,CAAC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,kBAAkB;AAEvB,IADqB,KAAK,MAAM,KAAK;AAAA,EAatC;AAAA,EAEA,SACC,YACiC;AAEjC,WAAO,gBAAgB,KAAK,MAAM,QAAQ,EAAE,KAAK,UAAU,CAAC;AAAA,EAC7D;AAAA,EAEQ,YAAY,YAAgD;AACnE,QAAM,WAAW,KAAK,MAAM,QAAQ,GAC9B,QAAQ,SAAS,UAAU,UAAU;AAC3C,QAAI,UAAU;AACb;AAGD,QAAM,eAAe,SAAS,OAAO,OAAO,CAAC,EAAE,CAAC;AAChD,SAAK,cAAc,YAAY,GAE/B,KAAK,QAAQ,IAAI,eAAAA,QAAK,4BAA4B,GAClD,KAAK,MAAM,KAAK,QAAQ;AAAA,EACzB;AAAA,EAEQ,OAAO,YAAgD;AAC9D,QAAM,mBAAmB,KAAK,MAAM,QAAQ,EAAE,OAAO,UAAU,GACzD,kBAAkB,KAAK,MAAM,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACzE,SAAK,KAAK,QAAQ,gBAAgB,MAAM;AACvC,eAAW,SAAS;AACnB,aAAK,cAAc,KAAK;AAAA,IAE1B,CAAC,GACD,KAAK,QAAQ,IAAI,eAAAA,QAAK,4BAA4B,GAClD,KAAK,MAAM,KAAK,gBAAgB;AAAA,EACjC;AAAA,EAEA,SAAS;AACR,WAAO,KAAK,MAAM;AAAA,EACnB;AAAA,EAEQ,aAAa;AACpB,QAAM,UAAU;AAAA,MACf,GAAG,KAAK,KAAK,QAAQ,IAAI,KAAK,0CAA0C;AAAA,IACzE,GAEM,gBAAsC,CAAC;AAE7C,mBAAQ,QAAQ,CAAC,QAAQ;AACxB,UAAM,YAAY,oBAAoB,IAAI,SAAS;AAEnD,UAAI,IAAI,UAAU,GAAG;AACpB,YAAM,QAAQ,cAAc;AAAA,UAC3B,CAAC,cACA,IAAI,QAAQ,UAAU,QAAQ,aAAa,UAAU;AAAA,QACvD;AAEA,QAAI,UAAU,MACb,cAAc,OAAO,OAAO,CAAC;AAAA,MAE/B;AAOC,QALc,cAAc;AAAA,UAC3B,CAAC,cACA,IAAI,QAAQ,UAAU,QAAQ,aAAa,UAAU;AAAA,QACvD,MAEc,MACb,cAAc,KAAK;AAAA,UAClB,MAAM,IAAI;AAAA,UACV,iBAAiB,IAAI;AAAA,UACrB,MAAM;AAAA,QACP,CAAC;AAAA,IAGJ,CAAC,GACM;AAAA,EACR;AAAA,EAEQ,cAAc,OAA2B;AAChD,SAAK,KAAK,QAAQ,IAAI;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA,MAIA,MAAM;AAAA,MACN;AAAA,MACA,sBAAsB,MAAM,IAAI;AAAA,MAChC,MAAM;AAAA,IACP;AAAA,EACD;AAAA,EAEA,qBAAqB,OAAoD;AACxE,WACC,KAAK,KAAK,QAAQ,IAChB;AAAA,MACA;AAAA,MACA,sBAAsB,MAAM,IAAI;AAAA,MAChC,MAAM;AAAA,MACN;AAAA,IACD,EACC,QAAQ,EAAE,UAAU;AAAA,EAExB;AAAA,EAEQ,WAAW,OAA2B;AAC7C,SAAK,KAAK,QAAQ,IAAI;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA,MAIA,MAAM;AAAA,MACN;AAAA,MACA,sBAAsB,MAAM,IAAI;AAAA,MAChC,MAAM;AAAA,IACP;AAAA,EACD;AACD,GAEM,sBAAsB,CAAC,cAA4C;AACxE,UAAQ,WAAW;AAAA,IAClB,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,EACT;AACD,GAEM,wBAAwB,CAAC,cAA4C;AAC1E,UAAQ,WAAW;AAAA,IAClB,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR;AACC,YAAM,IAAI,MAAM,sBAAsB,SAAS,wBAAwB;AAAA,EACzE;AACD;;;AdjMA,IAAM,oBAAoB,iBAEpBC,oBAAmB,aAEZ,qBAAqB,KAE5BC,kBAAiB;AAUvB,SAAS,eAAe,MAAc,OAAyB;AAC9D,SAAI,iBAAiB,cACb,gBAAgB,MAAM,UAAU,aAEpC,YAAY,OAAO,KAAK,KAAK,EAAE,iBAAiB,YAC5C,IAAI,MAAM,YAAY,IAAI,IAAK,MAA0B,UAAU,aAEpE;AACR;AAEA,SAAS,mBAAmB,OAA+B;AAC1D,SACC,UAAU,wBACV,UAAU;AAEZ;AAEO,IAAM,SAAN,cAAqB,cAAmB;AAAA,EAC9C,OAAuB,CAAC;AAAA,EAExB,YAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,wBAAyC,IAAI,gBAAgB;AAAA,EAC7D,kBAAmC,IAAI,gBAAgB;AAAA,EAEvD,UAKI,oBAAI,IAAI;AAAA,EACZ,WAAsC,oBAAI,IAAI;AAAA;AAAA,EAG9C,mBAAuD,oBAAI,IAAI;AAAA,EAE/D,YAAY,OAA2B,KAAU;AAChD,UAAM,OAAO,GAAG,GAEhB,KAAK,YAAY,IAAI,aAClB,KAAK,MAAM,IAAI,UAAU,IACzB,oBAEE,KAAK,IAAI,sBAAsB,YAAY;AAC/C,WAAK,IAAI,QAAQ,gBAAgB,MAAM;AACtC,YAAI;AACH,eAAK,IAAI,QAAQ,IAAI,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA0B1B;AAAA,QACD,SAAS,GAAG;AACX,wBAAQ,MAAM,CAAC,GACT;AAAA,QACP;AAAA,MACD,CAAC;AAAA,IACF,CAAC,GAED,KAAK,iBAAiB,IAAI;AAAA,MACzB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,SACC,OACA,OACA,SAAwB,MACxB,UACC;AACD,SAAK,IAAI,QAAQ,IAAI;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK,UAAU,UAAU,cAAc;AAAA,IACxC,GAGI,SACH,KAAK,uBAAuB,OAAO,OAAO,QAAQ;AAAA,EAEpD;AAAA,EAEA,6BAAuC;AAOtC,WANa;AAAA,MACZ,GAAG,KAAK,IAAI,QAAQ,IAAI;AAAA,QACvB;AAAA;AAAA,MAED;AAAA,IACD,EACY,IAAI,CAAC,EAAE,SAAS,MAAM,QAAQ;AAAA,EAC3C;AAAA;AAAA,EAGA,sBAAsB,cAA8C;AACnE,WAAO,IAAI,QAAQ,MAAM,KAAK,KAAK,YAAY;AAAA,EAChD;AAAA,EAEA,iBAAiB,WAAqC;AACrD,WAAO,CAAC;AAAA,EACT;AAAA,EAEA,WAAuB;AAUtB,WAAO;AAAA,MACN,MAVY;AAAA,QACZ,GAAG,KAAK,IAAI,QAAQ,IAAI,KAKrB,sDAAsD;AAAA,MAC1D,EAGY,IAAI,CAAC,QAAQ;AACvB,YAAM,WAAW,KAAK,MAAM,IAAI,QAAQ;AAExC,YAAI,CAAC,mBAAmB,IAAI,KAAK,KAAK,CAAC,SAAS;AAC/C,iBAAO,EAAE,GAAG,KAAK,UAAU,OAAO,IAAI,SAAS;AAGhD,YAAM,EAAE,UAAU,KAAK,IAAI,SAAS;AAIpC,YAAI;AACH,cAAM,UAAU,6BAA6B;AAAA,YAC5C,SAAS,KAAK,IAAI;AAAA,YAClB;AAAA,YACA;AAAA,YACA,UAAU;AAAA,UACX,CAAC;AACD,mBAAS,SACR,QAAQ,SAAS,SACd,QAAQ,SACR,6BAA6B,KAAK,UAAU;AAAA,QACjD,QAAQ;AACP,mBAAS,SAAS,oBAAoB,KAAK,UAAU;AAAA,QACtD;AACA,sBAAO,SAAS,cAET,EAAE,GAAG,KAAK,UAAU,OAAO,IAAI,SAAS;AAAA,MAChD,CAAC;AAAA,IACF;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAOG;AAcF,WAba;AAAA,MACZ,GAAG,KAAK,IAAI,QAAQ,IAAI;AAAA,QAQvB;AAAA,MACD;AAAA,IACD,EAEY,IAAI,CAAC,QAAQ;AACxB,UAAM,WAAW,KAAK,MAAM,IAAI,QAAQ;AAExC,UAAI,CAAC,mBAAmB,IAAI,KAAK,KAAK,CAAC,SAAS;AAC/C,eAAO;AAAA,UACN,IAAI,IAAI;AAAA,UACR,WAAW,OAAO,IAAI,SAAS,EAAE,QAAQ,KAAK,GAAG,IAAI;AAAA,UACrD,OAAO,IAAI;AAAA,UACX,OAAO,IAAI;AAAA,UACX,QAAQ,IAAI;AAAA,UACZ;AAAA,QACD;AAGD,UAAM,EAAE,UAAU,KAAK,IAAI,SAAS;AAIpC,UAAI;AACH,YAAM,UAAU,6BAA6B;AAAA,UAC5C,SAAS,KAAK,IAAI;AAAA,UAClB;AAAA,UACA;AAAA,UACA,UAAU;AAAA,QACX,CAAC;AACD,iBAAS,SACR,QAAQ,SAAS,SACd,QAAQ,SACR,6BAA6B,KAAK,UAAU;AAAA,MACjD,QAAQ;AACP,iBAAS,SAAS,oBAAoB,KAAK,UAAU;AAAA,MACtD;AACA,oBAAO,SAAS,cAET;AAAA,QACN,IAAI,IAAI;AAAA,QACR,WAAW,OAAO,IAAI,SAAS,EAAE,QAAQ,KAAK,GAAG,IAAI;AAAA,QACrD,OAAO,IAAI;AAAA,QACX,OAAO,IAAI;AAAA,QACX,QAAQ,IAAI;AAAA,QACZ;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,kBAAkB,WAAsC;AAavD,WAAO;AAAA,MACN,MAbY;AAAA,QACZ,GAAG,KAAK,IAAI,QAAQ,IAAI;AAAA,UAMvB;AAAA,UACA;AAAA,QACD;AAAA,MACD,EAGY,IAAI,CAAC,SAAS;AAAA,QACxB,GAAG;AAAA,QACH,UAAU,KAAK,MAAM,IAAI,QAAQ;AAAA,QACjC,OAAO,IAAI;AAAA,MACZ,EAAE;AAAA,IACH;AAAA,EACD;AAAA,EAEA,MAAM,YAAqC;AAC1C,QAAI,KAAK,cAAc,QAAW;AAEjC,UAAM,WACL,MAAM,KAAK,IAAI,QAAQ,IAAsB,iBAAiB;AAC/D,UAAI,aAAa;AAEhB,cAAM,IAAI,MAAM,0BAA0B;AAG3C,WAAK,YAAY,SAAS,WAC1B,KAAK,aAAa,SAAS,SAAS,IACpC,KAAK,eAAe,SAAS,SAAS;AAAA,IACvC;AAEA,QAAM,MAAM,MAAM,KAAK,IAAI,QAAQ,IAAoB,iBAAiB;AAGxE,WAAI,QAAQ,0BAGL;AAAA,EACR;AAAA;AAAA,EAGA,MAAM,sBAIH;AACF,QAAM,SAAS,MAAM,KAAK,UAAU,GAIhC,aADH,MAAM,KAAK,IAAI,QAAQ,IAAsB,iBAAiB,IACrC,UAAU,cAAc;AAIlD,QAAI,CAAC,WAAW;AACf,UAAM,UAAU;AAAA,QACf;AAAA,QACA;AAAA,MACD;AACA,eAAW,SAAS,SAAS;AAC5B,YAAI;AACH;AAED,YAAI;AACH,mBAAW,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,KAAK;AAChD,YAAI,IAAI,OAIP,YADY,OAAO,IAAI,EAAE,EAAE,QAAQ,KAAK,GAAG,IAAI;AAAA,QAIlD,QAAQ;AAAA,QAER;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,MACN,YAAY,KAAK,cAAc;AAAA,MAC/B;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,UACL,WACA,YACA,QACgB;AAChB,UAAM,KAAK,IAAI,QAAQ,IAAI,mBAAmB,MAAM,GAGpD,KAAK,mBAAmB,MAAM;AAAA,EAC/B;AAAA,EAEQ,gBAGJ,oBAAI,IAAI;AAAA,EACZ,MAAM,cAAc,QAA+B;AAClD,QAAM,eAAe,iBAAiB,MAAM,GACtC,gBACL,MAAM,KAAK,IAAI,QAAQ,IAAoB,iBAAiB;AAG7D,QAAI,kBAAkB;AAKtB,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvC,aAAK,cAAc,IAAI,cAAc,EAAE,SAAS,OAAO,CAAC,GAExD,KAAK,mBAAmB,aAA+B;AAAA,MACxD,CAAC;AAAA,EACF;AAAA,EAEA,mBAAmB,QAA8B;AAChD,QAAM,SAAS,KAAK,cAAc,IAAI,MAAM;AAG5C,QAAI,QAAQ;AACX,aAAO,QAAQ,GACf,KAAK,cAAc,OAAO,MAAM;AAChC;AAAA,IACD;AAEA,YAAQ,QAAQ;AAAA,MACf,sBAA6B;AAE5B,YAAM,sBAAsB;AAAA;AAAA;AAAA,QAG5B;AAEA,aAAK,wBAAwB,QAAQ,mBAAmB;AACxD;AAAA,MACD;AAAA,MACA,yBAAgC;AAE/B,YAAM,sBAAsB;AAAA;AAAA;AAAA,QAG5B;AAEA,aAAK,wBAAwB,QAAQ,mBAAmB;AACxD;AAAA,MACD;AAAA,MACA,uBAA8B;AAE7B,YAAM,sBAAsB;AAAA;AAAA;AAAA,QAG5B;AAEA,aAAK,wBAAwB,QAAQ,mBAAmB;AACxD;AAAA,MACD;AAAA,MACA;AACC;AAAA,IACF;AAAA,EACD;AAAA,EAEA,wBACC,eACA,qBACO;AACP,QAAI;AACH,eAAW,qBAAqB,qBAAqB;AACpD,YAAM,SAAS,KAAK,cAAc,IAAI,iBAAiB;AACvD,YAAI,QAAQ;AACX,iBAAO;AAAA,YACN,IAAI;AAAA,cACH,gDACC,KAAK,UACN,wBAAwB;AAAA,gBACvB;AAAA,cACD,CAAC,0FAA0F;AAAA,gBAC1F;AAAA,cACD,CAAC;AAAA,YACF;AAAA,UACD,GACA,KAAK,cAAc,OAAO,iBAAiB;AAC3C;AAAA,QACD;AAAA,MACD;AAAA,EAEF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,qBAAqB,cAGc;AAS1C,QARI,eAAa,KAAK,UAAU,6BAGT;AAAA,MACtB,KAAK,IAAI;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACd,MACuB;AAGvB,aAAO,2BAA2B;AAAA,QACjC,SAAS,KAAK,IAAI;AAAA,QAClB,UAAU,aAAa;AAAA,QACvB,MAAM,aAAa;AAAA,MACpB,CAAC;AAAA,EACF;AAAA,EAEQ,oBAGJ,oBAAI,IAAI;AAAA,EACZ,MAAM,kBACL,UACA,WACmB;AAGnB,QAAM,WAAW,GAFJ,MAAM,YAAY,QAAQ,CAEf,IADV,aAAa,CACM,IAG3B,OAAO;AAAA,MACZ,GAAG,KAAK,IAAI,QAAQ,IAAI;AAAA,QAIvB;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAEA,QAAI,KAAK,SAAS,GAAG;AACpB,UAAM,EAAE,OAAO,SAAS,IAAI,KAAK,CAAC,GAC5B,SAAS,KAAK,MAAM,QAAQ;AAClC,UAAI,UAAU;AACb,eAAI,QAAQ,eACJ,KAAK,qBAAqB,OAAO,YAAY,IAE9C,QAAQ;AAEhB,UAAI,UAAU;AACb,cAAM,QAAQ,SAAS;AAAA,IAEzB;AAGA,WAAO,IAAI,QAAiB,CAAC,SAAS,WAAW;AAChD,WAAK,kBAAkB,IAAI,UAAU,EAAE,SAAS,OAAO,CAAC;AAAA,IACzD,CAAC;AAAA,EACF;AAAA,EAEA,uBACC,OACA,OACA,UACC;AACD,QAAM,SAAS,KAAK,kBAAkB,IAAI,KAAK;AAC/C,QAAK;AAGL,UAAI,UAAU;AACb,QAAI,UAAU,eACb,OAAO;AAAA,UACN,KAAK;AAAA,YACJ,SAAS;AAAA,UAIV;AAAA,QACD,IAEA,OAAO,QAAQ,UAAU,MAAM,GAEhC,KAAK,kBAAkB,OAAO,KAAK;AAAA,eACzB,UAAU,sBAA4B;AAChD,YAAM,QAAQ,UAAU,SAAS,IAAI,MAAM,aAAa;AACxD,eAAO,OAAO,KAAK,GACnB,KAAK,kBAAkB,OAAO,KAAK;AAAA,MACpC;AAAA;AAAA,EACD;AAAA,EAEA,MAAM,iBAAiB,UAAqC;AAC3D,QAAM,SAAS,MAAM,KAAK,UAAU;AAEpC,QAAI,UAAU;AACb,UAAI,WAAW;AACd,cAAM,IAAI;AAAA,UACT,2DAA2D;AAAA,YAC1D;AAAA,UACD,CAAC;AAAA,QACF;AAGD,aADa,KAAK,0CAAgD,EAAE,KACxD,GAAG,CAAC,GAAG,SAAS;AAAA,IAC7B,OAAO;AACN,UAAI,WAAW;AACd,cAAM,IAAI;AAAA,UACT,0DAA0D;AAAA,YACzD;AAAA,UACD,CAAC;AAAA,QACF;AAGD,UAAM,MADO,KAAK,0CAAgD,EAAE,KACnD,GAAG,CAAC;AACrB,UAAI,CAAC,KAAK,SAAS;AAClB,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAED,aAAO,IAAI,SAAS;AAAA,IACrB;AAAA,EACD;AAAA,EAEA,MAAM,MAAM,QAAgB;AAC3B,UAAM,KAAK,IAAI,QAAQ,KAAK,GAG5B,KAAK,eAAe,QAAQ,GAC5B,KAAK,sBAAsB,MAAM,IAAI,MAAM,MAAM,CAAC,GAElD,KAAK,IAAI,MAAM,MAAM;AAAA,EACtB;AAAA;AAAA;AAAA,EAIA,MAAM,YAAY,QAAiB;AAClC,UAAM,KAAK,IAAI,QAAQ,KAAK,GAC5B,MAAM,KAAK,IAAI,QAAQ,UAAU,GAEjC,KAAK,IAAI,MAAM,MAAM;AAAA,EACtB;AAAA,EAEA,MAAM,gBAAgB;AACrB,UAAM,KAAK,IAAI,sBAAsB,YAAY;AAChD,UAAM,UAAiC,CAAC;AACxC,eAAW,CAAC,MAAM,MAAM,KAAK,KAAK,SAAS,QAAQ;AAClD,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ;AAClC,kBAAQ,GAAGD,iBAAgB;AAAA,EAAK,IAAI;AAAA,EAAK,CAAC,EAAE,IAAI,OAAO,CAAC;AAG1D,MAAI,OAAO,KAAK,OAAO,EAAE,SAAS,KACjC,MAAM,KAAK,IAAI,QAAQ,IAAI,OAAO;AAAA,IAEpC,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB;AACvB,UAAM,KAAK,IAAI,sBAAsB,YAAY;AAEhD,UAAM,UAAU,MAAM,KAAK,IAAI,QAAQ,KAAY;AAAA,QAClD,QAAQA;AAAA,MACT,CAAC;AACD,eAAW,CAAC,KAAK,KAAK,KAAK,SAAS;AACnC,YAAM,CAAC,GAAG,WAAW,IAAI,IAAI,IAAI,MAAM;AAAA,CAAI,GAGrC,YAAY,KAAK,SAAS,IAAI,SAAS,KAAK,CAAC;AACnD,kBAAU,KAAK,KAAK,GACpB,KAAK,SAAS,IAAI,WAAW,SAAS;AAAA,MACvC;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,OAIhB;AAOF,QAAI,iBAAiB,KAAK,SAAS,IAAI,MAAM,IAAI,KAAK,CAAC;AAOvD,QANA,eAAe,KAAK,KAAc,GAElC,KAAK,SAAS,IAAI,MAAM,MAAM,cAAc,GAC5C,MAAM,KAAK,cAAc,GAGrB,KAAK,WAAW;AAEnB,UAAM,YAAY,KAAK,QAAQ,IAAI,MAAM,IAAI;AAC7C,UAAI,WAAW;AACd,YAAM,QAAQ,UAAU,CAAC;AACzB,YAAI,OAAO;AACV,cAAM,CAAC,EAAE,OAAO,IAAI;AACpB,kBAAQ,KAAK,GAEb,UAAU,MAAM,GAChB,KAAK,QAAQ,IAAI,MAAM,MAAM,SAAS,GAEtC,iBAAiB,KAAK,SAAS,IAAI,MAAM,IAAI,KAAK,CAAC,GACnD,eAAe,MAAM,GACrB,KAAK,SAAS,IAAI,MAAM,MAAM,cAAc;AAE5C;AAAA,QACD;AAAA,MACD;AAAA,IACD,OAAO;AAIN,UAHkB,MAAM,KAAK,IAAI,QAAQ;AAAA,QACxC,GAAG,cAAc,UAAU,GAAG,MAAM,IAAI;AAAA,MACzC;AAEC;AAGD,UAAM,WACL,MAAM,KAAK,IAAI,QAAQ,IAAsB,iBAAiB;AAE/D,UAAI,aAAa;AAChB,cAAM,IAAI,MAAM,0BAA0B;AAG3C,MAAK,KAAK;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACV;AAAA,IACD;AAAA,EACD;AAAA,EAEA,sBAAgD;AAC/C,WAAO,IAAI,yBAAyB,MAAM,KAAK,GAAG;AAAA,EACnD;AAAA,EAEA,MAAM,qBACL,WACA,MACC;AACD,QAAM,WACL,MAAM,KAAK,IAAI,QAAQ,IAAsB,iBAAiB;AAE/D,QAAI,aAAa;AAChB,YAAM;AAAA,QACL;AAAA,QACA;AAAA,MACD;AAGD,YAAQ,WAAW;AAAA,MAClB,KAAK;AACJ,cAAM,KAAK,mBAAmB;AAC9B;AAAA,MACD,KAAK,UAAU;AACd,YAAM,gBAAgB,MAAM,KAAK,UAAU;AAC3C,QAAI,kBAAkB,2BAErB,KAAK,eAAe,4BAA4B,OAAO,GACvD,MAAM,KAAK;AAAA,UACV,SAAS;AAAA,UACT,SAAS,SAAS;AAAA;AAAA,QAEnB,KACU,kBAAkB,kBAC5B,MAAM,KAAK,cAAc;AAE1B;AAAA,MACD;AAAA,MACA,KAAK,aAAa;AACjB,YAAM,gBAAgB,MAAM,KAAK,UAAU;AAC3C,YACC;AAAA;AAAA;AAAA;AAAA,QAIA,EAAE,SAAS,aAAa;AAExB,gBAAM;AAAA,YACL;AAAA,YACA;AAAA,UACD;AAED,cAAM,KAAK,uBAAuB;AAClC;AAAA,MACD;AAAA,MACA,KAAK;AACJ,YAAI,MAAM;AACT,cAAI,CAAC,uBAAuB,KAAK,IAAI,QAAQ,KAAK,IAAI;AACrD,kBAAM,kBAAkB,KAAK,IAAI;AAElC,gBAAM,qBAAqB,KAAK,IAAI,SAAS,IAAI;AAAA,QAClD;AACA,cAAM,KAAK,qBAAqB;AAChC;AAAA,IACF;AAAA,EACD;AAAA,EAEA,MAAM,yBAAyB;AAC9B,QAAM,WACL,MAAM,KAAK,IAAI,QAAQ,IAAsB,iBAAiB;AAE/D,QAAI,aAAa;AAChB,YAAM;AAAA,QACL;AAAA,QACA;AAAA,MACD;AAGD,SAAK,sCAA4C,MAAM,MAAM;AAAA,MAC5D,SAAS;AAAA,QACR;AAAA,MACD;AAAA,IACD,CAAC,GAED,MAAM,KAAK;AAAA,MACV,SAAS;AAAA,MACT,SAAS,SAAS;AAAA;AAAA,IAEnB,GAEA,MAAM,KAAK,MAAM,cAAc,cAAc;AAAA,EAC9C;AAAA,EAEA,MAAM,qBAAqB;AAC1B,QAAM,SAAS,MAAM,KAAK,UAAU;AASpC,QANC,WAAW,kBACX,WAAW,2BAMX,WAAW,mBACX,WAAW;AAEX;AAGD,QAAM,WACL,MAAM,KAAK,IAAI,QAAQ,IAAsB,iBAAiB;AAE/D,QAAI,aAAa;AAChB,YAAM;AAAA,QACL;AAAA,QACA;AAAA,MACD;AAGD,UAAM,KAAK;AAAA,MACV,SAAS;AAAA,MACT,SAAS,SAAS;AAAA;AAAA,IAEnB,GAEK,KAAK,eACR,0BAA0B,SAAS,YAAY;AAC/C,YAAM,KAAK,IAAI,QAAQ,IAAIC,iBAAgB,oBAAI,KAAK,CAAC,GACrD,MAAM,KAAK;AAAA,QACV,SAAS;AAAA,QACT,SAAS,SAAS;AAAA;AAAA,MAEnB,GAKA,KAAK,gBAAgB,MAAM,cAAc,UAAU;AAAA,IACpD,CAAC,EACA,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACjB;AAAA,EAEA,MAAM,uBAAuB;AAG5B,UAAM,KAAK,MAAM,cAAc,YAAY;AAAA,EAC5C;AAAA,EAEA,MAAM,iBAAiB;AACtB,QAAM,kBAAkB,MAAM,4BAA4B,KAAK,IAAI,OAAO,GAEtE,kBAAsC;AAC1C,QAAI,oBACH,kBAAkB;AAAA,MACjB,KAAK,IAAI,QAAQ;AAAA,MACjB;AAAA,IACD,GACI,CAAC;AACJ,YAAM,kBAAkB,gBAAgB,IAAI;AAI9C,UAAM;AAAA,MACL,KAAK,IAAI;AAAA,MACT;AAAA,MACAA;AAAA,MACA;AAAA,IACD;AAEA,QAAM,WACL,MAAM,KAAK,IAAI,QAAQ,IAAsB,iBAAiB;AAE/D,QAAI,aAAa;AAChB,YAAM;AAAA,QACL;AAAA,QACA;AAAA,MACD;AAGD,QAAM,EAAE,WAAW,UAAU,SAAS,UAAU,MAAM,IAAI;AAE1D,IAAK,oBACJ,KAAK,kCAAwC,MAAM,MAAM;AAAA,MACxD,QAAQ,MAAM;AAAA,MACd,WAAW,QAAQ;AAAA,MACnB,SAAS;AAAA,QACR;AAAA,MACD;AAAA,IACD,CAAC,GACD,KAAK,iCAAuC,MAAM,MAAM,CAAC,CAAC,IAGtD,KAAK,KAAK,WAAW,UAAU,SAAS,UAAU,KAAK;AAAA,EAC7D;AAAA,EAEA,MAAM,gBAAgB;AACrB,QAAM,WACL,MAAM,KAAK,IAAI,QAAQ,IAAsB,iBAAiB;AAE/D,QAAI,aAAa;AAChB,YAAM;AAAA,QACL;AAAA,QACA;AAAA,MACD;AAKD,QADC,MAAM,KAAK,IAAI,QAAQ,IAAoB,iBAAiB,MAC9C;AACd;AAKD,QAAM,aAAa,MAAM,KAAK,IAAI,QAAQ,IAAUA,eAAc;AAClE,QAAI,eAAe,QAAW;AAC7B,UAAM,SAAS,KAAK,IAAI,IAAI,IAAI,KAAK,UAAU,EAAE,QAAQ;AACzD,MAAI,KAAK,gBACR,KAAK,cAAc,UAAU,MAAM,IAExB,IAAI,kBAAkB,KAAK,KAAK,QAAQ,EAChD,UAAU,MAAM;AAAA,IAErB;AACA,UAAM,KAAK,IAAI,QAAQ,OAAOA,eAAc;AAE5C,QAAM,EAAE,WAAW,UAAU,SAAS,UAAU,MAAM,IAAI;AAE1D,UAAM,KAAK,IAAI,QAAQ,IAAI,iCAAwC,GAKnE,KAAK,kBAAkB,IAAI,gBAAgB,GAC3C,KAAK,UAAU,oBAAI,IAAI,GACvB,KAAK,WAAW,oBAAI,IAAI,GACxB,sBAAsB,KAAK,gBAAgB,GAEtC,KAAK,KAAK,WAAW,UAAU,SAAS,UAAU,KAAK;AAAA,EAC7D;AAAA,EAEA,MAAM,KACL,WACA,UACA,SACA,UACA,OACC;AAeD,QAdI,KAAK,kBAAkB,WAC1B,KAAK,gBAAgB,IAAI;AAAA,MACxB,KAAK;AAAA;AAAA,MAEL;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD,IAGG,KAAK;AACR;AAGD,SAAK,cAAc,eAAe,GAClC,MAAM,KAAK,cAAc,gBAAgB,GAGzC,KAAK,YAAY,WACjB,KAAK,aAAa,SAAS,IAC3B,KAAK,eAAe,SAAS;AAE7B,QAAM,SAAS,MAAM,KAAK,UAAU;AACpC,QACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,EAAE,SAAS,MAAM;AAEjB;AAKD,QAAI,WAAW,yBAAgC;AAC9C,YAAM,KAAK,IAAI,QAAQ,IAAIA,iBAAgB,oBAAI,KAAK,CAAC,GACrD,MAAM,KAAK,UAAU,WAAW,SAAS,kBAAyB;AAClE;AAAA,IACD;AAEA,QAAK,MAAM,KAAK,IAAI,QAAQ,IAAI,iBAAiB,KAAM,MAAW;AACjE,UAAM,mBAAqC;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACA,YAAM,KAAK,IAAI,QAAQ,IAAI,mBAAmB,gBAAgB,GAG9D,KAAK,kCAAwC,MAAM,MAAM;AAAA,QACxD,QAAQ,MAAM;AAAA,QACd,WAAW,QAAQ;AAAA,QACnB,SAAS;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAC,GACD,KAAK,iCAAuC,MAAM,MAAM,CAAC,CAAC;AAAA,IAC3D;AAGA,UAAM,KAAK,gBAAgB;AAE3B,QAAM,WAAW,IAAI,QAAQ,MAAM,KAAK,GAAG,GAErC,yBAAyB,YAAY;AAC1C,YAAM,KAAK,IAAI,QAAQ,YAAY,YAAY;AAG9C,cAAM,KAAK,UAAU,WAAW,SAAS,mBAA0B;AAAA,MACpE,CAAC;AAAA,IACF;AACA,SAAK,YAAY,IAEZ,uBAAuB;AAC5B,QAAI;AAEH,UAAM,SAAS,MADA,KAAK,IAAI,cACI;AAAA,QAC3B;AAAA,QACA;AAAA,MACD;AACA,WAAK,mCAAyC,MAAM,MAAM;AAAA,QACzD;AAAA,MACD,CAAC,GAGD,MAAM,KAAK,IAAI,QAAQ,YAAY,YAAY;AAC9C,cAAM,KAAK,UAAU,WAAW,SAAS,oBAA2B;AAAA,MACrE,CAAC,GAED,sBAAsB,KAAK,gBAAgB,GAC3C,KAAK,YAAY;AAAA,IAClB,SAAS,KAAK;AACb,UAAI,aAAa,GAAG,GAAG;AACtB,aAAK,YAAY;AACjB;AAAA,MACD;AAGA,UAAI;AACH,cAAM;AAAA,UACL;AAAA,UACA,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAAA,QACnD;AAAA,MACD,SAAS,aAAa;AACrB,gBAAQ,MAAM,8BAA8B,WAAW;AAAA,MACxD;AAEA,UAAI;AACJ,UAAI,eAAe,OAAO;AACzB,YACC,IAAI,SAAS,uBACb,IAAI,QAAQ,WAAW,mBAAmB,GACzC;AACD,cAAM,aAAa,gCAAgC,IAChD,IAAI,2BAA2B,GAAG,IAClC,IAAI;AAAA,YACJ;AAAA,UACD;AAEF,eAAK,mCAAyC,MAAM,MAAM;AAAA,YACzD,OAAO;AAAA,UACR,CAAC,GAED,MAAM,KAAK,UAAU,WAAW,SAAS,mBAA0B,GACnE,MAAM,KAAK,MAAM,cAAc,mBAAmB,GAClD,KAAK,YAAY;AACjB;AAAA,QACD;AACA,gBAAQ;AAAA,UACP,SAAS,IAAI;AAAA,UACb,MAAM,IAAI;AAAA,QACX;AAAA,MACD;AACC,gBAAQ;AAAA,UACP,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAGD,WAAK,mCAAyC,MAAM,MAAM;AAAA,QACzD;AAAA,MACD,CAAC,GAGD,MAAM,KAAK,IAAI,QAAQ,YAAY,YAAY;AAC9C,cAAM,KAAK,UAAU,WAAW,SAAS,mBAA0B;AAAA,MACpE,CAAC,GACD,KAAK,YAAY;AAAA,IAClB;AAEA,WAAO;AAAA,MACN,IAAI,SAAS;AAAA,IACd;AAAA,EACD;AACD;;;Ae1rCA,SAAS,aAAAC,YAAW,wBAAwB;AAsC5C,IAAM,gCAAgC,oBAAI,IAGxC;AAEF,SAAS,gCACR,cACA,WAC+B;AAC/B,MAAM,UAAU,8BAA8B,IAAI,YAAY;AAC9D,MAAI,SAAS,OAAO;AACnB,UAAM,IAAI;AAAA,MACT,YAAY,KAAK,UAAU,YAAY,CAAC;AAAA,IACzC;AAED,SAAO;AACR;AAEA,SAAS,oCACR,OAC6C;AAC7C,SACC,UAAU,QACV,OAAO,SAAU,YACjB,yCAAyC,SACzC,YAAY,SACZ,MAAM,wCAAwC,MAC9C,MAAM,QAAQ,MAAM,MAAM;AAE5B;AAEA,SAAS,0CACR,QAC6B;AAC7B,SAAO,IAAI,eAA2B;AAAA,IACrC,MAAM,YAAY;AACjB,eAAW,SAAS,OAAO;AAC1B,mBAAW,QAAQ,MAAM,MAAM,CAAC;AAEjC,iBAAW,MAAM;AAAA,IAClB;AAAA,EACD,CAAC;AACF;AAEA,eAAe,oCACd,UACA,WACC;AACD,UAAQ,UAAU,MAAM;AAAA,IACvB,KAAK;AACJ,YAAM,SAAS,cAAc,UAAU,KAAK;AAC5C;AAAA,IACD,KAAK;AACJ,YAAM,SAAS,mBAAmB,UAAU,KAAK;AACjD;AAAA,IACD,KAAK;AACJ,YAAM,SAAS;AAAA,QACd,UAAU;AAAA,QACV,oCAAoC,UAAU,UAAU,IACrD,0CAA0C,UAAU,UAAU,IAC9D,UAAU;AAAA,MACd;AACA;AAAA,IACD,KAAK,iBAAiB;AACrB,UAAM,QAAQ,IAAI,MAAM,UAAU,MAAM,OAAO;AAC/C,YAAM,OAAO,UAAU,MAAM,MAC7B,MAAM,SAAS,cAAc,UAAU,MAAM,OAAO,UAAU,KAAK;AACnE;AAAA,IACD;AAAA,IACA,KAAK;AACJ,YAAM,SAAS,iBAAiB,UAAU,MAAM,UAAU,KAAK;AAC/D;AAAA,IACD,KAAK;AACJ,YAAM,SAAS,UAAU,UAAU,KAAK;AACxC;AAAA,IACD,KAAK;AACJ,YAAM,SAAS,kBAAkB,UAAU,IAAI;AAC/C;AAAA,EACF;AACD;AAcO,IAAM,kBAAN,cAA8B,iBAAsB;AAAA,EAC1D,YAAY,KAAuB,KAAU;AAC5C,UAAM,KAAK,GAAG;AAAA,EACf;AAAA,EAEA,MAAa,OAAO;AAAA,IACnB,KAAK,OAAO,WAAW;AAAA,IACvB,SAAS,CAAC;AAAA,EACX,IAAmC,CAAC,GAEjC;AACF,QAAI,CAAC,0BAA0B,EAAE;AAChC,YAAM,IAAI,cAAc,kCAAkC;AAG3D,QAAM,SAAS,KAAK,IAAI,OAAO,WAAW,EAAE,GACtC,OAAO,KAAK,IAAI,OAAO,IAAI,MAAM,GACjC,uBAAuB,8BAA8B;AAAA,MAC1D,KAAK,IAAI;AAAA,IACV;AAEA,QAAI,yBAAyB,QAAW;AACvC,UAAM,WAAW,KAAK,oBAAoB;AAC1C,2BAAqB,YAAY,KAAK,EAAE;AACxC,eAAW,aAAa,qBAAqB;AAC5C,cAAM,oCAAoC,UAAU,SAAS;AAAA,IAE/D;AAEA,QAAM,OAAM,oBAAI,KAAK,GAAE,YAAY,GAC7B,cAAc,KAClB;AAAA,MACA;AAAA;AAAA,MACA,CAAC;AAAA;AAAA,MACD,CAAC;AAAA;AAAA,MACD;AAAA,QACC;AAAA,QACA,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,QAAQ;AAAA;AAAA,QACR,YAAY;AAAA,QACZ,UAAU;AAAA,MACX;AAAA,MACA;AAAA,QACC,WAAW,oBAAI,KAAK;AAAA,QACpB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,cAAc,KAAK,IAAI;AAAA,MACxB;AAAA,IACD,EACC,KAAK,CAAC,QAAQ;AACd,MAAI,QAAQ,UACX,IAAI,OAAO,OAAO,EAAE;AAAA,IAEtB,CAAC,EACA,MAAM,MAAM;AAAA,IAGb,CAAC;AAEF,gBAAK,IAAI,UAAU,WAAW,GAEvB;AAAA,MACN;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAa,IAAI,IAAuC;AACvD,QAAM,SAAS,KAAK,IAAI,OAAO,WAAW,EAAE,GACtC,OAAO,KAAK,IAAI,OAAO,IAAI,MAAM,GAGjC,UAAU,MAAM,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,WAAW,EAAE,CAAC,GAElE,SAAS,IAAI,eAAe,IAAI,MAAM,OAAO;AAEnD,QAAI;AACH,YAAM,OAAO,OAAO;AAAA,IACrB,QAAQ;AACP,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACrC;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,MAAa,YACZ,OAC4B;AAC5B,QAAI,MAAM,WAAW;AACpB,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAGD,WAAO,MAAM,QAAQ;AAAA,MACpB,MAAM,IAAI,OAAO,QACJ,MAAM,KAAK,OAAO,GAAG,CAEjC;AAAA,IACF;AAAA,EACD;AAAA,EAEA,MAAa,uBAAwC;AAEpD,WAAO,KAAK,IAAI;AAAA,EACjB;AAAA,EAEA,MAAa,2BAA4C;AACxD,QAAI,8BAA8B,IAAI,KAAK,IAAI,aAAa;AAC3D,YAAM,IAAI;AAAA,QACT,YAAY,KAAK,UAAU,KAAK,IAAI,aAAa,CAAC,4DAA4D,KAAK,UAAU,KAAK,IAAI,YAAY,CAAC;AAAA,MACpJ;AAGD,QAAM,YAAY,OAAO,WAAW;AACpC,yCAA8B,IAAI,KAAK,IAAI,eAAe;AAAA,MACzD,IAAI;AAAA,MACJ,YAAY,CAAC;AAAA,MACb,aAAa,CAAC;AAAA,IACf,CAAC,GACM;AAAA,EACR;AAAA,EAEA,MAAa,wBAAwB,WAAkC;AAEtE,IADgB,8BAA8B,IAAI,KAAK,IAAI,aAAa,GAC3D,OAAO,aACnB,8BAA8B,OAAO,KAAK,IAAI,aAAa;AAAA,EAE7D;AAAA,EAEA,MAAa,iCACZ,WACA,YACgB;AAChB,QAAM,UAAU;AAAA,MACf,KAAK,IAAI;AAAA,MACT;AAAA,IACD;AACA,YAAQ,aAAa;AAAA,EACtB;AAAA,EAEA,MAAa,gCACZ,WACoB;AACpB,WAAO,gCAAgC,KAAK,IAAI,eAAe,SAAS,EACtE;AAAA,EACH;AAAA,EAEA,MAAa,0BAA0B,YAAsC;AAE5E,QAAM,SAAS,KAAK,IAAI,OAAO,WAAW,UAAU;AAKpD,WAJa,KAAK,IAAI,OAAO,IAAI,MAAM,EAET,oBAAoB;AAAA,EAGnD;AAAA,EAEA,MAAa,wBACZ,YACA,MACA,OACmB;AACnB,QAAM,SAAS,KAAK,IAAI,OAAO,WAAW,UAAU;AAGpD,WAAO,MAFM,KAAK,IAAI,OAAO,IAAI,MAAM,EAErB,kBAAkB,MAAM,KAAK;AAAA,EAChD;AAAA,EAEA,MAAa,YAAY,YAAoB,QAAgC;AAC5E,QAAM,SAAS,KAAK,IAAI,OAAO,WAAW,UAAU,GAC9C,OAAO,KAAK,IAAI,OAAO,IAAI,MAAM;AAEvC,QAAI;AACH,YAAM,KAAK,YAAY,MAAM;AAAA,IAC9B,QAAQ;AAAA,IAER;AAAA,EACD;AAAA,EAEA,MAAa,oBACZ,YACA,QACgB;AAChB,QAAM,SAAS,KAAK,IAAI,OAAO,WAAW,UAAU;AAEpD,WAAO,MADM,KAAK,IAAI,OAAO,IAAI,MAAM,EACrB,cAAc,MAAM;AAAA,EACvC;AAAA,EAEA,MAAa,uBACZ,YACA,UACmB;AACnB,QAAM,SAAS,KAAK,IAAI,OAAO,WAAW,UAAU;AAEpD,WAAO,MADM,KAAK,IAAI,OAAO,IAAI,MAAM,EACrB,iBAAiB,QAAQ;AAAA,EAC5C;AACD,GAEa,iBAAN,cAA6BC,WAAsC;AAAA,EAGzE,YACQ,IACP,MACQ,SACP;AACD,UAAM;AAJC;AAEC;AAGR,SAAK,OAAO;AAAA,EACb;AAAA,EANQ;AAAA,EAEC;AAAA,EALD;AAAA,EAWR,MAAa,QAAuB;AACnC,QAAI;AACH,YAAM,KAAK,KAAK,qBAAqB,OAAO;AAAA,IAC7C,SAAS,GAAG;AAEX,UAAI,CAAC,qBAAqB,CAAC;AAC1B,cAAM;AAAA,IAER;AAAA,EACD;AAAA,EAEA,MAAa,SAAwB;AACpC,UAAM,KAAK,KAAK,qBAAqB,QAAQ;AAAA,EAC9C;AAAA,EAEA,MAAa,YAA2B;AACvC,QAAI;AACH,YAAM,KAAK,KAAK,qBAAqB,WAAW;AAAA,IACjD,SAAS,GAAG;AAEX,UAAI,CAAC,yBAAyB,CAAC;AAC9B,cAAM;AAAA,IAER;AAAA,EACD;AAAA,EAEA,MAAa,QACZ,SACgB;AAChB,QAAI;AACH,YAAM,KAAK,KAAK,qBAAqB,WAAW,SAAS,IAAI;AAAA,IAC9D,SAAS,GAAG;AAEX,UAAI,CAAC,uBAAuB,CAAC;AAC5B,cAAM;AAAA,IAER;AAGA,SAAK,OAAO,KAAK,QAAQ,GACzB,MAAM,KAAK,KAAK,eAAe;AAAA,EAChC;AAAA,EAEA,MAAa,SAEX;AAGD,QAAM,qBAAqB,YAAY;AACtC,UAAM,SAAS,MAAM,KAAK,KAAK,UAAU,GAGnCC,QAAO,MAAO,KAAK,KAAK,SAAS;AAIvC,aAAO,EAAE,QAAQ,MAAAA,MAAK;AAAA,IACvB,GAEI;AAIJ,QAAI;AACH,eAAS,MAAM,mBAAmB;AAAA,IACnC,QAAQ;AACP,WAAK,OAAO,KAAK,QAAQ,GACzB,SAAS,MAAM,mBAAmB;AAAA,IACnC;AAEA,UAAM,OAAO,OAAO;AAQpB,QAAM,cANe,KAAK,KAAK;AAAA,MAC9B,CAAC,QACA,IAAI,UAAU,wBACd,IAAI,UAAU;AAAA,IAChB,EAEiC;AAAA,MAAI,CAAC,QACrC,IAAI,UAAU,uBACX,IAAI,SAAS,SACb,IAAI,SAAS;AAAA,IACjB,GAEM,iBACL,KAAK,KAAK,KAAK,CAAC,QAAQ,IAAI,UAAU,wBAA8B,GACjE,SAAS,UAAU,MAEjB,gBAAgB,KAAK,KAAK;AAAA,MAC/B,CAAC,QAAQ,IAAI,UAAU;AAAA,IACxB,GAAG,SAAS;AAEZ,WAAO;AAAA,MACN,QAAQ,mBAAmB,OAAO,MAAM;AAAA,MACxC,0BAA0B;AAAA,MAC1B,QAAQ;AAAA,MACR,OAAO;AAAA,IACR;AAAA,EACD;AAAA,EAEA,MAAa,UAAU,MAGL;AACjB,UAAM,KAAK,KAAK,aAAa;AAAA,MAC5B,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,MACX,WAAW,oBAAI,KAAK;AAAA,IACrB,CAAC;AAAA,EACF;AACD;",
  "names": ["exports", "n", "r", "HeapAsync", "i", "self", "j", "_a", "_b", "Heap", "RpcTarget", "r", "util", "objectUtil", "errorUtil", "errorMap", "ctx", "result", "issues", "elements", "processed", "ZodFirstPartyTypeKind", "RpcTarget", "result", "priorityQueueHash", "r", "Heap", "EVENT_MAP_PREFIX", "PAUSE_DATETIME", "RpcTarget", "RpcTarget", "logs"]
}
