@galacean/engine-shaderlab 1.6.6 → 1.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/package.json +4 -4
  2. package/dist/browser.js +0 -8073
  3. package/dist/browser.js.map +0 -1
  4. package/dist/browser.min.js +0 -2
  5. package/dist/browser.min.js.map +0 -1
  6. package/dist/browser.verbose.js +0 -8862
  7. package/dist/browser.verbose.js.map +0 -1
  8. package/dist/browser.verbose.min.js +0 -2
  9. package/dist/browser.verbose.min.js.map +0 -1
  10. package/dist/main.js +0 -8069
  11. package/dist/main.js.map +0 -1
  12. package/dist/main.verbose.js +0 -8858
  13. package/dist/main.verbose.js.map +0 -1
  14. package/dist/module.js +0 -8062
  15. package/dist/module.js.map +0 -1
  16. package/dist/module.verbose.js +0 -8851
  17. package/dist/module.verbose.js.map +0 -1
  18. package/types/GSError.d.ts +0 -16
  19. package/types/ParserUtils.d.ts +0 -12
  20. package/types/Preprocessor.d.ts +0 -31
  21. package/types/ShaderLab.d.ts +0 -15
  22. package/types/ShaderLabUtils.d.ts +0 -10
  23. package/types/TempArray.d.ts +0 -5
  24. package/types/codeGen/CodeGenVisitor.d.ts +0 -1
  25. package/types/codeGen/GLES100.d.ts +0 -12
  26. package/types/codeGen/GLES300.d.ts +0 -20
  27. package/types/codeGen/GLESVisitor.d.ts +0 -1
  28. package/types/codeGen/VisitorContext.d.ts +0 -1
  29. package/types/codeGen/index.d.ts +0 -3
  30. package/types/codeGen/types.d.ts +0 -12
  31. package/types/common/BaseLexer.d.ts +0 -2
  32. package/types/common/BaseToken.d.ts +0 -12
  33. package/types/common/IBaseSymbol.d.ts +0 -5
  34. package/types/common/ShaderPosition.d.ts +0 -8
  35. package/types/common/ShaderRange.d.ts +0 -8
  36. package/types/common/SymbolTable.d.ts +0 -7
  37. package/types/common/SymbolTableStack.d.ts +0 -13
  38. package/types/common/enums/Keyword.d.ts +0 -108
  39. package/types/common/enums/ShaderStage.d.ts +0 -5
  40. package/types/common/index.d.ts +0 -5
  41. package/types/common/types.d.ts +0 -101
  42. package/types/index.d.ts +0 -3
  43. package/types/lalr/CFG.d.ts +0 -5
  44. package/types/lalr/LALR1.d.ts +0 -26
  45. package/types/lalr/Production.d.ts +0 -9
  46. package/types/lalr/State.d.ts +0 -20
  47. package/types/lalr/StateItem.d.ts +0 -20
  48. package/types/lalr/Utils.d.ts +0 -22
  49. package/types/lalr/index.d.ts +0 -2
  50. package/types/lalr/types.d.ts +0 -14
  51. package/types/lexer/Lexer.d.ts +0 -23
  52. package/types/lexer/index.d.ts +0 -1
  53. package/types/macroProcessor/MacroDefine.d.ts +0 -13
  54. package/types/macroProcessor/MacroParser.d.ts +0 -7
  55. package/types/macroProcessor/MacroParserLexer.d.ts +0 -32
  56. package/types/macroProcessor/Utils.d.ts +0 -5
  57. package/types/macroProcessor/constants.d.ts +0 -54
  58. package/types/macroProcessor/index.d.ts +0 -1
  59. package/types/macroProcessor/sourceMap/index.d.ts +0 -37
  60. package/types/parser/AST.d.ts +0 -448
  61. package/types/parser/Grammar.d.ts +0 -11
  62. package/types/parser/GrammarSymbol.d.ts +0 -127
  63. package/types/parser/SemanticAnalyzer.d.ts +0 -2
  64. package/types/parser/ShaderInfo.d.ts +0 -10
  65. package/types/parser/ShaderTargetParser.d.ts +0 -24
  66. package/types/parser/builtin/functions.d.ts +0 -35
  67. package/types/parser/builtin/index.d.ts +0 -2
  68. package/types/parser/builtin/variables.d.ts +0 -11
  69. package/types/parser/index.d.ts +0 -2
  70. package/types/parser/symbolTable/FnSymbol.d.ts +0 -6
  71. package/types/parser/symbolTable/StructSymbol.d.ts +0 -6
  72. package/types/parser/symbolTable/SymbolDataType.d.ts +0 -8
  73. package/types/parser/symbolTable/SymbolInfo.d.ts +0 -22
  74. package/types/parser/symbolTable/VarSymbol.d.ts +0 -8
  75. package/types/parser/symbolTable/index.d.ts +0 -6
  76. package/types/parser/types.d.ts +0 -24
  77. package/types/sourceParser/ShaderSourceFactory.d.ts +0 -8
  78. package/types/sourceParser/ShaderSourceParser.d.ts +0 -1
  79. package/types/sourceParser/ShaderSourceSymbol.d.ts +0 -10
  80. package/types/sourceParser/SourceLexer.d.ts +0 -19
  81. package/types/sourceParser/index.d.ts +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.min.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../src/common/ShaderRange.ts","../src/common/types.ts","../src/common/enums/Keyword.ts","../src/common/enums/ShaderStage.ts","../src/parser/GrammarSymbol.ts","../src/GSError.ts","../src/parser/symbolTable/SymbolInfo.ts","../src/parser/AST.ts","../src/macroProcessor/constants.ts","../src/lalr/types.ts","../src/common/ShaderPosition.ts","../src/ShaderLabUtils.ts","../src/common/BaseToken.ts","../src/Preprocessor.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../src/parser/builtin/functions.ts","../src/parser/builtin/variables.ts","../src/common/SymbolTable.ts","../src/common/SymbolTableStack.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_get_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_wrap_native_super.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_function.js","../src/parser/symbolTable/SymbolDataType.ts","../src/parser/symbolTable/FnSymbol.ts","../src/parser/symbolTable/StructSymbol.ts","../src/parser/symbolTable/VarSymbol.ts","../src/parser/ShaderInfo.ts","../src/parser/SemanticAnalyzer.ts","../src/parser/types.ts","../src/ParserUtils.ts","../src/codeGen/VisitorContext.ts","../src/TempArray.ts","../src/codeGen/CodeGenVisitor.ts","../src/codeGen/GLESVisitor.ts","../src/codeGen/GLES100.ts","../src/codeGen/GLES300.ts","../src/common/BaseLexer.ts","../src/lexer/Lexer.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_type_of.js","../src/macroProcessor/MacroDefine.ts","../src/macroProcessor/MacroParserLexer.ts","../src/macroProcessor/Utils.ts","../src/macroProcessor/MacroParser.ts","../src/lalr/StateItem.ts","../src/lalr/State.ts","../src/lalr/Utils.ts","../src/lalr/LALR1.ts","../src/lalr/Production.ts","../src/parser/Grammar.ts","../src/lalr/CFG.ts","../src/parser/ShaderTargetParser.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/sourceParser/ShaderSourceFactory.ts","../src/sourceParser/ShaderSourceSymbol.ts","../src/sourceParser/SourceLexer.ts","../src/sourceParser/ShaderSourceParser.ts","../src/ShaderLab.ts","../src/index.ts"],"sourcesContent":["function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(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\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"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\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(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\nexport function __read(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\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(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\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { IPoolElement } from \"@galacean/engine\";\nimport { ShaderPosition } from \"./ShaderPosition\";\n\nexport class ShaderRange implements IPoolElement {\n public start: ShaderPosition;\n public end: ShaderPosition;\n\n set(start: ShaderPosition, end: ShaderPosition) {\n this.start = start;\n this.end = end;\n }\n\n dispose(): void {\n this.start.dispose();\n this.end.dispose();\n }\n}\n","import { Keyword } from \"./enums/Keyword\";\n\nexport enum ETokenType {\n ID = 1000,\n FLOAT_CONSTANT,\n INT_CONSTANT,\n STRING_CONST,\n /** << */\n LEFT_OP,\n /** \\>> */\n RIGHT_OP,\n /** ++ */\n INC_OP,\n /** -- */\n DEC_OP,\n /** <= */\n LE_OP,\n /** \\>= */\n GE_OP,\n /** == */\n EQ_OP,\n /** != */\n NE_OP,\n /** && */\n AND_OP,\n /** || */\n OR_OP,\n /** ^^ */\n XOR_OP,\n /** *= */\n MUL_ASSIGN,\n /** /= */\n DIV_ASSIGN,\n /** += */\n ADD_ASSIGN,\n /** -= */\n SUB_ASSIGN,\n /** %= */\n MOD_ASSIGN,\n /** <<= */\n LEFT_ASSIGN,\n /** >>= */\n RIGHT_ASSIGN,\n /** &= */\n AND_ASSIGN,\n /** ^= */\n XOR_ASSIGN,\n /** |= */\n OR_ASSIGN,\n /** ( */\n LEFT_PAREN,\n /** ) */\n RIGHT_PAREN,\n /** [ */\n LEFT_BRACKET,\n /** ] */\n RIGHT_BRACKET,\n /** { */\n LEFT_BRACE,\n /** } */\n RIGHT_BRACE,\n /** . */\n DOT,\n /** , */\n COMMA,\n COLON,\n /** = */\n EQUAL,\n /** ; */\n SEMICOLON,\n /** ! */\n BANG,\n /** \\- */\n DASH,\n /** ~ */\n TILDE,\n PLUS,\n /** \\* */\n STAR,\n /** / */\n SLASH,\n /** % */\n PERCENT,\n /** < */\n LEFT_ANGLE,\n /** \\> */\n RIGHT_ANGLE,\n VERTICAL_BAR,\n /** ^ */\n CARET,\n /** & */\n AMPERSAND,\n /** ? */\n QUESTION,\n\n NotWord,\n\n /** ε */\n EPSILON = 1998,\n EOF = 1999\n}\n\nexport const TypeAny = 3000;\n\nexport type GalaceanDataType =\n | Keyword.VOID\n | Keyword.FLOAT\n | Keyword.BOOL\n | Keyword.INT\n | Keyword.UINT\n | Keyword.VEC2\n | Keyword.VEC3\n | Keyword.VEC4\n | Keyword.BVEC2\n | Keyword.BVEC3\n | Keyword.BVEC4\n | Keyword.IVEC2\n | Keyword.IVEC3\n | Keyword.IVEC4\n | Keyword.UVEC2\n | Keyword.UVEC3\n | Keyword.UVEC4\n | Keyword.MAT2\n | Keyword.MAT3\n | Keyword.MAT4\n | Keyword.MAT2X3\n | Keyword.MAT2X4\n | Keyword.MAT3X2\n | Keyword.MAT3X4\n | Keyword.MAT4X2\n | Keyword.MAT4X3\n | Keyword.SAMPLER2D\n | Keyword.SAMPLER3D\n | Keyword.SAMPLER_CUBE\n | Keyword.SAMPLER2D_SHADOW\n | Keyword.SAMPLER_CUBE_SHADOW\n | Keyword.SAMPLER2D_ARRAY\n | Keyword.SAMPLER2D_ARRAY_SHADOW\n | Keyword.I_SAMPLER2D\n | Keyword.I_SAMPLER3D\n | Keyword.I_SAMPLER_CUBE\n | Keyword.I_SAMPLER2D_ARRAY\n | Keyword.U_SAMPLER2D\n | Keyword.U_SAMPLER3D\n | Keyword.U_SAMPLER_CUBE\n | Keyword.U_SAMPLER2D_ARRAY\n | Keyword.VEC4_ARRAY\n | typeof TypeAny\n | string;\n\nexport type TokenType = ETokenType | Keyword;\n","export enum Keyword {\n CONST = 0,\n BOOL,\n FLOAT,\n DOUBLE,\n INT,\n UINT,\n BREAK,\n CONTINUE,\n DO,\n ELSE,\n FOR,\n IF,\n WHILE,\n DISCARD,\n RETURN,\n BVEC2,\n BVEC3,\n BVEC4,\n IVEC2,\n IVEC3,\n IVEC4,\n UVEC2,\n UVEC3,\n UVEC4,\n VEC2,\n VEC3,\n VEC4,\n VEC4_ARRAY,\n MAT2,\n MAT3,\n MAT4,\n MAT2X3,\n MAT2X4,\n MAT3X2,\n MAT3X4,\n MAT4X2,\n MAT4X3,\n IN,\n OUT,\n INOUT,\n CENTROID,\n SAMPLER2D,\n SAMPLER3D,\n SAMPLER_CUBE,\n SAMPLER2D_SHADOW,\n SAMPLER_CUBE_SHADOW,\n SAMPLER2D_ARRAY,\n SAMPLER2D_ARRAY_SHADOW,\n I_SAMPLER2D,\n I_SAMPLER3D,\n I_SAMPLER_CUBE,\n I_SAMPLER2D_ARRAY,\n U_SAMPLER2D,\n U_SAMPLER3D,\n U_SAMPLER_CUBE,\n U_SAMPLER2D_ARRAY,\n STRUCT,\n LAYOUT,\n LOCATION,\n VOID,\n\n PRECISION,\n PRECISE,\n HIGHP,\n MEDIUMP,\n LOWP,\n INVARIANT,\n SMOOTH,\n FLAT,\n NOPERSPECTIVE,\n\n // Common Tokens\n True,\n False,\n LeftBrace,\n RightBrace,\n Equal,\n\n // Source Parser Tokens\n GSRenderQueueType,\n GSBlendState,\n GSDepthState,\n GSStencilState,\n GSRasterState,\n GSEditorProperties,\n GSEditorMacros,\n GSEditor,\n GSTags,\n GSVertexShader,\n GSFragmentShader,\n GSSubShader,\n GSPass,\n GSBlendFactor,\n GSBlendOperation,\n GSBool,\n GSNumber,\n GSColor,\n GSCompareFunction,\n GSStencilOperation,\n GSCullMode,\n GSUsePass,\n\n // Macros\n MACRO_IF,\n MACRO_IFDEF,\n MACRO_IFNDEF,\n MACRO_ELSE,\n MACRO_ELIF,\n MACRO_ENDIF,\n MACRO_UNDEF,\n MACRO_DEFINE_EXPRESSION,\n MACRO_CONDITIONAL_EXPRESSION,\n MACRO_CALL\n}\n","export enum EShaderStage {\n VERTEX,\n FRAGMENT,\n ALL\n}\n","import { TokenType } from \"../common\";\n\nexport type Terminal = TokenType;\n\nexport enum NoneTerminal {\n START = 2000,\n // galacean\n gs_shader_program,\n\n // glsl\n global_declaration,\n variable_declaration,\n variable_declaration_list,\n variable_declaration_statement,\n array_specifier_list,\n array_specifier,\n ext_builtin_type_specifier_nonarray,\n precision_specifier,\n variable_identifier,\n variable_identifier_node,\n primary_expression,\n postfix_expression,\n integer_expression,\n function_call,\n function_call_generic,\n function_call_header_no_parameters,\n function_call_header_with_parameters,\n function_call_parameter_list,\n function_call_header,\n function_identifier,\n constructor_identifier,\n unary_expression,\n unary_operator,\n multiplicative_expression,\n additive_expression,\n shift_expression,\n relational_expression,\n equality_expression,\n and_expression,\n inclusive_or_expression,\n exclusive_or_expression,\n logical_and_expression,\n logical_xor_expression,\n logical_or_expression,\n conditional_expression,\n assignment_expression,\n assignment_operator,\n expression,\n integer_constant_expression,\n integer_constant_expression_operator,\n declaration,\n function_prototype,\n function_declarator,\n function_header_with_parameters,\n function_header,\n function_parameter_list,\n parameter_declarator,\n parameter_declaration,\n parameter_qualifier,\n parameter_type_specifier,\n init_declarator_list,\n single_declaration,\n fully_specified_type,\n type_qualifier,\n single_type_qualifier,\n storage_qualifier,\n precision_qualifier,\n interpolation_qualifier,\n invariant_qualifier,\n type_specifier,\n type_specifier_nonarray,\n type_specifier_no_prec,\n basic_type,\n struct_specifier,\n struct_declaration_list,\n struct_declaration,\n layout_qualifier,\n struct_declarator_list,\n struct_declarator,\n identifier_list,\n decl_identifier,\n initializer,\n initializer_list,\n declaration_statement,\n simple_statement,\n compound_statement_no_scope,\n statement_with_scope,\n compound_statement,\n statement,\n statement_list,\n iteration_statement_no_new_scope,\n expression_statement,\n selection_statement,\n selection_rest_statement,\n condition,\n conditionopt,\n iteration_statement,\n for_init_statement,\n for_rest_statement,\n jump_statement,\n external_declaration,\n function_definition,\n field_selection,\n bool_constant,\n function_identifier_node,\n typename_identifier_node,\n scope_brace,\n scope_end_brace,\n\n // Macro\n macro_undef,\n macro_push_context,\n macro_pop_context,\n macro_elif_expression,\n macro_else_expression,\n global_macro_if_statement,\n global_macro_declaration,\n global_macro_branch,\n macro_struct_declaration,\n macro_struct_branch,\n macro_if_statement,\n macro_branch,\n macro_param_case_list,\n macro_param_block,\n macro_parameter_branch,\n macro_call_arg_case_list,\n macro_call_arg_block,\n macro_call_arg_branch,\n\n // Macro call\n macro_call_symbol,\n macro_call_function,\n\n _ignore\n}\n\nexport type GrammarSymbol = Terminal | NoneTerminal;\n\nexport type Derivation = GrammarSymbol[];\n","import { ShaderPosition } from \"./common/ShaderPosition\";\nimport { ShaderRange } from \"./common/ShaderRange\";\n\nexport class GSError extends Error {\n static wrappingLineCount = 2;\n\n constructor(\n name: GSErrorName,\n message: string,\n public readonly location: ShaderRange | ShaderPosition,\n public readonly source: string,\n public readonly file?: string\n ) {\n super(message);\n this.name = name;\n }\n\n override toString(): string {\n let start: ShaderPosition, end: ShaderPosition;\n const { message, location, source } = this;\n if (!source) {\n return message;\n }\n\n if (location instanceof ShaderPosition) {\n start = end = location;\n } else {\n start = location.start;\n end = location.end;\n }\n const lines = source.split(\"\\n\");\n\n let diagnosticMessage = `${this.name}: ${message}\\n\\n`;\n\n // #if _VERBOSE\n const lineSplit = \"|···\";\n\n const wrappingLineCount = GSError.wrappingLineCount;\n for (let i = start.line - wrappingLineCount, n = end.line + wrappingLineCount; i <= n; i++) {\n const line = lines[i];\n diagnosticMessage += lineSplit + `${line}\\n`;\n\n if (i < start.line || i > end.line) continue;\n\n let remarkStart = 0;\n let remarkEnd = line.length;\n let paddingLength = lineSplit.length;\n if (i === start.line) {\n remarkStart = start.column;\n paddingLength += start.column;\n }\n if (i === end.line) {\n remarkEnd = end.column;\n }\n const remarkLength = Math.max(remarkEnd - remarkStart, 1);\n\n diagnosticMessage += \" \".repeat(paddingLength) + \"^\".repeat(remarkLength) + \"\\n\";\n }\n // #endif\n\n return diagnosticMessage;\n }\n}\n\nexport enum GSErrorName {\n PreprocessorError = \"PreprocessorError\",\n CompilationError = \"CompilationError\",\n ScannerError = \"ScannerError\",\n CompilationWarn = \"CompilationWarning\"\n}\n","import { IBaseSymbol } from \"../../common/IBaseSymbol\";\nimport { GalaceanDataType, TypeAny } from \"../../common/types\";\nimport { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\n\nexport enum ESymbolType {\n VAR,\n FN,\n STRUCT,\n Any\n}\n\nexport type SymbolAstNode =\n | ASTNode.Initializer\n | ASTNode.StructSpecifier\n | ASTNode.FunctionDefinition\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\nexport class SymbolInfo implements IBaseSymbol {\n constructor(\n public ident: string,\n public type: ESymbolType,\n public astNode?: SymbolAstNode,\n public dataType?: SymbolDataType,\n public paramSignature?: GalaceanDataType[],\n public isInMacroBranch = false\n ) {}\n\n set(\n ident: string,\n symbolType: ESymbolType,\n astNode?: SymbolAstNode,\n dataType?: SymbolDataType,\n paramSignature?: GalaceanDataType[]\n ) {\n this.ident = ident;\n this.type = symbolType;\n this.astNode = astNode;\n this.dataType = dataType;\n this.paramSignature = paramSignature;\n }\n\n equal(symbol: SymbolInfo): boolean {\n if (symbol.type !== ESymbolType.Any && this.type !== symbol.type) return false;\n if (this.type === ESymbolType.FN) {\n if (!symbol.astNode && !symbol.paramSignature) return true;\n\n const params = (<ASTNode.FunctionDefinition>this.astNode).protoType.paramSig;\n const comparedParams = symbol.paramSignature ?? (<ASTNode.FunctionDefinition>symbol.astNode).protoType.paramSig;\n const length = params?.length;\n if (length !== comparedParams?.length) return false;\n for (let i = 0; i < length; i++) {\n const t1 = params[i],\n t2 = comparedParams[i];\n if (t1 === TypeAny || t2 === TypeAny) continue;\n if (t1 !== t2) return false;\n }\n return true;\n }\n return true;\n }\n}\n","import { ClearableObjectPool, IPoolElement } from \"@galacean/engine\";\nimport { CodeGenVisitor } from \"../codeGen\";\nimport { ETokenType, GalaceanDataType, ShaderRange, TokenType, TypeAny } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { Preprocessor } from \"../Preprocessor\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { BuiltinFunction, BuiltinVariable, NonGenericGalaceanType } from \"./builtin\";\nimport { NoneTerminal } from \"./GrammarSymbol\";\nimport SemanticAnalyzer from \"./SemanticAnalyzer\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, VarSymbol } from \"./symbolTable\";\nimport { IParamInfo, NodeChild, StructProp, SymbolType } from \"./types\";\n\nfunction ASTNodeDecorator(nonTerminal: NoneTerminal) {\n return function <T extends { new (): TreeNode }>(ASTNode: T) {\n ASTNode.prototype.nt = nonTerminal;\n (<any>ASTNode).pool = ShaderLabUtils.createObjectPool(ASTNode);\n };\n}\n\nexport abstract class TreeNode implements IPoolElement {\n static pool: ClearableObjectPool<TreeNode & { set: (loc: ShaderRange, children: NodeChild[]) => void }>;\n\n /** The non-terminal in grammar. */\n nt: NoneTerminal;\n private _children: NodeChild[];\n private _parent: TreeNode;\n private _location: ShaderRange;\n private _codeCache: string;\n\n /**\n * Parent pointer for AST traversal.\n * @remarks\n * The parent pointer is only reliable after the entire AST has been constructed.\n * DO NOT rely on `parent` during the `semanticAnalyze` phase, as the AST may still be under construction.\n * It is safe to use `parent` during code generation or any phase after AST construction.\n */\n get parent(): TreeNode {\n return this._parent;\n }\n\n get children() {\n return this._children;\n }\n\n get location() {\n return this._location;\n }\n\n set(loc: ShaderRange, children: NodeChild[]): void {\n this._location = loc;\n this._children = children;\n for (const child of children) {\n if (child instanceof TreeNode) {\n child._parent = this;\n }\n }\n\n this.init();\n }\n\n init() {}\n\n dispose(): void {}\n\n setCache(code: string): string {\n this._codeCache = code;\n return code;\n }\n\n getCache(): string {\n return this._codeCache;\n }\n\n // Visitor pattern interface for code generation\n codeGen(visitor: CodeGenVisitor) {\n const code = visitor.defaultCodeGen(this.children);\n this.setCache(code);\n return code;\n }\n\n /**\n * Do semantic analyze right after the ast node is generated.\n */\n semanticAnalyze(sa: SemanticAnalyzer) {}\n}\n\nexport namespace ASTNode {\n type MacroExpression =\n | MacroPushContext\n | MacroPopContext\n | MacroElseExpression\n | MacroElifExpression\n | MacroUndef\n | BaseToken;\n\n export type ASTNodePool = ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >;\n\n export function _unwrapToken(node: NodeChild) {\n if (node instanceof BaseToken) {\n return node;\n }\n throw \"not token\";\n }\n\n export function get(pool: ASTNodePool, sa: SemanticAnalyzer, loc: ShaderRange, children: NodeChild[]) {\n const node = pool.get();\n node.set(loc, children);\n node.semanticAnalyze(sa);\n sa.semanticStack.push(node);\n }\n\n @ASTNodeDecorator(NoneTerminal._ignore)\n export class TrivialNode extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.scope_brace)\n export class ScopeBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.pushScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.scope_end_brace)\n export class ScopeEndBrace extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.popScope();\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.jump_statement)\n export class JumpStatement extends TreeNode {\n isFragReturnStatement: boolean;\n\n override init(): void {\n this.isFragReturnStatement = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (ASTNode._unwrapToken(this.children![0]).type === Keyword.RETURN) {\n sa.curFunctionInfo.returnStatement = this;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitJumpStatement(this));\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.conditionopt)\n export class ConditionOpt extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_rest_statement)\n export class ForRestStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.condition)\n export class Condition extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.for_init_statement)\n export class ForInitStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.iteration_statement)\n export class IterationStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.selection_statement)\n export class SelectionStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.expression_statement)\n export class ExpressionStatement extends TreeNode {}\n // #endif\n\n export abstract class ExpressionAstNode extends TreeNode {\n protected _type?: GalaceanDataType;\n set type(t: GalaceanDataType | undefined) {\n this._type = t;\n }\n get type() {\n return this._type ?? TypeAny;\n }\n\n override init(): void {\n this._type = undefined;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.initializer_list)\n export class InitializerList extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const init = this.children[0] as Initializer | InitializerList;\n this.type = init.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.initializer)\n export class Initializer extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AssignmentExpression>this.children[0]).type;\n } else {\n this.type = (<InitializerList>this.children[1]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.single_declaration)\n export class SingleDeclaration extends TreeNode {\n typeSpecifier: TypeSpecifier;\n arraySpecifier?: ArraySpecifier;\n\n override init(): void {\n this.typeSpecifier = undefined;\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const childrenLen = children.length;\n const fullyType = children[0] as FullySpecifiedType;\n const typeSpecifier = fullyType.typeSpecifier;\n this.typeSpecifier = typeSpecifier;\n this.arraySpecifier = typeSpecifier.arraySpecifier;\n\n const id = children[1] as BaseToken;\n\n let sm: VarSymbol;\n if (childrenLen === 2 || childrenLen === 4) {\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[3] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n } else {\n const arraySpecifier = children[2] as ArraySpecifier;\n // #if _VERBOSE\n if (arraySpecifier && this.arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n this.arraySpecifier = arraySpecifier;\n const symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);\n const initializer = children[4] as Initializer;\n\n sm = new VarSymbol(id.lexeme, symbolType, false, initializer);\n }\n sa.symbolTableStack.insert(sm);\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitSingleDeclaration(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.fully_specified_type)\n export class FullySpecifiedType extends TreeNode {\n typeSpecifier: TypeSpecifier;\n type: GalaceanDataType;\n\n override semanticAnalyze(_: SemanticAnalyzer): void {\n const children = this.children;\n this.typeSpecifier = (children.length === 1 ? children[0] : children[1]) as TypeSpecifier;\n this.type = this.typeSpecifier.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_qualifier)\n export class TypeQualifier extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.single_type_qualifier)\n export class SingleTypeQualifier extends TreeNode {\n qualifier: Keyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0];\n if (child instanceof BaseToken) {\n this.qualifier = child.type as Keyword;\n this.lexeme = child.lexeme;\n } else {\n this.qualifier = (<BasicTypeQualifier>child).qualifier;\n this.lexeme = (<BasicTypeQualifier>child).lexeme;\n }\n }\n }\n\n abstract class BasicTypeQualifier extends TreeNode {\n qualifier: Keyword;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const token = this.children[0] as BaseToken;\n this.qualifier = token.type as Keyword;\n this.lexeme = token.lexeme;\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.storage_qualifier)\n export class StorageQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.precision_qualifier)\n export class PrecisionQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.interpolation_qualifier)\n export class InterpolationQualifier extends BasicTypeQualifier {}\n\n @ASTNodeDecorator(NoneTerminal.invariant_qualifier)\n export class InvariantQualifier extends BasicTypeQualifier {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.type_specifier)\n export class TypeSpecifier extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n arraySize?: number;\n isCustom: boolean;\n\n override init(): void {\n this.arraySize = undefined;\n }\n get arraySpecifier(): ArraySpecifier {\n return this.children[1] as ArraySpecifier;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const firstChild = children[0] as TypeSpecifierNonArray;\n this.type = firstChild.type;\n this.lexeme = firstChild.lexeme;\n this.arraySize = (children?.[1] as ArraySpecifier)?.size;\n this.isCustom = typeof this.type === \"string\";\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.array_specifier)\n export class ArraySpecifier extends TreeNode {\n size: number | undefined;\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const integerConstantExpr = this.children[1] as IntegerConstantExpression;\n this.size = integerConstantExpr.value;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression_operator)\n export class IntegerConstantExpressionOperator extends TreeNode {\n compute: (a: number, b: number) => number;\n lexeme: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const operator = this.children[0] as BaseToken;\n this.lexeme = operator.lexeme;\n switch (operator.type) {\n case ETokenType.PLUS:\n this.compute = (a, b) => a + b;\n break;\n case ETokenType.DASH:\n this.compute = (a, b) => a - b;\n break;\n case ETokenType.STAR:\n this.compute = (a, b) => a * b;\n break;\n case ETokenType.SLASH:\n this.compute = (a, b) => a / b;\n break;\n case ETokenType.PERCENT:\n this.compute = (a, b) => a % b;\n break;\n default:\n sa.reportError(operator.location, `not implemented operator ${operator.lexeme}`);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.integer_constant_expression)\n export class IntegerConstantExpression extends TreeNode {\n value?: number;\n\n override init(): void {\n this.value = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const child = this.children[0];\n if (child instanceof BaseToken) {\n this.value = Number(child.lexeme);\n }\n // #if _VERBOSE\n else {\n const id = child as VariableIdentifier;\n if (!ParserUtils.typeCompatible(Keyword.INT, id.typeInfo)) {\n sa.reportError(id.location, \"Invalid integer.\");\n return;\n }\n }\n // #endif\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.type_specifier_nonarray)\n export class TypeSpecifierNonArray extends TreeNode {\n type: GalaceanDataType;\n lexeme: string;\n\n override init(): void {\n const tt = this.children[0];\n if (tt instanceof BaseToken) {\n this.type = tt.lexeme;\n this.lexeme = tt.lexeme;\n } else {\n this.type = (tt as ExtBuiltinTypeSpecifierNonArray).type as GalaceanDataType;\n this.lexeme = (tt as ExtBuiltinTypeSpecifierNonArray).lexeme;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.ext_builtin_type_specifier_nonarray)\n export class ExtBuiltinTypeSpecifierNonArray extends TreeNode {\n type: TokenType;\n lexeme: string;\n\n override init(): void {\n const token = this.children[0] as BaseToken;\n this.type = token.type;\n this.lexeme = token.lexeme;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.init_declarator_list)\n export class InitDeclaratorList extends TreeNode {\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n let sm: VarSymbol;\n const children = this.children;\n const childrenLength = children.length;\n if (childrenLength === 1) {\n const { typeSpecifier, arraySpecifier } = children[0] as SingleDeclaration;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n } else {\n const initDeclList = children[0] as InitDeclaratorList;\n this.typeInfo = initDeclList.typeInfo;\n }\n\n if (childrenLength === 3 || childrenLength === 5) {\n const id = children[2] as BaseToken;\n sm = new VarSymbol(id.lexeme, this.typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n } else if (childrenLength === 4 || childrenLength === 6) {\n const typeInfo = this.typeInfo;\n const arraySpecifier = this.children[3] as ArraySpecifier;\n // #if _VERBOSE\n if (typeInfo.arraySpecifier && arraySpecifier) {\n sa.reportError(arraySpecifier.location, \"Array of array is not supported.\");\n }\n // #endif\n typeInfo.arraySpecifier = arraySpecifier;\n const id = children[2] as BaseToken;\n sm = new VarSymbol(id.lexeme, typeInfo, false, this);\n sa.symbolTableStack.insert(sm);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.identifier_list)\n export class IdentifierList extends TreeNode {\n idList: BaseToken[] = [];\n\n override init(): void {\n this.idList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, idList: curIdList } = this;\n if (children.length === 2) {\n curIdList.push(children[1] as BaseToken);\n } else {\n const list = children[0] as IdentifierList;\n const id = children[2] as BaseToken;\n const listIdLength = list.idList.length;\n curIdList.length = listIdLength + 1;\n\n for (let i = 0; i < listIdLength; i++) {\n curIdList[i] = list.idList[i];\n }\n curIdList[listIdLength] = id;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.declaration)\n export class Declaration extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitDeclaration(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_prototype)\n export class FunctionProtoType extends TreeNode {\n ident: BaseToken;\n returnType: FullySpecifiedType;\n parameterList: IParamInfo[];\n paramSig: GalaceanDataType[] | undefined;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const declarator = this.children[0] as FunctionDeclarator;\n this.ident = declarator.ident;\n this.returnType = declarator.returnType;\n this.parameterList = declarator.parameterInfoList;\n this.paramSig = declarator.paramSig;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_declarator)\n export class FunctionDeclarator extends TreeNode {\n ident: BaseToken;\n returnType: FullySpecifiedType;\n parameterInfoList: IParamInfo[] | undefined;\n paramSig: GalaceanDataType[] | undefined;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.curFunctionInfo.returnStatement = null;\n sa.curFunctionInfo.header = this;\n\n const children = this.children;\n const header = children[0] as FunctionHeader;\n const parameterList = children[1] as FunctionParameterList | undefined;\n this.ident = header.ident;\n this.returnType = header.returnType;\n this.parameterInfoList = parameterList?.parameterInfoList;\n this.paramSig = parameterList?.paramSig;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_header)\n export class FunctionHeader extends TreeNode {\n ident: BaseToken;\n returnType: FullySpecifiedType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.pushScope();\n const children = this.children;\n this.ident = children[1] as BaseToken;\n this.returnType = children[0] as FullySpecifiedType;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionHeader(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_parameter_list)\n export class FunctionParameterList extends TreeNode {\n parameterInfoList: IParamInfo[] = [];\n paramSig: GalaceanDataType[] = [];\n\n override init(): void {\n this.parameterInfoList.length = 0;\n this.paramSig.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const { parameterInfoList, paramSig } = this;\n\n if (children[0] instanceof ParameterDeclaration) {\n const decl = children[0];\n parameterInfoList.push({ ident: decl.ident, typeInfo: decl.typeInfo, astNode: decl });\n paramSig.push(decl.typeInfo?.type ?? TypeAny);\n } else if (children[2] instanceof ParameterDeclaration) {\n const list = children[0] as FunctionParameterList;\n const decl = children[2];\n\n parameterInfoList.push(...list.parameterInfoList, {\n ident: decl.ident,\n typeInfo: decl.typeInfo,\n astNode: decl\n });\n paramSig.push(...list.paramSig, decl.typeInfo?.type ?? TypeAny);\n } else if (children[0] instanceof FunctionParameterList && children[1] instanceof MacroParamBlock) {\n parameterInfoList.push(...children[0].parameterInfoList, { astNode: children[1] });\n paramSig.push(...children[0].paramSig, TypeAny);\n } else if (children[0] instanceof MacroParamBlock) {\n parameterInfoList.push({ astNode: children[0] });\n paramSig.push(TypeAny);\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionParameterList(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_param_case_list)\n export class MacroParamCaseList extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_param_block)\n export class MacroParamBlock extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_parameter_branch)\n export class MacroParameterBranch extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.parameter_declaration)\n export class ParameterDeclaration extends TreeNode {\n // Some syntax is not recognized, eg.\n // `#define TEXTURE2D_SHADOW_PARAM(shadowMap) mediump sampler2D shadowMap`\n typeInfo?: SymbolType;\n ident?: BaseToken;\n\n override init(): void {\n this.typeInfo = undefined;\n this.ident = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n let parameterDeclarator: ParameterDeclarator | undefined;\n\n if (children[0] instanceof ParameterDeclarator) {\n parameterDeclarator = children[0];\n } else if (children[1] instanceof ParameterDeclarator) {\n parameterDeclarator = children[1];\n }\n\n if (parameterDeclarator) {\n this.typeInfo = parameterDeclarator.typeInfo;\n this.ident = parameterDeclarator.ident;\n const varSymbol = new VarSymbol(\n parameterDeclarator.ident.lexeme,\n parameterDeclarator.typeInfo,\n false,\n parameterDeclarator\n );\n sa.symbolTableStack.insert(varSymbol);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.parameter_declarator)\n export class ParameterDeclarator extends TreeNode {\n ident: BaseToken;\n typeInfo: SymbolType;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[1] as BaseToken;\n const typeSpecifier = children[0] as TypeSpecifier;\n const arraySpecifier = children[2] as ArraySpecifier;\n this.typeInfo = new SymbolType(typeSpecifier.type, typeSpecifier.lexeme, arraySpecifier);\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.simple_statement)\n export class SimpleStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.compound_statement)\n export class CompoundStatement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.compound_statement_no_scope)\n export class CompoundStatementNoScope extends TreeNode {}\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.statement)\n export class Statement extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.statement_list)\n export class StatementList extends TreeNode {\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitStatementList(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_definition)\n export class FunctionDefinition extends TreeNode {\n returnStatement?: ASTNode.JumpStatement;\n protoType: FunctionProtoType;\n statements: CompoundStatementNoScope;\n isInMacroBranch: boolean;\n\n override init(): void {\n this.returnStatement = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.protoType = children[0] as FunctionProtoType;\n this.statements = children[1] as CompoundStatementNoScope;\n\n sa.popScope();\n const sm = new FnSymbol(this.protoType.ident.lexeme, this);\n sa.symbolTableStack.insert(sm);\n this.isInMacroBranch = sa.symbolTableStack.isInMacroBranch;\n\n const { curFunctionInfo } = sa;\n const { header, returnStatement } = curFunctionInfo;\n if (header.returnType.type === Keyword.VOID) {\n if (returnStatement) {\n sa.reportError(header.returnType.location, \"Return in void function.\");\n }\n } else {\n if (!returnStatement) {\n sa.reportError(header.returnType.location, `No return statement found.`);\n } else {\n this.returnStatement = returnStatement;\n }\n }\n curFunctionInfo.header = undefined;\n curFunctionInfo.returnStatement = undefined;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionDefinition(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call)\n export class FunctionCall extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.type = (this.children[0] as FunctionCallGeneric).type;\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionCall(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_generic)\n export class FunctionCallGeneric extends ExpressionAstNode {\n fnSymbol: FnSymbol | StructSymbol | undefined;\n\n override init(): void {\n super.init();\n this.fnSymbol = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const functionIdentifier = this.children[0] as FunctionIdentifier;\n if (functionIdentifier.isBuiltin) {\n this.type = functionIdentifier.ident;\n } else {\n const fnIdent = <string>functionIdentifier.ident;\n\n let paramSig: NonGenericGalaceanType[] | undefined;\n if (this.children.length === 4) {\n const paramList = this.children[2];\n if (paramList instanceof FunctionCallParameterList) {\n paramSig = paramList.paramSig as any;\n }\n }\n // #if _VERBOSE\n const builtinFn = BuiltinFunction.getFn(fnIdent, paramSig);\n if (builtinFn) {\n this.type = builtinFn.realReturnType;\n return;\n }\n // #endif\n\n const lookupSymbol = SemanticAnalyzer._lookupSymbol;\n lookupSymbol.set(fnIdent, ESymbolType.FN, undefined, undefined, paramSig);\n\n const fnSymbol = sa.symbolTableStack.lookup(lookupSymbol, true) as FnSymbol;\n\n if (!fnSymbol) {\n // #if _VERBOSE\n sa.reportError(this.location, `No overload function type found: ${functionIdentifier.ident}`);\n // #endif\n return;\n }\n this.type = fnSymbol?.dataType?.type;\n this.fnSymbol = fnSymbol;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_call_parameter_list)\n export class FunctionCallParameterList extends TreeNode {\n paramSig: GalaceanDataType[] = [];\n paramNodes: Array<AssignmentExpression | MacroCallArgBlock> = [];\n\n override init(): void {\n this.paramSig.length = 0;\n this.paramNodes.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, paramSig, paramNodes } = this;\n if (children[0] instanceof AssignmentExpression) {\n const expr = children[0];\n paramSig.push(expr.type);\n paramNodes.push(expr);\n } else if (children[2] instanceof AssignmentExpression) {\n const list = children[0] as FunctionCallParameterList;\n const decl = children[2] as AssignmentExpression;\n paramSig.push(...list.paramSig, decl.type);\n paramNodes.push(...list.paramNodes, decl);\n } else if (children[0] instanceof FunctionCallParameterList && children[1] instanceof MacroCallArgBlock) {\n paramSig.push(...children[0].paramSig, TypeAny);\n paramNodes.push(...children[0].paramNodes, children[1]);\n } else if (children[0] instanceof MacroCallArgBlock) {\n paramSig.push(TypeAny);\n paramNodes.push(children[0]);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_call_arg_case_list)\n export class MacroCallArgCaseList extends TreeNode {}\n @ASTNodeDecorator(NoneTerminal.macro_call_arg_block)\n export class MacroCallArgBlock extends TreeNode {}\n @ASTNodeDecorator(NoneTerminal.macro_call_arg_branch)\n export class MacroCallArgBranch extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.precision_specifier)\n export class PrecisionSpecifier extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (!sa.symbolTableStack.isInMacroBranch) {\n sa.shaderData.globalPrecisions.push(this);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.function_identifier)\n export class FunctionIdentifier extends TreeNode {\n ident: GalaceanDataType;\n lexeme: string;\n isBuiltin: boolean;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const typeSpecifier = this.children[0] as TypeSpecifier;\n\n this.ident = typeSpecifier.type;\n this.lexeme = typeSpecifier.lexeme;\n this.isBuiltin = typeof this.ident !== \"string\";\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitFunctionIdentifier(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.assignment_expression)\n export class AssignmentExpression extends ExpressionAstNode {\n // #if _VERBOSE\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as ConditionalExpression;\n this.type = expr.type ?? TypeAny;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type ?? TypeAny;\n }\n }\n // #endif\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.assignment_operator)\n export class AssignmentOperator extends TreeNode {}\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.expression)\n export class Expression extends ExpressionAstNode {\n // #if _VERBOSE\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const expr = this.children[0] as AssignmentExpression;\n this.type = expr.type;\n } else {\n const expr = this.children[2] as AssignmentExpression;\n this.type = expr.type;\n }\n }\n // #endif\n }\n\n @ASTNodeDecorator(NoneTerminal.primary_expression)\n export class PrimaryExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n const id = this.children[0];\n if (id instanceof VariableIdentifier) {\n this.type = id.typeInfo ?? TypeAny;\n } else {\n switch ((<BaseToken>id).type) {\n case ETokenType.INT_CONSTANT:\n this._type = Keyword.INT;\n break;\n case ETokenType.FLOAT_CONSTANT:\n this.type = Keyword.FLOAT;\n break;\n case Keyword.True:\n case Keyword.False:\n this.type = Keyword.BOOL;\n break;\n }\n }\n } else {\n const expression = this.children[1] as Expression;\n this.type = expression.type;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.postfix_expression)\n export class PostfixExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n const child = this.children[0] as PrimaryExpression | FunctionCall;\n this.type = child.type;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitPostfixExpression(this));\n }\n }\n\n // #if _VERBOSE\n @ASTNodeDecorator(NoneTerminal.unary_operator)\n export class UnaryOperator extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.unary_expression)\n export class UnaryExpression extends ExpressionAstNode {\n override init(): void {\n this.type = (this.children[0] as PostfixExpression).type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.multiplicative_expression)\n export class MultiplicativeExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as UnaryExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as MultiplicativeExpression;\n // const exp2 = this.children[2] as UnaryExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.additive_expression)\n export class AdditiveExpression extends ExpressionAstNode {\n override init(): void {\n super.init();\n if (this.children.length === 1) {\n this.type = (this.children[0] as MultiplicativeExpression).type;\n // TODO: Temporarily remove type deduce due to generic function type issue.\n // } else {\n // const exp1 = this.children[0] as AdditiveExpression;\n // const exp2 = this.children[2] as MultiplicativeExpression;\n // if (exp1.type === exp2.type) {\n // this.type = exp1.type;\n // }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.shift_expression)\n export class ShiftExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const expr = this.children[0] as ExpressionAstNode;\n this.type = expr.type;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.relational_expression)\n export class RelationalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ShiftExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.equality_expression)\n export class EqualityExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<RelationalExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.and_expression)\n export class AndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = Keyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.exclusive_or_expression)\n export class ExclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<AndExpression>this.children[0]).type;\n } else {\n this.type = Keyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.inclusive_or_expression)\n export class InclusiveOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<ExclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = Keyword.UINT;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_and_expression)\n export class LogicalAndExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<InclusiveOrExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_xor_expression)\n export class LogicalXorExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalAndExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.logical_or_expression)\n export class LogicalOrExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalXorExpression>this.children[0]).type;\n } else {\n this.type = Keyword.BOOL;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.conditional_expression)\n export class ConditionalExpression extends ExpressionAstNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n if (this.children.length === 1) {\n this.type = (<LogicalOrExpression>this.children[0]).type;\n }\n }\n }\n // #endif\n\n @ASTNodeDecorator(NoneTerminal.struct_specifier)\n export class StructSpecifier extends TreeNode {\n ident?: BaseToken;\n propList: StructProp[];\n macroExpressions: MacroExpression[];\n isInMacroBranch: boolean;\n\n override init(): void {\n this.ident = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.isInMacroBranch = sa.symbolTableStack.isInMacroBranch;\n if (children.length === 6) {\n this.ident = children[1] as BaseToken;\n sa.symbolTableStack.insert(new StructSymbol(this.ident.lexeme, this));\n\n this.propList = (children[3] as StructDeclarationList).propList;\n this.macroExpressions = (children[3] as StructDeclarationList).macroExpressions;\n } else {\n this.propList = (children[2] as StructDeclarationList).propList;\n this.macroExpressions = (children[2] as StructDeclarationList).macroExpressions;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(visitor.visitStructSpecifier(this));\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration_list)\n export class StructDeclarationList extends TreeNode {\n propList: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.propList.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, propList, macroExpressions } = this;\n\n if (children.length === 1) {\n propList.push(...(children[0] as StructDeclaration).props);\n macroExpressions.push(...(children[0] as StructDeclaration).macroExpressions);\n } else {\n propList.push(...(children[0] as StructDeclarationList).propList);\n propList.push(...(children[1] as StructDeclaration).props);\n macroExpressions.push(...(children[0] as StructDeclarationList).macroExpressions);\n macroExpressions.push(...(children[1] as StructDeclaration).macroExpressions);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declaration)\n export class StructDeclaration extends TreeNode {\n props: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n private _typeSpecifier?: TypeSpecifier;\n private _declaratorList?: StructDeclaratorList;\n\n override init(): void {\n this._typeSpecifier = undefined;\n this._declaratorList = undefined;\n this.props.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, props, macroExpressions } = this;\n\n if (children.length === 1) {\n const macroStructDeclaration = children[0] as MacroStructDeclaration;\n const macroProps = macroStructDeclaration.props;\n\n for (let i = 0, length = macroProps.length; i < length; i++) {\n macroProps[i].isInMacroBranch = true;\n props.push(macroProps[i]);\n }\n\n macroExpressions.push(...macroStructDeclaration.macroExpressions);\n\n return;\n }\n\n if (children.length === 3) {\n this._typeSpecifier = children[0] as TypeSpecifier;\n this._declaratorList = children[1] as StructDeclaratorList;\n } else {\n this._typeSpecifier = children[1] as TypeSpecifier;\n this._declaratorList = children[2] as StructDeclaratorList;\n }\n\n const firstChild = children[0];\n const { type, lexeme } = this._typeSpecifier;\n const isInMacroBranch = sa.symbolTableStack.isInMacroBranch;\n if (firstChild instanceof LayoutQualifier) {\n const declarator = children[2] as StructDeclarator;\n const typeInfo = new SymbolType(type, lexeme);\n const prop = new StructProp(typeInfo, declarator.ident, firstChild.index, isInMacroBranch);\n props.push(prop);\n } else {\n const declaratorList = this._declaratorList.declaratorList;\n const declaratorListLength = declaratorList.length;\n props.length = declaratorListLength;\n for (let i = 0; i < declaratorListLength; i++) {\n const declarator = declaratorList[i];\n const typeInfo = new SymbolType(type, lexeme, declarator.arraySpecifier);\n const prop = new StructProp(typeInfo, declarator.ident, undefined, isInMacroBranch);\n props[i] = prop;\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_struct_declaration)\n export class MacroStructDeclaration extends TreeNode {\n props: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.props.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(): void {\n const children = this.children;\n\n this.macroExpressions.push(children[0] as MacroPushContext);\n\n if (children.length === 3) {\n this.props.push(...(children[1] as StructDeclarationList).propList);\n this.props.push(...(children[2] as MacroStructBranch).props);\n this.macroExpressions.push(...(children[1] as StructDeclarationList).macroExpressions);\n this.macroExpressions.push(...(children[2] as MacroStructBranch).macroExpressions);\n } else {\n this.props.push(...(children[1] as MacroStructBranch).props);\n this.macroExpressions.push(...(children[1] as MacroStructBranch).macroExpressions);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_struct_branch)\n export class MacroStructBranch extends TreeNode {\n props: StructProp[] = [];\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.props.length = 0;\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(): void {\n const children = this.children;\n const lastNode = children[children.length - 1];\n\n this.macroExpressions.push(children[0] as MacroPopContext | MacroElseExpression | MacroElifExpression);\n\n if (children[1] instanceof StructDeclarationList) {\n this.props.push(...children[1].propList);\n this.macroExpressions.push(...children[1].macroExpressions);\n }\n\n if (lastNode instanceof MacroStructBranch) {\n this.props.push(...lastNode.props);\n this.macroExpressions.push(...lastNode.macroExpressions);\n }\n\n if (children.length > 1 && lastNode instanceof MacroPopContext) {\n this.macroExpressions.push(lastNode);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.layout_qualifier)\n export class LayoutQualifier extends TreeNode {\n index: number;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.index = Number((<BaseToken>this.children[4]).lexeme);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator_list)\n export class StructDeclaratorList extends TreeNode {\n declaratorList: StructDeclarator[] = [];\n\n override init(): void {\n this.declaratorList.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children, declaratorList } = this;\n if (children.length === 1) {\n declaratorList.push(children[0] as StructDeclarator);\n } else {\n const list = children[0] as StructDeclaratorList;\n const declarator = children[1] as StructDeclarator;\n const listLength = list.declaratorList.length;\n declaratorList.length = listLength + 1;\n for (let i = 0; i < listLength; i++) {\n declaratorList[i] = list.declaratorList[i];\n }\n declaratorList[listLength] = declarator;\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.struct_declarator)\n export class StructDeclarator extends TreeNode {\n ident: BaseToken;\n arraySpecifier: ArraySpecifier | undefined;\n\n override init(): void {\n this.arraySpecifier = undefined;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n this.ident = children[0] as BaseToken;\n this.arraySpecifier = children[1] as ArraySpecifier;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration)\n export class VariableDeclaration extends TreeNode {\n type: FullySpecifiedType;\n isStatic: boolean;\n\n override init(): void {\n this.isStatic = false;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const type = children[0] as FullySpecifiedType;\n const ident = children[1] as BaseToken;\n this.type = type;\n const sm = new VarSymbol(ident.lexeme, new SymbolType(type.type, type.typeSpecifier.lexeme), true, this);\n\n sa.symbolTableStack.insert(sm);\n\n if (children.length === 4) {\n this.isStatic = true;\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n if (this.isStatic) {\n return super.codeGen(visitor);\n } else {\n return this.setCache(visitor.visitGlobalVariableDeclaration(this));\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_declaration_list)\n export class VariableDeclarationList extends TreeNode {\n type: FullySpecifiedType;\n variableDeclarations: VariableDeclaration[] = [];\n\n override init(): void {\n this.variableDeclarations.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const { children } = this;\n const length = children.length;\n const child = children[0] as VariableDeclaration | VariableDeclarationList;\n const type = child.type;\n this.type = type;\n\n if (child instanceof VariableDeclaration) {\n this.variableDeclarations.push(child);\n } else {\n this.variableDeclarations.push(...child.variableDeclarations);\n\n const ident = children[2] as BaseToken;\n\n const newVariable = VariableDeclaration.pool.get() as VariableDeclaration;\n if (length === 3) {\n // variable_declaration_list ',' id\n newVariable.set(ident.location, [type, ident]);\n } else {\n // variable_declaration_list ',' id array_specifier\n newVariable.set(ident.location, [type, ident, children[3] as ArraySpecifier]);\n }\n newVariable.semanticAnalyze(sa);\n this.variableDeclarations.push(newVariable);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.variable_identifier)\n export class VariableIdentifier extends TreeNode {\n // @todo: typeInfo may be multiple types\n typeInfo: GalaceanDataType;\n referenceGlobalSymbolNames: string[] = [];\n\n private _symbols: Array<VarSymbol | FnSymbol> = [];\n\n override init(): void {\n this.typeInfo = TypeAny;\n this.referenceGlobalSymbolNames.length = 0;\n this._symbols.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0] as BaseToken | MacroCallSymbol | MacroCallFunction;\n const referenceGlobalSymbolNames = this.referenceGlobalSymbolNames;\n const symbols = this._symbols;\n const lookupSymbol = SemanticAnalyzer._lookupSymbol;\n let needFindNames: string[];\n\n if (child instanceof BaseToken) {\n needFindNames = [child.lexeme];\n } else {\n needFindNames = (child as MacroCallSymbol | MacroCallFunction).referenceSymbolNames;\n }\n\n for (let i = 0; i < needFindNames.length; i++) {\n const name = needFindNames[i];\n\n if (sa.macroDefineList[name]) {\n continue;\n }\n\n // only `macro_call` CFG can reference fnSymbols, others fnSymbols are referenced in `function_call_generic` CFG\n if (!(child instanceof BaseToken) && BuiltinFunction.isExist(name)) {\n continue;\n }\n\n const builtinVar = BuiltinVariable.getVar(name);\n if (builtinVar) {\n this.typeInfo = builtinVar.type;\n continue;\n }\n\n lookupSymbol.set(name, ESymbolType.Any);\n sa.symbolTableStack.lookupAll(lookupSymbol, true, symbols);\n\n if (!symbols.length) {\n // #if _VERBOSE\n sa.reportWarning(this.location, `Please sure the identifier \"${name}\" will be declared before used.`);\n // #endif\n } else {\n this.typeInfo = symbols[0].dataType?.type;\n const currentScopeSymbol = <VarSymbol | FnSymbol>sa.symbolTableStack.scope.getSymbol(lookupSymbol, true);\n if (currentScopeSymbol) {\n if (\n (currentScopeSymbol instanceof FnSymbol || currentScopeSymbol.isGlobalVariable) &&\n referenceGlobalSymbolNames.indexOf(name) === -1\n ) {\n referenceGlobalSymbolNames.push(name);\n }\n } else if (\n symbols.some((s) => s instanceof FnSymbol || s.isGlobalVariable) &&\n referenceGlobalSymbolNames.indexOf(name) === -1\n ) {\n referenceGlobalSymbolNames.push(name);\n }\n }\n }\n }\n\n override codeGen(visitor: CodeGenVisitor): string {\n return this.setCache(visitor.visitVariableIdentifier(this));\n }\n\n getLexeme(visitor: CodeGenVisitor): string {\n const child = this.children[0] as BaseToken | MacroCallSymbol | MacroCallFunction;\n if (child instanceof BaseToken) {\n return child.lexeme;\n } else {\n return child.codeGen(visitor);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.gs_shader_program)\n export class GLShaderProgram extends TreeNode {\n shaderData: ShaderData;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n this.shaderData = sa.shaderData;\n this.shaderData.symbolTable = sa.symbolTableStack.scope;\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_declaration)\n export class GlobalDeclaration extends TreeNode {\n macroExpressions: Array<MacroExpression | MacroUndef | BaseToken> = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0];\n\n if (child instanceof MacroUndef || child instanceof GlobalMacroIfStatement || child instanceof BaseToken) {\n sa.shaderData.globalMacroDeclarations.push(this);\n\n if (child instanceof GlobalMacroIfStatement) {\n this.macroExpressions.push(...child.macroExpressions);\n } else {\n this.macroExpressions.push(child);\n }\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_undef)\n export class MacroUndef extends TreeNode {\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_push_context)\n export class MacroPushContext extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.symbolTableStack._macroLevel++;\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_pop_context)\n export class MacroPopContext extends TreeNode {\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n sa.symbolTableStack._macroLevel--;\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_elif_expression)\n export class MacroElifExpression extends TreeNode {\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_else_expression)\n export class MacroElseExpression extends TreeNode {\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(\"\\n\" + super.codeGen(visitor) + \"\\n\");\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_macro_declaration)\n export class GlobalMacroDeclaration extends TreeNode {\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const macroExpressions = this.macroExpressions;\n\n if (children.length === 1) {\n macroExpressions.push(...(children[0] as GlobalDeclaration).macroExpressions);\n } else {\n macroExpressions.push(...(children[0] as GlobalMacroDeclaration).macroExpressions);\n macroExpressions.push(...(children[1] as GlobalDeclaration).macroExpressions);\n }\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n const children = this.children as TreeNode[];\n if (children.length === 1) {\n return this.setCache(children[0].codeGen(visitor));\n } else {\n return this.setCache(`${children[0].codeGen(visitor)}\\n${children[1].codeGen(visitor)}`);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_macro_if_statement)\n export class GlobalMacroIfStatement extends TreeNode {\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const macroExpressions = this.macroExpressions;\n\n if (children.length === 3) {\n macroExpressions.push(children[0] as MacroPushContext);\n macroExpressions.push(...(children[1] as GlobalMacroDeclaration).macroExpressions);\n macroExpressions.push(...(children[2] as GlobalMacroBranch).macroExpressions);\n } else {\n macroExpressions.push(children[0] as MacroPushContext);\n macroExpressions.push(...(children[1] as GlobalMacroBranch).macroExpressions);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.global_macro_branch)\n export class GlobalMacroBranch extends TreeNode {\n macroExpressions: MacroExpression[] = [];\n\n override init(): void {\n this.macroExpressions.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const lastNode = children[children.length - 1];\n\n const macroExpressions = this.macroExpressions;\n macroExpressions.push(children[0] as MacroPopContext | MacroElseExpression | MacroElifExpression);\n\n if (children[1] instanceof GlobalMacroDeclaration) {\n macroExpressions.push(...children[1].macroExpressions);\n }\n\n if (lastNode instanceof GlobalMacroBranch) {\n macroExpressions.push(...lastNode.macroExpressions);\n }\n\n if (children.length > 1 && lastNode instanceof MacroPopContext) {\n macroExpressions.push(lastNode);\n }\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_if_statement)\n export class MacroIfStatement extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_branch)\n export class MacroBranch extends TreeNode {}\n\n @ASTNodeDecorator(NoneTerminal.macro_call_symbol)\n export class MacroCallSymbol extends TreeNode {\n referenceSymbolNames: string[] = [];\n macroName: string;\n\n override init(): void {\n this.referenceSymbolNames.length = 0;\n }\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const children = this.children;\n const macroName = (children[0] as BaseToken).lexeme;\n\n this.macroName = macroName;\n\n Preprocessor.getReferenceSymbolNames(sa.macroDefineList, macroName, this.referenceSymbolNames);\n }\n }\n\n @ASTNodeDecorator(NoneTerminal.macro_call_function)\n export class MacroCallFunction extends TreeNode {\n referenceSymbolNames: string[];\n macroName: string;\n\n override semanticAnalyze(sa: SemanticAnalyzer): void {\n const child = this.children[0] as MacroCallSymbol;\n\n this.referenceSymbolNames = child.referenceSymbolNames;\n this.macroName = child.macroName;\n }\n\n override codeGen(visitor: CodeGenVisitor) {\n return this.setCache(visitor.visitMacroCallFunction(this));\n }\n }\n}\n","export enum MacroParserToken {\n id,\n line_remain,\n chunk,\n int_constant,\n string_const,\n /** \\>> */\n right_op,\n /** << */\n left_op,\n left_paren,\n right_paren,\n /** \\>= */\n ge,\n /** <= */\n le,\n /** == */\n eq,\n /** != */\n neq,\n /** && */\n and,\n /** || */\n or,\n /** < */\n left_angle,\n /** \\> */\n right_angle,\n /** \\* */\n star,\n /** + */\n plus,\n /** \\- */\n dash,\n /** ! */\n bang,\n /** \\/ */\n slash,\n /** % */\n percent,\n\n EOF = 100\n}\n\nexport enum MacroParserKeyword {\n define = 101,\n undef,\n if,\n ifdef,\n ifndef,\n else,\n elif,\n endif,\n\n defined\n}\n\nexport type MacroParserConstant = boolean | number;\n","import { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\n\nexport type StateActionTable = Map<number /** state ID */, ActionTable>;\nexport type ActionTable = Map<Terminal, ActionInfo>;\nexport type StateGotoTable = Map<number /** state ID */, GotoTable>;\nexport type GotoTable = Map<NoneTerminal, number /** state ID */>;\n\nexport enum EAction {\n Shift = 0,\n Reduce,\n Accept\n}\n\nexport interface ActionInfo {\n action: EAction;\n target?: number;\n}\n","import { IPoolElement } from \"@galacean/engine\";\n\nexport class ShaderPosition implements IPoolElement {\n index: number;\n // #if _VERBOSE\n line: number;\n column: number;\n // #endif\n\n set(\n index: number,\n // #if _VERBOSE\n line: number,\n column: number\n // #endif\n ) {\n this.index = index;\n // #if _VERBOSE\n this.line = line;\n this.column = column;\n // #endif\n }\n\n dispose(): void {\n this.index = 0;\n // #if _VERBOSE\n this.line = 0;\n this.column = 0;\n // #endif\n }\n}\n","import { ClearableObjectPool, IPoolElement, Logger } from \"@galacean/engine\";\nimport { GSErrorName } from \"./GSError\";\nimport { ShaderRange } from \"./common/ShaderRange\";\nimport { ShaderPosition } from \"./common/ShaderPosition\";\n// #if _VERBOSE\nimport { GSError } from \"./GSError\";\n// #endif\n\nexport class ShaderLabUtils {\n private static _shaderLabObjectPoolSet: ClearableObjectPool<IPoolElement>[] = [];\n\n static createObjectPool<T extends IPoolElement>(type: new () => T) {\n const pool = new ClearableObjectPool<T>(type);\n ShaderLabUtils._shaderLabObjectPoolSet.push(pool);\n return pool;\n }\n\n static clearAllShaderLabObjectPool() {\n for (let i = 0, n = ShaderLabUtils._shaderLabObjectPoolSet.length; i < n; i++) {\n ShaderLabUtils._shaderLabObjectPoolSet[i].clear();\n }\n }\n\n static createGSError(\n message: string,\n errorName: GSErrorName,\n source: string,\n location: ShaderRange | ShaderPosition,\n file?: string\n ): Error | undefined {\n // #if _VERBOSE\n return new GSError(errorName, message, location, source, file);\n // #else\n Logger.error(message);\n // #endif\n }\n}\n","import { ETokenType } from \"./types\";\nimport { ShaderRange, ShaderPosition } from \".\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { IPoolElement } from \"@galacean/engine\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\nexport class BaseToken<T extends number = number> implements IPoolElement {\n static pool = ShaderLabUtils.createObjectPool(BaseToken);\n\n type: T;\n lexeme: string;\n location: ShaderRange;\n\n set(type: T, lexeme: string, start?: ShaderPosition);\n set(type: T, lexeme: string, location?: ShaderRange);\n set(type: T, lexeme: string, arg?: ShaderRange | ShaderPosition) {\n this.type = type;\n this.lexeme = lexeme;\n if (arg) {\n if (arg instanceof ShaderRange) {\n this.location = arg as ShaderRange;\n } else {\n const end = ShaderLab.createPosition(\n arg.index + lexeme.length,\n // #if _VERBOSE\n arg.line,\n arg.column + lexeme.length\n // #endif\n );\n this.location = ShaderLab.createRange(arg, end);\n }\n }\n }\n\n dispose(): void {}\n}\n\nexport const EOF = new BaseToken();\nEOF.set(ETokenType.EOF, \"/EOF\");\n","import { Logger, ShaderPass } from \"@galacean/engine\";\n/** @ts-ignore */\nimport { ShaderLib } from \"@galacean/engine\";\n\nexport enum MacroValueType {\n Number, // 1, 1.1\n Symbol, // variable name\n FunctionCall, // function call, e.g. clamp(a, 0.0, 1.0)\n Other // shaderLab does not check this\n}\n\nexport interface MacroDefineInfo {\n isFunction: boolean;\n name: string;\n value: string;\n valueType: MacroValueType;\n params: string[];\n functionCallName: string;\n}\n\nexport interface MacroDefineList {\n [macroName: string]: MacroDefineInfo[];\n}\n\nexport class Preprocessor {\n private static readonly _includeReg = /^[ \\t]*#include +\"([\\w\\d./]+)\"/gm;\n private static readonly _macroRegex =\n /^\\s*#define\\s+(\\w+)[ ]*(\\(([^)]*)\\))?[ ]+(\\(?\\w+\\)?.*?)(?:\\/\\/.*|\\/\\*.*?\\*\\/)?\\s*$/gm;\n private static readonly _symbolReg = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n private static readonly _funcCallReg = /^([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\((.*)\\)$/;\n private static readonly _macroDefineIncludeMap = new Map<string, MacroDefineList>();\n\n /**\n * @internal\n */\n static _repeatIncludeSet = new Set<string>();\n\n static parse(\n source: string,\n basePathForIncludeKey: string,\n outMacroDefineList: MacroDefineList,\n parseMacro = true\n ): string {\n if (parseMacro) {\n this._parseMacroDefines(source, outMacroDefineList);\n }\n return source.replace(this._includeReg, (_, includeName) =>\n this._replace(includeName, basePathForIncludeKey, outMacroDefineList)\n );\n }\n\n static getReferenceSymbolNames(macroDefineList: MacroDefineList, macroName: string, out: string[]): void {\n out.length = 0;\n const infos = macroDefineList[macroName];\n if (!infos) return;\n\n for (let i = 0; i < infos.length; i++) {\n const info = infos[i];\n const valueType = info.valueType;\n if (valueType === MacroValueType.FunctionCall || valueType === MacroValueType.Symbol) {\n const referencedName = valueType === MacroValueType.FunctionCall ? info.functionCallName : info.value;\n if (info.params.indexOf(referencedName) !== -1) continue;\n if (out.indexOf(referencedName) === -1) out.push(referencedName);\n } else if (valueType === MacroValueType.Other) {\n // #if _VERBOSE\n Logger.warn(\n `Warning: Macro \"${info.name}\" has an unrecognized value \"${info.value}\". ShaderLab does not validate this type.`\n );\n // #endif\n }\n }\n }\n\n private static _isNumber(str: string): boolean {\n return !isNaN(Number(str));\n }\n\n private static _isExist(list: MacroDefineInfo[], item: MacroDefineInfo): boolean {\n return list.some(\n (e) =>\n e.valueType === item.valueType &&\n e.value === item.value &&\n e.isFunction === item.isFunction &&\n e.functionCallName === item.functionCallName &&\n e.params.length === item.params.length &&\n e.params.every((p, i) => p === item.params[i])\n );\n }\n\n private static _parseMacroDefines(source: string, outMacroList: MacroDefineList): void {\n let match: RegExpExecArray | null;\n this._macroRegex.lastIndex = 0;\n\n while ((match = this._macroRegex.exec(source)) !== null) {\n const [, name, paramsGroup, paramsStr, valueRaw] = match;\n const isFunction = !!paramsGroup && !!valueRaw;\n const params =\n isFunction && paramsStr\n ? paramsStr\n .split(\",\")\n .map((p) => p.trim())\n .filter(Boolean)\n : [];\n const value = valueRaw ? valueRaw.trim() : \"\";\n\n let valueType = MacroValueType.Other;\n let functionCallName = \"\";\n\n if (this._isNumber(value)) {\n valueType = MacroValueType.Number;\n } else if (this._symbolReg.test(value)) {\n valueType = MacroValueType.Symbol;\n } else {\n const callMatch = this._funcCallReg.exec(value);\n if (callMatch) {\n valueType = MacroValueType.FunctionCall;\n functionCallName = callMatch[1];\n }\n }\n\n const info: MacroDefineInfo = {\n isFunction,\n name,\n value,\n valueType,\n params,\n functionCallName\n };\n\n const arr = outMacroList[name];\n if (arr) {\n if (!this._isExist(arr, info)) arr.push(info);\n } else {\n outMacroList[name] = [info];\n }\n }\n }\n\n private static _mergeMacroDefineLists(from: MacroDefineList, to: MacroDefineList): void {\n for (const macroName in from) {\n if (to[macroName]) {\n const target = to[macroName];\n const src = from[macroName];\n for (let i = 0; i < src.length; i++) {\n const info = src[i];\n if (!this._isExist(target, info)) target.push(info);\n }\n } else {\n to[macroName] = from[macroName];\n }\n }\n }\n\n private static _replace(\n includeName: string,\n basePathForIncludeKey: string,\n outMacroDefineList: MacroDefineList\n ): string {\n let path: string;\n if (includeName[0] === \".\") {\n // @ts-ignore\n path = new URL(includeName, basePathForIncludeKey).href.substring(ShaderPass._shaderRootPath.length);\n } else {\n path = includeName;\n }\n\n const chunk = (ShaderLib as any)[path];\n if (!chunk) {\n Logger.error(`Shader slice \"${path}\" not founded.`);\n return \"\";\n }\n\n if (this._repeatIncludeSet.has(path)) {\n Logger.warn(`Shader slice \"${path}\" is included multiple times.`);\n }\n this._repeatIncludeSet.add(path);\n\n if (this._macroDefineIncludeMap.has(path)) {\n this._mergeMacroDefineLists(this._macroDefineIncludeMap.get(path)!, outMacroDefineList);\n } else {\n const chunkMacroDefineList: MacroDefineList = {};\n this._parseMacroDefines(chunk, chunkMacroDefineList);\n this._macroDefineIncludeMap.set(path, chunkMacroDefineList);\n this._mergeMacroDefineLists(chunkMacroDefineList, outMacroDefineList);\n }\n\n return this.parse(chunk, basePathForIncludeKey, outMacroDefineList, false);\n }\n}\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","import { GalaceanDataType, TypeAny } from \"../../common\";\nimport { Keyword } from \"../../common/enums/Keyword\";\nimport { EShaderStage } from \"../../common/enums/ShaderStage\";\n\nexport enum EGenType {\n GenType = 200,\n GenIntType,\n GenUintType,\n GenBoolType,\n Mat,\n BoolVec,\n IntVec,\n UintVec,\n Vec,\n GVec4,\n GSampler2D,\n GSampler3D,\n GSamplerCube,\n GSampler2DArray\n}\n\nexport type NonGenericGalaceanType = Exclude<GalaceanDataType, string>;\ntype BuiltinType = NonGenericGalaceanType | EGenType;\n\nfunction isGenericType(t: BuiltinType) {\n return t >= EGenType.GenType && t <= EGenType.GSampler2DArray;\n}\n\nconst BuiltinFunctionTable: Map<string, BuiltinFunction[]> = new Map();\n\nexport class BuiltinFunction {\n ident: string;\n readonly args: BuiltinType[];\n readonly scope: EShaderStage;\n\n private _returnType: BuiltinType;\n private _realReturnType: NonGenericGalaceanType;\n\n get realReturnType(): NonGenericGalaceanType {\n return this._realReturnType;\n }\n\n private constructor(ident: string, returnType: BuiltinType, scope: EShaderStage, ...args: BuiltinType[]) {\n this.ident = ident;\n this._returnType = returnType;\n this.args = args;\n this.scope = scope;\n }\n\n static getReturnType(fn: BuiltinFunction, genType?: NonGenericGalaceanType) {\n if (!isGenericType(fn._returnType)) return fn._returnType as NonGenericGalaceanType;\n return genType;\n }\n\n static _create(ident: string, returnType: BuiltinType, ...args: BuiltinType[]) {\n const fn = new BuiltinFunction(ident, returnType, EShaderStage.ALL, ...args);\n const list = BuiltinFunctionTable.get(ident) ?? [];\n list.push(fn);\n BuiltinFunctionTable.set(ident, list);\n }\n\n static _createWithScop(ident: string, returnType: BuiltinType, scope: EShaderStage, ...args: BuiltinType[]) {\n const fn = new BuiltinFunction(ident, returnType, scope, ...args);\n const list = BuiltinFunctionTable.get(ident) ?? [];\n list.push(fn);\n BuiltinFunctionTable.set(ident, list);\n }\n\n // TODO: correct the type deduce, consider the following case:\n // It incorrectly inferred the type of the following expression as float, which should be vec3.\n // max(scatterAmt.xyz,0.0001)\n static getFn(ident: string, parameterTypes: NonGenericGalaceanType[]): BuiltinFunction | undefined {\n const list = BuiltinFunctionTable.get(ident);\n if (list) {\n for (let length = list.length, i = 0; i < length; i++) {\n const fn = list[i];\n const fnArgs = fn.args;\n const argLength = fnArgs.length;\n if (argLength !== parameterTypes.length) continue;\n // Try to match generic parameter type.\n let returnType = TypeAny;\n let found = true;\n for (let i = 0; i < argLength; i++) {\n const curFnArg = fnArgs[i];\n if (isGenericType(curFnArg)) {\n if (returnType === TypeAny) returnType = parameterTypes[i];\n } else {\n if (curFnArg !== parameterTypes[i] && parameterTypes[i] !== TypeAny) {\n found = false;\n break;\n }\n }\n }\n if (found) {\n fn._realReturnType = returnType;\n return fn;\n }\n }\n }\n }\n\n static isExist(ident: string) {\n return !!BuiltinFunctionTable.get(ident);\n }\n}\n\nBuiltinFunction._create(\"radians\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"degrees\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"sin\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"cos\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"tan\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"asin\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"acos\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"atan\", EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"atan\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"sinh\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"cosh\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"tanh\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"asinh\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"acosh\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"atanh\", EGenType.GenType, EGenType.GenType);\n\nBuiltinFunction._create(\"pow\", EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"exp\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"log\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"exp2\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"log2\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"sqrt\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"inversesqrt\", EGenType.GenType, EGenType.GenType);\n\nBuiltinFunction._create(\"abs\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"abs\", EGenType.GenIntType, EGenType.GenIntType);\nBuiltinFunction._create(\"sign\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"sign\", EGenType.GenIntType, EGenType.GenIntType);\nBuiltinFunction._create(\"floor\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"trunc\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"round\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"roundEven\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"ceil\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"fract\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"mod\", EGenType.GenType, EGenType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"mod\", EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"min\", EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"min\", EGenType.GenType, EGenType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"min\", EGenType.GenIntType, EGenType.GenIntType, EGenType.GenIntType);\nBuiltinFunction._create(\"min\", EGenType.GenIntType, EGenType.GenIntType, Keyword.INT);\nBuiltinFunction._create(\"min\", EGenType.GenUintType, EGenType.GenUintType, EGenType.GenUintType);\nBuiltinFunction._create(\"min\", EGenType.GenUintType, EGenType.GenUintType, Keyword.UINT);\nBuiltinFunction._create(\"max\", EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"max\", EGenType.GenType, EGenType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"max\", EGenType.GenIntType, EGenType.GenIntType, EGenType.GenIntType);\nBuiltinFunction._create(\"max\", EGenType.GenIntType, EGenType.GenIntType, Keyword.INT);\nBuiltinFunction._create(\"clamp\", EGenType.GenType, EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"clamp\", EGenType.GenType, EGenType.GenType, Keyword.FLOAT, Keyword.FLOAT);\nBuiltinFunction._create(\"clamp\", EGenType.GenIntType, EGenType.GenIntType, EGenType.GenIntType, EGenType.GenIntType);\nBuiltinFunction._create(\"clamp\", EGenType.GenIntType, EGenType.GenIntType, Keyword.INT, Keyword.INT);\nBuiltinFunction._create(\n \"clamp\",\n EGenType.GenUintType,\n EGenType.GenUintType,\n EGenType.GenUintType,\n EGenType.GenUintType\n);\nBuiltinFunction._create(\"clamp\", EGenType.GenUintType, EGenType.GenUintType, Keyword.UINT, Keyword.UINT);\nBuiltinFunction._create(\"mix\", EGenType.GenType, EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"mix\", EGenType.GenType, EGenType.GenType, EGenType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"mix\", EGenType.GenType, EGenType.GenType, EGenType.GenType, EGenType.GenBoolType);\nBuiltinFunction._create(\"step\", EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"step\", EGenType.GenType, Keyword.FLOAT, EGenType.GenType);\nBuiltinFunction._create(\"smoothstep\", EGenType.GenType, EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"smoothstep\", EGenType.GenType, Keyword.FLOAT, Keyword.FLOAT, EGenType.GenType);\nBuiltinFunction._create(\"isnan\", EGenType.GenBoolType, EGenType.GenType);\nBuiltinFunction._create(\"isinf\", EGenType.GenBoolType, EGenType.GenType);\nBuiltinFunction._create(\"floatBitsToInt\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"floatBitsToUint\", EGenType.GenUintType, EGenType.GenType);\nBuiltinFunction._create(\"intBitsToFloat\", EGenType.GenType, EGenType.GenIntType);\nBuiltinFunction._create(\"uintBitsToFloat\", EGenType.GenType, EGenType.GenUintType);\n\nBuiltinFunction._create(\"packSnorm2x16\", Keyword.UINT, Keyword.VEC2);\nBuiltinFunction._create(\"unpackSnorm2x16\", Keyword.VEC2, Keyword.UINT);\nBuiltinFunction._create(\"packUnorm2x16\", Keyword.UINT, Keyword.VEC2);\nBuiltinFunction._create(\"unpackUnorm2x16\", Keyword.VEC2, Keyword.UINT);\nBuiltinFunction._create(\"packHalf2x16\", Keyword.UINT, Keyword.VEC2);\nBuiltinFunction._create(\"unpackHalf2x16\", Keyword.VEC2, Keyword.UINT);\n\nBuiltinFunction._create(\"length\", Keyword.FLOAT, EGenType.GenType);\nBuiltinFunction._create(\"distance\", Keyword.FLOAT, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"dot\", Keyword.FLOAT, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"cross\", Keyword.VEC3, Keyword.VEC3, Keyword.VEC3);\nBuiltinFunction._create(\"normalize\", EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"faceforward\", EGenType.GenType, EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"reflect\", EGenType.GenType, EGenType.GenType, EGenType.GenType);\nBuiltinFunction._create(\"refract\", EGenType.GenType, EGenType.GenType, EGenType.GenType, Keyword.FLOAT);\nBuiltinFunction._create(\"matrixCompMult\", EGenType.Mat, EGenType.Mat, EGenType.Mat);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT2, Keyword.VEC2, Keyword.VEC2);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT3, Keyword.VEC3, Keyword.VEC3);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT4, Keyword.VEC4, Keyword.VEC4);\n\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT2X3, Keyword.VEC3, Keyword.VEC2);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT3X2, Keyword.VEC2, Keyword.VEC3);\n\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT2X4, Keyword.VEC4, Keyword.VEC2);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT4X2, Keyword.VEC2, Keyword.VEC4);\n\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT3X4, Keyword.VEC4, Keyword.VEC3);\nBuiltinFunction._create(\"outerProduct\", Keyword.MAT4X3, Keyword.VEC3, Keyword.VEC4);\n\nBuiltinFunction._create(\"transpose\", Keyword.MAT2, Keyword.MAT2);\nBuiltinFunction._create(\"transpose\", Keyword.MAT3, Keyword.MAT3);\nBuiltinFunction._create(\"transpose\", Keyword.MAT4, Keyword.MAT4);\nBuiltinFunction._create(\"transpose\", Keyword.MAT2X3, Keyword.MAT3X2);\nBuiltinFunction._create(\"transpose\", Keyword.MAT3X2, Keyword.MAT2X3);\nBuiltinFunction._create(\"transpose\", Keyword.MAT4X2, Keyword.MAT2X4);\nBuiltinFunction._create(\"transpose\", Keyword.MAT2X4, Keyword.MAT4X2);\nBuiltinFunction._create(\"transpose\", Keyword.MAT3X4, Keyword.MAT4X3);\nBuiltinFunction._create(\"transpose\", Keyword.MAT4X3, Keyword.MAT3X4);\n\nBuiltinFunction._create(\"determinant\", Keyword.FLOAT, Keyword.MAT2);\nBuiltinFunction._create(\"determinant\", Keyword.FLOAT, Keyword.MAT3);\nBuiltinFunction._create(\"determinant\", Keyword.FLOAT, Keyword.MAT4);\n\nBuiltinFunction._create(\"inverse\", Keyword.MAT2, Keyword.MAT2);\nBuiltinFunction._create(\"inverse\", Keyword.MAT3, Keyword.MAT3);\nBuiltinFunction._create(\"inverse\", Keyword.MAT4, Keyword.MAT4);\n\nBuiltinFunction._create(\"lessThan\", EGenType.BoolVec, EGenType.Vec, EGenType.Vec);\nBuiltinFunction._create(\"lessThan\", EGenType.BoolVec, EGenType.IntVec, EGenType.IntVec);\nBuiltinFunction._create(\"lessThan\", EGenType.BoolVec, EGenType.UintVec, EGenType.UintVec);\n\nBuiltinFunction._create(\"lessThanEqual\", EGenType.BoolVec, EGenType.Vec, EGenType.Vec);\nBuiltinFunction._create(\"lessThanEqual\", EGenType.BoolVec, EGenType.IntVec, EGenType.IntVec);\nBuiltinFunction._create(\"lessThanEqual\", EGenType.BoolVec, EGenType.UintVec, EGenType.UintVec);\n\nBuiltinFunction._create(\"greaterThan\", EGenType.BoolVec, EGenType.Vec, EGenType.Vec);\nBuiltinFunction._create(\"greaterThan\", EGenType.BoolVec, EGenType.IntVec, EGenType.IntVec);\nBuiltinFunction._create(\"greaterThan\", EGenType.BoolVec, EGenType.UintVec, EGenType.UintVec);\n\nBuiltinFunction._create(\"greaterThanEqual\", EGenType.BoolVec, EGenType.Vec, EGenType.Vec);\nBuiltinFunction._create(\"greaterThanEqual\", EGenType.BoolVec, EGenType.IntVec, EGenType.IntVec);\nBuiltinFunction._create(\"greaterThanEqual\", EGenType.BoolVec, EGenType.UintVec, EGenType.UintVec);\n\nBuiltinFunction._create(\"equal\", EGenType.BoolVec, EGenType.Vec, EGenType.Vec);\nBuiltinFunction._create(\"equal\", EGenType.BoolVec, EGenType.IntVec, EGenType.IntVec);\nBuiltinFunction._create(\"equal\", EGenType.BoolVec, EGenType.UintVec, EGenType.UintVec);\nBuiltinFunction._create(\"equal\", EGenType.BoolVec, EGenType.BoolVec, EGenType.BoolVec);\n\nBuiltinFunction._create(\"notEqual\", EGenType.BoolVec, EGenType.Vec, EGenType.Vec);\nBuiltinFunction._create(\"notEqual\", EGenType.BoolVec, EGenType.IntVec, EGenType.IntVec);\nBuiltinFunction._create(\"notEqual\", EGenType.BoolVec, EGenType.UintVec, EGenType.UintVec);\nBuiltinFunction._create(\"notEqual\", EGenType.BoolVec, EGenType.BoolVec, EGenType.BoolVec);\n\nBuiltinFunction._create(\"any\", Keyword.BOOL, EGenType.BoolVec);\nBuiltinFunction._create(\"all\", Keyword.BOOL, EGenType.BoolVec);\nBuiltinFunction._create(\"not\", EGenType.BoolVec, EGenType.BoolVec);\n\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, EGenType.GSampler2D, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC3, EGenType.GSampler3D, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, EGenType.GSamplerCube, Keyword.INT);\n\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, Keyword.SAMPLER2D_SHADOW, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC2, Keyword.SAMPLER_CUBE_SHADOW, Keyword.INT);\n\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC3, EGenType.GSampler2DArray, Keyword.INT);\nBuiltinFunction._create(\"textureSize\", Keyword.IVEC3, Keyword.SAMPLER2D_ARRAY_SHADOW, Keyword.INT);\n\nBuiltinFunction._create(\"texture2D\", Keyword.VEC4, Keyword.SAMPLER2D, Keyword.VEC2);\nBuiltinFunction._create(\"texture2D\", Keyword.VEC4, Keyword.SAMPLER2D, Keyword.VEC2, Keyword.FLOAT);\n\nBuiltinFunction._create(\"texture\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC2);\nBuiltinFunction._create(\"texture\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", EGenType.GVec4, EGenType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", EGenType.GVec4, EGenType.GSamplerCube, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER_CUBE_SHADOW, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER_CUBE_SHADOW, Keyword.VEC4);\n\nBuiltinFunction._create(\"texture\", EGenType.GVec4, Keyword.SAMPLER2D_ARRAY, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture\", EGenType.GVec4, Keyword.SAMPLER2D_ARRAY, Keyword.VEC3);\n\nBuiltinFunction._create(\"texture\", Keyword.FLOAT, Keyword.SAMPLER2D_ARRAY_SHADOW, Keyword.VEC4);\n\nBuiltinFunction._create(\"textureProj\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC3);\nBuiltinFunction._create(\"textureProj\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC4);\nBuiltinFunction._create(\"textureProj\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC4);\n\nBuiltinFunction._create(\"textureProj\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProj\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4);\n\nBuiltinFunction._create(\"textureLod\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", EGenType.GVec4, EGenType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureLod\", EGenType.GVec4, EGenType.GSampler2DArray, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"texture2DLodEXT\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC2, Keyword.FLOAT);\nBuiltinFunction._create(\"texture2DLodEXT\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC3, Keyword.FLOAT);\n\nBuiltinFunction._create(\"textureCube\", Keyword.SAMPLER_CUBE, Keyword.VEC3);\nBuiltinFunction._create(\"textureCube\", Keyword.SAMPLER_CUBE, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureCube\", EGenType.GVec4, EGenType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureCubeLod\", Keyword.SAMPLER_CUBE, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureCubeLodEXT\", EGenType.GVec4, EGenType.GSamplerCube, Keyword.VEC3, Keyword.FLOAT);\n\nBuiltinFunction._create(\n \"textureOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC2,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC2, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureOffset\",\n EGenType.GVec4,\n EGenType.GSampler3D,\n Keyword.VEC3,\n Keyword.IVEC3,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC3, Keyword.IVEC3);\n\nBuiltinFunction._create(\n \"textureOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC3, Keyword.IVEC2);\nBuiltinFunction._create(\n \"textureOffset\",\n EGenType.GVec4,\n EGenType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureOffset\", EGenType.GVec4, EGenType.GSampler2DArray, Keyword.VEC3, Keyword.IVEC2);\n\nBuiltinFunction._create(\"texelFetch\", EGenType.GVec4, EGenType.GSampler2D, Keyword.IVEC2, Keyword.INT);\nBuiltinFunction._create(\"texelFetch\", EGenType.GVec4, EGenType.GSampler3D, Keyword.IVEC3, Keyword.INT);\nBuiltinFunction._create(\"texelFetch\", EGenType.GVec4, EGenType.GSampler2DArray, Keyword.IVEC3, Keyword.INT);\n\nBuiltinFunction._create(\n \"texelFetchOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.IVEC2,\n Keyword.INT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"texelFetchOffset\",\n EGenType.GVec4,\n EGenType.GSampler3D,\n Keyword.IVEC3,\n Keyword.INT,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"texelFetchOffset\",\n EGenType.GVec4,\n EGenType.GSampler2DArray,\n Keyword.IVEC3,\n Keyword.INT,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC3,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC3, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC4,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC4, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n EGenType.GVec4,\n EGenType.GSampler3D,\n Keyword.VEC4,\n Keyword.IVEC3,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC4, Keyword.IVEC3);\n\nBuiltinFunction._create(\n \"textureProjOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.IVEC2,\n Keyword.FLOAT\n);\nBuiltinFunction._create(\"textureProjOffset\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4, Keyword.IVEC2);\n\nBuiltinFunction._create(\n \"textureLodOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC2,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureLodOffset\",\n EGenType.GVec4,\n EGenType.GSampler3D,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC3\n);\n\nBuiltinFunction._create(\n \"textureLodOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureLodOffset\",\n EGenType.GVec4,\n EGenType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\"textureProjLod\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC3, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProjLod\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProjLod\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC4, Keyword.FLOAT);\nBuiltinFunction._create(\"textureProjLod\", Keyword.FLOAT, Keyword.SAMPLER2D_SHADOW, Keyword.VEC4, Keyword.FLOAT);\n\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC3,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC4,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n EGenType.GVec4,\n EGenType.GSampler3D,\n Keyword.VEC4,\n Keyword.FLOAT,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"textureProjLodOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.FLOAT,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\"textureGrad\", EGenType.GVec4, EGenType.GSampler2D, Keyword.VEC2, Keyword.VEC2, Keyword.VEC2);\nBuiltinFunction._create(\"textureGrad\", EGenType.GVec4, EGenType.GSampler3D, Keyword.VEC3, Keyword.VEC3, Keyword.VEC3);\nBuiltinFunction._create(\"textureGrad\", EGenType.GVec4, EGenType.GSamplerCube, Keyword.VEC3, Keyword.VEC3, Keyword.VEC3);\n\nBuiltinFunction._create(\n \"textureGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER_CUBE_SHADOW,\n Keyword.VEC4,\n Keyword.VEC3,\n Keyword.VEC3\n);\n\nBuiltinFunction._create(\n \"textureGrad\",\n EGenType.GVec4,\n EGenType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_ARRAY_SHADOW,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2\n);\n\nBuiltinFunction._create(\n \"textureGradOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n EGenType.GVec4,\n EGenType.GSampler3D,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n EGenType.GVec4,\n EGenType.GSampler2DArray,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureGradOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_ARRAY_SHADOW,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\n\nBuiltinFunction._create(\n \"textureProjGrad\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureProjGrad\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2\n);\nBuiltinFunction._create(\n \"textureProjGrad\",\n EGenType.GVec4,\n EGenType.GSampler3D,\n Keyword.VEC4,\n Keyword.VEC3,\n Keyword.VEC3\n);\nBuiltinFunction._create(\n \"textureProjGrad\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2\n);\n\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC3,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n EGenType.GVec4,\n EGenType.GSampler2D,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n EGenType.GVec4,\n EGenType.GSampler3D,\n Keyword.VEC4,\n Keyword.VEC3,\n Keyword.VEC3,\n Keyword.IVEC3\n);\nBuiltinFunction._create(\n \"textureProjGradOffset\",\n Keyword.FLOAT,\n Keyword.SAMPLER2D_SHADOW,\n Keyword.VEC4,\n Keyword.VEC2,\n Keyword.VEC2,\n Keyword.IVEC2\n);\nBuiltinFunction._createWithScop(\"dFdx\", EGenType.GenType, EShaderStage.FRAGMENT, EGenType.GenType);\nBuiltinFunction._createWithScop(\"dFdy\", EGenType.GenType, EShaderStage.FRAGMENT, EGenType.GenType);\nBuiltinFunction._createWithScop(\"fwidth\", EGenType.GenType, EShaderStage.FRAGMENT, EGenType.GenType);\n","import { GalaceanDataType } from \"../../common\";\nimport { Keyword } from \"../../common/enums/Keyword\";\nimport { EShaderStage } from \"../../common/enums/ShaderStage\";\n\nexport const BuiltinVariableTable: Map<string, BuiltinVariable> = new Map();\n\nexport class BuiltinVariable {\n type: GalaceanDataType;\n lexeme: string;\n scope: EShaderStage;\n\n private constructor(type: GalaceanDataType, lexeme: string, scope: EShaderStage) {\n this.type = type;\n this.lexeme = lexeme;\n this.scope = scope;\n }\n\n static createVariable(lexeme: string, type: GalaceanDataType, scope = EShaderStage.ALL) {\n const item = new BuiltinVariable(type, lexeme, scope);\n BuiltinVariableTable.set(lexeme, item);\n }\n\n static getVar(ident: string): BuiltinVariable {\n return BuiltinVariableTable.get(ident);\n }\n}\n\nBuiltinVariable.createVariable(\"gl_VertexID\", Keyword.INT, EShaderStage.VERTEX);\nBuiltinVariable.createVariable(\"gl_InstanceID\", Keyword.INT, EShaderStage.VERTEX);\nBuiltinVariable.createVariable(\"gl_Position\", Keyword.VEC4, EShaderStage.VERTEX);\nBuiltinVariable.createVariable(\"gl_PointSize\", Keyword.FLOAT, EShaderStage.VERTEX);\n\nBuiltinVariable.createVariable(\"gl_FragCoord\", Keyword.VEC4, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FrontFacing\", Keyword.BOOL, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FragDepth\", Keyword.FLOAT, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_PointCoord\", Keyword.VEC2, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FragColor\", Keyword.VEC4, EShaderStage.FRAGMENT);\nBuiltinVariable.createVariable(\"gl_FragData\", Keyword.VEC4_ARRAY, EShaderStage.FRAGMENT);\n\nBuiltinVariable.createVariable(\"gl_MaxVertexAttribs\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxVertexUniformVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxVertexOutputVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxFragmentInputVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxVertexTextureImageUnits\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxCombinedTextureImageUnits\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxTextureImageUnits\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxFragmentUniformVectors\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxDrawBuffers\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MinProgramTexelOffset\", Keyword.INT);\nBuiltinVariable.createVariable(\"gl_MaxProgramTexelOffset\", Keyword.INT);\n","import { Logger } from \"@galacean/engine\";\nimport { IBaseSymbol } from \"./IBaseSymbol\";\n\nexport class SymbolTable<T extends IBaseSymbol> {\n private _table: Map<string, T[]> = new Map();\n\n insert(symbol: T, isInMacroBranch = false): void {\n symbol.isInMacroBranch = isInMacroBranch;\n\n const entry = this._table.get(symbol.ident) ?? [];\n for (let i = 0, n = entry.length; i < n; i++) {\n if (entry[i].isInMacroBranch) continue;\n if (entry[i].equal(symbol)) {\n Logger.warn(\"Replace symbol:\", symbol.ident);\n entry[i] = symbol;\n return;\n }\n }\n\n entry.push(symbol);\n this._table.set(symbol.ident, entry);\n }\n\n getSymbol(symbol: T, includeMacro = false): T | undefined {\n const entry = this._table.get(symbol.ident);\n if (entry) {\n for (let i = entry.length - 1; i >= 0; i--) {\n const item = entry[i];\n if (!includeMacro && item.isInMacroBranch) continue;\n if (item.equal(symbol)) return item;\n }\n }\n }\n\n getSymbols(symbol: T, includeMacro = false, out: T[]): T[] {\n out.length = 0;\n this._getSymbols(symbol, includeMacro, out);\n\n return out;\n }\n\n /**\n * @internal\n */\n _getSymbols(symbol: T, includeMacro = false, out: T[]): T[] {\n const entry = this._table.get(symbol.ident);\n\n if (entry) {\n for (let i = entry.length - 1; i >= 0; i--) {\n const item = entry[i];\n if (!includeMacro && item.isInMacroBranch) continue;\n if (item.equal(symbol)) out.push(item);\n }\n }\n\n return out;\n }\n}\n","import { IBaseSymbol } from \"./IBaseSymbol\";\nimport { SymbolTable } from \"./SymbolTable\";\n\nexport class SymbolTableStack<S extends IBaseSymbol, T extends SymbolTable<S>> {\n stack: T[] = [];\n\n /**\n * @internal\n */\n _macroLevel = 0;\n\n get scope(): T {\n return this.stack[this.stack.length - 1];\n }\n\n get isInMacroBranch(): boolean {\n return this._macroLevel > 0;\n }\n\n pushScope(scope: T): void {\n this.stack.push(scope);\n }\n\n clear(): void {\n this.stack.length = 0;\n }\n\n popScope(): T | undefined {\n return this.stack.pop();\n }\n\n insert(symbol: S): void {\n this.scope.insert(symbol, this.isInMacroBranch);\n }\n\n lookup(symbol: S, includeMacro = false): S | undefined {\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const symbolTable = this.stack[i];\n const result = symbolTable.getSymbol(symbol, includeMacro);\n if (result) return result;\n }\n return undefined;\n }\n\n lookupAll(symbol: S, includeMacro = false, out: S[]): S[] {\n out.length = 0;\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const symbolTable = this.stack[i];\n symbolTable._getSymbols(symbol, includeMacro, out);\n }\n return out;\n }\n}\n","function _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n\n return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","import { _ as _construct } from \"./_construct.js\";\nimport { _ as _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _ as _is_native_function } from \"./_is_native_function.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n return _set_prototype_of(Wrapper, Class);\n };\n\n return _wrap_native_super(Class);\n}\nexport { _wrap_native_super as _ };\n","function _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","import { GalaceanDataType } from \"../../common\";\nimport { ASTNode } from \"../AST\";\n\nexport class SymbolDataType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class FnSymbol extends SymbolInfo {\n declare astNode: ASTNode.FunctionDefinition;\n\n constructor(lexeme: string, astNode: ASTNode.FunctionDefinition) {\n const type = new SymbolDataType(\n astNode.protoType.returnType.type,\n astNode.protoType.returnType.typeSpecifier.lexeme\n );\n super(lexeme, ESymbolType.FN, astNode, type);\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class StructSymbol extends SymbolInfo {\n declare astNode: ASTNode.StructSpecifier;\n\n constructor(lexeme: string, astNode: ASTNode.StructSpecifier) {\n super(lexeme, ESymbolType.STRUCT, astNode);\n }\n}\n","import { ASTNode } from \"../AST\";\nimport { SymbolDataType } from \"./SymbolDataType\";\nimport { ESymbolType, SymbolInfo } from \"./SymbolInfo\";\n\nexport class VarSymbol extends SymbolInfo {\n declare astNode:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration;\n\n readonly isGlobalVariable: boolean;\n\n constructor(\n ident: string,\n dataType: SymbolDataType,\n isGlobalVariable: boolean,\n initAst:\n | ASTNode.Initializer\n | ASTNode.ParameterDeclarator\n | ASTNode.InitDeclaratorList\n | ASTNode.VariableDeclaration\n ) {\n super(ident, ESymbolType.VAR, initAst, dataType);\n this.isGlobalVariable = isGlobalVariable;\n }\n}\n","import { SymbolInfo, SymbolTable } from \"../parser/symbolTable\";\nimport { ASTNode } from \"./AST\";\n\nexport class ShaderData {\n symbolTable: SymbolTable<SymbolInfo>;\n\n vertexMain: ASTNode.FunctionDefinition;\n fragmentMain: ASTNode.FunctionDefinition;\n\n globalPrecisions: ASTNode.PrecisionSpecifier[] = [];\n\n globalMacroDeclarations: ASTNode.GlobalDeclaration[] = [];\n\n getOuterGlobalMacroDeclarations(): ASTNode.GlobalDeclaration[] {\n return this.globalMacroDeclarations.filter((node) => node.parent instanceof ASTNode.GLShaderProgram);\n }\n}\n","import { ShaderRange } from \"../common\";\nimport { SymbolTable } from \"../common/SymbolTable\";\nimport { SymbolTableStack } from \"../common/SymbolTableStack\";\nimport { GSError, GSErrorName } from \"../GSError\";\nimport { SymbolInfo } from \"../parser/symbolTable\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { ShaderData } from \"./ShaderInfo\";\nimport { NodeChild } from \"./types\";\n\nimport { Logger } from \"@galacean/engine\";\nimport { MacroDefineList } from \"../Preprocessor\";\n\nexport type TranslationRule<T = any> = (sa: SemanticAnalyzer, ...tokens: NodeChild[]) => T;\n\n/**\n * @internal\n * The semantic analyzer of `ShaderLab` compiler.\n * - Build symbol table\n * - Static analysis\n */\nexport default class SemanticAnalyzer {\n /**\n * @internal\n */\n static _lookupSymbol: SymbolInfo = new SymbolInfo(\"\", null);\n\n semanticStack: TreeNode[] = [];\n acceptRule?: TranslationRule = undefined;\n symbolTableStack: SymbolTableStack<SymbolInfo, SymbolTable<SymbolInfo>> = new SymbolTableStack();\n curFunctionInfo: {\n header?: ASTNode.FunctionDeclarator;\n returnStatement?: ASTNode.JumpStatement;\n } = {};\n private _shaderData = new ShaderData();\n private _translationRuleTable: Map<number /** production id */, TranslationRule> = new Map();\n\n private _macroDefineList: MacroDefineList;\n\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n get shaderData() {\n return this._shaderData;\n }\n\n get macroDefineList(): MacroDefineList {\n return this._macroDefineList;\n }\n\n constructor() {\n this.pushScope();\n }\n\n reset(macroDefineList: MacroDefineList) {\n this._macroDefineList = macroDefineList;\n this.semanticStack.length = 0;\n this._shaderData = new ShaderData();\n this.symbolTableStack.clear();\n this.pushScope();\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n }\n\n pushScope() {\n this.symbolTableStack.pushScope(new SymbolTable<SymbolInfo>());\n }\n\n popScope() {\n return this.symbolTableStack.popScope();\n }\n\n addTranslationRule(pid: number, rule: TranslationRule) {\n this._translationRuleTable.set(pid, rule);\n }\n\n getTranslationRule(pid: number) {\n return this._translationRuleTable.get(pid);\n }\n\n reportError(loc: ShaderRange, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderLab._processingPassText));\n // #else\n Logger.error(message);\n // #endif\n }\n\n reportWarning(loc: ShaderRange, message: string): void {\n Logger.warn(new GSError(GSErrorName.CompilationWarn, message, loc, ShaderLab._processingPassText).toString());\n }\n}\n","import { GalaceanDataType } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { NoneTerminal } from \"./GrammarSymbol\";\n\nexport type TraceStackItem = NoneTerminal | BaseToken;\n\nexport class SymbolType {\n constructor(\n public type: GalaceanDataType,\n public typeLexeme: string,\n public arraySpecifier?: ASTNode.ArraySpecifier\n ) {}\n}\n\nexport class StructProp implements IParamInfo {\n constructor(\n public typeInfo: SymbolType,\n public ident: BaseToken,\n public mrtIndex?: number,\n public isInMacroBranch = false\n ) {}\n}\n\nexport type NodeChild = TreeNode | BaseToken;\n\nexport type IParamInfo = {\n ident?: BaseToken;\n typeInfo?: SymbolType;\n astNode?: ASTNode.ParameterDeclaration | ASTNode.MacroParamBlock;\n};\n","import { ETokenType, GalaceanDataType, TypeAny } from \"./common\";\nimport { BaseToken as Token } from \"./common/BaseToken\";\nimport { TreeNode } from \"./parser/AST\";\nimport { GrammarSymbol, NoneTerminal } from \"./parser/GrammarSymbol\";\n// #if _VERBOSE\nimport { Keyword } from \"./common/enums/Keyword\";\nimport State from \"./lalr/State\";\n// #endif\n\nexport class ParserUtils {\n static unwrapNodeByType<T = TreeNode>(node: TreeNode, type: NoneTerminal): T | undefined {\n const child = node.children[0];\n if (child instanceof Token) return;\n if (child.nt === type) return child as T;\n return ParserUtils.unwrapNodeByType(child, type);\n }\n\n // #if _VERBOSE\n /**\n * Check if type `tb` is compatible with type `ta`.\n */\n static typeCompatible(ta: GalaceanDataType, tb: GalaceanDataType | undefined) {\n if (tb == undefined || tb === TypeAny) return true;\n if (ta === Keyword.INT) {\n return ta === tb || tb === Keyword.UINT;\n }\n return ta === tb;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? Keyword[sm];\n }\n return NoneTerminal[sm];\n }\n // #endif\n\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n /**\n * @internal\n */\n // #if _VERBOSE\n static printStatePool(logPath: string) {\n let output = \"\";\n\n console.log(\"========== Parser Pool ==========\");\n\n let count = 0;\n for (const state of State.pool.values()) {\n count++;\n let tmp = \"\";\n tmp += `${state.id}: \\n`.padEnd(4);\n for (const psItem of state.items) {\n tmp += \" \" + psItem.toString() + \"\\n\";\n }\n output += tmp;\n }\n\n console.log(\"state count:\", count);\n console.log(output);\n }\n // #endif\n}\n","import { BaseToken } from \"../common/BaseToken\";\nimport { EShaderStage } from \"../common/enums/ShaderStage\";\nimport { SymbolTable } from \"../common/SymbolTable\";\nimport { GSErrorName } from \"../GSError\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { ESymbolType, SymbolInfo } from \"../parser/symbolTable\";\nimport { StructProp } from \"../parser/types\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\n/** @internal */\nexport class VisitorContext {\n private static _lookupSymbol: SymbolInfo = new SymbolInfo(\"\", null);\n private static _singleton: VisitorContext;\n static get context() {\n return this._singleton;\n }\n\n static reset() {\n if (!this._singleton) {\n this._singleton = new VisitorContext();\n }\n this._singleton.reset();\n }\n\n attributeStructs: ASTNode.StructSpecifier[] = [];\n attributeList: StructProp[] = [];\n varyingStructs: ASTNode.StructSpecifier[] = [];\n varyingList: StructProp[] = [];\n mrtStructs: ASTNode.StructSpecifier[] = [];\n mrtList: StructProp[] = [];\n\n stage: EShaderStage;\n stageEntry: string;\n\n _referencedAttributeList: Record<string, StructProp[]>;\n _referencedVaryingList: Record<string, StructProp[]>;\n _referencedMRTList: Record<string, StructProp[]>;\n _referencedGlobals: Record<string, SymbolInfo[]>;\n _referencedGlobalMacroASTs: TreeNode[] = [];\n\n _passSymbolTable: SymbolTable<SymbolInfo>;\n\n reset(resetAll = true) {\n if (resetAll) {\n this.attributeStructs.length = 0;\n this.attributeList.length = 0;\n this.varyingStructs.length = 0;\n this.varyingList.length = 0;\n this.mrtStructs.length = 0;\n this.mrtList.length = 0;\n }\n\n this._referencedAttributeList = Object.create(null);\n this._referencedVaryingList = Object.create(null);\n this._referencedMRTList = Object.create(null);\n this._referencedGlobals = Object.create(null);\n this._referencedGlobalMacroASTs.length = 0;\n }\n\n isAttributeStruct(type: string) {\n return this.attributeStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isVaryingStruct(type: string) {\n return this.varyingStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n isMRTStruct(type: string) {\n return this.mrtStructs.findIndex((item) => item.ident!.lexeme === type) !== -1;\n }\n\n referenceAttribute(ident: BaseToken): Error | void {\n const lexeme = ident.lexeme;\n if (this._referencedAttributeList[lexeme]) return;\n\n const props = this.attributeList.filter((item) => item.ident.lexeme === lexeme);\n if (!props.length) {\n return ShaderLabUtils.createGSError(\n `referenced attribute not found: ${lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n ident.location\n );\n }\n this._referencedAttributeList[lexeme] = props;\n }\n\n referenceVarying(ident: BaseToken): Error | void {\n const lexeme = ident.lexeme;\n if (this._referencedVaryingList[lexeme]) return;\n\n const props = this.varyingList.filter((item) => item.ident.lexeme === lexeme);\n if (!props.length) {\n return ShaderLabUtils.createGSError(\n `referenced varying not found: ${lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n ident.location\n );\n }\n this._referencedVaryingList[lexeme] = props;\n }\n\n referenceMRTProp(ident: BaseToken): Error | void {\n const lexeme = ident.lexeme;\n if (this._referencedMRTList[lexeme]) return;\n\n const props = this.mrtList.filter((item) => item.ident.lexeme === lexeme);\n if (!props.length) {\n return ShaderLabUtils.createGSError(\n `referenced mrt not found: ${lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n ident.location\n );\n }\n this._referencedMRTList[lexeme] = props;\n }\n\n referenceGlobal(ident: string, type: ESymbolType): void {\n if (this._referencedGlobals[ident]) return;\n\n this._referencedGlobals[ident] = [];\n\n const lookupSymbol = VisitorContext._lookupSymbol;\n lookupSymbol.set(ident, type);\n this._passSymbolTable.getSymbols(lookupSymbol, true, this._referencedGlobals[ident]);\n }\n}\n","import { IPoolElement } from \"@galacean/engine\";\n\nexport class TempArray<T> implements IPoolElement {\n array: Array<T> = new Array();\n\n dispose(): void {\n this.array.length = 0;\n }\n}\n","import { ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { GSErrorName } from \"../GSError\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { NoneTerminal } from \"../parser/GrammarSymbol\";\nimport { ESymbolType, FnSymbol } from \"../parser/symbolTable\";\nimport { NodeChild, StructProp } from \"../parser/types\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { VisitorContext } from \"./VisitorContext\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { Logger, ReturnableObjectPool } from \"@galacean/engine\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { TempArray } from \"../TempArray\";\nimport { ICodeSegment } from \"./types\";\n\n/**\n * @internal\n * The code generator\n */\nexport abstract class CodeGenVisitor {\n // #if _VERBOSE\n readonly errors: Error[] = [];\n // #endif\n\n abstract getAttributeProp(prop: StructProp): string;\n abstract getVaryingProp(prop: StructProp): string;\n abstract getMRTProp(prop: StructProp): string;\n\n protected static _tmpArrayPool = new ReturnableObjectPool(TempArray<string>, 10);\n\n defaultCodeGen(children: NodeChild[]) {\n const pool = CodeGenVisitor._tmpArrayPool;\n let ret = pool.get();\n ret.dispose();\n for (const child of children) {\n if (child instanceof BaseToken) {\n ret.array.push(child.lexeme);\n } else {\n ret.array.push(child.codeGen(this));\n }\n }\n pool.return(ret);\n return ret.array.join(\" \");\n }\n\n visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const children = node.children;\n const derivationLength = children.length;\n const context = VisitorContext.context;\n\n if (derivationLength === 3) {\n const postExpr = children[0] as ASTNode.PostfixExpression;\n const prop = children[2];\n\n if (prop instanceof BaseToken) {\n if (context.isAttributeStruct(<string>postExpr.type)) {\n const error = context.referenceAttribute(prop);\n // #if _VERBOSE\n if (error) {\n this.errors.push(<GSError>error);\n }\n // #endif\n return prop.lexeme;\n } else if (context.isVaryingStruct(<string>postExpr.type)) {\n const error = context.referenceVarying(prop);\n // #if _VERBOSE\n if (error) {\n this.errors.push(<GSError>error);\n }\n // #endif\n return prop.lexeme;\n } else if (context.isMRTStruct(<string>postExpr.type)) {\n const error = context.referenceMRTProp(prop);\n // #if _VERBOSE\n if (error) {\n this.errors.push(<GSError>error);\n }\n // #endif\n return prop.lexeme;\n }\n\n return `${postExpr.codeGen(this)}.${prop.lexeme}`;\n } else {\n return `${postExpr.codeGen(this)}.${prop.codeGen(this)}`;\n }\n } else if (derivationLength === 4) {\n const identNode = children[0] as ASTNode.PostfixExpression;\n const indexNode = children[2] as ASTNode.Expression;\n const identLexeme = identNode.codeGen(this);\n const indexLexeme = indexNode.codeGen(this);\n if (identLexeme === \"gl_FragData\") {\n this._reportError(identNode.location, \"Please use MRT struct instead of gl_FragData.\");\n }\n return `${identLexeme}[${indexLexeme}]`;\n }\n\n return this.defaultCodeGen(node.children);\n }\n\n visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n for (let name of node.referenceGlobalSymbolNames) {\n VisitorContext.context.referenceGlobal(name, ESymbolType.Any);\n }\n\n return node.getLexeme(this);\n }\n\n visitFunctionCall(node: ASTNode.FunctionCall): string {\n const call = node.children[0] as ASTNode.FunctionCallGeneric;\n if (call.fnSymbol instanceof FnSymbol) {\n VisitorContext.context.referenceGlobal(call.fnSymbol.ident, ESymbolType.FN);\n\n const paramList = call.children[2];\n if (paramList instanceof ASTNode.FunctionCallParameterList) {\n const astNodes = paramList.paramNodes;\n const paramInfoList = call.fnSymbol.astNode.protoType.parameterList;\n\n const params = astNodes.filter((_, i) => {\n const typeInfo = paramInfoList?.[i]?.typeInfo;\n return (\n !typeInfo ||\n (!VisitorContext.context.isAttributeStruct(typeInfo.typeLexeme) &&\n !VisitorContext.context.isVaryingStruct(typeInfo.typeLexeme) &&\n !VisitorContext.context.isMRTStruct(typeInfo.typeLexeme))\n );\n });\n\n let paramsCode = \"\";\n\n for (let i = 0, length = params.length; i < length; i++) {\n const astNode = params[i];\n const code = astNode.codeGen(this);\n if (astNode instanceof ASTNode.MacroCallArgBlock || i === 0) {\n paramsCode += code;\n } else {\n paramsCode += `, ${code}`;\n }\n }\n\n return `${call.fnSymbol.ident}(${paramsCode})`;\n }\n }\n\n return this.defaultCodeGen(node.children);\n }\n\n visitMacroCallFunction(node: ASTNode.MacroCallFunction): string {\n const children = node.children;\n const paramList = children[2];\n if (paramList instanceof ASTNode.FunctionCallParameterList) {\n const astNodes = paramList.paramNodes;\n\n const params = astNodes.filter((node) => {\n if (node instanceof ASTNode.AssignmentExpression) {\n const variableParam = ParserUtils.unwrapNodeByType<ASTNode.VariableIdentifier>(\n node,\n NoneTerminal.variable_identifier\n );\n if (\n variableParam &&\n typeof variableParam.typeInfo === \"string\" &&\n (VisitorContext.context.isAttributeStruct(variableParam.typeInfo) ||\n VisitorContext.context.isVaryingStruct(variableParam.typeInfo) ||\n VisitorContext.context.isMRTStruct(variableParam.typeInfo))\n ) {\n return false;\n }\n }\n\n return true;\n });\n\n let paramsCode = \"\";\n for (let i = 0, length = params.length; i < length; i++) {\n const node = params[i];\n const code = node.codeGen(this);\n\n if (node instanceof ASTNode.MacroCallArgBlock || i === 0) {\n paramsCode += code;\n } else {\n paramsCode += `, ${code}`;\n }\n }\n\n return `${node.macroName}(${paramsCode})`;\n } else {\n return this.defaultCodeGen(node.children);\n }\n }\n\n visitStatementList(node: ASTNode.StatementList): string {\n const children = node.children as TreeNode[];\n if (children.length === 1) {\n return children[0].codeGen(this);\n } else {\n return `${children[0].codeGen(this)}\\n${children[1].codeGen(this)}`;\n }\n }\n\n visitSingleDeclaration(node: ASTNode.SingleDeclaration): string {\n const type = node.typeSpecifier.type;\n if (typeof type === \"string\") {\n VisitorContext.context.referenceGlobal(type, ESymbolType.STRUCT);\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitGlobalVariableDeclaration(node: ASTNode.VariableDeclaration): string {\n const children = node.children;\n const fullType = children[0];\n if (fullType instanceof ASTNode.FullySpecifiedType && fullType.typeSpecifier.isCustom) {\n VisitorContext.context.referenceGlobal(<string>fullType.type, ESymbolType.STRUCT);\n }\n return `uniform ${this.defaultCodeGen(children)}`;\n }\n\n visitDeclaration(node: ASTNode.Declaration): string {\n const { context } = VisitorContext;\n const children = node.children;\n const child = children[0];\n\n if (child instanceof ASTNode.InitDeclaratorList) {\n const typeLexeme = child.typeInfo.typeLexeme;\n if (context.isVaryingStruct(typeLexeme) || context.isMRTStruct(typeLexeme)) return \"\";\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionParameterList(node: ASTNode.FunctionParameterList): string {\n const params = node.parameterInfoList.filter(\n (item) =>\n !item.typeInfo ||\n (!VisitorContext.context.isAttributeStruct(item.typeInfo.typeLexeme) &&\n !VisitorContext.context.isVaryingStruct(item.typeInfo.typeLexeme) &&\n !VisitorContext.context.isMRTStruct(item.typeInfo.typeLexeme))\n );\n\n let out = \"\";\n for (let i = 0, length = params.length; i < length; i++) {\n const item = params[i];\n const astNode = item.astNode;\n const code = astNode.codeGen(this);\n if (astNode instanceof ASTNode.MacroParamBlock || i === 0) {\n out += code;\n } else {\n out += `, ${code}`;\n }\n }\n\n return out;\n }\n\n visitFunctionHeader(node: ASTNode.FunctionHeader): string {\n const returnType = node.returnType.typeSpecifier.lexeme;\n if (VisitorContext.context.isVaryingStruct(returnType)) {\n return `void ${node.ident.lexeme}(`;\n }\n return this.defaultCodeGen(node.children);\n }\n\n visitJumpStatement(node: ASTNode.JumpStatement): string {\n const children = node.children;\n const cmd = children[0] as BaseToken;\n if (cmd.type === Keyword.RETURN) {\n const expr = children[1];\n if (expr instanceof ASTNode.Expression) {\n const returnVar = ParserUtils.unwrapNodeByType<ASTNode.VariableIdentifier>(\n expr,\n NoneTerminal.variable_identifier\n );\n if (VisitorContext.context.isVaryingStruct(<string>returnVar?.typeInfo)) {\n return \"\";\n }\n const returnFnCall = ParserUtils.unwrapNodeByType<ASTNode.FunctionCall>(expr, NoneTerminal.function_call);\n if (VisitorContext.context.isVaryingStruct(<string>returnFnCall?.type)) {\n return `${expr.codeGen(this)};`;\n }\n }\n }\n return this.defaultCodeGen(children);\n }\n\n visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n return this.defaultCodeGen(node.children);\n }\n\n visitStructSpecifier(node: ASTNode.StructSpecifier): string {\n const context = VisitorContext.context;\n const { varyingStructs, attributeStructs, mrtStructs } = context;\n const isVaryingStruct = varyingStructs.indexOf(node) !== -1;\n const isAttributeStruct = attributeStructs.indexOf(node) !== -1;\n const isMRTStruct = mrtStructs.indexOf(node) !== -1;\n\n if (isVaryingStruct && isAttributeStruct) {\n this._reportError(node.location, \"cannot use same struct as Varying and Attribute\");\n }\n\n if (isVaryingStruct && isMRTStruct) {\n this._reportError(node.location, \"cannot use same struct as Varying and MRT\");\n }\n\n if (isAttributeStruct && isMRTStruct) {\n this._reportError(node.location, \"cannot use same struct as Attribute and MRT\");\n }\n\n if (isVaryingStruct || isAttributeStruct || isMRTStruct) {\n let result: ICodeSegment[] = [];\n\n result.push(\n ...node.macroExpressions.map((item) => ({\n text: item instanceof BaseToken ? item.lexeme : item.codeGen(this),\n index: item.location.start.index\n }))\n );\n\n for (const prop of node.propList) {\n const name = prop.ident.lexeme;\n if (isVaryingStruct && context._referencedVaryingList[name]?.indexOf(prop) >= 0) {\n result.push({\n text: `${this.getVaryingProp(prop)}\\n`,\n index: prop.ident.location.start.index\n });\n } else if (isAttributeStruct && context._referencedAttributeList[name]?.indexOf(prop) >= 0) {\n result.push({\n text: `${this.getAttributeProp(prop)}\\n`,\n index: prop.ident.location.start.index\n });\n } else if (isMRTStruct && context._referencedMRTList[name]?.indexOf(prop) >= 0) {\n result.push({\n text: `${this.getMRTProp(prop)}\\n`,\n index: prop.ident.location.start.index\n });\n }\n }\n\n const text = result\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\");\n\n return text;\n } else {\n return this.defaultCodeGen(node.children);\n }\n }\n\n visitFunctionDefinition(fnNode: ASTNode.FunctionDefinition): string {\n const fnName = fnNode.protoType.ident.lexeme;\n const context = VisitorContext.context;\n\n if (fnName == context.stageEntry) {\n const statements = fnNode.statements.codeGen(this);\n return `void main() ${statements}`;\n } else {\n return this.defaultCodeGen(fnNode.children);\n }\n }\n\n protected _reportError(loc: ShaderRange | ShaderPosition, message: string): void {\n // #if _VERBOSE\n this.errors.push(new GSError(GSErrorName.CompilationError, message, loc, ShaderLab._processingPassText));\n // #else\n Logger.error(message);\n // #endif\n }\n}\n","import { IShaderInfo } from \"@galacean/engine-design\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { EShaderStage } from \"../common/enums/ShaderStage\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { ShaderData } from \"../parser/ShaderInfo\";\nimport { ESymbolType, FnSymbol, StructSymbol, SymbolInfo } from \"../parser/symbolTable\";\nimport { CodeGenVisitor } from \"./CodeGenVisitor\";\nimport { ICodeSegment } from \"./types\";\nimport { VisitorContext } from \"./VisitorContext\";\n\n/**\n * @internal\n */\nexport abstract class GLESVisitor extends CodeGenVisitor {\n private _globalCodeArray: ICodeSegment[] = [];\n private static _lookupSymbol: SymbolInfo = new SymbolInfo(\"\", null);\n private static _serializedGlobalKey = new Set();\n\n reset(): void {\n const { _globalCodeArray: globalCodeArray } = this;\n globalCodeArray.length = 0;\n GLESVisitor._serializedGlobalKey.clear();\n }\n\n getOtherGlobal(data: ShaderData, out: ICodeSegment[]): void {\n for (const precision of data.globalPrecisions) {\n out.push({ text: precision.codeGen(this), index: precision.location.start.index });\n }\n }\n\n visitShaderProgram(node: ASTNode.GLShaderProgram, vertexEntry: string, fragmentEntry: string): IShaderInfo {\n // #if _VERBOSE\n this.errors.length = 0;\n // #endif\n VisitorContext.reset();\n this.reset();\n\n const shaderData = node.shaderData;\n VisitorContext.context._passSymbolTable = shaderData.symbolTable;\n\n const outerGlobalMacroDeclarations = shaderData.getOuterGlobalMacroDeclarations();\n\n return {\n vertex: this._vertexMain(vertexEntry, shaderData, outerGlobalMacroDeclarations),\n fragment: this._fragmentMain(fragmentEntry, shaderData, outerGlobalMacroDeclarations)\n };\n }\n\n private _vertexMain(\n entry: string,\n data: ShaderData,\n outerGlobalMacroDeclarations: ASTNode.GlobalDeclaration[]\n ): string {\n const context = VisitorContext.context;\n context.stage = EShaderStage.VERTEX;\n context.stageEntry = entry;\n\n const lookupSymbol = GLESVisitor._lookupSymbol;\n const symbolTable = data.symbolTable;\n lookupSymbol.set(entry, ESymbolType.FN);\n const fnSymbols = <FnSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!fnSymbols.length) throw `no entry function found: ${entry}`;\n\n const { attributeStructs, attributeList, varyingStructs, varyingList } = context;\n fnSymbols.forEach((fnSymbol) => {\n const fnNode = fnSymbol.astNode;\n const returnType = fnNode.protoType.returnType;\n\n if (typeof returnType.type === \"string\") {\n lookupSymbol.set(returnType.type, ESymbolType.STRUCT);\n const varyingSymbols = <StructSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!varyingSymbols.length) {\n this._reportError(returnType.location, `invalid varying struct: \"${returnType.type}\".`);\n } else {\n for (let i = 0; i < varyingSymbols.length; i++) {\n const varyingSymbol = varyingSymbols[i];\n const astNode = varyingSymbol.astNode;\n varyingStructs.push(astNode);\n for (const prop of astNode.propList) {\n varyingList.push(prop);\n }\n }\n }\n } else if (returnType.type !== Keyword.VOID) {\n this._reportError(returnType.location, \"vertex main entry can only return struct or void.\");\n }\n\n const paramList = fnNode.protoType.parameterList;\n const attributeParam = paramList?.[0];\n if (attributeParam) {\n const attributeType = attributeParam.typeInfo.type;\n if (typeof attributeType === \"string\") {\n lookupSymbol.set(attributeType, ESymbolType.STRUCT);\n const attributeSymbols = <StructSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!attributeSymbols.length) {\n this._reportError(attributeParam.astNode.location, `invalid attribute struct: \"${attributeType}\".`);\n } else {\n for (let i = 0; i < attributeSymbols.length; i++) {\n const attributeSymbol = attributeSymbols[i];\n const astNode = attributeSymbol.astNode;\n attributeStructs.push(astNode);\n for (const prop of astNode.propList) {\n attributeList.push(prop);\n }\n }\n }\n }\n }\n });\n\n const globalCodeArray = this._globalCodeArray;\n VisitorContext.context.referenceGlobal(entry, ESymbolType.FN);\n\n this._getGlobalSymbol(globalCodeArray);\n this._getCustomStruct(context.attributeStructs, globalCodeArray);\n this._getCustomStruct(context.varyingStructs, globalCodeArray);\n this._getGlobalMacroDeclarations(outerGlobalMacroDeclarations, globalCodeArray);\n this.getOtherGlobal(data, globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n VisitorContext.context.reset(false);\n this.reset();\n\n return globalCode;\n }\n\n private _fragmentMain(\n entry: string,\n data: ShaderData,\n outerGlobalMacroStatements: ASTNode.GlobalDeclaration[]\n ): string {\n const context = VisitorContext.context;\n context.stage = EShaderStage.FRAGMENT;\n context.stageEntry = entry;\n\n const lookupSymbol = GLESVisitor._lookupSymbol;\n const { symbolTable } = data;\n lookupSymbol.set(entry, ESymbolType.FN);\n const fnSymbols = <FnSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!fnSymbols?.length) throw `no entry function found: ${entry}`;\n\n fnSymbols.forEach((fnSymbol) => {\n const fnNode = fnSymbol.astNode;\n const { returnStatement } = fnNode;\n\n if (returnStatement) {\n returnStatement.isFragReturnStatement = true;\n }\n\n const { type: returnDataType, location: returnLocation } = fnNode.protoType.returnType;\n if (typeof returnDataType === \"string\") {\n lookupSymbol.set(returnDataType, ESymbolType.STRUCT);\n const mrtSymbols = <StructSymbol[]>symbolTable.getSymbols(lookupSymbol, true, []);\n if (!mrtSymbols.length) {\n this._reportError(returnLocation, `invalid mrt struct: ${returnDataType}`);\n } else {\n for (let i = 0; i < mrtSymbols.length; i++) {\n const mrtSymbol = mrtSymbols[i];\n const astNode = mrtSymbol.astNode;\n context.mrtStructs.push(astNode);\n for (const prop of astNode.propList) {\n context.mrtList.push(prop);\n }\n }\n }\n } else if (returnDataType !== Keyword.VOID && returnDataType !== Keyword.VEC4) {\n this._reportError(returnLocation, \"fragment main entry can only return struct or vec4.\");\n }\n });\n\n const globalCodeArray = this._globalCodeArray;\n VisitorContext.context.referenceGlobal(entry, ESymbolType.FN);\n\n this._getGlobalSymbol(globalCodeArray);\n this._getCustomStruct(context.varyingStructs, globalCodeArray);\n this._getCustomStruct(context.mrtStructs, globalCodeArray);\n this._getGlobalMacroDeclarations(outerGlobalMacroStatements, globalCodeArray);\n this.getOtherGlobal(data, globalCodeArray);\n\n const globalCode = globalCodeArray\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n\n context.reset();\n this.reset();\n\n return globalCode;\n }\n\n private _getGlobalSymbol(out: ICodeSegment[]): void {\n const { _referencedGlobals } = VisitorContext.context;\n\n const lastLength = Object.keys(_referencedGlobals).length;\n if (lastLength === 0) return;\n\n for (const ident in _referencedGlobals) {\n if (GLESVisitor._serializedGlobalKey.has(ident)) continue;\n GLESVisitor._serializedGlobalKey.add(ident);\n\n const symbols = _referencedGlobals[ident];\n for (let i = 0; i < symbols.length; i++) {\n const sm = symbols[i];\n const text = sm.astNode.codeGen(this) + (sm.type === ESymbolType.VAR ? \";\" : \"\");\n if (!sm.isInMacroBranch) {\n out.push({\n text,\n index: sm.astNode.location.start.index\n });\n }\n }\n }\n\n if (Object.keys(_referencedGlobals).length !== lastLength) {\n this._getGlobalSymbol(out);\n }\n }\n\n private _getCustomStruct(structNodes: ASTNode.StructSpecifier[], out: ICodeSegment[]): void {\n for (const node of structNodes) {\n const text = node.codeGen(this);\n\n if (!node.isInMacroBranch) {\n out.push({ text, index: node.location.start.index });\n }\n }\n }\n\n private _getGlobalMacroDeclarations(macros: ASTNode.GlobalDeclaration[], out: ICodeSegment[]): void {\n const context = VisitorContext.context;\n const referencedGlobals = context._referencedGlobals;\n const referencedGlobalMacroASTs = context._referencedGlobalMacroASTs;\n referencedGlobalMacroASTs.length = 0;\n\n for (const symbols of Object.values(referencedGlobals)) {\n for (const symbol of symbols) {\n if (symbol.isInMacroBranch) {\n referencedGlobalMacroASTs.push(symbol.astNode);\n }\n }\n }\n\n for (const macro of macros) {\n let text: string;\n const child = macro.children[0];\n\n if (child instanceof ASTNode.GlobalMacroIfStatement) {\n let result: ICodeSegment[] = [];\n result.push(\n ...macro.macroExpressions.map((item) => ({\n text: item instanceof BaseToken ? item.lexeme : item.codeGen(this),\n index: item.location.start.index\n }))\n );\n\n this._visitGlobalMacroIfStatement(child, result);\n\n text = result\n .sort((a, b) => a.index - b.index)\n .map((item) => item.text)\n .join(\"\\n\");\n } else {\n text = macro.codeGen(this);\n }\n\n out.push({\n text,\n index: macro.location.start.index\n });\n }\n }\n\n private _visitGlobalMacroIfStatement(node: TreeNode, out: ICodeSegment[]): void {\n const children = node.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child instanceof ASTNode.PrecisionSpecifier) {\n out.push({\n text: child.codeGen(this),\n index: child.location.start.index\n });\n } else if (child instanceof ASTNode.FunctionDefinition) {\n if (VisitorContext.context._referencedGlobalMacroASTs.indexOf(child) !== -1) {\n out.push({\n text: child.getCache(), // code has generated in `_getGlobalSymbol`\n index: child.location.start.index\n });\n }\n } else if (child instanceof ASTNode.StructSpecifier) {\n const context = VisitorContext.context;\n const stage = context.stage;\n if (\n VisitorContext.context._referencedGlobalMacroASTs.indexOf(child) !== -1 ||\n (stage === EShaderStage.VERTEX\n ? context.isAttributeStruct(child.ident?.lexeme) || context.isVaryingStruct(child.ident?.lexeme)\n : context.isVaryingStruct(child.ident?.lexeme) || context.isMRTStruct(child.ident?.lexeme))\n ) {\n out.push({\n text: child.getCache(), // code has generated in `_getGlobalSymbol` or `_getCustomStruct`\n index: child.location.start.index\n });\n }\n } else if (child instanceof ASTNode.VariableDeclarationList) {\n const variableDeclarations = child.variableDeclarations;\n for (let i = 0; i < variableDeclarations.length; i++) {\n const variableDeclaration = variableDeclarations[i];\n if (VisitorContext.context._referencedGlobalMacroASTs.indexOf(variableDeclaration) !== -1) {\n out.push({\n text: variableDeclaration.getCache() + \";\", // code has generated in `_getGlobalSymbol`\n index: variableDeclaration.location.start.index\n });\n }\n }\n }\n\n if (child instanceof TreeNode) {\n this._visitGlobalMacroIfStatement(child, out);\n }\n }\n }\n}\n","import { BaseToken } from \"../common/BaseToken\";\nimport { ASTNode } from \"../parser/AST\";\nimport { StructProp } from \"../parser/types\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { VisitorContext } from \"./VisitorContext\";\n\nexport class GLES100Visitor extends GLESVisitor {\n private static _singleton: GLES100Visitor;\n static getVisitor(): GLES100Visitor {\n if (!this._singleton) {\n this._singleton = new GLES100Visitor();\n }\n return this._singleton;\n }\n\n override getAttributeProp(prop: StructProp): string {\n return `attribute ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getVaryingProp(prop: StructProp): string {\n return `varying ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getMRTProp(): string {\n return null;\n }\n\n override visitPostfixExpression(node: ASTNode.PostfixExpression): string {\n const { children } = node;\n const postExpr = children[0];\n const { context } = VisitorContext;\n if (postExpr instanceof ASTNode.PostfixExpression && context.isMRTStruct(<string>postExpr.type)) {\n const propReferenced = children[2] as BaseToken;\n const prop = context.mrtList.find((item) => item.ident.lexeme === propReferenced.lexeme);\n if (!prop) {\n this._reportError(propReferenced.location, `not found mrt property: ${propReferenced.lexeme}`);\n return \"\";\n }\n return `gl_FragData[${prop.mrtIndex!}]`;\n }\n return super.visitPostfixExpression(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n if (VisitorContext.context.mrtStructs.length) {\n return \"\";\n }\n const expression = node.children[1] as ASTNode.Expression;\n return `gl_FragColor = ${expression.codeGen(this)}`;\n }\n return super.visitJumpStatement(node);\n }\n}\n","import { EShaderStage } from \"../common/enums/ShaderStage\";\nimport { ASTNode } from \"../parser/AST\";\nimport { ShaderData } from \"../parser/ShaderInfo\";\nimport { StructProp } from \"../parser/types\";\nimport { GLESVisitor } from \"./GLESVisitor\";\nimport { ICodeSegment } from \"./types\";\nimport { VisitorContext } from \"./VisitorContext\";\n\nconst V3_GL_FragColor = \"GS_glFragColor\";\n\nexport class GLES300Visitor extends GLESVisitor {\n private static _singleton: GLES300Visitor;\n static getVisitor(): GLES300Visitor {\n if (!this._singleton) {\n this._singleton = new GLES300Visitor();\n }\n return this._singleton;\n }\n\n private _otherCodeArray: ICodeSegment[] = [];\n private _fragColorVariableRegistered = false;\n\n override reset(): void {\n super.reset();\n\n this._otherCodeArray.length = 0;\n this._fragColorVariableRegistered = false;\n }\n\n override getOtherGlobal(data: ShaderData, out: ICodeSegment[]): void {\n super.getOtherGlobal(data, out);\n\n for (let i = 0, n = this._otherCodeArray.length; i < n; i++) {\n out.push(this._otherCodeArray[i]);\n }\n }\n\n override getAttributeProp(prop: StructProp): string {\n return `in ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getVaryingProp(prop: StructProp): string {\n const qualifier = VisitorContext.context.stage === EShaderStage.FRAGMENT ? \"in\" : \"out\";\n return `${qualifier} ${prop.typeInfo.typeLexeme} ${prop.ident.lexeme};`;\n }\n\n override getMRTProp(prop: StructProp): string {\n return `layout(location = ${prop.mrtIndex}) out vec4 ${prop.ident.lexeme};`;\n }\n\n override visitFunctionIdentifier(node: ASTNode.FunctionIdentifier): string {\n const children = node.children;\n const typeSpecifier = children[0] as ASTNode.TypeSpecifier;\n if (typeSpecifier.children.length !== 1) {\n return this.defaultCodeGen(children);\n }\n let ident = node.lexeme;\n switch (node.ident) {\n case \"texture2D\":\n case \"textureCube\":\n ident = \"texture\";\n break;\n case \"texture2DProj\":\n ident = \"textureProj\";\n break;\n case \"texture2DLodEXT\":\n case \"textureCubeLodEXT\":\n ident = \"textureLod\";\n break;\n case \"texture2DGradEXT\":\n case \"textureCubeGradEXT\":\n ident = \"textureGrad\";\n break;\n case \"texture2DProjLodEXT\":\n ident = \"textureProjLod\";\n break;\n case \"texture2DProjGradEXT\":\n ident = \"textureProjGrad\";\n break;\n case \"gl_FragDepthEXT\":\n ident = \"gl_FragDepth\";\n break;\n }\n return ident;\n }\n\n override visitVariableIdentifier(node: ASTNode.VariableIdentifier): string {\n const { context } = VisitorContext;\n if (context.stage === EShaderStage.FRAGMENT && node.getLexeme(this) === \"gl_FragColor\") {\n if (context.mrtStructs.length) {\n this._reportError(node.location, \"gl_FragColor cannot be used with MRT (Multiple Render Targets).\");\n return;\n }\n this._registerFragColorVariable();\n return V3_GL_FragColor;\n }\n return super.visitVariableIdentifier(node);\n }\n\n override visitJumpStatement(node: ASTNode.JumpStatement): string {\n if (node.isFragReturnStatement) {\n if (VisitorContext.context.mrtStructs.length) {\n return \"\";\n }\n this._registerFragColorVariable();\n\n const expression = node.children[1] as ASTNode.Expression;\n return `${V3_GL_FragColor} = ${expression.codeGen(this)};`;\n }\n return super.visitJumpStatement(node);\n }\n\n private _registerFragColorVariable() {\n if (this._fragColorVariableRegistered) return;\n this._otherCodeArray.push({\n text: `out vec4 ${V3_GL_FragColor};`,\n index: 0\n });\n this._fragColorVariableRegistered = true;\n }\n}\n","import { Logger } from \"@galacean/engine\";\nimport { ShaderPosition, ShaderRange } from \".\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { BaseToken } from \"./BaseToken\";\n\nexport type OnToken = (token: BaseToken, scanner: BaseLexer) => void;\n\n/**\n * @internal\n */\nexport abstract class BaseLexer {\n static isDigit(charCode: number): boolean {\n return charCode >= 48 && charCode <= 57; // 0-9\n }\n\n // Check if character is alphabetic or underscore (valid word start)\n static isAlpha(charCode: number): boolean {\n return (\n charCode === 95 || // _\n (charCode >= 65 && charCode <= 90) || // A-Z\n (charCode >= 97 && charCode <= 122) // a-z\n );\n }\n\n // Check if character is alphanumeric (alpha + digit)\n static isAlnum(charCode: number): boolean {\n return BaseLexer.isAlpha(charCode) || BaseLexer.isDigit(charCode);\n }\n\n static isPreprocessorStartChar(charCode: number): boolean {\n return charCode === 35; // #\n }\n\n static isWhiteSpaceChar(charCode: number, includeBreak: boolean): boolean {\n // Space || Tab\n if (charCode === 32 || charCode === 9) {\n return true;\n }\n return includeBreak && (charCode === 10 || charCode === 13); // \\n || \\r\n }\n\n protected _currentIndex = 0;\n protected _source: string;\n\n // #if _VERBOSE\n protected _column = 0;\n protected _line = 0;\n // #endif\n\n get currentIndex(): number {\n return this._currentIndex;\n }\n\n get source(): string {\n return this._source;\n }\n\n // #if _VERBOSE\n get line() {\n return this._line;\n }\n\n get column() {\n return this._column;\n }\n // #endif\n\n constructor(source?: string) {\n this._source = source;\n }\n\n setSource(source: string): void {\n this._source = source;\n this._currentIndex = 0;\n // #if _VERBOSE\n this._line = this._column = 0;\n // #endif\n }\n\n getShaderPosition(backOffset = 0): ShaderPosition {\n return ShaderLab.createPosition(\n this._currentIndex - backOffset,\n // #if _VERBOSE\n this._line,\n this._column - backOffset\n // #endif\n );\n }\n\n isEnd(): boolean {\n return this._currentIndex >= this._source.length;\n }\n\n getCurChar(): string {\n return this._source[this._currentIndex];\n }\n\n getCurCharCode(): number {\n return this._source.charCodeAt(this._currentIndex);\n }\n\n advance(count: number): void {\n // #if _VERBOSE\n const source = this._source;\n const startIndex = this._currentIndex;\n for (let i = 0; i < count; i++) {\n if (source[startIndex + i] === \"\\n\") {\n this._line += 1;\n this._column = 0;\n } else {\n this._column += 1;\n }\n }\n // #endif\n this._currentIndex += count;\n }\n\n skipSpace(includeLineBreak: boolean): void {\n while (BaseLexer.isWhiteSpaceChar(this.getCurCharCode(), includeLineBreak)) {\n this.advance(1);\n }\n }\n\n skipCommentsAndSpace(): void {\n const source = this._source;\n const length = source.length;\n let index = this._currentIndex;\n\n while (index < length) {\n // Skip whitespace\n while (index < length && BaseLexer.isWhiteSpaceChar(source.charCodeAt(index), true)) {\n index++;\n }\n\n // Check for comments: 47 is '/'\n if (index + 1 >= length || source.charCodeAt(index) !== 47) break;\n\n const nextChar = source.charCodeAt(index + 1);\n if (nextChar === 47) {\n // Single line comment: 10 is '\\n', 13 is '\\r'\n index += 2;\n while (index < length) {\n const charCode = source.charCodeAt(index);\n if (charCode === 10 || charCode === 13) break;\n index++;\n }\n } else if (nextChar === 42) {\n // Multi-line comment: 42 is '*'\n index += 2;\n while (index + 1 < length && !(source.charCodeAt(index) === 42 && source.charCodeAt(index + 1) === 47)) {\n index++;\n }\n index += 2; // Skip '*/'\n } else {\n break; // Not a comment, stop\n }\n }\n\n this.advance(index - this._currentIndex);\n }\n\n peek(to: number): string {\n const offset = this._currentIndex;\n return this._source.substring(offset, offset + to);\n }\n\n scanLexeme(lexeme: string): void {\n this.skipCommentsAndSpace();\n const length = lexeme.length;\n const peek = this.peek(length);\n if (peek !== lexeme) {\n this.throwError(this.getShaderPosition(0), `Expect lexeme \"${lexeme}\", but got \"${peek}\"`);\n }\n this.advance(length);\n }\n\n scanTwoExpectedLexemes(lexeme1: string, lexeme2: string): string | null {\n this.skipCommentsAndSpace();\n\n // Check first lexeme\n if (this.peek(lexeme1.length) === lexeme1) {\n this.advance(lexeme1.length);\n return lexeme1;\n }\n\n // Check second lexeme\n if (this.peek(lexeme2.length) === lexeme2) {\n this.advance(lexeme2.length);\n return lexeme2;\n }\n\n return null;\n }\n\n throwError(pos: ShaderPosition | ShaderRange, ...msgs: any[]) {\n const error = ShaderLabUtils.createGSError(msgs.join(\" \"), GSErrorName.ScannerError, this._source, pos);\n // #if _VERBOSE\n Logger.error(error!.toString());\n // #endif\n throw error;\n }\n\n scanPairedChar(left: string, right: string, balanced: boolean, skipLeading: boolean): string {\n if (!skipLeading) {\n this.scanLexeme(left);\n }\n\n const start = this._currentIndex;\n const source = this._source;\n const sourceLength = source.length;\n\n let currentIndex = this._currentIndex;\n if (balanced) {\n let level = 1;\n while (currentIndex < sourceLength) {\n const currentChar = source[currentIndex];\n if (currentChar === right && --level === 0) {\n break;\n } else if (currentChar === left) {\n level++;\n }\n currentIndex++;\n }\n } else {\n while (currentIndex < sourceLength) {\n if (source[currentIndex] === right) {\n break;\n }\n currentIndex++;\n }\n }\n\n this.advance(currentIndex + 1 - this._currentIndex);\n\n return source.substring(start, currentIndex);\n }\n\n abstract scanToken(onToken?: OnToken): void;\n}\n","import { ETokenType } from \"../common\";\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { BaseToken, EOF } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { MacroDefineList } from \"../Preprocessor\";\nimport { ShaderLab } from \"../ShaderLab\";\n\n/**\n * The Lexer of ShaderLab Compiler\n */\nexport class Lexer extends BaseLexer {\n private static _lexemeTable = <Record<string, Keyword>>{\n const: Keyword.CONST,\n bool: Keyword.BOOL,\n float: Keyword.FLOAT,\n double: Keyword.DOUBLE,\n int: Keyword.INT,\n uint: Keyword.UINT,\n break: Keyword.BREAK,\n continue: Keyword.CONTINUE,\n do: Keyword.DO,\n else: Keyword.ELSE,\n for: Keyword.FOR,\n if: Keyword.IF,\n while: Keyword.WHILE,\n discard: Keyword.DISCARD,\n return: Keyword.RETURN,\n bvec2: Keyword.BVEC2,\n bvec3: Keyword.BVEC3,\n bvec4: Keyword.BVEC4,\n ivec2: Keyword.IVEC2,\n ivec3: Keyword.IVEC3,\n ivec4: Keyword.IVEC4,\n uvec2: Keyword.UVEC2,\n uvec3: Keyword.UVEC3,\n uvec4: Keyword.UVEC4,\n vec2: Keyword.VEC2,\n vec3: Keyword.VEC3,\n vec4: Keyword.VEC4,\n mat2: Keyword.MAT2,\n mat3: Keyword.MAT3,\n mat4: Keyword.MAT4,\n in: Keyword.IN,\n out: Keyword.OUT,\n inout: Keyword.INOUT,\n sampler2D: Keyword.SAMPLER2D,\n samplerCube: Keyword.SAMPLER_CUBE,\n sampler3D: Keyword.SAMPLER3D,\n sampler2DShadow: Keyword.SAMPLER2D_SHADOW,\n samplerCubeShadow: Keyword.SAMPLER_CUBE_SHADOW,\n sampler2DArray: Keyword.SAMPLER2D_ARRAY,\n sampler2DArrayShadow: Keyword.SAMPLER2D_ARRAY_SHADOW,\n isampler2D: Keyword.I_SAMPLER2D,\n isampler3D: Keyword.I_SAMPLER3D,\n isamplerCube: Keyword.I_SAMPLER_CUBE,\n isampler2DArray: Keyword.I_SAMPLER2D_ARRAY,\n usampler2D: Keyword.U_SAMPLER2D,\n usampler3D: Keyword.U_SAMPLER3D,\n usamplerCube: Keyword.U_SAMPLER_CUBE,\n usampler2DArray: Keyword.U_SAMPLER2D_ARRAY,\n struct: Keyword.STRUCT,\n void: Keyword.VOID,\n true: Keyword.True,\n false: Keyword.False,\n precision: Keyword.PRECISION,\n precise: Keyword.PRECISE,\n highp: Keyword.HIGHP,\n mediump: Keyword.MEDIUMP,\n lowp: Keyword.LOWP,\n invariant: Keyword.INVARIANT,\n flat: Keyword.FLAT,\n smooth: Keyword.SMOOTH,\n noperspective: Keyword.NOPERSPECTIVE,\n centroid: Keyword.CENTROID,\n layout: Keyword.LAYOUT,\n location: Keyword.LOCATION,\n\n // Macros ...\n \"#if\": Keyword.MACRO_IF,\n \"#ifdef\": Keyword.MACRO_IFDEF,\n \"#ifndef\": Keyword.MACRO_IFNDEF,\n \"#else\": Keyword.MACRO_ELSE,\n \"#elif\": Keyword.MACRO_ELIF,\n \"#endif\": Keyword.MACRO_ENDIF,\n \"#undef\": Keyword.MACRO_UNDEF\n };\n\n private _needScanMacroConditionExpression = false;\n\n *tokenize() {\n while (!this.isEnd()) {\n yield this.scanToken();\n }\n return EOF;\n }\n\n constructor(\n source: string,\n public macroDefineList: MacroDefineList\n ) {\n super(source);\n }\n\n override scanToken(): BaseToken {\n this.skipCommentsAndSpace();\n if (this.isEnd()) {\n return EOF;\n }\n\n if (this._needScanMacroConditionExpression) {\n this._needScanMacroConditionExpression = false;\n return this._scanMacroConditionExpression();\n }\n\n const curCharCode = this.getCurCharCode();\n if (BaseLexer.isPreprocessorStartChar(curCharCode)) {\n return this._scanDirectives();\n }\n if (BaseLexer.isAlpha(curCharCode)) {\n return this._scanWord();\n }\n if (BaseLexer.isDigit(curCharCode)) {\n return this._scanNum();\n }\n\n const start = this.getShaderPosition();\n const token = BaseToken.pool.get();\n let curChar: string;\n\n switch (this.getCurChar()) {\n case \"<\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"<\") {\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.LEFT_ASSIGN, \"<<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_OP, \"<<\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.LE_OP, \"<=\", start);\n break;\n }\n token.set(ETokenType.LEFT_ANGLE, \"<\", start);\n break;\n\n case \">\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \">\") {\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.RIGHT_ASSIGN, \">>=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_OP, \">>\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.GE_OP, \">=\", start);\n break;\n }\n token.set(ETokenType.RIGHT_ANGLE, \">\", start);\n break;\n\n case \"+\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"+\") {\n this.advance(1);\n token.set(ETokenType.INC_OP, \"++\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.ADD_ASSIGN, \"+=\", start);\n break;\n }\n token.set(ETokenType.PLUS, \"+\", start);\n break;\n\n case \"-\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"-\") {\n this.advance(1);\n token.set(ETokenType.DEC_OP, \"--\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.SUB_ASSIGN, \"-=\", start);\n break;\n }\n token.set(ETokenType.DASH, \"-\", start);\n break;\n\n case \"=\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.EQ_OP, \"==\", start);\n break;\n }\n token.set(ETokenType.EQUAL, \"=\", start);\n break;\n\n case \"!\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.NE_OP, \"!=\", start);\n break;\n }\n token.set(ETokenType.BANG, \"!\", start);\n break;\n\n case \"&\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"&\") {\n this.advance(1);\n token.set(ETokenType.AND_OP, \"&&\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.ADD_ASSIGN, \"&=\", start);\n break;\n }\n token.set(ETokenType.AMPERSAND, \"&\", start);\n break;\n\n case \"|\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"|\") {\n this.advance(1);\n token.set(ETokenType.OR_OP, \"||\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.OR_ASSIGN, \"|=\", start);\n break;\n }\n token.set(ETokenType.VERTICAL_BAR, \"|\", start);\n break;\n\n case \"^\":\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"^\") {\n this.advance(1);\n token.set(ETokenType.XOR_OP, \"^^\", start);\n break;\n } else if (curChar === \"=\") {\n this.advance(1);\n token.set(ETokenType.XOR_ASSIGN, \"^=\", start);\n break;\n }\n token.set(ETokenType.CARET, \"^\", start);\n break;\n\n case \"*\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n token.set(ETokenType.MUL_ASSIGN, \"*=\", start);\n break;\n }\n\n token.set(ETokenType.STAR, \"*\", start);\n break;\n\n case \"/\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n\n token.set(ETokenType.DIV_ASSIGN, \"/=\", start);\n break;\n }\n\n token.set(ETokenType.SLASH, \"/\", start);\n break;\n\n case \"%\":\n this.advance(1);\n if (this.getCurChar() === \"=\") {\n this.advance(1);\n\n token.set(ETokenType.MOD_ASSIGN, \"%=\", start);\n break;\n }\n\n token.set(ETokenType.PERCENT, \"%\", start);\n break;\n\n case \"(\":\n this.advance(1);\n\n token.set(ETokenType.LEFT_PAREN, \"(\", start);\n break;\n case \")\":\n this.advance(1);\n\n token.set(ETokenType.RIGHT_PAREN, \")\", start);\n break;\n case \"{\":\n this.advance(1);\n\n token.set(ETokenType.LEFT_BRACE, \"{\", start);\n break;\n case \"}\":\n this.advance(1);\n\n token.set(ETokenType.RIGHT_BRACE, \"}\", start);\n break;\n case \"[\":\n this.advance(1);\n\n token.set(ETokenType.LEFT_BRACKET, \"[\", start);\n break;\n case \"]\":\n this.advance(1);\n\n token.set(ETokenType.RIGHT_BRACKET, \"]\", start);\n break;\n case \".\":\n this.advance(1);\n if (BaseLexer.isDigit(this.getCurCharCode())) {\n return this._scanNumAfterDot();\n }\n\n token.set(ETokenType.DOT, \".\", start);\n break;\n case \",\":\n this.advance(1);\n\n token.set(ETokenType.COMMA, \",\", start);\n break;\n case \":\":\n this.advance(1);\n\n token.set(ETokenType.COLON, \":\", start);\n return token;\n case \";\":\n this.advance(1);\n\n token.set(ETokenType.SEMICOLON, \";\", start);\n break;\n case \"~\":\n this.advance(1);\n\n token.set(ETokenType.TILDE, \"~\", start);\n break;\n case \"?\":\n this.advance(1);\n\n token.set(ETokenType.QUESTION, \"?\", start);\n break;\n case '\"':\n this.advance(1);\n return this._scanStringConst();\n\n default:\n this.throwError(this.getShaderPosition(0), `Unexpected character ${this.getCurChar()}`);\n }\n return token;\n }\n\n private _scanStringConst(): BaseToken {\n const start = this.getShaderPosition();\n const buffer: string[] = [];\n while (this.getCurChar() !== '\"') {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n this.advance(1);\n const range = ShaderLab.createRange(start, this.getShaderPosition());\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.STRING_CONST, buffer.join(\"\"), range);\n return token;\n }\n\n private _scanNumAfterDot(): BaseToken {\n const buffer = [\".\"];\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n this._scanFloatSuffix(buffer);\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n }\n\n private _scanUtilBreakLine(outBuffer: string[]): void {\n while (this.getCurChar() !== \"\\n\" && !this.isEnd()) {\n outBuffer.push(this.getCurChar());\n this.advance(1);\n }\n }\n\n private _scanDirectives(): BaseToken {\n const buffer: string[] = [this.getCurChar()];\n const start = this.getShaderPosition();\n this.advance(1);\n while (BaseLexer.isAlpha(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n const token = BaseToken.pool.get();\n const word = buffer.join(\"\");\n\n // If it is a macro definition or conditional expression, we need to skip the rest of the line\n if (word === \"#define\") {\n this._scanUtilBreakLine(buffer);\n const word = buffer.join(\"\") + \"\\n\";\n token.set(Keyword.MACRO_DEFINE_EXPRESSION, word, start);\n } else {\n const kt = Lexer._lexemeTable[word];\n token.set(kt ?? ETokenType.ID, word, start);\n if (word === \"#if\" || word === \"#elif\") {\n this._needScanMacroConditionExpression = true;\n }\n }\n\n return token;\n }\n\n private _scanMacroConditionExpression(): BaseToken {\n const buffer = new Array<string>();\n const start = this.getShaderPosition();\n this._scanUtilBreakLine(buffer);\n const word = buffer.join(\"\");\n const token = BaseToken.pool.get();\n token.set(Keyword.MACRO_CONDITIONAL_EXPRESSION, word, start);\n return token;\n }\n\n private _scanWord(): BaseToken {\n const buffer: string[] = [this.getCurChar()];\n const start = this.getShaderPosition();\n this.advance(1);\n while (BaseLexer.isAlnum(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n const token = BaseToken.pool.get();\n const word = buffer.join(\"\");\n const kt = Lexer._lexemeTable[word];\n\n if (this.macroDefineList[word]) {\n token.set(Keyword.MACRO_CALL, word, start);\n } else {\n token.set(kt ?? ETokenType.ID, word, start);\n }\n return token;\n }\n\n private _scanNum(): BaseToken {\n const buffer: string[] = [];\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n const curChar = this.getCurChar();\n if (curChar === \".\") {\n buffer.push(curChar);\n this.advance(1);\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n buffer.push(this.getCurChar());\n this.advance(1);\n }\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n } else {\n if (curChar === \"e\" || curChar === \"E\") {\n this._scanFloatSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.FLOAT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n } else {\n this._scanIntegerSuffix(buffer);\n\n const token = BaseToken.pool.get();\n token.set(ETokenType.INT_CONSTANT, buffer.join(\"\"), this.getShaderPosition(buffer.length));\n return token;\n }\n }\n }\n\n private _scanFloatSuffix(buffer: string[]): void {\n let curChar = this.getCurChar();\n if (curChar === \"e\" || curChar === \"E\") {\n buffer.push(curChar);\n this.advance(1);\n curChar = this.getCurChar();\n if (curChar === \"+\" || curChar === \"-\") {\n buffer.push(curChar);\n this.advance(1);\n curChar = this.getCurChar();\n }\n if (!BaseLexer.isDigit(this.getCurCharCode()))\n this.throwError(this.getShaderPosition(0), \"lexing error, invalid exponent suffix.\");\n\n do {\n buffer.push(curChar);\n this.advance(1);\n curChar = this.getCurChar();\n } while (BaseLexer.isDigit(this.getCurCharCode()));\n }\n if (curChar === \"f\" || curChar === \"F\") {\n buffer.push(curChar);\n this.advance(1);\n }\n }\n\n private _scanIntegerSuffix(buffer: string[]): void {\n const curChar = this.getCurChar();\n if (curChar === \"u\" || curChar === \"U\") {\n buffer.push(curChar);\n this.advance(1);\n }\n }\n}\n","function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of as _ };\n","import { ShaderRange } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n// #if _VERBOSE\nimport { GSErrorName } from \"../GSError\";\n// #endif\n\nexport class MacroDefine {\n private _replaceRegex?: RegExp;\n private readonly _argsLexemes?: string[];\n\n get isFunction(): boolean {\n return !!this.args;\n }\n\n constructor(\n public readonly macro: BaseToken,\n public readonly body?: BaseToken,\n public readonly location?: ShaderRange,\n public readonly args?: BaseToken[]\n ) {\n if (args?.length > 0) {\n this._argsLexemes = this.args.map((item) => item.lexeme);\n this._replaceRegex = new RegExp(`\\\\b(${this._argsLexemes.join(\"|\")})\\\\b`, \"g\");\n }\n }\n\n expandFunctionBody(args: string[]): string {\n if (args.length !== this.args?.length) {\n throw ShaderLabUtils.createGSError(\"mismatched function macro\", GSErrorName.PreprocessorError, \"\", this.location);\n }\n\n if (args.length === 0) {\n return this.body.lexeme;\n }\n\n return this.body.lexeme.replace(this._replaceRegex, (m) => {\n return args[this._argsLexemes.indexOf(m)];\n });\n }\n}\n","import { ShaderPosition, ShaderRange } from \"../common\";\n// #if _VERBOSE\nimport PpSourceMap from \"./sourceMap\";\n// #endif\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { BaseToken, EOF } from \"../common/BaseToken\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { MacroParserKeyword, MacroParserToken } from \"./constants\";\n\nexport type OnToken = (token: BaseToken, scanner: MacroParserLexer) => void;\n\nexport default class MacroParserLexer extends BaseLexer {\n private static _isPpCharacters(charCode: number): boolean {\n return (\n charCode === 35 || // #\n BaseLexer.isAlnum(charCode) // _, A-Z, a-z, 0-9\n );\n }\n\n private static _lexemeTable = <Record<string, MacroParserKeyword>>{\n \"#define\": MacroParserKeyword.define,\n \"#undef\": MacroParserKeyword.undef,\n \"#if\": MacroParserKeyword.if,\n \"#ifdef\": MacroParserKeyword.ifdef,\n \"#ifndef\": MacroParserKeyword.ifndef,\n \"#else\": MacroParserKeyword.else,\n \"#elif\": MacroParserKeyword.elif,\n \"#endif\": MacroParserKeyword.endif,\n defined: MacroParserKeyword.defined\n };\n\n private macroLvl = 0;\n\n // #if _VERBOSE\n readonly sourceMap = new PpSourceMap();\n readonly file: string;\n readonly blockRange?: ShaderRange;\n // #endif\n\n constructor(\n source: string,\n // #if _VERBOSE\n file = \"__main__\",\n blockRange?: ShaderRange\n // #endif\n ) {\n super(source);\n // #if _VERBOSE\n this.file = file;\n this.blockRange = blockRange;\n // #endif\n }\n\n scanWordsUntilTerminator(terminatorChar: string): BaseToken[] {\n const tokens: BaseToken[] = [];\n while (true) {\n this.skipSpace(true);\n if (BaseLexer.isAlpha(this.getCurCharCode())) {\n tokens.push(this.scanWord());\n } else if (this.getCurChar() === terminatorChar) {\n this.advance(1);\n return tokens;\n } else {\n this.advance(1);\n }\n }\n }\n\n scanWord(): BaseToken {\n // Skip all non-alphabetic characters, primarily used for handling defined(MACRO) syntax\n while (!BaseLexer.isAlpha(this.getCurCharCode()) && !this.isEnd()) {\n this.advance(1);\n }\n\n if (this.isEnd()) {\n return EOF;\n }\n\n const start = this._currentIndex;\n while (BaseLexer.isAlnum(this.getCurCharCode()) && !this.isEnd()) {\n this.advance(1);\n }\n const end = this._currentIndex;\n const word = this._source.slice(start, end);\n if (end === start) {\n this.throwError(this.getShaderPosition(0), \"no word found.\");\n }\n\n const token = BaseToken.pool.get();\n const tokenType = MacroParserLexer._lexemeTable[word] ?? MacroParserToken.id;\n token.set(tokenType, word, this.getShaderPosition(word.length));\n return token;\n }\n\n override scanToken(): BaseToken | undefined {\n this.skipCommentsAndSpace();\n if (this.isEnd()) {\n return;\n }\n const source = this._source;\n let start = this._currentIndex;\n let found = false;\n for (var n = source.length; this._currentIndex < n; ) {\n if (MacroParserLexer._isPpCharacters(source.charCodeAt(this._currentIndex))) {\n this.advance(1);\n found = true;\n } else {\n if (found) {\n break;\n }\n this.advance(1);\n this.skipCommentsAndSpace();\n start = this._currentIndex;\n }\n }\n\n const lexeme = source.slice(start, this._currentIndex);\n const token = BaseToken.pool.get();\n const type = MacroParserLexer._lexemeTable[lexeme] ?? MacroParserToken.id;\n token.set(type, lexeme, this.getShaderPosition(this._currentIndex - start));\n\n if (type === MacroParserKeyword.if || type === MacroParserKeyword.ifdef || type === MacroParserKeyword.ifndef) {\n this.macroLvl++;\n } else if (type === MacroParserKeyword.endif) {\n this.macroLvl--;\n }\n\n return token;\n }\n\n scanQuotedString(): BaseToken<MacroParserToken.string_const> {\n this.skipSpace(true);\n const source = this._source;\n const sourceLength = source.length;\n const start = this.getShaderPosition(0);\n\n let index = this._currentIndex;\n\n // Check for opening quote\n if (source.charCodeAt(index) !== 34) {\n // 34 = '\"'\n this.throwError(start, \"Unexpected char, expected '\\\"'\");\n }\n\n const contentStart = ++index; // Skip opening quote and record start\n\n // Fast scan to closing quote\n while (index < sourceLength && source.charCodeAt(index) !== 34) {\n index++;\n }\n\n if (index >= sourceLength) {\n this.throwError(this.getShaderPosition(0), \"Unexpected char, expected '\\\"'\");\n }\n\n const lexeme = source.slice(contentStart, index);\n this.advance(index + 1 - this._currentIndex); // Skip to after closing quote\n\n const token = BaseToken.pool.get();\n token.set(MacroParserToken.string_const, lexeme, start);\n return token;\n }\n\n scanToChar(char: string) {\n const source = this._source;\n while (source[this._currentIndex] !== char && !this.isEnd()) {\n this.advance(1);\n }\n }\n\n scanMacroBranchBody(): {\n body: BaseToken<MacroParserToken.chunk>;\n nextDirective: BaseToken;\n } {\n const shaderPosition = this.getShaderPosition(0);\n const startLevel = this.macroLvl;\n\n let nextDirective = this.scanToken()!;\n while (true) {\n const { type } = nextDirective;\n if (type === MacroParserKeyword.endif && startLevel - 1 === this.macroLvl) {\n break;\n } else if (\n (type === MacroParserKeyword.elif || type === MacroParserKeyword.else) &&\n startLevel === this.macroLvl\n ) {\n break;\n }\n nextDirective = this.scanToken()!;\n }\n\n const lexeme = this._source.slice(shaderPosition.index, this._currentIndex - nextDirective.lexeme.length - 1);\n const body = BaseToken.pool.get();\n body.set(MacroParserToken.chunk, lexeme, shaderPosition);\n return { body, nextDirective };\n }\n\n scanPairedBlock(lc: string, rc: string): void {\n this.scanToChar(lc);\n let level = 0;\n const source = this._source;\n\n do {\n const curChar = source[this._currentIndex];\n\n if (curChar === lc) {\n level++;\n } else if (curChar === rc) {\n level--;\n }\n this.advance(1);\n } while (level > 0);\n }\n\n /**\n * @returns end ShaderPosition\n */\n scanRemainMacro(): ShaderPosition {\n const startLvl = this.macroLvl;\n let directive = this.scanToken()!;\n while (!this.isEnd() && (directive.type !== MacroParserKeyword.endif || startLvl - 1 !== this.macroLvl)) {\n directive = this.scanToken()!;\n }\n return this.getShaderPosition(0);\n }\n\n peekNonSpace() {\n let current = this._currentIndex;\n while (/\\s/.test(this._source[current])) {\n current += 1;\n }\n return this._source[current];\n }\n\n scanInteger() {\n const start = this._currentIndex;\n while (BaseLexer.isDigit(this.getCurCharCode())) {\n this.advance(1);\n }\n if (this._currentIndex === start) {\n this.throwError(this.getShaderPosition(0), \"no integer found\");\n }\n const integer = this._source.slice(start, this._currentIndex);\n\n const token = BaseToken.pool.get();\n token.set(MacroParserToken.int_constant, integer, this.getShaderPosition(0));\n return token;\n }\n\n scanMacroBody(): BaseToken<MacroParserToken.line_remain> {\n this.skipSpace(false);\n let lexeme = \"\";\n const source = this._source;\n const sourceLength = source.length;\n\n const start = this.getShaderPosition(0);\n while (this._currentIndex < sourceLength) {\n const charCode = source.charCodeAt(this._currentIndex);\n\n // Check for line break (terminates macro definition), break when encounter \"\\n\"\n if (charCode === 10) {\n break;\n }\n\n // Check for comments (both single-line and multi-line)\n if (charCode === 47) {\n const nextIndex = this._currentIndex + 1;\n if (nextIndex < sourceLength) {\n const nextCharCode = source.charCodeAt(nextIndex);\n\n // Single-line comment (terminates macro definition), break when encounter \"//\"\n if (nextCharCode === 47) {\n break;\n }\n\n // Multi-line comment (skip but don't terminate)\n if (nextCharCode === 42) {\n this.advance(2); // Skip \"/*\"\n\n // Skip until end of multi-line comment\n while (this._currentIndex + 1 < sourceLength) {\n const currentIndex = this._currentIndex;\n if (source.charCodeAt(currentIndex) === 42 && source.charCodeAt(currentIndex + 1) === 47) {\n this.advance(2); // Skip \"*/\n break;\n }\n this.advance(1);\n }\n\n lexeme += \" \"; // Replace comment with space\n continue;\n }\n }\n }\n\n // Accumulate useful character\n lexeme += source[this._currentIndex];\n this.advance(1);\n }\n\n if (lexeme === \"\") {\n return null;\n }\n\n const valueToken = BaseToken.pool.get();\n valueToken.set(MacroParserToken.line_remain, lexeme, ShaderLab.createRange(start, this.getShaderPosition(0)));\n return valueToken;\n }\n}\n","import { ExpandSegment } from \"./MacroParser\";\n// #if _VERBOSE\nimport PpSourceMap, { MapRange } from \"./sourceMap\";\n// #endif\n\nexport class PpUtils {\n static expand(\n segments: ExpandSegment[],\n source: string,\n // #if _VERBOSE\n sourceMap?: PpSourceMap\n //#endif\n ) {\n const ret: string[] = [];\n let startIdx = 0;\n let generatedIdx = 0;\n\n for (const seg of segments) {\n const originSlice = source.slice(startIdx, seg.rangeInBlock.start.index);\n ret.push(originSlice, seg.replace);\n\n const generatedIdxEnd = generatedIdx + originSlice.length + seg.replace.length;\n\n // #if _VERBOSE\n const mapRange = new MapRange(seg.block, seg.rangeInBlock, {\n start: generatedIdx + originSlice.length,\n end: generatedIdxEnd\n });\n sourceMap?.addMapRange(mapRange);\n // #endif\n\n startIdx = seg.rangeInBlock.end.index;\n generatedIdx = generatedIdxEnd;\n }\n ret.push(source.slice(startIdx));\n return ret.join(\"\");\n }\n}\n","import { ShaderMacro } from \"@galacean/engine\";\nimport { ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { MacroParserConstant, MacroParserKeyword, MacroParserToken } from \"./constants\";\nimport { MacroDefine } from \"./MacroDefine\";\nimport MacroParserLexer from \"./MacroParserLexer\";\nimport { PpUtils } from \"./Utils\";\n// #if _VERBOSE\nimport PpSourceMap, { BlockInfo } from \"./sourceMap\";\n// #endif\nimport { BaseLexer } from \"../common/BaseLexer\";\n\nexport interface ExpandSegment {\n // #if _VERBOSE\n block?: BlockInfo;\n // #endif\n rangeInBlock: ShaderRange;\n replace: string;\n}\n\n/** @internal */\nexport class MacroParser {\n static lexer: MacroParserLexer;\n\n private static _definedMacros: Map<string, MacroDefine> = new Map();\n private static _expandSegmentsStack: ExpandSegment[][] = [[]];\n\n private static _expandVisitedMacros: Record<string, number> = {};\n private static _expandVersionId: number = 1;\n\n // #if _VERBOSE\n static _errors: Error[] = [];\n // #endif\n\n static parse(source: string, macros: ShaderMacro[]): string | null {\n MacroParser._reset();\n\n for (const macro of macros) {\n MacroParser._addPredefinedMacro(macro.name, macro.value);\n }\n\n this.lexer = new MacroParserLexer(source);\n return MacroParser._parseDirectives(this.lexer);\n }\n\n private static _reset() {\n this._expandSegmentsStack.length = 0;\n this._expandSegmentsStack.push([]);\n\n this._definedMacros.clear();\n this._addPredefinedMacro(\"GL_ES\");\n\n // #if _VERBOSE\n this._errors.length = 0;\n // #endif\n }\n\n private static _addPredefinedMacro(macro: string, value?: string) {\n const token = BaseToken.pool.get();\n token.set(MacroParserToken.id, macro);\n\n let macroBody: BaseToken | undefined;\n if (value != undefined) {\n macroBody = BaseToken.pool.get();\n macroBody.set(MacroParserToken.id, value);\n }\n\n this._definedMacros.set(macro, new MacroDefine(token, macroBody));\n }\n\n private static _parseDirectives(lexer: MacroParserLexer): string | null {\n let directive: BaseToken | undefined;\n while ((directive = lexer.scanToken())) {\n switch (directive.type) {\n case MacroParserToken.id:\n this._parseMacro(lexer, directive);\n break;\n case MacroParserKeyword.define:\n this._parseDefine(lexer);\n break;\n case MacroParserKeyword.undef:\n this._parseUndef(lexer);\n break;\n case MacroParserKeyword.if:\n this._parseIfDirective(lexer, MacroParserKeyword.if);\n break;\n case MacroParserKeyword.ifndef:\n this._parseIfDirective(lexer, MacroParserKeyword.ifndef);\n break;\n case MacroParserKeyword.ifdef:\n this._parseIfDirective(lexer, MacroParserKeyword.ifdef);\n break;\n }\n }\n // #if _VERBOSE\n if (this._errors.length > 0) return null;\n // #endif\n\n return PpUtils.expand(this._getExpandSegments(), lexer.source, lexer.sourceMap);\n }\n\n private static _getExpandSegments(): ExpandSegment[] {\n return this._expandSegmentsStack[this._expandSegmentsStack.length - 1];\n }\n\n private static _reportError(loc: ShaderRange | ShaderPosition, message: string, source: string, file?: string) {\n const error = ShaderLabUtils.createGSError(message, GSErrorName.PreprocessorError, source, loc, file);\n // #if _VERBOSE\n this._errors.push(error);\n // #endif\n }\n\n private static _parseIfDirective(lexer: MacroParserLexer, directiveType: MacroParserKeyword): void {\n const directiveLength =\n directiveType === MacroParserKeyword.if ? 3 : directiveType === MacroParserKeyword.ifdef ? 6 : 7; // #if = 3, #ifdef = 6, #ifndef = 7\n const start = lexer.currentIndex - directiveLength;\n let skipMacro = false;\n\n let shouldInclude: MacroParserConstant;\n if (directiveType === MacroParserKeyword.if) {\n shouldInclude = this._parseConstantExpression(lexer);\n } else {\n const macroToken = lexer.scanWord();\n const lexeme = macroToken.lexeme;\n if (lexeme.startsWith(\"GL_\")) {\n skipMacro = true;\n } else {\n const defined = this._definedMacros.get(lexeme);\n shouldInclude = directiveType === MacroParserKeyword.ifdef ? !!defined : !defined;\n }\n }\n\n lexer.skipSpace(true);\n const { body, nextDirective } = lexer.scanMacroBranchBody();\n\n if (skipMacro) return;\n\n if (shouldInclude) {\n const end =\n nextDirective.type === MacroParserKeyword.endif ? lexer.getShaderPosition(0) : lexer.scanRemainMacro();\n const expanded = this._expandMacroChunk(body.lexeme, body.location, lexer);\n this._addContentReplace(\n lexer.file,\n ShaderLab.createPosition(start),\n end,\n expanded.content,\n lexer.blockRange,\n expanded.sourceMap\n );\n } else {\n this._addEmptyReplace(lexer, start);\n this._processConditionalDirective(nextDirective.type, lexer);\n }\n }\n\n private static _processConditionalDirective(\n directive: MacroParserKeyword.elif | MacroParserKeyword.else | MacroParserKeyword.endif,\n scanner: MacroParserLexer\n ) {\n if (directive === MacroParserKeyword.endif) {\n return;\n }\n\n const start = scanner.currentIndex;\n\n if (directive === MacroParserKeyword.else) {\n const { body } = scanner.scanMacroBranchBody();\n const expanded = this._expandMacroChunk(body.lexeme, body.location, scanner);\n this._addContentReplace(\n scanner.file,\n ShaderLab.createPosition(start),\n scanner.getShaderPosition(0),\n expanded.content,\n scanner.blockRange,\n expanded.sourceMap\n );\n } else if (directive === MacroParserKeyword.elif) {\n const constantExpr = this._parseConstantExpression(scanner);\n const { body, nextDirective } = scanner.scanMacroBranchBody();\n if (constantExpr) {\n const end =\n nextDirective.type === MacroParserKeyword.endif ? scanner.currentIndex : scanner.scanRemainMacro().index;\n const expanded = this._expandMacroChunk(body.lexeme, body.location, scanner);\n this._addContentReplace(\n scanner.file,\n ShaderLab.createPosition(start),\n ShaderLab.createPosition(end),\n expanded.content,\n scanner.blockRange,\n expanded.sourceMap\n );\n } else {\n this._addContentReplace(\n scanner.file,\n ShaderLab.createPosition(start),\n ShaderLab.createPosition(scanner.currentIndex),\n \"\",\n scanner.blockRange\n );\n this._processConditionalDirective(nextDirective.type, scanner);\n }\n }\n }\n\n private static _parseConstantExpression(scanner: MacroParserLexer): MacroParserConstant {\n scanner.skipSpace(true);\n return this._parseLogicalOrExpression(scanner);\n }\n\n private static _parseLogicalOrExpression(scanner: MacroParserLexer): MacroParserConstant {\n const operand1 = this._parseLogicalAndExpression(scanner);\n const operator = scanner.peek(2);\n if (operator && operator === \"||\") {\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseLogicalOrExpression(scanner);\n return operand1 || operand2;\n }\n return operand1;\n }\n\n private static _parseLogicalAndExpression(scanner: MacroParserLexer): MacroParserConstant {\n const operand1 = this._parseEqualityExpression(scanner);\n const operator = scanner.peek(2);\n if (operator && operator === \"&&\") {\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseLogicalAndExpression(scanner);\n return operand1 && operand2;\n }\n return operand1;\n }\n\n private static _parseEqualityExpression(scanner: MacroParserLexer): MacroParserConstant {\n const operand1 = this._parseRelationalExpression(scanner);\n const operator = scanner.peek(2);\n if (operator && [\"==\", \"!=\"].includes(operator)) {\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseEqualityExpression(scanner);\n switch (operator) {\n case \"==\":\n return operand1 === operand2;\n case \"!=\":\n return operand1 !== operand2;\n }\n }\n return operand1;\n }\n\n private static _parseRelationalExpression(scanner: MacroParserLexer): MacroParserConstant {\n const operand1 = this._parseShiftExpression(scanner) as number;\n let operator = scanner.peek(2);\n if (operator[1] !== \"=\") operator = operator[0];\n if (operator && [\">\", \"<\", \">=\", \"<=\"].includes(operator)) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance(operator.length);\n scanner.skipSpace(false);\n const operand2 = this._parseRelationalExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this._reportError(opPos, \"invalid operator in relation expression.\", scanner.source, scanner.file);\n return;\n }\n switch (operator) {\n case \">\":\n return operand1 > operand2;\n case \"<\":\n return operand1 < operand2;\n case \">=\":\n return operand1 >= operand2;\n case \"<=\":\n return operand1 <= operand2;\n }\n }\n return operand1;\n }\n\n private static _parseShiftExpression(scanner: MacroParserLexer): MacroParserConstant {\n const operand1 = this._parseAdditiveExpression(scanner) as number;\n const operator = scanner.peek(2);\n if (operator && [\">>\", \"<<\"].includes(operator)) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance(2);\n scanner.skipSpace(false);\n const operand2 = this._parseShiftExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this._reportError(opPos, \"invalid operator in shift expression.\", scanner.source, scanner.file);\n return;\n }\n switch (operator) {\n case \">>\":\n return operand1 >> operand2;\n case \"<<\":\n return operand1 << operand2;\n }\n }\n\n return operand1;\n }\n\n private static _parseAdditiveExpression(scanner: MacroParserLexer): MacroParserConstant {\n const operand1 = this._parseMulticativeExpression(scanner) as number;\n if ([\">\", \"<\"].includes(scanner.getCurChar())) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance(1);\n\n const operator = scanner.getCurChar();\n scanner.skipSpace(false);\n const operand2 = this._parseAdditiveExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this._reportError(opPos, \"invalid operator.\", scanner.source, scanner.file);\n return false;\n }\n switch (operator) {\n case \"+\":\n return operand1 + operand2;\n case \"-\":\n return operand1 - operand2;\n }\n }\n return operand1;\n }\n\n private static _parseMulticativeExpression(scanner: MacroParserLexer): MacroParserConstant {\n const operand1 = this._parseUnaryExpression(scanner) as number;\n scanner.skipSpace(false);\n if ([\"*\", \"/\", \"%\"].includes(scanner.getCurChar())) {\n const opPos = scanner.getShaderPosition(0);\n const operator = scanner.getCurChar();\n scanner.skipSpace(false);\n const operand2 = this._parseMulticativeExpression(scanner) as number;\n if (typeof operand1 !== typeof operand2 && typeof operand1 !== \"number\") {\n this._reportError(opPos, \"invalid operator.\", scanner.source, scanner.file);\n return;\n }\n switch (operator) {\n case \"*\":\n return operand1 * operand2;\n case \"/\":\n return operand1 / operand2;\n case \"%\":\n return operand1 % operand2;\n }\n }\n return operand1;\n }\n\n private static _parseUnaryExpression(scanner: MacroParserLexer) {\n const operator = scanner.getCurChar();\n if ([\"+\", \"-\", \"!\"].includes(operator)) {\n const opPos = scanner.getShaderPosition(0);\n scanner.advance(1);\n scanner.skipSpace(false);\n const parenExpr = this._parseParenthesisExpression(scanner);\n if ((operator === \"!\" && typeof parenExpr !== \"boolean\") || (operator !== \"!\" && typeof parenExpr !== \"number\")) {\n this._reportError(opPos, \"invalid operator.\", scanner.source, scanner.file);\n }\n\n switch (operator) {\n case \"+\":\n return parenExpr;\n case \"-\":\n return -parenExpr;\n case \"!\":\n return !parenExpr;\n }\n }\n return this._parseParenthesisExpression(scanner);\n }\n\n private static _parseParenthesisExpression(scanner: MacroParserLexer): MacroParserConstant {\n if (scanner.getCurChar() === \"(\") {\n scanner.advance(1);\n scanner.skipSpace(false);\n const ret = this._parseConstantExpression(scanner);\n scanner.scanToChar(\")\");\n scanner.advance(1);\n return ret;\n }\n return this._parseConstant(scanner);\n }\n\n private static _parseConstant(scanner: MacroParserLexer): MacroParserConstant {\n if (BaseLexer.isAlpha(scanner.getCurCharCode())) {\n const id = scanner.scanWord();\n if (id.type === MacroParserKeyword.defined) {\n const withParen = scanner.peekNonSpace() === \"(\";\n const macro = scanner.scanWord();\n if (withParen) {\n scanner.scanToChar(\")\");\n scanner.advance(1);\n }\n return !!this._definedMacros.get(macro.lexeme);\n } else {\n const macro = this._definedMacros.get(id.lexeme);\n\n if (!macro) {\n return false;\n }\n\n if (!macro.body) {\n return true;\n }\n\n if (macro.isFunction) {\n this._reportError(id.location, \"invalid function macro usage\", scanner.source, scanner.file);\n }\n const value = Number(macro.body.lexeme);\n if (!Number.isInteger(value)) {\n this._reportError(id.location, `invalid const macro: ${id.lexeme}`, scanner.source, scanner.file);\n }\n return value;\n }\n } else if (BaseLexer.isDigit(scanner.getCurCharCode())) {\n const integer = scanner.scanInteger();\n return Number(integer.lexeme);\n } else {\n this._reportError(\n scanner.getShaderPosition(0),\n `invalid token: ${scanner.getCurChar()}`,\n scanner.source,\n scanner.file\n );\n }\n }\n\n private static _parseMacroFunctionArgs(\n source: string,\n startIndex: number,\n macroName: string\n ): { args: string[]; endIndex: number } {\n const length = source.length;\n let i = startIndex + macroName.length;\n\n // Find opening parenthesis\n while (i < length && source.charCodeAt(i) !== 40) i++;\n\n // Parse function arguments\n const args: string[] = [];\n let level = 1;\n let argStart = i + 1;\n let k = argStart;\n\n while (k < length && level > 0) {\n const charCode = source.charCodeAt(k);\n if (charCode === 40) {\n level++;\n } else if (charCode === 41) {\n if (--level === 0) {\n const arg = source.substring(argStart, k).trim();\n if (arg.length > 0) args.push(arg);\n break;\n }\n } else if (charCode === 44 && level === 1) {\n const arg = source.substring(argStart, k).trim();\n if (arg.length > 0) args.push(arg);\n argStart = k + 1;\n }\n k++;\n }\n\n return { args, endIndex: k + 1 };\n }\n\n private static _expandMacroBody(body: string): string {\n const visitedMacros = this._expandVisitedMacros;\n const currentVersionId = ++this._expandVersionId;\n let expandedBody = body;\n let hasExpansion = true;\n\n while (hasExpansion) {\n hasExpansion = false;\n const length = expandedBody.length;\n let i = 0;\n\n while (i < length) {\n const charCode = expandedBody.charCodeAt(i);\n if (!BaseLexer.isAlpha(charCode)) {\n i++;\n continue;\n }\n\n const start = i;\n while (i < length && BaseLexer.isAlnum(expandedBody.charCodeAt(i))) {\n i++;\n }\n\n const macroName = expandedBody.substring(start, i);\n const macro = this._definedMacros.get(macroName);\n\n if (!macro || visitedMacros[macroName] === currentVersionId) {\n continue;\n }\n\n // Prevent circular references\n visitedMacros[macroName] = currentVersionId;\n\n let replacement: string;\n let endIndex: number;\n\n if (!macro.isFunction) {\n replacement = macro.body?.lexeme ?? \"\";\n endIndex = i;\n } else {\n const { args, endIndex: newEndIndex } = this._parseMacroFunctionArgs(expandedBody, start, macroName);\n replacement = macro.expandFunctionBody(args);\n endIndex = newEndIndex;\n }\n\n expandedBody = expandedBody.substring(0, start) + replacement + expandedBody.substring(endIndex);\n hasExpansion = true;\n break;\n }\n }\n\n return expandedBody;\n }\n\n /**\n * Recursively expand macro body and expansion.\n */\n private static _expandMacroChunk(\n chunk: string,\n loc: ShaderRange,\n parentScanner: MacroParserLexer\n ): {\n content: string;\n // #if _VERBOSE\n sourceMap: PpSourceMap;\n // #endif\n };\n private static _expandMacroChunk(\n chunk: string,\n loc: ShaderRange,\n file: string\n ): {\n content: string;\n // #if _VERBOSE\n sourceMap: PpSourceMap;\n // #endif\n };\n private static _expandMacroChunk(\n chunk: string,\n loc: ShaderRange,\n scannerOrFile: MacroParserLexer | string\n ): {\n content: string;\n // #if _VERBOSE\n sourceMap: PpSourceMap;\n // #endif\n } {\n this._expandSegmentsStack.push([]);\n let scanner: MacroParserLexer;\n if (typeof scannerOrFile === \"string\") {\n scanner = new MacroParserLexer(chunk, scannerOrFile);\n } else {\n scanner = new MacroParserLexer(chunk, scannerOrFile.file, loc);\n }\n\n const ret = this._parseDirectives(scanner);\n this._expandSegmentsStack.pop();\n return {\n content: ret,\n // #if _VERBOSE\n sourceMap: scanner.sourceMap\n // #endif\n };\n }\n\n private static _addEmptyReplace(lexer: MacroParserLexer, start: number) {\n this._addContentReplace(\n lexer.file,\n ShaderLab.createPosition(start),\n lexer.getShaderPosition(0),\n \"\",\n lexer.blockRange\n );\n }\n\n private static _addContentReplace(\n sourceFile: string,\n start: ShaderPosition,\n end: ShaderPosition,\n content: string,\n sourceRange?: ShaderRange,\n sourceMap?: PpSourceMap\n ): void {\n // #if _VERBOSE\n const block = new BlockInfo(sourceFile, sourceRange, sourceMap);\n // #endif\n\n const range = ShaderLab.createRange(start, end);\n this._getExpandSegments().push({\n // #if _VERBOSE\n block,\n // #endif\n rangeInBlock: range,\n replace: content\n });\n }\n\n private static _parseDefine(lexer: MacroParserLexer): void {\n const start = lexer.getShaderPosition(7);\n const macroName = lexer.scanWord();\n\n const { lexeme, location } = macroName;\n let { end } = location;\n if (this._definedMacros.get(lexeme) && lexeme.startsWith(\"GL_\")) {\n this._reportError(location, `Redefined macro: ${lexeme}`, lexer.source, lexer.file);\n }\n\n let macroArgs: BaseToken[] | undefined;\n if (lexer.getCurChar() === \"(\") {\n macroArgs = lexer.scanWordsUntilTerminator(\")\");\n end = lexer.getShaderPosition(0);\n }\n const macroBody = lexer.scanMacroBody();\n const range = ShaderLab.createRange(start, end);\n const macroDefine = new MacroDefine(macroName, macroBody, range, macroArgs);\n this._definedMacros.set(lexeme, macroDefine);\n\n this._addContentReplace(lexer.file, start, lexer.getShaderPosition(0), \"\", lexer.blockRange);\n }\n\n private static _parseUndef(lexer: MacroParserLexer): void {\n const start = lexer.getShaderPosition(6);\n const macroName = lexer.scanWord();\n this._definedMacros.delete(macroName.lexeme);\n\n this._addContentReplace(lexer.file, start, lexer.getShaderPosition(0), \"\", lexer.blockRange);\n }\n\n private static _parseMacro(lexer: MacroParserLexer, token: BaseToken) {\n const macro = this._definedMacros.get(token.lexeme);\n if (macro) {\n const { location } = token;\n if (macro.isFunction) {\n const { args, endIndex } = this._parseMacroFunctionArgs(lexer.source, location.start.index, token.lexeme);\n const macroBodyExpanded = macro.expandFunctionBody(args);\n const expandedContent = this._expandMacroBody(macroBodyExpanded);\n\n const remainingLength = endIndex - location.end.index;\n lexer.advance(remainingLength);\n\n this._addContentReplace(\n lexer.file,\n location.start,\n lexer.getShaderPosition(0),\n expandedContent,\n lexer.blockRange\n );\n } else {\n const macroContent = macro.body?.lexeme ?? \"\";\n const expandedContent = this._expandMacroBody(macroContent);\n\n this._addContentReplace(lexer.file, location.start, location.end, expandedContent, lexer.blockRange);\n }\n }\n }\n\n // #if _VERBOSE\n static convertSourceIndex(index: number) {\n return this.lexer.sourceMap.map(index);\n }\n // #endif\n}\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport GrammarUtils from \"./Utils\";\n\nexport default class StateItem {\n static _id = 0;\n\n readonly production: Production;\n readonly position: number;\n readonly lookaheadSet: Set<Terminal>;\n readonly id: number;\n\n _needReInfer = true;\n get needReInfer() {\n return this._needReInfer;\n }\n set needReInfer(v: boolean) {\n this._needReInfer = v;\n }\n\n get curSymbol() {\n return this.production.derivation[this.position];\n }\n get nextSymbol() {\n return this.production.derivation[this.position + 1];\n }\n\n constructor(production: Production, position: number, lookahead: Iterable<Terminal>) {\n this.production = production;\n this.position = position;\n this.lookaheadSet = new Set();\n for (const la of lookahead) {\n this.lookaheadSet.add(la);\n }\n this.id = StateItem._id++;\n }\n\n addLookahead(ts: Iterable<Terminal>) {\n for (const t of ts) {\n if (this.lookaheadSet.has(t)) continue;\n this.lookaheadSet.add(t);\n this.needReInfer = true;\n }\n }\n\n symbolByOffset(offset: number) {\n return this.production.derivation[this.position + offset];\n }\n\n canReduce() {\n if (this.position > this.production.derivation.length - 1) return true;\n else {\n for (let i = this.position; i < this.production.derivation.length; i++) {\n if (this.production.derivation[i] !== ETokenType.EPSILON) return false;\n }\n return true;\n }\n }\n\n advance() {\n // #if _VERBOSE\n if (this.canReduce()) throw `Error: advance reduce-able parsing state item`;\n // #endif\n return new StateItem(this.production, this.position + 1, this.lookaheadSet);\n }\n\n // #if _VERBOSE\n toString() {\n const coreItem = this.production.derivation.map((item) => GrammarUtils.toString(item));\n coreItem[this.position] = \".\" + (coreItem[this.position] ?? \"\");\n\n return `${NoneTerminal[this.production.goal]} :=> ${coreItem.join(\"|\")} ;${Array.from(this.lookaheadSet)\n .map((item) => GrammarUtils.toString(item))\n .join(\"/\")}`;\n }\n // #endif\n}\n","import { Terminal } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport StateItem from \"./StateItem\";\n\nexport default class State {\n static closureMap: Map<string /** state mapKey */, State> = new Map();\n static pool: Map<number, State> = new Map();\n static _id = 0;\n\n readonly id: number;\n readonly cores: Set<StateItem>;\n private _items: Set<StateItem>;\n get items() {\n return this._items;\n }\n\n closured = false;\n get needReInfer() {\n for (const core of this.cores) {\n if (core.needReInfer) return true;\n }\n return false;\n }\n\n private _stateItemPool: Map<string /** Map ID */, StateItem> = new Map();\n\n static create(cores: StateItem[]) {\n const cacheKey = this.getMapKey(cores);\n const state = this.closureMap.get(cacheKey);\n if (state) {\n for (const core of cores) {\n // merge lookahead\n state.createStateItem(core.production, core.position, core.lookaheadSet);\n }\n return state;\n }\n\n const newState = new State(cores);\n this.closureMap.set(cacheKey, newState);\n return newState;\n }\n\n // TODO: any optimization?\n static getMapKey(cores: StateItem[]) {\n return cores.map((item) => `${item.production.id},${item.position}`).join(\";\");\n }\n\n private constructor(cores: Iterable<StateItem>) {\n this.id = State._id++;\n this._items = new Set([...cores]);\n this.cores = new Set([...cores]);\n for (const it of cores) {\n const itemMapKey = this.getStateItemMapKey(it.production, it.position);\n this._stateItemPool.set(itemMapKey, it);\n }\n State.pool.set(this.id, this);\n }\n\n // TODO: any optimization?\n getStateItemMapKey(production: Production, position: number) {\n return `${production.id},${position}`;\n }\n\n createStateItem(production: Production, position: number, lookaheadSet: Iterable<Terminal> = new Set()) {\n const mapId = this.getStateItemMapKey(production, position);\n const item = this._stateItemPool.get(mapId);\n if (item) {\n for (const la of lookaheadSet) {\n if (item.lookaheadSet.has(la)) continue;\n item.lookaheadSet.add(la);\n item.needReInfer = true;\n }\n return item;\n }\n const newItem = new StateItem(production, position, lookaheadSet);\n this._stateItemPool.set(mapId, newItem);\n return newItem;\n }\n}\n","import { ETokenType, ShaderRange } from \"../common\";\nimport { ASTNode, TreeNode } from \"../parser/AST\";\nimport { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\nimport Production from \"./Production\";\nimport { ActionInfo, EAction } from \"./types\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ClearableObjectPool, IPoolElement } from \"@galacean/engine\";\nimport { NodeChild } from \"../parser/types\";\nimport { Keyword } from \"../common/enums/Keyword\";\n\nexport default class GrammarUtils {\n static isTerminal(sm: GrammarSymbol) {\n return sm < NoneTerminal.START;\n }\n\n static toString(sm: GrammarSymbol) {\n if (this.isTerminal(sm)) {\n return ETokenType[sm] ?? Keyword[sm];\n }\n return NoneTerminal[sm];\n }\n\n static createProductionWithOptions(\n goal: NoneTerminal,\n options: GrammarSymbol[][],\n /** the ast node */\n astTypePool?: ClearableObjectPool<\n { set: (loc: ShaderRange, children: NodeChild[]) => void } & IPoolElement & TreeNode\n >\n ) {\n const ret: [GrammarSymbol[], TranslationRule | undefined][] = [];\n for (const opt of options) {\n ret.push([\n [goal, ...opt],\n function (sa, ...children) {\n if (!children[0]) return;\n const start = children[0].location.start;\n const end = children[children.length - 1].location.end;\n const location = ShaderLab.createRange(start, end);\n ASTNode.get(astTypePool ?? ASTNode.TrivialNode.pool, sa, location, children);\n }\n ]);\n }\n return ret;\n }\n\n static addMapSetItem<K, T>(map: Map<K, Set<T>>, k: K, v: T) {\n const set = map.get(k) ?? new Set();\n set.add(v);\n map.set(k, set);\n }\n\n static isSubSet<T>(sa: Set<T>, sb: Set<T>) {\n for (const item of sa) {\n if (!sb.has(item)) return false;\n }\n return true;\n }\n\n static isActionEqual(a: ActionInfo, b: ActionInfo) {\n return a.action === b.action && a.target === b.target;\n }\n\n // #if _VERBOSE\n static printAction(actionInfo: ActionInfo) {\n const production = Production.pool.get(actionInfo.target!);\n return `<Action: ${EAction[actionInfo.action]} -> ${this.printProduction(production)}>`;\n }\n\n static printProduction(production: Production) {\n const deriv = production.derivation.map((gs) => GrammarUtils.toString(gs)).join(\"|\");\n return `${NoneTerminal[production.goal]} :=> ${deriv}`;\n }\n // #endif\n}\n","import { Logger } from \"@galacean/engine\";\nimport { ETokenType } from \"../common\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { Grammar } from \"../parser/Grammar\";\nimport { GrammarSymbol, NoneTerminal, Terminal } from \"../parser/GrammarSymbol\";\nimport State from \"./State\";\nimport StateItem from \"./StateItem\";\nimport { default as GrammarUtils, default as Utils } from \"./Utils\";\nimport { ActionInfo, ActionTable, EAction, GotoTable, StateActionTable, StateGotoTable } from \"./types\";\n\n/**\n * The [LALR1](https://web.stanford.edu/class/archive/cs/cs143/cs143.1128/handouts/140%20LALR%20Parsing.pdf) Parser generator\n */\nexport class LALR1 {\n readonly firstSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n readonly followSetMap: Map<NoneTerminal, Set<Terminal>> = new Map();\n\n readonly actionTable: StateActionTable = new Map();\n readonly gotoTable: StateGotoTable = new Map();\n private grammar: Grammar;\n\n /** For circle detect */\n private _firstSetNTStack: NoneTerminal[] = [];\n\n constructor(grammar: Grammar) {\n this.grammar = grammar;\n }\n\n generate() {\n this.computeFirstSet();\n this.buildStateTable();\n }\n\n private buildStateTable() {\n const startStateItemCore = [new StateItem(this.grammar.productions[0], 0, [ETokenType.EOF])];\n const startState = State.create(startStateItemCore);\n this._extendState(startState);\n }\n\n private _extendState(state: State) {\n if (!state.needReInfer) return;\n this._closure(state);\n const newStates = this._inferNextState(state);\n for (const ns of newStates) {\n this._extendState(ns);\n }\n }\n\n private _closure(state: State) {\n for (const core of state.cores) {\n if (!core.canReduce()) {\n this._extendStateItem(state, core);\n }\n }\n state.closured = true;\n return state;\n }\n\n private _extendStateItem(state: State, item: StateItem) {\n if (GrammarUtils.isTerminal(item.curSymbol)) return;\n\n const productionList = this.grammar.getProductionList(<NoneTerminal>item.curSymbol);\n\n if (item.nextSymbol) {\n let newLookaheadSet = new Set<Terminal>();\n let lastFirstSet: Set<Terminal> | undefined;\n let terminalExist = false;\n // when A :=> a.BC, a; ==》 B :=> .xy, First(Ca)\n // newLookAhead = First(Ca)\n for (let i = 1, nextSymbol = item.symbolByOffset(1); !!nextSymbol; nextSymbol = item.symbolByOffset(++i)) {\n if (GrammarUtils.isTerminal(nextSymbol)) {\n newLookaheadSet.add(<Terminal>nextSymbol);\n terminalExist = true;\n break;\n }\n lastFirstSet = this.firstSetMap.get(<NoneTerminal>nextSymbol)!;\n for (const t of lastFirstSet) {\n newLookaheadSet.add(t);\n }\n if (!lastFirstSet.has(ETokenType.EPSILON)) break;\n }\n if (!terminalExist && lastFirstSet?.has(ETokenType.EPSILON)) {\n for (const t of item.lookaheadSet) {\n newLookaheadSet.add(t);\n }\n }\n\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(newLookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(newLookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n } else {\n for (const production of productionList) {\n const newItem = state.createStateItem(production, 0);\n if (!state.items.has(newItem) || !Utils.isSubSet(item.lookaheadSet, newItem.lookaheadSet)) {\n state.items.add(newItem);\n newItem.addLookahead(item.lookaheadSet);\n this._extendStateItem(state, newItem);\n }\n }\n }\n }\n\n private _inferNextState(state: State): Set<State> {\n const coreMap: Map<GrammarSymbol, Set<StateItem>> = new Map();\n const stateActionTable: ActionTable = this.actionTable.get(state.id) ?? new Map();\n const stateGotoTable: GotoTable = this.gotoTable.get(state.id) ?? new Map();\n\n this.actionTable.set(state.id, stateActionTable);\n this.gotoTable.set(state.id, stateGotoTable);\n\n for (const stateItem of state.items) {\n if (stateItem.canReduce()) {\n let action: ActionInfo;\n if (stateItem.production.goal !== NoneTerminal.START) {\n action = {\n action: EAction.Reduce,\n target: stateItem.production.id\n };\n } else {\n action = { action: EAction.Accept };\n }\n\n for (const t of stateItem.lookaheadSet) {\n this._addAction(stateActionTable, t, action);\n }\n } else {\n const nextItem = stateItem.advance();\n Utils.addMapSetItem(coreMap, stateItem.curSymbol, nextItem);\n }\n\n stateItem.needReInfer = false;\n }\n\n const newStates = new Set<State>();\n for (const [gs, cores] of coreMap.entries()) {\n const newState = State.create(Array.from(cores));\n if (GrammarUtils.isTerminal(gs)) {\n this._addAction(stateActionTable, <Terminal>gs, {\n action: EAction.Shift,\n target: newState.id\n });\n } else {\n stateGotoTable.set(<NoneTerminal>gs, newState.id);\n }\n\n newStates.add(newState);\n }\n\n return newStates;\n }\n\n /** Resolve shift-reduce/reduce-reduce conflict detect */\n private _addAction(table: ActionTable, terminal: Terminal, action: ActionInfo) {\n const exist = table.get(terminal);\n if (exist && !Utils.isActionEqual(exist, action)) {\n // Resolve dangling else ambiguity\n if (terminal === Keyword.ELSE && exist.action === EAction.Shift && action.action === EAction.Reduce) {\n return;\n } else {\n // #if _VERBOSE\n Logger.warn(\n `conflict detect: <Terminal ${GrammarUtils.toString(terminal)}> \\n`,\n Utils.printAction(exist),\n \"\\n\",\n Utils.printAction(action)\n );\n // #endif\n }\n }\n table.set(terminal, action);\n }\n\n // https://people.cs.pitt.edu/~jmisurda/teaching/cs1622/handouts/cs1622-first_and_follow.pdf\n private computeFirstSet() {\n for (const production of this.grammar.productions.slice(1)) {\n this._computeFirstSetForNT(production.goal);\n }\n }\n\n private _computeFirstSetForNT(NT: NoneTerminal) {\n // circle detect\n const idx = this._firstSetNTStack.findIndex((item) => item === NT);\n if (idx !== -1) {\n const computingFS = this.firstSetMap.get(NT)!;\n const len = this._firstSetNTStack.length;\n for (let i = len - 1; i > idx; i--) {\n const curNT = this._firstSetNTStack[i];\n this.firstSetMap.set(curNT, computingFS);\n }\n return computingFS;\n }\n this._firstSetNTStack.push(NT);\n\n const productionList = this.grammar.getProductionList(NT);\n const firstSet = new Set<Terminal>();\n this.firstSetMap.set(NT, firstSet);\n if (this.grammar.isNullableNT(NT)) firstSet.add(ETokenType.EPSILON);\n\n for (const production of productionList) {\n let i = 0;\n for (; i < production.derivation.length; i++) {\n const gs = production.derivation[i];\n if (GrammarUtils.isTerminal(gs)) {\n firstSet.add(<Terminal>gs);\n break;\n }\n\n const succeedFirstSet = this._computeFirstSetForNT(<NoneTerminal>gs);\n\n for (const item of succeedFirstSet) {\n if (item !== ETokenType.EPSILON) firstSet.add(item);\n }\n if (!this.grammar.isNullableNT(<NoneTerminal>gs)) break;\n }\n if (i === production.derivation.length) firstSet.add(ETokenType.EPSILON);\n }\n\n this._firstSetNTStack.pop();\n return firstSet;\n }\n}\n","import { NoneTerminal, GrammarSymbol } from \"../parser/GrammarSymbol\";\n\nexport default class Production {\n private static _id = 0;\n static pool: Map<number, Production> = new Map();\n\n readonly goal: NoneTerminal;\n readonly derivation: GrammarSymbol[];\n readonly id: number;\n\n constructor(goal: NoneTerminal, derivation: GrammarSymbol[]) {\n this.goal = goal;\n this.derivation = derivation;\n this.id = Production._id++;\n Production.pool.set(this.id, this);\n }\n}\n","import { ETokenType } from \"../common\";\nimport { NoneTerminal, GrammarSymbol } from \"./GrammarSymbol\";\nimport Production from \"../lalr/Production\";\n\nexport class Grammar {\n readonly productions: Production[];\n\n readonly startSymbol: NoneTerminal;\n\n static create(start: NoneTerminal, productions: GrammarSymbol[][]) {\n const _ps = productions.map((gsl) => {\n return new Production(<NoneTerminal>gsl[0], gsl.slice(1));\n });\n return new Grammar(start, _ps);\n }\n\n constructor(start: NoneTerminal, productions: Production[]) {\n this.startSymbol = start;\n productions.unshift(new Production(NoneTerminal.START, [start]));\n this.productions = productions;\n }\n\n getProductionList(nonTerminal: NoneTerminal) {\n return this.productions.filter((item) => item.goal === nonTerminal);\n }\n\n isNullableNT(NT: NoneTerminal) {\n return this.productions.find((item) => item.goal === NT && item.derivation[0] === ETokenType.EPSILON);\n }\n\n getProductionByID(pid: number) {\n return Production.pool.get(pid);\n }\n}\n","// Context Free Grammar of Galacean ShaderLab\nimport { ETokenType } from \"../common\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { ASTNode } from \"../parser/AST\";\nimport { Grammar } from \"../parser/Grammar\";\nimport { GrammarSymbol, NoneTerminal } from \"../parser/GrammarSymbol\";\nimport SemanticAnalyzer, { TranslationRule } from \"../parser/SemanticAnalyzer\";\nimport GrammarUtils from \"./Utils\";\n\nconst productionAndRules: [GrammarSymbol[], TranslationRule | undefined][] = [\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.gs_shader_program,\n [[NoneTerminal.global_declaration], [NoneTerminal.gs_shader_program, NoneTerminal.global_declaration]],\n ASTNode.GLShaderProgram.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_declaration,\n [\n [NoneTerminal.precision_specifier],\n [NoneTerminal.variable_declaration_statement],\n [NoneTerminal.struct_specifier],\n [NoneTerminal.function_definition],\n [NoneTerminal.global_macro_if_statement],\n [NoneTerminal.macro_undef],\n [Keyword.MACRO_DEFINE_EXPRESSION]\n ],\n ASTNode.GlobalDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_symbol,\n [[Keyword.MACRO_CALL]],\n ASTNode.MacroCallSymbol.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_function,\n [\n [NoneTerminal.macro_call_symbol, ETokenType.LEFT_PAREN, ETokenType.RIGHT_PAREN],\n [\n NoneTerminal.macro_call_symbol,\n ETokenType.LEFT_PAREN,\n NoneTerminal.function_call_parameter_list,\n ETokenType.RIGHT_PAREN\n ]\n ],\n ASTNode.MacroCallFunction.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_undef,\n [\n [Keyword.MACRO_UNDEF, ETokenType.ID],\n [Keyword.MACRO_UNDEF, Keyword.MACRO_CALL]\n ],\n ASTNode.MacroUndef.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_push_context,\n [\n [Keyword.MACRO_IF, Keyword.MACRO_CONDITIONAL_EXPRESSION],\n [Keyword.MACRO_IFDEF, ETokenType.ID],\n [Keyword.MACRO_IFNDEF, ETokenType.ID],\n [Keyword.MACRO_IFDEF, NoneTerminal.macro_call_symbol],\n [Keyword.MACRO_IFNDEF, NoneTerminal.macro_call_symbol]\n ],\n ASTNode.MacroPushContext.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_pop_context,\n [[Keyword.MACRO_ENDIF]],\n ASTNode.MacroPopContext.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_elif_expression,\n [[Keyword.MACRO_ELIF, Keyword.MACRO_CONDITIONAL_EXPRESSION]],\n ASTNode.MacroElifExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_else_expression,\n [[Keyword.MACRO_ELSE]],\n ASTNode.MacroElseExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_macro_declaration,\n [[NoneTerminal.global_declaration], [NoneTerminal.global_macro_declaration, NoneTerminal.global_declaration]],\n ASTNode.GlobalMacroDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_macro_if_statement,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.global_macro_declaration, NoneTerminal.global_macro_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.global_macro_branch]\n ],\n ASTNode.GlobalMacroIfStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.global_macro_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.global_macro_declaration, NoneTerminal.global_macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.global_macro_declaration, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.global_macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.GlobalMacroBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.VariableDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_declaration_list,\n [\n [NoneTerminal.variable_declaration],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.variable_declaration_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.VariableDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_statement, [\n [NoneTerminal.variable_declaration_list, ETokenType.SEMICOLON]\n ]),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n [\n [Keyword.VOID],\n [Keyword.FLOAT],\n [Keyword.BOOL],\n [Keyword.INT],\n [Keyword.UINT],\n [Keyword.VEC2],\n [Keyword.VEC3],\n [Keyword.VEC4],\n [Keyword.BVEC2],\n [Keyword.BVEC3],\n [Keyword.BVEC4],\n [Keyword.IVEC2],\n [Keyword.IVEC3],\n [Keyword.IVEC4],\n [Keyword.UVEC2],\n [Keyword.UVEC3],\n [Keyword.UVEC4],\n [Keyword.MAT2],\n [Keyword.MAT3],\n [Keyword.MAT4],\n [Keyword.MAT2X3],\n [Keyword.MAT2X4],\n [Keyword.MAT3X2],\n [Keyword.MAT3X4],\n [Keyword.MAT4X2],\n [Keyword.MAT4X3],\n [Keyword.SAMPLER2D],\n [Keyword.SAMPLER3D],\n [Keyword.SAMPLER_CUBE],\n [Keyword.SAMPLER2D_SHADOW],\n [Keyword.SAMPLER_CUBE_SHADOW],\n [Keyword.SAMPLER2D_ARRAY],\n [Keyword.SAMPLER2D_ARRAY_SHADOW],\n [Keyword.I_SAMPLER2D],\n [Keyword.I_SAMPLER3D],\n [Keyword.I_SAMPLER_CUBE],\n [Keyword.I_SAMPLER2D_ARRAY],\n [Keyword.U_SAMPLER2D],\n [Keyword.U_SAMPLER3D],\n [Keyword.U_SAMPLER_CUBE],\n [Keyword.U_SAMPLER2D_ARRAY]\n ],\n ASTNode.ExtBuiltinTypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier_nonarray,\n [[ETokenType.ID], [NoneTerminal.ext_builtin_type_specifier_nonarray]],\n ASTNode.TypeSpecifierNonArray.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.fully_specified_type,\n [[NoneTerminal.type_specifier], [NoneTerminal.type_qualifier, NoneTerminal.type_specifier]],\n ASTNode.FullySpecifiedType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_specifier,\n [\n [NoneTerminal.type_specifier_nonarray],\n [NoneTerminal.ext_builtin_type_specifier_nonarray, NoneTerminal.array_specifier]\n ],\n ASTNode.TypeSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.type_qualifier,\n [[NoneTerminal.single_type_qualifier], [NoneTerminal.type_qualifier, NoneTerminal.single_type_qualifier]],\n ASTNode.TypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_type_qualifier,\n [\n [NoneTerminal.storage_qualifier],\n [NoneTerminal.precision_qualifier],\n [NoneTerminal.interpolation_qualifier],\n [NoneTerminal.invariant_qualifier],\n [Keyword.PRECISE]\n ],\n ASTNode.SingleTypeQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.storage_qualifier,\n [[Keyword.CONST], [Keyword.IN], [Keyword.INOUT], [Keyword.OUT], [Keyword.CENTROID]],\n // #if _VERBOSE\n ASTNode.StorageQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.interpolation_qualifier,\n [[Keyword.SMOOTH], [Keyword.FLAT]],\n // #if _VERBOSE\n ASTNode.InterpolationQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.invariant_qualifier,\n [[Keyword.INVARIANT]],\n // #if _VERBOSE\n ASTNode.InvariantQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_qualifier,\n [[Keyword.HIGHP], [Keyword.MEDIUMP], [Keyword.LOWP]],\n // #if _VERBOSE\n ASTNode.PrecisionQualifier.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_specifier,\n [\n [\n Keyword.STRUCT,\n ETokenType.ID,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ],\n [\n Keyword.STRUCT,\n ETokenType.LEFT_BRACE,\n NoneTerminal.struct_declaration_list,\n ETokenType.RIGHT_BRACE,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.StructSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration_list,\n [[NoneTerminal.struct_declaration], [NoneTerminal.struct_declaration_list, NoneTerminal.struct_declaration]],\n ASTNode.StructDeclarationList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declaration,\n [\n [NoneTerminal.type_specifier, NoneTerminal.struct_declarator_list, ETokenType.SEMICOLON],\n [\n NoneTerminal.type_qualifier,\n NoneTerminal.type_specifier,\n NoneTerminal.struct_declarator_list,\n ETokenType.SEMICOLON\n ],\n [\n NoneTerminal.layout_qualifier,\n NoneTerminal.type_specifier,\n NoneTerminal.struct_declarator,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.macro_struct_declaration]\n ],\n ASTNode.StructDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_struct_declaration,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.struct_declaration_list, NoneTerminal.macro_struct_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_struct_branch]\n ],\n ASTNode.MacroStructDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_struct_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.struct_declaration_list, NoneTerminal.macro_struct_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.struct_declaration_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_struct_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroStructBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.layout_qualifier,\n [\n [\n Keyword.LAYOUT,\n ETokenType.LEFT_PAREN,\n Keyword.LOCATION,\n ETokenType.EQUAL,\n ETokenType.INT_CONSTANT,\n ETokenType.RIGHT_PAREN\n ]\n ],\n ASTNode.LayoutQualifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator_list,\n [\n [NoneTerminal.struct_declarator],\n [NoneTerminal.struct_declarator_list, ETokenType.COMMA, NoneTerminal.struct_declarator]\n ],\n ASTNode.StructDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.struct_declarator,\n [[ETokenType.ID], [ETokenType.ID, NoneTerminal.array_specifier]],\n ASTNode.StructDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.array_specifier,\n [\n [ETokenType.LEFT_BRACKET, ETokenType.RIGHT_BRACKET],\n [ETokenType.LEFT_BRACKET, NoneTerminal.integer_constant_expression, ETokenType.RIGHT_BRACKET]\n ],\n ASTNode.ArraySpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.STAR], [ETokenType.SLASH], [ETokenType.PERCENT]],\n ASTNode.IntegerConstantExpressionOperator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.integer_constant_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n ETokenType.INT_CONSTANT\n ],\n [\n NoneTerminal.integer_constant_expression,\n NoneTerminal.integer_constant_expression_operator,\n NoneTerminal.variable_identifier\n ]\n ],\n ASTNode.IntegerConstantExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditional_expression,\n [\n [NoneTerminal.logical_or_expression],\n [\n NoneTerminal.logical_or_expression,\n ETokenType.QUESTION,\n NoneTerminal.expression,\n ETokenType.COLON,\n NoneTerminal.assignment_expression\n ]\n ],\n // #if _VERBOSE\n ASTNode.ConditionalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_or_expression,\n [\n [NoneTerminal.logical_xor_expression],\n [NoneTerminal.logical_or_expression, ETokenType.OR_OP, NoneTerminal.logical_xor_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_xor_expression,\n [\n [NoneTerminal.logical_and_expression],\n [NoneTerminal.logical_xor_expression, ETokenType.XOR_OP, NoneTerminal.logical_and_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalXorExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.logical_and_expression,\n [\n [NoneTerminal.inclusive_or_expression],\n [NoneTerminal.logical_and_expression, ETokenType.AND_OP, NoneTerminal.inclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.LogicalAndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.inclusive_or_expression,\n [\n [NoneTerminal.exclusive_or_expression],\n [NoneTerminal.inclusive_or_expression, ETokenType.VERTICAL_BAR, NoneTerminal.exclusive_or_expression]\n ],\n // #if _VERBOSE\n ASTNode.InclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.exclusive_or_expression,\n [\n [NoneTerminal.and_expression],\n [NoneTerminal.exclusive_or_expression, ETokenType.CARET, NoneTerminal.and_expression]\n ],\n // #if _VERBOSE\n ASTNode.ExclusiveOrExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.and_expression,\n [\n [NoneTerminal.equality_expression],\n [NoneTerminal.and_expression, ETokenType.AMPERSAND, NoneTerminal.equality_expression]\n ],\n // #if _VERBOSE\n ASTNode.AndExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.equality_expression,\n [\n [NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.EQ_OP, NoneTerminal.relational_expression],\n [NoneTerminal.equality_expression, ETokenType.NE_OP, NoneTerminal.relational_expression]\n ],\n // #if _VERBOSE\n ASTNode.EqualityExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.relational_expression,\n [\n [NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LEFT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.RIGHT_ANGLE, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.LE_OP, NoneTerminal.shift_expression],\n [NoneTerminal.relational_expression, ETokenType.GE_OP, NoneTerminal.shift_expression]\n ],\n // #if _VERBOSE\n ASTNode.RelationalExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.shift_expression,\n [\n [NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.LEFT_OP, NoneTerminal.additive_expression],\n [NoneTerminal.shift_expression, ETokenType.RIGHT_OP, NoneTerminal.additive_expression]\n ],\n // #if _VERBOSE\n ASTNode.ShiftExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.additive_expression,\n [\n [NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.PLUS, NoneTerminal.multiplicative_expression],\n [NoneTerminal.additive_expression, ETokenType.DASH, NoneTerminal.multiplicative_expression]\n ],\n // #if _VERBOSE\n ASTNode.AdditiveExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.multiplicative_expression,\n [\n [NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.STAR, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.SLASH, NoneTerminal.unary_expression],\n [NoneTerminal.multiplicative_expression, ETokenType.PERCENT, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.MultiplicativeExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_expression,\n [\n [NoneTerminal.postfix_expression],\n [ETokenType.INC_OP, NoneTerminal.unary_expression],\n [ETokenType.DEC_OP, NoneTerminal.unary_expression],\n [NoneTerminal.unary_operator, NoneTerminal.unary_expression]\n ],\n // #if _VERBOSE\n ASTNode.UnaryExpression.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.unary_operator,\n [[ETokenType.PLUS], [ETokenType.DASH], [ETokenType.BANG], [ETokenType.TILDE]],\n // #if _VERBOSE\n ASTNode.UnaryOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.postfix_expression,\n [\n [NoneTerminal.primary_expression],\n [NoneTerminal.postfix_expression, ETokenType.LEFT_BRACKET, NoneTerminal.expression, ETokenType.RIGHT_BRACKET],\n [NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.DOT, ETokenType.ID],\n [NoneTerminal.postfix_expression, ETokenType.DOT, NoneTerminal.function_call],\n [NoneTerminal.postfix_expression, ETokenType.INC_OP],\n [NoneTerminal.postfix_expression, ETokenType.DEC_OP]\n ],\n ASTNode.PostfixExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.primary_expression,\n [\n [NoneTerminal.variable_identifier],\n [ETokenType.INT_CONSTANT],\n [ETokenType.FLOAT_CONSTANT],\n [Keyword.True],\n [Keyword.False],\n [ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.PrimaryExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.expression, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.Expression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_expression,\n [\n [NoneTerminal.conditional_expression],\n [NoneTerminal.unary_expression, NoneTerminal.assignment_operator, NoneTerminal.assignment_expression]\n ],\n ASTNode.AssignmentExpression.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.assignment_operator,\n [\n [ETokenType.EQUAL],\n [ETokenType.MUL_ASSIGN],\n [ETokenType.DIV_ASSIGN],\n [ETokenType.MOD_ASSIGN],\n [ETokenType.ADD_ASSIGN],\n [ETokenType.SUB_ASSIGN],\n [ETokenType.LEFT_ASSIGN],\n [ETokenType.RIGHT_ASSIGN],\n [ETokenType.AND_ASSIGN],\n [ETokenType.XOR_ASSIGN],\n [ETokenType.OR_ASSIGN]\n ],\n // #if _VERBOSE\n ASTNode.AssignmentOperator.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call,\n [[NoneTerminal.function_call_generic]],\n ASTNode.FunctionCall.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_generic,\n [\n [\n NoneTerminal.function_identifier,\n ETokenType.LEFT_PAREN,\n NoneTerminal.function_call_parameter_list,\n ETokenType.RIGHT_PAREN\n ],\n [NoneTerminal.function_identifier, ETokenType.LEFT_PAREN, ETokenType.RIGHT_PAREN],\n [NoneTerminal.function_identifier, Keyword.VOID, ETokenType.RIGHT_PAREN]\n ],\n ASTNode.FunctionCallGeneric.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_call_parameter_list,\n [\n [NoneTerminal.assignment_expression],\n [NoneTerminal.function_call_parameter_list, ETokenType.COMMA, NoneTerminal.assignment_expression],\n [NoneTerminal.macro_call_arg_block],\n [NoneTerminal.function_call_parameter_list, NoneTerminal.macro_call_arg_block]\n ],\n ASTNode.FunctionCallParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_arg_case_list,\n [\n [NoneTerminal.assignment_expression],\n [ETokenType.COMMA, NoneTerminal.assignment_expression],\n [NoneTerminal.macro_call_arg_block],\n [NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_call_arg_block],\n [NoneTerminal.macro_call_arg_case_list, ETokenType.COMMA, NoneTerminal.assignment_expression]\n ],\n ASTNode.MacroCallArgCaseList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_arg_block,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.macro_call_arg_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_call_arg_branch]\n ],\n ASTNode.MacroCallArgBlock.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_call_arg_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_call_arg_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_call_arg_case_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_call_arg_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroCallArgBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_identifier,\n [[NoneTerminal.type_specifier]],\n ASTNode.FunctionIdentifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_definition,\n [[NoneTerminal.function_prototype, NoneTerminal.compound_statement_no_scope]],\n ASTNode.FunctionDefinition.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_prototype,\n [[NoneTerminal.function_declarator, ETokenType.RIGHT_PAREN]],\n ASTNode.FunctionProtoType.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_declarator,\n [[NoneTerminal.function_header], [NoneTerminal.function_header, NoneTerminal.function_parameter_list]],\n ASTNode.FunctionDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_header,\n [[NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.LEFT_PAREN]],\n ASTNode.FunctionHeader.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.function_parameter_list,\n [\n [NoneTerminal.parameter_declaration],\n [NoneTerminal.function_parameter_list, ETokenType.COMMA, NoneTerminal.parameter_declaration],\n [NoneTerminal.macro_param_block],\n [NoneTerminal.function_parameter_list, NoneTerminal.macro_param_block]\n ],\n ASTNode.FunctionParameterList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_param_case_list,\n [\n [NoneTerminal.parameter_declaration],\n [ETokenType.COMMA, NoneTerminal.parameter_declaration],\n [NoneTerminal.macro_param_block],\n [NoneTerminal.macro_param_case_list, NoneTerminal.macro_param_block],\n [NoneTerminal.macro_param_case_list, ETokenType.COMMA, NoneTerminal.parameter_declaration]\n ],\n ASTNode.MacroParamCaseList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_param_block,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.macro_parameter_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_param_case_list, NoneTerminal.macro_parameter_branch]\n ],\n ASTNode.MacroParamBlock.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_parameter_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_param_case_list, NoneTerminal.macro_parameter_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_param_case_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_parameter_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroParameterBranch.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declaration,\n [\n [NoneTerminal.type_qualifier, NoneTerminal.parameter_declarator],\n [NoneTerminal.parameter_declarator],\n [NoneTerminal.macro_call_symbol],\n [NoneTerminal.macro_call_function]\n ],\n ASTNode.ParameterDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.parameter_declarator,\n [\n [NoneTerminal.type_specifier, ETokenType.ID],\n [NoneTerminal.type_specifier, ETokenType.ID, NoneTerminal.array_specifier]\n ],\n ASTNode.ParameterDeclarator.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement_list,\n [[NoneTerminal.statement], [NoneTerminal.statement_list, NoneTerminal.statement]],\n ASTNode.StatementList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.statement,\n [[NoneTerminal.compound_statement], [NoneTerminal.simple_statement]],\n // #if _VERBOSE\n ASTNode.Statement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement_no_scope,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [ETokenType.LEFT_BRACE, NoneTerminal.statement_list, ETokenType.RIGHT_BRACE]\n ],\n ASTNode.CompoundStatementNoScope.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.compound_statement,\n [\n [ETokenType.LEFT_BRACE, ETokenType.RIGHT_BRACE],\n [NoneTerminal.scope_brace, NoneTerminal.statement_list, NoneTerminal.scope_end_brace]\n ],\n // #if _VERBOSE\n ASTNode.CompoundStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.simple_statement,\n [\n [NoneTerminal.declaration],\n [NoneTerminal.expression_statement],\n [NoneTerminal.selection_statement],\n [NoneTerminal.iteration_statement],\n [NoneTerminal.jump_statement],\n [NoneTerminal.macro_if_statement],\n [NoneTerminal.macro_undef],\n [Keyword.MACRO_DEFINE_EXPRESSION]\n ],\n // #if _VERBOSE\n ASTNode.SimpleStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.declaration,\n [\n [NoneTerminal.function_prototype, ETokenType.SEMICOLON],\n [NoneTerminal.init_declarator_list, ETokenType.SEMICOLON],\n [\n Keyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ],\n [NoneTerminal.type_qualifier, ETokenType.ID, ETokenType.SEMICOLON],\n [NoneTerminal.type_qualifier, ETokenType.ID, NoneTerminal.identifier_list, ETokenType.SEMICOLON]\n ],\n ASTNode.Declaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.identifier_list,\n [\n [ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.identifier_list, ETokenType.COMMA, ETokenType.ID]\n ],\n ASTNode.IdentifierList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.init_declarator_list,\n [\n [NoneTerminal.single_declaration],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.init_declarator_list,\n ETokenType.COMMA,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.init_declarator_list, ETokenType.COMMA, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.InitDeclaratorList.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.single_declaration,\n [\n [NoneTerminal.fully_specified_type, ETokenType.ID],\n [NoneTerminal.fully_specified_type, ETokenType.ID, NoneTerminal.array_specifier],\n [\n NoneTerminal.fully_specified_type,\n ETokenType.ID,\n NoneTerminal.array_specifier,\n ETokenType.EQUAL,\n NoneTerminal.initializer\n ],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n ASTNode.SingleDeclaration.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer,\n [\n [NoneTerminal.assignment_expression],\n [ETokenType.LEFT_BRACE, NoneTerminal.initializer_list, ETokenType.RIGHT_BRACE]\n ],\n // #if _VERBOSE\n ASTNode.Initializer.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.initializer_list,\n [[NoneTerminal.initializer], [NoneTerminal.initializer_list, ETokenType.COMMA, NoneTerminal.initializer]],\n // #if _VERBOSE\n ASTNode.InitializerList.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.expression_statement,\n [[ETokenType.SEMICOLON], [NoneTerminal.expression, ETokenType.SEMICOLON]],\n // #if _VERBOSE\n ASTNode.ExpressionStatement.pool\n // #endif\n ),\n\n // dangling else ambiguity\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.selection_statement,\n [\n [Keyword.IF, ETokenType.LEFT_PAREN, NoneTerminal.expression, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n Keyword.IF,\n ETokenType.LEFT_PAREN,\n NoneTerminal.expression,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement,\n Keyword.ELSE,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.SelectionStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.iteration_statement,\n [\n [Keyword.WHILE, ETokenType.LEFT_PAREN, NoneTerminal.condition, ETokenType.RIGHT_PAREN, NoneTerminal.statement],\n [\n Keyword.FOR,\n ETokenType.LEFT_PAREN,\n NoneTerminal.for_init_statement,\n NoneTerminal.for_rest_statement,\n ETokenType.RIGHT_PAREN,\n NoneTerminal.statement\n ]\n ],\n // #if _VERBOSE\n ASTNode.IterationStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.precision_specifier,\n [\n [\n Keyword.PRECISION,\n NoneTerminal.precision_qualifier,\n NoneTerminal.ext_builtin_type_specifier_nonarray,\n ETokenType.SEMICOLON\n ]\n ],\n ASTNode.PrecisionSpecifier.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_init_statement,\n [[NoneTerminal.expression_statement], [NoneTerminal.declaration]],\n // #if _VERBOSE\n ASTNode.ForInitStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.condition,\n [\n [NoneTerminal.expression],\n [NoneTerminal.fully_specified_type, ETokenType.ID, ETokenType.EQUAL, NoneTerminal.initializer]\n ],\n // #if _VERBOSE\n ASTNode.Condition.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.for_rest_statement,\n [\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON],\n [NoneTerminal.conditionopt, ETokenType.SEMICOLON, NoneTerminal.expression]\n ],\n // #if _VERBOSE\n ASTNode.ForRestStatement.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.conditionopt,\n [[ETokenType.EPSILON], [NoneTerminal.condition]],\n // #if _VERBOSE\n ASTNode.ConditionOpt.pool\n // #endif\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.jump_statement,\n [\n [Keyword.CONTINUE, ETokenType.SEMICOLON],\n [Keyword.BREAK, ETokenType.SEMICOLON],\n [Keyword.RETURN, ETokenType.SEMICOLON],\n [Keyword.RETURN, NoneTerminal.expression, ETokenType.SEMICOLON],\n [Keyword.DISCARD, ETokenType.SEMICOLON]\n ],\n ASTNode.JumpStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_brace,\n [[ETokenType.LEFT_BRACE]],\n ASTNode.ScopeBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.scope_end_brace,\n [[ETokenType.RIGHT_BRACE]],\n ASTNode.ScopeEndBrace.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.variable_identifier,\n [[ETokenType.ID], [NoneTerminal.macro_call_symbol], [NoneTerminal.macro_call_function]],\n ASTNode.VariableIdentifier.pool\n ),\n\n // Macros ...\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_if_statement,\n [\n [NoneTerminal.macro_push_context, NoneTerminal.statement_list, NoneTerminal.macro_branch],\n [NoneTerminal.macro_push_context, NoneTerminal.macro_branch]\n ],\n ASTNode.MacroIfStatement.pool\n ),\n\n ...GrammarUtils.createProductionWithOptions(\n NoneTerminal.macro_branch,\n [\n [NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.statement_list, NoneTerminal.macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.statement_list, NoneTerminal.macro_pop_context],\n [NoneTerminal.macro_elif_expression, NoneTerminal.macro_branch],\n [NoneTerminal.macro_else_expression, NoneTerminal.macro_pop_context]\n ],\n ASTNode.MacroBranch.pool\n )\n];\n\nconst createGrammar = () =>\n Grammar.create(\n NoneTerminal.gs_shader_program,\n productionAndRules.map((item) => item[0])\n );\n\nconst addTranslationRule = (sa: SemanticAnalyzer) => {\n for (let i = 0; i < productionAndRules.length; i++) {\n const rule = productionAndRules[i][1];\n if (rule) {\n sa.addTranslationRule(i, rule);\n }\n }\n};\n\nexport { addTranslationRule, createGrammar };\n","import { Logger } from \"@galacean/engine\";\nimport { ETokenType } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { GSError, GSErrorName } from \"../GSError\";\nimport { LALR1 } from \"../lalr\";\nimport { addTranslationRule, createGrammar } from \"../lalr/CFG\";\nimport { EAction, StateActionTable, StateGotoTable } from \"../lalr/types\";\nimport { MacroDefineList } from \"../Preprocessor\";\nimport { ParserUtils } from \"../ParserUtils\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { ASTNode, TreeNode } from \"./AST\";\nimport { Grammar } from \"./Grammar\";\nimport { GrammarSymbol, NoneTerminal } from \"./GrammarSymbol\";\nimport SematicAnalyzer from \"./SemanticAnalyzer\";\nimport { TraceStackItem } from \"./types\";\n\n/**\n * The syntax parser and sematic analyzer of `ShaderLab` compiler\n */\nexport class ShaderTargetParser {\n readonly actionTable: StateActionTable;\n readonly gotoTable: StateGotoTable;\n readonly grammar: Grammar;\n readonly sematicAnalyzer: SematicAnalyzer;\n private _traceBackStack: (TraceStackItem | number)[] = [];\n\n private get curState() {\n return this._traceBackStack[this._traceBackStack.length - 1] as number;\n }\n private get stateActionTable() {\n return this.actionTable.get(this.curState)!;\n }\n private get stateGotoTable() {\n return this.gotoTable.get(this.curState);\n }\n\n // #if _VERBOSE\n /** @internal */\n get errors() {\n return this.sematicAnalyzer.errors;\n }\n // #endif\n\n static _singleton: ShaderTargetParser;\n\n static create() {\n if (!this._singleton) {\n const grammar = createGrammar();\n const generator = new LALR1(grammar);\n generator.generate();\n this._singleton = new ShaderTargetParser(generator.actionTable, generator.gotoTable, grammar);\n addTranslationRule(this._singleton.sematicAnalyzer);\n }\n\n return this._singleton;\n }\n\n private constructor(actionTable: StateActionTable, gotoTable: StateGotoTable, grammar: Grammar) {\n this.actionTable = actionTable;\n this.gotoTable = gotoTable;\n this.grammar = grammar;\n this.sematicAnalyzer = new SematicAnalyzer();\n }\n\n parse(tokens: Generator<BaseToken, BaseToken>, macroDefineList: MacroDefineList): ASTNode.GLShaderProgram | null {\n this.sematicAnalyzer.reset(macroDefineList);\n const start = performance.now();\n const { _traceBackStack: traceBackStack, sematicAnalyzer } = this;\n traceBackStack.push(0);\n\n let nextToken = tokens.next();\n let loopCount = 0;\n while (true) {\n loopCount += 1;\n const token = nextToken.value;\n\n const actionInfo = this.stateActionTable.get(token.type);\n if (actionInfo?.action === EAction.Shift) {\n traceBackStack.push(token, actionInfo.target!);\n nextToken = tokens.next();\n } else if (actionInfo?.action === EAction.Accept) {\n Logger.info(\n `[Task - AST compilation] Accept! State automata run ${loopCount} times! cost time ${\n performance.now() - start\n }ms`\n );\n sematicAnalyzer.acceptRule?.(sematicAnalyzer);\n return sematicAnalyzer.semanticStack.pop() as ASTNode.GLShaderProgram;\n } else if (actionInfo?.action === EAction.Reduce) {\n const target = actionInfo.target!;\n const reduceProduction = this.grammar.getProductionByID(target)!;\n const translationRule = sematicAnalyzer.getTranslationRule(reduceProduction.id);\n\n const values: (TreeNode | BaseToken)[] = [];\n\n for (let i = reduceProduction.derivation.length - 1; i >= 0; i--) {\n if (reduceProduction.derivation[i] === ETokenType.EPSILON) continue;\n traceBackStack.pop();\n const token = traceBackStack.pop();\n if (token instanceof BaseToken) {\n values.unshift(token);\n } else {\n const astNode = sematicAnalyzer.semanticStack.pop()!;\n values.unshift(astNode);\n }\n }\n translationRule?.(sematicAnalyzer, ...values);\n\n const gotoTable = this.stateGotoTable;\n traceBackStack.push(reduceProduction.goal);\n\n const nextState = gotoTable?.get(reduceProduction.goal)!;\n traceBackStack.push(nextState);\n continue;\n } else {\n const error = ShaderLabUtils.createGSError(\n `Unexpected token ${token.lexeme}`,\n GSErrorName.CompilationError,\n ShaderLab._processingPassText,\n token.location\n );\n // #if _VERBOSE\n this.sematicAnalyzer.errors.push(<GSError>error);\n // #endif\n return null;\n }\n }\n }\n\n // #if _VERBOSE\n private _printStack(nextToken: BaseToken) {\n let str = \"\";\n for (let i = 0; i < this._traceBackStack.length - 1; i++) {\n const state = <NoneTerminal>this._traceBackStack[i++];\n const token = this._traceBackStack[i];\n str += `State${state} - ${(<BaseToken>token).lexeme ?? ParserUtils.toString(token as GrammarSymbol)}; `;\n }\n str += `State${this._traceBackStack[this._traceBackStack.length - 1]} --- ${nextToken.lexeme}`;\n Logger.info(str);\n }\n // #endif\n}\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","import { IRenderStates, IShaderPassSource, IShaderSource, ISubShaderSource } from \"@galacean/engine-design\";\n\nexport class ShaderSourceFactory {\n static createRenderStates(): IRenderStates {\n return {\n constantMap: {},\n variableMap: {}\n };\n }\n\n static createShaderSource(name: string): IShaderSource {\n return {\n name,\n subShaders: [],\n pendingContents: [],\n renderStates: this.createRenderStates()\n };\n }\n\n static createSubShaderSource(name: string): ISubShaderSource {\n return {\n name,\n passes: [],\n pendingContents: [],\n tags: {},\n renderStates: this.createRenderStates()\n };\n }\n\n static createShaderPassSource(name: string): IShaderPassSource {\n return {\n name,\n pendingContents: [],\n tags: {},\n renderStates: this.createRenderStates()\n } as IShaderPassSource;\n }\n\n static createUsePass(name: string): IShaderPassSource {\n return {\n name,\n pendingContents: [],\n isUsePass: true,\n tags: {},\n renderStates: this.createRenderStates()\n } as IShaderPassSource;\n }\n}\n","import { IBaseSymbol } from \"../common/IBaseSymbol\";\n\nexport class ShaderSourceSymbol implements IBaseSymbol {\n public isInMacroBranch: boolean = false;\n\n constructor(\n public ident: string,\n public type: number,\n public value?: any\n ) {}\n\n set(ident: string, type: number, value?: any): void {\n this.ident = ident;\n this.type = type;\n this.value = value;\n }\n\n equal(other: ShaderSourceSymbol): boolean {\n return this.type === other.type;\n }\n}\n","import { Color } from \"@galacean/engine\";\nimport { ETokenType, ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { GSErrorName } from \"../GSError\";\nimport { ShaderLab } from \"../ShaderLab\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\n\nexport default class SourceLexer extends BaseLexer {\n hasPendingContent = false;\n\n private static _keywordLexemeTable = <Record<string, Keyword>>{\n RenderQueueType: Keyword.GSRenderQueueType,\n BlendState: Keyword.GSBlendState,\n DepthState: Keyword.GSDepthState,\n StencilState: Keyword.GSStencilState,\n RasterState: Keyword.GSRasterState,\n EditorProperties: Keyword.GSEditorProperties,\n EditorMacros: Keyword.GSEditorMacros,\n Editor: Keyword.GSEditor,\n Tags: Keyword.GSTags,\n VertexShader: Keyword.GSVertexShader,\n FragmentShader: Keyword.GSFragmentShader,\n SubShader: Keyword.GSSubShader,\n Pass: Keyword.GSPass,\n BlendFactor: Keyword.GSBlendFactor,\n BlendOperation: Keyword.GSBlendOperation,\n Bool: Keyword.GSBool,\n Number: Keyword.GSNumber,\n Color: Keyword.GSColor,\n CompareFunction: Keyword.GSCompareFunction,\n StencilOperation: Keyword.GSStencilOperation,\n CullMode: Keyword.GSCullMode,\n UsePass: Keyword.GSUsePass,\n\n true: Keyword.True,\n false: Keyword.False\n };\n\n private static _symbolLexemeTable = <Record<string, Keyword>>{\n \"{\": Keyword.LeftBrace,\n \"}\": Keyword.RightBrace,\n \"=\": Keyword.Equal\n };\n\n private static _isWordSeparatorChar(charCode: number): boolean {\n return (\n charCode === 123 || // {\n charCode === 125 || // }\n charCode === 61 || // =\n charCode === 59 || // ;\n charCode === 46 || // . CullMode.Back\n charCode === 91 || // [ Enabled[0],\n charCode === 40 // ( Color(1.0, 1.0, 1.0, 1.0);\n );\n }\n\n private static _scanDigits(source: string, startIndex: number): number {\n let currentIndex = startIndex;\n while (currentIndex < source.length) {\n const charCode = source.charCodeAt(currentIndex);\n if (BaseLexer.isDigit(charCode)) {\n currentIndex++;\n } else {\n break;\n }\n }\n return currentIndex;\n }\n\n scanNumber(): number {\n this.skipCommentsAndSpace();\n const start = this._currentIndex;\n const source = this._source;\n let index = this._currentIndex;\n\n // Scan integer part\n index = SourceLexer._scanDigits(source, index);\n\n // Scan decimal part if present\n if (source[index] === \".\") {\n index = SourceLexer._scanDigits(source, index + 1);\n }\n\n this.advance(index - this._currentIndex);\n return Number(source.substring(start, index));\n }\n\n scanColor(): Color {\n this.scanLexeme(\"(\");\n\n let r = 0;\n let g = 0;\n let b = 0;\n let a = 1;\n\n r = this.scanNumber();\n this.skipCommentsAndSpace();\n if (this.peek(1) !== \")\") {\n this.scanLexeme(\",\");\n g = this.scanNumber();\n this.skipCommentsAndSpace();\n if (this.peek(1) !== \")\") {\n this.scanLexeme(\",\");\n b = this.scanNumber();\n this.skipCommentsAndSpace();\n if (this.peek(1) !== \")\") {\n this.scanLexeme(\",\");\n a = this.scanNumber();\n this.skipCommentsAndSpace();\n }\n }\n }\n\n this.scanLexeme(\")\");\n return new Color(r, g, b, a);\n }\n\n override scanToken(): BaseToken {\n while (true) {\n this.skipCommentsAndSpace();\n\n if (this.isEnd()) {\n return;\n }\n\n const start = this.getShaderPosition(0);\n if (BaseLexer.isAlpha(this.getCurCharCode())) {\n const wordToken = this._scanWord(start);\n if (wordToken !== null) {\n return wordToken;\n }\n this.hasPendingContent = true;\n continue; // Continue loop to scan next token if word was invalid\n }\n\n const currentChar = this.getCurChar();\n const symbolKeyword = SourceLexer._symbolLexemeTable[currentChar];\n if (symbolKeyword !== undefined) {\n this.advance(1);\n const token = BaseToken.pool.get();\n token.set(symbolKeyword, currentChar, start);\n return token;\n }\n\n // Skip unrecognized character and continue\n this.advance(1);\n }\n }\n\n // #if _VERBOSE\n scanToCharacter(char: string): void {\n while (this.getCurChar() !== char && !this.isEnd()) {\n this.advance(1);\n }\n this.advance(1);\n }\n // #endif\n\n createCompileError(message: string, location?: ShaderPosition | ShaderRange) {\n return ShaderLabUtils.createGSError(\n message,\n GSErrorName.CompilationError,\n this.source,\n location ?? this.getShaderPosition(0)\n );\n }\n\n private _scanWord(start: ShaderPosition): BaseToken | null {\n // Scan the complete word first\n while (BaseLexer.isAlnum(this.getCurCharCode()) && !this.isEnd()) {\n this.advance(1);\n }\n const end = this.getShaderPosition(0);\n\n // Validate both boundaries in one optimized call\n if (!this._validateWordBoundaries(start.index, end.index)) {\n return null; // Invalid word due to boundary violation\n }\n\n const lexeme = this._source.substring(start.index, end.index);\n const tokenType = SourceLexer._keywordLexemeTable[lexeme] ?? ETokenType.ID;\n const range = ShaderLab.createRange(start, end);\n const token = BaseToken.pool.get();\n token.set(tokenType, lexeme, range);\n return token;\n }\n\n private _validateWordBoundaries(startIndex: number, endIndex: number): boolean {\n const source = this._source;\n\n // Check previous boundary\n if (startIndex > 0) {\n const prevCharCode = source.charCodeAt(startIndex - 1);\n if (!this._isValidWordBoundary(prevCharCode)) {\n return false;\n }\n }\n\n // Check next boundary\n if (endIndex < source.length) {\n const nextCharCode = source.charCodeAt(endIndex);\n if (!this._isValidWordBoundary(nextCharCode)) {\n return false;\n }\n }\n\n return true;\n }\n\n private _isValidWordBoundary(charCode: number): boolean {\n return BaseLexer.isWhiteSpaceChar(charCode, true) || SourceLexer._isWordSeparatorChar(charCode);\n }\n}\n","import {\n BlendFactor,\n BlendOperation,\n Color,\n CompareFunction,\n CullMode,\n Logger,\n RenderQueueType,\n RenderStateElementKey,\n StencilOperation\n} from \"@galacean/engine\";\nimport { IRenderStates, IShaderPassSource, IShaderSource, IStatement, ISubShaderSource } from \"@galacean/engine-design\";\nimport { ETokenType, ShaderPosition, ShaderRange } from \"../common\";\nimport { BaseToken } from \"../common/BaseToken\";\nimport { SymbolTableStack } from \"../common/SymbolTableStack\";\nimport { GSErrorName } from \"../GSError\";\n// #if _VERBOSE\nimport { GSError } from \"../GSError\";\n// #endif\nimport { BaseLexer } from \"../common/BaseLexer\";\nimport { Keyword } from \"../common/enums/Keyword\";\nimport { SymbolTable } from \"../common/SymbolTable\";\nimport { ShaderLabUtils } from \"../ShaderLabUtils\";\nimport { ShaderSourceFactory } from \"./ShaderSourceFactory\";\nimport { ShaderSourceSymbol } from \"./ShaderSourceSymbol\";\nimport SourceLexer from \"./SourceLexer\";\n\n/**\n * @internal\n */\nexport class ShaderSourceParser {\n static readonly errors = new Array<GSError>();\n\n private static _renderStateConstMap = <Record<string, Record<string, number | string | boolean>>>{\n RenderQueueType,\n CompareFunction,\n StencilOperation,\n BlendOperation,\n BlendFactor,\n CullMode\n };\n private static _symbolTableStack = new SymbolTableStack<ShaderSourceSymbol, SymbolTable<ShaderSourceSymbol>>();\n private static _lexer = new SourceLexer();\n private static _lookupSymbol = new ShaderSourceSymbol(\"\", null);\n\n static parse(sourceCode: string): IShaderSource {\n const startTime = performance.now();\n\n // Clear previous data\n this.errors.length = 0;\n this._symbolTableStack.clear();\n this._pushScope();\n\n const lexer = this._lexer;\n lexer.setSource(sourceCode);\n\n const shaderSource = this._parseShader(lexer);\n\n const shaderPendingContents = shaderSource.pendingContents;\n const shaderRenderStates = shaderSource.renderStates;\n for (let i = 0, n = shaderSource.subShaders.length; i < n; i++) {\n const subShader = shaderSource.subShaders[i];\n const curSubShaderGlobalStatements = shaderPendingContents.concat(subShader.pendingContents);\n const globalSubShaderStates = {\n constantMap: { ...shaderRenderStates.constantMap },\n variableMap: { ...shaderRenderStates.variableMap }\n };\n this._mergeRenderStates(globalSubShaderStates, subShader.renderStates);\n\n for (let j = 0, m = subShader.passes.length; j < m; j++) {\n const pass = subShader.passes[j];\n const globalPassRenderStates = {\n constantMap: { ...globalSubShaderStates.constantMap },\n variableMap: { ...globalSubShaderStates.variableMap }\n };\n this._mergeRenderStates(globalPassRenderStates, pass.renderStates);\n pass.renderStates = globalPassRenderStates;\n\n if (pass.isUsePass) continue;\n const passGlobalStatements = curSubShaderGlobalStatements.concat(pass.pendingContents);\n pass.contents = passGlobalStatements.map((item) => item.content).join(\"\\n\");\n }\n }\n\n Logger.info(`[Task - Source compilation] cost time ${performance.now() - startTime}ms`);\n return shaderSource;\n }\n\n private static _parseShader(lexer: SourceLexer): IShaderSource {\n // Parse shader header\n lexer.scanLexeme(\"Shader\");\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n const shaderSource = ShaderSourceFactory.createShaderSource(name);\n lexer.scanLexeme(\"{\");\n\n let braceLevel = 1;\n lexer.skipCommentsAndSpace();\n let start = lexer.getShaderPosition(0);\n\n const { pendingContents } = shaderSource;\n while (true) {\n const token = lexer.scanToken();\n switch (token.type) {\n case Keyword.GSSubShader:\n this._addPendingContents(start, token.lexeme.length, pendingContents);\n const subShader = this._parseSubShader();\n shaderSource.subShaders.push(subShader);\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.GSEditorProperties:\n case Keyword.GSEditorMacros:\n case Keyword.GSEditor:\n this._addPendingContents(start, token.lexeme.length, pendingContents);\n lexer.scanPairedChar(\"{\", \"}\", true, false);\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.LeftBrace:\n ++braceLevel;\n break;\n case Keyword.RightBrace:\n if (--braceLevel === 0) {\n this._addPendingContents(start, token.lexeme.length, pendingContents);\n this._popScope();\n return shaderSource;\n }\n break;\n default:\n start = this._parseRenderState(token, start, pendingContents, shaderSource.renderStates);\n }\n }\n }\n\n private static _parseRenderStateDeclarationOrAssignment(outRenderStates: IRenderStates, stateToken: BaseToken): void {\n const lexer = this._lexer;\n const token = lexer.scanToken();\n if (token.type === ETokenType.ID) {\n // Declaration\n lexer.scanLexeme(\"{\");\n const renderState = this._parseRenderStateProperties(stateToken.lexeme);\n const symbol = new ShaderSourceSymbol(token.lexeme, stateToken.type, renderState);\n this._symbolTableStack.insert(symbol);\n } else if (token.lexeme === \"=\") {\n // Check if it's direct assignment syntax sugar or variable assignment\n const nextToken = lexer.scanToken();\n\n let renderState: IRenderStates;\n if (nextToken.lexeme === \"{\") {\n // Syntax: DepthState = { ... }\n renderState = this._parseRenderStateProperties(stateToken.lexeme);\n } else {\n // Syntax: DepthState = customDepthState;\n lexer.scanLexeme(\";\");\n const lookupSymbol = this._lookupSymbol;\n lookupSymbol.set(nextToken.lexeme, stateToken.type);\n const sm = this._symbolTableStack.lookup(lookupSymbol);\n if (!sm?.value) {\n this._createCompileError(`Invalid \"${stateToken.lexeme}\" variable: ${nextToken.lexeme}`, nextToken.location);\n // #if _VERBOSE\n return;\n // #endif\n }\n renderState = sm.value as IRenderStates;\n }\n this._mergeRenderStates(outRenderStates, renderState);\n }\n }\n\n private static _mergeRenderStates(outTarget: IRenderStates, source: IRenderStates): void {\n // For each key in the source, remove it from the opposite map in target to ensure proper override\n const { constantMap: targetConstantMap, variableMap: targetVariableMap } = outTarget;\n const { constantMap: sourceConstantMap, variableMap: sourceVariableMap } = source;\n\n for (const key in sourceConstantMap) {\n delete targetVariableMap[key];\n targetConstantMap[key] = sourceConstantMap[key];\n }\n\n for (const key in sourceVariableMap) {\n delete targetConstantMap[key];\n targetVariableMap[key] = sourceVariableMap[key];\n }\n }\n\n private static _parseVariableDeclaration(): void {\n const lexer = this._lexer;\n const token = lexer.scanToken();\n lexer.scanLexeme(\";\");\n const symbol = new ShaderSourceSymbol(token.lexeme, token.type);\n this._symbolTableStack.insert(symbol);\n }\n\n private static _pushScope(): void {\n const symbolTable = new SymbolTable<ShaderSourceSymbol>();\n this._symbolTableStack.pushScope(symbolTable);\n }\n\n private static _popScope(): void {\n this._symbolTableStack.popScope();\n }\n\n private static _parseRenderStateProperties(state: string): IRenderStates {\n const lexer = this._lexer;\n const renderStates = ShaderSourceFactory.createRenderStates();\n while (lexer.getCurChar() !== \"}\") {\n this._parseRenderStateProperty(state, renderStates);\n lexer.skipCommentsAndSpace();\n }\n lexer.advance(1);\n return renderStates;\n }\n\n private static _createCompileError(message: string, location?: ShaderPosition | ShaderRange): void {\n const error = this._lexer.createCompileError(message, location);\n // #if _VERBOSE\n this.errors.push(<GSError>error);\n // #endif\n }\n\n private static _parseRenderStateProperty(stateLexeme: string, out: IRenderStates): void {\n const lexer = this._lexer;\n const propertyToken = lexer.scanToken();\n const propertyLexeme = propertyToken.lexeme;\n let stateElementKey = propertyLexeme;\n if (stateLexeme === \"BlendState\" && propertyLexeme !== \"BlendColor\" && propertyLexeme !== \"AlphaToCoverage\") {\n let keyIndex = 0;\n const scannedLexeme = lexer.scanTwoExpectedLexemes(\"[\", \"=\");\n if (scannedLexeme === \"[\") {\n keyIndex = lexer.scanNumber();\n lexer.scanLexeme(\"]\");\n lexer.scanLexeme(\"=\");\n } else if (scannedLexeme !== \"=\") {\n this._createCompileError(`Invalid syntax, expect '[' or '=', but got unexpected token`);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n stateElementKey += keyIndex;\n } else {\n lexer.scanLexeme(\"=\");\n }\n\n const renderStateElementKey = RenderStateElementKey[stateLexeme + stateElementKey];\n if (renderStateElementKey === undefined) {\n this._createCompileError(`Invalid render state property ${propertyLexeme}`);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n\n lexer.skipCommentsAndSpace();\n let propertyValue: number | string | boolean | Color;\n\n const curCharCode = lexer.getCurCharCode();\n if (BaseLexer.isDigit(curCharCode) || curCharCode === 46) {\n // Digit or '.'\n propertyValue = lexer.scanNumber();\n } else {\n const valueToken = lexer.scanToken();\n const valueTokenType = valueToken.type;\n\n if (valueTokenType === Keyword.True) {\n propertyValue = true;\n } else if (valueTokenType === Keyword.False) {\n propertyValue = false;\n } else if (valueTokenType === Keyword.GSColor) {\n propertyValue = lexer.scanColor();\n } else if (lexer.getCurChar() === \".\") {\n lexer.advance(1);\n const constValueToken = lexer.scanToken();\n propertyValue = this._renderStateConstMap[valueToken.lexeme]?.[constValueToken.lexeme];\n if (propertyValue == undefined) {\n this._createCompileError(\n `Invalid engine constant: ${valueToken.lexeme}.${constValueToken.lexeme}`,\n constValueToken.location\n );\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n } else {\n propertyValue = valueToken.lexeme;\n const lookupSymbol = this._lookupSymbol;\n lookupSymbol.set(valueToken.lexeme, ETokenType.ID);\n if (!this._symbolTableStack.lookup(lookupSymbol)) {\n this._createCompileError(`Invalid ${stateLexeme} variable: ${valueToken.lexeme}`, valueToken.location);\n // #if _VERBOSE\n lexer.scanToCharacter(\";\");\n return;\n // #endif\n }\n }\n }\n lexer.scanLexeme(\";\");\n if (typeof propertyValue === \"string\") {\n out.variableMap[renderStateElementKey] = propertyValue;\n } else {\n out.constantMap[renderStateElementKey] = propertyValue;\n }\n }\n\n private static _parseRenderQueueDeclarationOrAssignment(renderStates: IRenderStates): void {\n const lexer = this._lexer;\n const token = lexer.scanToken();\n if (token.type === ETokenType.ID) {\n // Declaration\n lexer.scanLexeme(\";\");\n const symbol = new ShaderSourceSymbol(token.lexeme, Keyword.GSRenderQueueType);\n this._symbolTableStack.insert(symbol);\n return;\n }\n\n if (token.lexeme !== \"=\") {\n this._createCompileError(`Invalid syntax, expect character '=', but got ${token.lexeme}`, token.location);\n // #if _VERBOSE\n return;\n // #endif\n }\n const word = lexer.scanToken();\n lexer.scanLexeme(\";\");\n const value = this._renderStateConstMap.RenderQueueType[word.lexeme];\n const key = RenderStateElementKey.RenderQueueType;\n if (value == undefined) {\n renderStates.variableMap[key] = word.lexeme;\n const lookupSymbol = this._lookupSymbol;\n lookupSymbol.set(word.lexeme, Keyword.GSRenderQueueType);\n const sm = this._symbolTableStack.lookup(lookupSymbol);\n if (!sm) {\n this._createCompileError(`Invalid RenderQueueType variable: ${word.lexeme}`, word.location);\n // #if _VERBOSE\n return;\n // #endif\n }\n } else {\n renderStates.constantMap[key] = value;\n }\n }\n\n private static _addPendingContents(\n start: ShaderPosition,\n backOffset: number,\n outPendingContents: IStatement[]\n ): void {\n const lexer = this._lexer;\n if (lexer.hasPendingContent) {\n const endIndex = lexer.currentIndex - backOffset;\n outPendingContents.push({\n range: { start, end: { ...lexer.getShaderPosition(0), index: endIndex - 1 } },\n content: lexer.source.substring(start.index, endIndex - 1)\n });\n lexer.hasPendingContent = false;\n }\n }\n\n private static _parseSubShader(): ISubShaderSource {\n const lexer = this._lexer;\n this._pushScope();\n\n let braceLevel = 1;\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n const subShaderSource = ShaderSourceFactory.createSubShaderSource(name);\n lexer.scanLexeme(\"{\");\n\n lexer.skipCommentsAndSpace();\n let start = lexer.getShaderPosition(0);\n\n while (true) {\n const token = lexer.scanToken();\n switch (token.type) {\n case Keyword.GSPass:\n this._addPendingContents(start, token.lexeme.length, subShaderSource.pendingContents);\n const pass = this._parsePass();\n subShaderSource.passes.push(pass);\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.GSUsePass:\n this._addPendingContents(start, token.lexeme.length, subShaderSource.pendingContents);\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n subShaderSource.passes.push(ShaderSourceFactory.createUsePass(name));\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.LeftBrace:\n ++braceLevel;\n break;\n case Keyword.RightBrace:\n if (--braceLevel === 0) {\n this._addPendingContents(start, token.lexeme.length, subShaderSource.pendingContents);\n this._popScope();\n return subShaderSource;\n }\n break;\n default:\n start = this._parseRenderStateAndTags(\n token,\n start,\n subShaderSource.pendingContents,\n subShaderSource.renderStates,\n subShaderSource.tags\n );\n }\n }\n }\n\n private static _parseTags(tags: Record<string, number | string | boolean>): void {\n const lexer = this._lexer;\n lexer.scanLexeme(\"{\");\n while (true) {\n const ident = lexer.scanToken();\n lexer.scanLexeme(\"=\");\n const value = lexer.scanPairedChar('\"', '\"', false, false);\n lexer.skipCommentsAndSpace();\n\n tags[ident.lexeme] = value;\n\n if (lexer.peek(1) === \"}\") {\n lexer.advance(1);\n return;\n }\n lexer.scanLexeme(\",\");\n }\n }\n\n private static _parsePass(): IShaderPassSource {\n this._pushScope();\n const lexer = this._lexer;\n\n const name = lexer.scanPairedChar('\"', '\"', false, false);\n const passSource = ShaderSourceFactory.createShaderPassSource(name);\n lexer.scanLexeme(\"{\");\n let braceLevel = 1;\n\n lexer.skipCommentsAndSpace();\n let start = lexer.getShaderPosition(0);\n\n while (true) {\n const token = lexer.scanToken();\n switch (token.type) {\n case Keyword.GSVertexShader:\n case Keyword.GSFragmentShader:\n this._addPendingContents(start, token.lexeme.length, passSource.pendingContents);\n lexer.scanLexeme(\"=\");\n const entry = lexer.scanToken();\n if (passSource[token.lexeme]) {\n const error = ShaderLabUtils.createGSError(\n \"Reassign main entry\",\n GSErrorName.CompilationError,\n lexer.source,\n lexer.getShaderPosition(0)\n );\n // #if _VERBOSE\n Logger.error(error.toString());\n throw error;\n // #endif\n }\n const key = token.type === Keyword.GSVertexShader ? \"vertexEntry\" : \"fragmentEntry\";\n passSource[key] = entry.lexeme;\n lexer.scanLexeme(\";\");\n start = lexer.getShaderPosition(0);\n break;\n case Keyword.LeftBrace:\n ++braceLevel;\n break;\n case Keyword.RightBrace:\n if (--braceLevel === 0) {\n this._addPendingContents(start, token.lexeme.length, passSource.pendingContents);\n this._popScope();\n return passSource;\n }\n break;\n default:\n start = this._parseRenderStateAndTags(\n token,\n start,\n passSource.pendingContents,\n passSource.renderStates,\n passSource.tags\n );\n }\n }\n }\n\n private static _parseRenderStateAndTags(\n token: BaseToken<number>,\n start: ShaderPosition,\n outGlobalContents: IStatement[],\n outRenderStates: IRenderStates,\n outTags: Record<string, number | string | boolean>\n ): ShaderPosition {\n switch (token.type) {\n case Keyword.GSTags:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseTags(outTags);\n start = this._lexer.getShaderPosition(0);\n break;\n default:\n start = this._parseRenderState(token, start, outGlobalContents, outRenderStates);\n }\n return start;\n }\n\n private static _parseRenderState(\n token: BaseToken<number>,\n start: ShaderPosition,\n outGlobalContents: IStatement[],\n outRenderStates: IRenderStates\n ): ShaderPosition {\n switch (token.type) {\n case Keyword.GSBlendState:\n case Keyword.GSDepthState:\n case Keyword.GSRasterState:\n case Keyword.GSStencilState:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseRenderStateDeclarationOrAssignment(outRenderStates, token);\n start = this._lexer.getShaderPosition(0);\n break;\n case Keyword.GSBlendFactor:\n case Keyword.GSBlendOperation:\n case Keyword.GSBool:\n case Keyword.GSNumber:\n case Keyword.GSColor:\n case Keyword.GSCompareFunction:\n case Keyword.GSStencilOperation:\n case Keyword.GSCullMode:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseVariableDeclaration();\n start = this._lexer.getShaderPosition(0);\n break;\n case Keyword.GSRenderQueueType:\n this._addPendingContents(start, token.lexeme.length, outGlobalContents);\n this._parseRenderQueueDeclarationOrAssignment(outRenderStates);\n start = this._lexer.getShaderPosition(0);\n break;\n default:\n // Unrecognized tokens are defined as pending content\n this._lexer.hasPendingContent = true;\n }\n return start;\n }\n}\n","import { Logger, ShaderMacro, ShaderLanguage } from \"@galacean/engine\";\nimport { IShaderLab, IShaderSource } from \"@galacean/engine-design\";\nimport { IShaderProgramSource } from \"@galacean/engine-design/types/shader-lab/IShaderProgramSource\";\nimport { GLES100Visitor, GLES300Visitor } from \"./codeGen\";\nimport { ShaderPosition, ShaderRange } from \"./common\";\nimport { Lexer } from \"./lexer\";\nimport { MacroParser } from \"./macroProcessor/MacroParser\";\nimport { ShaderTargetParser } from \"./parser\";\nimport { Preprocessor } from \"./Preprocessor\";\nimport { ShaderLabUtils } from \"./ShaderLabUtils\";\nimport { ShaderSourceParser } from \"./sourceParser/ShaderSourceParser\";\n\nexport class ShaderLab implements IShaderLab {\n private static _parser = ShaderTargetParser.create();\n private static _shaderPositionPool = ShaderLabUtils.createObjectPool(ShaderPosition);\n private static _shaderRangePool = ShaderLabUtils.createObjectPool(ShaderRange);\n\n // #if _VERBOSE\n static _processingPassText?: string;\n // #endif\n\n static createPosition(index: number, line?: number, column?: number): ShaderPosition {\n const position = this._shaderPositionPool.get();\n position.set(\n index,\n // #if _VERBOSE\n line,\n column\n // #endif\n );\n return position;\n }\n\n static createRange(start: ShaderPosition, end: ShaderPosition): ShaderRange {\n const range = this._shaderRangePool.get();\n range.set(start, end);\n return range;\n }\n\n _parseShaderSource(sourceCode: string): IShaderSource {\n ShaderLabUtils.clearAllShaderLabObjectPool();\n const shaderSource = ShaderSourceParser.parse(sourceCode);\n\n // #if _VERBOSE\n this._logErrors(ShaderSourceParser.errors);\n // #endif\n\n return shaderSource;\n }\n\n _parseShaderPass(\n source: string,\n vertexEntry: string,\n fragmentEntry: string,\n backend: ShaderLanguage,\n basePathForIncludeKey: string\n ): IShaderProgramSource | undefined {\n const totalStartTime = performance.now();\n const macroDefineList = {};\n Preprocessor._repeatIncludeSet.clear();\n const noIncludeContent = Preprocessor.parse(source, basePathForIncludeKey, macroDefineList);\n Logger.info(`[Task - Pre processor] cost time ${performance.now() - totalStartTime}ms`);\n\n const lexer = new Lexer(noIncludeContent, macroDefineList);\n\n const tokens = lexer.tokenize();\n const { _parser: parser } = ShaderLab;\n\n ShaderLab._processingPassText = noIncludeContent;\n\n const program = parser.parse(tokens, macroDefineList);\n\n // #if _VERBOSE\n this._logErrors(parser.errors);\n // #endif\n\n if (!program) {\n return undefined;\n }\n\n const codeGen = backend === ShaderLanguage.GLSLES100 ? GLES100Visitor.getVisitor() : GLES300Visitor.getVisitor();\n\n const codeGenStartTime = performance.now();\n const ret = codeGen.visitShaderProgram(program, vertexEntry, fragmentEntry);\n Logger.info(`[Task - CodeGen] cost time: ${performance.now() - codeGenStartTime}ms`);\n Logger.info(`[Task - Total compilation] cost time: ${performance.now() - totalStartTime}ms`);\n ShaderLab._processingPassText = undefined;\n\n // #if _VERBOSE\n this._logErrors(codeGen.errors);\n // #endif\n\n return ret;\n }\n\n _parseMacros(content: string, macros: ShaderMacro[]): string {\n const startTime = performance.now();\n const parsedContent = MacroParser.parse(content, macros);\n Logger.info(`[Task - parse macros] cost time: ${performance.now() - startTime}ms`);\n\n // #if _VERBOSE\n this._logErrors(MacroParser._errors);\n // #endif\n\n return parsedContent;\n }\n\n // #if _VERBOSE\n /**\n * @internal\n */\n _logErrors(errors: Error[]) {\n if (errors.length === 0 || !Logger.isEnabled) return;\n Logger.error(`${errors.length} errors occur!`);\n for (const err of errors) {\n Logger.error(err.toString());\n }\n }\n // #endif\n}\n","export { ShaderLab } from \"./ShaderLab\";\n\nexport * from \"./GSError\";\n\n//@ts-ignore\nexport const version = `__buildVersion`;\n\nlet mode = \"Release\";\n// #if _VERBOSE\nmode = \"Verbose\";\n// #endif\n\nconsole.log(`Galacean Engine ShaderLab Version: ${version} | Mode: ${mode}`);\n"],"names":["_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","value","writable","configurable","_instanceof","left","right","Symbol","hasInstance","_defineProperties","target","props","i","length","descriptor","enumerable","defineProperty","key","_create_class","Constructor","protoProps","staticProps","_array_like_to_array","arr","len","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","call","next","bind","isArray","_unsupported_iterable_to_array","minLen","n","toString","slice","name","from","test","done","__decorate","decorators","desc","d","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","SuppressedError","ETokenType","Keyword","EShaderStage","NoneTerminal","GSErrorName","ESymbolType","ASTNode","TrivialNode","ScopeBrace","ScopeEndBrace","JumpStatement","ExpressionAstNode","SingleDeclaration","FullySpecifiedType","TypeQualifier","SingleTypeQualifier","TypeSpecifier","ArraySpecifier","IntegerConstantExpressionOperator","IntegerConstantExpression","TypeSpecifierNonArray","ExtBuiltinTypeSpecifierNonArray","InitDeclaratorList","IdentifierList","Declaration","FunctionProtoType","FunctionDeclarator","FunctionHeader","FunctionParameterList","MacroParamCaseList","MacroParamBlock","MacroParameterBranch","ParameterDeclaration","ParameterDeclarator","CompoundStatementNoScope","StatementList","FunctionDefinition","FunctionCall","FunctionCallGeneric","FunctionCallParameterList","MacroCallArgCaseList","MacroCallArgBlock","MacroCallArgBranch","PrecisionSpecifier","FunctionIdentifier","AssignmentExpression","Expression","PrimaryExpression","PostfixExpression","StructSpecifier","StructDeclarationList","StructDeclaration","MacroStructDeclaration","MacroStructBranch","LayoutQualifier","StructDeclaratorList","StructDeclarator","VariableDeclaration","VariableDeclarationList","VariableIdentifier","GLShaderProgram","GlobalDeclaration","MacroUndef","MacroPushContext","MacroPopContext","MacroElifExpression","MacroElseExpression","GlobalMacroDeclaration","GlobalMacroIfStatement","GlobalMacroBranch","MacroIfStatement","MacroBranch","MacroCallSymbol","MacroCallFunction","MacroParserToken","MacroParserKeyword","EAction","ShaderRange","set","start","end","dispose","ShaderPosition","index","ShaderLabUtils","createObjectPool","type","pool","ClearableObjectPool","_shaderLabObjectPoolSet","push","clearAllShaderLabObjectPool","clear","createGSError","message","errorName","source","location","file","Logger","error","BaseToken","lexeme","arg","ShaderLab","createPosition","createRange","EOF","Preprocessor","parse","basePathForIncludeKey","outMacroDefineList","parseMacro","_parseMacroDefines","replace","_includeReg","_","includeName","_this","_replace","getReferenceSymbolNames","macroDefineList","macroName","out","infos","info","valueType","referencedName","functionCallName","params","indexOf","_isNumber","str","isNaN","Number","_isExist","list","item","some","e","isFunction","every","outMacroList","match","_macroRegex","lastIndex","exec","paramsGroup","paramsStr","valueRaw","split","map","trim","filter","Boolean","_symbolReg","callMatch","_funcCallReg","_mergeMacroDefineLists","to","src","path","URL","href","substring","ShaderPass","_shaderRootPath","chunk","ShaderLib","_repeatIncludeSet","has","warn","add","_macroDefineIncludeMap","get","chunkMacroDefineList","_is_native_reflect_construct","result","valueOf","construct","_construct","Parent","args","Class","a","apply","instance","Function","Map","Set","isGenericType","t","BuiltinFunctionTable","BuiltinFunction","ident","returnType","scope","_len","_key","_returnType","getReturnType","fn","genType","_create","ALL","_createWithScop","getFn","parameterTypes","fnArgs","argLength","found","curFnArg","_realReturnType","isExist","realReturnType","FLOAT","INT","UINT","VEC2","VEC3","MAT2","MAT3","MAT4","VEC4","MAT2X3","MAT3X2","MAT2X4","MAT4X2","MAT3X4","MAT4X3","BOOL","IVEC2","IVEC3","SAMPLER2D_SHADOW","SAMPLER_CUBE_SHADOW","SAMPLER2D_ARRAY_SHADOW","SAMPLER2D","SAMPLER2D_ARRAY","SAMPLER_CUBE","FRAGMENT","BuiltinVariableTable","BuiltinVariable","createVariable","getVar","VERTEX","VEC4_ARRAY","SymbolTable","_table","insert","symbol","isInMacroBranch","_this__table_get","entry","equal","getSymbol","includeMacro","getSymbols","_getSymbols","SymbolTableStack","stack","_macroLevel","pushScope","popScope","pop","lookup","symbolTable","lookupAll","_get_prototype_of","getPrototypeOf","_wrap_native_super","_cache","undefined","Wrapper","GSError","Error1","_proto","Error","wrappingLineCount","SymbolDataType","typeLexeme","arraySpecifier","SymbolInfo","astNode","dataType","paramSignature","symbolType","protoType","paramSig","comparedParams","t1","t2","FnSymbol","typeSpecifier","FN","StructSymbol","STRUCT","VarSymbol","isGlobalVariable","initAst","VAR","ShaderData","globalPrecisions","globalMacroDeclarations","getOuterGlobalMacroDeclarations","node","parent","SemanticAnalyzer","semanticStack","acceptRule","symbolTableStack","curFunctionInfo","_shaderData","_translationRuleTable","reset","_macroDefineList","addTranslationRule","pid","rule","getTranslationRule","reportError","loc","reportWarning","CompilationWarn","_processingPassText","shaderData","_lookupSymbol","SymbolType","StructProp","typeInfo","mrtIndex","ASTNodeDecorator","nonTerminal","nt","TreeNode","children","_location","_children","_step","_iterator","child","_parent","init","setCache","code","_codeCache","getCache","codeGen","visitor","defaultCodeGen","semanticAnalyze","sa","_unwrapToken","_ignore","scope_brace","scope_end_brace","isFragReturnStatement","RETURN","returnStatement","visitJumpStatement","jump_statement","_type","_this__type","sm","childrenLen","fullyType","id","initializer","visitSingleDeclaration","single_declaration","fully_specified_type","type_qualifier","qualifier","single_type_qualifier","arraySize","firstChild","_children_","size","isCustom","type_specifier","integerConstantExpr","array_specifier","operator","PLUS","compute","b","DASH","STAR","SLASH","PERCENT","integer_constant_expression_operator","integer_constant_expression","tt","type_specifier_nonarray","token","ext_builtin_type_specifier_nonarray","childrenLength","initDeclList","init_declarator_list","idList","curIdList","listIdLength","identifier_list","visitDeclaration","declaration","declarator","parameterList","parameterInfoList","function_prototype","header","function_declarator","visitFunctionHeader","function_header","decl","visitFunctionParameterList","function_parameter_list","macro_param_case_list","macro_param_block","macro_parameter_branch","parameterDeclarator","varSymbol","parameter_declaration","parameter_declarator","compound_statement_no_scope","visitStatementList","statement_list","statements","VOID","visitFunctionDefinition","function_definition","visitFunctionCall","function_call","fnSymbol","functionIdentifier","isBuiltin","fnIdent","paramList","lookupSymbol","function_call_generic","paramNodes","expr","function_call_parameter_list","macro_call_arg_case_list","macro_call_arg_block","macro_call_arg_branch","precision_specifier","visitFunctionIdentifier","function_identifier","assignment_expression","expression","INT_CONSTANT","FLOAT_CONSTANT","True","False","primary_expression","visitPostfixExpression","postfix_expression","propList","macroExpressions","visitStructSpecifier","struct_specifier","struct_declaration_list","_typeSpecifier","_declaratorList","macroStructDeclaration","macroProps","_this__typeSpecifier","prop","declaratorList","declaratorListLength","struct_declaration","_this_props","_this_props1","_this_macroExpressions","_this_macroExpressions1","_this_props2","_this_macroExpressions2","concat","macro_struct_declaration","lastNode","macro_struct_branch","layout_qualifier","listLength","struct_declarator_list","struct_declarator","isStatic","visitGlobalVariableDeclaration","variable_declaration","variableDeclarations","_this_variableDeclarations","newVariable","variable_declaration_list","referenceGlobalSymbolNames","_symbols","symbols","needFindNames","referenceSymbolNames","builtinVar","Any","currentScopeSymbol","s","visitVariableIdentifier","getLexeme","variable_identifier","gs_shader_program","global_declaration","macro_undef","macro_push_context","macro_pop_context","macro_elif_expression","macro_else_expression","global_macro_declaration","global_macro_if_statement","global_macro_branch","macro_if_statement","macro_branch","macro_call_symbol","visitMacroCallFunction","macro_call_function","ParserUtils","unwrapNodeByType","Token","isTerminal","START","VisitorContext","attributeStructs","attributeList","varyingStructs","varyingList","mrtStructs","mrtList","_referencedGlobalMacroASTs","resetAll","_referencedAttributeList","_referencedVaryingList","_referencedMRTList","_referencedGlobals","isAttributeStruct","findIndex","isVaryingStruct","isMRTStruct","referenceAttribute","CompilationError","referenceVarying","referenceMRTProp","referenceGlobal","_passSymbolTable","_singleton","context","TempArray","array","CodeGenVisitor","_tmpArrayPool","ret","return","join","derivationLength","postExpr","identNode","indexNode","identLexeme","indexLexeme","_reportError","astNodes","paramInfoList","paramsCode","variableParam","fullType","cmd","returnVar","returnFnCall","text","getVaryingProp","getAttributeProp","getMRTProp","sort","fnNode","fnName","stageEntry","ReturnableObjectPool","GLESVisitor","_globalCodeArray","globalCodeArray","_serializedGlobalKey","getOtherGlobal","data","precision","visitShaderProgram","vertexEntry","fragmentEntry","outerGlobalMacroDeclarations","vertex","_vertexMain","fragment","_fragmentMain","stage","fnSymbols","forEach","varyingSymbols","varyingSymbol","attributeParam","attributeType","attributeSymbols","attributeSymbol","_step1","_iterator1","_getGlobalSymbol","_getCustomStruct","_getGlobalMacroDeclarations","globalCode","outerGlobalMacroStatements","returnDataType","mrtSymbols","mrtSymbol","returnLocation","lastLength","keys","structNodes","macros","referencedGlobals","referencedGlobalMacroASTs","values","_step2","_iterator2","macro","_visitGlobalMacroIfStatement","variableDeclaration","GLES100Visitor","propReferenced","find","getVisitor","V3_GL_FragColor","GLES300Visitor","_otherCodeArray","_fragColorVariableRegistered","_registerFragColorVariable","BaseLexer","_currentIndex","_source","setSource","getShaderPosition","backOffset","isEnd","getCurChar","getCurCharCode","charCodeAt","advance","count","skipSpace","includeLineBreak","isWhiteSpaceChar","skipCommentsAndSpace","nextChar","charCode","peek","offset","scanLexeme","throwError","scanTwoExpectedLexemes","lexeme1","lexeme2","pos","msgs","ScannerError","scanPairedChar","balanced","skipLeading","sourceLength","currentIndex","level","currentChar","isDigit","isAlpha","isAlnum","isPreprocessorStartChar","includeBreak","Lexer","BaseLexer1","_needScanMacroConditionExpression","tokenize","thisArg","body","f","y","label","sent","trys","ops","g","Iterator","verb","v","step","op","scanToken","_state","_scanMacroConditionExpression","curChar","curCharCode","_scanDirectives","_scanWord","_scanNum","LEFT_ASSIGN","LEFT_OP","LE_OP","LEFT_ANGLE","RIGHT_ASSIGN","RIGHT_OP","GE_OP","RIGHT_ANGLE","INC_OP","ADD_ASSIGN","DEC_OP","SUB_ASSIGN","EQ_OP","EQUAL","NE_OP","BANG","AND_OP","AMPERSAND","OR_OP","OR_ASSIGN","VERTICAL_BAR","XOR_OP","XOR_ASSIGN","CARET","MUL_ASSIGN","DIV_ASSIGN","MOD_ASSIGN","LEFT_PAREN","RIGHT_PAREN","LEFT_BRACE","RIGHT_BRACE","LEFT_BRACKET","RIGHT_BRACKET","_scanNumAfterDot","DOT","COMMA","COLON","SEMICOLON","TILDE","QUESTION","_scanStringConst","buffer","range","STRING_CONST","_scanFloatSuffix","_scanUtilBreakLine","outBuffer","word","MACRO_DEFINE_EXPRESSION","kt","_lexemeTable","ID","MACRO_CONDITIONAL_EXPRESSION","MACRO_CALL","_scanIntegerSuffix","_type_of","obj","const","CONST","bool","float","double","DOUBLE","int","uint","break","BREAK","continue","CONTINUE","do","DO","else","ELSE","for","FOR","if","IF","while","WHILE","discard","DISCARD","bvec2","BVEC2","bvec3","BVEC3","bvec4","BVEC4","ivec2","ivec3","ivec4","IVEC4","uvec2","UVEC2","uvec3","UVEC3","uvec4","UVEC4","vec2","vec3","vec4","mat2","mat3","mat4","in","IN","OUT","inout","INOUT","sampler2D","samplerCube","sampler3D","SAMPLER3D","sampler2DShadow","samplerCubeShadow","sampler2DArray","sampler2DArrayShadow","isampler2D","I_SAMPLER2D","isampler3D","I_SAMPLER3D","isamplerCube","I_SAMPLER_CUBE","isampler2DArray","I_SAMPLER2D_ARRAY","usampler2D","U_SAMPLER2D","usampler3D","U_SAMPLER3D","usamplerCube","U_SAMPLER_CUBE","usampler2DArray","U_SAMPLER2D_ARRAY","struct","void","true","false","PRECISION","precise","PRECISE","highp","HIGHP","mediump","MEDIUMP","lowp","LOWP","invariant","INVARIANT","flat","FLAT","smooth","SMOOTH","noperspective","NOPERSPECTIVE","centroid","CENTROID","layout","LAYOUT","LOCATION","MACRO_IF","MACRO_IFDEF","MACRO_IFNDEF","MACRO_ELSE","MACRO_ELIF","MACRO_ENDIF","MACRO_UNDEF","MacroDefine","_argsLexemes","_replaceRegex","RegExp","expandFunctionBody","_this_args","PreprocessorError","m","MacroParserLexer","macroLvl","scanWordsUntilTerminator","terminatorChar","tokens","scanWord","tokenType","_isPpCharacters","ifdef","ifndef","endif","scanQuotedString","contentStart","string_const","scanToChar","char","scanMacroBranchBody","shaderPosition","startLevel","nextDirective","elif","scanPairedBlock","lc","rc","scanRemainMacro","startLvl","directive","peekNonSpace","current","scanInteger","integer","int_constant","scanMacroBody","nextIndex","nextCharCode","valueToken","line_remain","define","undef","defined","PpUtils","expand","segments","startIdx","generatedIdx","seg","originSlice","rangeInBlock","generatedIdxEnd","MacroParser","_reset","_addPredefinedMacro","lexer","_parseDirectives","_expandSegmentsStack","_definedMacros","macroBody","_parseMacro","_parseDefine","_parseUndef","_parseIfDirective","_getExpandSegments","sourceMap","directiveType","shouldInclude","directiveLength","skipMacro","_parseConstantExpression","macroToken","startsWith","expanded","_expandMacroChunk","_addContentReplace","content","blockRange","_addEmptyReplace","_processConditionalDirective","scanner","constantExpr","_parseLogicalOrExpression","operand1","_parseLogicalAndExpression","operand2","_parseEqualityExpression","_parseRelationalExpression","includes","_parseShiftExpression","opPos","_parseAdditiveExpression","_parseMulticativeExpression","_parseUnaryExpression","parenExpr","_parseParenthesisExpression","_parseConstant","withParen","isInteger","_parseMacroFunctionArgs","startIndex","argStart","k","endIndex","_expandMacroBody","visitedMacros","_expandVisitedMacros","currentVersionId","_expandVersionId","expandedBody","hasExpansion","replacement","_this__parseMacroFunctionArgs","newEndIndex","scannerOrFile","sourceFile","sourceRange","macroArgs","macroDefine","delete","macroBodyExpanded","expandedContent","remainingLength","macroContent","StateItem","production","position","lookahead","_needReInfer","lookaheadSet","la","_id","addLookahead","ts","needReInfer","symbolByOffset","derivation","canReduce","EPSILON","curSymbol","nextSymbol","State","cores","closured","_stateItemPool","_items","itemMapKey","getStateItemMapKey","createStateItem","mapId","newItem","cacheKey","getMapKey","state","closureMap","core","newState","items","GrammarUtils","createProductionWithOptions","goal","options","astTypePool","opt","addMapSetItem","isSubSet","sb","isActionEqual","action","LALR1","grammar","firstSetMap","followSetMap","actionTable","gotoTable","_firstSetNTStack","generate","computeFirstSet","buildStateTable","startStateItemCore","productions","startState","_extendState","_closure","newStates","_inferNextState","ns","_extendStateItem","productionList","getProductionList","newLookaheadSet","terminalExist","lastFirstSet","Utils","_step3","_iterator3","coreMap","stateActionTable","_this_actionTable_get","stateGotoTable","_this_gotoTable_get","stateItem","Reduce","Accept","_addAction","nextItem","entries","gs","Shift","table","terminal","exist","_computeFirstSetForNT","NT","idx","computingFS","curNT","firstSet","isNullableNT","succeedFirstSet","Production","Grammar","startSymbol","unshift","getProductionByID","gsl","productionAndRules","variable_declaration_statement","storage_qualifier","precision_qualifier","interpolation_qualifier","invariant_qualifier","conditional_expression","logical_or_expression","logical_xor_expression","logical_and_expression","inclusive_or_expression","exclusive_or_expression","and_expression","equality_expression","relational_expression","shift_expression","additive_expression","multiplicative_expression","unary_expression","unary_operator","assignment_operator","AND_ASSIGN","statement","compound_statement","simple_statement","expression_statement","selection_statement","iteration_statement","initializer_list","condition","for_init_statement","for_rest_statement","conditionopt","ShaderTargetParser","_traceBackStack","sematicAnalyzer","SematicAnalyzer","performance","now","traceBackStack","nextToken","loopCount","actionInfo","reduceProduction","translationRule","nextState","generator","curState","_extends","assign","hasOwnProperty","ShaderSourceFactory","createRenderStates","constantMap","variableMap","createShaderSource","subShaders","pendingContents","renderStates","createSubShaderSource","passes","tags","createShaderPassSource","createUsePass","isUsePass","ShaderSourceSymbol","other","SourceLexer","hasPendingContent","scanNumber","_scanDigits","scanColor","Color","wordToken","symbolKeyword","_symbolLexemeTable","createCompileError","_validateWordBoundaries","_keywordLexemeTable","prevCharCode","_isValidWordBoundary","_isWordSeparatorChar","RenderQueueType","GSRenderQueueType","BlendState","GSBlendState","DepthState","GSDepthState","StencilState","GSStencilState","RasterState","GSRasterState","EditorProperties","GSEditorProperties","EditorMacros","GSEditorMacros","Editor","GSEditor","Tags","GSTags","VertexShader","GSVertexShader","FragmentShader","GSFragmentShader","SubShader","GSSubShader","Pass","GSPass","BlendFactor","GSBlendFactor","BlendOperation","GSBlendOperation","Bool","GSBool","GSNumber","GSColor","CompareFunction","GSCompareFunction","StencilOperation","GSStencilOperation","CullMode","GSCullMode","UsePass","GSUsePass","LeftBrace","RightBrace","Equal","ShaderSourceParser","sourceCode","startTime","errors","_symbolTableStack","_pushScope","_lexer","shaderSource","_parseShader","shaderPendingContents","shaderRenderStates","subShader","curSubShaderGlobalStatements","globalSubShaderStates","_mergeRenderStates","j","pass","globalPassRenderStates","passGlobalStatements","contents","braceLevel","_addPendingContents","_parseSubShader","_popScope","_parseRenderState","_parseRenderStateDeclarationOrAssignment","outRenderStates","stateToken","renderState","_parseRenderStateProperties","_createCompileError","outTarget","targetVariableMap","sourceVariableMap","sourceConstantMap","targetConstantMap","_parseVariableDeclaration","_parseRenderStateProperty","stateLexeme","propertyLexeme","propertyToken","stateElementKey","keyIndex","scannedLexeme","renderStateElementKey","RenderStateElementKey","propertyValue","valueTokenType","_this__renderStateConstMap_valueToken_lexeme","constValueToken","_renderStateConstMap","_parseRenderQueueDeclarationOrAssignment","outPendingContents","subShaderSource","_parsePass","_parseRenderStateAndTags","_parseTags","passSource","outGlobalContents","outTags","_parseShaderSource","_parseShaderPass","backend","totalStartTime","noIncludeContent","parser","_parser","program","ShaderLanguage","GLSLES100","codeGenStartTime","_parseMacros","parsedContent","line","column","_shaderPositionPool","_shaderRangePool","version","console","log"],"mappings":"iVAAA,SAASA,EAAkBC,CAAC,CAAEC,CAAC,EAO3B,MAAOF,AANPA,CAAAA,EAAoBG,OAAOC,cAAc,EAAI,SAAwBH,CAAC,CAAEC,CAAC,EAGrE,OAFAD,EAAEI,SAAS,CAAGH,EAEPD,CACf,CAAA,EAE6BA,EAAGC,EAChC,CCNA,SAASI,EAAUC,CAAQ,CAAEC,CAAU,EACnC,GAAI,AAAsB,YAAtB,OAAOA,GAA6BA,AAAe,OAAfA,EACpC,MAAM,AAAIC,UAAU,qDAGxBF,CAAAA,EAASG,SAAS,CAAGP,OAAOQ,MAAM,CAACH,GAAcA,EAAWE,SAAS,CAAE,CAAEE,YAAa,CAAEC,MAAON,EAAUO,SAAU,CAAA,EAAMC,aAAc,CAAA,CAAM,CAAA,GAEzIP,GAAYR,EAAkBO,EAAUC,EAChD,CCVA,SAASQ,EAAYC,CAAI,CAAEC,CAAK,SAC5B,AAAIA,AAAS,MAATA,GAAiB,AAAkB,aAAlB,OAAOC,QAA0BD,CAAK,CAACC,OAAOC,WAAW,CAAC,CACpE,CAAC,CAACF,CAAK,CAACC,OAAOC,WAAW,CAAC,CAACH,GACzBA,aAAgBC,CAClC,CCJA,SAASG,EAAkBC,CAAM,CAAEC,CAAK,EACpC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAME,MAAM,CAAED,IAAK,CACnC,IAAIE,EAAaH,CAAK,CAACC,EAAE,AACzBE,CAAAA,EAAWC,UAAU,CAAGD,EAAWC,UAAU,EAAI,CAAA,EACjDD,EAAWX,YAAY,CAAG,CAAA,EAEtB,UAAWW,GAAYA,CAAAA,EAAWZ,QAAQ,CAAG,CAAA,CAAA,EAEjDX,OAAOyB,cAAc,CAACN,EAAQI,EAAWG,GAAG,CAAEH,EACjD,CACL,CACA,SAASI,EAAcC,CAAW,CAAEC,CAAU,CAAEC,CAAW,EAIvD,OAHID,GAAYX,EAAkBU,EAAYrB,SAAS,CAAEsB,GACrDC,GAAaZ,EAAkBU,EAAaE,GAEzCF,CACX,CChBA,SAASG,EAAqBC,CAAG,CAAEC,CAAG,EAC9BA,CAAAA,AAAO,MAAPA,GAAeA,EAAMD,EAAIV,MAAM,AAAN,GAAQW,CAAAA,EAAMD,EAAIV,MAAM,EAErD,IAAK,IAAID,EAAI,EAAGa,EAAO,AAAIC,MAAMF,GAAMZ,EAAIY,EAAKZ,IAAKa,CAAI,CAACb,EAAE,CAAGW,CAAG,CAACX,EAAE,CAErE,OAAOa,CACX,CCJA,SAASE,EAAqCtC,CAAC,CAAEuC,CAAc,EAC3D,IAAIC,EAAK,AAAkB,aAAlB,OAAOtB,QAA0BlB,CAAC,CAACkB,OAAOuB,QAAQ,CAAC,EAAIzC,CAAC,CAAC,aAAa,CAE/E,GAAIwC,EAAI,MAAO,AAACA,CAAAA,EAAKA,EAAGE,IAAI,CAAC1C,EAAC,EAAG2C,IAAI,CAACC,IAAI,CAACJ,GAE3C,GAAIH,MAAMQ,OAAO,CAAC7C,IAAOwC,CAAAA,EAAKM,ACLlC,SAAwC9C,CAAC,CAAE+C,CAAM,EAC7C,GAAK/C,GACL,GAAI,AAAa,UAAb,OAAOA,EAAgB,OAAOiC,EAAqBjC,EAFhB+C,KAAAA,GAIvC,IAAIC,EAAI9C,OAAOO,SAAS,CAACwC,QAAQ,CAACP,IAAI,CAAC1C,GAAGkD,KAAK,CAAC,EAAG,IAGnD,GADU,WAANF,GAAkBhD,EAAEW,WAAW,EAAEqC,CAAAA,EAAIhD,EAAEW,WAAW,CAACwC,IAAI,EACvDH,AAAM,QAANA,GAAeA,AAAM,QAANA,EAAa,OAAOX,MAAMe,IAAI,CAACJ,GAClD,GAAIA,AAAM,cAANA,GAAqB,2CAA2CK,IAAI,CAACL,GAAI,OAAOf,EAAqBjC,EARlE+C,KAAAA,GAS3C,EDJiE/C,EAAC,GAAMuC,GAAkBvC,GAAK,AAAoB,UAApB,OAAOA,EAAEwB,MAAM,CAAe,CACjHgB,GAAIxC,CAAAA,EAAIwC,GAEZ,IAAIjB,EAAI,EAER,OAAO,kBACH,AAAIA,GAAKvB,EAAEwB,MAAM,CAAS,CAAE8B,KAAM,CAAA,GAE3B,CAAEA,KAAM,CAAA,EAAO1C,MAAOZ,CAAC,CAACuB,IAAI,CAC/C,CACK,CAED,MAAM,AAAIf,UAAU,wIACxB,CEkCO,SAAS+C,EAAWC,CAAU,CAAEnC,CAAM,CAAEO,CAAG,CAAE6B,CAAI,EACtD,IAA2HC,EAAvHC,EAAIC,UAAUpC,MAAM,CAAEqC,EAAIF,EAAI,EAAItC,EAASoC,AAAS,OAATA,EAAgBA,EAAOvD,OAAO4D,wBAAwB,CAACzC,EAAQO,GAAO6B,EACrH,GAAI,AAAmB,UAAnB,OAAOM,SAAwB,AAA4B,YAA5B,OAAOA,QAAQC,QAAQ,CAAiBH,EAAIE,QAAQC,QAAQ,CAACR,EAAYnC,EAAQO,EAAK6B,QACpH,IAAK,IAAIlC,EAAIiC,EAAWhC,MAAM,CAAG,EAAGD,GAAK,EAAGA,IAASmC,CAAAA,EAAIF,CAAU,CAACjC,EAAE,AAAD,GAAGsC,CAAAA,EAAI,AAACF,CAAAA,EAAI,EAAID,EAAEG,GAAKF,EAAI,EAAID,EAAErC,EAAQO,EAAKiC,GAAKH,EAAErC,EAAQO,EAAG,GAAMiC,CAAAA,EAChJ,OAAOF,EAAI,GAAKE,GAAK3D,OAAOyB,cAAc,CAACN,EAAQO,EAAKiC,GAAIA,CAC9D,CA4QuB,AAA2B,YAA3B,OAAOI,iBAAiCA,gBCpUxD,ICDKC,ECFAC,ECAAC,ECIAC,EC4DAC,EC3DAC,ECoFKC,EA4BRC,EAGAC,EAOAC,EAOAC,EAyCAC,EAoCAC,EA+CAC,EAYAC,EAGAC,EA0CAC,EAwBAC,EASAC,EA8BAC,EA2BAC,EAiBAC,EAYAC,EAoCAC,EA0BAC,EAOAC,EAgBAC,EAqBAC,EAiBAC,EA0CAC,EAGAC,EAGAC,EAGAC,EAoCAC,EAsBAC,EAQAC,EAOAC,EA2CAC,EAWAC,EAgDAC,EA+BAC,EAEAC,EAEAC,EAGAC,EASAC,GAmBAC,GAoBAC,GAeAC,GA4BAC,GAsKAC,GA+BAC,GAyBAC,GA8DAC,GA2BAC,GAgCAC,GASAC,GAyBAC,GAgBAC,GAgCAC,GAqCAC,GAsFAC,GAUAC,GAuBAC,GAOAC,GAWAC,GAWAC,GAOAC,GAOAC,GA8BAC,GAuBAC,GA6BAC,GAGAC,GAGAC,GAmBAC,GC3mDGC,GA4CAC,GCrCAC,MTJLC,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIXC,EAAAA,GAGC,CAHDA,SAAIC,CAAqB,CAAEC,CAAmB,EAC5C,IAAI,CAACD,KAAK,CAAGA,EACb,IAAI,CAACC,GAAG,CAAGA,CACb,EAEAC,EAAAA,OAGC,CAHDA,WACE,IAAI,CAACF,KAAK,CAACE,OAAO,GAClB,IAAI,CAACD,GAAG,CAACC,OAAO,EAClB,EAZWJ,CAaZ,IUdMK,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAOXJ,EAAAA,GAYC,CAZDA,SACEK,CAAa,EAMb,IAAI,CAACA,KAAK,CAAGA,CAKf,EAEAF,EAAAA,OAMC,CANDA,WACE,IAAI,CAACE,KAAK,CAAG,CAKf,EA3BWD,CA4BZ,IT5BMlF,KAAKA,EAkGX,CAAA,wIA7FQA,CAAA,CAAAA,EAAA,OAAA,CAAA,KAAA,CAAA,UAECA,CAAA,CAAAA,EAAA,QAAA,CAAA,KAAA,CAAA,WAEDA,CAAA,CAAAA,EAAA,MAAA,CAAA,KAAA,CAAA,SAEAA,CAAA,CAAAA,EAAA,MAAA,CAAA,KAAA,CAAA,SAEAA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,QAECA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,QAEDA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,QAEAA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,QAEAA,CAAA,CAAAA,EAAA,MAAA,CAAA,KAAA,CAAA,SAEAA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,QAEAA,CAAA,CAAAA,EAAA,MAAA,CAAA,KAAA,CAAA,SAEAA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAEAA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAEAA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAEAA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAEAA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAECA,CAAA,CAAAA,EAAA,WAAA,CAAA,KAAA,CAAA,cAEAA,CAAA,CAAAA,EAAA,YAAA,CAAA,KAAA,CAAA,eAEDA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAEAA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAEAA,CAAA,CAAAA,EAAA,SAAA,CAAA,KAAA,CAAA,YAEDA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAEAA,CAAA,CAAAA,EAAA,WAAA,CAAA,KAAA,CAAA,cAEAA,CAAA,CAAAA,EAAA,YAAA,CAAA,KAAA,CAAA,eAEAA,CAAA,CAAAA,EAAA,aAAA,CAAA,KAAA,CAAA,gBAEAA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAEAA,CAAA,CAAAA,EAAA,WAAA,CAAA,KAAA,CAAA,cAEAA,CAAA,CAAAA,EAAA,GAAA,CAAA,KAAA,CAAA,MAEAA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,gCAGAA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,QAEAA,CAAA,CAAAA,EAAA,SAAA,CAAA,KAAA,CAAA,YAEAA,CAAA,CAAAA,EAAA,IAAA,CAAA,KAAA,CAAA,OAECA,CAAA,CAAAA,EAAA,IAAA,CAAA,KAAA,CAAA,OAEDA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,8BAGCA,CAAA,CAAAA,EAAA,IAAA,CAAA,KAAA,CAAA,OAEDA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,QAEAA,CAAA,CAAAA,EAAA,OAAA,CAAA,KAAA,CAAA,UAEAA,CAAA,CAAAA,EAAA,UAAA,CAAA,KAAA,CAAA,aAECA,CAAA,CAAAA,EAAA,WAAA,CAAA,KAAA,CAAA,oDAGDA,CAAA,CAAAA,EAAA,KAAA,CAAA,KAAA,CAAA,QAEAA,CAAA,CAAAA,EAAA,SAAA,CAAA,KAAA,CAAA,YAEAA,CAAA,CAAAA,EAAA,QAAA,CAAA,KAAA,CAAA,uCAKAA,CAAA,CAAAA,EAAA,OAAA,CAAA,KAAA,CAAA,8BA/FIA,GCFLC,KAAKA,EAkHX,0jGAlHWA,GSQLmF,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,OAAAA,EAGJC,gBAIN,CAJD,SAAgDC,CAAiB,EAC/D,IAAMC,EAAO,IAAIC,qBAAuBF,CAAAA,GAExC,OANSF,EAKMK,uBAAuB,CAACC,IAAI,CAACH,GACrCA,CACT,EAPWH,EASJO,2BAIN,CAJD,WACE,IAAK,IAAItI,EAAI,EAAGyB,EAAIsG,EAAeK,uBAAuB,CAACnI,MAAM,CAAED,EAAIyB,EAAGzB,IAVjE+H,EAWQK,uBAAuB,CAACpI,EAAE,CAACuI,KAAK,EAEnD,EAbWR,EAeJS,aAYN,CAZD,SACEC,CAAe,CACfC,CAAsB,CACtBC,CAAc,CACdC,CAAsC,CACtCC,CAAa,EAKbC,QAAAA,CAAOC,KAAK,CAACN,EAEf,EA3BWV,CA4BZ,GA5BYA,CAAAA,GACIK,wBAA+D,EAAE,CCH3E,IAAAY,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OASXvB,EAAAA,GAiBC,CAjBDA,SAAIQ,CAAO,CAAEgB,CAAc,CAAEC,CAAkC,EAG7D,GAFA,IAAI,CAACjB,IAAI,CAAGA,EACZ,IAAI,CAACgB,MAAM,CAAGA,EACVC,GACF,GAAO1J,EAAH0J,EAAe1B,IACjB,IAAI,CAACoB,QAAQ,CAAGM,MACX,CACL,IAAMvB,EAAMwB,GAAUC,cAAc,CAClCF,EAAIpB,KAAK,CAAGmB,EAAOhJ,MAAM,CAM3B,CAAA,IAAI,CAAC2I,QAAQ,CAAGO,GAAUE,WAAW,CAACH,EAAKvB,EAC7C,EAEJ,EAEAC,EAAAA,OAAkB,CAAlBA,aA5BWoB,CA6BZ,GA7BYA,CAAAA,GACJd,IAAAA,CAAOH,GAAeC,gBAAgB,CAACgB,IA8BzC,IAAMM,GAAM,IAAIN,GACvBM,GAAI7B,GAAG,CAAC9E,GAAW2G,GAAG,CAAE,QCdjB,IAAAC,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,OAAAA,EAaJC,KAYN,CAZD,SACEb,CAAc,CACdc,CAA6B,CAC7BC,CAAmC,CACnCC,CAAiB,aAKjB,gBALAA,GAAAA,CAAAA,EAAa,CAAA,CAAA,EAETA,GACF,IAAI,CAACC,kBAAkB,CAACjB,EAAQe,GAE3Bf,EAAOkB,OAAO,CAAC,IAAI,CAACC,WAAW,CAAE,SAACC,CAAGC,CAAAA,CAAAA,SAC1CC,EAAKC,QAAQ,CAACF,EAAaP,EAAuBC,IAEtD,EAzBWH,EA2BJY,uBAoBN,CApBD,SAA+BC,CAAgC,CAAEC,CAAiB,CAAEC,CAAa,EAC/FA,EAAIrK,MAAM,CAAG,EACb,IAAMsK,EAAQH,CAAe,CAACC,EAAU,CACxC,GAAKE,EAEL,IAAK,IAAIvK,EAAI,EAAGA,EAAIuK,EAAMtK,MAAM,CAAED,IAAK,CACrC,IAAMwK,EAAOD,CAAK,CAACvK,EAAE,CACfyK,EAAYD,EAAKC,SAAS,CAChC,GAAIA,IAAAA,GAA6CA,AAAqC,IAArCA,EAAqC,CACpF,IAAMC,EAAiBD,AAA4CD,IAA5CC,EAA4CD,EAAKG,gBAAgB,CAAGH,EAAKnL,KAAK,CACrG,GAAImL,AAAwC,KAAxCA,EAAKI,MAAM,CAACC,OAAO,CAACH,GAAwB,QACZ,CAAA,KAAhCJ,EAAIO,OAAO,CAACH,IAAwBJ,EAAIjC,IAAI,CAACqC,EAOnD,CACF,CACF,EA/CWnB,EAiDIuB,SAEd,CAFD,SAAyBC,CAAW,EAClC,MAAO,CAACC,MAAMC,OAAOF,GACvB,EAnDWxB,EAqDI2B,QAUd,CAVD,SAAwBC,CAAuB,CAAEC,CAAqB,EACpE,OAAOD,EAAKE,IAAI,CACd,SAACC,CAAAA,EACCA,OAAAA,EAAEb,SAAS,GAAKW,EAAKX,SAAS,EAC9Ba,EAAEjM,KAAK,GAAK+L,EAAK/L,KAAK,EACtBiM,EAAEC,UAAU,GAAKH,EAAKG,UAAU,EAChCD,EAAEX,gBAAgB,GAAKS,EAAKT,gBAAgB,EAC5CW,EAAEV,MAAM,CAAC3K,MAAM,GAAKmL,EAAKR,MAAM,CAAC3K,MAAM,EACtCqL,EAAEV,MAAM,CAACY,KAAK,CAAC,SAAC9M,CAAGsB,CAAAA,CAAAA,SAAMtB,IAAM0M,EAAKR,MAAM,CAAC5K,EAAE,IAEnD,EA/DWuJ,EAiEIK,kBA+Cd,CA/CD,SAAkCjB,CAAc,CAAE8C,CAA6B,EAC7E,IAAIC,EAGJ,IAFA,IAAI,CAACC,WAAW,CAACC,SAAS,CAAG,EAErBF,AAA2C,OAA3CA,CAAAA,EAAQ,IAAI,CAACC,WAAW,CAACE,IAAI,CAAClD,EAAM,GAAa,CACvD,IAAS/G,EAA0C8J,CAApCI,CAAAA,EAAAA,CAAAA,EAAoCJ,CAAvBK,CAAAA,EAAAA,CAAAA,EAAuBL,KAAZM,EAAYN,CAAAA,CAAAA,EAAAA,CAC7CH,EAAa,CAAC,CAACO,GAAe,CAAC,CAACE,EAChCpB,EACJW,GAAcQ,EACVA,EACGE,KAAK,CAAC,KACNC,GAAG,CAAC,SAACxN,CAAAA,EAAMA,OAAAA,EAAEyN,IAAI,KACjBC,MAAM,CAACC,SACV,EAAE,CACFhN,EAAQ2M,EAAWA,EAASG,IAAI,GAAK,GAEvC1B,EAAAA,EACAE,EAAmB,GAEvB,GAAI,IAAI,CAACG,SAAS,CAACzL,GACjBoL,EAAAA,OACK,GAAI,IAAI,CAAC6B,UAAU,CAACxK,IAAI,CAACzC,GAC9BoL,EAAAA,MACK,CACL,IAAM8B,EAAY,IAAI,CAACC,YAAY,CAACX,IAAI,CAACxM,GACrCkN,IACF9B,EAAAA,EACAE,EAAmB4B,CAAS,CAAC,EAAE,CAEnC,CAEA,IAAM/B,EAAwB,CAC5Be,WAAAA,EACA3J,KAAAA,EACAvC,MAAAA,EACAoL,UAAAA,EACAG,OAAAA,EACAD,iBAAAA,CACF,EAEMhK,EAAM8K,CAAY,CAAC7J,EAAK,CAC1BjB,EACG,IAAI,CAACuK,QAAQ,CAACvK,EAAK6J,IAAO7J,EAAI0H,IAAI,CAACmC,GAExCiB,CAAY,CAAC7J,EAAK,CAAG,CAAC4I,EAAK,AAE/B,CACF,EAhHWjB,EAkHIkD,sBAad,CAbD,SAAsC5K,CAAqB,CAAE6K,CAAmB,EAC9E,IAAK,IAAMrC,KAAaxI,EACtB,GAAI6K,CAAE,CAACrC,EAAU,CAGf,IAAK,IAFCvK,EAAS4M,CAAE,CAACrC,EAAU,CACtBsC,EAAM9K,CAAI,CAACwI,EAAU,CAClBrK,EAAI,EAAGA,EAAI2M,EAAI1M,MAAM,CAAED,IAAK,CACnC,IAAMwK,EAAOmC,CAAG,CAAC3M,EAAE,CACd,IAAI,CAACkL,QAAQ,CAACpL,EAAQ0K,IAAO1K,EAAOuI,IAAI,CAACmC,EAChD,MAEAkC,CAAE,CAACrC,EAAU,CAAGxI,CAAI,CAACwI,EAAU,AAGrC,EA/HWd,EAiIIW,QAkCd,CAlCD,SACEF,CAAmB,CACnBP,CAA6B,CAC7BC,CAAmC,EAKjCkD,EAFE5C,AAAmB,MAAnBA,CAAW,CAAC,EAAE,CAET,IAAI6C,IAAI7C,EAAaP,GAAuBqD,IAAI,CAACC,SAAS,CAACC,EAAAA,UAAAA,CAAWC,eAAe,CAAChN,MAAM,EAE5F+J,EAGT,IARI4C,EAQEM,EAASC,WAAiB,CAACP,EAAK,CACtC,GAAI,CAACM,EAEH,OADApE,EAAAA,MAAAA,CAAOC,KAAK,CAAC,iBAAiB6D,EAAK,kBAC5B,GAQT,GALI,IAAI,CAACQ,iBAAiB,CAACC,GAAG,CAACT,IAC7B9D,EAAAA,MAAAA,CAAOwE,IAAI,CAAC,iBAAiBV,EAAK,iCAEpC,IAAI,CAACQ,iBAAiB,CAACG,GAAG,CAACX,GAEvB,IAAI,CAACY,sBAAsB,CAACH,GAAG,CAACT,GAClC,IAAI,CAACH,sBAAsB,CAAC,IAAI,CAACe,sBAAsB,CAACC,GAAG,CAACb,GAAQlD,OAC/D,CACL,IAAMgE,EAAwC,CAAA,EAC9C,IAAI,CAAC9D,kBAAkB,CAACsD,EAAOQ,GAC/B,IAAI,CAACF,sBAAsB,CAAC/F,GAAG,CAACmF,EAAMc,GACtC,IAAI,CAACjB,sBAAsB,CAACiB,EAAsBhE,EACpD,CAEA,OAAO,IAAI,CAACF,KAAK,CAAC0D,EAAOzD,EAAuBC,EAAoB,CAAA,EACtE,EAnKWH,CAoKZ,IC5LD,SAASoE,KAKL,GAAI,CAGA,IAAIC,EAAS,CAACvB,QAAQnN,SAAS,CAAC2O,OAAO,CAAC1M,IAAI,CAACqB,QAAQsL,SAAS,CAACzB,QAAS,EAAE,CAAE,WAAW,GAC/F,CAAM,MAAOtC,EAAG,CAAE,CACd,MAAO,AAAC4D,CAAAA,GAA+B,WACnC,MAAO,CAAC,CAACC,CACjB,CAAA,GACA,CCXA,SAASG,GAAWC,CAAM,CAAEC,CAAI,CAAEC,CAAK,EAenC,MAAOH,CAd6BA,GAAhCJ,KAA6CnL,QAAQsL,SAAS,CAEjD,SAAmBE,CAAM,CAAEC,CAAI,CAAEC,CAAK,EAC/C,IAAIC,EAAI,CAAC,KAAK,CACdA,EAAE9F,IAAI,CAAC+F,KAAK,CAACD,EAAGF,GAEhB,IAAII,EAAW,GADGC,CAAAA,SAASjN,IAAI,CAAC+M,KAAK,CAACJ,EAAQG,EAAC,EAK/C,OAFID,GAAO1P,EAAkB6P,EAAUH,EAAMhP,SAAS,EAE/CmP,CACnB,GAGsBD,KAAK,CAAC,KAAM/L,UAClC,CFMakH,GACaO,WAAc,CAAA,mCAD3BP,GAEaoC,WACtB,CAAA,uFAHSpC,GAIa+C,UAAa,CAAA,2BAJ1B/C,GAKaiD,YAAe,CAAA,wCAL5BjD,GAMaiE,uBAAyB,IAAIe,IAN1ChF,GAWJ6D,kBAAoB,IAAIoB,IVnC1B,IAAA3L,KAAKA,EAIX,qEAJWA,GawBZ,SAAS4L,GAAcC,CAAc,EACnC,OAAOA,GAAyBA,KAAAA,GAAAA,GAClC,CAEA,IAAMC,GAAuD,IAAIJ,IAE1DK,gBAAA,WAAMA,SAAAA,EAYSC,CAAa,CAAEC,CAAuB,CAAEC,CAAmB,EAAE,IAAA,IAAAC,EAAA3M,UAAApC,MAAA,CAAAgO,EAAA,AAAAnN,MAAAkO,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAGhB,CAAAA,CAAHgB,EAAA,EAAA,CAAA5M,SAAA,CAAA4M,EAAsB,AACrG,CAAA,IAAI,CAACJ,KAAK,CAAGA,EACb,IAAI,CAACK,WAAW,CAAGJ,EACnB,IAAI,CAACb,IAAI,CAAGA,EACZ,IAAI,CAACc,KAAK,CAAGA,EAhBJH,OAAAA,EAmBJO,aAGN,CAHD,SAAqBC,CAAmB,CAAEC,CAAgC,SACxE,AAAKZ,GAAcW,EAAGF,WAAW,EAC1BG,EADoCD,EAAGF,WAAW,AAE3D,EAtBWN,EAwBJU,OAKN,CALD,SAAeT,CAAa,CAAEC,CAAuB,EAAE,IAAA,IAExCH,EAFwCK,EAAA3M,UAAApC,MAAA,CAAAgO,EAAA,AAAAnN,MAAAkO,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAGhB,CAAAA,CAAHgB,EAAA,EAAA,CAAA5M,SAAA,CAAA4M,EAAsB,CAC3E,IAAMG,EAAKrB,GAzBFa,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,CAyBsBC,EAAOC,EAAYjM,GAAa0M,GAAG,CAAKtB,CAAAA,IACjE9C,EAAOwD,AAAyBE,MAAzBF,CAAAA,EAAAA,GAAqBlB,GAAG,CAACoB,EAAAA,EAAzBF,EAAmC,EAAE,CAClDxD,EAAK9C,IAAI,CAAC+G,GACVT,GAAqBlH,GAAG,CAACoH,EAAO1D,EAClC,EA7BWyD,EA+BJY,eAKN,CALD,SAAuBX,CAAa,CAAEC,CAAuB,CAAEC,CAAmB,EAAE,IAAA,IAErEJ,EAFqEK,EAAA3M,UAAApC,MAAA,CAAAgO,EAAA,AAAAnN,MAAAkO,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAGhB,CAAAA,CAAHgB,EAAA,EAAA,CAAA5M,SAAA,CAAA4M,EAAsB,CACxG,IAAMG,EAAKrB,GAhCFa,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,CAgCsBC,EAAOC,EAAYC,EAAUd,CAAAA,IACtD9C,EAAOwD,AAAyBE,MAAzBF,CAAAA,EAAAA,GAAqBlB,GAAG,CAACoB,EAAAA,EAAzBF,EAAmC,EAAE,CAClDxD,EAAK9C,IAAI,CAAC+G,GACVT,GAAqBlH,GAAG,CAACoH,EAAO1D,EAClC,EApCWyD,EAyCJa,KA4BN,CA5BD,SAAaZ,CAAa,CAAEa,CAAwC,EAClE,IAAMvE,EAAOwD,GAAqBlB,GAAG,CAACoB,GACtC,GAAI1D,EACF,IAAK,IAAIlL,EAASkL,EAAKlL,MAAM,CAAED,EAAI,EAAGA,EAAIC,EAAQD,IAAK,CACrD,IAAMoP,EAAKjE,CAAI,CAACnL,EAAE,CACZ2P,EAASP,EAAGnB,IAAI,CAChB2B,EAAYD,EAAO1P,MAAM,CAC/B,GAAI2P,IAAcF,EAAezP,MAAM,EAIvC,IAAK,IAFD6O,EfsBW,IerBXe,EAAQ,CAAA,EACH7P,EAAI,EAAGA,EAAI4P,EAAW5P,IAAK,CAClC,IAAM8P,EAAWH,CAAM,CAAC3P,EAAE,CAC1B,GAAIyO,GAAcqB,GfkBL,MejBPhB,GAAwBA,CAAAA,EAAaY,CAAc,CAAC1P,EAAE,AAAA,OAE1D,GAAI8P,IAAaJ,CAAc,CAAC1P,EAAE,EAAI0P,Afe3B,Mef2BA,CAAc,CAAC1P,EAAE,CAAc,CACnE6P,EAAQ,CAAA,EACR,KACF,CAEJ,CACA,GAAIA,EAEF,OADAT,EAAGW,eAAe,CAAGjB,EACdM,EAEX,CAEJ,EArEWR,EAuEJoB,OAEN,CAFD,SAAenB,CAAa,EAC1B,MAAO,CAAC,CAACF,GAAqBlB,GAAG,CAACoB,EACpC,EAzEWD,EAAAA,EAAAA,EAQPqB,IAAAA,iBAAJxC,IAAA,WACE,OAAO,IAAI,CAACsC,eAAe,AAC7B,KAVWnB,CA0EZ,IAEDA,GAAgBU,OAAO,CAAC,UAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,UAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,MAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,cAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,MAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,YAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAA2C1M,IAAAA,IAAAA,GAAQsN,KAAK,EAChFtB,GAAgBU,OAAO,CAAC,MAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAA2C1M,IAAAA,IAAAA,GAAQsN,KAAK,EAChFtB,GAAgBU,OAAO,CAAC,MAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAiD1M,IAAAA,IAAAA,GAAQuN,GAAG,EACpFvB,GAAgBU,OAAO,CAAC,MAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAmD1M,IAAAA,IAAAA,GAAQwN,IAAI,EACvFxB,GAAgBU,OAAO,CAAC,MAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAA2C1M,IAAAA,IAAAA,GAAQsN,KAAK,EAChFtB,GAAgBU,OAAO,CAAC,MAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAAiD1M,IAAAA,IAAAA,GAAQuN,GAAG,EACpFvB,GAAgBU,OAAO,CAAC,QAAA,IAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,IAA6C1M,GAAQsN,KAAK,CAAEtN,GAAQsN,KAAK,EACjGtB,GAAgBU,OAAO,CAAC,QAAA,IAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,IAAmD1M,GAAQuN,GAAG,CAAEvN,GAAQuN,GAAG,EACnGvB,GAAgBU,OAAO,CACrB,QAAA,IAAA,IAAA,IAAA,KAMFV,GAAgBU,OAAO,CAAC,QAAA,IAAA,IAAqD1M,GAAQwN,IAAI,CAAExN,GAAQwN,IAAI,EACvGxB,GAAgBU,OAAO,CAAC,MAAA,IAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,MAA6D1M,IAAAA,IAAAA,IAAAA,GAAQsN,KAAK,EAClGtB,GAAgBU,OAAO,CAAC,MAAA,IAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,OAA0B1M,IAAAA,GAAQsN,KAAK,CAAA,KAC/DtB,GAAgBU,OAAO,CAAC,aAAA,IAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,aAAA,IAAgC1M,GAAQsN,KAAK,CAAEtN,GAAQsN,KAAK,CAAA,KACpFtB,GAAgBU,OAAO,CAAC,QAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,iBAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,kBAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,iBAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,kBAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,gBAAiB1M,GAAQwN,IAAI,CAAExN,GAAQyN,IAAI,EACnEzB,GAAgBU,OAAO,CAAC,kBAAmB1M,GAAQyN,IAAI,CAAEzN,GAAQwN,IAAI,EACrExB,GAAgBU,OAAO,CAAC,gBAAiB1M,GAAQwN,IAAI,CAAExN,GAAQyN,IAAI,EACnEzB,GAAgBU,OAAO,CAAC,kBAAmB1M,GAAQyN,IAAI,CAAEzN,GAAQwN,IAAI,EACrExB,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQwN,IAAI,CAAExN,GAAQyN,IAAI,EAClEzB,GAAgBU,OAAO,CAAC,iBAAkB1M,GAAQyN,IAAI,CAAEzN,GAAQwN,IAAI,EAEpExB,GAAgBU,OAAO,CAAC,SAAU1M,GAAQsN,KAAK,CAAA,KAC/CtB,GAAgBU,OAAO,CAAC,WAAY1M,GAAQsN,KAAK,CAAA,IAAA,KACjDtB,GAAgBU,OAAO,CAAC,MAAO1M,GAAQsN,KAAK,CAAA,IAAA,KAC5CtB,GAAgBU,OAAO,CAAC,QAAS1M,GAAQ0N,IAAI,CAAE1N,GAAQ0N,IAAI,CAAE1N,GAAQ0N,IAAI,EACzE1B,GAAgBU,OAAO,CAAC,YAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,UAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,UAAiE1M,IAAAA,IAAAA,IAAAA,GAAQsN,KAAK,EACtGtB,GAAgBU,OAAO,CAAC,iBAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQ2N,IAAI,CAAE3N,GAAQyN,IAAI,CAAEzN,GAAQyN,IAAI,EAChFzB,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQ4N,IAAI,CAAE5N,GAAQ0N,IAAI,CAAE1N,GAAQ0N,IAAI,EAChF1B,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQ6N,IAAI,CAAE7N,GAAQ8N,IAAI,CAAE9N,GAAQ8N,IAAI,EAEhF9B,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQ+N,MAAM,CAAE/N,GAAQ0N,IAAI,CAAE1N,GAAQyN,IAAI,EAClFzB,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQgO,MAAM,CAAEhO,GAAQyN,IAAI,CAAEzN,GAAQ0N,IAAI,EAElF1B,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQiO,MAAM,CAAEjO,GAAQ8N,IAAI,CAAE9N,GAAQyN,IAAI,EAClFzB,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQkO,MAAM,CAAElO,GAAQyN,IAAI,CAAEzN,GAAQ8N,IAAI,EAElF9B,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQmO,MAAM,CAAEnO,GAAQ8N,IAAI,CAAE9N,GAAQ0N,IAAI,EAClF1B,GAAgBU,OAAO,CAAC,eAAgB1M,GAAQoO,MAAM,CAAEpO,GAAQ0N,IAAI,CAAE1N,GAAQ8N,IAAI,EAElF9B,GAAgBU,OAAO,CAAC,YAAa1M,GAAQ2N,IAAI,CAAE3N,GAAQ2N,IAAI,EAC/D3B,GAAgBU,OAAO,CAAC,YAAa1M,GAAQ4N,IAAI,CAAE5N,GAAQ4N,IAAI,EAC/D5B,GAAgBU,OAAO,CAAC,YAAa1M,GAAQ6N,IAAI,CAAE7N,GAAQ6N,IAAI,EAC/D7B,GAAgBU,OAAO,CAAC,YAAa1M,GAAQ+N,MAAM,CAAE/N,GAAQgO,MAAM,EACnEhC,GAAgBU,OAAO,CAAC,YAAa1M,GAAQgO,MAAM,CAAEhO,GAAQ+N,MAAM,EACnE/B,GAAgBU,OAAO,CAAC,YAAa1M,GAAQkO,MAAM,CAAElO,GAAQiO,MAAM,EACnEjC,GAAgBU,OAAO,CAAC,YAAa1M,GAAQiO,MAAM,CAAEjO,GAAQkO,MAAM,EACnElC,GAAgBU,OAAO,CAAC,YAAa1M,GAAQmO,MAAM,CAAEnO,GAAQoO,MAAM,EACnEpC,GAAgBU,OAAO,CAAC,YAAa1M,GAAQoO,MAAM,CAAEpO,GAAQmO,MAAM,EAEnEnC,GAAgBU,OAAO,CAAC,cAAe1M,GAAQsN,KAAK,CAAEtN,GAAQ2N,IAAI,EAClE3B,GAAgBU,OAAO,CAAC,cAAe1M,GAAQsN,KAAK,CAAEtN,GAAQ4N,IAAI,EAClE5B,GAAgBU,OAAO,CAAC,cAAe1M,GAAQsN,KAAK,CAAEtN,GAAQ6N,IAAI,EAElE7B,GAAgBU,OAAO,CAAC,UAAW1M,GAAQ2N,IAAI,CAAE3N,GAAQ2N,IAAI,EAC7D3B,GAAgBU,OAAO,CAAC,UAAW1M,GAAQ4N,IAAI,CAAE5N,GAAQ4N,IAAI,EAC7D5B,GAAgBU,OAAO,CAAC,UAAW1M,GAAQ6N,IAAI,CAAE7N,GAAQ6N,IAAI,EAE7D7B,GAAgBU,OAAO,CAAC,WAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,WAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,WAAA,IAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,gBAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,gBAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,gBAAA,IAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,mBAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,mBAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,mBAAA,IAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,QAAA,IAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,WAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,WAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,WAAA,IAAA,IAAA,KACxBV,GAAgBU,OAAO,CAAC,WAAA,IAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,MAAO1M,GAAQqO,IAAI,CAAA,KAC3CrC,GAAgBU,OAAO,CAAC,MAAO1M,GAAQqO,IAAI,CAAA,KAC3CrC,GAAgBU,OAAO,CAAC,MAAA,IAAA,KAExBV,GAAgBU,OAAO,CAAC,cAAe1M,GAAQsO,KAAK,CAAA,IAAuBtO,GAAQuN,GAAG,EACtFvB,GAAgBU,OAAO,CAAC,cAAe1M,GAAQuO,KAAK,CAAA,IAAuBvO,GAAQuN,GAAG,EACtFvB,GAAgBU,OAAO,CAAC,cAAe1M,GAAQsO,KAAK,CAAA,IAAyBtO,GAAQuN,GAAG,EAExFvB,GAAgBU,OAAO,CAAC,cAAe1M,GAAQsO,KAAK,CAAEtO,GAAQwO,gBAAgB,CAAExO,GAAQuN,GAAG,EAC3FvB,GAAgBU,OAAO,CAAC,cAAe1M,GAAQsO,KAAK,CAAEtO,GAAQyO,mBAAmB,CAAEzO,GAAQuN,GAAG,EAE9FvB,GAAgBU,OAAO,CAAC,cAAe1M,GAAQuO,KAAK,CAAA,IAA4BvO,GAAQuN,GAAG,EAC3FvB,GAAgBU,OAAO,CAAC,cAAe1M,GAAQuO,KAAK,CAAEvO,GAAQ0O,sBAAsB,CAAE1O,GAAQuN,GAAG,EAEjGvB,GAAgBU,OAAO,CAAC,YAAa1M,GAAQ8N,IAAI,CAAE9N,GAAQ2O,SAAS,CAAE3O,GAAQyN,IAAI,EAClFzB,GAAgBU,OAAO,CAAC,YAAa1M,GAAQ8N,IAAI,CAAE9N,GAAQ2O,SAAS,CAAE3O,GAAQyN,IAAI,CAAEzN,GAAQsN,KAAK,EAEjGtB,GAAgBU,OAAO,CAAC,UAAA,IAAA,IAAgD1M,GAAQyN,IAAI,CAAEzN,GAAQsN,KAAK,EACnGtB,GAAgBU,OAAO,CAAC,UAAgD1M,IAAAA,IAAAA,GAAQyN,IAAI,EACpFzB,GAAgBU,OAAO,CAAC,UAAA,IAAA,IAAgD1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EACnGtB,GAAgBU,OAAO,CAAC,UAAgD1M,IAAAA,IAAAA,GAAQ0N,IAAI,EAEpF1B,GAAgBU,OAAO,CAAC,UAAA,IAAA,IAAkD1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EACrGtB,GAAgBU,OAAO,CAAC,UAAkD1M,IAAAA,IAAAA,GAAQ0N,IAAI,EAEtF1B,GAAgBU,OAAO,CAAC,UAAW1M,GAAQsN,KAAK,CAAEtN,GAAQwO,gBAAgB,CAAExO,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EACvGtB,GAAgBU,OAAO,CAAC,UAAW1M,GAAQsN,KAAK,CAAEtN,GAAQwO,gBAAgB,CAAExO,GAAQ0N,IAAI,EAExF1B,GAAgBU,OAAO,CAAC,UAAW1M,GAAQsN,KAAK,CAAEtN,GAAQyO,mBAAmB,CAAEzO,GAAQ8N,IAAI,CAAE9N,GAAQsN,KAAK,EAC1GtB,GAAgBU,OAAO,CAAC,UAAW1M,GAAQsN,KAAK,CAAEtN,GAAQyO,mBAAmB,CAAEzO,GAAQ8N,IAAI,EAE3F9B,GAAgBU,OAAO,CAAC,UAAA,IAA2B1M,GAAQ4O,eAAe,CAAE5O,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EACvGtB,GAAgBU,OAAO,CAAC,UAAA,IAA2B1M,GAAQ4O,eAAe,CAAE5O,GAAQ0N,IAAI,EAExF1B,GAAgBU,OAAO,CAAC,UAAW1M,GAAQsN,KAAK,CAAEtN,GAAQ0O,sBAAsB,CAAE1O,GAAQ8N,IAAI,EAE9F9B,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAoD1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EACvGtB,GAAgBU,OAAO,CAAC,cAAoD1M,IAAAA,IAAAA,GAAQ0N,IAAI,EACxF1B,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAoD1M,GAAQ8N,IAAI,CAAE9N,GAAQsN,KAAK,EACvGtB,GAAgBU,OAAO,CAAC,cAAoD1M,IAAAA,IAAAA,GAAQ8N,IAAI,EACxF9B,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAoD1M,GAAQ8N,IAAI,CAAE9N,GAAQsN,KAAK,EACvGtB,GAAgBU,OAAO,CAAC,cAAoD1M,IAAAA,IAAAA,GAAQ8N,IAAI,EAExF9B,GAAgBU,OAAO,CAAC,cAAe1M,GAAQsN,KAAK,CAAEtN,GAAQwO,gBAAgB,CAAExO,GAAQ8N,IAAI,CAAE9N,GAAQsN,KAAK,EAC3GtB,GAAgBU,OAAO,CAAC,cAAe1M,GAAQsN,KAAK,CAAEtN,GAAQwO,gBAAgB,CAAExO,GAAQ8N,IAAI,EAE5F9B,GAAgBU,OAAO,CAAC,aAAA,IAAA,IAAmD1M,GAAQyN,IAAI,CAAEzN,GAAQsN,KAAK,EACtGtB,GAAgBU,OAAO,CAAC,aAAA,IAAA,IAAmD1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EACtGtB,GAAgBU,OAAO,CAAC,aAAA,IAAA,IAAqD1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EACxGtB,GAAgBU,OAAO,CAAC,aAAc1M,GAAQsN,KAAK,CAAEtN,GAAQwO,gBAAgB,CAAExO,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EAC1GtB,GAAgBU,OAAO,CAAC,aAAA,IAAA,IAAwD1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EAC3GtB,GAAgBU,OAAO,CAAC,kBAAA,IAAA,IAAwD1M,GAAQyN,IAAI,CAAEzN,GAAQsN,KAAK,EAC3GtB,GAAgBU,OAAO,CAAC,kBAAA,IAAA,IAAwD1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EAE3GtB,GAAgBU,OAAO,CAAC,cAAe1M,GAAQ6O,YAAY,CAAE7O,GAAQ0N,IAAI,EACzE1B,GAAgBU,OAAO,CAAC,cAAe1M,GAAQ6O,YAAY,CAAE7O,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EACxFtB,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAsD1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EACzGtB,GAAgBU,OAAO,CAAC,iBAAkB1M,GAAQ6O,YAAY,CAAE7O,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EAC3FtB,GAAgBU,OAAO,CAAC,oBAAA,IAAA,IAA4D1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EAE/GtB,GAAgBU,OAAO,CACrB,gBAAA,IAAA,IAGA1M,GAAQyN,IAAI,CACZzN,GAAQsO,KAAK,CACbtO,GAAQsN,KAAK,EAEftB,GAAgBU,OAAO,CAAC,gBAAA,IAAA,IAAsD1M,GAAQyN,IAAI,CAAEzN,GAAQsO,KAAK,EAEzGtC,GAAgBU,OAAO,CACrB,gBAAA,IAAA,IAGA1M,GAAQ0N,IAAI,CACZ1N,GAAQuO,KAAK,CACbvO,GAAQsN,KAAK,EAEftB,GAAgBU,OAAO,CAAC,gBAAA,IAAA,IAAsD1M,GAAQ0N,IAAI,CAAE1N,GAAQuO,KAAK,EAEzGvC,GAAgBU,OAAO,CACrB,gBACA1M,GAAQsN,KAAK,CACbtN,GAAQwO,gBAAgB,CACxBxO,GAAQ0N,IAAI,CACZ1N,GAAQsO,KAAK,CACbtO,GAAQsN,KAAK,EAEftB,GAAgBU,OAAO,CAAC,gBAAiB1M,GAAQsN,KAAK,CAAEtN,GAAQwO,gBAAgB,CAAExO,GAAQ0N,IAAI,CAAE1N,GAAQsO,KAAK,EAC7GtC,GAAgBU,OAAO,CACrB,gBAAA,IAAA,IAGA1M,GAAQ0N,IAAI,CACZ1N,GAAQsO,KAAK,CACbtO,GAAQsN,KAAK,EAEftB,GAAgBU,OAAO,CAAC,gBAAA,IAAA,IAA2D1M,GAAQ0N,IAAI,CAAE1N,GAAQsO,KAAK,EAE9GtC,GAAgBU,OAAO,CAAC,aAAA,IAAA,IAAmD1M,GAAQsO,KAAK,CAAEtO,GAAQuN,GAAG,EACrGvB,GAAgBU,OAAO,CAAC,aAAA,IAAA,IAAmD1M,GAAQuO,KAAK,CAAEvO,GAAQuN,GAAG,EACrGvB,GAAgBU,OAAO,CAAC,aAAA,IAAA,IAAwD1M,GAAQuO,KAAK,CAAEvO,GAAQuN,GAAG,EAE1GvB,GAAgBU,OAAO,CACrB,mBAAA,IAAA,IAGA1M,GAAQsO,KAAK,CACbtO,GAAQuN,GAAG,CACXvN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,mBAAA,IAAA,IAGA1M,GAAQuO,KAAK,CACbvO,GAAQuN,GAAG,CACXvN,GAAQuO,KAAK,EAEfvC,GAAgBU,OAAO,CACrB,mBAAA,IAAA,IAGA1M,GAAQuO,KAAK,CACbvO,GAAQuN,GAAG,CACXvN,GAAQsO,KAAK,EAGftC,GAAgBU,OAAO,CACrB,oBAAA,IAAA,IAGA1M,GAAQ0N,IAAI,CACZ1N,GAAQsO,KAAK,CACbtO,GAAQsN,KAAK,EAEftB,GAAgBU,OAAO,CAAC,oBAAA,IAAA,IAA0D1M,GAAQ0N,IAAI,CAAE1N,GAAQsO,KAAK,EAE7GtC,GAAgBU,OAAO,CACrB,oBAAA,IAAA,IAGA1M,GAAQ8N,IAAI,CACZ9N,GAAQsO,KAAK,CACbtO,GAAQsN,KAAK,EAEftB,GAAgBU,OAAO,CAAC,oBAAA,IAAA,IAA0D1M,GAAQ8N,IAAI,CAAE9N,GAAQsO,KAAK,EAE7GtC,GAAgBU,OAAO,CACrB,oBAAA,IAAA,IAGA1M,GAAQ8N,IAAI,CACZ9N,GAAQuO,KAAK,CACbvO,GAAQsN,KAAK,EAEftB,GAAgBU,OAAO,CAAC,oBAAA,IAAA,IAA0D1M,GAAQ8N,IAAI,CAAE9N,GAAQuO,KAAK,EAE7GvC,GAAgBU,OAAO,CACrB,oBACA1M,GAAQsN,KAAK,CACbtN,GAAQwO,gBAAgB,CACxBxO,GAAQ8N,IAAI,CACZ9N,GAAQsO,KAAK,CACbtO,GAAQsN,KAAK,EAEftB,GAAgBU,OAAO,CAAC,oBAAqB1M,GAAQsN,KAAK,CAAEtN,GAAQwO,gBAAgB,CAAExO,GAAQ8N,IAAI,CAAE9N,GAAQsO,KAAK,EAEjHtC,GAAgBU,OAAO,CACrB,mBAAA,IAAA,IAGA1M,GAAQyN,IAAI,CACZzN,GAAQsN,KAAK,CACbtN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,mBAAA,IAAA,IAGA1M,GAAQ0N,IAAI,CACZ1N,GAAQsN,KAAK,CACbtN,GAAQuO,KAAK,EAGfvC,GAAgBU,OAAO,CACrB,mBACA1M,GAAQsN,KAAK,CACbtN,GAAQwO,gBAAgB,CACxBxO,GAAQ0N,IAAI,CACZ1N,GAAQsN,KAAK,CACbtN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,mBAAA,IAAA,IAGA1M,GAAQ0N,IAAI,CACZ1N,GAAQsN,KAAK,CACbtN,GAAQsO,KAAK,EAGftC,GAAgBU,OAAO,CAAC,iBAAA,IAAA,IAAuD1M,GAAQ0N,IAAI,CAAE1N,GAAQsN,KAAK,EAC1GtB,GAAgBU,OAAO,CAAC,iBAAA,IAAA,IAAuD1M,GAAQ8N,IAAI,CAAE9N,GAAQsN,KAAK,EAC1GtB,GAAgBU,OAAO,CAAC,iBAAA,IAAA,IAAuD1M,GAAQ8N,IAAI,CAAE9N,GAAQsN,KAAK,EAC1GtB,GAAgBU,OAAO,CAAC,iBAAkB1M,GAAQsN,KAAK,CAAEtN,GAAQwO,gBAAgB,CAAExO,GAAQ8N,IAAI,CAAE9N,GAAQsN,KAAK,EAE9GtB,GAAgBU,OAAO,CACrB,uBAAA,IAAA,IAGA1M,GAAQ0N,IAAI,CACZ1N,GAAQsN,KAAK,CACbtN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,uBAAA,IAAA,IAGA1M,GAAQ8N,IAAI,CACZ9N,GAAQsN,KAAK,CACbtN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,uBAAA,IAAA,IAGA1M,GAAQ8N,IAAI,CACZ9N,GAAQsN,KAAK,CACbtN,GAAQuO,KAAK,EAEfvC,GAAgBU,OAAO,CACrB,uBACA1M,GAAQsN,KAAK,CACbtN,GAAQwO,gBAAgB,CACxBxO,GAAQ8N,IAAI,CACZ9N,GAAQsN,KAAK,CACbtN,GAAQsO,KAAK,EAGftC,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAoD1M,GAAQyN,IAAI,CAAEzN,GAAQyN,IAAI,CAAEzN,GAAQyN,IAAI,EACpHzB,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAoD1M,GAAQ0N,IAAI,CAAE1N,GAAQ0N,IAAI,CAAE1N,GAAQ0N,IAAI,EACpH1B,GAAgBU,OAAO,CAAC,cAAA,IAAA,IAAsD1M,GAAQ0N,IAAI,CAAE1N,GAAQ0N,IAAI,CAAE1N,GAAQ0N,IAAI,EAEtH1B,GAAgBU,OAAO,CACrB,cACA1M,GAAQsN,KAAK,CACbtN,GAAQwO,gBAAgB,CACxBxO,GAAQ0N,IAAI,CACZ1N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,EAEdzB,GAAgBU,OAAO,CACrB,cACA1M,GAAQsN,KAAK,CACbtN,GAAQyO,mBAAmB,CAC3BzO,GAAQ8N,IAAI,CACZ9N,GAAQ0N,IAAI,CACZ1N,GAAQ0N,IAAI,EAGd1B,GAAgBU,OAAO,CACrB,cAAA,IAAA,IAGA1M,GAAQ0N,IAAI,CACZ1N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,EAEdzB,GAAgBU,OAAO,CACrB,cACA1M,GAAQsN,KAAK,CACbtN,GAAQ0O,sBAAsB,CAC9B1O,GAAQ8N,IAAI,CACZ9N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,EAGdzB,GAAgBU,OAAO,CACrB,oBAGA1M,IAAAA,IAAAA,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,CACZzN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,oBAGA1M,IAAAA,IAAAA,GAAQ0N,IAAI,CACZ1N,GAAQ0N,IAAI,CACZ1N,GAAQ0N,IAAI,CACZ1N,GAAQuO,KAAK,EAEfvC,GAAgBU,OAAO,CACrB,oBACA1M,GAAQsN,KAAK,CACbtN,GAAQwO,gBAAgB,CACxBxO,GAAQ0N,IAAI,CACZ1N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,CACZzN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,oBAGA1M,IAAAA,IAAAA,GAAQ0N,IAAI,CACZ1N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,CACZzN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,oBACA1M,GAAQsN,KAAK,CACbtN,GAAQ0O,sBAAsB,CAC9B1O,GAAQ0N,IAAI,CACZ1N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,CACZzN,GAAQsO,KAAK,EAGftC,GAAgBU,OAAO,CACrB,kBAAA,IAAA,IAGA1M,GAAQ0N,IAAI,CACZ1N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,EAEdzB,GAAgBU,OAAO,CACrB,kBAAA,IAAA,IAGA1M,GAAQ8N,IAAI,CACZ9N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,EAEdzB,GAAgBU,OAAO,CACrB,kBAAA,IAAA,IAGA1M,GAAQ8N,IAAI,CACZ9N,GAAQ0N,IAAI,CACZ1N,GAAQ0N,IAAI,EAEd1B,GAAgBU,OAAO,CACrB,kBACA1M,GAAQsN,KAAK,CACbtN,GAAQwO,gBAAgB,CACxBxO,GAAQ8N,IAAI,CACZ9N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,EAGdzB,GAAgBU,OAAO,CACrB,wBAGA1M,IAAAA,IAAAA,GAAQ0N,IAAI,CACZ1N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,CACZzN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,wBAGA1M,IAAAA,IAAAA,GAAQ8N,IAAI,CACZ9N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,CACZzN,GAAQsO,KAAK,EAEftC,GAAgBU,OAAO,CACrB,wBAGA1M,IAAAA,IAAAA,GAAQ8N,IAAI,CACZ9N,GAAQ0N,IAAI,CACZ1N,GAAQ0N,IAAI,CACZ1N,GAAQuO,KAAK,EAEfvC,GAAgBU,OAAO,CACrB,wBACA1M,GAAQsN,KAAK,CACbtN,GAAQwO,gBAAgB,CACxBxO,GAAQ8N,IAAI,CACZ9N,GAAQyN,IAAI,CACZzN,GAAQyN,IAAI,CACZzN,GAAQsO,KAAK,EAEftC,GAAgBY,eAAe,CAAC,OAA0B3M,IAAAA,GAAa6O,QAAQ,CAAA,KAC/E9C,GAAgBY,eAAe,CAAC,OAA0B3M,IAAAA,GAAa6O,QAAQ,CAAA,KAC/E9C,GAAgBY,eAAe,CAAC,SAA4B3M,IAAAA,GAAa6O,QAAQ,CAAA,KCloB1E,IAAMC,GAAqD,IAAIpD,IAE/DqD,gBAAA,WAAMA,SAAAA,EAKS3J,CAAsB,CAAEgB,CAAc,CAAE8F,CAAmB,EAC7E,IAAI,CAAC9G,IAAI,CAAGA,EACZ,IAAI,CAACgB,MAAM,CAAGA,EACd,IAAI,CAAC8F,KAAK,CAAGA,EARJ6C,OAAAA,EAWJC,cAGN,CAHD,SAAsB5I,CAAc,CAAEhB,CAAsB,CAAE8G,CAAwB,EAAxBA,KAAAA,IAAAA,GAAAA,CAAAA,EAAQlM,GAAa0M,GAAG,AAAHA,EACjF,IAAMnE,EAAO,IAZJwG,EAYwB3J,EAAMgB,EAAQ8F,GAC/C4C,GAAqBlK,GAAG,CAACwB,EAAQmC,EACnC,EAdWwG,EAgBJE,MAEN,CAFD,SAAcjD,CAAa,EACzB,OAAO8C,GAAqBlE,GAAG,CAACoB,EAClC,EAlBW+C,CAmBZ,IAEDA,GAAgBC,cAAc,CAAC,cAAejP,GAAQuN,GAAG,CAAEtN,GAAakP,MAAM,EAC9EH,GAAgBC,cAAc,CAAC,gBAAiBjP,GAAQuN,GAAG,CAAEtN,GAAakP,MAAM,EAChFH,GAAgBC,cAAc,CAAC,cAAejP,GAAQ8N,IAAI,CAAE7N,GAAakP,MAAM,EAC/EH,GAAgBC,cAAc,CAAC,eAAgBjP,GAAQsN,KAAK,CAAErN,GAAakP,MAAM,EAEjFH,GAAgBC,cAAc,CAAC,eAAgBjP,GAAQ8N,IAAI,CAAE7N,GAAa6O,QAAQ,EAClFE,GAAgBC,cAAc,CAAC,iBAAkBjP,GAAQqO,IAAI,CAAEpO,GAAa6O,QAAQ,EACpFE,GAAgBC,cAAc,CAAC,eAAgBjP,GAAQsN,KAAK,CAAErN,GAAa6O,QAAQ,EACnFE,GAAgBC,cAAc,CAAC,gBAAiBjP,GAAQyN,IAAI,CAAExN,GAAa6O,QAAQ,EACnFE,GAAgBC,cAAc,CAAC,eAAgBjP,GAAQ8N,IAAI,CAAE7N,GAAa6O,QAAQ,EAClFE,GAAgBC,cAAc,CAAC,cAAejP,GAAQoP,UAAU,CAAEnP,GAAa6O,QAAQ,EAEvFE,GAAgBC,cAAc,CAAC,sBAAuBjP,GAAQuN,GAAG,EACjEyB,GAAgBC,cAAc,CAAC,6BAA8BjP,GAAQuN,GAAG,EACxEyB,GAAgBC,cAAc,CAAC,4BAA6BjP,GAAQuN,GAAG,EACvEyB,GAAgBC,cAAc,CAAC,6BAA8BjP,GAAQuN,GAAG,EACxEyB,GAAgBC,cAAc,CAAC,gCAAiCjP,GAAQuN,GAAG,EAC3EyB,GAAgBC,cAAc,CAAC,kCAAmCjP,GAAQuN,GAAG,EAC7EyB,GAAgBC,cAAc,CAAC,0BAA2BjP,GAAQuN,GAAG,EACrEyB,GAAgBC,cAAc,CAAC,+BAAgCjP,GAAQuN,GAAG,EAC1EyB,GAAgBC,cAAc,CAAC,oBAAqBjP,GAAQuN,GAAG,EAC/DyB,GAAgBC,cAAc,CAAC,2BAA4BjP,GAAQuN,GAAG,EACtEyB,GAAgBC,cAAc,CAAC,2BAA4BjP,GAAQuN,GAAG,Eb7C/D,IAAArN,KAAKA,EAkIX,2uMAlIWA,GcDLmP,gBAAA,WAAMA,SAAAA,IACHC,IAAAA,CAAAA,MAAAA,CAA2B,IAAI3D,IAD5B0D,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGXE,EAAAA,MAeC,CAfDA,SAAOC,CAAS,CAAEC,CAAuB,WAAvBA,GAAAA,CAAAA,EAAkB,CAAA,CAAA,EAClCD,EAAOC,eAAe,CAAGA,EAGzB,IAAK,IADSC,EAARC,EAAQ,AAA4B,MAA5BD,CAAAA,EAAA,IAAI,CAACJ,MAAM,CAACzE,GAAG,CAAC2E,EAAOvD,KAAK,CAAA,EAA5ByD,EAAiC,EAAE,CACxCtS,EAAI,EAAGyB,EAAI8Q,EAAMtS,MAAM,CAAED,EAAIyB,EAAGzB,IACvC,IAAIuS,CAAK,CAACvS,EAAE,CAACqS,eAAe,EACxBE,CAAK,CAACvS,EAAE,CAACwS,KAAK,CAACJ,GAAS,CAC1BtJ,EAAAA,MAAAA,CAAOwE,IAAI,CAAC,kBAAmB8E,EAAOvD,KAAK,EAC3C0D,CAAK,CAACvS,EAAE,CAAGoS,EACX,MACF,CAGFG,EAAMlK,IAAI,CAAC+J,GACX,IAAI,CAACF,MAAM,CAACzK,GAAG,CAAC2K,EAAOvD,KAAK,CAAE0D,EAChC,EAEAE,EAAAA,SASC,CATDA,SAAUL,CAAS,CAAEM,CAAoB,WAApBA,GAAAA,CAAAA,EAAe,CAAA,CAAA,EAClC,IAAMH,EAAQ,IAAI,CAACL,MAAM,CAACzE,GAAG,CAAC2E,EAAOvD,KAAK,EAC1C,GAAI0D,EACF,IAAK,IAAIvS,EAAIuS,EAAMtS,MAAM,CAAG,EAAGD,GAAK,EAAGA,IAAK,CAC1C,IAAMoL,EAAOmH,CAAK,CAACvS,EAAE,CACrB,GAAI,CAAA,AAAC0S,IAAgBtH,EAAKiH,eAAe,AAAfA,GACtBjH,EAAKoH,KAAK,CAACJ,GAAS,OAAOhH,CACjC,CAEJ,EAEAuH,EAAAA,UAKC,CALDA,SAAWP,CAAS,CAAEM,CAAoB,CAAEpI,CAAQ,EAIlD,gBAJoBoI,GAAAA,CAAAA,EAAe,CAAA,CAAA,EACnCpI,EAAIrK,MAAM,CAAG,EACb,IAAI,CAAC2S,WAAW,CAACR,EAAQM,EAAcpI,GAEhCA,CACT,EAKAsI,EAAAA,WAYC,CAZDA,SAAYR,CAAS,CAAEM,CAAoB,CAAEpI,CAAQ,WAA9BoI,GAAAA,CAAAA,EAAe,CAAA,CAAA,EACpC,IAAMH,EAAQ,IAAI,CAACL,MAAM,CAACzE,GAAG,CAAC2E,EAAOvD,KAAK,EAE1C,GAAI0D,EACF,IAAK,IAAIvS,EAAIuS,EAAMtS,MAAM,CAAG,EAAGD,GAAK,EAAGA,IAAK,CAC1C,IAAMoL,EAAOmH,CAAK,CAACvS,EAAE,CACjB,CAAA,AAAC0S,IAAgBtH,EAAKiH,eAAe,AAAfA,GACtBjH,EAAKoH,KAAK,CAACJ,IAAS9H,EAAIjC,IAAI,CAAC+C,EACnC,CAGF,OAAOd,CACT,EArDW2H,CAsDZ,ICtDMY,gBAAA,WAAMA,SAAAA,IACXC,IAAAA,CAAAA,KAAAA,CAAa,EAAE,CAId,IAAA,CACDC,WAAc,CAAA,EANHF,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAgBXG,EAAAA,SAEC,CAFDA,SAAUjE,CAAQ,EAChB,IAAI,CAAC+D,KAAK,CAACzK,IAAI,CAAC0G,EAClB,EAEAxG,EAAAA,KAEC,CAFDA,WACE,IAAI,CAACuK,KAAK,CAAC7S,MAAM,CAAG,CACtB,EAEAgT,EAAAA,QAEC,CAFDA,WACE,OAAO,IAAI,CAACH,KAAK,CAACI,GAAG,EACvB,EAEAf,EAAAA,MAEC,CAFDA,SAAOC,CAAS,EACd,IAAI,CAACrD,KAAK,CAACoD,MAAM,CAACC,EAAQ,IAAI,CAACC,eAAe,CAChD,EAEAc,EAAAA,MAOC,CAPDA,SAAOf,CAAS,CAAEM,CAAoB,WAApBA,GAAAA,CAAAA,EAAe,CAAA,CAAA,EAC/B,IAAK,IAAI1S,EAAI,IAAI,CAAC8S,KAAK,CAAC7S,MAAM,CAAG,EAAGD,GAAK,EAAGA,IAAK,CAE/C,IAAM4N,EAASwF,AADK,IAAI,CAACN,KAAK,CAAC9S,EAAE,CACNyS,SAAS,CAACL,EAAQM,GAC7C,GAAI9E,EAAQ,OAAOA,CACrB,CAEF,EAEAyF,EAAAA,SAOC,CAPDA,SAAUjB,CAAS,CAAEM,CAAoB,CAAEpI,CAAQ,WAA9BoI,GAAAA,CAAAA,EAAe,CAAA,CAAA,EAClCpI,EAAIrK,MAAM,CAAG,EACb,IAAK,IAAID,EAAI,IAAI,CAAC8S,KAAK,CAAC7S,MAAM,CAAG,EAAGD,GAAK,EAAGA,IAE1CoT,AADoB,IAAI,CAACN,KAAK,CAAC9S,EAAE,CACrB4S,WAAW,CAACR,EAAQM,EAAcpI,GAEhD,OAAOA,CACT,EAhDWuI,EAAAA,EAAAA,EAQP9D,IAAAA,QAAJtB,IAAA,WACE,OAAO,IAAI,CAACqF,KAAK,CAAC,IAAI,CAACA,KAAK,CAAC7S,MAAM,CAAG,EAAE,AAC1C,IAEIoS,IAAAA,kBAAJ5E,IAAA,WACE,OAAO,IAAI,CAACsF,WAAW,CAAG,CAC5B,KAdWF,CAiDZ,ICpDD,SAASS,GAAkB7U,CAAC,EAKxB,MAAO6U,AAJPA,CAAAA,GAAoB3U,OAAOC,cAAc,CAAGD,OAAO4U,cAAc,CAAG,SAAwB9U,CAAC,EACzF,OAAOA,EAAEI,SAAS,EAAIF,OAAO4U,cAAc,CAAC9U,EACpD,CAAA,EAE6BA,EAC7B,CCDA,SAAS+U,GAAmBtF,CAAK,EAC7B,IAAIuF,EAAS,AAAe,YAAf,OAAOlF,IAAqB,IAAIA,IAAQmF,KAAAA,EAiBrD,MAAOF,AAhBPA,CAAAA,GAAqB,SAAStF,CAAK,EAC/B,GAAIA,AAAU,OAAVA,GCPuD,KAAxDI,SAAS5M,QAAQ,CAACP,IAAI,CDOkB+M,GCPbrD,OAAO,CAAC,iBDOa,OAAOqD,EAC1D,GAAI,AAAiB,YAAjB,OAAOA,EAAsB,MAAM,AAAIjP,UAAU,sDACrD,GAAI,AAAkB,KAAA,IAAXwU,EAAwB,CAC/B,GAAIA,EAAOpG,GAAG,CAACa,GAAQ,OAAOuF,EAAOhG,GAAG,CAACS,GACzCuF,EAAOhM,GAAG,CAACyG,EAAOyF,EACrB,CAED,SAASA,IACL,OAAO5F,GAAWG,EAAO7L,UAAWiR,GAAkB,IAAI,EAAElU,WAAW,CAC1E,CAGD,OAFAuU,EAAQzU,SAAS,CAAGP,OAAOQ,MAAM,CAAC+O,EAAMhP,SAAS,CAAE,CAAEE,YAAa,CAAEC,MAAOsU,EAASxT,WAAY,CAAA,EAAOb,SAAU,CAAA,EAAMC,aAAc,CAAA,CAAM,CAAA,GAEpIf,EAAkBmV,EAASzF,EAC1C,CAAA,EAE8BA,EAC9B,ChBrBO,IAAA0F,GAAA,WAAA,EAAA,SAAAC,CAAA,WAAMD,EAIThS,CAAiB,CACjB6G,CAAe,CACCG,CAAsC,CACtDD,CAA8B,CACdE,CAAa,cAFbD,AAIhBqB,CAAAA,EAAA4J,EAAA1S,IAAA,CAAA,IAAA,CAAMsH,IAJUG,IAAAA,AAAAA,EAAAA,QAAAA,CAAAA,EACAD,EAAAA,MAAAA,CAAAA,IACAE,IAAAA,CAAAA,EAGhBoB,EAAKrI,IAAI,CAAGA,IAXHgS,OAAAA,EAAAA,EAAAA,GAcXE,AAdWF,EAAAA,SAAAA,CAcFlS,QA4CR,CA5CD,WAEE,IAAQ+G,EAA8BwB,AAAA,IAAI,CAAlCxB,QAASG,EAAqBqB,AAAA,IAAI,CAAzBrB,QAAUD,CAAAA,EAAWsB,AAAA,IAAI,CAAftB,MAAAA,QAC3B,AAAKA,GAIOnJ,EAARoJ,EAAoBf,MAGde,EAASlB,KAAK,CAChBkB,EAASjB,GAAG,EAENgB,EAAOsD,KAAK,CAAC,MAEH,IAAO,CAACrK,IAAI,CAAC,KAAI6G,EAAQ,QAXxCA,CAwCX,EA1DWmL,MAAgBG,OAAhBH,CAAAA,GACJI,iBAAoB,CAAA,EA4DtB,IAAAjR,KAAKA,EAKX,CAAA,oJALWA,GkB7DCkR,GAAN,SAEIhM,CAAsB,CAC7BiM,CAAyB,CAClBC,CAAuC,OAFvClM,IAAAA,CAAAA,OACAiM,UAAAA,CAAAA,OACAC,cAAAA,CAAAA,CAEV,EjBJMnR,KAAKA,EAKX,CAAA,yEALWA,GAeLoR,gBAAA,WAAMA,SAAAA,EAETvF,CAAoB,CACpB5G,CAAwB,CACxBoM,CAA8B,CACvBC,CAAyB,CACzBC,CAAmC,CAC1ClC,CAA8B,WAAvBA,GAAAA,CAAAA,EAAkB,CAAA,CAAA,OALlBxD,KAAAA,CAAAA,OACA5G,IAAAA,CAAAA,OACAoM,OAAAA,CAAAA,OACAC,QAAAA,CAAAA,OACAC,cAAAA,CAAAA,OACAlC,eAAAA,CAAAA,EAPE+B,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAUX3M,EAAAA,GAYC,CAZDA,SACEoH,CAAa,CACb2F,CAAuB,CACvBH,CAAuB,CACvBC,CAAyB,CACzBC,CAAmC,EAEnC,IAAI,CAAC1F,KAAK,CAAGA,EACb,IAAI,CAAC5G,IAAI,CAAGuM,EACZ,IAAI,CAACH,OAAO,CAAGA,EACf,IAAI,CAACC,QAAQ,CAAGA,EAChB,IAAI,CAACC,cAAc,CAAGA,CACxB,EAEA/B,EAAAA,KAkBC,CAlBDA,SAAMJ,CAAkB,EACtB,GAAIA,AAAW,IAAXA,EAAOnK,IAAI,EAAwB,IAAI,CAACA,IAAI,GAAKmK,EAAOnK,IAAI,CAAE,MAAO,CAAA,EACzE,GAAI,AAA8B,IAA9B,IAAI,CAACA,IAAI,CAAqB,CAChC,GAAI,CAACmK,EAAOiC,OAAO,EAAI,CAACjC,EAAOmC,cAAc,CAAE,MAAO,CAAA,EAEtD,IACuBnC,EADjBxH,EAAS,IAAiC,CAACyJ,OAAO,CAAEI,SAAS,CAACC,QAAQ,CACtEC,EAAiBvC,AAAqB,MAArBA,CAAAA,EAAAA,EAAOmC,cAAc,AAAA,EAArBnC,EAAsDA,EAAOiC,OAAO,CAAEI,SAAS,CAACC,QAAQ,CACzGzU,EAAS2K,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAQ3K,MAAM,CAC7B,GAAIA,IAAW0U,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAgB1U,MAAM,AAANA,EAAQ,MAAO,CAAA,EAC9C,IAAK,IAAID,EAAI,EAAGA,EAAIC,EAAQD,IAAK,CAC/B,IAAM4U,EAAKhK,CAAM,CAAC5K,EAAE,CAClB6U,EAAKF,CAAc,CAAC3U,EAAE,CACxB,GAAI4U,AL8CW,MK9CXA,GAAkBC,AL8CP,MK9COA,GAClBD,IAAOC,EAAI,MAAO,CAAA,CACxB,CAEF,CACA,MAAO,CAAA,CACT,EA1CWT,CA2CZ,IkB3DMU,GAAA,WAAA,EAAA,SAAAV,CAAA,WAAMU,EAGC7L,CAAc,CAAEoL,CAAmC,EAC7D,IAAMpM,EAAO,IAAIgM,GACfI,EAAQI,SAAS,CAAC3F,UAAU,CAAC7G,IAAI,CACjCoM,EAAQI,SAAS,CAAC3F,UAAU,CAACiG,aAAa,CAAC9L,MAAM,EAEnD,OAAAmL,EAAMnL,IAAAA,CAAAA,IAAAA,CAAAA,EAAQjG,GAAYgS,EAAE,CAAEX,EAASpM,IAAAA,IAAAA,CAR9B6M,OAAAA,EAAAA,EAAAA,GAAAA,GAAiBV,ICDvBa,GAAA,WAAA,EAAA,SAAAb,CAAA,WAAMa,EAGChM,CAAc,CAAEoL,CAAgC,EAC1D,OAAAD,EAAMnL,IAAAA,CAAAA,IAAAA,CAAAA,EAAQjG,GAAYkS,MAAM,CAAEb,IAAAA,IAAAA,CAJzBY,OAAAA,EAAAA,EAAAA,GAAAA,GAAqBb,ICC3Be,GAAA,WAAA,EAAA,SAAAf,CAAA,EAAMe,SAAAA,EAUTtG,CAAa,CACbyF,CAAwB,CACxBc,CAAyB,CACzBC,CAI+B,cAG/BpL,AADAA,CAAAA,EAAAmK,EAAAjT,IAAA,CAAA,IAAA,CAAM0N,EAAO7L,GAAYsS,GAAG,CAAED,EAASf,IAAAA,IAAAA,EAClCc,gBAAgB,CAAGA,IApBfD,OAAAA,EAAAA,EAAAA,GAAAA,GAAkBf,ICDxBmB,gBAAA,WAAMA,SAAAA,IAMXC,IAAAA,CAAAA,gBAAAA,CAAiD,EAAE,CAEnDC,IAAAA,CAAAA,uBAAAA,CAAuD,EAAE,CAR9CF,OAUXG,AAVWH,EAAAA,SAAAA,CAUXG,+BAEC,CAFDA,WACE,OAAO,IAAI,CAACD,uBAAuB,CAACrJ,MAAM,CAAC,SAACuJ,CAAAA,EAASA,OAAWnW,EAAXmW,EAAKC,MAAM,CAAY3S,GAAQsD,eAAe,GACrG,EAZWgP,CAaZ,ICKcM,gBAAA,WAAMA,SAAAA,IAMnBC,IAAAA,CAAAA,aAAAA,CAA4B,EAAE,MAC9BC,UAA+BrC,CAAAA,KAAAA,EAC/BsC,IAAAA,CAAAA,gBAAAA,CAA0E,IAAInD,GAC9EoD,IAAAA,CAAAA,eAAAA,CAGI,GACIC,IAAAA,CAAAA,WAAAA,CAAc,IAAIX,GAClBY,IAAAA,CAAAA,qBAAAA,CAA2E,IAAI5H,IAiBrF,IAAI,CAACyE,SAAS,GA/BG6C,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAkCnBO,EAAAA,KASC,CATDA,SAAMhM,CAAgC,EACpC,IAAI,CAACiM,gBAAgB,CAAGjM,EACxB,IAAI,CAAC0L,aAAa,CAAC7V,MAAM,CAAG,EAC5B,IAAI,CAACiW,WAAW,CAAG,IAAIX,GACvB,IAAI,CAACS,gBAAgB,CAACzN,KAAK,GAC3B,IAAI,CAACyK,SAAS,EAIhB,EAEAA,EAAAA,SAEC,CAFDA,WACE,IAAI,CAACgD,gBAAgB,CAAChD,SAAS,CAAC,IAAIf,GACtC,EAEAgB,EAAAA,QAEC,CAFDA,WACE,OAAO,IAAI,CAAC+C,gBAAgB,CAAC/C,QAAQ,EACvC,EAEAqD,EAAAA,kBAEC,CAFDA,SAAmBC,CAAW,CAAEC,CAAqB,EACnD,IAAI,CAACL,qBAAqB,CAAC1O,GAAG,CAAC8O,EAAKC,EACtC,EAEAC,EAAAA,kBAEC,CAFDA,SAAmBF,CAAW,EAC5B,OAAO,IAAI,CAACJ,qBAAqB,CAAC1I,GAAG,CAAC8I,EACxC,EAEAG,EAAAA,WAMC,CANDA,SAAYC,CAAgB,CAAElO,CAAe,EAI3CK,QAAAA,CAAOC,KAAK,CAACN,EAEf,EAEAmO,EAAAA,aAEC,CAFDA,SAAcD,CAAgB,CAAElO,CAAe,EAC7CK,EAAAA,MAAAA,CAAOwE,IAAI,CAAC,IAAIsG,GAAQ7Q,GAAY8T,eAAe,CAAEpO,EAASkO,EAAKxN,GAAU2N,mBAAmB,EAAEpV,QAAQ,GAC5G,EAvEmBmU,EAAAA,EAAAA,EAsBfkB,IAAAA,aAAJtJ,IAAA,WACE,OAAO,IAAI,CAACyI,WAAW,AACzB,IAEI9L,IAAAA,kBAAJqD,IAAA,WACE,OAAO,IAAI,CAAC4I,gBAAgB,AAC9B,KA5BmBR,IAAAA,CAAAA,GAIZmB,aAAAA,CAA4B,IAAI5C,GAAW,GAAI,MClBjD,IAAM6C,GAAN,SAEIhP,CAAsB,CAC7BiM,CAAyB,CAClBC,CAAuC,OAFvClM,IAAAA,CAAAA,OACAiM,UAAAA,CAAAA,OACAC,cAAAA,CAAAA,CAEV,EAEY+C,GAAN,SAEHC,CAA2B,CACpBtI,CAAgB,CAChBuI,CAAiB,CACxB/E,CAA8B,WAAvBA,GAAAA,CAAAA,EAAkB,CAAA,CAAA,OAHlB8E,QAAAA,CAAAA,OACAtI,KAAAA,CAAAA,OACAuI,QAAAA,CAAAA,OACA/E,eAAAA,CAAAA,CAEV,EtBPD,SAASgF,GAAiBC,CAAyB,EACjD,OAAO,SAA0CrU,CAAU,EACzDA,EAAQ/D,SAAS,CAACqY,EAAE,CAAGD,EACjBrU,EAASiF,IAAI,CAAGH,GAAeC,gBAAgB,CAAC/E,EACxD,CACF,CAEO,IAAAuU,gBAAA,WAAeA,SAAAA,IAAAA,CAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OA6BpB/P,EAAAA,GAUC,CAVDA,SAAIkP,CAAgB,CAAEc,CAAqB,EACzC,IAAI,CAACC,SAAS,CAAGf,EACjB,IAAI,CAACgB,SAAS,CAAGF,EACjB,IAAA,IAA8BG,EAA9BC,EAAA9W,EAAoB0W,GAAU,CAAA,AAAAG,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAnB+V,IAAAA,EAAAA,EAAAA,KAAAA,CACAtY,EAALsY,EAjCYN,IAkCdM,CAAAA,EAAMC,OAAO,CAAG,IAAI,CAExB,CAEA,IAAI,CAACC,IAAI,EACX,EAEAA,EAAAA,IAAS,CAATA,aAEApQ,EAAAA,OAAkB,CAAlBA,aAEAqQ,EAAAA,QAGC,CAHDA,SAASC,CAAY,EAEnB,OADA,IAAI,CAACC,UAAU,CAAGD,EACXA,CACT,EAEAE,EAAAA,QAEC,CAFDA,WACE,OAAO,IAAI,CAACD,UAAU,AACxB,EAGAE,EAAAA,OAIC,CAJDA,SAAQC,CAAuB,EAC7B,IAAMJ,EAAOI,EAAQC,cAAc,CAAC,IAAI,CAACd,QAAQ,EAEjD,OADA,IAAI,CAACQ,QAAQ,CAACC,GACPA,CACT,EAKAM,EAAAA,eAAwC,CAAxCA,SAAgBC,CAAoB,EAAG,EAhEnBjB,EAAAA,EAAAA,EAiBhB5B,IAAAA,aAAJ,WACE,OAAO,IAAI,CAACmC,OAAO,AACrB,IAEIN,IAAAA,WAAJhK,IAAA,WACE,OAAO,IAAI,CAACkK,SAAS,AACvB,IAEI/O,IAAAA,WAAJ6E,IAAA,WACE,OAAO,IAAI,CAACiK,SAAS,AACvB,KA3BoBF,CAiErB,KAEgBvU,EAAAA,IAAAA,CAAAA,GAAAA,CAAAA,CAAAA,GAaCyV,YAAAA,CAAT,SAAsB/C,CAAe,EAC1C,GAAQnW,EAAJmW,EAAgB3M,IAClB,OAAO2M,CAET,MAAM,WACR,IAEgBlI,GAAAA,CAAT,SAAavF,CAAiB,CAAEuQ,CAAoB,CAAE9B,CAAgB,CAAEc,CAAqB,EAClG,IAAM9B,EAAOzN,EAAKuF,GAAG,GACrBkI,EAAKlO,GAAG,CAACkP,EAAKc,GACd9B,EAAK6C,eAAe,CAACC,GACrBA,EAAG3C,aAAa,CAACzN,IAAI,CAACsN,EACxB,EAGOzS,EAAA,WAAA,EAAA,SAAAsU,CAAA,EAAMtU,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAAoBsU,EAAAA,MAApBtU,WAAAA,CAAAA,OADkByV,GAAAA,GAAAA,OAAAA,MAIxBxV,EAAA,WAAA,EAAA,SAAAqU,CAAA,EAAMrU,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GACX2Q,AADW3Q,EAAAA,SAAAA,CACFqV,eAER,CAFD,SAAyBC,CAAoB,EAC3CA,EAAGzF,SAAS,EACd,EAHW7P,CAAmBqU,EAAAA,MAAnBrU,UAAAA,CAAAA,OADkByV,GAAAA,GAAAA,WAAAA,MAQxBxV,EAAA,WAAA,EAAA,SAAAoU,CAAA,EAAMpU,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GACX0Q,AADW1Q,EAAAA,SAAAA,CACFoV,eAER,CAFD,SAAyBC,CAAoB,EAC3CA,EAAGxF,QAAQ,EACb,EAHW7P,CAAsBoU,EAAAA,MAAtBpU,aAAAA,CAAAA,OADkByV,GAAAA,GAAAA,eAAAA,MAQxBxV,EAAA,WAAA,EAAA,SAAAmU,CAAA,EAAMnU,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGXyQ,EAASkE,IAER,CAFD,WACE,IAAI,CAACc,qBAAqB,CAAG,CAAA,CAC/B,EAEAhF,EAAS0E,eAIR,CAJD,SAAyBC,CAAoB,EACvCxV,EAAQyV,YAAY,CAAC,IAAI,CAACjB,QAAS,CAAC,EAAE,EAAExP,IAAI,GAAKrF,GAAQmW,MAAM,EACjEN,CAAAA,EAAGxC,eAAe,CAAC+C,eAAe,CAAG,IAAI,CAE7C,EAEAlF,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQW,kBAAkB,CAAC,IAAI,EACtD,EAfW5V,CAAsBmU,EAAAA,MAAtBnU,aAAAA,CAAAA,OADkB6V,GAAAA,GAAAA,cAAAA,MA0CxB5V,EAAA,WAAA,EAAA,SAAAkU,CAAA,EAAelU,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GASpBwQ,AAToBxQ,EAAAA,SAAAA,CASX0U,IAER,CAFD,WACE,IAAI,CAACmB,KAAK,CAAGzF,KAAAA,CACf,EAXoBpQ,EAAAA,EAAAA,EAEhB2E,IAAAA,OAGJwF,IAAA,WACS,IAAA2L,EAAP,OAAO,MAAAA,CAAAA,EAAA,IAAI,CAACD,KAAK,AAAA,EAAVC,EN/EU,GMgFnB,EALA3R,IAAA,SAASiH,CAA+B,EACtC,IAAI,CAACyK,KAAK,CAAGzK,CACf,KAJoBpL,CAA0BkU,EAAAA,MAA1BlU,iBAAAA,CAAAA,EAoCfC,EAAA,WAAA,EAAA,SAAAiU,CAAA,EAAMjU,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIXuQ,EAASkE,IAGR,CAHD,WACE,IAAI,CAACjD,aAAa,CAAGrB,KAAAA,EACrB,IAAI,CAACS,cAAc,CAAGT,KAAAA,CACxB,EAEAI,EAAS0E,eA8BR,CA9BD,SAAyBC,CAAoB,EAC3C,IASIY,EATE5B,EAAW,IAAI,CAACA,QAAQ,CACxB6B,EAAc7B,EAASxX,MAAM,CAC7BsZ,EAAY9B,CAAQ,CAAC,EAAE,CACvB1C,EAAgBwE,EAAUxE,aAAa,AAC7C,CAAA,IAAI,CAACA,aAAa,CAAGA,EACrB,IAAI,CAACZ,cAAc,CAAGY,EAAcZ,cAAc,CAElD,IAAMqF,EAAK/B,CAAQ,CAAC,EAAE,CAGtB,GAAI6B,AAAgB,IAAhBA,GAAqBA,AAAgB,IAAhBA,EAAmB,CAC1C,IAAM9E,EAAa,IAAIyC,GAAWsC,EAAUtR,IAAI,CAAE8M,EAAc9L,MAAM,CAAE,IAAI,CAACkL,cAAc,EACrFsF,EAAchC,CAAQ,CAAC,EAAE,CAE/B4B,EAAK,IAAIlE,GAAUqE,EAAGvQ,MAAM,CAAEuL,EAAY,CAAA,EAAOiF,OAC5C,CACL,IAAMtF,EAAiBsD,CAAQ,CAAC,EAAE,AAMlC,CAAA,IAAI,CAACtD,cAAc,CAAGA,EACtB,IAAMK,EAAa,IAAIyC,GAAWsC,EAAUtR,IAAI,CAAE8M,EAAc9L,MAAM,CAAE,IAAI,CAACkL,cAAc,EACrFsF,EAAchC,CAAQ,CAAC,EAAE,CAE/B4B,EAAK,IAAIlE,GAAUqE,EAAGvQ,MAAM,CAAEuL,EAAY,CAAA,EAAOiF,EACnD,CACAhB,EAAGzC,gBAAgB,CAAC7D,MAAM,CAACkH,EAC7B,EAEAvF,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQoB,sBAAsB,CAAC,IAAI,EAC1D,EA3CWnW,CAA0BiU,EAAAA,MAA1BjU,iBAAAA,CAAAA,OADkBoW,GAAAA,GAAAA,kBAAAA,MAgDxBnW,EAAA,WAAA,EAAA,SAAAgU,CAAA,EAAMhU,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAIXsQ,AAJWtQ,EAAAA,SAAAA,CAIFgV,eAIR,CAJD,SAAyBzO,CAAmB,EAC1C,IAAM0N,EAAW,IAAI,CAACA,QAAQ,AAC9B,CAAA,IAAI,CAAC1C,aAAa,CAAI0C,AAAoB,IAApBA,EAASxX,MAAM,CAASwX,CAAQ,CAAC,EAAE,CAAGA,CAAQ,CAAC,EAAE,CACvE,IAAI,CAACxP,IAAI,CAAG,IAAI,CAAC8M,aAAa,CAAC9M,IAAI,AACrC,EARWzE,CAA2BgU,EAAAA,MAA3BhU,kBAAAA,CAAAA,OADkBoW,GAAAA,GAAAA,oBAAAA,MAaxBnW,EAAA,WAAA,EAAA,SAAA+T,CAAA,EAAM/T,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAAsB+T,EAAAA,MAAtB/T,aAAAA,CAAAA,OADkBoW,GAAAA,GAAAA,cAAAA,MAIxBnW,EAAA,WAAA,EAAA,SAAA8T,CAAA,EAAM9T,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAIXoQ,AAJWpQ,EAAAA,SAAAA,CAIF8U,eASR,CATD,SAAyBC,CAAoB,EAC3C,IAAMX,EAAQ,IAAI,CAACL,QAAQ,CAAC,EAAE,CACrBjY,EAALsY,EAAiB9O,IACnB,IAAI,CAAC8Q,SAAS,CAAGhC,EAAM7P,IAAI,CAG3B,IAAI,CAAC6R,SAAS,CAAwBhC,EAAOgC,SAAS,CACtD,IAAI,CAAC7Q,MAAM,CAAwB6O,EAAO7O,MAAM,AAEpD,EAbWvF,CAA4B8T,EAAAA,MAA5B9T,mBAAAA,CAAAA,OADkBqW,GAAAA,GAAAA,qBAAAA,MA2CxBpW,EAAA,WAAA,EAAA,SAAA6T,CAAA,EAAM7T,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAMXmQ,EAASkE,IAER,CAFD,WACE,IAAI,CAACgC,SAAS,CAAGtG,KAAAA,CACnB,EAKAI,EAAS0E,eAOR,CAPD,SAAyBC,CAAoB,EAC3C,IAIkBhB,EAJZA,EAAW,IAAI,CAACA,QAAQ,CACxBwC,EAAaxC,CAAQ,CAAC,EAAE,AAC9B,CAAA,IAAI,CAACxP,IAAI,CAAGgS,EAAWhS,IAAI,CAC3B,IAAI,CAACgB,MAAM,CAAGgR,EAAWhR,MAAM,CAC/B,IAAI,CAAC+Q,SAAS,CAAIvC,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,AAAa,MAAbA,CAAAA,EAAAA,CAAU,CAAC,EAAE,AAAA,EAAA,KAAA,EAAdyC,EAAmCC,IAAI,CACxD,IAAI,CAACC,QAAQ,CAAG,AAAqB,UAArB,OAAO,IAAI,CAACnS,IAAI,AAClC,EApBWtE,EAAAA,EAAAA,EASPwQ,IAAAA,iBAAJ1G,IAAA,WACE,OAAO,IAAI,CAACgK,QAAQ,CAAC,EAAE,AACzB,KAXW9T,CAAsB6T,EAAAA,MAAtB7T,aAAAA,CAAAA,OADkB0W,GAAAA,GAAAA,cAAAA,MAyBxBzW,EAAA,WAAA,EAAA,SAAA4T,CAAA,EAAM5T,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAEXkQ,AAFWlQ,EAAAA,SAAAA,CAEF4U,eAGR,CAHD,SAAyBC,CAAoB,EAC3C,IAAM6B,EAAsB,IAAI,CAAC7C,QAAQ,CAAC,EAAE,AAC5C,CAAA,IAAI,CAAC0C,IAAI,CAAGG,EAAoBjb,KAAK,AACvC,EALWuE,CAAuB4T,EAAAA,MAAvB5T,cAAAA,CAAAA,OADkB2W,GAAAA,GAAAA,eAAAA,MAUxB1W,EAAA,WAAA,EAAA,SAAA2T,CAAA,EAAM3T,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAIXiQ,AAJWjQ,EAAAA,SAAAA,CAIF2U,eAsBR,CAtBD,SAAyBC,CAAoB,EAC3C,IAAM+B,EAAW,IAAI,CAAC/C,QAAQ,CAAC,EAAE,CAEjC,OADA,IAAI,CAACxO,MAAM,CAAGuR,EAASvR,MAAM,CACrBuR,EAASvS,IAAI,EACnB,KAAKtF,GAAW8X,IAAI,CAClB,IAAI,CAACC,OAAO,CAAG,SAACvM,CAAGwM,CAAAA,CAAAA,SAAMxM,EAAIwM,GAC7B,KACF,MAAKhY,GAAWiY,IAAI,CAClB,IAAI,CAACF,OAAO,CAAG,SAACvM,CAAGwM,CAAAA,CAAAA,SAAMxM,EAAIwM,GAC7B,KACF,MAAKhY,GAAWkY,IAAI,CAClB,IAAI,CAACH,OAAO,CAAG,SAACvM,CAAGwM,CAAAA,CAAAA,SAAMxM,EAAIwM,GAC7B,KACF,MAAKhY,GAAWmY,KAAK,CACnB,IAAI,CAACJ,OAAO,CAAG,SAACvM,CAAGwM,CAAAA,CAAAA,SAAMxM,EAAIwM,GAC7B,KACF,MAAKhY,GAAWoY,OAAO,CACrB,IAAI,CAACL,OAAO,CAAG,SAACvM,CAAGwM,CAAAA,CAAAA,SAAMxM,EAAIwM,GAC7B,KACF,SACElC,EAAG/B,WAAW,CAAC8D,EAAS5R,QAAQ,CAAE,4BAA4B4R,EAASvR,MAAM,CACjF,CACF,EA1BWpF,CAA0C2T,EAAAA,MAA1C3T,iCAAAA,CAAAA,OADkBmX,GAAAA,GAAAA,oCAAAA,MA+BxBlX,EAAA,WAAA,EAAA,SAAA0T,CAAA,EAAM1T,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGXgQ,EAASkE,IAER,CAFD,WACE,IAAI,CAAC3Y,KAAK,CAAGqU,KAAAA,CACf,EAEAI,EAAS0E,eAgBR,CAhBD,SAAyBC,CAAoB,EAC3C,GAAI,AAAyB,IAAzB,IAAI,CAAChB,QAAQ,CAACxX,MAAM,CAAQ,CAC9B,IAAM6X,EAAQ,IAAI,CAACL,QAAQ,CAAC,EAAE,CACrBjY,EAALsY,EAAiB9O,KACnB,CAAA,IAAI,CAAC3J,KAAK,CAAG4L,OAAO6M,EAAM7O,MAAM,CAAA,CAWpC,CACF,EAvBWnF,CAAkC0T,EAAAA,MAAlC1T,yBAAAA,CAAAA,OADkBmX,GAAAA,GAAAA,2BAAAA,MA4BxBlX,EAAA,WAAA,EAAA,SAAAyT,CAAA,EAAMzT,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAIX+P,AAJW/P,EAAAA,SAAAA,CAIFiU,IASR,CATD,WACE,IAAMkD,EAAK,IAAI,CAACzD,QAAQ,CAAC,EAAE,CACrBjY,EAAF0b,EAAclS,IAChB,IAAI,CAACf,IAAI,CAAGiT,EAAGjS,MAAM,CAGrB,IAAI,CAAChB,IAAI,CAAIiT,EAAuCjT,IAAI,CACxD,IAAI,CAACgB,MAAM,CAAIiS,EAAuCjS,MAAM,AAEhE,EAbWlF,CAA8ByT,EAAAA,MAA9BzT,qBAAAA,CAAAA,OADkBoX,GAAAA,GAAAA,uBAAAA,MAkBxBnX,EAAA,WAAA,EAAA,SAAAwT,CAAA,EAAMxT,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAIX8P,AAJW9P,EAAAA,SAAAA,CAIFgU,IAIR,CAJD,WACE,IAAMoD,EAAQ,IAAI,CAAC3D,QAAQ,CAAC,EAAE,AAC9B,CAAA,IAAI,CAACxP,IAAI,CAAGmT,EAAMnT,IAAI,CACtB,IAAI,CAACgB,MAAM,CAAGmS,EAAMnS,MAAM,AAC5B,EARWjF,CAAwCwT,EAAAA,MAAxCxT,+BAAAA,CAAAA,OADkBqX,GAAAA,GAAAA,mCAAAA,MAaxBpX,EAAA,WAAA,EAAA,SAAAuT,CAAA,EAAMvT,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAGX6P,AAHW7P,EAAAA,SAAAA,CAGFuU,eA6BR,CA7BD,SAAyBC,CAAoB,EAE3C,IADIY,EACE5B,EAAW,IAAI,CAACA,QAAQ,CACxB6D,EAAiB7D,EAASxX,MAAM,CACtC,GAAIqb,AAAmB,IAAnBA,EAAsB,CACxB,IAA0C7D,EAAAA,CAAQ,CAAC,EAAE,CAA7C1C,EAAkC0C,EAAlC1C,aAAeZ,CAAAA,EAAmBsD,EAAnBtD,cAAAA,AACvB,CAAA,IAAI,CAACgD,QAAQ,CAAG,IAAIF,GAAWlC,EAAc9M,IAAI,CAAE8M,EAAc9L,MAAM,CAAEkL,OACpE,CACL,IAAMoH,EAAe9D,CAAQ,CAAC,EAAE,AAChC,CAAA,IAAI,CAACN,QAAQ,CAAGoE,EAAapE,QAAQ,AACvC,CAEA,GAAImE,AAAmB,IAAnBA,GAAwBA,AAAmB,IAAnBA,EAE1BjC,EAAK,IAAIlE,GAAUqE,AADR/B,CAAQ,CAAC,EAAE,CACAxO,MAAM,CAAE,IAAI,CAACkO,QAAQ,CAAE,CAAA,EAAO,IAAI,EACxDsB,EAAGzC,gBAAgB,CAAC7D,MAAM,CAACkH,QACtB,GAAIiC,AAAmB,IAAnBA,GAAwBA,AAAmB,IAAnBA,EAAsB,CACvD,IAAMnE,EAAW,IAAI,CAACA,QAAQ,CACxBhD,EAAiB,IAAI,CAACsD,QAAQ,CAAC,EAAE,AAMvCN,CAAAA,EAAShD,cAAc,CAAGA,EAE1BkF,EAAK,IAAIlE,GAAUqE,AADR/B,CAAQ,CAAC,EAAE,CACAxO,MAAM,CAAEkO,EAAU,CAAA,EAAO,IAAI,EACnDsB,EAAGzC,gBAAgB,CAAC7D,MAAM,CAACkH,EAC7B,CACF,EAhCWpV,CAA2BuT,EAAAA,MAA3BvT,kBAAAA,CAAAA,OADkBuX,GAAAA,GAAAA,oBAAAA,MAqCxBtX,EAAA,WAAA,EAAA,SAAAsT,CAAA,EAAMtT,SAAAA,iBACXuX,EAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YAAAA,IAAAA,CAAAA,EAAAA,MAAAA,CAAsB,EAAE,GADbvX,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGX4P,EAASkE,IAER,CAFD,WACE,IAAI,CAACyD,MAAM,CAACxb,MAAM,CAAG,CACvB,EAEA6T,EAAS0E,eAeR,CAfD,SAAyBC,CAAoB,EAC3C,IAAQhB,EAAgCxN,AAAA,IAAI,CAApCwN,QAAUgE,CAAQC,EAAczR,AAAA,IAAI,CAA1BwR,MAAAA,CAClB,GAAIhE,AAAoB,IAApBA,EAASxX,MAAM,CACjByb,EAAUrT,IAAI,CAACoP,CAAQ,CAAC,EAAE,MACrB,CACL,IAAMtM,EAAOsM,CAAQ,CAAC,EAAE,CAClB+B,EAAK/B,CAAQ,CAAC,EAAE,CAChBkE,EAAexQ,EAAKsQ,MAAM,CAACxb,MAAM,AACvCyb,CAAAA,EAAUzb,MAAM,CAAG0b,EAAe,EAElC,IAAK,IAAI3b,EAAI,EAAGA,EAAI2b,EAAc3b,IAChC0b,CAAS,CAAC1b,EAAE,CAAGmL,EAAKsQ,MAAM,CAACzb,EAAE,AAE/B0b,CAAAA,CAAS,CAACC,EAAa,CAAGnC,CAC5B,CACF,EAtBWtV,CAAuBsT,EAAAA,MAAvBtT,cAAAA,CAAAA,OADkB0X,GAAAA,GAAAA,eAAAA,MA2BxBzX,EAAA,WAAA,EAAA,SAAAqT,CAAA,EAAMrT,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GACX2P,AADW3P,EAAAA,SAAAA,CACFkU,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQuD,gBAAgB,CAAC,IAAI,EACpD,EAHW1X,CAAoBqT,EAAAA,MAApBrT,WAAAA,CAAAA,OADkB2X,GAAAA,GAAAA,WAAAA,MAQxB1X,EAAA,WAAA,EAAA,SAAAoT,CAAA,EAAMpT,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAMX0P,AANW1P,EAAAA,SAAAA,CAMFoU,eAMR,CAND,SAAyBC,CAAoB,EAC3C,IAAMsD,EAAa,IAAI,CAACtE,QAAQ,CAAC,EAAE,AACnC,CAAA,IAAI,CAAC5I,KAAK,CAAGkN,EAAWlN,KAAK,CAC7B,IAAI,CAACC,UAAU,CAAGiN,EAAWjN,UAAU,CACvC,IAAI,CAACkN,aAAa,CAAGD,EAAWE,iBAAiB,CACjD,IAAI,CAACvH,QAAQ,CAAGqH,EAAWrH,QAAQ,AACrC,EAZWtQ,CAA0BoT,EAAAA,MAA1BpT,iBAAAA,CAAAA,OADkB8X,GAAAA,GAAAA,kBAAAA,MAiBxB7X,EAAA,WAAA,EAAA,SAAAmT,CAAA,EAAMnT,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAMXyP,AANWzP,EAAAA,SAAAA,CAMFmU,eAWR,CAXD,SAAyBC,CAAoB,EAC3CA,EAAGxC,eAAe,CAAC+C,eAAe,CAAG,KACrCP,EAAGxC,eAAe,CAACkG,MAAM,CAAG,IAAI,CAEhC,IAAM1E,EAAW,IAAI,CAACA,QAAQ,CACxB0E,EAAS1E,CAAQ,CAAC,EAAE,CACpBuE,EAAgBvE,CAAQ,CAAC,EAAE,AACjC,CAAA,IAAI,CAAC5I,KAAK,CAAGsN,EAAOtN,KAAK,CACzB,IAAI,CAACC,UAAU,CAAGqN,EAAOrN,UAAU,CACnC,IAAI,CAACmN,iBAAiB,CAAGD,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAeC,iBAAiB,CACzD,IAAI,CAACvH,QAAQ,CAAGsH,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAetH,QAAQ,AACzC,EAjBWrQ,CAA2BmT,EAAAA,MAA3BnT,kBAAAA,CAAAA,OADkB+X,GAAAA,GAAAA,mBAAAA,MAsBxB9X,EAAA,WAAA,EAAA,SAAAkT,CAAA,EAAMlT,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIXwP,EAAS0E,eAKR,CALD,SAAyBC,CAAoB,EAC3CA,EAAGzF,SAAS,GACZ,IAAMyE,EAAW,IAAI,CAACA,QAAQ,AAC9B,CAAA,IAAI,CAAC5I,KAAK,CAAG4I,CAAQ,CAAC,EAAE,CACxB,IAAI,CAAC3I,UAAU,CAAG2I,CAAQ,CAAC,EAAE,AAC/B,EAEA3D,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQ+D,mBAAmB,CAAC,IAAI,EACvD,EAbW/X,CAAuBkT,EAAAA,MAAvBlT,cAAAA,CAAAA,OADkBgY,GAAAA,GAAAA,eAAAA,MAkBxB/X,EAAA,WAAA,EAAA,SAAAiT,CAAA,EAAMjT,SAAAA,mDACX0X,iBAAkC,CAAA,EAAE,CACpCvH,EAAAA,QAAAA,CAA+B,EAAE,GAFtBnQ,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIXuP,EAASkE,IAGR,CAHD,WACE,IAAI,CAACiE,iBAAiB,CAAChc,MAAM,CAAG,EAChC,IAAI,CAACyU,QAAQ,CAACzU,MAAM,CAAG,CACzB,EAEA6T,EAAS0E,eAyBR,CAzBD,SAAyBC,CAAoB,EAC3C,IAAMhB,EAAW,IAAI,CAACA,QAAQ,CACtBwE,EAAgChS,AAAA,IAAI,CAApCgS,iBAAAA,CAAmBvH,EAAazK,AAAA,IAAI,CAAjByK,QAAAA,CAE3B,GAAI+C,EAAAA,CAAQ,CAAC,EAAE,CAAY9S,GAAsB,CAC/C,IAEc4X,EAAAA,EAFRA,EAAO9E,CAAQ,CAAC,EAAE,CACxBwE,EAAkB5T,IAAI,CAAC,CAAEwG,MAAO0N,EAAK1N,KAAK,CAAEsI,SAAUoF,EAAKpF,QAAQ,CAAE9C,QAASkI,CAAK,GACnF7H,EAASrM,IAAI,CAACkU,AAAmB,MAAnBA,CAAAA,EAAAA,AAAAA,MAAAA,CAAAA,EAAAA,EAAKpF,QAAQ,AAAA,EAAboF,KAAAA,EAAAA,EAAetU,IAAI,AAAJA,EAAfsU,ENvdC,IMwdjB,MAAO,GAAI9E,EAAAA,CAAQ,CAAC,EAAE,CAAY9S,GAAsB,CACtD,IAQgC4X,EAAAA,EAR1BpR,EAAOsM,CAAQ,CAAC,EAAE,CAClB8E,EAAO9E,CAAQ,CAAC,EAAE,CAExBwE,AAAAA,EAAkB5T,IAAI,CAAtB4T,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAA0B9Q,EAAK8Q,iBAAiB,CAAA,CAAE,CAChDpN,MAAO0N,EAAK1N,KAAK,CACjBsI,SAAUoF,EAAKpF,QAAQ,CACvB9C,QAASkI,CACX,KACA7H,AAAAA,EAASrM,IAAI,CAAbqM,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAiBvJ,EAAKuJ,QAAQ,CAAA,CAAE6H,MAAAA,CAAAA,EAAAA,MAAAA,CAAAA,EAAAA,EAAKpF,QAAQ,AAARA,SAALoF,EAAetU,IAAI,AAAJA,EAAfsU,ENjejB,MMkejB,MAAsB/c,EAAXiY,CAAQ,CAAC,EAAE,CA3BblT,IA2B6D/E,EAAXiY,CAAQ,CAAC,EAAE,CAAYhT,IAChFwX,AAAAA,EAAkB5T,IAAI,CAAA+F,KAAA,CAAtB6N,YAA0BxE,CAAQ,CAAC,EAAE,CAACwE,iBAAiB,CAAA,CAAE,CAAE5H,QAASoD,CAAQ,CAAC,EAAE,AAAC,KAChF/C,AAAAA,EAASrM,IAAI,CAAA+F,KAAA,CAAbsG,YAAiB+C,CAAQ,CAAC,EAAE,CAAC/C,QAAQ,CAAA,CNpetB,QMqeN+C,EAAAA,CAAQ,CAAC,EAAE,CAAYhT,KAChCwX,EAAkB5T,IAAI,CAAC,CAAEgM,QAASoD,CAAQ,CAAC,EAAE,AAAC,GAC9C/C,EAASrM,IAAI,CNveE,KMyenB,EAEAyL,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQkE,0BAA0B,CAAC,IAAI,EAC9D,EAtCWjY,CAA8BiT,EAAAA,MAA9BjT,qBAAAA,CAAAA,OADkBkY,GAAAA,GAAAA,uBAAAA,MA2CxBjY,EAAA,WAAA,EAAA,SAAAgT,CAAA,EAAMhT,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAA2BgT,EAAAA,MAA3BhT,kBAAAA,CAAAA,OADkBkY,GAAAA,GAAAA,qBAAAA,MAIxBjY,EAAA,WAAA,EAAA,SAAA+S,CAAA,EAAM/S,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAAwB+S,EAAAA,MAAxB/S,eAAAA,CAAAA,OADkBkY,GAAAA,GAAAA,iBAAAA,MAIxBjY,EAAA,WAAA,EAAA,SAAA8S,CAAA,EAAM9S,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAA6B8S,EAAAA,MAA7B9S,oBAAAA,CAAAA,OADkBkY,GAAAA,GAAAA,sBAAAA,MAIxBjY,EAAA,WAAA,EAAA,SAAA6S,CAAA,EAAM7S,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAMXmP,EAASkE,IAGR,CAHD,WACE,IAAI,CAACb,QAAQ,CAAGzD,KAAAA,EAChB,IAAI,CAAC7E,KAAK,CAAG6E,KAAAA,CACf,EAEAI,EAAS0E,eAqBR,CArBD,SAAyBC,CAAoB,EAC3C,IACIoE,EADEpF,EAAW,IAAI,CAACA,QAAQ,CAS9B,GANIA,EAAAA,CAAQ,CAAC,EAAE,CAAY7S,GACzBiY,EAAsBpF,CAAQ,CAAC,EAAE,CACxBA,EAAAA,CAAQ,CAAC,EAAE,CAAY7S,IAChCiY,CAAAA,EAAsBpF,CAAQ,CAAC,EAAE,AAAA,EAG/BoF,EAAqB,CACvB,IAAI,CAAC1F,QAAQ,CAAG0F,EAAoB1F,QAAQ,CAC5C,IAAI,CAACtI,KAAK,CAAGgO,EAAoBhO,KAAK,CACtC,IAAMiO,EAAY,IAAI3H,GACpB0H,EAAoBhO,KAAK,CAAC5F,MAAM,CAChC4T,EAAoB1F,QAAQ,CAC5B,CAAA,EACA0F,GAEFpE,EAAGzC,gBAAgB,CAAC7D,MAAM,CAAC2K,EAC7B,CACF,EAhCWnY,CAA6B6S,EAAAA,MAA7B7S,oBAAAA,CAAAA,OADkBoY,GAAAA,GAAAA,qBAAAA,MAqCxBnY,EAAA,WAAA,EAAA,SAAA4S,CAAA,EAAM5S,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAIXkP,AAJWlP,EAAAA,SAAAA,CAIF4T,eAMR,CAND,SAAyBC,CAAoB,EAC3C,IAAMhB,EAAW,IAAI,CAACA,QAAQ,AAC9B,CAAA,IAAI,CAAC5I,KAAK,CAAG4I,CAAQ,CAAC,EAAE,CACxB,IAAM1C,EAAgB0C,CAAQ,CAAC,EAAE,CAC3BtD,EAAiBsD,CAAQ,CAAC,EAAE,AAClC,CAAA,IAAI,CAACN,QAAQ,CAAG,IAAIF,GAAWlC,EAAc9M,IAAI,CAAE8M,EAAc9L,MAAM,CAAEkL,EAC3E,EAVWvP,CAA4B4S,EAAAA,MAA5B5S,mBAAAA,CAAAA,OADkBoY,GAAAA,GAAAA,oBAAAA,MAuBxBnY,EAAA,WAAA,EAAA,SAAA2S,CAAA,EAAM3S,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAAiC2S,EAAAA,MAAjC3S,wBAAAA,CAAAA,OADkBoY,GAAAA,GAAAA,2BAAAA,MASxBnY,EAAA,WAAA,EAAA,SAAA0S,CAAA,EAAM1S,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GACXgP,AADWhP,EAAAA,SAAAA,CACFuT,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQ4E,kBAAkB,CAAC,IAAI,EACtD,EAHWpY,CAAsB0S,EAAAA,MAAtB1S,aAAAA,CAAAA,OADkBqY,GAAAA,GAAAA,cAAAA,MAQxBpY,EAAA,WAAA,EAAA,SAAAyS,CAAA,EAAMzS,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAMX+O,EAASkE,IAER,CAFD,WACE,IAAI,CAACgB,eAAe,CAAGtF,KAAAA,CACzB,EAEAI,EAAS0E,eAyBR,CAzBD,SAAyBC,CAAoB,EAC3C,IAAMhB,EAAW,IAAI,CAACA,QAAQ,AAC9B,CAAA,IAAI,CAAChD,SAAS,CAAGgD,CAAQ,CAAC,EAAE,CAC5B,IAAI,CAAC2F,UAAU,CAAG3F,CAAQ,CAAC,EAAE,CAE7BgB,EAAGxF,QAAQ,GACX,IAAMoG,EAAK,IAAIvE,GAAS,IAAI,CAACL,SAAS,CAAC5F,KAAK,CAAC5F,MAAM,CAAE,IAAI,EACzDwP,EAAGzC,gBAAgB,CAAC7D,MAAM,CAACkH,GAC3B,IAAI,CAAChH,eAAe,CAAGoG,EAAGzC,gBAAgB,CAAC3D,eAAe,CAE1D,IAAQ4D,EAAoBwC,EAApBxC,eAAAA,CACAkG,EAA4BlG,EAA5BkG,MAAQnD,CAAAA,EAAoB/C,EAApB+C,eAAAA,AACZmD,CAAAA,EAAOrN,UAAU,CAAC7G,IAAI,GAAKrF,GAAQya,IAAI,CACrCrE,GACFP,EAAG/B,WAAW,CAACyF,EAAOrN,UAAU,CAAClG,QAAQ,CAAE,4BAGxCoQ,EAGH,IAAI,CAACA,eAAe,CAAGA,EAFvBP,EAAG/B,WAAW,CAACyF,EAAOrN,UAAU,CAAClG,QAAQ,CAAG,8BAKhDqN,EAAgBkG,MAAM,CAAGzI,KAAAA,EACzBuC,EAAgB+C,eAAe,CAAGtF,KAAAA,CACpC,EAEAI,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQgF,uBAAuB,CAAC,IAAI,EAC3D,EAvCWvY,CAA2ByS,EAAAA,MAA3BzS,kBAAAA,CAAAA,OADkBwY,GAAAA,GAAAA,mBAAAA,MA4CxBvY,EAAA,WAAA,EAAA,SAAA1B,CAAA,EAAM0B,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OACX8O,EAAS0E,eAER,CAFD,SAAyBC,CAAoB,EAC3C,IAAI,CAACxQ,IAAI,CAAG,IAAK,CAACwP,QAAQ,CAAC,EAAE,CAAyBxP,IAAI,AAC5D,EAEA6L,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQkF,iBAAiB,CAAC,IAAI,EACrD,EAPWxY,CAAqB1B,EAAAA,KAArB0B,YAAAA,CAAAA,OADkByY,GAAAA,GAAAA,aAAAA,MAYxBxY,EAAA,WAAA,EAAA,SAAA3B,CAAA,EAAM2B,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGX6O,EAASkE,IAGR,CAHD,WACE1U,EAAApE,SAAA,CAAM8Y,IAAD,CAAA7W,IAAA,CAAA,IAAA,EACL,IAAI,CAACuc,QAAQ,CAAGhK,KAAAA,CAClB,EAEAI,EAAS0E,eAoCR,CApCD,SAAyBC,CAAoB,EAC3C,IAAMkF,EAAqB,IAAI,CAAClG,QAAQ,CAAC,EAAE,CAC3C,GAAIkG,EAAmBC,SAAS,CAC9B,IAAI,CAAC3V,IAAI,CAAG0V,EAAmB9O,KAAK,KAC/B,CACL,IA4BY6O,EA1BRhJ,EAFEmJ,EAAkBF,EAAmB9O,KAAK,CAGhD,GAAI,AAAyB,IAAzB,IAAI,CAAC4I,QAAQ,CAACxX,MAAM,CAAQ,CAC9B,IAAM6d,EAAY,IAAI,CAACrG,QAAQ,CAAC,EAAE,CACrBjY,EAATse,EAAqB5Y,IACvBwP,CAAAA,EAAWoJ,EAAUpJ,QAAQ,CAEjC,CASA,IAAMqJ,EAAelI,GAAiBmB,aAAa,CACnD+G,EAAatW,GAAG,CAACoW,EAAS7a,GAAYgS,EAAE,CAAEtB,KAAAA,EAAWA,KAAAA,EAAWgB,GAEhE,IAAMgJ,EAAWjF,EAAGzC,gBAAgB,CAAC7C,MAAM,CAAC4K,EAAc,CAAA,GAE1D,GAAI,CAACL,EAIH,MAEF,CAAA,IAAI,CAACzV,IAAI,CAAGyV,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,AAAAA,MAAAA,CAAAA,EAAAA,EAAUpJ,QAAQ,AAAA,EAAlBoJ,KAAAA,EAAAA,EAAoBzV,IAAI,CACpC,IAAI,CAACyV,QAAQ,CAAGA,CAClB,CACF,EA5CWzY,CAA4B3B,EAAAA,KAA5B2B,mBAAAA,CAAAA,OADkB+Y,GAAAA,GAAAA,qBAAAA,MAiDxB9Y,EAAA,WAAA,EAAA,SAAAsS,CAAA,EAAMtS,SAAAA,mDACXwP,QAA+B,CAAA,EAAE,CACjCuJ,EAAAA,UAAAA,CAA8D,EAAE,GAFrD/Y,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIX4O,EAASkE,IAGR,CAHD,WACE,IAAI,CAACtD,QAAQ,CAACzU,MAAM,CAAG,EACvB,IAAI,CAACge,UAAU,CAAChe,MAAM,CAAG,CAC3B,EAEA6T,EAAS0E,eAkBR,CAlBD,SAAyBC,CAAoB,EAC3C,IAAQhB,EAAmCxN,AAAA,IAAI,CAAvCwN,SAAU/C,EAAyBzK,AAAA,IAAI,CAA7ByK,QAAUuJ,CAAAA,EAAehU,AAAA,IAAI,CAAnBgU,UAAAA,CAC5B,GAAIxG,EAAAA,CAAQ,CAAC,EAAE,CAAYjS,IAAsB,CAC/C,IAAM0Y,EAAOzG,CAAQ,CAAC,EAAE,CACxB/C,EAASrM,IAAI,CAAC6V,EAAKjW,IAAI,EACvBgW,EAAW5V,IAAI,CAAC6V,EAClB,MAAO,GAAIzG,EAAAA,CAAQ,CAAC,EAAE,CAAYjS,IAAsB,CACtD,IAAM2F,EAAOsM,CAAQ,CAAC,EAAE,CAClB8E,EAAO9E,CAAQ,CAAC,EAAE,CACxB/C,AAAAA,EAASrM,IAAI,CAAbqM,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAiBvJ,EAAKuJ,QAAQ,CAAA,CAAE6H,EAAKtU,IAAI,IACzCgW,AAAAA,EAAW5V,IAAI,CAAf4V,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAmB9S,EAAK8S,UAAU,CAAA,CAAE1B,IACtC,MAAsB/c,EAAXiY,CAAQ,CAAC,EAAE,CApBbvS,IAoBiE1F,EAAXiY,CAAQ,CAAC,EAAE,CAAYrS,IACpFsP,AAAAA,EAASrM,IAAI,CAAA+F,KAAA,CAAbsG,YAAiB+C,CAAQ,CAAC,EAAE,CAAC/C,QAAQ,CAAA,CN9rBtB,OM+rBfuJ,AAAAA,EAAW5V,IAAI,CAAA+F,KAAA,CAAf6P,YAAmBxG,CAAQ,CAAC,EAAE,CAACwG,UAAU,CAAA,CAAExG,CAAQ,CAAC,EAAE,KAC7CA,EAAAA,CAAQ,CAAC,EAAE,CAAYrS,KAChCsP,EAASrM,IAAI,CNjsBE,KMksBf4V,EAAW5V,IAAI,CAACoP,CAAQ,CAAC,EAAE,EAE/B,EA3BWvS,CAAkCsS,EAAAA,MAAlCtS,yBAAAA,CAAAA,OADkBiZ,GAAAA,GAAAA,4BAAAA,MAgCxBhZ,EAAA,WAAA,EAAA,SAAAqS,CAAA,EAAMrS,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAA6BqS,EAAAA,MAA7BrS,oBAAAA,CAAAA,OADkBiZ,GAAAA,GAAAA,wBAAAA,MAGxBhZ,EAAA,WAAA,EAAA,SAAAoS,CAAA,EAAMpS,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAA0BoS,EAAAA,MAA1BpS,iBAAAA,CAAAA,OADkBiZ,GAAAA,GAAAA,oBAAAA,MAGxBhZ,EAAA,WAAA,EAAA,SAAAmS,CAAA,EAAMnS,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAA2BmS,EAAAA,MAA3BnS,kBAAAA,CAAAA,OADkBiZ,GAAAA,GAAAA,qBAAAA,MAIxBhZ,EAAA,WAAA,EAAA,SAAAkS,CAAA,EAAMlS,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GACXwO,AADWxO,EAAAA,SAAAA,CACFkT,eAIR,CAJD,SAAyBC,CAAoB,EACtCA,EAAGzC,gBAAgB,CAAC3D,eAAe,EACtCoG,EAAG1B,UAAU,CAACvB,gBAAgB,CAACnN,IAAI,CAAC,IAAI,CAE5C,EALW/C,CAA2BkS,EAAAA,MAA3BlS,kBAAAA,CAAAA,OADkBiZ,GAAAA,GAAAA,mBAAAA,MAUxBhZ,GAAA,WAAA,EAAA,SAAAiS,CAAA,EAAMjS,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAKXuO,EAAS0E,eAMR,CAND,SAAyBC,CAAoB,EAC3C,IAAM1D,EAAgB,IAAI,CAAC0C,QAAQ,CAAC,EAAE,AAEtC,CAAA,IAAI,CAAC5I,KAAK,CAAGkG,EAAc9M,IAAI,CAC/B,IAAI,CAACgB,MAAM,CAAG8L,EAAc9L,MAAM,CAClC,IAAI,CAAC2U,SAAS,CAAG,AAAsB,UAAtB,OAAO,IAAI,CAAC/O,KAAK,AACpC,EAEAiF,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQkG,uBAAuB,CAAC,IAAI,EAC3D,EAfWjZ,CAA2BiS,EAAAA,MAA3BjS,kBAAAA,CAAAA,SADkBkZ,GAAAA,GAAAA,mBAAAA,OAoBxBjZ,GAAA,WAAA,EAAA,SAAAlC,CAAA,EAAMkC,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAA6BlC,EAAAA,KAA7BkC,oBAAAA,CAAAA,SADkBkZ,GAAAA,GAAAA,qBAAAA,OAqBxBjZ,GAAA,WAAA,EAAA,SAAAnC,CAAA,EAAMmC,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAAmBnC,EAAAA,KAAnBmC,UAAAA,CAAAA,SADkBkZ,GAAAA,GAAAA,UAAAA,OAgBxBjZ,GAAA,WAAA,EAAA,SAAApC,CAAA,EAAMoC,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GACXoO,AADWpO,EAAAA,SAAAA,CACF8S,eAuBR,CAvBD,SAAyBC,CAAoB,EAC3C,GAAI,AAAyB,IAAzB,IAAI,CAAChB,QAAQ,CAACxX,MAAM,CAAQ,CAC9B,IAEcuZ,EAFRA,EAAK,IAAI,CAAC/B,QAAQ,CAAC,EAAE,CAC3B,GAAMjY,EAAFga,EAAclT,IAChB,IAAI,CAAC2B,IAAI,CAAGuR,MAAAA,CAAAA,EAAAA,EAAGrC,QAAQ,AAARA,EAAHqC,ENnxBC,SMqxBb,OAAoBA,EAAIvR,IAAI,EAC1B,KAAKtF,GAAWic,YAAY,CAC1B,IAAI,CAACzF,KAAK,CAAGvW,GAAQuN,GAAG,CACxB,KACF,MAAKxN,GAAWkc,cAAc,CAC5B,IAAI,CAAC5W,IAAI,CAAGrF,GAAQsN,KAAK,CACzB,KACF,MAAKtN,GAAQkc,IAAI,CACjB,KAAKlc,GAAQmc,KAAK,CAChB,IAAI,CAAC9W,IAAI,CAAGrF,GAAQqO,IAAI,AAE5B,MAEG,CACL,IAAM0N,EAAa,IAAI,CAAClH,QAAQ,CAAC,EAAE,AACnC,CAAA,IAAI,CAACxP,IAAI,CAAG0W,EAAW1W,IAAI,AAC7B,CACF,EAxBWvC,CAA0BpC,EAAAA,KAA1BoC,iBAAAA,CAAAA,SADkBsZ,GAAAA,GAAAA,kBAAAA,OA6BxBrZ,GAAA,WAAA,EAAA,SAAArC,CAAA,EAAMqC,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OACXmO,EAASkE,IAMR,CAND,WAEE,GADA1U,EAAApE,SAAA,CAAM8Y,IAAD,CAAA7W,IAAA,CAAA,IAAA,EACD,AAAyB,IAAzB,IAAI,CAACsW,QAAQ,CAACxX,MAAM,CAAQ,CAC9B,IAAM6X,EAAQ,IAAI,CAACL,QAAQ,CAAC,EAAE,AAC9B,CAAA,IAAI,CAACxP,IAAI,CAAG6P,EAAM7P,IAAI,AACxB,CACF,EAEA6L,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQ2G,sBAAsB,CAAC,IAAI,EAC1D,EAXWtZ,CAA0BrC,EAAAA,KAA1BqC,iBAAAA,CAAAA,SADkBuZ,GAAAA,GAAAA,kBAAAA,OAuKxBtZ,GAAA,WAAA,EAAA,SAAA4R,CAAA,EAAM5R,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAMXkO,EAASkE,IAER,CAFD,WACE,IAAI,CAACnJ,KAAK,CAAG6E,KAAAA,CACf,EAEAI,EAAS0E,eAaR,CAbD,SAAyBC,CAAoB,EAC3C,IAAMhB,EAAW,IAAI,CAACA,QAAQ,AAC9B,CAAA,IAAI,CAACpF,eAAe,CAAGoG,EAAGzC,gBAAgB,CAAC3D,eAAe,CACtDoF,AAAoB,IAApBA,EAASxX,MAAM,EACjB,IAAI,CAAC4O,KAAK,CAAG4I,CAAQ,CAAC,EAAE,CACxBgB,EAAGzC,gBAAgB,CAAC7D,MAAM,CAAC,IAAI8C,GAAa,IAAI,CAACpG,KAAK,CAAC5F,MAAM,CAAE,IAAI,GAEnE,IAAI,CAACkW,QAAQ,CAAI1H,CAAQ,CAAC,EAAE,CAA2B0H,QAAQ,CAC/D,IAAI,CAACC,gBAAgB,CAAI3H,CAAQ,CAAC,EAAE,CAA2B2H,gBAAgB,GAE/E,IAAI,CAACD,QAAQ,CAAI1H,CAAQ,CAAC,EAAE,CAA2B0H,QAAQ,CAC/D,IAAI,CAACC,gBAAgB,CAAI3H,CAAQ,CAAC,EAAE,CAA2B2H,gBAAgB,CAEnF,EAEAtL,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQ+G,oBAAoB,CAAC,IAAI,EACxD,EA3BWzZ,CAAwB4R,EAAAA,MAAxB5R,eAAAA,CAAAA,SADkB0Z,GAAAA,GAAAA,gBAAAA,OAgCxBzZ,GAAA,WAAA,EAAA,SAAA2R,CAAA,EAAM3R,SAAAA,mDACXsZ,QAAyB,CAAA,EAAE,CAC3BC,EAAAA,gBAAAA,CAAsC,EAAE,GAF7BvZ,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIXiO,EAASkE,IAGR,CAHD,WACE,IAAI,CAACmH,QAAQ,CAAClf,MAAM,CAAG,EACvB,IAAI,CAACmf,gBAAgB,CAACnf,MAAM,CAAG,CACjC,EAEA6T,EAAS0E,eAYR,CAZD,SAAyBC,CAAoB,EAC3C,IAAQhB,EAAyCxN,AAAA,IAAI,CAA7CwN,SAAU0H,EAA+BlV,AAAA,IAAI,CAAnCkV,QAAUC,CAAAA,EAAqBnV,AAAA,IAAI,CAAzBmV,gBAAAA,AAExB3H,AAAoB,CAAA,IAApBA,EAASxX,MAAM,EACjBkf,AAAAA,EAAS9W,IAAI,CAAb8W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAiB1H,CAAS,CAAC,EAAE,CAAuB1X,KAAK,GACzDqf,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyB3H,CAAS,CAAC,EAAE,CAAuB2H,gBAAgB,KAE5ED,AAAAA,EAAS9W,IAAI,CAAb8W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAiB1H,CAAS,CAAC,EAAE,CAA2B0H,QAAQ,GAChEA,AAAAA,EAAS9W,IAAI,CAAb8W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAiB1H,CAAS,CAAC,EAAE,CAAuB1X,KAAK,GACzDqf,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyB3H,CAAS,CAAC,EAAE,CAA2B2H,gBAAgB,GAChFA,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyB3H,CAAS,CAAC,EAAE,CAAuB2H,gBAAgB,GAEhF,EArBWvZ,CAA8B2R,EAAAA,MAA9B3R,qBAAAA,CAAAA,SADkB0Z,GAAAA,GAAAA,uBAAAA,OA0BxBzZ,GAAA,WAAA,EAAA,SAAA0R,CAAA,EAAM1R,SAAAA,mDACX/F,KAAsB,CAAA,EAAE,CACxBqf,EAAAA,gBAAAA,CAAsC,EAAE,GAF7BtZ,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAOXgO,EAASkE,IAKR,CALD,WACE,IAAI,CAACwH,cAAc,CAAG9L,KAAAA,EACtB,IAAI,CAAC+L,eAAe,CAAG/L,KAAAA,EACvB,IAAI,CAAC3T,KAAK,CAACE,MAAM,CAAG,EACpB,IAAI,CAACmf,gBAAgB,CAACnf,MAAM,CAAG,CACjC,EAEA6T,EAAS0E,eA4CR,CA5CD,SAAyBC,CAAoB,EAC3C,IAAQhB,EAAsCxN,AAAA,IAAI,CAA1CwN,SAAU1X,EAA4BkK,AAAA,IAAI,CAAhClK,KAAOqf,CAAAA,EAAqBnV,AAAA,IAAI,CAAzBmV,gBAAAA,CAEzB,GAAI3H,AAAoB,IAApBA,EAASxX,MAAM,CAAQ,CAIzB,IAAK,IAHCyf,EAAyBjI,CAAQ,CAAC,EAAE,CACpCkI,EAAaD,EAAuB3f,KAAK,CAEtCC,EAAI,EAAGC,EAAS0f,EAAW1f,MAAM,CAAED,EAAIC,EAAQD,IACtD2f,CAAU,CAAC3f,EAAE,CAACqS,eAAe,CAAG,CAAA,EAChCtS,EAAMsI,IAAI,CAACsX,CAAU,CAAC3f,EAAE,EAG1Bof,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyBM,EAAuBN,gBAAgB,GAEhE,MACF,CAEI3H,AAAoB,IAApBA,EAASxX,MAAM,EACjB,IAAI,CAACuf,cAAc,CAAG/H,CAAQ,CAAC,EAAE,CACjC,IAAI,CAACgI,eAAe,CAAGhI,CAAQ,CAAC,EAAE,GAElC,IAAI,CAAC+H,cAAc,CAAG/H,CAAQ,CAAC,EAAE,CACjC,IAAI,CAACgI,eAAe,CAAGhI,CAAQ,CAAC,EAAE,EAGpC,IAAMwC,EAAaxC,CAAQ,CAAC,EAAE,CACLmI,EAAA,IAAI,CAACJ,cAAc,CAApCvX,EAAiB2X,EAAjB3X,IAAMgB,CAAAA,EAAW2W,EAAX3W,MAAAA,CACRoJ,EAAkBoG,EAAGzC,gBAAgB,CAAC3D,eAAe,CAC3D,GAAc7S,EAAVya,EAAsBhU,IAAiB,CACzC,IAAM8V,EAAatE,CAAQ,CAAC,EAAE,CAExBoI,EAAO,IAAI3I,GADA,IAAID,GAAWhP,EAAMgB,GACA8S,EAAWlN,KAAK,CAAEoL,EAAWnS,KAAK,CAAEuK,GAC1EtS,EAAMsI,IAAI,CAACwX,OACN,CACL,IAAMC,EAAiB,IAAI,CAACL,eAAe,CAACK,cAAc,CACpDC,EAAuBD,EAAe7f,MAAM,AAClDF,CAAAA,EAAME,MAAM,CAAG8f,EACf,IAAK,IAAI/f,EAAI,EAAGA,EAAI+f,EAAsB/f,IAAK,CAC7C,IAAM+b,EAAa+D,CAAc,CAAC9f,EAAE,CAE9B6f,EAAO,IAAI3I,GADA,IAAID,GAAWhP,EAAMgB,EAAQ8S,EAAW5H,cAAc,EACjC4H,EAAWlN,KAAK,CAAE6E,KAAAA,EAAWrB,EACnEtS,CAAAA,CAAK,CAACC,EAAE,CAAG6f,CACb,CACF,CACF,EA1DW/Z,CAA0B0R,EAAAA,MAA1B1R,iBAAAA,CAAAA,SADkBka,GAAAA,GAAAA,kBAAAA,OA+DxBja,GAAA,WAAA,EAAA,SAAAyR,CAAA,EAAMzR,SAAAA,mDACXhG,KAAsB,CAAA,EAAE,CACxBqf,EAAAA,gBAAAA,CAAsC,EAAE,GAF7BrZ,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIX+N,EAASkE,IAGR,CAHD,WACE,IAAI,CAACjY,KAAK,CAACE,MAAM,CAAG,EACpB,IAAI,CAACmf,gBAAgB,CAACnf,MAAM,CAAG,CACjC,EAEA6T,EAAS0E,eAcR,CAdD,WACE,IAKEyH,EACAC,EACAC,EACAC,EAEAC,EACAC,EAXI7I,EAAW,IAAI,CAACA,QAAQ,CAE9B,IAAI,CAAC2H,gBAAgB,CAAC/W,IAAI,CAACoP,CAAQ,CAAC,EAAE,EAElCA,AAAoB,IAApBA,EAASxX,MAAM,EACjB,AAAAggB,CAAAA,EAAA,IAAI,CAAClgB,KAAK,EAACsI,IAAI,CAAf+F,KAAA,CAAA6R,EAAA,EAAA,CAAAM,MAAA,CAAmB9I,CAAS,CAAC,EAAE,CAA2B0H,QAAQ,GAClE,AAAAe,CAAAA,EAAA,IAAI,CAACngB,KAAK,EAACsI,IAAI,CAAf+F,KAAA,CAAA8R,EAAA,EAAA,CAAAK,MAAA,CAAmB9I,CAAS,CAAC,EAAE,CAAuB1X,KAAK,GAC3D,AAAAogB,CAAAA,EAAA,IAAI,CAACf,gBAAgB,EAAC/W,IAAI,CAA1B+F,KAAA,CAAA+R,EAAA,EAAA,CAAAI,MAAA,CAA8B9I,CAAS,CAAC,EAAE,CAA2B2H,gBAAgB,GACrF,AAAAgB,CAAAA,EAAA,IAAI,CAAChB,gBAAgB,EAAC/W,IAAI,CAA1B+F,KAAA,CAAAgS,EAAA,EAAA,CAAAG,MAAA,CAA8B9I,CAAS,CAAC,EAAE,CAAuB2H,gBAAgB,KAEjF,AAAAiB,CAAAA,EAAA,IAAI,CAACtgB,KAAK,EAACsI,IAAI,CAAf+F,KAAA,CAAAiS,EAAA,EAAA,CAAAE,MAAA,CAAmB9I,CAAS,CAAC,EAAE,CAAuB1X,KAAK,GAC3D,AAAAugB,CAAAA,EAAA,IAAI,CAAClB,gBAAgB,EAAC/W,IAAI,CAA1B+F,KAAA,CAAAkS,EAAA,EAAA,CAAAC,MAAA,CAA8B9I,CAAS,CAAC,EAAE,CAAuB2H,gBAAgB,GAErF,EAvBWrZ,CAA+ByR,EAAAA,MAA/BzR,sBAAAA,CAAAA,SADkBya,GAAAA,GAAAA,wBAAAA,OA4BxBxa,GAAA,WAAA,EAAA,SAAAwR,CAAA,EAAMxR,SAAAA,mDACXjG,KAAsB,CAAA,EAAE,CACxBqf,EAAAA,gBAAAA,CAAsC,EAAE,GAF7BpZ,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIX8N,EAASkE,IAGR,CAHD,WACE,IAAI,CAACjY,KAAK,CAACE,MAAM,CAAG,EACpB,IAAI,CAACmf,gBAAgB,CAACnf,MAAM,CAAG,CACjC,EAEA6T,EAAS0E,eAmBR,CAnBD,WACE,IAMEyH,EACAE,EAIAD,EACAE,EAZI3I,EAAW,IAAI,CAACA,QAAQ,CACxBgJ,EAAWhJ,CAAQ,CAACA,EAASxX,MAAM,CAAG,EAAE,CAE9C,IAAI,CAACmf,gBAAgB,CAAC/W,IAAI,CAACoP,CAAQ,CAAC,EAAE,EAElCA,EAAAA,CAAQ,CAAC,EAAE,CAAY5R,MACzB,AAAAoa,CAAAA,EAAA,IAAI,CAAClgB,KAAK,EAACsI,IAAI,CAAf+F,KAAA,CAAA6R,EAAA,EAAA,CAAAM,MAAA,CAAmB9I,CAAQ,CAAC,EAAE,CAAC0H,QAAQ,GACvC,AAAAgB,CAAAA,EAAA,IAAI,CAACf,gBAAgB,EAAC/W,IAAI,CAA1B+F,KAAA,CAAA+R,EAAA,EAAA,CAAAI,MAAA,CAA8B9I,CAAQ,CAAC,EAAE,CAAC2H,gBAAgB,IAGhD5f,EAARihB,EApBKza,KAqBP,AAAAka,CAAAA,EAAA,IAAI,CAACngB,KAAK,AAAA,EAACsI,IAAI,CAAA+F,KAAA,CAAf8R,EAAmBO,EAAAA,CAAAA,MAAAA,CAAAA,EAAS1gB,KAAK,GACjC,AAAAqgB,CAAAA,EAAA,IAAI,CAAChB,gBAAgB,AAAA,EAAC/W,IAAI,CAAA+F,KAAA,CAA1BgS,EAA8BK,EAAAA,CAAAA,MAAAA,CAAAA,EAASrB,gBAAgB,IAGrD3H,EAASxX,MAAM,CAAG,GAAKwgB,EAAAA,EAAoB9Z,KAC7C,IAAI,CAACyY,gBAAgB,CAAC/W,IAAI,CAACoY,EAE/B,EA5BWza,CAA0BwR,EAAAA,MAA1BxR,iBAAAA,CAAAA,SADkB0a,GAAAA,GAAAA,mBAAAA,OAiCxBza,GAAA,WAAA,EAAA,SAAAuR,CAAA,EAAMvR,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAGX6N,AAHW7N,EAAAA,SAAAA,CAGFuS,eAER,CAFD,SAAyBC,CAAoB,EAC3C,IAAI,CAAC3Q,KAAK,CAAGmD,OAAmB,IAAI,CAACwM,QAAQ,CAAC,EAAE,CAAExO,MAAM,CAC1D,EALWhD,CAAwBuR,EAAAA,MAAxBvR,eAAAA,CAAAA,SADkB0a,GAAAA,GAAAA,gBAAAA,OAUxBza,GAAA,WAAA,EAAA,SAAAsR,CAAA,EAAMtR,SAAAA,iBACX4Z,EAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YAAAA,IAAAA,CAAAA,EAAAA,cAAAA,CAAqC,EAAE,GAD5B5Z,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGX4N,EAASkE,IAER,CAFD,WACE,IAAI,CAAC8H,cAAc,CAAC7f,MAAM,CAAG,CAC/B,EAEA6T,EAAS0E,eAcR,CAdD,SAAyBC,CAAoB,EAC3C,IAAQhB,EAA6BxN,AAAA,IAAI,CAAjCwN,QAAAA,CAAUqI,EAAmB7V,AAAA,IAAI,CAAvB6V,cAAAA,CAClB,GAAIrI,AAAoB,IAApBA,EAASxX,MAAM,CACjB6f,EAAezX,IAAI,CAACoP,CAAQ,CAAC,EAAE,MAC1B,CACL,IAAMtM,EAAOsM,CAAQ,CAAC,EAAE,CAClBsE,EAAatE,CAAQ,CAAC,EAAE,CACxBmJ,EAAazV,EAAK2U,cAAc,CAAC7f,MAAM,AAC7C6f,CAAAA,EAAe7f,MAAM,CAAG2gB,EAAa,EACrC,IAAK,IAAI5gB,EAAI,EAAGA,EAAI4gB,EAAY5gB,IAC9B8f,CAAc,CAAC9f,EAAE,CAAGmL,EAAK2U,cAAc,CAAC9f,EAAE,AAE5C8f,CAAAA,CAAc,CAACc,EAAW,CAAG7E,CAC/B,CACF,EArBW7V,CAA6BsR,EAAAA,MAA7BtR,oBAAAA,CAAAA,SADkB2a,GAAAA,GAAAA,sBAAAA,OA0BxB1a,GAAA,WAAA,EAAA,SAAAqR,CAAA,EAAMrR,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIX2N,EAASkE,IAER,CAFD,WACE,IAAI,CAAC7D,cAAc,CAAGT,KAAAA,CACxB,EAEAI,EAAS0E,eAIR,CAJD,SAAyBC,CAAoB,EAC3C,IAAMhB,EAAW,IAAI,CAACA,QAAQ,AAC9B,CAAA,IAAI,CAAC5I,KAAK,CAAG4I,CAAQ,CAAC,EAAE,CACxB,IAAI,CAACtD,cAAc,CAAGsD,CAAQ,CAAC,EAAE,AACnC,EAZWtR,CAAyBqR,EAAAA,MAAzBrR,gBAAAA,CAAAA,SADkB2a,GAAAA,GAAAA,iBAAAA,OAiBxB1a,GAAA,WAAA,EAAA,SAAAoR,CAAA,EAAMpR,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIX0N,EAASkE,IAER,CAFD,WACE,IAAI,CAAC+I,QAAQ,CAAG,CAAA,CAClB,EAEAjN,EAAS0E,eAYR,CAZD,SAAyBC,CAAoB,EAC3C,IAAMhB,EAAW,IAAI,CAACA,QAAQ,CACxBxP,EAAOwP,CAAQ,CAAC,EAAE,CAClB5I,EAAQ4I,CAAQ,CAAC,EAAE,AACzB,CAAA,IAAI,CAACxP,IAAI,CAAGA,EACZ,IAAMoR,EAAK,IAAIlE,GAAUtG,EAAM5F,MAAM,CAAE,IAAIgO,GAAWhP,EAAKA,IAAI,CAAEA,EAAK8M,aAAa,CAAC9L,MAAM,EAAG,CAAA,EAAM,IAAI,EAEvGwP,EAAGzC,gBAAgB,CAAC7D,MAAM,CAACkH,GAEH,IAApB5B,EAASxX,MAAM,EACjB,CAAA,IAAI,CAAC8gB,QAAQ,CAAG,CAAA,EAEpB,EAEAjN,EAASuE,OAMR,CAND,SAAiBC,CAAuB,SACtC,AAAI,IAAI,CAACyI,QAAQ,CACRvJ,EAAAtY,SAAA,CAAMmZ,OAAD,CAASC,IAAAA,CAAAA,IAAAA,CAAAA,GAEd,IAAI,CAACL,QAAQ,CAACK,EAAQ0I,8BAA8B,CAAC,IAAI,EAEpE,EA5BW5a,CAA4BoR,EAAAA,MAA5BpR,mBAAAA,CAAAA,SADkB6a,GAAAA,GAAAA,oBAAAA,OAiCxB5a,GAAA,WAAA,EAAA,SAAAmR,CAAA,EAAMnR,SAAAA,iBAEX6a,EAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YAAAA,IAAAA,CAAAA,EAAAA,oBAAAA,CAA8C,EAAE,GAFrC7a,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIXyN,EAASkE,IAER,CAFD,WACE,IAAI,CAACkJ,oBAAoB,CAACjhB,MAAM,CAAG,CACrC,EAEA6T,EAAS0E,eAyBR,CAzBD,SAAyBC,CAAoB,EAC3C,IAAQhB,EAAa,IAAI,CAAjBA,QAAAA,CACFxX,EAASwX,EAASxX,MAAM,CACxB6X,EAAQL,CAAQ,CAAC,EAAE,CACnBxP,EAAO6P,EAAM7P,IAAI,CAGvB,GAFA,IAAI,CAACA,IAAI,CAAGA,EAEHzI,EAALsY,EAAiB1R,IACnB,IAAI,CAAC8a,oBAAoB,CAAC7Y,IAAI,CAACyP,OAC1B,CACL,AAAAqJ,CAAAA,EAAA,IAAI,CAACD,oBAAoB,AAAA,EAAC7Y,IAAI,CAAA+F,KAAA,CAA9B+S,EAAkCrJ,EAAAA,CAAAA,MAAAA,CAAAA,EAAMoJ,oBAAoB,GAE5D,IAFAC,EAEMtS,EAAQ4I,CAAQ,CAAC,EAAE,CAEnB2J,EAAchb,GAAoB8B,IAAI,CAACuF,GAAG,EAC5CxN,AAAW,CAAA,IAAXA,EAEFmhB,EAAY3Z,GAAG,CAACoH,EAAMjG,QAAQ,CAAE,CAACX,EAAM4G,EAAM,EAG7CuS,EAAY3Z,GAAG,CAACoH,EAAMjG,QAAQ,CAAE,CAACX,EAAM4G,EAAO4I,CAAQ,CAAC,EAAE,CAAmB,EAE9E2J,EAAY5I,eAAe,CAACC,GAC5B,IAAI,CAACyI,oBAAoB,CAAC7Y,IAAI,CAAC+Y,EACjC,CACF,EAjCW/a,CAAgCmR,EAAAA,MAAhCnR,uBAAAA,CAAAA,SADkBgb,GAAAA,GAAAA,yBAAAA,OAsCxB/a,GAAA,WAAA,EAAA,SAAAkR,CAAA,EAAMlR,SAAAA,mDAGXgb,0BAAuC,CAAA,EAAE,CAEjCC,EAAAA,QAAAA,CAAwC,EAAE,GALvCjb,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAOXwN,EAASkE,IAIR,CAJD,WACE,IAAI,CAACb,QAAQ,CNhwCI,IMiwCjB,IAAI,CAACmK,0BAA0B,CAACrhB,MAAM,CAAG,EACzC,IAAI,CAACshB,QAAQ,CAACthB,MAAM,CAAG,CACzB,EAEA6T,EAAS0E,eAwDR,CAxDD,SAAyBC,CAAoB,EAC3C,IAAMX,EAAQ,IAAI,CAACL,QAAQ,CAAC,EAAE,CACxB6J,EAA6B,IAAI,CAACA,0BAA0B,CAC5DE,EAAU,IAAI,CAACD,QAAQ,CACvBxD,EAAelI,GAAiBmB,aAAa,CAIjDyK,EADOjiB,EAALsY,EAAiB9O,IACH,CAAC8O,EAAM7O,MAAM,CAAC,CAEb6O,EAA8C4J,oBAAoB,CAGrF,IAAK,IAAI1hB,EAAI,EAAGA,EAAIyhB,EAAcxhB,MAAM,CAAED,IAAK,CAC7C,IAAM4B,EAAO6f,CAAa,CAACzhB,EAAE,CAE7B,KAAIyY,EAAGrO,eAAe,CAACxI,EAAK,EAKxB,CAAEkW,EAAAA,EAAiB9O,KAAc4F,GAAgBoB,OAAO,CAACpO,KAI7D,IAAM+f,EAAa/P,GAAgBE,MAAM,CAAClQ,GAC1C,GAAI+f,EAAY,CACd,IAAI,CAACxK,QAAQ,CAAGwK,EAAW1Z,IAAI,CAC/B,QACF,CAKA,GAHA8V,EAAatW,GAAG,CAAC7F,EAAMoB,GAAY4e,GAAG,EACtCnJ,EAAGzC,gBAAgB,CAAC3C,SAAS,CAAC0K,EAAc,CAAA,EAAMyD,GAE7CA,EAAQvhB,MAAM,CAIZ,CACL,IAAI,CAACkX,QAAQ,CAAA,AAAGqK,MAAAA,CAAAA,EAAAA,CAAO,CAAC,EAAE,CAAClN,QAAQ,AAAA,EAAnBkN,KAAAA,EAAAA,EAAqBvZ,IAAI,CACzC,IAnCAwZ,EAkCgBD,EACVK,EAA2CpJ,EAAGzC,gBAAgB,CAACjH,KAAK,CAAC0D,SAAS,CAACsL,EAAc,CAAA,GAC/F8D,EAECA,CAAAA,EAAAA,EAA8B/M,KAAY+M,EAAmBzM,gBAAe,GAC7EkM,AAA6C,KAA7CA,EAA2BzW,OAAO,CAACjJ,IAEnC0f,EAA2BjZ,IAAI,CAACzG,GAGlC4f,EAAQnW,IAAI,CAAC,SAACyW,CAAAA,EAAMA,OAACtiB,EAADsiB,EAAahN,KAAYgN,EAAE1M,gBAAgB,AAC/DkM,IAAAA,AAA6C,KAA7CA,EAA2BzW,OAAO,CAACjJ,IAEnC0f,EAA2BjZ,IAAI,CAACzG,EAEpC,EACF,CACF,EAEAkS,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQyJ,uBAAuB,CAAC,IAAI,EAC3D,EAEAC,EAAAA,SAOC,CAPDA,SAAU1J,CAAuB,EAC/B,IAAMR,EAAQ,IAAI,CAACL,QAAQ,CAAC,EAAE,QAC9B,AAASjY,EAALsY,EAAiB9O,IACZ8O,EAAM7O,MAAM,CAEZ6O,EAAMO,OAAO,CAACC,EAEzB,EAlFWhS,CAA2BkR,EAAAA,MAA3BlR,kBAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,mBAAAA,OAuFxB1b,GAAA,WAAA,EAAA,SAAAiR,CAAA,EAAMjR,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAGXuN,AAHWvN,EAAAA,SAAAA,CAGFiS,eAGR,CAHD,SAAyBC,CAAoB,EAC3C,IAAI,CAAC1B,UAAU,CAAG0B,EAAG1B,UAAU,CAC/B,IAAI,CAACA,UAAU,CAAC3D,WAAW,CAAGqF,EAAGzC,gBAAgB,CAACjH,KAAK,AACzD,EANWxI,CAAwBiR,EAAAA,MAAxBjR,eAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,iBAAAA,OAWxB1b,GAAA,WAAA,EAAA,SAAAgR,CAAA,EAAMhR,SAAAA,iBACX4Y,EAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YAAAA,IAAAA,CAAAA,EAAAA,gBAAAA,CAAoE,EAAE,GAD3D5Y,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGXsN,EAASkE,IAER,CAFD,WACE,IAAI,CAACoH,gBAAgB,CAACnf,MAAM,CAAG,CACjC,EAEA6T,EAAS0E,eAYR,CAZD,SAAyBC,CAAoB,EAC3C,IAMI0H,EANErI,EAAQ,IAAI,CAACL,QAAQ,CAAC,EAAE,CAErBjY,CAAAA,EAALsY,EAAiBrR,KAAmBjH,EAALsY,EAAiB/Q,KAA+BvH,EAALsY,EAAiB9O,GAAW,IACxGyP,EAAG1B,UAAU,CAACtB,uBAAuB,CAACpN,IAAI,CAAC,IAAI,EAEtC7I,EAALsY,EAAiB/Q,IACnB,AAAAoZ,CAAAA,EAAA,IAAI,CAACf,gBAAgB,AAAA,EAAC/W,IAAI,CAAA+F,KAAA,CAA1B+R,EAA8BrI,EAAAA,CAAAA,MAAAA,CAAAA,EAAMsH,gBAAgB,GAEpD,IAAI,CAACA,gBAAgB,CAAC/W,IAAI,CAACyP,GAGjC,EAnBWtR,CAA0BgR,EAAAA,MAA1BhR,iBAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,kBAAAA,OAwBxB1b,GAAA,WAAA,EAAA,SAAA+Q,CAAA,EAAM/Q,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GACXqN,AADWrN,EAAAA,SAAAA,CACF4R,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACT,EAAMa,SAAAA,CAAAA,OAAD,WAASC,GAAW,KAChD,EAHW7R,CAAmB+Q,EAAAA,MAAnB/Q,UAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,WAAAA,OAQxB1b,GAAA,WAAA,EAAA,SAAA8Q,CAAA,EAAM9Q,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OACXoN,EAAS0E,eAER,CAFD,SAAyBC,CAAoB,EAC3CA,EAAGzC,gBAAgB,CAACjD,WAAW,EACjC,EAEAe,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAAC,KAAOT,EAAMa,SAAAA,CAAAA,OAAD,WAASC,GAAW,KACvD,EAPW5R,CAAyB8Q,EAAAA,MAAzB9Q,gBAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,kBAAAA,OAYxB1b,GAAA,WAAA,EAAA,SAAA6Q,CAAA,EAAM7Q,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OACXmN,EAAS0E,eAER,CAFD,SAAyBC,CAAoB,EAC3CA,EAAGzC,gBAAgB,CAACjD,WAAW,EACjC,EAEAe,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAAC,KAAOT,EAAMa,SAAAA,CAAAA,OAAD,WAASC,GAAW,KACvD,EAPW3R,CAAwB6Q,EAAAA,MAAxB7Q,eAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,iBAAAA,OAYxB1b,GAAA,WAAA,EAAA,SAAA4Q,CAAA,EAAM5Q,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GACXkN,AADWlN,EAAAA,SAAAA,CACFyR,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAAC,KAAOT,EAAMa,SAAAA,CAAAA,OAAD,WAASC,GAAW,KACvD,EAHW1R,CAA4B4Q,EAAAA,MAA5B5Q,mBAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,qBAAAA,OAQxB1b,GAAA,WAAA,EAAA,SAAA2Q,CAAA,EAAM3Q,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GACXiN,AADWjN,EAAAA,SAAAA,CACFwR,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAAC,KAAOT,EAAMa,SAAAA,CAAAA,OAAD,WAASC,GAAW,KACvD,EAHWzR,CAA4B2Q,EAAAA,MAA5B3Q,mBAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,qBAAAA,OAQxB1b,GAAA,WAAA,EAAA,SAAA0Q,CAAA,EAAM1Q,SAAAA,iBACXsY,EAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YAAAA,IAAAA,CAAAA,EAAAA,gBAAAA,CAAsC,EAAE,GAD7BtY,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGXgN,EAASkE,IAER,CAFD,WACE,IAAI,CAACoH,gBAAgB,CAACnf,MAAM,CAAG,CACjC,EAEA6T,EAAS0E,eAUR,CAVD,SAAyBC,CAAoB,EAC3C,IAAMhB,EAAW,IAAI,CAACA,QAAQ,CACxB2H,EAAmB,IAAI,CAACA,gBAAgB,AAE1C3H,AAAoB,CAAA,IAApBA,EAASxX,MAAM,CACjBmf,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyB3H,CAAS,CAAC,EAAE,CAAuB2H,gBAAgB,IAE5EA,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyB3H,CAAS,CAAC,EAAE,CAA4B2H,gBAAgB,GACjFA,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyB3H,CAAS,CAAC,EAAE,CAAuB2H,gBAAgB,GAEhF,EAEAtL,EAASuE,OAOR,CAPD,SAAiBC,CAAuB,EACtC,IAAMb,EAAW,IAAI,CAACA,QAAQ,QAC9B,AAAIA,AAAoB,IAApBA,EAASxX,MAAM,CACV,IAAI,CAACgY,QAAQ,CAACR,CAAQ,CAAC,EAAE,CAACY,OAAO,CAACC,IAElC,IAAI,CAACL,QAAQ,CAACR,CAAW,CAAC,EAAE,CAACY,OAAO,CAACC,GAAS,KAAIb,CAAQ,CAAC,EAAE,CAACY,OAAO,CAACC,GAEjF,EA1BWxR,CAA+B0Q,EAAAA,MAA/B1Q,sBAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,wBAAAA,OA+BxB1b,GAAA,WAAA,EAAA,SAAAyQ,CAAA,EAAMzQ,SAAAA,iBACXqY,EAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YAAAA,IAAAA,CAAAA,EAAAA,gBAAAA,CAAsC,EAAE,GAD7BrY,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGX+M,EAASkE,IAER,CAFD,WACE,IAAI,CAACoH,gBAAgB,CAACnf,MAAM,CAAG,CACjC,EAEA6T,EAAS0E,eAYR,CAZD,SAAyBC,CAAoB,EAC3C,IAAMhB,EAAW,IAAI,CAACA,QAAQ,CACxB2H,EAAmB,IAAI,CAACA,gBAAgB,AAE1C3H,AAAoB,CAAA,IAApBA,EAASxX,MAAM,EACjBmf,EAAiB/W,IAAI,CAACoP,CAAQ,CAAC,EAAE,EACjC2H,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyB3H,CAAS,CAAC,EAAE,CAA4B2H,gBAAgB,GACjFA,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyB3H,CAAS,CAAC,EAAE,CAAuB2H,gBAAgB,KAE5EA,EAAiB/W,IAAI,CAACoP,CAAQ,CAAC,EAAE,EACjC2H,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyB3H,CAAS,CAAC,EAAE,CAAuB2H,gBAAgB,GAEhF,EAnBWrY,CAA+ByQ,EAAAA,MAA/BzQ,sBAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,yBAAAA,OAwBxB1b,GAAA,WAAA,EAAA,SAAAwQ,CAAA,EAAMxQ,SAAAA,iBACXoY,EAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YAAAA,IAAAA,CAAAA,EAAAA,gBAAAA,CAAsC,EAAE,GAD7BpY,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAGX8M,EAASkE,IAER,CAFD,WACE,IAAI,CAACoH,gBAAgB,CAACnf,MAAM,CAAG,CACjC,EAEA6T,EAAS0E,eAkBR,CAlBD,SAAyBC,CAAoB,EAC3C,IAAMhB,EAAW,IAAI,CAACA,QAAQ,CACxBgJ,EAAWhJ,CAAQ,CAACA,EAASxX,MAAM,CAAG,EAAE,CAExCmf,EAAmB,IAAI,CAACA,gBAAgB,CAC9CA,EAAiB/W,IAAI,CAACoP,CAAQ,CAAC,EAAE,EAE7BA,EAAAA,CAAQ,CAAC,EAAE,CAAY3Q,KACzBsY,AAAAA,EAAiB/W,IAAI,CAAA+F,KAAA,CAArBgR,YAAyB3H,CAAQ,CAAC,EAAE,CAAC2H,gBAAgB,GAG3C5f,EAARihB,EAlBKzZ,IAmBPoY,AAAAA,EAAiB/W,IAAI,CAArB+W,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAyBqB,EAASrB,gBAAgB,GAGhD3H,EAASxX,MAAM,CAAG,GAAKwgB,EAAAA,EAAoB9Z,KAC7CyY,EAAiB/W,IAAI,CAACoY,EAE1B,EAzBWzZ,CAA0BwQ,EAAAA,MAA1BxQ,iBAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,mBAAAA,OA8BxB1b,GAAA,WAAA,EAAA,SAAAuQ,CAAA,EAAMvQ,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAAyBuQ,EAAAA,MAAzBvQ,gBAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,kBAAAA,OAIxB1b,GAAA,WAAA,EAAA,SAAAsQ,CAAA,EAAMtQ,SAAAA,yCAAAA,OAAAA,EAAAA,EAAAA,GAAAA,CAAoBsQ,EAAAA,MAApBtQ,WAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,YAAAA,OAIxB1b,GAAA,WAAA,EAAA,SAAAqQ,CAAA,EAAMrQ,SAAAA,iBACXua,EAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YAAAA,IAAAA,CAAAA,EAAAA,oBAAAA,CAAiC,EAAE,GADxBva,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIX2M,EAASkE,IAER,CAFD,WACE,IAAI,CAAC0J,oBAAoB,CAACzhB,MAAM,CAAG,CACrC,EAEA6T,EAAS0E,eAOR,CAPD,SAAyBC,CAAoB,EAE3C,IAAMpO,EAAYoN,AADD,IAAI,CAACA,QAAQ,AACH,CAAC,EAAE,CAAexO,MAAM,AAEnD,CAAA,IAAI,CAACoB,SAAS,CAAGA,EAEjBd,GAAaY,uBAAuB,CAACsO,EAAGrO,eAAe,CAAEC,EAAW,IAAI,CAACqX,oBAAoB,CAC/F,EAfWva,CAAwBqQ,EAAAA,MAAxBrQ,eAAAA,CAAAA,SADkB2b,GAAAA,GAAAA,iBAAAA,OAoBxB1b,GAAA,WAAA,EAAA,SAAAoQ,CAAA,EAAMpQ,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAIX0M,EAAS0E,eAKR,CALD,SAAyBC,CAAoB,EAC3C,IAAMX,EAAQ,IAAI,CAACL,QAAQ,CAAC,EAAE,AAE9B,CAAA,IAAI,CAACiK,oBAAoB,CAAG5J,EAAM4J,oBAAoB,CACtD,IAAI,CAACrX,SAAS,CAAGyN,EAAMzN,SAAS,AAClC,EAEAyJ,EAASuE,OAER,CAFD,SAAiBC,CAAuB,EACtC,OAAO,IAAI,CAACL,QAAQ,CAACK,EAAQyK,sBAAsB,CAAC,IAAI,EAC1D,EAbW3b,CAA0BoQ,EAAAA,MAA1BpQ,iBAAAA,CAAAA,MADkB4b,GAAAA,GAAAA,mBAAAA,OuBjmD1B,IAAAC,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,OAAAA,EACJC,gBAKN,CALD,SAAsCvN,CAAc,CAAE1N,CAAkB,EACtE,IAAM6P,EAAQnC,EAAK8B,QAAQ,CAAC,EAAE,CAC9B,IAASjY,EAALsY,EAAiBqL,WACrB,AAAIrL,EAAMP,EAAE,GAAKtP,EAAa6P,EACvBmL,EAAYC,gBAAgB,CAACpL,EAAO7P,EAC7C,EANWgb,EA4BJG,UAEN,CAFD,SAAkB/J,CAAiB,EACjC,OAAOA,EAAKvW,GAAaugB,KAAK,AAChC,EA9BWJ,CAwDZ,ICtDYK,GAAN,WAAA,EAAA,WAAMA,SAAAA,IAcXC,IAAAA,CAAAA,gBAAAA,CAA8C,EAAE,CAChDC,IAAAA,CAAAA,aAAAA,CAA8B,EAAE,CAChCC,IAAAA,CAAAA,cAAAA,CAA4C,EAAE,CAC9CC,IAAAA,CAAAA,WAAAA,CAA4B,EAAE,CAC9BC,IAAAA,CAAAA,UAAAA,CAAwC,EAAE,CAC1CC,IAAAA,CAAAA,OAAAA,CAAwB,EAAE,CAS1BC,IAAAA,CAAAA,0BAAAA,CAAyC,EAAE,CA5BhCP,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAgCXlN,EAAAA,KAeC,CAfDA,SAAM0N,CAAe,WAAfA,GAAAA,CAAAA,EAAW,CAAA,CAAA,EACXA,IACF,IAAI,CAACP,gBAAgB,CAACtjB,MAAM,CAAG,EAC/B,IAAI,CAACujB,aAAa,CAACvjB,MAAM,CAAG,EAC5B,IAAI,CAACwjB,cAAc,CAACxjB,MAAM,CAAG,EAC7B,IAAI,CAACyjB,WAAW,CAACzjB,MAAM,CAAG,EAC1B,IAAI,CAAC0jB,UAAU,CAAC1jB,MAAM,CAAG,EACzB,IAAI,CAAC2jB,OAAO,CAAC3jB,MAAM,CAAG,GAGxB,IAAI,CAAC8jB,wBAAwB,CAAGplB,OAAOQ,MAAM,CAAC,MAC9C,IAAI,CAAC6kB,sBAAsB,CAAGrlB,OAAOQ,MAAM,CAAC,MAC5C,IAAI,CAAC8kB,kBAAkB,CAAGtlB,OAAOQ,MAAM,CAAC,MACxC,IAAI,CAAC+kB,kBAAkB,CAAGvlB,OAAOQ,MAAM,CAAC,MACxC,IAAI,CAAC0kB,0BAA0B,CAAC5jB,MAAM,CAAG,CAC3C,EAEAkkB,EAAAA,iBAEC,CAFDA,SAAkBlc,CAAY,EAC5B,OAAO,AAA2E,KAA3E,IAAI,CAACsb,gBAAgB,CAACa,SAAS,CAAC,SAAChZ,CAAAA,SAASA,EAAKyD,KAAK,CAAE5F,MAAM,GAAKhB,GAC1E,EAEAoc,EAAAA,eAEC,CAFDA,SAAgBpc,CAAY,EAC1B,OAAO,AAAyE,KAAzE,IAAI,CAACwb,cAAc,CAACW,SAAS,CAAC,SAAChZ,CAAAA,SAASA,EAAKyD,KAAK,CAAE5F,MAAM,GAAKhB,GACxE,EAEAqc,EAAAA,WAEC,CAFDA,SAAYrc,CAAY,EACtB,OAAO,AAAqE,KAArE,IAAI,CAAC0b,UAAU,CAACS,SAAS,CAAC,SAAChZ,CAAAA,SAASA,EAAKyD,KAAK,CAAE5F,MAAM,GAAKhB,GACpE,EAEAsc,EAAAA,kBAcC,CAdDA,SAAmB1V,CAAgB,EACjC,IAAM5F,EAAS4F,EAAM5F,MAAM,CAC3B,IAAI,IAAI,CAAC8a,wBAAwB,CAAC9a,EAAO,EAEzC,IAAMlJ,EAAQ,IAAI,CAACyjB,aAAa,CAACpX,MAAM,CAAC,SAAChB,CAAAA,SAASA,EAAKyD,KAAK,CAAC5F,MAAM,GAAKA,IACxE,GAAI,CAAClJ,EAAME,MAAM,CACf,OAAO8H,GAAeS,aAAa,CAChC,mCAAkCS,EACnClG,GAAYyhB,gBAAgB,CAC5Brb,GAAU2N,mBAAmB,CAC7BjI,EAAMjG,QAAQ,CAGlB,CAAA,IAAI,CAACmb,wBAAwB,CAAC9a,EAAO,CAAGlJ,EAC1C,EAEA0kB,EAAAA,gBAcC,CAdDA,SAAiB5V,CAAgB,EAC/B,IAAM5F,EAAS4F,EAAM5F,MAAM,CAC3B,IAAI,IAAI,CAAC+a,sBAAsB,CAAC/a,EAAO,EAEvC,IAAMlJ,EAAQ,IAAI,CAAC2jB,WAAW,CAACtX,MAAM,CAAC,SAAChB,CAAAA,SAASA,EAAKyD,KAAK,CAAC5F,MAAM,GAAKA,IACtE,GAAI,CAAClJ,EAAME,MAAM,CACf,OAAO8H,GAAeS,aAAa,CAChC,iCAAgCS,EACjClG,GAAYyhB,gBAAgB,CAC5Brb,GAAU2N,mBAAmB,CAC7BjI,EAAMjG,QAAQ,CAGlB,CAAA,IAAI,CAACob,sBAAsB,CAAC/a,EAAO,CAAGlJ,EACxC,EAEA2kB,EAAAA,gBAcC,CAdDA,SAAiB7V,CAAgB,EAC/B,IAAM5F,EAAS4F,EAAM5F,MAAM,CAC3B,IAAI,IAAI,CAACgb,kBAAkB,CAAChb,EAAO,EAEnC,IAAMlJ,EAAQ,IAAI,CAAC6jB,OAAO,CAACxX,MAAM,CAAC,SAAChB,CAAAA,SAASA,EAAKyD,KAAK,CAAC5F,MAAM,GAAKA,IAClE,GAAI,CAAClJ,EAAME,MAAM,CACf,OAAO8H,GAAeS,aAAa,CAChC,6BAA4BS,EAC7BlG,GAAYyhB,gBAAgB,CAC5Brb,GAAU2N,mBAAmB,CAC7BjI,EAAMjG,QAAQ,CAGlB,CAAA,IAAI,CAACqb,kBAAkB,CAAChb,EAAO,CAAGlJ,EACpC,EAEA4kB,EAAAA,eAQC,CARDA,SAAgB9V,CAAa,CAAE5G,CAAiB,EAC9C,IAAI,IAAI,CAACic,kBAAkB,CAACrV,EAAM,EAElC,IAAI,CAACqV,kBAAkB,CAACrV,EAAM,CAAG,EAAE,CAEnC,IAAMkP,EAAeuF,EAAetM,aAAa,CACjD+G,EAAatW,GAAG,CAACoH,EAAO5G,GACxB,IAAI,CAAC2c,gBAAgB,CAACjS,UAAU,CAACoL,EAAc,CAAA,EAAM,IAAI,CAACmG,kBAAkB,CAACrV,EAAM,EACrF,EArHWyU,EAOJlN,KAKN,CALD,WACO,IAAI,CAACyO,UAAU,EAClB,CAAA,IAAI,CAACA,UAAU,CAAG,IATXvB,GAWT,IAAI,CAACuB,UAAU,CAACzO,KAAK,EACvB,EAZWkN,EAAAA,EAAAA,KAAAA,EAGAwB,IAAAA,UAAXrX,IAAA,WACE,OAAO,IAAI,CAACoX,UAAU,AACxB,KALWvB,CAsHZ,GAtHYA,CAAAA,GACItM,aAAAA,CAA4B,IAAI5C,GAAW,GAAI,MCVzD,IAAA2Q,gBAAA,WAAMA,SAAAA,IACXC,IAAAA,CAAAA,KAAAA,CAAkB,EAAIlkB,CADXikB,OAGXnd,AAHWmd,EAAAA,SAAAA,CAGXnd,OAEC,CAFDA,WACE,IAAI,CAACod,KAAK,CAAC/kB,MAAM,CAAG,CACtB,EALW8kB,CAMZ,ICcqBE,GAAf,WAAA,EAAA,WAAeA,SAAAA,IAAAA,CAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAWpB1M,EAAAA,cAaC,CAbDA,SAAed,CAAqB,EAClC,IAAMvP,EAAO+c,EAAeC,aAAa,CACrCC,EAAMjd,EAAKuF,GAAG,GAClB0X,EAAIvd,OAAO,GACX,IAAA,IAA8BgQ,EAA9BC,EAAA9W,EAAoB0W,GAAU,CAAA,AAAAG,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAnB+V,IAAAA,EAAAA,EAAAA,KAAAA,CACAtY,EAALsY,EAAiB9O,IACnBmc,EAAIH,KAAK,CAAC3c,IAAI,CAACyP,EAAM7O,MAAM,EAE3Bkc,EAAIH,KAAK,CAAC3c,IAAI,CAACyP,EAAMO,OAAO,CAAC,IAAI,EAErC,CAEA,OADAnQ,EAAKkd,MAAM,CAACD,GACLA,EAAIH,KAAK,CAACK,IAAI,CAAC,IACxB,EAEApG,EAAAA,sBAoDC,CApDDA,SAAuBtJ,CAA+B,EACpD,IAAM8B,EAAW9B,EAAK8B,QAAQ,CACxB6N,EAAmB7N,EAASxX,MAAM,CAClC6kB,EAAUxB,GAAewB,OAAO,CAEtC,GAAIQ,AAAqB,IAArBA,EAAwB,CAC1B,IAAMC,EAAW9N,CAAQ,CAAC,EAAE,CACtBoI,EAAOpI,CAAQ,CAAC,EAAE,QAExB,AAAQjY,EAAJqgB,EAAgB7W,IACd8b,EAAQX,iBAAiB,CAASoB,EAAStd,IAAI,GACnC6c,EAAQP,kBAAkB,CAAC1E,GAMlCA,EAAK5W,MAAM,EACT6b,EAAQT,eAAe,CAASkB,EAAStd,IAAI,GACxC6c,EAAQL,gBAAgB,CAAC5E,GAMhCA,EAAK5W,MAAM,EACT6b,EAAQR,WAAW,CAASiB,EAAStd,IAAI,GACpC6c,EAAQJ,gBAAgB,CAAC7E,GAMhCA,EAAK5W,MAAM,EAGVsc,EAASlN,OAAO,CAAC,IAAI,EAAE,IAAGwH,EAAK5W,MAAM,CAErCsc,EAASlN,OAAO,CAAC,IAAI,EAAE,IAAGwH,EAAKxH,OAAO,CAAC,IAAI,EAElD,GAAIiN,AAAqB,IAArBA,EAAwB,CACjC,IAAME,EAAY/N,CAAQ,CAAC,EAAE,CACvBgO,EAAYhO,CAAQ,CAAC,EAAE,CACvBiO,EAAcF,EAAUnN,OAAO,CAAC,IAAI,EACpCsN,EAAcF,EAAUpN,OAAO,CAAC,IAAI,EAI1C,MAHoB,gBAAhBqN,GACF,IAAI,CAACE,YAAY,CAACJ,EAAU5c,QAAQ,CAAE,iDAE9B8c,EAAY,IAAGC,EAAY,GACvC,CAEA,OAAO,IAAI,CAACpN,cAAc,CAAC5C,EAAK8B,QAAQ,CAC1C,EAEAsK,EAAAA,uBAMC,CANDA,SAAwBpM,CAAgC,EACtD,IAAiBA,IAAiCiC,EAAjCjC,EAAAA,EAAAA,EAAK2L,0BAA0B,EAAE,CAAA,AAAA1J,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAzCH,IAAAA,EAAAA,EAAAA,KAAAA,CACP0hB,GAAewB,OAAO,CAACH,eAAe,CAAC/iB,EAAMoB,GAAY4e,GAAG,CAC9D,CAEA,OAAOjM,EAAKqM,SAAS,CAAC,IAAI,CAC5B,EAEAxE,EAAAA,iBAqCC,CArCDA,SAAkB7H,CAA0B,EAC1C,IAAMxU,EAAOwU,EAAK8B,QAAQ,CAAC,EAAE,CAC7B,GAAItW,EAAAA,EAAKuc,QAAQ,CAAY5I,IAAU,CACrCwO,GAAewB,OAAO,CAACH,eAAe,CAACxjB,EAAKuc,QAAQ,CAAC7O,KAAK,CAAE7L,GAAYgS,EAAE,EAE1E,IAAM8I,EAAY3c,EAAKsW,QAAQ,CAAC,EAAE,CAClC,GAAIqG,EAAAA,EAAqB7a,GAAQiC,yBAAyB,EAAE,CAgB1D,IAAK,IAfC2gB,EAAW/H,EAAUG,UAAU,CAC/B6H,EAAgB3kB,EAAKuc,QAAQ,CAACrJ,OAAO,CAACI,SAAS,CAACuH,aAAa,CAE7DpR,EAASib,EAASzZ,MAAM,CAAC,SAACrC,CAAG/J,CAAAA,CAAAA,EACjC,IAAiB8lB,EAAX3O,EAAW2O,MAAAA,SAAkB,MAAlBA,CAAAA,EAAAA,CAAe,CAAC9lB,EAAE,AAAA,EAAA,KAAA,EAAlB8lB,EAAoB3O,QAAQ,CAC7C,MACE,CAACA,GACA,CAACmM,GAAewB,OAAO,CAACX,iBAAiB,CAAChN,EAASjD,UAAU,GAC5D,CAACoP,GAAewB,OAAO,CAACT,eAAe,CAAClN,EAASjD,UAAU,GAC3D,CAACoP,GAAewB,OAAO,CAACR,WAAW,CAACnN,EAASjD,UAAU,CAE7D,GAEI6R,EAAa,GAER/lB,EAAI,EAAGC,EAAS2K,EAAO3K,MAAM,CAAED,EAAIC,EAAQD,IAAK,CACvD,IAAMqU,EAAUzJ,CAAM,CAAC5K,EAAE,CACnBkY,EAAO7D,EAAQgE,OAAO,CAAC,IAAI,CAC7BhE,CAAAA,EAAAA,EAAmBpR,GAAQmC,iBAAiB,GAAIpF,AAAM,IAANA,EAClD+lB,GAAc7N,EAEd6N,GAAc,KAAK7N,CAEvB,CAEA,OAAO/W,EAAQuc,QAAQ,CAAC7O,KAAK,CAAC,IAAGkX,EAAW,GAC9C,CACF,CAEA,OAAO,IAAI,CAACxN,cAAc,CAAC5C,EAAK8B,QAAQ,CAC1C,EAEAsL,EAAAA,sBA0CC,CA1CDA,SAAuBpN,CAA+B,EAEpD,IAAMmI,EAAYrG,AADD9B,EAAK8B,QAAQ,AACJ,CAAC,EAAE,CAC7B,IAAIqG,EAAAA,EAAqB7a,GAAQiC,yBAAyB,EAqCxD,OAAO,IAAI,CAACqT,cAAc,CAAC5C,EAAK8B,QAAQ,EAbxC,IAAK,IArBC7M,EAASib,AAFE/H,EAAUG,UAAU,CAEb7R,MAAM,CAAC,SAACuJ,CAAAA,EAC9B,GAAIA,EAAAA,EAAgB1S,GAAQuC,oBAAoB,EAAE,CAChD,IAAMwgB,EAAgB/C,GAAYC,gBAAgB,CAChDvN,EACA7S,GAAamf,mBAAmB,EAElC,GACE+D,GACA,AAAkC,UAAlC,OAAOA,EAAc7O,QAAQ,EAC5BmM,CAAAA,GAAewB,OAAO,CAACX,iBAAiB,CAAC6B,EAAc7O,QAAQ,GAC9DmM,GAAewB,OAAO,CAACT,eAAe,CAAC2B,EAAc7O,QAAQ,GAC7DmM,GAAewB,OAAO,CAACR,WAAW,CAAC0B,EAAc7O,QAAQ,CAAA,EAE3D,MAAO,CAAA,CAEX,CAEA,MAAO,CAAA,CACT,GAEI4O,EAAa,GACR/lB,EAAI,EAAGC,EAAS2K,EAAO3K,MAAM,CAAED,EAAIC,EAAQD,IAAK,CACvD,IAAM2V,EAAO/K,CAAM,CAAC5K,EAAE,CAChBkY,EAAOvC,EAAK0C,OAAO,CAAC,IAAI,CAE1B1C,CAAAA,EAAAA,EAAgB1S,GAAQmC,iBAAiB,GAAIpF,AAAM,IAANA,EAC/C+lB,GAAc7N,EAEd6N,GAAc,KAAK7N,CAEvB,CAEA,OAAOvC,EAAQtL,SAAS,CAAC,IAAG0b,EAAW,GAI3C,EAEA7I,EAAAA,kBAOC,CAPDA,SAAmBvH,CAA2B,EAC5C,IAAM8B,EAAW9B,EAAK8B,QAAQ,QAC9B,AAAIA,AAAoB,IAApBA,EAASxX,MAAM,CACVwX,CAAQ,CAAC,EAAE,CAACY,OAAO,CAAC,IAAI,EAExBZ,CAAW,CAAC,EAAE,CAACY,OAAO,CAAC,IAAI,EAAE,KAAIZ,CAAQ,CAAC,EAAE,CAACY,OAAO,CAAC,IAAI,CAEpE,EAEAqB,EAAAA,sBAMC,CANDA,SAAuB/D,CAA+B,EACpD,IAAM1N,EAAO0N,EAAKZ,aAAa,CAAC9M,IAAI,CAIpC,MAHoB,UAAhB,OAAOA,GACTqb,GAAewB,OAAO,CAACH,eAAe,CAAC1c,EAAMjF,GAAYkS,MAAM,EAE1D,IAAI,CAACqD,cAAc,CAAC5C,EAAK8B,QAAQ,CAC1C,EAEAuJ,EAAAA,8BAOC,CAPDA,SAA+BrL,CAAiC,EAC9D,IAAM8B,EAAW9B,EAAK8B,QAAQ,CACxBwO,EAAWxO,CAAQ,CAAC,EAAE,CAI5B,OAHYjY,EAARymB,EAAoBhjB,GAAQO,kBAAkB,GAAIyiB,EAASlR,aAAa,CAACqF,QAAQ,EACnFkJ,GAAewB,OAAO,CAACH,eAAe,CAASsB,EAAShe,IAAI,CAAEjF,GAAYkS,MAAM,EAE3E,WAAW,IAAI,CAACqD,cAAc,CAACd,EACxC,EAEAoE,EAAAA,gBAUC,CAVDA,SAAiBlG,CAAyB,EACxC,IAAQmP,EAAYxB,GAAZwB,OAAAA,CACFrN,EAAW9B,EAAK8B,QAAQ,CACxBK,EAAQL,CAAQ,CAAC,EAAE,CAEzB,GAAIK,EAAAA,EAAiB7U,GAAQgB,kBAAkB,EAAE,CAC/C,IAAMiQ,EAAa4D,EAAMX,QAAQ,CAACjD,UAAU,CAC5C,GAAI4Q,EAAQT,eAAe,CAACnQ,IAAe4Q,EAAQR,WAAW,CAACpQ,GAAa,MAAO,EACrF,CACA,OAAO,IAAI,CAACqE,cAAc,CAACd,EAC7B,EAEA+E,EAAAA,0BAsBC,CAtBDA,SAA2B7G,CAAmC,EAU5D,IAAK,IATC/K,EAAS+K,EAAKsG,iBAAiB,CAAC7P,MAAM,CAC1C,SAAChB,CAAAA,EACC,MAAA,CAACA,EAAK+L,QAAQ,EACb,CAACmM,GAAewB,OAAO,CAACX,iBAAiB,CAAC/Y,EAAK+L,QAAQ,CAACjD,UAAU,GACjE,CAACoP,GAAewB,OAAO,CAACT,eAAe,CAACjZ,EAAK+L,QAAQ,CAACjD,UAAU,GAChE,CAACoP,GAAewB,OAAO,CAACR,WAAW,CAAClZ,EAAK+L,QAAQ,CAACjD,UAAU,IAG9D5J,EAAM,GACDtK,EAAI,EAAGC,EAAS2K,EAAO3K,MAAM,CAAED,EAAIC,EAAQD,IAAK,CAEvD,IAAMqU,EAAUjJ,AADHR,CAAM,CAAC5K,EAAE,CACDqU,OAAO,CACtB6D,EAAO7D,EAAQgE,OAAO,CAAC,IAAI,CAC7BhE,CAAAA,EAAAA,EAAmBpR,GAAQwB,eAAe,GAAIzE,AAAM,IAANA,EAChDsK,GAAO4N,EAEP5N,GAAO,KAAK4N,CAEhB,CAEA,OAAO5N,CACT,EAEA+R,EAAAA,mBAMC,CANDA,SAAoB1G,CAA4B,EAC9C,IAAM7G,EAAa6G,EAAK7G,UAAU,CAACiG,aAAa,CAAC9L,MAAM,QACvD,AAAIqa,GAAewB,OAAO,CAACT,eAAe,CAACvV,GAClC,QAAQ6G,EAAK9G,KAAK,CAAC5F,MAAM,CAAC,IAE5B,IAAI,CAACsP,cAAc,CAAC5C,EAAK8B,QAAQ,CAC1C,EAEAwB,EAAAA,kBAoBC,CApBDA,SAAmBtD,CAA2B,EAC5C,IAAM8B,EAAW9B,EAAK8B,QAAQ,CAE9B,GAAIyO,AADQzO,CAAQ,CAAC,EAAE,CACfxP,IAAI,GAAKrF,GAAQmW,MAAM,CAAE,CAC/B,IAAMmF,EAAOzG,CAAQ,CAAC,EAAE,CACxB,GAAIyG,EAAAA,EAAgBjb,GAAQwC,UAAU,EAAE,CACtC,IAAM0gB,EAAYlD,GAAYC,gBAAgB,CAC5ChF,EACApb,GAAamf,mBAAmB,EAElC,GAAIqB,GAAewB,OAAO,CAACT,eAAe,CAAS8B,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAWhP,QAAQ,EACpE,MAAO,GAET,IAAMiP,EAAenD,GAAYC,gBAAgB,CAAuBhF,EAAMpb,GAAa2a,aAAa,EACxG,GAAI6F,GAAewB,OAAO,CAACT,eAAe,CAAS+B,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAcne,IAAI,EACnE,MAAO,GAAGiW,EAAK7F,OAAO,CAAC,IAAI,EAAE,GAEjC,CACF,CACA,OAAO,IAAI,CAACE,cAAc,CAACd,EAC7B,EAEA+G,EAAAA,uBAEC,CAFDA,SAAwB7I,CAAgC,EACtD,OAAO,IAAI,CAAC4C,cAAc,CAAC5C,EAAK8B,QAAQ,CAC1C,EAEA4H,EAAAA,oBA0DC,CA1DDA,SAAqB1J,CAA6B,aAC1CmP,EAAUxB,GAAewB,OAAO,CAC9BrB,EAAiDqB,EAAjDrB,cAAAA,CAAgBF,EAAiCuB,EAAjCvB,gBAAAA,CAAkBI,EAAemB,EAAfnB,UAAAA,CACpCU,EAAkBZ,AAAiC,KAAjCA,EAAe5Y,OAAO,CAAC8K,GACzCwO,EAAoBZ,AAAmC,KAAnCA,EAAiB1Y,OAAO,CAAC8K,GAC7C2O,EAAcX,AAA6B,KAA7BA,EAAW9Y,OAAO,CAAC8K,GAcvC,GAZI0O,GAAmBF,GACrB,IAAI,CAACyB,YAAY,CAACjQ,EAAK/M,QAAQ,CAAE,mDAG/Byb,GAAmBC,GACrB,IAAI,CAACsB,YAAY,CAACjQ,EAAK/M,QAAQ,CAAE,6CAG/Bub,GAAqBG,GACvB,IAAI,CAACsB,YAAY,CAACjQ,EAAK/M,QAAQ,CAAE,+CAG/Byb,CAAAA,IAAmBF,IAAqBG,EAqC1C,OAAO,IAAI,CAAC/L,cAAc,CAAC5C,EAAK8B,QAAQ,EApCxC,IAAI7J,EAAyB,EAAE,CAE/BA,AAAAA,EAAOvF,IAAI,CAAXuF,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CACK+H,EAAKyJ,gBAAgB,CAAClT,GAAG,CAAC,SAACd,CAAAA,EAAU,MAAA,CACtCib,KAAU7mB,EAAJ4L,EAAgBpC,IAAYoC,EAAKnC,MAAM,CAAGmC,EAAKiN,OAAO,CAAApO,GAC5DnC,MAAOsD,EAAKxC,QAAQ,CAAClB,KAAK,CAACI,KAAK,AAClC,MAGF,IAAmB6N,IAAeiC,EAAfjC,EAAAA,EAAAA,EAAKwJ,QAAQ,EAAE,CAAA,AAAAvH,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAvB8d,IAEciF,EAKSA,EAKNA,EAZjBjF,EAAAA,EAAAA,KAAAA,CACHje,EAAOie,EAAKhR,KAAK,CAAC5F,MAAM,AAC1Bob,CAAAA,GAAmBS,AAAAA,CAAAA,AAAoC,MAApCA,CAAAA,EAAAA,EAAQd,sBAAsB,CAACpiB,EAAK,AAAA,EAAA,KAAA,EAApCkjB,EAAsCja,OAAO,CAACgV,EAAAA,GAAS,EAC5EjS,EAAOvF,IAAI,CAAC,CACVge,KAAM,GAAG,IAAI,CAACC,cAAc,CAACzG,GAAM,KACnC/X,MAAO+X,EAAKhR,KAAK,CAACjG,QAAQ,CAAClB,KAAK,CAACI,KAAK,AACxC,GACSqc,GAAqBW,AAAAA,CAAAA,AAAAA,MAAAA,CAAAA,EAAAA,EAAQf,wBAAwB,CAACniB,EAAK,AAALA,EAAjCkjB,KAAAA,EAAAA,EAAwCja,OAAO,CAACgV,KAAS,EACvFjS,EAAOvF,IAAI,CAAC,CACVge,KAAM,GAAG,IAAI,CAACE,gBAAgB,CAAC1G,GAAM,KACrC/X,MAAO+X,EAAKhR,KAAK,CAACjG,QAAQ,CAAClB,KAAK,CAACI,KAAK,AACxC,GACSwc,GAAeQ,AAAAA,CAAAA,AAAAA,MAAAA,CAAAA,EAAAA,EAAQb,kBAAkB,CAACriB,EAAK,AAALA,EAA3BkjB,KAAAA,EAAAA,EAAkCja,OAAO,CAACgV,KAAS,GAC3EjS,EAAOvF,IAAI,CAAC,CACVge,KAAM,GAAG,IAAI,CAACG,UAAU,CAAC3G,GAAM,KAC/B/X,MAAO+X,EAAKhR,KAAK,CAACjG,QAAQ,CAAClB,KAAK,CAACI,KAAK,AACxC,EAEJ,CAOA,OALa8F,EACV6Y,IAAI,CAAC,SAACtY,CAAGwM,CAAAA,CAAAA,SAAMxM,EAAErG,KAAK,CAAG6S,EAAE7S,KAAK,AAChCoE,GAAAA,GAAG,CAAC,SAACd,CAAAA,EAASA,OAAAA,EAAKib,IAAI,AACvBhB,GAAAA,IAAI,CAAC,GAMZ,EAEA/H,EAAAA,uBAUC,CAVDA,SAAwBoJ,CAAkC,SAIxD,AAAIC,AAHWD,EAAOjS,SAAS,CAAC5F,KAAK,CAAC5F,MAAM,EAG9B6b,AAFExB,GAAewB,OAAO,CAEhB8B,UAAU,CAEvB,eADYF,EAAOtJ,UAAU,CAAC/E,OAAO,CAAC,IAAI,EAG1C,IAAI,CAACE,cAAc,CAACmO,EAAOjP,QAAQ,CAE9C,EAEA3D,EAAU8R,YAMT,CAND,SAAuBjP,CAAiC,CAAElO,CAAe,EAIvEK,QAAAA,CAAOC,KAAK,CAACN,EAEf,EAzVoBwc,CA0VrB,GA1VqBA,CAAAA,GASHC,aAAAA,CAAgB,IAAI2B,sBAAAA,CAAqB9B,GAAmB,ICjBxE,IAAe+B,GAAf,WAAA,EAAA,SAAA7B,CAAA,EAAe6B,SAAAA,iBACZC,EAAAA,EAAAA,KAAAA,CAAAA,IAAAA,CAAAA,YAAAA,IAAAA,CAAAA,EAAAA,gBAAAA,CAAmC,EAAE,GADzBD,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAKpB1Q,EAAAA,KAIC,CAJDA,WAEE4Q,AAD8C/c,AAAA,IAAI,CAA1C8c,gBAAAA,CACQ9mB,MAAM,CAAG,EAPP6mB,EAQNG,oBAAoB,CAAC1e,KAAK,EACxC,EAEA2e,EAAAA,cAIC,CAJDA,SAAeC,CAAgB,CAAE7c,CAAmB,EAClD,IAAwB6c,IAAuBvP,EAAvBuP,EAAAA,EAAAA,EAAK3R,gBAAgB,EAAE,CAAA,AAAAoC,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAApCqlB,IAAAA,EAAAA,EAAAA,KAAAA,CACT9c,EAAIjC,IAAI,CAAC,CAAEge,KAAMe,EAAU/O,OAAO,CAAC,IAAI,EAAGvQ,MAAOsf,EAAUxe,QAAQ,CAAClB,KAAK,CAACI,KAAK,AAAC,EAClF,CACF,EAEAuf,EAAAA,kBAgBC,CAhBDA,SAAmB1R,CAA6B,CAAE2R,CAAmB,CAAEC,CAAqB,EAI1FjE,GAAelN,KAAK,GACpB,IAAI,CAACA,KAAK,GAEV,IAAMW,EAAapB,EAAKoB,UAAU,AAClCuM,CAAAA,GAAewB,OAAO,CAACF,gBAAgB,CAAG7N,EAAW3D,WAAW,CAEhE,IAAMoU,EAA+BzQ,EAAWrB,+BAA+B,GAE/E,MAAO,CACL+R,OAAQ,IAAI,CAACC,WAAW,CAACJ,EAAavQ,EAAYyQ,GAClDG,SAAU,IAAI,CAACC,aAAa,CAACL,EAAexQ,EAAYyQ,EAC1D,CACF,EAEA1T,EAAQ4T,WAgFP,CAhFD,SACEnV,CAAa,CACb4U,CAAgB,CAChBK,CAAyD,aAEnD1C,EAAUxB,GAAewB,OAAO,AACtCA,CAAAA,EAAQ+C,KAAK,CAAGhlB,GAAakP,MAAM,CACnC+S,EAAQ8B,UAAU,CAAGrU,EAErB,IAAMwL,EAAe+I,EAAY9P,aAAa,CACxC5D,EAAc+T,EAAK/T,WAAW,CACpC2K,EAAatW,GAAG,CAAC8K,EAAOvP,GAAYgS,EAAE,EACtC,IAAM8S,EAAwB1U,EAAYT,UAAU,CAACoL,EAAc,CAAA,EAAM,EAAE,EAC3E,GAAI,CAAC+J,EAAU7nB,MAAM,CAAE,KAAM,4BAA4BsS,EAEzD,IAAQgR,EAAiEuB,EAAjEvB,gBAAAA,CAAkBC,EAA+CsB,EAA/CtB,cAAeC,EAAgCqB,EAAhCrB,cAAgBC,CAAAA,EAAgBoB,EAAhBpB,WAAAA,CACzDoE,EAAUC,OAAO,CAAC,SAACrK,CAAAA,EACjB,IAAMgJ,EAAShJ,EAASrJ,OAAO,CACzBvF,EAAa4X,EAAOjS,SAAS,CAAC3F,UAAU,CAE9C,GAAI,AAA2B,UAA3B,OAAOA,EAAW7G,IAAI,CAAe,CACvC8V,EAAatW,GAAG,CAACqH,EAAW7G,IAAI,CAAEjF,GAAYkS,MAAM,EACpD,IAAM8S,EAAiC5U,EAAYT,UAAU,CAACoL,EAAc,CAAA,EAAM,EAAE,EACpF,GAAKiK,EAAe/nB,MAAM,CAGxB,IAAK,IAAID,EAAI,EAAGA,EAAIgoB,EAAe/nB,MAAM,CAAED,IAAK,CAE9C,IAAMqU,EAAU4T,AADMD,CAAc,CAAChoB,EAAE,CACTqU,OAAO,CACrCoP,EAAepb,IAAI,CAACgM,GACpB,IAAmBA,IAAkBuD,EAAlBvD,EAAAA,EAAAA,EAAQ8K,QAAQ,EAAE,CAAA,AAAAvH,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAA1B8d,IAAAA,EAAAA,EAAAA,KAAAA,CACT6D,EAAYrb,IAAI,CAACwX,EACnB,CACF,MATA5V,EAAK2b,YAAY,CAAC9W,EAAWlG,QAAQ,CAAE,4BAA4BkG,EAAW7G,IAAI,CAAC,KAWvF,MAAW6G,EAAW7G,IAAI,GAAKrF,GAAQya,IAAI,EACzCpT,EAAK2b,YAAY,CAAC9W,EAAWlG,QAAQ,CAAE,qDAGzC,IAAMkV,EAAY4I,EAAOjS,SAAS,CAACuH,aAAa,CAC1CkM,EAAiBpK,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,CAAW,CAAC,EAAE,CACrC,GAAIoK,EAAgB,CAClB,IAAMC,EAAgBD,EAAe/Q,QAAQ,CAAClP,IAAI,CAClD,GAAI,AAAyB,UAAzB,OAAOkgB,EAA4B,CACrCpK,EAAatW,GAAG,CAAC0gB,EAAenlB,GAAYkS,MAAM,EAClD,IAAMkT,EAAmChV,EAAYT,UAAU,CAACoL,EAAc,CAAA,EAAM,EAAE,EACtF,GAAKqK,EAAiBnoB,MAAM,CAG1B,IAAK,IAAID,EAAI,EAAGA,EAAIooB,EAAiBnoB,MAAM,CAAED,IAAK,CAEhD,IAAMqU,EAAUgU,AADQD,CAAgB,CAACpoB,EAAE,CACXqU,OAAO,CACvCkP,EAAiBlb,IAAI,CAACgM,GACtB,IAAmBA,IAAkBiU,EAAlBjU,EAAAA,EAAAA,EAAQ8K,QAAQ,EAAE,CAAA,AAAAmJ,CAAAA,EAAAC,GAAA,EAAAxmB,IAAA,EAAA,CAA1B8d,IAAAA,EAAAA,EAAAA,KAAAA,CACT2D,EAAcnb,IAAI,CAACwX,EACrB,CACF,MATA5V,EAAK2b,YAAY,CAACsC,EAAe7T,OAAO,CAACzL,QAAQ,CAAE,8BAA8Buf,EAAc,KAWnG,CACF,CACF,GAEA,IAAMnB,EAAkB,IAAI,CAACD,gBAAgB,CAC7CzD,GAAewB,OAAO,CAACH,eAAe,CAACpS,EAAOvP,GAAYgS,EAAE,EAE5D,IAAI,CAACwT,gBAAgB,CAACxB,GACtB,IAAI,CAACyB,gBAAgB,CAAC3D,EAAQvB,gBAAgB,CAAEyD,GAChD,IAAI,CAACyB,gBAAgB,CAAC3D,EAAQrB,cAAc,CAAEuD,GAC9C,IAAI,CAAC0B,2BAA2B,CAAClB,EAA8BR,GAC/D,IAAI,CAACE,cAAc,CAACC,EAAMH,GAE1B,IAAM2B,EAAa3B,EAChBP,IAAI,CAAC,SAACtY,CAAGwM,CAAAA,CAAAA,SAAMxM,EAAErG,KAAK,CAAG6S,EAAE7S,KAAK,AAChCoE,GAAAA,GAAG,CAAC,SAACd,CAAAA,EAASA,OAAAA,EAAKib,IAAI,AACvBhB,GAAAA,IAAI,CAAC,MAKR,OAHA/B,GAAewB,OAAO,CAAC1O,KAAK,CAAC,CAAA,GAC7B,IAAI,CAACA,KAAK,GAEHuS,CACT,EAEA7U,EAAQ8T,aA8DP,CA9DD,SACErV,CAAa,CACb4U,CAAgB,CAChByB,CAAuD,aAEjD9D,EAAUxB,GAAewB,OAAO,AACtCA,CAAAA,EAAQ+C,KAAK,CAAGhlB,GAAa6O,QAAQ,CACrCoT,EAAQ8B,UAAU,CAAGrU,EAErB,IAAMwL,EAAe+I,EAAY9P,aAAa,CACtC5D,EAAgB+T,EAAhB/T,WAAAA,CACR2K,EAAatW,GAAG,CAAC8K,EAAOvP,GAAYgS,EAAE,EACtC,IAAM8S,EAAwB1U,EAAYT,UAAU,CAACoL,EAAc,CAAA,EAAM,EAAE,EAC3E,GAAI,CAAC+J,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAW7nB,MAAM,EAAE,KAAM,4BAA4BsS,EAE1DuV,EAAUC,OAAO,CAAC,SAACrK,CAAAA,EACjB,IAAMgJ,EAAShJ,EAASrJ,OAAO,CACvB2E,EAAoB0N,EAApB1N,eAAAA,CAEJA,GACFA,CAAAA,EAAgBF,qBAAqB,CAAG,CAAA,GAG1C,IAA2D4N,EAAAA,EAAOjS,SAAS,CAAC3F,UAAU,CAA9E7G,EAAmDye,EAAnDze,IAAAA,CAAsBW,EAA6B8d,EAA7B9d,QAAAA,CAC9B,GAAI,AAA0B,UAA1B,OAAOigB,EAA6B,CACtC9K,EAAatW,GAAG,CAACohB,EAAgB7lB,GAAYkS,MAAM,EACnD,IAAM4T,EAA6B1V,EAAYT,UAAU,CAACoL,EAAc,CAAA,EAAM,EAAE,EAChF,GAAK+K,EAAW7oB,MAAM,CAGpB,IAAK,IAAID,EAAI,EAAGA,EAAI8oB,EAAW7oB,MAAM,CAAED,IAAK,CAE1C,IAAMqU,EAAU0U,AADED,CAAU,CAAC9oB,EAAE,CACLqU,OAAO,CACjCyQ,EAAQnB,UAAU,CAACtb,IAAI,CAACgM,GACxB,IAAmBA,IAAkBuD,EAAlBvD,EAAAA,EAAAA,EAAQ8K,QAAQ,EAAE,CAAA,AAAAvH,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAA1B8d,IAAAA,EAAAA,EAAAA,KAAAA,CACTiF,EAAQlB,OAAO,CAACvb,IAAI,CAACwX,EACvB,CACF,MATA5V,EAAK2b,YAAY,CAACoD,EAAiB,uBAAsBH,QAWlDA,IAAmBjmB,GAAQya,IAAI,EAAIwL,IAAmBjmB,GAAQ8N,IAAI,EAC3EzG,EAAK2b,YAAY,CAACoD,EAAgB,sDAEtC,GAEA,IAAMhC,EAAkB,IAAI,CAACD,gBAAgB,CAC7CzD,GAAewB,OAAO,CAACH,eAAe,CAACpS,EAAOvP,GAAYgS,EAAE,EAE5D,IAAI,CAACwT,gBAAgB,CAACxB,GACtB,IAAI,CAACyB,gBAAgB,CAAC3D,EAAQrB,cAAc,CAAEuD,GAC9C,IAAI,CAACyB,gBAAgB,CAAC3D,EAAQnB,UAAU,CAAEqD,GAC1C,IAAI,CAAC0B,2BAA2B,CAACE,EAA4B5B,GAC7D,IAAI,CAACE,cAAc,CAACC,EAAMH,GAE1B,IAAM2B,EAAa3B,EAChBP,IAAI,CAAC,SAACtY,CAAGwM,CAAAA,CAAAA,SAAMxM,EAAErG,KAAK,CAAG6S,EAAE7S,KAAK,AAChCoE,GAAAA,GAAG,CAAC,SAACd,CAAAA,EAASA,OAAAA,EAAKib,IAAI,AACvBhB,GAAAA,IAAI,CAAC,MAKR,OAHAP,EAAQ1O,KAAK,GACb,IAAI,CAACA,KAAK,GAEHuS,CACT,EAEA7U,EAAQ0U,gBA0BP,CA1BD,SAAyBle,CAAmB,EAC1C,IAAM4Z,EAAyBZ,GAAewB,OAAO,CAA7CZ,kBAAAA,CAEF+E,EAAatqB,OAAOuqB,IAAI,CAAChF,GAAoBjkB,MAAM,CACzD,GAAIgpB,AAAe,IAAfA,GAEJ,IAAK,IAAMpa,KAASqV,EAClB,IAAI4C,EAAYG,oBAAoB,CAAC5Z,GAAG,CAACwB,IA5LzBiY,EA6LJG,oBAAoB,CAAC1Z,GAAG,CAACsB,GAGrC,IAAK,IADC2S,EAAU0C,CAAkB,CAACrV,EAAM,CAChC7O,EAAI,EAAGA,EAAIwhB,EAAQvhB,MAAM,CAAED,IAAK,CACvC,IAAMqZ,EAAKmI,CAAO,CAACxhB,EAAE,CACfqmB,EAAOhN,EAAGhF,OAAO,CAACgE,OAAO,CAAC,IAAI,EAAKgB,CAAAA,EAAGpR,IAAI,GAAKjF,GAAYsS,GAAG,CAAG,IAAM,EAAC,CACzE+D,CAAAA,EAAGhH,eAAe,EACrB/H,EAAIjC,IAAI,CAAC,CACPge,KAAAA,EACAve,MAAOuR,EAAGhF,OAAO,CAACzL,QAAQ,CAAClB,KAAK,CAACI,KAAK,AACxC,EAEJ,EAGEnJ,OAAOuqB,IAAI,CAAChF,GAAoBjkB,MAAM,GAAKgpB,GAC7C,IAAI,CAACT,gBAAgB,CAACle,GAE1B,EAEAwJ,EAAQ2U,gBAQP,CARD,SAAyBU,CAAsC,CAAE7e,CAAmB,EAClF,IAAA,IAAgCsN,EAAhCC,EAAA9W,EAAmBooB,GAAa,CAAA,AAAAvR,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAArB4T,IAAAA,EAAAA,EAAAA,KAAAA,CACH0Q,EAAO1Q,EAAK0C,OAAO,CAAC,IAAI,CAEzB1C,CAAAA,EAAKtD,eAAe,EACvB/H,EAAIjC,IAAI,CAAC,CAAEge,KAAAA,EAAMve,MAAO6N,EAAK/M,QAAQ,CAAClB,KAAK,CAACI,KAAK,AAAC,EAEtD,CACF,EAEAgM,EAAQ4U,2BA0CP,CA1CD,SAAoCU,CAAmC,CAAE9e,CAAmB,aACpFwa,EAAUxB,GAAewB,OAAO,CAChCuE,EAAoBvE,EAAQZ,kBAAkB,CAC9CoF,EAA4BxE,EAAQjB,0BAA0B,AACpEyF,CAAAA,EAA0BrpB,MAAM,CAAG,EAEnC,IAAsBtB,IAAkCiZ,EAAlCjZ,EAAAA,EAAAA,OAAO4qB,MAAM,CAACF,IAAoB,CAAA,AAAAzR,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EACtD,IAAA,IAA8BumB,EADrB9G,EAAAA,EAAAA,KAAAA,CACT+G,EAAAxnB,EAAqBygB,GAAS,CAAA,AAAA8G,CAAAA,EAAAC,GAAA,EAAAxmB,IAAA,EAAA,CAAnBqQ,IAAAA,EAAAA,EAAAA,KAAAA,AACLA,CAAAA,EAAOC,eAAe,EACxBiX,EAA0BjhB,IAAI,CAAC+J,EAAOiC,OAAO,CAEjD,CAGF,IAAA,IAA4BmV,EAA5BC,EAAA1oB,EAAoBqoB,GAAQ,CAAA,AAAAI,CAAAA,EAAAC,GAAA,EAAA1nB,IAAA,EAAA,CAAjB2nB,IAAAA,EAAAA,EAAAA,KAAAA,CACLrD,EAAAA,KAAAA,EACEvO,EAAQ4R,EAAMjS,QAAQ,CAAC,EAAE,CAE/B,GAAIK,EAAAA,EAAiB7U,GAAQ8D,sBAAsB,EAAE,CACnD,IAAI6G,EAAyB,EAAE,CAC/BA,AAAAA,EAAOvF,IAAI,CAAXuF,KAAAA,CAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CACK8b,EAAMtK,gBAAgB,CAAClT,GAAG,CAAC,SAACd,CAAAA,EAAU,MAAA,CACvCib,KAAU7mB,EAAJ4L,EAAgBpC,IAAYoC,EAAKnC,MAAM,CAAGmC,EAAKiN,OAAO,CAAApO,GAC5DnC,MAAOsD,EAAKxC,QAAQ,CAAClB,KAAK,CAACI,KAAK,AAClC,MAGF,IAAI,CAAC6hB,4BAA4B,CAAC7R,EAAOlK,GAEzCyY,EAAOzY,EACJ6Y,IAAI,CAAC,SAACtY,CAAGwM,CAAAA,CAAAA,SAAMxM,EAAErG,KAAK,CAAG6S,EAAE7S,KAAK,AAChCoE,GAAAA,GAAG,CAAC,SAACd,CAAAA,EAASA,OAAAA,EAAKib,IAAI,AACvBhB,GAAAA,IAAI,CAAC,WAERgB,EAAOqD,EAAMrR,OAAO,CAAC,IAAI,EAG3B/N,EAAIjC,IAAI,CAAC,CACPge,KAAAA,EACAve,MAAO4hB,EAAM9gB,QAAQ,CAAClB,KAAK,CAACI,KAAK,AACnC,EACF,CACF,EAEAgM,EAAQ6V,4BA+CP,CA/CD,SAAqChU,CAAc,CAAErL,CAAmB,EAEtE,IAAK,IADCmN,EAAW9B,EAAK8B,QAAQ,CACrBzX,EAAI,EAAGA,EAAIyX,EAASxX,MAAM,CAAED,IAAK,CACxC,IAAM8X,EAAQL,CAAQ,CAACzX,EAAE,CACzB,GAAI8X,EAAAA,EAAiB7U,GAAQqC,kBAAkB,EAC7CgF,EAAIjC,IAAI,CAAC,CACPge,KAAMvO,EAAMO,OAAO,CAAC,IAAI,EACxBvQ,MAAOgQ,EAAMlP,QAAQ,CAAClB,KAAK,CAACI,KAAK,AACnC,QACK,GAAIgQ,EAAAA,EAAiB7U,GAAQ8B,kBAAkB,EACqB,KAArEue,GAAewB,OAAO,CAACjB,0BAA0B,CAAChZ,OAAO,CAACiN,IAC5DxN,EAAIjC,IAAI,CAAC,CACPge,KAAMvO,EAAMM,QAAQ,GACpBtQ,MAAOgQ,EAAMlP,QAAQ,CAAClB,KAAK,CAACI,KAAK,AACnC,QAEG,GAAIgQ,EAAAA,EAAiB7U,GAAQ2C,eAAe,EAAE,CACnD,IAKgCkS,EAAgDA,EAClDA,EAA4CA,EANpEgN,EAAUxB,GAAewB,OAAO,CAChC+C,EAAQ/C,EAAQ+C,KAAK,CAEzBvE,CAAAA,AAAqE,KAArEA,GAAewB,OAAO,CAACjB,0BAA0B,CAAChZ,OAAO,CAACiN,IACzD+P,CAAAA,IAAUhlB,GAAakP,MAAM,CAC1B+S,EAAQX,iBAAiB,CAACrM,AAAAA,MAAAA,CAAAA,EAAAA,EAAMjJ,KAAK,AAALA,EAANiJ,KAAAA,EAAAA,EAAa7O,MAAM,GAAK6b,EAAQT,eAAe,CAAY,MAAXvM,CAAAA,EAAAA,EAAMjJ,KAAK,AAALA,EAAK,KAAA,EAAXiJ,EAAa7O,MAAM,EAC7F6b,EAAQT,eAAe,CAAA,AAAY,MAAXvM,CAAAA,EAAAA,EAAMjJ,KAAK,EAAA,KAAA,EAAXiJ,EAAa7O,MAAM,GAAK6b,EAAQR,WAAW,CAACxM,AAAAA,MAAAA,CAAAA,EAAAA,EAAMjJ,KAAK,EAAXiJ,KAAAA,EAAAA,EAAa7O,MAAM,CAAA,CAAA,GAE3FqB,EAAIjC,IAAI,CAAC,CACPge,KAAMvO,EAAMM,QAAQ,GACpBtQ,MAAOgQ,EAAMlP,QAAQ,CAAClB,KAAK,CAACI,KAAK,AACnC,EAEJ,MAAO,GAAIgQ,EAAAA,EAAiB7U,GAAQoD,uBAAuB,EAEzD,IAAK,IADC6a,EAAuBpJ,EAAMoJ,oBAAoB,CAC9ClhB,EAAI,EAAGA,EAAIkhB,EAAqBjhB,MAAM,CAAED,IAAK,CACpD,IAAM4pB,EAAsB1I,CAAoB,CAAClhB,EAAE,AACoC,CAAA,KAAnFsjB,GAAewB,OAAO,CAACjB,0BAA0B,CAAChZ,OAAO,CAAC+e,IAC5Dtf,EAAIjC,IAAI,CAAC,CACPge,KAAMuD,EAAoBxR,QAAQ,GAAK,IACvCtQ,MAAO8hB,EAAoBhhB,QAAQ,CAAClB,KAAK,CAACI,KAAK,AACjD,EAEJ,CAGOtI,EAALsY,EAAiBN,KACnB,IAAI,CAACmS,4BAA4B,CAAC7R,EAAOxN,EAE7C,CACF,EAtToBwc,GAAoB7B,GAApB6B,CAAAA,GAEL9P,aAAAA,CAA4B,IAAI5C,GAAW,GAAI,MAF1C0S,GAGLG,qBAAuB,IAAIzY,ICXrC,IAAAqb,GAAA,WAAA,EAAA,SAAA/C,CAAA,EAAM+C,SAAAA,yCAAAA,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OASX/V,EAASyS,gBAER,CAFD,SAA0B1G,CAAgB,EACxC,MAAO,aAAaA,EAAK1I,QAAQ,CAACjD,UAAU,CAAC,IAAG2L,EAAKhR,KAAK,CAAC5F,MAAM,CAAC,GACpE,EAEA6K,EAASwS,cAER,CAFD,SAAwBzG,CAAgB,EACtC,MAAO,WAAWA,EAAK1I,QAAQ,CAACjD,UAAU,CAAC,IAAG2L,EAAKhR,KAAK,CAAC5F,MAAM,CAAC,GAClE,EAEA6K,EAAS0S,UAER,CAFD,WACE,OAAO,IACT,EAEA1S,EAASmL,sBAcR,CAdD,SAAgCtJ,CAA+B,EAC7D,IAAQ8B,EAAa9B,EAAb8B,QAAAA,CACF8N,EAAW9N,CAAQ,CAAC,EAAE,CACpBqN,EAAYxB,GAAZwB,OAAAA,CACR,GAAYtlB,EAAR+lB,EAAoBtiB,GAAQ0C,iBAAiB,GAAImf,EAAQR,WAAW,CAASiB,EAAStd,IAAI,EAAG,CAC/F,IAAM6hB,EAAiBrS,CAAQ,CAAC,EAAE,CAC5BoI,EAAOiF,EAAQlB,OAAO,CAACmG,IAAI,CAAC,SAAC3e,CAAAA,EAASA,OAAAA,EAAKyD,KAAK,CAAC5F,MAAM,GAAK6gB,EAAe7gB,MAAM,UACvF,AAAK4W,EAIE,eAAeA,EAAKzI,QAAQ,CAAE,KAHnC,IAAI,CAACwO,YAAY,CAACkE,EAAelhB,QAAQ,CAAG,2BAA0BkhB,EAAe7gB,MAAM,EACpF,GAGX,CACA,OAAO6d,EAAA5nB,SAAA,CAAM+f,sBAAD,CAAwBtJ,IAAAA,CAAAA,IAAAA,CAAAA,EACtC,EAEA7B,EAASmF,kBASR,CATD,SAA4BtD,CAA2B,SACrD,AAAIA,EAAKmD,qBAAqB,CAC5B,AAAIwK,GAAewB,OAAO,CAACnB,UAAU,CAAC1jB,MAAM,CACnC,GAGF,kBAAkB0e,AADNhJ,EAAK8B,QAAQ,CAAC,EAAE,CACCY,OAAO,CAAC,IAAI,EAE3CyO,EAAA5nB,SAAA,CAAM+Z,kBAAD,CAAoBtD,IAAAA,CAAAA,IAAAA,CAAAA,EAClC,EA9CWkU,EAEJG,UAKN,CALD,WAIE,OAHK,IAAI,CAACnF,UAAU,EAClB,CAAA,IAAI,CAACA,UAAU,CAAG,IAJXgF,GAMF,IAAI,CAAChF,UAAU,AACxB,EAPWgF,GAAuB/C,ICE9BmD,GAAkB,iBAEjBC,GAAA,WAAA,EAAA,SAAApD,CAAA,EAAMoD,SAAAA,mDASHC,eAAkC,CAAA,EAAE,GACpCC,4BAA+B,CAAA,CAAA,IAV5BF,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAYXpW,EAASsC,KAKR,CALD,WACE0Q,EAAA5nB,SAAA,CAAMkX,KAAD,CAAAjV,IAAA,CAAA,IAAA,EAEL,IAAI,CAACgpB,eAAe,CAAClqB,MAAM,CAAG,EAC9B,IAAI,CAACmqB,4BAA4B,CAAG,CAAA,CACtC,EAEAtW,EAASoT,cAMR,CAND,SAAwBC,CAAgB,CAAE7c,CAAmB,EAC3Dwc,EAAMI,SAAAA,CAAAA,cAAD,WAAgBC,EAAM7c,GAE3B,IAAK,IAAItK,EAAI,EAAGyB,EAAI,IAAI,CAAC0oB,eAAe,CAAClqB,MAAM,CAAED,EAAIyB,EAAGzB,IACtDsK,EAAIjC,IAAI,CAAC,IAAI,CAAC8hB,eAAe,CAACnqB,EAAE,CAEpC,EAEA8T,EAASyS,gBAER,CAFD,SAA0B1G,CAAgB,EACxC,MAAO,MAAMA,EAAK1I,QAAQ,CAACjD,UAAU,CAAC,IAAG2L,EAAKhR,KAAK,CAAC5F,MAAM,CAAC,GAC7D,EAEA6K,EAASwS,cAGR,CAHD,SAAwBzG,CAAgB,EAEtC,MAAO/F,AADWwJ,CAAAA,GAAewB,OAAO,CAAC+C,KAAK,GAAKhlB,GAAa6O,QAAQ,CAAG,KAAO,OAC9D,IAAGmO,EAAK1I,QAAQ,CAACjD,UAAU,CAAC,IAAG2L,EAAKhR,KAAK,CAAC5F,MAAM,CAAC,GACvE,EAEA6K,EAAS0S,UAER,CAFD,SAAoB3G,CAAgB,EAClC,MAAQ,qBAAoBA,EAAKzI,QAAQ,CAAC,cAAayI,EAAKhR,KAAK,CAAC5F,MAAM,CAAC,GAC3E,EAEA6K,EAAS0K,uBAkCR,CAlCD,SAAiC7I,CAAgC,EAC/D,IAAM8B,EAAW9B,EAAK8B,QAAQ,CAE9B,GAAI1C,AAAkC,IAAlCA,AADkB0C,CAAQ,CAAC,EAAE,CACfA,QAAQ,CAACxX,MAAM,CAC/B,OAAO,IAAI,CAACsY,cAAc,CAACd,GAE7B,IAAI5I,EAAQ8G,EAAK1M,MAAM,CACvB,OAAQ0M,EAAK9G,KAAK,EAChB,IAAK,YACL,IAAK,cACHA,EAAQ,UACR,KACF,KAAK,gBACHA,EAAQ,cACR,KACF,KAAK,kBACL,IAAK,oBACHA,EAAQ,aACR,KACF,KAAK,mBACL,IAAK,qBACHA,EAAQ,cACR,KACF,KAAK,sBACHA,EAAQ,iBACR,KACF,KAAK,uBACHA,EAAQ,kBACR,KACF,KAAK,kBACHA,EAAQ,cAEZ,CACA,OAAOA,CACT,EAEAiF,EAASiO,uBAWR,CAXD,SAAiCpM,CAAgC,EAC/D,IAAQmP,EAAYxB,GAAZwB,OAAAA,CACR,GAAIA,EAAQ+C,KAAK,GAAKhlB,GAAa6O,QAAQ,EAAIiE,AAAyB,iBAAzBA,EAAKqM,SAAS,CAAC,IAAI,EAAsB,CACtF,GAAI8C,EAAQnB,UAAU,CAAC1jB,MAAM,CAAE,CAC7B,IAAI,CAAC2lB,YAAY,CAACjQ,EAAK/M,QAAQ,CAAE,mEACjC,MACF,CAEA,OADA,IAAI,CAACyhB,0BAA0B,GACxBJ,EACT,CACA,OAAOnD,EAAA5nB,SAAA,CAAM6iB,uBAAD,CAAyBpM,IAAAA,CAAAA,IAAAA,CAAAA,EACvC,EAEA7B,EAASmF,kBAWR,CAXD,SAA4BtD,CAA2B,SACrD,AAAIA,EAAKmD,qBAAqB,CAC5B,AAAIwK,GAAewB,OAAO,CAACnB,UAAU,CAAC1jB,MAAM,CACnC,IAET,IAAI,CAACoqB,0BAA0B,GAGxBJ,GAAmB,MAAKtL,AADZhJ,EAAK8B,QAAQ,CAAC,EAAE,CACOY,OAAO,CAAC,IAAI,EAAE,KAEnDyO,EAAA5nB,SAAA,CAAM+Z,kBAAD,CAAoBtD,IAAAA,CAAAA,IAAAA,CAAAA,EAClC,EAEA7B,EAAQuW,0BAOP,CAPD,WACM,IAAI,CAACD,4BAA4B,GACrC,IAAI,CAACD,eAAe,CAAC9hB,IAAI,CAAC,CACxBge,KAAO,YAAW4D,GAAgB,IAClCniB,MAAO,CACT,GACA,IAAI,CAACsiB,4BAA4B,CAAG,CAAA,EACtC,EA7GWF,EAEJF,UAKN,CALD,WAIE,OAHK,IAAI,CAACnF,UAAU,EAClB,CAAA,IAAI,CAACA,UAAU,CAAG,IAJXqF,GAMF,IAAI,CAACrF,UAAU,AACxB,EAPWqF,GAAuBpD,ICEdwD,GAAf,WAAA,EAAA,WAAeA,SAAAA,EAyDR3hB,CAAe,OA1BjB4hB,aAAgB,CAAA,EA2BxB,IAAI,CAACC,OAAO,CAAG7hB,EA1DG2hB,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OA6DpBG,EAAAA,SAMC,CANDA,SAAU9hB,CAAc,EACtB,IAAI,CAAC6hB,OAAO,CAAG7hB,EACf,IAAI,CAAC4hB,aAAa,CAAG,CAIvB,EAEAG,EAAAA,iBAQC,CARDA,SAAkBC,CAAc,EAC9B,gBADgBA,GAAAA,CAAAA,EAAa,CAAA,EACtBxhB,GAAUC,cAAc,CAC7B,IAAI,CAACmhB,aAAa,CAAGI,EAMzB,EAEAC,EAAAA,KAEC,CAFDA,WACE,OAAO,IAAI,CAACL,aAAa,EAAI,IAAI,CAACC,OAAO,CAACvqB,MAAM,AAClD,EAEA4qB,EAAAA,UAEC,CAFDA,WACE,OAAO,IAAI,CAACL,OAAO,CAAC,IAAI,CAACD,aAAa,CAAC,AACzC,EAEAO,EAAAA,cAEC,CAFDA,WACE,OAAO,IAAI,CAACN,OAAO,CAACO,UAAU,CAAC,IAAI,CAACR,aAAa,CACnD,EAEAS,EAAAA,OAcC,CAdDA,SAAQC,CAAa,EAanB,IAAI,CAACV,aAAa,EAAIU,CACxB,EAEAC,EAAAA,SAIC,CAJDA,SAAUC,CAAyB,EACjC,KA5GkBb,EA4GDc,gBAAgB,CAAC,IAAI,CAACN,cAAc,GAAIK,IACvD,IAAI,CAACH,OAAO,CAAC,EAEjB,EAEAK,EAAAA,oBAoCC,CApCDA,WAKE,IAJA,IAAM1iB,EAAS,IAAI,CAAC6hB,OAAO,CACrBvqB,EAAS0I,EAAO1I,MAAM,CACxB6H,EAAQ,IAAI,CAACyiB,aAAa,CAEvBziB,EAAQ7H,GAAQ,CAErB,KAAO6H,EAAQ7H,GAxHCqqB,EAwHmBc,gBAAgB,CAACziB,EAAOoiB,UAAU,CAACjjB,GAAQ,CAAA,IAC5EA,IAIF,GAAIA,EAAQ,GAAK7H,GAAU0I,AAA6B,KAA7BA,EAAOoiB,UAAU,CAACjjB,GAAe,MAE5D,IAAMwjB,EAAW3iB,EAAOoiB,UAAU,CAACjjB,EAAQ,GAC3C,GAAIwjB,AAAa,KAAbA,EAGF,IADAxjB,GAAS,EACFA,EAAQ7H,GAAQ,CACrB,IAAMsrB,EAAW5iB,EAAOoiB,UAAU,CAACjjB,GACnC,GAAIyjB,AAAa,KAAbA,GAAmBA,AAAa,KAAbA,EAAiB,KACxCzjB,CAAAA,GACF,MACK,GAAIwjB,AAAa,KAAbA,EAAiB,CAG1B,IADAxjB,GAAS,EACFA,EAAQ,EAAI7H,GAAU,CAAE0I,CAAAA,AAA6B,KAA7BA,EAAOoiB,UAAU,CAACjjB,IAAiBa,AAAiC,KAAjCA,EAAOoiB,UAAU,CAACjjB,EAAQ,EAAQ,GAClGA,IAEFA,GAAS,OAET,KAEJ,CAEA,IAAI,CAACkjB,OAAO,CAACljB,EAAQ,IAAI,CAACyiB,aAAa,CACzC,EAEAiB,EAAAA,IAGC,CAHDA,SAAK9e,CAAU,EACb,IAAM+e,EAAS,IAAI,CAAClB,aAAa,CACjC,OAAO,IAAI,CAACC,OAAO,CAACzd,SAAS,CAAC0e,EAAQA,EAAS/e,EACjD,EAEAgf,EAAAA,UAQC,CARDA,SAAWziB,CAAc,EACvB,IAAI,CAACoiB,oBAAoB,GACzB,IAAMprB,EAASgJ,EAAOhJ,MAAM,CACtBurB,EAAO,IAAI,CAACA,IAAI,CAACvrB,GACnBurB,IAASviB,GACX,IAAI,CAAC0iB,UAAU,CAAC,IAAI,CAACjB,iBAAiB,CAAC,GAAI,kBAAkBzhB,EAAO,eAAcuiB,EAAK,KAEzF,IAAI,CAACR,OAAO,CAAC/qB,EACf,EAEA2rB,EAAAA,sBAgBC,CAhBDA,SAAuBC,CAAe,CAAEC,CAAe,QAIrD,CAHA,IAAI,CAACT,oBAAoB,GAGrB,IAAI,CAACG,IAAI,CAACK,EAAQ5rB,MAAM,IAAM4rB,IAChC,IAAI,CAACb,OAAO,CAACa,EAAQ5rB,MAAM,EACpB4rB,GAIL,IAAI,CAACL,IAAI,CAACM,EAAQ7rB,MAAM,IAAM6rB,GAChC,IAAI,CAACd,OAAO,CAACc,EAAQ7rB,MAAM,EACpB6rB,GAGF,IACT,EAEAH,EAAAA,UAMC,CANDA,SAAWI,CAAiC,EAAE,IAAA,IAAA/c,EAAA3M,UAAApC,MAAA,CAAA+rB,EAAA,AAAAlrB,MAAAkO,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAG+c,CAAAA,CAAH/c,EAAA,EAAA,CAAA5M,SAAA,CAAA4M,EAAc,AAK1D,OAJclH,GAAeS,aAAa,CAACwjB,EAAK3G,IAAI,CAAC,KAAMtiB,GAAYkpB,YAAY,CAAE,IAAI,CAACzB,OAAO,CAAEuB,EAKrG,EAEAG,EAAAA,cAiCC,CAjCDA,SAAezsB,CAAY,CAAEC,CAAa,CAAEysB,CAAiB,CAAEC,CAAoB,EAC5EA,GACH,IAAI,CAACV,UAAU,CAACjsB,GAGlB,IAAMiI,EAAQ,IAAI,CAAC6iB,aAAa,CAC1B5hB,EAAS,IAAI,CAAC6hB,OAAO,CACrB6B,EAAe1jB,EAAO1I,MAAM,CAE9BqsB,EAAe,IAAI,CAAC/B,aAAa,CACrC,GAAI4B,EAEF,IADA,IAAII,EAAQ,EACLD,EAAeD,GAAc,CAClC,IAAMG,EAAc7jB,CAAM,CAAC2jB,EAAa,CACxC,GAAIE,IAAgB9sB,GAAS,AAAY,GAAZ,EAAE6sB,EAC7B,MACSC,IAAgB/sB,GACzB8sB,IAEFD,GACF,MAEA,KACE,AADKA,EAAeD,GAChB1jB,CAAM,CAAC2jB,EAAa,GAAK5sB,GAG7B4sB,IAMJ,OAFA,IAAI,CAACtB,OAAO,CAACsB,EAAe,EAAI,IAAI,CAAC/B,aAAa,EAE3C5hB,EAAOoE,SAAS,CAACrF,EAAO4kB,EACjC,EAjOoBhC,EACbmC,OAEN,CAFD,SAAelB,CAAgB,EAC7B,OAAOA,GAAY,IAAMA,GAAY,EACvC,EAHoBjB,EAMboC,OAMN,CAND,SAAenB,CAAgB,EAC7B,OACEA,AAAa,KAAbA,GACCA,GAAY,IAAMA,GAAY,IAC9BA,GAAY,IAAMA,GAAY,GAEnC,EAZoBjB,EAebqC,OAEN,CAFD,SAAepB,CAAgB,EAC7B,OAhBkBjB,EAgBDoC,OAAO,CAACnB,IAAajB,EAAUmC,OAAO,CAAClB,EAC1D,EAjBoBjB,EAmBbsC,uBAEN,CAFD,SAA+BrB,CAAgB,EAC7C,OAAOA,AAAa,KAAbA,CACT,EArBoBjB,EAuBbc,gBAMN,CAND,SAAwBG,CAAgB,CAAEsB,CAAqB,SAE7D,AAAiB,KAAbtB,GAAmBA,AAAa,IAAbA,GAGhBsB,GAAiBtB,CAAAA,AAAa,KAAbA,GAAmBA,AAAa,KAAbA,CAAc,CAC3D,EA7BoBjB,EAAAA,EAAAA,EAuChBgC,IAAAA,eAAJ7e,IAAA,WACE,OAAO,IAAI,CAAC8c,aAAa,AAC3B,IAEI5hB,IAAAA,SAAJ8E,IAAA,WACE,OAAO,IAAI,CAAC+c,OAAO,AACrB,KA7CoBF,CAoOrB,ICtOYwC,GAAN,WAAA,EAAA,SAAAC,CAAA,WAAMD,EAuFTnkB,CAAc,CACPyB,CAAgC,cAEjCzB,GAANokB,EAAMpkB,IAAAA,CAAAA,IAAAA,CAAAA,IAAAA,IAAAA,AAAAA,EAFCyB,eAAAA,CAAAA,EAAAA,EAXD4iB,iCAAoC,CAAA,CAAA,IA7EjCF,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OA+EXhZ,EAACmZ,QAKA,CALD,kBvCmCK,SAAqBC,CAAO,CAAEC,CAAI,EACvC,IAAsGC,EAAGC,EAAG3e,EAAxG3E,EAAI,CAAEujB,MAAO,EAAGC,KAAM,WAAa,GAAI7e,AAAO,EAAPA,CAAC,CAAC,EAAE,CAAM,MAAMA,CAAC,CAAC,EAAE,CAAE,OAAOA,CAAC,CAAC,EAAE,AAAC,EAAI8e,KAAM,EAAE,CAAEC,IAAK,EAAE,AAAA,EAAaC,EAAI/uB,OAAOQ,MAAM,CAAC,AAAC,CAAA,AAAoB,YAApB,OAAOwuB,SAA0BA,SAAWhvB,MAAA,EAAQO,SAAS,EAC/L,OAAOwuB,EAAEtsB,IAAI,CAAGwsB,EAAK,GAAIF,EAAE,KAAQ,CAAGE,EAAK,GAAIF,EAAE,MAAS,CAAGE,EAAK,GAAI,AAAkB,YAAlB,OAAOjuB,QAA0B+tB,CAAAA,CAAC,CAAC/tB,OAAOuB,QAAQ,CAAC,CAAG,WAAa,OAAO,IAAI,AAAG,CAAA,EAAGwsB,EAC1J,SAASE,EAAKnsB,CAAC,EAAI,OAAO,SAAUosB,CAAC,EAAI,OAAOC,AAChD,SAAcC,CAAE,EACZ,GAAIX,EAAG,MAAM,AAAInuB,UAAU,mCAC3B,KAAOyuB,GAAMA,CAAAA,EAAI,EAAGK,CAAE,CAAC,EAAE,EAAKhkB,CAAAA,EAAI,CAAA,CAAC,EAAIA,GAAG,GAAI,CAC1C,GAAIqjB,EAAI,EAAGC,GAAM3e,CAAAA,EAAIqf,AAAQ,EAARA,CAAE,CAAC,EAAE,CAAOV,EAAE,MAAS,CAAGU,CAAE,CAAC,EAAE,CAAGV,EAAE,KAAQ,EAAK,CAAA,AAAC3e,CAAAA,EAAI2e,EAAE,MAAS,AAAD,GAAM3e,EAAEvN,IAAI,CAACksB,GAAI,CAAA,EAAKA,EAAEjsB,IAAI,AAAA,GAAK,CAAC,AAACsN,CAAAA,EAAIA,EAAEvN,IAAI,CAACksB,EAAGU,CAAE,CAAC,EAAE,CAAA,EAAGhsB,IAAI,CAAE,OAAO2M,EAE3J,OADI2e,EAAI,EAAJA,AAAO3e,GAAGqf,CAAAA,EAAK,CAACA,AAAQ,EAARA,CAAE,CAAC,EAAE,CAAMrf,EAAErP,KAAK,CAAC,AAAD,EAC9B0uB,CAAE,CAAC,EAAE,EACT,KAAK,EAAG,KAAK,EAAGrf,EAAIqf,EAAI,KACxB,MAAK,EAAc,OAAXhkB,EAAEujB,KAAK,GAAW,CAAEjuB,MAAO0uB,CAAE,CAAC,EAAE,CAAEhsB,KAAM,CAAA,CAAK,CACrD,MAAK,EAAGgI,EAAEujB,KAAK,GAAID,EAAIU,CAAE,CAAC,EAAE,CAAEA,EAAK,CAAC,EAAE,CAAE,QACxC,MAAK,EAAGA,EAAKhkB,EAAE0jB,GAAG,CAACva,GAAG,GAAInJ,EAAEyjB,IAAI,CAACta,GAAG,GAAI,QACxC,SACI,GAAI,CAAcxE,CAAAA,EAAIA,AAAhBA,CAAAA,EAAI3E,EAAEyjB,IAAI,AAAJ,EAAYvtB,MAAM,CAAG,GAAKyO,CAAC,CAACA,EAAEzO,MAAM,CAAG,EAAE,AAAD,GAAO8tB,CAAAA,AAAU,IAAVA,CAAE,CAAC,EAAE,EAAUA,AAAU,IAAVA,CAAE,CAAC,EAAE,AAAK,EAAI,CAAEhkB,EAAI,EAAG,QAAW,CAC5G,GAAIgkB,AAAU,IAAVA,CAAE,CAAC,EAAE,EAAW,CAAA,CAACrf,GAAMqf,CAAE,CAAC,EAAE,CAAGrf,CAAC,CAAC,EAAE,EAAIqf,CAAE,CAAC,EAAE,CAAGrf,CAAC,CAAC,EAAE,EAAI,CAAE3E,EAAEujB,KAAK,CAAGS,CAAE,CAAC,EAAE,CAAE,KAAQ,CACtF,GAAIA,AAAU,IAAVA,CAAE,CAAC,EAAE,EAAUhkB,EAAEujB,KAAK,CAAG5e,CAAC,CAAC,EAAE,CAAE,CAAE3E,EAAEujB,KAAK,CAAG5e,CAAC,CAAC,EAAE,CAAEA,EAAIqf,EAAI,KAAQ,CACrE,GAAIrf,GAAK3E,EAAEujB,KAAK,CAAG5e,CAAC,CAAC,EAAE,CAAE,CAAE3E,EAAEujB,KAAK,CAAG5e,CAAC,CAAC,EAAE,CAAE3E,EAAE0jB,GAAG,CAACplB,IAAI,CAAC0lB,GAAK,KAAQ,CAC/Drf,CAAC,CAAC,EAAE,EAAE3E,EAAE0jB,GAAG,CAACva,GAAG,GACnBnJ,EAAEyjB,IAAI,CAACta,GAAG,GAAI,QACrB,CACD6a,EAAKZ,EAAKhsB,IAAI,CAAC+rB,EAASnjB,EAC3B,CAAC,MAAOuB,EAAG,CAAEyiB,EAAK,CAAC,EAAGziB,EAAE,CAAE+hB,EAAI,CAAE,QAAW,CAAED,EAAI1e,EAAI,CAAI,CAC1D,GAAIqf,AAAQ,EAARA,CAAE,CAAC,EAAE,CAAM,MAAMA,CAAE,CAAC,EAAE,CAAE,MAAO,CAAE1uB,MAAO0uB,CAAE,CAAC,EAAE,CAAGA,CAAE,CAAC,EAAE,CAAG,KAAK,EAAGhsB,KAAM,CAAA,EAC7E,EAtBoD,CAACN,EAAGosB,EAAE,CAAI,CAAG,CAuBpE,6CuC5DY,IAAI,CAACjD,KAAK,GAAA,MAAA,MAChB,MAAA,GAAM,IAAI,CAACoD,SAAS,kBAApBC,EAAAV,IAAA,gBAEF,MAAA,GAAOjkB,MACT,EASAwK,EAASka,SA4QR,CA5QD,WAEE,GADA,IAAI,CAAC3C,oBAAoB,GACrB,IAAI,CAACT,KAAK,GACZ,OAAOthB,GAGT,GAAI,IAAI,CAAC0jB,iCAAiC,CAExC,OADA,IAAI,CAACA,iCAAiC,CAAG,CAAA,EAClC,IAAI,CAACkB,6BAA6B,GAG3C,IAaIC,EAbEC,EAAc,IAAI,CAACtD,cAAc,GACvC,GAAIR,GAAUsC,uBAAuB,CAACwB,GACpC,OAAO,IAAI,CAACC,eAAe,GAE7B,GAAI/D,GAAUoC,OAAO,CAAC0B,GACpB,OAAO,IAAI,CAACE,SAAS,GAEvB,GAAIhE,GAAUmC,OAAO,CAAC2B,GACpB,OAAO,IAAI,CAACG,QAAQ,GAGtB,IAAM7mB,EAAQ,IAAI,CAACgjB,iBAAiB,GAC9BtP,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAGhC,OAAQ,IAAI,CAACod,UAAU,IACrB,IAAK,IAGH,GAFA,IAAI,CAACG,OAAO,CAAC,GAETmD,AAAY,MADhBA,CAAAA,EAAU,IAAI,CAACtD,UAAU,IACJ,CAEnB,GADA,IAAI,CAACG,OAAO,CAAC,GACT,AAAsB,MAAtB,IAAI,CAACH,UAAU,GAAY,CAC7B,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAW6rB,WAAW,CAAE,MAAO9mB,GACzC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAW8rB,OAAO,CAAE,KAAM/mB,GACpC,MACK,GAAIymB,AAAY,MAAZA,EAAiB,CAC1B,IAAI,CAACnD,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAW+rB,KAAK,CAAE,KAAMhnB,GAClC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAWgsB,UAAU,CAAE,IAAKjnB,GACtC,KAEF,KAAK,IAGH,GAFA,IAAI,CAACsjB,OAAO,CAAC,GAETmD,AAAY,MADhBA,CAAAA,EAAU,IAAI,CAACtD,UAAU,IACJ,CAEnB,GADA,IAAI,CAACG,OAAO,CAAC,GACT,AAAsB,MAAtB,IAAI,CAACH,UAAU,GAAY,CAC7B,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWisB,YAAY,CAAE,MAAOlnB,GAC1C,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAWksB,QAAQ,CAAE,KAAMnnB,GACrC,MACK,GAAIymB,AAAY,MAAZA,EAAiB,CAC1B,IAAI,CAACnD,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWmsB,KAAK,CAAE,KAAMpnB,GAClC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAWosB,WAAW,CAAE,IAAKrnB,GACvC,KAEF,KAAK,IAGH,GAFA,IAAI,CAACsjB,OAAO,CAAC,GAETmD,AAAY,MADhBA,CAAAA,EAAU,IAAI,CAACtD,UAAU,IACJ,CACnB,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWqsB,MAAM,CAAE,KAAMtnB,GACnC,MACK,GAAIymB,AAAY,MAAZA,EAAiB,CAC1B,IAAI,CAACnD,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWssB,UAAU,CAAE,KAAMvnB,GACvC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAW8X,IAAI,CAAE,IAAK/S,GAChC,KAEF,KAAK,IAGH,GAFA,IAAI,CAACsjB,OAAO,CAAC,GAETmD,AAAY,MADhBA,CAAAA,EAAU,IAAI,CAACtD,UAAU,IACJ,CACnB,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWusB,MAAM,CAAE,KAAMxnB,GACnC,MACK,GAAIymB,AAAY,MAAZA,EAAiB,CAC1B,IAAI,CAACnD,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWwsB,UAAU,CAAE,KAAMznB,GACvC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAWiY,IAAI,CAAE,IAAKlT,GAChC,KAEF,KAAK,IAEH,GADA,IAAI,CAACsjB,OAAO,CAAC,GACT,AAAsB,MAAtB,IAAI,CAACH,UAAU,GAAY,CAC7B,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWysB,KAAK,CAAE,KAAM1nB,GAClC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAW0sB,KAAK,CAAE,IAAK3nB,GACjC,KAEF,KAAK,IAEH,GADA,IAAI,CAACsjB,OAAO,CAAC,GACT,AAAsB,MAAtB,IAAI,CAACH,UAAU,GAAY,CAC7B,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAW2sB,KAAK,CAAE,KAAM5nB,GAClC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAW4sB,IAAI,CAAE,IAAK7nB,GAChC,KAEF,KAAK,IAGH,GAFA,IAAI,CAACsjB,OAAO,CAAC,GAETmD,AAAY,MADhBA,CAAAA,EAAU,IAAI,CAACtD,UAAU,IACJ,CACnB,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAW6sB,MAAM,CAAE,KAAM9nB,GACnC,MACK,GAAIymB,AAAY,MAAZA,EAAiB,CAC1B,IAAI,CAACnD,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWssB,UAAU,CAAE,KAAMvnB,GACvC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAW8sB,SAAS,CAAE,IAAK/nB,GACrC,KAEF,KAAK,IAGH,GAFA,IAAI,CAACsjB,OAAO,CAAC,GAETmD,AAAY,MADhBA,CAAAA,EAAU,IAAI,CAACtD,UAAU,IACJ,CACnB,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAW+sB,KAAK,CAAE,KAAMhoB,GAClC,MACK,GAAIymB,AAAY,MAAZA,EAAiB,CAC1B,IAAI,CAACnD,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWgtB,SAAS,CAAE,KAAMjoB,GACtC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAWitB,YAAY,CAAE,IAAKloB,GACxC,KAEF,KAAK,IAGH,GAFA,IAAI,CAACsjB,OAAO,CAAC,GAETmD,AAAY,MADhBA,CAAAA,EAAU,IAAI,CAACtD,UAAU,IACJ,CACnB,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWktB,MAAM,CAAE,KAAMnoB,GACnC,MACK,GAAIymB,AAAY,MAAZA,EAAiB,CAC1B,IAAI,CAACnD,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWmtB,UAAU,CAAE,KAAMpoB,GACvC,KACF,CACA0T,EAAM3T,GAAG,CAAC9E,GAAWotB,KAAK,CAAE,IAAKroB,GACjC,KAEF,KAAK,IAEH,GADA,IAAI,CAACsjB,OAAO,CAAC,GACT,AAAsB,MAAtB,IAAI,CAACH,UAAU,GAAY,CAC7B,IAAI,CAACG,OAAO,CAAC,GACb5P,EAAM3T,GAAG,CAAC9E,GAAWqtB,UAAU,CAAE,KAAMtoB,GACvC,KACF,CAEA0T,EAAM3T,GAAG,CAAC9E,GAAWkY,IAAI,CAAE,IAAKnT,GAChC,KAEF,KAAK,IAEH,GADA,IAAI,CAACsjB,OAAO,CAAC,GACT,AAAsB,MAAtB,IAAI,CAACH,UAAU,GAAY,CAC7B,IAAI,CAACG,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAWstB,UAAU,CAAE,KAAMvoB,GACvC,KACF,CAEA0T,EAAM3T,GAAG,CAAC9E,GAAWmY,KAAK,CAAE,IAAKpT,GACjC,KAEF,KAAK,IAEH,GADA,IAAI,CAACsjB,OAAO,CAAC,GACT,AAAsB,MAAtB,IAAI,CAACH,UAAU,GAAY,CAC7B,IAAI,CAACG,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAWutB,UAAU,CAAE,KAAMxoB,GACvC,KACF,CAEA0T,EAAM3T,GAAG,CAAC9E,GAAWoY,OAAO,CAAE,IAAKrT,GACnC,KAEF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAWwtB,UAAU,CAAE,IAAKzoB,GACtC,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAWytB,WAAW,CAAE,IAAK1oB,GACvC,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAW0tB,UAAU,CAAE,IAAK3oB,GACtC,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAW2tB,WAAW,CAAE,IAAK5oB,GACvC,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAW4tB,YAAY,CAAE,IAAK7oB,GACxC,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAW6tB,aAAa,CAAE,IAAK9oB,GACzC,KACF,KAAK,IAEH,GADA,IAAI,CAACsjB,OAAO,CAAC,GACTV,GAAUmC,OAAO,CAAC,IAAI,CAAC3B,cAAc,IACvC,OAAO,IAAI,CAAC2F,gBAAgB,GAG9BrV,EAAM3T,GAAG,CAAC9E,GAAW+tB,GAAG,CAAE,IAAKhpB,GAC/B,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAWguB,KAAK,CAAE,IAAKjpB,GACjC,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAWiuB,KAAK,CAAE,IAAKlpB,GACjC,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAWkuB,SAAS,CAAE,IAAKnpB,GACrC,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAWmuB,KAAK,CAAE,IAAKppB,GACjC,KACF,KAAK,IACH,IAAI,CAACsjB,OAAO,CAAC,GAEb5P,EAAM3T,GAAG,CAAC9E,GAAWouB,QAAQ,CAAE,IAAKrpB,GACpC,KACF,KAAK,IAEH,OADA,IAAI,CAACsjB,OAAO,CAAC,GACN,IAAI,CAACgG,gBAAgB,EAE9B,SACE,IAAI,CAACrF,UAAU,CAAC,IAAI,CAACjB,iBAAiB,CAAC,GAAI,wBAAwB,IAAI,CAACG,UAAU,GACtF,CACA,OAAOzP,CACT,EAEAtH,EAAQkd,gBAaP,CAbD,WAGE,IAFA,IAAMtpB,EAAQ,IAAI,CAACgjB,iBAAiB,GAC9BuG,EAAmB,EAAE,CACpB,AAAsB,MAAtB,IAAI,CAACpG,UAAU,IACpBoG,EAAO5oB,IAAI,CAAC,IAAI,CAACwiB,UAAU,IAC3B,IAAI,CAACG,OAAO,CAAC,GAEf,IAAI,CAACA,OAAO,CAAC,GACb,IAAMkG,EAAQ/nB,GAAUE,WAAW,CAAC3B,EAAO,IAAI,CAACgjB,iBAAiB,IAE3DtP,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAAC9E,GAAWwuB,YAAY,CAAEF,EAAO5L,IAAI,CAAC,IAAK6L,GAC7C9V,CACT,EAEAtH,EAAQ2c,gBAUP,CAVD,WAEE,IADA,IAAMQ,EAAS,CAAC,IAAI,CACb3G,GAAUmC,OAAO,CAAC,IAAI,CAAC3B,cAAc,KAC1CmG,EAAO5oB,IAAI,CAAC,IAAI,CAACwiB,UAAU,IAC3B,IAAI,CAACG,OAAO,CAAC,GAEf,IAAI,CAACoG,gBAAgB,CAACH,GACtB,IAAM7V,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAAC9E,GAAWkc,cAAc,CAAEoS,EAAO5L,IAAI,CAAC,IAAK,IAAI,CAACqF,iBAAiB,CAACuG,EAAOhxB,MAAM,GACnFmb,CACT,EAEAtH,EAAQud,kBAKP,CALD,SAA2BC,CAAmB,EAC5C,KAAO,AAAsB,OAAtB,IAAI,CAACzG,UAAU,IAAe,CAAC,IAAI,CAACD,KAAK,IAC9C0G,EAAUjpB,IAAI,CAAC,IAAI,CAACwiB,UAAU,IAC9B,IAAI,CAACG,OAAO,CAAC,EAEjB,EAEAlX,EAAQua,eAyBP,CAzBD,WACE,IAAM4C,EAAmB,CAAC,IAAI,CAACpG,UAAU,GAAG,CACtCnjB,EAAQ,IAAI,CAACgjB,iBAAiB,GAEpC,IADA,IAAI,CAACM,OAAO,CAAC,GACNV,GAAUoC,OAAO,CAAC,IAAI,CAAC5B,cAAc,KAC1CmG,EAAO5oB,IAAI,CAAC,IAAI,CAACwiB,UAAU,IAC3B,IAAI,CAACG,OAAO,CAAC,GAEf,IAAM5P,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAC1B8jB,EAAON,EAAO5L,IAAI,CAAC,IAGzB,GAAIkM,AAAS,YAATA,EAAoB,CACtB,IAAI,CAACF,kBAAkB,CAACJ,GACxB,IAAMM,EAAON,EAAO5L,IAAI,CAAC,IAAM,KAC/BjK,EAAM3T,GAAG,CAAC7E,GAAQ4uB,uBAAuB,CAAED,EAAM7pB,OAC5C,CACL,IAAM+pB,EA9ZC3E,EA8ZU4E,YAAY,CAACH,EAAK,CACnCnW,EAAM3T,GAAG,CAACgqB,AAAAA,MAAAA,EAAAA,EAAM9uB,GAAWgvB,EAAE,CAAEJ,EAAM7pB,GACjC6pB,CAAAA,AAAS,QAATA,GAAkBA,AAAS,UAATA,IACpB,CAAA,IAAI,CAACvE,iCAAiC,CAAG,CAAA,EAE7C,CAEA,OAAO5R,CACT,EAEAtH,EAAQoa,6BAQP,CARD,WACE,IAAM+C,EAAS,EAAInwB,CACb4G,EAAQ,IAAI,CAACgjB,iBAAiB,GACpC,IAAI,CAAC2G,kBAAkB,CAACJ,GACxB,IAAMM,EAAON,EAAO5L,IAAI,CAAC,IACnBjK,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAAC7E,GAAQgvB,4BAA4B,CAAEL,EAAM7pB,GAC/C0T,CACT,EAEAtH,EAAQwa,SAkBP,CAlBD,WACE,IAAM2C,EAAmB,CAAC,IAAI,CAACpG,UAAU,GAAG,CACtCnjB,EAAQ,IAAI,CAACgjB,iBAAiB,GAEpC,IADA,IAAI,CAACM,OAAO,CAAC,GACNV,GAAUqC,OAAO,CAAC,IAAI,CAAC7B,cAAc,KAC1CmG,EAAO5oB,IAAI,CAAC,IAAI,CAACwiB,UAAU,IAC3B,IAAI,CAACG,OAAO,CAAC,GAEf,IAAM5P,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAC1B8jB,EAAON,EAAO5L,IAAI,CAAC,IACnBoM,EA5bG3E,EA4bQ4E,YAAY,CAACH,EAAK,CAOnC,OALI,IAAI,CAACnnB,eAAe,CAACmnB,EAAK,CAC5BnW,EAAM3T,GAAG,CAAC7E,GAAQivB,UAAU,CAAEN,EAAM7pB,GAEpC0T,EAAM3T,GAAG,CAACgqB,AAAAA,MAAAA,EAAAA,EAAM9uB,GAAWgvB,EAAE,CAAEJ,EAAM7pB,GAEhC0T,CACT,EAEAtH,EAAQya,QAkCP,CAlCD,WAEE,IADA,IAAM0C,EAAmB,EAAE,CACpB3G,GAAUmC,OAAO,CAAC,IAAI,CAAC3B,cAAc,KAC1CmG,EAAO5oB,IAAI,CAAC,IAAI,CAACwiB,UAAU,IAC3B,IAAI,CAACG,OAAO,CAAC,GAEf,IAAMmD,EAAU,IAAI,CAACtD,UAAU,GAC/B,GAAIsD,AAAY,MAAZA,EAAiB,CAGnB,IAFA8C,EAAO5oB,IAAI,CAAC8lB,GACZ,IAAI,CAACnD,OAAO,CAAC,GACNV,GAAUmC,OAAO,CAAC,IAAI,CAAC3B,cAAc,KAC1CmG,EAAO5oB,IAAI,CAAC,IAAI,CAACwiB,UAAU,IAC3B,IAAI,CAACG,OAAO,CAAC,GAEf,IAAI,CAACoG,gBAAgB,CAACH,GAEtB,IAAM7V,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAAC9E,GAAWkc,cAAc,CAAEoS,EAAO5L,IAAI,CAAC,IAAK,IAAI,CAACqF,iBAAiB,CAACuG,EAAOhxB,MAAM,GACnFmb,EAEP,GAAI+S,AAAY,MAAZA,GAAmBA,AAAY,MAAZA,EAAiB,CACtC,IAAI,CAACiD,gBAAgB,CAACH,GAEtB,IAAM7V,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAAC9E,GAAWkc,cAAc,CAAEoS,EAAO5L,IAAI,CAAC,IAAK,IAAI,CAACqF,iBAAiB,CAACuG,EAAOhxB,MAAM,GACnFmb,EAEP,IAAI,CAAC0W,kBAAkB,CAACb,GAExB,IAAM7V,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAAC9E,GAAWic,YAAY,CAAEqS,EAAO5L,IAAI,CAAC,IAAK,IAAI,CAACqF,iBAAiB,CAACuG,EAAOhxB,MAAM,GACjFmb,CAGb,EAEAtH,EAAQsd,gBAwBP,CAxBD,SAAyBH,CAAgB,EACvC,IAAI9C,EAAU,IAAI,CAACtD,UAAU,GAC7B,GAAIsD,AAAY,MAAZA,GAAmBA,AAAY,MAAZA,EAAiB,CACtC8C,EAAO5oB,IAAI,CAAC8lB,GACZ,IAAI,CAACnD,OAAO,CAAC,GAETmD,CAAAA,AAAY,MADhBA,CAAAA,EAAU,IAAI,CAACtD,UAAU,KACFsD,AAAY,MAAZA,KACrB8C,EAAO5oB,IAAI,CAAC8lB,GACZ,IAAI,CAACnD,OAAO,CAAC,GACbmD,EAAU,IAAI,CAACtD,UAAU,IAEtBP,GAAUmC,OAAO,CAAC,IAAI,CAAC3B,cAAc,KACxC,IAAI,CAACa,UAAU,CAAC,IAAI,CAACjB,iBAAiB,CAAC,GAAI,0CAE7C,GACEuG,EAAO5oB,IAAI,CAAC8lB,GACZ,IAAI,CAACnD,OAAO,CAAC,GACbmD,EAAU,IAAI,CAACtD,UAAU,SAClBP,GAAUmC,OAAO,CAAC,IAAI,CAAC3B,cAAc,IAAK,AACrD,CACIqD,CAAAA,AAAY,MAAZA,GAAmBA,AAAY,MAAZA,KACrB8C,EAAO5oB,IAAI,CAAC8lB,GACZ,IAAI,CAACnD,OAAO,CAAC,GAEjB,EAEAlX,EAAQge,kBAMP,CAND,SAA2Bb,CAAgB,EACzC,IAAM9C,EAAU,IAAI,CAACtD,UAAU,GAC3BsD,CAAAA,AAAY,MAAZA,GAAmBA,AAAY,MAAZA,KACrB8C,EAAO5oB,IAAI,CAAC8lB,GACZ,IAAI,CAACnD,OAAO,CAAC,GAEjB,EA1gBW8B,GAAcxC,ICV3B,SAASyH,GAASC,CAAG,EAGjB,OAAOA,GAAO,AAAkB,aAAlB,OAAOryB,QAA0BqyB,EAAI5yB,WAAW,GAAKO,OAAS,SAAW,OAAOqyB,CAClG,CDMalF,GACI4E,YAAwC,CAAA,CACrDO,MAAOrvB,GAAQsvB,KAAK,CACpBC,KAAMvvB,GAAQqO,IAAI,CAClBmhB,MAAOxvB,GAAQsN,KAAK,CACpBmiB,OAAQzvB,GAAQ0vB,MAAM,CACtBC,IAAK3vB,GAAQuN,GAAG,CAChBqiB,KAAM5vB,GAAQwN,IAAI,CAClBqiB,MAAO7vB,GAAQ8vB,KAAK,CACpBC,SAAU/vB,GAAQgwB,QAAQ,CAC1BC,GAAIjwB,GAAQkwB,EAAE,CACdC,KAAMnwB,GAAQowB,IAAI,CAClBC,IAAKrwB,GAAQswB,GAAG,CAChBC,GAAIvwB,GAAQwwB,EAAE,CACdC,MAAOzwB,GAAQ0wB,KAAK,CACpBC,QAAS3wB,GAAQ4wB,OAAO,CACxBpO,OAAQxiB,GAAQmW,MAAM,CACtB0a,MAAO7wB,GAAQ8wB,KAAK,CACpBC,MAAO/wB,GAAQgxB,KAAK,CACpBC,MAAOjxB,GAAQkxB,KAAK,CACpBC,MAAOnxB,GAAQsO,KAAK,CACpB8iB,MAAOpxB,GAAQuO,KAAK,CACpB8iB,MAAOrxB,GAAQsxB,KAAK,CACpBC,MAAOvxB,GAAQwxB,KAAK,CACpBC,MAAOzxB,GAAQ0xB,KAAK,CACpBC,MAAO3xB,GAAQ4xB,KAAK,CACpBC,KAAM7xB,GAAQyN,IAAI,CAClBqkB,KAAM9xB,GAAQ0N,IAAI,CAClBqkB,KAAM/xB,GAAQ8N,IAAI,CAClBkkB,KAAMhyB,GAAQ2N,IAAI,CAClBskB,KAAMjyB,GAAQ4N,IAAI,CAClBskB,KAAMlyB,GAAQ6N,IAAI,CAClBskB,GAAInyB,GAAQoyB,EAAE,CACd1qB,IAAK1H,GAAQqyB,GAAG,CAChBC,MAAOtyB,GAAQuyB,KAAK,CACpBC,UAAWxyB,GAAQ2O,SAAS,CAC5B8jB,YAAazyB,GAAQ6O,YAAY,CACjC6jB,UAAW1yB,GAAQ2yB,SAAS,CAC5BC,gBAAiB5yB,GAAQwO,gBAAgB,CACzCqkB,kBAAmB7yB,GAAQyO,mBAAmB,CAC9CqkB,eAAgB9yB,GAAQ4O,eAAe,CACvCmkB,qBAAsB/yB,GAAQ0O,sBAAsB,CACpDskB,WAAYhzB,GAAQizB,WAAW,CAC/BC,WAAYlzB,GAAQmzB,WAAW,CAC/BC,aAAcpzB,GAAQqzB,cAAc,CACpCC,gBAAiBtzB,GAAQuzB,iBAAiB,CAC1CC,WAAYxzB,GAAQyzB,WAAW,CAC/BC,WAAY1zB,GAAQ2zB,WAAW,CAC/BC,aAAc5zB,GAAQ6zB,cAAc,CACpCC,gBAAiB9zB,GAAQ+zB,iBAAiB,CAC1CC,OAAQh0B,GAAQsS,MAAM,CACtB2hB,KAAMj0B,GAAQya,IAAI,CAClByZ,KAAMl0B,GAAQkc,IAAI,CAClBiY,MAAOn0B,GAAQmc,KAAK,CACpBqI,UAAWxkB,GAAQo0B,SAAS,CAC5BC,QAASr0B,GAAQs0B,OAAO,CACxBC,MAAOv0B,GAAQw0B,KAAK,CACpBC,QAASz0B,GAAQ00B,OAAO,CACxBC,KAAM30B,GAAQ40B,IAAI,CAClBC,UAAW70B,GAAQ80B,SAAS,CAC5BC,KAAM/0B,GAAQg1B,IAAI,CAClBC,OAAQj1B,GAAQk1B,MAAM,CACtBC,cAAen1B,GAAQo1B,aAAa,CACpCC,SAAUr1B,GAAQs1B,QAAQ,CAC1BC,OAAQv1B,GAAQw1B,MAAM,CACtBxvB,SAAUhG,GAAQy1B,QAAQ,CAG1B,MAAOz1B,GAAQ01B,QAAQ,CACvB,SAAU11B,GAAQ21B,WAAW,CAC7B,UAAW31B,GAAQ41B,YAAY,CAC/B,QAAS51B,GAAQ61B,UAAU,CAC3B,QAAS71B,GAAQ81B,UAAU,CAC3B,SAAU91B,GAAQ+1B,WAAW,CAC7B,SAAU/1B,GAAQg2B,WAAW,AAC/B,E9BrFK,IAAAvxB,KAAKA,GA0CX,CAAA,qJApCSA,EAAA,CAAAA,GAAA,QAAA,CAAA,EAAA,CAAA,WAEDA,EAAA,CAAAA,GAAA,OAAA,CAAA,EAAA,CAAA,8EAICA,EAAA,CAAAA,GAAA,EAAA,CAAA,EAAA,CAAA,KAEDA,EAAA,CAAAA,GAAA,EAAA,CAAA,GAAA,CAAA,KAEAA,EAAA,CAAAA,GAAA,EAAA,CAAA,GAAA,CAAA,KAEAA,EAAA,CAAAA,GAAA,GAAA,CAAA,GAAA,CAAA,MAEAA,EAAA,CAAAA,GAAA,GAAA,CAAA,GAAA,CAAA,MAEAA,EAAA,CAAAA,GAAA,EAAA,CAAA,GAAA,CAAA,KAEDA,EAAA,CAAAA,GAAA,UAAA,CAAA,GAAA,CAAA,aAECA,EAAA,CAAAA,GAAA,WAAA,CAAA,GAAA,CAAA,cAEAA,EAAA,CAAAA,GAAA,IAAA,CAAA,GAAA,CAAA,OAEDA,EAAA,CAAAA,GAAA,IAAA,CAAA,GAAA,CAAA,OAECA,EAAA,CAAAA,GAAA,IAAA,CAAA,GAAA,CAAA,OAEDA,EAAA,CAAAA,GAAA,IAAA,CAAA,GAAA,CAAA,OAECA,EAAA,CAAAA,GAAA,KAAA,CAAA,GAAA,CAAA,QAEDA,EAAA,CAAAA,GAAA,OAAA,CAAA,GAAA,CAAA,+BAtCIA,IA4CLC,KAAKA,GAWX,gOAXWA,IgCrCLuxB,gBAAA,oBAAMA,EASOnP,CAAgB,CAChCyD,CAAgC,CAChCvkB,CAAsC,CACtBqF,CAAkB,OAHlByb,KAAAA,CAAAA,OACAyD,IAAAA,CAAAA,OACAvkB,QAAAA,CAAAA,OACAqF,IAAAA,CAAAA,EAEZA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAMhO,MAAM,AAAA,EAAG,IACjB,IAAI,CAAC64B,YAAY,CAAG,IAAI,CAAC7qB,IAAI,CAAC/B,GAAG,CAAC,SAACd,CAAAA,EAASA,OAAAA,EAAKnC,MAAM,GACvD,IAAI,CAAC8vB,aAAa,CAAG,AAAIC,OAAO,OAAO,IAAI,CAACF,YAAY,CAACzT,IAAI,CAAC,KAAK,OAAO,MAhBnEwT,OAoBXI,AApBWJ,EAAAA,SAAAA,CAoBXI,kBAYC,CAZDA,SAAmBhrB,CAAc,MACXirB,SAApB,GAAIjrB,EAAKhO,MAAM,GAAA,CAAA,AAAc,MAATi5B,CAAAA,EAAA,IAAI,CAACjrB,IAAI,EAAA,KAAA,EAATirB,EAAWj5B,MAAM,AAAA,EACnC,MAAM8H,GAAeS,aAAa,CAAC,4BAA6BzF,YAAYo2B,iBAAiB,CAAE,GAAI,IAAI,CAACvwB,QAAQ,SAGlH,AAAIqF,AAAgB,IAAhBA,EAAKhO,MAAM,CACN,IAAI,CAACktB,IAAI,CAAClkB,MAAM,CAGlB,IAAI,CAACkkB,IAAI,CAAClkB,MAAM,CAACY,OAAO,CAAC,IAAI,CAACkvB,aAAa,CAAE,SAACK,CAAAA,EACnD,OAAOnrB,CAAI,CAAChE,EAAK6uB,YAAY,CAACjuB,OAAO,CAACuuB,GAAG,AAC3C,EACF,EAhCWP,EAAAA,EAAAA,EAIPttB,IAAAA,aAAJkC,IAAA,WACE,MAAO,CAAC,CAAC,IAAI,CAACQ,IAAI,AACpB,KANW4qB,CAiCZ,IC7BcQ,GAAA,WAAA,EAAA,SAAAtM,CAAA,EAAMsM,SAAAA,EA6BjB1wB,CAAc,cAMdsB,CAAAA,EAAA8iB,EAAA5rB,IAAA,CAAA,IAAA,CAAMwH,UAfA2wB,QAAW,CAAA,IApBAD,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OA0CnBE,EAAAA,wBAaC,CAbDA,SAAyBC,CAAsB,EAE7C,IADA,IAAMC,EAAsB,EAAE,GAG5B,GADA,IAAI,CAACvO,SAAS,CAAC,CAAA,GACXZ,GAAUoC,OAAO,CAAC,IAAI,CAAC5B,cAAc,IACvC2O,EAAOpxB,IAAI,CAAC,IAAI,CAACqxB,QAAQ,SACpB,GAAI,IAAI,CAAC7O,UAAU,KAAO2O,EAE/B,OADA,IAAI,CAACxO,OAAO,CAAC,GACNyO,EAEP,IAAI,CAACzO,OAAO,CAAC,GAGnB,EAEA0O,EAAAA,QAwBC,CAxBDA,WAEE,KAAO,CAACpP,GAAUoC,OAAO,CAAC,IAAI,CAAC5B,cAAc,KAAO,CAAC,IAAI,CAACF,KAAK,IAC7D,IAAI,CAACI,OAAO,CAAC,GAGf,GAAI,IAAI,CAACJ,KAAK,GACZ,OAAOthB,GAIT,IADA,IAWkB+vB,EAXZ3xB,EAAQ,IAAI,CAAC6iB,aAAa,CACzBD,GAAUqC,OAAO,CAAC,IAAI,CAAC7B,cAAc,KAAO,CAAC,IAAI,CAACF,KAAK,IAC5D,IAAI,CAACI,OAAO,CAAC,GAEf,IAAMrjB,EAAM,IAAI,CAAC4iB,aAAa,CACxBgH,EAAO,IAAI,CAAC/G,OAAO,CAAC7oB,KAAK,CAAC+F,EAAOC,GACnCA,IAAQD,GACV,IAAI,CAACikB,UAAU,CAAC,IAAI,CAACjB,iBAAiB,CAAC,GAAI,kBAG7C,IAAMtP,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAC1BksB,EAAYN,AAAmC,MAAnCA,CAAAA,EAAAA,EAAiB3H,YAAY,CAACH,EAAK,AAAA,EAAnC8H,EAAuChyB,GAAiBmS,EAAE,CAE5E,OADA4B,EAAM3T,GAAG,CAACkyB,EAAWpI,EAAM,IAAI,CAAC7G,iBAAiB,CAAC6G,EAAKtxB,MAAM,GACtDmb,CACT,EAEAtH,EAASka,SAkCR,CAlCD,WAEE,GADA,IAAI,CAAC3C,oBAAoB,IACrB,IAAI,CAACT,KAAK,IAMd,IAAK,IAgBQyO,EAnBP1wB,EAAS,IAAI,CAAC6hB,OAAO,CACvB9iB,EAAQ,IAAI,CAAC6iB,aAAa,CAC1B1a,EAAQ,CAAA,EACHpO,EAAIkH,EAAO1I,MAAM,CAAE,IAAI,CAACsqB,aAAa,CAAG9oB,GAC/C,GA5Fe43B,EA4FMO,eAAe,CAACjxB,EAAOoiB,UAAU,CAAC,IAAI,CAACR,aAAa,GACvE,IAAI,CAACS,OAAO,CAAC,GACbnb,EAAQ,CAAA,MACH,CACL,GAAIA,EACF,MAEF,IAAI,CAACmb,OAAO,CAAC,GACb,IAAI,CAACK,oBAAoB,GACzB3jB,EAAQ,IAAI,CAAC6iB,aAAa,AAC5B,CAdF,IAiBMthB,EAASN,EAAOhH,KAAK,CAAC+F,EAAO,IAAI,CAAC6iB,aAAa,EAC/CnP,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAC1BxF,EAAOoxB,AAAqC,MAArCA,CAAAA,EAAAA,EAAiB3H,YAAY,CAACzoB,EAAO,AAAA,EAArCowB,EAAyChyB,GAAiBmS,EAAE,CASzE,OARA4B,EAAM3T,GAAG,CAACQ,EAAMgB,EAAQ,IAAI,CAACyhB,iBAAiB,CAAC,IAAI,CAACH,aAAa,CAAG7iB,IAEhEO,IAASX,GAAmB6rB,EAAE,EAAIlrB,IAASX,GAAmBuyB,KAAK,EAAI5xB,IAASX,GAAmBwyB,MAAM,CAC3G,IAAI,CAACR,QAAQ,GACJrxB,IAASX,GAAmByyB,KAAK,EAC1C,IAAI,CAACT,QAAQ,GAGRle,EACT,EAEA4e,EAAAA,gBA+BC,CA/BDA,WACE,IAAI,CAAC9O,SAAS,CAAC,CAAA,GACf,IAAMviB,EAAS,IAAI,CAAC6hB,OAAO,CACrB6B,EAAe1jB,EAAO1I,MAAM,CAC5ByH,EAAQ,IAAI,CAACgjB,iBAAiB,CAAC,GAEjC5iB,EAAQ,IAAI,CAACyiB,aAAa,AAGG,CAAA,KAA7B5hB,EAAOoiB,UAAU,CAACjjB,IAEpB,IAAI,CAAC6jB,UAAU,CAACjkB,EAAO,kCAMzB,IAHA,IAAMuyB,EAAe,EAAEnyB,EAGhBA,EAAQukB,GAAgB1jB,AAA6B,KAA7BA,EAAOoiB,UAAU,CAACjjB,IAC/CA,IAGEA,GAASukB,GACX,IAAI,CAACV,UAAU,CAAC,IAAI,CAACjB,iBAAiB,CAAC,GAAI,kCAG7C,IAAMzhB,EAASN,EAAOhH,KAAK,CAACs4B,EAAcnyB,GAC1C,IAAI,CAACkjB,OAAO,CAACljB,EAAQ,EAAI,IAAI,CAACyiB,aAAa,EAE3C,IAAMnP,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAACJ,GAAiB6yB,YAAY,CAAEjxB,EAAQvB,GAC1C0T,CACT,EAEA+e,EAAAA,UAKC,CALDA,SAAWC,CAAY,EAErB,IADA,IAAMzxB,EAAS,IAAI,CAAC6hB,OAAO,CACpB7hB,CAAM,CAAC,IAAI,CAAC4hB,aAAa,CAAC,GAAK6P,GAAQ,CAAC,IAAI,CAACxP,KAAK,IACvD,IAAI,CAACI,OAAO,CAAC,EAEjB,EAEAqP,EAAAA,mBAyBC,CAzBDA,WAQE,IAJA,IAAMC,EAAiB,IAAI,CAAC5P,iBAAiB,CAAC,GACxC6P,EAAa,IAAI,CAACjB,QAAQ,CAE5BkB,EAAgB,IAAI,CAACxM,SAAS,KACrB,CACX,IAAQ/lB,EAASuyB,EAATvyB,IAAAA,CACR,GAAIA,IAASX,GAAmByyB,KAAK,EAAIQ,EAAa,IAAM,IAAI,CAACjB,QAAQ,EAGvE,AAACrxB,CAAAA,IAASX,GAAmBmzB,IAAI,EAAIxyB,IAASX,GAAmByrB,IAAI,GACrEwH,IAAe,IAAI,CAACjB,QAAQ,CAH5B,MAOFkB,EAAgB,IAAI,CAACxM,SAAS,EAChC,CAEA,IAAM/kB,EAAS,IAAI,CAACuhB,OAAO,CAAC7oB,KAAK,CAAC24B,EAAexyB,KAAK,CAAE,IAAI,CAACyiB,aAAa,CAAGiQ,EAAcvxB,MAAM,CAAChJ,MAAM,CAAG,GACrGktB,EAAOnkB,GAAUd,IAAI,CAACuF,GAAG,GAE/B,OADA0f,EAAK1lB,GAAG,CAACJ,GAAiB6F,KAAK,CAAEjE,EAAQqxB,GAClC,CAAEnN,KAAAA,EAAMqN,cAAAA,CAAc,CAC/B,EAEAE,EAAAA,eAeC,CAfDA,SAAgBC,CAAU,CAAEC,CAAU,EACpC,IAAI,CAACT,UAAU,CAACQ,GAChB,IAAIpO,EAAQ,EACN5jB,EAAS,IAAI,CAAC6hB,OAAO,CAE3B,EAAG,CACD,IAAM2D,EAAUxlB,CAAM,CAAC,IAAI,CAAC4hB,aAAa,CAAC,AAEtC4D,CAAAA,IAAYwM,EACdpO,IACS4B,IAAYyM,GACrBrO,IAEF,IAAI,CAACvB,OAAO,CAAC,EACf,OAASuB,EAAQ,EAAG,AACtB,EAKAsO,EAAAA,eAOC,CAPDA,WAGE,IAFA,IAAMC,EAAW,IAAI,CAACxB,QAAQ,CAC1ByB,EAAY,IAAI,CAAC/M,SAAS,GACvB,CAAC,IAAI,CAACpD,KAAK,IAAOmQ,CAAAA,EAAU9yB,IAAI,GAAKX,GAAmByyB,KAAK,EAAIe,EAAW,IAAM,IAAI,CAACxB,QAAQ,AAAA,GACpGyB,EAAY,IAAI,CAAC/M,SAAS,GAE5B,OAAO,IAAI,CAACtD,iBAAiB,CAAC,EAChC,EAEAsQ,EAAAA,YAMC,CANDA,WAEE,IADA,IAAIC,EAAU,IAAI,CAAC1Q,aAAa,CACzB,KAAKzoB,IAAI,CAAC,IAAI,CAAC0oB,OAAO,CAACyQ,EAAQ,GACpCA,GAAW,EAEb,OAAO,IAAI,CAACzQ,OAAO,CAACyQ,EAAQ,AAC9B,EAEAC,EAAAA,WAaC,CAbDA,WAEE,IADA,IAAMxzB,EAAQ,IAAI,CAAC6iB,aAAa,CACzBD,GAAUmC,OAAO,CAAC,IAAI,CAAC3B,cAAc,KAC1C,IAAI,CAACE,OAAO,CAAC,EAEX,CAAA,IAAI,CAACT,aAAa,GAAK7iB,GACzB,IAAI,CAACikB,UAAU,CAAC,IAAI,CAACjB,iBAAiB,CAAC,GAAI,oBAE7C,IAAMyQ,EAAU,IAAI,CAAC3Q,OAAO,CAAC7oB,KAAK,CAAC+F,EAAO,IAAI,CAAC6iB,aAAa,EAEtDnP,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAACJ,GAAiB+zB,YAAY,CAAED,EAAS,IAAI,CAACzQ,iBAAiB,CAAC,IAClEtP,CACT,EAEAigB,EAAAA,aA0DC,CA1DDA,WACE,IAAI,CAACnQ,SAAS,CAAC,CAAA,GAMf,IALA,IAAIjiB,EAAS,GACPN,EAAS,IAAI,CAAC6hB,OAAO,CACrB6B,EAAe1jB,EAAO1I,MAAM,CAE5ByH,EAAQ,IAAI,CAACgjB,iBAAiB,CAAC,GAC9B,IAAI,CAACH,aAAa,CAAG8B,GAAc,CACxC,IAAMd,EAAW5iB,EAAOoiB,UAAU,CAAC,IAAI,CAACR,aAAa,EAGrD,GAAIgB,AAAa,KAAbA,EACF,MAIF,GAAIA,AAAa,KAAbA,EAAiB,CACnB,IAAM+P,EAAY,IAAI,CAAC/Q,aAAa,CAAG,EACvC,GAAI+Q,EAAYjP,EAAc,CAC5B,IAAMkP,EAAe5yB,EAAOoiB,UAAU,CAACuQ,GAGvC,GAAIC,AAAiB,KAAjBA,EACF,MAIF,GAAIA,AAAiB,KAAjBA,EAAqB,CAIvB,IAHA,IAAI,CAACvQ,OAAO,CAAC,GAGN,IAAI,CAACT,aAAa,CAAG,EAAI8B,GAAc,CAC5C,IAAMC,EAAe,IAAI,CAAC/B,aAAa,CACvC,GAAI5hB,AAAoC,KAApCA,EAAOoiB,UAAU,CAACuB,IAAwB3jB,AAAwC,KAAxCA,EAAOoiB,UAAU,CAACuB,EAAe,GAAW,CACxF,IAAI,CAACtB,OAAO,CAAC,GACb,KACF,CACA,IAAI,CAACA,OAAO,CAAC,EACf,CAEA/hB,GAAU,IACV,QACF,CACF,CACF,CAGAA,GAAUN,CAAM,CAAC,IAAI,CAAC4hB,aAAa,CAAC,CACpC,IAAI,CAACS,OAAO,CAAC,EACf,CAEA,GAAI/hB,AAAW,KAAXA,EACF,OAAO,KAGT,IAAMuyB,EAAaxyB,GAAUd,IAAI,CAACuF,GAAG,GAErC,OADA+tB,EAAW/zB,GAAG,CAACJ,GAAiBo0B,WAAW,CAAExyB,EAAQE,GAAUE,WAAW,CAAC3B,EAAO,IAAI,CAACgjB,iBAAiB,CAAC,KAClG8Q,CACT,EAxSmBnC,EACJO,eAKd,CALD,SAA+BrO,CAAgB,EAC7C,OACEA,AAAa,KAAbA,GACAjB,GAAUqC,OAAO,CAACpB,EAEtB,EANmB8N,CAAyB/O,EAAAA,GAAzB+O,CAAAA,GAQJ3H,YAAmD,CAAA,CAChE,UAAWpqB,GAAmBo0B,MAAM,CACpC,SAAUp0B,GAAmBq0B,KAAK,CAClC,MAAOr0B,GAAmB6rB,EAAE,CAC5B,SAAU7rB,GAAmBuyB,KAAK,CAClC,UAAWvyB,GAAmBwyB,MAAM,CACpC,QAASxyB,GAAmByrB,IAAI,CAChC,QAASzrB,GAAmBmzB,IAAI,CAChC,SAAUnzB,GAAmByyB,KAAK,CAClC6B,QAASt0B,GAAmBs0B,OAAO,AACrC,ECxBK,IAAAC,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,OAAAA,EACJC,MA8BN,CA9BD,SACEC,CAAyB,CACzBpzB,CAAc,EASd,IAAA,IAA4BiP,EAJtBuN,EAAgB,EAAE,CACpB6W,EAAW,EACXC,EAAe,EAEnBpkB,EAAA9W,EAAkBg7B,GAAU,CAAA,AAAAnkB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAjBm6B,IAAAA,EAAAA,EAAAA,KAAAA,CACHC,EAAcxzB,EAAOhH,KAAK,CAACq6B,EAAUE,EAAIE,YAAY,CAAC10B,KAAK,CAACI,KAAK,EACvEqd,EAAI9c,IAAI,CAAC8zB,EAAaD,EAAIryB,OAAO,EAEjC,IAAMwyB,EAAkBJ,EAAeE,EAAYl8B,MAAM,CAAGi8B,EAAIryB,OAAO,CAAC5J,MAAM,CAU9E+7B,EAAWE,EAAIE,YAAY,CAACz0B,GAAG,CAACG,KAAK,CACrCm0B,EAAeI,CACjB,CAEA,OADAlX,EAAI9c,IAAI,CAACM,EAAOhH,KAAK,CAACq6B,IACf7W,EAAIE,IAAI,CAAC,GAClB,EA/BWwW,CAgCZ,ICbYS,GAAN,WAAA,EAAA,WAAMA,SAAAA,IAAAA,CAAAA,OAAAA,EAaJ9yB,KASN,CATD,SAAab,CAAc,CAAEygB,CAAqB,EAbvCkT,EAcGC,MAAM,GAElB,IAAA,IAA4B3kB,EAA5BC,EAAA9W,EAAoBqoB,GAAQ,CAAA,AAAAxR,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAjB2nB,IAAAA,EAAAA,EAAAA,KAAAA,CAhBF4S,EAiBKE,mBAAmB,CAAC9S,EAAM9nB,IAAI,CAAE8nB,EAAMrqB,KAAK,CACzD,CAGA,OADA,IAAI,CAACo9B,KAAK,CAAG,IAAIpD,GAAiB1wB,GAC3B2zB,EAAYI,gBAAgB,CAAC,IAAI,CAACD,KAAK,CAChD,EAtBWH,EAwBIC,MAUd,CAVD,WACE,IAAI,CAACI,oBAAoB,CAAC18B,MAAM,CAAG,EACnC,IAAI,CAAC08B,oBAAoB,CAACt0B,IAAI,CAAC,EAAE,EAEjC,IAAI,CAACu0B,cAAc,CAACr0B,KAAK,GACzB,IAAI,CAACi0B,mBAAmB,CAAC,QAK3B,EAlCWF,EAoCIE,mBAWd,CAXD,SAAmC9S,CAAa,CAAErqB,CAAc,EAC9D,IAGIw9B,EAHEzhB,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAChC2N,EAAM3T,GAAG,CAACJ,GAAiBmS,EAAE,CAAEkQ,GAGlBhW,KAAAA,GAATrU,GAEFw9B,AADAA,CAAAA,EAAY7zB,GAAUd,IAAI,CAACuF,GAAG,IACpBhG,GAAG,CAACJ,GAAiBmS,EAAE,CAAEna,GAGrC,IAAI,CAACu9B,cAAc,CAACn1B,GAAG,CAACiiB,EAAO,IAAImP,GAAYzd,EAAOyhB,GACxD,EA/CWP,EAiDII,gBA6Bd,CA7BD,SAAgCD,CAAuB,EAErD,IADA,IAAI1B,EACIA,EAAY0B,EAAMzO,SAAS,IACjC,OAAQ+M,EAAU9yB,IAAI,EACpB,KAAKZ,GAAiBmS,EAAE,CACtB,IAAI,CAACsjB,WAAW,CAACL,EAAO1B,GACxB,KACF,MAAKzzB,GAAmBo0B,MAAM,CAC5B,IAAI,CAACqB,YAAY,CAACN,GAClB,KACF,MAAKn1B,GAAmBq0B,KAAK,CAC3B,IAAI,CAACqB,WAAW,CAACP,GACjB,KACF,MAAKn1B,GAAmB6rB,EAAE,CACxB,IAAI,CAAC8J,iBAAiB,CAACR,EAAOn1B,GAAmB6rB,EAAE,EACnD,KACF,MAAK7rB,GAAmBwyB,MAAM,CAC5B,IAAI,CAACmD,iBAAiB,CAACR,EAAOn1B,GAAmBwyB,MAAM,EACvD,KACF,MAAKxyB,GAAmBuyB,KAAK,CAC3B,IAAI,CAACoD,iBAAiB,CAACR,EAAOn1B,GAAmBuyB,KAAK,CAE1D,CAMF,OAAOgC,GAAQC,MAAM,CAAC,IAAI,CAACoB,kBAAkB,GAAIT,EAAM9zB,MAAM,CAAE8zB,EAAMU,SAAS,CAChF,EA9EWb,EAgFIY,kBAEd,CAFD,WACE,OAAO,IAAI,CAACP,oBAAoB,CAAC,IAAI,CAACA,oBAAoB,CAAC18B,MAAM,CAAG,EAAE,AACxE,EAlFWq8B,EAoFI1W,YAKd,CALD,SAA4BjP,CAAiC,CAAElO,CAAe,CAAEE,CAAc,CAAEE,CAAa,EAC7Fd,GAAeS,aAAa,CAACC,EAAS1F,GAAYo2B,iBAAiB,CAAExwB,EAAQgO,EAAK9N,EAIlG,EAzFWyzB,EA2FIW,iBAyCd,CAzCD,SAAiCR,CAAuB,CAAEW,CAAiC,EACzF,IAKIC,EALEC,EACJF,IAAkB91B,GAAmB6rB,EAAE,CAAG,EAAIiK,IAAkB91B,GAAmBuyB,KAAK,CAAG,EAAI,EAC3FnyB,EAAQ+0B,EAAMnQ,YAAY,CAAGgR,EAC/BC,EAAY,CAAA,EAGhB,GAAIH,IAAkB91B,GAAmB6rB,EAAE,CACzCkK,EAAgB,IAAI,CAACG,wBAAwB,CAACf,OACzC,CAEL,IAAMxzB,EAASw0B,AADIhB,EAAM/C,QAAQ,GACPzwB,MAAM,CAChC,GAAIA,EAAOy0B,UAAU,CAAC,OACpBH,EAAY,CAAA,MACP,CACL,IAAM3B,EAAU,IAAI,CAACgB,cAAc,CAACnvB,GAAG,CAACxE,GACxCo0B,EAAgBD,IAAkB91B,GAAmBuyB,KAAK,CAAG,CAAC,CAAC+B,EAAU,CAACA,CAC5E,CACF,CAEAa,EAAMvR,SAAS,CAAC,CAAA,GAChB,IAAgCuR,EAAAA,EAAMpC,mBAAmB,GAAjDlN,EAAwBsP,EAAxBtP,IAAAA,CAAMqN,EAAkBiC,EAAlBjC,aAAAA,CAEd,IAAI+C,GAEJ,GAAIF,EAAe,CACjB,IAAM11B,EACJ6yB,EAAcvyB,IAAI,GAAKX,GAAmByyB,KAAK,CAAG0C,EAAM/R,iBAAiB,CAAC,GAAK+R,EAAM5B,eAAe,GAChG8C,EAAW,IAAI,CAACC,iBAAiB,CAACzQ,EAAKlkB,MAAM,CAAEkkB,EAAKvkB,QAAQ,CAAE6zB,GACpE,IAAI,CAACoB,kBAAkB,CACrBpB,EAAM5zB,IAAI,CACVM,GAAUC,cAAc,CAAC1B,GACzBC,EACAg2B,EAASG,OAAO,CAChBrB,EAAMsB,UAAU,CAChBJ,EAASR,SAAS,OAGpB,IAAI,CAACa,gBAAgB,CAACvB,EAAO/0B,GAC7B,IAAI,CAACu2B,4BAA4B,CAACzD,EAAcvyB,IAAI,CAAEw0B,GAE1D,EApIWH,EAsII2B,4BA+Cd,CA/CD,SACElD,CAAuF,CACvFmD,CAAyB,EAEzB,GAAInD,IAAczzB,GAAmByyB,KAAK,EAI1C,IAAMryB,EAAQw2B,EAAQ5R,YAAY,CAElC,GAAIyO,IAAczzB,GAAmByrB,IAAI,CAAE,CACzC,IAAM5F,EAAW+Q,EAAQ7D,mBAAmB,GAApClN,IAAAA,CACFwQ,EAAW,IAAI,CAACC,iBAAiB,CAACzQ,EAAKlkB,MAAM,CAAEkkB,EAAKvkB,QAAQ,CAAEs1B,GACpE,IAAI,CAACL,kBAAkB,CACrBK,EAAQr1B,IAAI,CACZM,GAAUC,cAAc,CAAC1B,GACzBw2B,EAAQxT,iBAAiB,CAAC,GAC1BiT,EAASG,OAAO,CAChBI,EAAQH,UAAU,CAClBJ,EAASR,SAAS,CAEtB,MAAO,GAAIpC,IAAczzB,GAAmBmzB,IAAI,CAAE,CAChD,IAAM0D,EAAe,IAAI,CAACX,wBAAwB,CAACU,GACnBA,EAAAA,EAAQ7D,mBAAmB,GAAnDlN,EAAwB+Q,EAAxB/Q,IAAAA,CAAMqN,EAAkB0D,EAAlB1D,aAAAA,CACd,GAAI2D,EAAc,CAChB,IAAMx2B,EACJ6yB,EAAcvyB,IAAI,GAAKX,GAAmByyB,KAAK,CAAGmE,EAAQ5R,YAAY,CAAG4R,EAAQrD,eAAe,GAAG/yB,KAAK,CACpG61B,EAAW,IAAI,CAACC,iBAAiB,CAACzQ,EAAKlkB,MAAM,CAAEkkB,EAAKvkB,QAAQ,CAAEs1B,GACpE,IAAI,CAACL,kBAAkB,CACrBK,EAAQr1B,IAAI,CACZM,GAAUC,cAAc,CAAC1B,GACzByB,GAAUC,cAAc,CAACzB,GACzBg2B,EAASG,OAAO,CAChBI,EAAQH,UAAU,CAClBJ,EAASR,SAAS,OAGpB,IAAI,CAACU,kBAAkB,CACrBK,EAAQr1B,IAAI,CACZM,GAAUC,cAAc,CAAC1B,GACzByB,GAAUC,cAAc,CAAC80B,EAAQ5R,YAAY,EAC7C,GACA4R,EAAQH,UAAU,EAEpB,IAAI,CAACE,4BAA4B,CAACzD,EAAcvyB,IAAI,CAAEi2B,EAE1D,EACF,EArLW5B,EAuLIkB,wBAGd,CAHD,SAAwCU,CAAyB,EAE/D,OADAA,EAAQhT,SAAS,CAAC,CAAA,GACX,IAAI,CAACkT,yBAAyB,CAACF,EACxC,EA1LW5B,EA4LI8B,yBAUd,CAVD,SAAyCF,CAAyB,EAChE,IAAMG,EAAW,IAAI,CAACC,0BAA0B,CAACJ,GAC3C1jB,EAAW0jB,EAAQ1S,IAAI,CAAC,GAC9B,GAAIhR,GAAYA,AAAa,OAAbA,EAAmB,CACjC0jB,EAAQlT,OAAO,CAAC,GAChBkT,EAAQhT,SAAS,CAAC,CAAA,GAClB,IAAMqT,EAAW,IAAI,CAACH,yBAAyB,CAACF,GAChD,OAAOG,GAAYE,CACrB,CACA,OAAOF,CACT,EAtMW/B,EAwMIgC,0BAUd,CAVD,SAA0CJ,CAAyB,EACjE,IAAMG,EAAW,IAAI,CAACG,wBAAwB,CAACN,GACzC1jB,EAAW0jB,EAAQ1S,IAAI,CAAC,GAC9B,GAAIhR,GAAYA,AAAa,OAAbA,EAAmB,CACjC0jB,EAAQlT,OAAO,CAAC,GAChBkT,EAAQhT,SAAS,CAAC,CAAA,GAClB,IAAMqT,EAAW,IAAI,CAACD,0BAA0B,CAACJ,GACjD,OAAOG,GAAYE,CACrB,CACA,OAAOF,CACT,EAlNW/B,EAoNIkC,wBAed,CAfD,SAAwCN,CAAyB,EAC/D,IAAMG,EAAW,IAAI,CAACI,0BAA0B,CAACP,GAC3C1jB,EAAW0jB,EAAQ1S,IAAI,CAAC,GAC9B,GAAIhR,GAAY,CAAC,KAAM,KAAK,CAACkkB,QAAQ,CAAClkB,GAAW,CAC/C0jB,EAAQlT,OAAO,CAAC,GAChBkT,EAAQhT,SAAS,CAAC,CAAA,GAClB,IAAMqT,EAAW,IAAI,CAACC,wBAAwB,CAACN,GAC/C,OAAQ1jB,GACN,IAAK,KACH,OAAO6jB,IAAaE,CACtB,KAAK,KACH,OAAOF,IAAaE,CACxB,CACF,CACA,OAAOF,CACT,EAnOW/B,EAqOImC,0BAyBd,CAzBD,SAA0CP,CAAyB,EACjE,IAAMG,EAAW,IAAI,CAACM,qBAAqB,CAACT,GACxC1jB,EAAW0jB,EAAQ1S,IAAI,CAAC,GAE5B,GADoB,MAAhBhR,CAAQ,CAAC,EAAE,EAAUA,CAAAA,EAAWA,CAAQ,CAAC,EAAE,AAAA,EAC3CA,GAAY,CAAC,IAAK,IAAK,KAAM,KAAK,CAACkkB,QAAQ,CAAClkB,GAAW,CACzD,IAAMokB,EAAQV,EAAQxT,iBAAiB,CAAC,GACxCwT,EAAQlT,OAAO,CAACxQ,EAASva,MAAM,EAC/Bi+B,EAAQhT,SAAS,CAAC,CAAA,GAClB,IAAMqT,EAAW,IAAI,CAACE,0BAA0B,CAACP,GACjD,GAAI,AAAA,CAAA,AAAA,KAAA,IAAOG,EAAP,YAAAtM,GAAOsM,MAAa,CAAA,AAAOE,KAAAA,IAAAA,EAAAA,YAAPxM,GAAOwM,EAAAA,GAAY,AAAoB,UAApB,OAAOF,EAAuB,CACvE,IAAI,CAACzY,YAAY,CAACgZ,EAAO,2CAA4CV,EAAQv1B,MAAM,CAAEu1B,EAAQr1B,IAAI,EACjG,MACF,CACA,OAAQ2R,GACN,IAAK,IACH,OAAO6jB,EAAWE,CACpB,KAAK,IACH,OAAOF,EAAWE,CACpB,KAAK,KACH,OAAOF,GAAYE,CACrB,KAAK,KACH,OAAOF,GAAYE,CACvB,CACF,CACA,OAAOF,CACT,EA9PW/B,EAgQIqC,qBAqBd,CArBD,SAAqCT,CAAyB,EAC5D,IAAMG,EAAW,IAAI,CAACQ,wBAAwB,CAACX,GACzC1jB,EAAW0jB,EAAQ1S,IAAI,CAAC,GAC9B,GAAIhR,GAAY,CAAC,KAAM,KAAK,CAACkkB,QAAQ,CAAClkB,GAAW,CAC/C,IAAMokB,EAAQV,EAAQxT,iBAAiB,CAAC,GACxCwT,EAAQlT,OAAO,CAAC,GAChBkT,EAAQhT,SAAS,CAAC,CAAA,GAClB,IAAMqT,EAAW,IAAI,CAACI,qBAAqB,CAACT,GAC5C,GAAI,AAAA,CAAA,AAAA,KAAA,IAAOG,EAAP,YAAAtM,GAAOsM,MAAa,CAAA,AAAOE,KAAAA,IAAAA,EAAAA,YAAPxM,GAAOwM,EAAAA,GAAY,AAAoB,UAApB,OAAOF,EAAuB,CACvE,IAAI,CAACzY,YAAY,CAACgZ,EAAO,wCAAyCV,EAAQv1B,MAAM,CAAEu1B,EAAQr1B,IAAI,EAC9F,MACF,CACA,OAAQ2R,GACN,IAAK,KACH,OAAO6jB,GAAYE,CACrB,KAAK,KACH,OAAOF,GAAYE,CACvB,CACF,CAEA,OAAOF,CACT,EArRW/B,EAuRIuC,wBAqBd,CArBD,SAAwCX,CAAyB,EAC/D,IAAMG,EAAW,IAAI,CAACS,2BAA2B,CAACZ,GAClD,GAAI,CAAC,IAAK,IAAI,CAACQ,QAAQ,CAACR,EAAQrT,UAAU,IAAK,CAC7C,IAAM+T,EAAQV,EAAQxT,iBAAiB,CAAC,GACxCwT,EAAQlT,OAAO,CAAC,GAEhB,IAAMxQ,EAAW0jB,EAAQrT,UAAU,GACnCqT,EAAQhT,SAAS,CAAC,CAAA,GAClB,IAAMqT,EAAW,IAAI,CAACM,wBAAwB,CAACX,GAC/C,GAAI,AAAA,CAAA,AAAA,KAAA,IAAOG,EAAP,YAAAtM,GAAOsM,MAAa,CAAA,AAAOE,KAAAA,IAAAA,EAAAA,YAAPxM,GAAOwM,EAAAA,GAAY,AAAoB,UAApB,OAAOF,EAEhD,OADA,IAAI,CAACzY,YAAY,CAACgZ,EAAO,oBAAqBV,EAAQv1B,MAAM,CAAEu1B,EAAQr1B,IAAI,EACnE,CAAA,EAET,OAAQ2R,GACN,IAAK,IACH,OAAO6jB,EAAWE,CACpB,KAAK,IACH,OAAOF,EAAWE,CACtB,CACF,CACA,OAAOF,CACT,EA5SW/B,EA8SIwC,2BAsBd,CAtBD,SAA2CZ,CAAyB,EAClE,IAAMG,EAAW,IAAI,CAACU,qBAAqB,CAACb,GAE5C,GADAA,EAAQhT,SAAS,CAAC,CAAA,GACd,CAAC,IAAK,IAAK,IAAI,CAACwT,QAAQ,CAACR,EAAQrT,UAAU,IAAK,CAClD,IAAM+T,EAAQV,EAAQxT,iBAAiB,CAAC,GAClClQ,EAAW0jB,EAAQrT,UAAU,GACnCqT,EAAQhT,SAAS,CAAC,CAAA,GAClB,IAAMqT,EAAW,IAAI,CAACO,2BAA2B,CAACZ,GAClD,GAAI,AAAA,CAAA,AAAA,KAAA,IAAOG,EAAP,YAAAtM,GAAOsM,MAAa,CAAA,AAAOE,KAAAA,IAAAA,EAAAA,YAAPxM,GAAOwM,EAAAA,GAAY,AAAoB,UAApB,OAAOF,EAAuB,CACvE,IAAI,CAACzY,YAAY,CAACgZ,EAAO,oBAAqBV,EAAQv1B,MAAM,CAAEu1B,EAAQr1B,IAAI,EAC1E,MACF,CACA,OAAQ2R,GACN,IAAK,IACH,OAAO6jB,EAAWE,CACpB,KAAK,IACH,OAAOF,EAAWE,CACpB,KAAK,IACH,OAAOF,EAAWE,CACtB,CACF,CACA,OAAOF,CACT,EApUW/B,EAsUIyC,qBAqBd,CArBD,SAAqCb,CAAyB,EAC5D,IAAM1jB,EAAW0jB,EAAQrT,UAAU,GACnC,GAAI,CAAC,IAAK,IAAK,IAAI,CAAC6T,QAAQ,CAAClkB,GAAW,CACtC,IAAMokB,EAAQV,EAAQxT,iBAAiB,CAAC,GACxCwT,EAAQlT,OAAO,CAAC,GAChBkT,EAAQhT,SAAS,CAAC,CAAA,GAClB,IAAM8T,EAAY,IAAI,CAACC,2BAA2B,CAACf,GAKnD,OAJK1jB,CAAAA,AAAa,MAAbA,GAAoB,AAAqB,WAArB,OAAOwkB,GAA6BxkB,AAAa,MAAbA,GAAoB,AAAqB,UAArB,OAAOwkB,IACtF,IAAI,CAACpZ,YAAY,CAACgZ,EAAO,oBAAqBV,EAAQv1B,MAAM,CAAEu1B,EAAQr1B,IAAI,EAGpE2R,GACN,IAAK,IACH,OAAOwkB,CACT,KAAK,IACH,MAAO,CAACA,CACV,KAAK,IACH,MAAO,CAACA,CACZ,CACF,CACA,OAAO,IAAI,CAACC,2BAA2B,CAACf,EAC1C,EA3VW5B,EA6VI2C,2BAUd,CAVD,SAA2Cf,CAAyB,EAClE,GAAIA,AAAyB,MAAzBA,EAAQrT,UAAU,GAAY,CAChCqT,EAAQlT,OAAO,CAAC,GAChBkT,EAAQhT,SAAS,CAAC,CAAA,GAClB,IAAM/F,EAAM,IAAI,CAACqY,wBAAwB,CAACU,GAG1C,OAFAA,EAAQ/D,UAAU,CAAC,KACnB+D,EAAQlT,OAAO,CAAC,GACT7F,CACT,CACA,OAAO,IAAI,CAAC+Z,cAAc,CAAChB,EAC7B,EAvWW5B,EAyWI4C,cA0Cd,CA1CD,SAA8BhB,CAAyB,EACrD,GAAI5T,GAAUoC,OAAO,CAACwR,EAAQpT,cAAc,IAAK,CAC/C,IAAMtR,EAAK0kB,EAAQxE,QAAQ,GAC3B,GAAIlgB,EAAGvR,IAAI,GAAKX,GAAmBs0B,OAAO,CAAE,CAC1C,IAAMuD,EAAYjB,AAA2B,MAA3BA,EAAQlD,YAAY,GAChCtR,EAAQwU,EAAQxE,QAAQ,GAK9B,OAJIyF,IACFjB,EAAQ/D,UAAU,CAAC,KACnB+D,EAAQlT,OAAO,CAAC,IAEX,CAAC,CAAC,IAAI,CAAC4R,cAAc,CAACnvB,GAAG,CAACic,EAAMzgB,MAAM,EAE7C,IAAMygB,EAAQ,IAAI,CAACkT,cAAc,CAACnvB,GAAG,CAAC+L,EAAGvQ,MAAM,EAE/C,GAAI,CAACygB,EACH,MAAO,CAAA,EAGT,GAAI,CAACA,EAAMyD,IAAI,CACb,MAAO,CAAA,CAGLzD,CAAAA,EAAMne,UAAU,EAClB,IAAI,CAACqa,YAAY,CAACpM,EAAG5Q,QAAQ,CAAE,+BAAgCs1B,EAAQv1B,MAAM,CAAEu1B,EAAQr1B,IAAI,EAE7F,IAAMxJ,EAAQ4L,OAAOye,EAAMyD,IAAI,CAAClkB,MAAM,EAItC,OAHKgC,OAAOm0B,SAAS,CAAC//B,IACpB,IAAI,CAACumB,YAAY,CAACpM,EAAG5Q,QAAQ,CAAG,wBAAuB4Q,EAAGvQ,MAAM,CAAIi1B,EAAQv1B,MAAM,CAAEu1B,EAAQr1B,IAAI,EAE3FxJ,CAEX,CAAO,GAAIirB,GAAUmC,OAAO,CAACyR,EAAQpT,cAAc,IAEjD,OAAO7f,OAAOkwB,AADE+C,EAAQhD,WAAW,GACbjyB,MAAM,EAE5B,IAAI,CAAC2c,YAAY,CACfsY,EAAQxT,iBAAiB,CAAC,GACzB,kBAAiBwT,EAAQrT,UAAU,GACpCqT,EAAQv1B,MAAM,CACdu1B,EAAQr1B,IAAI,CAGlB,EAnZWyzB,EAqZI+C,uBAoCd,CApCD,SACE12B,CAAc,CACd22B,CAAkB,CAClBj1B,CAAiB,EAMjB,IAJA,IAAMpK,EAAS0I,EAAO1I,MAAM,CACxBD,EAAIs/B,EAAaj1B,EAAUpK,MAAM,CAG9BD,EAAIC,GAAU0I,AAAyB,KAAzBA,EAAOoiB,UAAU,CAAC/qB,IAAWA,IAQlD,IALA,IAAMiO,EAAiB,EAAE,CACrBse,EAAQ,EACRgT,EAAWv/B,EAAI,EACfw/B,EAAID,EAEDC,EAAIv/B,GAAUssB,EAAQ,GAAG,CAC9B,IAAMhB,EAAW5iB,EAAOoiB,UAAU,CAACyU,GACnC,GAAIjU,AAAa,KAAbA,EACFgB,SACK,GAAIhB,AAAa,KAAbA,EACT,CAAA,GAAI,AAAY,GAAZ,EAAEgB,EAAa,CACjB,IAAMrjB,EAAMP,EAAOoE,SAAS,CAACwyB,EAAUC,GAAGrzB,IAAI,EAC1CjD,CAAAA,EAAIjJ,MAAM,CAAG,GAAGgO,EAAK5F,IAAI,CAACa,GAC9B,KACF,CAAA,MACK,GAAIqiB,AAAa,KAAbA,GAAmBgB,AAAU,IAAVA,EAAa,CACzC,IAAMrjB,EAAMP,EAAOoE,SAAS,CAACwyB,EAAUC,GAAGrzB,IAAI,EAC1CjD,CAAAA,EAAIjJ,MAAM,CAAG,GAAGgO,EAAK5F,IAAI,CAACa,GAC9Bq2B,EAAWC,EAAI,CACjB,CACAA,GACF,CAEA,MAAO,CAAEvxB,KAAAA,EAAMwxB,SAAUD,EAAI,CAAE,CACjC,EAzbWlD,EA2bIoD,gBAoDd,CApDD,SAAgCvS,CAAY,EAM1C,IALA,IAAMwS,EAAgB,IAAI,CAACC,oBAAoB,CACzCC,EAAmB,EAAE,IAAI,CAACC,gBAAgB,CAC5CC,EAAe5S,EACf6S,EAAe,CAAA,EAEZA,GAAc,CACnBA,EAAe,CAAA,EAIf,IAHA,IAAM//B,EAAS8/B,EAAa9/B,MAAM,CAC9BD,EAAI,EAEDA,EAAIC,GAAQ,CACjB,IAyBgBypB,EAAAA,EAzBV6B,EAAWwU,EAAahV,UAAU,CAAC/qB,GACzC,GAAI,CAACsqB,GAAUoC,OAAO,CAACnB,GAAW,CAChCvrB,IACA,QACF,CAGA,IADA,IAAM0H,EAAQ1H,EACPA,EAAIC,GAAUqqB,GAAUqC,OAAO,CAACoT,EAAahV,UAAU,CAAC/qB,KAC7DA,IAGF,IAAMqK,EAAY01B,EAAahzB,SAAS,CAACrF,EAAO1H,GAC1C0pB,EAAQ,IAAI,CAACkT,cAAc,CAACnvB,GAAG,CAACpD,GAEtC,GAAI,AAACqf,GAASiW,CAAa,CAACt1B,EAAU,GAAKw1B,GAK3CF,CAAa,CAACt1B,EAAU,CAAGw1B,EAE3B,IAAII,EAAAA,KAAAA,EACAR,EAAAA,KAAAA,EAEJ,GAAK/V,EAAMne,UAAU,CAGd,CACL,IAAwC20B,EAAA,IAAI,CAACb,uBAAuB,CAACU,EAAcr4B,EAAO2C,GAAlF4D,EAAgCiyB,EAAhCjyB,IAAMwxB,CAAUU,EAAgBD,EAA1BT,QAAAA,CACdQ,EAAcvW,EAAMuP,kBAAkB,CAAChrB,GACvCwxB,EAAWU,CACb,MANEF,EAAcvW,AAAkB,MAAlBA,CAAAA,EAAAA,MAAAA,CAAAA,EAAAA,EAAMyD,IAAI,AAAJA,EAANzD,KAAAA,EAAAA,EAAYzgB,MAAM,AAANA,EAAZygB,EAAsB,GACpC+V,EAAWz/B,EAOb+/B,EAAeA,EAAahzB,SAAS,CAAC,EAAGrF,GAASu4B,EAAcF,EAAahzB,SAAS,CAAC0yB,GACvFO,EAAe,CAAA,EACf,MACF,CACF,CAEA,OAAOD,CACT,EA/eWzD,EAwgBIsB,iBA0Bd,CA1BD,SACE1wB,CAAa,CACbyJ,CAAgB,CAChBypB,CAAwC,EAOxC,IAAI,CAACzD,oBAAoB,CAACt0B,IAAI,CAAC,EAAE,EAG/B61B,EADE,AAAyB,UAAzB,OAAOkC,EACC,IAAI/G,GAAiBnsB,EAAOkzB,GAE5B,IAAI/G,GAAiBnsB,EAAOkzB,EAAcv3B,IAAI,CAAE8N,GAG5D,IAPIunB,EAOE/Y,EAAM,IAAI,CAACuX,gBAAgB,CAACwB,GAElC,OADA,IAAI,CAACvB,oBAAoB,CAACzpB,GAAG,GACtB,CACL4qB,QAAS3Y,CAIX,CACF,EAliBWmX,EAoiBI0B,gBAQd,CARD,SAAgCvB,CAAuB,CAAE/0B,CAAa,EACpE,IAAI,CAACm2B,kBAAkB,CACrBpB,EAAM5zB,IAAI,CACVM,GAAUC,cAAc,CAAC1B,GACzB+0B,EAAM/R,iBAAiB,CAAC,GACxB,GACA+R,EAAMsB,UAAU,CAEpB,EA5iBWzB,EA8iBIuB,kBAoBd,CApBD,SACEwC,CAAkB,CAClB34B,CAAqB,CACrBC,CAAmB,CACnBm2B,CAAe,CACfwC,CAAyB,CACzBnD,CAAuB,EAMvB,IAAMjM,EAAQ/nB,GAAUE,WAAW,CAAC3B,EAAOC,GAC3C,IAAI,CAACu1B,kBAAkB,GAAG70B,IAAI,CAAC,CAI7B+zB,aAAclL,EACdrnB,QAASi0B,CACX,EACF,EAlkBWxB,EAokBIS,YAqBd,CArBD,SAA4BN,CAAuB,EACjD,IASI8D,EATE74B,EAAQ+0B,EAAM/R,iBAAiB,CAAC,GAChCrgB,EAAYoyB,EAAM/C,QAAQ,GAExBzwB,EAAqBoB,EAArBpB,MAAQL,CAAAA,EAAayB,EAAbzB,QAAAA,CACVjB,EAAQiB,EAARjB,GAAAA,CACF,IAAI,CAACi1B,cAAc,CAACnvB,GAAG,CAACxE,IAAWA,EAAOy0B,UAAU,CAAC,QACvD,IAAI,CAAC9X,YAAY,CAAChd,EAAW,oBAAmBK,EAAUwzB,EAAM9zB,MAAM,CAAE8zB,EAAM5zB,IAAI,EAIzD,MAAvB4zB,EAAM5R,UAAU,KAClB0V,EAAY9D,EAAMlD,wBAAwB,CAAC,KAC3C5xB,EAAM80B,EAAM/R,iBAAiB,CAAC,IAIhC,IAAM8V,EAAc,IAAI3H,GAAYxuB,EAFlBoyB,EAAMpB,aAAa,GACvBlyB,GAAUE,WAAW,CAAC3B,EAAOC,GACsB44B,GACjE,IAAI,CAAC3D,cAAc,CAACn1B,GAAG,CAACwB,EAAQu3B,GAEhC,IAAI,CAAC3C,kBAAkB,CAACpB,EAAM5zB,IAAI,CAAEnB,EAAO+0B,EAAM/R,iBAAiB,CAAC,GAAI,GAAI+R,EAAMsB,UAAU,CAC7F,EAzlBWzB,EA2lBIU,WAMd,CAND,SAA2BP,CAAuB,EAChD,IAAM/0B,EAAQ+0B,EAAM/R,iBAAiB,CAAC,GAChCrgB,EAAYoyB,EAAM/C,QAAQ,GAChC,IAAI,CAACkD,cAAc,CAAC6D,MAAM,CAACp2B,EAAUpB,MAAM,EAE3C,IAAI,CAAC40B,kBAAkB,CAACpB,EAAM5zB,IAAI,CAAEnB,EAAO+0B,EAAM/R,iBAAiB,CAAC,GAAI,GAAI+R,EAAMsB,UAAU,CAC7F,EAjmBWzB,EAmmBIQ,WA0Bd,CA1BD,SAA2BL,CAAuB,CAAErhB,CAAgB,EAClE,IAAMsO,EAAQ,IAAI,CAACkT,cAAc,CAACnvB,GAAG,CAAC2N,EAAMnS,MAAM,EAClD,GAAIygB,EAAO,CACT,IAAQ9gB,EAAawS,EAAbxS,QAAAA,CACR,GAAI8gB,EAAMne,UAAU,CAAE,CACpB,IAA2B20B,EAAA,IAAI,CAACb,uBAAuB,CAAC5C,EAAM9zB,MAAM,CAAEC,EAASlB,KAAK,CAACI,KAAK,CAAEsT,EAAMnS,MAAM,EAAhGgF,EAAmBiyB,EAAnBjyB,IAAAA,CAAMwxB,EAAaS,EAAbT,QAAAA,CACRiB,EAAoBhX,EAAMuP,kBAAkB,CAAChrB,GAC7C0yB,EAAkB,IAAI,CAACjB,gBAAgB,CAACgB,GAExCE,EAAkBnB,EAAW72B,EAASjB,GAAG,CAACG,KAAK,CACrD20B,EAAMzR,OAAO,CAAC4V,GAEd,IAAI,CAAC/C,kBAAkB,CACrBpB,EAAM5zB,IAAI,CACVD,EAASlB,KAAK,CACd+0B,EAAM/R,iBAAiB,CAAC,GACxBiW,EACAlE,EAAMsB,UAAU,MAEb,CACL,IAAqBrU,EAAAA,EAAfmX,EAAenX,AAAkB,MAAlBA,CAAAA,EAAAA,AAAAA,MAAAA,CAAAA,EAAAA,EAAMyD,IAAI,AAAA,EAAVzD,KAAAA,EAAAA,EAAYzgB,MAAM,AAANA,EAAZygB,EAAsB,GACrCiX,EAAkB,IAAI,CAACjB,gBAAgB,CAACmB,GAE9C,IAAI,CAAChD,kBAAkB,CAACpB,EAAM5zB,IAAI,CAAED,EAASlB,KAAK,CAAEkB,EAASjB,GAAG,CAAEg5B,EAAiBlE,EAAMsB,UAAU,CACrG,CACF,CACF,EA7nBWzB,CAooBZ,GApoBYA,CAAAA,GAGIM,eAA2C,IAAIruB,IAHnD+tB,GAIIK,oBAA0C,CAAA,CAAC,EAAE,CAAC,CAJlDL,GAMIsD,qBAA+C,CAAA,EANnDtD,GAOIwD,gBAA2B,CAAA,EC1B7B,IAAAgB,gBAAA,WAAMA,SAAAA,EAuBPC,CAAsB,CAAEC,CAAgB,CAAEC,CAA6B,OAfnFC,YAAe,CAAA,CAAA,EAgBb,IAAI,CAACH,UAAU,CAAGA,EAClB,IAAI,CAACC,QAAQ,CAAGA,EAChB,IAAI,CAACG,YAAY,CAAG,IAAI3yB,IACxB,IAAA,IAA4BoJ,EAA5BC,EAAA9W,EAAiBkgC,GAAW,CAAA,AAAArpB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAjBq/B,IAAAA,EAAAA,EAAAA,KAAAA,CACT,IAAI,CAACD,YAAY,CAAC5zB,GAAG,CAAC6zB,EACxB,CACA,IAAI,CAAC5nB,EAAE,CA9BUsnB,EA8BGO,GAAG,GA9BNP,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAiCnBQ,EAAAA,YAMC,CANDA,SAAaC,CAAsB,EACjC,IAAA,IAAoB3pB,EAApBC,EAAA9W,EAAgBwgC,GAAI,CAAA,AAAA3pB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAT2M,IAAAA,EAAAA,EAAAA,KAAAA,CACL,IAAI,CAACyyB,YAAY,CAAC9zB,GAAG,CAACqB,KAC1B,IAAI,CAACyyB,YAAY,CAAC5zB,GAAG,CAACmB,GACtB,IAAI,CAAC8yB,WAAW,CAAG,CAAA,EACrB,CACF,EAEAC,EAAAA,cAEC,CAFDA,SAAehW,CAAc,EAC3B,OAAO,IAAI,CAACsV,UAAU,CAACW,UAAU,CAAC,IAAI,CAACV,QAAQ,CAAGvV,EAAO,AAC3D,EAEAkW,EAAAA,SAQC,CARDA,WACE,GAAI,IAAI,CAACX,QAAQ,CAAG,IAAI,CAACD,UAAU,CAACW,UAAU,CAACzhC,MAAM,CAAG,EAAG,MAAO,CAAA,EAEhE,IAAK,IAAID,EAAI,IAAI,CAACghC,QAAQ,CAAEhhC,EAAI,IAAI,CAAC+gC,UAAU,CAACW,UAAU,CAACzhC,MAAM,CAAED,IACjE,GAAI,IAAI,CAAC+gC,UAAU,CAACW,UAAU,CAAC1hC,EAAE,GAAK2C,GAAWi/B,OAAO,CAAE,MAAO,CAAA,EAEnE,MAAO,CAAA,CAEX,EAEA5W,EAAAA,OAKC,CALDA,WAIE,OAAO,IA3DU8V,EA2DI,IAAI,CAACC,UAAU,CAAE,IAAI,CAACC,QAAQ,CAAG,EAAG,IAAI,CAACG,YAAY,CAC5E,EA5DmBL,EAAAA,EAAAA,EASfU,IAAAA,cAAJ/zB,IAAA,WACE,OAAO,IAAI,CAACyzB,YAAY,AAC1B,EACAz5B,IAAA,SAAgBomB,CAAU,EACxB,IAAI,CAACqT,YAAY,CAAGrT,CACtB,IAEIgU,IAAAA,YAAJp0B,IAAA,WACE,OAAO,IAAI,CAACszB,UAAU,CAACW,UAAU,CAAC,IAAI,CAACV,QAAQ,CAAC,AAClD,IACIc,IAAAA,aAAJr0B,IAAA,WACE,OAAO,IAAI,CAACszB,UAAU,CAACW,UAAU,CAAC,IAAI,CAACV,QAAQ,CAAG,EAAE,AACtD,KArBmBF,IAAAA,CAAAA,GACZO,GAAM,CAAA,ECFA,IAAAU,gBAAA,WAAMA,SAAAA,EA2CCC,CAA0B,OA/B9CC,QAAW,CAAA,CAAA,EAQHC,IAAAA,CAAAA,cAAAA,CAAuD,IAAI3zB,IAwBjE,IAAI,CAACiL,EAAE,CA5CUuoB,EA4CDV,GAAG,GACnB,IAAI,CAACc,MAAM,CAAG,IAAI3zB,IAAQwzB,EAAAA,CAAAA,MAAAA,CAAAA,IAC1B,IAAI,CAACA,KAAK,CAAG,IAAIxzB,IAAQwzB,EAAAA,CAAAA,MAAAA,CAAAA,IACzB,IAAA,IAAwBpqB,EAAxBC,EAAA9W,EAAiBihC,GAAO,CAAA,AAAApqB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAbd,IAAAA,EAAAA,EAAAA,KAAAA,CACHmhC,EAAa,IAAI,CAACC,kBAAkB,CAACphC,EAAG8/B,UAAU,CAAE9/B,EAAG+/B,QAAQ,EACrE,IAAI,CAACkB,cAAc,CAACz6B,GAAG,CAAC26B,EAAYnhC,EACtC,CAlDiB8gC,EAmDX75B,IAAI,CAACT,GAAG,CAAC,IAAI,CAAC+R,EAAE,CAAE,IAAI,EAnDXuoB,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAuDnBM,EAAAA,kBAEC,CAFDA,SAAmBtB,CAAsB,CAAEC,CAAgB,EACzD,OAAOD,EAAcvnB,EAAE,CAAC,IAAGwnB,CAC7B,EAEAsB,EAAAA,eAcC,CAdDA,SAAgBvB,CAAsB,CAAEC,CAAgB,CAAEG,CAA4C,EAA5CA,KAAAA,IAAAA,GAAAA,CAAAA,EAAmC,IAAI3yB,GAAAA,EAC/F,IAAM+zB,EAAQ,IAAI,CAACF,kBAAkB,CAACtB,EAAYC,GAC5C51B,EAAO,IAAI,CAAC82B,cAAc,CAACz0B,GAAG,CAAC80B,GACrC,GAAIn3B,EAAM,CACR,IAAA,IAA+BwM,EAA/BC,EAAA9W,EAAiBogC,GAAc,CAAA,AAAAvpB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAApBq/B,IAAAA,EAAAA,EAAAA,KAAAA,CACLh2B,EAAK+1B,YAAY,CAAC9zB,GAAG,CAAC+zB,KAC1Bh2B,EAAK+1B,YAAY,CAAC5zB,GAAG,CAAC6zB,GACtBh2B,EAAKo2B,WAAW,CAAG,CAAA,EACrB,CACA,OAAOp2B,CACT,CACA,IAAMo3B,EAAU,IAAI1B,GAAUC,EAAYC,EAAUG,GAEpD,OADA,IAAI,CAACe,cAAc,CAACz6B,GAAG,CAAC86B,EAAOC,GACxBA,CACT,EAzEmBT,EAsBZ5iC,MAcN,CAdD,SAAc6iC,CAAkB,EAC9B,IAAMS,EAAW,IAAI,CAACC,SAAS,CAACV,GAC1BW,EAAQ,IAAI,CAACC,UAAU,CAACn1B,GAAG,CAACg1B,GAClC,GAAIE,EAAO,CACT,IAAA,IAA0B/qB,EAA1BC,EAAA9W,EAAmBihC,GAAO,CAAA,AAAApqB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAf8gC,IAAAA,EAAAA,EAAAA,KAAAA,CAETF,EAAML,eAAe,CAACO,EAAK9B,UAAU,CAAE8B,EAAK7B,QAAQ,CAAE6B,EAAK1B,YAAY,CACzE,CACA,OAAOwB,CACT,CAEA,IAAMG,EAAW,IAjCAf,EAiCUC,GAE3B,OADA,IAAI,CAACY,UAAU,CAACn7B,GAAG,CAACg7B,EAAUK,GACvBA,CACT,EApCmBf,EAuCZW,SAEN,CAFD,SAAiBV,CAAkB,EACjC,OAAOA,EAAM91B,GAAG,CAAC,SAACd,CAAAA,EAAS,OAAGA,EAAK21B,UAAU,CAACvnB,EAAE,CAAC,IAAGpO,EAAK41B,QAAQ,AAAI3b,GAAAA,IAAI,CAAC,IAC5E,EAzCmB0c,EAAAA,EAAAA,EAQfgB,IAAAA,QAAJt1B,IAAA,WACE,OAAO,IAAI,CAAC00B,MAAM,AACpB,IAGIX,IAAAA,cAAJ/zB,IAAA,WACE,IAAmB,IAAYmK,EAAZC,EAAA9W,EAAA,IAAI,CAACihC,KAAK,EAAE,CAAA,AAAApqB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAC7B,GAAI8gC,AADKA,EAAAA,KAAAA,CACArB,WAAW,CAAE,MAAO,CAAA,EAE/B,MAAO,CAAA,CACT,KAlBmBO,IAAAA,CAAAA,GACZa,WAAqD,IAAIr0B,IAD7CwzB,GAEZ75B,KAA2B,IAAIqG,IAFnBwzB,GAGZV,GAAM,CAAA,ECIA,IAAA2B,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,OAAAA,EACZ5f,UAEN,CAFD,SAAkB/J,CAAiB,EACjC,OAAOA,EAAKvW,GAAaugB,KAAK,AAChC,EAHmB2f,EAKZthC,QAKN,CALD,SAAgB2X,CAAiB,EAC/B,GAAI,IAAI,CAAC+J,UAAU,CAAC/J,GAAK,CAChB1W,IAAAA,EAAP,OAAOA,AAAAA,MAAAA,CAAAA,EAAAA,EAAU,CAAC0W,EAAG,EAAd1W,EAAkBC,EAAO,CAACyW,EAAG,AACtC,CACA,OAAOvW,EAAY,CAACuW,EAAG,AACzB,EAVmB2pB,EAYZC,2BAsBN,CAtBD,SACEC,CAAkB,CAClBC,CAA0B,CAE1BC,CAEC,EAGD,IAAA,IAA2BxrB,EADrBuN,EAAwD,EAAE,CAChEtN,EAAA9W,EAAkBoiC,GAAS,CAAA,AAAAvrB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAhBshC,IAAAA,EAAAA,EAAAA,KAAAA,CACTle,EAAI9c,IAAI,CAAC,YACN66B,EAASG,CAAAA,GACV,SAAU5qB,CAAE,EAAE,IAAA,IAAAzJ,EAAA3M,UAAApC,MAAA,CAAAwX,EAAA,AAAA3W,MAAAkO,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAGwI,CAAAA,CAAHxI,EAAA,EAAA,CAAA5M,SAAA,CAAA4M,EAAW,CACvB,GAAKwI,CAAQ,CAAC,EAAE,EAChB,IAAM/P,EAAQ+P,CAAQ,CAAC,EAAE,CAAC7O,QAAQ,CAAClB,KAAK,CAClCC,EAAM8P,CAAQ,CAACA,EAASxX,MAAM,CAAG,EAAE,CAAC2I,QAAQ,CAACjB,GAAG,CAChDiB,EAAWO,GAAUE,WAAW,CAAC3B,EAAOC,GAC9C1E,GAAQwK,GAAG,CAAC21B,AAAAA,MAAAA,EAAAA,EAAengC,GAAQC,WAAW,CAACgF,IAAI,CAAEuQ,EAAI7P,EAAU6O,GACrE,EACD,CACH,CACA,OAAO0N,CACT,EAlCmB6d,EAoCZM,aAIN,CAJD,SAA2Bp3B,CAAmB,CAAEszB,CAAI,CAAE3R,CAAI,EACxD,IAAY3hB,EAANzE,EAAMyE,AAAQszB,MAARtzB,CAAAA,EAAAA,EAAIuB,GAAG,CAAC+xB,EAAAA,EAARtzB,EAAc,IAAIsC,IAC9B/G,EAAI8F,GAAG,CAACsgB,GACR3hB,EAAIzE,GAAG,CAAC+3B,EAAG/3B,EACb,EAxCmBu7B,EA0CZO,QAKN,CALD,SAAmB9qB,CAAU,CAAE+qB,CAAU,EACvC,IAAA,IAAuB5rB,EAAvBC,EAAA9W,EAAmB0X,GAAI,CAAA,AAAAb,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAZqJ,IAAAA,EAAAA,EAAAA,KAAAA,CACT,GAAI,CAACo4B,EAAGn2B,GAAG,CAACjC,GAAO,MAAO,CAAA,CAC5B,CACA,MAAO,CAAA,CACT,EA/CmB43B,EAiDZS,aAEN,CAFD,SAAqBt1B,CAAa,CAAEwM,CAAa,EAC/C,OAAOxM,EAAEu1B,MAAM,GAAK/oB,EAAE+oB,MAAM,EAAIv1B,EAAErO,MAAM,GAAK6a,EAAE7a,MAAM,AACvD,EAnDmBkjC,KrCJdz7B,KAAKA,GAIX,0EAJWA,IsCMCo8B,GAAN,WAAA,EAAA,WAAMA,SAAAA,EAWCC,CAAgB,EAVnBC,IAAAA,CAAAA,WAAAA,CAAgD,IAAIt1B,IACpDu1B,IAAAA,CAAAA,YAAAA,CAAiD,IAAIv1B,IAErDw1B,IAAAA,CAAAA,WAAAA,CAAgC,IAAIx1B,IACpCy1B,IAAAA,CAAAA,SAAAA,CAA4B,IAAIz1B,IAGnB,IAAA,CACd01B,iBAAmC,EAAE,CAG3C,IAAI,CAACL,OAAO,CAAGA,EAZND,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAeXO,EAAAA,QAGC,CAHDA,WACE,IAAI,CAACC,eAAe,GACpB,IAAI,CAACC,eAAe,EACtB,EAEAtwB,EAAQswB,eAIP,CAJD,WACE,IAAMC,EAAqB,CAAC,IAAIvD,GAAU,IAAI,CAAC8C,OAAO,CAACU,WAAW,CAAC,EAAE,CAAE,EAAG,CAAC3hC,GAAW2G,GAAG,CAAC,EAAE,CACtFi7B,EAAaxC,GAAM5iC,MAAM,CAACklC,GAChC,IAAI,CAACG,YAAY,CAACD,EACpB,EAEAzwB,EAAQ0wB,YAOP,CAPD,SAAqB7B,CAAY,EAC/B,GAAKA,EAAMnB,WAAW,EACtB,IAAI,CAACiD,QAAQ,CAAC9B,GAEd,IAAA,IAA4B/qB,EADtB8sB,EAAY,IAAI,CAACC,eAAe,CAAChC,GACvC9qB,EAAA9W,EAAiB2jC,GAAW,CAAA,AAAA9sB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAjB6iC,IAAAA,EAAAA,EAAAA,KAAAA,CACT,IAAI,CAACJ,YAAY,CAACI,EACpB,EACF,EAEA9wB,EAAQ2wB,QAQP,CARD,SAAiB9B,CAAY,EAC3B,IAAmBA,IAAa/qB,EAAb+qB,EAAAA,EAAAA,EAAMX,KAAK,EAAE,CAAA,AAAApqB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAArB8gC,IAAAA,EAAAA,EAAAA,KAAAA,CACJA,EAAKlB,SAAS,IACjB,IAAI,CAACkD,gBAAgB,CAAClC,EAAOE,EAEjC,CAEA,OADAF,EAAMV,QAAQ,CAAG,CAAA,EACVU,CACT,EAEA7uB,EAAQ+wB,gBA+CP,CA/CD,SAAyBlC,CAAY,CAAEv3B,CAAe,EACpD,IAAI43B,GAAa5f,UAAU,CAAChY,EAAKy2B,SAAS,GAE1C,IAAMiD,EAAiB,IAAI,CAAClB,OAAO,CAACmB,iBAAiB,CAAe35B,EAAKy2B,SAAS,EAElF,GAAIz2B,EAAK02B,UAAU,CAAE,CAMnB,IAAK,IALDkD,EAAkB,IAAIx2B,IAEtBy2B,EAAgB,CAAA,EAGXjlC,EAAI,EAAG8hC,EAAa12B,EAAKq2B,cAAc,CAAC,GAAMK,EAAYA,EAAa12B,EAAKq2B,cAAc,CAAC,EAAEzhC,GAAI,CACxG,GAAIgjC,GAAa5f,UAAU,CAAC0e,GAAa,CACvCkD,EAAgBz3B,GAAG,CAAWu0B,GAC9BmD,EAAgB,CAAA,EAChB,KACF,CACAC,EAAe,IAAI,CAACrB,WAAW,CAACp2B,GAAG,CAAeq0B,GAClD,IAAA,IAXEoD,EAW4BttB,EAA9BC,EAAA9W,EAAgBmkC,GAAc,CAAA,AAAAttB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAnB2M,IAAAA,EAAAA,EAAAA,KAAAA,CACTs2B,EAAgBz3B,GAAG,CAACmB,EACtB,CACA,GAAI,CAACw2B,EAAa73B,GAAG,CAAC1K,GAAWi/B,OAAO,EAAG,KAC7C,CACA,GAAI,CAACqD,GAAiBC,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAc73B,GAAG,CAAC1K,GAAWi/B,OAAO,CAAA,EACxD,IAAgBx2B,IAAmBkd,EAAnBld,EAAAA,EAAAA,EAAK+1B,YAAY,EAAE,CAAA,AAAA7Y,CAAAA,EAAAC,GAAA,EAAAxmB,IAAA,EAAA,CAAxB2M,IAAAA,EAAAA,EAAAA,KAAAA,CACTs2B,EAAgBz3B,GAAG,CAACmB,EACtB,CAGF,IAAA,IAAyC8a,EAAzCC,EAAA1oB,EAAyB+jC,GAAgB,CAAA,AAAAtb,CAAAA,EAAAC,GAAA,EAAA1nB,IAAA,EAAA,CAA9Bg/B,IAAAA,EAAAA,EAAAA,KAAAA,CACHyB,EAAUG,EAAML,eAAe,CAACvB,EAAY,GAC7C4B,EAAMI,KAAK,CAAC11B,GAAG,CAACm1B,IAAa2C,GAAM5B,QAAQ,CAACyB,EAAiBxC,EAAQrB,YAAY,IACpFwB,EAAMI,KAAK,CAACx1B,GAAG,CAACi1B,GAChBA,EAAQlB,YAAY,CAAC0D,GACrB,IAAI,CAACH,gBAAgB,CAAClC,EAAOH,GAEjC,OAEA,IAAA,IAAyC4C,EAAzCC,EAAAtkC,EAAyB+jC,GAAgB,CAAA,AAAAM,CAAAA,EAAAC,GAAA,EAAAtjC,IAAA,EAAA,CAA9Bg/B,IAAAA,EAAAA,EAAAA,KAAAA,CACHyB,EAAUG,EAAML,eAAe,CAACvB,EAAY,GAC7C4B,EAAMI,KAAK,CAAC11B,GAAG,CAACm1B,IAAa2C,GAAM5B,QAAQ,CAACn4B,EAAK+1B,YAAY,CAAEqB,EAAQrB,YAAY,IACtFwB,EAAMI,KAAK,CAACx1B,GAAG,CAACi1B,GAChBA,EAAQlB,YAAY,CAACl2B,EAAK+1B,YAAY,EACtC,IAAI,CAAC0D,gBAAgB,CAAClC,EAAOH,GAEjC,EAEJ,EAEA1uB,EAAQ6wB,eA+CP,CA/CD,SAAwBhC,CAAY,EAClC,IAAM2C,EAA8C,IAAI/2B,IAClDg3B,EAAgC,AAA6B,MAA7BC,CAAAA,EAAA,IAAI,CAACzB,WAAW,CAACt2B,GAAG,CAACk1B,EAAMnpB,EAAE,CAAA,EAA7BgsB,EAAkC,IAAIj3B,IACtEk3B,EAA4B,AAA2B,MAA3BC,CAAAA,EAAA,IAAI,CAAC1B,SAAS,CAACv2B,GAAG,CAACk1B,EAAMnpB,EAAE,CAAA,EAA3BksB,EAAgC,IAAIn3B,IAEtE,IAAI,CAACw1B,WAAW,CAACt8B,GAAG,CAACk7B,EAAMnpB,EAAE,CAAE+rB,GAC/B,IAAI,CAACvB,SAAS,CAACv8B,GAAG,CAACk7B,EAAMnpB,EAAE,CAAEisB,GAE7B,IAAwB9C,IANc6C,EACJE,EAKG9tB,EAAb+qB,EAAAA,EAAAA,EAAMI,KAAK,EAAE,CAAA,AAAAnrB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAA1B4jC,IAAAA,EAAAA,EAAAA,KAAAA,CACT,GAAIA,EAAUhE,SAAS,GAAI,CACzB,IAAI+B,EAAAA,KAAAA,EAEFA,EADEiC,EAAU5E,UAAU,CAACmC,IAAI,GAAKpgC,GAAaugB,KAAK,CACzC,CACPqgB,OAAQn8B,GAAQq+B,MAAM,CACtB9lC,OAAQ6lC,EAAU5E,UAAU,CAACvnB,EAAE,AACjC,EAES,CAAEkqB,OAAQn8B,GAAQs+B,MAAM,AAAC,EAGpC,IAAgBF,IAAwBrd,EAAxBqd,EAAAA,EAAAA,EAAUxE,YAAY,EAAE,CAAA,AAAA7Y,CAAAA,EAAAC,GAAA,EAAAxmB,IAAA,EAAA,CAA7B2M,IAAAA,EAAAA,EAAAA,KAAAA,CACT,IAAI,CAACo3B,UAAU,CAACP,EAAkB72B,EAAGg1B,EACvC,MACK,CACL,IAAMqC,EAAWJ,EAAU3a,OAAO,GAClCma,GAAM7B,aAAa,CAACgC,EAASK,EAAU9D,SAAS,CAAEkE,EACpD,CAEAJ,EAAUnE,WAAW,CAAG,CAAA,CAC1B,CAGA,IAA0B8D,IAAmB9b,EADvCkb,EAAY,IAAIl2B,IACI82B,EAAAA,EAAAA,EAAQU,OAAO,IAAI,CAAA,AAAAxc,CAAAA,EAAAC,GAAA,EAAA1nB,IAAA,EAAA,eAAjCkkC,EAAIjE,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,EAAAA,CACRc,EAAWf,GAAM5iC,MAAM,CAAC2B,MAAMe,IAAI,CAACmgC,IACrCgB,GAAa5f,UAAU,CAAC6iB,GAC1B,IAAI,CAACH,UAAU,CAACP,EAA4BU,EAAI,CAC9CvC,OAAQn8B,GAAQ2+B,KAAK,CACrBpmC,OAAQgjC,EAAStpB,EAAE,AACrB,GAEAisB,EAAeh+B,GAAG,CAAew+B,EAAInD,EAAStpB,EAAE,EAGlDkrB,EAAUn3B,GAAG,CAACu1B,EAChB,CAEA,OAAO4B,CACT,EAGA5wB,EAAQgyB,UAkBP,CAlBD,SAAmBK,CAAkB,CAAEC,CAAkB,CAAE1C,CAAkB,EAC3E,IAAM2C,EAAQF,EAAM14B,GAAG,CAAC24B,GACpBC,CAAAA,CAAAA,GAAUlB,GAAM1B,aAAa,CAAC4C,EAAO3C,IAEnC0C,IAAaxjC,GAAQowB,IAAI,EAAIqT,EAAM3C,MAAM,GAAKn8B,GAAQ2+B,KAAK,EAAIxC,EAAOA,MAAM,GAAKn8B,GAAQq+B,MAAM,AAFnD,GAelDO,EAAM1+B,GAAG,CAAC2+B,EAAU1C,EACtB,EAGA5vB,EAAQqwB,eAIP,CAJD,WACE,IAAyB,IAAmCvsB,EAAnCC,EAAA9W,EAAA,IAAI,CAAC6iC,OAAO,CAACU,WAAW,CAAC3iC,KAAK,CAAC,IAAI,CAAA,AAAAiW,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAAjDg/B,IAAAA,EAAAA,EAAAA,KAAAA,CACT,IAAI,CAACuF,qBAAqB,CAACvF,EAAWmC,IAAI,CAC5C,CACF,EAEApvB,EAAQwyB,qBAwCP,CAxCD,SAA8BC,CAAgB,EAE5C,IAAMC,EAAM,IAAI,CAACvC,gBAAgB,CAAC7f,SAAS,CAAC,SAAChZ,CAAAA,SAASA,IAASm7B,IAC/D,GAAIC,AAAQ,KAARA,EAAY,CAGd,IAAK,IAFCC,EAAc,IAAI,CAAC5C,WAAW,CAACp2B,GAAG,CAAC84B,GACnC3lC,EAAM,IAAI,CAACqjC,gBAAgB,CAAChkC,MAAM,CAC/BD,EAAIY,EAAM,EAAGZ,EAAIwmC,EAAKxmC,IAAK,CAClC,IAAM0mC,EAAQ,IAAI,CAACzC,gBAAgB,CAACjkC,EAAE,CACtC,IAAI,CAAC6jC,WAAW,CAACp8B,GAAG,CAACi/B,EAAOD,EAC9B,CACA,OAAOA,CACT,CACA,IAAI,CAACxC,gBAAgB,CAAC57B,IAAI,CAACk+B,GAE3B,IAAMzB,EAAiB,IAAI,CAAClB,OAAO,CAACmB,iBAAiB,CAACwB,GAChDI,EAAW,IAAIn4B,IACrB,IAAI,CAACq1B,WAAW,CAACp8B,GAAG,CAAC8+B,EAAII,GACrB,IAAI,CAAC/C,OAAO,CAACgD,YAAY,CAACL,IAAKI,EAASp5B,GAAG,CAAC5K,GAAWi/B,OAAO,EAElE,IAAA,IAAyChqB,EAAzCC,EAAA9W,EAAyB+jC,GAAgB,CAAA,AAAAltB,CAAAA,EAAAC,GAAA,EAAA9V,IAAA,EAAA,CAEvC,IAFSg/B,IAAAA,EAAAA,EAAAA,KAAAA,CACL/gC,EAAI,EACDA,EAAI+gC,EAAWW,UAAU,CAACzhC,MAAM,CAAED,IAAK,CAC5C,IAAMimC,EAAKlF,EAAWW,UAAU,CAAC1hC,EAAE,CACnC,GAAIgjC,GAAa5f,UAAU,CAAC6iB,GAAK,CAC/BU,EAASp5B,GAAG,CAAW04B,GACvB,KACF,CAIA,IAAA,IAAoC3d,EAF9Bue,EAAkB,IAAI,CAACP,qBAAqB,CAAeL,GAEjE1d,EAAAxnB,EAAmB8lC,GAAiB,CAAA,AAAAve,CAAAA,EAAAC,GAAA,EAAAxmB,IAAA,EAAA,CAAzBqJ,IAAAA,EAAAA,EAAAA,KAAAA,CACLA,IAASzI,GAAWi/B,OAAO,EAAE+E,EAASp5B,GAAG,CAACnC,EAChD,CACA,GAAI,CAAC,IAAI,CAACw4B,OAAO,CAACgD,YAAY,CAAeX,GAAK,KACpD,CACIjmC,IAAM+gC,EAAWW,UAAU,CAACzhC,MAAM,EAAE0mC,EAASp5B,GAAG,CAAC5K,GAAWi/B,OAAO,CACzE,CAGA,OADA,IAAI,CAACqC,gBAAgB,CAAC/wB,GAAG,GAClByzB,CACT,EAnNWhD,CAoNZ,IC/NcmD,GAAA,SAAMA,EAQP5D,CAAkB,CAAExB,CAA2B,EACzD,IAAI,CAACwB,IAAI,CAAGA,EACZ,IAAI,CAACxB,UAAU,CAAGA,EAClB,IAAI,CAACloB,EAAE,CAXUstB,EAWIzF,GAAG,GAXPyF,EAYN5+B,IAAI,CAACT,GAAG,CAAC,IAAI,CAAC+R,EAAE,CAAE,IAAI,EAZhBstB,CAAAA,GACJzF,GAAM,CAAA,EADFyF,GAEZ5+B,KAAgC,IAAIqG,ICAtC,IAAAw4B,gBAAA,oBAAMA,EAYCr/B,CAAmB,CAAE48B,CAAyB,EACxD,IAAI,CAAC0C,WAAW,CAAGt/B,EACnB48B,EAAY2C,OAAO,CAAC,IAAIH,GAAWhkC,GAAaugB,KAAK,CAAE,CAAC3b,EAAM,GAC9D,IAAI,CAAC48B,WAAW,CAAGA,EAfVyC,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OAkBXhC,EAAAA,iBAEC,CAFDA,SAAkBztB,CAAyB,EACzC,OAAO,IAAI,CAACgtB,WAAW,CAACl4B,MAAM,CAAC,SAAChB,CAAAA,EAASA,OAAAA,EAAK83B,IAAI,GAAK5rB,GACzD,EAEAsvB,EAAAA,YAEC,CAFDA,SAAaL,CAAgB,EAC3B,OAAO,IAAI,CAACjC,WAAW,CAACva,IAAI,CAAC,SAAC3e,CAAAA,SAASA,EAAK83B,IAAI,GAAKqD,GAAMn7B,EAAKs2B,UAAU,CAAC,EAAE,GAAK/+B,GAAWi/B,OAAO,EACtG,EAEAsF,EAAAA,iBAEC,CAFDA,SAAkB3wB,CAAW,EAC3B,OAAOuwB,GAAW5+B,IAAI,CAACuF,GAAG,CAAC8I,EAC7B,EA5BWwwB,EAKJ5nC,MAKN,CALD,SAAcuI,CAAmB,CAAE48B,CAA8B,EAI/D,OAAO,IATEyC,EASUr/B,EAHP48B,EAAYp4B,GAAG,CAAC,SAACi7B,CAAAA,EAC3B,OAAO,IAAIL,GAAyBK,CAAG,CAAC,EAAE,CAAEA,EAAIxlC,KAAK,CAAC,GACxD,GAEF,EAVWolC,CA6BZ,ICxBKK,aACDpE,GAAaC,2BAA2B,CACzCngC,GAAaof,iBAAiB,CAC9B,CAAC,CAACpf,GAAaqf,kBAAkB,CAAC,CAAE,CAACrf,GAAaof,iBAAiB,CAAEpf,GAAaqf,kBAAkB,CAAC,CAAC,CACtGlf,GAAQsD,eAAe,CAAC2B,IAAI,EAG3B86B,GAAaC,2BAA2B,CACzCngC,GAAaqf,kBAAkB,CAC/B,CACE,CAACrf,GAAayb,mBAAmB,CAAC,CAClC,CAACzb,GAAaukC,8BAA8B,CAAC,CAC7C,CAACvkC,GAAawc,gBAAgB,CAAC,CAC/B,CAACxc,GAAaya,mBAAmB,CAAC,CAClC,CAACza,GAAa4f,yBAAyB,CAAC,CACxC,CAAC5f,GAAasf,WAAW,CAAC,CAC1B,CAACxf,GAAQ4uB,uBAAuB,CAAC,CAClC,CACDvuB,GAAQuD,iBAAiB,CAAC0B,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAaggB,iBAAiB,CAC9B,CAAC,CAAClgB,GAAQivB,UAAU,CAAC,CAAC,CACtB5uB,GAAQkE,eAAe,CAACe,IAAI,EAG3B86B,GAAaC,2BAA2B,CACzCngC,GAAakgB,mBAAmB,CAChC,CACE,CAAClgB,GAAaggB,iBAAiB,CAAEngB,GAAWwtB,UAAU,CAAExtB,GAAWytB,WAAW,CAAC,CAC/E,CACEttB,GAAaggB,iBAAiB,CAC9BngB,GAAWwtB,UAAU,CACrBrtB,GAAaqb,4BAA4B,CACzCxb,GAAWytB,WAAW,CACvB,CACF,CACDntB,GAAQmE,iBAAiB,CAACc,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAasf,WAAW,CACxB,CACE,CAACxf,GAAQg2B,WAAW,CAAEj2B,GAAWgvB,EAAE,CAAC,CACpC,CAAC/uB,GAAQg2B,WAAW,CAAEh2B,GAAQivB,UAAU,CAAC,CAC1C,CACD5uB,GAAQwD,UAAU,CAACyB,IAAI,EAGtB86B,GAAaC,2BAA2B,CACzCngC,GAAauf,kBAAkB,CAC/B,CACE,CAACzf,GAAQ01B,QAAQ,CAAE11B,GAAQgvB,4BAA4B,CAAC,CACxD,CAAChvB,GAAQ21B,WAAW,CAAE51B,GAAWgvB,EAAE,CAAC,CACpC,CAAC/uB,GAAQ41B,YAAY,CAAE71B,GAAWgvB,EAAE,CAAC,CACrC,CAAC/uB,GAAQ21B,WAAW,CAAEz1B,GAAaggB,iBAAiB,CAAC,CACrD,CAAClgB,GAAQ41B,YAAY,CAAE11B,GAAaggB,iBAAiB,CAAC,CACvD,CACD7f,GAAQyD,gBAAgB,CAACwB,IAAI,EAG5B86B,GAAaC,2BAA2B,CACzCngC,GAAawf,iBAAiB,CAC9B,CAAC,CAAC1f,GAAQ+1B,WAAW,CAAC,CAAC,CACvB11B,GAAQ0D,eAAe,CAACuB,IAAI,EAG3B86B,GAAaC,2BAA2B,CACzCngC,GAAayf,qBAAqB,CAClC,CAAC,CAAC3f,GAAQ81B,UAAU,CAAE91B,GAAQgvB,4BAA4B,CAAC,CAAC,CAC5D3uB,GAAQ2D,mBAAmB,CAACsB,IAAI,EAG/B86B,GAAaC,2BAA2B,CACzCngC,GAAa0f,qBAAqB,CAClC,CAAC,CAAC5f,GAAQ61B,UAAU,CAAC,CAAC,CACtBx1B,GAAQ4D,mBAAmB,CAACqB,IAAI,EAG/B86B,GAAaC,2BAA2B,CACzCngC,GAAa2f,wBAAwB,CACrC,CAAC,CAAC3f,GAAaqf,kBAAkB,CAAC,CAAE,CAACrf,GAAa2f,wBAAwB,CAAE3f,GAAaqf,kBAAkB,CAAC,CAAC,CAC7Glf,GAAQ6D,sBAAsB,CAACoB,IAAI,EAGlC86B,GAAaC,2BAA2B,CACzCngC,GAAa4f,yBAAyB,CACtC,CACE,CAAC5f,GAAauf,kBAAkB,CAAEvf,GAAa2f,wBAAwB,CAAE3f,GAAa6f,mBAAmB,CAAC,CAC1G,CAAC7f,GAAauf,kBAAkB,CAAEvf,GAAa6f,mBAAmB,CAAC,CACpE,CACD1f,GAAQ8D,sBAAsB,CAACmB,IAAI,EAGlC86B,GAAaC,2BAA2B,CACzCngC,GAAa6f,mBAAmB,CAChC,CACE,CAAC7f,GAAawf,iBAAiB,CAAC,CAChC,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAa2f,wBAAwB,CAAE3f,GAAa6f,mBAAmB,CAAC,CAC7G,CAAC7f,GAAa0f,qBAAqB,CAAE1f,GAAa2f,wBAAwB,CAAE3f,GAAawf,iBAAiB,CAAC,CAC3G,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAa6f,mBAAmB,CAAC,CACtE,CAAC7f,GAAa0f,qBAAqB,CAAE1f,GAAawf,iBAAiB,CAAC,CACrE,CACDrf,GAAQ+D,iBAAiB,CAACkB,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAame,oBAAoB,CACjC,CACE,CAACne,GAAa8W,oBAAoB,CAAEjX,GAAWgvB,EAAE,CAAC,CAClD,CAAC7uB,GAAa8W,oBAAoB,CAAEjX,GAAWgvB,EAAE,CAAE7uB,GAAayX,eAAe,CAAC,CAChF,CAACzX,GAAa8W,oBAAoB,CAAEjX,GAAWgvB,EAAE,CAAEhvB,GAAW0sB,KAAK,CAAEvsB,GAAa2W,WAAW,CAAC,CAC/F,CACDxW,GAAQmD,mBAAmB,CAAC8B,IAAI,EAG/B86B,GAAaC,2BAA2B,CACzCngC,GAAaue,yBAAyB,CACtC,CACE,CAACve,GAAame,oBAAoB,CAAC,CACnC,CAACne,GAAaue,yBAAyB,CAAE1e,GAAWguB,KAAK,CAAEhuB,GAAWgvB,EAAE,CAAC,CACzE,CAAC7uB,GAAaue,yBAAyB,CAAE1e,GAAWguB,KAAK,CAAEhuB,GAAWgvB,EAAE,CAAE7uB,GAAayX,eAAe,CAAC,CACxG,CACDtX,GAAQoD,uBAAuB,CAAC6B,IAAI,EAGnC86B,GAAaC,2BAA2B,CAACngC,GAAaukC,8BAA8B,CAAE,CACvF,CAACvkC,GAAaue,yBAAyB,CAAE1e,GAAWkuB,SAAS,CAAC,CAC/D,EAEEmS,GAAaC,2BAA2B,CACzCngC,GAAauY,mCAAmC,CAChD,CACE,CAACzY,GAAQya,IAAI,CAAC,CACd,CAACza,GAAQsN,KAAK,CAAC,CACf,CAACtN,GAAQqO,IAAI,CAAC,CACd,CAACrO,GAAQuN,GAAG,CAAC,CACb,CAACvN,GAAQwN,IAAI,CAAC,CACd,CAACxN,GAAQyN,IAAI,CAAC,CACd,CAACzN,GAAQ0N,IAAI,CAAC,CACd,CAAC1N,GAAQ8N,IAAI,CAAC,CACd,CAAC9N,GAAQ8wB,KAAK,CAAC,CACf,CAAC9wB,GAAQgxB,KAAK,CAAC,CACf,CAAChxB,GAAQkxB,KAAK,CAAC,CACf,CAAClxB,GAAQsO,KAAK,CAAC,CACf,CAACtO,GAAQuO,KAAK,CAAC,CACf,CAACvO,GAAQsxB,KAAK,CAAC,CACf,CAACtxB,GAAQwxB,KAAK,CAAC,CACf,CAACxxB,GAAQ0xB,KAAK,CAAC,CACf,CAAC1xB,GAAQ4xB,KAAK,CAAC,CACf,CAAC5xB,GAAQ2N,IAAI,CAAC,CACd,CAAC3N,GAAQ4N,IAAI,CAAC,CACd,CAAC5N,GAAQ6N,IAAI,CAAC,CACd,CAAC7N,GAAQ+N,MAAM,CAAC,CAChB,CAAC/N,GAAQiO,MAAM,CAAC,CAChB,CAACjO,GAAQgO,MAAM,CAAC,CAChB,CAAChO,GAAQmO,MAAM,CAAC,CAChB,CAACnO,GAAQkO,MAAM,CAAC,CAChB,CAAClO,GAAQoO,MAAM,CAAC,CAChB,CAACpO,GAAQ2O,SAAS,CAAC,CACnB,CAAC3O,GAAQ2yB,SAAS,CAAC,CACnB,CAAC3yB,GAAQ6O,YAAY,CAAC,CACtB,CAAC7O,GAAQwO,gBAAgB,CAAC,CAC1B,CAACxO,GAAQyO,mBAAmB,CAAC,CAC7B,CAACzO,GAAQ4O,eAAe,CAAC,CACzB,CAAC5O,GAAQ0O,sBAAsB,CAAC,CAChC,CAAC1O,GAAQizB,WAAW,CAAC,CACrB,CAACjzB,GAAQmzB,WAAW,CAAC,CACrB,CAACnzB,GAAQqzB,cAAc,CAAC,CACxB,CAACrzB,GAAQuzB,iBAAiB,CAAC,CAC3B,CAACvzB,GAAQyzB,WAAW,CAAC,CACrB,CAACzzB,GAAQ2zB,WAAW,CAAC,CACrB,CAAC3zB,GAAQ6zB,cAAc,CAAC,CACxB,CAAC7zB,GAAQ+zB,iBAAiB,CAAC,CAC5B,CACD1zB,GAAQe,+BAA+B,CAACkE,IAAI,EAG3C86B,GAAaC,2BAA2B,CACzCngC,GAAaqY,uBAAuB,CACpC,CAAC,CAACxY,GAAWgvB,EAAE,CAAC,CAAE,CAAC7uB,GAAauY,mCAAmC,CAAC,CAAC,CACrEpY,GAAQc,qBAAqB,CAACmE,IAAI,EAGjC86B,GAAaC,2BAA2B,CACzCngC,GAAa8W,oBAAoB,CACjC,CAAC,CAAC9W,GAAauX,cAAc,CAAC,CAAE,CAACvX,GAAa+W,cAAc,CAAE/W,GAAauX,cAAc,CAAC,CAAC,CAC3FpX,GAAQO,kBAAkB,CAAC0E,IAAI,EAG9B86B,GAAaC,2BAA2B,CACzCngC,GAAauX,cAAc,CAC3B,CACE,CAACvX,GAAaqY,uBAAuB,CAAC,CACtC,CAACrY,GAAauY,mCAAmC,CAAEvY,GAAayX,eAAe,CAAC,CACjF,CACDtX,GAAQU,aAAa,CAACuE,IAAI,EAGzB86B,GAAaC,2BAA2B,CACzCngC,GAAa+W,cAAc,CAC3B,CAAC,CAAC/W,GAAaiX,qBAAqB,CAAC,CAAE,CAACjX,GAAa+W,cAAc,CAAE/W,GAAaiX,qBAAqB,CAAC,CAAC,CACzG9W,GAAQQ,aAAa,CAACyE,IAAI,EAGzB86B,GAAaC,2BAA2B,CACzCngC,GAAaiX,qBAAqB,CAClC,CACE,CAACjX,GAAawkC,iBAAiB,CAAC,CAChC,CAACxkC,GAAaykC,mBAAmB,CAAC,CAClC,CAACzkC,GAAa0kC,uBAAuB,CAAC,CACtC,CAAC1kC,GAAa2kC,mBAAmB,CAAC,CAClC,CAAC7kC,GAAQs0B,OAAO,CAAC,CAClB,CACDj0B,GAAQS,mBAAmB,CAACwE,IAAI,EAG/B86B,GAAaC,2BAA2B,CACzCngC,GAAawkC,iBAAiB,CAC9B,CAAC,CAAC1kC,GAAQsvB,KAAK,CAAC,CAAE,CAACtvB,GAAQoyB,EAAE,CAAC,CAAE,CAACpyB,GAAQuyB,KAAK,CAAC,CAAE,CAACvyB,GAAQqyB,GAAG,CAAC,CAAE,CAACryB,GAAQs1B,QAAQ,CAAC,CAAC,EAMlF8K,GAAaC,2BAA2B,CACzCngC,GAAa0kC,uBAAuB,CACpC,CAAC,CAAC5kC,GAAQk1B,MAAM,CAAC,CAAE,CAACl1B,GAAQg1B,IAAI,CAAC,CAAC,EAMjCoL,GAAaC,2BAA2B,CACzCngC,GAAa2kC,mBAAmB,CAChC,CAAC,CAAC7kC,GAAQ80B,SAAS,CAAC,CAAC,EAMpBsL,GAAaC,2BAA2B,CACzCngC,GAAaykC,mBAAmB,CAChC,CAAC,CAAC3kC,GAAQw0B,KAAK,CAAC,CAAE,CAACx0B,GAAQ00B,OAAO,CAAC,CAAE,CAAC10B,GAAQ40B,IAAI,CAAC,CAAC,EAMnDwL,GAAaC,2BAA2B,CACzCngC,GAAawc,gBAAgB,CAC7B,CACE,CACE1c,GAAQsS,MAAM,CACdvS,GAAWgvB,EAAE,CACbhvB,GAAW0tB,UAAU,CACrBvtB,GAAayc,uBAAuB,CACpC5c,GAAW2tB,WAAW,CACtB3tB,GAAWkuB,SAAS,CACrB,CACD,CACEjuB,GAAQsS,MAAM,CACdvS,GAAW0tB,UAAU,CACrBvtB,GAAayc,uBAAuB,CACpC5c,GAAW2tB,WAAW,CACtB3tB,GAAWkuB,SAAS,CACrB,CACF,CACD5tB,GAAQ2C,eAAe,CAACsC,IAAI,EAG3B86B,GAAaC,2BAA2B,CACzCngC,GAAayc,uBAAuB,CACpC,CAAC,CAACzc,GAAakd,kBAAkB,CAAC,CAAE,CAACld,GAAayc,uBAAuB,CAAEzc,GAAakd,kBAAkB,CAAC,CAAC,CAC5G/c,GAAQ4C,qBAAqB,CAACqC,IAAI,EAGjC86B,GAAaC,2BAA2B,CACzCngC,GAAakd,kBAAkB,CAC/B,CACE,CAACld,GAAauX,cAAc,CAAEvX,GAAa+d,sBAAsB,CAAEle,GAAWkuB,SAAS,CAAC,CACxF,CACE/tB,GAAa+W,cAAc,CAC3B/W,GAAauX,cAAc,CAC3BvX,GAAa+d,sBAAsB,CACnCle,GAAWkuB,SAAS,CACrB,CACD,CACE/tB,GAAa6d,gBAAgB,CAC7B7d,GAAauX,cAAc,CAC3BvX,GAAage,iBAAiB,CAC9Bne,GAAWkuB,SAAS,CACrB,CACD,CAAC/tB,GAAa0d,wBAAwB,CAAC,CACxC,CACDvd,GAAQ6C,iBAAiB,CAACoC,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAa0d,wBAAwB,CACrC,CACE,CAAC1d,GAAauf,kBAAkB,CAAEvf,GAAayc,uBAAuB,CAAEzc,GAAa4d,mBAAmB,CAAC,CACzG,CAAC5d,GAAauf,kBAAkB,CAAEvf,GAAa4d,mBAAmB,CAAC,CACpE,CACDzd,GAAQ8C,sBAAsB,CAACmC,IAAI,EAGlC86B,GAAaC,2BAA2B,CACzCngC,GAAa4d,mBAAmB,CAChC,CACE,CAAC5d,GAAawf,iBAAiB,CAAC,CAChC,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAayc,uBAAuB,CAAEzc,GAAa4d,mBAAmB,CAAC,CAC5G,CAAC5d,GAAa0f,qBAAqB,CAAE1f,GAAayc,uBAAuB,CAAEzc,GAAawf,iBAAiB,CAAC,CAC1G,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAa4d,mBAAmB,CAAC,CACtE,CAAC5d,GAAa0f,qBAAqB,CAAE1f,GAAawf,iBAAiB,CAAC,CACrE,CACDrf,GAAQ+C,iBAAiB,CAACkC,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAa6d,gBAAgB,CAC7B,CACE,CACE/d,GAAQw1B,MAAM,CACdz1B,GAAWwtB,UAAU,CACrBvtB,GAAQy1B,QAAQ,CAChB11B,GAAW0sB,KAAK,CAChB1sB,GAAWic,YAAY,CACvBjc,GAAWytB,WAAW,CACvB,CACF,CACDntB,GAAQgD,eAAe,CAACiC,IAAI,EAG3B86B,GAAaC,2BAA2B,CACzCngC,GAAa+d,sBAAsB,CACnC,CACE,CAAC/d,GAAage,iBAAiB,CAAC,CAChC,CAAChe,GAAa+d,sBAAsB,CAAEle,GAAWguB,KAAK,CAAE7tB,GAAage,iBAAiB,CAAC,CACxF,CACD7d,GAAQiD,oBAAoB,CAACgC,IAAI,EAGhC86B,GAAaC,2BAA2B,CACzCngC,GAAage,iBAAiB,CAC9B,CAAC,CAACne,GAAWgvB,EAAE,CAAC,CAAE,CAAChvB,GAAWgvB,EAAE,CAAE7uB,GAAayX,eAAe,CAAC,CAAC,CAChEtX,GAAQkD,gBAAgB,CAAC+B,IAAI,EAG5B86B,GAAaC,2BAA2B,CACzCngC,GAAayX,eAAe,CAC5B,CACE,CAAC5X,GAAW4tB,YAAY,CAAE5tB,GAAW6tB,aAAa,CAAC,CACnD,CAAC7tB,GAAW4tB,YAAY,CAAEztB,GAAamY,2BAA2B,CAAEtY,GAAW6tB,aAAa,CAAC,CAC9F,CACDvtB,GAAQW,cAAc,CAACsE,IAAI,EAG1B86B,GAAaC,2BAA2B,CACzCngC,GAAakY,oCAAoC,CACjD,CAAC,CAACrY,GAAW8X,IAAI,CAAC,CAAE,CAAC9X,GAAWiY,IAAI,CAAC,CAAE,CAACjY,GAAWkY,IAAI,CAAC,CAAE,CAAClY,GAAWmY,KAAK,CAAC,CAAE,CAACnY,GAAWoY,OAAO,CAAC,CAAC,CACnG9X,GAAQY,iCAAiC,CAACqE,IAAI,EAG7C86B,GAAaC,2BAA2B,CACzCngC,GAAamY,2BAA2B,CACxC,CACE,CAACnY,GAAamf,mBAAmB,CAAC,CAClC,CAACtf,GAAWic,YAAY,CAAC,CACzB,CACE9b,GAAamY,2BAA2B,CACxCnY,GAAakY,oCAAoC,CACjDrY,GAAWic,YAAY,CACxB,CACD,CACE9b,GAAamY,2BAA2B,CACxCnY,GAAakY,oCAAoC,CACjDlY,GAAamf,mBAAmB,CACjC,CACF,CACDhf,GAAQa,yBAAyB,CAACoE,IAAI,EAGrC86B,GAAaC,2BAA2B,CACzCngC,GAAa4kC,sBAAsB,CACnC,CACE,CAAC5kC,GAAa6kC,qBAAqB,CAAC,CACpC,CACE7kC,GAAa6kC,qBAAqB,CAClChlC,GAAWouB,QAAQ,CACnBjuB,GAAa6b,UAAU,CACvBhc,GAAWiuB,KAAK,CAChB9tB,GAAa4b,qBAAqB,CACnC,CACF,EAMAskB,GAAaC,2BAA2B,CACzCngC,GAAa6kC,qBAAqB,CAClC,CACE,CAAC7kC,GAAa8kC,sBAAsB,CAAC,CACrC,CAAC9kC,GAAa6kC,qBAAqB,CAAEhlC,GAAW+sB,KAAK,CAAE5sB,GAAa8kC,sBAAsB,CAAC,CAC5F,EAMA5E,GAAaC,2BAA2B,CACzCngC,GAAa8kC,sBAAsB,CACnC,CACE,CAAC9kC,GAAa+kC,sBAAsB,CAAC,CACrC,CAAC/kC,GAAa8kC,sBAAsB,CAAEjlC,GAAWktB,MAAM,CAAE/sB,GAAa+kC,sBAAsB,CAAC,CAC9F,EAMA7E,GAAaC,2BAA2B,CACzCngC,GAAa+kC,sBAAsB,CACnC,CACE,CAAC/kC,GAAaglC,uBAAuB,CAAC,CACtC,CAAChlC,GAAa+kC,sBAAsB,CAAEllC,GAAW6sB,MAAM,CAAE1sB,GAAaglC,uBAAuB,CAAC,CAC/F,EAMA9E,GAAaC,2BAA2B,CACzCngC,GAAaglC,uBAAuB,CACpC,CACE,CAAChlC,GAAailC,uBAAuB,CAAC,CACtC,CAACjlC,GAAaglC,uBAAuB,CAAEnlC,GAAWitB,YAAY,CAAE9sB,GAAailC,uBAAuB,CAAC,CACtG,EAMA/E,GAAaC,2BAA2B,CACzCngC,GAAailC,uBAAuB,CACpC,CACE,CAACjlC,GAAaklC,cAAc,CAAC,CAC7B,CAACllC,GAAailC,uBAAuB,CAAEplC,GAAWotB,KAAK,CAAEjtB,GAAaklC,cAAc,CAAC,CACtF,EAMAhF,GAAaC,2BAA2B,CACzCngC,GAAaklC,cAAc,CAC3B,CACE,CAACllC,GAAamlC,mBAAmB,CAAC,CAClC,CAACnlC,GAAaklC,cAAc,CAAErlC,GAAW8sB,SAAS,CAAE3sB,GAAamlC,mBAAmB,CAAC,CACtF,EAMAjF,GAAaC,2BAA2B,CACzCngC,GAAamlC,mBAAmB,CAChC,CACE,CAACnlC,GAAaolC,qBAAqB,CAAC,CACpC,CAACplC,GAAamlC,mBAAmB,CAAEtlC,GAAWysB,KAAK,CAAEtsB,GAAaolC,qBAAqB,CAAC,CACxF,CAACplC,GAAamlC,mBAAmB,CAAEtlC,GAAW2sB,KAAK,CAAExsB,GAAaolC,qBAAqB,CAAC,CACzF,EAMAlF,GAAaC,2BAA2B,CACzCngC,GAAaolC,qBAAqB,CAClC,CACE,CAACplC,GAAaqlC,gBAAgB,CAAC,CAC/B,CAACrlC,GAAaolC,qBAAqB,CAAEvlC,GAAWgsB,UAAU,CAAE7rB,GAAaqlC,gBAAgB,CAAC,CAC1F,CAACrlC,GAAaolC,qBAAqB,CAAEvlC,GAAWosB,WAAW,CAAEjsB,GAAaqlC,gBAAgB,CAAC,CAC3F,CAACrlC,GAAaolC,qBAAqB,CAAEvlC,GAAW+rB,KAAK,CAAE5rB,GAAaqlC,gBAAgB,CAAC,CACrF,CAACrlC,GAAaolC,qBAAqB,CAAEvlC,GAAWmsB,KAAK,CAAEhsB,GAAaqlC,gBAAgB,CAAC,CACtF,EAMAnF,GAAaC,2BAA2B,CACzCngC,GAAaqlC,gBAAgB,CAC7B,CACE,CAACrlC,GAAaslC,mBAAmB,CAAC,CAClC,CAACtlC,GAAaqlC,gBAAgB,CAAExlC,GAAW8rB,OAAO,CAAE3rB,GAAaslC,mBAAmB,CAAC,CACrF,CAACtlC,GAAaqlC,gBAAgB,CAAExlC,GAAWksB,QAAQ,CAAE/rB,GAAaslC,mBAAmB,CAAC,CACvF,EAMApF,GAAaC,2BAA2B,CACzCngC,GAAaslC,mBAAmB,CAChC,CACE,CAACtlC,GAAaulC,yBAAyB,CAAC,CACxC,CAACvlC,GAAaslC,mBAAmB,CAAEzlC,GAAW8X,IAAI,CAAE3X,GAAaulC,yBAAyB,CAAC,CAC3F,CAACvlC,GAAaslC,mBAAmB,CAAEzlC,GAAWiY,IAAI,CAAE9X,GAAaulC,yBAAyB,CAAC,CAC5F,EAMArF,GAAaC,2BAA2B,CACzCngC,GAAaulC,yBAAyB,CACtC,CACE,CAACvlC,GAAawlC,gBAAgB,CAAC,CAC/B,CAACxlC,GAAaulC,yBAAyB,CAAE1lC,GAAWkY,IAAI,CAAE/X,GAAawlC,gBAAgB,CAAC,CACxF,CAACxlC,GAAaulC,yBAAyB,CAAE1lC,GAAWmY,KAAK,CAAEhY,GAAawlC,gBAAgB,CAAC,CACzF,CAACxlC,GAAaulC,yBAAyB,CAAE1lC,GAAWoY,OAAO,CAAEjY,GAAawlC,gBAAgB,CAAC,CAC5F,EAMAtF,GAAaC,2BAA2B,CACzCngC,GAAawlC,gBAAgB,CAC7B,CACE,CAACxlC,GAAaoc,kBAAkB,CAAC,CACjC,CAACvc,GAAWqsB,MAAM,CAAElsB,GAAawlC,gBAAgB,CAAC,CAClD,CAAC3lC,GAAWusB,MAAM,CAAEpsB,GAAawlC,gBAAgB,CAAC,CAClD,CAACxlC,GAAaylC,cAAc,CAAEzlC,GAAawlC,gBAAgB,CAAC,CAC7D,EAMAtF,GAAaC,2BAA2B,CACzCngC,GAAaylC,cAAc,CAC3B,CAAC,CAAC5lC,GAAW8X,IAAI,CAAC,CAAE,CAAC9X,GAAWiY,IAAI,CAAC,CAAE,CAACjY,GAAW4sB,IAAI,CAAC,CAAE,CAAC5sB,GAAWmuB,KAAK,CAAC,CAAC,EAM5EkS,GAAaC,2BAA2B,CACzCngC,GAAaoc,kBAAkB,CAC/B,CACE,CAACpc,GAAakc,kBAAkB,CAAC,CACjC,CAAClc,GAAaoc,kBAAkB,CAAEvc,GAAW4tB,YAAY,CAAEztB,GAAa6b,UAAU,CAAEhc,GAAW6tB,aAAa,CAAC,CAC7G,CAAC1tB,GAAa2a,aAAa,CAAC,CAC5B,CAAC3a,GAAaoc,kBAAkB,CAAEvc,GAAW+tB,GAAG,CAAE/tB,GAAWgvB,EAAE,CAAC,CAChE,CAAC7uB,GAAaoc,kBAAkB,CAAEvc,GAAW+tB,GAAG,CAAE5tB,GAAa2a,aAAa,CAAC,CAC7E,CAAC3a,GAAaoc,kBAAkB,CAAEvc,GAAWqsB,MAAM,CAAC,CACpD,CAAClsB,GAAaoc,kBAAkB,CAAEvc,GAAWusB,MAAM,CAAC,CACrD,CACDjsB,GAAQ0C,iBAAiB,CAACuC,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAakc,kBAAkB,CAC/B,CACE,CAAClc,GAAamf,mBAAmB,CAAC,CAClC,CAACtf,GAAWic,YAAY,CAAC,CACzB,CAACjc,GAAWkc,cAAc,CAAC,CAC3B,CAACjc,GAAQkc,IAAI,CAAC,CACd,CAAClc,GAAQmc,KAAK,CAAC,CACf,CAACpc,GAAWwtB,UAAU,CAAErtB,GAAa6b,UAAU,CAAEhc,GAAWytB,WAAW,CAAC,CACzE,CACDntB,GAAQyC,iBAAiB,CAACwC,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAa6b,UAAU,CACvB,CACE,CAAC7b,GAAa4b,qBAAqB,CAAC,CACpC,CAAC5b,GAAa6b,UAAU,CAAEhc,GAAWguB,KAAK,CAAE7tB,GAAa4b,qBAAqB,CAAC,CAChF,CACDzb,GAAQwC,UAAU,CAACyC,IAAI,EAGtB86B,GAAaC,2BAA2B,CACzCngC,GAAa4b,qBAAqB,CAClC,CACE,CAAC5b,GAAa4kC,sBAAsB,CAAC,CACrC,CAAC5kC,GAAawlC,gBAAgB,CAAExlC,GAAa0lC,mBAAmB,CAAE1lC,GAAa4b,qBAAqB,CAAC,CACtG,CACDzb,GAAQuC,oBAAoB,CAAC0C,IAAI,EAGhC86B,GAAaC,2BAA2B,CACzCngC,GAAa0lC,mBAAmB,CAChC,CACE,CAAC7lC,GAAW0sB,KAAK,CAAC,CAClB,CAAC1sB,GAAWqtB,UAAU,CAAC,CACvB,CAACrtB,GAAWstB,UAAU,CAAC,CACvB,CAACttB,GAAWutB,UAAU,CAAC,CACvB,CAACvtB,GAAWssB,UAAU,CAAC,CACvB,CAACtsB,GAAWwsB,UAAU,CAAC,CACvB,CAACxsB,GAAW6rB,WAAW,CAAC,CACxB,CAAC7rB,GAAWisB,YAAY,CAAC,CACzB,CAACjsB,GAAW8lC,UAAU,CAAC,CACvB,CAAC9lC,GAAWmtB,UAAU,CAAC,CACvB,CAACntB,GAAWgtB,SAAS,CAAC,CACvB,EAMAqT,GAAaC,2BAA2B,CACzCngC,GAAa2a,aAAa,CAC1B,CAAC,CAAC3a,GAAakb,qBAAqB,CAAC,CAAC,CACtC/a,GAAQ+B,YAAY,CAACkD,IAAI,EAGxB86B,GAAaC,2BAA2B,CACzCngC,GAAakb,qBAAqB,CAClC,CACE,CACElb,GAAa2b,mBAAmB,CAChC9b,GAAWwtB,UAAU,CACrBrtB,GAAaqb,4BAA4B,CACzCxb,GAAWytB,WAAW,CACvB,CACD,CAACttB,GAAa2b,mBAAmB,CAAE9b,GAAWwtB,UAAU,CAAExtB,GAAWytB,WAAW,CAAC,CACjF,CAACttB,GAAa2b,mBAAmB,CAAE7b,GAAQya,IAAI,CAAE1a,GAAWytB,WAAW,CAAC,CACzE,CACDntB,GAAQgC,mBAAmB,CAACiD,IAAI,EAG/B86B,GAAaC,2BAA2B,CACzCngC,GAAaqb,4BAA4B,CACzC,CACE,CAACrb,GAAa4b,qBAAqB,CAAC,CACpC,CAAC5b,GAAaqb,4BAA4B,CAAExb,GAAWguB,KAAK,CAAE7tB,GAAa4b,qBAAqB,CAAC,CACjG,CAAC5b,GAAaub,oBAAoB,CAAC,CACnC,CAACvb,GAAaqb,4BAA4B,CAAErb,GAAaub,oBAAoB,CAAC,CAC/E,CACDpb,GAAQiC,yBAAyB,CAACgD,IAAI,EAGrC86B,GAAaC,2BAA2B,CACzCngC,GAAasb,wBAAwB,CACrC,CACE,CAACtb,GAAa4b,qBAAqB,CAAC,CACpC,CAAC/b,GAAWguB,KAAK,CAAE7tB,GAAa4b,qBAAqB,CAAC,CACtD,CAAC5b,GAAaub,oBAAoB,CAAC,CACnC,CAACvb,GAAasb,wBAAwB,CAAEtb,GAAaub,oBAAoB,CAAC,CAC1E,CAACvb,GAAasb,wBAAwB,CAAEzb,GAAWguB,KAAK,CAAE7tB,GAAa4b,qBAAqB,CAAC,CAC9F,CACDzb,GAAQkC,oBAAoB,CAAC+C,IAAI,EAGhC86B,GAAaC,2BAA2B,CACzCngC,GAAaub,oBAAoB,CACjC,CACE,CAACvb,GAAauf,kBAAkB,CAAEvf,GAAawb,qBAAqB,CAAC,CACrE,CAACxb,GAAauf,kBAAkB,CAAEvf,GAAasb,wBAAwB,CAAEtb,GAAawb,qBAAqB,CAAC,CAC7G,CACDrb,GAAQmC,iBAAiB,CAAC8C,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAawb,qBAAqB,CAClC,CACE,CAACxb,GAAawf,iBAAiB,CAAC,CAChC,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAasb,wBAAwB,CAAEtb,GAAawb,qBAAqB,CAAC,CAC/G,CAACxb,GAAa0f,qBAAqB,CAAE1f,GAAasb,wBAAwB,CAAEtb,GAAawf,iBAAiB,CAAC,CAC3G,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAawb,qBAAqB,CAAC,CACxE,CAACxb,GAAa0f,qBAAqB,CAAE1f,GAAawf,iBAAiB,CAAC,CACrE,CACDrf,GAAQoC,kBAAkB,CAAC6C,IAAI,EAG9B86B,GAAaC,2BAA2B,CACzCngC,GAAa2b,mBAAmB,CAChC,CAAC,CAAC3b,GAAauX,cAAc,CAAC,CAAC,CAC/BpX,GAAQsC,kBAAkB,CAAC2C,IAAI,EAG9B86B,GAAaC,2BAA2B,CACzCngC,GAAaya,mBAAmB,CAChC,CAAC,CAACza,GAAaoZ,kBAAkB,CAAEpZ,GAAama,2BAA2B,CAAC,CAAC,CAC7Eha,GAAQ8B,kBAAkB,CAACmD,IAAI,EAG9B86B,GAAaC,2BAA2B,CACzCngC,GAAaoZ,kBAAkB,CAC/B,CAAC,CAACpZ,GAAasZ,mBAAmB,CAAEzZ,GAAWytB,WAAW,CAAC,CAAC,CAC5DntB,GAAQmB,iBAAiB,CAAC8D,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAasZ,mBAAmB,CAChC,CAAC,CAACtZ,GAAawZ,eAAe,CAAC,CAAE,CAACxZ,GAAawZ,eAAe,CAAExZ,GAAa2Z,uBAAuB,CAAC,CAAC,CACtGxZ,GAAQoB,kBAAkB,CAAC6D,IAAI,EAG9B86B,GAAaC,2BAA2B,CACzCngC,GAAawZ,eAAe,CAC5B,CAAC,CAACxZ,GAAa8W,oBAAoB,CAAEjX,GAAWgvB,EAAE,CAAEhvB,GAAWwtB,UAAU,CAAC,CAAC,CAC3EltB,GAAQqB,cAAc,CAAC4D,IAAI,EAG1B86B,GAAaC,2BAA2B,CACzCngC,GAAa2Z,uBAAuB,CACpC,CACE,CAAC3Z,GAAaia,qBAAqB,CAAC,CACpC,CAACja,GAAa2Z,uBAAuB,CAAE9Z,GAAWguB,KAAK,CAAE7tB,GAAaia,qBAAqB,CAAC,CAC5F,CAACja,GAAa6Z,iBAAiB,CAAC,CAChC,CAAC7Z,GAAa2Z,uBAAuB,CAAE3Z,GAAa6Z,iBAAiB,CAAC,CACvE,CACD1Z,GAAQsB,qBAAqB,CAAC2D,IAAI,EAGjC86B,GAAaC,2BAA2B,CACzCngC,GAAa4Z,qBAAqB,CAClC,CACE,CAAC5Z,GAAaia,qBAAqB,CAAC,CACpC,CAACpa,GAAWguB,KAAK,CAAE7tB,GAAaia,qBAAqB,CAAC,CACtD,CAACja,GAAa6Z,iBAAiB,CAAC,CAChC,CAAC7Z,GAAa4Z,qBAAqB,CAAE5Z,GAAa6Z,iBAAiB,CAAC,CACpE,CAAC7Z,GAAa4Z,qBAAqB,CAAE/Z,GAAWguB,KAAK,CAAE7tB,GAAaia,qBAAqB,CAAC,CAC3F,CACD9Z,GAAQuB,kBAAkB,CAAC0D,IAAI,EAG9B86B,GAAaC,2BAA2B,CACzCngC,GAAa6Z,iBAAiB,CAC9B,CACE,CAAC7Z,GAAauf,kBAAkB,CAAEvf,GAAa8Z,sBAAsB,CAAC,CACtE,CAAC9Z,GAAauf,kBAAkB,CAAEvf,GAAa4Z,qBAAqB,CAAE5Z,GAAa8Z,sBAAsB,CAAC,CAC3G,CACD3Z,GAAQwB,eAAe,CAACyD,IAAI,EAG3B86B,GAAaC,2BAA2B,CACzCngC,GAAa8Z,sBAAsB,CACnC,CACE,CAAC9Z,GAAawf,iBAAiB,CAAC,CAChC,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAa4Z,qBAAqB,CAAE5Z,GAAa8Z,sBAAsB,CAAC,CAC7G,CAAC9Z,GAAa0f,qBAAqB,CAAE1f,GAAa4Z,qBAAqB,CAAE5Z,GAAawf,iBAAiB,CAAC,CACxG,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAa8Z,sBAAsB,CAAC,CACzE,CAAC9Z,GAAa0f,qBAAqB,CAAE1f,GAAawf,iBAAiB,CAAC,CACrE,CACDrf,GAAQyB,oBAAoB,CAACwD,IAAI,EAGhC86B,GAAaC,2BAA2B,CACzCngC,GAAaia,qBAAqB,CAClC,CACE,CAACja,GAAa+W,cAAc,CAAE/W,GAAaka,oBAAoB,CAAC,CAChE,CAACla,GAAaka,oBAAoB,CAAC,CACnC,CAACla,GAAaggB,iBAAiB,CAAC,CAChC,CAAChgB,GAAakgB,mBAAmB,CAAC,CACnC,CACD/f,GAAQ0B,oBAAoB,CAACuD,IAAI,EAGhC86B,GAAaC,2BAA2B,CACzCngC,GAAaka,oBAAoB,CACjC,CACE,CAACla,GAAauX,cAAc,CAAE1X,GAAWgvB,EAAE,CAAC,CAC5C,CAAC7uB,GAAauX,cAAc,CAAE1X,GAAWgvB,EAAE,CAAE7uB,GAAayX,eAAe,CAAC,CAC3E,CACDtX,GAAQ2B,mBAAmB,CAACsD,IAAI,EAG/B86B,GAAaC,2BAA2B,CACzCngC,GAAaqa,cAAc,CAC3B,CAAC,CAACra,GAAa4lC,SAAS,CAAC,CAAE,CAAC5lC,GAAaqa,cAAc,CAAEra,GAAa4lC,SAAS,CAAC,CAAC,CACjFzlC,GAAQ6B,aAAa,CAACoD,IAAI,EAGzB86B,GAAaC,2BAA2B,CACzCngC,GAAa4lC,SAAS,CACtB,CAAC,CAAC5lC,GAAa6lC,kBAAkB,CAAC,CAAE,CAAC7lC,GAAa8lC,gBAAgB,CAAC,CAAC,EAMnE5F,GAAaC,2BAA2B,CACzCngC,GAAama,2BAA2B,CACxC,CACE,CAACta,GAAW0tB,UAAU,CAAE1tB,GAAW2tB,WAAW,CAAC,CAC/C,CAAC3tB,GAAW0tB,UAAU,CAAEvtB,GAAaqa,cAAc,CAAExa,GAAW2tB,WAAW,CAAC,CAC7E,CACDrtB,GAAQ4B,wBAAwB,CAACqD,IAAI,EAGpC86B,GAAaC,2BAA2B,CACzCngC,GAAa6lC,kBAAkB,CAC/B,CACE,CAAChmC,GAAW0tB,UAAU,CAAE1tB,GAAW2tB,WAAW,CAAC,CAC/C,CAACxtB,GAAa8V,WAAW,CAAE9V,GAAaqa,cAAc,CAAEra,GAAa+V,eAAe,CAAC,CACtF,EAMAmqB,GAAaC,2BAA2B,CACzCngC,GAAa8lC,gBAAgB,CAC7B,CACE,CAAC9lC,GAAagZ,WAAW,CAAC,CAC1B,CAAChZ,GAAa+lC,oBAAoB,CAAC,CACnC,CAAC/lC,GAAagmC,mBAAmB,CAAC,CAClC,CAAChmC,GAAaimC,mBAAmB,CAAC,CAClC,CAACjmC,GAAaoW,cAAc,CAAC,CAC7B,CAACpW,GAAa8f,kBAAkB,CAAC,CACjC,CAAC9f,GAAasf,WAAW,CAAC,CAC1B,CAACxf,GAAQ4uB,uBAAuB,CAAC,CAClC,EAMAwR,GAAaC,2BAA2B,CACzCngC,GAAagZ,WAAW,CACxB,CACE,CAAChZ,GAAaoZ,kBAAkB,CAAEvZ,GAAWkuB,SAAS,CAAC,CACvD,CAAC/tB,GAAa0Y,oBAAoB,CAAE7Y,GAAWkuB,SAAS,CAAC,CACzD,CACEjuB,GAAQo0B,SAAS,CACjBl0B,GAAaykC,mBAAmB,CAChCzkC,GAAauY,mCAAmC,CAChD1Y,GAAWkuB,SAAS,CACrB,CACD,CAAC/tB,GAAa+W,cAAc,CAAElX,GAAWgvB,EAAE,CAAEhvB,GAAWkuB,SAAS,CAAC,CAClE,CAAC/tB,GAAa+W,cAAc,CAAElX,GAAWgvB,EAAE,CAAE7uB,GAAa8Y,eAAe,CAAEjZ,GAAWkuB,SAAS,CAAC,CACjG,CACD5tB,GAAQkB,WAAW,CAAC+D,IAAI,EAGvB86B,GAAaC,2BAA2B,CACzCngC,GAAa8Y,eAAe,CAC5B,CACE,CAACjZ,GAAWguB,KAAK,CAAEhuB,GAAWgvB,EAAE,CAAC,CACjC,CAAC7uB,GAAa8Y,eAAe,CAAEjZ,GAAWguB,KAAK,CAAEhuB,GAAWgvB,EAAE,CAAC,CAChE,CACD1uB,GAAQiB,cAAc,CAACgE,IAAI,EAG1B86B,GAAaC,2BAA2B,CACzCngC,GAAa0Y,oBAAoB,CACjC,CACE,CAAC1Y,GAAa6W,kBAAkB,CAAC,CACjC,CAAC7W,GAAa0Y,oBAAoB,CAAE7Y,GAAWguB,KAAK,CAAEhuB,GAAWgvB,EAAE,CAAC,CACpE,CAAC7uB,GAAa0Y,oBAAoB,CAAE7Y,GAAWguB,KAAK,CAAEhuB,GAAWgvB,EAAE,CAAE7uB,GAAayX,eAAe,CAAC,CAClG,CACEzX,GAAa0Y,oBAAoB,CACjC7Y,GAAWguB,KAAK,CAChBhuB,GAAWgvB,EAAE,CACb7uB,GAAayX,eAAe,CAC5B5X,GAAW0sB,KAAK,CAChBvsB,GAAa2W,WAAW,CACzB,CACD,CAAC3W,GAAa0Y,oBAAoB,CAAE7Y,GAAWguB,KAAK,CAAEhuB,GAAWgvB,EAAE,CAAEhvB,GAAW0sB,KAAK,CAAEvsB,GAAa2W,WAAW,CAAC,CACjH,CACDxW,GAAQgB,kBAAkB,CAACiE,IAAI,EAG9B86B,GAAaC,2BAA2B,CACzCngC,GAAa6W,kBAAkB,CAC/B,CACE,CAAC7W,GAAa8W,oBAAoB,CAAEjX,GAAWgvB,EAAE,CAAC,CAClD,CAAC7uB,GAAa8W,oBAAoB,CAAEjX,GAAWgvB,EAAE,CAAE7uB,GAAayX,eAAe,CAAC,CAChF,CACEzX,GAAa8W,oBAAoB,CACjCjX,GAAWgvB,EAAE,CACb7uB,GAAayX,eAAe,CAC5B5X,GAAW0sB,KAAK,CAChBvsB,GAAa2W,WAAW,CACzB,CACD,CAAC3W,GAAa8W,oBAAoB,CAAEjX,GAAWgvB,EAAE,CAAEhvB,GAAW0sB,KAAK,CAAEvsB,GAAa2W,WAAW,CAAC,CAC/F,CACDxW,GAAQM,iBAAiB,CAAC2E,IAAI,EAG7B86B,GAAaC,2BAA2B,CACzCngC,GAAa2W,WAAW,CACxB,CACE,CAAC3W,GAAa4b,qBAAqB,CAAC,CACpC,CAAC/b,GAAW0tB,UAAU,CAAEvtB,GAAakmC,gBAAgB,CAAErmC,GAAW2tB,WAAW,CAAC,CAC/E,EAMA0S,GAAaC,2BAA2B,CACzCngC,GAAakmC,gBAAgB,CAC7B,CAAC,CAAClmC,GAAa2W,WAAW,CAAC,CAAE,CAAC3W,GAAakmC,gBAAgB,CAAErmC,GAAWguB,KAAK,CAAE7tB,GAAa2W,WAAW,CAAC,CAAC,EAMxGupB,GAAaC,2BAA2B,CACzCngC,GAAa+lC,oBAAoB,CACjC,CAAC,CAAClmC,GAAWkuB,SAAS,CAAC,CAAE,CAAC/tB,GAAa6b,UAAU,CAAEhc,GAAWkuB,SAAS,CAAC,CAAC,EAOxEmS,GAAaC,2BAA2B,CACzCngC,GAAagmC,mBAAmB,CAChC,CACE,CAAClmC,GAAQwwB,EAAE,CAAEzwB,GAAWwtB,UAAU,CAAErtB,GAAa6b,UAAU,CAAEhc,GAAWytB,WAAW,CAAEttB,GAAa4lC,SAAS,CAAC,CAC5G,CACE9lC,GAAQwwB,EAAE,CACVzwB,GAAWwtB,UAAU,CACrBrtB,GAAa6b,UAAU,CACvBhc,GAAWytB,WAAW,CACtBttB,GAAa4lC,SAAS,CACtB9lC,GAAQowB,IAAI,CACZlwB,GAAa4lC,SAAS,CACvB,CACF,EAMA1F,GAAaC,2BAA2B,CACzCngC,GAAaimC,mBAAmB,CAChC,CACE,CAACnmC,GAAQ0wB,KAAK,CAAE3wB,GAAWwtB,UAAU,CAAErtB,GAAammC,SAAS,CAAEtmC,GAAWytB,WAAW,CAAEttB,GAAa4lC,SAAS,CAAC,CAC9G,CACE9lC,GAAQswB,GAAG,CACXvwB,GAAWwtB,UAAU,CACrBrtB,GAAaomC,kBAAkB,CAC/BpmC,GAAaqmC,kBAAkB,CAC/BxmC,GAAWytB,WAAW,CACtBttB,GAAa4lC,SAAS,CACvB,CACF,EAMA1F,GAAaC,2BAA2B,CACzCngC,GAAayb,mBAAmB,CAChC,CACE,CACE3b,GAAQo0B,SAAS,CACjBl0B,GAAaykC,mBAAmB,CAChCzkC,GAAauY,mCAAmC,CAChD1Y,GAAWkuB,SAAS,CACrB,CACF,CACD5tB,GAAQqC,kBAAkB,CAAC4C,IAAI,EAG9B86B,GAAaC,2BAA2B,CACzCngC,GAAaomC,kBAAkB,CAC/B,CAAC,CAACpmC,GAAa+lC,oBAAoB,CAAC,CAAE,CAAC/lC,GAAagZ,WAAW,CAAC,CAAC,EAMhEknB,GAAaC,2BAA2B,CACzCngC,GAAammC,SAAS,CACtB,CACE,CAACnmC,GAAa6b,UAAU,CAAC,CACzB,CAAC7b,GAAa8W,oBAAoB,CAAEjX,GAAWgvB,EAAE,CAAEhvB,GAAW0sB,KAAK,CAAEvsB,GAAa2W,WAAW,CAAC,CAC/F,EAMAupB,GAAaC,2BAA2B,CACzCngC,GAAaqmC,kBAAkB,CAC/B,CACE,CAACrmC,GAAasmC,YAAY,CAAEzmC,GAAWkuB,SAAS,CAAC,CACjD,CAAC/tB,GAAasmC,YAAY,CAAEzmC,GAAWkuB,SAAS,CAAE/tB,GAAa6b,UAAU,CAAC,CAC3E,EAMAqkB,GAAaC,2BAA2B,CACzCngC,GAAasmC,YAAY,CACzB,CAAC,CAACzmC,GAAWi/B,OAAO,CAAC,CAAE,CAAC9+B,GAAammC,SAAS,CAAC,CAAC,EAM/CjG,GAAaC,2BAA2B,CACzCngC,GAAaoW,cAAc,CAC3B,CACE,CAACtW,GAAQgwB,QAAQ,CAAEjwB,GAAWkuB,SAAS,CAAC,CACxC,CAACjuB,GAAQ8vB,KAAK,CAAE/vB,GAAWkuB,SAAS,CAAC,CACrC,CAACjuB,GAAQmW,MAAM,CAAEpW,GAAWkuB,SAAS,CAAC,CACtC,CAACjuB,GAAQmW,MAAM,CAAEjW,GAAa6b,UAAU,CAAEhc,GAAWkuB,SAAS,CAAC,CAC/D,CAACjuB,GAAQ4wB,OAAO,CAAE7wB,GAAWkuB,SAAS,CAAC,CACxC,CACD5tB,GAAQI,aAAa,CAAC6E,IAAI,EAGzB86B,GAAaC,2BAA2B,CACzCngC,GAAa8V,WAAW,CACxB,CAAC,CAACjW,GAAW0tB,UAAU,CAAC,CAAC,CACzBptB,GAAQE,UAAU,CAAC+E,IAAI,EAGtB86B,GAAaC,2BAA2B,CACzCngC,GAAa+V,eAAe,CAC5B,CAAC,CAAClW,GAAW2tB,WAAW,CAAC,CAAC,CAC1BrtB,GAAQG,aAAa,CAAC8E,IAAI,EAGzB86B,GAAaC,2BAA2B,CACzCngC,GAAamf,mBAAmB,CAChC,CAAC,CAACtf,GAAWgvB,EAAE,CAAC,CAAE,CAAC7uB,GAAaggB,iBAAiB,CAAC,CAAE,CAAChgB,GAAakgB,mBAAmB,CAAC,CAAC,CACvF/f,GAAQqD,kBAAkB,CAAC4B,IAAI,EAI9B86B,GAAaC,2BAA2B,CACzCngC,GAAa8f,kBAAkB,CAC/B,CACE,CAAC9f,GAAauf,kBAAkB,CAAEvf,GAAaqa,cAAc,CAAEra,GAAa+f,YAAY,CAAC,CACzF,CAAC/f,GAAauf,kBAAkB,CAAEvf,GAAa+f,YAAY,CAAC,CAC7D,CACD5f,GAAQgE,gBAAgB,CAACiB,IAAI,EAG5B86B,GAAaC,2BAA2B,CACzCngC,GAAa+f,YAAY,CACzB,CACE,CAAC/f,GAAawf,iBAAiB,CAAC,CAChC,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAaqa,cAAc,CAAEra,GAAa+f,YAAY,CAAC,CAC5F,CAAC/f,GAAa0f,qBAAqB,CAAE1f,GAAaqa,cAAc,CAAEra,GAAawf,iBAAiB,CAAC,CACjG,CAACxf,GAAayf,qBAAqB,CAAEzf,GAAa+f,YAAY,CAAC,CAC/D,CAAC/f,GAAa0f,qBAAqB,CAAE1f,GAAawf,iBAAiB,CAAC,CACrE,CACDrf,GAAQiE,WAAW,CAACgB,IAAI,GAUtBoO,GAAqB,SAACmC,CAAAA,EAC1B,IAAK,IAAIzY,EAAI,EAAGA,EAAIonC,GAAmBnnC,MAAM,CAAED,IAAK,CAClD,IAAMwW,EAAO4wB,EAAkB,CAACpnC,EAAE,CAAC,EAAE,CACjCwW,GACFiC,EAAGnC,kBAAkB,CAACtW,EAAGwW,EAE7B,CACF,ECniCa6yB,GAAN,WAAA,EAAA,WAAMA,SAAAA,EAsCStF,CAA6B,CAAEC,CAAyB,CAAEJ,CAAgB,EAjCtF0F,IAAAA,CAAAA,eAAAA,CAA+C,EAAE,CAkCvD,IAAI,CAACvF,WAAW,CAAGA,EACnB,IAAI,CAACC,SAAS,CAAGA,EACjB,IAAI,CAACJ,OAAO,CAAGA,EACf,IAAI,CAAC2F,eAAe,CAAG,IAAIC,GA1ClBH,OA6CX7/B,AA7CW6/B,EAAAA,SAAAA,CA6CX7/B,KA+DC,CA/DDA,SAAMiwB,CAAuC,CAAErvB,CAAgC,EAC7E,IAAI,CAACm/B,eAAe,CAACnzB,KAAK,CAAChM,GAC3B,IAAM1C,EAAQ+hC,YAAYC,GAAG,GACJC,EAAoC1/B,AAAA,IAAI,CAAzDq/B,eAAAA,CAAiCC,EAAoBt/B,AAAA,IAAI,CAAxBs/B,eAAAA,CACzCI,EAAethC,IAAI,CAAC,GAIpB,IAFA,IAAIuhC,EAAYnQ,EAAOr4B,IAAI,GACvByoC,EAAY,IACH,CACXA,GAAa,EACb,IAAMzuB,EAAQwuB,EAAUvqC,KAAK,CAEvByqC,EAAa,IAAI,CAACvE,gBAAgB,CAAC93B,GAAG,CAAC2N,EAAMnT,IAAI,EACvD,GAAI6hC,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAYpG,MAAM,AAAA,IAAKn8B,GAAQ2+B,KAAK,CACtCyD,EAAethC,IAAI,CAAC+S,EAAO0uB,EAAWhqC,MAAM,EAC5C8pC,EAAYnQ,EAAOr4B,IAAI,OASyB,CAR3C,GAAI0oC,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAYpG,MAAM,AAANA,IAAWn8B,GAAQs+B,MAAM,CAO9C,OANA/8B,EAAAA,MAAO0B,CAAAA,IAAI,CACR,uDAAsDq/B,EAAU,qBAC/DJ,CAAAA,YAAYC,GAAG,GAAKhiC,CAAAA,EACrB,MAEH6hC,AAA0B,MAA1BA,EAAgBxzB,UAAU,EAA1BwzB,EAAgBxzB,UAAU,MAA1BwzB,EAA6BA,GACtBA,EAAgBzzB,aAAa,CAAC5C,GAAG,GACnC,GAAI42B,AAAAA,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAYpG,MAAM,AAANA,IAAWn8B,GAAQq+B,MAAM,CAoC9C,OATc79B,GAAeS,aAAa,CACvC,oBAAmB4S,EAAMnS,MAAM,CAChClG,GAAYyhB,gBAAgB,CAC5Brb,GAAU2N,mBAAmB,CAC7BsE,EAAMxS,QAAQ,EAKT,KA7BP,IAAK,IANC9I,EAASgqC,EAAWhqC,MAAM,CAC1BiqC,EAAmB,IAAI,CAACnG,OAAO,CAACsD,iBAAiB,CAACpnC,GAClDkqC,EAAkBT,EAAgB9yB,kBAAkB,CAACszB,EAAiBvwB,EAAE,EAExE+P,EAAmC,EAAE,CAElCvpB,EAAI+pC,EAAiBrI,UAAU,CAACzhC,MAAM,CAAG,EAAGD,GAAK,EAAGA,IAC3D,GAAI+pC,EAAiBrI,UAAU,CAAC1hC,EAAE,GAAK2C,GAAWi/B,OAAO,EACzD+H,EAAez2B,GAAG,GAClB,IAAMkI,EAAQuuB,EAAez2B,GAAG,GAChC,GAAS1T,EAAL4b,EAAiBpS,IACnBugB,EAAO0d,OAAO,CAAC7rB,OACV,CACL,IAAM/G,EAAUk1B,EAAgBzzB,aAAa,CAAC5C,GAAG,GACjDqW,EAAO0d,OAAO,CAAC5yB,EACjB,EAEF21B,AAAAA,MAAAA,GAAAA,QAAAA,KAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,CAAkBT,EAAoBhgB,CAAAA,IAEtC,IAAMya,EAAY,IAAI,CAACyB,cAAc,CACrCkE,EAAethC,IAAI,CAAC0hC,EAAiB7G,IAAI,EAEzC,IAAM+G,EAAYjG,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAWv2B,GAAG,CAACs8B,EAAiB7G,IAAI,EACtDyG,EAAethC,IAAI,CAAC4hC,GACpB,SAaJ,CACF,EA5GWZ,EA0BJlqC,MAUN,CAVD,WACE,GAAI,CAAC,IAAI,CAAC0lB,UAAU,CAAE,CACpB,IAAM+e,ED2/BVmD,GAAQ5nC,MAAM,CACZ2D,GAAaof,iBAAiB,CAC9BklB,GAAmBl7B,GAAG,CAAC,SAACd,CAAAA,EAASA,OAAAA,CAAI,CAAC,EAAE,IC5/BhC8+B,EAAY,IAAIvG,GAAMC,GAC5BsG,EAAUhG,QAAQ,GAClB,IAAI,CAACrf,UAAU,CAAG,IA/BXwkB,EA+BkCa,EAAUnG,WAAW,CAAEmG,EAAUlG,SAAS,CAAEJ,GACrFttB,GAAmB,IAAI,CAACuO,UAAU,CAAC0kB,eAAe,CACpD,CAEA,OAAO,IAAI,CAAC1kB,UAAU,AACxB,EApCWwkB,EAAAA,EAAAA,EAOCc,IAAAA,WAAZ18B,IAAA,WACE,OAAO,IAAI,CAAC67B,eAAe,CAAC,IAAI,CAACA,eAAe,CAACrpC,MAAM,CAAG,EAAE,AAC9D,IACYslC,IAAAA,mBAAZ93B,IAAA,WACE,OAAO,IAAI,CAACs2B,WAAW,CAACt2B,GAAG,CAAC,IAAI,CAAC08B,QAAQ,CAC3C,IACY1E,IAAAA,iBAAZh4B,IAAA,WACE,OAAO,IAAI,CAACu2B,SAAS,CAACv2B,GAAG,CAAC,IAAI,CAAC08B,QAAQ,CACzC,KAfWd,CA0HZ,IC9ID,SAASe,KAUL,MAAOA,AATPA,CAAAA,GAAWzrC,OAAO0rC,MAAM,EAAI,SAAgBvqC,CAAM,EAC9C,IAAK,IAAIE,EAAI,EAAGA,EAAIqC,UAAUpC,MAAM,CAAED,IAAK,CACvC,IAAI2I,EAAStG,SAAS,CAACrC,EAAE,CACzB,IAAK,IAAIK,KAAOsI,EAAYhK,OAAOO,SAAS,CAACorC,cAAc,CAACnpC,IAAI,CAACwH,EAAQtI,IAAMP,CAAAA,CAAM,CAACO,EAAI,CAAGsI,CAAM,CAACtI,EAAI,AAAD,CAC1G,CAED,OAAOP,CACf,CAAA,EAEoBsO,KAAK,CAAC,IAAI,CAAE/L,UAChC,CCTO,IAAAkoC,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,OAAAA,EACJC,kBAKN,CALD,WACE,MAAO,CACLC,YAAa,CAAC,EACdC,YAAa,CAAC,CAChB,CACF,EANWH,EAQJI,kBAON,CAPD,SAA0B/oC,CAAY,EACpC,MAAO,CACLA,KAAAA,EACAgpC,WAAY,EAAE,CACdC,gBAAiB,EAAE,CACnBC,aAAc,IAAI,CAACN,kBAAkB,EACvC,CACF,EAfWD,EAiBJQ,qBAQN,CARD,SAA6BnpC,CAAY,EACvC,MAAO,CACLA,KAAAA,EACAopC,OAAQ,EAAE,CACVH,gBAAiB,EAAE,CACnBI,KAAM,CAAC,EACPH,aAAc,IAAI,CAACN,kBAAkB,EACvC,CACF,EAzBWD,EA2BJW,sBAON,CAPD,SAA8BtpC,CAAY,EACxC,MAAO,CACLA,KAAAA,EACAipC,gBAAiB,EAAE,CACnBI,KAAM,CAAC,EACPH,aAAc,IAAI,CAACN,kBAAkB,EACvC,CACF,EAlCWD,EAoCJY,aAQN,CARD,SAAqBvpC,CAAY,EAC/B,MAAO,CACLA,KAAAA,EACAipC,gBAAiB,EAAE,CACnBO,UAAW,CAAA,EACXH,KAAM,CAAC,EACPH,aAAc,IAAI,CAACN,kBAAkB,EACvC,CACF,EA5CWD,CA6CZ,IC7CMc,gBAAA,WAAMA,SAAAA,EAITx8B,CAAoB,CACpB5G,CAAmB,CACnB5I,CAAkB,OAFXwP,KAAAA,CAAAA,OACA5G,IAAAA,CAAAA,OACA5I,KAAAA,CAAAA,OALFgT,eAA2B,CAAA,CAAA,EADvBg5B,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OASX5jC,EAAAA,GAIC,CAJDA,SAAIoH,CAAa,CAAE5G,CAAY,CAAE5I,CAAW,EAC1C,IAAI,CAACwP,KAAK,CAAGA,EACb,IAAI,CAAC5G,IAAI,CAAGA,EACZ,IAAI,CAAC5I,KAAK,CAAGA,CACf,EAEAmT,EAAAA,KAEC,CAFDA,SAAM84B,CAAyB,EAC7B,OAAO,IAAI,CAACrjC,IAAI,GAAKqjC,EAAMrjC,IAAI,AACjC,EAjBWojC,CAkBZ,ICXcE,GAAA,WAAA,EAAA,SAAAxe,CAAA,EAAMwe,SAAAA,mDACnBC,iBAAoB,CAAA,CAAA,IADDD,EAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OA8DnBE,EAAAA,UAgBC,CAhBDA,WACE,IAAI,CAACpgB,oBAAoB,GACzB,IAAM3jB,EAAQ,IAAI,CAAC6iB,aAAa,CAC1B5hB,EAAS,IAAI,CAAC6hB,OAAO,CACvB1iB,EAAQ,IAAI,CAACyiB,aAAa,CAW9B,OARAziB,EAAQyjC,EAAYG,WAAW,CAAC/iC,EAAQb,GAGlB,MAAlBa,CAAM,CAACb,EAAM,EACfA,CAAAA,EAAQyjC,EAAYG,WAAW,CAAC/iC,EAAQb,EAAQ,EAAA,EAGlD,IAAI,CAACkjB,OAAO,CAACljB,EAAQ,IAAI,CAACyiB,aAAa,EAChCtf,OAAOtC,EAAOoE,SAAS,CAACrF,EAAOI,GACxC,EAEA6jC,EAAAA,SA4BC,CA5BDA,WACE,IAAI,CAACjgB,UAAU,CAAC,KAEhB,IAAIppB,EAAI,EACJorB,EAAI,EACJ/S,EAAI,EACJxM,EAAI,EAqBR,OAnBA7L,EAAI,IAAI,CAACmpC,UAAU,GACnB,IAAI,CAACpgB,oBAAoB,GACJ,MAAjB,IAAI,CAACG,IAAI,CAAC,KACZ,IAAI,CAACE,UAAU,CAAC,KAChBgC,EAAI,IAAI,CAAC+d,UAAU,GACnB,IAAI,CAACpgB,oBAAoB,GACJ,MAAjB,IAAI,CAACG,IAAI,CAAC,KACZ,IAAI,CAACE,UAAU,CAAC,KAChB/Q,EAAI,IAAI,CAAC8wB,UAAU,GACnB,IAAI,CAACpgB,oBAAoB,GACJ,MAAjB,IAAI,CAACG,IAAI,CAAC,KACZ,IAAI,CAACE,UAAU,CAAC,KAChBvd,EAAI,IAAI,CAACs9B,UAAU,GACnB,IAAI,CAACpgB,oBAAoB,MAK/B,IAAI,CAACK,UAAU,CAAC,KACT,IAAIkgB,EAAAA,KAAAA,CAAMtpC,EAAGorB,EAAG/S,EAAGxM,EAC5B,EAEA2F,EAASka,SA8BR,CA9BD,WACE,OAAa,CAGX,GAFA,IAAI,CAAC3C,oBAAoB,GAErB,IAAI,CAACT,KAAK,GACZ,OAGF,IAAMljB,EAAQ,IAAI,CAACgjB,iBAAiB,CAAC,GACrC,GAAIJ,GAAUoC,OAAO,CAAC,IAAI,CAAC5B,cAAc,IAAK,CAC5C,IAAM+gB,EAAY,IAAI,CAACvd,SAAS,CAAC5mB,GACjC,GAAImkC,AAAc,OAAdA,EACF,OAAOA,CAET,CAAA,IAAI,CAACL,iBAAiB,CAAG,CAAA,EACzB,QACF,CAEA,IAAMhf,EAAc,IAAI,CAAC3B,UAAU,GAC7BihB,EAjISP,EAiImBQ,kBAAkB,CAACvf,EAAY,CACjE,GAAIsf,AAAkBp4B,KAAAA,IAAlBo4B,EAA6B,CAC/B,IAAI,CAAC9gB,OAAO,CAAC,GACb,IAAM5P,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAACqkC,EAAetf,EAAa9kB,GAC/B0T,CACT,CAGA,IAAI,CAAC4P,OAAO,CAAC,EACf,CACF,EAWAghB,EAAAA,kBAOC,CAPDA,SAAmBvjC,CAAe,CAAEG,CAAuC,EACzE,OAAOb,GAAeS,aAAa,CACjCC,EACA1F,GAAYyhB,gBAAgB,CAC5B,IAAI,CAAC7b,MAAM,CACXC,AAAAA,MAAAA,EAAAA,EAAY,IAAI,CAAC8hB,iBAAiB,CAAC,GAEvC,EAEA5W,EAAQwa,SAkBP,CAlBD,SAAkB5mB,CAAqB,EAErC,KAAO4iB,GAAUqC,OAAO,CAAC,IAAI,CAAC7B,cAAc,KAAO,CAAC,IAAI,CAACF,KAAK,IAC5D,IAAI,CAACI,OAAO,CAAC,GAEf,IAQkBugB,EARZ5jC,EAAM,IAAI,CAAC+iB,iBAAiB,CAAC,GAGnC,GAAI,CAAC,IAAI,CAACuhB,uBAAuB,CAACvkC,EAAMI,KAAK,CAAEH,EAAIG,KAAK,EACtD,OAAO,KAGT,IAAMmB,EAAS,IAAI,CAACuhB,OAAO,CAACzd,SAAS,CAACrF,EAAMI,KAAK,CAAEH,EAAIG,KAAK,EACtD6xB,EAAY4R,AAAuC,MAAvCA,CAAAA,EAAAA,EAAYW,mBAAmB,CAACjjC,EAAO,AAAA,EAAvCsiC,EAA2C5oC,GAAWgvB,EAAE,CACpET,EAAQ/nB,GAAUE,WAAW,CAAC3B,EAAOC,GACrCyT,EAAQpS,GAAUd,IAAI,CAACuF,GAAG,GAEhC,OADA2N,EAAM3T,GAAG,CAACkyB,EAAW1wB,EAAQioB,GACtB9V,CACT,EAEAtH,EAAQm4B,uBAoBP,CApBD,SAAgC3M,CAAkB,CAAEG,CAAgB,EAClE,IAAM92B,EAAS,IAAI,CAAC6hB,OAAO,CAG3B,GAAI8U,EAAa,EAAG,CAClB,IAAM6M,EAAexjC,EAAOoiB,UAAU,CAACuU,EAAa,GACpD,GAAI,CAAC,IAAI,CAAC8M,oBAAoB,CAACD,GAC7B,MAAO,CAAA,CAEX,CAGA,GAAI1M,EAAW92B,EAAO1I,MAAM,CAAE,CAC5B,IAAMs7B,EAAe5yB,EAAOoiB,UAAU,CAAC0U,GACvC,GAAI,CAAC,IAAI,CAAC2M,oBAAoB,CAAC7Q,GAC7B,MAAO,CAAA,CAEX,CAEA,MAAO,CAAA,CACT,EAEAznB,EAAQs4B,oBAEP,CAFD,SAA6B7gB,CAAgB,EAC3C,OAAOjB,GAAUc,gBAAgB,CAACG,EAAU,CAAA,IAASggB,EAAYc,oBAAoB,CAAC9gB,EACxF,EA5MmBggB,EAqCJc,oBAUd,CAVD,SAAoC9gB,CAAgB,EAClD,OACEA,AAAa,MAAbA,GACAA,AAAa,MAAbA,GACAA,AAAa,KAAbA,GACAA,AAAa,KAAbA,GACAA,AAAa,KAAbA,GACAA,AAAa,KAAbA,GACAA,AAAa,KAAbA,CAEJ,EA/CmBggB,EAiDJG,WAWd,CAXD,SAA2B/iC,CAAc,CAAE22B,CAAkB,EAE3D,IADA,IAAIhT,EAAegT,EACZhT,EAAe3jB,EAAO1I,MAAM,EAAE,CACnC,IAAMsrB,EAAW5iB,EAAOoiB,UAAU,CAACuB,GACnC,GAAIhC,GAAUmC,OAAO,CAAClB,GACpBe,SAEA,KAEJ,CACA,OAAOA,CACT,EA5DmBif,CAAoBjhB,EAAAA,GAApBihB,CAAAA,GAGJW,mBAA+C,CAAA,CAC5DI,gBAAiB1pC,GAAQ2pC,iBAAiB,CAC1CC,WAAY5pC,GAAQ6pC,YAAY,CAChCC,WAAY9pC,GAAQ+pC,YAAY,CAChCC,aAAchqC,GAAQiqC,cAAc,CACpCC,YAAalqC,GAAQmqC,aAAa,CAClCC,iBAAkBpqC,GAAQqqC,kBAAkB,CAC5CC,aAActqC,GAAQuqC,cAAc,CACpCC,OAAQxqC,GAAQyqC,QAAQ,CACxBC,KAAM1qC,GAAQ2qC,MAAM,CACpBC,aAAc5qC,GAAQ6qC,cAAc,CACpCC,eAAgB9qC,GAAQ+qC,gBAAgB,CACxCC,UAAWhrC,GAAQirC,WAAW,CAC9BC,KAAMlrC,GAAQmrC,MAAM,CACpBC,YAAaprC,GAAQqrC,aAAa,CAClCC,eAAgBtrC,GAAQurC,gBAAgB,CACxCC,KAAMxrC,GAAQyrC,MAAM,CACpBpjC,OAAQrI,GAAQ0rC,QAAQ,CACxB1C,MAAOhpC,GAAQ2rC,OAAO,CACtBC,gBAAiB5rC,GAAQ6rC,iBAAiB,CAC1CC,iBAAkB9rC,GAAQ+rC,kBAAkB,CAC5CC,SAAUhsC,GAAQisC,UAAU,CAC5BC,QAASlsC,GAAQmsC,SAAS,CAE1BjY,KAAMl0B,GAAQkc,IAAI,CAClBiY,MAAOn0B,GAAQmc,KAAK,AACtB,EA7BmBwsB,GA+BJQ,kBAA8C,CAAA,CAC3D,IAAKnpC,GAAQosC,SAAS,CACtB,IAAKpsC,GAAQqsC,UAAU,CACvB,IAAKrsC,GAAQssC,KAAK,AACpB,ECdK,IAAMC,GAAN,WAAA,EAAA,WAAMA,SAAAA,IAAAA,CAAAA,OAAAA,EAeJ3lC,KAyCN,CAzCD,SAAa4lC,CAAkB,EAC7B,IAAMC,EAAY5F,YAAYC,GAAG,EAGjC,CAAA,IAAI,CAAC4F,MAAM,CAACrvC,MAAM,CAAG,EACrB,IAAI,CAACsvC,iBAAiB,CAAChnC,KAAK,GAC5B,IAAI,CAACinC,UAAU,GAEf,IAAM/S,EAAQ,IAAI,CAACgT,MAAM,CACzBhT,EAAMhS,SAAS,CAAC2kB,GAMhB,IAAK,IAJCM,EAAe,IAAI,CAACC,YAAY,CAAClT,GAEjCmT,EAAwBF,EAAa7E,eAAe,CACpDgF,EAAqBH,EAAa5E,YAAY,CAC3C9qC,EAAI,EAAGyB,EAAIiuC,EAAa9E,UAAU,CAAC3qC,MAAM,CAAED,EAAIyB,EAAGzB,IAAK,CAC9D,IAAM8vC,EAAYJ,EAAa9E,UAAU,CAAC5qC,EAAE,CACtC+vC,EAA+BH,EAAsBrvB,MAAM,CAACuvB,EAAUjF,eAAe,EACrFmF,EAAwB,CAC5BvF,YAAaL,GAAA,GAAKyF,EAAmBpF,WAAW,EAChDC,YAAaN,GAAA,GAAKyF,EAAmBnF,WAAW,CAClD,EACA,IAAI,CAACuF,kBAAkB,CAACD,EAAuBF,EAAUhF,YAAY,EAErE,IAAK,IAAIoF,EAAI,EAAG9W,EAAI0W,EAAU9E,MAAM,CAAC/qC,MAAM,CAAEiwC,EAAI9W,EAAG8W,IAAK,CACvD,IAAMC,EAAOL,EAAU9E,MAAM,CAACkF,EAAE,CAC1BE,EAAyB,CAC7B3F,YAAaL,GAAA,GAAK4F,EAAsBvF,WAAW,EACnDC,YAAaN,GAAA,GAAK4F,EAAsBtF,WAAW,CACrD,EAIA,GAHA,IAAI,CAACuF,kBAAkB,CAACG,EAAwBD,EAAKrF,YAAY,EACjEqF,EAAKrF,YAAY,CAAGsF,GAEhBD,EAAK/E,SAAS,EAClB,IAAMiF,EAAuBN,EAA6BxvB,MAAM,CAAC4vB,EAAKtF,eAAe,CACrFsF,CAAAA,EAAKG,QAAQ,CAAGD,EAAqBnkC,GAAG,CAAC,SAACd,CAAAA,EAASA,OAAAA,EAAK0yB,OAAO,AAAEzY,GAAAA,IAAI,CAAC,MACxE,CACF,CAGA,OADAvc,QAAO0B,CAAAA,IAAI,CAAC,yCAAyCi/B,CAAAA,YAAYC,GAAG,GAAK2F,CAAQ,EAAE,MAC5EK,CACT,EAxDWP,EA0DIQ,YA0Cd,CA1CD,SAA4BlT,CAAkB,EAE5CA,EAAM/Q,UAAU,CAAC,UACjB,IAAM9pB,EAAO66B,EAAMvQ,cAAc,CAAC,IAAK,IAAK,CAAA,EAAO,CAAA,GAC7CwjB,EAAenF,GAAoBI,kBAAkB,CAAC/oC,GAC5D66B,EAAM/Q,UAAU,CAAC,KAEjB,IAAI6kB,EAAa,EACjB9T,EAAMpR,oBAAoB,GAI1B,IAHA,IAAI3jB,EAAQ+0B,EAAM/R,iBAAiB,CAAC,GAE5BmgB,EAAoB6E,EAApB7E,eAAAA,GACK,CACX,IAAMzvB,EAAQqhB,EAAMzO,SAAS,GAC7B,OAAQ5S,EAAMnT,IAAI,EAChB,KAAKrF,GAAQirC,WAAW,CACtB,IAAI,CAAC2C,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAE4qC,GACrD,IAAMiF,EAAY,IAAI,CAACW,eAAe,GACtCf,EAAa9E,UAAU,CAACviC,IAAI,CAACynC,GAC7BpoC,EAAQ+0B,EAAM/R,iBAAiB,CAAC,GAChC,KACF,MAAK9nB,GAAQqqC,kBAAkB,CAC/B,KAAKrqC,GAAQuqC,cAAc,CAC3B,KAAKvqC,GAAQyqC,QAAQ,CACnB,IAAI,CAACmD,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAE4qC,GACrDpO,EAAMvQ,cAAc,CAAC,IAAK,IAAK,CAAA,EAAM,CAAA,GACrCxkB,EAAQ+0B,EAAM/R,iBAAiB,CAAC,GAChC,KACF,MAAK9nB,GAAQosC,SAAS,CACpB,EAAEuB,EACF,KACF,MAAK3tC,GAAQqsC,UAAU,CACrB,GAAI,AAAiB,GAAjB,EAAEsB,EAGJ,OAFA,IAAI,CAACC,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAE4qC,GACrD,IAAI,CAAC6F,SAAS,GACPhB,EAET,KACF,SACEhoC,EAAQ,IAAI,CAACipC,iBAAiB,CAACv1B,EAAO1T,EAAOmjC,EAAiB6E,EAAa5E,YAAY,CAC3F,CACF,CACF,EApGWqE,EAsGIyB,wCAiCd,CAjCD,SAAwDC,CAA8B,CAAEC,CAAqB,EAC3G,IAAMrU,EAAQ,IAAI,CAACgT,MAAM,CACnBr0B,EAAQqhB,EAAMzO,SAAS,GAC7B,GAAI5S,EAAMnT,IAAI,GAAKtF,GAAWgvB,EAAE,CAAE,CAEhC8K,EAAM/Q,UAAU,CAAC,KACjB,IAAMqlB,EAAc,IAAI,CAACC,2BAA2B,CAACF,EAAW7nC,MAAM,EAChEmJ,EAAS,IAAIi5B,GAAmBjwB,EAAMnS,MAAM,CAAE6nC,EAAW7oC,IAAI,CAAE8oC,GACrE,IAAI,CAACxB,iBAAiB,CAACp9B,MAAM,CAACC,EAChC,MAAO,GAAIgJ,AAAiB,MAAjBA,EAAMnS,MAAM,CAAU,CAE/B,IAEI8nC,EAFEnH,EAAYnN,EAAMzO,SAAS,GAGjC,GAAI4b,AAAqB,MAArBA,EAAU3gC,MAAM,CAElB8nC,EAAc,IAAI,CAACC,2BAA2B,CAACF,EAAW7nC,MAAM,MAC3D,CAELwzB,EAAM/Q,UAAU,CAAC,KACjB,IAAM3N,EAAe,IAAI,CAAC/G,aAAa,CACvC+G,EAAatW,GAAG,CAACmiC,EAAU3gC,MAAM,CAAE6nC,EAAW7oC,IAAI,EAClD,IAAMoR,EAAK,IAAI,CAACk2B,iBAAiB,CAACp8B,MAAM,CAAC4K,GACpC1E,CAAAA,AAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAIha,KAAK,AAALA,GACP,IAAI,CAAC4xC,mBAAmB,CAAE,YAAWH,EAAW7nC,MAAM,CAAC,eAAc2gC,EAAU3gC,MAAM,CAAI2gC,EAAUhhC,QAAQ,EAK7GmoC,EAAc13B,EAAGha,KAAK,AACxB,CACA,IAAI,CAAC4wC,kBAAkB,CAACY,EAAiBE,EAC3C,CACF,EAvIW5B,EAyIIc,kBAcd,CAdD,SAAkCiB,CAAwB,CAAEvoC,CAAqB,EAE/E,IAAQ8hC,EAAmEyG,EAAnEzG,WAAgCC,CAAayG,EAAsBD,EAAnCxG,WAAAA,CAChCD,EAAmE9hC,EAAnE8hC,WAAgCC,CAAa0G,EAAsBzoC,EAAnC+hC,WAAAA,CAExC,IAAK,IAAMrqC,KAAOgxC,EAChB,OAAOF,CAAiB,CAAC9wC,EAAI,CAC7BixC,CAAiB,CAACjxC,EAAI,CAAGgxC,CAAiB,CAAChxC,EAAI,CAGjD,IAAK,IAAMA,KAAO+wC,EAChB,OAAOE,CAAiB,CAACjxC,EAAI,CAC7B8wC,CAAiB,CAAC9wC,EAAI,CAAG+wC,CAAiB,CAAC/wC,EAAI,AAEnD,EAvJW8uC,EAyJIoC,yBAMd,CAND,WACE,IAAM9U,EAAQ,IAAI,CAACgT,MAAM,CACnBr0B,EAAQqhB,EAAMzO,SAAS,GAC7ByO,EAAM/Q,UAAU,CAAC,KACjB,IAAMtZ,EAAS,IAAIi5B,GAAmBjwB,EAAMnS,MAAM,CAAEmS,EAAMnT,IAAI,EAC9D,IAAI,CAACsnC,iBAAiB,CAACp9B,MAAM,CAACC,EAChC,EA/JW+8B,EAiKIK,UAGd,CAHD,WACE,IAAMp8B,EAAc,IAAInB,GACxB,IAAI,CAACs9B,iBAAiB,CAACv8B,SAAS,CAACI,EACnC,EApKW+7B,EAsKIuB,SAEd,CAFD,WACE,IAAI,CAACnB,iBAAiB,CAACt8B,QAAQ,EACjC,EAxKWk8B,EA0KI6B,2BASd,CATD,SAA2CrO,CAAa,EAGtD,IAFA,IAAMlG,EAAQ,IAAI,CAACgT,MAAM,CACnB3E,EAAeP,GAAoBC,kBAAkB,GACpD/N,AAAuB,MAAvBA,EAAM5R,UAAU,IACrB,IAAI,CAAC2mB,yBAAyB,CAAC7O,EAAOmI,GACtCrO,EAAMpR,oBAAoB,GAG5B,OADAoR,EAAMzR,OAAO,CAAC,GACP8f,CACT,EAnLWqE,EAqLI8B,mBAKd,CALD,SAAmCxoC,CAAe,CAAEG,CAAuC,EAC3E,IAAI,CAAC6mC,MAAM,CAACzD,kBAAkB,CAACvjC,EAASG,EAIxD,EA1LWumC,EA4LIqC,yBAmFd,CAnFD,SAAyCC,CAAmB,CAAEnnC,CAAkB,EAC9E,IAAMmyB,EAAQ,IAAI,CAACgT,MAAM,CAEnBiC,EAAiBC,AADDlV,EAAMzO,SAAS,GACA/kB,MAAM,CACvC2oC,EAAkBF,EACtB,GAAID,AAAgB,eAAhBA,GAAgCC,AAAmB,eAAnBA,GAAmCA,AAAmB,oBAAnBA,EAAsC,CAC3G,IAAIG,EAAW,EACTC,EAAgBrV,EAAM7Q,sBAAsB,CAAC,IAAK,IACpDkmB,AAAkB,CAAA,MAAlBA,GACFD,EAAWpV,EAAMgP,UAAU,GAC3BhP,EAAM/Q,UAAU,CAAC,KACjB+Q,EAAM/Q,UAAU,CAAC,MACU,MAAlBomB,GACT,IAAI,CAACb,mBAAmB,CAAE,+DAM5BW,GAAmBC,OAEnBpV,EAAM/Q,UAAU,CAAC,KAGnB,IAAMqmB,EAAwBC,EAAAA,qBAAqB,CAACP,EAAcG,EAAgB,AACpDl+B,MAAAA,IAA1Bq+B,GACF,IAAI,CAACd,mBAAmB,CAAE,iCAAgCS,GAO5DjV,EAAMpR,oBAAoB,GAG1B,IAAM+C,EAAcqO,EAAM3R,cAAc,GACxC,GAAIR,GAAUmC,OAAO,CAAC2B,IAAgBA,AAAgB,KAAhBA,EAEpC6jB,EAAgBxV,EAAMgP,UAAU,OAC3B,CACL,IAAMjQ,EAAaiB,EAAMzO,SAAS,GAC5BkkB,EAAiB1W,EAAWvzB,IAAI,CAEtC,GAAIiqC,IAAmBtvC,GAAQkc,IAAI,CACjCmzB,EAAgB,CAAA,OACX,GAAIC,IAAmBtvC,GAAQmc,KAAK,CACzCkzB,EAAgB,CAAA,OACX,GAAIC,IAAmBtvC,GAAQ2rC,OAAO,CAC3C0D,EAAgBxV,EAAMkP,SAAS,QAC1B,GAAIlP,AAAuB,MAAvBA,EAAM5R,UAAU,GAAY,CACrC4R,EAAMzR,OAAO,CAAC,GACd,IAlBAinB,EAmBgBE,EADVC,EAAkB3V,EAAMzO,SAAS,EAElBta,MAAAA,GADrBu+B,CAAAA,EAAAA,AAAgB,MAAAE,CAAAA,EAAA,IAAI,CAACE,oBAAoB,CAAC7W,EAAWvyB,MAAM,CAAC,AAAD,EAA3C,KAAA,EAAAkpC,CAA8C,CAACC,EAAgBnpC,MAAM,CAAC,AAAD,GAEnF,IAAI,CAACgoC,mBAAmB,CACrB,4BAA2BzV,EAAWvyB,MAAM,CAAC,IAAGmpC,EAAgBnpC,MAAM,CACvEmpC,EAAgBxpC,QAAQ,MAOvB,CACLqpC,EAAgBzW,EAAWvyB,MAAM,CACjC,IAAM8U,EAAe,IAAI,CAAC/G,aAAa,CACvC+G,EAAatW,GAAG,CAAC+zB,EAAWvyB,MAAM,CAAEtG,GAAWgvB,EAAE,EAC5C,IAAI,CAAC4d,iBAAiB,CAACp8B,MAAM,CAAC4K,IACjC,IAAI,CAACkzB,mBAAmB,CAAC,WAAWQ,EAAY,cAAajW,EAAWvyB,MAAM,CAAIuyB,EAAW5yB,QAAQ,CAMzG,CACF,CACA6zB,EAAM/Q,UAAU,CAAC,KACb,AAAyB,UAAzB,OAAOumB,EACT3nC,EAAIogC,WAAW,CAACqH,EAAsB,CAAGE,EAEzC3nC,EAAImgC,WAAW,CAACsH,EAAsB,CAAGE,CAE7C,EA/QW9C,EAiRImD,wCAmCd,CAnCD,SAAwDxH,CAA2B,EACjF,IAAMrO,EAAQ,IAAI,CAACgT,MAAM,CACnBr0B,EAAQqhB,EAAMzO,SAAS,GAC7B,GAAI5S,EAAMnT,IAAI,GAAKtF,GAAWgvB,EAAE,CAAE,CAEhC8K,EAAM/Q,UAAU,CAAC,KACjB,IAAMtZ,EAAS,IAAIi5B,GAAmBjwB,EAAMnS,MAAM,CAAErG,GAAQ2pC,iBAAiB,EAC7E,IAAI,CAACgD,iBAAiB,CAACp9B,MAAM,CAACC,GAC9B,MACF,CAEqB,MAAjBgJ,EAAMnS,MAAM,EACd,IAAI,CAACgoC,mBAAmB,CAAE,iDAAgD71B,EAAMnS,MAAM,CAAImS,EAAMxS,QAAQ,EAK1G,IAAM2oB,EAAOkL,EAAMzO,SAAS,GAC5ByO,EAAM/Q,UAAU,CAAC,KACjB,IAAMrsB,EAAQ,IAAI,CAACgzC,oBAAoB,CAAC/F,eAAe,CAAC/a,EAAKtoB,MAAM,CAAC,CAC9D5I,EAAM2xC,wBAAsB1F,eAAe,CACjD,GAAIjtC,AAASqU,KAAAA,GAATrU,EAAoB,CACtByrC,EAAaJ,WAAW,CAACrqC,EAAI,CAAGkxB,EAAKtoB,MAAM,CAC3C,IAAM8U,EAAe,IAAI,CAAC/G,aAAa,CACvC+G,EAAatW,GAAG,CAAC8pB,EAAKtoB,MAAM,CAAErG,GAAQ2pC,iBAAiB,EAC5C,IAAI,CAACgD,iBAAiB,CAACp8B,MAAM,CAAC4K,IAEvC,IAAI,CAACkzB,mBAAmB,CAAE,qCAAoC1f,EAAKtoB,MAAM,CAAIsoB,EAAK3oB,QAAQ,OAM5FkiC,EAAaL,WAAW,CAACpqC,EAAI,CAAGhB,CAEpC,EApTW8vC,EAsTIqB,mBAcd,CAdD,SACE9oC,CAAqB,CACrBijB,CAAkB,CAClB4nB,CAAgC,EAEhC,IAAM9V,EAAQ,IAAI,CAACgT,MAAM,CACzB,GAAIhT,EAAM+O,iBAAiB,CAAE,CAC3B,IAAM/L,EAAWhD,EAAMnQ,YAAY,CAAG3B,EACtC4nB,EAAmBlqC,IAAI,CAAC,CACtB6oB,MAAO,CAAExpB,MAAAA,EAAOC,IAAKyiC,GAAA,CAAA,EAAK3N,EAAM/R,iBAAiB,CAAC,GAAA,CAAI5iB,MAAO23B,EAAW,GAAI,EAC5E3B,QAASrB,EAAM9zB,MAAM,CAACoE,SAAS,CAACrF,EAAMI,KAAK,CAAE23B,EAAW,EAC1D,GACAhD,EAAM+O,iBAAiB,CAAG,CAAA,CAC5B,CACF,EApUW2D,EAsUIsB,eA+Cd,CA/CD,WACE,IAAMhU,EAAQ,IAAI,CAACgT,MAAM,CACzB,IAAI,CAACD,UAAU,GAEf,IAAIe,EAAa,EACX3uC,EAAO66B,EAAMvQ,cAAc,CAAC,IAAK,IAAK,CAAA,EAAO,CAAA,GAC7CsmB,EAAkBjI,GAAoBQ,qBAAqB,CAACnpC,GAClE66B,EAAM/Q,UAAU,CAAC,KAEjB+Q,EAAMpR,oBAAoB,GAG1B,IAFA,IAAI3jB,EAAQ+0B,EAAM/R,iBAAiB,CAAC,KAEvB,CACX,IAAMtP,EAAQqhB,EAAMzO,SAAS,GAC7B,OAAQ5S,EAAMnT,IAAI,EAChB,KAAKrF,GAAQmrC,MAAM,CACjB,IAAI,CAACyC,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAEuyC,EAAgB3H,eAAe,EACpF,IAAMsF,EAAO,IAAI,CAACsC,UAAU,GAC5BD,EAAgBxH,MAAM,CAAC3iC,IAAI,CAAC8nC,GAC5BzoC,EAAQ+0B,EAAM/R,iBAAiB,CAAC,GAChC,KACF,MAAK9nB,GAAQmsC,SAAS,CACpB,IAAI,CAACyB,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAEuyC,EAAgB3H,eAAe,EACpF,IAAMjpC,EAAO66B,EAAMvQ,cAAc,CAAC,IAAK,IAAK,CAAA,EAAO,CAAA,GACnDsmB,EAAgBxH,MAAM,CAAC3iC,IAAI,CAACkiC,GAAoBY,aAAa,CAACvpC,IAC9D8F,EAAQ+0B,EAAM/R,iBAAiB,CAAC,GAChC,KACF,MAAK9nB,GAAQosC,SAAS,CACpB,EAAEuB,EACF,KACF,MAAK3tC,GAAQqsC,UAAU,CACrB,GAAI,AAAiB,GAAjB,EAAEsB,EAGJ,OAFA,IAAI,CAACC,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAEuyC,EAAgB3H,eAAe,EACpF,IAAI,CAAC6F,SAAS,GACP8B,EAET,KACF,SACE9qC,EAAQ,IAAI,CAACgrC,wBAAwB,CACnCt3B,EACA1T,EACA8qC,EAAgB3H,eAAe,CAC/B2H,EAAgB1H,YAAY,CAC5B0H,EAAgBvH,IAAI,CAE1B,CACF,CACF,EArXWkE,EAuXIwD,UAiBd,CAjBD,SAA0B1H,CAA+C,EACvE,IAAMxO,EAAQ,IAAI,CAACgT,MAAM,CAEzB,IADAhT,EAAM/Q,UAAU,CAAC,OACJ,CACX,IAAM7c,EAAQ4tB,EAAMzO,SAAS,GAC7ByO,EAAM/Q,UAAU,CAAC,KACjB,IAAMrsB,EAAQo9B,EAAMvQ,cAAc,CAAC,IAAK,IAAK,CAAA,EAAO,CAAA,GAKpD,GAJAuQ,EAAMpR,oBAAoB,GAE1B4f,CAAI,CAACp8B,EAAM5F,MAAM,CAAC,CAAG5J,EAEjBo9B,AAAkB,MAAlBA,EAAMjR,IAAI,CAAC,GAAY,CACzBiR,EAAMzR,OAAO,CAAC,GACd,MACF,CACAyR,EAAM/Q,UAAU,CAAC,IACnB,CACF,EAxYWyjB,EA0YIsD,UAyDd,CAzDD,WACE,IAAI,CAACjD,UAAU,GACf,IAAM/S,EAAQ,IAAI,CAACgT,MAAM,CAEnB7tC,EAAO66B,EAAMvQ,cAAc,CAAC,IAAK,IAAK,CAAA,EAAO,CAAA,GAC7C0mB,EAAarI,GAAoBW,sBAAsB,CAACtpC,GAC9D66B,EAAM/Q,UAAU,CAAC,KACjB,IAAI6kB,EAAa,EAEjB9T,EAAMpR,oBAAoB,GAG1B,IAFA,IAAI3jB,EAAQ+0B,EAAM/R,iBAAiB,CAAC,KAEvB,CACX,IAAMtP,EAAQqhB,EAAMzO,SAAS,GAC7B,OAAQ5S,EAAMnT,IAAI,EAChB,KAAKrF,GAAQ6qC,cAAc,CAC3B,KAAK7qC,GAAQ+qC,gBAAgB,CAC3B,IAAI,CAAC6C,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAE2yC,EAAW/H,eAAe,EAC/EpO,EAAM/Q,UAAU,CAAC,KACjB,IAAMnZ,EAAQkqB,EAAMzO,SAAS,EACzB4kB,CAAAA,CAAU,CAACx3B,EAAMnS,MAAM,CAAC,EACZlB,GAAeS,aAAa,CACxC,sBACAzF,GAAYyhB,gBAAgB,CAC5BiY,EAAM9zB,MAAM,CACZ8zB,EAAM/R,iBAAiB,CAAC,IAQ5BkoB,CAAU,CADEx3B,EAAMnT,IAAI,GAAKrF,GAAQ6qC,cAAc,CAAG,cAAgB,gBACrD,CAAGl7B,EAAMtJ,MAAM,CAC9BwzB,EAAM/Q,UAAU,CAAC,KACjBhkB,EAAQ+0B,EAAM/R,iBAAiB,CAAC,GAChC,KACF,MAAK9nB,GAAQosC,SAAS,CACpB,EAAEuB,EACF,KACF,MAAK3tC,GAAQqsC,UAAU,CACrB,GAAI,AAAiB,GAAjB,EAAEsB,EAGJ,OAFA,IAAI,CAACC,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAE2yC,EAAW/H,eAAe,EAC/E,IAAI,CAAC6F,SAAS,GACPkC,EAET,KACF,SACElrC,EAAQ,IAAI,CAACgrC,wBAAwB,CACnCt3B,EACA1T,EACAkrC,EAAW/H,eAAe,CAC1B+H,EAAW9H,YAAY,CACvB8H,EAAW3H,IAAI,CAErB,CACF,CACF,EAncWkE,EAqcIuD,wBAiBd,CAjBD,SACEt3B,CAAwB,CACxB1T,CAAqB,CACrBmrC,CAA+B,CAC/BhC,CAA8B,CAC9BiC,CAAkD,EAWlD,OATQ13B,EAAMnT,IAAI,GACXrF,GAAQ2qC,MAAM,EACjB,IAAI,CAACiD,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAE4yC,GACrD,IAAI,CAACF,UAAU,CAACG,GAChBprC,EAAQ,IAAI,CAAC+nC,MAAM,CAAC/kB,iBAAiB,CAAC,IAGtChjB,EAAQ,IAAI,CAACipC,iBAAiB,CAACv1B,EAAO1T,EAAOmrC,EAAmBhC,GAE7DnpC,CACT,EAtdWynC,EAwdIwB,iBAqCd,CArCD,SACEv1B,CAAwB,CACxB1T,CAAqB,CACrBmrC,CAA+B,CAC/BhC,CAA8B,EAE9B,OAAQz1B,EAAMnT,IAAI,EAChB,KAAKrF,GAAQ6pC,YAAY,CACzB,KAAK7pC,GAAQ+pC,YAAY,CACzB,KAAK/pC,GAAQmqC,aAAa,CAC1B,KAAKnqC,GAAQiqC,cAAc,CACzB,IAAI,CAAC2D,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAE4yC,GACrD,IAAI,CAACjC,wCAAwC,CAACC,EAAiBz1B,GAC/D1T,EAAQ,IAAI,CAAC+nC,MAAM,CAAC/kB,iBAAiB,CAAC,GACtC,KACF,MAAK9nB,GAAQqrC,aAAa,CAC1B,KAAKrrC,GAAQurC,gBAAgB,CAC7B,KAAKvrC,GAAQyrC,MAAM,CACnB,KAAKzrC,GAAQ0rC,QAAQ,CACrB,KAAK1rC,GAAQ2rC,OAAO,CACpB,KAAK3rC,GAAQ6rC,iBAAiB,CAC9B,KAAK7rC,GAAQ+rC,kBAAkB,CAC/B,KAAK/rC,GAAQisC,UAAU,CACrB,IAAI,CAAC2B,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAE4yC,GACrD,IAAI,CAACtB,yBAAyB,GAC9B7pC,EAAQ,IAAI,CAAC+nC,MAAM,CAAC/kB,iBAAiB,CAAC,GACtC,KACF,MAAK9nB,GAAQ2pC,iBAAiB,CAC5B,IAAI,CAACiE,mBAAmB,CAAC9oC,EAAO0T,EAAMnS,MAAM,CAAChJ,MAAM,CAAE4yC,GACrD,IAAI,CAACP,wCAAwC,CAACzB,GAC9CnpC,EAAQ,IAAI,CAAC+nC,MAAM,CAAC/kB,iBAAiB,CAAC,GACtC,KACF,SAEE,IAAI,CAAC+kB,MAAM,CAACjE,iBAAiB,CAAG,CAAA,CACpC,CACA,OAAO9jC,CACT,EA7fWynC,CA8fZ,GA9fYA,CAAAA,GACKG,OAAS,EAAIxuC,CADlBquC,GAGIkD,oBAAkF,CAAA,CAC/F/F,gBAAAA,EAAAA,eAAAA,CACAkC,gBAAAA,EAAAA,eAAAA,CACAE,iBAAAA,EAAAA,gBAAAA,CACAR,eAAAA,EAAAA,cAAAA,CACAF,YAAAA,EAAAA,WAAAA,CACAY,SAAAA,EAAAA,QAAAA,AACF,EAVWO,GAWII,kBAAoB,IAAI18B,GAX5Bs8B,GAYIM,OAAS,IAAIlE,GAZjB4D,GAaIn4B,aAAAA,CAAgB,IAAIq0B,GAAmB,GAAI,MC/BrD,IAAAliC,gBAAA,WAAMA,SAAAA,IAAAA,CAAAA,IAAAA,EAAAA,EAAAA,SAAAA,CAAAA,OA2BX4pC,EAAAA,kBASC,CATDA,SAAmB3D,CAAkB,EAQnC,OAPArnC,GAAeO,2BAA2B,GACrB6mC,GAAmB3lC,KAAK,CAAC4lC,EAOhD,EAEA4D,EAAAA,gBA2CC,CA3CDA,SACErqC,CAAc,CACd2e,CAAmB,CACnBC,CAAqB,CACrB0rB,CAAuB,CACvBxpC,CAA6B,EAE7B,IAAMypC,EAAiBzJ,YAAYC,GAAG,GAChCt/B,EAAkB,CAAA,EACxBb,GAAa6D,iBAAiB,CAAC7E,KAAK,GACpC,IAAM4qC,EAAmB5pC,GAAaC,KAAK,CAACb,EAAQc,EAAuBW,GAC3EtB,QAAO0B,CAAAA,IAAI,CAAC,oCAAoCi/B,CAAAA,YAAYC,GAAG,GAAKwJ,CAAa,EAAE,MAInF,IAAMzZ,EAASgD,AAFD,IAAI3P,GAAMqmB,EAAkB/oC,GAErB6iB,QAAQ,GACZmmB,EAtDRjqC,EAsDDkqC,OAAAA,AAtDClqC,CAAAA,EAwDC2N,mBAAmB,CAAGq8B,EAEhC,IAAMG,EAAUF,EAAO5pC,KAAK,CAACiwB,EAAQrvB,GAMrC,GAAKkpC,GAIL,IAAMj7B,EAAU46B,IAAYM,EAAAA,cAAeC,CAAAA,SAAS,CAAG3pB,GAAeG,UAAU,GAAKE,GAAeF,UAAU,GAExGypB,EAAmBhK,YAAYC,GAAG,GAClCvkB,EAAM9M,EAAQgP,kBAAkB,CAACisB,EAAShsB,EAAaC,GAS7D,OARAze,QAAO0B,CAAAA,IAAI,CAAC,+BAA+Bi/B,CAAAA,YAAYC,GAAG,GAAK+J,CAAe,EAAE,MAChF3qC,QAAO0B,CAAAA,IAAI,CAAC,yCAAyCi/B,CAAAA,YAAYC,GAAG,GAAKwJ,CAAa,EAAE,MAzE/E/pC,EA0EC2N,mBAAmB,CAAGpD,KAAAA,EAMzByR,EACT,EAEAuuB,EAAAA,YAUC,CAVDA,SAAa5V,CAAe,CAAE1U,CAAqB,EACjD,IAAMimB,EAAY5F,YAAYC,GAAG,GAC3BiK,EAAgBrX,GAAY9yB,KAAK,CAACs0B,EAAS1U,GAOjD,OANAtgB,QAAO0B,CAAAA,IAAI,CAAC,qCAAqCi/B,CAAAA,YAAYC,GAAG,GAAK2F,CAAQ,EAAE,MAMxEsE,CACT,EA7FWxqC,EASJC,cAUN,CAVD,SAAsBtB,CAAa,CAAE8rC,CAAa,CAAEC,CAAe,EACjE,IAAM7S,EAAW,IAAI,CAAC8S,mBAAmB,CAACrmC,GAAG,GAQ7C,OAPAuzB,EAASv5B,GAAG,CACVK,GAMKk5B,CACT,EAnBW73B,EAqBJE,WAIN,CAJD,SAAmB3B,CAAqB,CAAEC,CAAmB,EAC3D,IAAMupB,EAAQ,IAAI,CAAC6iB,gBAAgB,CAACtmC,GAAG,GAEvC,OADAyjB,EAAMzpB,GAAG,CAACC,EAAOC,GACVupB,CACT,EAzBW/nB,CA2GZ,GA3GYA,CAAAA,GACIkqC,OAAAA,CAAUhK,GAAmBlqC,MAAM,GADvCgK,GAEI2qC,mBAAAA,CAAsB/rC,GAAeC,gBAAgB,CAACH,IAF1DsB,GAGI4qC,gBAAAA,CAAmBhsC,GAAeC,gBAAgB,CAACR,ICVvDwsC,IAAAA,GAAW,QAOxBC,QAAQC,GAAG,CAAC,sCAAsCF,GAAtC"}